SHA256
1
0
forked from pool/gnuplot
gnuplot/gnuplot-4.2.5-utf8.dif

4274 lines
137 KiB
Plaintext
Raw Blame History

--- docs/gnuplot.doc 2009-02-19 22:16:05.000000000 +0100
+++ docs/gnuplot.doc 2009-05-09 13:53:00.000000000 +0200
@@ -5871,6 +5871,7 @@
?show encoding
?encoding
?encodings
+=UTF-8
The `set encoding` command selects a character encoding.
Syntax:
set encoding {<value>}
@@ -5881,6 +5882,7 @@
iso_8859_1 - the most common Western European font used by many
Unix workstations and by MS-Windows. This encoding is
known in the PostScript world as 'ISO-Latin1'.
+ iso_8859_15 - a variant of iso_8859_1 that includes the Euro symbol
iso_8859_2 - used in Central and Eastern Europe
iso_8859_15 - a variant of iso_8859_1 that includes the Euro symbol
koi8r - popular Unix cyrillic encoding
@@ -5889,6 +5891,9 @@
cp850 - codepage for OS/2, Western Europe
cp852 - codepage for OS/2, Central and Eastern Europe
cp1250 - codepage for MS Windows, Central and Eastern Europe
+ cp1254 - codepage for MS Windows, Turkish (superset of Latin5)
+ utf8 - variable-length (multibyte) representation of Unicode
+ entry point for each character
Generally you must set the encoding before setting the terminal type.
Note that encoding is not supported by all terminal drivers and that
--- src/set.c 2009-03-28 22:22:54.000000000 +0100
+++ src/set.c 2009-05-09 13:53:00.000000000 +0200
@@ -1211,7 +1211,7 @@
temp = lookup_table(&set_encoding_tbl[0],c_token);
if (temp == S_ENC_INVALID)
- int_error(c_token, "expecting one of 'default', 'iso_8859_1', 'iso_8859_2', 'iso_8859_15', 'cp437', 'cp850', 'cp852', 'koi8r' or 'koi8u'");
+ int_error(c_token, "expecting one of 'default', 'utf8', 'iso_8859_1', 'iso_8859_2', 'iso_8859_9', 'iso_8859_15', 'cp437', 'cp850', 'cp852', 'koi8r', or 'koi8u'");
c_token++;
}
encoding = temp;
--- src/term.c 2008-12-15 05:18:36.000000000 +0100
+++ src/term.c 2009-05-09 13:53:00.000000000 +0200
@@ -134,19 +134,23 @@
enum set_encoding_id encoding;
/* table of encoding names, for output of the setting */
const char *encoding_names[] = {
- "default", "iso_8859_1", "iso_8859_2", "iso_8859_15",
- "cp437", "cp850", "cp852", "cp1250", "koi8r", "koi8u", NULL };
+ "default", "iso_8859_1", "iso_8859_2", "iso_8859_9", "iso_8859_15",
+ "cp437", "cp850", "cp852", "cp1250", "cp1254", "koi8r", "koi8u",
+ "utf8", NULL };
/* 'set encoding' options */
const struct gen_table set_encoding_tbl[] =
{
{ "def$ault", S_ENC_DEFAULT },
+ { "utf$8", S_ENC_UTF8 },
{ "iso$_8859_1", S_ENC_ISO8859_1 },
{ "iso_8859_2", S_ENC_ISO8859_2 },
+ { "iso_8859_9", S_ENC_ISO8859_9 },
{ "iso_8859_15", S_ENC_ISO8859_15 },
{ "cp4$37", S_ENC_CP437 },
{ "cp850", S_ENC_CP850 },
{ "cp852", S_ENC_CP852 },
{ "cp1250", S_ENC_CP1250 },
+ { "cp1254", S_ENC_CP1254 },
{ "koi8$r", S_ENC_KOI8_R },
{ "koi8$u", S_ENC_KOI8_U },
{ NULL, S_ENC_INVALID }
@@ -945,7 +949,7 @@
void
write_multiline(
- unsigned int x, unsigned y,
+ unsigned int x, unsigned int y,
char *text,
JUSTIFY hor, /* horizontal ... */
VERT_JUSTIFY vert, /* ... and vertical just - text in hor direction despite angle */
diff -U 3 -H -d -r -N -- src/term_api.h src/term_api.h
--- src/term_api.h 2008-12-15 05:18:36.000000000 +0100
+++ src/term_api.h 2009-05-09 13:53:00.000000000 +0200
@@ -124,7 +124,9 @@
TERM_LAYER_RESET,
TERM_LAYER_BACKTEXT,
TERM_LAYER_FRONTTEXT,
- TERM_LAYER_END_TEXT
+ TERM_LAYER_END_TEXT,
+ TERM_LAYER_BEFORE_PLOT,
+ TERM_LAYER_AFTER_PLOT
} t_termlayer;
typedef struct fill_style_type {
@@ -134,8 +136,9 @@
int border_linetype;
} fill_style_type;
-typedef enum t_fillstyle { FS_EMPTY, FS_SOLID, FS_PATTERN, FS_DEFAULT }
- t_fillstyle;
+typedef enum t_fillstyle { FS_EMPTY, FS_SOLID, FS_PATTERN, FS_DEFAULT,
+ FS_TRANSPARENT_SOLID, FS_TRANSPARENT_PATTERN }
+ t_fillstyle;
#define FS_OPAQUE (FS_SOLID + (100<<4))
#ifdef WITH_IMAGE
@@ -159,6 +162,7 @@
#define TERM_ENHANCED_TEXT 32 /* enhanced text mode is enabled */
#define TERM_NO_OUTPUTFILE 64 /* terminal doesnt write to a file */
#define TERM_CAN_CLIP 128 /* terminal does its own clipping */
+#define TERM_CAN_DASH 256 /* terminal supports dashed lines */
/* The terminal interface structure --- heart of the terminal layer.
*
@@ -254,6 +258,11 @@
*/
void (*path) __PROTO((int p));
+/* Scale factor for converting terminal coordinates to output
+ * pixel coordinates. Used to provide data for external mousing code.
+ */
+ double tscale;
+
} TERMENTRY;
#ifdef WIN16
@@ -263,9 +272,10 @@
#endif
enum set_encoding_id {
- S_ENC_DEFAULT, S_ENC_ISO8859_1, S_ENC_ISO8859_2, S_ENC_ISO8859_15,
- S_ENC_CP437, S_ENC_CP850, S_ENC_CP852, S_ENC_CP1250,
- S_ENC_KOI8_R, S_ENC_KOI8_U,
+ S_ENC_DEFAULT, S_ENC_ISO8859_1, S_ENC_ISO8859_2, S_ENC_ISO8859_9, S_ENC_ISO8859_15,
+ S_ENC_CP437, S_ENC_CP850, S_ENC_CP852, S_ENC_CP1250, S_ENC_CP1254,
+ S_ENC_KOI8_R, S_ENC_KOI8_U,
+ S_ENC_UTF8,
S_ENC_INVALID
};
diff -U 3 -H -d -r -N -- src/util.c src/util.c
--- src/util.c 2009-02-09 05:43:44.000000000 +0100
+++ src/util.c 2009-05-09 13:53:00.000000000 +0200
@@ -1218,3 +1218,85 @@
return fullname;
}
+
+TBOOLEAN contains8bit(const char *s)
+{
+ while (*s) {
+ if ((*s++ & 0x80))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+#define INVALID_UTF8 0xfffful
+
+/* Read from second byte to end of UTF-8 sequence.
+ used by utftoulong() */
+TBOOLEAN
+utf8_getmore (unsigned long * wch, const char **str, int nbytes)
+{
+ int i;
+ unsigned char c;
+ unsigned long minvalue[] = {0x80, 0x800, 0x10000, 0x200000, 0x4000000};
+
+ for (i = 0; i < nbytes; i++) {
+ c = (unsigned char) **str;
+
+ if ((c & 0xc0) != 0x80) {
+ *wch = INVALID_UTF8;
+ return FALSE;
+ }
+ *wch = (*wch << 6) | (c & 0x3f);
+ (*str)++;
+ }
+
+ /* check for overlong UTF-8 sequences */
+ if (*wch < minvalue[nbytes-1]) {
+ *wch = INVALID_UTF8;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/* Convert UTF-8 multibyte sequence from string to unsigned long character.
+ Returns TRUE on success.
+*/
+TBOOLEAN
+utf8toulong (unsigned long * wch, const char ** str)
+{
+ unsigned char c;
+
+ c = (unsigned char) *(*str)++;
+ if ((c & 0x80) == 0) {
+ *wch = (unsigned long) c;
+ return TRUE;
+ }
+
+ if ((c & 0xe0) == 0xc0) {
+ *wch = c & 0x1f;
+ return utf8_getmore(wch, str, 1);
+ }
+
+ if ((c & 0xf0) == 0xe0) {
+ *wch = c & 0x0f;
+ return utf8_getmore(wch, str, 2);
+ }
+
+ if ((c & 0xf8) == 0xf0) {
+ *wch = c & 0x07;
+ return utf8_getmore(wch, str, 3);
+ }
+
+ if ((c & 0xfc) == 0xf8) {
+ *wch = c & 0x03;
+ return utf8_getmore(wch, str, 4);
+ }
+
+ if ((c & 0xfe) == 0xfc) {
+ *wch = c & 0x01;
+ return utf8_getmore(wch, str, 5);
+ }
+
+ *wch = INVALID_UTF8;
+ return FALSE;
+}
diff -U 3 -H -d -r -N -- term/Makefile.am.in term/Makefile.am.in
--- term/Makefile.am.in 2006-06-20 00:02:46.000000000 +0200
+++ term/Makefile.am.in 2009-05-09 13:53:00.000000000 +0200
@@ -13,7 +13,7 @@
postscript_DATA = PostScript/8859-15.ps PostScript/8859-1.ps\
PostScript/8859-2.ps PostScript/cp1250.ps PostScript/cp437.ps\
PostScript/cp850.ps PostScript/cp852.ps PostScript/koi8r.ps PostScript/koi8u.ps\
- PostScript/prologue.ps
+ PostScript/prologue.ps PostScript/utf-8.ps PostScript/aglfn.txt PostScript/NOTE.aglfn
Makefile.am: Makefile.am.in
rm -f $@ $@t
diff -U 3 -H -d -r -N -- term/PostScript/8859-1.ps term/PostScript/8859-1.ps
--- term/PostScript/8859-1.ps 2006-03-24 22:48:47.000000000 +0100
+++ term/PostScript/8859-1.ps 2009-05-09 13:53:00.000000000 +0200
@@ -1,3 +1,6 @@
+%
+% Encoding for ISO-8859-1 (also called Latin1)
+%
/reencodeISO {
dup dup findfont dup length dict begin
{ 1 index /FID ne { def }{ pop pop } ifelse } forall
diff -U 3 -H -d -r -N -- term/PostScript/8859-15.ps term/PostScript/8859-15.ps
--- term/PostScript/8859-15.ps 2006-03-24 22:48:47.000000000 +0100
+++ term/PostScript/8859-15.ps 2009-05-09 13:53:00.000000000 +0200
@@ -1,3 +1,6 @@
+%
+% Encoding for ISO-8859-15 (also called Latin9)
+%
/reencodeISO15 {
dup dup findfont dup length dict begin
{ 1 index /FID ne { def }{ pop pop } ifelse } forall
diff -U 3 -H -d -r -N -- term/PostScript/8859-2.ps term/PostScript/8859-2.ps
--- term/PostScript/8859-2.ps 2006-08-12 00:35:05.000000000 +0200
+++ term/PostScript/8859-2.ps 2009-05-09 13:53:00.000000000 +0200
@@ -1,4 +1,5 @@
-% Encoding for ISO-8859-2 (also called as Latin-2), with
+%
+% Encoding for ISO-8859-2 (also called Latin2), with
% minor differences to "true" ISO-8859-2 (*commaaccent
% instead of *cedilla for sStT -> incorrect in ISO-8859-2,
% the standard will probably be modified in this respect)
diff -U 3 -H -d -r -N -- term/PostScript/8859-9.ps term/PostScript/8859-9.ps
--- term/PostScript/8859-9.ps 1970-01-01 01:00:00.000000000 +0100
+++ term/PostScript/8859-9.ps 2009-05-09 13:53:00.000000000 +0200
@@ -0,0 +1,44 @@
+%
+% Encoding for ISO_8859_9 (also called Latin5)
+% Plus code points 80-9F used in Codepage 1254
+%
+/reencodeISO9 {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding ISOLatin5Encoding def } if
+} if
+currentdict end definefont
+} def
+/ISOLatin5Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/Euro/.notdef/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+/circumflex/perthousand/Scaron/guilsinglleft/OE/.notdef/.notdef/.notdef
+/.notdef/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+/tilde/trademark/scaron/guilsinglright/oe/.notdef/.notdef/Ydieresis
+/.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar
+/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot
+/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior
+/acute/mu/paragraph/bullet/cedilla/onesuperior/ordmasculine
+/guillemotright/onequarter/onehalf/threequarters/questiondown
+/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Gbreve/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Idotaccent
+/Scedilla/germandbls/agrave/aacute/acircumflex/atilde/adieresis
+/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
+/iacute/icircumflex/idieresis/gbreve/ntilde/ograve/oacute/ocircumflex
+/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis
+/dotlessi/scedilla/ydieresis
+] def
diff -U 3 -H -d -r -N -- term/PostScript/NOTE.aglfn term/PostScript/NOTE.aglfn
--- term/PostScript/NOTE.aglfn 1970-01-01 01:00:00.000000000 +0100
+++ term/PostScript/NOTE.aglfn 2009-05-09 13:53:00.000000000 +0200
@@ -0,0 +1,2 @@
+The document aglfn.txt was obtained from http://www.adobe.com/devnet/opentype/archives/aglfn.txt
+Do never change this document as this is not allowed by the license found therein.
diff -U 3 -H -d -r -N -- term/PostScript/aglfn.txt term/PostScript/aglfn.txt
--- term/PostScript/aglfn.txt 1970-01-01 01:00:00.000000000 +0100
+++ term/PostScript/aglfn.txt 2009-05-09 13:53:00.000000000 +0200
@@ -0,0 +1,932 @@
+# ###################################################################################
+# Copyright (c) 2003,2005,2006,2007 Adobe Systems Incorporated
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this documentation file to use, copy, publish, distribute,
+# sublicense, and/or sell copies of the documentation, and to permit
+# others to do the same, provided that:
+# - No modification, editing or other alteration of this document is
+# allowed; and
+# - The above copyright notice and this permission notice shall be
+# included in all copies of the documentation.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this documentation file, to create their own derivative works
+# from the content of this document to use, copy, publish, distribute,
+# sublicense, and/or sell the derivative works, and to permit others to do
+# the same, provided that the derived work is not represented as being a
+# copy or version of this document.
+#
+# Adobe shall not be liable to any party for any loss of revenue or profit
+# or for indirect, incidental, special, consequential, or other similar
+# damages, whether based on tort (including without limitation negligence
+# or strict liability), contract or other legal or equitable grounds even
+# if Adobe has been advised or had reason to know of the possibility of
+# such damages.<2E> The Adobe materials are provided on an "AS IS" basis.<2E>
+# Adobe specifically disclaims all express, statutory, or implied
+# warranties relating to the Adobe materials, including but not limited to
+# those concerning merchantability or fitness for a particular purpose or
+# non-infringement of any third party rights regarding the Adobe
+# materials.
+# ###################################################################################
+# Name: Adobe Glyph List For New Fonts
+# Table version: 1.6
+# Date: 30 Januaury 2006
+#
+# Description:
+#
+# The Adobe Glyph List For New Fonts (AGLFN) is meant to provide a list of
+# base glyph names which are compatible with the AGL specification at
+# http://partners.adobe.com/asn/developer/type/unicodegn.html.
+# and which can be used as described in section 6 of that document.
+#
+# This list comprises the set of glyph names from the AGLv2,0 which map
+# to via the AGL rules to the semanticly correct Unicode value. For
+# example, Asmall is omitted as the AGL maps this to the Unicode
+# Private Use Area value F761, rather than to the Unicode value for the
+# character "A". "ffi" is also omitted, as the AGL maps this to the
+# Alphabetic Presentation Forms Area value FB03, rather than
+# decomposing it to the three-value Unicode sequence 0066,0066,0069.
+# See section 7.1 of the Unicode Standard 4.0 on this issue.
+# "arrowvertex" is omitted becuase this now has a real Unicode
+# character value, and the AGL is now incorrect in mapping this to the
+# Private Use Area value F8E6.
+#
+# If you do not find an appropriate name for your glyph in this list,
+# then please refer to section 6 of the document:
+# http://partners.adobe.com/asn/developer/typeforum/unicodegn.html.
+#
+# The Unicode values and names are given for convenience.
+#
+# Format: Semicolon-delimited fields:
+#
+# (1) Standard UV or CUS UV. (4 uppercase hexadecimal digits)
+#
+# (2) Glyph name. (upper- and lowercase letters, digits)
+#
+# (3) Character names: Unicode character names for standard UVs, and
+# descriptive names for CUS UVs. (uppercase letters, hyphen, space)
+#
+# The entries are sorted by glyph name in increasing ASCII order; entries
+# with the same glyph name are sorted in decreasing priority order.
+#
+# Lines starting with "#" are comments; blank lines should be ignored.
+#
+# 1.6 [30 January 2006]
+# - Completed work intended in 1.5
+#
+# 1.5 [23 November 2005]
+# - removed duplicated block at end of file
+# - changed mappings:
+# 2206;Delta;INCREMENT changed to 0394;Delta;GREEK CAPITAL LETTER DELTA
+# 2126;Omega;OHM SIGN changed to 03A9;Omega;GREEK CAPITAL LETTER OMEGA
+# 03BC;mu;MICRO SIGN changed to 03BC;mu;GREEK SMALL LETTER MU
+# - corrected statement above about why ffi is omitted.
+
+# 1.4 [24 September 2003] Changed version to 1.4, to avoid confusion
+# with the AGL 1.3
+# fixed spelling errors in the header
+# fully removed arrowvertex, as it is mapped only to a PUA Unicode value in some fonts.
+#
+# 1.1 [17 April 2003] Renamed [Tt]cedilla back to [Tt]commaaccent:
+#
+# 1.0 [31 Jan 2003] Original version. Derived from the AGLv1.2 by:
+# - removing the PUA area codes
+# - removing duplicate Unicode mappings, and
+# - renaming tcommaaccent to tcedilla and Tcommaaccent to Tcedilla
+#
+0041;A;LATIN CAPITAL LETTER A
+00C6;AE;LATIN CAPITAL LETTER AE
+01FC;AEacute;LATIN CAPITAL LETTER AE WITH ACUTE
+00C1;Aacute;LATIN CAPITAL LETTER A WITH ACUTE
+0102;Abreve;LATIN CAPITAL LETTER A WITH BREVE
+00C2;Acircumflex;LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C4;Adieresis;LATIN CAPITAL LETTER A WITH DIAERESIS
+00C0;Agrave;LATIN CAPITAL LETTER A WITH GRAVE
+0391;Alpha;GREEK CAPITAL LETTER ALPHA
+0386;Alphatonos;GREEK CAPITAL LETTER ALPHA WITH TONOS
+0100;Amacron;LATIN CAPITAL LETTER A WITH MACRON
+0104;Aogonek;LATIN CAPITAL LETTER A WITH OGONEK
+00C5;Aring;LATIN CAPITAL LETTER A WITH RING ABOVE
+01FA;Aringacute;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+00C3;Atilde;LATIN CAPITAL LETTER A WITH TILDE
+0042;B;LATIN CAPITAL LETTER B
+0392;Beta;GREEK CAPITAL LETTER BETA
+0043;C;LATIN CAPITAL LETTER C
+0106;Cacute;LATIN CAPITAL LETTER C WITH ACUTE
+010C;Ccaron;LATIN CAPITAL LETTER C WITH CARON
+00C7;Ccedilla;LATIN CAPITAL LETTER C WITH CEDILLA
+0108;Ccircumflex;LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A;Cdotaccent;LATIN CAPITAL LETTER C WITH DOT ABOVE
+03A7;Chi;GREEK CAPITAL LETTER CHI
+0044;D;LATIN CAPITAL LETTER D
+010E;Dcaron;LATIN CAPITAL LETTER D WITH CARON
+0110;Dcroat;LATIN CAPITAL LETTER D WITH STROKE
+0394;Delta;GREEK CAPITAL LETTER DELTA
+0045;E;LATIN CAPITAL LETTER E
+00C9;Eacute;LATIN CAPITAL LETTER E WITH ACUTE
+0114;Ebreve;LATIN CAPITAL LETTER E WITH BREVE
+011A;Ecaron;LATIN CAPITAL LETTER E WITH CARON
+00CA;Ecircumflex;LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB;Edieresis;LATIN CAPITAL LETTER E WITH DIAERESIS
+0116;Edotaccent;LATIN CAPITAL LETTER E WITH DOT ABOVE
+00C8;Egrave;LATIN CAPITAL LETTER E WITH GRAVE
+0112;Emacron;LATIN CAPITAL LETTER E WITH MACRON
+014A;Eng;LATIN CAPITAL LETTER ENG
+0118;Eogonek;LATIN CAPITAL LETTER E WITH OGONEK
+0395;Epsilon;GREEK CAPITAL LETTER EPSILON
+0388;Epsilontonos;GREEK CAPITAL LETTER EPSILON WITH TONOS
+0397;Eta;GREEK CAPITAL LETTER ETA
+0389;Etatonos;GREEK CAPITAL LETTER ETA WITH TONOS
+00D0;Eth;LATIN CAPITAL LETTER ETH
+20AC;Euro;EURO SIGN
+0046;F;LATIN CAPITAL LETTER F
+0047;G;LATIN CAPITAL LETTER G
+0393;Gamma;GREEK CAPITAL LETTER GAMMA
+011E;Gbreve;LATIN CAPITAL LETTER G WITH BREVE
+01E6;Gcaron;LATIN CAPITAL LETTER G WITH CARON
+011C;Gcircumflex;LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+0122;Gcommaaccent;LATIN CAPITAL LETTER G WITH CEDILLA
+0120;Gdotaccent;LATIN CAPITAL LETTER G WITH DOT ABOVE
+0048;H;LATIN CAPITAL LETTER H
+25CF;H18533;BLACK CIRCLE
+25AA;H18543;BLACK SMALL SQUARE
+25AB;H18551;WHITE SMALL SQUARE
+25A1;H22073;WHITE SQUARE
+0126;Hbar;LATIN CAPITAL LETTER H WITH STROKE
+0124;Hcircumflex;LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0049;I;LATIN CAPITAL LETTER I
+0132;IJ;LATIN CAPITAL LIGATURE IJ
+00CD;Iacute;LATIN CAPITAL LETTER I WITH ACUTE
+012C;Ibreve;LATIN CAPITAL LETTER I WITH BREVE
+00CE;Icircumflex;LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF;Idieresis;LATIN CAPITAL LETTER I WITH DIAERESIS
+0130;Idotaccent;LATIN CAPITAL LETTER I WITH DOT ABOVE
+2111;Ifraktur;BLACK-LETTER CAPITAL I
+00CC;Igrave;LATIN CAPITAL LETTER I WITH GRAVE
+012A;Imacron;LATIN CAPITAL LETTER I WITH MACRON
+012E;Iogonek;LATIN CAPITAL LETTER I WITH OGONEK
+0399;Iota;GREEK CAPITAL LETTER IOTA
+03AA;Iotadieresis;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+038A;Iotatonos;GREEK CAPITAL LETTER IOTA WITH TONOS
+0128;Itilde;LATIN CAPITAL LETTER I WITH TILDE
+004A;J;LATIN CAPITAL LETTER J
+0134;Jcircumflex;LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+004B;K;LATIN CAPITAL LETTER K
+039A;Kappa;GREEK CAPITAL LETTER KAPPA
+0136;Kcommaaccent;LATIN CAPITAL LETTER K WITH CEDILLA
+004C;L;LATIN CAPITAL LETTER L
+0139;Lacute;LATIN CAPITAL LETTER L WITH ACUTE
+039B;Lambda;GREEK CAPITAL LETTER LAMDA
+013D;Lcaron;LATIN CAPITAL LETTER L WITH CARON
+013B;Lcommaaccent;LATIN CAPITAL LETTER L WITH CEDILLA
+013F;Ldot;LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0141;Lslash;LATIN CAPITAL LETTER L WITH STROKE
+004D;M;LATIN CAPITAL LETTER M
+039C;Mu;GREEK CAPITAL LETTER MU
+004E;N;LATIN CAPITAL LETTER N
+0143;Nacute;LATIN CAPITAL LETTER N WITH ACUTE
+0147;Ncaron;LATIN CAPITAL LETTER N WITH CARON
+0145;Ncommaaccent;LATIN CAPITAL LETTER N WITH CEDILLA
+00D1;Ntilde;LATIN CAPITAL LETTER N WITH TILDE
+039D;Nu;GREEK CAPITAL LETTER NU
+004F;O;LATIN CAPITAL LETTER O
+0152;OE;LATIN CAPITAL LIGATURE OE
+00D3;Oacute;LATIN CAPITAL LETTER O WITH ACUTE
+014E;Obreve;LATIN CAPITAL LETTER O WITH BREVE
+00D4;Ocircumflex;LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D6;Odieresis;LATIN CAPITAL LETTER O WITH DIAERESIS
+00D2;Ograve;LATIN CAPITAL LETTER O WITH GRAVE
+01A0;Ohorn;LATIN CAPITAL LETTER O WITH HORN
+0150;Ohungarumlaut;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+014C;Omacron;LATIN CAPITAL LETTER O WITH MACRON
+03A9;Omega;GREEK CAPITAL LETTER OMEGA
+038F;Omegatonos;GREEK CAPITAL LETTER OMEGA WITH TONOS
+039F;Omicron;GREEK CAPITAL LETTER OMICRON
+038C;Omicrontonos;GREEK CAPITAL LETTER OMICRON WITH TONOS
+00D8;Oslash;LATIN CAPITAL LETTER O WITH STROKE
+01FE;Oslashacute;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+00D5;Otilde;LATIN CAPITAL LETTER O WITH TILDE
+0050;P;LATIN CAPITAL LETTER P
+03A6;Phi;GREEK CAPITAL LETTER PHI
+03A0;Pi;GREEK CAPITAL LETTER PI
+03A8;Psi;GREEK CAPITAL LETTER PSI
+0051;Q;LATIN CAPITAL LETTER Q
+0052;R;LATIN CAPITAL LETTER R
+0154;Racute;LATIN CAPITAL LETTER R WITH ACUTE
+0158;Rcaron;LATIN CAPITAL LETTER R WITH CARON
+0156;Rcommaaccent;LATIN CAPITAL LETTER R WITH CEDILLA
+211C;Rfraktur;BLACK-LETTER CAPITAL R
+03A1;Rho;GREEK CAPITAL LETTER RHO
+0053;S;LATIN CAPITAL LETTER S
+250C;SF010000;BOX DRAWINGS LIGHT DOWN AND RIGHT
+2514;SF020000;BOX DRAWINGS LIGHT UP AND RIGHT
+2510;SF030000;BOX DRAWINGS LIGHT DOWN AND LEFT
+2518;SF040000;BOX DRAWINGS LIGHT UP AND LEFT
+253C;SF050000;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+252C;SF060000;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+2534;SF070000;BOX DRAWINGS LIGHT UP AND HORIZONTAL
+251C;SF080000;BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+2524;SF090000;BOX DRAWINGS LIGHT VERTICAL AND LEFT
+2500;SF100000;BOX DRAWINGS LIGHT HORIZONTAL
+2502;SF110000;BOX DRAWINGS LIGHT VERTICAL
+2561;SF190000;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+2562;SF200000;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+2556;SF210000;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+2555;SF220000;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+2563;SF230000;BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+2551;SF240000;BOX DRAWINGS DOUBLE VERTICAL
+2557;SF250000;BOX DRAWINGS DOUBLE DOWN AND LEFT
+255D;SF260000;BOX DRAWINGS DOUBLE UP AND LEFT
+255C;SF270000;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+255B;SF280000;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+255E;SF360000;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+255F;SF370000;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+255A;SF380000;BOX DRAWINGS DOUBLE UP AND RIGHT
+2554;SF390000;BOX DRAWINGS DOUBLE DOWN AND RIGHT
+2569;SF400000;BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+2566;SF410000;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+2560;SF420000;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+2550;SF430000;BOX DRAWINGS DOUBLE HORIZONTAL
+256C;SF440000;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+2567;SF450000;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+2568;SF460000;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+2564;SF470000;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+2565;SF480000;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+2559;SF490000;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+2558;SF500000;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+2552;SF510000;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+2553;SF520000;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+256B;SF530000;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+256A;SF540000;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+015A;Sacute;LATIN CAPITAL LETTER S WITH ACUTE
+0160;Scaron;LATIN CAPITAL LETTER S WITH CARON
+015E;Scedilla;LATIN CAPITAL LETTER S WITH CEDILLA
+015C;Scircumflex;LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+0218;Scommaaccent;LATIN CAPITAL LETTER S WITH COMMA BELOW
+03A3;Sigma;GREEK CAPITAL LETTER SIGMA
+0054;T;LATIN CAPITAL LETTER T
+03A4;Tau;GREEK CAPITAL LETTER TAU
+0166;Tbar;LATIN CAPITAL LETTER T WITH STROKE
+0164;Tcaron;LATIN CAPITAL LETTER T WITH CARON
+0162;Tcommaaccent;LATIN CAPITAL LETTER T WITH CEDILLA
+0398;Theta;GREEK CAPITAL LETTER THETA
+00DE;Thorn;LATIN CAPITAL LETTER THORN
+0055;U;LATIN CAPITAL LETTER U
+00DA;Uacute;LATIN CAPITAL LETTER U WITH ACUTE
+016C;Ubreve;LATIN CAPITAL LETTER U WITH BREVE
+00DB;Ucircumflex;LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC;Udieresis;LATIN CAPITAL LETTER U WITH DIAERESIS
+00D9;Ugrave;LATIN CAPITAL LETTER U WITH GRAVE
+01AF;Uhorn;LATIN CAPITAL LETTER U WITH HORN
+0170;Uhungarumlaut;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+016A;Umacron;LATIN CAPITAL LETTER U WITH MACRON
+0172;Uogonek;LATIN CAPITAL LETTER U WITH OGONEK
+03A5;Upsilon;GREEK CAPITAL LETTER UPSILON
+03D2;Upsilon1;GREEK UPSILON WITH HOOK SYMBOL
+03AB;Upsilondieresis;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+038E;Upsilontonos;GREEK CAPITAL LETTER UPSILON WITH TONOS
+016E;Uring;LATIN CAPITAL LETTER U WITH RING ABOVE
+0168;Utilde;LATIN CAPITAL LETTER U WITH TILDE
+0056;V;LATIN CAPITAL LETTER V
+0057;W;LATIN CAPITAL LETTER W
+1E82;Wacute;LATIN CAPITAL LETTER W WITH ACUTE
+0174;Wcircumflex;LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+1E84;Wdieresis;LATIN CAPITAL LETTER W WITH DIAERESIS
+1E80;Wgrave;LATIN CAPITAL LETTER W WITH GRAVE
+0058;X;LATIN CAPITAL LETTER X
+039E;Xi;GREEK CAPITAL LETTER XI
+0059;Y;LATIN CAPITAL LETTER Y
+00DD;Yacute;LATIN CAPITAL LETTER Y WITH ACUTE
+0176;Ycircumflex;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178;Ydieresis;LATIN CAPITAL LETTER Y WITH DIAERESIS
+1EF2;Ygrave;LATIN CAPITAL LETTER Y WITH GRAVE
+005A;Z;LATIN CAPITAL LETTER Z
+0179;Zacute;LATIN CAPITAL LETTER Z WITH ACUTE
+017D;Zcaron;LATIN CAPITAL LETTER Z WITH CARON
+017B;Zdotaccent;LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0396;Zeta;GREEK CAPITAL LETTER ZETA
+0061;a;LATIN SMALL LETTER A
+00E1;aacute;LATIN SMALL LETTER A WITH ACUTE
+0103;abreve;LATIN SMALL LETTER A WITH BREVE
+00E2;acircumflex;LATIN SMALL LETTER A WITH CIRCUMFLEX
+00B4;acute;ACUTE ACCENT
+0301;acutecomb;COMBINING ACUTE ACCENT
+00E4;adieresis;LATIN SMALL LETTER A WITH DIAERESIS
+00E6;ae;LATIN SMALL LETTER AE
+01FD;aeacute;LATIN SMALL LETTER AE WITH ACUTE
+2015;afii00208;HORIZONTAL BAR
+0410;afii10017;CYRILLIC CAPITAL LETTER A
+0411;afii10018;CYRILLIC CAPITAL LETTER BE
+0412;afii10019;CYRILLIC CAPITAL LETTER VE
+0413;afii10020;CYRILLIC CAPITAL LETTER GHE
+0414;afii10021;CYRILLIC CAPITAL LETTER DE
+0415;afii10022;CYRILLIC CAPITAL LETTER IE
+0401;afii10023;CYRILLIC CAPITAL LETTER IO
+0416;afii10024;CYRILLIC CAPITAL LETTER ZHE
+0417;afii10025;CYRILLIC CAPITAL LETTER ZE
+0418;afii10026;CYRILLIC CAPITAL LETTER I
+0419;afii10027;CYRILLIC CAPITAL LETTER SHORT I
+041A;afii10028;CYRILLIC CAPITAL LETTER KA
+041B;afii10029;CYRILLIC CAPITAL LETTER EL
+041C;afii10030;CYRILLIC CAPITAL LETTER EM
+041D;afii10031;CYRILLIC CAPITAL LETTER EN
+041E;afii10032;CYRILLIC CAPITAL LETTER O
+041F;afii10033;CYRILLIC CAPITAL LETTER PE
+0420;afii10034;CYRILLIC CAPITAL LETTER ER
+0421;afii10035;CYRILLIC CAPITAL LETTER ES
+0422;afii10036;CYRILLIC CAPITAL LETTER TE
+0423;afii10037;CYRILLIC CAPITAL LETTER U
+0424;afii10038;CYRILLIC CAPITAL LETTER EF
+0425;afii10039;CYRILLIC CAPITAL LETTER HA
+0426;afii10040;CYRILLIC CAPITAL LETTER TSE
+0427;afii10041;CYRILLIC CAPITAL LETTER CHE
+0428;afii10042;CYRILLIC CAPITAL LETTER SHA
+0429;afii10043;CYRILLIC CAPITAL LETTER SHCHA
+042A;afii10044;CYRILLIC CAPITAL LETTER HARD SIGN
+042B;afii10045;CYRILLIC CAPITAL LETTER YERU
+042C;afii10046;CYRILLIC CAPITAL LETTER SOFT SIGN
+042D;afii10047;CYRILLIC CAPITAL LETTER E
+042E;afii10048;CYRILLIC CAPITAL LETTER YU
+042F;afii10049;CYRILLIC CAPITAL LETTER YA
+0490;afii10050;CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0402;afii10051;CYRILLIC CAPITAL LETTER DJE
+0403;afii10052;CYRILLIC CAPITAL LETTER GJE
+0404;afii10053;CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405;afii10054;CYRILLIC CAPITAL LETTER DZE
+0406;afii10055;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407;afii10056;CYRILLIC CAPITAL LETTER YI
+0408;afii10057;CYRILLIC CAPITAL LETTER JE
+0409;afii10058;CYRILLIC CAPITAL LETTER LJE
+040A;afii10059;CYRILLIC CAPITAL LETTER NJE
+040B;afii10060;CYRILLIC CAPITAL LETTER TSHE
+040C;afii10061;CYRILLIC CAPITAL LETTER KJE
+040E;afii10062;CYRILLIC CAPITAL LETTER SHORT U
+0430;afii10065;CYRILLIC SMALL LETTER A
+0431;afii10066;CYRILLIC SMALL LETTER BE
+0432;afii10067;CYRILLIC SMALL LETTER VE
+0433;afii10068;CYRILLIC SMALL LETTER GHE
+0434;afii10069;CYRILLIC SMALL LETTER DE
+0435;afii10070;CYRILLIC SMALL LETTER IE
+0451;afii10071;CYRILLIC SMALL LETTER IO
+0436;afii10072;CYRILLIC SMALL LETTER ZHE
+0437;afii10073;CYRILLIC SMALL LETTER ZE
+0438;afii10074;CYRILLIC SMALL LETTER I
+0439;afii10075;CYRILLIC SMALL LETTER SHORT I
+043A;afii10076;CYRILLIC SMALL LETTER KA
+043B;afii10077;CYRILLIC SMALL LETTER EL
+043C;afii10078;CYRILLIC SMALL LETTER EM
+043D;afii10079;CYRILLIC SMALL LETTER EN
+043E;afii10080;CYRILLIC SMALL LETTER O
+043F;afii10081;CYRILLIC SMALL LETTER PE
+0440;afii10082;CYRILLIC SMALL LETTER ER
+0441;afii10083;CYRILLIC SMALL LETTER ES
+0442;afii10084;CYRILLIC SMALL LETTER TE
+0443;afii10085;CYRILLIC SMALL LETTER U
+0444;afii10086;CYRILLIC SMALL LETTER EF
+0445;afii10087;CYRILLIC SMALL LETTER HA
+0446;afii10088;CYRILLIC SMALL LETTER TSE
+0447;afii10089;CYRILLIC SMALL LETTER CHE
+0448;afii10090;CYRILLIC SMALL LETTER SHA
+0449;afii10091;CYRILLIC SMALL LETTER SHCHA
+044A;afii10092;CYRILLIC SMALL LETTER HARD SIGN
+044B;afii10093;CYRILLIC SMALL LETTER YERU
+044C;afii10094;CYRILLIC SMALL LETTER SOFT SIGN
+044D;afii10095;CYRILLIC SMALL LETTER E
+044E;afii10096;CYRILLIC SMALL LETTER YU
+044F;afii10097;CYRILLIC SMALL LETTER YA
+0491;afii10098;CYRILLIC SMALL LETTER GHE WITH UPTURN
+0452;afii10099;CYRILLIC SMALL LETTER DJE
+0453;afii10100;CYRILLIC SMALL LETTER GJE
+0454;afii10101;CYRILLIC SMALL LETTER UKRAINIAN IE
+0455;afii10102;CYRILLIC SMALL LETTER DZE
+0456;afii10103;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0457;afii10104;CYRILLIC SMALL LETTER YI
+0458;afii10105;CYRILLIC SMALL LETTER JE
+0459;afii10106;CYRILLIC SMALL LETTER LJE
+045A;afii10107;CYRILLIC SMALL LETTER NJE
+045B;afii10108;CYRILLIC SMALL LETTER TSHE
+045C;afii10109;CYRILLIC SMALL LETTER KJE
+045E;afii10110;CYRILLIC SMALL LETTER SHORT U
+040F;afii10145;CYRILLIC CAPITAL LETTER DZHE
+0462;afii10146;CYRILLIC CAPITAL LETTER YAT
+0472;afii10147;CYRILLIC CAPITAL LETTER FITA
+0474;afii10148;CYRILLIC CAPITAL LETTER IZHITSA
+045F;afii10193;CYRILLIC SMALL LETTER DZHE
+0463;afii10194;CYRILLIC SMALL LETTER YAT
+0473;afii10195;CYRILLIC SMALL LETTER FITA
+0475;afii10196;CYRILLIC SMALL LETTER IZHITSA
+04D9;afii10846;CYRILLIC SMALL LETTER SCHWA
+200E;afii299;LEFT-TO-RIGHT MARK
+200F;afii300;RIGHT-TO-LEFT MARK
+200D;afii301;ZERO WIDTH JOINER
+066A;afii57381;ARABIC PERCENT SIGN
+060C;afii57388;ARABIC COMMA
+0660;afii57392;ARABIC-INDIC DIGIT ZERO
+0661;afii57393;ARABIC-INDIC DIGIT ONE
+0662;afii57394;ARABIC-INDIC DIGIT TWO
+0663;afii57395;ARABIC-INDIC DIGIT THREE
+0664;afii57396;ARABIC-INDIC DIGIT FOUR
+0665;afii57397;ARABIC-INDIC DIGIT FIVE
+0666;afii57398;ARABIC-INDIC DIGIT SIX
+0667;afii57399;ARABIC-INDIC DIGIT SEVEN
+0668;afii57400;ARABIC-INDIC DIGIT EIGHT
+0669;afii57401;ARABIC-INDIC DIGIT NINE
+061B;afii57403;ARABIC SEMICOLON
+061F;afii57407;ARABIC QUESTION MARK
+0621;afii57409;ARABIC LETTER HAMZA
+0622;afii57410;ARABIC LETTER ALEF WITH MADDA ABOVE
+0623;afii57411;ARABIC LETTER ALEF WITH HAMZA ABOVE
+0624;afii57412;ARABIC LETTER WAW WITH HAMZA ABOVE
+0625;afii57413;ARABIC LETTER ALEF WITH HAMZA BELOW
+0626;afii57414;ARABIC LETTER YEH WITH HAMZA ABOVE
+0627;afii57415;ARABIC LETTER ALEF
+0628;afii57416;ARABIC LETTER BEH
+0629;afii57417;ARABIC LETTER TEH MARBUTA
+062A;afii57418;ARABIC LETTER TEH
+062B;afii57419;ARABIC LETTER THEH
+062C;afii57420;ARABIC LETTER JEEM
+062D;afii57421;ARABIC LETTER HAH
+062E;afii57422;ARABIC LETTER KHAH
+062F;afii57423;ARABIC LETTER DAL
+0630;afii57424;ARABIC LETTER THAL
+0631;afii57425;ARABIC LETTER REH
+0632;afii57426;ARABIC LETTER ZAIN
+0633;afii57427;ARABIC LETTER SEEN
+0634;afii57428;ARABIC LETTER SHEEN
+0635;afii57429;ARABIC LETTER SAD
+0636;afii57430;ARABIC LETTER DAD
+0637;afii57431;ARABIC LETTER TAH
+0638;afii57432;ARABIC LETTER ZAH
+0639;afii57433;ARABIC LETTER AIN
+063A;afii57434;ARABIC LETTER GHAIN
+0640;afii57440;ARABIC TATWEEL
+0641;afii57441;ARABIC LETTER FEH
+0642;afii57442;ARABIC LETTER QAF
+0643;afii57443;ARABIC LETTER KAF
+0644;afii57444;ARABIC LETTER LAM
+0645;afii57445;ARABIC LETTER MEEM
+0646;afii57446;ARABIC LETTER NOON
+0648;afii57448;ARABIC LETTER WAW
+0649;afii57449;ARABIC LETTER ALEF MAKSURA
+064A;afii57450;ARABIC LETTER YEH
+064B;afii57451;ARABIC FATHATAN
+064C;afii57452;ARABIC DAMMATAN
+064D;afii57453;ARABIC KASRATAN
+064E;afii57454;ARABIC FATHA
+064F;afii57455;ARABIC DAMMA
+0650;afii57456;ARABIC KASRA
+0651;afii57457;ARABIC SHADDA
+0652;afii57458;ARABIC SUKUN
+0647;afii57470;ARABIC LETTER HEH
+06A4;afii57505;ARABIC LETTER VEH
+067E;afii57506;ARABIC LETTER PEH
+0686;afii57507;ARABIC LETTER TCHEH
+0698;afii57508;ARABIC LETTER JEH
+06AF;afii57509;ARABIC LETTER GAF
+0679;afii57511;ARABIC LETTER TTEH
+0688;afii57512;ARABIC LETTER DDAL
+0691;afii57513;ARABIC LETTER RREH
+06BA;afii57514;ARABIC LETTER NOON GHUNNA
+06D2;afii57519;ARABIC LETTER YEH BARREE
+06D5;afii57534;ARABIC LETTER AE
+20AA;afii57636;NEW SHEQEL SIGN
+05BE;afii57645;HEBREW PUNCTUATION MAQAF
+05C3;afii57658;HEBREW PUNCTUATION SOF PASUQ
+05D0;afii57664;HEBREW LETTER ALEF
+05D1;afii57665;HEBREW LETTER BET
+05D2;afii57666;HEBREW LETTER GIMEL
+05D3;afii57667;HEBREW LETTER DALET
+05D4;afii57668;HEBREW LETTER HE
+05D5;afii57669;HEBREW LETTER VAV
+05D6;afii57670;HEBREW LETTER ZAYIN
+05D7;afii57671;HEBREW LETTER HET
+05D8;afii57672;HEBREW LETTER TET
+05D9;afii57673;HEBREW LETTER YOD
+05DA;afii57674;HEBREW LETTER FINAL KAF
+05DB;afii57675;HEBREW LETTER KAF
+05DC;afii57676;HEBREW LETTER LAMED
+05DD;afii57677;HEBREW LETTER FINAL MEM
+05DE;afii57678;HEBREW LETTER MEM
+05DF;afii57679;HEBREW LETTER FINAL NUN
+05E0;afii57680;HEBREW LETTER NUN
+05E1;afii57681;HEBREW LETTER SAMEKH
+05E2;afii57682;HEBREW LETTER AYIN
+05E3;afii57683;HEBREW LETTER FINAL PE
+05E4;afii57684;HEBREW LETTER PE
+05E5;afii57685;HEBREW LETTER FINAL TSADI
+05E6;afii57686;HEBREW LETTER TSADI
+05E7;afii57687;HEBREW LETTER QOF
+05E8;afii57688;HEBREW LETTER RESH
+05E9;afii57689;HEBREW LETTER SHIN
+05EA;afii57690;HEBREW LETTER TAV
+05F0;afii57716;HEBREW LIGATURE YIDDISH DOUBLE VAV
+05F1;afii57717;HEBREW LIGATURE YIDDISH VAV YOD
+05F2;afii57718;HEBREW LIGATURE YIDDISH DOUBLE YOD
+05B4;afii57793;HEBREW POINT HIRIQ
+05B5;afii57794;HEBREW POINT TSERE
+05B6;afii57795;HEBREW POINT SEGOL
+05BB;afii57796;HEBREW POINT QUBUTS
+05B8;afii57797;HEBREW POINT QAMATS
+05B7;afii57798;HEBREW POINT PATAH
+05B0;afii57799;HEBREW POINT SHEVA
+05B2;afii57800;HEBREW POINT HATAF PATAH
+05B1;afii57801;HEBREW POINT HATAF SEGOL
+05B3;afii57802;HEBREW POINT HATAF QAMATS
+05C2;afii57803;HEBREW POINT SIN DOT
+05C1;afii57804;HEBREW POINT SHIN DOT
+05B9;afii57806;HEBREW POINT HOLAM
+05BC;afii57807;HEBREW POINT DAGESH OR MAPIQ
+05BD;afii57839;HEBREW POINT METEG
+05BF;afii57841;HEBREW POINT RAFE
+05C0;afii57842;HEBREW PUNCTUATION PASEQ
+02BC;afii57929;MODIFIER LETTER APOSTROPHE
+2105;afii61248;CARE OF
+2113;afii61289;SCRIPT SMALL L
+2116;afii61352;NUMERO SIGN
+202C;afii61573;POP DIRECTIONAL FORMATTING
+202D;afii61574;LEFT-TO-RIGHT OVERRIDE
+202E;afii61575;RIGHT-TO-LEFT OVERRIDE
+200C;afii61664;ZERO WIDTH NON-JOINER
+066D;afii63167;ARABIC FIVE POINTED STAR
+02BD;afii64937;MODIFIER LETTER REVERSED COMMA
+00E0;agrave;LATIN SMALL LETTER A WITH GRAVE
+2135;aleph;ALEF SYMBOL
+03B1;alpha;GREEK SMALL LETTER ALPHA
+03AC;alphatonos;GREEK SMALL LETTER ALPHA WITH TONOS
+0101;amacron;LATIN SMALL LETTER A WITH MACRON
+0026;ampersand;AMPERSAND
+2220;angle;ANGLE
+2329;angleleft;LEFT-POINTING ANGLE BRACKET
+232A;angleright;RIGHT-POINTING ANGLE BRACKET
+0387;anoteleia;GREEK ANO TELEIA
+0105;aogonek;LATIN SMALL LETTER A WITH OGONEK
+2248;approxequal;ALMOST EQUAL TO
+00E5;aring;LATIN SMALL LETTER A WITH RING ABOVE
+01FB;aringacute;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+2194;arrowboth;LEFT RIGHT ARROW
+21D4;arrowdblboth;LEFT RIGHT DOUBLE ARROW
+21D3;arrowdbldown;DOWNWARDS DOUBLE ARROW
+21D0;arrowdblleft;LEFTWARDS DOUBLE ARROW
+21D2;arrowdblright;RIGHTWARDS DOUBLE ARROW
+21D1;arrowdblup;UPWARDS DOUBLE ARROW
+2193;arrowdown;DOWNWARDS ARROW
+2190;arrowleft;LEFTWARDS ARROW
+2192;arrowright;RIGHTWARDS ARROW
+2191;arrowup;UPWARDS ARROW
+2195;arrowupdn;UP DOWN ARROW
+21A8;arrowupdnbse;UP DOWN ARROW WITH BASE
+005E;asciicircum;CIRCUMFLEX ACCENT
+007E;asciitilde;TILDE
+002A;asterisk;ASTERISK
+2217;asteriskmath;ASTERISK OPERATOR
+0040;at;COMMERCIAL AT
+00E3;atilde;LATIN SMALL LETTER A WITH TILDE
+0062;b;LATIN SMALL LETTER B
+005C;backslash;REVERSE SOLIDUS
+007C;bar;VERTICAL LINE
+03B2;beta;GREEK SMALL LETTER BETA
+2588;block;FULL BLOCK
+007B;braceleft;LEFT CURLY BRACKET
+007D;braceright;RIGHT CURLY BRACKET
+005B;bracketleft;LEFT SQUARE BRACKET
+005D;bracketright;RIGHT SQUARE BRACKET
+02D8;breve;BREVE
+00A6;brokenbar;BROKEN BAR
+2022;bullet;BULLET
+0063;c;LATIN SMALL LETTER C
+0107;cacute;LATIN SMALL LETTER C WITH ACUTE
+02C7;caron;CARON
+21B5;carriagereturn;DOWNWARDS ARROW WITH CORNER LEFTWARDS
+010D;ccaron;LATIN SMALL LETTER C WITH CARON
+00E7;ccedilla;LATIN SMALL LETTER C WITH CEDILLA
+0109;ccircumflex;LATIN SMALL LETTER C WITH CIRCUMFLEX
+010B;cdotaccent;LATIN SMALL LETTER C WITH DOT ABOVE
+00B8;cedilla;CEDILLA
+00A2;cent;CENT SIGN
+03C7;chi;GREEK SMALL LETTER CHI
+25CB;circle;WHITE CIRCLE
+2297;circlemultiply;CIRCLED TIMES
+2295;circleplus;CIRCLED PLUS
+02C6;circumflex;MODIFIER LETTER CIRCUMFLEX ACCENT
+2663;club;BLACK CLUB SUIT
+003A;colon;COLON
+20A1;colonmonetary;COLON SIGN
+002C;comma;COMMA
+2245;congruent;APPROXIMATELY EQUAL TO
+00A9;copyright;COPYRIGHT SIGN
+00A4;currency;CURRENCY SIGN
+0064;d;LATIN SMALL LETTER D
+2020;dagger;DAGGER
+2021;daggerdbl;DOUBLE DAGGER
+010F;dcaron;LATIN SMALL LETTER D WITH CARON
+0111;dcroat;LATIN SMALL LETTER D WITH STROKE
+00B0;degree;DEGREE SIGN
+03B4;delta;GREEK SMALL LETTER DELTA
+2666;diamond;BLACK DIAMOND SUIT
+00A8;dieresis;DIAERESIS
+0385;dieresistonos;GREEK DIALYTIKA TONOS
+00F7;divide;DIVISION SIGN
+2593;dkshade;DARK SHADE
+2584;dnblock;LOWER HALF BLOCK
+0024;dollar;DOLLAR SIGN
+20AB;dong;DONG SIGN
+02D9;dotaccent;DOT ABOVE
+0323;dotbelowcomb;COMBINING DOT BELOW
+0131;dotlessi;LATIN SMALL LETTER DOTLESS I
+22C5;dotmath;DOT OPERATOR
+0065;e;LATIN SMALL LETTER E
+00E9;eacute;LATIN SMALL LETTER E WITH ACUTE
+0115;ebreve;LATIN SMALL LETTER E WITH BREVE
+011B;ecaron;LATIN SMALL LETTER E WITH CARON
+00EA;ecircumflex;LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EB;edieresis;LATIN SMALL LETTER E WITH DIAERESIS
+0117;edotaccent;LATIN SMALL LETTER E WITH DOT ABOVE
+00E8;egrave;LATIN SMALL LETTER E WITH GRAVE
+0038;eight;DIGIT EIGHT
+2208;element;ELEMENT OF
+2026;ellipsis;HORIZONTAL ELLIPSIS
+0113;emacron;LATIN SMALL LETTER E WITH MACRON
+2014;emdash;EM DASH
+2205;emptyset;EMPTY SET
+2013;endash;EN DASH
+014B;eng;LATIN SMALL LETTER ENG
+0119;eogonek;LATIN SMALL LETTER E WITH OGONEK
+03B5;epsilon;GREEK SMALL LETTER EPSILON
+03AD;epsilontonos;GREEK SMALL LETTER EPSILON WITH TONOS
+003D;equal;EQUALS SIGN
+2261;equivalence;IDENTICAL TO
+212E;estimated;ESTIMATED SYMBOL
+03B7;eta;GREEK SMALL LETTER ETA
+03AE;etatonos;GREEK SMALL LETTER ETA WITH TONOS
+00F0;eth;LATIN SMALL LETTER ETH
+0021;exclam;EXCLAMATION MARK
+203C;exclamdbl;DOUBLE EXCLAMATION MARK
+00A1;exclamdown;INVERTED EXCLAMATION MARK
+2203;existential;THERE EXISTS
+0066;f;LATIN SMALL LETTER F
+2640;female;FEMALE SIGN
+2012;figuredash;FIGURE DASH
+25A0;filledbox;BLACK SQUARE
+25AC;filledrect;BLACK RECTANGLE
+0035;five;DIGIT FIVE
+215D;fiveeighths;VULGAR FRACTION FIVE EIGHTHS
+0192;florin;LATIN SMALL LETTER F WITH HOOK
+0034;four;DIGIT FOUR
+2044;fraction;FRACTION SLASH
+20A3;franc;FRENCH FRANC SIGN
+0067;g;LATIN SMALL LETTER G
+03B3;gamma;GREEK SMALL LETTER GAMMA
+011F;gbreve;LATIN SMALL LETTER G WITH BREVE
+01E7;gcaron;LATIN SMALL LETTER G WITH CARON
+011D;gcircumflex;LATIN SMALL LETTER G WITH CIRCUMFLEX
+0123;gcommaaccent;LATIN SMALL LETTER G WITH CEDILLA
+0121;gdotaccent;LATIN SMALL LETTER G WITH DOT ABOVE
+00DF;germandbls;LATIN SMALL LETTER SHARP S
+2207;gradient;NABLA
+0060;grave;GRAVE ACCENT
+0300;gravecomb;COMBINING GRAVE ACCENT
+003E;greater;GREATER-THAN SIGN
+2265;greaterequal;GREATER-THAN OR EQUAL TO
+00AB;guillemotleft;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BB;guillemotright;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+2039;guilsinglleft;SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A;guilsinglright;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+0068;h;LATIN SMALL LETTER H
+0127;hbar;LATIN SMALL LETTER H WITH STROKE
+0125;hcircumflex;LATIN SMALL LETTER H WITH CIRCUMFLEX
+2665;heart;BLACK HEART SUIT
+0309;hookabovecomb;COMBINING HOOK ABOVE
+2302;house;HOUSE
+02DD;hungarumlaut;DOUBLE ACUTE ACCENT
+002D;hyphen;HYPHEN-MINUS
+0069;i;LATIN SMALL LETTER I
+00ED;iacute;LATIN SMALL LETTER I WITH ACUTE
+012D;ibreve;LATIN SMALL LETTER I WITH BREVE
+00EE;icircumflex;LATIN SMALL LETTER I WITH CIRCUMFLEX
+00EF;idieresis;LATIN SMALL LETTER I WITH DIAERESIS
+00EC;igrave;LATIN SMALL LETTER I WITH GRAVE
+0133;ij;LATIN SMALL LIGATURE IJ
+012B;imacron;LATIN SMALL LETTER I WITH MACRON
+221E;infinity;INFINITY
+222B;integral;INTEGRAL
+2321;integralbt;BOTTOM HALF INTEGRAL
+2320;integraltp;TOP HALF INTEGRAL
+2229;intersection;INTERSECTION
+25D8;invbullet;INVERSE BULLET
+25D9;invcircle;INVERSE WHITE CIRCLE
+263B;invsmileface;BLACK SMILING FACE
+012F;iogonek;LATIN SMALL LETTER I WITH OGONEK
+03B9;iota;GREEK SMALL LETTER IOTA
+03CA;iotadieresis;GREEK SMALL LETTER IOTA WITH DIALYTIKA
+0390;iotadieresistonos;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AF;iotatonos;GREEK SMALL LETTER IOTA WITH TONOS
+0129;itilde;LATIN SMALL LETTER I WITH TILDE
+006A;j;LATIN SMALL LETTER J
+0135;jcircumflex;LATIN SMALL LETTER J WITH CIRCUMFLEX
+006B;k;LATIN SMALL LETTER K
+03BA;kappa;GREEK SMALL LETTER KAPPA
+0137;kcommaaccent;LATIN SMALL LETTER K WITH CEDILLA
+0138;kgreenlandic;LATIN SMALL LETTER KRA
+006C;l;LATIN SMALL LETTER L
+013A;lacute;LATIN SMALL LETTER L WITH ACUTE
+03BB;lambda;GREEK SMALL LETTER LAMDA
+013E;lcaron;LATIN SMALL LETTER L WITH CARON
+013C;lcommaaccent;LATIN SMALL LETTER L WITH CEDILLA
+0140;ldot;LATIN SMALL LETTER L WITH MIDDLE DOT
+003C;less;LESS-THAN SIGN
+2264;lessequal;LESS-THAN OR EQUAL TO
+258C;lfblock;LEFT HALF BLOCK
+20A4;lira;LIRA SIGN
+2227;logicaland;LOGICAL AND
+00AC;logicalnot;NOT SIGN
+2228;logicalor;LOGICAL OR
+017F;longs;LATIN SMALL LETTER LONG S
+25CA;lozenge;LOZENGE
+0142;lslash;LATIN SMALL LETTER L WITH STROKE
+2591;ltshade;LIGHT SHADE
+006D;m;LATIN SMALL LETTER M
+00AF;macron;MACRON
+2642;male;MALE SIGN
+2212;minus;MINUS SIGN
+2032;minute;PRIME
+03BC;mu;GREEK SMALL LETTER MU
+00D7;multiply;MULTIPLICATION SIGN
+266A;musicalnote;EIGHTH NOTE
+266B;musicalnotedbl;BEAMED EIGHTH NOTES
+006E;n;LATIN SMALL LETTER N
+0144;nacute;LATIN SMALL LETTER N WITH ACUTE
+0149;napostrophe;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+0148;ncaron;LATIN SMALL LETTER N WITH CARON
+0146;ncommaaccent;LATIN SMALL LETTER N WITH CEDILLA
+0039;nine;DIGIT NINE
+2209;notelement;NOT AN ELEMENT OF
+2260;notequal;NOT EQUAL TO
+2284;notsubset;NOT A SUBSET OF
+00F1;ntilde;LATIN SMALL LETTER N WITH TILDE
+03BD;nu;GREEK SMALL LETTER NU
+0023;numbersign;NUMBER SIGN
+006F;o;LATIN SMALL LETTER O
+00F3;oacute;LATIN SMALL LETTER O WITH ACUTE
+014F;obreve;LATIN SMALL LETTER O WITH BREVE
+00F4;ocircumflex;LATIN SMALL LETTER O WITH CIRCUMFLEX
+00F6;odieresis;LATIN SMALL LETTER O WITH DIAERESIS
+0153;oe;LATIN SMALL LIGATURE OE
+02DB;ogonek;OGONEK
+00F2;ograve;LATIN SMALL LETTER O WITH GRAVE
+01A1;ohorn;LATIN SMALL LETTER O WITH HORN
+0151;ohungarumlaut;LATIN SMALL LETTER O WITH DOUBLE ACUTE
+014D;omacron;LATIN SMALL LETTER O WITH MACRON
+03C9;omega;GREEK SMALL LETTER OMEGA
+03D6;omega1;GREEK PI SYMBOL
+03CE;omegatonos;GREEK SMALL LETTER OMEGA WITH TONOS
+03BF;omicron;GREEK SMALL LETTER OMICRON
+03CC;omicrontonos;GREEK SMALL LETTER OMICRON WITH TONOS
+0031;one;DIGIT ONE
+2024;onedotenleader;ONE DOT LEADER
+215B;oneeighth;VULGAR FRACTION ONE EIGHTH
+00BD;onehalf;VULGAR FRACTION ONE HALF
+00BC;onequarter;VULGAR FRACTION ONE QUARTER
+2153;onethird;VULGAR FRACTION ONE THIRD
+25E6;openbullet;WHITE BULLET
+00AA;ordfeminine;FEMININE ORDINAL INDICATOR
+00BA;ordmasculine;MASCULINE ORDINAL INDICATOR
+221F;orthogonal;RIGHT ANGLE
+00F8;oslash;LATIN SMALL LETTER O WITH STROKE
+01FF;oslashacute;LATIN SMALL LETTER O WITH STROKE AND ACUTE
+00F5;otilde;LATIN SMALL LETTER O WITH TILDE
+0070;p;LATIN SMALL LETTER P
+00B6;paragraph;PILCROW SIGN
+0028;parenleft;LEFT PARENTHESIS
+0029;parenright;RIGHT PARENTHESIS
+2202;partialdiff;PARTIAL DIFFERENTIAL
+0025;percent;PERCENT SIGN
+002E;period;FULL STOP
+00B7;periodcentered;MIDDLE DOT
+22A5;perpendicular;UP TACK
+2030;perthousand;PER MILLE SIGN
+20A7;peseta;PESETA SIGN
+03C6;phi;GREEK SMALL LETTER PHI
+03D5;phi1;GREEK PHI SYMBOL
+03C0;pi;GREEK SMALL LETTER PI
+002B;plus;PLUS SIGN
+00B1;plusminus;PLUS-MINUS SIGN
+211E;prescription;PRESCRIPTION TAKE
+220F;product;N-ARY PRODUCT
+2282;propersubset;SUBSET OF
+2283;propersuperset;SUPERSET OF
+221D;proportional;PROPORTIONAL TO
+03C8;psi;GREEK SMALL LETTER PSI
+0071;q;LATIN SMALL LETTER Q
+003F;question;QUESTION MARK
+00BF;questiondown;INVERTED QUESTION MARK
+0022;quotedbl;QUOTATION MARK
+201E;quotedblbase;DOUBLE LOW-9 QUOTATION MARK
+201C;quotedblleft;LEFT DOUBLE QUOTATION MARK
+201D;quotedblright;RIGHT DOUBLE QUOTATION MARK
+2018;quoteleft;LEFT SINGLE QUOTATION MARK
+201B;quotereversed;SINGLE HIGH-REVERSED-9 QUOTATION MARK
+2019;quoteright;RIGHT SINGLE QUOTATION MARK
+201A;quotesinglbase;SINGLE LOW-9 QUOTATION MARK
+0027;quotesingle;APOSTROPHE
+0072;r;LATIN SMALL LETTER R
+0155;racute;LATIN SMALL LETTER R WITH ACUTE
+221A;radical;SQUARE ROOT
+0159;rcaron;LATIN SMALL LETTER R WITH CARON
+0157;rcommaaccent;LATIN SMALL LETTER R WITH CEDILLA
+2286;reflexsubset;SUBSET OF OR EQUAL TO
+2287;reflexsuperset;SUPERSET OF OR EQUAL TO
+00AE;registered;REGISTERED SIGN
+2310;revlogicalnot;REVERSED NOT SIGN
+03C1;rho;GREEK SMALL LETTER RHO
+02DA;ring;RING ABOVE
+2590;rtblock;RIGHT HALF BLOCK
+0073;s;LATIN SMALL LETTER S
+015B;sacute;LATIN SMALL LETTER S WITH ACUTE
+0161;scaron;LATIN SMALL LETTER S WITH CARON
+015F;scedilla;LATIN SMALL LETTER S WITH CEDILLA
+015D;scircumflex;LATIN SMALL LETTER S WITH CIRCUMFLEX
+0219;scommaaccent;LATIN SMALL LETTER S WITH COMMA BELOW
+2033;second;DOUBLE PRIME
+00A7;section;SECTION SIGN
+003B;semicolon;SEMICOLON
+0037;seven;DIGIT SEVEN
+215E;seveneighths;VULGAR FRACTION SEVEN EIGHTHS
+2592;shade;MEDIUM SHADE
+03C3;sigma;GREEK SMALL LETTER SIGMA
+03C2;sigma1;GREEK SMALL LETTER FINAL SIGMA
+223C;similar;TILDE OPERATOR
+0036;six;DIGIT SIX
+002F;slash;SOLIDUS
+263A;smileface;WHITE SMILING FACE
+0020;space;SPACE
+2660;spade;BLACK SPADE SUIT
+00A3;sterling;POUND SIGN
+220B;suchthat;CONTAINS AS MEMBER
+2211;summation;N-ARY SUMMATION
+263C;sun;WHITE SUN WITH RAYS
+0074;t;LATIN SMALL LETTER T
+03C4;tau;GREEK SMALL LETTER TAU
+0167;tbar;LATIN SMALL LETTER T WITH STROKE
+0165;tcaron;LATIN SMALL LETTER T WITH CARON
+0163;tcommaaccent;LATIN SMALL LETTER T WITH CEDILLA
+2234;therefore;THEREFORE
+03B8;theta;GREEK SMALL LETTER THETA
+03D1;theta1;GREEK THETA SYMBOL
+00FE;thorn;LATIN SMALL LETTER THORN
+0033;three;DIGIT THREE
+215C;threeeighths;VULGAR FRACTION THREE EIGHTHS
+00BE;threequarters;VULGAR FRACTION THREE QUARTERS
+02DC;tilde;SMALL TILDE
+0303;tildecomb;COMBINING TILDE
+0384;tonos;GREEK TONOS
+2122;trademark;TRADE MARK SIGN
+25BC;triagdn;BLACK DOWN-POINTING TRIANGLE
+25C4;triaglf;BLACK LEFT-POINTING POINTER
+25BA;triagrt;BLACK RIGHT-POINTING POINTER
+25B2;triagup;BLACK UP-POINTING TRIANGLE
+0032;two;DIGIT TWO
+2025;twodotenleader;TWO DOT LEADER
+2154;twothirds;VULGAR FRACTION TWO THIRDS
+0075;u;LATIN SMALL LETTER U
+00FA;uacute;LATIN SMALL LETTER U WITH ACUTE
+016D;ubreve;LATIN SMALL LETTER U WITH BREVE
+00FB;ucircumflex;LATIN SMALL LETTER U WITH CIRCUMFLEX
+00FC;udieresis;LATIN SMALL LETTER U WITH DIAERESIS
+00F9;ugrave;LATIN SMALL LETTER U WITH GRAVE
+01B0;uhorn;LATIN SMALL LETTER U WITH HORN
+0171;uhungarumlaut;LATIN SMALL LETTER U WITH DOUBLE ACUTE
+016B;umacron;LATIN SMALL LETTER U WITH MACRON
+005F;underscore;LOW LINE
+2017;underscoredbl;DOUBLE LOW LINE
+222A;union;UNION
+2200;universal;FOR ALL
+0173;uogonek;LATIN SMALL LETTER U WITH OGONEK
+2580;upblock;UPPER HALF BLOCK
+03C5;upsilon;GREEK SMALL LETTER UPSILON
+03CB;upsilondieresis;GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+03B0;upsilondieresistonos;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03CD;upsilontonos;GREEK SMALL LETTER UPSILON WITH TONOS
+016F;uring;LATIN SMALL LETTER U WITH RING ABOVE
+0169;utilde;LATIN SMALL LETTER U WITH TILDE
+0076;v;LATIN SMALL LETTER V
+0077;w;LATIN SMALL LETTER W
+1E83;wacute;LATIN SMALL LETTER W WITH ACUTE
+0175;wcircumflex;LATIN SMALL LETTER W WITH CIRCUMFLEX
+1E85;wdieresis;LATIN SMALL LETTER W WITH DIAERESIS
+2118;weierstrass;SCRIPT CAPITAL P
+1E81;wgrave;LATIN SMALL LETTER W WITH GRAVE
+0078;x;LATIN SMALL LETTER X
+03BE;xi;GREEK SMALL LETTER XI
+0079;y;LATIN SMALL LETTER Y
+00FD;yacute;LATIN SMALL LETTER Y WITH ACUTE
+0177;ycircumflex;LATIN SMALL LETTER Y WITH CIRCUMFLEX
+00FF;ydieresis;LATIN SMALL LETTER Y WITH DIAERESIS
+00A5;yen;YEN SIGN
+1EF3;ygrave;LATIN SMALL LETTER Y WITH GRAVE
+007A;z;LATIN SMALL LETTER Z
+017A;zacute;LATIN SMALL LETTER Z WITH ACUTE
+017E;zcaron;LATIN SMALL LETTER Z WITH CARON
+017C;zdotaccent;LATIN SMALL LETTER Z WITH DOT ABOVE
+0030;zero;DIGIT ZERO
+03B6;zeta;GREEK SMALL LETTER ZETA
diff -U 3 -H -d -r -N -- term/PostScript/cp1250.ps term/PostScript/cp1250.ps
--- term/PostScript/cp1250.ps 2006-03-24 22:48:47.000000000 +0100
+++ term/PostScript/cp1250.ps 2009-05-09 13:53:00.000000000 +0200
@@ -1,3 +1,6 @@
+%
+% Encoding for code page 1250 (Microsoft Windows Central and Eastern European)
+%
/reencodeCP1250 {
dup dup findfont dup length dict begin
{ 1 index /FID ne { def }{ pop pop } ifelse } forall
diff -U 3 -H -d -r -N -- term/PostScript/cp437.ps term/PostScript/cp437.ps
--- term/PostScript/cp437.ps 2006-08-12 00:35:05.000000000 +0200
+++ term/PostScript/cp437.ps 2009-05-09 13:53:00.000000000 +0200
@@ -1,4 +1,5 @@
-% encoding for code page 437
+%
+% encoding for code page 437 (original MSDOS)
% version 1.0: - Mainly letters are mapped. The following positions
% (JFi) are left blank (undefined):
% -- first 32 positions,
diff -U 3 -H -d -r -N -- term/PostScript/cp850.ps term/PostScript/cp850.ps
--- term/PostScript/cp850.ps 2006-08-12 00:35:05.000000000 +0200
+++ term/PostScript/cp850.ps 2009-05-09 13:53:00.000000000 +0200
@@ -1,4 +1,5 @@
-% encoding for code page 850
+%
+% encoding for code page 850 (obsolete MSDOS Western Europe)
% version 1.0: - Mainly letters are mapped. The following positions
% (JFi) are left blank (undefined):
% -- first 32 positions,
diff -U 3 -H -d -r -N -- term/PostScript/cp852.ps term/PostScript/cp852.ps
--- term/PostScript/cp852.ps 2006-08-12 00:22:05.000000000 +0200
+++ term/PostScript/cp852.ps 2009-05-09 13:53:00.000000000 +0200
@@ -1,4 +1,5 @@
-% encoding for code page 852
+%
+% encoding for code page 852 (MSDOS Central European)
/reencodeCP852 {
dup dup findfont dup length dict begin
{ 1 index /FID ne { def }{ pop pop } ifelse } forall
diff -U 3 -H -d -r -N -- term/PostScript/koi8r.ps term/PostScript/koi8r.ps
--- term/PostScript/koi8r.ps 2006-08-12 00:35:05.000000000 +0200
+++ term/PostScript/koi8r.ps 2009-05-09 13:53:00.000000000 +0200
@@ -1,4 +1,5 @@
-% encoding for code page koi8r
+%
+% encoding for code page koi8r (8-bit Russian)
% version 1.0: - Mainly letters are mapped. The following positions
% (JFi) are left blank (undefined):
% -- first 32 positions,
diff -U 3 -H -d -r -N -- term/PostScript/koi8u.ps term/PostScript/koi8u.ps
--- term/PostScript/koi8u.ps 2006-03-24 22:48:47.000000000 +0100
+++ term/PostScript/koi8u.ps 2009-05-09 13:53:00.000000000 +0200
@@ -1,4 +1,5 @@
%
+% encoding for code page koi8r (8-bit Ukrainian)
/reencodeKOI8U {
dup dup findfont dup length dict begin
{ 1 index /FID ne { def }{ pop pop } ifelse } forall
diff -U 3 -H -d -r -N -- term/PostScript/prologue.ps term/PostScript/prologue.ps
--- term/PostScript/prologue.ps 2007-10-01 22:49:08.000000000 +0200
+++ term/PostScript/prologue.ps 2009-05-09 13:53:00.000000000 +0200
@@ -1,5 +1,5 @@
%
-% Gnuplot Prolog Version 4.2 (August 2006)
+% Gnuplot Prolog Version 4.2 (November 2007)
%
/M {moveto} bind def
/L {lineto} bind def
@@ -9,6 +9,7 @@
/Z {closepath} bind def
/C {setrgbcolor} bind def
/f {rlineto fill} bind def
+/Gshow {show} def % May be redefined later in the file to support UTF-8
/vpt2 vpt 2 mul def
/hpt2 hpt 2 mul def
/Lshow {currentpoint stroke M 0 vshift R
diff -U 3 -H -d -r -N -- term/PostScript/prologues.h term/PostScript/prologues.h
--- term/PostScript/prologues.h 2006-11-20 20:06:01.000000000 +0100
+++ term/PostScript/prologues.h 2009-05-09 13:53:00.000000000 +0200
@@ -2,6 +2,9 @@
* in a form suitable to inclusion in a C source code */
static const char *prologue_8859_1_ps[] = {
+"%\n",
+"% Encoding for ISO-8859-1 (also called Latin1)\n",
+"%\n",
"/reencodeISO {\n",
"dup dup findfont dup length dict begin\n",
"{ 1 index /FID ne { def }{ pop pop } ifelse } forall\n",
@@ -46,6 +49,9 @@
};
static const char *prologue_8859_15_ps[] = {
+"%\n",
+"% Encoding for ISO-8859-15 (also called Latin9)\n",
+"%\n",
"/reencodeISO15 {\n",
"dup dup findfont dup length dict begin\n",
"{ 1 index /FID ne { def }{ pop pop } ifelse } forall\n",
@@ -90,7 +96,8 @@
};
static const char *prologue_8859_2_ps[] = {
-"% Encoding for ISO-8859-2 (also called as Latin-2), with\n",
+"%\n",
+"% Encoding for ISO-8859-2 (also called Latin2), with\n",
"% minor differences to \"true\" ISO-8859-2 (*commaaccent \n",
"% instead of *cedilla for sStT -> incorrect in ISO-8859-2,\n",
"% the standard will probably be modified in this respect)\n",
@@ -138,7 +145,58 @@
NULL
};
+static const char *prologue_8859_9_ps[] = {
+"%\n",
+"% Encoding for ISO_8859_9 (also called Latin5)\n",
+"% Plus code points 80-9F used in Codepage 1254\n",
+"%\n",
+"/reencodeISO9 {\n",
+"dup dup findfont dup length dict begin\n",
+"{ 1 index /FID ne { def }{ pop pop } ifelse } forall\n",
+"currentdict /CharStrings known {\n",
+"\tCharStrings /Idieresis known {\n",
+"\t\t/Encoding ISOLatin5Encoding def } if\n",
+"} if\n",
+"currentdict end definefont\n",
+"} def\n",
+"/ISOLatin5Encoding [\n",
+"/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n",
+"/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n",
+"/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n",
+"/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n",
+"/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright\n",
+"/parenleft/parenright/asterisk/plus/comma/minus/period/slash\n",
+"/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon\n",
+"/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N\n",
+"/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright\n",
+"/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m\n",
+"/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde\n",
+"/Euro/.notdef/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl\n",
+"/circumflex/perthousand/Scaron/guilsinglleft/OE/.notdef/.notdef/.notdef\n",
+"/.notdef/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash\n",
+"/tilde/trademark/scaron/guilsinglright/oe/.notdef/.notdef/Ydieresis\n",
+"/.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar\n",
+"/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot\n",
+"/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior\n",
+"/acute/mu/paragraph/bullet/cedilla/onesuperior/ordmasculine\n",
+"/guillemotright/onequarter/onehalf/threequarters/questiondown\n",
+"/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla\n",
+"/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex\n",
+"/Idieresis/Gbreve/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis\n",
+"/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Idotaccent\n",
+"/Scedilla/germandbls/agrave/aacute/acircumflex/atilde/adieresis\n",
+"/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave\n",
+"/iacute/icircumflex/idieresis/gbreve/ntilde/ograve/oacute/ocircumflex\n",
+"/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis\n",
+"/dotlessi/scedilla/ydieresis\n",
+"] def\n",
+NULL
+};
+
static const char *prologue_cp1250_ps[] = {
+"%\n",
+"% Encoding for code page 1250 (Microsoft Windows Central and Eastern European)\n",
+"%\n",
"/reencodeCP1250 {\n",
"dup dup findfont dup length dict begin\n",
"{ 1 index /FID ne { def }{ pop pop } ifelse } forall\n",
@@ -181,7 +239,8 @@
};
static const char *prologue_cp437_ps[] = {
-"% encoding for code page 437\n",
+"%\n",
+"% encoding for code page 437 (original MSDOS)\n",
"% version 1.0:\t- Mainly letters are mapped. The following positions\n",
"% (JFi)\t\t are left blank (undefined):\n",
"%\t\t-- first 32 positions,\n",
@@ -233,7 +292,8 @@
};
static const char *prologue_cp850_ps[] = {
-"% encoding for code page 850\n",
+"%\n",
+"% encoding for code page 850 (obsolete MSDOS Western Europe)\n",
"% version 1.0: - Mainly letters are mapped. The following positions\n",
"% (JFi)\t\t are left blank (undefined):\n",
"%\t\t-- first 32 positions,\n",
@@ -282,7 +342,8 @@
};
static const char *prologue_cp852_ps[] = {
-"% encoding for code page 852\n",
+"%\n",
+"% encoding for code page 852 (MSDOS Central European)\n",
"/reencodeCP852 {\n",
"dup dup findfont dup length dict begin\n",
"{ 1 index /FID ne { def }{ pop pop } ifelse } forall\n",
@@ -326,7 +387,8 @@
};
static const char *prologue_koi8r_ps[] = {
-"% encoding for code page koi8r\n",
+"%\n",
+"% encoding for code page koi8r (8-bit Russian)\n",
"% version 1.0:\t- Mainly letters are mapped. The following positions\n",
"% (JFi)\t\t are left blank (undefined):\n",
"%\t\t-- first 32 positions,\n",
@@ -376,6 +438,7 @@
static const char *prologue_koi8u_ps[] = {
"%\n",
+"% encoding for code page koi8r (8-bit Ukrainian)\n",
"/reencodeKOI8U {\n",
"dup dup findfont dup length dict begin\n",
"{ 1 index /FID ne { def }{ pop pop } ifelse } forall\n",
@@ -419,7 +482,7 @@
static const char *prologue_prologue_ps[] = {
"%\n",
-"% Gnuplot Prolog Version 4.2 (August 2006)\n",
+"% Gnuplot Prolog Version 4.2 (November 2007)\n",
"%\n",
"/M {moveto} bind def\n",
"/L {lineto} bind def\n",
@@ -429,6 +492,7 @@
"/Z {closepath} bind def\n",
"/C {setrgbcolor} bind def\n",
"/f {rlineto fill} bind def\n",
+"/Gshow {show} def % May be redefined later in the file to support UTF-8\n",
"/vpt2 vpt 2 mul def\n",
"/hpt2 hpt 2 mul def\n",
"/Lshow {currentpoint stroke M 0 vshift R \n",
@@ -669,7 +733,7 @@
" ColR ColG ColB setrgbcolor} def\n",
"/BoxColFill {gsave Rec PolyFill} def\n",
"/PolyFill {gsave Density fill grestore grestore} def\n",
-"/h {rlineto rlineto rlineto gsave fill grestore} bind def\n",
+"/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def\n",
"%\n",
"% PostScript Level 1 Pattern Fill routine for rectangles\n",
"% Usage: x y w h s a XX PatternFill\n",
@@ -789,3 +853,65 @@
NULL
};
+static const char *prologue_utf_8_ps[] = {
+"%\n",
+"% Base ISO8859-1 character encoding plus support macros for UTF-8 encoding\n",
+"% via the glyphshow operator\n",
+"%\n",
+"/reencodeISO {\n",
+"dup dup findfont dup length dict begin\n",
+"{ 1 index /FID ne { def }{ pop pop } ifelse } forall\n",
+"currentdict /CharStrings known {\n",
+"\tCharStrings /Idieresis known {\n",
+"\t\t/Encoding ISOLatin1Encoding def } if\n",
+"} if\n",
+"currentdict end definefont\n",
+"} def\n",
+"/ISOLatin1Encoding [\n",
+"/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n",
+"/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n",
+"/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n",
+"/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n",
+"/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright\n",
+"/parenleft/parenright/asterisk/plus/comma/minus/period/slash\n",
+"/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon\n",
+"/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N\n",
+"/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright\n",
+"/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m\n",
+"/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde\n",
+"/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n",
+"/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n",
+"/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve\n",
+"/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut\n",
+"/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar\n",
+"/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot\n",
+"/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior\n",
+"/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine\n",
+"/guillemotright/onequarter/onehalf/threequarters/questiondown\n",
+"/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla\n",
+"/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex\n",
+"/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis\n",
+"/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute\n",
+"/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis\n",
+"/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave\n",
+"/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex\n",
+"/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis\n",
+"/yacute/thorn/ydieresis\n",
+"] def\n",
+"\n",
+"/Gshow { dup type /stringtype eq { show } { glyphshow } ifelse } def\n",
+"\n",
+"/Gsall { {Gshow} forall } def\n",
+"/Gwidth {\n",
+"\tdup currentpoint pop exch\n",
+"\tgsave 6 array currentmatrix nulldevice setmatrix Gsall currentpoint pop grestore sub\n",
+"\t} def\n",
+"/GLshow {currentpoint stroke M 0 vshift R \n",
+"\tBlacktext {gsave 0 setgray Gsall grestore} {Gsall} ifelse} def\n",
+"/GRshow {currentpoint stroke M dup Gwidth vshift R\n",
+"\tBlacktext {gsave 0 setgray Gsall grestore} {Gsall} ifelse} def\n",
+"/GCshow {currentpoint stroke M dup Gwidth 2 div vshift R \n",
+"\tBlacktext {gsave 0 setgray Gsall grestore} {Gsall} ifelse} def\n",
+NULL
+};
+
diff -U 3 -H -d -r -N -- term/PostScript/unicode_big.map term/PostScript/unicode_big.map
--- term/PostScript/unicode_big.map 1970-01-01 01:00:00.000000000 +0100
+++ term/PostScript/unicode_big.map 2009-05-09 13:53:00.000000000 +0200
@@ -0,0 +1,863 @@
+=00 U+0000
+=01 U+0001
+=02 U+0002
+=03 U+0003
+=04 U+0004
+=05 U+0005
+=06 U+0006
+=07 U+0007
+=08 U+0008
+=09 U+0009
+=0A U+000A
+=0B U+000B
+=0C U+000C
+=0D U+000D
+=0E U+000E
+=0F U+000F
+=10 U+0010
+=11 U+0011
+=12 U+0012
+=13 U+0013
+=14 U+0014
+=15 U+0015
+=16 U+0016
+=17 U+0017
+=18 U+0018
+=19 U+0019
+=1A U+001A
+=1B U+001B
+=1C U+001C
+=1D U+001D
+=1E U+001E
+=1F U+001F
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+=A0 U+00A0
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+=AD U+00AD
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+=B2 U+00B2
+=B3 U+00B3
+!B4 U+00B4 acute
+=B5 U+00B5
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+=B9 U+00B9
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+00D0 Eth
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+00DE Thorn
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+00F0 eth
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+00FE thorn
+!FF U+00FF ydieresis
+!100 U+0100 Amacron
+!101 U+0101 amacron
+!102 U+0102 Abreve
+!103 U+0103 abreve
+!104 U+0104 Aogonek
+!105 U+0105 aogonek
+!106 U+0106 Cacute
+!107 U+0107 cacute
+!108 U+0108 Ccircumflex
+!109 U+0109 ccircumflex
+!10a U+010A Cdotaccent
+!10b U+010B cdotaccent
+!10c U+010C Ccaron
+!10d U+010D ccaron
+!10e U+010E Dcaron
+!10f U+010F dcaron
+!110 U+0110 Dcroat
+!111 U+0111 dcroat
+!112 U+0112 Emacron
+!113 U+0113 emacron
+!114 U+0114 Ebreve
+!115 U+0115 ebreve
+!116 U+0116 Edotaccent
+!117 U+0117 edotaccent
+!118 U+0118 Eogonek
+!119 U+0119 eogonek
+!11a U+011A Ecaron
+!11b U+011B ecaron
+!11c U+011C Gcircumflex
+!11d U+011D gcircumflex
+!11e U+011E Gbreve
+!11f U+011F gbreve
+!120 U+0120 Gdotaccent
+!121 U+0121 gdotaccent
+!122 U+0122 Gcommaaccent
+!123 U+0123 gcommaaccent
+!124 U+0124 Hcircumflex
+!125 U+0125 hcircumflex
+!126 U+0126 Hbar
+!127 U+0127 hbar
+!128 U+0128 Itilde
+!129 U+0129 itilde
+!12a U+012A Imacron
+!12b U+012B imacron
+!12c U+012C Ibreve
+!12d U+012D ibreve
+!12e U+012E Iogonek
+!12f U+012F iogonek
+!130 U+0130 Idotaccent
+!131 U+0131 dotlessi
+!132 U+0132 IJ
+!133 U+0133 ij
+!134 U+0134 Jcircumflex
+!135 U+0135 jcircumflex
+!136 U+0136 Kcommaaccent
+!137 U+0137 kcommaaccent
+!138 U+0138 kgreenlandic
+!139 U+0139 Lacute
+!13a U+013A lacute
+!13b U+013B Lcommaaccent
+!13c U+013C lcommaaccent
+!13d U+013D Lcaron
+!13e U+013E lcaron
+!13f U+013F Ldot
+!140 U+0140 ldot
+!141 U+0141 Lslash
+!142 U+0142 lslash
+!143 U+0143 Nacute
+!144 U+0144 nacute
+!145 U+0145 Ncommaaccent
+!146 U+0146 ncommaaccent
+!147 U+0147 Ncaron
+!148 U+0148 ncaron
+!149 U+0149 napostrophe
+!14a U+014A Eng
+!14b U+014B eng
+!14c U+014C Omacron
+!14d U+014D omacron
+!14e U+014E Obreve
+!14f U+014F obreve
+!150 U+0150 Ohungarumlaut
+!151 U+0151 ohungarumlaut
+!152 U+0152 OE
+!153 U+0153 oe
+!154 U+0154 Racute
+!155 U+0155 racute
+!156 U+0156 Rcommaaccent
+!157 U+0157 rcommaaccent
+!158 U+0158 Rcaron
+!159 U+0159 rcaron
+!15a U+015A Sacute
+!15b U+015B sacute
+!15c U+015C Scircumflex
+!15d U+015D scircumflex
+!15e U+015E Scedilla
+!15f U+015F scedilla
+!160 U+0160 Scaron
+!161 U+0161 scaron
+!162 U+0162 Tcommaaccent
+!163 U+0163 tcommaaccent
+!164 U+0164 Tcaron
+!165 U+0165 tcaron
+!166 U+0166 Tbar
+!167 U+0167 tbar
+!168 U+0168 Utilde
+!169 U+0169 utilde
+!16a U+016A Umacron
+!16b U+016B umacron
+!16c U+016C Ubreve
+!16d U+016D ubreve
+!16e U+016E Uring
+!16f U+016F uring
+!170 U+0170 Uhungarumlaut
+!171 U+0171 uhungarumlaut
+!172 U+0172 Uogonek
+!173 U+0173 uogonek
+!174 U+0174 Wcircumflex
+!175 U+0175 wcircumflex
+!176 U+0176 Ycircumflex
+!177 U+0177 ycircumflex
+!178 U+0178 Ydieresis
+!179 U+0179 Zacute
+!17a U+017A zacute
+!17b U+017B Zdotaccent
+!17c U+017C zdotaccent
+!17d U+017D Zcaron
+!17e U+017E zcaron
+!17f U+017F longs
+!180 U+0192 florin
+!181 U+01A0 Ohorn
+!182 U+01A1 ohorn
+!183 U+01AF Uhorn
+!184 U+01B0 uhorn
+!185 U+01E6 Gcaron
+!186 U+01E7 gcaron
+!187 U+01FA Aringacute
+!188 U+01FB aringacute
+!189 U+01FC AEacute
+!18a U+01FD aeacute
+!18b U+01FE Oslashacute
+!18c U+01FF oslashacute
+!18d U+0218 uni0218
+!18e U+0219 uni0219
+!18f U+02BC uni02BC
+!190 U+02BD uni02BD
+!191 U+02C6 uni02C6
+!192 U+02C7 uni02C7
+!193 U+02D8 uni02D8
+!194 U+02D9 uni02D9
+!195 U+02DA uni02DA
+!196 U+02DB uni02DB
+!197 U+02DC uni02DC
+!198 U+02DD uni02DD
+!199 U+0300 uni0300
+!19a U+0301 uni0301
+!19b U+0303 uni0303
+!19c U+0309 uni0309
+!19d U+0323 uni0323
+!19e U+0391 uni0391
+!19f U+0392 uni0392
+!1a0 U+0393 uni0393
+!1a1 U+0394 uni0394
+!1a2 U+0395 uni0395
+!1a3 U+0396 uni0396
+!1a4 U+0397 uni0397
+!1a5 U+0398 uni0398
+!1a6 U+0399 uni0399
+!1a7 U+039A uni039A
+!1a8 U+039B uni039B
+!1a9 U+039C uni039C
+!1aa U+039D uni039D
+!1ab U+039E uni039E
+!1ac U+039F uni039F
+!1ad U+03A0 uni03A0
+!1ae U+03A1 uni03A1
+!1af U+03A3 uni03A3
+!1b0 U+03A4 uni03A4
+!1b1 U+03A5 uni03A5
+!1b2 U+03A6 uni03A6
+!1b3 U+03A7 uni03A7
+!1b4 U+03A8 uni03A8
+!1b5 U+03A9 uni03A9
+!1b6 U+03B1 uni03B1
+!1b7 U+03B2 uni03B2
+!1b8 U+03B3 uni03B3
+!1b9 U+03B4 uni03B4
+!1ba U+03B5 uni03B5
+!1bb U+03B6 uni03B6
+!1bc U+03B7 uni03B7
+!1bd U+03B8 uni03B8
+!1be U+03B9 uni03B9
+!1bf U+03BA uni03BA
+!1c0 U+03BB uni03BB
+!1c1 U+03BC uni03BC
+!1c2 U+03BD uni03BD
+!1c3 U+03BE uni03BE
+!1c4 U+03BF uni03BF
+!1c5 U+03C0 uni03C0
+!1c6 U+03C1 uni03C1
+!1c7 U+03C2 uni03C2
+!1c8 U+03C3 uni03C3
+!1c9 U+03C4 uni03C4
+!1ca U+03C5 uni03C5
+!1cb U+03C6 uni03C6
+!1cc U+03C7 uni03C7
+!1cd U+03C8 uni03C8
+!1ce U+03C9 uni03C9
+!1cf U+03D0 uni03D0
+!1d0 U+03D1 uni03D1
+!1d1 U+03D5 uni03D5
+!1d2 U+03D6 uni03D6
+!1d3 U+0401 uni0401
+!1d4 U+0402 uni0402
+!1d5 U+0403 uni0403
+!1d6 U+0404 uni0404
+!1d7 U+0405 uni0405
+!1d8 U+0406 uni0406
+!1d9 U+0407 uni0407
+!1da U+0408 uni0408
+!1db U+0409 uni0409
+!1dc U+040A uni040A
+!1dd U+040B uni040B
+!1de U+040C uni040C
+!1df U+040E uni040E
+!1e0 U+040F uni040F
+!1e1 U+0410 uni0410
+!1e2 U+0411 uni0411
+!1e3 U+0412 uni0412
+!1e4 U+0413 uni0413
+!1e5 U+0414 uni0414
+!1e6 U+0415 uni0415
+!1e7 U+0416 uni0416
+!1e8 U+0417 uni0417
+!1e9 U+0418 uni0418
+!1ea U+0419 uni0419
+!1eb U+041A uni041A
+!1ec U+041B uni041B
+!1ed U+041C uni041C
+!1ee U+041D uni041D
+!1ef U+041E uni041E
+!1f0 U+041F uni041F
+!1f1 U+0420 uni0420
+!1f2 U+0421 uni0421
+!1f3 U+0422 uni0422
+!1f4 U+0423 uni0423
+!1f5 U+0424 uni0424
+!1f6 U+0425 uni0425
+!1f7 U+0426 uni0426
+!1f8 U+0427 uni0427
+!1f9 U+0428 uni0428
+!1fa U+0429 uni0429
+!1fb U+042A uni042A
+!1fc U+042B uni042B
+!1fd U+042C uni042C
+!1fe U+042D uni042D
+!1ff U+042E uni042E
+!200 U+042F uni042F
+!201 U+0430 uni0430
+!202 U+0431 uni0431
+!203 U+0432 uni0432
+!204 U+0433 uni0433
+!205 U+0434 uni0434
+!206 U+0435 uni0435
+!207 U+0436 uni0436
+!208 U+0437 uni0437
+!209 U+0438 uni0438
+!20a U+0439 uni0439
+!20b U+043A uni043A
+!20c U+043B uni043B
+!20d U+043C uni043C
+!20e U+043D uni043D
+!20f U+043E uni043E
+!210 U+043F uni043F
+!211 U+0440 uni0440
+!212 U+0441 uni0441
+!213 U+0442 uni0442
+!214 U+0443 uni0443
+!215 U+0444 uni0444
+!216 U+0445 uni0445
+!217 U+0446 uni0446
+!218 U+0447 uni0447
+!219 U+0448 uni0448
+!21a U+0449 uni0449
+!21b U+044A uni044A
+!21c U+044B uni044B
+!21d U+044C uni044C
+!21e U+044D uni044D
+!21f U+044E uni044E
+!220 U+044F uni044F
+!221 U+0451 uni0451
+!222 U+0452 uni0452
+!223 U+0453 uni0453
+!224 U+0454 uni0454
+!225 U+0455 uni0455
+!226 U+0456 uni0456
+!227 U+0457 uni0457
+!228 U+0458 uni0458
+!229 U+0459 uni0459
+!22a U+045A uni045A
+!22b U+045B uni045B
+!22c U+045C uni045C
+!22d U+045E uni045E
+!22e U+045F uni045F
+!22f U+0490 uni0490
+!230 U+0491 uni0491
+!231 U+05D0 uni05D0
+!232 U+05D1 uni05D1
+!233 U+05D2 uni05D2
+!234 U+05D3 uni05D3
+!235 U+05D4 uni05D4
+!236 U+05D5 uni05D5
+!237 U+05D6 uni05D6
+!238 U+05D7 uni05D7
+!239 U+05D8 uni05D8
+!23a U+05D9 uni05D9
+!23b U+05DA uni05DA
+!23c U+05DB uni05DB
+!23d U+05DC uni05DC
+!23e U+05DD uni05DD
+!23f U+05DE uni05DE
+!240 U+05DF uni05DF
+!241 U+05E0 uni05E0
+!242 U+05E1 uni05E1
+!243 U+05E2 uni05E2
+!244 U+05E3 uni05E3
+!245 U+05E4 uni05E4
+!246 U+05E5 uni05E5
+!247 U+05E6 uni05E6
+!248 U+05E7 uni05E7
+!249 U+05E8 uni05E8
+!24a U+05E9 uni05E9
+!24b U+05EA uni05EA
+!24c U+1E80 uni1E80 Extended latin
+!24d U+1E81 uni1E81 Extended latin
+!24e U+1E82 uni1E82 Extended latin
+!24f U+1E83 uni1E83 Extended latin
+!250 U+1E84 uni1E84 Extended latin
+!251 U+1E85 uni1E85 Extended latin
+!252 U+1EF2 uni1EF2 Extended latin
+!253 U+1EF3 uni1EF3 Extended latin
+!254 U+200C uni200C
+!255 U+200D uni200D
+!256 U+200E uni200E
+!257 U+200F uni200F
+!258 U+2012 uni2012
+!259 U+2013 uni2013
+!25a U+2014 uni2014
+!25b U+2015 uni2015
+!25c U+2017 uni2017
+!25d U+2018 uni2018
+!25e U+2019 uni2019
+!25f U+201A uni201A
+!260 U+201B uni201B
+!261 U+201C uni201C
+!262 U+201D uni201D
+!263 U+201E uni201E
+!264 U+2020 uni2020
+!265 U+2021 uni2021
+!266 U+2022 uni2022
+!267 U+2024 uni2024
+!268 U+2025 uni2025
+!269 U+2026 uni2026
+!26a U+202C uni202C
+!26b U+202D uni202D
+!26c U+202E uni202E
+!26d U+2032 uni2032
+!26e U+2033 uni2033
+!26f U+2034 uni2034
+!270 U+2035 uni2035
+!271 U+2036 uni2036
+!272 U+2037 uni2037
+!273 U+2039 uni2039
+!274 U+203A uni203A
+!275 U+203C uni203C
+!276 U+2044 uni2044
+!277 U+20AC uni20AC
+!278 U+2107 uni2107
+!279 U+210B uni210B
+!27a U+210E uni210E
+!27b U+210F uni210F
+!27c U+2111 uni2111
+!27d U+2112 uni2112
+!27e U+2113 uni2113
+!27f U+2115 uni2115
+!280 U+2116 uni2116
+!281 U+2118 uni2118
+!282 U+2119 uni2119
+!283 U+211A uni211A
+!284 U+211B uni211B
+!285 U+211C uni211C
+!286 U+211D uni211D
+!287 U+2122 uni2122
+!288 U+2124 uni2124
+!289 U+2126 uni2126
+!28a U+2127 uni2127
+!28b U+2128 uni2128
+!28c U+2129 uni2129
+!28d U+212B uni212B
+!28e U+212C uni212C
+!28f U+212E uni212E
+!290 U+212F uni212F
+!291 U+2130 uni2130
+!292 U+2131 uni2131
+!293 U+2133 uni2133
+!294 U+2134 uni2134
+!295 U+2135 uni2135
+!296 U+2136 uni2136
+!297 U+2137 uni2137
+!298 U+2138 uni2138
+!299 U+2190 uni2190
+!29a U+2191 uni2191
+!29b U+2192 uni2192
+!29c U+2193 uni2193
+!29d U+2194 uni2194
+!29e U+2195 uni2195
+!2a1 U+21D0 uni21D0
+!2a2 U+21D1 uni21D1
+!2a3 U+21D2 uni21D2
+!2a4 U+21D3 uni21D3
+!2a5 U+21D4 uni21D4
+!2a6 U+2200 uni2200
+!2a7 U+2202 uni2202
+!2a8 U+2203 uni2203
+!2a9 U+2204 uni2204
+!2aa U+2205 uni2205
+!2ab U+2206 uni2206
+!2ac U+2207 uni2207
+!2ad U+2208 uni2208
+!2ae U+2209 uni2209
+!2af U+220A uni220A
+!2b0 U+220B uni220B
+!2b1 U+220C uni220C
+!2b2 U+220D uni220D
+!2b3 U+220E uni220E
+!2b4 U+220F uni220F
+!2b5 U+2210 uni2210
+!2b6 U+2211 uni2211
+!2b7 U+2212 uni2212
+!2b8 U+2213 uni2213
+!2b9 U+2214 uni2214
+!2ba U+2215 uni2215
+!2bb U+2216 uni2216
+!2bc U+2217 uni2217
+!2bd U+2218 uni2218
+!2be U+2219 uni2219
+!2bf U+221A uni221A
+!2c0 U+221B uni221B
+!2c1 U+221C uni221C
+!2c2 U+221D uni221D
+!2c3 U+221E uni221E
+!2c4 U+221F uni221F
+!2c5 U+2220 uni2220
+!2c6 U+2221 uni2221
+!2c7 U+2222 uni2222
+!2c8 U+2223 uni2223
+!2c9 U+2224 uni2224
+!2ca U+2225 uni2225
+!2cb U+2226 uni2226
+!2cc U+2227 uni2227
+!2cd U+2228 uni2228
+!2ce U+2229 uni2229
+!2cf U+222A uni222A
+!2d0 U+222B uni222B
+!2d1 U+222C uni222C
+!2d2 U+222D uni222D
+!2d3 U+222E uni222E
+!2d4 U+222F uni222F
+!2d5 U+2230 uni2230
+!2d6 U+2231 uni2231
+!2d7 U+2232 uni2232
+!2d8 U+2233 uni2233
+!2d9 U+2234 uni2234
+!2da U+2235 uni2235
+!2db U+2236 uni2236
+!2dc U+2237 uni2237
+!2dd U+2238 uni2238
+!2de U+2239 uni2239
+!2df U+223A uni223A
+!2e0 U+223B uni223B
+!2e1 U+223C uni223C
+!2e2 U+223D uni223D
+!2e3 U+223E uni223E
+!2e4 U+223F uni223F
+!2e5 U+2240 uni2240
+!2e6 U+2241 uni2241
+!2e7 U+2242 uni2242
+!2e8 U+2243 uni2243
+!2e9 U+2244 uni2244
+!2ea U+2245 uni2245
+!2eb U+2246 uni2246
+!2ec U+2247 uni2247
+!2ed U+2248 uni2248
+!2ee U+2249 uni2249
+!2ef U+224A uni224A
+!2f0 U+224B uni224B
+!2f1 U+224C uni224C
+!2f2 U+224D uni224D
+!2f3 U+224E uni224E
+!2f4 U+224F uni224F
+!2f5 U+225F uni225F
+!2f6 U+2260 uni2260
+!2f7 U+2261 uni2261
+!2f8 U+2262 uni2262
+!2f9 U+2263 uni2263
+!2fa U+2264 uni2264
+!2fb U+2265 uni2265
+!2fc U+2266 uni2266
+!2fd U+2267 uni2267
+!2fe U+2268 uni2268
+!2ff U+2269 uni2269
+!300 U+226A uni226A
+!301 U+226B uni226B
+!302 U+226C uni226C
+!303 U+226D uni226D
+!304 U+226E uni226E
+!305 U+226F uni226F
+!306 U+2270 uni2270
+!307 U+2271 uni2271
+!308 U+2272 uni2272
+!309 U+2273 uni2273
+!30a U+2274 uni2274
+!30b U+2275 uni2275
+!30c U+2276 uni2276
+!30d U+2277 uni2277
+!30e U+2278 uni2278
+!30f U+2279 uni2279
+!310 U+227A uni227A
+!311 U+227B uni227B
+!312 U+227C uni227C
+!313 U+227D uni227D
+!314 U+227E uni227E
+!315 U+227F uni227F
+!316 U+2280 uni2280
+!317 U+2281 uni2281
+!318 U+2282 uni2282
+!319 U+2283 uni2283
+!31a U+2284 uni2284
+!31b U+2285 uni2285
+!31c U+2286 uni2286
+!31d U+2287 uni2287
+!31e U+2288 uni2288
+!31f U+2289 uni2289
+!320 U+22C0 uni22C0
+!321 U+22C1 uni22C1
+!322 U+22C2 uni22C2
+!323 U+22C3 uni22C3
+!324 U+22C4 uni22C4
+!325 U+22C5 uni22C5
+!326 U+2302 uni2302
+!327 U+2310 uni2310
+!328 U+2320 uni2320
+!329 U+2321 uni2321
+!32a U+2322 uni2322
+!32b U+2323 uni2323
+!32c U+2329 uni2329
+!32d U+232A uni232A
+!32e U+239B uni239B
+!32f U+239C uni239C
+!330 U+239D uni239D
+!331 U+239E uni239E
+!332 U+239F uni239F
+!333 U+23A0 uni23A0
+!334 U+23A1 uni23A1
+!335 U+23A2 uni2392
+!336 U+23A3 uni23A3
+!337 U+23A4 uni23A4
+!338 U+23A5 uni23A5
+!339 U+23A6 uni23A6
+!33a U+23A7 uni23A7
+!33b U+23A8 uni23A8
+!33c U+23A9 uni23A9
+!33d U+23AA uni23AA
+!33e U+23AB uni23AB
+!33f U+23AC uni23AC
+!340 U+23AD uni23AD
+!341 U+23AE uni23AE
+!342 U+23AF uni23AF
+!343 U+23B0 uni23B0
+!344 U+23B1 uni23B1
+!345 U+23B2 uni23B2
+!346 U+23B3 uni23B3
+!347 U+23B4 uni23B4
+!348 U+23B5 uni23B5
+!349 U+23B6 uni23B6
+!34a U+23B7 uni23B7
+!34b U+23B8 uni23B8
+!34c U+23B9 uni23B9
+!34d U+23BA uni23BA
+!34e U+23BB uni23BB
+!34f U+23BC uni23BC
+!350 U+23BD uni23BD
+!351 U+23BE uni23BE
+!352 U+23BF uni23BF
+!353 U+23DE uni23DE
+!354 U+23DF uni23DF
+!355 U+23E1 uni23E1
+!356 U+25A0 uni25A0
+!357 U+25A1 uni25A1
+!358 U+25AA uni25AA
+!359 U+25AB uni25AB
+!35b U+25B2 uni25B2
+!35c U+25B3 uni25B3
+!35d U+25BC uni25BC
+!35e U+25BD uni25BD
+!35a U+25C6 uni25C6
+!35f U+25CA uni25CA
+!360 U+25CB uni25CB
+!361 U+25CF uni25CF
+!364 U+25E6 uni25E6
+!362 U+25FB uni25FB
+!363 U+25FC uni25FC
+!365 U+2609 uni2609
+!366 U+2639 uni2639
+!367 U+263C uni263C
+!368 U+263D uni263D
+!369 U+263E uni263E
+!36a U+263F uni263F
+!36b U+2640 uni2640
+!36c U+2641 uni2641
+!36d U+2642 uni2642
+!36e U+2643 uni2643
+!36f U+2644 uni2644
+!370 U+2645 uni2645
+!371 U+2646 uni2646
+!372 U+2647 uni2647
+!373 U+2648 uni2648
+!374 U+2649 uni2649
+!375 U+264A uni264A
+!376 U+264B uni264B
+!377 U+264C uni264C
+!378 U+264D uni264D
+!379 U+264E uni264E
+!37a U+264F uni264F
+!37b U+2650 uni2650
+!37c U+2651 uni2651
+!37d U+2652 uni2652
+!37e U+2653 uni2653
+!37f U+25C7 uni25C7
+!380 U+2297 uni2297
+!381 U+2299 uni2299
diff -U 3 -H -d -r -N -- term/PostScript/unicode_maps.README term/PostScript/unicode_maps.README
--- term/PostScript/unicode_maps.README 1970-01-01 01:00:00.000000000 +0100
+++ term/PostScript/unicode_maps.README 2009-05-09 13:53:00.000000000 +0200
@@ -0,0 +1,75 @@
+ unicode maps README
+ ===================
+
+Each unicode_XXX.map file contains a list of unicode code points that might
+plausibly be used from inside gnuplot. These are only relevant to the
+PostScript terminal drivers, and only if you want to use UTF-8 encoding.
+
+If you have a TTF unicode font containing the relevant characters, you can
+use the unicode map file to instruct the external program ttf2pt1 to prepare
+an Adobe Type 1 font.
+
+For example:
+
+ ttf2pt1 -p ft -e -L unicode_big.map arialuni.ttf
+
+This will extract character glyphs for these particular code points
+from arialuni.ttf and create a new file arialuni.ps. You can use this new
+*.pfa font file from gnuplot by saying
+
+ set encoding utf8
+ set term post fontfile 'arialuni.ps' font 'ArialUnicodeMS'
+
+Note that gnuplot can run ttf2pt1 for you on the fly if you
+first define the appropriate command in the environmental variable
+GNUPLOT_TTFTOPFA. For example:
+
+ setenv GNUPLOT_TTFTOPFA "ttf2pt1 -e -p ft -L unimap.map %s -"
+
+In this case you could say
+
+ set encoding utf8
+ set term post fontfile 'arialuni.ttf' font 'ArialUnicodeMS'
+
+In either case, the converted glyphs will be embedded in your
+gnuplot output file. There are several caveats:
+
+1) This can make the file quite large.
+
+2) If a glyph isn't in the starting *.ttf font to begin with, nothing
+ you do here will fix that.
+
+3) If gnuplot runs the conversion for you, it will be triggered each
+ time you plot.
+
+Several unicode map files are provided. They differ in how many
+characters they request, and hence in the size of the resulting font file.
+
+ unicode_small.map (462 characters)
+ ===================================
+
+- the Latin1 character set
+- the basic Greek alphabet
+- basic math and physical symbols
+- 133 less obscure math symbols from Unicode pages 34 and 35
+
+
+ unicode_big.map (863 characters)
+ =================================
+
+- the Latin1 character set
+- extended Latin character sets needed to support other European languages
+- the Cyrillic alphabet, with extensions for various slavic languages
+ (may not be complete - please report omissions)
+- the basic Greek and Hebrew alphabets
+- basic math symbols
+- 176 mathematical symbols, some obscure, from Unicode pages 34 and 35
+- physical and astronomical symbols
+
+The unicode_big map makes a total of about 860 glyphs available to use
+from gnuplot, but only if they exist in the original TTF font file.
+The maximum number that ttf2pt1 can process is 1024.
+This is only a tiny fraction of the total characters indexed by Unicode.
+But if you need more, probably you would do better to use a different
+gnuplot terminal that supports direct use of UTF-8 TTF fonts (pdf, png, svg).
+
diff -U 3 -H -d -r -N -- term/PostScript/unicode_small.map term/PostScript/unicode_small.map
--- term/PostScript/unicode_small.map 1970-01-01 01:00:00.000000000 +0100
+++ term/PostScript/unicode_small.map 2009-05-09 13:53:00.000000000 +0200
@@ -0,0 +1,462 @@
+=00 U+0000
+=01 U+0001
+=02 U+0002
+=03 U+0003
+=04 U+0004
+=05 U+0005
+=06 U+0006
+=07 U+0007
+=08 U+0008
+=09 U+0009
+=0A U+000A
+=0B U+000B
+=0C U+000C
+=0D U+000D
+=0E U+000E
+=0F U+000F
+=10 U+0010
+=11 U+0011
+=12 U+0012
+=13 U+0013
+=14 U+0014
+=15 U+0015
+=16 U+0016
+=17 U+0017
+=18 U+0018
+=19 U+0019
+=1A U+001A
+=1B U+001B
+=1C U+001C
+=1D U+001D
+=1E U+001E
+=1F U+001F
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+=A0 U+00A0
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+=AD U+00AD
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+=B2 U+00B2
+=B3 U+00B3
+!B4 U+00B4 acute
+=B5 U+00B5
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+=B9 U+00B9
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+00D0 Eth
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+00DE Thorn
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+00F0 eth
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+00FE thorn
+!FF U+00FF ydieresis
+!19e U+0391 uni0391
+!19f U+0392 uni0392
+!1a0 U+0393 uni0393
+!1a1 U+0394 uni0394
+!1a2 U+0395 uni0395
+!1a3 U+0396 uni0396
+!1a4 U+0397 uni0397
+!1a5 U+0398 uni0398
+!1a6 U+0399 uni0399
+!1a7 U+039A uni039A
+!1a8 U+039B uni039B
+!1a9 U+039C uni039C
+!1aa U+039D uni039D
+!1ab U+039E uni039E
+!1ac U+039F uni039F
+!1ad U+03A0 uni03A0
+!1ae U+03A1 uni03A1
+!1af U+03A3 uni03A3
+!1b0 U+03A4 uni03A4
+!1b1 U+03A5 uni03A5
+!1b2 U+03A6 uni03A6
+!1b3 U+03A7 uni03A7
+!1b4 U+03A8 uni03A8
+!1b5 U+03A9 uni03A9
+!1b6 U+03B1 uni03B1
+!1b7 U+03B2 uni03B2
+!1b8 U+03B3 uni03B3
+!1b9 U+03B4 uni03B4
+!1ba U+03B5 uni03B5
+!1bb U+03B6 uni03B6
+!1bc U+03B7 uni03B7
+!1bd U+03B8 uni03B8
+!1be U+03B9 uni03B9
+!1bf U+03BA uni03BA
+!1c0 U+03BB uni03BB
+!1c1 U+03BC uni03BC
+!1c2 U+03BD uni03BD
+!1c3 U+03BE uni03BE
+!1c4 U+03BF uni03BF
+!1c5 U+03C0 uni03C0
+!1c6 U+03C1 uni03C1
+!1c7 U+03C2 uni03C2
+!1c8 U+03C3 uni03C3
+!1c9 U+03C4 uni03C4
+!1ca U+03C5 uni03C5
+!1cb U+03C6 uni03C6
+!1cc U+03C7 uni03C7
+!1cd U+03C8 uni03C8
+!1ce U+03C9 uni03C9
+!1cf U+03D0 uni03D0
+!1d0 U+03D1 uni03D1
+!1d1 U+03D5 uni03D5
+!1d2 U+03D6 uni03D6
+!25b U+2016 uni2016
+!26d U+2032 uni2032
+!26e U+2033 uni2033
+!26f U+2034 uni2034
+!270 U+2035 uni2035
+!271 U+2036 uni2036
+!272 U+2037 uni2037
+!273 U+2039 uni2039
+!274 U+203A uni203A
+!275 U+203C uni203C
+!276 U+2044 uni2044
+!277 U+20AC uni20AC
+!278 U+2107 uni2107
+!279 U+210B uni210B
+!27a U+210E uni210E
+!27b U+210F uni210F
+!27e U+2113 uni2113
+!284 U+211B uni211B
+!289 U+2126 uni2126
+!28a U+2127 uni2127
+!28d U+212B uni212B
+!295 U+2135 uni2135
+!296 U+2136 uni2136
+!297 U+2137 uni2137
+!298 U+2138 uni2138
+!299 U+2190 uni2190
+!29a U+2191 uni2191
+!29b U+2192 uni2192
+!29c U+2193 uni2193
+!29d U+2194 uni2194
+!29e U+2195 uni2195
+!2a1 U+21D0 uni21D0
+!2a2 U+21D1 uni21D1
+!2a3 U+21D2 uni21D2
+!2a4 U+21D3 uni21D3
+!2a5 U+21D4 uni21D4
+!2a6 U+2200 uni2200
+!2a7 U+2202 uni2202
+!2a8 U+2203 uni2203
+!2aa U+2205 uni2205
+!2ab U+2206 uni2206
+!2ac U+2207 uni2207
+!2ad U+2208 uni2208
+!2ae U+2209 uni2209
+!2af U+220A uni220A
+!2b0 U+220B uni220B
+!2b1 U+220C uni220C
+!2b2 U+220D uni220D
+!2b4 U+220F uni220F
+!2b6 U+2211 uni2211
+!2b7 U+2212 uni2212
+!2b8 U+2213 uni2213
+!2ba U+2215 uni2215
+!2bb U+2216 uni2216
+!2bc U+2217 uni2217
+!2bd U+2218 uni2218
+!2be U+2219 uni2219
+!2bf U+221A uni221A
+!2c0 U+221B uni221B
+!2c1 U+221C uni221C
+!2c2 U+221D uni221D
+!2c3 U+221E uni221E
+!2c4 U+221F uni221F
+!2c8 U+2223 uni2223
+!2ca U+2225 uni2225
+!2cc U+2227 uni2227
+!2cd U+2228 uni2228
+!2ce U+2229 uni2229
+!2cf U+222A uni222A
+!2d0 U+222B uni222B
+!2d1 U+222C uni222C
+!2d2 U+222D uni222D
+!2d3 U+222E uni222E
+!2d9 U+2234 uni2234
+!2da U+2235 uni2235
+!2db U+2236 uni2236
+!2dc U+2237 uni2237
+!2e1 U+223C uni223C
+!2e2 U+223D uni223D
+!2e3 U+223E uni223E
+!2e4 U+223F uni223F
+!2e6 U+2241 uni2241
+!2e7 U+2242 uni2242
+!2e8 U+2243 uni2243
+!2e9 U+2244 uni2244
+!2ea U+2245 uni2245
+!2eb U+2246 uni2246
+!2ec U+2247 uni2247
+!2ed U+2248 uni2248
+!2ee U+2249 uni2249
+!2f4 U+224F uni224F
+!2f5 U+225F uni225F
+!2f6 U+2260 uni2260
+!2f7 U+2261 uni2261
+!2fa U+2264 uni2264
+!2fb U+2265 uni2265
+!2fc U+2266 uni2266
+!2fd U+2267 uni2267
+!300 U+226A uni226A
+!301 U+226B uni226B
+!302 U+226C uni226C
+!303 U+226D uni226D
+!304 U+226E uni226E
+!305 U+226F uni226F
+!306 U+2270 uni2270
+!307 U+2271 uni2271
+!308 U+2272 uni2272
+!309 U+2273 uni2273
+!30a U+2274 uni2274
+!30b U+2275 uni2275
+!310 U+227A uni227A
+!311 U+227B uni227B
+!312 U+227C uni227C
+!313 U+227D uni227D
+!314 U+227E uni227E
+!315 U+227F uni227F
+!316 U+2280 uni2280
+!317 U+2281 uni2281
+!318 U+2282 uni2282
+!319 U+2283 uni2283
+!31a U+2284 uni2284
+!31b U+2285 uni2285
+!31c U+2286 uni2286
+!31d U+2287 uni2287
+!31e U+2288 uni2288
+!31f U+2289 uni2289
+!389 U+2297 uni2297
+!38b U+2299 uni2299
+!320 U+22C0 uni22C0
+!321 U+22C1 uni22C1
+!322 U+22C2 uni22C2
+!323 U+22C3 uni22C3
+!327 U+2310 uni2310
+!328 U+2320 uni2320
+!329 U+2321 uni2321
+!32a U+2322 uni2322
+!32b U+2323 uni2323
+!32c U+2329 uni2329
+!32d U+232A uni232A
+!32e U+239B uni239B
+!32f U+239C uni239C
+!330 U+239D uni239D
+!331 U+239E uni239E
+!332 U+239F uni239F
+!333 U+23A0 uni23A0
+!334 U+23A1 uni23A1
+!335 U+23A2 uni2392
+!336 U+23A3 uni23A3
+!337 U+23A4 uni23A4
+!338 U+23A5 uni23A5
+!339 U+23A6 uni23A6
+!33a U+23A7 uni23A7
+!33b U+23A8 uni23A8
+!33c U+23A9 uni23A9
+!33d U+23AA uni23AA
+!33e U+23AB uni23AB
+!33f U+23AC uni23AC
+!340 U+23AD uni23AD
+!341 U+23AE uni23AE
+!342 U+23AF uni23AF
+!343 U+23B0 uni23B0
+!344 U+23B1 uni23B1
+!345 U+23B2 uni23B2
+!346 U+23B3 uni23B3
+!347 U+23B4 uni23B4
+!348 U+23B5 uni23B5
+!349 U+23B6 uni23B6
+!34a U+23B7 uni23B7
+!34b U+23B8 uni23B8
+!34c U+23B9 uni23B9
+!356 U+25A0 uni25A0
+!357 U+25A1 uni25A1
+!358 U+25AA uni25AA
+!359 U+25AB uni25AB
+!35b U+25B2 uni25B2
+!35c U+25B3 uni25B3
+!35d U+25BC uni25BC
+!35e U+25BD uni25BD
+!35a U+25C6 uni25C6
+!35f U+25CA uni25CA
+!360 U+25CB uni25CB
+!361 U+25CF uni25CF
+!364 U+25E6 uni25E6
+!362 U+25FB uni25FB
+!363 U+25FC uni25FC
+!365 U+2609 uni2609
diff -U 3 -H -d -r -N -- term/PostScript/utf-8.ps term/PostScript/utf-8.ps
--- term/PostScript/utf-8.ps 1970-01-01 01:00:00.000000000 +0100
+++ term/PostScript/utf-8.ps 2009-05-09 13:53:00.000000000 +0200
@@ -0,0 +1,58 @@
+%
+% Base ISO8859-1 character encoding plus support macros for UTF-8 encoding
+% via the glyphshow operator
+%
+/reencodeISO {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding ISOLatin1Encoding def } if
+} if
+currentdict end definefont
+} def
+/ISOLatin1Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
+/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
+/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar
+/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot
+/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior
+/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine
+/guillemotright/onequarter/onehalf/threequarters/questiondown
+/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute
+/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis
+/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
+/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex
+/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis
+/yacute/thorn/ydieresis
+] def
+
+/Gshow { dup type /stringtype eq { show } { glyphshow } ifelse } def
+
+/Gsall { {Gshow} forall } def
+/Gwidth {
+ dup currentpoint pop exch
+ gsave 6 array currentmatrix nulldevice setmatrix Gsall currentpoint pop grestore sub
+ } def
+/GLshow {currentpoint stroke M 0 vshift R
+ Blacktext {gsave 0 setgray Gsall grestore} {Gsall} ifelse} def
+/GRshow {currentpoint stroke M dup Gwidth vshift R
+ Blacktext {gsave 0 setgray Gsall grestore} {Gsall} ifelse} def
+/GCshow {currentpoint stroke M dup Gwidth 2 div vshift R
+ Blacktext {gsave 0 setgray Gsall grestore} {Gsall} ifelse} def
diff -U 3 -H -d -r -N -- term/gd.trm term/gd.trm
--- term/gd.trm 2009-03-03 03:43:52.000000000 +0100
+++ term/gd.trm 2009-05-09 13:53:00.000000000 +0200
@@ -1861,7 +1861,7 @@
#ifdef gdFTEX_Adobe_Custom
/* libgd defaults to UTF-8 encodings. We have limited options for */
/* over-riding this, but we can try */
- if (ENHgd_font && !strcmp(ENHgd_font,"Symbol")) {
+ if (encoding != S_ENC_UTF8 && ENHgd_font && !strcmp(ENHgd_font,"Symbol")) {
PNG_FONT_INFO.flags |= gdFTEX_CHARMAP;
PNG_FONT_INFO.charmap = gdFTEX_Adobe_Custom;
} else {
diff -U 3 -H -d -r -N -- term/post.trm term/post.trm
--- term/post.trm 2009-03-03 03:44:07.000000000 +0100
+++ term/post.trm 2009-05-09 13:53:00.000000000 +0200
@@ -1,5 +1,5 @@
/* Hello, Emacs: this is -*-C-*- !
- * $Id: post.trm,v 1.203.2.17 2009/03/02 17:40:06 mikulik Exp $
+ * $Id: post.trm,v 1.230 2008/03/13 18:01:27 sfeam Exp $
*/
/* GNUPLOT - post.trm */
@@ -61,14 +61,18 @@
*
* Dan Sebald, 7 March 2003: terminal entry for image functionality
*
- * Harald Harders (h.harders@tu-bs.de), 2004-12-02:
- * Moved all terminal settings into a single structure.
+ * Harald Harders (h.harders@tu-bs.de), 2004-12-02:
+ * Moved all terminal settings into a single structure.
*
- * Harald Harders (h.harders@tu-bs.de), 2005-02-08:
- * Merged functionality of postscript, pslatex, pstex, and epslatex terminals.
+ * Harald Harders (h.harders@tu-bs.de), 2005-02-08:
+ * Merged functionality of postscript, pslatex, pstex, and epslatex terminals.
*
- * Ethan Merritt Mar 2006: Break out prolog and character encodings into
- * separate files loaded at runtime
+ * Ethan Merritt Mar 2006: Break out prolog and character encodings into
+ * separate files loaded at runtime
+ *
+ * Thomas Henlich Sep 2007: Add support for UTF-8 encoding via the glyphshow
+ * operator. It supports PostScript Type1 fonts that use glyph names according
+ * to the Adobe Glyph List For New Fonts.
*/
#include "driver.h"
@@ -106,7 +110,7 @@
TERM_PUBLIC void PS_set_color (t_colorspec *);
TERM_PUBLIC void PS_filled_polygon (int, gpiPoint *);
#ifdef WITH_IMAGE
-TERM_PUBLIC void PS_image __PROTO((unsigned, unsigned, coordval *, gpiPoint *, t_imagecolor));
+TERM_PUBLIC void PS_image __PROTO((unsigned int, unsigned int, coordval *, gpiPoint *, t_imagecolor));
#endif
/* To support "set term post enhanced" */
@@ -123,6 +127,9 @@
TERM_PUBLIC void PS_path __PROTO((int p));
static TBOOLEAN PS_newpath = FALSE;
+static TBOOLEAN ENHps_opened_string = FALSE; /* try to cut out empty ()'s */
+
+TERM_PUBLIC void PS_layer __PROTO((t_termlayer syncpoint));
#endif /* TERM_PROTO */
@@ -140,11 +147,12 @@
} \
} while (0)
-/* Datastructure implementing inclusion of font files */
+/* Data structure implementing inclusion of font files */
struct ps_fontfile_def {
struct ps_fontfile_def *next;/* pointer to next fontfile in linked list */
char *fontfile_name;
char *fontfile_fullname;
+ char *fontname;
};
/* Terminal type of postscript dialect */
@@ -181,13 +189,14 @@
double palfunc_deviation; /* terminal option */
TBOOLEAN oldstyle;
TBOOLEAN epslatex_standalone;
+ TBOOLEAN adobeglyphnames; /* Choice of output names for UTF8 */
} ps_params_t;
#define POST_PARAMS_DEFAULT { \
PSTERM_POSTSCRIPT, 50, 50, \
PSTERM_LANDSCAPE, FALSE, FALSE, FALSE, FALSE, 1.0, 1.0, FALSE, \
FALSE, FALSE, NULL, "Helvetica", 14, FALSE, FALSE, 2000, 0.003, \
- FALSE, FALSE \
+ FALSE, TRUE \
}
static ps_params_t post_params = POST_PARAMS_DEFAULT;
@@ -261,7 +270,9 @@
static char *pslatex_auxname = NULL;
/* Routine to copy pre-existing prolog files into output stream */
+static FILE *PS_open_prologue_file __PROTO((char *));
static void PS_dump_prologue_file __PROTO((char *));
+static void PS_load_glyphlist __PROTO((void));
static const char GPFAR * GPFAR OldEPSL_linetypes[] = {
/* Line Types */
@@ -280,20 +291,21 @@
/* For MFshow and MFwidth the tos is an array with the string and font info: */
/* [<fontname (a string)> <fontsize> <vertical offset> <width significant?> <printed?> <overprint> <text string>] */
/* EAM Mar 2004 - Add in a special case overprint 3 = save, overprint 4 = restore */
+/* EAM Nov 2007 - Accommodate UTF-8 support (Gshow) */
"/MFshow {\n",
" { dup 5 get 3 ge\n", /* EAM test for overprint 3 or 4 */
" { 5 get 3 eq {gsave} {grestore} ifelse }\n", /* EAM */
" {dup dup 0 get findfont exch 1 get scalefont setfont\n",
" [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6\n",
-" get exch 4 get {show} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq\n",
+" get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq\n",
" {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5\n",
" get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div\n",
" dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get\n",
" show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop\n",
" pop aload pop M} ifelse }ifelse }ifelse }\n",
" ifelse }\n", /* EAM */
-" forall} bind def\n",
+" forall} def\n",
/* get the width of the text */
/* HH 2005-07-24 - Add in a special case overprint 3 = save, 4 = restore
@@ -301,9 +313,12 @@
* additional value on the stack. between XYsave and XYrestore,
* this number is increased by the strings. By pop'ing this number, all
* strings between XYsave and XYrestore are ignored. */
+/* EAM Nov 2007 - GSwidth is to allow the operator to work either with a string
+ * or with a glyph. Needed for UTF-8 support. Gwidth may do it better. */
+"/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def\n",
"/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse }\n",
" {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont\n",
-" 6 get stringwidth pop add} {pop} ifelse} ifelse} forall} bind def\n",
+" 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def\n",
/* flush left show */
"/MLshow { currentpoint stroke M\n",
@@ -366,8 +381,11 @@
if (strcmp(fnp->name, myfname) == 0)
return NULL;
- /* we did not find the name */
+ /* Ignore it if illegal characters will corrupt the PostScript syntax */
+ if (strpbrk(myfname, "{}[]() "))
+ return NULL;
+ /* we have not seen this font before; store name and apply encoding */
fnp = (struct PS_FontName *)gp_alloc(sizeof(struct PS_FontName),
"PostScript Font record");
fnp->name = gp_strdup(myfname);
@@ -376,12 +394,17 @@
switch(encoding) {
case S_ENC_ISO8859_1:
+ case S_ENC_UTF8:
recode = "reencodeISO def\n";
break;
case S_ENC_ISO8859_2:
recode = "reencodeISO2 def\n";
break;
- case S_ENC_ISO8859_15:
+ case S_ENC_ISO8859_9: /* ISO8859-9 is Latin5 */
+ case S_ENC_CP1254:
+ recode = "reencodeISO9 def\n";
+ break;
+ case S_ENC_ISO8859_15: /* ISO8859-15 is Latin9 */
recode = "reencodeISO15 def\n";
break;
case S_ENC_CP437:
@@ -407,11 +430,13 @@
break;
}
- if (can_reencode && recode) {
- fprintf(gppsfile,"/%s %s", myfname, recode);
- return NULL;
- } else
- return recode;
+ if (recode) {
+ if (ENHps_opened_string)
+ ENHPS_FLUSH();
+ fprintf(gppsfile,"/%s %s", fnp->name, recode);
+ }
+
+ return NULL;
}
char *
@@ -454,6 +479,7 @@
PSLATEX_ROTATE, PSLATEX_NOROTATE, PSLATEX_AUXFILE, PSLATEX_NOAUXFILE,
PSLATEX_OLDSTYLE, PSLATEX_NEWSTYLE, EPSLATEX_HEADER, EPSLATEX_NOHEADER,
PS_SIZE,
+ PS_ADOBEGLYPHNAMES, PS_NOADOBEGLYPHNAMES,
PS_OTHER
};
@@ -499,6 +525,8 @@
{ "noa$uxfile", PSLATEX_NOAUXFILE },
{ "old$style", PSLATEX_OLDSTYLE },
{ "new$style", PSLATEX_NEWSTYLE },
+ { "adobe$glyphnames", PS_ADOBEGLYPHNAMES },
+ { "noadobe$glyphnames", PS_NOADOBEGLYPHNAMES },
{ NULL, PS_OTHER }
};
@@ -848,35 +876,36 @@
break;
case PS_FONTFILE: {
TBOOLEAN deleteentry = FALSE;
+ char *fontfilename = NULL;
c_token++;
if (ps_params->terminal != PSTERM_POSTSCRIPT)
int_error(c_token,
"extraneous argument in set terminal %s",term->name);
- if (!isstring(c_token)) {
- if (equals(c_token, "add"))
- c_token++;
- else if (almost_equals(c_token, "del$ete")) {
- deleteentry = TRUE;
- c_token++;
- } else
- int_error(c_token, "Font filename expected");
- }
- if (isstring(c_token)) {
- TBOOLEAN filename_doubled = FALSE;
- struct ps_fontfile_def *curr_ps_fontfile =
+ if (equals(c_token, "add"))
+ c_token++;
+ else if (almost_equals(c_token, "del$ete")) {
+ deleteentry = TRUE;
+ c_token++;
+ }
+
+ if (!(fontfilename = try_to_get_string())) {
+ int_error(c_token, "Font filename expected");
+ } else {
+ TBOOLEAN filename_doubled = FALSE;
+ struct ps_fontfile_def *curr_ps_fontfile =
ps_params->first_fontfile;
- struct ps_fontfile_def *prev_ps_fontfile = NULL;
- struct ps_fontfile_def *new_ps_fontfile =
- gp_alloc(sizeof(struct ps_fontfile_def),
- "new_ps_fontfile");
+ struct ps_fontfile_def *prev_ps_fontfile = NULL;
+ struct ps_fontfile_def *new_ps_fontfile =
+ gp_alloc(sizeof(struct ps_fontfile_def),
+ "new_ps_fontfile");
- new_ps_fontfile->fontfile_name =
- gp_alloc (token_len(c_token),
- "new_ps_fontfile->fontfile_name");
- quote_str(new_ps_fontfile->fontfile_name,
- c_token, token_len(c_token));
- gp_expand_tilde(&(new_ps_fontfile->fontfile_name));
+ new_ps_fontfile->fontfile_name =
+ gp_alloc (token_len(c_token),
+ "new_ps_fontfile->fontfile_name");
+ gp_expand_tilde(&fontfilename);
+ new_ps_fontfile->fontfile_name = fontfilename;
+ new_ps_fontfile->fontname = NULL;
if (!deleteentry) {
#if defined(PIPES)
if (*(new_ps_fontfile->fontfile_name) != '<') {
@@ -884,7 +913,7 @@
new_ps_fontfile->fontfile_fullname =
fontpath_fullname(new_ps_fontfile->fontfile_name);
if (!new_ps_fontfile->fontfile_fullname)
- int_error(c_token, "Font file '%s' not found",
+ int_error(c_token-1, "Font file '%s' not found",
new_ps_fontfile->fontfile_name);
#if defined(PIPES)
} else
@@ -901,45 +930,43 @@
lf=lf->prev;
}
if ((lf && lf->interactive) || interactive)
- /* if (interactive) { */
PS_load_fontfile(new_ps_fontfile,FALSE);
}
- if (ps_params->first_fontfile) {
- while (curr_ps_fontfile) {
- if (strcmp(curr_ps_fontfile->fontfile_name,
- new_ps_fontfile->fontfile_name) == 0) {
- filename_doubled = TRUE;
- if (deleteentry) {
+ if (ps_params->first_fontfile) {
+ while (curr_ps_fontfile) {
+ if (strcmp(curr_ps_fontfile->fontfile_name,
+ new_ps_fontfile->fontfile_name) == 0) {
+ filename_doubled = TRUE;
+ if (deleteentry) {
delete_ps_fontfile(prev_ps_fontfile,
curr_ps_fontfile);
- curr_ps_fontfile = NULL;
- break;
- }
- }
- prev_ps_fontfile = curr_ps_fontfile;
- curr_ps_fontfile = curr_ps_fontfile->next;
- }
- if (!filename_doubled) {
- if (!deleteentry)
- prev_ps_fontfile->next = new_ps_fontfile;
- else
- int_warn(c_token,"Can't delete Font filename '%s'",
- new_ps_fontfile->fontfile_name);
- }
- } else {
- if (!deleteentry)
- ps_params->first_fontfile = new_ps_fontfile;
- else
- int_warn(c_token, "Can't delete Font filename '%s'",
- new_ps_fontfile->fontfile_name);
- }
- c_token++;
- } else
- int_error(c_token, "Font filename expected");
- break;
- }
- case PS_NOFONTFILES:
+ curr_ps_fontfile = NULL;
+ break;
+ }
+ }
+ prev_ps_fontfile = curr_ps_fontfile;
+ curr_ps_fontfile = curr_ps_fontfile->next;
+ }
+ if (!filename_doubled) {
+ if (!deleteentry)
+ prev_ps_fontfile->next = new_ps_fontfile;
+ else
+ int_warn(c_token,"Can't delete Font filename '%s'",
+ new_ps_fontfile->fontfile_name);
+ }
+ } else {
+ if (!deleteentry)
+ ps_params->first_fontfile = new_ps_fontfile;
+ else
+ int_warn(c_token, "Can't delete Font filename '%s'",
+ new_ps_fontfile->fontfile_name);
+ }
+ c_token++;
+ }
+ break;
+ }
+ case PS_NOFONTFILES:
if (ps_params->terminal != PSTERM_POSTSCRIPT)
int_error(c_token,
"extraneous argument in set terminal %s",term->name);
@@ -948,6 +975,14 @@
ps_params->first_fontfile);
++c_token;
break;
+ case PS_ADOBEGLYPHNAMES:
+ ps_params->adobeglyphnames = TRUE;
+ ++c_token;
+ break;
+ case PS_NOADOBEGLYPHNAMES:
+ ps_params->adobeglyphnames = FALSE;
+ ++c_token;
+ break;
case PS_PALFUNCPARAM:
if (set_palfunc)
int_error(c_token,
@@ -999,8 +1034,16 @@
set_fontsize = TRUE;
*comma = '\0';
}
- if (*s)
+ if (*s) {
+ /* Filter out characters that would confuse PostScript */
+ if (strpbrk(s, "()[]{}| ")) {
+ int_warn(c_token-1,"Illegal characters in PostScript font name.");
+ int_warn(NO_CARET,"I will try to fix it but this may not work.");
+ while (strpbrk(s, "()[]{}| "))
+ *(strpbrk(s, "()[]{}| ")) = '-';
+ }
strncpy(ps_params->font, s, sizeof(ps_params->font));
+ }
free(s);
} else
int_error(c_token-1,
@@ -1118,6 +1161,12 @@
}
#endif
+ if ((encoding == S_ENC_UTF8) && (ps_params->terminal == PSTERM_POSTSCRIPT)) {
+ sprintf(tmp_term_options," %sadobeglyphnames \\\n ",
+ ps_params->adobeglyphnames ? "" : "no");
+ strcat(term_options,tmp_term_options);
+ }
+
if (ps_explicit_size) {
if (ps_explicit_units == CM)
sprintf(tmp_term_options,"size %.2fcm, %.2fcm ",
@@ -1152,6 +1201,29 @@
static TBOOLEAN ps_common_uses_fonts;
static unsigned int ps_common_xoff, ps_common_yoff;
+/* The default UTF8 code will use glyph identifiers uniXXXX for all glyphs above 0x0100.
+ * If you define ADOBE_ENCODING_NAMES, then it will instead use the glyph names from the
+ * file aglfn.txt. Names in the range 0x0100 - 0x01FF correspond to those used by the
+ * Latin1 encoding scheme. This unicode code page deliberately uses the same character
+ * mapping as Latin1. Adobe also recommends names for many characters outside this
+ * range, but not all fonts adhere to this. You can substitute a different aglfn.txt
+ * file at run time if you want to use a different scheme.
+ */
+#define ADOBE_ENCODING_NAMES 1
+
+#if (ADOBE_ENCODING_NAMES)
+
+typedef struct ps_glyph {
+ unsigned long unicode;
+ char * glyphname;
+} ps_glyph;
+
+static ps_glyph *aglist = NULL;
+static int aglist_alloc = 0;
+static int aglist_size = 0;
+static int psglyphs = 0;
+
+#endif
TERM_PUBLIC void
PS_load_fontfile(struct ps_fontfile_def *current_ps_fontfile, TBOOLEAN doload)
@@ -1206,7 +1278,7 @@
current_ps_fontfile->fontfile_name + 1);
#endif
}
- else if (strcmp(ext,"ttf") == 0) {
+ else if (!strcmp(ext,"ttf") || !strcmp(ext,"otf")) {
/* TrueType */
#if defined(PIPES)
ispipe = TRUE;
@@ -1285,6 +1357,7 @@
strcpy(fontname,strstr(line+1,"/")+1);
fnende = strstr(fontname," ");
*fnende = '\0';
+ current_ps_fontfile->fontname = gp_strdup(fontname);
/* Print font name */
if (!doload) {
if (current_ps_fontfile->fontfile_fullname)
@@ -1365,6 +1438,8 @@
while (current_ps_fontfile) {
PS_load_fontfile(current_ps_fontfile,doload);
+ if (current_ps_fontfile->fontname)
+ PS_RememberFont(current_ps_fontfile->fontname, 1);
current_ps_fontfile = current_ps_fontfile->next;
}
}
@@ -1518,11 +1593,16 @@
free(outstr2);
}
+ /* Dump the body of the prologue */
+ PS_dump_prologue_file("prologue.ps");
+
/* insert font encoding vector */
if (uses_fonts) {
switch (encoding) {
case S_ENC_ISO8859_1: PS_dump_prologue_file("8859-1.ps"); break;
case S_ENC_ISO8859_2: PS_dump_prologue_file("8859-2.ps"); break;
+ case S_ENC_CP1254:
+ case S_ENC_ISO8859_9: PS_dump_prologue_file("8859-9.ps"); break;
case S_ENC_ISO8859_15: PS_dump_prologue_file("8859-15.ps"); break;
case S_ENC_CP437: PS_dump_prologue_file("cp437.ps"); break;
case S_ENC_CP850: PS_dump_prologue_file("cp850.ps"); break;
@@ -1530,14 +1610,14 @@
case S_ENC_CP1250: PS_dump_prologue_file("cp1250.ps"); break;
case S_ENC_KOI8_R: PS_dump_prologue_file("koi8r.ps"); break;
case S_ENC_KOI8_U: PS_dump_prologue_file("koi8u.ps"); break;
+ case S_ENC_UTF8: PS_dump_prologue_file("utf-8.ps");
+ if (!aglist) PS_load_glyphlist();
+ break;
case S_ENC_DEFAULT:
default: break;
}
}
- /* Dump the body of the prologue */
- PS_dump_prologue_file("prologue.ps");
-
/* Redefine old epslatex linetypes if requested */
if ((ps_params->terminal == PSTERM_EPSLATEX) && ps_params->oldstyle) {
for (i = 0; OldEPSL_linetypes[i] != NULL; i++)
@@ -1582,6 +1662,7 @@
xmax_t = term->xmax * (xsize + xoffset) / (2*PS_SC);
ymin_t = term->ymax * yoffset / (2*PS_SC);
ymax_t = term->ymax * (ysize + yoffset) / (2*PS_SC);
+ term->tscale = PS_SC * 2;
break;
case PSTERM_PORTRAIT:
if (!ps_explicit_size) {
@@ -1592,6 +1673,7 @@
xmax_t = term->xmax * (xsize + xoffset) / PS_SC;
ymin_t = term->ymax * yoffset / PS_SC;
ymax_t = term->ymax * (ysize + yoffset) / PS_SC;
+ term->tscale = PS_SC;
break;
case PSTERM_LANDSCAPE:
if (!ps_explicit_size) {
@@ -1602,6 +1684,7 @@
ymax_t = term->xmax * (xsize+xoffset) / PS_SC;
xmin_t = term->ymax * (1-ysize-yoffset) / PS_SC;
xmax_t = term->ymax * (1-yoffset) / PS_SC;
+ term->tscale = PS_SC;
break;
default:
int_error(NO_CARET, "invalid postscript format used");
@@ -1694,11 +1777,6 @@
{
fputs("%%Trailer\n", gppsfile);
- /* I think the following commands should be executed
- `if (ps_common_uses_fonts)`. So I changed the next line.
- Please see "PS_RememberFont", too. */ /* JFi */
-
- /* if (!ps_common_uses_fonts) { */ /* JFi */
if (ps_common_uses_fonts) {
fputs("%%DocumentFonts: ", gppsfile);
while (PS_DocFonts) {
@@ -1884,38 +1962,97 @@
TERM_PUBLIC void
PS_put_text(unsigned int x, unsigned int y, const char *str)
{
- char ch;
+#define PS_NONE 0
+#define PS_TEXT 1
+#define PS_GLYPH 2
+ unsigned long ch;
if (!str && !strlen(str))
return;
PS_move(x,y);
if (ps_ang != 0)
- fprintf(gppsfile,"currentpoint gsave translate %d rotate 0 0 M\n",
- ps_ang);
- putc('(',gppsfile);
- ch = *str++;
- while(ch!='\0') {
- if ((ch=='(') || (ch==')') || (ch=='\\'))
- putc('\\', gppsfile);
- putc(ch, gppsfile);
- ch = *str++;
- }
+ fprintf(gppsfile,"currentpoint gsave translate %d rotate 0 0 M\n", ps_ang);
- switch(ps_justify) {
- case LEFT :
- fputs(") Lshow\n", gppsfile);
- break;
- case CENTRE :
- fputs(") Cshow\n", gppsfile);
- break;
- case RIGHT :
- fputs(") Rshow\n", gppsfile);
- break;
+ if (encoding == S_ENC_UTF8 && contains8bit(str)) {
+ /* UTF-8 encoding with multibyte characters present */
+ int mode = PS_NONE;
+
+ putc('[', gppsfile);
+
+ for (utf8toulong(&ch, &str); ch != '\0'; utf8toulong(&ch, &str)) {
+ if (ch < 0x100) {
+ if (mode != PS_TEXT)
+ putc('(', gppsfile);
+ if (ch == '(' || ch == ')' || ch == '\\')
+ putc('\\', gppsfile);
+ putc((char)ch, gppsfile);
+ mode = PS_TEXT;
+ } else {
+ int i;
+ if (mode == PS_TEXT)
+ putc(')', gppsfile);
+ putc('/', gppsfile);
+#if (ADOBE_ENCODING_NAMES)
+ for (i = 0; i < psglyphs; i++) {
+ if (aglist[i].unicode == ch) {
+ fputs(aglist[i].glyphname, gppsfile);
+ break;
+ }
+ }
+ if (i >= psglyphs) /* Must not have found a glyph name */
+#endif
+ fprintf(gppsfile, (ch > 0xffff) ? "u%lX" : "uni%04lX", ch);
+ mode = PS_GLYPH;
+ }
+ }
+
+ if (mode == PS_TEXT)
+ putc(')', gppsfile);
+
+ switch(ps_justify) {
+ case LEFT :
+ fputs("] GLshow\n", gppsfile);
+ break;
+ case CENTRE :
+ fputs("] GCshow\n", gppsfile);
+ break;
+ case RIGHT :
+ fputs("] GRshow\n", gppsfile);
+ break;
+ }
+
+ } else {
+ /* plain old 8-bit mode (not UTF-8), or UTF-8 string with only 7-bit characters */
+ putc('(',gppsfile);
+ ch = (char) *str++;
+ while(ch!='\0') {
+ if ((ch=='(') || (ch==')') || (ch=='\\'))
+ putc('\\', gppsfile);
+ putc((char) ch, gppsfile);
+ ch = (char) *str++;
+ }
+
+ switch(ps_justify) {
+ case LEFT :
+ fputs(") Lshow\n", gppsfile);
+ break;
+ case CENTRE :
+ fputs(") Cshow\n", gppsfile);
+ break;
+ case RIGHT :
+ fputs(") Rshow\n", gppsfile);
+ break;
+ }
}
+
if (ps_ang != 0)
fputs("grestore\n", gppsfile);
ps_path_count = 0;
PS_relative_ok = FALSE;
+
+#undef PS_NONE
+#undef PS_TEXT
+#undef PS_GLYPH
}
@@ -2034,6 +2171,7 @@
switch(style & 0xf) {
case FS_SOLID:
+ case FS_TRANSPARENT_SOLID:
/* style == 1 --> fill with intensity according to filldensity */
filldens = (style >> 4) / 100.0;
if(filldens < 0.0)
@@ -2045,6 +2183,7 @@
break;
case FS_PATTERN:
+ case FS_TRANSPARENT_PATTERN:
/* style == 2 --> fill with pattern according to fillpattern */
/* the upper 3 nibbles of 'style' contain pattern number */
pattern = (style >> 4) % 8;
@@ -2097,8 +2236,6 @@
/* ENHPOST */
-static TBOOLEAN ENHps_opened_string; /* try to cut out empty ()'s */
-
/*
* close a postscript string if it has been opened
*/
@@ -2111,6 +2248,8 @@
}
}
+static char *ENHps_opensequence = NULL;
+
/*
* open a postscript string
*/
@@ -2134,22 +2273,92 @@
}
if (!ENHps_opened_string) {
- fprintf(gppsfile, "[(%s) %.1f %.1f %s %s %d (",
+ int safelen = strlen(fontname) + 40;
+ free(ENHps_opensequence);
+ ENHps_opensequence = gp_alloc(safelen,"ENHPS_opensequence");
+ /* EAM November 2007 - moved here from enhanced_recursion() */
+ PS_RememberFont(fontname,1);
+#ifdef HAVE_SNPRINTF
+ snprintf(ENHps_opensequence, safelen, "[(%s) %.1f %.1f %s %s %d ",
+ fontname, fontsize, base,
+ widthflag ? "true" : "false",
+ showflag ? "true" : "false",
+ overprint);
+#else
+ sprintf(ENHps_opensequence, "[(%s) %.1f %.1f %s %s %d ",
fontname, fontsize, base,
widthflag ? "true" : "false",
showflag ? "true" : "false",
overprint);
+#endif
+ fprintf(gppsfile, "%s(", ENHps_opensequence);
ENHps_opened_string = TRUE;
}
}
/*
- * write one or more characters from inside enhanced text processing
+ * Write one character from inside enhanced text processing.
+ * This is trivial except in the case of multi-byte encoding.
*/
TERM_PUBLIC void
ENHPS_WRITEC(int c)
{
- fputc(c, gppsfile);
+ static int in_utf8 = 0; /* nonzero means we are inside a multibyte sequence */
+ static char utf8[6]; /* holds the multibyte sequence being accumulated */
+ static int nbytes = 0; /* number of bytes expected in the sequence */
+
+ /* UTF-8 Encoding */
+ if (encoding == S_ENC_UTF8 && (c & 0x80) != 0) {
+ if (in_utf8 == 0) {
+ nbytes = (c & 0xE0) == 0xC0 ? 2
+ : (c & 0xF0) == 0xE0 ? 3
+ : (c & 0xF8) == 0xF0 ? 4
+ : 0;
+ if (!nbytes) /* Illegal UTF8 char; hope it's printable */
+ fputc(c, gppsfile);
+ else
+ utf8[in_utf8++] = c;
+ } else {
+ utf8[in_utf8++] = c;
+ if (in_utf8 >= nbytes) {
+ unsigned long wch = '\0';
+ const char *str = &utf8[0];
+ int i;
+
+ utf8[nbytes] = '\0';
+ in_utf8 = 0;
+ utf8toulong(&wch, &str);
+
+ if (wch < 0x100) { /* Single byte ISO8859-1 character */
+ fputc(wch, gppsfile);
+ return;
+ }
+
+ /* Finish off previous partial string, if any */
+ ENHPS_FLUSH();
+
+ /* Write a new partial string for this glyph */
+ fprintf(gppsfile, "%s/", ENHps_opensequence);
+#if (ADOBE_ENCODING_NAMES)
+ for (i = 0; i < psglyphs; i++) {
+ if (aglist[i].unicode == wch) {
+ fputs(aglist[i].glyphname, gppsfile);
+ break;
+ }
+ }
+ if (i >= psglyphs) /* Must not have found a glyph name */
+#endif
+ fprintf(gppsfile, (wch > 0xffff) ? "u%lX" : "uni%04lX", wch);
+ fprintf(gppsfile, "]\n");
+
+ /* Mark string closed */
+ ENHps_opened_string = FALSE;
+ }
+ }
+ } else
+
+ /* Single byte character */
+ fputc(c, gppsfile);
}
/* a set-font routine for enhanced post : simply copies
@@ -2198,7 +2407,7 @@
PS_FLUSH_PATH;
- /* if there are no magic characters, we should just be able
+ /* FIXME: if there are no magic characters, we should just be able
* punt the string to PS_put_text(), which will give shorter
* ps output [eg tics and stuff rarely need extra processing],
* but we need to make sure that the current font is the
@@ -2574,7 +2783,7 @@
TERM_PUBLIC int PS_make_palette (t_sm_palette *palette)
{
if (palette == NULL) {
- return 0; /* postscript can do continuous colors */
+ return 0; /* postscript can do continuous colors */
}
PS_make_header(palette);
@@ -2647,6 +2856,9 @@
/* General case for solid or pattern-filled polygons
* gsave <x0> <y0> N <x1> <y1> ... <xn> <yn> density PolyFill
*/
+ int fillpar = style >> 4;
+ style = style &0xf;
+
fprintf(gppsfile, "gsave ");
fprintf(gppsfile, "%i %i N", corners[0].x, corners[0].y);
for (i = 1; i < points; i++) {
@@ -2662,6 +2874,8 @@
case FS_SOLID:
filldens = (style >> 4) / 100.0;
+ case FS_TRANSPARENT_SOLID:
+ filldens = (fillpar) / 100.0;
if(filldens < 0.0)
filldens = 0.0;
if(filldens >= 1.0)
@@ -2670,8 +2884,10 @@
fprintf(gppsfile, " %.2f PolyFill\n", filldens);
break;
+ case FS_TRANSPARENT_PATTERN:
+ fprintf(gppsfile," /TransparentPatterns true def\n");
case FS_PATTERN:
- pattern = (style >> 4) % 8;
+ pattern = (fillpar) % 8;
if (pattern == 0) {
filldens = 0.5;
fprintf(gppsfile, " %.1f PolyFill\n", filldens);
@@ -2730,10 +2946,11 @@
if (prev != NULL) /* there is a previous ps_fontfile */
prev->next = this->next;
else /* this = ps_params->first_fontfile */
- /* so change ps_params->first_fontfile */
+ /* so change ps_params->first_fontfile */
ps_params->first_fontfile = this->next;
free(this->fontfile_name);
free(this->fontfile_fullname);
+ free(this->fontname);
free(this);
this = NULL;
}
@@ -2770,15 +2987,15 @@
* routine.
*/
static char *
-PS_encode_image(unsigned M, unsigned N, coordval *image, t_imagecolor color_mode,
+PS_encode_image(unsigned int M, unsigned int N, coordval *image, t_imagecolor color_mode,
int bits_per_component, int max_colors, double cscale,
enum PS_ENCODING encoding, int *return_num_bytes)
{
- unsigned coord_remaining;
+ unsigned int coord_remaining;
coordval *coord_ptr;
unsigned short i_line;
- unsigned i_element;
- unsigned end_of_line;
+ unsigned int i_element;
+ unsigned int end_of_line;
unsigned short bits_remaining, bits_start;
unsigned long tuple4;
@@ -2954,7 +3171,7 @@
static void
-print_five_operand_image(unsigned M, unsigned N, gpiPoint *corner, t_imagecolor color_mode, unsigned short bits_per_component)
+print_five_operand_image(unsigned int M, unsigned int N, gpiPoint *corner, t_imagecolor color_mode, unsigned short bits_per_component)
{
char *space = ps_params->level1 ? "" : " ";
@@ -2980,7 +3197,7 @@
TERM_PUBLIC void
-PS_image (unsigned M, unsigned N, coordval *image, gpiPoint *corner, t_imagecolor color_mode)
+PS_image (unsigned int M, unsigned int N, coordval *image, gpiPoint *corner, t_imagecolor color_mode)
{
char *encoded_image;
int num_encoded_bytes;
@@ -3163,13 +3380,12 @@
* If unsuccessful, look for hardcoded absolute path on UNIX,
* or hardcoded relative path on Windows and OS2,
* or files included at compile time. */
-static void
-PS_dump_prologue_file(char *name)
+static FILE *
+PS_open_prologue_file(char *name)
{
char *fullname;
char *ps_prologue_dir;
FILE *prologue_fd;
- char buf[256];
if ((ps_prologue_dir = getenv("GNUPLOT_PS_DIR")) == NULL) {
#ifdef GNUPLOT_PS_DIR
@@ -3221,6 +3437,8 @@
dump = prologue_8859_1_ps;
else if (!strcmp(name,"8859-2.ps"))
dump = prologue_8859_2_ps;
+ else if (!strcmp(name,"8859-9.ps"))
+ dump = prologue_8859_9_ps;
else if (!strcmp(name,"cp1250.ps"))
dump = prologue_cp1250_ps;
else if (!strcmp(name,"cp437.ps"))
@@ -3233,16 +3451,18 @@
dump = prologue_koi8r_ps;
else if (!strcmp(name,"koi8u.ps"))
dump = prologue_koi8u_ps;
+ else if (!strcmp(name,"utf-8.ps"))
+ dump = prologue_utf_8_ps;
else if (!strcmp(name,"prologue.ps"))
dump = prologue_prologue_ps;
else
- int_error(NO_CARET,"Requested Postscript prologue is not included");
+ int_warn(NO_CARET,"Requested Postscript prologue %s not found",name);
if (dump) {
for (i = 0; dump[i] != NULL; ++i)
fprintf(gppsfile, "%s", dump[i]);
}
- return;
+ return NULL;
#endif /* GNUPLOT_PS_DIR */
}
@@ -3273,8 +3493,62 @@
int_error(NO_CARET,"Plot failed!");
}
free(fullname);
- while (fgets(buf, sizeof(buf), prologue_fd))
- fputs(buf, gppsfile);
+ return prologue_fd;
+}
+
+static void
+PS_dump_prologue_file(char *name)
+{
+ char buf[256];
+ FILE *prologue_fd = PS_open_prologue_file(name);
+
+ if (prologue_fd) {
+ while (fgets(buf, sizeof(buf), prologue_fd))
+ fputs(buf, gppsfile);
+ fclose(prologue_fd);
+ }
+}
+
+static void
+PS_load_glyphlist()
+{
+ char buf[256];
+ char *next = NULL;
+ unsigned int code;
+ int len;
+ char glyph_name[32];
+ FILE *prologue_fd = PS_open_prologue_file("aglfn.txt");
+
+ if (!prologue_fd)
+ return;
+
+ while (fgets(buf, sizeof(buf), prologue_fd)) {
+ if (*buf == '#' || *buf == '\n')
+ continue;
+ code = strtol(buf,&next,16);
+
+ /* User control over whether Adobe glyph names are used for unicode */
+ /* entries above 0x0100. I.e. when we see a UTF-8 alpha, do we write */
+ /* /alpha rather than /uni03B1? Some fonts want one or the other. */
+ /* This is controlled by 'set term post adobeglyphnames'. */
+ if (code >= 0x0100 && !ps_params->adobeglyphnames)
+ continue;
+
+ next++;
+ len = strchr(next,';') - next;
+ strncpy(glyph_name, next, len);
+ glyph_name[len] = '\0';
+ FPRINTF((stderr, "%04X %s\n", code, glyph_name));
+ if (aglist_size + sizeof(ps_glyph) > aglist_alloc) {
+ aglist_alloc += 2048;
+ aglist = gp_realloc(aglist, aglist_alloc, "aglist");
+ }
+ aglist[psglyphs].unicode = code;
+ aglist[psglyphs].glyphname = gp_strdup(glyph_name);
+ aglist_size += sizeof(ps_glyph);
+ psglyphs++;
+ }
+
fclose(prologue_fd);
}
@@ -3295,6 +3569,32 @@
}
+TERM_PUBLIC void
+PS_layer(t_termlayer syncpoint)
+{
+ static int plotno = 0;
+
+ /* We must ignore all syncpoints that we don't recognize */
+ switch (syncpoint) {
+
+ default:
+ break;
+
+ case TERM_LAYER_BEFORE_PLOT:
+ fprintf(gppsfile, "%% Begin plot #%d\n", ++plotno);
+ break;
+
+ case TERM_LAYER_AFTER_PLOT:
+ fprintf(gppsfile, "%% End plot #%d\n", plotno);
+ break;
+
+ case TERM_LAYER_RESET:
+ plotno = 0;
+ break;
+
+ }
+}
+
#endif /* TERM_BODY */
#ifdef TERM_TABLE
@@ -3307,7 +3607,7 @@
PS_text, null_scale, PS_graphics, PS_move, PS_vector,
PS_linetype, PS_put_text, PS_text_angle,
PS_justify_text, PS_point, PS_arrow, PS_set_font, PS_pointsize,
- TERM_BINARY|TERM_IS_POSTSCRIPT|TERM_CAN_CLIP /*flags*/,
+ TERM_BINARY|TERM_IS_POSTSCRIPT|TERM_CAN_CLIP|TERM_CAN_DASH /*flags*/,
0 /*suspend*/, 0 /*resume*/, PS_fillbox, PS_linewidth
#ifdef USE_MOUSE
, 0, 0, 0, 0, 0 /* no mouse support for postscript */
@@ -3320,8 +3620,9 @@
, PS_image
#endif
, ENHPS_OPEN, ENHPS_FLUSH, ENHPS_WRITEC
- , 0 /* layer control */
+ , PS_layer /* used only to insert comments */
, PS_path
+ , PS_SC /* terminal to pixel coord scale factor */
TERM_TABLE_END(post_driver)
#undef LAST_TERM
@@ -3432,7 +3733,7 @@
" but transfers the texts to LaTeX instead of including in the PostScript",
" code. Thus, many options are the same as in the `postscript terminal`.",
"",
-" From version 4.0 to 4.2, some changes have been invoked into the default ",
+" From version 4.0 to 4.1, some changes have been invoked into the default ",
" appearance of the epslatex terminal to reach better consistency with the",
" postscript terminal: The plot size has been changed from 5 x 3 inches to",
" 5 x 3.5 inches; the character width is now estimated to be 60% of the font",
@@ -3625,7 +3926,7 @@
" \\special{psfile=...} command. Remember to close the `output file` before",
" next plot unless in `multiplot` mode.",
"",
-" Gnuplot versions prior version 4.2 have generated plots of the size",
+" Gnuplot versions prior version 4.1 have generated plots of the size",
" 5 x 3 inches using the ps(la)tex terminal while the current version generates",
" 5 x 3.5 inches to be consistent with the postscript eps terminal. In",
" addition, the character width is now estimated to be 60% of the font size",
@@ -3678,7 +3979,7 @@
" {enhanced | noenhanced}",
" {defaultplex | simplex | duplex}",
" {fontfile [add | delete] \"<filename>\"",
-" | nofontfiles}",
+" | nofontfiles} {{no}adobeglyphnames}",
PS_COMMON_OPTS1
PS_COMMON_OPTS2
PS_COMMON_PROLOG_INFO
@@ -3748,112 +4049,6 @@
" A PostScript file is editable, so once `gnuplot` has created one, you are",
" free to modify it to your heart's desire. See the `editing postscript`",
" section for some hints.",
-"2 enhanced postscript",
-"?commands set terminal postscript enhanced",
-"?set terminal postscript enhanced",
-"?set term postscript enhanced",
-"?terminal postscript enhanced",
-"?term postscript enhanced",
-"?enhanced_postscript",
-"?enhanced postscript",
-"?Enhanced postscript",
-"?enhanced text",
-"?Enhanced text",
-"?enhanced",
-" Several terminal types support an enhanced text mode in which ",
-" additional formatting information is embedded in the text string.",
-"",
-"@start table - first is interactive cleartext form",
-" Control Examples Explanation",
-" ^ a^x superscript",
-" _ a_x subscript",
-" @ @x or a@^b_c phantom box (occupies no width)",
-" & &{space} inserts space of specified length",
-" ~ ~a{.8-} overprints '-' on 'a', raised by .8",
-" times the current fontsize",
-"#\\begin{tabular}{|ccl|} \\hline",
-"#\\multicolumn{3}{|c|}{Enhanced Text Control Codes} \\\\ \\hline",
-"#Control & Examples & Explanation \\\\ \\hline",
-"#\\verb~^~ & \\verb~a^x~ & superscript\\\\",
-"#\\verb~_~ & \\verb~a_x~ & subscript\\\\",
-"#\\verb~@~ & \\verb~@x or a@^b_c~ & phantom box (occupies no width)\\\\",
-"#\\verb~&~ & \\verb~&{space}~ & inserts space of specified length\\\\",
-"#\\verb|~| & \\verb|~a{.8-}| & overprints '-' on 'a', raised by .8\\\\",
-"#\\verb~ ~ & \\verb~ ~ & times the current fontsize\\\\",
-"%c c l .",
-"%.TE", /* ugly - doc2ms uses @ for column separator, but here we */
-"%.TS", /* need @ in table, so end and restart the table ! */
-"%center box tab ($) ;",
-"%c c l .",
-"%Control$Examples$Explanation",
-"%_",
-"%^$a^x$superscript",
-"%\\&_$a\\&_x$subscript",
-"% @ $ @x or a\\&@^b\\&_c$phantom box (occupies no width)",
-"% & $ &{space}$inserts space of specified length",
-"% ~ $ ~a{.8-}$overprints '-' on 'a', raised by .8",
-"% $ $times the current fontsize",
-"@end table",
-"",
-" Braces can be used to place multiple-character text where a single character",
-" is expected (e.g., 2^{10}). To change the font and/or size, use the full",
-" form: {/[fontname][=fontsize | *fontscale] text}. Thus {/Symbol=20 G} is a",
-" 20-point GAMMA and {/*0.75 K} is a K at three-quarters of whatever fontsize",
-" is currently in effect. (The '/' character MUST be the first character after",
-" the '{'.)",
-"",
-" If the encoding vector has been changed by `set encoding`, the default",
-" encoding vector can be used instead by following the slash with a dash. This",
-" is unnecessary if you use the Symbol font, however---since /Symbol uses its",
-" own encoding vector, `gnuplot` will not apply any other encoding vector to",
-" it.",
-"",
-" The phantom box is useful for a@^b_c to align superscripts and subscripts",
-" but does not work well for overwriting an accent on a letter. (To do the",
-" latter, it is much better to use 'set encoding iso_8859_1' to change to the",
-" ISO Latin-1 encoding vector, which contains a large variety of letters with",
-" accents or other diacritical marks.) Since the box is non-spacing, it is",
-" sensible to put the shorter of the subscript or superscript in the box (that",
-" is, after the @).",
-"",
-" Space equal in length to a string can be inserted using the '&' character.",
-" Thus",
-" 'abc&{def}ghi'",
-" would produce",
-" 'abc ghi'.",
-"",
-" The '~' character causes the next character or bracketed text to be",
-" overprinted by the following character or bracketed text. The second text",
-" will be horizontally centered on the first. Thus '~a/' will result in an 'a'",
-" with a slash through it. You can also shift the second text vertically by",
-" preceding the second text with a number, which will define the fraction of the",
-" current fontsize by which the text will be raised or lowered. In this case",
-" the number and text must be enclosed in brackets because more than one",
-" character is necessary. If the overprinted text begins with a number, put a",
-" space between the vertical offset and the text ('~{abc}{.5 000}'); otherwise",
-" no space is needed ('~{abc}{.5---}'). You can change the font for one or",
-" both strings ('~a{.5 /*.2 o}'---an 'a' with a one-fifth-size 'o' on top---and",
-" the space between the number and the slash is necessary), but you can't",
-" change it after the beginning of the string. Neither can you use any other",
-" special syntax within either string. You can, of course, use control",
-" characters by escaping them (see below), such as '~a{\\^}'",
-"",
-" You can access special symbols numerically by specifying \\character-code (in",
-" octal), e.g., {/Symbol \\245} is the symbol for infinity.",
-"",
-" You can escape control characters using \\, e.g., \\\\, \\{, and so on.",
-"",
-" But be aware that strings in double-quotes are parsed differently than those",
-" enclosed in single-quotes. The major difference is that backslashes may need",
-" to be doubled when in double-quoted strings.",
-"",
-" Examples (these are hard to describe in words---try them!):",
-" set xlabel 'Time (10^6 {/Symbol m}s)'",
-" set title '{/Symbol=18 \\362@_{/=9.6 0}^{/=12 x}} \\",
-" {/Helvetica e^{-{/Symbol m}^2/2} d}{/Symbol m}'",
-"",
-" The file \"ps_guide.ps\" in the /docs/psdoc subdirectory of the `gnuplot` source",
-" distribution contains more examples of the enhanced syntax.",
"2 editing postscript",
"?commands set terminal postscript editing",
"?set terminal postscript editing",
@@ -4009,6 +4204,26 @@
" controlled at the time gnuplot is built. However, you can control this",
" either by defining an environment variable GNUPLOT_PS_DIR or by using the",
" gnuplot command `set loadpath`. See `set loadpath`.",
+"2 postscript adobeglyphnames",
+"?commands set terminal postscript adobeglyphnames",
+"?set terminal postscript adobeglyphnames",
+"?terminal postscript adobeglyphnames",
+"?postscript adobeglyphnames",
+"?adobeglyphnames",
+"=UTF-8",
+" This setting is only relevant to PostScript output with UTF-8 encoding.",
+" It controls the names used to describe characters with Unicode entry points",
+" higher than 0x00FF. That is, all characters outside of the Latin1 set.",
+" In general unicode characters do not have a unique name; they have only a",
+" unicode identification code. However, Adobe have a recommended scheme for",
+" assigning names to certain ranges of characters (extended Latin, Greek, etc).",
+" Some fonts use this scheme, others do not. By default, gnuplot will use",
+" the Adobe glyph names. E.g. the lower case Greek letter alpha will be called",
+" /alpha. If you specific `noadobeglyphnames` then instead gnuplot will use",
+" /uni03B1 to describe this character. If you get this setting wrong, the",
+" character may not be found even if it is present in the font.",
+" It is probably always correct to use the default for Adobe fonts, but for",
+" other fonts you may have to try both settings. See also `fontfile`.",
"",
""
END_HELP(post)
diff -U 3 -H -d -r -N -- term/pslatex.trm term/pslatex.trm
--- term/pslatex.trm 2008-02-23 10:10:23.000000000 +0100
+++ term/pslatex.trm 2009-05-09 13:53:00.000000000 +0200
@@ -1,5 +1,5 @@
/* Hello, Emacs, this is -*-C-*-
- * $Id: pslatex.trm,v 1.69.2.1 2008/02/22 20:34:41 sfeam Exp $
+ * $Id: pslatex.trm,v 1.72 2008/02/22 20:02:26 sfeam Exp $
*/
/* GNUPLOT - pslatex.trm */
@@ -441,7 +441,10 @@
case S_ENC_ISO8859_2:
inputenc = "latin2";
break;
- case S_ENC_ISO8859_15:
+ case S_ENC_ISO8859_9: /* ISO8859-9 is Latin5 */
+ inputenc = "latin5";
+ break;
+ case S_ENC_ISO8859_15: /* ISO8859-15 is Latin9 */
inputenc = "latin9";
break;
case S_ENC_CP437: