summaryrefslogtreecommitdiff
path: root/chinese/enscript/files/patch-chinese-escript
diff options
context:
space:
mode:
Diffstat (limited to 'chinese/enscript/files/patch-chinese-escript')
-rw-r--r--chinese/enscript/files/patch-chinese-escript235
1 files changed, 235 insertions, 0 deletions
diff --git a/chinese/enscript/files/patch-chinese-escript b/chinese/enscript/files/patch-chinese-escript
new file mode 100644
index 000000000000..a57d2ecc85e6
--- /dev/null
+++ b/chinese/enscript/files/patch-chinese-escript
@@ -0,0 +1,235 @@
+diff -ruN src.orib/gsint.h src/gsint.h
+--- src.orib/gsint.h Thu May 13 12:41:04 2004
++++ src/gsint.h Thu May 13 12:58:29 2004
+@@ -190,7 +190,9 @@
+ ENC_VMS,
+ ENC_HP8,
+ ENC_KOI8,
+- ENC_PS
++ ENC_PS,
++ ENC_BIG5,
++ ENC_UNICNS_UTF8,
+ } InputEncoding;
+
+ struct encoding_registry_st
+diff -ruN src.orib/main.c src/main.c
+--- src.orib/main.c Thu May 13 12:41:04 2004
++++ src/main.c Thu May 13 12:42:28 2004
+@@ -817,6 +817,8 @@
+ {{"koi8", NULL, NULL}, ENC_KOI8, '\n', 8},
+ {{"ps", "PS", NULL}, ENC_PS, '\n', 8},
+ {{"pslatin1", "ISOLatin1Encoding", NULL}, ENC_ISO_8859_1, '\n', 8},
++ {{"big5", "Formal Chinese", NULL}, ENC_BIG5, '\n', 8},
++ {{"UniCNS-UTF8", "Formal Chinese", NULL}, ENC_UNICNS_UTF8, '\n', 8},
+
+ {{NULL, NULL, NULL}, 0, 0, 0},
+ };
+diff -ruN src.orib/psgen.c src/psgen.c
+--- src.orib/psgen.c Thu May 13 12:41:04 2004
++++ src/psgen.c Thu May 13 12:53:07 2004
+@@ -323,15 +323,21 @@
+ if (!paste_file ("enscript", ".pro"))
+ FATAL ((stderr, _("couldn't find prolog \"%s\": %s\n"), "enscript.pro",
+ strerror (errno)));
++ if (encoding == ENC_BIG5 || encoding == ENC_UNICNS_UTF8)
++ { /*overwrite the defintion of MF for CJK */
++ OUTPUT((cofp, "/MF {exch findfont definefont pop} def\n"));
++ }
+ OUTPUT ((cofp, "%%%%EndResource\n"));
+
+ /* Encoding vector. */
+- OUTPUT ((cofp, "%%%%BeginResource: procset Enscript-Encoding-%s %s\n",
+- encoding_name, ps_version_string));
+- if (!paste_file (encoding_name, ".enc"))
+- FATAL ((stderr, _("couldn't find encoding file \"%s.enc\": %s\n"),
+- encoding_name, strerror (errno)));
+- OUTPUT ((cofp, "%%%%EndResource\n"));
++ if (encoding != ENC_BIG5 && encoding != ENC_UNICNS_UTF8) {
++ OUTPUT ((cofp, "%%%%BeginResource: procset Enscript-Encoding-%s %s\n",
++ encoding_name, ps_version_string));
++ if (!paste_file (encoding_name, ".enc"))
++ FATAL ((stderr, _("couldn't find encoding file \"%s.enc\": %s\n"),
++ encoding_name, strerror (errno)));
++ OUTPUT ((cofp, "%%%%EndResource\n"));
++ }
+
+ OUTPUT ((cofp, "%%%%EndProlog\n"));
+
+@@ -1129,7 +1135,12 @@
+ /* Help macros. */
+
+ /* Check if character <ch> fits to current line. */
+-#define FITS_ON_LINE(ch) ((linepos + CHAR_WIDTH (ch) < linew) || col == 0)
++/* NO wraping for CJK at this moment. Added by C.S. Chin Sept.1 */
++
++#define FITS_ON_LINE(ch) ( ( (encoding == ENC_BIG5 && b5firstc) ||\
++ (encoding == ENC_UNICNS_UTF8 && u8firstc) ) ?\
++ (linepos + 2 * CHAR_WIDTH (ch) < linew) :\
++ (linepos + CHAR_WIDTH (ch) < linew || in_u8) )
+
+ /* Is line buffer empty? */
+ #define BUFFER_EMPTY() (bufpos == 0)
+@@ -1594,8 +1605,12 @@
+ static unsigned int buflen = 0; /* output buffer's length */
+ unsigned int bufpos = 0; /* current position in output buffer */
+ int ch = 0;
++ int ch2 = 0;
+ int done = 0;
+ int i;
++ int b5firstc = 0;
++ int u8firstc = 0;
++ int in_u8 = 0;
+ static int pending_token = tNONE;
+ unsigned int original_col = col;
+
+@@ -1745,6 +1760,39 @@
+ break;
+ }
+
++ /*Check for big5 characters*/
++ if (encoding == ENC_BIG5)
++ {
++ if (ch >= 161 && ch <= 249 && b5firstc == 0)
++ {
++ ch2 = is_getc (is);
++ if ((ch2 >= 161 && ch2 <=254) || (ch2 >=64 && ch2 <= 126)) /*big5 char*/
++ {
++ b5firstc = 1;
++ } else {
++ b5firstc = 0;
++ }
++ is_ungetc(ch2, is);
++ } else {
++ b5firstc = 0;
++ }
++ }
++
++ /*Check for utf8 character*/
++ if (encoding == ENC_UNICNS_UTF8)
++ {
++ if (ch >= 0340 && u8firstc==0) {
++ u8firstc = 1;
++ } else {
++ u8firstc = 0;
++ }
++ if (ch >= 0200) {
++ in_u8 = 1;
++ } else {
++ in_u8 = 0;
++ }
++ }
++
+ /* Check normal characters. */
+ if (EXISTS (ch))
+ {
+diff -ruN src.orib/util.c src/util.c
+--- src.orib/util.c Thu May 13 12:41:04 2004
++++ src/util.c Thu May 13 12:56:31 2004
+@@ -890,11 +890,18 @@
+ * Do not report failures for "Courier*" fonts because
+ * AFM library's default font will fix them.
+ */
+- if (strncmp (Fname, COUR, strlen (COUR)) != 0)
+- MESSAGE (0,
+- (stderr,
+- _("couldn't open AFM file for font \"%s\", using default\n"),
+- Fname));
++ if (strncmp (Fname, COUR, strlen (COUR)) != 0) {
++ if (encoding == ENC_BIG5 || encoding == ENC_UNICNS_UTF8)
++ { MESSAGE(0,
++ (stderr,
++ _("CJK encoding, ignore AFM file, use default.\n"),Fname));
++ } else {
++ MESSAGE (0,
++ (stderr,
++ _("couldn't open AFM file for font \"%s\", using default\n"),
++ Fname));
++ }
++ }
+ error = afm_open_default_font (afm, &font);
+ if (error != AFM_SUCCESS)
+ {
+@@ -997,6 +1004,12 @@
+ case ENC_PS:
+ /* Let's use font's default encoding -- nothing here. */
+ break;
++ case ENC_BIG5:
++ /* CJK encoding, ignore AFM, added by C.S.Chin Aug.31 00 */
++ break;
++ case ENC_UNICNS_UTF8:
++ /* CJK encoding, ignore AFM, added by C.S.Chin Aug.31 00 */
++ break;
+ }
+
+ /* Put it to the AFM cache. */
+@@ -1006,20 +1019,56 @@
+
+ font_info = (CachedFontInfo *) xcalloc (1, sizeof (*font_info));
+ /* Read character widths and types. */
+- for (i = 0; i < 256; i++)
+- {
+- AFMNumber w0x, w0y;
+-
+- (void) afm_font_charwidth (font, Fpt.w, i, &w0x, &w0y);
+- font_info->font_widths[i] = w0x;
+-
+- if (font->encoding[i] == AFM_ENC_NONE)
+- font_info->font_ctype[i] = ' ';
+- else if (font->encoding[i] == AFM_ENC_NON_EXISTENT)
+- font_info->font_ctype[i] = '.';
+- else
+- font_info->font_ctype[i] = '*';
+- }
++ if (encoding != ENC_BIG5 && encoding != ENC_UNICNS_UTF8) {
++ for (i = 0; i < 256; i++)
++ {
++ AFMNumber w0x, w0y;
++
++ (void) afm_font_charwidth (font, Fpt.w, i, &w0x, &w0y);
++ font_info->font_widths[i] = w0x;
++
++ if (font->encoding[i] == AFM_ENC_NONE)
++ font_info->font_ctype[i] = ' ';
++ else if (font->encoding[i] == AFM_ENC_NON_EXISTENT)
++ font_info->font_ctype[i] = '.';
++ else
++ font_info->font_ctype[i] = '*';
++ }
++ } else {
++ if (encoding == ENC_BIG5)
++ {
++ for (i = 0; i < 256; i++)
++ {
++ AFMNumber w0x, w0y;
++ if ( i < 040 )
++ {
++ font_info->font_widths[i] = Fpt.w * 0.525;
++ font_info->font_ctype[i] = ' ';
++ } else {
++ font_info->font_widths[i] = Fpt.w * 0.525;
++ font_info->font_ctype[i] = '*';
++ }
++ }
++ } else {
++ /*UTF8*/
++ for (i = 0; i < 256; i++)
++ {
++ AFMNumber w0x, w0y;
++ if ( i < 040 )
++ {
++ font_info->font_widths[i] = Fpt.w * 0.525;
++ font_info->font_ctype[i] = ' ';
++ } else {
++ if (i >= 0200) {
++ font_info->font_widths[i] = Fpt.w * 0.525 * 2.0 / 3.0;
++ } else {
++ font_info->font_widths[i] = Fpt.w * 0.525;
++ }
++ font_info->font_ctype[i] = '*';
++ }
++ }
++ }
++ }
+
+ font_info->font_is_fixed
+ = font->writing_direction_metrics[0].IsFixedPitch;