[gs-bugs] [Bug 692381] utf8-Ghostscript - Incompatible changes to the GSAPI/GSDLL interfaces
bugzilla-daemon at ghostscript.com
bugzilla-daemon at ghostscript.com
Thu Jul 28 11:17:12 UTC 2011
http://bugs.ghostscript.com/show_bug.cgi?id=692381
--- Comment #2 from SaGS <sags5495 at hotmail.com> 2011-07-28 11:17:11 UTC ---
List of GSAPI and GSDLL interface elements, and my opinion on what has to
change and what can/must remain as-is:
FUNCTIONS THAT CHANGE by backwards-compatile additions -------
gsapi_revision()
gsdll_revision()
Taking a shortcut here: the ‘product’ and ‘copyright’ strings always
consist of 1-byte 7-bit ASCII characters; the character encoding used
does not vary and there are no "A/W/8" variants.
The ‘product’ changes to optionnaly include a ‘built-in features’ list.
This list follows the product name proper, is enclosed in square
brackets, and consists of space-delimited predefined tokens.
There is currently only one such feature:
utf8osops If present, operators that interface with the host os
interpret any [PostScript] strings they take as parameters
as being UTF-8 encoded. Note: no initial BOM is expected or
allowed.
If absent, these PostScript strings are assumed to use the
same encoding as the host os. For Windows this is the ANSII
codepage in effect, and currently happens (i) for GS versions
9.02 and earlier and (ii) for versions 9.04 and later when
compiled with the option WIDNOWS_NO_UNICODE. For the other
platforms, this is the only case currently implemented.
Note: GS 9.03 does not return this information, although it
can be compiled with or without this feature.
FUNCTIONS THAT CHANGE because they need encoding-specific variants -------
It turs out there are only 3 of these (2 x GSAPI + 1 x GSDLL).
gsapi_init_with_args() gsdll_init()
gsapi_run_file()
These functions need "A/W/8" variants for the possible encoding used by
the ‘argv’ and ‘file_name’ parameters. The ‘callback’ parameter of
gsdll_init() does not vary depending on a character encoding, see below
why (GSDLL_CALLBACK detailed by message).
FUNCTIONS THAT DO NOT CHANGE -------
gsapi_new_instance() GSDLL_CALLBACK message GSDLL_POLL
gsapi_delete_instance()
gsapi_run_string_begin() gsdll_execute_begin()
gsapi_run_string_end() gsdll_execute_end()
gsapi_exit() gsdll_exit()
gsapi_set_poll()
the poll_fn() callback passed to gsapi_set_poll()
These functions do not manipulate character data, and do not have any
char/ char[]/ char* parameters, so they do not need any change.
gsapi_run_string_continue() gsdll_execute_cont()
gsapi_run_string_with_length()
gsapi_run_string()
gsapi_set_stdio()
the stdin_fn() for gsapi_set_stdio() GSDLL_CALLBACK message GSDLL_STDIN
the stdout_fn() for gsapi_set_stdio() GSDLL_CALLBACK message GSDLL_STDOUT
the stderr_fn() for gsapi_set_stdio()
Character buffers handled by these functions are actually fragments from
the PostScript interpreter’s input/ output/ error streams, and as such
are goverend by the PostScript syntax and semantics. Nothing here depends
on the encodind used by the host os for textual information, so these
functions don’t change (no "A/W/8" variants of them).
gsdll_lock_device() GSDLL_CALLBACK message GSDLL_DEVICE
gsdll_copy_dib() GSDLL_CALLBACK message GSDLL_SYNC
gsdll_copy_palette() GSDLL_CALLBACK message GSDLL_PAGE
gsdll_draw() GSDLL_CALLBACK message GSDLL_SIZE
gsdll_get_bitmap_row()
The ‘device’ parameter does not point to textual information, it’s rather
of an opaque type, so not subject to character encoding.
gsdll_get_bitmap()
The ‘device’ parameter is actually of an opaque type, and not textual
information that may be subject to character encoding. The ‘pbitmap’
is a pointer to binary data. Also, this is an OS/2-specific entry
point, and the utf8 file operators are not [yet?] implemented for this
platform.
gsapi_set_display_callback()
the display_callback passed to gsapi_set_display_callback()
The only char data I found here is the ‘const char *component_name’
parameter of the display_separation() structure member. This is used
to pass SeparationNames from the PostScript program, so its contents
(including any implied encoding, although this is primarily just an array
of bytes) is dictated by the running PostScript code. No character
encoding to be specified at the GSAPI interface level.
the vd_trace_host_s pointed by a vd_trace_interface_s member
This structure is completely defined and controlled by the module that
draws the ‘trace image’, which is the GSAPI client. Hence, no need for
a character encoding contract at the GSAPI interface level.
the vd_trace_interface_s passed to gsapi_set_visual_tracer()
The only member with text data is text(..., char *ASCIIZ), and the only
place I found it used is in base\gxhintn.c::t1_hinter__paint_glyph().
From what I see, it is used to label the Visual Trace image. The text
consists of debug information (does not come from PostScript nor the
command line/ file names/ etc). I conclude the character encoding used
is currently defined by the C compiler. Having a more precise
specification of the encoding would be marginally useful. I consider
defining "A/W/8" variants of vd_trace_interface_s to be overkill.
gsapi_set_visual_tracer()
If this were a WINAPI function, it would have "A/W" variants.
But for the reasons explained above, I consider it does not need them.
--
Configure bugmail: http://bugs.ghostscript.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the gs-bugs
mailing list