]> www.fi.muni.cz Git - evince.git/commitdiff
Painful merge.
authorArturo Espinosa <unammx@src.gnome.org>
Fri, 6 Aug 1999 00:14:27 +0000 (00:14 +0000)
committerArturo Espinosa <unammx@src.gnome.org>
Fri, 6 Aug 1999 00:14:27 +0000 (00:14 +0000)
Painful merge.

I merged the latest release into the CVS.

This version supports the regular xpdf or gpdf if the GNOME libraries
are found.

Miguel.

45 files changed:
pdf/goo/Makefile.in
pdf/xpdf/CMapInfo.h
pdf/xpdf/Catalog.cc
pdf/xpdf/Catalog.h
pdf/xpdf/Error.cc
pdf/xpdf/FontInfo.h
pdf/xpdf/Gfx.cc
pdf/xpdf/Gfx.h
pdf/xpdf/GfxFont.cc
pdf/xpdf/GfxFont.h
pdf/xpdf/GfxState.cc
pdf/xpdf/GfxState.h
pdf/xpdf/ImageOutputDev.cc
pdf/xpdf/Link.cc
pdf/xpdf/Link.h
pdf/xpdf/Makefile.am
pdf/xpdf/Makefile.in
pdf/xpdf/Object.cc
pdf/xpdf/PDFDoc.cc
pdf/xpdf/PSOutputDev.cc
pdf/xpdf/PSOutputDev.h
pdf/xpdf/Page.cc
pdf/xpdf/Page.h
pdf/xpdf/Params.cc
pdf/xpdf/Params.h
pdf/xpdf/Stream-CCITT.h
pdf/xpdf/Stream.cc
pdf/xpdf/Stream.h
pdf/xpdf/TextOutputDev.cc
pdf/xpdf/TextOutputDev.h
pdf/xpdf/TextOutputFontInfo.h
pdf/xpdf/XOutputDev.cc
pdf/xpdf/XOutputDev.h
pdf/xpdf/XOutputFontInfo.h
pdf/xpdf/makefile.w32
pdf/xpdf/pdfimages.cc
pdf/xpdf/pdfinfo.cc
pdf/xpdf/pdftopbm.cc
pdf/xpdf/pdftops.cc
pdf/xpdf/pdftotext.cc
pdf/xpdf/vms_make.com
pdf/xpdf/xpdf-ltk.h
pdf/xpdf/xpdf.cc
pdf/xpdf/xpdf.ltk
pdf/xpdf/xpdfconfig.h

index 45e1cdfdc62267b407c0cde2a1f8c55e79f12b07..5881ce2f8e34a49896abf3b9bb2ced2644f9e441 100644 (file)
@@ -102,6 +102,10 @@ YACC = @YACC@
 ZVT_LIBS = @ZVT_LIBS@
 cflags_set = @cflags_set@
 cxxflags_set = @cxxflags_set@
+t1_CFLAGS = @t1_CFLAGS@
+t1_LIBS = @t1_LIBS@
+t1x_CFLAGS = @t1x_CFLAGS@
+t1x_LIBS = @t1x_LIBS@
 
 lib_LIBRARIES = libgoo.a
 
index ef92c78f0edd8e09dad5a7b208f0fb5a2c5609f7..7a1d8e4a1e4beb89f9302500124d7101e8148d77 100644 (file)
@@ -641,6 +641,7 @@ static Gushort japan1278EUCHMap2[1252] = {
 };
 
 static GfxFontEncoding16 japan1278EUCHEnc16 = {
+  0,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -692,263 +693,3044 @@ static GfxFontEncoding16 japan1278EUCHEnc16 = {
   japan1278EUCHMap2, 626
 };
 
-static Gushort japan1278HMap2[1250] = {
+static Gushort japan1278EUCVMap2[1306] = {
   0x0000, 0x0000,
-  0x2121, 0x0279,
-  0x2221, 0x02d7,
-  0x2330, 0x030c,
-  0x2341, 0x0316,
-  0x2361, 0x0330,
-  0x2421, 0x034a,
-  0x2521, 0x039d,
-  0x2621, 0x03f3,
-  0x2641, 0x040b,
-  0x2721, 0x0423,
-  0x2751, 0x0444,
-  0x3021, 0x0465,
-  0x3022, 0x1dd1,
-  0x3023, 0x0467,
-  0x3029, 0x204a,
-  0x302a, 0x046e,
-  0x3032, 0x1f19,
-  0x3033, 0x1ca2,
-  0x3034, 0x0478,
-  0x303b, 0x1dd2,
-  0x303c, 0x0480,
-  0x306e, 0x1dd3,
-  0x306f, 0x04b3,
-  0x3073, 0x1dd4,
-  0x3074, 0x04b8,
-  0x307c, 0x1dd5,
-  0x307d, 0x04c1,
-  0x3121, 0x04c3,
-  0x312a, 0x1dd6,
-  0x312b, 0x04cd,
-  0x3135, 0x1dd7,
-  0x3136, 0x04d8,
-  0x3139, 0x1dd8,
-  0x313a, 0x04dc,
-  0x313d, 0x1dda,
-  0x313e, 0x04e0,
-  0x3142, 0x1ddb,
-  0x3143, 0x04e5,
-  0x316b, 0x1ddc,
-  0x316c, 0x050e,
-  0x3221, 0x0521,
-  0x3228, 0x1ddd,
-  0x3229, 0x1cc9,
-  0x322a, 0x1dde,
-  0x322b, 0x052b,
-  0x3260, 0x1ddf,
-  0x3261, 0x0561,
-  0x327a, 0x1de0,
-  0x327b, 0x057b,
-  0x327d, 0x1de1,
-  0x327e, 0x057e,
-  0x3321, 0x057f,
-  0x3322, 0x1de2,
-  0x3323, 0x0581,
-  0x3342, 0x1961,
-  0x3343, 0x05a1,
-  0x3349, 0x139f,
-  0x334a, 0x05a8,
-  0x3365, 0x1de3,
-  0x3366, 0x05c4,
-  0x336b, 0x1de4,
-  0x336c, 0x05ca,
-  0x3373, 0x1de5,
-  0x3374, 0x05d2,
-  0x3376, 0x1731,
-  0x3377, 0x05d5,
-  0x337a, 0x1de6,
-  0x337b, 0x05d9,
-  0x3421, 0x05dd,
-  0x3442, 0x1de7,
-  0x3443, 0x1572,
-  0x3444, 0x0600,
-  0x344d, 0x1de8,
-  0x344e, 0x060a,
-  0x3452, 0x1a20,
-  0x3453, 0x060f,
-  0x3465, 0x1de9,
-  0x3466, 0x0622,
-  0x3521, 0x063b,
-  0x352b, 0x1dea,
-  0x352c, 0x0646,
-  0x3540, 0x1deb,
-  0x3541, 0x065b,
-  0x3621, 0x0699,
-  0x3622, 0x1dec,
-  0x3623, 0x069b,
-  0x362a, 0x1ded,
-  0x362b, 0x06a3,
-  0x3646, 0x1d32,
-  0x3647, 0x06bf,
-  0x364f, 0x1dee,
-  0x3650, 0x06c8,
-  0x366d, 0x1def,
-  0x366e, 0x06e6,
-  0x3674, 0x1df0,
-  0x3675, 0x06ed,
-  0x367b, 0x1df1,
-  0x367c, 0x06f4,
-  0x367d, 0x1df2,
-  0x367e, 0x06f6,
-  0x3721, 0x06f7,
-  0x3724, 0x1df3,
-  0x3725, 0x06fb,
-  0x3737, 0x1df4,
-  0x3738, 0x070e,
-  0x3745, 0x1df5,
-  0x3746, 0x071c,
-  0x374e, 0x1df6,
-  0x374f, 0x0725,
-  0x3752, 0x1df7,
-  0x3753, 0x0729,
-  0x3755, 0x1df8,
-  0x3756, 0x072c,
-  0x375b, 0x1c0d,
-  0x375c, 0x0732,
-  0x3764, 0x1df9,
-  0x3765, 0x073b,
-  0x3771, 0x1dfa,
-  0x3772, 0x0748,
-  0x3779, 0x1dfb,
-  0x377a, 0x0750,
-  0x377e, 0x1dfc,
-  0x3821, 0x0755,
-  0x3834, 0x1dfd,
-  0x3835, 0x0769,
-  0x3841, 0x1dfe,
-  0x3842, 0x0776,
-  0x3921, 0x07b3,
-  0x392b, 0x1dff,
-  0x392c, 0x07be,
-  0x3937, 0x1e00,
-  0x3938, 0x07ca,
-  0x3942, 0x1e01,
-  0x3943, 0x07d5,
-  0x395c, 0x16dd,
-  0x395d, 0x07ef,
-  0x396d, 0x1e02,
-  0x396e, 0x0800,
-  0x3974, 0x1e03,
-  0x3975, 0x0807,
-  0x3979, 0x1e04,
-  0x397a, 0x080c,
-  0x3a21, 0x0811,
-  0x3a53, 0x1e05,
-  0x3a54, 0x0844,
-  0x3a67, 0x1e06,
-  0x3a68, 0x0858,
-  0x3a74, 0x1e07,
-  0x3a75, 0x0865,
-  0x3b21, 0x086f,
-  0x3b27, 0x1e08,
-  0x3b28, 0x0876,
-  0x3b2a, 0x1e09,
-  0x3b2b, 0x0879,
-  0x3b2c, 0x1e0a,
-  0x3b2d, 0x087b,
-  0x3b39, 0x1e0b,
-  0x3b3a, 0x0888,
-  0x3c21, 0x08cd,
-  0x3c48, 0x1e0d,
-  0x3c49, 0x1929,
-  0x3c4a, 0x08f6,
-  0x3c57, 0x1e0e,
-  0x3c58, 0x0904,
-  0x3c5d, 0x1e0f,
-  0x3c5f, 0x090b,
-  0x3d21, 0x092b,
-  0x3d2b, 0x1e11,
-  0x3d2c, 0x0936,
-  0x3d36, 0x1e12,
-  0x3d37, 0x0941,
-  0x3d6c, 0x1e13,
-  0x3d6e, 0x0978,
-  0x3d72, 0x1e15,
-  0x3d74, 0x097e,
-  0x3e21, 0x0989,
-  0x3e25, 0x1e17,
-  0x3e26, 0x098e,
-  0x3e33, 0x1e18,
-  0x3e34, 0x099c,
-  0x3e3f, 0x1e19,
-  0x3e40, 0x09a8,
-  0x3e55, 0x1e1a,
-  0x3e56, 0x09be,
-  0x3e5f, 0x1e1b,
-  0x3e60, 0x09c8,
-  0x3e64, 0x1e1c,
-  0x3e65, 0x09cd,
-  0x3f21, 0x09e7,
-  0x3f2a, 0x1e1d,
-  0x3f2b, 0x09f1,
-  0x3f59, 0x1e1e,
-  0x3f5a, 0x0a20,
-  0x3f60, 0x1e1f,
-  0x3f61, 0x0a27,
-  0x3f69, 0x1e20,
-  0x3f6a, 0x0a30,
-  0x4021, 0x0a45,
-  0x4022, 0x1e21,
-  0x4023, 0x0a47,
-  0x4042, 0x1e22,
-  0x4043, 0x0a67,
-  0x4066, 0x1e23,
-  0x4067, 0x0a8b,
-  0x4071, 0x1e24,
-  0x4073, 0x0a97,
-  0x4079, 0x1e26,
-  0x407b, 0x0a9f,
-  0x4121, 0x0aa3,
-  0x4127, 0x1e28,
-  0x4128, 0x1a6e,
-  0x4129, 0x0aab,
-  0x4139, 0x1e29,
-  0x413a, 0x0abc,
-  0x414c, 0x1e2a,
-  0x414d, 0x0acf,
-  0x414f, 0x1e2b,
-  0x4150, 0x0ad2,
-  0x415f, 0x1e2c,
-  0x4160, 0x0ae2,
-  0x4169, 0x1e2d,
-  0x416a, 0x0aec,
-  0x4221, 0x0b01,
-  0x423d, 0x1e2e,
-  0x423e, 0x0b1e,
-  0x424d, 0x1e2f,
-  0x424e, 0x0b2e,
-  0x425c, 0x1e30,
-  0x425d, 0x0b3d,
-  0x4263, 0x1e31,
-  0x4264, 0x0b44,
-  0x426f, 0x1e32,
-  0x4270, 0x0b50,
-  0x4275, 0x1e33,
-  0x4277, 0x0b57,
-  0x427d, 0x1e35,
-  0x427e, 0x0b5e,
-  0x4321, 0x0b5f,
-  0x4327, 0x1e36,
-  0x4328, 0x0b66,
-  0x4329, 0x1e37,
-  0x432b, 0x0b69,
-  0x432d, 0x1e39,
-  0x432f, 0x0b6d,
-  0x433d, 0x1e3b,
-  0x433e, 0x0b7c,
-  0x4370, 0x1e3c,
-  0x4371, 0x0baf,
-  0x4375, 0x1e3d,
-  0x4376, 0x0bb4,
-  0x437c, 0x1e3e,
-  0x437d, 0x0bbb,
-  0x4421, 0x0bbd,
-  0x443d, 0x1e3f,
-  0x443e, 0x0bda,
+  0x8ea0, 0x0146,
+  0xa1a1, 0x0279,
+  0xa2a1, 0x02d7,
+  0xa3b0, 0x030c,
+  0xa3c1, 0x0316,
+  0xa3e1, 0x0330,
+  0xa4a1, 0x034a,
+  0xa5a1, 0x039d,
+  0xa6a1, 0x03f3,
+  0xa6c1, 0x040b,
+  0xa7a1, 0x0423,
+  0xa7d1, 0x0444,
+  0xb0a1, 0x0465,
+  0xb0a2, 0x1dd1,
+  0xb0a3, 0x0467,
+  0xb0a9, 0x204a,
+  0xb0aa, 0x046e,
+  0xb0b2, 0x1f19,
+  0xb0b3, 0x1ca2,
+  0xb0b4, 0x0478,
+  0xb0bb, 0x1dd2,
+  0xb0bc, 0x0480,
+  0xb0ee, 0x1dd3,
+  0xb0ef, 0x04b3,
+  0xb0f3, 0x1dd4,
+  0xb0f4, 0x04b8,
+  0xb0fc, 0x1dd5,
+  0xb0fd, 0x04c1,
+  0xb1a1, 0x04c3,
+  0xb1aa, 0x1dd6,
+  0xb1ab, 0x04cd,
+  0xb1b5, 0x1dd7,
+  0xb1b6, 0x04d8,
+  0xb1b9, 0x1dd8,
+  0xb1ba, 0x04dc,
+  0xb1bd, 0x1dda,
+  0xb1be, 0x04e0,
+  0xb1c2, 0x1ddb,
+  0xb1c3, 0x04e5,
+  0xb1eb, 0x1ddc,
+  0xb1ec, 0x050e,
+  0xb2a1, 0x0521,
+  0xb2a8, 0x1ddd,
+  0xb2a9, 0x1cc9,
+  0xb2aa, 0x1dde,
+  0xb2ab, 0x052b,
+  0xb2e0, 0x1ddf,
+  0xb2e1, 0x0561,
+  0xb2fa, 0x1de0,
+  0xb2fb, 0x057b,
+  0xb2fd, 0x1de1,
+  0xb2fe, 0x057e,
+  0xb3a1, 0x057f,
+  0xb3a2, 0x1de2,
+  0xb3a3, 0x0581,
+  0xb3c2, 0x1961,
+  0xb3c3, 0x05a1,
+  0xb3c9, 0x139f,
+  0xb3ca, 0x05a8,
+  0xb3e5, 0x1de3,
+  0xb3e6, 0x05c4,
+  0xb3eb, 0x1de4,
+  0xb3ec, 0x05ca,
+  0xb3f3, 0x1de5,
+  0xb3f4, 0x05d2,
+  0xb3f6, 0x1731,
+  0xb3f7, 0x05d5,
+  0xb3fa, 0x1de6,
+  0xb3fb, 0x05d9,
+  0xb4a1, 0x05dd,
+  0xb4c2, 0x1de7,
+  0xb4c3, 0x1572,
+  0xb4c4, 0x0600,
+  0xb4cd, 0x1de8,
+  0xb4ce, 0x060a,
+  0xb4d2, 0x1a20,
+  0xb4d3, 0x060f,
+  0xb4e5, 0x1de9,
+  0xb4e6, 0x0622,
+  0xb5a1, 0x063b,
+  0xb5ab, 0x1dea,
+  0xb5ac, 0x0646,
+  0xb5c0, 0x1deb,
+  0xb5c1, 0x065b,
+  0xb6a1, 0x0699,
+  0xb6a2, 0x1dec,
+  0xb6a3, 0x069b,
+  0xb6aa, 0x1ded,
+  0xb6ab, 0x06a3,
+  0xb6c6, 0x1d32,
+  0xb6c7, 0x06bf,
+  0xb6cf, 0x1dee,
+  0xb6d0, 0x06c8,
+  0xb6ed, 0x1def,
+  0xb6ee, 0x06e6,
+  0xb6f4, 0x1df0,
+  0xb6f5, 0x06ed,
+  0xb6fb, 0x1df1,
+  0xb6fc, 0x06f4,
+  0xb6fd, 0x1df2,
+  0xb6fe, 0x06f6,
+  0xb7a1, 0x06f7,
+  0xb7a4, 0x1df3,
+  0xb7a5, 0x06fb,
+  0xb7b7, 0x1df4,
+  0xb7b8, 0x070e,
+  0xb7c5, 0x1df5,
+  0xb7c6, 0x071c,
+  0xb7ce, 0x1df6,
+  0xb7cf, 0x0725,
+  0xb7d2, 0x1df7,
+  0xb7d3, 0x0729,
+  0xb7d5, 0x1df8,
+  0xb7d6, 0x072c,
+  0xb7db, 0x1c0d,
+  0xb7dc, 0x0732,
+  0xb7e4, 0x1df9,
+  0xb7e5, 0x073b,
+  0xb7f1, 0x1dfa,
+  0xb7f2, 0x0748,
+  0xb7f9, 0x1dfb,
+  0xb7fa, 0x0750,
+  0xb7fe, 0x1dfc,
+  0xb8a1, 0x0755,
+  0xb8b4, 0x1dfd,
+  0xb8b5, 0x0769,
+  0xb8c1, 0x1dfe,
+  0xb8c2, 0x0776,
+  0xb9a1, 0x07b3,
+  0xb9ab, 0x1dff,
+  0xb9ac, 0x07be,
+  0xb9b7, 0x1e00,
+  0xb9b8, 0x07ca,
+  0xb9c2, 0x1e01,
+  0xb9c3, 0x07d5,
+  0xb9dc, 0x16dd,
+  0xb9dd, 0x07ef,
+  0xb9ed, 0x1e02,
+  0xb9ee, 0x0800,
+  0xb9f4, 0x1e03,
+  0xb9f5, 0x0807,
+  0xb9f9, 0x1e04,
+  0xb9fa, 0x080c,
+  0xbaa1, 0x0811,
+  0xbad3, 0x1e05,
+  0xbad4, 0x0844,
+  0xbae7, 0x1e06,
+  0xbae8, 0x0858,
+  0xbaf4, 0x1e07,
+  0xbaf5, 0x0865,
+  0xbba1, 0x086f,
+  0xbba7, 0x1e08,
+  0xbba8, 0x0876,
+  0xbbaa, 0x1e09,
+  0xbbab, 0x0879,
+  0xbbac, 0x1e0a,
+  0xbbad, 0x087b,
+  0xbbb9, 0x1e0b,
+  0xbbba, 0x0888,
+  0xbca1, 0x08cd,
+  0xbcc8, 0x1e0d,
+  0xbcc9, 0x1929,
+  0xbcca, 0x08f6,
+  0xbcd7, 0x1e0e,
+  0xbcd8, 0x0904,
+  0xbcdd, 0x1e0f,
+  0xbcdf, 0x090b,
+  0xbda1, 0x092b,
+  0xbdab, 0x1e11,
+  0xbdac, 0x0936,
+  0xbdb6, 0x1e12,
+  0xbdb7, 0x0941,
+  0xbdec, 0x1e13,
+  0xbdee, 0x0978,
+  0xbdf2, 0x1e15,
+  0xbdf4, 0x097e,
+  0xbea1, 0x0989,
+  0xbea5, 0x1e17,
+  0xbea6, 0x098e,
+  0xbeb3, 0x1e18,
+  0xbeb4, 0x099c,
+  0xbebf, 0x1e19,
+  0xbec0, 0x09a8,
+  0xbed5, 0x1e1a,
+  0xbed6, 0x09be,
+  0xbedf, 0x1e1b,
+  0xbee0, 0x09c8,
+  0xbee4, 0x1e1c,
+  0xbee5, 0x09cd,
+  0xbfa1, 0x09e7,
+  0xbfaa, 0x1e1d,
+  0xbfab, 0x09f1,
+  0xbfd9, 0x1e1e,
+  0xbfda, 0x0a20,
+  0xbfe0, 0x1e1f,
+  0xbfe1, 0x0a27,
+  0xbfe9, 0x1e20,
+  0xbfea, 0x0a30,
+  0xc0a1, 0x0a45,
+  0xc0a2, 0x1e21,
+  0xc0a3, 0x0a47,
+  0xc0c2, 0x1e22,
+  0xc0c3, 0x0a67,
+  0xc0e6, 0x1e23,
+  0xc0e7, 0x0a8b,
+  0xc0f1, 0x1e24,
+  0xc0f3, 0x0a97,
+  0xc0f9, 0x1e26,
+  0xc0fb, 0x0a9f,
+  0xc1a1, 0x0aa3,
+  0xc1a7, 0x1e28,
+  0xc1a8, 0x1a6e,
+  0xc1a9, 0x0aab,
+  0xc1b9, 0x1e29,
+  0xc1ba, 0x0abc,
+  0xc1cc, 0x1e2a,
+  0xc1cd, 0x0acf,
+  0xc1cf, 0x1e2b,
+  0xc1d0, 0x0ad2,
+  0xc1df, 0x1e2c,
+  0xc1e0, 0x0ae2,
+  0xc1e9, 0x1e2d,
+  0xc1ea, 0x0aec,
+  0xc2a1, 0x0b01,
+  0xc2bd, 0x1e2e,
+  0xc2be, 0x0b1e,
+  0xc2cd, 0x1e2f,
+  0xc2ce, 0x0b2e,
+  0xc2dc, 0x1e30,
+  0xc2dd, 0x0b3d,
+  0xc2e3, 0x1e31,
+  0xc2e4, 0x0b44,
+  0xc2ef, 0x1e32,
+  0xc2f0, 0x0b50,
+  0xc2f5, 0x1e33,
+  0xc2f7, 0x0b57,
+  0xc2fd, 0x1e35,
+  0xc2fe, 0x0b5e,
+  0xc3a1, 0x0b5f,
+  0xc3a7, 0x1e36,
+  0xc3a8, 0x0b66,
+  0xc3a9, 0x1e37,
+  0xc3ab, 0x0b69,
+  0xc3ad, 0x1e39,
+  0xc3af, 0x0b6d,
+  0xc3bd, 0x1e3b,
+  0xc3be, 0x0b7c,
+  0xc3f0, 0x1e3c,
+  0xc3f1, 0x0baf,
+  0xc3f5, 0x1e3d,
+  0xc3f6, 0x0bb4,
+  0xc3fc, 0x1e3e,
+  0xc3fd, 0x0bbb,
+  0xc4a1, 0x0bbd,
+  0xc4bd, 0x1e3f,
+  0xc4be, 0x0bda,
+  0xc4c8, 0x1e40,
+  0xc4c9, 0x0be5,
+  0xc4ca, 0x1e41,
+  0xc4cb, 0x0be7,
+  0xc4cd, 0x1e42,
+  0xc4ce, 0x0bea,
+  0xc4cf, 0x1e43,
+  0xc4d0, 0x0bec,
+  0xc4d4, 0x204b,
+  0xc4d5, 0x0bf1,
+  0xc4db, 0x11b5,
+  0xc4dc, 0x0bf8,
+  0xc5a1, 0x0c1b,
+  0xc5a2, 0x1e44,
+  0xc5a3, 0x0c1d,
+  0xc5a7, 0x1e45,
+  0xc5a8, 0x0c22,
+  0xc5ae, 0x1e46,
+  0xc5af, 0x0c29,
+  0xc5b6, 0x1e47,
+  0xc5b7, 0x0c31,
+  0xc5bf, 0x1e48,
+  0xc5c0, 0x0c3a,
+  0xc5c8, 0x1e49,
+  0xc5c9, 0x0c43,
+  0xc5cb, 0x1e4a,
+  0xc5cc, 0x0c46,
+  0xc5d1, 0x1e4b,
+  0xc5d3, 0x0c4d,
+  0xc5d7, 0x16df,
+  0xc5d8, 0x0c52,
+  0xc5e4, 0x1e4d,
+  0xc5e5, 0x0c5f,
+  0xc5ee, 0x1450,
+  0xc5ef, 0x0c69,
+  0xc5f3, 0x1536,
+  0xc5f4, 0x0c6e,
+  0xc5f8, 0x1e4e,
+  0xc5f9, 0x0c73,
+  0xc6a1, 0x0c79,
+  0xc6be, 0x1e4f,
+  0xc6bf, 0x0c97,
+  0xc6c2, 0x1e50,
+  0xc6c3, 0x0c9b,
+  0xc6d4, 0x1e51,
+  0xc6d6, 0x0cae,
+  0xc6db, 0x1e53,
+  0xc6dd, 0x0cb5,
+  0xc6e1, 0x1e55,
+  0xc6e2, 0x0cba,
+  0xc6e6, 0x1e56,
+  0xc6e8, 0x0cc0,
+  0xc6ea, 0x1e58,
+  0xc6eb, 0x0cc3,
+  0xc6f6, 0x1aed,
+  0xc6f7, 0x0ccf,
+  0xc7a1, 0x0cd7,
+  0xc7a9, 0x1e59,
+  0xc7aa, 0x0ce0,
+  0xc7b9, 0x1e5a,
+  0xc7ba, 0x0cf0,
+  0xc7d7, 0x1e5b,
+  0xc7d8, 0x0d0e,
+  0xc7e7, 0x1e5c,
+  0xc7e8, 0x1989,
+  0xc7e9, 0x1e5d,
+  0xc7ea, 0x0d20,
+  0xc7ed, 0x1e5e,
+  0xc7ee, 0x0d24,
+  0xc8a1, 0x0d35,
+  0xc8a4, 0x1e5f,
+  0xc8a5, 0x0d39,
+  0xc8ae, 0x1e60,
+  0xc8af, 0x0d43,
+  0xc8b0, 0x1e61,
+  0xc8b1, 0x0d45,
+  0xc8d4, 0x1e62,
+  0xc8d5, 0x0d69,
+  0xc8e2, 0x1e63,
+  0xc8e3, 0x0d77,
+  0xc8f5, 0x1e64,
+  0xc8f6, 0x0d8a,
+  0xc9a1, 0x0d93,
+  0xc9a2, 0x1e65,
+  0xc9a4, 0x0d96,
+  0xc9af, 0x1e67,
+  0xc9b0, 0x143b,
+  0xc9b1, 0x0da3,
+  0xc9b2, 0x1e68,
+  0xc9b3, 0x0da5,
+  0xc9b5, 0x1e69,
+  0xc9b6, 0x0da8,
+  0xc9c0, 0x1e6a,
+  0xc9c1, 0x0db3,
+  0xc9ce, 0x1e6b,
+  0xc9cf, 0x0dc1,
+  0xc9d1, 0x1e6c,
+  0xc9d2, 0x0dc4,
+  0xcaa1, 0x0df1,
+  0xcac3, 0x1e6d,
+  0xcac4, 0x0e14,
+  0xcacd, 0x1e6e,
+  0xcace, 0x0e1e,
+  0xcada, 0x1e6f,
+  0xcadb, 0x0e2b,
+  0xcaf9, 0x1e70,
+  0xcafa, 0x0e4a,
+  0xcba1, 0x0e4f,
+  0xcba2, 0x1e71,
+  0xcba3, 0x0e51,
+  0xcba9, 0x1e72,
+  0xcbaa, 0x0e58,
+  0xcbcb, 0x1e73,
+  0xcbcc, 0x0e7a,
+  0xcbea, 0x1d33,
+  0xcbeb, 0x0e99,
+  0xcbf0, 0x1e74,
+  0xcbf1, 0x0e9f,
+  0xcbf8, 0x1f2c,
+  0xcbf9, 0x102f,
+  0xcbfa, 0x0ea8,
+  0xcca1, 0x0ead,
+  0xcccd, 0x1e75,
+  0xccce, 0x0eda,
+  0xccd9, 0x1e76,
+  0xccda, 0x0ee6,
+  0xccdf, 0x1e77,
+  0xcce0, 0x0eec,
+  0xcce2, 0x1e78,
+  0xcce3, 0x0eef,
+  0xccf9, 0x1935,
+  0xccfa, 0x1e79,
+  0xccfb, 0x0f07,
+  0xccfc, 0x1e7a,
+  0xccfd, 0x0f09,
+  0xccfe, 0x1e7b,
+  0xcda1, 0x0f0b,
+  0xcdb2, 0x1e7c,
+  0xcdb3, 0x0f1d,
+  0xcdd0, 0x1e7d,
+  0xcdd1, 0x0f3b,
+  0xcdd4, 0x1e7e,
+  0xcdd5, 0x0f3f,
+  0xcdda, 0x1d34,
+  0xcddb, 0x0f45,
+  0xcde9, 0x1e7f,
+  0xcdea, 0x0f54,
+  0xcea1, 0x0f69,
+  0xcecb, 0x1e80,
+  0xcecc, 0x0f94,
+  0xcefa, 0x1e81,
+  0xcefc, 0x0fc4,
+  0xcfa1, 0x1e83,
+  0xcfa2, 0x0fc8,
+  0xcfb1, 0x1e84,
+  0xcfb2, 0x0fd8,
+  0xcfb6, 0x1777,
+  0xcfb7, 0x0fdd,
+  0xcfb9, 0x1e85,
+  0xcfba, 0x0fe0,
+  0xd0a1, 0x0ffa,
+  0xd0d6, 0x0ea7,
+  0xd0d7, 0x1030,
+  0xd1a1, 0x1058,
+  0xd1bd, 0x1e86,
+  0xd1be, 0x1075,
+  0xd1c7, 0x1e87,
+  0xd1c8, 0x107f,
+  0xd1cb, 0x1e88,
+  0xd1cc, 0x1083,
+  0xd1cd, 0x1e89,
+  0xd1ce, 0x1085,
+  0xd2a1, 0x10b6,
+  0xd3a1, 0x1114,
+  0xd3b0, 0x1e8a,
+  0xd3b1, 0x1124,
+  0xd3ba, 0x1e8b,
+  0xd3bb, 0x112e,
+  0xd3de, 0x1e8d,
+  0xd3df, 0x1152,
+  0xd3eb, 0x1e8e,
+  0xd3ec, 0x115f,
+  0xd4a1, 0x1172,
+  0xd4c4, 0x1e8f,
+  0xd4c5, 0x1196,
+  0xd4e4, 0x0bf7,
+  0xd4e5, 0x11b6,
+  0xd5a1, 0x11d0,
+  0xd5bd, 0x1e90,
+  0xd5be, 0x11ed,
+  0xd5e3, 0x1e91,
+  0xd5e4, 0x1213,
+  0xd6a1, 0x122e,
+  0xd6a2, 0x1e92,
+  0xd6a3, 0x1230,
+  0xd7a1, 0x128c,
+  0xd8a1, 0x12ea,
+  0xd8a4, 0x1e94,
+  0xd8a5, 0x12ee,
+  0xd9a1, 0x1348,
+  0xd9e0, 0x1e95,
+  0xd9e1, 0x1388,
+  0xd9ec, 0x1e96,
+  0xd9ed, 0x1394,
+  0xd9f8, 0x05a7,
+  0xd9f9, 0x13a0,
+  0xdaa1, 0x13a6,
+  0xdab9, 0x1e97,
+  0xdaba, 0x13bf,
+  0xdacd, 0x1e98,
+  0xdace, 0x13d3,
+  0xdba1, 0x1404,
+  0xdbc5, 0x1e99,
+  0xdbc6, 0x1429,
+  0xdbca, 0x1e9a,
+  0xdbcb, 0x142e,
+  0xdbd8, 0x0da2,
+  0xdbd9, 0x143c,
+  0xdbeb, 0x1e9b,
+  0xdbec, 0x144f,
+  0xdbed, 0x0c68,
+  0xdbee, 0x1451,
+  0xdbf4, 0x1e9c,
+  0xdbf5, 0x1458,
+  0xdca1, 0x1462,
+  0xdda1, 0x14c0,
+  0xdea1, 0x151e,
+  0xdeb9, 0x0c6d,
+  0xdeba, 0x1537,
+  0xded0, 0x1e9d,
+  0xded1, 0x154e,
+  0xdef5, 0x05ff,
+  0xdef6, 0x1573,
+  0xdfa1, 0x157c,
+  0xe0a1, 0x15da,
+  0xe0a6, 0x1e9f,
+  0xe0a7, 0x15e0,
+  0xe0df, 0x1ea0,
+  0xe0e0, 0x1619,
+  0xe0f6, 0x1d35,
+  0xe0f7, 0x1630,
+  0xe1a1, 0x1638,
+  0xe1ab, 0x1ea1,
+  0xe1ac, 0x1643,
+  0xe1b0, 0x1ea2,
+  0xe1b2, 0x1649,
+  0xe2a1, 0x1696,
+  0xe2ab, 0x1ea4,
+  0xe2ac, 0x16a1,
+  0xe2e8, 0x07ee,
+  0xe2e9, 0x16de,
+  0xe2ea, 0x0c51,
+  0xe2eb, 0x16e0,
+  0xe2ef, 0x1ea5,
+  0xe2f0, 0x16e5,
+  0xe3a1, 0x16f4,
+  0xe3ca, 0x1ea6,
+  0xe3cb, 0x171e,
+  0xe3d4, 0x1ea7,
+  0xe3d5, 0x1728,
+  0xe3de, 0x05d4,
+  0xe3df, 0x1732,
+  0xe4a1, 0x1752,
+  0xe4b9, 0x1ea8,
+  0xe4ba, 0x176b,
+  0xe4c6, 0x0fdc,
+  0xe4c7, 0x1778,
+  0xe4e4, 0x1ea9,
+  0xe4e5, 0x1796,
+  0xe4ee, 0x1eaa,
+  0xe4ef, 0x17a0,
+  0xe5a1, 0x17b0,
+  0xe5b9, 0x1eab,
+  0xe5ba, 0x17c9,
+  0xe5bb, 0x1eac,
+  0xe5bc, 0x17cb,
+  0xe5c6, 0x1ead,
+  0xe5c7, 0x17d6,
+  0xe6a1, 0x180e,
+  0xe6c6, 0x1eae,
+  0xe6c7, 0x1834,
+  0xe7a1, 0x186c,
+  0xe7e4, 0x1eaf,
+  0xe7e5, 0x18b0,
+  0xe7e9, 0x1eb0,
+  0xe7ea, 0x18b5,
+  0xe7f2, 0x1eb1,
+  0xe7f3, 0x18be,
+  0xe8a1, 0x18ca,
+  0xe8b4, 0x1eb2,
+  0xe8b5, 0x18de,
+  0xe8bb, 0x1eb3,
+  0xe8bc, 0x18e5,
+  0xe8f4, 0x1eb4,
+  0xe8f5, 0x191e,
+  0xe9a1, 0x1928,
+  0xe9a2, 0x08f5,
+  0xe9a3, 0x192a,
+  0xe9ae, 0x0f05,
+  0xe9af, 0x1936,
+  0xe9da, 0x05a0,
+  0xe9db, 0x1962,
+  0xeaa1, 0x1986,
+  0xeaa4, 0x0d1e,
+  0xeaa5, 0x198a,
+  0xeaa7, 0x1eb6,
+  0xeaa8, 0x198d,
+  0xeabd, 0x1eb7,
+  0xeabe, 0x19a3,
+  0xeaef, 0x1eb8,
+  0xeaf0, 0x19d5,
+  0xeba1, 0x19e4,
+  0xebb2, 0x1eb9,
+  0xebb3, 0x19f6,
+  0xebdd, 0x060e,
+  0xebde, 0x1a21,
+  0xebe6, 0x1eba,
+  0xebe7, 0x1a2a,
+  0xebf6, 0x1ebb,
+  0xebf7, 0x1a3a,
+  0xeca1, 0x1a42,
+  0xeccd, 0x0aaa,
+  0xecce, 0x1a6f,
+  0xece9, 0x1ebc,
+  0xecea, 0x1a8b,
+  0xecf4, 0x1ebd,
+  0xecf5, 0x1a96,
+  0xeda1, 0x1aa0,
+  0xedce, 0x1ebe,
+  0xedcf, 0x1ace,
+  0xedec, 0x1ebf,
+  0xeded, 0x1aec,
+  0xedee, 0x1ec0,
+  0xedef, 0x1aee,
+  0xeea1, 0x1afe,
+  0xeea9, 0x1ec1,
+  0xeeaa, 0x1b07,
+  0xeebd, 0x1ec2,
+  0xeebe, 0x1b1b,
+  0xeed7, 0x1ec3,
+  0xeed8, 0x1b35,
+  0xefa1, 0x1b5c,
+  0xf0a1, 0x1bba,
+  0xf0c5, 0x1ec6,
+  0xf0c6, 0x1bdf,
+  0xf0d1, 0x1ec7,
+  0xf0d2, 0x1beb,
+  0xf0d7, 0x1ec8,
+  0xf0d8, 0x1bf1,
+  0xf0f4, 0x0731,
+  0xf0f5, 0x1ec9,
+  0xf0f6, 0x1c0f,
+  0xf1a1, 0x1c18,
+  0xf2a1, 0x1c76,
+  0xf2ad, 0x1eca,
+  0xf2ae, 0x1c83,
+  0xf2bc, 0x1ecb,
+  0xf2bd, 0x1c92,
+  0xf2cd, 0x0477,
+  0xf2ce, 0x1ecc,
+  0xf2cf, 0x1ca4,
+  0xf2f4, 0x0529,
+  0xf2f5, 0x1cca,
+  0xf3a1, 0x1cd4,
+  0xf3d1, 0x1ecd,
+  0xf3d2, 0x1d05,
+  0xf3fd, 0x1ece,
+  0xf3fe, 0x1d31,
+  0xa1a2, 0x1ecf,
+  0xa1b1, 0x1ed1,
+  0xa1bc, 0x1ed3,
+  0xa1c1, 0x1ed6,
+  0xa1ca, 0x1edb,
+  0xa1e1, 0x1eed,
+  0xa4a1, 0x1eee,
+  0xa4a3, 0x1eef,
+  0xa4a5, 0x1ef0,
+  0xa4a7, 0x1ef1,
+  0xa4a9, 0x1ef2,
+  0xa4c3, 0x1ef3,
+  0xa4e3, 0x1ef4,
+  0xa4e5, 0x1ef5,
+  0xa4e7, 0x1ef6,
+  0xa4ee, 0x1ef7,
+  0xa5a1, 0x1ef8,
+  0xa5a3, 0x1ef9,
+  0xa5a5, 0x1efa,
+  0xa5a7, 0x1efb,
+  0xa5a9, 0x1efc,
+  0xa5c3, 0x1efd,
+  0xa5e3, 0x1efe,
+  0xa5e5, 0x1eff,
+  0xa5e7, 0x1f00,
+  0xa5ee, 0x1f01,
+  0xa5f5, 0x1f02,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan1278EUCVEnc16 = {
+  1,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 },
+  { 0x0000, 0x0000, 0x0000( 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan1278EUCVMap2, 653
+};
+
+static Gushort japan1278HMap2[1250] = {
+  0x0000, 0x0000,
+  0x2121, 0x0279,
+  0x2221, 0x02d7,
+  0x2330, 0x030c,
+  0x2341, 0x0316,
+  0x2361, 0x0330,
+  0x2421, 0x034a,
+  0x2521, 0x039d,
+  0x2621, 0x03f3,
+  0x2641, 0x040b,
+  0x2721, 0x0423,
+  0x2751, 0x0444,
+  0x3021, 0x0465,
+  0x3022, 0x1dd1,
+  0x3023, 0x0467,
+  0x3029, 0x204a,
+  0x302a, 0x046e,
+  0x3032, 0x1f19,
+  0x3033, 0x1ca2,
+  0x3034, 0x0478,
+  0x303b, 0x1dd2,
+  0x303c, 0x0480,
+  0x306e, 0x1dd3,
+  0x306f, 0x04b3,
+  0x3073, 0x1dd4,
+  0x3074, 0x04b8,
+  0x307c, 0x1dd5,
+  0x307d, 0x04c1,
+  0x3121, 0x04c3,
+  0x312a, 0x1dd6,
+  0x312b, 0x04cd,
+  0x3135, 0x1dd7,
+  0x3136, 0x04d8,
+  0x3139, 0x1dd8,
+  0x313a, 0x04dc,
+  0x313d, 0x1dda,
+  0x313e, 0x04e0,
+  0x3142, 0x1ddb,
+  0x3143, 0x04e5,
+  0x316b, 0x1ddc,
+  0x316c, 0x050e,
+  0x3221, 0x0521,
+  0x3228, 0x1ddd,
+  0x3229, 0x1cc9,
+  0x322a, 0x1dde,
+  0x322b, 0x052b,
+  0x3260, 0x1ddf,
+  0x3261, 0x0561,
+  0x327a, 0x1de0,
+  0x327b, 0x057b,
+  0x327d, 0x1de1,
+  0x327e, 0x057e,
+  0x3321, 0x057f,
+  0x3322, 0x1de2,
+  0x3323, 0x0581,
+  0x3342, 0x1961,
+  0x3343, 0x05a1,
+  0x3349, 0x139f,
+  0x334a, 0x05a8,
+  0x3365, 0x1de3,
+  0x3366, 0x05c4,
+  0x336b, 0x1de4,
+  0x336c, 0x05ca,
+  0x3373, 0x1de5,
+  0x3374, 0x05d2,
+  0x3376, 0x1731,
+  0x3377, 0x05d5,
+  0x337a, 0x1de6,
+  0x337b, 0x05d9,
+  0x3421, 0x05dd,
+  0x3442, 0x1de7,
+  0x3443, 0x1572,
+  0x3444, 0x0600,
+  0x344d, 0x1de8,
+  0x344e, 0x060a,
+  0x3452, 0x1a20,
+  0x3453, 0x060f,
+  0x3465, 0x1de9,
+  0x3466, 0x0622,
+  0x3521, 0x063b,
+  0x352b, 0x1dea,
+  0x352c, 0x0646,
+  0x3540, 0x1deb,
+  0x3541, 0x065b,
+  0x3621, 0x0699,
+  0x3622, 0x1dec,
+  0x3623, 0x069b,
+  0x362a, 0x1ded,
+  0x362b, 0x06a3,
+  0x3646, 0x1d32,
+  0x3647, 0x06bf,
+  0x364f, 0x1dee,
+  0x3650, 0x06c8,
+  0x366d, 0x1def,
+  0x366e, 0x06e6,
+  0x3674, 0x1df0,
+  0x3675, 0x06ed,
+  0x367b, 0x1df1,
+  0x367c, 0x06f4,
+  0x367d, 0x1df2,
+  0x367e, 0x06f6,
+  0x3721, 0x06f7,
+  0x3724, 0x1df3,
+  0x3725, 0x06fb,
+  0x3737, 0x1df4,
+  0x3738, 0x070e,
+  0x3745, 0x1df5,
+  0x3746, 0x071c,
+  0x374e, 0x1df6,
+  0x374f, 0x0725,
+  0x3752, 0x1df7,
+  0x3753, 0x0729,
+  0x3755, 0x1df8,
+  0x3756, 0x072c,
+  0x375b, 0x1c0d,
+  0x375c, 0x0732,
+  0x3764, 0x1df9,
+  0x3765, 0x073b,
+  0x3771, 0x1dfa,
+  0x3772, 0x0748,
+  0x3779, 0x1dfb,
+  0x377a, 0x0750,
+  0x377e, 0x1dfc,
+  0x3821, 0x0755,
+  0x3834, 0x1dfd,
+  0x3835, 0x0769,
+  0x3841, 0x1dfe,
+  0x3842, 0x0776,
+  0x3921, 0x07b3,
+  0x392b, 0x1dff,
+  0x392c, 0x07be,
+  0x3937, 0x1e00,
+  0x3938, 0x07ca,
+  0x3942, 0x1e01,
+  0x3943, 0x07d5,
+  0x395c, 0x16dd,
+  0x395d, 0x07ef,
+  0x396d, 0x1e02,
+  0x396e, 0x0800,
+  0x3974, 0x1e03,
+  0x3975, 0x0807,
+  0x3979, 0x1e04,
+  0x397a, 0x080c,
+  0x3a21, 0x0811,
+  0x3a53, 0x1e05,
+  0x3a54, 0x0844,
+  0x3a67, 0x1e06,
+  0x3a68, 0x0858,
+  0x3a74, 0x1e07,
+  0x3a75, 0x0865,
+  0x3b21, 0x086f,
+  0x3b27, 0x1e08,
+  0x3b28, 0x0876,
+  0x3b2a, 0x1e09,
+  0x3b2b, 0x0879,
+  0x3b2c, 0x1e0a,
+  0x3b2d, 0x087b,
+  0x3b39, 0x1e0b,
+  0x3b3a, 0x0888,
+  0x3c21, 0x08cd,
+  0x3c48, 0x1e0d,
+  0x3c49, 0x1929,
+  0x3c4a, 0x08f6,
+  0x3c57, 0x1e0e,
+  0x3c58, 0x0904,
+  0x3c5d, 0x1e0f,
+  0x3c5f, 0x090b,
+  0x3d21, 0x092b,
+  0x3d2b, 0x1e11,
+  0x3d2c, 0x0936,
+  0x3d36, 0x1e12,
+  0x3d37, 0x0941,
+  0x3d6c, 0x1e13,
+  0x3d6e, 0x0978,
+  0x3d72, 0x1e15,
+  0x3d74, 0x097e,
+  0x3e21, 0x0989,
+  0x3e25, 0x1e17,
+  0x3e26, 0x098e,
+  0x3e33, 0x1e18,
+  0x3e34, 0x099c,
+  0x3e3f, 0x1e19,
+  0x3e40, 0x09a8,
+  0x3e55, 0x1e1a,
+  0x3e56, 0x09be,
+  0x3e5f, 0x1e1b,
+  0x3e60, 0x09c8,
+  0x3e64, 0x1e1c,
+  0x3e65, 0x09cd,
+  0x3f21, 0x09e7,
+  0x3f2a, 0x1e1d,
+  0x3f2b, 0x09f1,
+  0x3f59, 0x1e1e,
+  0x3f5a, 0x0a20,
+  0x3f60, 0x1e1f,
+  0x3f61, 0x0a27,
+  0x3f69, 0x1e20,
+  0x3f6a, 0x0a30,
+  0x4021, 0x0a45,
+  0x4022, 0x1e21,
+  0x4023, 0x0a47,
+  0x4042, 0x1e22,
+  0x4043, 0x0a67,
+  0x4066, 0x1e23,
+  0x4067, 0x0a8b,
+  0x4071, 0x1e24,
+  0x4073, 0x0a97,
+  0x4079, 0x1e26,
+  0x407b, 0x0a9f,
+  0x4121, 0x0aa3,
+  0x4127, 0x1e28,
+  0x4128, 0x1a6e,
+  0x4129, 0x0aab,
+  0x4139, 0x1e29,
+  0x413a, 0x0abc,
+  0x414c, 0x1e2a,
+  0x414d, 0x0acf,
+  0x414f, 0x1e2b,
+  0x4150, 0x0ad2,
+  0x415f, 0x1e2c,
+  0x4160, 0x0ae2,
+  0x4169, 0x1e2d,
+  0x416a, 0x0aec,
+  0x4221, 0x0b01,
+  0x423d, 0x1e2e,
+  0x423e, 0x0b1e,
+  0x424d, 0x1e2f,
+  0x424e, 0x0b2e,
+  0x425c, 0x1e30,
+  0x425d, 0x0b3d,
+  0x4263, 0x1e31,
+  0x4264, 0x0b44,
+  0x426f, 0x1e32,
+  0x4270, 0x0b50,
+  0x4275, 0x1e33,
+  0x4277, 0x0b57,
+  0x427d, 0x1e35,
+  0x427e, 0x0b5e,
+  0x4321, 0x0b5f,
+  0x4327, 0x1e36,
+  0x4328, 0x0b66,
+  0x4329, 0x1e37,
+  0x432b, 0x0b69,
+  0x432d, 0x1e39,
+  0x432f, 0x0b6d,
+  0x433d, 0x1e3b,
+  0x433e, 0x0b7c,
+  0x4370, 0x1e3c,
+  0x4371, 0x0baf,
+  0x4375, 0x1e3d,
+  0x4376, 0x0bb4,
+  0x437c, 0x1e3e,
+  0x437d, 0x0bbb,
+  0x4421, 0x0bbd,
+  0x443d, 0x1e3f,
+  0x443e, 0x0bda,
+  0x4448, 0x1e40,
+  0x4449, 0x0be5,
+  0x444a, 0x1e41,
+  0x444b, 0x0be7,
+  0x444d, 0x1e42,
+  0x444e, 0x0bea,
+  0x444f, 0x1e43,
+  0x4450, 0x0bec,
+  0x4454, 0x204b,
+  0x4455, 0x0bf1,
+  0x445b, 0x11b5,
+  0x445c, 0x0bf8,
+  0x4521, 0x0c1b,
+  0x4522, 0x1e44,
+  0x4523, 0x0c1d,
+  0x4527, 0x1e45,
+  0x4528, 0x0c22,
+  0x452e, 0x1e46,
+  0x452f, 0x0c29,
+  0x4536, 0x1e47,
+  0x4537, 0x0c31,
+  0x453f, 0x1e48,
+  0x4540, 0x0c3a,
+  0x4548, 0x1e49,
+  0x4549, 0x0c43,
+  0x454b, 0x1e4a,
+  0x454c, 0x0c46,
+  0x4551, 0x1e4b,
+  0x4553, 0x0c4d,
+  0x4557, 0x16df,
+  0x4558, 0x0c52,
+  0x4564, 0x1e4d,
+  0x4565, 0x0c5f,
+  0x456e, 0x1450,
+  0x456f, 0x0c69,
+  0x4573, 0x1536,
+  0x4574, 0x0c6e,
+  0x4578, 0x1e4e,
+  0x4579, 0x0c73,
+  0x4621, 0x0c79,
+  0x463e, 0x1e4f,
+  0x463f, 0x0c97,
+  0x4642, 0x1e50,
+  0x4643, 0x0c9b,
+  0x4654, 0x1e51,
+  0x4656, 0x0cae,
+  0x465b, 0x1e53,
+  0x465d, 0x0cb5,
+  0x4661, 0x1e55,
+  0x4662, 0x0cba,
+  0x4666, 0x1e56,
+  0x4668, 0x0cc0,
+  0x466a, 0x1e58,
+  0x466b, 0x0cc3,
+  0x4676, 0x1aed,
+  0x4677, 0x0ccf,
+  0x4721, 0x0cd7,
+  0x4729, 0x1e59,
+  0x472a, 0x0ce0,
+  0x4739, 0x1e5a,
+  0x473a, 0x0cf0,
+  0x4757, 0x1e5b,
+  0x4758, 0x0d0e,
+  0x4767, 0x1e5c,
+  0x4768, 0x1989,
+  0x4769, 0x1e5d,
+  0x476a, 0x0d20,
+  0x476d, 0x1e5e,
+  0x476e, 0x0d24,
+  0x4821, 0x0d35,
+  0x4824, 0x1e5f,
+  0x4825, 0x0d39,
+  0x482e, 0x1e60,
+  0x482f, 0x0d43,
+  0x4830, 0x1e61,
+  0x4831, 0x0d45,
+  0x4854, 0x1e62,
+  0x4855, 0x0d69,
+  0x4862, 0x1e63,
+  0x4863, 0x0d77,
+  0x4875, 0x1e64,
+  0x4876, 0x0d8a,
+  0x4921, 0x0d93,
+  0x4922, 0x1e65,
+  0x4924, 0x0d96,
+  0x492f, 0x1e67,
+  0x4930, 0x143b,
+  0x4931, 0x0da3,
+  0x4932, 0x1e68,
+  0x4933, 0x0da5,
+  0x4935, 0x1e69,
+  0x4936, 0x0da8,
+  0x4940, 0x1e6a,
+  0x4941, 0x0db3,
+  0x494e, 0x1e6b,
+  0x494f, 0x0dc1,
+  0x4951, 0x1e6c,
+  0x4952, 0x0dc4,
+  0x4a21, 0x0df1,
+  0x4a43, 0x1e6d,
+  0x4a44, 0x0e14,
+  0x4a4d, 0x1e6e,
+  0x4a4e, 0x0e1e,
+  0x4a5a, 0x1e6f,
+  0x4a5b, 0x0e2b,
+  0x4a79, 0x1e70,
+  0x4a7a, 0x0e4a,
+  0x4b21, 0x0e4f,
+  0x4b22, 0x1e71,
+  0x4b23, 0x0e51,
+  0x4b29, 0x1e72,
+  0x4b2a, 0x0e58,
+  0x4b4b, 0x1e73,
+  0x4b4c, 0x0e7a,
+  0x4b6a, 0x1d33,
+  0x4b6b, 0x0e99,
+  0x4b70, 0x1e74,
+  0x4b71, 0x0e9f,
+  0x4b78, 0x1f2c,
+  0x4b79, 0x102f,
+  0x4b7a, 0x0ea8,
+  0x4c21, 0x0ead,
+  0x4c4d, 0x1e75,
+  0x4c4e, 0x0eda,
+  0x4c59, 0x1e76,
+  0x4c5a, 0x0ee6,
+  0x4c5f, 0x1e77,
+  0x4c60, 0x0eec,
+  0x4c62, 0x1e78,
+  0x4c63, 0x0eef,
+  0x4c79, 0x1935,
+  0x4c7a, 0x1e79,
+  0x4c7b, 0x0f07,
+  0x4c7c, 0x1e7a,
+  0x4c7d, 0x0f09,
+  0x4c7e, 0x1e7b,
+  0x4d21, 0x0f0b,
+  0x4d32, 0x1e7c,
+  0x4d33, 0x0f1d,
+  0x4d50, 0x1e7d,
+  0x4d51, 0x0f3b,
+  0x4d54, 0x1e7e,
+  0x4d55, 0x0f3f,
+  0x4d5a, 0x1d34,
+  0x4d5b, 0x0f45,
+  0x4d69, 0x1e7f,
+  0x4d6a, 0x0f54,
+  0x4e21, 0x0f69,
+  0x4e4b, 0x1e80,
+  0x4e4c, 0x0f94,
+  0x4e7a, 0x1e81,
+  0x4e7c, 0x0fc4,
+  0x4f21, 0x1e83,
+  0x4f22, 0x0fc8,
+  0x4f31, 0x1e84,
+  0x4f32, 0x0fd8,
+  0x4f36, 0x1777,
+  0x4f37, 0x0fdd,
+  0x4f39, 0x1e85,
+  0x4f3a, 0x0fe0,
+  0x5021, 0x0ffa,
+  0x5056, 0x0ea7,
+  0x5057, 0x1030,
+  0x5121, 0x1058,
+  0x513d, 0x1e86,
+  0x513e, 0x1075,
+  0x5147, 0x1e87,
+  0x5148, 0x107f,
+  0x514b, 0x1e88,
+  0x514c, 0x1083,
+  0x514d, 0x1e89,
+  0x514e, 0x1085,
+  0x5221, 0x10b6,
+  0x5321, 0x1114,
+  0x5330, 0x1e8a,
+  0x5331, 0x1124,
+  0x533a, 0x1e8b,
+  0x533b, 0x112e,
+  0x535e, 0x1e8d,
+  0x535f, 0x1152,
+  0x536b, 0x1e8e,
+  0x536c, 0x115f,
+  0x5421, 0x1172,
+  0x5444, 0x1e8f,
+  0x5445, 0x1196,
+  0x5464, 0x0bf7,
+  0x5465, 0x11b6,
+  0x5521, 0x11d0,
+  0x553d, 0x1e90,
+  0x553e, 0x11ed,
+  0x5563, 0x1e91,
+  0x5564, 0x1213,
+  0x5621, 0x122e,
+  0x5622, 0x1e92,
+  0x5623, 0x1230,
+  0x5721, 0x128c,
+  0x5821, 0x12ea,
+  0x5824, 0x1e94,
+  0x5825, 0x12ee,
+  0x5921, 0x1348,
+  0x5960, 0x1e95,
+  0x5961, 0x1388,
+  0x596c, 0x1e96,
+  0x596d, 0x1394,
+  0x5978, 0x05a7,
+  0x5979, 0x13a0,
+  0x5a21, 0x13a6,
+  0x5a39, 0x1e97,
+  0x5a3a, 0x13bf,
+  0x5a4d, 0x1e98,
+  0x5a4e, 0x13d3,
+  0x5b21, 0x1404,
+  0x5b45, 0x1e99,
+  0x5b46, 0x1429,
+  0x5b4a, 0x1e9a,
+  0x5b4b, 0x142e,
+  0x5b58, 0x0da2,
+  0x5b59, 0x143c,
+  0x5b6b, 0x1e9b,
+  0x5b6c, 0x144f,
+  0x5b6d, 0x0c68,
+  0x5b6e, 0x1451,
+  0x5b74, 0x1e9c,
+  0x5b75, 0x1458,
+  0x5c21, 0x1462,
+  0x5d21, 0x14c0,
+  0x5e21, 0x151e,
+  0x5e39, 0x0c6d,
+  0x5e3a, 0x1537,
+  0x5e50, 0x1e9d,
+  0x5e51, 0x154e,
+  0x5e75, 0x05ff,
+  0x5e76, 0x1573,
+  0x5f21, 0x157c,
+  0x6021, 0x15da,
+  0x6026, 0x1e9f,
+  0x6027, 0x15e0,
+  0x605f, 0x1ea0,
+  0x6060, 0x1619,
+  0x6076, 0x1d35,
+  0x6077, 0x1630,
+  0x6121, 0x1638,
+  0x612b, 0x1ea1,
+  0x612c, 0x1643,
+  0x6130, 0x1ea2,
+  0x6132, 0x1649,
+  0x6221, 0x1696,
+  0x622b, 0x1ea4,
+  0x622c, 0x16a1,
+  0x6268, 0x07ee,
+  0x6269, 0x16de,
+  0x626a, 0x0c51,
+  0x626b, 0x16e0,
+  0x626f, 0x1ea5,
+  0x6270, 0x16e5,
+  0x6321, 0x16f4,
+  0x634a, 0x1ea6,
+  0x634b, 0x171e,
+  0x6354, 0x1ea7,
+  0x6355, 0x1728,
+  0x635e, 0x05d4,
+  0x635f, 0x1732,
+  0x6421, 0x1752,
+  0x6439, 0x1ea8,
+  0x643a, 0x176b,
+  0x6446, 0x0fdc,
+  0x6447, 0x1778,
+  0x6464, 0x1ea9,
+  0x6465, 0x1796,
+  0x646e, 0x1eaa,
+  0x646f, 0x17a0,
+  0x6521, 0x17b0,
+  0x6539, 0x1eab,
+  0x653a, 0x17c9,
+  0x653b, 0x1eac,
+  0x653c, 0x17cb,
+  0x6546, 0x1ead,
+  0x6547, 0x17d6,
+  0x6621, 0x180e,
+  0x6646, 0x1eae,
+  0x6647, 0x1834,
+  0x6721, 0x186c,
+  0x6764, 0x1eaf,
+  0x6765, 0x18b0,
+  0x6769, 0x1eb0,
+  0x676a, 0x18b5,
+  0x6772, 0x1eb1,
+  0x6773, 0x18be,
+  0x6821, 0x18ca,
+  0x6834, 0x1eb2,
+  0x6835, 0x18de,
+  0x683b, 0x1eb3,
+  0x683c, 0x18e5,
+  0x6874, 0x1eb4,
+  0x6875, 0x191e,
+  0x6921, 0x1928,
+  0x6922, 0x08f5,
+  0x6923, 0x192a,
+  0x692e, 0x0f05,
+  0x692f, 0x1936,
+  0x695a, 0x05a0,
+  0x695b, 0x1962,
+  0x6a21, 0x1986,
+  0x6a24, 0x0d1e,
+  0x6a25, 0x198a,
+  0x6a27, 0x1eb6,
+  0x6a28, 0x198d,
+  0x6a3d, 0x1eb7,
+  0x6a3e, 0x19a3,
+  0x6a6f, 0x1eb8,
+  0x6a70, 0x19d5,
+  0x6b21, 0x19e4,
+  0x6b32, 0x1eb9,
+  0x6b33, 0x19f6,
+  0x6b5d, 0x060e,
+  0x6b5e, 0x1a21,
+  0x6b66, 0x1eba,
+  0x6b67, 0x1a2a,
+  0x6b76, 0x1ebb,
+  0x6b77, 0x1a3a,
+  0x6c21, 0x1a42,
+  0x6c4d, 0x0aaa,
+  0x6c4e, 0x1a6f,
+  0x6c69, 0x1ebc,
+  0x6c6a, 0x1a8b,
+  0x6c74, 0x1ebd,
+  0x6c75, 0x1a96,
+  0x6d21, 0x1aa0,
+  0x6d4e, 0x1ebe,
+  0x6d4f, 0x1ace,
+  0x6d6c, 0x1ebf,
+  0x6d6d, 0x1aec,
+  0x6d6e, 0x1ec0,
+  0x6d6f, 0x1aee,
+  0x6e21, 0x1afe,
+  0x6e29, 0x1ec1,
+  0x6e2a, 0x1b07,
+  0x6e3d, 0x1ec2,
+  0x6e3e, 0x1b1b,
+  0x6e57, 0x1ec3,
+  0x6e58, 0x1b35,
+  0x6f21, 0x1b5c,
+  0x7021, 0x1bba,
+  0x7045, 0x1ec6,
+  0x7046, 0x1bdf,
+  0x7051, 0x1ec7,
+  0x7052, 0x1beb,
+  0x7057, 0x1ec8,
+  0x7058, 0x1bf1,
+  0x7074, 0x0731,
+  0x7075, 0x1ec9,
+  0x7076, 0x1c0f,
+  0x7121, 0x1c18,
+  0x7221, 0x1c76,
+  0x722d, 0x1eca,
+  0x722e, 0x1c83,
+  0x723c, 0x1ecb,
+  0x723d, 0x1c92,
+  0x724d, 0x0477,
+  0x724e, 0x1ecc,
+  0x724f, 0x1ca4,
+  0x7274, 0x0529,
+  0x7275, 0x1cca,
+  0x7321, 0x1cd4,
+  0x7351, 0x1ecd,
+  0x7352, 0x1d05,
+  0x737d, 0x1ece,
+  0x737e, 0x1d31,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan1278HEnc16 = {
+  0,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000( 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan1278HMap2, 625
+};
+
+static Gushort japan1278RKSJHMap2[1252] = {
+  0x0000, 0x0000,
+  0x8140, 0x0279,
+  0x8180, 0x02b8,
+  0x824f, 0x030c,
+  0x8260, 0x0316,
+  0x8281, 0x0330,
+  0x829f, 0x034a,
+  0x8340, 0x039d,
+  0x8380, 0x03dc,
+  0x839f, 0x03f3,
+  0x83bf, 0x040b,
+  0x8440, 0x0423,
+  0x8470, 0x0444,
+  0x8480, 0x0453,
+  0x889f, 0x0465,
+  0x88a0, 0x1dd1,
+  0x88a1, 0x0467,
+  0x88a7, 0x204a,
+  0x88a8, 0x046e,
+  0x88b0, 0x1f19,
+  0x88b1, 0x1ca2,
+  0x88b2, 0x0478,
+  0x88b9, 0x1dd2,
+  0x88ba, 0x0480,
+  0x88ec, 0x1dd3,
+  0x88ed, 0x04b3,
+  0x88f1, 0x1dd4,
+  0x88f2, 0x04b8,
+  0x88fa, 0x1dd5,
+  0x88fb, 0x04c1,
+  0x8940, 0x04c3,
+  0x8949, 0x1dd6,
+  0x894a, 0x04cd,
+  0x8954, 0x1dd7,
+  0x8955, 0x04d8,
+  0x8958, 0x1dd8,
+  0x8959, 0x04dc,
+  0x895c, 0x1dda,
+  0x895d, 0x04e0,
+  0x8961, 0x1ddb,
+  0x8962, 0x04e5,
+  0x8980, 0x0502,
+  0x898b, 0x1ddc,
+  0x898c, 0x050e,
+  0x89a6, 0x1ddd,
+  0x89a7, 0x1cc9,
+  0x89a8, 0x1dde,
+  0x89a9, 0x052b,
+  0x89de, 0x1ddf,
+  0x89df, 0x0561,
+  0x89f8, 0x1de0,
+  0x89f9, 0x057b,
+  0x89fb, 0x1de1,
+  0x89fc, 0x057e,
+  0x8a40, 0x057f,
+  0x8a41, 0x1de2,
+  0x8a42, 0x0581,
+  0x8a61, 0x1961,
+  0x8a62, 0x05a1,
+  0x8a68, 0x139f,
+  0x8a69, 0x05a8,
+  0x8a80, 0x05be,
+  0x8a85, 0x1de3,
+  0x8a86, 0x05c4,
+  0x8a8b, 0x1de4,
+  0x8a8c, 0x05ca,
+  0x8a93, 0x1de5,
+  0x8a94, 0x05d2,
+  0x8a96, 0x1731,
+  0x8a97, 0x05d5,
+  0x8a9a, 0x1de6,
+  0x8a9b, 0x05d9,
+  0x8ac0, 0x1de7,
+  0x8ac1, 0x1572,
+  0x8ac2, 0x0600,
+  0x8acb, 0x1de8,
+  0x8acc, 0x060a,
+  0x8ad0, 0x1a20,
+  0x8ad1, 0x060f,
+  0x8ae3, 0x1de9,
+  0x8ae4, 0x0622,
+  0x8b40, 0x063b,
+  0x8b4a, 0x1dea,
+  0x8b4b, 0x0646,
+  0x8b5f, 0x1deb,
+  0x8b60, 0x065b,
+  0x8b80, 0x067a,
+  0x8ba0, 0x1dec,
+  0x8ba1, 0x069b,
+  0x8ba8, 0x1ded,
+  0x8ba9, 0x06a3,
+  0x8bc4, 0x1d32,
+  0x8bc5, 0x06bf,
+  0x8bcd, 0x1dee,
+  0x8bce, 0x06c8,
+  0x8beb, 0x1def,
+  0x8bec, 0x06e6,
+  0x8bf2, 0x1df0,
+  0x8bf3, 0x06ed,
+  0x8bf9, 0x1df1,
+  0x8bfa, 0x06f4,
+  0x8bfb, 0x1df2,
+  0x8bfc, 0x06f6,
+  0x8c40, 0x06f7,
+  0x8c43, 0x1df3,
+  0x8c44, 0x06fb,
+  0x8c56, 0x1df4,
+  0x8c57, 0x070e,
+  0x8c64, 0x1df5,
+  0x8c65, 0x071c,
+  0x8c6d, 0x1df6,
+  0x8c6e, 0x0725,
+  0x8c71, 0x1df7,
+  0x8c72, 0x0729,
+  0x8c74, 0x1df8,
+  0x8c75, 0x072c,
+  0x8c7a, 0x1c0d,
+  0x8c7b, 0x0732,
+  0x8c80, 0x0736,
+  0x8c84, 0x1df9,
+  0x8c85, 0x073b,
+  0x8c91, 0x1dfa,
+  0x8c92, 0x0748,
+  0x8c99, 0x1dfb,
+  0x8c9a, 0x0750,
+  0x8c9e, 0x1dfc,
+  0x8c9f, 0x0755,
+  0x8cb2, 0x1dfd,
+  0x8cb3, 0x0769,
+  0x8cbf, 0x1dfe,
+  0x8cc0, 0x0776,
+  0x8d40, 0x07b3,
+  0x8d4a, 0x1dff,
+  0x8d4b, 0x07be,
+  0x8d56, 0x1e00,
+  0x8d57, 0x07ca,
+  0x8d61, 0x1e01,
+  0x8d62, 0x07d5,
+  0x8d7b, 0x16dd,
+  0x8d7c, 0x07ef,
+  0x8d80, 0x07f2,
+  0x8d8d, 0x1e02,
+  0x8d8e, 0x0800,
+  0x8d94, 0x1e03,
+  0x8d95, 0x0807,
+  0x8d99, 0x1e04,
+  0x8d9a, 0x080c,
+  0x8dd1, 0x1e05,
+  0x8dd2, 0x0844,
+  0x8de5, 0x1e06,
+  0x8de6, 0x0858,
+  0x8df2, 0x1e07,
+  0x8df3, 0x0865,
+  0x8e40, 0x086f,
+  0x8e46, 0x1e08,
+  0x8e47, 0x0876,
+  0x8e49, 0x1e09,
+  0x8e4a, 0x0879,
+  0x8e4b, 0x1e0a,
+  0x8e4c, 0x087b,
+  0x8e58, 0x1e0b,
+  0x8e59, 0x0888,
+  0x8e80, 0x08ae,
+  0x8ec6, 0x1e0d,
+  0x8ec7, 0x1929,
+  0x8ec8, 0x08f6,
+  0x8ed5, 0x1e0e,
+  0x8ed6, 0x0904,
+  0x8edb, 0x1e0f,
+  0x8edd, 0x090b,
+  0x8f40, 0x092b,
+  0x8f4a, 0x1e11,
+  0x8f4b, 0x0936,
+  0x8f55, 0x1e12,
+  0x8f56, 0x0941,
+  0x8f80, 0x096a,
+  0x8f8c, 0x1e13,
+  0x8f8e, 0x0978,
+  0x8f92, 0x1e15,
+  0x8f94, 0x097e,
+  0x8fa3, 0x1e17,
+  0x8fa4, 0x098e,
+  0x8fb1, 0x1e18,
+  0x8fb2, 0x099c,
+  0x8fbd, 0x1e19,
+  0x8fbe, 0x09a8,
+  0x8fd3, 0x1e1a,
+  0x8fd4, 0x09be,
+  0x8fdd, 0x1e1b,
+  0x8fde, 0x09c8,
+  0x8fe2, 0x1e1c,
+  0x8fe3, 0x09cd,
+  0x9040, 0x09e7,
+  0x9049, 0x1e1d,
+  0x904a, 0x09f1,
+  0x9078, 0x1e1e,
+  0x9079, 0x0a20,
+  0x9080, 0x1e1f,
+  0x9081, 0x0a27,
+  0x9089, 0x1e20,
+  0x908a, 0x0a30,
+  0x90a0, 0x1e21,
+  0x90a1, 0x0a47,
+  0x90c0, 0x1e22,
+  0x90c1, 0x0a67,
+  0x90e4, 0x1e23,
+  0x90e5, 0x0a8b,
+  0x90ef, 0x1e24,
+  0x90f1, 0x0a97,
+  0x90f7, 0x1e26,
+  0x90f9, 0x0a9f,
+  0x9140, 0x0aa3,
+  0x9146, 0x1e28,
+  0x9147, 0x1a6e,
+  0x9148, 0x0aab,
+  0x9158, 0x1e29,
+  0x9159, 0x0abc,
+  0x916b, 0x1e2a,
+  0x916c, 0x0acf,
+  0x916e, 0x1e2b,
+  0x916f, 0x0ad2,
+  0x917e, 0x1e2c,
+  0x9180, 0x0ae2,
+  0x9189, 0x1e2d,
+  0x918a, 0x0aec,
+  0x91bb, 0x1e2e,
+  0x91bc, 0x0b1e,
+  0x91cb, 0x1e2f,
+  0x91cc, 0x0b2e,
+  0x91da, 0x1e30,
+  0x91db, 0x0b3d,
+  0x91e1, 0x1e31,
+  0x91e2, 0x0b44,
+  0x91ed, 0x1e32,
+  0x91ee, 0x0b50,
+  0x91f3, 0x1e33,
+  0x91f5, 0x0b57,
+  0x91fb, 0x1e35,
+  0x91fc, 0x0b5e,
+  0x9240, 0x0b5f,
+  0x9246, 0x1e36,
+  0x9247, 0x0b66,
+  0x9248, 0x1e37,
+  0x924a, 0x0b69,
+  0x924c, 0x1e39,
+  0x924e, 0x0b6d,
+  0x925c, 0x1e3b,
+  0x925d, 0x0b7c,
+  0x9280, 0x0b9e,
+  0x9290, 0x1e3c,
+  0x9291, 0x0baf,
+  0x9295, 0x1e3d,
+  0x9296, 0x0bb4,
+  0x929c, 0x1e3e,
+  0x929d, 0x0bbb,
+  0x92bb, 0x1e3f,
+  0x92bc, 0x0bda,
+  0x92c6, 0x1e40,
+  0x92c7, 0x0be5,
+  0x92c8, 0x1e41,
+  0x92c9, 0x0be7,
+  0x92cb, 0x1e42,
+  0x92cc, 0x0bea,
+  0x92cd, 0x1e43,
+  0x92ce, 0x0bec,
+  0x92d2, 0x204b,
+  0x92d3, 0x0bf1,
+  0x92d9, 0x11b5,
+  0x92da, 0x0bf8,
+  0x9340, 0x0c1b,
+  0x9341, 0x1e44,
+  0x9342, 0x0c1d,
+  0x9346, 0x1e45,
+  0x9347, 0x0c22,
+  0x934d, 0x1e46,
+  0x934e, 0x0c29,
+  0x9355, 0x1e47,
+  0x9356, 0x0c31,
+  0x935e, 0x1e48,
+  0x935f, 0x0c3a,
+  0x9367, 0x1e49,
+  0x9368, 0x0c43,
+  0x936a, 0x1e4a,
+  0x936b, 0x0c46,
+  0x9370, 0x1e4b,
+  0x9372, 0x0c4d,
+  0x9376, 0x16df,
+  0x9377, 0x0c52,
+  0x9380, 0x0c5a,
+  0x9384, 0x1e4d,
+  0x9385, 0x0c5f,
+  0x938e, 0x1450,
+  0x938f, 0x0c69,
+  0x9393, 0x1536,
+  0x9394, 0x0c6e,
+  0x9398, 0x1e4e,
+  0x9399, 0x0c73,
+  0x93bc, 0x1e4f,
+  0x93bd, 0x0c97,
+  0x93c0, 0x1e50,
+  0x93c1, 0x0c9b,
+  0x93d2, 0x1e51,
+  0x93d4, 0x0cae,
+  0x93d9, 0x1e53,
+  0x93db, 0x0cb5,
+  0x93df, 0x1e55,
+  0x93e0, 0x0cba,
+  0x93e4, 0x1e56,
+  0x93e6, 0x0cc0,
+  0x93e8, 0x1e58,
+  0x93e9, 0x0cc3,
+  0x93f4, 0x1aed,
+  0x93f5, 0x0ccf,
+  0x9440, 0x0cd7,
+  0x9448, 0x1e59,
+  0x9449, 0x0ce0,
+  0x9458, 0x1e5a,
+  0x9459, 0x0cf0,
+  0x9476, 0x1e5b,
+  0x9477, 0x0d0e,
+  0x9480, 0x0d16,
+  0x9487, 0x1e5c,
+  0x9488, 0x1989,
+  0x9489, 0x1e5d,
+  0x948a, 0x0d20,
+  0x948d, 0x1e5e,
+  0x948e, 0x0d24,
+  0x94a2, 0x1e5f,
+  0x94a3, 0x0d39,
+  0x94ac, 0x1e60,
+  0x94ad, 0x0d43,
+  0x94ae, 0x1e61,
+  0x94af, 0x0d45,
+  0x94d2, 0x1e62,
+  0x94d3, 0x0d69,
+  0x94e0, 0x1e63,
+  0x94e1, 0x0d77,
+  0x94f3, 0x1e64,
+  0x94f4, 0x0d8a,
+  0x9540, 0x0d93,
+  0x9541, 0x1e65,
+  0x9543, 0x0d96,
+  0x954e, 0x1e67,
+  0x954f, 0x143b,
+  0x9550, 0x0da3,
+  0x9551, 0x1e68,
+  0x9552, 0x0da5,
+  0x9554, 0x1e69,
+  0x9555, 0x0da8,
+  0x955f, 0x1e6a,
+  0x9560, 0x0db3,
+  0x956d, 0x1e6b,
+  0x956e, 0x0dc1,
+  0x9570, 0x1e6c,
+  0x9571, 0x0dc4,
+  0x9580, 0x0dd2,
+  0x95c1, 0x1e6d,
+  0x95c2, 0x0e14,
+  0x95cb, 0x1e6e,
+  0x95cc, 0x0e1e,
+  0x95d8, 0x1e6f,
+  0x95d9, 0x0e2b,
+  0x95f7, 0x1e70,
+  0x95f8, 0x0e4a,
+  0x9640, 0x0e4f,
+  0x9641, 0x1e71,
+  0x9642, 0x0e51,
+  0x9648, 0x1e72,
+  0x9649, 0x0e58,
+  0x966a, 0x1e73,
+  0x966b, 0x0e7a,
+  0x9680, 0x0e8e,
+  0x968a, 0x1d33,
+  0x968b, 0x0e99,
+  0x9690, 0x1e74,
+  0x9691, 0x0e9f,
+  0x9698, 0x1f2c,
+  0x9699, 0x102f,
+  0x969a, 0x0ea8,
+  0x96cb, 0x1e75,
+  0x96cc, 0x0eda,
+  0x96d7, 0x1e76,
+  0x96d8, 0x0ee6,
+  0x96dd, 0x1e77,
+  0x96de, 0x0eec,
+  0x96e0, 0x1e78,
+  0x96e1, 0x0eef,
+  0x96f7, 0x1935,
+  0x96f8, 0x1e79,
+  0x96f9, 0x0f07,
+  0x96fa, 0x1e7a,
+  0x96fb, 0x0f09,
+  0x96fc, 0x1e7b,
+  0x9740, 0x0f0b,
+  0x9751, 0x1e7c,
+  0x9752, 0x0f1d,
+  0x976f, 0x1e7d,
+  0x9770, 0x0f3b,
+  0x9773, 0x1e7e,
+  0x9774, 0x0f3f,
+  0x9779, 0x1d34,
+  0x977a, 0x0f45,
+  0x9780, 0x0f4a,
+  0x9789, 0x1e7f,
+  0x978a, 0x0f54,
+  0x97c9, 0x1e80,
+  0x97ca, 0x0f94,
+  0x97f8, 0x1e81,
+  0x97fa, 0x0fc4,
+  0x9840, 0x1e83,
+  0x9841, 0x0fc8,
+  0x9850, 0x1e84,
+  0x9851, 0x0fd8,
+  0x9855, 0x1777,
+  0x9856, 0x0fdd,
+  0x9858, 0x1e85,
+  0x9859, 0x0fe0,
+  0x989f, 0x0ffa,
+  0x98d4, 0x0ea7,
+  0x98d5, 0x1030,
+  0x9940, 0x1058,
+  0x995c, 0x1e86,
+  0x995d, 0x1075,
+  0x9966, 0x1e87,
+  0x9967, 0x107f,
+  0x996a, 0x1e88,
+  0x996b, 0x1083,
+  0x996c, 0x1e89,
+  0x996d, 0x1085,
+  0x9980, 0x1097,
+  0x9a40, 0x1114,
+  0x9a4f, 0x1e8a,
+  0x9a50, 0x1124,
+  0x9a59, 0x1e8b,
+  0x9a5a, 0x112e,
+  0x9a7d, 0x1e8d,
+  0x9a7e, 0x1152,
+  0x9a80, 0x1153,
+  0x9a8b, 0x1e8e,
+  0x9a8c, 0x115f,
+  0x9ac2, 0x1e8f,
+  0x9ac3, 0x1196,
+  0x9ae2, 0x0bf7,
+  0x9ae3, 0x11b6,
+  0x9b40, 0x11d0,
+  0x9b5c, 0x1e90,
+  0x9b5d, 0x11ed,
+  0x9b80, 0x120f,
+  0x9b83, 0x1e91,
+  0x9b84, 0x1213,
+  0x9ba0, 0x1e92,
+  0x9ba1, 0x1230,
+  0x9c40, 0x128c,
+  0x9c80, 0x12cb,
+  0x9ca2, 0x1e94,
+  0x9ca3, 0x12ee,
+  0x9d40, 0x1348,
+  0x9d80, 0x1e95,
+  0x9d81, 0x1388,
+  0x9d8c, 0x1e96,
+  0x9d8d, 0x1394,
+  0x9d98, 0x05a7,
+  0x9d99, 0x13a0,
+  0x9db7, 0x1e97,
+  0x9db8, 0x13bf,
+  0x9dcb, 0x1e98,
+  0x9dcc, 0x13d3,
+  0x9e40, 0x1404,
+  0x9e64, 0x1e99,
+  0x9e65, 0x1429,
+  0x9e69, 0x1e9a,
+  0x9e6a, 0x142e,
+  0x9e77, 0x0da2,
+  0x9e78, 0x143c,
+  0x9e80, 0x1443,
+  0x9e8b, 0x1e9b,
+  0x9e8c, 0x144f,
+  0x9e8d, 0x0c68,
+  0x9e8e, 0x1451,
+  0x9e94, 0x1e9c,
+  0x9e95, 0x1458,
+  0x9f40, 0x14c0,
+  0x9f80, 0x14ff,
+  0x9fb7, 0x0c6d,
+  0x9fb8, 0x1537,
+  0x9fce, 0x1e9d,
+  0x9fcf, 0x154e,
+  0x9ff3, 0x05ff,
+  0x9ff4, 0x1573,
+  0xe040, 0x157c,
+  0xe080, 0x15bb,
+  0xe0a4, 0x1e9f,
+  0xe0a5, 0x15e0,
+  0xe0dd, 0x1ea0,
+  0xe0de, 0x1619,
+  0xe0f4, 0x1d35,
+  0xe0f5, 0x1630,
+  0xe140, 0x1638,
+  0xe14a, 0x1ea1,
+  0xe14b, 0x1643,
+  0xe14f, 0x1ea2,
+  0xe151, 0x1649,
+  0xe180, 0x1677,
+  0xe1a9, 0x1ea4,
+  0xe1aa, 0x16a1,
+  0xe1e6, 0x07ee,
+  0xe1e7, 0x16de,
+  0xe1e8, 0x0c51,
+  0xe1e9, 0x16e0,
+  0xe1ed, 0x1ea5,
+  0xe1ee, 0x16e5,
+  0xe240, 0x16f4,
+  0xe269, 0x1ea6,
+  0xe26a, 0x171e,
+  0xe273, 0x1ea7,
+  0xe274, 0x1728,
+  0xe27d, 0x05d4,
+  0xe27e, 0x1732,
+  0xe280, 0x1733,
+  0xe2b7, 0x1ea8,
+  0xe2b8, 0x176b,
+  0xe2c4, 0x0fdc,
+  0xe2c5, 0x1778,
+  0xe2e2, 0x1ea9,
+  0xe2e3, 0x1796,
+  0xe2ec, 0x1eaa,
+  0xe2ed, 0x17a0,
+  0xe340, 0x17b0,
+  0xe358, 0x1eab,
+  0xe359, 0x17c9,
+  0xe35a, 0x1eac,
+  0xe35b, 0x17cb,
+  0xe365, 0x1ead,
+  0xe366, 0x17d6,
+  0xe380, 0x17ef,
+  0xe3c4, 0x1eae,
+  0xe3c5, 0x1834,
+  0xe440, 0x186c,
+  0xe480, 0x18ab,
+  0xe484, 0x1eaf,
+  0xe485, 0x18b0,
+  0xe489, 0x1eb0,
+  0xe48a, 0x18b5,
+  0xe492, 0x1eb1,
+  0xe493, 0x18be,
+  0xe4b2, 0x1eb2,
+  0xe4b3, 0x18de,
+  0xe4b9, 0x1eb3,
+  0xe4ba, 0x18e5,
+  0xe4f2, 0x1eb4,
+  0xe4f3, 0x191e,
+  0xe540, 0x1928,
+  0xe541, 0x08f5,
+  0xe542, 0x192a,
+  0xe54d, 0x0f05,
+  0xe54e, 0x1936,
+  0xe579, 0x05a0,
+  0xe57a, 0x1962,
+  0xe580, 0x1967,
+  0xe5a2, 0x0d1e,
+  0xe5a3, 0x198a,
+  0xe5a5, 0x1eb6,
+  0xe5a6, 0x198d,
+  0xe5bb, 0x1eb7,
+  0xe5bc, 0x19a3,
+  0xe5ed, 0x1eb8,
+  0xe5ee, 0x19d5,
+  0xe640, 0x19e4,
+  0xe651, 0x1eb9,
+  0xe652, 0x19f6,
+  0xe67c, 0x060e,
+  0xe67d, 0x1a21,
+  0xe680, 0x1a23,
+  0xe686, 0x1eba,
+  0xe687, 0x1a2a,
+  0xe696, 0x1ebb,
+  0xe697, 0x1a3a,
+  0xe6cb, 0x0aaa,
+  0xe6cc, 0x1a6f,
+  0xe6e7, 0x1ebc,
+  0xe6e8, 0x1a8b,
+  0xe6f2, 0x1ebd,
+  0xe6f3, 0x1a96,
+  0xe740, 0x1aa0,
+  0xe76d, 0x1ebe,
+  0xe76e, 0x1ace,
+  0xe780, 0x1adf,
+  0xe78c, 0x1ebf,
+  0xe78d, 0x1aec,
+  0xe78e, 0x1ec0,
+  0xe78f, 0x1aee,
+  0xe7a7, 0x1ec1,
+  0xe7a8, 0x1b07,
+  0xe7bb, 0x1ec2,
+  0xe7bc, 0x1b1b,
+  0xe7d5, 0x1ec3,
+  0xe7d6, 0x1b35,
+  0xe840, 0x1b5c,
+  0xe880, 0x1b9b,
+  0xe8c3, 0x1ec6,
+  0xe8c4, 0x1bdf,
+  0xe8cf, 0x1ec7,
+  0xe8d0, 0x1beb,
+  0xe8d5, 0x1ec8,
+  0xe8d6, 0x1bf1,
+  0xe8f2, 0x0731,
+  0xe8f3, 0x1ec9,
+  0xe8f4, 0x1c0f,
+  0xe940, 0x1c18,
+  0xe980, 0x1c57,
+  0xe9ab, 0x1eca,
+  0xe9ac, 0x1c83,
+  0xe9ba, 0x1ecb,
+  0xe9bb, 0x1c92,
+  0xe9cb, 0x0477,
+  0xe9cc, 0x1ecc,
+  0xe9cd, 0x1ca4,
+  0xe9f2, 0x0529,
+  0xe9f3, 0x1cca,
+  0xea40, 0x1cd4,
+  0xea70, 0x1ecd,
+  0xea71, 0x1d05,
+  0xea80, 0x1d13,
+  0xea9d, 0x1ece,
+  0xea9e, 0x1d31,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan1278RKSJHEnc16 = {
+  0,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
+    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
+    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
+    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
+    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
+    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
+    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan1278RKSJHMap2, 626
+};
+
+static Gushort japan1278RKSJVMap2[1306] = {
+  0x0000, 0x0000,
+  0x8140, 0x0279,
+  0x8180, 0x02b8,
+  0x824f, 0x030c,
+  0x8260, 0x0316,
+  0x8281, 0x0330,
+  0x829f, 0x034a,
+  0x8340, 0x039d,
+  0x8380, 0x03dc,
+  0x839f, 0x03f3,
+  0x83bf, 0x040b,
+  0x8440, 0x0423,
+  0x8470, 0x0444,
+  0x8480, 0x0453,
+  0x889f, 0x0465,
+  0x88a0, 0x1dd1,
+  0x88a1, 0x0467,
+  0x88a7, 0x204a,
+  0x88a8, 0x046e,
+  0x88b0, 0x1f19,
+  0x88b1, 0x1ca2,
+  0x88b2, 0x0478,
+  0x88b9, 0x1dd2,
+  0x88ba, 0x0480,
+  0x88ec, 0x1dd3,
+  0x88ed, 0x04b3,
+  0x88f1, 0x1dd4,
+  0x88f2, 0x04b8,
+  0x88fa, 0x1dd5,
+  0x88fb, 0x04c1,
+  0x8940, 0x04c3,
+  0x8949, 0x1dd6,
+  0x894a, 0x04cd,
+  0x8954, 0x1dd7,
+  0x8955, 0x04d8,
+  0x8958, 0x1dd8,
+  0x8959, 0x04dc,
+  0x895c, 0x1dda,
+  0x895d, 0x04e0,
+  0x8961, 0x1ddb,
+  0x8962, 0x04e5,
+  0x8980, 0x0502,
+  0x898b, 0x1ddc,
+  0x898c, 0x050e,
+  0x89a6, 0x1ddd,
+  0x89a7, 0x1cc9,
+  0x89a8, 0x1dde,
+  0x89a9, 0x052b,
+  0x89de, 0x1ddf,
+  0x89df, 0x0561,
+  0x89f8, 0x1de0,
+  0x89f9, 0x057b,
+  0x89fb, 0x1de1,
+  0x89fc, 0x057e,
+  0x8a40, 0x057f,
+  0x8a41, 0x1de2,
+  0x8a42, 0x0581,
+  0x8a61, 0x1961,
+  0x8a62, 0x05a1,
+  0x8a68, 0x139f,
+  0x8a69, 0x05a8,
+  0x8a80, 0x05be,
+  0x8a85, 0x1de3,
+  0x8a86, 0x05c4,
+  0x8a8b, 0x1de4,
+  0x8a8c, 0x05ca,
+  0x8a93, 0x1de5,
+  0x8a94, 0x05d2,
+  0x8a96, 0x1731,
+  0x8a97, 0x05d5,
+  0x8a9a, 0x1de6,
+  0x8a9b, 0x05d9,
+  0x8ac0, 0x1de7,
+  0x8ac1, 0x1572,
+  0x8ac2, 0x0600,
+  0x8acb, 0x1de8,
+  0x8acc, 0x060a,
+  0x8ad0, 0x1a20,
+  0x8ad1, 0x060f,
+  0x8ae3, 0x1de9,
+  0x8ae4, 0x0622,
+  0x8b40, 0x063b,
+  0x8b4a, 0x1dea,
+  0x8b4b, 0x0646,
+  0x8b5f, 0x1deb,
+  0x8b60, 0x065b,
+  0x8b80, 0x067a,
+  0x8ba0, 0x1dec,
+  0x8ba1, 0x069b,
+  0x8ba8, 0x1ded,
+  0x8ba9, 0x06a3,
+  0x8bc4, 0x1d32,
+  0x8bc5, 0x06bf,
+  0x8bcd, 0x1dee,
+  0x8bce, 0x06c8,
+  0x8beb, 0x1def,
+  0x8bec, 0x06e6,
+  0x8bf2, 0x1df0,
+  0x8bf3, 0x06ed,
+  0x8bf9, 0x1df1,
+  0x8bfa, 0x06f4,
+  0x8bfb, 0x1df2,
+  0x8bfc, 0x06f6,
+  0x8c40, 0x06f7,
+  0x8c43, 0x1df3,
+  0x8c44, 0x06fb,
+  0x8c56, 0x1df4,
+  0x8c57, 0x070e,
+  0x8c64, 0x1df5,
+  0x8c65, 0x071c,
+  0x8c6d, 0x1df6,
+  0x8c6e, 0x0725,
+  0x8c71, 0x1df7,
+  0x8c72, 0x0729,
+  0x8c74, 0x1df8,
+  0x8c75, 0x072c,
+  0x8c7a, 0x1c0d,
+  0x8c7b, 0x0732,
+  0x8c80, 0x0736,
+  0x8c84, 0x1df9,
+  0x8c85, 0x073b,
+  0x8c91, 0x1dfa,
+  0x8c92, 0x0748,
+  0x8c99, 0x1dfb,
+  0x8c9a, 0x0750,
+  0x8c9e, 0x1dfc,
+  0x8c9f, 0x0755,
+  0x8cb2, 0x1dfd,
+  0x8cb3, 0x0769,
+  0x8cbf, 0x1dfe,
+  0x8cc0, 0x0776,
+  0x8d40, 0x07b3,
+  0x8d4a, 0x1dff,
+  0x8d4b, 0x07be,
+  0x8d56, 0x1e00,
+  0x8d57, 0x07ca,
+  0x8d61, 0x1e01,
+  0x8d62, 0x07d5,
+  0x8d7b, 0x16dd,
+  0x8d7c, 0x07ef,
+  0x8d80, 0x07f2,
+  0x8d8d, 0x1e02,
+  0x8d8e, 0x0800,
+  0x8d94, 0x1e03,
+  0x8d95, 0x0807,
+  0x8d99, 0x1e04,
+  0x8d9a, 0x080c,
+  0x8dd1, 0x1e05,
+  0x8dd2, 0x0844,
+  0x8de5, 0x1e06,
+  0x8de6, 0x0858,
+  0x8df2, 0x1e07,
+  0x8df3, 0x0865,
+  0x8e40, 0x086f,
+  0x8e46, 0x1e08,
+  0x8e47, 0x0876,
+  0x8e49, 0x1e09,
+  0x8e4a, 0x0879,
+  0x8e4b, 0x1e0a,
+  0x8e4c, 0x087b,
+  0x8e58, 0x1e0b,
+  0x8e59, 0x0888,
+  0x8e80, 0x08ae,
+  0x8ec6, 0x1e0d,
+  0x8ec7, 0x1929,
+  0x8ec8, 0x08f6,
+  0x8ed5, 0x1e0e,
+  0x8ed6, 0x0904,
+  0x8edb, 0x1e0f,
+  0x8edd, 0x090b,
+  0x8f40, 0x092b,
+  0x8f4a, 0x1e11,
+  0x8f4b, 0x0936,
+  0x8f55, 0x1e12,
+  0x8f56, 0x0941,
+  0x8f80, 0x096a,
+  0x8f8c, 0x1e13,
+  0x8f8e, 0x0978,
+  0x8f92, 0x1e15,
+  0x8f94, 0x097e,
+  0x8fa3, 0x1e17,
+  0x8fa4, 0x098e,
+  0x8fb1, 0x1e18,
+  0x8fb2, 0x099c,
+  0x8fbd, 0x1e19,
+  0x8fbe, 0x09a8,
+  0x8fd3, 0x1e1a,
+  0x8fd4, 0x09be,
+  0x8fdd, 0x1e1b,
+  0x8fde, 0x09c8,
+  0x8fe2, 0x1e1c,
+  0x8fe3, 0x09cd,
+  0x9040, 0x09e7,
+  0x9049, 0x1e1d,
+  0x904a, 0x09f1,
+  0x9078, 0x1e1e,
+  0x9079, 0x0a20,
+  0x9080, 0x1e1f,
+  0x9081, 0x0a27,
+  0x9089, 0x1e20,
+  0x908a, 0x0a30,
+  0x90a0, 0x1e21,
+  0x90a1, 0x0a47,
+  0x90c0, 0x1e22,
+  0x90c1, 0x0a67,
+  0x90e4, 0x1e23,
+  0x90e5, 0x0a8b,
+  0x90ef, 0x1e24,
+  0x90f1, 0x0a97,
+  0x90f7, 0x1e26,
+  0x90f9, 0x0a9f,
+  0x9140, 0x0aa3,
+  0x9146, 0x1e28,
+  0x9147, 0x1a6e,
+  0x9148, 0x0aab,
+  0x9158, 0x1e29,
+  0x9159, 0x0abc,
+  0x916b, 0x1e2a,
+  0x916c, 0x0acf,
+  0x916e, 0x1e2b,
+  0x916f, 0x0ad2,
+  0x917e, 0x1e2c,
+  0x9180, 0x0ae2,
+  0x9189, 0x1e2d,
+  0x918a, 0x0aec,
+  0x91bb, 0x1e2e,
+  0x91bc, 0x0b1e,
+  0x91cb, 0x1e2f,
+  0x91cc, 0x0b2e,
+  0x91da, 0x1e30,
+  0x91db, 0x0b3d,
+  0x91e1, 0x1e31,
+  0x91e2, 0x0b44,
+  0x91ed, 0x1e32,
+  0x91ee, 0x0b50,
+  0x91f3, 0x1e33,
+  0x91f5, 0x0b57,
+  0x91fb, 0x1e35,
+  0x91fc, 0x0b5e,
+  0x9240, 0x0b5f,
+  0x9246, 0x1e36,
+  0x9247, 0x0b66,
+  0x9248, 0x1e37,
+  0x924a, 0x0b69,
+  0x924c, 0x1e39,
+  0x924e, 0x0b6d,
+  0x925c, 0x1e3b,
+  0x925d, 0x0b7c,
+  0x9280, 0x0b9e,
+  0x9290, 0x1e3c,
+  0x9291, 0x0baf,
+  0x9295, 0x1e3d,
+  0x9296, 0x0bb4,
+  0x929c, 0x1e3e,
+  0x929d, 0x0bbb,
+  0x92bb, 0x1e3f,
+  0x92bc, 0x0bda,
+  0x92c6, 0x1e40,
+  0x92c7, 0x0be5,
+  0x92c8, 0x1e41,
+  0x92c9, 0x0be7,
+  0x92cb, 0x1e42,
+  0x92cc, 0x0bea,
+  0x92cd, 0x1e43,
+  0x92ce, 0x0bec,
+  0x92d2, 0x204b,
+  0x92d3, 0x0bf1,
+  0x92d9, 0x11b5,
+  0x92da, 0x0bf8,
+  0x9340, 0x0c1b,
+  0x9341, 0x1e44,
+  0x9342, 0x0c1d,
+  0x9346, 0x1e45,
+  0x9347, 0x0c22,
+  0x934d, 0x1e46,
+  0x934e, 0x0c29,
+  0x9355, 0x1e47,
+  0x9356, 0x0c31,
+  0x935e, 0x1e48,
+  0x935f, 0x0c3a,
+  0x9367, 0x1e49,
+  0x9368, 0x0c43,
+  0x936a, 0x1e4a,
+  0x936b, 0x0c46,
+  0x9370, 0x1e4b,
+  0x9372, 0x0c4d,
+  0x9376, 0x16df,
+  0x9377, 0x0c52,
+  0x9380, 0x0c5a,
+  0x9384, 0x1e4d,
+  0x9385, 0x0c5f,
+  0x938e, 0x1450,
+  0x938f, 0x0c69,
+  0x9393, 0x1536,
+  0x9394, 0x0c6e,
+  0x9398, 0x1e4e,
+  0x9399, 0x0c73,
+  0x93bc, 0x1e4f,
+  0x93bd, 0x0c97,
+  0x93c0, 0x1e50,
+  0x93c1, 0x0c9b,
+  0x93d2, 0x1e51,
+  0x93d4, 0x0cae,
+  0x93d9, 0x1e53,
+  0x93db, 0x0cb5,
+  0x93df, 0x1e55,
+  0x93e0, 0x0cba,
+  0x93e4, 0x1e56,
+  0x93e6, 0x0cc0,
+  0x93e8, 0x1e58,
+  0x93e9, 0x0cc3,
+  0x93f4, 0x1aed,
+  0x93f5, 0x0ccf,
+  0x9440, 0x0cd7,
+  0x9448, 0x1e59,
+  0x9449, 0x0ce0,
+  0x9458, 0x1e5a,
+  0x9459, 0x0cf0,
+  0x9476, 0x1e5b,
+  0x9477, 0x0d0e,
+  0x9480, 0x0d16,
+  0x9487, 0x1e5c,
+  0x9488, 0x1989,
+  0x9489, 0x1e5d,
+  0x948a, 0x0d20,
+  0x948d, 0x1e5e,
+  0x948e, 0x0d24,
+  0x94a2, 0x1e5f,
+  0x94a3, 0x0d39,
+  0x94ac, 0x1e60,
+  0x94ad, 0x0d43,
+  0x94ae, 0x1e61,
+  0x94af, 0x0d45,
+  0x94d2, 0x1e62,
+  0x94d3, 0x0d69,
+  0x94e0, 0x1e63,
+  0x94e1, 0x0d77,
+  0x94f3, 0x1e64,
+  0x94f4, 0x0d8a,
+  0x9540, 0x0d93,
+  0x9541, 0x1e65,
+  0x9543, 0x0d96,
+  0x954e, 0x1e67,
+  0x954f, 0x143b,
+  0x9550, 0x0da3,
+  0x9551, 0x1e68,
+  0x9552, 0x0da5,
+  0x9554, 0x1e69,
+  0x9555, 0x0da8,
+  0x955f, 0x1e6a,
+  0x9560, 0x0db3,
+  0x956d, 0x1e6b,
+  0x956e, 0x0dc1,
+  0x9570, 0x1e6c,
+  0x9571, 0x0dc4,
+  0x9580, 0x0dd2,
+  0x95c1, 0x1e6d,
+  0x95c2, 0x0e14,
+  0x95cb, 0x1e6e,
+  0x95cc, 0x0e1e,
+  0x95d8, 0x1e6f,
+  0x95d9, 0x0e2b,
+  0x95f7, 0x1e70,
+  0x95f8, 0x0e4a,
+  0x9640, 0x0e4f,
+  0x9641, 0x1e71,
+  0x9642, 0x0e51,
+  0x9648, 0x1e72,
+  0x9649, 0x0e58,
+  0x966a, 0x1e73,
+  0x966b, 0x0e7a,
+  0x9680, 0x0e8e,
+  0x968a, 0x1d33,
+  0x968b, 0x0e99,
+  0x9690, 0x1e74,
+  0x9691, 0x0e9f,
+  0x9698, 0x1f2c,
+  0x9699, 0x102f,
+  0x969a, 0x0ea8,
+  0x96cb, 0x1e75,
+  0x96cc, 0x0eda,
+  0x96d7, 0x1e76,
+  0x96d8, 0x0ee6,
+  0x96dd, 0x1e77,
+  0x96de, 0x0eec,
+  0x96e0, 0x1e78,
+  0x96e1, 0x0eef,
+  0x96f7, 0x1935,
+  0x96f8, 0x1e79,
+  0x96f9, 0x0f07,
+  0x96fa, 0x1e7a,
+  0x96fb, 0x0f09,
+  0x96fc, 0x1e7b,
+  0x9740, 0x0f0b,
+  0x9751, 0x1e7c,
+  0x9752, 0x0f1d,
+  0x976f, 0x1e7d,
+  0x9770, 0x0f3b,
+  0x9773, 0x1e7e,
+  0x9774, 0x0f3f,
+  0x9779, 0x1d34,
+  0x977a, 0x0f45,
+  0x9780, 0x0f4a,
+  0x9789, 0x1e7f,
+  0x978a, 0x0f54,
+  0x97c9, 0x1e80,
+  0x97ca, 0x0f94,
+  0x97f8, 0x1e81,
+  0x97fa, 0x0fc4,
+  0x9840, 0x1e83,
+  0x9841, 0x0fc8,
+  0x9850, 0x1e84,
+  0x9851, 0x0fd8,
+  0x9855, 0x1777,
+  0x9856, 0x0fdd,
+  0x9858, 0x1e85,
+  0x9859, 0x0fe0,
+  0x989f, 0x0ffa,
+  0x98d4, 0x0ea7,
+  0x98d5, 0x1030,
+  0x9940, 0x1058,
+  0x995c, 0x1e86,
+  0x995d, 0x1075,
+  0x9966, 0x1e87,
+  0x9967, 0x107f,
+  0x996a, 0x1e88,
+  0x996b, 0x1083,
+  0x996c, 0x1e89,
+  0x996d, 0x1085,
+  0x9980, 0x1097,
+  0x9a40, 0x1114,
+  0x9a4f, 0x1e8a,
+  0x9a50, 0x1124,
+  0x9a59, 0x1e8b,
+  0x9a5a, 0x112e,
+  0x9a7d, 0x1e8d,
+  0x9a7e, 0x1152,
+  0x9a80, 0x1153,
+  0x9a8b, 0x1e8e,
+  0x9a8c, 0x115f,
+  0x9ac2, 0x1e8f,
+  0x9ac3, 0x1196,
+  0x9ae2, 0x0bf7,
+  0x9ae3, 0x11b6,
+  0x9b40, 0x11d0,
+  0x9b5c, 0x1e90,
+  0x9b5d, 0x11ed,
+  0x9b80, 0x120f,
+  0x9b83, 0x1e91,
+  0x9b84, 0x1213,
+  0x9ba0, 0x1e92,
+  0x9ba1, 0x1230,
+  0x9c40, 0x128c,
+  0x9c80, 0x12cb,
+  0x9ca2, 0x1e94,
+  0x9ca3, 0x12ee,
+  0x9d40, 0x1348,
+  0x9d80, 0x1e95,
+  0x9d81, 0x1388,
+  0x9d8c, 0x1e96,
+  0x9d8d, 0x1394,
+  0x9d98, 0x05a7,
+  0x9d99, 0x13a0,
+  0x9db7, 0x1e97,
+  0x9db8, 0x13bf,
+  0x9dcb, 0x1e98,
+  0x9dcc, 0x13d3,
+  0x9e40, 0x1404,
+  0x9e64, 0x1e99,
+  0x9e65, 0x1429,
+  0x9e69, 0x1e9a,
+  0x9e6a, 0x142e,
+  0x9e77, 0x0da2,
+  0x9e78, 0x143c,
+  0x9e80, 0x1443,
+  0x9e8b, 0x1e9b,
+  0x9e8c, 0x144f,
+  0x9e8d, 0x0c68,
+  0x9e8e, 0x1451,
+  0x9e94, 0x1e9c,
+  0x9e95, 0x1458,
+  0x9f40, 0x14c0,
+  0x9f80, 0x14ff,
+  0x9fb7, 0x0c6d,
+  0x9fb8, 0x1537,
+  0x9fce, 0x1e9d,
+  0x9fcf, 0x154e,
+  0x9ff3, 0x05ff,
+  0x9ff4, 0x1573,
+  0xe040, 0x157c,
+  0xe080, 0x15bb,
+  0xe0a4, 0x1e9f,
+  0xe0a5, 0x15e0,
+  0xe0dd, 0x1ea0,
+  0xe0de, 0x1619,
+  0xe0f4, 0x1d35,
+  0xe0f5, 0x1630,
+  0xe140, 0x1638,
+  0xe14a, 0x1ea1,
+  0xe14b, 0x1643,
+  0xe14f, 0x1ea2,
+  0xe151, 0x1649,
+  0xe180, 0x1677,
+  0xe1a9, 0x1ea4,
+  0xe1aa, 0x16a1,
+  0xe1e6, 0x07ee,
+  0xe1e7, 0x16de,
+  0xe1e8, 0x0c51,
+  0xe1e9, 0x16e0,
+  0xe1ed, 0x1ea5,
+  0xe1ee, 0x16e5,
+  0xe240, 0x16f4,
+  0xe269, 0x1ea6,
+  0xe26a, 0x171e,
+  0xe273, 0x1ea7,
+  0xe274, 0x1728,
+  0xe27d, 0x05d4,
+  0xe27e, 0x1732,
+  0xe280, 0x1733,
+  0xe2b7, 0x1ea8,
+  0xe2b8, 0x176b,
+  0xe2c4, 0x0fdc,
+  0xe2c5, 0x1778,
+  0xe2e2, 0x1ea9,
+  0xe2e3, 0x1796,
+  0xe2ec, 0x1eaa,
+  0xe2ed, 0x17a0,
+  0xe340, 0x17b0,
+  0xe358, 0x1eab,
+  0xe359, 0x17c9,
+  0xe35a, 0x1eac,
+  0xe35b, 0x17cb,
+  0xe365, 0x1ead,
+  0xe366, 0x17d6,
+  0xe380, 0x17ef,
+  0xe3c4, 0x1eae,
+  0xe3c5, 0x1834,
+  0xe440, 0x186c,
+  0xe480, 0x18ab,
+  0xe484, 0x1eaf,
+  0xe485, 0x18b0,
+  0xe489, 0x1eb0,
+  0xe48a, 0x18b5,
+  0xe492, 0x1eb1,
+  0xe493, 0x18be,
+  0xe4b2, 0x1eb2,
+  0xe4b3, 0x18de,
+  0xe4b9, 0x1eb3,
+  0xe4ba, 0x18e5,
+  0xe4f2, 0x1eb4,
+  0xe4f3, 0x191e,
+  0xe540, 0x1928,
+  0xe541, 0x08f5,
+  0xe542, 0x192a,
+  0xe54d, 0x0f05,
+  0xe54e, 0x1936,
+  0xe579, 0x05a0,
+  0xe57a, 0x1962,
+  0xe580, 0x1967,
+  0xe5a2, 0x0d1e,
+  0xe5a3, 0x198a,
+  0xe5a5, 0x1eb6,
+  0xe5a6, 0x198d,
+  0xe5bb, 0x1eb7,
+  0xe5bc, 0x19a3,
+  0xe5ed, 0x1eb8,
+  0xe5ee, 0x19d5,
+  0xe640, 0x19e4,
+  0xe651, 0x1eb9,
+  0xe652, 0x19f6,
+  0xe67c, 0x060e,
+  0xe67d, 0x1a21,
+  0xe680, 0x1a23,
+  0xe686, 0x1eba,
+  0xe687, 0x1a2a,
+  0xe696, 0x1ebb,
+  0xe697, 0x1a3a,
+  0xe6cb, 0x0aaa,
+  0xe6cc, 0x1a6f,
+  0xe6e7, 0x1ebc,
+  0xe6e8, 0x1a8b,
+  0xe6f2, 0x1ebd,
+  0xe6f3, 0x1a96,
+  0xe740, 0x1aa0,
+  0xe76d, 0x1ebe,
+  0xe76e, 0x1ace,
+  0xe780, 0x1adf,
+  0xe78c, 0x1ebf,
+  0xe78d, 0x1aec,
+  0xe78e, 0x1ec0,
+  0xe78f, 0x1aee,
+  0xe7a7, 0x1ec1,
+  0xe7a8, 0x1b07,
+  0xe7bb, 0x1ec2,
+  0xe7bc, 0x1b1b,
+  0xe7d5, 0x1ec3,
+  0xe7d6, 0x1b35,
+  0xe840, 0x1b5c,
+  0xe880, 0x1b9b,
+  0xe8c3, 0x1ec6,
+  0xe8c4, 0x1bdf,
+  0xe8cf, 0x1ec7,
+  0xe8d0, 0x1beb,
+  0xe8d5, 0x1ec8,
+  0xe8d6, 0x1bf1,
+  0xe8f2, 0x0731,
+  0xe8f3, 0x1ec9,
+  0xe8f4, 0x1c0f,
+  0xe940, 0x1c18,
+  0xe980, 0x1c57,
+  0xe9ab, 0x1eca,
+  0xe9ac, 0x1c83,
+  0xe9ba, 0x1ecb,
+  0xe9bb, 0x1c92,
+  0xe9cb, 0x0477,
+  0xe9cc, 0x1ecc,
+  0xe9cd, 0x1ca4,
+  0xe9f2, 0x0529,
+  0xe9f3, 0x1cca,
+  0xea40, 0x1cd4,
+  0xea70, 0x1ecd,
+  0xea71, 0x1d05,
+  0xea80, 0x1d13,
+  0xea9d, 0x1ece,
+  0xea9e, 0x1d31,
+  0x8141, 0x1ecf,
+  0x8150, 0x1ed1,
+  0x815b, 0x1ed3,
+  0x8160, 0x1ed6,
+  0x8169, 0x1edb,
+  0x8181, 0x1eed,
+  0x829f, 0x1eee,
+  0x82a1, 0x1eef,
+  0x82a3, 0x1ef0,
+  0x82a5, 0x1ef1,
+  0x82a7, 0x1ef2,
+  0x82c1, 0x1ef3,
+  0x82e1, 0x1ef4,
+  0x82e3, 0x1ef5,
+  0x82e5, 0x1ef6,
+  0x82ec, 0x1ef7,
+  0x8340, 0x1ef8,
+  0x8342, 0x1ef9,
+  0x8344, 0x1efa,
+  0x8346, 0x1efb,
+  0x8348, 0x1efc,
+  0x8362, 0x1efd,
+  0x8383, 0x1efe,
+  0x8385, 0x1eff,
+  0x8387, 0x1f00,
+  0x838e, 0x1f01,
+  0x8395, 0x1f02,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan1278RKSJVEnc16 = {
+  1,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
+    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
+    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
+    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
+    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
+    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
+    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan1278RKSJVMap2, 653
+};
+
+static Gushort japan1278VMap2[1304] = {
+  0x0000, 0x0000,
+  0x2121, 0x0279,
+  0x2221, 0x02d7,
+  0x2330, 0x030c,
+  0x2341, 0x0316,
+  0x2361, 0x0330,
+  0x2421, 0x034a,
+  0x2521, 0x039d,
+  0x2621, 0x03f3,
+  0x2641, 0x040b,
+  0x2721, 0x0423,
+  0x2751, 0x0444,
+  0x3021, 0x0465,
+  0x3022, 0x1dd1,
+  0x3023, 0x0467,
+  0x3029, 0x204a,
+  0x302a, 0x046e,
+  0x3032, 0x1f19,
+  0x3033, 0x1ca2,
+  0x3034, 0x0478,
+  0x303b, 0x1dd2,
+  0x303c, 0x0480,
+  0x306e, 0x1dd3,
+  0x306f, 0x04b3,
+  0x3073, 0x1dd4,
+  0x3074, 0x04b8,
+  0x307c, 0x1dd5,
+  0x307d, 0x04c1,
+  0x3121, 0x04c3,
+  0x312a, 0x1dd6,
+  0x312b, 0x04cd,
+  0x3135, 0x1dd7,
+  0x3136, 0x04d8,
+  0x3139, 0x1dd8,
+  0x313a, 0x04dc,
+  0x313d, 0x1dda,
+  0x313e, 0x04e0,
+  0x3142, 0x1ddb,
+  0x3143, 0x04e5,
+  0x316b, 0x1ddc,
+  0x316c, 0x050e,
+  0x3221, 0x0521,
+  0x3228, 0x1ddd,
+  0x3229, 0x1cc9,
+  0x322a, 0x1dde,
+  0x322b, 0x052b,
+  0x3260, 0x1ddf,
+  0x3261, 0x0561,
+  0x327a, 0x1de0,
+  0x327b, 0x057b,
+  0x327d, 0x1de1,
+  0x327e, 0x057e,
+  0x3321, 0x057f,
+  0x3322, 0x1de2,
+  0x3323, 0x0581,
+  0x3342, 0x1961,
+  0x3343, 0x05a1,
+  0x3349, 0x139f,
+  0x334a, 0x05a8,
+  0x3365, 0x1de3,
+  0x3366, 0x05c4,
+  0x336b, 0x1de4,
+  0x336c, 0x05ca,
+  0x3373, 0x1de5,
+  0x3374, 0x05d2,
+  0x3376, 0x1731,
+  0x3377, 0x05d5,
+  0x337a, 0x1de6,
+  0x337b, 0x05d9,
+  0x3421, 0x05dd,
+  0x3442, 0x1de7,
+  0x3443, 0x1572,
+  0x3444, 0x0600,
+  0x344d, 0x1de8,
+  0x344e, 0x060a,
+  0x3452, 0x1a20,
+  0x3453, 0x060f,
+  0x3465, 0x1de9,
+  0x3466, 0x0622,
+  0x3521, 0x063b,
+  0x352b, 0x1dea,
+  0x352c, 0x0646,
+  0x3540, 0x1deb,
+  0x3541, 0x065b,
+  0x3621, 0x0699,
+  0x3622, 0x1dec,
+  0x3623, 0x069b,
+  0x362a, 0x1ded,
+  0x362b, 0x06a3,
+  0x3646, 0x1d32,
+  0x3647, 0x06bf,
+  0x364f, 0x1dee,
+  0x3650, 0x06c8,
+  0x366d, 0x1def,
+  0x366e, 0x06e6,
+  0x3674, 0x1df0,
+  0x3675, 0x06ed,
+  0x367b, 0x1df1,
+  0x367c, 0x06f4,
+  0x367d, 0x1df2,
+  0x367e, 0x06f6,
+  0x3721, 0x06f7,
+  0x3724, 0x1df3,
+  0x3725, 0x06fb,
+  0x3737, 0x1df4,
+  0x3738, 0x070e,
+  0x3745, 0x1df5,
+  0x3746, 0x071c,
+  0x374e, 0x1df6,
+  0x374f, 0x0725,
+  0x3752, 0x1df7,
+  0x3753, 0x0729,
+  0x3755, 0x1df8,
+  0x3756, 0x072c,
+  0x375b, 0x1c0d,
+  0x375c, 0x0732,
+  0x3764, 0x1df9,
+  0x3765, 0x073b,
+  0x3771, 0x1dfa,
+  0x3772, 0x0748,
+  0x3779, 0x1dfb,
+  0x377a, 0x0750,
+  0x377e, 0x1dfc,
+  0x3821, 0x0755,
+  0x3834, 0x1dfd,
+  0x3835, 0x0769,
+  0x3841, 0x1dfe,
+  0x3842, 0x0776,
+  0x3921, 0x07b3,
+  0x392b, 0x1dff,
+  0x392c, 0x07be,
+  0x3937, 0x1e00,
+  0x3938, 0x07ca,
+  0x3942, 0x1e01,
+  0x3943, 0x07d5,
+  0x395c, 0x16dd,
+  0x395d, 0x07ef,
+  0x396d, 0x1e02,
+  0x396e, 0x0800,
+  0x3974, 0x1e03,
+  0x3975, 0x0807,
+  0x3979, 0x1e04,
+  0x397a, 0x080c,
+  0x3a21, 0x0811,
+  0x3a53, 0x1e05,
+  0x3a54, 0x0844,
+  0x3a67, 0x1e06,
+  0x3a68, 0x0858,
+  0x3a74, 0x1e07,
+  0x3a75, 0x0865,
+  0x3b21, 0x086f,
+  0x3b27, 0x1e08,
+  0x3b28, 0x0876,
+  0x3b2a, 0x1e09,
+  0x3b2b, 0x0879,
+  0x3b2c, 0x1e0a,
+  0x3b2d, 0x087b,
+  0x3b39, 0x1e0b,
+  0x3b3a, 0x0888,
+  0x3c21, 0x08cd,
+  0x3c48, 0x1e0d,
+  0x3c49, 0x1929,
+  0x3c4a, 0x08f6,
+  0x3c57, 0x1e0e,
+  0x3c58, 0x0904,
+  0x3c5d, 0x1e0f,
+  0x3c5f, 0x090b,
+  0x3d21, 0x092b,
+  0x3d2b, 0x1e11,
+  0x3d2c, 0x0936,
+  0x3d36, 0x1e12,
+  0x3d37, 0x0941,
+  0x3d6c, 0x1e13,
+  0x3d6e, 0x0978,
+  0x3d72, 0x1e15,
+  0x3d74, 0x097e,
+  0x3e21, 0x0989,
+  0x3e25, 0x1e17,
+  0x3e26, 0x098e,
+  0x3e33, 0x1e18,
+  0x3e34, 0x099c,
+  0x3e3f, 0x1e19,
+  0x3e40, 0x09a8,
+  0x3e55, 0x1e1a,
+  0x3e56, 0x09be,
+  0x3e5f, 0x1e1b,
+  0x3e60, 0x09c8,
+  0x3e64, 0x1e1c,
+  0x3e65, 0x09cd,
+  0x3f21, 0x09e7,
+  0x3f2a, 0x1e1d,
+  0x3f2b, 0x09f1,
+  0x3f59, 0x1e1e,
+  0x3f5a, 0x0a20,
+  0x3f60, 0x1e1f,
+  0x3f61, 0x0a27,
+  0x3f69, 0x1e20,
+  0x3f6a, 0x0a30,
+  0x4021, 0x0a45,
+  0x4022, 0x1e21,
+  0x4023, 0x0a47,
+  0x4042, 0x1e22,
+  0x4043, 0x0a67,
+  0x4066, 0x1e23,
+  0x4067, 0x0a8b,
+  0x4071, 0x1e24,
+  0x4073, 0x0a97,
+  0x4079, 0x1e26,
+  0x407b, 0x0a9f,
+  0x4121, 0x0aa3,
+  0x4127, 0x1e28,
+  0x4128, 0x1a6e,
+  0x4129, 0x0aab,
+  0x4139, 0x1e29,
+  0x413a, 0x0abc,
+  0x414c, 0x1e2a,
+  0x414d, 0x0acf,
+  0x414f, 0x1e2b,
+  0x4150, 0x0ad2,
+  0x415f, 0x1e2c,
+  0x4160, 0x0ae2,
+  0x4169, 0x1e2d,
+  0x416a, 0x0aec,
+  0x4221, 0x0b01,
+  0x423d, 0x1e2e,
+  0x423e, 0x0b1e,
+  0x424d, 0x1e2f,
+  0x424e, 0x0b2e,
+  0x425c, 0x1e30,
+  0x425d, 0x0b3d,
+  0x4263, 0x1e31,
+  0x4264, 0x0b44,
+  0x426f, 0x1e32,
+  0x4270, 0x0b50,
+  0x4275, 0x1e33,
+  0x4277, 0x0b57,
+  0x427d, 0x1e35,
+  0x427e, 0x0b5e,
+  0x4321, 0x0b5f,
+  0x4327, 0x1e36,
+  0x4328, 0x0b66,
+  0x4329, 0x1e37,
+  0x432b, 0x0b69,
+  0x432d, 0x1e39,
+  0x432f, 0x0b6d,
+  0x433d, 0x1e3b,
+  0x433e, 0x0b7c,
+  0x4370, 0x1e3c,
+  0x4371, 0x0baf,
+  0x4375, 0x1e3d,
+  0x4376, 0x0bb4,
+  0x437c, 0x1e3e,
+  0x437d, 0x0bbb,
+  0x4421, 0x0bbd,
+  0x443d, 0x1e3f,
+  0x443e, 0x0bda,
   0x4448, 0x1e40,
   0x4449, 0x0be5,
   0x444a, 0x1e41,
@@ -1317,65 +4099,1986 @@ static Gushort japan1278HMap2[1250] = {
   0x7352, 0x1d05,
   0x737d, 0x1ece,
   0x737e, 0x1d31,
+  0x2122, 0x1ecf,
+  0x2131, 0x1ed1,
+  0x213c, 0x1ed3,
+  0x2141, 0x1ed6,
+  0x214a, 0x1edb,
+  0x2161, 0x1eed,
+  0x2421, 0x1eee,
+  0x2423, 0x1eef,
+  0x2425, 0x1ef0,
+  0x2427, 0x1ef1,
+  0x2429, 0x1ef2,
+  0x2443, 0x1ef3,
+  0x2463, 0x1ef4,
+  0x2465, 0x1ef5,
+  0x2467, 0x1ef6,
+  0x246e, 0x1ef7,
+  0x2521, 0x1ef8,
+  0x2523, 0x1ef9,
+  0x2525, 0x1efa,
+  0x2527, 0x1efb,
+  0x2529, 0x1efc,
+  0x2543, 0x1efd,
+  0x2563, 0x1efe,
+  0x2565, 0x1eff,
+  0x2567, 0x1f00,
+  0x256e, 0x1f01,
+  0x2575, 0x1f02,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan1278VEnc16 = {
+  1,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan1278VMap2, 652
+};
+
+static Gushort japan1278msRKSJHMap2[1424] = {
+  0x0000, 0x0000,
+  0x8140, 0x0279,
+  0x8180, 0x02b8,
+  0x81b8, 0x02e5,
+  0x81c8, 0x02ed,
+  0x81da, 0x02f4,
+  0x81f0, 0x0303,
+  0x81fc, 0x030b,
+  0x824f, 0x030c,
+  0x8260, 0x0316,
+  0x8281, 0x0330,
+  0x829f, 0x034a,
+  0x8340, 0x039d,
+  0x8380, 0x03dc,
+  0x839f, 0x03f3,
+  0x83bf, 0x040b,
+  0x8440, 0x0423,
+  0x8470, 0x0444,
+  0x8480, 0x0453,
+  0x849f, 0x1d37,
+  0x84a0, 0x1d39,
+  0x84a1, 0x1d43,
+  0x84a2, 0x1d47,
+  0x84a3, 0x1d4f,
+  0x84a4, 0x1d4b,
+  0x84a5, 0x1d53,
+  0x84a6, 0x1d63,
+  0x84a7, 0x1d5b,
+  0x84a8, 0x1d6b,
+  0x84a9, 0x1d73,
+  0x84aa, 0x1d38,
+  0x84ab, 0x1d3a,
+  0x84ac, 0x1d46,
+  0x84ad, 0x1d4a,
+  0x84ae, 0x1d52,
+  0x84af, 0x1d4e,
+  0x84b0, 0x1d5a,
+  0x84b1, 0x1d6a,
+  0x84b2, 0x1d62,
+  0x84b3, 0x1d72,
+  0x84b4, 0x1d82,
+  0x84b5, 0x1d57,
+  0x84b6, 0x1d66,
+  0x84b7, 0x1d5f,
+  0x84b8, 0x1d6e,
+  0x84b9, 0x1d76,
+  0x84ba, 0x1d54,
+  0x84bb, 0x1d67,
+  0x84bc, 0x1d5c,
+  0x84bd, 0x1d6f,
+  0x84be, 0x1d79,
+  0x8740, 0x1d83,
+  0x875f, 0x1da1,
+  0x8761, 0x1f66,
+  0x8762, 0x1da4,
+  0x8763, 0x1f68,
+  0x8764, 0x1da6,
+  0x8765, 0x1f6a,
+  0x8766, 0x1da8,
+  0x8768, 0x1f6c,
+  0x8769, 0x1dab,
+  0x876b, 0x1f6b,
+  0x876c, 0x1dae,
+  0x876e, 0x1f6f,
+  0x876f, 0x1db1,
+  0x877e, 0x2083,
+  0x8780, 0x1db8,
+  0x8784, 0x1f77,
+  0x8785, 0x1dbd,
+  0x8790, 0x02fa,
+  0x8791, 0x02f9,
+  0x8792, 0x0301,
+  0x8793, 0x1dc8,
+  0x879a, 0x0300,
+  0x879b, 0x1dcf,
+  0x889f, 0x0465,
+  0x88a0, 0x1dd1,
+  0x88a1, 0x0467,
+  0x88a7, 0x204a,
+  0x88a8, 0x046e,
+  0x88b0, 0x1f19,
+  0x88b1, 0x1ca2,
+  0x88b2, 0x0478,
+  0x88b9, 0x1dd2,
+  0x88ba, 0x0480,
+  0x88ec, 0x1dd3,
+  0x88ed, 0x04b3,
+  0x88f1, 0x1dd4,
+  0x88f2, 0x04b8,
+  0x88fa, 0x1dd5,
+  0x88fb, 0x04c1,
+  0x8940, 0x04c3,
+  0x8949, 0x1dd6,
+  0x894a, 0x04cd,
+  0x8954, 0x1dd7,
+  0x8955, 0x04d8,
+  0x8958, 0x1dd8,
+  0x8959, 0x04dc,
+  0x895c, 0x1dda,
+  0x895d, 0x04e0,
+  0x8961, 0x1ddb,
+  0x8962, 0x04e5,
+  0x8980, 0x0502,
+  0x898b, 0x1ddc,
+  0x898c, 0x050e,
+  0x89a6, 0x1ddd,
+  0x89a7, 0x1cc9,
+  0x89a8, 0x1dde,
+  0x89a9, 0x052b,
+  0x89de, 0x1ddf,
+  0x89df, 0x0561,
+  0x89f8, 0x1de0,
+  0x89f9, 0x057b,
+  0x89fb, 0x1de1,
+  0x89fc, 0x057e,
+  0x8a40, 0x057f,
+  0x8a41, 0x1de2,
+  0x8a42, 0x0581,
+  0x8a61, 0x1961,
+  0x8a62, 0x05a1,
+  0x8a68, 0x139f,
+  0x8a69, 0x05a8,
+  0x8a80, 0x05be,
+  0x8a85, 0x1de3,
+  0x8a86, 0x05c4,
+  0x8a8b, 0x1de4,
+  0x8a8c, 0x05ca,
+  0x8a93, 0x1de5,
+  0x8a94, 0x05d2,
+  0x8a96, 0x1731,
+  0x8a97, 0x05d5,
+  0x8a9a, 0x1de6,
+  0x8a9b, 0x05d9,
+  0x8ac0, 0x1de7,
+  0x8ac1, 0x1572,
+  0x8ac2, 0x0600,
+  0x8acb, 0x1de8,
+  0x8acc, 0x060a,
+  0x8ad0, 0x1a20,
+  0x8ad1, 0x060f,
+  0x8ae3, 0x1de9,
+  0x8ae4, 0x0622,
+  0x8b40, 0x063b,
+  0x8b4a, 0x1dea,
+  0x8b4b, 0x0646,
+  0x8b5f, 0x1deb,
+  0x8b60, 0x065b,
+  0x8b80, 0x067a,
+  0x8ba0, 0x1dec,
+  0x8ba1, 0x069b,
+  0x8ba8, 0x1ded,
+  0x8ba9, 0x06a3,
+  0x8bc4, 0x1d32,
+  0x8bc5, 0x06bf,
+  0x8bcd, 0x1dee,
+  0x8bce, 0x06c8,
+  0x8beb, 0x1def,
+  0x8bec, 0x06e6,
+  0x8bf2, 0x1df0,
+  0x8bf3, 0x06ed,
+  0x8bf9, 0x1df1,
+  0x8bfa, 0x06f4,
+  0x8bfb, 0x1df2,
+  0x8bfc, 0x06f6,
+  0x8c40, 0x06f7,
+  0x8c43, 0x1df3,
+  0x8c44, 0x06fb,
+  0x8c56, 0x1df4,
+  0x8c57, 0x070e,
+  0x8c64, 0x1df5,
+  0x8c65, 0x071c,
+  0x8c6d, 0x1df6,
+  0x8c6e, 0x0725,
+  0x8c71, 0x1df7,
+  0x8c72, 0x0729,
+  0x8c74, 0x1df8,
+  0x8c75, 0x072c,
+  0x8c7a, 0x1c0d,
+  0x8c7b, 0x0732,
+  0x8c80, 0x0736,
+  0x8c84, 0x1df9,
+  0x8c85, 0x073b,
+  0x8c91, 0x1dfa,
+  0x8c92, 0x0748,
+  0x8c99, 0x1dfb,
+  0x8c9a, 0x0750,
+  0x8c9e, 0x1dfc,
+  0x8c9f, 0x0755,
+  0x8cb2, 0x1dfd,
+  0x8cb3, 0x0769,
+  0x8cbf, 0x1dfe,
+  0x8cc0, 0x0776,
+  0x8d40, 0x07b3,
+  0x8d4a, 0x1dff,
+  0x8d4b, 0x07be,
+  0x8d56, 0x1e00,
+  0x8d57, 0x07ca,
+  0x8d61, 0x1e01,
+  0x8d62, 0x07d5,
+  0x8d7b, 0x16dd,
+  0x8d7c, 0x07ef,
+  0x8d80, 0x07f2,
+  0x8d8d, 0x1e02,
+  0x8d8e, 0x0800,
+  0x8d94, 0x1e03,
+  0x8d95, 0x0807,
+  0x8d99, 0x1e04,
+  0x8d9a, 0x080c,
+  0x8dd1, 0x1e05,
+  0x8dd2, 0x0844,
+  0x8de5, 0x1e06,
+  0x8de6, 0x0858,
+  0x8df2, 0x1e07,
+  0x8df3, 0x0865,
+  0x8e40, 0x086f,
+  0x8e46, 0x1e08,
+  0x8e47, 0x0876,
+  0x8e49, 0x1e09,
+  0x8e4a, 0x0879,
+  0x8e4b, 0x1e0a,
+  0x8e4c, 0x087b,
+  0x8e58, 0x1e0b,
+  0x8e59, 0x0888,
+  0x8e80, 0x08ae,
+  0x8ec6, 0x1e0d,
+  0x8ec7, 0x1929,
+  0x8ec8, 0x08f6,
+  0x8ed5, 0x1e0e,
+  0x8ed6, 0x0904,
+  0x8edb, 0x1e0f,
+  0x8edd, 0x090b,
+  0x8f40, 0x092b,
+  0x8f4a, 0x1e11,
+  0x8f4b, 0x0936,
+  0x8f55, 0x1e12,
+  0x8f56, 0x0941,
+  0x8f80, 0x096a,
+  0x8f8c, 0x1e13,
+  0x8f8e, 0x0978,
+  0x8f92, 0x1e15,
+  0x8f94, 0x097e,
+  0x8fa3, 0x1e17,
+  0x8fa4, 0x098e,
+  0x8fb1, 0x1e18,
+  0x8fb2, 0x099c,
+  0x8fbd, 0x1e19,
+  0x8fbe, 0x09a8,
+  0x8fd3, 0x1e1a,
+  0x8fd4, 0x09be,
+  0x8fdd, 0x1e1b,
+  0x8fde, 0x09c8,
+  0x8fe2, 0x1e1c,
+  0x8fe3, 0x09cd,
+  0x9040, 0x09e7,
+  0x9049, 0x1e1d,
+  0x904a, 0x09f1,
+  0x9078, 0x1e1e,
+  0x9079, 0x0a20,
+  0x9080, 0x1e1f,
+  0x9081, 0x0a27,
+  0x9089, 0x1e20,
+  0x908a, 0x0a30,
+  0x90a0, 0x1e21,
+  0x90a1, 0x0a47,
+  0x90c0, 0x1e22,
+  0x90c1, 0x0a67,
+  0x90e4, 0x1e23,
+  0x90e5, 0x0a8b,
+  0x90ef, 0x1e24,
+  0x90f1, 0x0a97,
+  0x90f7, 0x1e26,
+  0x90f9, 0x0a9f,
+  0x9140, 0x0aa3,
+  0x9146, 0x1e28,
+  0x9147, 0x1a6e,
+  0x9148, 0x0aab,
+  0x9158, 0x1e29,
+  0x9159, 0x0abc,
+  0x916b, 0x1e2a,
+  0x916c, 0x0acf,
+  0x916e, 0x1e2b,
+  0x916f, 0x0ad2,
+  0x917e, 0x1e2c,
+  0x9180, 0x0ae2,
+  0x9189, 0x1e2d,
+  0x918a, 0x0aec,
+  0x91bb, 0x1e2e,
+  0x91bc, 0x0b1e,
+  0x91cb, 0x1e2f,
+  0x91cc, 0x0b2e,
+  0x91da, 0x1e30,
+  0x91db, 0x0b3d,
+  0x91e1, 0x1e31,
+  0x91e2, 0x0b44,
+  0x91ed, 0x1e32,
+  0x91ee, 0x0b50,
+  0x91f3, 0x1e33,
+  0x91f5, 0x0b57,
+  0x91fb, 0x1e35,
+  0x91fc, 0x0b5e,
+  0x9240, 0x0b5f,
+  0x9246, 0x1e36,
+  0x9247, 0x0b66,
+  0x9248, 0x1e37,
+  0x924a, 0x0b69,
+  0x924c, 0x1e39,
+  0x924e, 0x0b6d,
+  0x925c, 0x1e3b,
+  0x925d, 0x0b7c,
+  0x9280, 0x0b9e,
+  0x9290, 0x1e3c,
+  0x9291, 0x0baf,
+  0x9295, 0x1e3d,
+  0x9296, 0x0bb4,
+  0x929c, 0x1e3e,
+  0x929d, 0x0bbb,
+  0x92bb, 0x1e3f,
+  0x92bc, 0x0bda,
+  0x92c6, 0x1e40,
+  0x92c7, 0x0be5,
+  0x92c8, 0x1e41,
+  0x92c9, 0x0be7,
+  0x92cb, 0x1e42,
+  0x92cc, 0x0bea,
+  0x92cd, 0x1e43,
+  0x92ce, 0x0bec,
+  0x92d2, 0x204b,
+  0x92d3, 0x0bf1,
+  0x92d9, 0x11b5,
+  0x92da, 0x0bf8,
+  0x9340, 0x0c1b,
+  0x9341, 0x1e44,
+  0x9342, 0x0c1d,
+  0x9346, 0x1e45,
+  0x9347, 0x0c22,
+  0x934d, 0x1e46,
+  0x934e, 0x0c29,
+  0x9355, 0x1e47,
+  0x9356, 0x0c31,
+  0x935e, 0x1e48,
+  0x935f, 0x0c3a,
+  0x9367, 0x1e49,
+  0x9368, 0x0c43,
+  0x936a, 0x1e4a,
+  0x936b, 0x0c46,
+  0x9370, 0x1e4b,
+  0x9372, 0x0c4d,
+  0x9376, 0x16df,
+  0x9377, 0x0c52,
+  0x9380, 0x0c5a,
+  0x9384, 0x1e4d,
+  0x9385, 0x0c5f,
+  0x938e, 0x1450,
+  0x938f, 0x0c69,
+  0x9393, 0x1536,
+  0x9394, 0x0c6e,
+  0x9398, 0x1e4e,
+  0x9399, 0x0c73,
+  0x93bc, 0x1e4f,
+  0x93bd, 0x0c97,
+  0x93c0, 0x1e50,
+  0x93c1, 0x0c9b,
+  0x93d2, 0x1e51,
+  0x93d4, 0x0cae,
+  0x93d9, 0x1e53,
+  0x93db, 0x0cb5,
+  0x93df, 0x1e55,
+  0x93e0, 0x0cba,
+  0x93e4, 0x1e56,
+  0x93e6, 0x0cc0,
+  0x93e8, 0x1e58,
+  0x93e9, 0x0cc3,
+  0x93f4, 0x1aed,
+  0x93f5, 0x0ccf,
+  0x9440, 0x0cd7,
+  0x9448, 0x1e59,
+  0x9449, 0x0ce0,
+  0x9458, 0x1e5a,
+  0x9459, 0x0cf0,
+  0x9476, 0x1e5b,
+  0x9477, 0x0d0e,
+  0x9480, 0x0d16,
+  0x9487, 0x1e5c,
+  0x9488, 0x1989,
+  0x9489, 0x1e5d,
+  0x948a, 0x0d20,
+  0x948d, 0x1e5e,
+  0x948e, 0x0d24,
+  0x94a2, 0x1e5f,
+  0x94a3, 0x0d39,
+  0x94ac, 0x1e60,
+  0x94ad, 0x0d43,
+  0x94ae, 0x1e61,
+  0x94af, 0x0d45,
+  0x94d2, 0x1e62,
+  0x94d3, 0x0d69,
+  0x94e0, 0x1e63,
+  0x94e1, 0x0d77,
+  0x94f3, 0x1e64,
+  0x94f4, 0x0d8a,
+  0x9540, 0x0d93,
+  0x9541, 0x1e65,
+  0x9543, 0x0d96,
+  0x954e, 0x1e67,
+  0x954f, 0x143b,
+  0x9550, 0x0da3,
+  0x9551, 0x1e68,
+  0x9552, 0x0da5,
+  0x9554, 0x1e69,
+  0x9555, 0x0da8,
+  0x955f, 0x1e6a,
+  0x9560, 0x0db3,
+  0x956d, 0x1e6b,
+  0x956e, 0x0dc1,
+  0x9570, 0x1e6c,
+  0x9571, 0x0dc4,
+  0x9580, 0x0dd2,
+  0x95c1, 0x1e6d,
+  0x95c2, 0x0e14,
+  0x95cb, 0x1e6e,
+  0x95cc, 0x0e1e,
+  0x95d8, 0x1e6f,
+  0x95d9, 0x0e2b,
+  0x95f7, 0x1e70,
+  0x95f8, 0x0e4a,
+  0x9640, 0x0e4f,
+  0x9641, 0x1e71,
+  0x9642, 0x0e51,
+  0x9648, 0x1e72,
+  0x9649, 0x0e58,
+  0x966a, 0x1e73,
+  0x966b, 0x0e7a,
+  0x9680, 0x0e8e,
+  0x968a, 0x1d33,
+  0x968b, 0x0e99,
+  0x9690, 0x1e74,
+  0x9691, 0x0e9f,
+  0x9698, 0x1f2c,
+  0x9699, 0x102f,
+  0x969a, 0x0ea8,
+  0x96cb, 0x1e75,
+  0x96cc, 0x0eda,
+  0x96d7, 0x1e76,
+  0x96d8, 0x0ee6,
+  0x96dd, 0x1e77,
+  0x96de, 0x0eec,
+  0x96e0, 0x1e78,
+  0x96e1, 0x0eef,
+  0x96f7, 0x1935,
+  0x96f8, 0x1e79,
+  0x96f9, 0x0f07,
+  0x96fa, 0x1e7a,
+  0x96fb, 0x0f09,
+  0x96fc, 0x1e7b,
+  0x9740, 0x0f0b,
+  0x9751, 0x1e7c,
+  0x9752, 0x0f1d,
+  0x976f, 0x1e7d,
+  0x9770, 0x0f3b,
+  0x9773, 0x1e7e,
+  0x9774, 0x0f3f,
+  0x9779, 0x1d34,
+  0x977a, 0x0f45,
+  0x9780, 0x0f4a,
+  0x9789, 0x1e7f,
+  0x978a, 0x0f54,
+  0x97c9, 0x1e80,
+  0x97ca, 0x0f94,
+  0x97f8, 0x1e81,
+  0x97fa, 0x0fc4,
+  0x9840, 0x1e83,
+  0x9841, 0x0fc8,
+  0x9850, 0x1e84,
+  0x9851, 0x0fd8,
+  0x9855, 0x1777,
+  0x9856, 0x0fdd,
+  0x9858, 0x1e85,
+  0x9859, 0x0fe0,
+  0x989f, 0x0ffa,
+  0x98d4, 0x0ea7,
+  0x98d5, 0x1030,
+  0x9940, 0x1058,
+  0x995c, 0x1e86,
+  0x995d, 0x1075,
+  0x9966, 0x1e87,
+  0x9967, 0x107f,
+  0x996a, 0x1e88,
+  0x996b, 0x1083,
+  0x996c, 0x1e89,
+  0x996d, 0x1085,
+  0x9980, 0x1097,
+  0x9a40, 0x1114,
+  0x9a4f, 0x1e8a,
+  0x9a50, 0x1124,
+  0x9a59, 0x1e8b,
+  0x9a5a, 0x112e,
+  0x9a7d, 0x1e8d,
+  0x9a7e, 0x1152,
+  0x9a80, 0x1153,
+  0x9a8b, 0x1e8e,
+  0x9a8c, 0x115f,
+  0x9ac2, 0x1e8f,
+  0x9ac3, 0x1196,
+  0x9ae2, 0x0bf7,
+  0x9ae3, 0x11b6,
+  0x9b40, 0x11d0,
+  0x9b5c, 0x1e90,
+  0x9b5d, 0x11ed,
+  0x9b80, 0x120f,
+  0x9b83, 0x1e91,
+  0x9b84, 0x1213,
+  0x9ba0, 0x1e92,
+  0x9ba1, 0x1230,
+  0x9c40, 0x128c,
+  0x9c80, 0x12cb,
+  0x9ca2, 0x1e94,
+  0x9ca3, 0x12ee,
+  0x9d40, 0x1348,
+  0x9d80, 0x1e95,
+  0x9d81, 0x1388,
+  0x9d8c, 0x1e96,
+  0x9d8d, 0x1394,
+  0x9d98, 0x05a7,
+  0x9d99, 0x13a0,
+  0x9db7, 0x1e97,
+  0x9db8, 0x13bf,
+  0x9dcb, 0x1e98,
+  0x9dcc, 0x13d3,
+  0x9e40, 0x1404,
+  0x9e64, 0x1e99,
+  0x9e65, 0x1429,
+  0x9e69, 0x1e9a,
+  0x9e6a, 0x142e,
+  0x9e77, 0x0da2,
+  0x9e78, 0x143c,
+  0x9e80, 0x1443,
+  0x9e8b, 0x1e9b,
+  0x9e8c, 0x144f,
+  0x9e8d, 0x0c68,
+  0x9e8e, 0x1451,
+  0x9e94, 0x1e9c,
+  0x9e95, 0x1458,
+  0x9f40, 0x14c0,
+  0x9f80, 0x14ff,
+  0x9fb7, 0x0c6d,
+  0x9fb8, 0x1537,
+  0x9fce, 0x1e9d,
+  0x9fcf, 0x154e,
+  0x9ff3, 0x05ff,
+  0x9ff4, 0x1573,
+  0xe040, 0x157c,
+  0xe080, 0x15bb,
+  0xe0a4, 0x1e9f,
+  0xe0a5, 0x15e0,
+  0xe0dd, 0x1ea0,
+  0xe0de, 0x1619,
+  0xe0f4, 0x1d35,
+  0xe0f5, 0x1630,
+  0xe140, 0x1638,
+  0xe14a, 0x1ea1,
+  0xe14b, 0x1643,
+  0xe14f, 0x1ea2,
+  0xe151, 0x1649,
+  0xe180, 0x1677,
+  0xe1a9, 0x1ea4,
+  0xe1aa, 0x16a1,
+  0xe1e6, 0x07ee,
+  0xe1e7, 0x16de,
+  0xe1e8, 0x0c51,
+  0xe1e9, 0x16e0,
+  0xe1ed, 0x1ea5,
+  0xe1ee, 0x16e5,
+  0xe240, 0x16f4,
+  0xe269, 0x1ea6,
+  0xe26a, 0x171e,
+  0xe273, 0x1ea7,
+  0xe274, 0x1728,
+  0xe27d, 0x05d4,
+  0xe27e, 0x1732,
+  0xe280, 0x1733,
+  0xe2b7, 0x1ea8,
+  0xe2b8, 0x176b,
+  0xe2c4, 0x0fdc,
+  0xe2c5, 0x1778,
+  0xe2e2, 0x1ea9,
+  0xe2e3, 0x1796,
+  0xe2ec, 0x1eaa,
+  0xe2ed, 0x17a0,
+  0xe340, 0x17b0,
+  0xe358, 0x1eab,
+  0xe359, 0x17c9,
+  0xe35a, 0x1eac,
+  0xe35b, 0x17cb,
+  0xe365, 0x1ead,
+  0xe366, 0x17d6,
+  0xe380, 0x17ef,
+  0xe3c4, 0x1eae,
+  0xe3c5, 0x1834,
+  0xe440, 0x186c,
+  0xe480, 0x18ab,
+  0xe484, 0x1eaf,
+  0xe485, 0x18b0,
+  0xe489, 0x1eb0,
+  0xe48a, 0x18b5,
+  0xe492, 0x1eb1,
+  0xe493, 0x18be,
+  0xe4b2, 0x1eb2,
+  0xe4b3, 0x18de,
+  0xe4b9, 0x1eb3,
+  0xe4ba, 0x18e5,
+  0xe4f2, 0x1eb4,
+  0xe4f3, 0x191e,
+  0xe540, 0x1928,
+  0xe541, 0x08f5,
+  0xe542, 0x192a,
+  0xe54d, 0x0f05,
+  0xe54e, 0x1936,
+  0xe579, 0x05a0,
+  0xe57a, 0x1962,
+  0xe580, 0x1967,
+  0xe5a2, 0x0d1e,
+  0xe5a3, 0x198a,
+  0xe5a5, 0x1eb6,
+  0xe5a6, 0x198d,
+  0xe5bb, 0x1eb7,
+  0xe5bc, 0x19a3,
+  0xe5ed, 0x1eb8,
+  0xe5ee, 0x19d5,
+  0xe640, 0x19e4,
+  0xe651, 0x1eb9,
+  0xe652, 0x19f6,
+  0xe67c, 0x060e,
+  0xe67d, 0x1a21,
+  0xe680, 0x1a23,
+  0xe686, 0x1eba,
+  0xe687, 0x1a2a,
+  0xe696, 0x1ebb,
+  0xe697, 0x1a3a,
+  0xe6cb, 0x0aaa,
+  0xe6cc, 0x1a6f,
+  0xe6e7, 0x1ebc,
+  0xe6e8, 0x1a8b,
+  0xe6f2, 0x1ebd,
+  0xe6f3, 0x1a96,
+  0xe740, 0x1aa0,
+  0xe76d, 0x1ebe,
+  0xe76e, 0x1ace,
+  0xe780, 0x1adf,
+  0xe78c, 0x1ebf,
+  0xe78d, 0x1aec,
+  0xe78e, 0x1ec0,
+  0xe78f, 0x1aee,
+  0xe7a7, 0x1ec1,
+  0xe7a8, 0x1b07,
+  0xe7bb, 0x1ec2,
+  0xe7bc, 0x1b1b,
+  0xe7d5, 0x1ec3,
+  0xe7d6, 0x1b35,
+  0xe840, 0x1b5c,
+  0xe880, 0x1b9b,
+  0xe8c3, 0x1ec6,
+  0xe8c4, 0x1bdf,
+  0xe8cf, 0x1ec7,
+  0xe8d0, 0x1beb,
+  0xe8d5, 0x1ec8,
+  0xe8d6, 0x1bf1,
+  0xe8f2, 0x0731,
+  0xe8f3, 0x1ec9,
+  0xe8f4, 0x1c0f,
+  0xe940, 0x1c18,
+  0xe980, 0x1c57,
+  0xe9ab, 0x1eca,
+  0xe9ac, 0x1c83,
+  0xe9ba, 0x1ecb,
+  0xe9bb, 0x1c92,
+  0xe9cb, 0x0477,
+  0xe9cc, 0x1ecc,
+  0xe9cd, 0x1ca4,
+  0xe9f2, 0x0529,
+  0xe9f3, 0x1cca,
+  0xea40, 0x1cd4,
+  0xea70, 0x1ecd,
+  0xea71, 0x1d05,
+  0xea80, 0x1d13,
+  0xea9d, 0x1ece,
+  0xea9e, 0x1d31,
+  0xeaa3, 0x205c,
+  0xed40, 0x20a7,
+  0xed80, 0x20e6,
+  0xedb4, 0x07c9,
+  0xedb5, 0x211a,
+  0xee40, 0x2162,
+  0xee80, 0x21a1,
+  0xeeef, 0x1f9c,
+  0xeef9, 0x02ef,
+  0xeefa, 0x1f45,
+  0xfa40, 0x1f9c,
+  0xfa4a, 0x1d97,
+  0xfa54, 0x02ef,
+  0xfa55, 0x1f45,
+  0xfa58, 0x1dc2,
+  0xfa59, 0x1dba,
+  0xfa5a, 0x1f77,
+  0xfa5b, 0x0300,
+  0xfa5c, 0x20a7,
+  0xfa80, 0x20ca,
+  0xfad0, 0x07c9,
+  0xfad1, 0x211a,
+  0xfb40, 0x2146,
+  0xfb80, 0x2185,
+  0xfc40, 0x2202,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan1278msRKSJHEnc16 = {
+  0,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0277, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
+    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
+    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
+    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
+    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
+    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
+    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan1278msRKSJHMap2, 712
+};
+
+static Gushort japan1278msRKSJVMap2[1580] = {
+  0x0000, 0x0000,
+  0x8140, 0x0279,
+  0x8180, 0x02b8,
+  0x81b8, 0x02e5,
+  0x81c8, 0x02ed,
+  0x81da, 0x02f4,
+  0x81f0, 0x0303,
+  0x81fc, 0x030b,
+  0x824f, 0x030c,
+  0x8260, 0x0316,
+  0x8281, 0x0330,
+  0x829f, 0x034a,
+  0x8340, 0x039d,
+  0x8380, 0x03dc,
+  0x839f, 0x03f3,
+  0x83bf, 0x040b,
+  0x8440, 0x0423,
+  0x8470, 0x0444,
+  0x8480, 0x0453,
+  0x849f, 0x1d37,
+  0x84a0, 0x1d39,
+  0x84a1, 0x1d43,
+  0x84a2, 0x1d47,
+  0x84a3, 0x1d4f,
+  0x84a4, 0x1d4b,
+  0x84a5, 0x1d53,
+  0x84a6, 0x1d63,
+  0x84a7, 0x1d5b,
+  0x84a8, 0x1d6b,
+  0x84a9, 0x1d73,
+  0x84aa, 0x1d38,
+  0x84ab, 0x1d3a,
+  0x84ac, 0x1d46,
+  0x84ad, 0x1d4a,
+  0x84ae, 0x1d52,
+  0x84af, 0x1d4e,
+  0x84b0, 0x1d5a,
+  0x84b1, 0x1d6a,
+  0x84b2, 0x1d62,
+  0x84b3, 0x1d72,
+  0x84b4, 0x1d82,
+  0x84b5, 0x1d57,
+  0x84b6, 0x1d66,
+  0x84b7, 0x1d5f,
+  0x84b8, 0x1d6e,
+  0x84b9, 0x1d76,
+  0x84ba, 0x1d54,
+  0x84bb, 0x1d67,
+  0x84bc, 0x1d5c,
+  0x84bd, 0x1d6f,
+  0x84be, 0x1d79,
+  0x8740, 0x1d83,
+  0x875f, 0x1da1,
+  0x8761, 0x1f66,
+  0x8762, 0x1da4,
+  0x8763, 0x1f68,
+  0x8764, 0x1da6,
+  0x8765, 0x1f6a,
+  0x8766, 0x1da8,
+  0x8768, 0x1f6c,
+  0x8769, 0x1dab,
+  0x876b, 0x1f6b,
+  0x876c, 0x1dae,
+  0x876e, 0x1f6f,
+  0x876f, 0x1db1,
+  0x877e, 0x2083,
+  0x8780, 0x1db8,
+  0x8784, 0x1f77,
+  0x8785, 0x1dbd,
+  0x8790, 0x02fa,
+  0x8791, 0x02f9,
+  0x8792, 0x0301,
+  0x8793, 0x1dc8,
+  0x879a, 0x0300,
+  0x879b, 0x1dcf,
+  0x889f, 0x0465,
+  0x88a0, 0x1dd1,
+  0x88a1, 0x0467,
+  0x88a7, 0x204a,
+  0x88a8, 0x046e,
+  0x88b0, 0x1f19,
+  0x88b1, 0x1ca2,
+  0x88b2, 0x0478,
+  0x88b9, 0x1dd2,
+  0x88ba, 0x0480,
+  0x88ec, 0x1dd3,
+  0x88ed, 0x04b3,
+  0x88f1, 0x1dd4,
+  0x88f2, 0x04b8,
+  0x88fa, 0x1dd5,
+  0x88fb, 0x04c1,
+  0x8940, 0x04c3,
+  0x8949, 0x1dd6,
+  0x894a, 0x04cd,
+  0x8954, 0x1dd7,
+  0x8955, 0x04d8,
+  0x8958, 0x1dd8,
+  0x8959, 0x04dc,
+  0x895c, 0x1dda,
+  0x895d, 0x04e0,
+  0x8961, 0x1ddb,
+  0x8962, 0x04e5,
+  0x8980, 0x0502,
+  0x898b, 0x1ddc,
+  0x898c, 0x050e,
+  0x89a6, 0x1ddd,
+  0x89a7, 0x1cc9,
+  0x89a8, 0x1dde,
+  0x89a9, 0x052b,
+  0x89de, 0x1ddf,
+  0x89df, 0x0561,
+  0x89f8, 0x1de0,
+  0x89f9, 0x057b,
+  0x89fb, 0x1de1,
+  0x89fc, 0x057e,
+  0x8a40, 0x057f,
+  0x8a41, 0x1de2,
+  0x8a42, 0x0581,
+  0x8a61, 0x1961,
+  0x8a62, 0x05a1,
+  0x8a68, 0x139f,
+  0x8a69, 0x05a8,
+  0x8a80, 0x05be,
+  0x8a85, 0x1de3,
+  0x8a86, 0x05c4,
+  0x8a8b, 0x1de4,
+  0x8a8c, 0x05ca,
+  0x8a93, 0x1de5,
+  0x8a94, 0x05d2,
+  0x8a96, 0x1731,
+  0x8a97, 0x05d5,
+  0x8a9a, 0x1de6,
+  0x8a9b, 0x05d9,
+  0x8ac0, 0x1de7,
+  0x8ac1, 0x1572,
+  0x8ac2, 0x0600,
+  0x8acb, 0x1de8,
+  0x8acc, 0x060a,
+  0x8ad0, 0x1a20,
+  0x8ad1, 0x060f,
+  0x8ae3, 0x1de9,
+  0x8ae4, 0x0622,
+  0x8b40, 0x063b,
+  0x8b4a, 0x1dea,
+  0x8b4b, 0x0646,
+  0x8b5f, 0x1deb,
+  0x8b60, 0x065b,
+  0x8b80, 0x067a,
+  0x8ba0, 0x1dec,
+  0x8ba1, 0x069b,
+  0x8ba8, 0x1ded,
+  0x8ba9, 0x06a3,
+  0x8bc4, 0x1d32,
+  0x8bc5, 0x06bf,
+  0x8bcd, 0x1dee,
+  0x8bce, 0x06c8,
+  0x8beb, 0x1def,
+  0x8bec, 0x06e6,
+  0x8bf2, 0x1df0,
+  0x8bf3, 0x06ed,
+  0x8bf9, 0x1df1,
+  0x8bfa, 0x06f4,
+  0x8bfb, 0x1df2,
+  0x8bfc, 0x06f6,
+  0x8c40, 0x06f7,
+  0x8c43, 0x1df3,
+  0x8c44, 0x06fb,
+  0x8c56, 0x1df4,
+  0x8c57, 0x070e,
+  0x8c64, 0x1df5,
+  0x8c65, 0x071c,
+  0x8c6d, 0x1df6,
+  0x8c6e, 0x0725,
+  0x8c71, 0x1df7,
+  0x8c72, 0x0729,
+  0x8c74, 0x1df8,
+  0x8c75, 0x072c,
+  0x8c7a, 0x1c0d,
+  0x8c7b, 0x0732,
+  0x8c80, 0x0736,
+  0x8c84, 0x1df9,
+  0x8c85, 0x073b,
+  0x8c91, 0x1dfa,
+  0x8c92, 0x0748,
+  0x8c99, 0x1dfb,
+  0x8c9a, 0x0750,
+  0x8c9e, 0x1dfc,
+  0x8c9f, 0x0755,
+  0x8cb2, 0x1dfd,
+  0x8cb3, 0x0769,
+  0x8cbf, 0x1dfe,
+  0x8cc0, 0x0776,
+  0x8d40, 0x07b3,
+  0x8d4a, 0x1dff,
+  0x8d4b, 0x07be,
+  0x8d56, 0x1e00,
+  0x8d57, 0x07ca,
+  0x8d61, 0x1e01,
+  0x8d62, 0x07d5,
+  0x8d7b, 0x16dd,
+  0x8d7c, 0x07ef,
+  0x8d80, 0x07f2,
+  0x8d8d, 0x1e02,
+  0x8d8e, 0x0800,
+  0x8d94, 0x1e03,
+  0x8d95, 0x0807,
+  0x8d99, 0x1e04,
+  0x8d9a, 0x080c,
+  0x8dd1, 0x1e05,
+  0x8dd2, 0x0844,
+  0x8de5, 0x1e06,
+  0x8de6, 0x0858,
+  0x8df2, 0x1e07,
+  0x8df3, 0x0865,
+  0x8e40, 0x086f,
+  0x8e46, 0x1e08,
+  0x8e47, 0x0876,
+  0x8e49, 0x1e09,
+  0x8e4a, 0x0879,
+  0x8e4b, 0x1e0a,
+  0x8e4c, 0x087b,
+  0x8e58, 0x1e0b,
+  0x8e59, 0x0888,
+  0x8e80, 0x08ae,
+  0x8ec6, 0x1e0d,
+  0x8ec7, 0x1929,
+  0x8ec8, 0x08f6,
+  0x8ed5, 0x1e0e,
+  0x8ed6, 0x0904,
+  0x8edb, 0x1e0f,
+  0x8edd, 0x090b,
+  0x8f40, 0x092b,
+  0x8f4a, 0x1e11,
+  0x8f4b, 0x0936,
+  0x8f55, 0x1e12,
+  0x8f56, 0x0941,
+  0x8f80, 0x096a,
+  0x8f8c, 0x1e13,
+  0x8f8e, 0x0978,
+  0x8f92, 0x1e15,
+  0x8f94, 0x097e,
+  0x8fa3, 0x1e17,
+  0x8fa4, 0x098e,
+  0x8fb1, 0x1e18,
+  0x8fb2, 0x099c,
+  0x8fbd, 0x1e19,
+  0x8fbe, 0x09a8,
+  0x8fd3, 0x1e1a,
+  0x8fd4, 0x09be,
+  0x8fdd, 0x1e1b,
+  0x8fde, 0x09c8,
+  0x8fe2, 0x1e1c,
+  0x8fe3, 0x09cd,
+  0x9040, 0x09e7,
+  0x9049, 0x1e1d,
+  0x904a, 0x09f1,
+  0x9078, 0x1e1e,
+  0x9079, 0x0a20,
+  0x9080, 0x1e1f,
+  0x9081, 0x0a27,
+  0x9089, 0x1e20,
+  0x908a, 0x0a30,
+  0x90a0, 0x1e21,
+  0x90a1, 0x0a47,
+  0x90c0, 0x1e22,
+  0x90c1, 0x0a67,
+  0x90e4, 0x1e23,
+  0x90e5, 0x0a8b,
+  0x90ef, 0x1e24,
+  0x90f1, 0x0a97,
+  0x90f7, 0x1e26,
+  0x90f9, 0x0a9f,
+  0x9140, 0x0aa3,
+  0x9146, 0x1e28,
+  0x9147, 0x1a6e,
+  0x9148, 0x0aab,
+  0x9158, 0x1e29,
+  0x9159, 0x0abc,
+  0x916b, 0x1e2a,
+  0x916c, 0x0acf,
+  0x916e, 0x1e2b,
+  0x916f, 0x0ad2,
+  0x917e, 0x1e2c,
+  0x9180, 0x0ae2,
+  0x9189, 0x1e2d,
+  0x918a, 0x0aec,
+  0x91bb, 0x1e2e,
+  0x91bc, 0x0b1e,
+  0x91cb, 0x1e2f,
+  0x91cc, 0x0b2e,
+  0x91da, 0x1e30,
+  0x91db, 0x0b3d,
+  0x91e1, 0x1e31,
+  0x91e2, 0x0b44,
+  0x91ed, 0x1e32,
+  0x91ee, 0x0b50,
+  0x91f3, 0x1e33,
+  0x91f5, 0x0b57,
+  0x91fb, 0x1e35,
+  0x91fc, 0x0b5e,
+  0x9240, 0x0b5f,
+  0x9246, 0x1e36,
+  0x9247, 0x0b66,
+  0x9248, 0x1e37,
+  0x924a, 0x0b69,
+  0x924c, 0x1e39,
+  0x924e, 0x0b6d,
+  0x925c, 0x1e3b,
+  0x925d, 0x0b7c,
+  0x9280, 0x0b9e,
+  0x9290, 0x1e3c,
+  0x9291, 0x0baf,
+  0x9295, 0x1e3d,
+  0x9296, 0x0bb4,
+  0x929c, 0x1e3e,
+  0x929d, 0x0bbb,
+  0x92bb, 0x1e3f,
+  0x92bc, 0x0bda,
+  0x92c6, 0x1e40,
+  0x92c7, 0x0be5,
+  0x92c8, 0x1e41,
+  0x92c9, 0x0be7,
+  0x92cb, 0x1e42,
+  0x92cc, 0x0bea,
+  0x92cd, 0x1e43,
+  0x92ce, 0x0bec,
+  0x92d2, 0x204b,
+  0x92d3, 0x0bf1,
+  0x92d9, 0x11b5,
+  0x92da, 0x0bf8,
+  0x9340, 0x0c1b,
+  0x9341, 0x1e44,
+  0x9342, 0x0c1d,
+  0x9346, 0x1e45,
+  0x9347, 0x0c22,
+  0x934d, 0x1e46,
+  0x934e, 0x0c29,
+  0x9355, 0x1e47,
+  0x9356, 0x0c31,
+  0x935e, 0x1e48,
+  0x935f, 0x0c3a,
+  0x9367, 0x1e49,
+  0x9368, 0x0c43,
+  0x936a, 0x1e4a,
+  0x936b, 0x0c46,
+  0x9370, 0x1e4b,
+  0x9372, 0x0c4d,
+  0x9376, 0x16df,
+  0x9377, 0x0c52,
+  0x9380, 0x0c5a,
+  0x9384, 0x1e4d,
+  0x9385, 0x0c5f,
+  0x938e, 0x1450,
+  0x938f, 0x0c69,
+  0x9393, 0x1536,
+  0x9394, 0x0c6e,
+  0x9398, 0x1e4e,
+  0x9399, 0x0c73,
+  0x93bc, 0x1e4f,
+  0x93bd, 0x0c97,
+  0x93c0, 0x1e50,
+  0x93c1, 0x0c9b,
+  0x93d2, 0x1e51,
+  0x93d4, 0x0cae,
+  0x93d9, 0x1e53,
+  0x93db, 0x0cb5,
+  0x93df, 0x1e55,
+  0x93e0, 0x0cba,
+  0x93e4, 0x1e56,
+  0x93e6, 0x0cc0,
+  0x93e8, 0x1e58,
+  0x93e9, 0x0cc3,
+  0x93f4, 0x1aed,
+  0x93f5, 0x0ccf,
+  0x9440, 0x0cd7,
+  0x9448, 0x1e59,
+  0x9449, 0x0ce0,
+  0x9458, 0x1e5a,
+  0x9459, 0x0cf0,
+  0x9476, 0x1e5b,
+  0x9477, 0x0d0e,
+  0x9480, 0x0d16,
+  0x9487, 0x1e5c,
+  0x9488, 0x1989,
+  0x9489, 0x1e5d,
+  0x948a, 0x0d20,
+  0x948d, 0x1e5e,
+  0x948e, 0x0d24,
+  0x94a2, 0x1e5f,
+  0x94a3, 0x0d39,
+  0x94ac, 0x1e60,
+  0x94ad, 0x0d43,
+  0x94ae, 0x1e61,
+  0x94af, 0x0d45,
+  0x94d2, 0x1e62,
+  0x94d3, 0x0d69,
+  0x94e0, 0x1e63,
+  0x94e1, 0x0d77,
+  0x94f3, 0x1e64,
+  0x94f4, 0x0d8a,
+  0x9540, 0x0d93,
+  0x9541, 0x1e65,
+  0x9543, 0x0d96,
+  0x954e, 0x1e67,
+  0x954f, 0x143b,
+  0x9550, 0x0da3,
+  0x9551, 0x1e68,
+  0x9552, 0x0da5,
+  0x9554, 0x1e69,
+  0x9555, 0x0da8,
+  0x955f, 0x1e6a,
+  0x9560, 0x0db3,
+  0x956d, 0x1e6b,
+  0x956e, 0x0dc1,
+  0x9570, 0x1e6c,
+  0x9571, 0x0dc4,
+  0x9580, 0x0dd2,
+  0x95c1, 0x1e6d,
+  0x95c2, 0x0e14,
+  0x95cb, 0x1e6e,
+  0x95cc, 0x0e1e,
+  0x95d8, 0x1e6f,
+  0x95d9, 0x0e2b,
+  0x95f7, 0x1e70,
+  0x95f8, 0x0e4a,
+  0x9640, 0x0e4f,
+  0x9641, 0x1e71,
+  0x9642, 0x0e51,
+  0x9648, 0x1e72,
+  0x9649, 0x0e58,
+  0x966a, 0x1e73,
+  0x966b, 0x0e7a,
+  0x9680, 0x0e8e,
+  0x968a, 0x1d33,
+  0x968b, 0x0e99,
+  0x9690, 0x1e74,
+  0x9691, 0x0e9f,
+  0x9698, 0x1f2c,
+  0x9699, 0x102f,
+  0x969a, 0x0ea8,
+  0x96cb, 0x1e75,
+  0x96cc, 0x0eda,
+  0x96d7, 0x1e76,
+  0x96d8, 0x0ee6,
+  0x96dd, 0x1e77,
+  0x96de, 0x0eec,
+  0x96e0, 0x1e78,
+  0x96e1, 0x0eef,
+  0x96f7, 0x1935,
+  0x96f8, 0x1e79,
+  0x96f9, 0x0f07,
+  0x96fa, 0x1e7a,
+  0x96fb, 0x0f09,
+  0x96fc, 0x1e7b,
+  0x9740, 0x0f0b,
+  0x9751, 0x1e7c,
+  0x9752, 0x0f1d,
+  0x976f, 0x1e7d,
+  0x9770, 0x0f3b,
+  0x9773, 0x1e7e,
+  0x9774, 0x0f3f,
+  0x9779, 0x1d34,
+  0x977a, 0x0f45,
+  0x9780, 0x0f4a,
+  0x9789, 0x1e7f,
+  0x978a, 0x0f54,
+  0x97c9, 0x1e80,
+  0x97ca, 0x0f94,
+  0x97f8, 0x1e81,
+  0x97fa, 0x0fc4,
+  0x9840, 0x1e83,
+  0x9841, 0x0fc8,
+  0x9850, 0x1e84,
+  0x9851, 0x0fd8,
+  0x9855, 0x1777,
+  0x9856, 0x0fdd,
+  0x9858, 0x1e85,
+  0x9859, 0x0fe0,
+  0x989f, 0x0ffa,
+  0x98d4, 0x0ea7,
+  0x98d5, 0x1030,
+  0x9940, 0x1058,
+  0x995c, 0x1e86,
+  0x995d, 0x1075,
+  0x9966, 0x1e87,
+  0x9967, 0x107f,
+  0x996a, 0x1e88,
+  0x996b, 0x1083,
+  0x996c, 0x1e89,
+  0x996d, 0x1085,
+  0x9980, 0x1097,
+  0x9a40, 0x1114,
+  0x9a4f, 0x1e8a,
+  0x9a50, 0x1124,
+  0x9a59, 0x1e8b,
+  0x9a5a, 0x112e,
+  0x9a7d, 0x1e8d,
+  0x9a7e, 0x1152,
+  0x9a80, 0x1153,
+  0x9a8b, 0x1e8e,
+  0x9a8c, 0x115f,
+  0x9ac2, 0x1e8f,
+  0x9ac3, 0x1196,
+  0x9ae2, 0x0bf7,
+  0x9ae3, 0x11b6,
+  0x9b40, 0x11d0,
+  0x9b5c, 0x1e90,
+  0x9b5d, 0x11ed,
+  0x9b80, 0x120f,
+  0x9b83, 0x1e91,
+  0x9b84, 0x1213,
+  0x9ba0, 0x1e92,
+  0x9ba1, 0x1230,
+  0x9c40, 0x128c,
+  0x9c80, 0x12cb,
+  0x9ca2, 0x1e94,
+  0x9ca3, 0x12ee,
+  0x9d40, 0x1348,
+  0x9d80, 0x1e95,
+  0x9d81, 0x1388,
+  0x9d8c, 0x1e96,
+  0x9d8d, 0x1394,
+  0x9d98, 0x05a7,
+  0x9d99, 0x13a0,
+  0x9db7, 0x1e97,
+  0x9db8, 0x13bf,
+  0x9dcb, 0x1e98,
+  0x9dcc, 0x13d3,
+  0x9e40, 0x1404,
+  0x9e64, 0x1e99,
+  0x9e65, 0x1429,
+  0x9e69, 0x1e9a,
+  0x9e6a, 0x142e,
+  0x9e77, 0x0da2,
+  0x9e78, 0x143c,
+  0x9e80, 0x1443,
+  0x9e8b, 0x1e9b,
+  0x9e8c, 0x144f,
+  0x9e8d, 0x0c68,
+  0x9e8e, 0x1451,
+  0x9e94, 0x1e9c,
+  0x9e95, 0x1458,
+  0x9f40, 0x14c0,
+  0x9f80, 0x14ff,
+  0x9fb7, 0x0c6d,
+  0x9fb8, 0x1537,
+  0x9fce, 0x1e9d,
+  0x9fcf, 0x154e,
+  0x9ff3, 0x05ff,
+  0x9ff4, 0x1573,
+  0xe040, 0x157c,
+  0xe080, 0x15bb,
+  0xe0a4, 0x1e9f,
+  0xe0a5, 0x15e0,
+  0xe0dd, 0x1ea0,
+  0xe0de, 0x1619,
+  0xe0f4, 0x1d35,
+  0xe0f5, 0x1630,
+  0xe140, 0x1638,
+  0xe14a, 0x1ea1,
+  0xe14b, 0x1643,
+  0xe14f, 0x1ea2,
+  0xe151, 0x1649,
+  0xe180, 0x1677,
+  0xe1a9, 0x1ea4,
+  0xe1aa, 0x16a1,
+  0xe1e6, 0x07ee,
+  0xe1e7, 0x16de,
+  0xe1e8, 0x0c51,
+  0xe1e9, 0x16e0,
+  0xe1ed, 0x1ea5,
+  0xe1ee, 0x16e5,
+  0xe240, 0x16f4,
+  0xe269, 0x1ea6,
+  0xe26a, 0x171e,
+  0xe273, 0x1ea7,
+  0xe274, 0x1728,
+  0xe27d, 0x05d4,
+  0xe27e, 0x1732,
+  0xe280, 0x1733,
+  0xe2b7, 0x1ea8,
+  0xe2b8, 0x176b,
+  0xe2c4, 0x0fdc,
+  0xe2c5, 0x1778,
+  0xe2e2, 0x1ea9,
+  0xe2e3, 0x1796,
+  0xe2ec, 0x1eaa,
+  0xe2ed, 0x17a0,
+  0xe340, 0x17b0,
+  0xe358, 0x1eab,
+  0xe359, 0x17c9,
+  0xe35a, 0x1eac,
+  0xe35b, 0x17cb,
+  0xe365, 0x1ead,
+  0xe366, 0x17d6,
+  0xe380, 0x17ef,
+  0xe3c4, 0x1eae,
+  0xe3c5, 0x1834,
+  0xe440, 0x186c,
+  0xe480, 0x18ab,
+  0xe484, 0x1eaf,
+  0xe485, 0x18b0,
+  0xe489, 0x1eb0,
+  0xe48a, 0x18b5,
+  0xe492, 0x1eb1,
+  0xe493, 0x18be,
+  0xe4b2, 0x1eb2,
+  0xe4b3, 0x18de,
+  0xe4b9, 0x1eb3,
+  0xe4ba, 0x18e5,
+  0xe4f2, 0x1eb4,
+  0xe4f3, 0x191e,
+  0xe540, 0x1928,
+  0xe541, 0x08f5,
+  0xe542, 0x192a,
+  0xe54d, 0x0f05,
+  0xe54e, 0x1936,
+  0xe579, 0x05a0,
+  0xe57a, 0x1962,
+  0xe580, 0x1967,
+  0xe5a2, 0x0d1e,
+  0xe5a3, 0x198a,
+  0xe5a5, 0x1eb6,
+  0xe5a6, 0x198d,
+  0xe5bb, 0x1eb7,
+  0xe5bc, 0x19a3,
+  0xe5ed, 0x1eb8,
+  0xe5ee, 0x19d5,
+  0xe640, 0x19e4,
+  0xe651, 0x1eb9,
+  0xe652, 0x19f6,
+  0xe67c, 0x060e,
+  0xe67d, 0x1a21,
+  0xe680, 0x1a23,
+  0xe686, 0x1eba,
+  0xe687, 0x1a2a,
+  0xe696, 0x1ebb,
+  0xe697, 0x1a3a,
+  0xe6cb, 0x0aaa,
+  0xe6cc, 0x1a6f,
+  0xe6e7, 0x1ebc,
+  0xe6e8, 0x1a8b,
+  0xe6f2, 0x1ebd,
+  0xe6f3, 0x1a96,
+  0xe740, 0x1aa0,
+  0xe76d, 0x1ebe,
+  0xe76e, 0x1ace,
+  0xe780, 0x1adf,
+  0xe78c, 0x1ebf,
+  0xe78d, 0x1aec,
+  0xe78e, 0x1ec0,
+  0xe78f, 0x1aee,
+  0xe7a7, 0x1ec1,
+  0xe7a8, 0x1b07,
+  0xe7bb, 0x1ec2,
+  0xe7bc, 0x1b1b,
+  0xe7d5, 0x1ec3,
+  0xe7d6, 0x1b35,
+  0xe840, 0x1b5c,
+  0xe880, 0x1b9b,
+  0xe8c3, 0x1ec6,
+  0xe8c4, 0x1bdf,
+  0xe8cf, 0x1ec7,
+  0xe8d0, 0x1beb,
+  0xe8d5, 0x1ec8,
+  0xe8d6, 0x1bf1,
+  0xe8f2, 0x0731,
+  0xe8f3, 0x1ec9,
+  0xe8f4, 0x1c0f,
+  0xe940, 0x1c18,
+  0xe980, 0x1c57,
+  0xe9ab, 0x1eca,
+  0xe9ac, 0x1c83,
+  0xe9ba, 0x1ecb,
+  0xe9bb, 0x1c92,
+  0xe9cb, 0x0477,
+  0xe9cc, 0x1ecc,
+  0xe9cd, 0x1ca4,
+  0xe9f2, 0x0529,
+  0xe9f3, 0x1cca,
+  0xea40, 0x1cd4,
+  0xea70, 0x1ecd,
+  0xea71, 0x1d05,
+  0xea80, 0x1d13,
+  0xea9d, 0x1ece,
+  0xea9e, 0x1d31,
+  0xeaa3, 0x205c,
+  0xed40, 0x20a7,
+  0xed80, 0x20e6,
+  0xedb4, 0x07c9,
+  0xedb5, 0x211a,
+  0xee40, 0x2162,
+  0xee80, 0x21a1,
+  0xeeef, 0x1f9c,
+  0xeef9, 0x02ef,
+  0xeefa, 0x1f45,
+  0xfa40, 0x1f9c,
+  0xfa4a, 0x1d97,
+  0xfa54, 0x02ef,
+  0xfa55, 0x1f45,
+  0xfa58, 0x1dc2,
+  0xfa59, 0x1dba,
+  0xfa5a, 0x1f77,
+  0xfa5b, 0x0300,
+  0xfa5c, 0x20a7,
+  0xfa80, 0x20ca,
+  0xfad0, 0x07c9,
+  0xfad1, 0x211a,
+  0xfb40, 0x2146,
+  0xfb80, 0x2185,
+  0xfc40, 0x2202,
+  0x8141, 0x1ecf,
+  0x8143, 0x204c,
+  0x8144, 0x2052,
+  0x8150, 0x1ed1,
+  0x815b, 0x1ed3,
+  0x8160, 0x1ed6,
+  0x8169, 0x1edb,
+  0x8181, 0x1eed,
+  0x81a8, 0x02e3,
+  0x81a9, 0x02e2,
+  0x81aa, 0x02e0,
+  0x81ac, 0x204e,
+  0x829f, 0x1eee,
+  0x82a1, 0x1eef,
+  0x82a3, 0x1ef0,
+  0x82a5, 0x1ef1,
+  0x82a7, 0x1ef2,
+  0x82c1, 0x1ef3,
+  0x82e1, 0x1ef4,
+  0x82e3, 0x1ef5,
+  0x82e5, 0x1ef6,
+  0x82ec, 0x1ef7,
+  0x8340, 0x1ef8,
+  0x8342, 0x1ef9,
+  0x8344, 0x1efa,
+  0x8346, 0x1efb,
+  0x8348, 0x1efc,
+  0x8362, 0x1efd,
+  0x8383, 0x1efe,
+  0x8385, 0x1eff,
+  0x8387, 0x1f00,
+  0x838e, 0x1f01,
+  0x8395, 0x1f02,
+  0x849f, 0x1d39,
+  0x84a0, 0x1d37,
+  0x84a1, 0x1d47,
+  0x84a2, 0x1d4f,
+  0x84a3, 0x1d4b,
+  0x84a4, 0x1d43,
+  0x84a5, 0x1d63,
+  0x84a6, 0x1d5b,
+  0x84a7, 0x1d6b,
+  0x84a8, 0x1d53,
+  0x84a9, 0x1d73,
+  0x84aa, 0x1d3a,
+  0x84ab, 0x1d38,
+  0x84ac, 0x1d4a,
+  0x84ad, 0x1d52,
+  0x84ae, 0x1d4e,
+  0x84af, 0x1d46,
+  0x84b0, 0x1d6a,
+  0x84b1, 0x1d62,
+  0x84b2, 0x1d72,
+  0x84b3, 0x1d5a,
+  0x84b4, 0x1d82,
+  0x84b5, 0x1d66,
+  0x84b6, 0x1d5f,
+  0x84b7, 0x1d6e,
+  0x84b8, 0x1d57,
+  0x84b9, 0x1d79,
+  0x84ba, 0x1d67,
+  0x84bb, 0x1d5c,
+  0x84bc, 0x1d6f,
+  0x84bd, 0x1d54,
+  0x84be, 0x1d76,
+  0x875f, 0x1f04,
+  0x8761, 0x2089,
+  0x8762, 0x1f07,
+  0x8763, 0x2093,
+  0x8764, 0x1f09,
+  0x8765, 0x2092,
+  0x8766, 0x1f0b,
+  0x8768, 0x2098,
+  0x8769, 0x1f0e,
+  0x876b, 0x209c,
+  0x876c, 0x1f11,
+  0x876e, 0x209d,
+  0x8780, 0x1f14,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan1278msRKSJVEnc16 = {
+  1,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0277, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
+    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
+    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
+    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
+    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
+    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
+    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan1278msRKSJVMap2, 790
+};
+
+static Gushort japan1283pvRKSJHMap2[436] = {
+  0x0000, 0x0000,
+  0x8140, 0x0279,
+  0x8180, 0x02b8,
+  0x81b8, 0x02e5,
+  0x81c8, 0x02ed,
+  0x81da, 0x02f4,
+  0x81f0, 0x0303,
+  0x81fc, 0x030b,
+  0x824f, 0x030c,
+  0x8260, 0x0316,
+  0x8281, 0x0330,
+  0x829f, 0x034a,
+  0x8340, 0x039d,
+  0x8380, 0x03dc,
+  0x839f, 0x03f3,
+  0x83bf, 0x040b,
+  0x8440, 0x0423,
+  0x8470, 0x0444,
+  0x8480, 0x0453,
+  0x849f, 0x1d37,
+  0x84a0, 0x1d39,
+  0x84a1, 0x1d43,
+  0x84a2, 0x1d47,
+  0x84a3, 0x1d4f,
+  0x84a4, 0x1d4b,
+  0x84a5, 0x1d53,
+  0x84a6, 0x1d63,
+  0x84a7, 0x1d5b,
+  0x84a8, 0x1d6b,
+  0x84a9, 0x1d73,
+  0x84aa, 0x1d38,
+  0x84ab, 0x1d3a,
+  0x84ac, 0x1d46,
+  0x84ad, 0x1d4a,
+  0x84ae, 0x1d52,
+  0x84af, 0x1d4e,
+  0x84b0, 0x1d5a,
+  0x84b1, 0x1d6a,
+  0x84b2, 0x1d62,
+  0x84b3, 0x1d72,
+  0x84b4, 0x1d82,
+  0x84b5, 0x1d57,
+  0x84b6, 0x1d66,
+  0x84b7, 0x1d5f,
+  0x84b8, 0x1d6e,
+  0x84b9, 0x1d76,
+  0x84ba, 0x1d54,
+  0x84bb, 0x1d67,
+  0x84bc, 0x1d5c,
+  0x84bd, 0x1d6f,
+  0x84be, 0x1d79,
+  0x8540, 0x00e8,
+  0x8580, 0x0186,
+  0x8581, 0x0128,
+  0x859f, 0x0147,
+  0x85de, 0x0187,
+  0x8640, 0x01a6,
+  0x8680, 0x01e5,
+  0x8692, 0x0127,
+  0x8693, 0x01f7,
+  0x86a2, 0x1d37,
+  0x8740, 0x1d83,
+  0x875f, 0x1da1,
+  0x8780, 0x1db8,
+  0x8790, 0x02fa,
+  0x8791, 0x02f9,
+  0x8792, 0x0301,
+  0x8793, 0x1dc8,
+  0x879a, 0x0300,
+  0x879b, 0x1dcf,
+  0x889f, 0x0465,
+  0x8940, 0x04c3,
+  0x8980, 0x0502,
+  0x8a40, 0x057f,
+  0x8a80, 0x05be,
+  0x8b40, 0x063b,
+  0x8b80, 0x067a,
+  0x8c40, 0x06f7,
+  0x8c80, 0x0736,
+  0x8d40, 0x07b3,
+  0x8d80, 0x07f2,
+  0x8e40, 0x086f,
+  0x8e80, 0x08ae,
+  0x8f40, 0x092b,
+  0x8f80, 0x096a,
+  0x9040, 0x09e7,
+  0x9080, 0x0a26,
+  0x9140, 0x0aa3,
+  0x9180, 0x0ae2,
+  0x9240, 0x0b5f,
+  0x9280, 0x0b9e,
+  0x9340, 0x0c1b,
+  0x9380, 0x0c5a,
+  0x9440, 0x0cd7,
+  0x9480, 0x0d16,
+  0x9540, 0x0d93,
+  0x9580, 0x0dd2,
+  0x9640, 0x0e4f,
+  0x9680, 0x0e8e,
+  0x9740, 0x0f0b,
+  0x9780, 0x0f4a,
+  0x9840, 0x0fc7,
+  0x989f, 0x0ffa,
+  0x9940, 0x1058,
+  0x9980, 0x1097,
+  0x9a40, 0x1114,
+  0x9a80, 0x1153,
+  0x9b40, 0x11d0,
+  0x9b80, 0x120f,
+  0x9c40, 0x128c,
+  0x9c80, 0x12cb,
+  0x9d40, 0x1348,
+  0x9d80, 0x1387,
+  0x9e40, 0x1404,
+  0x9e80, 0x1443,
+  0x9f40, 0x14c0,
+  0x9f80, 0x14ff,
+  0xe040, 0x157c,
+  0xe080, 0x15bb,
+  0xe140, 0x1638,
+  0xe180, 0x1677,
+  0xe240, 0x16f4,
+  0xe280, 0x1733,
+  0xe340, 0x17b0,
+  0xe380, 0x17ef,
+  0xe440, 0x186c,
+  0xe480, 0x18ab,
+  0xe540, 0x1928,
+  0xe580, 0x1967,
+  0xe640, 0x19e4,
+  0xe680, 0x1a23,
+  0xe740, 0x1aa0,
+  0xe780, 0x1adf,
+  0xe840, 0x1b5c,
+  0xe880, 0x1b9b,
+  0xe940, 0x1c18,
+  0xe980, 0x1c57,
+  0xea40, 0x1cd4,
+  0xea80, 0x1d13,
+  0xeaa3, 0x205c,
+  0xeb40, 0x0279,
+  0xeb41, 0x1ecf,
+  0xeb43, 0x027c,
+  0xeb50, 0x1ed1,
+  0xeb52, 0x028b,
+  0xeb5b, 0x1ed3,
+  0xeb5e, 0x0297,
+  0xeb60, 0x1ed6,
+  0xeb65, 0x029e,
+  0xeb69, 0x1edb,
+  0xeb7b, 0x02b4,
+  0xeb80, 0x02b8,
+  0xeb81, 0x1eed,
+  0xeb82, 0x02ba,
+  0xebb8, 0x02e5,
+  0xebc8, 0x02ed,
+  0xebda, 0x02f4,
+  0xebf0, 0x0303,
+  0xebfc, 0x030b,
+  0xec4f, 0x030c,
+  0xec60, 0x0316,
+  0xec81, 0x0330,
+  0xec9f, 0x1eee,
+  0xeca0, 0x034b,
+  0xeca1, 0x1eef,
+  0xeca2, 0x034d,
+  0xeca3, 0x1ef0,
+  0xeca4, 0x034f,
+  0xeca5, 0x1ef1,
+  0xeca6, 0x0351,
+  0xeca7, 0x1ef2,
+  0xeca8, 0x0353,
+  0xecc1, 0x1ef3,
+  0xecc2, 0x036d,
+  0xece1, 0x1ef4,
+  0xece2, 0x038d,
+  0xece3, 0x1ef5,
+  0xece4, 0x038f,
+  0xece5, 0x1ef6,
+  0xece6, 0x0391,
+  0xecec, 0x1ef7,
+  0xeced, 0x0398,
+  0xed40, 0x1ef8,
+  0xed41, 0x039e,
+  0xed42, 0x1ef9,
+  0xed43, 0x03a0,
+  0xed44, 0x1efa,
+  0xed45, 0x03a2,
+  0xed46, 0x1efb,
+  0xed47, 0x03a4,
+  0xed48, 0x1efc,
+  0xed49, 0x03a6,
+  0xed62, 0x1efd,
+  0xed63, 0x03c0,
+  0xed80, 0x03dc,
+  0xed83, 0x1efe,
+  0xed84, 0x03e0,
+  0xed85, 0x1eff,
+  0xed86, 0x03e2,
+  0xed87, 0x1f00,
+  0xed88, 0x03e4,
+  0xed8e, 0x1f01,
+  0xed8f, 0x03eb,
+  0xed95, 0x1f02,
+  0xed9f, 0x03f3,
+  0xedbf, 0x040b,
+  0xee40, 0x1d83,
+  0xee5f, 0x1f04,
+  0xee6f, 0x1db1,
+  0xee80, 0x1f14,
+  0xee82, 0x1dba,
+  0xee90, 0x02fa,
+  0xee91, 0x02f9,
+  0xee92, 0x0301,
+  0xee93, 0x1dc8,
+  0xee9a, 0x0300,
+  0xee9b, 0x1dcf,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan1278HEnc16 = {
+static GfxFontEncoding16 japan1283pvRKSJHEnc16 = {
+  0,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
   { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
+    0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010,
+    0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018,
+    0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, 0x0020,
+    0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028,
+    0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030,
+    0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038,
+    0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040,
+    0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048,
+    0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+    0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+    0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0000,
+    0x0061, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
+    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
+    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
+    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
+    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
+    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
+    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan1278HMap2, 625
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0098, 0x00e4, 0x007c },
+  japan1283pvRKSJHMap2, 218
 };
 
-static Gushort japan1278RKSJHMap2[1252] = {
+static Gushort japan1290msRKSJHMap2[340] = {
   0x0000, 0x0000,
   0x8140, 0x0279,
   0x8180, 0x02b8,
+  0x81b8, 0x02e5,
+  0x81c8, 0x02ed,
+  0x81da, 0x02f4,
+  0x81f0, 0x0303,
+  0x81fc, 0x030b,
   0x824f, 0x030c,
   0x8260, 0x0316,
   0x8281, 0x0330,
@@ -1387,621 +6090,161 @@ static Gushort japan1278RKSJHMap2[1252] = {
   0x8440, 0x0423,
   0x8470, 0x0444,
   0x8480, 0x0453,
-  0x889f, 0x0465,
-  0x88a0, 0x1dd1,
-  0x88a1, 0x0467,
-  0x88a7, 0x204a,
-  0x88a8, 0x046e,
-  0x88b0, 0x1f19,
-  0x88b1, 0x1ca2,
-  0x88b2, 0x0478,
-  0x88b9, 0x1dd2,
-  0x88ba, 0x0480,
-  0x88ec, 0x1dd3,
-  0x88ed, 0x04b3,
-  0x88f1, 0x1dd4,
-  0x88f2, 0x04b8,
-  0x88fa, 0x1dd5,
-  0x88fb, 0x04c1,
-  0x8940, 0x04c3,
-  0x8949, 0x1dd6,
-  0x894a, 0x04cd,
-  0x8954, 0x1dd7,
-  0x8955, 0x04d8,
-  0x8958, 0x1dd8,
-  0x8959, 0x04dc,
-  0x895c, 0x1dda,
-  0x895d, 0x04e0,
-  0x8961, 0x1ddb,
-  0x8962, 0x04e5,
-  0x8980, 0x0502,
-  0x898b, 0x1ddc,
-  0x898c, 0x050e,
-  0x89a6, 0x1ddd,
-  0x89a7, 0x1cc9,
-  0x89a8, 0x1dde,
-  0x89a9, 0x052b,
-  0x89de, 0x1ddf,
-  0x89df, 0x0561,
-  0x89f8, 0x1de0,
-  0x89f9, 0x057b,
-  0x89fb, 0x1de1,
-  0x89fc, 0x057e,
-  0x8a40, 0x057f,
-  0x8a41, 0x1de2,
-  0x8a42, 0x0581,
-  0x8a61, 0x1961,
-  0x8a62, 0x05a1,
-  0x8a68, 0x139f,
-  0x8a69, 0x05a8,
-  0x8a80, 0x05be,
-  0x8a85, 0x1de3,
-  0x8a86, 0x05c4,
-  0x8a8b, 0x1de4,
-  0x8a8c, 0x05ca,
-  0x8a93, 0x1de5,
-  0x8a94, 0x05d2,
-  0x8a96, 0x1731,
-  0x8a97, 0x05d5,
-  0x8a9a, 0x1de6,
-  0x8a9b, 0x05d9,
-  0x8ac0, 0x1de7,
-  0x8ac1, 0x1572,
-  0x8ac2, 0x0600,
-  0x8acb, 0x1de8,
-  0x8acc, 0x060a,
-  0x8ad0, 0x1a20,
-  0x8ad1, 0x060f,
-  0x8ae3, 0x1de9,
-  0x8ae4, 0x0622,
-  0x8b40, 0x063b,
-  0x8b4a, 0x1dea,
-  0x8b4b, 0x0646,
-  0x8b5f, 0x1deb,
-  0x8b60, 0x065b,
-  0x8b80, 0x067a,
-  0x8ba0, 0x1dec,
-  0x8ba1, 0x069b,
-  0x8ba8, 0x1ded,
-  0x8ba9, 0x06a3,
-  0x8bc4, 0x1d32,
-  0x8bc5, 0x06bf,
-  0x8bcd, 0x1dee,
-  0x8bce, 0x06c8,
-  0x8beb, 0x1def,
-  0x8bec, 0x06e6,
-  0x8bf2, 0x1df0,
-  0x8bf3, 0x06ed,
-  0x8bf9, 0x1df1,
-  0x8bfa, 0x06f4,
-  0x8bfb, 0x1df2,
-  0x8bfc, 0x06f6,
-  0x8c40, 0x06f7,
-  0x8c43, 0x1df3,
-  0x8c44, 0x06fb,
-  0x8c56, 0x1df4,
-  0x8c57, 0x070e,
-  0x8c64, 0x1df5,
-  0x8c65, 0x071c,
-  0x8c6d, 0x1df6,
-  0x8c6e, 0x0725,
-  0x8c71, 0x1df7,
-  0x8c72, 0x0729,
-  0x8c74, 0x1df8,
-  0x8c75, 0x072c,
-  0x8c7a, 0x1c0d,
-  0x8c7b, 0x0732,
-  0x8c80, 0x0736,
-  0x8c84, 0x1df9,
-  0x8c85, 0x073b,
-  0x8c91, 0x1dfa,
-  0x8c92, 0x0748,
-  0x8c99, 0x1dfb,
-  0x8c9a, 0x0750,
-  0x8c9e, 0x1dfc,
-  0x8c9f, 0x0755,
-  0x8cb2, 0x1dfd,
-  0x8cb3, 0x0769,
-  0x8cbf, 0x1dfe,
-  0x8cc0, 0x0776,
+  0x849f, 0x1d37,
+  0x84a0, 0x1d39,
+  0x84a1, 0x1d43,
+  0x84a2, 0x1d47,
+  0x84a3, 0x1d4f,
+  0x84a4, 0x1d4b,
+  0x84a5, 0x1d53,
+  0x84a6, 0x1d63,
+  0x84a7, 0x1d5b,
+  0x84a8, 0x1d6b,
+  0x84a9, 0x1d73,
+  0x84aa, 0x1d38,
+  0x84ab, 0x1d3a,
+  0x84ac, 0x1d46,
+  0x84ad, 0x1d4a,
+  0x84ae, 0x1d52,
+  0x84af, 0x1d4e,
+  0x84b0, 0x1d5a,
+  0x84b1, 0x1d6a,
+  0x84b2, 0x1d62,
+  0x84b3, 0x1d72,
+  0x84b4, 0x1d82,
+  0x84b5, 0x1d57,
+  0x84b6, 0x1d66,
+  0x84b7, 0x1d5f,
+  0x84b8, 0x1d6e,
+  0x84b9, 0x1d76,
+  0x84ba, 0x1d54,
+  0x84bb, 0x1d67,
+  0x84bc, 0x1d5c,
+  0x84bd, 0x1d6f,
+  0x84be, 0x1d79,
+  0x8740, 0x1d83,
+  0x875f, 0x1da1,
+  0x8761, 0x1f66,
+  0x8762, 0x1da4,
+  0x8763, 0x1f68,
+  0x8764, 0x1da6,
+  0x8765, 0x1f6a,
+  0x8766, 0x1da8,
+  0x8768, 0x1f6c,
+  0x8769, 0x1dab,
+  0x876b, 0x1f6b,
+  0x876c, 0x1dae,
+  0x876e, 0x1f6f,
+  0x876f, 0x1db1,
+  0x877e, 0x2083,
+  0x8780, 0x1db8,
+  0x8784, 0x1f77,
+  0x8785, 0x1dbd,
+  0x8790, 0x02fa,
+  0x8791, 0x02f9,
+  0x8792, 0x0301,
+  0x8793, 0x1dc8,
+  0x879a, 0x0300,
+  0x879b, 0x1dcf,
+  0x889f, 0x0465,
+  0x8940, 0x04c3,
+  0x8980, 0x0502,
+  0x8a40, 0x057f,
+  0x8a80, 0x05be,
+  0x8b40, 0x063b,
+  0x8b80, 0x067a,
+  0x8c40, 0x06f7,
+  0x8c80, 0x0736,
   0x8d40, 0x07b3,
-  0x8d4a, 0x1dff,
-  0x8d4b, 0x07be,
-  0x8d56, 0x1e00,
-  0x8d57, 0x07ca,
-  0x8d61, 0x1e01,
-  0x8d62, 0x07d5,
-  0x8d7b, 0x16dd,
-  0x8d7c, 0x07ef,
   0x8d80, 0x07f2,
-  0x8d8d, 0x1e02,
-  0x8d8e, 0x0800,
-  0x8d94, 0x1e03,
-  0x8d95, 0x0807,
-  0x8d99, 0x1e04,
-  0x8d9a, 0x080c,
-  0x8dd1, 0x1e05,
-  0x8dd2, 0x0844,
-  0x8de5, 0x1e06,
-  0x8de6, 0x0858,
-  0x8df2, 0x1e07,
-  0x8df3, 0x0865,
   0x8e40, 0x086f,
-  0x8e46, 0x1e08,
-  0x8e47, 0x0876,
-  0x8e49, 0x1e09,
-  0x8e4a, 0x0879,
-  0x8e4b, 0x1e0a,
-  0x8e4c, 0x087b,
-  0x8e58, 0x1e0b,
-  0x8e59, 0x0888,
   0x8e80, 0x08ae,
-  0x8ec6, 0x1e0d,
-  0x8ec7, 0x1929,
-  0x8ec8, 0x08f6,
-  0x8ed5, 0x1e0e,
-  0x8ed6, 0x0904,
-  0x8edb, 0x1e0f,
-  0x8edd, 0x090b,
   0x8f40, 0x092b,
-  0x8f4a, 0x1e11,
-  0x8f4b, 0x0936,
-  0x8f55, 0x1e12,
-  0x8f56, 0x0941,
   0x8f80, 0x096a,
-  0x8f8c, 0x1e13,
-  0x8f8e, 0x0978,
-  0x8f92, 0x1e15,
-  0x8f94, 0x097e,
-  0x8fa3, 0x1e17,
-  0x8fa4, 0x098e,
-  0x8fb1, 0x1e18,
-  0x8fb2, 0x099c,
-  0x8fbd, 0x1e19,
-  0x8fbe, 0x09a8,
-  0x8fd3, 0x1e1a,
-  0x8fd4, 0x09be,
-  0x8fdd, 0x1e1b,
-  0x8fde, 0x09c8,
-  0x8fe2, 0x1e1c,
-  0x8fe3, 0x09cd,
   0x9040, 0x09e7,
-  0x9049, 0x1e1d,
-  0x904a, 0x09f1,
-  0x9078, 0x1e1e,
-  0x9079, 0x0a20,
-  0x9080, 0x1e1f,
-  0x9081, 0x0a27,
-  0x9089, 0x1e20,
-  0x908a, 0x0a30,
-  0x90a0, 0x1e21,
-  0x90a1, 0x0a47,
-  0x90c0, 0x1e22,
-  0x90c1, 0x0a67,
-  0x90e4, 0x1e23,
-  0x90e5, 0x0a8b,
-  0x90ef, 0x1e24,
-  0x90f1, 0x0a97,
-  0x90f7, 0x1e26,
-  0x90f9, 0x0a9f,
+  0x9080, 0x0a26,
   0x9140, 0x0aa3,
-  0x9146, 0x1e28,
-  0x9147, 0x1a6e,
-  0x9148, 0x0aab,
-  0x9158, 0x1e29,
-  0x9159, 0x0abc,
-  0x916b, 0x1e2a,
-  0x916c, 0x0acf,
-  0x916e, 0x1e2b,
-  0x916f, 0x0ad2,
-  0x917e, 0x1e2c,
   0x9180, 0x0ae2,
-  0x9189, 0x1e2d,
-  0x918a, 0x0aec,
-  0x91bb, 0x1e2e,
-  0x91bc, 0x0b1e,
-  0x91cb, 0x1e2f,
-  0x91cc, 0x0b2e,
-  0x91da, 0x1e30,
-  0x91db, 0x0b3d,
-  0x91e1, 0x1e31,
-  0x91e2, 0x0b44,
-  0x91ed, 0x1e32,
-  0x91ee, 0x0b50,
-  0x91f3, 0x1e33,
-  0x91f5, 0x0b57,
-  0x91fb, 0x1e35,
-  0x91fc, 0x0b5e,
   0x9240, 0x0b5f,
-  0x9246, 0x1e36,
-  0x9247, 0x0b66,
-  0x9248, 0x1e37,
-  0x924a, 0x0b69,
-  0x924c, 0x1e39,
-  0x924e, 0x0b6d,
-  0x925c, 0x1e3b,
-  0x925d, 0x0b7c,
   0x9280, 0x0b9e,
-  0x9290, 0x1e3c,
-  0x9291, 0x0baf,
-  0x9295, 0x1e3d,
-  0x9296, 0x0bb4,
-  0x929c, 0x1e3e,
-  0x929d, 0x0bbb,
-  0x92bb, 0x1e3f,
-  0x92bc, 0x0bda,
-  0x92c6, 0x1e40,
-  0x92c7, 0x0be5,
-  0x92c8, 0x1e41,
-  0x92c9, 0x0be7,
-  0x92cb, 0x1e42,
-  0x92cc, 0x0bea,
-  0x92cd, 0x1e43,
-  0x92ce, 0x0bec,
-  0x92d2, 0x204b,
-  0x92d3, 0x0bf1,
-  0x92d9, 0x11b5,
-  0x92da, 0x0bf8,
   0x9340, 0x0c1b,
-  0x9341, 0x1e44,
-  0x9342, 0x0c1d,
-  0x9346, 0x1e45,
-  0x9347, 0x0c22,
-  0x934d, 0x1e46,
-  0x934e, 0x0c29,
-  0x9355, 0x1e47,
-  0x9356, 0x0c31,
-  0x935e, 0x1e48,
-  0x935f, 0x0c3a,
-  0x9367, 0x1e49,
-  0x9368, 0x0c43,
-  0x936a, 0x1e4a,
-  0x936b, 0x0c46,
-  0x9370, 0x1e4b,
-  0x9372, 0x0c4d,
-  0x9376, 0x16df,
-  0x9377, 0x0c52,
   0x9380, 0x0c5a,
-  0x9384, 0x1e4d,
-  0x9385, 0x0c5f,
-  0x938e, 0x1450,
-  0x938f, 0x0c69,
-  0x9393, 0x1536,
-  0x9394, 0x0c6e,
-  0x9398, 0x1e4e,
-  0x9399, 0x0c73,
-  0x93bc, 0x1e4f,
-  0x93bd, 0x0c97,
-  0x93c0, 0x1e50,
-  0x93c1, 0x0c9b,
-  0x93d2, 0x1e51,
-  0x93d4, 0x0cae,
-  0x93d9, 0x1e53,
-  0x93db, 0x0cb5,
-  0x93df, 0x1e55,
-  0x93e0, 0x0cba,
-  0x93e4, 0x1e56,
-  0x93e6, 0x0cc0,
-  0x93e8, 0x1e58,
-  0x93e9, 0x0cc3,
-  0x93f4, 0x1aed,
-  0x93f5, 0x0ccf,
   0x9440, 0x0cd7,
-  0x9448, 0x1e59,
-  0x9449, 0x0ce0,
-  0x9458, 0x1e5a,
-  0x9459, 0x0cf0,
-  0x9476, 0x1e5b,
-  0x9477, 0x0d0e,
   0x9480, 0x0d16,
-  0x9487, 0x1e5c,
-  0x9488, 0x1989,
-  0x9489, 0x1e5d,
-  0x948a, 0x0d20,
-  0x948d, 0x1e5e,
-  0x948e, 0x0d24,
-  0x94a2, 0x1e5f,
-  0x94a3, 0x0d39,
-  0x94ac, 0x1e60,
-  0x94ad, 0x0d43,
-  0x94ae, 0x1e61,
-  0x94af, 0x0d45,
-  0x94d2, 0x1e62,
-  0x94d3, 0x0d69,
-  0x94e0, 0x1e63,
-  0x94e1, 0x0d77,
-  0x94f3, 0x1e64,
-  0x94f4, 0x0d8a,
   0x9540, 0x0d93,
-  0x9541, 0x1e65,
-  0x9543, 0x0d96,
-  0x954e, 0x1e67,
-  0x954f, 0x143b,
-  0x9550, 0x0da3,
-  0x9551, 0x1e68,
-  0x9552, 0x0da5,
-  0x9554, 0x1e69,
-  0x9555, 0x0da8,
-  0x955f, 0x1e6a,
-  0x9560, 0x0db3,
-  0x956d, 0x1e6b,
-  0x956e, 0x0dc1,
-  0x9570, 0x1e6c,
-  0x9571, 0x0dc4,
   0x9580, 0x0dd2,
-  0x95c1, 0x1e6d,
-  0x95c2, 0x0e14,
-  0x95cb, 0x1e6e,
-  0x95cc, 0x0e1e,
-  0x95d8, 0x1e6f,
-  0x95d9, 0x0e2b,
-  0x95f7, 0x1e70,
-  0x95f8, 0x0e4a,
   0x9640, 0x0e4f,
-  0x9641, 0x1e71,
-  0x9642, 0x0e51,
-  0x9648, 0x1e72,
-  0x9649, 0x0e58,
-  0x966a, 0x1e73,
-  0x966b, 0x0e7a,
-  0x9680, 0x0e8e,
-  0x968a, 0x1d33,
-  0x968b, 0x0e99,
-  0x9690, 0x1e74,
-  0x9691, 0x0e9f,
-  0x9698, 0x1f2c,
-  0x9699, 0x102f,
-  0x969a, 0x0ea8,
-  0x96cb, 0x1e75,
-  0x96cc, 0x0eda,
-  0x96d7, 0x1e76,
-  0x96d8, 0x0ee6,
-  0x96dd, 0x1e77,
-  0x96de, 0x0eec,
-  0x96e0, 0x1e78,
-  0x96e1, 0x0eef,
-  0x96f7, 0x1935,
-  0x96f8, 0x1e79,
-  0x96f9, 0x0f07,
-  0x96fa, 0x1e7a,
-  0x96fb, 0x0f09,
-  0x96fc, 0x1e7b,
+  0x9680, 0x0e8e,
   0x9740, 0x0f0b,
-  0x9751, 0x1e7c,
-  0x9752, 0x0f1d,
-  0x976f, 0x1e7d,
-  0x9770, 0x0f3b,
-  0x9773, 0x1e7e,
-  0x9774, 0x0f3f,
-  0x9779, 0x1d34,
-  0x977a, 0x0f45,
   0x9780, 0x0f4a,
-  0x9789, 0x1e7f,
-  0x978a, 0x0f54,
-  0x97c9, 0x1e80,
-  0x97ca, 0x0f94,
-  0x97f8, 0x1e81,
-  0x97fa, 0x0fc4,
-  0x9840, 0x1e83,
-  0x9841, 0x0fc8,
-  0x9850, 0x1e84,
-  0x9851, 0x0fd8,
-  0x9855, 0x1777,
-  0x9856, 0x0fdd,
-  0x9858, 0x1e85,
-  0x9859, 0x0fe0,
+  0x9840, 0x0fc7,
   0x989f, 0x0ffa,
-  0x98d4, 0x0ea7,
-  0x98d5, 0x1030,
   0x9940, 0x1058,
-  0x995c, 0x1e86,
-  0x995d, 0x1075,
-  0x9966, 0x1e87,
-  0x9967, 0x107f,
-  0x996a, 0x1e88,
-  0x996b, 0x1083,
-  0x996c, 0x1e89,
-  0x996d, 0x1085,
   0x9980, 0x1097,
   0x9a40, 0x1114,
-  0x9a4f, 0x1e8a,
-  0x9a50, 0x1124,
-  0x9a59, 0x1e8b,
-  0x9a5a, 0x112e,
-  0x9a7d, 0x1e8d,
-  0x9a7e, 0x1152,
   0x9a80, 0x1153,
-  0x9a8b, 0x1e8e,
-  0x9a8c, 0x115f,
-  0x9ac2, 0x1e8f,
-  0x9ac3, 0x1196,
-  0x9ae2, 0x0bf7,
-  0x9ae3, 0x11b6,
   0x9b40, 0x11d0,
-  0x9b5c, 0x1e90,
-  0x9b5d, 0x11ed,
   0x9b80, 0x120f,
-  0x9b83, 0x1e91,
-  0x9b84, 0x1213,
-  0x9ba0, 0x1e92,
-  0x9ba1, 0x1230,
   0x9c40, 0x128c,
   0x9c80, 0x12cb,
-  0x9ca2, 0x1e94,
-  0x9ca3, 0x12ee,
   0x9d40, 0x1348,
-  0x9d80, 0x1e95,
-  0x9d81, 0x1388,
-  0x9d8c, 0x1e96,
-  0x9d8d, 0x1394,
-  0x9d98, 0x05a7,
-  0x9d99, 0x13a0,
-  0x9db7, 0x1e97,
-  0x9db8, 0x13bf,
-  0x9dcb, 0x1e98,
-  0x9dcc, 0x13d3,
+  0x9d80, 0x1387,
   0x9e40, 0x1404,
-  0x9e64, 0x1e99,
-  0x9e65, 0x1429,
-  0x9e69, 0x1e9a,
-  0x9e6a, 0x142e,
-  0x9e77, 0x0da2,
-  0x9e78, 0x143c,
   0x9e80, 0x1443,
-  0x9e8b, 0x1e9b,
-  0x9e8c, 0x144f,
-  0x9e8d, 0x0c68,
-  0x9e8e, 0x1451,
-  0x9e94, 0x1e9c,
-  0x9e95, 0x1458,
   0x9f40, 0x14c0,
   0x9f80, 0x14ff,
-  0x9fb7, 0x0c6d,
-  0x9fb8, 0x1537,
-  0x9fce, 0x1e9d,
-  0x9fcf, 0x154e,
-  0x9ff3, 0x05ff,
-  0x9ff4, 0x1573,
   0xe040, 0x157c,
   0xe080, 0x15bb,
-  0xe0a4, 0x1e9f,
-  0xe0a5, 0x15e0,
-  0xe0dd, 0x1ea0,
-  0xe0de, 0x1619,
-  0xe0f4, 0x1d35,
-  0xe0f5, 0x1630,
   0xe140, 0x1638,
-  0xe14a, 0x1ea1,
-  0xe14b, 0x1643,
-  0xe14f, 0x1ea2,
-  0xe151, 0x1649,
   0xe180, 0x1677,
-  0xe1a9, 0x1ea4,
-  0xe1aa, 0x16a1,
-  0xe1e6, 0x07ee,
-  0xe1e7, 0x16de,
-  0xe1e8, 0x0c51,
-  0xe1e9, 0x16e0,
-  0xe1ed, 0x1ea5,
-  0xe1ee, 0x16e5,
   0xe240, 0x16f4,
-  0xe269, 0x1ea6,
-  0xe26a, 0x171e,
-  0xe273, 0x1ea7,
-  0xe274, 0x1728,
-  0xe27d, 0x05d4,
-  0xe27e, 0x1732,
   0xe280, 0x1733,
-  0xe2b7, 0x1ea8,
-  0xe2b8, 0x176b,
-  0xe2c4, 0x0fdc,
-  0xe2c5, 0x1778,
-  0xe2e2, 0x1ea9,
-  0xe2e3, 0x1796,
-  0xe2ec, 0x1eaa,
-  0xe2ed, 0x17a0,
   0xe340, 0x17b0,
-  0xe358, 0x1eab,
-  0xe359, 0x17c9,
-  0xe35a, 0x1eac,
-  0xe35b, 0x17cb,
-  0xe365, 0x1ead,
-  0xe366, 0x17d6,
   0xe380, 0x17ef,
-  0xe3c4, 0x1eae,
-  0xe3c5, 0x1834,
   0xe440, 0x186c,
   0xe480, 0x18ab,
-  0xe484, 0x1eaf,
-  0xe485, 0x18b0,
-  0xe489, 0x1eb0,
-  0xe48a, 0x18b5,
-  0xe492, 0x1eb1,
-  0xe493, 0x18be,
-  0xe4b2, 0x1eb2,
-  0xe4b3, 0x18de,
-  0xe4b9, 0x1eb3,
-  0xe4ba, 0x18e5,
-  0xe4f2, 0x1eb4,
-  0xe4f3, 0x191e,
   0xe540, 0x1928,
-  0xe541, 0x08f5,
-  0xe542, 0x192a,
-  0xe54d, 0x0f05,
-  0xe54e, 0x1936,
-  0xe579, 0x05a0,
-  0xe57a, 0x1962,
   0xe580, 0x1967,
-  0xe5a2, 0x0d1e,
-  0xe5a3, 0x198a,
-  0xe5a5, 0x1eb6,
-  0xe5a6, 0x198d,
-  0xe5bb, 0x1eb7,
-  0xe5bc, 0x19a3,
-  0xe5ed, 0x1eb8,
-  0xe5ee, 0x19d5,
   0xe640, 0x19e4,
-  0xe651, 0x1eb9,
-  0xe652, 0x19f6,
-  0xe67c, 0x060e,
-  0xe67d, 0x1a21,
   0xe680, 0x1a23,
-  0xe686, 0x1eba,
-  0xe687, 0x1a2a,
-  0xe696, 0x1ebb,
-  0xe697, 0x1a3a,
-  0xe6cb, 0x0aaa,
-  0xe6cc, 0x1a6f,
-  0xe6e7, 0x1ebc,
-  0xe6e8, 0x1a8b,
-  0xe6f2, 0x1ebd,
-  0xe6f3, 0x1a96,
   0xe740, 0x1aa0,
-  0xe76d, 0x1ebe,
-  0xe76e, 0x1ace,
   0xe780, 0x1adf,
-  0xe78c, 0x1ebf,
-  0xe78d, 0x1aec,
-  0xe78e, 0x1ec0,
-  0xe78f, 0x1aee,
-  0xe7a7, 0x1ec1,
-  0xe7a8, 0x1b07,
-  0xe7bb, 0x1ec2,
-  0xe7bc, 0x1b1b,
-  0xe7d5, 0x1ec3,
-  0xe7d6, 0x1b35,
   0xe840, 0x1b5c,
   0xe880, 0x1b9b,
-  0xe8c3, 0x1ec6,
-  0xe8c4, 0x1bdf,
-  0xe8cf, 0x1ec7,
-  0xe8d0, 0x1beb,
-  0xe8d5, 0x1ec8,
-  0xe8d6, 0x1bf1,
-  0xe8f2, 0x0731,
-  0xe8f3, 0x1ec9,
-  0xe8f4, 0x1c0f,
   0xe940, 0x1c18,
   0xe980, 0x1c57,
-  0xe9ab, 0x1eca,
-  0xe9ac, 0x1c83,
-  0xe9ba, 0x1ecb,
-  0xe9bb, 0x1c92,
-  0xe9cb, 0x0477,
-  0xe9cc, 0x1ecc,
-  0xe9cd, 0x1ca4,
-  0xe9f2, 0x0529,
-  0xe9f3, 0x1cca,
   0xea40, 0x1cd4,
-  0xea70, 0x1ecd,
-  0xea71, 0x1d05,
   0xea80, 0x1d13,
-  0xea9d, 0x1ece,
-  0xea9e, 0x1d31,
+  0xeaa3, 0x205c,
+  0xed40, 0x20a7,
+  0xed80, 0x20e6,
+  0xedb4, 0x07c9,
+  0xedb5, 0x211a,
+  0xee40, 0x2162,
+  0xee80, 0x21a1,
+  0xeeef, 0x1f9c,
+  0xeef9, 0x02ef,
+  0xeefa, 0x1f45,
+  0xfa40, 0x1f9c,
+  0xfa4a, 0x1d97,
+  0xfa54, 0x02ef,
+  0xfa55, 0x1f45,
+  0xfa58, 0x1dc2,
+  0xfa59, 0x1dba,
+  0xfa5a, 0x1f77,
+  0xfa5b, 0x0300,
+  0xfa5c, 0x20a7,
+  0xfa80, 0x20ca,
+  0xfad0, 0x07c9,
+  0xfad1, 0x211a,
+  0xfb40, 0x2146,
+  0xfb80, 0x2185,
+  0xfc40, 0x2202,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan1278RKSJHEnc16 = {
+static GfxFontEncoding16 japan1290msRKSJHEnc16 = {
+  0,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -2033,7 +6276,7 @@ static GfxFontEncoding16 japan1278RKSJHEnc16 = {
     0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
     0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
     0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
-    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0277, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -2050,10 +6293,10 @@ static GfxFontEncoding16 japan1278RKSJHEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan1278RKSJHMap2, 626
+  japan1290msRKSJHMap2, 170
 };
 
-static Gushort japan1278msRKSJHMap2[1424] = {
+static Gushort japan1290msRKSJVMap2[496] = {
   0x0000, 0x0000,
   0x8140, 0x0279,
   0x8180, 0x02b8,
@@ -2118,628 +6361,86 @@ static Gushort japan1278msRKSJHMap2[1424] = {
   0x876b, 0x1f6b,
   0x876c, 0x1dae,
   0x876e, 0x1f6f,
-  0x876f, 0x1db1,
-  0x877e, 0x2083,
-  0x8780, 0x1db8,
-  0x8784, 0x1f77,
-  0x8785, 0x1dbd,
-  0x8790, 0x02fa,
-  0x8791, 0x02f9,
-  0x8792, 0x0301,
-  0x8793, 0x1dc8,
-  0x879a, 0x0300,
-  0x879b, 0x1dcf,
-  0x889f, 0x0465,
-  0x88a0, 0x1dd1,
-  0x88a1, 0x0467,
-  0x88a7, 0x204a,
-  0x88a8, 0x046e,
-  0x88b0, 0x1f19,
-  0x88b1, 0x1ca2,
-  0x88b2, 0x0478,
-  0x88b9, 0x1dd2,
-  0x88ba, 0x0480,
-  0x88ec, 0x1dd3,
-  0x88ed, 0x04b3,
-  0x88f1, 0x1dd4,
-  0x88f2, 0x04b8,
-  0x88fa, 0x1dd5,
-  0x88fb, 0x04c1,
+  0x876f, 0x1db1,
+  0x877e, 0x2083,
+  0x8780, 0x1db8,
+  0x8784, 0x1f77,
+  0x8785, 0x1dbd,
+  0x8790, 0x02fa,
+  0x8791, 0x02f9,
+  0x8792, 0x0301,
+  0x8793, 0x1dc8,
+  0x879a, 0x0300,
+  0x879b, 0x1dcf,
+  0x889f, 0x0465,
   0x8940, 0x04c3,
-  0x8949, 0x1dd6,
-  0x894a, 0x04cd,
-  0x8954, 0x1dd7,
-  0x8955, 0x04d8,
-  0x8958, 0x1dd8,
-  0x8959, 0x04dc,
-  0x895c, 0x1dda,
-  0x895d, 0x04e0,
-  0x8961, 0x1ddb,
-  0x8962, 0x04e5,
   0x8980, 0x0502,
-  0x898b, 0x1ddc,
-  0x898c, 0x050e,
-  0x89a6, 0x1ddd,
-  0x89a7, 0x1cc9,
-  0x89a8, 0x1dde,
-  0x89a9, 0x052b,
-  0x89de, 0x1ddf,
-  0x89df, 0x0561,
-  0x89f8, 0x1de0,
-  0x89f9, 0x057b,
-  0x89fb, 0x1de1,
-  0x89fc, 0x057e,
   0x8a40, 0x057f,
-  0x8a41, 0x1de2,
-  0x8a42, 0x0581,
-  0x8a61, 0x1961,
-  0x8a62, 0x05a1,
-  0x8a68, 0x139f,
-  0x8a69, 0x05a8,
   0x8a80, 0x05be,
-  0x8a85, 0x1de3,
-  0x8a86, 0x05c4,
-  0x8a8b, 0x1de4,
-  0x8a8c, 0x05ca,
-  0x8a93, 0x1de5,
-  0x8a94, 0x05d2,
-  0x8a96, 0x1731,
-  0x8a97, 0x05d5,
-  0x8a9a, 0x1de6,
-  0x8a9b, 0x05d9,
-  0x8ac0, 0x1de7,
-  0x8ac1, 0x1572,
-  0x8ac2, 0x0600,
-  0x8acb, 0x1de8,
-  0x8acc, 0x060a,
-  0x8ad0, 0x1a20,
-  0x8ad1, 0x060f,
-  0x8ae3, 0x1de9,
-  0x8ae4, 0x0622,
   0x8b40, 0x063b,
-  0x8b4a, 0x1dea,
-  0x8b4b, 0x0646,
-  0x8b5f, 0x1deb,
-  0x8b60, 0x065b,
   0x8b80, 0x067a,
-  0x8ba0, 0x1dec,
-  0x8ba1, 0x069b,
-  0x8ba8, 0x1ded,
-  0x8ba9, 0x06a3,
-  0x8bc4, 0x1d32,
-  0x8bc5, 0x06bf,
-  0x8bcd, 0x1dee,
-  0x8bce, 0x06c8,
-  0x8beb, 0x1def,
-  0x8bec, 0x06e6,
-  0x8bf2, 0x1df0,
-  0x8bf3, 0x06ed,
-  0x8bf9, 0x1df1,
-  0x8bfa, 0x06f4,
-  0x8bfb, 0x1df2,
-  0x8bfc, 0x06f6,
   0x8c40, 0x06f7,
-  0x8c43, 0x1df3,
-  0x8c44, 0x06fb,
-  0x8c56, 0x1df4,
-  0x8c57, 0x070e,
-  0x8c64, 0x1df5,
-  0x8c65, 0x071c,
-  0x8c6d, 0x1df6,
-  0x8c6e, 0x0725,
-  0x8c71, 0x1df7,
-  0x8c72, 0x0729,
-  0x8c74, 0x1df8,
-  0x8c75, 0x072c,
-  0x8c7a, 0x1c0d,
-  0x8c7b, 0x0732,
   0x8c80, 0x0736,
-  0x8c84, 0x1df9,
-  0x8c85, 0x073b,
-  0x8c91, 0x1dfa,
-  0x8c92, 0x0748,
-  0x8c99, 0x1dfb,
-  0x8c9a, 0x0750,
-  0x8c9e, 0x1dfc,
-  0x8c9f, 0x0755,
-  0x8cb2, 0x1dfd,
-  0x8cb3, 0x0769,
-  0x8cbf, 0x1dfe,
-  0x8cc0, 0x0776,
   0x8d40, 0x07b3,
-  0x8d4a, 0x1dff,
-  0x8d4b, 0x07be,
-  0x8d56, 0x1e00,
-  0x8d57, 0x07ca,
-  0x8d61, 0x1e01,
-  0x8d62, 0x07d5,
-  0x8d7b, 0x16dd,
-  0x8d7c, 0x07ef,
   0x8d80, 0x07f2,
-  0x8d8d, 0x1e02,
-  0x8d8e, 0x0800,
-  0x8d94, 0x1e03,
-  0x8d95, 0x0807,
-  0x8d99, 0x1e04,
-  0x8d9a, 0x080c,
-  0x8dd1, 0x1e05,
-  0x8dd2, 0x0844,
-  0x8de5, 0x1e06,
-  0x8de6, 0x0858,
-  0x8df2, 0x1e07,
-  0x8df3, 0x0865,
   0x8e40, 0x086f,
-  0x8e46, 0x1e08,
-  0x8e47, 0x0876,
-  0x8e49, 0x1e09,
-  0x8e4a, 0x0879,
-  0x8e4b, 0x1e0a,
-  0x8e4c, 0x087b,
-  0x8e58, 0x1e0b,
-  0x8e59, 0x0888,
   0x8e80, 0x08ae,
-  0x8ec6, 0x1e0d,
-  0x8ec7, 0x1929,
-  0x8ec8, 0x08f6,
-  0x8ed5, 0x1e0e,
-  0x8ed6, 0x0904,
-  0x8edb, 0x1e0f,
-  0x8edd, 0x090b,
   0x8f40, 0x092b,
-  0x8f4a, 0x1e11,
-  0x8f4b, 0x0936,
-  0x8f55, 0x1e12,
-  0x8f56, 0x0941,
   0x8f80, 0x096a,
-  0x8f8c, 0x1e13,
-  0x8f8e, 0x0978,
-  0x8f92, 0x1e15,
-  0x8f94, 0x097e,
-  0x8fa3, 0x1e17,
-  0x8fa4, 0x098e,
-  0x8fb1, 0x1e18,
-  0x8fb2, 0x099c,
-  0x8fbd, 0x1e19,
-  0x8fbe, 0x09a8,
-  0x8fd3, 0x1e1a,
-  0x8fd4, 0x09be,
-  0x8fdd, 0x1e1b,
-  0x8fde, 0x09c8,
-  0x8fe2, 0x1e1c,
-  0x8fe3, 0x09cd,
   0x9040, 0x09e7,
-  0x9049, 0x1e1d,
-  0x904a, 0x09f1,
-  0x9078, 0x1e1e,
-  0x9079, 0x0a20,
-  0x9080, 0x1e1f,
-  0x9081, 0x0a27,
-  0x9089, 0x1e20,
-  0x908a, 0x0a30,
-  0x90a0, 0x1e21,
-  0x90a1, 0x0a47,
-  0x90c0, 0x1e22,
-  0x90c1, 0x0a67,
-  0x90e4, 0x1e23,
-  0x90e5, 0x0a8b,
-  0x90ef, 0x1e24,
-  0x90f1, 0x0a97,
-  0x90f7, 0x1e26,
-  0x90f9, 0x0a9f,
-  0x9140, 0x0aa3,
-  0x9146, 0x1e28,
-  0x9147, 0x1a6e,
-  0x9148, 0x0aab,
-  0x9158, 0x1e29,
-  0x9159, 0x0abc,
-  0x916b, 0x1e2a,
-  0x916c, 0x0acf,
-  0x916e, 0x1e2b,
-  0x916f, 0x0ad2,
-  0x917e, 0x1e2c,
-  0x9180, 0x0ae2,
-  0x9189, 0x1e2d,
-  0x918a, 0x0aec,
-  0x91bb, 0x1e2e,
-  0x91bc, 0x0b1e,
-  0x91cb, 0x1e2f,
-  0x91cc, 0x0b2e,
-  0x91da, 0x1e30,
-  0x91db, 0x0b3d,
-  0x91e1, 0x1e31,
-  0x91e2, 0x0b44,
-  0x91ed, 0x1e32,
-  0x91ee, 0x0b50,
-  0x91f3, 0x1e33,
-  0x91f5, 0x0b57,
-  0x91fb, 0x1e35,
-  0x91fc, 0x0b5e,
-  0x9240, 0x0b5f,
-  0x9246, 0x1e36,
-  0x9247, 0x0b66,
-  0x9248, 0x1e37,
-  0x924a, 0x0b69,
-  0x924c, 0x1e39,
-  0x924e, 0x0b6d,
-  0x925c, 0x1e3b,
-  0x925d, 0x0b7c,
-  0x9280, 0x0b9e,
-  0x9290, 0x1e3c,
-  0x9291, 0x0baf,
-  0x9295, 0x1e3d,
-  0x9296, 0x0bb4,
-  0x929c, 0x1e3e,
-  0x929d, 0x0bbb,
-  0x92bb, 0x1e3f,
-  0x92bc, 0x0bda,
-  0x92c6, 0x1e40,
-  0x92c7, 0x0be5,
-  0x92c8, 0x1e41,
-  0x92c9, 0x0be7,
-  0x92cb, 0x1e42,
-  0x92cc, 0x0bea,
-  0x92cd, 0x1e43,
-  0x92ce, 0x0bec,
-  0x92d2, 0x204b,
-  0x92d3, 0x0bf1,
-  0x92d9, 0x11b5,
-  0x92da, 0x0bf8,
-  0x9340, 0x0c1b,
-  0x9341, 0x1e44,
-  0x9342, 0x0c1d,
-  0x9346, 0x1e45,
-  0x9347, 0x0c22,
-  0x934d, 0x1e46,
-  0x934e, 0x0c29,
-  0x9355, 0x1e47,
-  0x9356, 0x0c31,
-  0x935e, 0x1e48,
-  0x935f, 0x0c3a,
-  0x9367, 0x1e49,
-  0x9368, 0x0c43,
-  0x936a, 0x1e4a,
-  0x936b, 0x0c46,
-  0x9370, 0x1e4b,
-  0x9372, 0x0c4d,
-  0x9376, 0x16df,
-  0x9377, 0x0c52,
+  0x9080, 0x0a26,
+  0x9140, 0x0aa3,
+  0x9180, 0x0ae2,
+  0x9240, 0x0b5f,
+  0x9280, 0x0b9e,
+  0x9340, 0x0c1b,
   0x9380, 0x0c5a,
-  0x9384, 0x1e4d,
-  0x9385, 0x0c5f,
-  0x938e, 0x1450,
-  0x938f, 0x0c69,
-  0x9393, 0x1536,
-  0x9394, 0x0c6e,
-  0x9398, 0x1e4e,
-  0x9399, 0x0c73,
-  0x93bc, 0x1e4f,
-  0x93bd, 0x0c97,
-  0x93c0, 0x1e50,
-  0x93c1, 0x0c9b,
-  0x93d2, 0x1e51,
-  0x93d4, 0x0cae,
-  0x93d9, 0x1e53,
-  0x93db, 0x0cb5,
-  0x93df, 0x1e55,
-  0x93e0, 0x0cba,
-  0x93e4, 0x1e56,
-  0x93e6, 0x0cc0,
-  0x93e8, 0x1e58,
-  0x93e9, 0x0cc3,
-  0x93f4, 0x1aed,
-  0x93f5, 0x0ccf,
   0x9440, 0x0cd7,
-  0x9448, 0x1e59,
-  0x9449, 0x0ce0,
-  0x9458, 0x1e5a,
-  0x9459, 0x0cf0,
-  0x9476, 0x1e5b,
-  0x9477, 0x0d0e,
   0x9480, 0x0d16,
-  0x9487, 0x1e5c,
-  0x9488, 0x1989,
-  0x9489, 0x1e5d,
-  0x948a, 0x0d20,
-  0x948d, 0x1e5e,
-  0x948e, 0x0d24,
-  0x94a2, 0x1e5f,
-  0x94a3, 0x0d39,
-  0x94ac, 0x1e60,
-  0x94ad, 0x0d43,
-  0x94ae, 0x1e61,
-  0x94af, 0x0d45,
-  0x94d2, 0x1e62,
-  0x94d3, 0x0d69,
-  0x94e0, 0x1e63,
-  0x94e1, 0x0d77,
-  0x94f3, 0x1e64,
-  0x94f4, 0x0d8a,
   0x9540, 0x0d93,
-  0x9541, 0x1e65,
-  0x9543, 0x0d96,
-  0x954e, 0x1e67,
-  0x954f, 0x143b,
-  0x9550, 0x0da3,
-  0x9551, 0x1e68,
-  0x9552, 0x0da5,
-  0x9554, 0x1e69,
-  0x9555, 0x0da8,
-  0x955f, 0x1e6a,
-  0x9560, 0x0db3,
-  0x956d, 0x1e6b,
-  0x956e, 0x0dc1,
-  0x9570, 0x1e6c,
-  0x9571, 0x0dc4,
   0x9580, 0x0dd2,
-  0x95c1, 0x1e6d,
-  0x95c2, 0x0e14,
-  0x95cb, 0x1e6e,
-  0x95cc, 0x0e1e,
-  0x95d8, 0x1e6f,
-  0x95d9, 0x0e2b,
-  0x95f7, 0x1e70,
-  0x95f8, 0x0e4a,
   0x9640, 0x0e4f,
-  0x9641, 0x1e71,
-  0x9642, 0x0e51,
-  0x9648, 0x1e72,
-  0x9649, 0x0e58,
-  0x966a, 0x1e73,
-  0x966b, 0x0e7a,
   0x9680, 0x0e8e,
-  0x968a, 0x1d33,
-  0x968b, 0x0e99,
-  0x9690, 0x1e74,
-  0x9691, 0x0e9f,
-  0x9698, 0x1f2c,
-  0x9699, 0x102f,
-  0x969a, 0x0ea8,
-  0x96cb, 0x1e75,
-  0x96cc, 0x0eda,
-  0x96d7, 0x1e76,
-  0x96d8, 0x0ee6,
-  0x96dd, 0x1e77,
-  0x96de, 0x0eec,
-  0x96e0, 0x1e78,
-  0x96e1, 0x0eef,
-  0x96f7, 0x1935,
-  0x96f8, 0x1e79,
-  0x96f9, 0x0f07,
-  0x96fa, 0x1e7a,
-  0x96fb, 0x0f09,
-  0x96fc, 0x1e7b,
   0x9740, 0x0f0b,
-  0x9751, 0x1e7c,
-  0x9752, 0x0f1d,
-  0x976f, 0x1e7d,
-  0x9770, 0x0f3b,
-  0x9773, 0x1e7e,
-  0x9774, 0x0f3f,
-  0x9779, 0x1d34,
-  0x977a, 0x0f45,
   0x9780, 0x0f4a,
-  0x9789, 0x1e7f,
-  0x978a, 0x0f54,
-  0x97c9, 0x1e80,
-  0x97ca, 0x0f94,
-  0x97f8, 0x1e81,
-  0x97fa, 0x0fc4,
-  0x9840, 0x1e83,
-  0x9841, 0x0fc8,
-  0x9850, 0x1e84,
-  0x9851, 0x0fd8,
-  0x9855, 0x1777,
-  0x9856, 0x0fdd,
-  0x9858, 0x1e85,
-  0x9859, 0x0fe0,
+  0x9840, 0x0fc7,
   0x989f, 0x0ffa,
-  0x98d4, 0x0ea7,
-  0x98d5, 0x1030,
   0x9940, 0x1058,
-  0x995c, 0x1e86,
-  0x995d, 0x1075,
-  0x9966, 0x1e87,
-  0x9967, 0x107f,
-  0x996a, 0x1e88,
-  0x996b, 0x1083,
-  0x996c, 0x1e89,
-  0x996d, 0x1085,
   0x9980, 0x1097,
   0x9a40, 0x1114,
-  0x9a4f, 0x1e8a,
-  0x9a50, 0x1124,
-  0x9a59, 0x1e8b,
-  0x9a5a, 0x112e,
-  0x9a7d, 0x1e8d,
-  0x9a7e, 0x1152,
   0x9a80, 0x1153,
-  0x9a8b, 0x1e8e,
-  0x9a8c, 0x115f,
-  0x9ac2, 0x1e8f,
-  0x9ac3, 0x1196,
-  0x9ae2, 0x0bf7,
-  0x9ae3, 0x11b6,
   0x9b40, 0x11d0,
-  0x9b5c, 0x1e90,
-  0x9b5d, 0x11ed,
   0x9b80, 0x120f,
-  0x9b83, 0x1e91,
-  0x9b84, 0x1213,
-  0x9ba0, 0x1e92,
-  0x9ba1, 0x1230,
   0x9c40, 0x128c,
   0x9c80, 0x12cb,
-  0x9ca2, 0x1e94,
-  0x9ca3, 0x12ee,
   0x9d40, 0x1348,
-  0x9d80, 0x1e95,
-  0x9d81, 0x1388,
-  0x9d8c, 0x1e96,
-  0x9d8d, 0x1394,
-  0x9d98, 0x05a7,
-  0x9d99, 0x13a0,
-  0x9db7, 0x1e97,
-  0x9db8, 0x13bf,
-  0x9dcb, 0x1e98,
-  0x9dcc, 0x13d3,
+  0x9d80, 0x1387,
   0x9e40, 0x1404,
-  0x9e64, 0x1e99,
-  0x9e65, 0x1429,
-  0x9e69, 0x1e9a,
-  0x9e6a, 0x142e,
-  0x9e77, 0x0da2,
-  0x9e78, 0x143c,
   0x9e80, 0x1443,
-  0x9e8b, 0x1e9b,
-  0x9e8c, 0x144f,
-  0x9e8d, 0x0c68,
-  0x9e8e, 0x1451,
-  0x9e94, 0x1e9c,
-  0x9e95, 0x1458,
   0x9f40, 0x14c0,
   0x9f80, 0x14ff,
-  0x9fb7, 0x0c6d,
-  0x9fb8, 0x1537,
-  0x9fce, 0x1e9d,
-  0x9fcf, 0x154e,
-  0x9ff3, 0x05ff,
-  0x9ff4, 0x1573,
   0xe040, 0x157c,
   0xe080, 0x15bb,
-  0xe0a4, 0x1e9f,
-  0xe0a5, 0x15e0,
-  0xe0dd, 0x1ea0,
-  0xe0de, 0x1619,
-  0xe0f4, 0x1d35,
-  0xe0f5, 0x1630,
   0xe140, 0x1638,
-  0xe14a, 0x1ea1,
-  0xe14b, 0x1643,
-  0xe14f, 0x1ea2,
-  0xe151, 0x1649,
   0xe180, 0x1677,
-  0xe1a9, 0x1ea4,
-  0xe1aa, 0x16a1,
-  0xe1e6, 0x07ee,
-  0xe1e7, 0x16de,
-  0xe1e8, 0x0c51,
-  0xe1e9, 0x16e0,
-  0xe1ed, 0x1ea5,
-  0xe1ee, 0x16e5,
   0xe240, 0x16f4,
-  0xe269, 0x1ea6,
-  0xe26a, 0x171e,
-  0xe273, 0x1ea7,
-  0xe274, 0x1728,
-  0xe27d, 0x05d4,
-  0xe27e, 0x1732,
   0xe280, 0x1733,
-  0xe2b7, 0x1ea8,
-  0xe2b8, 0x176b,
-  0xe2c4, 0x0fdc,
-  0xe2c5, 0x1778,
-  0xe2e2, 0x1ea9,
-  0xe2e3, 0x1796,
-  0xe2ec, 0x1eaa,
-  0xe2ed, 0x17a0,
   0xe340, 0x17b0,
-  0xe358, 0x1eab,
-  0xe359, 0x17c9,
-  0xe35a, 0x1eac,
-  0xe35b, 0x17cb,
-  0xe365, 0x1ead,
-  0xe366, 0x17d6,
-  0xe380, 0x17ef,
-  0xe3c4, 0x1eae,
-  0xe3c5, 0x1834,
-  0xe440, 0x186c,
-  0xe480, 0x18ab,
-  0xe484, 0x1eaf,
-  0xe485, 0x18b0,
-  0xe489, 0x1eb0,
-  0xe48a, 0x18b5,
-  0xe492, 0x1eb1,
-  0xe493, 0x18be,
-  0xe4b2, 0x1eb2,
-  0xe4b3, 0x18de,
-  0xe4b9, 0x1eb3,
-  0xe4ba, 0x18e5,
-  0xe4f2, 0x1eb4,
-  0xe4f3, 0x191e,
-  0xe540, 0x1928,
-  0xe541, 0x08f5,
-  0xe542, 0x192a,
-  0xe54d, 0x0f05,
-  0xe54e, 0x1936,
-  0xe579, 0x05a0,
-  0xe57a, 0x1962,
-  0xe580, 0x1967,
-  0xe5a2, 0x0d1e,
-  0xe5a3, 0x198a,
-  0xe5a5, 0x1eb6,
-  0xe5a6, 0x198d,
-  0xe5bb, 0x1eb7,
-  0xe5bc, 0x19a3,
-  0xe5ed, 0x1eb8,
-  0xe5ee, 0x19d5,
+  0xe380, 0x17ef,
+  0xe440, 0x186c,
+  0xe480, 0x18ab,
+  0xe540, 0x1928,
+  0xe580, 0x1967,
   0xe640, 0x19e4,
-  0xe651, 0x1eb9,
-  0xe652, 0x19f6,
-  0xe67c, 0x060e,
-  0xe67d, 0x1a21,
   0xe680, 0x1a23,
-  0xe686, 0x1eba,
-  0xe687, 0x1a2a,
-  0xe696, 0x1ebb,
-  0xe697, 0x1a3a,
-  0xe6cb, 0x0aaa,
-  0xe6cc, 0x1a6f,
-  0xe6e7, 0x1ebc,
-  0xe6e8, 0x1a8b,
-  0xe6f2, 0x1ebd,
-  0xe6f3, 0x1a96,
   0xe740, 0x1aa0,
-  0xe76d, 0x1ebe,
-  0xe76e, 0x1ace,
   0xe780, 0x1adf,
-  0xe78c, 0x1ebf,
-  0xe78d, 0x1aec,
-  0xe78e, 0x1ec0,
-  0xe78f, 0x1aee,
-  0xe7a7, 0x1ec1,
-  0xe7a8, 0x1b07,
-  0xe7bb, 0x1ec2,
-  0xe7bc, 0x1b1b,
-  0xe7d5, 0x1ec3,
-  0xe7d6, 0x1b35,
   0xe840, 0x1b5c,
   0xe880, 0x1b9b,
-  0xe8c3, 0x1ec6,
-  0xe8c4, 0x1bdf,
-  0xe8cf, 0x1ec7,
-  0xe8d0, 0x1beb,
-  0xe8d5, 0x1ec8,
-  0xe8d6, 0x1bf1,
-  0xe8f2, 0x0731,
-  0xe8f3, 0x1ec9,
-  0xe8f4, 0x1c0f,
   0xe940, 0x1c18,
   0xe980, 0x1c57,
-  0xe9ab, 0x1eca,
-  0xe9ac, 0x1c83,
-  0xe9ba, 0x1ecb,
-  0xe9bb, 0x1c92,
-  0xe9cb, 0x0477,
-  0xe9cc, 0x1ecc,
-  0xe9cd, 0x1ca4,
-  0xe9f2, 0x0529,
-  0xe9f3, 0x1cca,
   0xea40, 0x1cd4,
-  0xea70, 0x1ecd,
-  0xea71, 0x1d05,
   0xea80, 0x1d13,
-  0xea9d, 0x1ece,
-  0xea9e, 0x1d31,
   0xeaa3, 0x205c,
   0xed40, 0x20a7,
   0xed80, 0x20e6,
@@ -2765,10 +6466,89 @@ static Gushort japan1278msRKSJHMap2[1424] = {
   0xfb40, 0x2146,
   0xfb80, 0x2185,
   0xfc40, 0x2202,
+  0x8141, 0x1ecf,
+  0x8143, 0x204c,
+  0x8144, 0x2052,
+  0x8150, 0x1ed1,
+  0x815b, 0x1ed3,
+  0x8160, 0x1ed6,
+  0x8169, 0x1edb,
+  0x8181, 0x1eed,
+  0x81a8, 0x02e3,
+  0x81a9, 0x02e2,
+  0x81aa, 0x02e0,
+  0x81ac, 0x204e,
+  0x829f, 0x1eee,
+  0x82a1, 0x1eef,
+  0x82a3, 0x1ef0,
+  0x82a5, 0x1ef1,
+  0x82a7, 0x1ef2,
+  0x82c1, 0x1ef3,
+  0x82e1, 0x1ef4,
+  0x82e3, 0x1ef5,
+  0x82e5, 0x1ef6,
+  0x82ec, 0x1ef7,
+  0x8340, 0x1ef8,
+  0x8342, 0x1ef9,
+  0x8344, 0x1efa,
+  0x8346, 0x1efb,
+  0x8348, 0x1efc,
+  0x8362, 0x1efd,
+  0x8383, 0x1efe,
+  0x8385, 0x1eff,
+  0x8387, 0x1f00,
+  0x838e, 0x1f01,
+  0x8395, 0x1f02,
+  0x849f, 0x1d39,
+  0x84a0, 0x1d37,
+  0x84a1, 0x1d47,
+  0x84a2, 0x1d4f,
+  0x84a3, 0x1d4b,
+  0x84a4, 0x1d43,
+  0x84a5, 0x1d63,
+  0x84a6, 0x1d5b,
+  0x84a7, 0x1d6b,
+  0x84a8, 0x1d53,
+  0x84a9, 0x1d73,
+  0x84aa, 0x1d3a,
+  0x84ab, 0x1d38,
+  0x84ac, 0x1d4a,
+  0x84ad, 0x1d52,
+  0x84ae, 0x1d4e,
+  0x84af, 0x1d46,
+  0x84b0, 0x1d6a,
+  0x84b1, 0x1d62,
+  0x84b2, 0x1d72,
+  0x84b3, 0x1d5a,
+  0x84b4, 0x1d82,
+  0x84b5, 0x1d66,
+  0x84b6, 0x1d5f,
+  0x84b7, 0x1d6e,
+  0x84b8, 0x1d57,
+  0x84b9, 0x1d79,
+  0x84ba, 0x1d67,
+  0x84bb, 0x1d5c,
+  0x84bc, 0x1d6f,
+  0x84bd, 0x1d54,
+  0x84be, 0x1d76,
+  0x875f, 0x1f04,
+  0x8761, 0x2089,
+  0x8762, 0x1f07,
+  0x8763, 0x2093,
+  0x8764, 0x1f09,
+  0x8765, 0x2092,
+  0x8766, 0x1f0b,
+  0x8768, 0x2098,
+  0x8769, 0x1f0e,
+  0x876b, 0x209c,
+  0x876c, 0x1f11,
+  0x876e, 0x209d,
+  0x8780, 0x1f14,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan1278msRKSJHEnc16 = {
+static GfxFontEncoding16 japan1290msRKSJVEnc16 = {
+  1,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -2817,10 +6597,10 @@ static GfxFontEncoding16 japan1278msRKSJHEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan1278msRKSJHMap2, 712
+  japan1290msRKSJVMap2, 248
 };
 
-static Gushort japan1283pvRKSJHMap2[436] = {
+static Gushort japan1290mspRKSJHMap2[340] = {
   0x0000, 0x0000,
   0x8140, 0x0279,
   0x8180, 0x02b8,
@@ -2872,19 +6652,24 @@ static Gushort japan1283pvRKSJHMap2[436] = {
   0x84bc, 0x1d5c,
   0x84bd, 0x1d6f,
   0x84be, 0x1d79,
-  0x8540, 0x00e8,
-  0x8580, 0x0186,
-  0x8581, 0x0128,
-  0x859f, 0x0147,
-  0x85de, 0x0187,
-  0x8640, 0x01a6,
-  0x8680, 0x01e5,
-  0x8692, 0x0127,
-  0x8693, 0x01f7,
-  0x86a2, 0x1d37,
   0x8740, 0x1d83,
   0x875f, 0x1da1,
+  0x8761, 0x1f66,
+  0x8762, 0x1da4,
+  0x8763, 0x1f68,
+  0x8764, 0x1da6,
+  0x8765, 0x1f6a,
+  0x8766, 0x1da8,
+  0x8768, 0x1f6c,
+  0x8769, 0x1dab,
+  0x876b, 0x1f6b,
+  0x876c, 0x1dae,
+  0x876e, 0x1f6f,
+  0x876f, 0x1db1,
+  0x877e, 0x2083,
   0x8780, 0x1db8,
+  0x8784, 0x1f77,
+  0x8785, 0x1dbd,
   0x8790, 0x02fa,
   0x8791, 0x02f9,
   0x8792, 0x0301,
@@ -2961,87 +6746,35 @@ static Gushort japan1283pvRKSJHMap2[436] = {
   0xea40, 0x1cd4,
   0xea80, 0x1d13,
   0xeaa3, 0x205c,
-  0xeb40, 0x0279,
-  0xeb41, 0x1ecf,
-  0xeb43, 0x027c,
-  0xeb50, 0x1ed1,
-  0xeb52, 0x028b,
-  0xeb5b, 0x1ed3,
-  0xeb5e, 0x0297,
-  0xeb60, 0x1ed6,
-  0xeb65, 0x029e,
-  0xeb69, 0x1edb,
-  0xeb7b, 0x02b4,
-  0xeb80, 0x02b8,
-  0xeb81, 0x1eed,
-  0xeb82, 0x02ba,
-  0xebb8, 0x02e5,
-  0xebc8, 0x02ed,
-  0xebda, 0x02f4,
-  0xebf0, 0x0303,
-  0xebfc, 0x030b,
-  0xec4f, 0x030c,
-  0xec60, 0x0316,
-  0xec81, 0x0330,
-  0xec9f, 0x1eee,
-  0xeca0, 0x034b,
-  0xeca1, 0x1eef,
-  0xeca2, 0x034d,
-  0xeca3, 0x1ef0,
-  0xeca4, 0x034f,
-  0xeca5, 0x1ef1,
-  0xeca6, 0x0351,
-  0xeca7, 0x1ef2,
-  0xeca8, 0x0353,
-  0xecc1, 0x1ef3,
-  0xecc2, 0x036d,
-  0xece1, 0x1ef4,
-  0xece2, 0x038d,
-  0xece3, 0x1ef5,
-  0xece4, 0x038f,
-  0xece5, 0x1ef6,
-  0xece6, 0x0391,
-  0xecec, 0x1ef7,
-  0xeced, 0x0398,
-  0xed40, 0x1ef8,
-  0xed41, 0x039e,
-  0xed42, 0x1ef9,
-  0xed43, 0x03a0,
-  0xed44, 0x1efa,
-  0xed45, 0x03a2,
-  0xed46, 0x1efb,
-  0xed47, 0x03a4,
-  0xed48, 0x1efc,
-  0xed49, 0x03a6,
-  0xed62, 0x1efd,
-  0xed63, 0x03c0,
-  0xed80, 0x03dc,
-  0xed83, 0x1efe,
-  0xed84, 0x03e0,
-  0xed85, 0x1eff,
-  0xed86, 0x03e2,
-  0xed87, 0x1f00,
-  0xed88, 0x03e4,
-  0xed8e, 0x1f01,
-  0xed8f, 0x03eb,
-  0xed95, 0x1f02,
-  0xed9f, 0x03f3,
-  0xedbf, 0x040b,
-  0xee40, 0x1d83,
-  0xee5f, 0x1f04,
-  0xee6f, 0x1db1,
-  0xee80, 0x1f14,
-  0xee82, 0x1dba,
-  0xee90, 0x02fa,
-  0xee91, 0x02f9,
-  0xee92, 0x0301,
-  0xee93, 0x1dc8,
-  0xee9a, 0x0300,
-  0xee9b, 0x1dcf,
+  0xed40, 0x20a7,
+  0xed80, 0x20e6,
+  0xedb4, 0x07c9,
+  0xedb5, 0x211a,
+  0xee40, 0x2162,
+  0xee80, 0x21a1,
+  0xeeef, 0x1f9c,
+  0xeef9, 0x02ef,
+  0xeefa, 0x1f45,
+  0xfa40, 0x1f9c,
+  0xfa4a, 0x1d97,
+  0xfa54, 0x02ef,
+  0xfa55, 0x1f45,
+  0xfa58, 0x1dc2,
+  0xfa59, 0x1dba,
+  0xfa5a, 0x1f77,
+  0xfa5b, 0x0300,
+  0xfa5c, 0x20a7,
+  0xfa80, 0x20ca,
+  0xfad0, 0x07c9,
+  0xfad1, 0x211a,
+  0xfb40, 0x2146,
+  0xfb80, 0x2185,
+  0xfc40, 0x2202,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan1283pvRKSJHEnc16 = {
+static GfxFontEncoding16 japan1290mspRKSJHEnc16 = {
+  0,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -3074,7 +6807,7 @@ static GfxFontEncoding16 japan1283pvRKSJHEnc16 = {
     0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
     0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
     0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0000,
-    0x0061, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -3089,11 +6822,11 @@ static GfxFontEncoding16 japan1283pvRKSJHEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0098, 0x00e4, 0x007c },
-  japan1283pvRKSJHMap2, 218
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan1290mspRKSJHMap2, 170
 };
 
-static Gushort japan1290msRKSJHMap2[340] = {
+static Gushort japan1290mspRKSJVMap2[496] = {
   0x0000, 0x0000,
   0x8140, 0x0279,
   0x8180, 0x02b8,
@@ -3263,10 +6996,89 @@ static Gushort japan1290msRKSJHMap2[340] = {
   0xfb40, 0x2146,
   0xfb80, 0x2185,
   0xfc40, 0x2202,
+  0x8141, 0x1ecf,
+  0x8143, 0x204c,
+  0x8144, 0x2052,
+  0x8150, 0x1ed1,
+  0x815b, 0x1ed3,
+  0x8160, 0x1ed6,
+  0x8169, 0x1edb,
+  0x8181, 0x1eed,
+  0x81a8, 0x02e3,
+  0x81a9, 0x02e2,
+  0x81aa, 0x02e0,
+  0x81ac, 0x204e,
+  0x829f, 0x1eee,
+  0x82a1, 0x1eef,
+  0x82a3, 0x1ef0,
+  0x82a5, 0x1ef1,
+  0x82a7, 0x1ef2,
+  0x82c1, 0x1ef3,
+  0x82e1, 0x1ef4,
+  0x82e3, 0x1ef5,
+  0x82e5, 0x1ef6,
+  0x82ec, 0x1ef7,
+  0x8340, 0x1ef8,
+  0x8342, 0x1ef9,
+  0x8344, 0x1efa,
+  0x8346, 0x1efb,
+  0x8348, 0x1efc,
+  0x8362, 0x1efd,
+  0x8383, 0x1efe,
+  0x8385, 0x1eff,
+  0x8387, 0x1f00,
+  0x838e, 0x1f01,
+  0x8395, 0x1f02,
+  0x849f, 0x1d39,
+  0x84a0, 0x1d37,
+  0x84a1, 0x1d47,
+  0x84a2, 0x1d4f,
+  0x84a3, 0x1d4b,
+  0x84a4, 0x1d43,
+  0x84a5, 0x1d63,
+  0x84a6, 0x1d5b,
+  0x84a7, 0x1d6b,
+  0x84a8, 0x1d53,
+  0x84a9, 0x1d73,
+  0x84aa, 0x1d3a,
+  0x84ab, 0x1d38,
+  0x84ac, 0x1d4a,
+  0x84ad, 0x1d52,
+  0x84ae, 0x1d4e,
+  0x84af, 0x1d46,
+  0x84b0, 0x1d6a,
+  0x84b1, 0x1d62,
+  0x84b2, 0x1d72,
+  0x84b3, 0x1d5a,
+  0x84b4, 0x1d82,
+  0x84b5, 0x1d66,
+  0x84b6, 0x1d5f,
+  0x84b7, 0x1d6e,
+  0x84b8, 0x1d57,
+  0x84b9, 0x1d79,
+  0x84ba, 0x1d67,
+  0x84bb, 0x1d5c,
+  0x84bc, 0x1d6f,
+  0x84bd, 0x1d54,
+  0x84be, 0x1d76,
+  0x875f, 0x1f04,
+  0x8761, 0x2089,
+  0x8762, 0x1f07,
+  0x8763, 0x2093,
+  0x8764, 0x1f09,
+  0x8765, 0x2092,
+  0x8766, 0x1f0b,
+  0x8768, 0x2098,
+  0x8769, 0x1f0e,
+  0x876b, 0x209c,
+  0x876c, 0x1f11,
+  0x876e, 0x209d,
+  0x8780, 0x1f14,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan1290msRKSJHEnc16 = {
+static GfxFontEncoding16 japan1290mspRKSJVEnc16 = {
+  1,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -3287,18 +7099,18 @@ static GfxFontEncoding16 japan1290msRKSJHEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
-    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
-    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
-    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
-    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
-    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
-    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
-    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
-    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
-    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
-    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
-    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0277, 0x0000,
+    0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
+    0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010,
+    0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018,
+    0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, 0x0020,
+    0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028,
+    0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030,
+    0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038,
+    0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040,
+    0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048,
+    0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+    0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+    0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -3315,10 +7127,10 @@ static GfxFontEncoding16 japan1290msRKSJHEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan1290msRKSJHMap2, 170
+  japan1290mspRKSJVMap2, 248
 };
 
-static Gushort japan1290mspRKSJHMap2[340] = {
+static Gushort japan1290pvRKSJHMap2[518] = {
   0x0000, 0x0000,
   0x8140, 0x0279,
   0x8180, 0x02b8,
@@ -3370,30 +7182,116 @@ static Gushort japan1290mspRKSJHMap2[340] = {
   0x84bc, 0x1d5c,
   0x84bd, 0x1d6f,
   0x84be, 0x1d79,
-  0x8740, 0x1d83,
-  0x875f, 0x1da1,
-  0x8761, 0x1f66,
-  0x8762, 0x1da4,
-  0x8763, 0x1f68,
-  0x8764, 0x1da6,
-  0x8765, 0x1f6a,
-  0x8766, 0x1da8,
-  0x8768, 0x1f6c,
-  0x8769, 0x1dab,
-  0x876b, 0x1f6b,
-  0x876c, 0x1dae,
-  0x876e, 0x1f6f,
-  0x876f, 0x1db1,
-  0x877e, 0x2083,
-  0x8780, 0x1db8,
-  0x8784, 0x1f77,
-  0x8785, 0x1dbd,
-  0x8790, 0x02fa,
-  0x8791, 0x02f9,
-  0x8792, 0x0301,
-  0x8793, 0x1dc8,
-  0x879a, 0x0300,
-  0x879b, 0x1dcf,
+  0x8540, 0x1d83,
+  0x855e, 0x1f87,
+  0x857c, 0x205e,
+  0x8580, 0x2061,
+  0x8591, 0x1f7d,
+  0x859f, 0x1d97,
+  0x85a9, 0x2021,
+  0x85ab, 0x2067,
+  0x85b3, 0x1f9c,
+  0x85bd, 0x206a,
+  0x85db, 0x1fb0,
+  0x8640, 0x1db1,
+  0x8641, 0x1ffa,
+  0x8642, 0x1db2,
+  0x8643, 0x1f54,
+  0x8644, 0x1f56,
+  0x8645, 0x206f,
+  0x8646, 0x1db7,
+  0x8647, 0x1f57,
+  0x8648, 0x1db3,
+  0x8649, 0x1f55,
+  0x864a, 0x1db4,
+  0x864b, 0x2070,
+  0x864c, 0x1db5,
+  0x864e, 0x1f65,
+  0x864f, 0x1f58,
+  0x8656, 0x2071,
+  0x8657, 0x1f64,
+  0x8658, 0x1f62,
+  0x865a, 0x1f5f,
+  0x865d, 0x2072,
+  0x869b, 0x1dba,
+  0x869e, 0x2073,
+  0x869f, 0x1f52,
+  0x86a0, 0x1f50,
+  0x86a2, 0x1f53,
+  0x86a3, 0x2013,
+  0x86a4, 0x2015,
+  0x86a5, 0x2014,
+  0x86a6, 0x2016,
+  0x86b3, 0x1f7a,
+  0x86b4, 0x1f78,
+  0x86b5, 0x2074,
+  0x86c7, 0x201b,
+  0x86cb, 0x2075,
+  0x86cf, 0x1f4e,
+  0x86d0, 0x1f4d,
+  0x86d1, 0x1f4c,
+  0x86d2, 0x1f4b,
+  0x86d3, 0x200e,
+  0x8740, 0x2005,
+  0x8747, 0x1fd6,
+  0x8748, 0x200c,
+  0x8749, 0x1fd1,
+  0x874a, 0x1fca,
+  0x874b, 0x1dc4,
+  0x874c, 0x1fd7,
+  0x874d, 0x1dc2,
+  0x874e, 0x1fd2,
+  0x874f, 0x1fcd,
+  0x8750, 0x1dc3,
+  0x8751, 0x1fd5,
+  0x8752, 0x1fd3,
+  0x8753, 0x1fcf,
+  0x8754, 0x1fd4,
+  0x8755, 0x1fd0,
+  0x8756, 0x1fcb,
+  0x8758, 0x1fce,
+  0x8791, 0x207d,
+  0x8793, 0x1dbd,
+  0x8798, 0x1fda,
+  0x8799, 0x1fe5,
+  0x879a, 0x207f,
+  0x879b, 0x1fde,
+  0x879c, 0x1fff,
+  0x879d, 0x2080,
+  0x879e, 0x201f,
+  0x879f, 0x1da1,
+  0x87a0, 0x1f66,
+  0x87a1, 0x1da4,
+  0x87a2, 0x1da2,
+  0x87a3, 0x1f67,
+  0x87a4, 0x1ff7,
+  0x87a5, 0x2087,
+  0x87a7, 0x1f6a,
+  0x87a8, 0x1da8,
+  0x87a9, 0x1f68,
+  0x87ab, 0x1da6,
+  0x87ac, 0x1da9,
+  0x87ad, 0x1daf,
+  0x87ae, 0x1f6e,
+  0x87af, 0x1f6c,
+  0x87b0, 0x1dab,
+  0x87b1, 0x1f6d,
+  0x87b2, 0x1f6b,
+  0x87b3, 0x1dac,
+  0x87b4, 0x1f6f,
+  0x87b5, 0x1dae,
+  0x87bd, 0x1f70,
+  0x87be, 0x1f73,
+  0x87c0, 0x1f71,
+  0x87e5, 0x1dc5,
+  0x87e8, 0x2083,
+  0x87fa, 0x1f76,
+  0x87fb, 0x2081,
+  0x8840, 0x1dc8,
+  0x8841, 0x1dcd,
+  0x8854, 0x1db8,
+  0x8868, 0x1f16,
+  0x886a, 0x2079,
   0x889f, 0x0465,
   0x8940, 0x04c3,
   0x8980, 0x0502,
@@ -3464,34 +7362,38 @@ static Gushort japan1290mspRKSJHMap2[340] = {
   0xea40, 0x1cd4,
   0xea80, 0x1d13,
   0xeaa3, 0x205c,
-  0xed40, 0x20a7,
-  0xed80, 0x20e6,
-  0xedb4, 0x07c9,
-  0xedb5, 0x211a,
-  0xee40, 0x2162,
-  0xee80, 0x21a1,
-  0xeeef, 0x1f9c,
-  0xeef9, 0x02ef,
-  0xeefa, 0x1f45,
-  0xfa40, 0x1f9c,
-  0xfa4a, 0x1d97,
-  0xfa54, 0x02ef,
-  0xfa55, 0x1f45,
-  0xfa58, 0x1dc2,
-  0xfa59, 0x1dba,
-  0xfa5a, 0x1f77,
-  0xfa5b, 0x0300,
-  0xfa5c, 0x20a7,
-  0xfa80, 0x20ca,
-  0xfad0, 0x07c9,
-  0xfad1, 0x211a,
-  0xfb40, 0x2146,
-  0xfb80, 0x2185,
-  0xfc40, 0x2202,
+  0xeb41, 0x1ecf,
+  0xeb50, 0x1ed1,
+  0xeb5b, 0x1ed3,
+  0xeb60, 0x1ed6,
+  0xeb69, 0x1edb,
+  0xeb81, 0x1eed,
+  0xec9f, 0x1eee,
+  0xeca1, 0x1eef,
+  0xeca3, 0x1ef0,
+  0xeca5, 0x1ef1,
+  0xeca7, 0x1ef2,
+  0xecc1, 0x1ef3,
+  0xece1, 0x1ef4,
+  0xece3, 0x1ef5,
+  0xece5, 0x1ef6,
+  0xecec, 0x1ef7,
+  0xed40, 0x1ef8,
+  0xed42, 0x1ef9,
+  0xed44, 0x1efa,
+  0xed46, 0x1efb,
+  0xed48, 0x1efc,
+  0xed62, 0x1efd,
+  0xed83, 0x1efe,
+  0xed85, 0x1eff,
+  0xed87, 0x1f00,
+  0xed8e, 0x1f01,
+  0xed95, 0x1f02,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan1290mspRKSJHEnc16 = {
+static GfxFontEncoding16 japan1290pvRKSJHEnc16 = {
+  0,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -3524,7 +7426,7 @@ static GfxFontEncoding16 japan1290mspRKSJHEnc16 = {
     0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
     0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
     0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0061, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -3539,11 +7441,11 @@ static GfxFontEncoding16 japan1290mspRKSJHEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan1290mspRKSJHMap2, 170
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0098, 0x00e4, 0x007c },
+  japan1290pvRKSJHMap2, 259
 };
 
-static Gushort japan1290pvRKSJHMap2[518] = {
+static Gushort japan1290pvRKSJVMap2[620] = {
   0x0000, 0x0000,
   0x8140, 0x0279,
   0x8180, 0x02b8,
@@ -3802,10 +7704,62 @@ static Gushort japan1290pvRKSJHMap2[518] = {
   0xed87, 0x1f00,
   0xed8e, 0x1f01,
   0xed95, 0x1f02,
+  0x8141, 0x1ecf,
+  0x8150, 0x1ed1,
+  0x815b, 0x1ed3,
+  0x8160, 0x1ed6,
+  0x8169, 0x1edb,
+  0x8181, 0x1eed,
+  0x829f, 0x1eee,
+  0x82a1, 0x1eef,
+  0x82a3, 0x1ef0,
+  0x82a5, 0x1ef1,
+  0x82a7, 0x1ef2,
+  0x82c1, 0x1ef3,
+  0x82e1, 0x1ef4,
+  0x82e3, 0x1ef5,
+  0x82e5, 0x1ef6,
+  0x82ec, 0x1ef7,
+  0x8340, 0x1ef8,
+  0x8342, 0x1ef9,
+  0x8344, 0x1efa,
+  0x8346, 0x1efb,
+  0x8348, 0x1efc,
+  0x8362, 0x1efd,
+  0x8383, 0x1efe,
+  0x8385, 0x1eff,
+  0x8387, 0x1f00,
+  0x838e, 0x1f01,
+  0x8395, 0x1f02,
+  0x879f, 0x1f04,
+  0x87a0, 0x2089,
+  0x87a1, 0x1f07,
+  0x87a2, 0x1f05,
+  0x87a3, 0x208a,
+  0x87a4, 0x208d,
+  0x87a6, 0x2091,
+  0x87a8, 0x1f0b,
+  0x87a9, 0x2093,
+  0x87ab, 0x1f09,
+  0x87ac, 0x1f0c,
+  0x87ad, 0x1f12,
+  0x87ae, 0x2097,
+  0x87b0, 0x1f0e,
+  0x87b1, 0x209b,
+  0x87b3, 0x1f0f,
+  0x87b4, 0x209d,
+  0x87b5, 0x1f11,
+  0x87bd, 0x209e,
+  0x87be, 0x20a1,
+  0x87bf, 0x20a4,
+  0x87c0, 0x20a6,
+  0x87c1, 0x20a5,
+  0x87fa, 0x2084,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan1290pvRKSJHEnc16 = {
+static GfxFontEncoding16 japan1290pvRKSJVEnc16 = {
+  1,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -3854,7 +7808,7 @@ static GfxFontEncoding16 japan1290pvRKSJHEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0098, 0x00e4, 0x007c },
-  japan1290pvRKSJHMap2, 259
+  japan1290pvRKSJVMap2, 310
 };
 
 static Gushort japan12AddHMap2[1266] = {
@@ -4493,59 +8447,751 @@ static Gushort japan12AddHMap2[1266] = {
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan12AddHEnc16 = {
+static GfxFontEncoding16 japan12AddHEnc16 = {
+  0,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12AddHMap2, 633
+};
+
+static Gushort japan12AddRKSJHMap2[1270] = {
+  0x0000, 0x0000,
+  0x8140, 0x0279,
+  0x8180, 0x02b8,
+  0x81b8, 0x02e5,
+  0x81c8, 0x02ed,
+  0x81da, 0x02f4,
+  0x81f0, 0x0303,
+  0x81fc, 0x030b,
+  0x824f, 0x030c,
+  0x8260, 0x0316,
+  0x8281, 0x0330,
+  0x829f, 0x034a,
+  0x82f2, 0x1f16,
+  0x8340, 0x039d,
+  0x8380, 0x03dc,
+  0x839f, 0x03f3,
+  0x83bf, 0x040b,
+  0x8440, 0x0423,
+  0x8470, 0x0444,
+  0x8480, 0x0453,
+  0x849f, 0x1d37,
+  0x84a0, 0x1d39,
+  0x84a1, 0x1d43,
+  0x84a2, 0x1d47,
+  0x84a3, 0x1d4f,
+  0x84a4, 0x1d4b,
+  0x84a5, 0x1d53,
+  0x84a6, 0x1d63,
+  0x84a7, 0x1d5b,
+  0x84a8, 0x1d6b,
+  0x84a9, 0x1d73,
+  0x84aa, 0x1d38,
+  0x84ab, 0x1d3a,
+  0x84ac, 0x1d46,
+  0x84ad, 0x1d4a,
+  0x84ae, 0x1d52,
+  0x84af, 0x1d4e,
+  0x84b0, 0x1d5a,
+  0x84b1, 0x1d6a,
+  0x84b2, 0x1d62,
+  0x84b3, 0x1d72,
+  0x84b4, 0x1d82,
+  0x84b5, 0x1d57,
+  0x84b6, 0x1d66,
+  0x84b7, 0x1d5f,
+  0x84b8, 0x1d6e,
+  0x84b9, 0x1d76,
+  0x84ba, 0x1d54,
+  0x84bb, 0x1d67,
+  0x84bc, 0x1d5c,
+  0x84bd, 0x1d6f,
+  0x84be, 0x1d79,
+  0x889f, 0x0465,
+  0x88a0, 0x1dd1,
+  0x88a1, 0x0467,
+  0x88b0, 0x1f19,
+  0x88b1, 0x0477,
+  0x88b9, 0x1dd2,
+  0x88ba, 0x0480,
+  0x88ec, 0x1dd3,
+  0x88ed, 0x04b3,
+  0x88ef, 0x1f1a,
+  0x88f0, 0x04b6,
+  0x88f1, 0x1dd4,
+  0x88f2, 0x04b8,
+  0x88fa, 0x1dd5,
+  0x88fb, 0x04c1,
+  0x8940, 0x04c3,
+  0x8949, 0x1dd6,
+  0x894a, 0x04cd,
+  0x8952, 0x1f1b,
+  0x8953, 0x04d6,
+  0x8954, 0x1dd7,
+  0x8955, 0x04d8,
+  0x8958, 0x1f1c,
+  0x8959, 0x04dc,
+  0x895c, 0x1dda,
+  0x895d, 0x04e0,
+  0x8961, 0x1ddb,
+  0x8962, 0x04e5,
+  0x8980, 0x0502,
+  0x898b, 0x1ddc,
+  0x898c, 0x050e,
+  0x89a6, 0x1ddd,
+  0x89a7, 0x0529,
+  0x89a8, 0x1dde,
+  0x89a9, 0x052b,
+  0x89de, 0x1ddf,
+  0x89df, 0x0561,
+  0x89e5, 0x1f1d,
+  0x89e6, 0x0568,
+  0x89f8, 0x1de0,
+  0x89f9, 0x057b,
+  0x8a40, 0x057f,
+  0x8a41, 0x1de2,
+  0x8a42, 0x0581,
+  0x8a80, 0x05be,
+  0x8a8b, 0x1de4,
+  0x8a8c, 0x05ca,
+  0x8a93, 0x1de5,
+  0x8a94, 0x05d2,
+  0x8a9a, 0x1de6,
+  0x8a9b, 0x05d9,
+  0x8ac0, 0x1de7,
+  0x8ac1, 0x05ff,
+  0x8acb, 0x1de8,
+  0x8acc, 0x060a,
+  0x8ae3, 0x1de9,
+  0x8ae4, 0x0622,
+  0x8b40, 0x063b,
+  0x8b4a, 0x1dea,
+  0x8b4b, 0x0646,
+  0x8b5f, 0x1deb,
+  0x8b60, 0x065b,
+  0x8b80, 0x067a,
+  0x8b82, 0x1f1e,
+  0x8b83, 0x067d,
+  0x8b88, 0x1f1f,
+  0x8b89, 0x0683,
+  0x8ba0, 0x1dec,
+  0x8ba1, 0x069b,
+  0x8ba8, 0x1ded,
+  0x8ba9, 0x06a3,
+  0x8bc0, 0x1f20,
+  0x8bc1, 0x06bb,
+  0x8bcd, 0x1dee,
+  0x8bce, 0x06c8,
+  0x8beb, 0x1def,
+  0x8bec, 0x06e6,
+  0x8bf2, 0x1df0,
+  0x8bf3, 0x06ed,
+  0x8bf9, 0x1df1,
+  0x8bfa, 0x06f4,
+  0x8bfb, 0x1df2,
+  0x8bfc, 0x06f6,
+  0x8c40, 0x06f7,
+  0x8c56, 0x1df4,
+  0x8c57, 0x070e,
+  0x8c71, 0x1df7,
+  0x8c72, 0x0729,
+  0x8c80, 0x0736,
+  0x8c91, 0x1dfa,
+  0x8c92, 0x0748,
+  0x8c9d, 0x1f21,
+  0x8c9e, 0x1dfc,
+  0x8c9f, 0x0755,
+  0x8cb2, 0x1dfd,
+  0x8cb3, 0x0769,
+  0x8cbf, 0x1dfe,
+  0x8cc0, 0x0776,
+  0x8d40, 0x07b3,
+  0x8d4a, 0x1dff,
+  0x8d4b, 0x07be,
+  0x8d80, 0x07f2,
+  0x8d8d, 0x1e02,
+  0x8d8e, 0x0800,
+  0x8d94, 0x1e03,
+  0x8d95, 0x0807,
+  0x8d99, 0x1e04,
+  0x8d9a, 0x080c,
+  0x8dd1, 0x1e05,
+  0x8dd2, 0x0844,
+  0x8de5, 0x1e06,
+  0x8de6, 0x0858,
+  0x8df2, 0x1e07,
+  0x8df3, 0x0865,
+  0x8e40, 0x086f,
+  0x8e46, 0x1e08,
+  0x8e47, 0x0876,
+  0x8e49, 0x1e09,
+  0x8e4a, 0x0879,
+  0x8e4b, 0x1e0a,
+  0x8e4c, 0x087b,
+  0x8e58, 0x1e0b,
+  0x8e59, 0x0888,
+  0x8e60, 0x1f22,
+  0x8e61, 0x0890,
+  0x8e80, 0x08ae,
+  0x8ec6, 0x1e0d,
+  0x8ec7, 0x08f5,
+  0x8edb, 0x1e0f,
+  0x8edd, 0x090b,
+  0x8f40, 0x092b,
+  0x8f4a, 0x1e11,
+  0x8f4b, 0x0936,
+  0x8f55, 0x1e12,
+  0x8f56, 0x0941,
+  0x8f80, 0x096a,
+  0x8f8c, 0x1e13,
+  0x8f8d, 0x0977,
+  0x8f92, 0x1e15,
+  0x8f94, 0x097e,
+  0x8fa3, 0x1e17,
+  0x8fa4, 0x098e,
+  0x8fb1, 0x1e18,
+  0x8fb2, 0x099c,
+  0x8fd3, 0x1e1a,
+  0x8fd4, 0x09be,
+  0x8fdd, 0x1e1b,
+  0x8fde, 0x09c8,
+  0x8fe2, 0x1e1c,
+  0x8fe3, 0x09cd,
+  0x9040, 0x09e7,
+  0x9049, 0x1e1d,
+  0x904a, 0x09f1,
+  0x9078, 0x1f23,
+  0x9079, 0x0a20,
+  0x9080, 0x1e1f,
+  0x9081, 0x0a27,
+  0x90a0, 0x1e21,
+  0x90a1, 0x0a47,
+  0x90e4, 0x1e23,
+  0x90e5, 0x0a8b,
+  0x90ef, 0x1e24,
+  0x90f0, 0x0a96,
+  0x90f7, 0x1e26,
+  0x90f8, 0x1f24,
+  0x90f9, 0x0a9f,
+  0x90fa, 0x1f25,
+  0x90fc, 0x0aa2,
+  0x9140, 0x0aa3,
+  0x9146, 0x1e28,
+  0x9147, 0x0aaa,
+  0x9158, 0x1e29,
+  0x9159, 0x0abc,
+  0x916b, 0x1e2a,
+  0x916c, 0x0acf,
+  0x916e, 0x1e2b,
+  0x916f, 0x0ad2,
+  0x917e, 0x1e2c,
+  0x9180, 0x0ae2,
+  0x9189, 0x1e2d,
+  0x918a, 0x0aec,
+  0x91b5, 0x1f27,
+  0x91b6, 0x0b18,
+  0x91bb, 0x1e2e,
+  0x91bc, 0x0b1e,
+  0x91cb, 0x1e2f,
+  0x91cc, 0x0b2e,
+  0x91da, 0x1e30,
+  0x91db, 0x0b3d,
+  0x91e1, 0x1e31,
+  0x91e2, 0x0b44,
+  0x91ed, 0x1e32,
+  0x91ee, 0x0b50,
+  0x91fb, 0x1e35,
+  0x91fc, 0x0b5e,
+  0x9240, 0x0b5f,
+  0x9246, 0x1e36,
+  0x9247, 0x0b66,
+  0x9248, 0x1e37,
+  0x9249, 0x0b68,
+  0x924c, 0x1e39,
+  0x924e, 0x0b6d,
+  0x925c, 0x1e3b,
+  0x925d, 0x0b7c,
+  0x9280, 0x0b9e,
+  0x9290, 0x1e3c,
+  0x9291, 0x0baf,
+  0x9295, 0x1e3d,
+  0x9296, 0x0bb4,
+  0x929c, 0x1e3e,
+  0x929d, 0x0bbb,
+  0x92bb, 0x1e3f,
+  0x92bc, 0x0bda,
+  0x92c6, 0x1e40,
+  0x92c7, 0x0be5,
+  0x92c8, 0x1e41,
+  0x92c9, 0x0be7,
+  0x92cd, 0x1e43,
+  0x92ce, 0x0bec,
+  0x9340, 0x0c1b,
+  0x9341, 0x1e44,
+  0x9342, 0x0c1d,
+  0x9346, 0x1e45,
+  0x9347, 0x0c22,
+  0x934d, 0x1e46,
+  0x934e, 0x0c29,
+  0x9355, 0x1e47,
+  0x9356, 0x0c31,
+  0x935e, 0x1e48,
+  0x935f, 0x0c3a,
+  0x9367, 0x1e49,
+  0x9368, 0x0c43,
+  0x936a, 0x1e4a,
+  0x936b, 0x0c46,
+  0x9370, 0x1f28,
+  0x9371, 0x1e4c,
+  0x9372, 0x0c4d,
+  0x9380, 0x0c5a,
+  0x9384, 0x1e4d,
+  0x9385, 0x0c5f,
+  0x9398, 0x1e4e,
+  0x9399, 0x0c73,
+  0x93c0, 0x1e50,
+  0x93c1, 0x0c9b,
+  0x93d2, 0x1e51,
+  0x93d3, 0x0cad,
+  0x93d9, 0x1e53,
+  0x93da, 0x0cb4,
+  0x93e4, 0x1e56,
+  0x93e6, 0x0cc0,
+  0x93e8, 0x1e58,
+  0x93e9, 0x0cc3,
+  0x93f4, 0x1ec0,
+  0x93f5, 0x0ccf,
+  0x9440, 0x0cd7,
+  0x9448, 0x1e59,
+  0x9449, 0x1f29,
+  0x944a, 0x0ce1,
+  0x9458, 0x1e5a,
+  0x9459, 0x0cf0,
+  0x9476, 0x1e5b,
+  0x9477, 0x0d0e,
+  0x9480, 0x0d16,
+  0x9487, 0x1e5c,
+  0x9488, 0x0d1e,
+  0x9489, 0x1e5d,
+  0x948a, 0x0d20,
+  0x948d, 0x1e5e,
+  0x948e, 0x0d24,
+  0x94a2, 0x1e5f,
+  0x94a3, 0x0d39,
+  0x94ac, 0x1e60,
+  0x94ad, 0x0d43,
+  0x94ae, 0x1e61,
+  0x94af, 0x0d45,
+  0x94be, 0x1f2a,
+  0x94bf, 0x0d55,
+  0x94d2, 0x1e62,
+  0x94d3, 0x0d69,
+  0x94f3, 0x1e64,
+  0x94f4, 0x0d8a,
+  0x9540, 0x0d93,
+  0x9541, 0x1e65,
+  0x9543, 0x0d96,
+  0x954e, 0x1e67,
+  0x954f, 0x0da2,
+  0x9551, 0x1e68,
+  0x9552, 0x0da5,
+  0x9554, 0x1e69,
+  0x9555, 0x0da8,
+  0x955f, 0x1e6a,
+  0x9560, 0x0db3,
+  0x956d, 0x1e6b,
+  0x956e, 0x0dc1,
+  0x9580, 0x0dd2,
+  0x95c1, 0x1e6d,
+  0x95c2, 0x0e14,
+  0x95cb, 0x1e6e,
+  0x95cc, 0x0e1e,
+  0x95d1, 0x1f2b,
+  0x95d2, 0x0e24,
+  0x95d8, 0x1e6f,
+  0x95d9, 0x0e2b,
+  0x95f7, 0x1e70,
+  0x95f8, 0x0e4a,
+  0x9640, 0x0e4f,
+  0x9648, 0x1e72,
+  0x9649, 0x0e58,
+  0x966a, 0x1e73,
+  0x966b, 0x0e7a,
+  0x9680, 0x0e8e,
+  0x9690, 0x1e74,
+  0x9691, 0x0e9f,
+  0x9698, 0x1f2c,
+  0x9699, 0x0ea7,
+  0x96cb, 0x1e75,
+  0x96cc, 0x0eda,
+  0x96d7, 0x1e76,
+  0x96d8, 0x0ee6,
+  0x96dd, 0x1e77,
+  0x96de, 0x0eec,
+  0x96e0, 0x1e78,
+  0x96e1, 0x0eef,
+  0x96f8, 0x1e79,
+  0x96f9, 0x0f07,
+  0x96fa, 0x1e7a,
+  0x96fb, 0x0f09,
+  0x9740, 0x0f0b,
+  0x9751, 0x1e7c,
+  0x9752, 0x0f1d,
+  0x976f, 0x1e7d,
+  0x9770, 0x0f3b,
+  0x9773, 0x1e7e,
+  0x9774, 0x0f3f,
+  0x9780, 0x0f4a,
+  0x9789, 0x1e7f,
+  0x978a, 0x0f54,
+  0x97f8, 0x1e81,
+  0x97fa, 0x1f2d,
+  0x97fb, 0x0fc5,
+  0x9840, 0x1e83,
+  0x9841, 0x0fc8,
+  0x9850, 0x1e84,
+  0x9851, 0x0fd8,
+  0x9858, 0x1e85,
+  0x9859, 0x0fe0,
+  0x989f, 0x0ffa,
+  0x9940, 0x1058,
+  0x9941, 0x1f2e,
+  0x9942, 0x105a,
+  0x995c, 0x1e86,
+  0x995d, 0x1075,
+  0x996c, 0x1e89,
+  0x996d, 0x1085,
+  0x9980, 0x1097,
+  0x99b6, 0x1f2f,
+  0x99b7, 0x10ce,
+  0x9a40, 0x1114,
+  0x9a4f, 0x1e8a,
+  0x9a50, 0x1124,
+  0x9a59, 0x1e8b,
+  0x9a5a, 0x112e,
+  0x9a67, 0x1f30,
+  0x9a68, 0x113c,
+  0x9a7d, 0x1e8d,
+  0x9a7e, 0x1152,
+  0x9a80, 0x1153,
+  0x9a8b, 0x1e8e,
+  0x9a8c, 0x1f31,
+  0x9a8d, 0x1160,
+  0x9ac2, 0x1e8f,
+  0x9ac3, 0x1f32,
+  0x9ac4, 0x1197,
+  0x9aea, 0x1f33,
+  0x9aeb, 0x11be,
+  0x9b40, 0x11d0,
+  0x9b5c, 0x1e90,
+  0x9b5d, 0x11ed,
+  0x9b80, 0x120f,
+  0x9b83, 0x1e91,
+  0x9b84, 0x1213,
+  0x9b98, 0x1f34,
+  0x9b99, 0x1228,
+  0x9ba0, 0x1e92,
+  0x9ba1, 0x1230,
+  0x9bfb, 0x1f35,
+  0x9c40, 0x128c,
+  0x9c80, 0x12cb,
+  0x9ca2, 0x1e94,
+  0x9ca3, 0x12ee,
+  0x9d40, 0x1348,
+  0x9d47, 0x1f37,
+  0x9d48, 0x1350,
+  0x9d80, 0x1e95,
+  0x9d81, 0x1388,
+  0x9d8c, 0x1e96,
+  0x9d8d, 0x1394,
+  0x9db7, 0x1e97,
+  0x9db8, 0x13bf,
+  0x9df8, 0x1f38,
+  0x9df9, 0x1400,
+  0x9e40, 0x1404,
+  0x9e64, 0x1e99,
+  0x9e65, 0x1429,
+  0x9e80, 0x1443,
+  0x9e8b, 0x1e9b,
+  0x9e8c, 0x144f,
+  0x9f40, 0x14c0,
+  0x9f80, 0x14ff,
+  0x9f81, 0x1f39,
+  0x9f82, 0x1501,
+  0x9fce, 0x1e9d,
+  0x9fcf, 0x154e,
+  0x9fd4, 0x1f3a,
+  0x9fd5, 0x1554,
+  0x9ff4, 0x1f3b,
+  0x9ff5, 0x1574,
+  0xe040, 0x157c,
+  0xe080, 0x15bb,
+  0xe093, 0x1e9e,
+  0xe094, 0x15cf,
+  0xe0a4, 0x1e9f,
+  0xe0a5, 0x15e0,
+  0xe0dd, 0x1ea0,
+  0xe0de, 0x1619,
+  0xe140, 0x1638,
+  0xe14a, 0x1ea1,
+  0xe14b, 0x1643,
+  0xe180, 0x1677,
+  0xe1ed, 0x1ea5,
+  0xe1ee, 0x16e5,
+  0xe240, 0x16f4,
+  0xe269, 0x1ea6,
+  0xe26a, 0x171e,
+  0xe273, 0x1ea7,
+  0xe274, 0x1728,
+  0xe278, 0x1f3c,
+  0xe279, 0x172d,
+  0xe280, 0x1733,
+  0xe2b7, 0x1ea8,
+  0xe2b8, 0x176b,
+  0xe2be, 0x1f3d,
+  0xe2bf, 0x1772,
+  0xe2e2, 0x1ea9,
+  0xe2e3, 0x1796,
+  0xe2ec, 0x1eaa,
+  0xe2ed, 0x17a0,
+  0xe340, 0x17b0,
+  0xe358, 0x1eab,
+  0xe359, 0x17c9,
+  0xe35a, 0x1eac,
+  0xe35b, 0x17cb,
+  0xe365, 0x1ead,
+  0xe366, 0x17d6,
+  0xe380, 0x17ef,
+  0xe3c7, 0x1f3e,
+  0xe3c8, 0x1837,
+  0xe440, 0x186c,
+  0xe480, 0x18ab,
+  0xe484, 0x1eaf,
+  0xe485, 0x18b0,
+  0xe489, 0x1eb0,
+  0xe48a, 0x18b5,
+  0xe492, 0x1eb1,
+  0xe493, 0x18be,
+  0xe4b9, 0x1eb3,
+  0xe4ba, 0x18e5,
+  0xe4cb, 0x1f3f,
+  0xe4cc, 0x18f7,
+  0xe540, 0x1928,
+  0xe580, 0x1967,
+  0xe59e, 0x1f40,
+  0xe59f, 0x1986,
+  0xe5ba, 0x1f41,
+  0xe5bc, 0x19a3,
+  0xe5ed, 0x1eb8,
+  0xe5ee, 0x19d5,
+  0xe640, 0x19e4,
+  0xe651, 0x1eb9,
+  0xe652, 0x19f6,
+  0xe680, 0x1a23,
+  0xe686, 0x1eba,
+  0xe687, 0x1a2a,
+  0xe6e7, 0x1ebc,
+  0xe6e8, 0x1a8b,
+  0xe740, 0x1aa0,
+  0xe76d, 0x1ebe,
+  0xe76e, 0x1ace,
+  0xe780, 0x1adf,
+  0xe7a7, 0x1ec1,
+  0xe7a8, 0x1b07,
+  0xe7bb, 0x1ec2,
+  0xe7bc, 0x1b1b,
+  0xe840, 0x1b5c,
+  0xe880, 0x1b9b,
+  0xe8cf, 0x1ec7,
+  0xe8d0, 0x1beb,
+  0xe940, 0x1c18,
+  0xe978, 0x1f43,
+  0xe979, 0x1c51,
+  0xe980, 0x1c57,
+  0xe9ab, 0x1eca,
+  0xe9ac, 0x1c83,
+  0xe9ba, 0x1ecb,
+  0xe9bb, 0x1c92,
+  0xe9cc, 0x1ecc,
+  0xe9cd, 0x1ca4,
+  0xea40, 0x1cd4,
+  0xea70, 0x1ecd,
+  0xea71, 0x1f44,
+  0xea72, 0x1d06,
+  0xea80, 0x1d13,
+  0xea9d, 0x1ece,
+  0xea9e, 0x1d31,
+  0xeaa3, 0x205c,
+  0xec40, 0x1f45,
+  0xec46, 0x1f48,
+  0xec47, 0x0300,
+  0xec48, 0x02fa,
+  0xec49, 0x02f9,
+  0xec4d, 0x1f49,
+  0xec5b, 0x1db1,
+  0xec5e, 0x1f54,
+  0xec5f, 0x1db7,
+  0xec60, 0x1f55,
+  0xec63, 0x1db4,
+  0xec66, 0x1f58,
+  0xec70, 0x0303,
+  0xec71, 0x1f62,
+  0xec72, 0x0304,
+  0xec73, 0x1f63,
+  0xec76, 0x1f65,
+  0xec78, 0x1da4,
+  0xec79, 0x1da1,
+  0xec7a, 0x1f66,
+  0xec7b, 0x1da2,
+  0xec7c, 0x1f67,
+  0xec80, 0x1da6,
+  0xec81, 0x1f6a,
+  0xec82, 0x1da8,
+  0xec83, 0x1dac,
+  0xec84, 0x1f6b,
+  0xec85, 0x1dae,
+  0xec86, 0x1dab,
+  0xec87, 0x1f6c,
+  0xec89, 0x1daf,
+  0xec8a, 0x1f6e,
+  0xec94, 0x1f75,
+  0xec9a, 0x1dba,
+  0xec9b, 0x1f7b,
+  0xec9e, 0x1f7c,
+  0xeca7, 0x1f7d,
+  0xecb2, 0x1f87,
+  0xecc7, 0x1d83,
+  0xecdb, 0x1f9b,
+  0xecdc, 0x1d97,
+  0xece9, 0x1f9c,
+  0xed40, 0x1fb0,
+  0xed64, 0x1f16,
+  0xed68, 0x1fca,
+  0xed6a, 0x1dc4,
+  0xed6b, 0x1fcc,
+  0xed6e, 0x1dc3,
+  0xed6f, 0x1fcf,
+  0xed74, 0x1dc2,
+  0xed75, 0x1fd4,
+  0xed7c, 0x1fd8,
+  0xed80, 0x1fdb,
+  0xed8f, 0x1fe6,
+  0xef40, 0x1ecf,
+  0xef42, 0x204c,
+  0xef43, 0x2052,
+  0xef44, 0x1ed1,
+  0xef4e, 0x205a,
+  0xef4f, 0x2053,
+  0xef50, 0x2058,
+  0xef51, 0x2055,
+  0xef52, 0x1edb,
+  0xef64, 0x1eee,
+  0xef7a, 0x2048,
+  0xef8d, 0x02e0,
+  0xef91, 0x1ff6,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12AddRKSJHEnc16 = {
+  0,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
   { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
+    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
+    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
+    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
+    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
+    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
+    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12AddHMap2, 633
+  japan12AddRKSJHMap2, 635
 };
 
-static Gushort japan12AddRKSJHMap2[1270] = {
+static Gushort japan12AddRKSJVMap2[1384] = {
   0x0000, 0x0000,
   0x8140, 0x0279,
   0x8180, 0x02b8,
@@ -5180,59 +9826,863 @@ static Gushort japan12AddRKSJHMap2[1270] = {
   0xef7a, 0x2048,
   0xef8d, 0x02e0,
   0xef91, 0x1ff6,
+  0x8141, 0x1ecf,
+  0x8143, 0x204c,
+  0x8144, 0x2052,
+  0x8150, 0x1ed1,
+  0x815b, 0x1ed3,
+  0x8160, 0x1ed6,
+  0x8165, 0x205a,
+  0x8166, 0x2053,
+  0x8167, 0x2058,
+  0x8168, 0x2055,
+  0x8169, 0x1edb,
+  0x829f, 0x1eee,
+  0x82a1, 0x1eef,
+  0x82a3, 0x1ef0,
+  0x82a5, 0x1ef1,
+  0x82a7, 0x1ef2,
+  0x82c1, 0x1ef3,
+  0x82e1, 0x1ef4,
+  0x82e3, 0x1ef5,
+  0x82e5, 0x1ef6,
+  0x82ec, 0x1ef7,
+  0x82f3, 0x2048,
+  0x8340, 0x1ef8,
+  0x8342, 0x1ef9,
+  0x8344, 0x1efa,
+  0x8346, 0x1efb,
+  0x8348, 0x1efc,
+  0x8362, 0x1efd,
+  0x8383, 0x1efe,
+  0x8385, 0x1eff,
+  0x8387, 0x1f00,
+  0x838e, 0x1f01,
+  0x8395, 0x1f02,
+  0xec78, 0x1f07,
+  0xec79, 0x1f04,
+  0xec7a, 0x2089,
+  0xec7b, 0x1f05,
+  0xec7c, 0x208a,
+  0xec7d, 0x2093,
+  0xec80, 0x1f09,
+  0xec81, 0x2092,
+  0xec82, 0x1f0b,
+  0xec83, 0x1f0f,
+  0xec84, 0x209c,
+  0xec85, 0x1f11,
+  0xec86, 0x1f0e,
+  0xec87, 0x2098,
+  0xec88, 0x209b,
+  0xec89, 0x1f12,
+  0xec8a, 0x2097,
+  0xec8b, 0x209d,
+  0xec8d, 0x20a6,
+  0xec8e, 0x20a5,
+  0xec8f, 0x20a1,
+  0xec90, 0x20a4,
+  0xec95, 0x2084,
+  0xef92, 0x208d,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12AddRKSJVEnc16 = {
+  1,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
+    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
+    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
+    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
+    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
+    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
+    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12AddRKSJVMap2, 692
+};
+
+static Gushort japan12AddVMap2[1380] = {
+  0x0000, 0x0000,
+  0x2121, 0x0279,
+  0x2221, 0x02d7,
+  0x223a, 0x02e5,
+  0x224a, 0x02ed,
+  0x225c, 0x02f4,
+  0x2272, 0x0303,
+  0x227e, 0x030b,
+  0x2330, 0x030c,
+  0x2341, 0x0316,
+  0x2361, 0x0330,
+  0x2421, 0x034a,
+  0x2474, 0x1f16,
+  0x2521, 0x039d,
+  0x2621, 0x03f3,
+  0x2641, 0x040b,
+  0x2721, 0x0423,
+  0x2751, 0x0444,
+  0x2821, 0x1d37,
+  0x2822, 0x1d39,
+  0x2823, 0x1d43,
+  0x2824, 0x1d47,
+  0x2825, 0x1d4f,
+  0x2826, 0x1d4b,
+  0x2827, 0x1d53,
+  0x2828, 0x1d63,
+  0x2829, 0x1d5b,
+  0x282a, 0x1d6b,
+  0x282b, 0x1d73,
+  0x282c, 0x1d38,
+  0x282d, 0x1d3a,
+  0x282e, 0x1d46,
+  0x282f, 0x1d4a,
+  0x2830, 0x1d52,
+  0x2831, 0x1d4e,
+  0x2832, 0x1d5a,
+  0x2833, 0x1d6a,
+  0x2834, 0x1d62,
+  0x2835, 0x1d72,
+  0x2836, 0x1d82,
+  0x2837, 0x1d57,
+  0x2838, 0x1d66,
+  0x2839, 0x1d5f,
+  0x283a, 0x1d6e,
+  0x283b, 0x1d76,
+  0x283c, 0x1d54,
+  0x283d, 0x1d67,
+  0x283e, 0x1d5c,
+  0x283f, 0x1d6f,
+  0x2840, 0x1d79,
+  0x3021, 0x0465,
+  0x3022, 0x1dd1,
+  0x3023, 0x0467,
+  0x3032, 0x1f19,
+  0x3033, 0x0477,
+  0x303b, 0x1dd2,
+  0x303c, 0x0480,
+  0x306e, 0x1dd3,
+  0x306f, 0x04b3,
+  0x3071, 0x1f1a,
+  0x3072, 0x04b6,
+  0x3073, 0x1dd4,
+  0x3074, 0x04b8,
+  0x307c, 0x1dd5,
+  0x307d, 0x04c1,
+  0x3121, 0x04c3,
+  0x312a, 0x1dd6,
+  0x312b, 0x04cd,
+  0x3133, 0x1f1b,
+  0x3134, 0x04d6,
+  0x3135, 0x1dd7,
+  0x3136, 0x04d8,
+  0x3139, 0x1f1c,
+  0x313a, 0x04dc,
+  0x313d, 0x1dda,
+  0x313e, 0x04e0,
+  0x3142, 0x1ddb,
+  0x3143, 0x04e5,
+  0x316b, 0x1ddc,
+  0x316c, 0x050e,
+  0x3221, 0x0521,
+  0x3228, 0x1ddd,
+  0x3229, 0x0529,
+  0x322a, 0x1dde,
+  0x322b, 0x052b,
+  0x3260, 0x1ddf,
+  0x3261, 0x0561,
+  0x3267, 0x1f1d,
+  0x3268, 0x0568,
+  0x327a, 0x1de0,
+  0x327b, 0x057b,
+  0x3321, 0x057f,
+  0x3322, 0x1de2,
+  0x3323, 0x0581,
+  0x336b, 0x1de4,
+  0x336c, 0x05ca,
+  0x3373, 0x1de5,
+  0x3374, 0x05d2,
+  0x337a, 0x1de6,
+  0x337b, 0x05d9,
+  0x3421, 0x05dd,
+  0x3442, 0x1de7,
+  0x3443, 0x05ff,
+  0x344d, 0x1de8,
+  0x344e, 0x060a,
+  0x3465, 0x1de9,
+  0x3466, 0x0622,
+  0x3521, 0x063b,
+  0x352b, 0x1dea,
+  0x352c, 0x0646,
+  0x3540, 0x1deb,
+  0x3541, 0x065b,
+  0x3562, 0x1f1e,
+  0x3563, 0x067d,
+  0x3568, 0x1f1f,
+  0x3569, 0x0683,
+  0x3621, 0x0699,
+  0x3622, 0x1dec,
+  0x3623, 0x069b,
+  0x362a, 0x1ded,
+  0x362b, 0x06a3,
+  0x3642, 0x1f20,
+  0x3643, 0x06bb,
+  0x364f, 0x1dee,
+  0x3650, 0x06c8,
+  0x366d, 0x1def,
+  0x366e, 0x06e6,
+  0x3674, 0x1df0,
+  0x3675, 0x06ed,
+  0x367b, 0x1df1,
+  0x367c, 0x06f4,
+  0x367d, 0x1df2,
+  0x367e, 0x06f6,
+  0x3721, 0x06f7,
+  0x3737, 0x1df4,
+  0x3738, 0x070e,
+  0x3752, 0x1df7,
+  0x3753, 0x0729,
+  0x3771, 0x1dfa,
+  0x3772, 0x0748,
+  0x377d, 0x1f21,
+  0x377e, 0x1dfc,
+  0x3821, 0x0755,
+  0x3834, 0x1dfd,
+  0x3835, 0x0769,
+  0x3841, 0x1dfe,
+  0x3842, 0x0776,
+  0x3921, 0x07b3,
+  0x392b, 0x1dff,
+  0x392c, 0x07be,
+  0x396d, 0x1e02,
+  0x396e, 0x0800,
+  0x3974, 0x1e03,
+  0x3975, 0x0807,
+  0x3979, 0x1e04,
+  0x397a, 0x080c,
+  0x3a21, 0x0811,
+  0x3a53, 0x1e05,
+  0x3a54, 0x0844,
+  0x3a67, 0x1e06,
+  0x3a68, 0x0858,
+  0x3a74, 0x1e07,
+  0x3a75, 0x0865,
+  0x3b21, 0x086f,
+  0x3b27, 0x1e08,
+  0x3b28, 0x0876,
+  0x3b2a, 0x1e09,
+  0x3b2b, 0x0879,
+  0x3b2c, 0x1e0a,
+  0x3b2d, 0x087b,
+  0x3b39, 0x1e0b,
+  0x3b3a, 0x0888,
+  0x3b41, 0x1f22,
+  0x3b42, 0x0890,
+  0x3c21, 0x08cd,
+  0x3c48, 0x1e0d,
+  0x3c49, 0x08f5,
+  0x3c5d, 0x1e0f,
+  0x3c5f, 0x090b,
+  0x3d21, 0x092b,
+  0x3d2b, 0x1e11,
+  0x3d2c, 0x0936,
+  0x3d36, 0x1e12,
+  0x3d37, 0x0941,
+  0x3d6c, 0x1e13,
+  0x3d6d, 0x0977,
+  0x3d72, 0x1e15,
+  0x3d74, 0x097e,
+  0x3e21, 0x0989,
+  0x3e25, 0x1e17,
+  0x3e26, 0x098e,
+  0x3e33, 0x1e18,
+  0x3e34, 0x099c,
+  0x3e55, 0x1e1a,
+  0x3e56, 0x09be,
+  0x3e5f, 0x1e1b,
+  0x3e60, 0x09c8,
+  0x3e64, 0x1e1c,
+  0x3e65, 0x09cd,
+  0x3f21, 0x09e7,
+  0x3f2a, 0x1e1d,
+  0x3f2b, 0x09f1,
+  0x3f59, 0x1f23,
+  0x3f5a, 0x0a20,
+  0x3f60, 0x1e1f,
+  0x3f61, 0x0a27,
+  0x4021, 0x0a45,
+  0x4022, 0x1e21,
+  0x4023, 0x0a47,
+  0x4066, 0x1e23,
+  0x4067, 0x0a8b,
+  0x4071, 0x1e24,
+  0x4072, 0x0a96,
+  0x4079, 0x1e26,
+  0x407a, 0x1f24,
+  0x407b, 0x0a9f,
+  0x407c, 0x1f25,
+  0x407e, 0x0aa2,
+  0x4121, 0x0aa3,
+  0x4127, 0x1e28,
+  0x4128, 0x0aaa,
+  0x4139, 0x1e29,
+  0x413a, 0x0abc,
+  0x414c, 0x1e2a,
+  0x414d, 0x0acf,
+  0x414f, 0x1e2b,
+  0x4150, 0x0ad2,
+  0x415f, 0x1e2c,
+  0x4160, 0x0ae2,
+  0x4169, 0x1e2d,
+  0x416a, 0x0aec,
+  0x4221, 0x0b01,
+  0x4237, 0x1f27,
+  0x4238, 0x0b18,
+  0x423d, 0x1e2e,
+  0x423e, 0x0b1e,
+  0x424d, 0x1e2f,
+  0x424e, 0x0b2e,
+  0x425c, 0x1e30,
+  0x425d, 0x0b3d,
+  0x4263, 0x1e31,
+  0x4264, 0x0b44,
+  0x426f, 0x1e32,
+  0x4270, 0x0b50,
+  0x427d, 0x1e35,
+  0x427e, 0x0b5e,
+  0x4321, 0x0b5f,
+  0x4327, 0x1e36,
+  0x4328, 0x0b66,
+  0x4329, 0x1e37,
+  0x432a, 0x0b68,
+  0x432d, 0x1e39,
+  0x432f, 0x0b6d,
+  0x433d, 0x1e3b,
+  0x433e, 0x0b7c,
+  0x4370, 0x1e3c,
+  0x4371, 0x0baf,
+  0x4375, 0x1e3d,
+  0x4376, 0x0bb4,
+  0x437c, 0x1e3e,
+  0x437d, 0x0bbb,
+  0x4421, 0x0bbd,
+  0x443d, 0x1e3f,
+  0x443e, 0x0bda,
+  0x4448, 0x1e40,
+  0x4449, 0x0be5,
+  0x444a, 0x1e41,
+  0x444b, 0x0be7,
+  0x444f, 0x1e43,
+  0x4450, 0x0bec,
+  0x4521, 0x0c1b,
+  0x4522, 0x1e44,
+  0x4523, 0x0c1d,
+  0x4527, 0x1e45,
+  0x4528, 0x0c22,
+  0x452e, 0x1e46,
+  0x452f, 0x0c29,
+  0x4536, 0x1e47,
+  0x4537, 0x0c31,
+  0x453f, 0x1e48,
+  0x4540, 0x0c3a,
+  0x4548, 0x1e49,
+  0x4549, 0x0c43,
+  0x454b, 0x1e4a,
+  0x454c, 0x0c46,
+  0x4551, 0x1f28,
+  0x4552, 0x1e4c,
+  0x4553, 0x0c4d,
+  0x4564, 0x1e4d,
+  0x4565, 0x0c5f,
+  0x4578, 0x1e4e,
+  0x4579, 0x0c73,
+  0x4621, 0x0c79,
+  0x4642, 0x1e50,
+  0x4643, 0x0c9b,
+  0x4654, 0x1e51,
+  0x4655, 0x0cad,
+  0x465b, 0x1e53,
+  0x465c, 0x0cb4,
+  0x4666, 0x1e56,
+  0x4668, 0x0cc0,
+  0x466a, 0x1e58,
+  0x466b, 0x0cc3,
+  0x4676, 0x1ec0,
+  0x4677, 0x0ccf,
+  0x4721, 0x0cd7,
+  0x4729, 0x1e59,
+  0x472a, 0x1f29,
+  0x472b, 0x0ce1,
+  0x4739, 0x1e5a,
+  0x473a, 0x0cf0,
+  0x4757, 0x1e5b,
+  0x4758, 0x0d0e,
+  0x4767, 0x1e5c,
+  0x4768, 0x0d1e,
+  0x4769, 0x1e5d,
+  0x476a, 0x0d20,
+  0x476d, 0x1e5e,
+  0x476e, 0x0d24,
+  0x4821, 0x0d35,
+  0x4824, 0x1e5f,
+  0x4825, 0x0d39,
+  0x482e, 0x1e60,
+  0x482f, 0x0d43,
+  0x4830, 0x1e61,
+  0x4831, 0x0d45,
+  0x4840, 0x1f2a,
+  0x4841, 0x0d55,
+  0x4854, 0x1e62,
+  0x4855, 0x0d69,
+  0x4875, 0x1e64,
+  0x4876, 0x0d8a,
+  0x4921, 0x0d93,
+  0x4922, 0x1e65,
+  0x4924, 0x0d96,
+  0x492f, 0x1e67,
+  0x4930, 0x0da2,
+  0x4932, 0x1e68,
+  0x4933, 0x0da5,
+  0x4935, 0x1e69,
+  0x4936, 0x0da8,
+  0x4940, 0x1e6a,
+  0x4941, 0x0db3,
+  0x494e, 0x1e6b,
+  0x494f, 0x0dc1,
+  0x4a21, 0x0df1,
+  0x4a43, 0x1e6d,
+  0x4a44, 0x0e14,
+  0x4a4d, 0x1e6e,
+  0x4a4e, 0x0e1e,
+  0x4a53, 0x1f2b,
+  0x4a54, 0x0e24,
+  0x4a5a, 0x1e6f,
+  0x4a5b, 0x0e2b,
+  0x4a79, 0x1e70,
+  0x4a7a, 0x0e4a,
+  0x4b21, 0x0e4f,
+  0x4b29, 0x1e72,
+  0x4b2a, 0x0e58,
+  0x4b4b, 0x1e73,
+  0x4b4c, 0x0e7a,
+  0x4b70, 0x1e74,
+  0x4b71, 0x0e9f,
+  0x4b78, 0x1f2c,
+  0x4b79, 0x0ea7,
+  0x4c21, 0x0ead,
+  0x4c4d, 0x1e75,
+  0x4c4e, 0x0eda,
+  0x4c59, 0x1e76,
+  0x4c5a, 0x0ee6,
+  0x4c5f, 0x1e77,
+  0x4c60, 0x0eec,
+  0x4c62, 0x1e78,
+  0x4c63, 0x0eef,
+  0x4c7a, 0x1e79,
+  0x4c7b, 0x0f07,
+  0x4c7c, 0x1e7a,
+  0x4c7d, 0x0f09,
+  0x4d21, 0x0f0b,
+  0x4d32, 0x1e7c,
+  0x4d33, 0x0f1d,
+  0x4d50, 0x1e7d,
+  0x4d51, 0x0f3b,
+  0x4d54, 0x1e7e,
+  0x4d55, 0x0f3f,
+  0x4d69, 0x1e7f,
+  0x4d6a, 0x0f54,
+  0x4e21, 0x0f69,
+  0x4e7a, 0x1e81,
+  0x4e7c, 0x1f2d,
+  0x4e7d, 0x0fc5,
+  0x4f21, 0x1e83,
+  0x4f22, 0x0fc8,
+  0x4f31, 0x1e84,
+  0x4f32, 0x0fd8,
+  0x4f39, 0x1e85,
+  0x4f3a, 0x0fe0,
+  0x5021, 0x0ffa,
+  0x5121, 0x1058,
+  0x5122, 0x1f2e,
+  0x5123, 0x105a,
+  0x513d, 0x1e86,
+  0x513e, 0x1075,
+  0x514d, 0x1e89,
+  0x514e, 0x1085,
+  0x5221, 0x10b6,
+  0x5238, 0x1f2f,
+  0x5239, 0x10ce,
+  0x5321, 0x1114,
+  0x5330, 0x1e8a,
+  0x5331, 0x1124,
+  0x533a, 0x1e8b,
+  0x533b, 0x112e,
+  0x5348, 0x1f30,
+  0x5349, 0x113c,
+  0x535e, 0x1e8d,
+  0x535f, 0x1152,
+  0x536b, 0x1e8e,
+  0x536c, 0x1f31,
+  0x536d, 0x1160,
+  0x5421, 0x1172,
+  0x5444, 0x1e8f,
+  0x5445, 0x1f32,
+  0x5446, 0x1197,
+  0x546c, 0x1f33,
+  0x546d, 0x11be,
+  0x5521, 0x11d0,
+  0x553d, 0x1e90,
+  0x553e, 0x11ed,
+  0x5563, 0x1e91,
+  0x5564, 0x1213,
+  0x5578, 0x1f34,
+  0x5579, 0x1228,
+  0x5621, 0x122e,
+  0x5622, 0x1e92,
+  0x5623, 0x1230,
+  0x567d, 0x1f35,
+  0x5721, 0x128c,
+  0x5821, 0x12ea,
+  0x5824, 0x1e94,
+  0x5825, 0x12ee,
+  0x5921, 0x1348,
+  0x5928, 0x1f37,
+  0x5929, 0x1350,
+  0x5960, 0x1e95,
+  0x5961, 0x1388,
+  0x596c, 0x1e96,
+  0x596d, 0x1394,
+  0x5a21, 0x13a6,
+  0x5a39, 0x1e97,
+  0x5a3a, 0x13bf,
+  0x5a7a, 0x1f38,
+  0x5a7b, 0x1400,
+  0x5b21, 0x1404,
+  0x5b45, 0x1e99,
+  0x5b46, 0x1429,
+  0x5b6b, 0x1e9b,
+  0x5b6c, 0x144f,
+  0x5c21, 0x1462,
+  0x5d21, 0x14c0,
+  0x5d61, 0x1f39,
+  0x5d62, 0x1501,
+  0x5e21, 0x151e,
+  0x5e50, 0x1e9d,
+  0x5e51, 0x154e,
+  0x5e56, 0x1f3a,
+  0x5e57, 0x1554,
+  0x5e76, 0x1f3b,
+  0x5e77, 0x1574,
+  0x5f21, 0x157c,
+  0x5f73, 0x1e9e,
+  0x5f74, 0x15cf,
+  0x6021, 0x15da,
+  0x6026, 0x1e9f,
+  0x6027, 0x15e0,
+  0x605f, 0x1ea0,
+  0x6060, 0x1619,
+  0x6121, 0x1638,
+  0x612b, 0x1ea1,
+  0x612c, 0x1643,
+  0x6221, 0x1696,
+  0x626f, 0x1ea5,
+  0x6270, 0x16e5,
+  0x6321, 0x16f4,
+  0x634a, 0x1ea6,
+  0x634b, 0x171e,
+  0x6354, 0x1ea7,
+  0x6355, 0x1728,
+  0x6359, 0x1f3c,
+  0x635a, 0x172d,
+  0x6421, 0x1752,
+  0x6439, 0x1ea8,
+  0x643a, 0x176b,
+  0x6440, 0x1f3d,
+  0x6441, 0x1772,
+  0x6464, 0x1ea9,
+  0x6465, 0x1796,
+  0x646e, 0x1eaa,
+  0x646f, 0x17a0,
+  0x6521, 0x17b0,
+  0x6539, 0x1eab,
+  0x653a, 0x17c9,
+  0x653b, 0x1eac,
+  0x653c, 0x17cb,
+  0x6546, 0x1ead,
+  0x6547, 0x17d6,
+  0x6621, 0x180e,
+  0x6649, 0x1f3e,
+  0x664a, 0x1837,
+  0x6721, 0x186c,
+  0x6764, 0x1eaf,
+  0x6765, 0x18b0,
+  0x6769, 0x1eb0,
+  0x676a, 0x18b5,
+  0x6772, 0x1eb1,
+  0x6773, 0x18be,
+  0x6821, 0x18ca,
+  0x683b, 0x1eb3,
+  0x683c, 0x18e5,
+  0x684d, 0x1f3f,
+  0x684e, 0x18f7,
+  0x6921, 0x1928,
+  0x697e, 0x1f40,
+  0x6a21, 0x1986,
+  0x6a3c, 0x1f41,
+  0x6a3e, 0x19a3,
+  0x6a6f, 0x1eb8,
+  0x6a70, 0x19d5,
+  0x6b21, 0x19e4,
+  0x6b32, 0x1eb9,
+  0x6b33, 0x19f6,
+  0x6b66, 0x1eba,
+  0x6b67, 0x1a2a,
+  0x6c21, 0x1a42,
+  0x6c69, 0x1ebc,
+  0x6c6a, 0x1a8b,
+  0x6d21, 0x1aa0,
+  0x6d4e, 0x1ebe,
+  0x6d4f, 0x1ace,
+  0x6e21, 0x1afe,
+  0x6e29, 0x1ec1,
+  0x6e2a, 0x1b07,
+  0x6e3d, 0x1ec2,
+  0x6e3e, 0x1b1b,
+  0x6f21, 0x1b5c,
+  0x7021, 0x1bba,
+  0x7051, 0x1ec7,
+  0x7052, 0x1beb,
+  0x7121, 0x1c18,
+  0x7159, 0x1f43,
+  0x715a, 0x1c51,
+  0x7221, 0x1c76,
+  0x722d, 0x1eca,
+  0x722e, 0x1c83,
+  0x723c, 0x1ecb,
+  0x723d, 0x1c92,
+  0x724e, 0x1ecc,
+  0x724f, 0x1ca4,
+  0x7321, 0x1cd4,
+  0x7351, 0x1ecd,
+  0x7352, 0x1f44,
+  0x7353, 0x1d06,
+  0x737d, 0x1ece,
+  0x737e, 0x1d31,
+  0x7421, 0x1d32,
+  0x7425, 0x205c,
+  0x7721, 0x1f45,
+  0x7727, 0x1f48,
+  0x7728, 0x0300,
+  0x7729, 0x02fa,
+  0x772a, 0x02f9,
+  0x772e, 0x1f49,
+  0x773c, 0x1db1,
+  0x773f, 0x1f54,
+  0x7740, 0x1db7,
+  0x7741, 0x1f55,
+  0x7744, 0x1db4,
+  0x7747, 0x1f58,
+  0x7751, 0x0303,
+  0x7752, 0x1f62,
+  0x7753, 0x0304,
+  0x7754, 0x1f63,
+  0x7757, 0x1f65,
+  0x7759, 0x1da4,
+  0x775a, 0x1da1,
+  0x775b, 0x1f66,
+  0x775c, 0x1da2,
+  0x775d, 0x1f67,
+  0x7760, 0x1da6,
+  0x7761, 0x1f6a,
+  0x7762, 0x1da8,
+  0x7763, 0x1dac,
+  0x7764, 0x1f6b,
+  0x7765, 0x1dae,
+  0x7766, 0x1dab,
+  0x7767, 0x1f6c,
+  0x7769, 0x1daf,
+  0x776a, 0x1f6e,
+  0x7774, 0x1f75,
+  0x777a, 0x1dba,
+  0x777b, 0x1f7b,
+  0x777e, 0x1f7c,
+  0x7829, 0x1f7d,
+  0x7834, 0x1f87,
+  0x7849, 0x1d83,
+  0x785d, 0x1f9b,
+  0x785e, 0x1d97,
+  0x786b, 0x1f9c,
+  0x7921, 0x1fb0,
+  0x7945, 0x1f16,
+  0x7949, 0x1fca,
+  0x794b, 0x1dc4,
+  0x794c, 0x1fcc,
+  0x794f, 0x1dc3,
+  0x7950, 0x1fcf,
+  0x7955, 0x1dc2,
+  0x7956, 0x1fd4,
+  0x795d, 0x1fd8,
+  0x796f, 0x1fe6,
+  0x7d21, 0x1ecf,
+  0x7d23, 0x204c,
+  0x7d24, 0x2052,
+  0x7d25, 0x1ed1,
+  0x7d2f, 0x205a,
+  0x7d30, 0x2053,
+  0x7d31, 0x2058,
+  0x7d32, 0x2055,
+  0x7d33, 0x1edb,
+  0x7d45, 0x1eee,
+  0x7d5b, 0x2048,
+  0x7d6d, 0x02e0,
+  0x7d71, 0x1ff6,
+  0x2122, 0x1ecf,
+  0x2124, 0x204c,
+  0x2125, 0x2052,
+  0x2131, 0x1ed1,
+  0x213c, 0x1ed3,
+  0x2141, 0x1ed6,
+  0x2146, 0x205a,
+  0x2147, 0x2053,
+  0x2148, 0x2058,
+  0x2149, 0x2055,
+  0x214a, 0x1edb,
+  0x2421, 0x1eee,
+  0x2423, 0x1eef,
+  0x2425, 0x1ef0,
+  0x2427, 0x1ef1,
+  0x2429, 0x1ef2,
+  0x2443, 0x1ef3,
+  0x2463, 0x1ef4,
+  0x2465, 0x1ef5,
+  0x2467, 0x1ef6,
+  0x246e, 0x1ef7,
+  0x2475, 0x2048,
+  0x2521, 0x1ef8,
+  0x2523, 0x1ef9,
+  0x2525, 0x1efa,
+  0x2527, 0x1efb,
+  0x2529, 0x1efc,
+  0x2543, 0x1efd,
+  0x2563, 0x1efe,
+  0x2565, 0x1eff,
+  0x2567, 0x1f00,
+  0x256e, 0x1f01,
+  0x2575, 0x1f02,
+  0x7759, 0x1f07,
+  0x775a, 0x1f04,
+  0x775b, 0x2089,
+  0x775c, 0x1f05,
+  0x775d, 0x208a,
+  0x775e, 0x2093,
+  0x7760, 0x1f09,
+  0x7761, 0x2092,
+  0x7762, 0x1f0b,
+  0x7763, 0x1f0f,
+  0x7764, 0x209c,
+  0x7765, 0x1f11,
+  0x7766, 0x1f0e,
+  0x7767, 0x2098,
+  0x7768, 0x209b,
+  0x7769, 0x1f12,
+  0x776a, 0x2097,
+  0x776b, 0x209d,
+  0x776d, 0x20a6,
+  0x776e, 0x20a5,
+  0x776f, 0x20a1,
+  0x7770, 0x20a4,
+  0x7775, 0x2084,
+  0x7d72, 0x208d,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan12AddRKSJHEnc16 = {
+static GfxFontEncoding16 japan12AddVEnc16 = {
+  1,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
   { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
-    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
-    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
-    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
-    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
-    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
-    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
-    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
-    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
-    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
-    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
-    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
-    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
-    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
-    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
-    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
-    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
-    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
-    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12AddRKSJHMap2, 635
+  japan12AddVMap2, 690
 };
 
 static Gushort japan12AdobeJapan10Map2[70] = {
@@ -5274,6 +10724,7 @@ static Gushort japan12AdobeJapan10Map2[70] = {
 };
 
 static GfxFontEncoding16 japan12AdobeJapan10Enc16 = {
+  0,
   { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -5364,6 +10815,7 @@ static Gushort japan12AdobeJapan11Map2[70] = {
 };
 
 static GfxFontEncoding16 japan12AdobeJapan11Enc16 = {
+  0,
   { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -5455,14 +10907,186 @@ static Gushort japan12AdobeJapan12Map2[74] = {
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan12AdobeJapan12Enc16 = {
-  { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+static GfxFontEncoding16 japan12AdobeJapan12Enc16 = {
+  0,
+  { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12AdobeJapan12Map2, 37
+};
+
+static Gushort japan12EUCHMap2[242] = {
+  0x0000, 0x0000,
+  0x8ea0, 0x0146,
+  0xa1a1, 0x0279,
+  0xa2a1, 0x02d7,
+  0xa2ba, 0x02e5,
+  0xa2ca, 0x02ed,
+  0xa2dc, 0x02f4,
+  0xa2f2, 0x0303,
+  0xa2fe, 0x030b,
+  0xa3b0, 0x030c,
+  0xa3c1, 0x0316,
+  0xa3e1, 0x0330,
+  0xa4a1, 0x034a,
+  0xa5a1, 0x039d,
+  0xa6a1, 0x03f3,
+  0xa6c1, 0x040b,
+  0xa7a1, 0x0423,
+  0xa7d1, 0x0444,
+  0xa8a1, 0x1d37,
+  0xa8a2, 0x1d39,
+  0xa8a3, 0x1d43,
+  0xa8a4, 0x1d47,
+  0xa8a5, 0x1d4f,
+  0xa8a6, 0x1d4b,
+  0xa8a7, 0x1d53,
+  0xa8a8, 0x1d63,
+  0xa8a9, 0x1d5b,
+  0xa8aa, 0x1d6b,
+  0xa8ab, 0x1d73,
+  0xa8ac, 0x1d38,
+  0xa8ad, 0x1d3a,
+  0xa8ae, 0x1d46,
+  0xa8af, 0x1d4a,
+  0xa8b0, 0x1d52,
+  0xa8b1, 0x1d4e,
+  0xa8b2, 0x1d5a,
+  0xa8b3, 0x1d6a,
+  0xa8b4, 0x1d62,
+  0xa8b5, 0x1d72,
+  0xa8b6, 0x1d82,
+  0xa8b7, 0x1d57,
+  0xa8b8, 0x1d66,
+  0xa8b9, 0x1d5f,
+  0xa8ba, 0x1d6e,
+  0xa8bb, 0x1d76,
+  0xa8bc, 0x1d54,
+  0xa8bd, 0x1d67,
+  0xa8be, 0x1d5c,
+  0xa8bf, 0x1d6f,
+  0xa8c0, 0x1d79,
+  0xb0a1, 0x0465,
+  0xb1a1, 0x04c3,
+  0xb2a1, 0x0521,
+  0xb3a1, 0x057f,
+  0xb4a1, 0x05dd,
+  0xb5a1, 0x063b,
+  0xb6a1, 0x0699,
+  0xb7a1, 0x06f7,
+  0xb8a1, 0x0755,
+  0xb9a1, 0x07b3,
+  0xbaa1, 0x0811,
+  0xbba1, 0x086f,
+  0xbca1, 0x08cd,
+  0xbda1, 0x092b,
+  0xbea1, 0x0989,
+  0xbfa1, 0x09e7,
+  0xc0a1, 0x0a45,
+  0xc1a1, 0x0aa3,
+  0xc2a1, 0x0b01,
+  0xc3a1, 0x0b5f,
+  0xc4a1, 0x0bbd,
+  0xc5a1, 0x0c1b,
+  0xc6a1, 0x0c79,
+  0xc7a1, 0x0cd7,
+  0xc8a1, 0x0d35,
+  0xc9a1, 0x0d93,
+  0xcaa1, 0x0df1,
+  0xcba1, 0x0e4f,
+  0xcca1, 0x0ead,
+  0xcda1, 0x0f0b,
+  0xcea1, 0x0f69,
+  0xcfa1, 0x0fc7,
+  0xd0a1, 0x0ffa,
+  0xd1a1, 0x1058,
+  0xd2a1, 0x10b6,
+  0xd3a1, 0x1114,
+  0xd4a1, 0x1172,
+  0xd5a1, 0x11d0,
+  0xd6a1, 0x122e,
+  0xd7a1, 0x128c,
+  0xd8a1, 0x12ea,
+  0xd9a1, 0x1348,
+  0xdaa1, 0x13a6,
+  0xdba1, 0x1404,
+  0xdca1, 0x1462,
+  0xdda1, 0x14c0,
+  0xdea1, 0x151e,
+  0xdfa1, 0x157c,
+  0xe0a1, 0x15da,
+  0xe1a1, 0x1638,
+  0xe2a1, 0x1696,
+  0xe3a1, 0x16f4,
+  0xe4a1, 0x1752,
+  0xe5a1, 0x17b0,
+  0xe6a1, 0x180e,
+  0xe7a1, 0x186c,
+  0xe8a1, 0x18ca,
+  0xe9a1, 0x1928,
+  0xeaa1, 0x1986,
+  0xeba1, 0x19e4,
+  0xeca1, 0x1a42,
+  0xeda1, 0x1aa0,
+  0xeea1, 0x1afe,
+  0xefa1, 0x1b5c,
+  0xf0a1, 0x1bba,
+  0xf1a1, 0x1c18,
+  0xf2a1, 0x1c76,
+  0xf3a1, 0x1cd4,
+  0xf4a1, 0x1d32,
+  0xf4a5, 0x205c,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12EUCHEnc16 = {
+  0,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -5470,24 +11094,30 @@ static GfxFontEncoding16 japan12AdobeJapan12Enc16 = {
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 },
   { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -5504,10 +11134,10 @@ static GfxFontEncoding16 japan12AdobeJapan12Enc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12AdobeJapan12Map2, 37
+  japan12EUCHMap2, 121
 };
 
-static Gushort japan12EUCHMap2[242] = {
+static Gushort japan12EUCVMap2[296] = {
   0x0000, 0x0000,
   0x8ea0, 0x0146,
   0xa1a1, 0x0279,
@@ -5628,10 +11258,38 @@ static Gushort japan12EUCHMap2[242] = {
   0xf3a1, 0x1cd4,
   0xf4a1, 0x1d32,
   0xf4a5, 0x205c,
+  0xa1a2, 0x1ecf,
+  0xa1b1, 0x1ed1,
+  0xa1bc, 0x1ed3,
+  0xa1c1, 0x1ed6,
+  0xa1ca, 0x1edb,
+  0xa1e1, 0x1eed,
+  0xa4a1, 0x1eee,
+  0xa4a3, 0x1eef,
+  0xa4a5, 0x1ef0,
+  0xa4a7, 0x1ef1,
+  0xa4a9, 0x1ef2,
+  0xa4c3, 0x1ef3,
+  0xa4e3, 0x1ef4,
+  0xa4e5, 0x1ef5,
+  0xa4e7, 0x1ef6,
+  0xa4ee, 0x1ef7,
+  0xa5a1, 0x1ef8,
+  0xa5a3, 0x1ef9,
+  0xa5a5, 0x1efa,
+  0xa5a7, 0x1efb,
+  0xa5a9, 0x1efc,
+  0xa5c3, 0x1efd,
+  0xa5e3, 0x1efe,
+  0xa5e5, 0x1eff,
+  0xa5e7, 0x1f00,
+  0xa5ee, 0x1f01,
+  0xa5f5, 0x1f02,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan12EUCHEnc16 = {
+static GfxFontEncoding16 japan12EUCVEnc16 = {
+  1,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -5680,7 +11338,7 @@ static GfxFontEncoding16 japan12EUCHEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12EUCHMap2, 121
+  japan12EUCVMap2, 148
 };
 
 static Gushort japan12ExtHMap2[1326] = {
@@ -6349,59 +12007,781 @@ static Gushort japan12ExtHMap2[1326] = {
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan12ExtHEnc16 = {
+static GfxFontEncoding16 japan12ExtHEnc16 = {
+  0,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12ExtHMap2, 663
+};
+
+static Gushort japan12ExtRKSJHMap2[1330] = {
+  0x0000, 0x0000,
+  0x8140, 0x0279,
+  0x8180, 0x02b8,
+  0x8189, 0x1d36,
+  0x818a, 0x02c2,
+  0x824f, 0x030c,
+  0x8260, 0x0316,
+  0x8281, 0x0330,
+  0x829f, 0x034a,
+  0x8340, 0x039d,
+  0x8380, 0x03dc,
+  0x839f, 0x03f3,
+  0x83bf, 0x040b,
+  0x8440, 0x0423,
+  0x8470, 0x0444,
+  0x8480, 0x0453,
+  0x8540, 0x00e8,
+  0x8580, 0x0186,
+  0x8581, 0x0128,
+  0x859f, 0x0147,
+  0x85de, 0x0187,
+  0x8640, 0x01a6,
+  0x8680, 0x01e5,
+  0x8692, 0x0127,
+  0x8693, 0x01f7,
+  0x86a2, 0x1d37,
+  0x8740, 0x1d83,
+  0x875f, 0x1da1,
+  0x877e, 0x2083,
+  0x8780, 0x1db8,
+  0x8790, 0x02fa,
+  0x8791, 0x02f9,
+  0x8792, 0x0301,
+  0x8793, 0x1dc8,
+  0x879a, 0x0300,
+  0x879b, 0x1dcf,
+  0x889f, 0x0465,
+  0x88a0, 0x1dd1,
+  0x88a1, 0x0467,
+  0x88b1, 0x1ca2,
+  0x88b2, 0x0478,
+  0x88b9, 0x1dd2,
+  0x88ba, 0x0480,
+  0x88ec, 0x1dd3,
+  0x88ed, 0x04b3,
+  0x88f1, 0x1dd4,
+  0x88f2, 0x04b8,
+  0x88fa, 0x1dd5,
+  0x88fb, 0x04c1,
+  0x8940, 0x04c3,
+  0x8949, 0x1dd6,
+  0x894a, 0x04cd,
+  0x8954, 0x1dd7,
+  0x8955, 0x04d8,
+  0x8958, 0x1dd8,
+  0x8959, 0x04dc,
+  0x895b, 0x1dd9,
+  0x895d, 0x04e0,
+  0x8961, 0x1ddb,
+  0x8962, 0x04e5,
+  0x8980, 0x0502,
+  0x898b, 0x1ddc,
+  0x898c, 0x050e,
+  0x89a6, 0x1ddd,
+  0x89a7, 0x1cc9,
+  0x89a8, 0x1dde,
+  0x89a9, 0x052b,
+  0x89de, 0x1ddf,
+  0x89df, 0x0561,
+  0x89f8, 0x1de0,
+  0x89f9, 0x057b,
+  0x89fb, 0x1de1,
+  0x89fc, 0x057e,
+  0x8a40, 0x057f,
+  0x8a41, 0x1de2,
+  0x8a42, 0x0581,
+  0x8a61, 0x1961,
+  0x8a62, 0x05a1,
+  0x8a68, 0x139f,
+  0x8a69, 0x05a8,
+  0x8a80, 0x05be,
+  0x8a85, 0x1de3,
+  0x8a86, 0x05c4,
+  0x8a8b, 0x1de4,
+  0x8a8c, 0x05ca,
+  0x8a93, 0x1de5,
+  0x8a94, 0x05d2,
+  0x8a96, 0x1731,
+  0x8a97, 0x05d5,
+  0x8a9a, 0x1de6,
+  0x8a9b, 0x05d9,
+  0x8ac0, 0x1de7,
+  0x8ac1, 0x1572,
+  0x8ac2, 0x0600,
+  0x8acb, 0x1de8,
+  0x8acc, 0x060a,
+  0x8ad0, 0x1a20,
+  0x8ad1, 0x060f,
+  0x8ae3, 0x1de9,
+  0x8ae4, 0x0622,
+  0x8b40, 0x063b,
+  0x8b4a, 0x1dea,
+  0x8b4b, 0x0646,
+  0x8b5f, 0x1deb,
+  0x8b60, 0x065b,
+  0x8b80, 0x067a,
+  0x8ba0, 0x1dec,
+  0x8ba1, 0x069b,
+  0x8ba8, 0x1ded,
+  0x8ba9, 0x06a3,
+  0x8bc4, 0x1d32,
+  0x8bc5, 0x06bf,
+  0x8bcd, 0x1dee,
+  0x8bce, 0x06c8,
+  0x8beb, 0x1def,
+  0x8bec, 0x06e6,
+  0x8bf2, 0x1df0,
+  0x8bf3, 0x06ed,
+  0x8bf9, 0x1df1,
+  0x8bfa, 0x06f4,
+  0x8bfb, 0x1df2,
+  0x8bfc, 0x06f6,
+  0x8c40, 0x06f7,
+  0x8c43, 0x1df3,
+  0x8c44, 0x06fb,
+  0x8c56, 0x1df4,
+  0x8c57, 0x070e,
+  0x8c64, 0x1df5,
+  0x8c65, 0x071c,
+  0x8c6d, 0x1df6,
+  0x8c6e, 0x0725,
+  0x8c71, 0x1df7,
+  0x8c72, 0x0729,
+  0x8c74, 0x1df8,
+  0x8c75, 0x072c,
+  0x8c7a, 0x1c0d,
+  0x8c7b, 0x0732,
+  0x8c80, 0x0736,
+  0x8c84, 0x1df9,
+  0x8c85, 0x073b,
+  0x8c91, 0x1dfa,
+  0x8c92, 0x0748,
+  0x8c99, 0x1dfb,
+  0x8c9a, 0x0750,
+  0x8c9e, 0x1dfc,
+  0x8c9f, 0x0755,
+  0x8cb2, 0x1dfd,
+  0x8cb3, 0x0769,
+  0x8cbf, 0x1dfe,
+  0x8cc0, 0x0776,
+  0x8d40, 0x07b3,
+  0x8d4a, 0x1dff,
+  0x8d4b, 0x07be,
+  0x8d56, 0x1e00,
+  0x8d57, 0x07ca,
+  0x8d61, 0x1e01,
+  0x8d62, 0x07d5,
+  0x8d7b, 0x16dd,
+  0x8d7c, 0x07ef,
+  0x8d80, 0x07f2,
+  0x8d8d, 0x1e02,
+  0x8d8e, 0x0800,
+  0x8d94, 0x1e03,
+  0x8d95, 0x0807,
+  0x8d99, 0x1e04,
+  0x8d9a, 0x080c,
+  0x8dd1, 0x1e05,
+  0x8dd2, 0x0844,
+  0x8de5, 0x1e06,
+  0x8de6, 0x0858,
+  0x8df2, 0x1e07,
+  0x8df3, 0x0865,
+  0x8e40, 0x086f,
+  0x8e46, 0x1e08,
+  0x8e47, 0x0876,
+  0x8e49, 0x1e09,
+  0x8e4a, 0x0879,
+  0x8e4b, 0x1e0a,
+  0x8e4c, 0x087b,
+  0x8e58, 0x1e0b,
+  0x8e59, 0x0888,
+  0x8e80, 0x08ae,
+  0x8eb6, 0x1e0c,
+  0x8eb7, 0x08e5,
+  0x8ec6, 0x1e0d,
+  0x8ec7, 0x1929,
+  0x8ec8, 0x08f6,
+  0x8ed5, 0x1e0e,
+  0x8ed6, 0x0904,
+  0x8edb, 0x1e0f,
+  0x8edd, 0x090b,
+  0x8f40, 0x092b,
+  0x8f4a, 0x1e11,
+  0x8f4b, 0x0936,
+  0x8f55, 0x1e12,
+  0x8f56, 0x0941,
+  0x8f80, 0x096a,
+  0x8f8c, 0x1e13,
+  0x8f8e, 0x0978,
+  0x8f92, 0x1e15,
+  0x8f94, 0x097e,
+  0x8fa3, 0x1e17,
+  0x8fa4, 0x098e,
+  0x8fb1, 0x1e18,
+  0x8fb2, 0x099c,
+  0x8fbd, 0x1e19,
+  0x8fbe, 0x09a8,
+  0x8fd3, 0x1e1a,
+  0x8fd4, 0x09be,
+  0x8fdd, 0x1e1b,
+  0x8fde, 0x09c8,
+  0x8fe2, 0x1e1c,
+  0x8fe3, 0x09cd,
+  0x9040, 0x09e7,
+  0x9049, 0x1e1d,
+  0x904a, 0x09f1,
+  0x9078, 0x1e1e,
+  0x9079, 0x0a20,
+  0x9080, 0x1e1f,
+  0x9081, 0x0a27,
+  0x9089, 0x1e20,
+  0x908a, 0x0a30,
+  0x90a0, 0x1e21,
+  0x90a1, 0x0a47,
+  0x90c0, 0x1e22,
+  0x90c1, 0x0a67,
+  0x90e4, 0x1e23,
+  0x90e5, 0x0a8b,
+  0x90ef, 0x1e24,
+  0x90f1, 0x0a97,
+  0x90f7, 0x1e26,
+  0x90f9, 0x0a9f,
+  0x9140, 0x0aa3,
+  0x9146, 0x1e28,
+  0x9147, 0x1a6e,
+  0x9148, 0x0aab,
+  0x9158, 0x1e29,
+  0x9159, 0x0abc,
+  0x916b, 0x1e2a,
+  0x916c, 0x0acf,
+  0x916e, 0x1e2b,
+  0x916f, 0x0ad2,
+  0x917e, 0x1e2c,
+  0x9180, 0x0ae2,
+  0x9189, 0x1e2d,
+  0x918a, 0x0aec,
+  0x91bb, 0x1e2e,
+  0x91bc, 0x0b1e,
+  0x91cb, 0x1e2f,
+  0x91cc, 0x0b2e,
+  0x91da, 0x1e30,
+  0x91db, 0x0b3d,
+  0x91e1, 0x1e31,
+  0x91e2, 0x0b44,
+  0x91ed, 0x1e32,
+  0x91ee, 0x0b50,
+  0x91f3, 0x1e33,
+  0x91f5, 0x0b57,
+  0x91fb, 0x1e35,
+  0x91fc, 0x0b5e,
+  0x9240, 0x0b5f,
+  0x9246, 0x1e36,
+  0x9247, 0x0b66,
+  0x9248, 0x1e37,
+  0x924a, 0x0b69,
+  0x924c, 0x1e39,
+  0x924e, 0x0b6d,
+  0x925c, 0x1e3b,
+  0x925d, 0x0b7c,
+  0x9280, 0x0b9e,
+  0x9290, 0x1e3c,
+  0x9291, 0x0baf,
+  0x9295, 0x1e3d,
+  0x9296, 0x0bb4,
+  0x929c, 0x1e3e,
+  0x929d, 0x0bbb,
+  0x92bb, 0x1e3f,
+  0x92bc, 0x0bda,
+  0x92c6, 0x1e40,
+  0x92c7, 0x0be5,
+  0x92c8, 0x1e41,
+  0x92c9, 0x0be7,
+  0x92cb, 0x1e42,
+  0x92cc, 0x0bea,
+  0x92cd, 0x1e43,
+  0x92ce, 0x0bec,
+  0x92d9, 0x11b5,
+  0x92da, 0x0bf8,
+  0x9340, 0x0c1b,
+  0x9341, 0x1e44,
+  0x9342, 0x0c1d,
+  0x9346, 0x1e45,
+  0x9347, 0x0c22,
+  0x934d, 0x1e46,
+  0x934e, 0x0c29,
+  0x9355, 0x1e47,
+  0x9356, 0x0c31,
+  0x935e, 0x1e48,
+  0x935f, 0x0c3a,
+  0x9367, 0x1e49,
+  0x9368, 0x0c43,
+  0x936a, 0x1e4a,
+  0x936b, 0x0c46,
+  0x9370, 0x1e4b,
+  0x9372, 0x0c4d,
+  0x9376, 0x16df,
+  0x9377, 0x0c52,
+  0x9380, 0x0c5a,
+  0x9384, 0x1e4d,
+  0x9385, 0x0c5f,
+  0x938e, 0x1450,
+  0x938f, 0x0c69,
+  0x9393, 0x1536,
+  0x9394, 0x0c6e,
+  0x9398, 0x1e4e,
+  0x9399, 0x0c73,
+  0x93bc, 0x1e4f,
+  0x93bd, 0x0c97,
+  0x93c0, 0x1e50,
+  0x93c1, 0x0c9b,
+  0x93d2, 0x1e51,
+  0x93d4, 0x0cae,
+  0x93d9, 0x1e53,
+  0x93db, 0x0cb5,
+  0x93df, 0x1e55,
+  0x93e0, 0x0cba,
+  0x93e4, 0x1e56,
+  0x93e6, 0x0cc0,
+  0x93e8, 0x1e58,
+  0x93e9, 0x0cc3,
+  0x93f4, 0x1aed,
+  0x93f5, 0x0ccf,
+  0x9440, 0x0cd7,
+  0x9448, 0x1e59,
+  0x9449, 0x0ce0,
+  0x9458, 0x1e5a,
+  0x9459, 0x0cf0,
+  0x9476, 0x1e5b,
+  0x9477, 0x0d0e,
+  0x9480, 0x0d16,
+  0x9487, 0x1e5c,
+  0x9488, 0x1989,
+  0x9489, 0x1e5d,
+  0x948a, 0x0d20,
+  0x948d, 0x1e5e,
+  0x948e, 0x0d24,
+  0x94a2, 0x1e5f,
+  0x94a3, 0x0d39,
+  0x94ac, 0x1e60,
+  0x94ad, 0x0d43,
+  0x94ae, 0x1e61,
+  0x94af, 0x0d45,
+  0x94d2, 0x1e62,
+  0x94d3, 0x0d69,
+  0x94e0, 0x1e63,
+  0x94e1, 0x0d77,
+  0x94f3, 0x1e64,
+  0x94f4, 0x0d8a,
+  0x9540, 0x0d93,
+  0x9541, 0x1e65,
+  0x9543, 0x0d96,
+  0x954e, 0x1e67,
+  0x954f, 0x143b,
+  0x9550, 0x0da3,
+  0x9551, 0x1e68,
+  0x9552, 0x0da5,
+  0x9554, 0x1e69,
+  0x9555, 0x0da8,
+  0x955f, 0x1e6a,
+  0x9560, 0x0db3,
+  0x956d, 0x1e6b,
+  0x956e, 0x0dc1,
+  0x9570, 0x1e6c,
+  0x9571, 0x0dc4,
+  0x9580, 0x0dd2,
+  0x95c1, 0x1e6d,
+  0x95c2, 0x0e14,
+  0x95cb, 0x1e6e,
+  0x95cc, 0x0e1e,
+  0x95d8, 0x1e6f,
+  0x95d9, 0x0e2b,
+  0x95f7, 0x1e70,
+  0x95f8, 0x0e4a,
+  0x9640, 0x0e4f,
+  0x9641, 0x1e71,
+  0x9642, 0x0e51,
+  0x9648, 0x1e72,
+  0x9649, 0x0e58,
+  0x966a, 0x1e73,
+  0x966b, 0x0e7a,
+  0x9680, 0x0e8e,
+  0x968a, 0x1d33,
+  0x968b, 0x0e99,
+  0x9690, 0x1e74,
+  0x9691, 0x0e9f,
+  0x9699, 0x102f,
+  0x969a, 0x0ea8,
+  0x96cb, 0x1e75,
+  0x96cc, 0x0eda,
+  0x96d7, 0x1e76,
+  0x96d8, 0x0ee6,
+  0x96dd, 0x1e77,
+  0x96de, 0x0eec,
+  0x96e0, 0x1e78,
+  0x96e1, 0x0eef,
+  0x96f7, 0x1935,
+  0x96f8, 0x1e79,
+  0x96f9, 0x0f07,
+  0x96fa, 0x1e7a,
+  0x96fb, 0x0f09,
+  0x96fc, 0x1e7b,
+  0x9740, 0x0f0b,
+  0x9751, 0x1e7c,
+  0x9752, 0x0f1d,
+  0x976f, 0x1e7d,
+  0x9770, 0x0f3b,
+  0x9773, 0x1e7e,
+  0x9774, 0x0f3f,
+  0x9779, 0x1d34,
+  0x977a, 0x0f45,
+  0x9780, 0x0f4a,
+  0x9789, 0x1e7f,
+  0x978a, 0x0f54,
+  0x97c9, 0x1e80,
+  0x97ca, 0x0f94,
+  0x97f8, 0x1e81,
+  0x97fa, 0x0fc4,
+  0x9840, 0x1e83,
+  0x9841, 0x0fc8,
+  0x9850, 0x1e84,
+  0x9851, 0x0fd8,
+  0x9855, 0x1777,
+  0x9856, 0x0fdd,
+  0x9858, 0x1e85,
+  0x9859, 0x0fe0,
+  0x989f, 0x0ffa,
+  0x98d4, 0x0ea7,
+  0x98d5, 0x1030,
+  0x9940, 0x1058,
+  0x995c, 0x1e86,
+  0x995d, 0x1075,
+  0x9966, 0x1e87,
+  0x9967, 0x107f,
+  0x996a, 0x1e88,
+  0x996b, 0x1083,
+  0x996c, 0x1e89,
+  0x996d, 0x1085,
+  0x9980, 0x1097,
+  0x9a40, 0x1114,
+  0x9a4f, 0x1e8a,
+  0x9a50, 0x1124,
+  0x9a59, 0x1e8b,
+  0x9a5a, 0x112e,
+  0x9a6f, 0x1e8c,
+  0x9a70, 0x1144,
+  0x9a7d, 0x1e8d,
+  0x9a7e, 0x1152,
+  0x9a80, 0x1153,
+  0x9a8b, 0x1e8e,
+  0x9a8c, 0x115f,
+  0x9ac2, 0x1e8f,
+  0x9ac3, 0x1196,
+  0x9ae2, 0x0bf7,
+  0x9ae3, 0x11b6,
+  0x9b40, 0x11d0,
+  0x9b5c, 0x1e90,
+  0x9b5d, 0x11ed,
+  0x9b80, 0x120f,
+  0x9b83, 0x1e91,
+  0x9b84, 0x1213,
+  0x9ba0, 0x1e92,
+  0x9ba1, 0x1230,
+  0x9bf0, 0x1e93,
+  0x9bf1, 0x1280,
+  0x9c40, 0x128c,
+  0x9c80, 0x12cb,
+  0x9ca2, 0x1e94,
+  0x9ca3, 0x12ee,
+  0x9d40, 0x1348,
+  0x9d80, 0x1e95,
+  0x9d81, 0x1388,
+  0x9d8c, 0x1e96,
+  0x9d8d, 0x1394,
+  0x9d98, 0x05a7,
+  0x9d99, 0x13a0,
+  0x9db7, 0x1e97,
+  0x9db8, 0x13bf,
+  0x9dcb, 0x1e98,
+  0x9dcc, 0x13d3,
+  0x9e40, 0x1404,
+  0x9e64, 0x1e99,
+  0x9e65, 0x1429,
+  0x9e69, 0x1e9a,
+  0x9e6a, 0x142e,
+  0x9e77, 0x0da2,
+  0x9e78, 0x143c,
+  0x9e80, 0x1443,
+  0x9e8b, 0x1e9b,
+  0x9e8c, 0x144f,
+  0x9e8d, 0x0c68,
+  0x9e8e, 0x1451,
+  0x9e94, 0x1e9c,
+  0x9e95, 0x1458,
+  0x9f40, 0x14c0,
+  0x9f80, 0x14ff,
+  0x9fb7, 0x0c6d,
+  0x9fb8, 0x1537,
+  0x9fce, 0x1e9d,
+  0x9fcf, 0x154e,
+  0x9ff3, 0x05ff,
+  0x9ff4, 0x1573,
+  0xe040, 0x157c,
+  0xe080, 0x15bb,
+  0xe093, 0x1e9e,
+  0xe094, 0x15cf,
+  0xe0a4, 0x1e9f,
+  0xe0a5, 0x15e0,
+  0xe0dd, 0x1ea0,
+  0xe0de, 0x1619,
+  0xe0f4, 0x1d35,
+  0xe0f5, 0x1630,
+  0xe140, 0x1638,
+  0xe14a, 0x1ea1,
+  0xe14b, 0x1643,
+  0xe14f, 0x1ea2,
+  0xe151, 0x1649,
+  0xe180, 0x1677,
+  0xe1a9, 0x1ea4,
+  0xe1aa, 0x16a1,
+  0xe1e6, 0x07ee,
+  0xe1e7, 0x16de,
+  0xe1e8, 0x0c51,
+  0xe1e9, 0x16e0,
+  0xe1ed, 0x1ea5,
+  0xe1ee, 0x16e5,
+  0xe240, 0x16f4,
+  0xe269, 0x1ea6,
+  0xe26a, 0x171e,
+  0xe273, 0x1ea7,
+  0xe274, 0x1728,
+  0xe27d, 0x05d4,
+  0xe27e, 0x1732,
+  0xe280, 0x1733,
+  0xe2b7, 0x1ea8,
+  0xe2b8, 0x176b,
+  0xe2c4, 0x0fdc,
+  0xe2c5, 0x1778,
+  0xe2e2, 0x1ea9,
+  0xe2e3, 0x1796,
+  0xe2ec, 0x1eaa,
+  0xe2ed, 0x17a0,
+  0xe340, 0x17b0,
+  0xe358, 0x1eab,
+  0xe359, 0x17c9,
+  0xe35a, 0x1eac,
+  0xe35b, 0x17cb,
+  0xe365, 0x1ead,
+  0xe366, 0x17d6,
+  0xe380, 0x17ef,
+  0xe3c4, 0x1eae,
+  0xe3c5, 0x1834,
+  0xe440, 0x186c,
+  0xe480, 0x18ab,
+  0xe484, 0x1eaf,
+  0xe485, 0x18b0,
+  0xe489, 0x1eb0,
+  0xe48a, 0x18b5,
+  0xe492, 0x1eb1,
+  0xe493, 0x18be,
+  0xe4b2, 0x1eb2,
+  0xe4b3, 0x18de,
+  0xe4b9, 0x1eb3,
+  0xe4ba, 0x18e5,
+  0xe4f2, 0x1eb4,
+  0xe4f3, 0x191e,
+  0xe540, 0x1928,
+  0xe541, 0x08f5,
+  0xe542, 0x192a,
+  0xe54d, 0x0f05,
+  0xe54e, 0x1936,
+  0xe55b, 0x1eb5,
+  0xe55c, 0x1944,
+  0xe579, 0x05a0,
+  0xe57a, 0x1962,
+  0xe580, 0x1967,
+  0xe5a2, 0x0d1e,
+  0xe5a3, 0x198a,
+  0xe5a5, 0x1eb6,
+  0xe5a6, 0x198d,
+  0xe5bb, 0x1eb7,
+  0xe5bc, 0x19a3,
+  0xe5ed, 0x1eb8,
+  0xe5ee, 0x19d5,
+  0xe640, 0x19e4,
+  0xe651, 0x1eb9,
+  0xe652, 0x19f6,
+  0xe67c, 0x060e,
+  0xe67d, 0x1a21,
+  0xe680, 0x1a23,
+  0xe686, 0x1eba,
+  0xe687, 0x1a2a,
+  0xe696, 0x1ebb,
+  0xe697, 0x1a3a,
+  0xe6cb, 0x0aaa,
+  0xe6cc, 0x1a6f,
+  0xe6e7, 0x1ebc,
+  0xe6e8, 0x1a8b,
+  0xe6f2, 0x1ebd,
+  0xe6f3, 0x1a96,
+  0xe740, 0x1aa0,
+  0xe76d, 0x1ebe,
+  0xe76e, 0x1ace,
+  0xe780, 0x1adf,
+  0xe78c, 0x1ebf,
+  0xe78d, 0x1aec,
+  0xe78e, 0x1ec0,
+  0xe78f, 0x1aee,
+  0xe7a7, 0x1ec1,
+  0xe7a8, 0x1b07,
+  0xe7bb, 0x1ec2,
+  0xe7bc, 0x1b1b,
+  0xe7d5, 0x1ec3,
+  0xe7d6, 0x1b35,
+  0xe840, 0x1b5c,
+  0xe880, 0x1b9b,
+  0xe885, 0x1ec4,
+  0xe886, 0x1ba1,
+  0xe8b1, 0x1ec5,
+  0xe8b2, 0x1bcd,
+  0xe8c3, 0x1ec6,
+  0xe8c4, 0x1bdf,
+  0xe8cf, 0x1ec7,
+  0xe8d0, 0x1beb,
+  0xe8d5, 0x1ec8,
+  0xe8d6, 0x1bf1,
+  0xe8f2, 0x0731,
+  0xe8f3, 0x1ec9,
+  0xe8f4, 0x1c0f,
+  0xe940, 0x1c18,
+  0xe980, 0x1c57,
+  0xe9ab, 0x1eca,
+  0xe9ac, 0x1c83,
+  0xe9ba, 0x1ecb,
+  0xe9bb, 0x1c92,
+  0xe9cb, 0x0477,
+  0xe9cc, 0x1ecc,
+  0xe9cd, 0x1ca4,
+  0xe9f2, 0x0529,
+  0xe9f3, 0x1cca,
+  0xea40, 0x1cd4,
+  0xea70, 0x1ecd,
+  0xea71, 0x1d05,
+  0xea80, 0x1d13,
+  0xea9d, 0x1ece,
+  0xea9e, 0x1d31,
+  0xed40, 0x20a7,
+  0xed80, 0x20e6,
+  0xedb4, 0x07c9,
+  0xedb5, 0x211a,
+  0xee40, 0x2162,
+  0xee80, 0x21a1,
+  0xeeef, 0x1f9c,
+  0xeef9, 0x02ef,
+  0xeefa, 0x1f45,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12ExtRKSJHEnc16 = {
+  0,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
   { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
+    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
+    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
+    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
+    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
+    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
+    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12ExtHMap2, 663
+  japan12ExtRKSJHMap2, 665
 };
 
-static Gushort japan12ExtRKSJHMap2[1330] = {
+static Gushort japan12ExtRKSJVMap2[1408] = {
   0x0000, 0x0000,
   0x8140, 0x0279,
   0x8180, 0x02b8,
@@ -7066,10 +13446,1042 @@ static Gushort japan12ExtRKSJHMap2[1330] = {
   0xeeef, 0x1f9c,
   0xeef9, 0x02ef,
   0xeefa, 0x1f45,
+  0x8141, 0x1ecf,
+  0x8143, 0x204c,
+  0x8144, 0x2052,
+  0x814a, 0x2050,
+  0x814b, 0x204f,
+  0x815b, 0x1ed3,
+  0x8160, 0x1ed6,
+  0x8165, 0x2059,
+  0x8166, 0x2054,
+  0x8167, 0x2057,
+  0x8168, 0x2056,
+  0x8169, 0x1edb,
+  0x818b, 0x204d,
+  0x818c, 0x2051,
+  0x818d, 0x205b,
+  0x81ac, 0x204e,
+  0x829f, 0x1eee,
+  0x82a1, 0x1eef,
+  0x82a3, 0x1ef0,
+  0x82a5, 0x1ef1,
+  0x82a7, 0x1ef2,
+  0x82c1, 0x1ef3,
+  0x82e1, 0x1ef4,
+  0x82e3, 0x1ef5,
+  0x82e5, 0x1ef6,
+  0x82ec, 0x1ef7,
+  0x8340, 0x1ef8,
+  0x8342, 0x1ef9,
+  0x8344, 0x1efa,
+  0x8346, 0x1efb,
+  0x8348, 0x1efc,
+  0x8362, 0x1efd,
+  0x8383, 0x1efe,
+  0x8385, 0x1eff,
+  0x8387, 0x1f00,
+  0x838e, 0x1f01,
+  0x8395, 0x1f02,
+  0x875f, 0x1f04,
+  0x8780, 0x1f14,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12ExtRKSJVEnc16 = {
+  1,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
+    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
+    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
+    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
+    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
+    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
+    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12ExtRKSJVMap2, 704
+};
+
+static Gushort japan12ExtVMap2[1404] = {
+  0x0000, 0x0000,
+  0x2121, 0x0279,
+  0x2169, 0x1d36,
+  0x216a, 0x02c2,
+  0x2221, 0x02d7,
+  0x2330, 0x030c,
+  0x2341, 0x0316,
+  0x2361, 0x0330,
+  0x2421, 0x034a,
+  0x2521, 0x039d,
+  0x2621, 0x03f3,
+  0x2641, 0x040b,
+  0x2721, 0x0423,
+  0x2751, 0x0444,
+  0x2921, 0x00e8,
+  0x2960, 0x0186,
+  0x2961, 0x0128,
+  0x2a21, 0x0147,
+  0x2a60, 0x0187,
+  0x2b21, 0x01a6,
+  0x2b72, 0x0127,
+  0x2b73, 0x01f7,
+  0x2c24, 0x1d37,
+  0x2d21, 0x1d83,
+  0x2d40, 0x1da1,
+  0x2d5f, 0x2083,
+  0x2d60, 0x1db8,
+  0x2d70, 0x02fa,
+  0x2d71, 0x02f9,
+  0x2d72, 0x0301,
+  0x2d73, 0x1dc8,
+  0x2d7a, 0x0300,
+  0x2d7b, 0x1dcf,
+  0x3021, 0x0465,
+  0x3022, 0x1dd1,
+  0x3023, 0x0467,
+  0x3033, 0x1ca2,
+  0x3034, 0x0478,
+  0x303b, 0x1dd2,
+  0x303c, 0x0480,
+  0x306e, 0x1dd3,
+  0x306f, 0x04b3,
+  0x3073, 0x1dd4,
+  0x3074, 0x04b8,
+  0x307c, 0x1dd5,
+  0x307d, 0x04c1,
+  0x3121, 0x04c3,
+  0x312a, 0x1dd6,
+  0x312b, 0x04cd,
+  0x3135, 0x1dd7,
+  0x3136, 0x04d8,
+  0x3139, 0x1dd8,
+  0x313a, 0x04dc,
+  0x313c, 0x1dd9,
+  0x313e, 0x04e0,
+  0x3142, 0x1ddb,
+  0x3143, 0x04e5,
+  0x316b, 0x1ddc,
+  0x316c, 0x050e,
+  0x3221, 0x0521,
+  0x3228, 0x1ddd,
+  0x3229, 0x1cc9,
+  0x322a, 0x1dde,
+  0x322b, 0x052b,
+  0x3260, 0x1ddf,
+  0x3261, 0x0561,
+  0x327a, 0x1de0,
+  0x327b, 0x057b,
+  0x327d, 0x1de1,
+  0x327e, 0x057e,
+  0x3321, 0x057f,
+  0x3322, 0x1de2,
+  0x3323, 0x0581,
+  0x3342, 0x1961,
+  0x3343, 0x05a1,
+  0x3349, 0x139f,
+  0x334a, 0x05a8,
+  0x3365, 0x1de3,
+  0x3366, 0x05c4,
+  0x336b, 0x1de4,
+  0x336c, 0x05ca,
+  0x3373, 0x1de5,
+  0x3374, 0x05d2,
+  0x3376, 0x1731,
+  0x3377, 0x05d5,
+  0x337a, 0x1de6,
+  0x337b, 0x05d9,
+  0x3421, 0x05dd,
+  0x3442, 0x1de7,
+  0x3443, 0x1572,
+  0x3444, 0x0600,
+  0x344d, 0x1de8,
+  0x344e, 0x060a,
+  0x3452, 0x1a20,
+  0x3453, 0x060f,
+  0x3465, 0x1de9,
+  0x3466, 0x0622,
+  0x3521, 0x063b,
+  0x352b, 0x1dea,
+  0x352c, 0x0646,
+  0x3540, 0x1deb,
+  0x3541, 0x065b,
+  0x3621, 0x0699,
+  0x3622, 0x1dec,
+  0x3623, 0x069b,
+  0x362a, 0x1ded,
+  0x362b, 0x06a3,
+  0x3646, 0x1d32,
+  0x3647, 0x06bf,
+  0x364f, 0x1dee,
+  0x3650, 0x06c8,
+  0x366d, 0x1def,
+  0x366e, 0x06e6,
+  0x3674, 0x1df0,
+  0x3675, 0x06ed,
+  0x367b, 0x1df1,
+  0x367c, 0x06f4,
+  0x367d, 0x1df2,
+  0x367e, 0x06f6,
+  0x3721, 0x06f7,
+  0x3724, 0x1df3,
+  0x3725, 0x06fb,
+  0x3737, 0x1df4,
+  0x3738, 0x070e,
+  0x3745, 0x1df5,
+  0x3746, 0x071c,
+  0x374e, 0x1df6,
+  0x374f, 0x0725,
+  0x3752, 0x1df7,
+  0x3753, 0x0729,
+  0x3755, 0x1df8,
+  0x3756, 0x072c,
+  0x375b, 0x1c0d,
+  0x375c, 0x0732,
+  0x3764, 0x1df9,
+  0x3765, 0x073b,
+  0x3771, 0x1dfa,
+  0x3772, 0x0748,
+  0x3779, 0x1dfb,
+  0x377a, 0x0750,
+  0x377e, 0x1dfc,
+  0x3821, 0x0755,
+  0x3834, 0x1dfd,
+  0x3835, 0x0769,
+  0x3841, 0x1dfe,
+  0x3842, 0x0776,
+  0x3921, 0x07b3,
+  0x392b, 0x1dff,
+  0x392c, 0x07be,
+  0x3937, 0x1e00,
+  0x3938, 0x07ca,
+  0x3942, 0x1e01,
+  0x3943, 0x07d5,
+  0x395c, 0x16dd,
+  0x395d, 0x07ef,
+  0x396d, 0x1e02,
+  0x396e, 0x0800,
+  0x3974, 0x1e03,
+  0x3975, 0x0807,
+  0x3979, 0x1e04,
+  0x397a, 0x080c,
+  0x3a21, 0x0811,
+  0x3a53, 0x1e05,
+  0x3a54, 0x0844,
+  0x3a67, 0x1e06,
+  0x3a68, 0x0858,
+  0x3a74, 0x1e07,
+  0x3a75, 0x0865,
+  0x3b21, 0x086f,
+  0x3b27, 0x1e08,
+  0x3b28, 0x0876,
+  0x3b2a, 0x1e09,
+  0x3b2b, 0x0879,
+  0x3b2c, 0x1e0a,
+  0x3b2d, 0x087b,
+  0x3b39, 0x1e0b,
+  0x3b3a, 0x0888,
+  0x3c21, 0x08cd,
+  0x3c38, 0x1e0c,
+  0x3c39, 0x08e5,
+  0x3c48, 0x1e0d,
+  0x3c49, 0x1929,
+  0x3c4a, 0x08f6,
+  0x3c57, 0x1e0e,
+  0x3c58, 0x0904,
+  0x3c5d, 0x1e0f,
+  0x3c5f, 0x090b,
+  0x3d21, 0x092b,
+  0x3d2b, 0x1e11,
+  0x3d2c, 0x0936,
+  0x3d36, 0x1e12,
+  0x3d37, 0x0941,
+  0x3d6c, 0x1e13,
+  0x3d6e, 0x0978,
+  0x3d72, 0x1e15,
+  0x3d74, 0x097e,
+  0x3e21, 0x0989,
+  0x3e25, 0x1e17,
+  0x3e26, 0x098e,
+  0x3e33, 0x1e18,
+  0x3e34, 0x099c,
+  0x3e3f, 0x1e19,
+  0x3e40, 0x09a8,
+  0x3e55, 0x1e1a,
+  0x3e56, 0x09be,
+  0x3e5f, 0x1e1b,
+  0x3e60, 0x09c8,
+  0x3e64, 0x1e1c,
+  0x3e65, 0x09cd,
+  0x3f21, 0x09e7,
+  0x3f2a, 0x1e1d,
+  0x3f2b, 0x09f1,
+  0x3f59, 0x1e1e,
+  0x3f5a, 0x0a20,
+  0x3f60, 0x1e1f,
+  0x3f61, 0x0a27,
+  0x3f69, 0x1e20,
+  0x3f6a, 0x0a30,
+  0x4021, 0x0a45,
+  0x4022, 0x1e21,
+  0x4023, 0x0a47,
+  0x4042, 0x1e22,
+  0x4043, 0x0a67,
+  0x4066, 0x1e23,
+  0x4067, 0x0a8b,
+  0x4071, 0x1e24,
+  0x4073, 0x0a97,
+  0x4079, 0x1e26,
+  0x407b, 0x0a9f,
+  0x4121, 0x0aa3,
+  0x4127, 0x1e28,
+  0x4128, 0x1a6e,
+  0x4129, 0x0aab,
+  0x4139, 0x1e29,
+  0x413a, 0x0abc,
+  0x414c, 0x1e2a,
+  0x414d, 0x0acf,
+  0x414f, 0x1e2b,
+  0x4150, 0x0ad2,
+  0x415f, 0x1e2c,
+  0x4160, 0x0ae2,
+  0x4169, 0x1e2d,
+  0x416a, 0x0aec,
+  0x4221, 0x0b01,
+  0x423d, 0x1e2e,
+  0x423e, 0x0b1e,
+  0x424d, 0x1e2f,
+  0x424e, 0x0b2e,
+  0x425c, 0x1e30,
+  0x425d, 0x0b3d,
+  0x4263, 0x1e31,
+  0x4264, 0x0b44,
+  0x426f, 0x1e32,
+  0x4270, 0x0b50,
+  0x4275, 0x1e33,
+  0x4277, 0x0b57,
+  0x427d, 0x1e35,
+  0x427e, 0x0b5e,
+  0x4321, 0x0b5f,
+  0x4327, 0x1e36,
+  0x4328, 0x0b66,
+  0x4329, 0x1e37,
+  0x432b, 0x0b69,
+  0x432d, 0x1e39,
+  0x432f, 0x0b6d,
+  0x433d, 0x1e3b,
+  0x433e, 0x0b7c,
+  0x4370, 0x1e3c,
+  0x4371, 0x0baf,
+  0x4375, 0x1e3d,
+  0x4376, 0x0bb4,
+  0x437c, 0x1e3e,
+  0x437d, 0x0bbb,
+  0x4421, 0x0bbd,
+  0x443d, 0x1e3f,
+  0x443e, 0x0bda,
+  0x4448, 0x1e40,
+  0x4449, 0x0be5,
+  0x444a, 0x1e41,
+  0x444b, 0x0be7,
+  0x444d, 0x1e42,
+  0x444e, 0x0bea,
+  0x444f, 0x1e43,
+  0x4450, 0x0bec,
+  0x445b, 0x11b5,
+  0x445c, 0x0bf8,
+  0x4521, 0x0c1b,
+  0x4522, 0x1e44,
+  0x4523, 0x0c1d,
+  0x4527, 0x1e45,
+  0x4528, 0x0c22,
+  0x452e, 0x1e46,
+  0x452f, 0x0c29,
+  0x4536, 0x1e47,
+  0x4537, 0x0c31,
+  0x453f, 0x1e48,
+  0x4540, 0x0c3a,
+  0x4548, 0x1e49,
+  0x4549, 0x0c43,
+  0x454b, 0x1e4a,
+  0x454c, 0x0c46,
+  0x4551, 0x1e4b,
+  0x4553, 0x0c4d,
+  0x4557, 0x16df,
+  0x4558, 0x0c52,
+  0x4564, 0x1e4d,
+  0x4565, 0x0c5f,
+  0x456e, 0x1450,
+  0x456f, 0x0c69,
+  0x4573, 0x1536,
+  0x4574, 0x0c6e,
+  0x4578, 0x1e4e,
+  0x4579, 0x0c73,
+  0x4621, 0x0c79,
+  0x463e, 0x1e4f,
+  0x463f, 0x0c97,
+  0x4642, 0x1e50,
+  0x4643, 0x0c9b,
+  0x4654, 0x1e51,
+  0x4656, 0x0cae,
+  0x465b, 0x1e53,
+  0x465d, 0x0cb5,
+  0x4661, 0x1e55,
+  0x4662, 0x0cba,
+  0x4666, 0x1e56,
+  0x4668, 0x0cc0,
+  0x466a, 0x1e58,
+  0x466b, 0x0cc3,
+  0x4676, 0x1aed,
+  0x4677, 0x0ccf,
+  0x4721, 0x0cd7,
+  0x4729, 0x1e59,
+  0x472a, 0x0ce0,
+  0x4739, 0x1e5a,
+  0x473a, 0x0cf0,
+  0x4757, 0x1e5b,
+  0x4758, 0x0d0e,
+  0x4767, 0x1e5c,
+  0x4768, 0x1989,
+  0x4769, 0x1e5d,
+  0x476a, 0x0d20,
+  0x476d, 0x1e5e,
+  0x476e, 0x0d24,
+  0x4821, 0x0d35,
+  0x4824, 0x1e5f,
+  0x4825, 0x0d39,
+  0x482e, 0x1e60,
+  0x482f, 0x0d43,
+  0x4830, 0x1e61,
+  0x4831, 0x0d45,
+  0x4854, 0x1e62,
+  0x4855, 0x0d69,
+  0x4862, 0x1e63,
+  0x4863, 0x0d77,
+  0x4875, 0x1e64,
+  0x4876, 0x0d8a,
+  0x4921, 0x0d93,
+  0x4922, 0x1e65,
+  0x4924, 0x0d96,
+  0x492f, 0x1e67,
+  0x4930, 0x143b,
+  0x4931, 0x0da3,
+  0x4932, 0x1e68,
+  0x4933, 0x0da5,
+  0x4935, 0x1e69,
+  0x4936, 0x0da8,
+  0x4940, 0x1e6a,
+  0x4941, 0x0db3,
+  0x494e, 0x1e6b,
+  0x494f, 0x0dc1,
+  0x4951, 0x1e6c,
+  0x4952, 0x0dc4,
+  0x4a21, 0x0df1,
+  0x4a43, 0x1e6d,
+  0x4a44, 0x0e14,
+  0x4a4d, 0x1e6e,
+  0x4a4e, 0x0e1e,
+  0x4a5a, 0x1e6f,
+  0x4a5b, 0x0e2b,
+  0x4a79, 0x1e70,
+  0x4a7a, 0x0e4a,
+  0x4b21, 0x0e4f,
+  0x4b22, 0x1e71,
+  0x4b23, 0x0e51,
+  0x4b29, 0x1e72,
+  0x4b2a, 0x0e58,
+  0x4b4b, 0x1e73,
+  0x4b4c, 0x0e7a,
+  0x4b6a, 0x1d33,
+  0x4b6b, 0x0e99,
+  0x4b70, 0x1e74,
+  0x4b71, 0x0e9f,
+  0x4b79, 0x102f,
+  0x4b7a, 0x0ea8,
+  0x4c21, 0x0ead,
+  0x4c4d, 0x1e75,
+  0x4c4e, 0x0eda,
+  0x4c59, 0x1e76,
+  0x4c5a, 0x0ee6,
+  0x4c5f, 0x1e77,
+  0x4c60, 0x0eec,
+  0x4c62, 0x1e78,
+  0x4c63, 0x0eef,
+  0x4c79, 0x1935,
+  0x4c7a, 0x1e79,
+  0x4c7b, 0x0f07,
+  0x4c7c, 0x1e7a,
+  0x4c7d, 0x0f09,
+  0x4c7e, 0x1e7b,
+  0x4d21, 0x0f0b,
+  0x4d32, 0x1e7c,
+  0x4d33, 0x0f1d,
+  0x4d50, 0x1e7d,
+  0x4d51, 0x0f3b,
+  0x4d54, 0x1e7e,
+  0x4d55, 0x0f3f,
+  0x4d5a, 0x1d34,
+  0x4d5b, 0x0f45,
+  0x4d69, 0x1e7f,
+  0x4d6a, 0x0f54,
+  0x4e21, 0x0f69,
+  0x4e4b, 0x1e80,
+  0x4e4c, 0x0f94,
+  0x4e7a, 0x1e81,
+  0x4e7c, 0x0fc4,
+  0x4f21, 0x1e83,
+  0x4f22, 0x0fc8,
+  0x4f31, 0x1e84,
+  0x4f32, 0x0fd8,
+  0x4f36, 0x1777,
+  0x4f37, 0x0fdd,
+  0x4f39, 0x1e85,
+  0x4f3a, 0x0fe0,
+  0x5021, 0x0ffa,
+  0x5056, 0x0ea7,
+  0x5057, 0x1030,
+  0x5121, 0x1058,
+  0x513d, 0x1e86,
+  0x513e, 0x1075,
+  0x5147, 0x1e87,
+  0x5148, 0x107f,
+  0x514b, 0x1e88,
+  0x514c, 0x1083,
+  0x514d, 0x1e89,
+  0x514e, 0x1085,
+  0x5221, 0x10b6,
+  0x5321, 0x1114,
+  0x5330, 0x1e8a,
+  0x5331, 0x1124,
+  0x533a, 0x1e8b,
+  0x533b, 0x112e,
+  0x5350, 0x1e8c,
+  0x5351, 0x1144,
+  0x535e, 0x1e8d,
+  0x535f, 0x1152,
+  0x536b, 0x1e8e,
+  0x536c, 0x115f,
+  0x5421, 0x1172,
+  0x5444, 0x1e8f,
+  0x5445, 0x1196,
+  0x5464, 0x0bf7,
+  0x5465, 0x11b6,
+  0x5521, 0x11d0,
+  0x553d, 0x1e90,
+  0x553e, 0x11ed,
+  0x5563, 0x1e91,
+  0x5564, 0x1213,
+  0x5621, 0x122e,
+  0x5622, 0x1e92,
+  0x5623, 0x1230,
+  0x5672, 0x1e93,
+  0x5673, 0x1280,
+  0x5721, 0x128c,
+  0x5821, 0x12ea,
+  0x5824, 0x1e94,
+  0x5825, 0x12ee,
+  0x5921, 0x1348,
+  0x5960, 0x1e95,
+  0x5961, 0x1388,
+  0x596c, 0x1e96,
+  0x596d, 0x1394,
+  0x5978, 0x05a7,
+  0x5979, 0x13a0,
+  0x5a21, 0x13a6,
+  0x5a39, 0x1e97,
+  0x5a3a, 0x13bf,
+  0x5a4d, 0x1e98,
+  0x5a4e, 0x13d3,
+  0x5b21, 0x1404,
+  0x5b45, 0x1e99,
+  0x5b46, 0x1429,
+  0x5b4a, 0x1e9a,
+  0x5b4b, 0x142e,
+  0x5b58, 0x0da2,
+  0x5b59, 0x143c,
+  0x5b6b, 0x1e9b,
+  0x5b6c, 0x144f,
+  0x5b6d, 0x0c68,
+  0x5b6e, 0x1451,
+  0x5b74, 0x1e9c,
+  0x5b75, 0x1458,
+  0x5c21, 0x1462,
+  0x5d21, 0x14c0,
+  0x5e21, 0x151e,
+  0x5e39, 0x0c6d,
+  0x5e3a, 0x1537,
+  0x5e50, 0x1e9d,
+  0x5e51, 0x154e,
+  0x5e75, 0x05ff,
+  0x5e76, 0x1573,
+  0x5f21, 0x157c,
+  0x5f73, 0x1e9e,
+  0x5f74, 0x15cf,
+  0x6021, 0x15da,
+  0x6026, 0x1e9f,
+  0x6027, 0x15e0,
+  0x605f, 0x1ea0,
+  0x6060, 0x1619,
+  0x6076, 0x1d35,
+  0x6077, 0x1630,
+  0x6121, 0x1638,
+  0x612b, 0x1ea1,
+  0x612c, 0x1643,
+  0x6130, 0x1ea2,
+  0x6132, 0x1649,
+  0x6221, 0x1696,
+  0x622b, 0x1ea4,
+  0x622c, 0x16a1,
+  0x6268, 0x07ee,
+  0x6269, 0x16de,
+  0x626a, 0x0c51,
+  0x626b, 0x16e0,
+  0x626f, 0x1ea5,
+  0x6270, 0x16e5,
+  0x6321, 0x16f4,
+  0x634a, 0x1ea6,
+  0x634b, 0x171e,
+  0x6354, 0x1ea7,
+  0x6355, 0x1728,
+  0x635e, 0x05d4,
+  0x635f, 0x1732,
+  0x6421, 0x1752,
+  0x6439, 0x1ea8,
+  0x643a, 0x176b,
+  0x6446, 0x0fdc,
+  0x6447, 0x1778,
+  0x6464, 0x1ea9,
+  0x6465, 0x1796,
+  0x646e, 0x1eaa,
+  0x646f, 0x17a0,
+  0x6521, 0x17b0,
+  0x6539, 0x1eab,
+  0x653a, 0x17c9,
+  0x653b, 0x1eac,
+  0x653c, 0x17cb,
+  0x6546, 0x1ead,
+  0x6547, 0x17d6,
+  0x6621, 0x180e,
+  0x6646, 0x1eae,
+  0x6647, 0x1834,
+  0x6721, 0x186c,
+  0x6764, 0x1eaf,
+  0x6765, 0x18b0,
+  0x6769, 0x1eb0,
+  0x676a, 0x18b5,
+  0x6772, 0x1eb1,
+  0x6773, 0x18be,
+  0x6821, 0x18ca,
+  0x6834, 0x1eb2,
+  0x6835, 0x18de,
+  0x683b, 0x1eb3,
+  0x683c, 0x18e5,
+  0x6874, 0x1eb4,
+  0x6875, 0x191e,
+  0x6921, 0x1928,
+  0x6922, 0x08f5,
+  0x6923, 0x192a,
+  0x692e, 0x0f05,
+  0x692f, 0x1936,
+  0x693c, 0x1eb5,
+  0x693d, 0x1944,
+  0x695a, 0x05a0,
+  0x695b, 0x1962,
+  0x6a21, 0x1986,
+  0x6a24, 0x0d1e,
+  0x6a25, 0x198a,
+  0x6a27, 0x1eb6,
+  0x6a28, 0x198d,
+  0x6a3d, 0x1eb7,
+  0x6a3e, 0x19a3,
+  0x6a6f, 0x1eb8,
+  0x6a70, 0x19d5,
+  0x6b21, 0x19e4,
+  0x6b32, 0x1eb9,
+  0x6b33, 0x19f6,
+  0x6b5d, 0x060e,
+  0x6b5e, 0x1a21,
+  0x6b66, 0x1eba,
+  0x6b67, 0x1a2a,
+  0x6b76, 0x1ebb,
+  0x6b77, 0x1a3a,
+  0x6c21, 0x1a42,
+  0x6c4d, 0x0aaa,
+  0x6c4e, 0x1a6f,
+  0x6c69, 0x1ebc,
+  0x6c6a, 0x1a8b,
+  0x6c74, 0x1ebd,
+  0x6c75, 0x1a96,
+  0x6d21, 0x1aa0,
+  0x6d4e, 0x1ebe,
+  0x6d4f, 0x1ace,
+  0x6d6c, 0x1ebf,
+  0x6d6d, 0x1aec,
+  0x6d6e, 0x1ec0,
+  0x6d6f, 0x1aee,
+  0x6e21, 0x1afe,
+  0x6e29, 0x1ec1,
+  0x6e2a, 0x1b07,
+  0x6e3d, 0x1ec2,
+  0x6e3e, 0x1b1b,
+  0x6e57, 0x1ec3,
+  0x6e58, 0x1b35,
+  0x6f21, 0x1b5c,
+  0x6f65, 0x1ec4,
+  0x6f66, 0x1ba1,
+  0x7021, 0x1bba,
+  0x7033, 0x1ec5,
+  0x7034, 0x1bcd,
+  0x7045, 0x1ec6,
+  0x7046, 0x1bdf,
+  0x7051, 0x1ec7,
+  0x7052, 0x1beb,
+  0x7057, 0x1ec8,
+  0x7058, 0x1bf1,
+  0x7074, 0x0731,
+  0x7075, 0x1ec9,
+  0x7076, 0x1c0f,
+  0x7121, 0x1c18,
+  0x7221, 0x1c76,
+  0x722d, 0x1eca,
+  0x722e, 0x1c83,
+  0x723c, 0x1ecb,
+  0x723d, 0x1c92,
+  0x724d, 0x0477,
+  0x724e, 0x1ecc,
+  0x724f, 0x1ca4,
+  0x7274, 0x0529,
+  0x7275, 0x1cca,
+  0x7321, 0x1cd4,
+  0x7351, 0x1ecd,
+  0x7352, 0x1d05,
+  0x737d, 0x1ece,
+  0x737e, 0x1d31,
+  0x7921, 0x20a7,
+  0x7a21, 0x2105,
+  0x7a36, 0x07c9,
+  0x7a37, 0x211a,
+  0x7b21, 0x2162,
+  0x7c21, 0x21c0,
+  0x7c71, 0x1f9c,
+  0x7c7b, 0x02ef,
+  0x7c7c, 0x1f45,
+  0x2122, 0x1ecf,
+  0x2124, 0x204c,
+  0x2125, 0x2052,
+  0x212b, 0x2050,
+  0x212c, 0x204f,
+  0x213c, 0x1ed3,
+  0x2141, 0x1ed6,
+  0x2146, 0x2059,
+  0x2147, 0x2054,
+  0x2148, 0x2057,
+  0x2149, 0x2056,
+  0x214a, 0x1edb,
+  0x216b, 0x204d,
+  0x216c, 0x2051,
+  0x216d, 0x205b,
+  0x222e, 0x204e,
+  0x2421, 0x1eee,
+  0x2423, 0x1eef,
+  0x2425, 0x1ef0,
+  0x2427, 0x1ef1,
+  0x2429, 0x1ef2,
+  0x2443, 0x1ef3,
+  0x2463, 0x1ef4,
+  0x2465, 0x1ef5,
+  0x2467, 0x1ef6,
+  0x246e, 0x1ef7,
+  0x2521, 0x1ef8,
+  0x2523, 0x1ef9,
+  0x2525, 0x1efa,
+  0x2527, 0x1efb,
+  0x2529, 0x1efc,
+  0x2543, 0x1efd,
+  0x2563, 0x1efe,
+  0x2565, 0x1eff,
+  0x2567, 0x1f00,
+  0x256e, 0x1f01,
+  0x2575, 0x1f02,
+  0x2d40, 0x1f04,
+  0x2d60, 0x1f14,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12ExtVEnc16 = {
+  1,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12ExtVMap2, 702
+};
+
+static Gushort japan12HMap2[240] = {
+  0x0000, 0x0000,
+  0x2121, 0x0279,
+  0x2221, 0x02d7,
+  0x223a, 0x02e5,
+  0x224a, 0x02ed,
+  0x225c, 0x02f4,
+  0x2272, 0x0303,
+  0x227e, 0x030b,
+  0x2330, 0x030c,
+  0x2341, 0x0316,
+  0x2361, 0x0330,
+  0x2421, 0x034a,
+  0x2521, 0x039d,
+  0x2621, 0x03f3,
+  0x2641, 0x040b,
+  0x2721, 0x0423,
+  0x2751, 0x0444,
+  0x2821, 0x1d37,
+  0x2822, 0x1d39,
+  0x2823, 0x1d43,
+  0x2824, 0x1d47,
+  0x2825, 0x1d4f,
+  0x2826, 0x1d4b,
+  0x2827, 0x1d53,
+  0x2828, 0x1d63,
+  0x2829, 0x1d5b,
+  0x282a, 0x1d6b,
+  0x282b, 0x1d73,
+  0x282c, 0x1d38,
+  0x282d, 0x1d3a,
+  0x282e, 0x1d46,
+  0x282f, 0x1d4a,
+  0x2830, 0x1d52,
+  0x2831, 0x1d4e,
+  0x2832, 0x1d5a,
+  0x2833, 0x1d6a,
+  0x2834, 0x1d62,
+  0x2835, 0x1d72,
+  0x2836, 0x1d82,
+  0x2837, 0x1d57,
+  0x2838, 0x1d66,
+  0x2839, 0x1d5f,
+  0x283a, 0x1d6e,
+  0x283b, 0x1d76,
+  0x283c, 0x1d54,
+  0x283d, 0x1d67,
+  0x283e, 0x1d5c,
+  0x283f, 0x1d6f,
+  0x2840, 0x1d79,
+  0x3021, 0x0465,
+  0x3121, 0x04c3,
+  0x3221, 0x0521,
+  0x3321, 0x057f,
+  0x3421, 0x05dd,
+  0x3521, 0x063b,
+  0x3621, 0x0699,
+  0x3721, 0x06f7,
+  0x3821, 0x0755,
+  0x3921, 0x07b3,
+  0x3a21, 0x0811,
+  0x3b21, 0x086f,
+  0x3c21, 0x08cd,
+  0x3d21, 0x092b,
+  0x3e21, 0x0989,
+  0x3f21, 0x09e7,
+  0x4021, 0x0a45,
+  0x4121, 0x0aa3,
+  0x4221, 0x0b01,
+  0x4321, 0x0b5f,
+  0x4421, 0x0bbd,
+  0x4521, 0x0c1b,
+  0x4621, 0x0c79,
+  0x4721, 0x0cd7,
+  0x4821, 0x0d35,
+  0x4921, 0x0d93,
+  0x4a21, 0x0df1,
+  0x4b21, 0x0e4f,
+  0x4c21, 0x0ead,
+  0x4d21, 0x0f0b,
+  0x4e21, 0x0f69,
+  0x4f21, 0x0fc7,
+  0x5021, 0x0ffa,
+  0x5121, 0x1058,
+  0x5221, 0x10b6,
+  0x5321, 0x1114,
+  0x5421, 0x1172,
+  0x5521, 0x11d0,
+  0x5621, 0x122e,
+  0x5721, 0x128c,
+  0x5821, 0x12ea,
+  0x5921, 0x1348,
+  0x5a21, 0x13a6,
+  0x5b21, 0x1404,
+  0x5c21, 0x1462,
+  0x5d21, 0x14c0,
+  0x5e21, 0x151e,
+  0x5f21, 0x157c,
+  0x6021, 0x15da,
+  0x6121, 0x1638,
+  0x6221, 0x1696,
+  0x6321, 0x16f4,
+  0x6421, 0x1752,
+  0x6521, 0x17b0,
+  0x6621, 0x180e,
+  0x6721, 0x186c,
+  0x6821, 0x18ca,
+  0x6921, 0x1928,
+  0x6a21, 0x1986,
+  0x6b21, 0x19e4,
+  0x6c21, 0x1a42,
+  0x6d21, 0x1aa0,
+  0x6e21, 0x1afe,
+  0x6f21, 0x1b5c,
+  0x7021, 0x1bba,
+  0x7121, 0x1c18,
+  0x7221, 0x1c76,
+  0x7321, 0x1cd4,
+  0x7421, 0x1d32,
+  0x7425, 0x205c,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12HEnc16 = {
+  0,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12HMap2, 120
+};
+
+static Gushort japan12HankakuMap2[4] = {
+  0x0000, 0x0000,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan12ExtRKSJHEnc16 = {
+static GfxFontEncoding16 japan12HankakuEnc16 = {
+  0,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -7078,14 +14490,14 @@ static GfxFontEncoding16 japan12ExtRKSJHEnc16 = {
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
   { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -7098,11 +14510,111 @@ static GfxFontEncoding16 japan12ExtRKSJHEnc16 = {
     0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
     0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
     0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
-    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x00e7, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
     0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
     0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
     0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
+    0x0000, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x0204, 0x0205,
+    0x0206, 0x0207, 0x0208, 0x0209, 0x020a, 0x020b, 0x020c, 0x020d,
+    0x0156, 0x020e, 0x020f, 0x0210, 0x0211, 0x0212, 0x0213, 0x0214,
+    0x0215, 0x0216, 0x0217, 0x0218, 0x0219, 0x021a, 0x021b, 0x021c,
+    0x0000, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
+    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
+    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
+    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
+    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
+    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
+    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
+    0x021d, 0x021e, 0x021f, 0x0220, 0x0221, 0x0222, 0x0223, 0x0224,
+    0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022a, 0x022b, 0x022c,
+    0x022d, 0x022e, 0x022f, 0x0230, 0x0231, 0x0232, 0x0233, 0x0234,
+    0x0235, 0x0236, 0x0237, 0x0238, 0x0239, 0x023a, 0x0184, 0x0185 },
+  japan12HankakuMap2, 2
+};
+
+static Gushort japan12HiraganaMap2[4] = {
+  0x0000, 0x0000,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12HiraganaEnc16 = {
+  0,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0203, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x0204, 0x0205,
+    0x0206, 0x0207, 0x0208, 0x0209, 0x020a, 0x020b, 0x020c, 0x020d,
+    0x0156, 0x020e, 0x020f, 0x0210, 0x0211, 0x0212, 0x0213, 0x0214,
+    0x0215, 0x0216, 0x0217, 0x0218, 0x0219, 0x021a, 0x021b, 0x021c,
+    0x021d, 0x021e, 0x021f, 0x0220, 0x0221, 0x0222, 0x0223, 0x0224,
+    0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022a, 0x022b, 0x022c,
+    0x022d, 0x022e, 0x022f, 0x0230, 0x0231, 0x0232, 0x0233, 0x0234,
+    0x0235, 0x0236, 0x0237, 0x0238, 0x0239, 0x023a, 0x0184, 0x0185,
+    0x023b, 0x023c, 0x023d, 0x0000, 0x0000, 0x0000, 0x023e, 0x023f,
+    0x0240, 0x0241, 0x0242, 0x0243, 0x0244, 0x0245, 0x0246, 0x0247,
+    0x0248, 0x0249, 0x024a, 0x024b, 0x024c, 0x024d, 0x024e, 0x024f,
+    0x0250, 0x0251, 0x0252, 0x0253, 0x0254, 0x0255, 0x0256, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12HiraganaMap2, 2
+};
+
+static Gushort japan12KatakanaMap2[4] = {
+  0x0000, 0x0000,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12KatakanaEnc16 = {
+  0,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -7114,16 +14626,34 @@ static GfxFontEncoding16 japan12ExtRKSJHEnc16 = {
     0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
     0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
     0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
+    0x0187, 0x0188, 0x0189, 0x018a, 0x018b, 0x018c, 0x018d, 0x018e,
+    0x018f, 0x0190, 0x0191, 0x0192, 0x0193, 0x0194, 0x0195, 0x0196,
+    0x0197, 0x0198, 0x0199, 0x019a, 0x019b, 0x019c, 0x019d, 0x019e,
+    0x019f, 0x01a0, 0x01a1, 0x01a2, 0x01a3, 0x01a4, 0x01a5, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12ExtRKSJHMap2, 665
+  japan12KatakanaMap2, 2
 };
 
-static Gushort japan12HMap2[240] = {
+static Gushort japan12NWPHMap2[1522] = {
   0x0000, 0x0000,
   0x2121, 0x0279,
+  0x2169, 0x1d36,
+  0x216a, 0x02c2,
   0x2221, 0x02d7,
   0x223a, 0x02e5,
   0x224a, 0x02ed,
@@ -7139,291 +14669,760 @@ static Gushort japan12HMap2[240] = {
   0x2641, 0x040b,
   0x2721, 0x0423,
   0x2751, 0x0444,
-  0x2821, 0x1d37,
-  0x2822, 0x1d39,
-  0x2823, 0x1d43,
-  0x2824, 0x1d47,
-  0x2825, 0x1d4f,
-  0x2826, 0x1d4b,
-  0x2827, 0x1d53,
-  0x2828, 0x1d63,
-  0x2829, 0x1d5b,
-  0x282a, 0x1d6b,
-  0x282b, 0x1d73,
-  0x282c, 0x1d38,
-  0x282d, 0x1d3a,
-  0x282e, 0x1d46,
-  0x282f, 0x1d4a,
-  0x2830, 0x1d52,
-  0x2831, 0x1d4e,
-  0x2832, 0x1d5a,
-  0x2833, 0x1d6a,
-  0x2834, 0x1d62,
-  0x2835, 0x1d72,
-  0x2836, 0x1d82,
-  0x2837, 0x1d57,
-  0x2838, 0x1d66,
-  0x2839, 0x1d5f,
-  0x283a, 0x1d6e,
-  0x283b, 0x1d76,
-  0x283c, 0x1d54,
-  0x283d, 0x1d67,
-  0x283e, 0x1d5c,
-  0x283f, 0x1d6f,
-  0x2840, 0x1d79,
+  0x2921, 0x00e8,
+  0x2960, 0x0186,
+  0x2961, 0x0128,
+  0x2a21, 0x0147,
+  0x2a60, 0x0187,
+  0x2b21, 0x01a6,
+  0x2b72, 0x0127,
+  0x2b73, 0x01f7,
+  0x2c24, 0x1d37,
+  0x2d21, 0x1d83,
+  0x2d40, 0x1da1,
+  0x2d60, 0x1db8,
+  0x2d70, 0x02fa,
+  0x2d71, 0x02f9,
+  0x2d72, 0x0301,
+  0x2d73, 0x1dc8,
+  0x2d7a, 0x0300,
+  0x2d7b, 0x1dcf,
+  0x2e21, 0x0282,
+  0x2e22, 0x02a1,
+  0x2e23, 0x0305,
+  0x2e24, 0x02c8,
+  0x2e25, 0x02cb,
+  0x2e26, 0x02cd,
+  0x2e27, 0x029f,
+  0x2e28, 0x02a2,
+  0x2e2a, 0x02ce,
+  0x2e2b, 0x02b4,
+  0x2e2c, 0x027c,
+  0x2e2d, 0x02b5,
+  0x2e2e, 0x027d,
+  0x2e2f, 0x0297,
+  0x2e30, 0x030c,
+  0x2e3a, 0x027f,
+  0x2e3c, 0x02bb,
+  0x2e3d, 0x02b9,
+  0x2e3e, 0x02bc,
+  0x2e3f, 0x0281,
+  0x2e40, 0x02cf,
+  0x2e41, 0x0316,
+  0x2e5b, 0x02a6,
+  0x2e5c, 0x02c7,
+  0x2e5d, 0x02a7,
+  0x2e5e, 0x0288,
+  0x2e5f, 0x028a,
+  0x2e60, 0x0286,
+  0x2e61, 0x0330,
+  0x2e7b, 0x02a8,
+  0x2e7c, 0x029b,
+  0x2e7d, 0x02a9,
+  0x2e7e, 0x0289,
+  0x2f21, 0x027b,
+  0x2f22, 0x02ae,
+  0x2f24, 0x027a,
+  0x2f25, 0x027e,
+  0x2f26, 0x03ee,
+  0x2f27, 0x039d,
+  0x2f28, 0x039f,
+  0x2f29, 0x03a1,
+  0x2f2a, 0x03a3,
+  0x2f2b, 0x03a5,
+  0x2f2c, 0x03df,
+  0x2f2d, 0x03e1,
+  0x2f2e, 0x03e3,
+  0x2f2f, 0x03bf,
+  0x2f30, 0x0294,
+  0x2f31, 0x039e,
+  0x2f32, 0x03a0,
+  0x2f33, 0x03a2,
+  0x2f34, 0x03a4,
+  0x2f35, 0x03a6,
+  0x2f37, 0x03a9,
+  0x2f38, 0x03ab,
+  0x2f39, 0x03ad,
+  0x2f3a, 0x03af,
+  0x2f3b, 0x03b1,
+  0x2f3c, 0x03b3,
+  0x2f3d, 0x03b5,
+  0x2f3e, 0x03b7,
+  0x2f3f, 0x03b9,
+  0x2f40, 0x03bb,
+  0x2f41, 0x03bd,
+  0x2f42, 0x03c0,
+  0x2f43, 0x03c2,
+  0x2f44, 0x03c4,
+  0x2f45, 0x03c6,
+  0x2f4b, 0x03ce,
+  0x2f4c, 0x03d1,
+  0x2f4d, 0x03d4,
+  0x2f4e, 0x03d7,
+  0x2f4f, 0x03da,
+  0x2f54, 0x03e0,
+  0x2f55, 0x03e2,
+  0x2f56, 0x03e4,
+  0x2f5c, 0x03eb,
+  0x2f5d, 0x03ef,
+  0x2f5e, 0x0283,
+  0x2f60, 0x03ec,
+  0x2f62, 0x03ea,
+  0x2f63, 0x03f1,
+  0x2f65, 0x03f0,
+  0x2f66, 0x03a8,
+  0x2f67, 0x03aa,
+  0x2f68, 0x03ac,
+  0x2f69, 0x03ae,
+  0x2f6a, 0x03b0,
+  0x2f6b, 0x03b2,
+  0x2f6c, 0x03b4,
+  0x2f6d, 0x03b6,
+  0x2f6e, 0x03b8,
+  0x2f6f, 0x03ba,
+  0x2f70, 0x03bc,
+  0x2f71, 0x03be,
+  0x2f72, 0x03c1,
+  0x2f73, 0x03c3,
+  0x2f74, 0x03c5,
+  0x2f75, 0x03cc,
+  0x2f77, 0x03cf,
+  0x2f79, 0x03d2,
+  0x2f7b, 0x03d5,
+  0x2f7d, 0x03d8,
   0x3021, 0x0465,
+  0x3022, 0x1dd1,
+  0x3023, 0x0467,
+  0x3033, 0x1ca2,
+  0x3034, 0x0478,
+  0x303b, 0x1dd2,
+  0x303c, 0x0480,
+  0x306e, 0x1dd3,
+  0x306f, 0x04b3,
+  0x3073, 0x1dd4,
+  0x3074, 0x04b8,
+  0x307c, 0x1dd5,
+  0x307d, 0x04c1,
   0x3121, 0x04c3,
+  0x312a, 0x1dd6,
+  0x312b, 0x04cd,
+  0x3135, 0x1dd7,
+  0x3136, 0x04d8,
+  0x3139, 0x1dd8,
+  0x313a, 0x04dc,
+  0x313c, 0x1dd9,
+  0x313e, 0x04e0,
+  0x3142, 0x1ddb,
+  0x3143, 0x04e5,
+  0x316b, 0x1ddc,
+  0x316c, 0x050e,
   0x3221, 0x0521,
+  0x3228, 0x1ddd,
+  0x3229, 0x1cc9,
+  0x322a, 0x1dde,
+  0x322b, 0x052b,
+  0x3260, 0x1ddf,
+  0x3261, 0x0561,
+  0x327a, 0x1de0,
+  0x327b, 0x057b,
+  0x327d, 0x1de1,
+  0x327e, 0x057e,
   0x3321, 0x057f,
+  0x3322, 0x1de2,
+  0x3323, 0x0581,
+  0x3342, 0x1961,
+  0x3343, 0x05a1,
+  0x3349, 0x139f,
+  0x334a, 0x05a8,
+  0x3365, 0x1de3,
+  0x3366, 0x05c4,
+  0x336b, 0x1de4,
+  0x336c, 0x05ca,
+  0x3373, 0x1de5,
+  0x3374, 0x05d2,
+  0x3376, 0x1731,
+  0x3377, 0x05d5,
+  0x337a, 0x1de6,
+  0x337b, 0x05d9,
   0x3421, 0x05dd,
+  0x3442, 0x1de7,
+  0x3443, 0x1572,
+  0x3444, 0x0600,
+  0x344d, 0x1de8,
+  0x344e, 0x060a,
+  0x3452, 0x1a20,
+  0x3453, 0x060f,
+  0x3465, 0x1de9,
+  0x3466, 0x0622,
   0x3521, 0x063b,
+  0x352b, 0x1dea,
+  0x352c, 0x0646,
+  0x3540, 0x1deb,
+  0x3541, 0x065b,
   0x3621, 0x0699,
+  0x3622, 0x1dec,
+  0x3623, 0x069b,
+  0x362a, 0x1ded,
+  0x362b, 0x06a3,
+  0x3646, 0x1d32,
+  0x3647, 0x06bf,
+  0x364f, 0x1dee,
+  0x3650, 0x06c8,
+  0x366d, 0x1def,
+  0x366e, 0x06e6,
+  0x3674, 0x1df0,
+  0x3675, 0x06ed,
+  0x367b, 0x1df1,
+  0x367c, 0x06f4,
+  0x367d, 0x1df2,
+  0x367e, 0x06f6,
   0x3721, 0x06f7,
+  0x3724, 0x1df3,
+  0x3725, 0x06fb,
+  0x3737, 0x1df4,
+  0x3738, 0x070e,
+  0x3745, 0x1df5,
+  0x3746, 0x071c,
+  0x374e, 0x1df6,
+  0x374f, 0x0725,
+  0x3752, 0x1df7,
+  0x3753, 0x0729,
+  0x3755, 0x1df8,
+  0x3756, 0x072c,
+  0x375b, 0x1c0d,
+  0x375c, 0x0732,
+  0x3764, 0x1df9,
+  0x3765, 0x073b,
+  0x3771, 0x1dfa,
+  0x3772, 0x0748,
+  0x3779, 0x1dfb,
+  0x377a, 0x0750,
+  0x377e, 0x1dfc,
   0x3821, 0x0755,
+  0x3834, 0x1dfd,
+  0x3835, 0x0769,
+  0x3841, 0x1dfe,
+  0x3842, 0x0776,
   0x3921, 0x07b3,
+  0x392b, 0x1dff,
+  0x392c, 0x07be,
+  0x3937, 0x1e00,
+  0x3938, 0x07ca,
+  0x3942, 0x1e01,
+  0x3943, 0x07d5,
+  0x395c, 0x16dd,
+  0x395d, 0x07ef,
+  0x396d, 0x1e02,
+  0x396e, 0x0800,
+  0x3974, 0x1e03,
+  0x3975, 0x0807,
+  0x3979, 0x1e04,
+  0x397a, 0x080c,
   0x3a21, 0x0811,
+  0x3a53, 0x1e05,
+  0x3a54, 0x0844,
+  0x3a67, 0x1e06,
+  0x3a68, 0x0858,
+  0x3a74, 0x1e07,
+  0x3a75, 0x0865,
   0x3b21, 0x086f,
+  0x3b27, 0x1e08,
+  0x3b28, 0x0876,
+  0x3b2a, 0x1e09,
+  0x3b2b, 0x0879,
+  0x3b2c, 0x1e0a,
+  0x3b2d, 0x087b,
+  0x3b39, 0x1e0b,
+  0x3b3a, 0x0888,
   0x3c21, 0x08cd,
+  0x3c38, 0x1e0c,
+  0x3c39, 0x08e5,
+  0x3c48, 0x1e0d,
+  0x3c49, 0x1929,
+  0x3c4a, 0x08f6,
+  0x3c57, 0x1e0e,
+  0x3c58, 0x0904,
+  0x3c5d, 0x1e0f,
+  0x3c5f, 0x090b,
   0x3d21, 0x092b,
+  0x3d2b, 0x1e11,
+  0x3d2c, 0x0936,
+  0x3d36, 0x1e12,
+  0x3d37, 0x0941,
+  0x3d6c, 0x1e13,
+  0x3d6e, 0x0978,
+  0x3d72, 0x1e15,
+  0x3d74, 0x097e,
   0x3e21, 0x0989,
+  0x3e25, 0x1e17,
+  0x3e26, 0x098e,
+  0x3e33, 0x1e18,
+  0x3e34, 0x099c,
+  0x3e3f, 0x1e19,
+  0x3e40, 0x09a8,
+  0x3e55, 0x1e1a,
+  0x3e56, 0x09be,
+  0x3e5f, 0x1e1b,
+  0x3e60, 0x09c8,
+  0x3e64, 0x1e1c,
+  0x3e65, 0x09cd,
   0x3f21, 0x09e7,
+  0x3f2a, 0x1e1d,
+  0x3f2b, 0x09f1,
+  0x3f59, 0x1e1e,
+  0x3f5a, 0x0a20,
+  0x3f60, 0x1e1f,
+  0x3f61, 0x0a27,
+  0x3f69, 0x1e20,
+  0x3f6a, 0x0a30,
   0x4021, 0x0a45,
+  0x4022, 0x1e21,
+  0x4023, 0x0a47,
+  0x4042, 0x1e22,
+  0x4043, 0x0a67,
+  0x4066, 0x1e23,
+  0x4067, 0x0a8b,
+  0x4071, 0x1e24,
+  0x4073, 0x0a97,
+  0x4079, 0x1e26,
+  0x407b, 0x0a9f,
   0x4121, 0x0aa3,
+  0x4127, 0x1e28,
+  0x4128, 0x1a6e,
+  0x4129, 0x0aab,
+  0x4139, 0x1e29,
+  0x413a, 0x0abc,
+  0x414c, 0x1e2a,
+  0x414d, 0x0acf,
+  0x414f, 0x1e2b,
+  0x4150, 0x0ad2,
+  0x415f, 0x1e2c,
+  0x4160, 0x0ae2,
+  0x4169, 0x1e2d,
+  0x416a, 0x0aec,
   0x4221, 0x0b01,
+  0x423d, 0x1e2e,
+  0x423e, 0x0b1e,
+  0x424d, 0x1e2f,
+  0x424e, 0x0b2e,
+  0x425c, 0x1e30,
+  0x425d, 0x0b3d,
+  0x4263, 0x1e31,
+  0x4264, 0x0b44,
+  0x426f, 0x1e32,
+  0x4270, 0x0b50,
+  0x4275, 0x1e33,
+  0x4277, 0x0b57,
+  0x427d, 0x1e35,
+  0x427e, 0x0b5e,
   0x4321, 0x0b5f,
+  0x4327, 0x1e36,
+  0x4328, 0x0b66,
+  0x4329, 0x1e37,
+  0x432b, 0x0b69,
+  0x432d, 0x1e39,
+  0x432f, 0x0b6d,
+  0x433d, 0x1e3b,
+  0x433e, 0x0b7c,
+  0x4370, 0x1e3c,
+  0x4371, 0x0baf,
+  0x4375, 0x1e3d,
+  0x4376, 0x0bb4,
+  0x437c, 0x1e3e,
+  0x437d, 0x0bbb,
   0x4421, 0x0bbd,
+  0x443d, 0x1e3f,
+  0x443e, 0x0bda,
+  0x4448, 0x1e40,
+  0x4449, 0x0be5,
+  0x444a, 0x1e41,
+  0x444b, 0x0be7,
+  0x444d, 0x1e42,
+  0x444e, 0x0bea,
+  0x444f, 0x1e43,
+  0x4450, 0x0bec,
+  0x445b, 0x11b5,
+  0x445c, 0x0bf8,
   0x4521, 0x0c1b,
+  0x4522, 0x1e44,
+  0x4523, 0x0c1d,
+  0x4527, 0x1e45,
+  0x4528, 0x0c22,
+  0x452e, 0x1e46,
+  0x452f, 0x0c29,
+  0x4536, 0x1e47,
+  0x4537, 0x0c31,
+  0x453f, 0x1e48,
+  0x4540, 0x0c3a,
+  0x4548, 0x1e49,
+  0x4549, 0x0c43,
+  0x454b, 0x1e4a,
+  0x454c, 0x0c46,
+  0x4551, 0x1e4b,
+  0x4553, 0x0c4d,
+  0x4557, 0x16df,
+  0x4558, 0x0c52,
+  0x4564, 0x1e4d,
+  0x4565, 0x0c5f,
+  0x456e, 0x1450,
+  0x456f, 0x0c69,
+  0x4573, 0x1536,
+  0x4574, 0x0c6e,
+  0x4578, 0x1e4e,
+  0x4579, 0x0c73,
   0x4621, 0x0c79,
+  0x463e, 0x1e4f,
+  0x463f, 0x0c97,
+  0x4642, 0x1e50,
+  0x4643, 0x0c9b,
+  0x4654, 0x1e51,
+  0x4656, 0x0cae,
+  0x465b, 0x1e53,
+  0x465d, 0x0cb5,
+  0x4661, 0x1e55,
+  0x4662, 0x0cba,
+  0x4666, 0x1e56,
+  0x4668, 0x0cc0,
+  0x466a, 0x1e58,
+  0x466b, 0x0cc3,
+  0x4676, 0x1aed,
+  0x4677, 0x0ccf,
   0x4721, 0x0cd7,
+  0x4729, 0x1e59,
+  0x472a, 0x0ce0,
+  0x4739, 0x1e5a,
+  0x473a, 0x0cf0,
+  0x4757, 0x1e5b,
+  0x4758, 0x0d0e,
+  0x4767, 0x1e5c,
+  0x4768, 0x1989,
+  0x4769, 0x1e5d,
+  0x476a, 0x0d20,
+  0x476d, 0x1e5e,
+  0x476e, 0x0d24,
   0x4821, 0x0d35,
+  0x4824, 0x1e5f,
+  0x4825, 0x0d39,
+  0x482e, 0x1e60,
+  0x482f, 0x0d43,
+  0x4830, 0x1e61,
+  0x4831, 0x0d45,
+  0x4854, 0x1e62,
+  0x4855, 0x0d69,
+  0x4862, 0x1e63,
+  0x4863, 0x0d77,
+  0x4875, 0x1e64,
+  0x4876, 0x0d8a,
   0x4921, 0x0d93,
+  0x4922, 0x1e65,
+  0x4924, 0x0d96,
+  0x492f, 0x1e67,
+  0x4930, 0x143b,
+  0x4931, 0x0da3,
+  0x4932, 0x1e68,
+  0x4933, 0x0da5,
+  0x4935, 0x1e69,
+  0x4936, 0x0da8,
+  0x4940, 0x1e6a,
+  0x4941, 0x0db3,
+  0x494e, 0x1e6b,
+  0x494f, 0x0dc1,
+  0x4951, 0x1e6c,
+  0x4952, 0x0dc4,
   0x4a21, 0x0df1,
+  0x4a43, 0x1e6d,
+  0x4a44, 0x0e14,
+  0x4a4d, 0x1e6e,
+  0x4a4e, 0x0e1e,
+  0x4a5a, 0x1e6f,
+  0x4a5b, 0x0e2b,
+  0x4a79, 0x1e70,
+  0x4a7a, 0x0e4a,
   0x4b21, 0x0e4f,
+  0x4b22, 0x1e71,
+  0x4b23, 0x0e51,
+  0x4b29, 0x1e72,
+  0x4b2a, 0x0e58,
+  0x4b4b, 0x1e73,
+  0x4b4c, 0x0e7a,
+  0x4b6a, 0x1d33,
+  0x4b6b, 0x0e99,
+  0x4b70, 0x1e74,
+  0x4b71, 0x0e9f,
+  0x4b79, 0x102f,
+  0x4b7a, 0x0ea8,
   0x4c21, 0x0ead,
+  0x4c4d, 0x1e75,
+  0x4c4e, 0x0eda,
+  0x4c59, 0x1e76,
+  0x4c5a, 0x0ee6,
+  0x4c5f, 0x1e77,
+  0x4c60, 0x0eec,
+  0x4c62, 0x1e78,
+  0x4c63, 0x0eef,
+  0x4c79, 0x1935,
+  0x4c7a, 0x1e79,
+  0x4c7b, 0x0f07,
+  0x4c7c, 0x1e7a,
+  0x4c7d, 0x0f09,
+  0x4c7e, 0x1e7b,
   0x4d21, 0x0f0b,
+  0x4d32, 0x1e7c,
+  0x4d33, 0x0f1d,
+  0x4d50, 0x1e7d,
+  0x4d51, 0x0f3b,
+  0x4d54, 0x1e7e,
+  0x4d55, 0x0f3f,
+  0x4d5a, 0x1d34,
+  0x4d5b, 0x0f45,
+  0x4d69, 0x1e7f,
+  0x4d6a, 0x0f54,
   0x4e21, 0x0f69,
-  0x4f21, 0x0fc7,
+  0x4e4b, 0x1e80,
+  0x4e4c, 0x0f94,
+  0x4e7a, 0x1e81,
+  0x4e7c, 0x0fc4,
+  0x4f21, 0x1e83,
+  0x4f22, 0x0fc8,
+  0x4f31, 0x1e84,
+  0x4f32, 0x0fd8,
+  0x4f36, 0x1777,
+  0x4f37, 0x0fdd,
+  0x4f39, 0x1e85,
+  0x4f3a, 0x0fe0,
   0x5021, 0x0ffa,
+  0x5056, 0x0ea7,
+  0x5057, 0x1030,
   0x5121, 0x1058,
+  0x513d, 0x1e86,
+  0x513e, 0x1075,
+  0x5147, 0x1e87,
+  0x5148, 0x107f,
+  0x514b, 0x1e88,
+  0x514c, 0x1083,
+  0x514d, 0x1e89,
+  0x514e, 0x1085,
   0x5221, 0x10b6,
   0x5321, 0x1114,
+  0x5330, 0x1e8a,
+  0x5331, 0x1124,
+  0x533a, 0x1e8b,
+  0x533b, 0x112e,
+  0x5350, 0x1e8c,
+  0x5351, 0x1144,
+  0x535e, 0x1e8d,
+  0x535f, 0x1152,
+  0x536b, 0x1e8e,
+  0x536c, 0x115f,
   0x5421, 0x1172,
+  0x5444, 0x1e8f,
+  0x5445, 0x1196,
+  0x5464, 0x0bf7,
+  0x5465, 0x11b6,
   0x5521, 0x11d0,
+  0x553d, 0x1e90,
+  0x553e, 0x11ed,
+  0x5563, 0x1e91,
+  0x5564, 0x1213,
   0x5621, 0x122e,
+  0x5622, 0x1e92,
+  0x5623, 0x1230,
+  0x5672, 0x1e93,
+  0x5673, 0x1280,
   0x5721, 0x128c,
   0x5821, 0x12ea,
+  0x5824, 0x1e94,
+  0x5825, 0x12ee,
   0x5921, 0x1348,
+  0x5960, 0x1e95,
+  0x5961, 0x1388,
+  0x596c, 0x1e96,
+  0x596d, 0x1394,
+  0x5978, 0x05a7,
+  0x5979, 0x13a0,
   0x5a21, 0x13a6,
+  0x5a39, 0x1e97,
+  0x5a3a, 0x13bf,
+  0x5a4d, 0x1e98,
+  0x5a4e, 0x13d3,
   0x5b21, 0x1404,
+  0x5b45, 0x1e99,
+  0x5b46, 0x1429,
+  0x5b4a, 0x1e9a,
+  0x5b4b, 0x142e,
+  0x5b58, 0x0da2,
+  0x5b59, 0x143c,
+  0x5b6b, 0x1e9b,
+  0x5b6c, 0x144f,
+  0x5b6d, 0x0c68,
+  0x5b6e, 0x1451,
+  0x5b74, 0x1e9c,
+  0x5b75, 0x1458,
   0x5c21, 0x1462,
   0x5d21, 0x14c0,
   0x5e21, 0x151e,
+  0x5e39, 0x0c6d,
+  0x5e3a, 0x1537,
+  0x5e50, 0x1e9d,
+  0x5e51, 0x154e,
+  0x5e75, 0x05ff,
+  0x5e76, 0x1573,
   0x5f21, 0x157c,
+  0x5f73, 0x1e9e,
+  0x5f74, 0x15cf,
   0x6021, 0x15da,
+  0x6026, 0x1e9f,
+  0x6027, 0x15e0,
+  0x605f, 0x1ea0,
+  0x6060, 0x1619,
+  0x6076, 0x1d35,
+  0x6077, 0x1630,
   0x6121, 0x1638,
+  0x612b, 0x1ea1,
+  0x612c, 0x1643,
+  0x6130, 0x1ea2,
+  0x6132, 0x1649,
   0x6221, 0x1696,
+  0x622b, 0x1ea4,
+  0x622c, 0x16a1,
+  0x6268, 0x07ee,
+  0x6269, 0x16de,
+  0x626a, 0x0c51,
+  0x626b, 0x16e0,
+  0x626f, 0x1ea5,
+  0x6270, 0x16e5,
   0x6321, 0x16f4,
+  0x634a, 0x1ea6,
+  0x634b, 0x171e,
+  0x6354, 0x1ea7,
+  0x6355, 0x1728,
+  0x635e, 0x05d4,
+  0x635f, 0x1732,
   0x6421, 0x1752,
+  0x6439, 0x1ea8,
+  0x643a, 0x176b,
+  0x6446, 0x0fdc,
+  0x6447, 0x1778,
+  0x6464, 0x1ea9,
+  0x6465, 0x1796,
+  0x646e, 0x1eaa,
+  0x646f, 0x17a0,
   0x6521, 0x17b0,
+  0x6539, 0x1eab,
+  0x653a, 0x17c9,
+  0x653b, 0x1eac,
+  0x653c, 0x17cb,
+  0x6546, 0x1ead,
+  0x6547, 0x17d6,
   0x6621, 0x180e,
+  0x6646, 0x1eae,
+  0x6647, 0x1834,
   0x6721, 0x186c,
+  0x6764, 0x1eaf,
+  0x6765, 0x18b0,
+  0x6769, 0x1eb0,
+  0x676a, 0x18b5,
+  0x6772, 0x1eb1,
+  0x6773, 0x18be,
   0x6821, 0x18ca,
+  0x6834, 0x1eb2,
+  0x6835, 0x18de,
+  0x683b, 0x1eb3,
+  0x683c, 0x18e5,
+  0x6874, 0x1eb4,
+  0x6875, 0x191e,
   0x6921, 0x1928,
+  0x6922, 0x08f5,
+  0x6923, 0x192a,
+  0x692e, 0x0f05,
+  0x692f, 0x1936,
+  0x693c, 0x1eb5,
+  0x693d, 0x1944,
+  0x695a, 0x05a0,
+  0x695b, 0x1962,
   0x6a21, 0x1986,
+  0x6a24, 0x0d1e,
+  0x6a25, 0x198a,
+  0x6a27, 0x1eb6,
+  0x6a28, 0x198d,
+  0x6a3d, 0x1eb7,
+  0x6a3e, 0x19a3,
+  0x6a6f, 0x1eb8,
+  0x6a70, 0x19d5,
   0x6b21, 0x19e4,
+  0x6b32, 0x1eb9,
+  0x6b33, 0x19f6,
+  0x6b5d, 0x060e,
+  0x6b5e, 0x1a21,
+  0x6b66, 0x1eba,
+  0x6b67, 0x1a2a,
+  0x6b76, 0x1ebb,
+  0x6b77, 0x1a3a,
   0x6c21, 0x1a42,
+  0x6c4d, 0x0aaa,
+  0x6c4e, 0x1a6f,
+  0x6c69, 0x1ebc,
+  0x6c6a, 0x1a8b,
+  0x6c74, 0x1ebd,
+  0x6c75, 0x1a96,
   0x6d21, 0x1aa0,
+  0x6d4e, 0x1ebe,
+  0x6d4f, 0x1ace,
+  0x6d6c, 0x1ebf,
+  0x6d6d, 0x1aec,
+  0x6d6e, 0x1ec0,
+  0x6d6f, 0x1aee,
   0x6e21, 0x1afe,
+  0x6e29, 0x1ec1,
+  0x6e2a, 0x1b07,
+  0x6e3d, 0x1ec2,
+  0x6e3e, 0x1b1b,
+  0x6e57, 0x1ec3,
+  0x6e58, 0x1b35,
   0x6f21, 0x1b5c,
+  0x6f65, 0x1ec4,
+  0x6f66, 0x1ba1,
   0x7021, 0x1bba,
+  0x7033, 0x1ec5,
+  0x7034, 0x1bcd,
+  0x7045, 0x1ec6,
+  0x7046, 0x1bdf,
+  0x7051, 0x1ec7,
+  0x7052, 0x1beb,
+  0x7057, 0x1ec8,
+  0x7058, 0x1bf1,
+  0x7074, 0x0731,
+  0x7075, 0x1ec9,
+  0x7076, 0x1c0f,
   0x7121, 0x1c18,
   0x7221, 0x1c76,
-  0x7321, 0x1cd4,
-  0x7421, 0x1d32,
-  0x7425, 0x205c,
-  0xffff, 0x0000
-};
-
-static GfxFontEncoding16 japan12HEnc16 = {
-  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
-  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12HMap2, 120
-};
-
-static Gushort japan12HankakuMap2[4] = {
-  0x0000, 0x0000,
-  0xffff, 0x0000
-};
-
-static GfxFontEncoding16 japan12HankakuEnc16 = {
-  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
-  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
-    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
-    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
-    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
-    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
-    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
-    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
-    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
-    0x00e7, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
-    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
-    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
-    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
-    0x0000, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x0204, 0x0205,
-    0x0206, 0x0207, 0x0208, 0x0209, 0x020a, 0x020b, 0x020c, 0x020d,
-    0x0156, 0x020e, 0x020f, 0x0210, 0x0211, 0x0212, 0x0213, 0x0214,
-    0x0215, 0x0216, 0x0217, 0x0218, 0x0219, 0x021a, 0x021b, 0x021c,
-    0x0000, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
-    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
-    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
-    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
-    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
-    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
-    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
-    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
-    0x021d, 0x021e, 0x021f, 0x0220, 0x0221, 0x0222, 0x0223, 0x0224,
-    0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022a, 0x022b, 0x022c,
-    0x022d, 0x022e, 0x022f, 0x0230, 0x0231, 0x0232, 0x0233, 0x0234,
-    0x0235, 0x0236, 0x0237, 0x0238, 0x0239, 0x023a, 0x0184, 0x0185 },
-  japan12HankakuMap2, 2
-};
-
-static Gushort japan12HiraganaMap2[4] = {
-  0x0000, 0x0000,
-  0xffff, 0x0000
-};
-
-static GfxFontEncoding16 japan12HiraganaEnc16 = {
-  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
-  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0203, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x0204, 0x0205,
-    0x0206, 0x0207, 0x0208, 0x0209, 0x020a, 0x020b, 0x020c, 0x020d,
-    0x0156, 0x020e, 0x020f, 0x0210, 0x0211, 0x0212, 0x0213, 0x0214,
-    0x0215, 0x0216, 0x0217, 0x0218, 0x0219, 0x021a, 0x021b, 0x021c,
-    0x021d, 0x021e, 0x021f, 0x0220, 0x0221, 0x0222, 0x0223, 0x0224,
-    0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022a, 0x022b, 0x022c,
-    0x022d, 0x022e, 0x022f, 0x0230, 0x0231, 0x0232, 0x0233, 0x0234,
-    0x0235, 0x0236, 0x0237, 0x0238, 0x0239, 0x023a, 0x0184, 0x0185,
-    0x023b, 0x023c, 0x023d, 0x0000, 0x0000, 0x0000, 0x023e, 0x023f,
-    0x0240, 0x0241, 0x0242, 0x0243, 0x0244, 0x0245, 0x0246, 0x0247,
-    0x0248, 0x0249, 0x024a, 0x024b, 0x024c, 0x024d, 0x024e, 0x024f,
-    0x0250, 0x0251, 0x0252, 0x0253, 0x0254, 0x0255, 0x0256, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12HiraganaMap2, 2
-};
-
-static Gushort japan12KatakanaMap2[4] = {
-  0x0000, 0x0000,
+  0x722d, 0x1eca,
+  0x722e, 0x1c83,
+  0x723c, 0x1ecb,
+  0x723d, 0x1c92,
+  0x724d, 0x0477,
+  0x724e, 0x1ecc,
+  0x724f, 0x1ca4,
+  0x7274, 0x0529,
+  0x7275, 0x1cca,
+  0x7321, 0x1cd4,
+  0x7351, 0x1ecd,
+  0x7352, 0x1d05,
+  0x737d, 0x1ece,
+  0x737e, 0x1d31,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan12KatakanaEnc16 = {
+static GfxFontEncoding16 japan12NWPHEnc16 = {
+  0,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -7436,18 +15435,18 @@ static GfxFontEncoding16 japan12KatakanaEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
-    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
-    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
-    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
-    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
-    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
-    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
-    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
-    0x0187, 0x0188, 0x0189, 0x018a, 0x018b, 0x018c, 0x018d, 0x018e,
-    0x018f, 0x0190, 0x0191, 0x0192, 0x0193, 0x0194, 0x0195, 0x0196,
-    0x0197, 0x0198, 0x0199, 0x019a, 0x019b, 0x019c, 0x019d, 0x019e,
-    0x019f, 0x01a0, 0x01a1, 0x01a2, 0x01a3, 0x01a4, 0x01a5, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -7464,10 +15463,10 @@ static GfxFontEncoding16 japan12KatakanaEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12KatakanaMap2, 2
+  japan12NWPHMap2, 761
 };
 
-static Gushort japan12NWPHMap2[1522] = {
+static Gushort japan12NWPVMap2[1618] = {
   0x0000, 0x0000,
   0x2121, 0x0279,
   0x2169, 0x1d36,
@@ -8228,10 +16227,59 @@ static Gushort japan12NWPHMap2[1522] = {
   0x7352, 0x1d05,
   0x737d, 0x1ece,
   0x737e, 0x1d31,
+  0x2122, 0x1ecf,
+  0x2124, 0x204c,
+  0x2125, 0x2052,
+  0x212b, 0x2050,
+  0x212c, 0x204f,
+  0x213c, 0x1ed3,
+  0x2141, 0x1ed6,
+  0x2146, 0x2059,
+  0x2147, 0x2054,
+  0x2148, 0x2057,
+  0x2149, 0x2056,
+  0x214a, 0x1edb,
+  0x216b, 0x204d,
+  0x216c, 0x2051,
+  0x216d, 0x205b,
+  0x222e, 0x204e,
+  0x2421, 0x1eee,
+  0x2423, 0x1eef,
+  0x2425, 0x1ef0,
+  0x2427, 0x1ef1,
+  0x2429, 0x1ef2,
+  0x2443, 0x1ef3,
+  0x2463, 0x1ef4,
+  0x2465, 0x1ef5,
+  0x2467, 0x1ef6,
+  0x246e, 0x1ef7,
+  0x2521, 0x1ef8,
+  0x2523, 0x1ef9,
+  0x2525, 0x1efa,
+  0x2527, 0x1efb,
+  0x2529, 0x1efc,
+  0x2543, 0x1efd,
+  0x2563, 0x1efe,
+  0x2565, 0x1eff,
+  0x2567, 0x1f00,
+  0x256e, 0x1f01,
+  0x2575, 0x1f02,
+  0x2d40, 0x1f04,
+  0x2d60, 0x1f14,
+  0x2f21, 0x1ed0,
+  0x2f22, 0x1ee7,
+  0x2f24, 0x1ecf,
+  0x2f27, 0x1ef8,
+  0x2f2c, 0x1efe,
+  0x2f2f, 0x1efd,
+  0x2f30, 0x1ed3,
+  0x2f5e, 0x2050,
+  0x2f5f, 0x204f,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan12NWPHEnc16 = {
+static GfxFontEncoding16 japan12NWPVEnc16 = {
+  1,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -8280,7 +16328,7 @@ static GfxFontEncoding16 japan12NWPHEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12NWPHMap2, 761
+  japan12NWPVMap2, 809
 };
 
 static Gushort japan12RKSJHMap2[244] = {
@@ -8408,96 +16456,7322 @@ static Gushort japan12RKSJHMap2[244] = {
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan12RKSJHEnc16 = {
-  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+static GfxFontEncoding16 japan12RKSJHEnc16 = {
+  0,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
+    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
+    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
+    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
+    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
+    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
+    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12RKSJHMap2, 122
+};
+
+static Gushort japan12RKSJVMap2[298] = {
+  0x0000, 0x0000,
+  0x8140, 0x0279,
+  0x8180, 0x02b8,
+  0x81b8, 0x02e5,
+  0x81c8, 0x02ed,
+  0x81da, 0x02f4,
+  0x81f0, 0x0303,
+  0x81fc, 0x030b,
+  0x824f, 0x030c,
+  0x8260, 0x0316,
+  0x8281, 0x0330,
+  0x829f, 0x034a,
+  0x8340, 0x039d,
+  0x8380, 0x03dc,
+  0x839f, 0x03f3,
+  0x83bf, 0x040b,
+  0x8440, 0x0423,
+  0x8470, 0x0444,
+  0x8480, 0x0453,
+  0x849f, 0x1d37,
+  0x84a0, 0x1d39,
+  0x84a1, 0x1d43,
+  0x84a2, 0x1d47,
+  0x84a3, 0x1d4f,
+  0x84a4, 0x1d4b,
+  0x84a5, 0x1d53,
+  0x84a6, 0x1d63,
+  0x84a7, 0x1d5b,
+  0x84a8, 0x1d6b,
+  0x84a9, 0x1d73,
+  0x84aa, 0x1d38,
+  0x84ab, 0x1d3a,
+  0x84ac, 0x1d46,
+  0x84ad, 0x1d4a,
+  0x84ae, 0x1d52,
+  0x84af, 0x1d4e,
+  0x84b0, 0x1d5a,
+  0x84b1, 0x1d6a,
+  0x84b2, 0x1d62,
+  0x84b3, 0x1d72,
+  0x84b4, 0x1d82,
+  0x84b5, 0x1d57,
+  0x84b6, 0x1d66,
+  0x84b7, 0x1d5f,
+  0x84b8, 0x1d6e,
+  0x84b9, 0x1d76,
+  0x84ba, 0x1d54,
+  0x84bb, 0x1d67,
+  0x84bc, 0x1d5c,
+  0x84bd, 0x1d6f,
+  0x84be, 0x1d79,
+  0x889f, 0x0465,
+  0x8940, 0x04c3,
+  0x8980, 0x0502,
+  0x8a40, 0x057f,
+  0x8a80, 0x05be,
+  0x8b40, 0x063b,
+  0x8b80, 0x067a,
+  0x8c40, 0x06f7,
+  0x8c80, 0x0736,
+  0x8d40, 0x07b3,
+  0x8d80, 0x07f2,
+  0x8e40, 0x086f,
+  0x8e80, 0x08ae,
+  0x8f40, 0x092b,
+  0x8f80, 0x096a,
+  0x9040, 0x09e7,
+  0x9080, 0x0a26,
+  0x9140, 0x0aa3,
+  0x9180, 0x0ae2,
+  0x9240, 0x0b5f,
+  0x9280, 0x0b9e,
+  0x9340, 0x0c1b,
+  0x9380, 0x0c5a,
+  0x9440, 0x0cd7,
+  0x9480, 0x0d16,
+  0x9540, 0x0d93,
+  0x9580, 0x0dd2,
+  0x9640, 0x0e4f,
+  0x9680, 0x0e8e,
+  0x9740, 0x0f0b,
+  0x9780, 0x0f4a,
+  0x9840, 0x0fc7,
+  0x989f, 0x0ffa,
+  0x9940, 0x1058,
+  0x9980, 0x1097,
+  0x9a40, 0x1114,
+  0x9a80, 0x1153,
+  0x9b40, 0x11d0,
+  0x9b80, 0x120f,
+  0x9c40, 0x128c,
+  0x9c80, 0x12cb,
+  0x9d40, 0x1348,
+  0x9d80, 0x1387,
+  0x9e40, 0x1404,
+  0x9e80, 0x1443,
+  0x9f40, 0x14c0,
+  0x9f80, 0x14ff,
+  0xe040, 0x157c,
+  0xe080, 0x15bb,
+  0xe140, 0x1638,
+  0xe180, 0x1677,
+  0xe240, 0x16f4,
+  0xe280, 0x1733,
+  0xe340, 0x17b0,
+  0xe380, 0x17ef,
+  0xe440, 0x186c,
+  0xe480, 0x18ab,
+  0xe540, 0x1928,
+  0xe580, 0x1967,
+  0xe640, 0x19e4,
+  0xe680, 0x1a23,
+  0xe740, 0x1aa0,
+  0xe780, 0x1adf,
+  0xe840, 0x1b5c,
+  0xe880, 0x1b9b,
+  0xe940, 0x1c18,
+  0xe980, 0x1c57,
+  0xea40, 0x1cd4,
+  0xea80, 0x1d13,
+  0xeaa3, 0x205c,
+  0x8141, 0x1ecf,
+  0x8150, 0x1ed1,
+  0x815b, 0x1ed3,
+  0x8160, 0x1ed6,
+  0x8169, 0x1edb,
+  0x8181, 0x1eed,
+  0x829f, 0x1eee,
+  0x82a1, 0x1eef,
+  0x82a3, 0x1ef0,
+  0x82a5, 0x1ef1,
+  0x82a7, 0x1ef2,
+  0x82c1, 0x1ef3,
+  0x82e1, 0x1ef4,
+  0x82e3, 0x1ef5,
+  0x82e5, 0x1ef6,
+  0x82ec, 0x1ef7,
+  0x8340, 0x1ef8,
+  0x8342, 0x1ef9,
+  0x8344, 0x1efa,
+  0x8346, 0x1efb,
+  0x8348, 0x1efc,
+  0x8362, 0x1efd,
+  0x8383, 0x1efe,
+  0x8385, 0x1eff,
+  0x8387, 0x1f00,
+  0x838e, 0x1f01,
+  0x8395, 0x1f02,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12RKSJVEnc16 = {
+  1,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
+    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
+    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
+    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
+    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
+    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
+    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12RKSJVMap2, 149
+};
+
+static Gushort japan12RomanMap2[4] = {
+  0x0000, 0x0000,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12RomanEnc16 = {
+  0,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
+    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
+    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
+    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
+    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
+    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
+    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
+    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12RomanMap2, 2
+};
+
+static Gushort japan12UniJISUCS2HMap2[13926] = {
+  0x0000, 0x0000,
+  0x0020, 0x0001,
+  0x005c, 0x0061,
+  0x005d, 0x003e,
+  0x00a1, 0x0065,
+  0x00a4, 0x006b,
+  0x00a5, 0x003d,
+  0x00a6, 0x0063,
+  0x00a7, 0x02d0,
+  0x00a8, 0x0287,
+  0x00a9, 0x0098,
+  0x00aa, 0x008c,
+  0x00ab, 0x006d,
+  0x00ac, 0x0099,
+  0x00ad, 0x0097,
+  0x00ae, 0x009a,
+  0x00af, 0x0081,
+  0x00b0, 0x02c3,
+  0x00b1, 0x02b6,
+  0x00b2, 0x009d,
+  0x00b4, 0x0285,
+  0x00b5, 0x009f,
+  0x00b6, 0x030a,
+  0x00b7, 0x0075,
+  0x00b8, 0x0086,
+  0x00b9, 0x00a0,
+  0x00ba, 0x0090,
+  0x00bb, 0x007b,
+  0x00bc, 0x00a1,
+  0x00bf, 0x007e,
+  0x00c0, 0x00a4,
+  0x00c6, 0x008b,
+  0x00c7, 0x00aa,
+  0x00d7, 0x02b7,
+  0x00d8, 0x008e,
+  0x00d9, 0x00bb,
+  0x00df, 0x0096,
+  0x00e0, 0x00c1,
+  0x00e6, 0x0091,
+  0x00e7, 0x00c7,
+  0x00f7, 0x02b8,
+  0x00f8, 0x0094,
+  0x00f9, 0x00d8,
+  0x0131, 0x0092,
+  0x0141, 0x008d,
+  0x0142, 0x0093,
+  0x0152, 0x008f,
+  0x0153, 0x0095,
+  0x0160, 0x00df,
+  0x0161, 0x00e3,
+  0x0178, 0x00e0,
+  0x017d, 0x00e1,
+  0x017e, 0x00e5,
+  0x01c0, 0x0063,
+  0x0300, 0x0041,
+  0x0301, 0x007f,
+  0x0303, 0x005f,
+  0x0304, 0x0081,
+  0x0305, 0x00e2,
+  0x0306, 0x0082,
+  0x030a, 0x0085,
+  0x030b, 0x0087,
+  0x030c, 0x0089,
+  0x0327, 0x0086,
+  0x0328, 0x0088,
+  0x0332, 0x0040,
+  0x0336, 0x008a,
+  0x0361, 0x02f6,
+  0x0391, 0x03f3,
+  0x03a3, 0x0404,
+  0x03b1, 0x040b,
+  0x03c3, 0x041c,
+  0x0401, 0x0429,
+  0x0410, 0x0423,
+  0x0416, 0x042a,
+  0x0436, 0x044b,
+  0x0451, 0x044a,
+  0x2002, 0x00e7,
+  0x2003, 0x0279,
+  0x2010, 0x000e,
+  0x2011, 0x000e,
+  0x2012, 0x0072,
+  0x2013, 0x0072,
+  0x2014, 0x008a,
+  0x2015, 0x0295,
+  0x2016, 0x029a,
+  0x2018, 0x029e,
+  0x201a, 0x0078,
+  0x201c, 0x02a0,
+  0x201e, 0x0079,
+  0x2020, 0x0308,
+  0x2022, 0x0077,
+  0x2025, 0x029d,
+  0x2026, 0x029c,
+  0x2030, 0x0304,
+  0x2032, 0x02c4,
+  0x2039, 0x006e,
+  0x203b, 0x02de,
+  0x203e, 0x0145,
+  0x2044, 0x0068,
+  0x20dd, 0x030b,
+  0x2103, 0x02c6,
+  0x2109, 0x2071,
+  0x2113, 0x1f59,
+  0x2116, 0x1dba,
+  0x2121, 0x1f77,
+  0x2122, 0x00e4,
+  0x212b, 0x0303,
+  0x2160, 0x1d97,
+  0x216a, 0x2021,
+  0x2170, 0x1f9c,
+  0x217a, 0x206a,
+  0x217f, 0x206f,
+  0x2190, 0x02e1,
+  0x2192, 0x02e0,
+  0x2193, 0x02e3,
+  0x21c4, 0x2076,
+  0x21c6, 0x2075,
+  0x21d2, 0x02f0,
+  0x21d4, 0x02f1,
+  0x21e6, 0x1f4d,
+  0x21e7, 0x1f4c,
+  0x21e8, 0x1f4e,
+  0x21e9, 0x1f4b,
+  0x2200, 0x02f2,
+  0x2202, 0x02f7,
+  0x2203, 0x02f3,
+  0x2207, 0x02f8,
+  0x2208, 0x02e5,
+  0x220b, 0x02e6,
+  0x2211, 0x1dc9,
+  0x2212, 0x02b5,
+  0x221a, 0x02fd,
+  0x221d, 0x02ff,
+  0x221e, 0x02bf,
+  0x221f, 0x1dcd,
+  0x2220, 0x02f4,
+  0x2225, 0x029a,
+  0x2227, 0x02ed,
+  0x2229, 0x02ec,
+  0x222a, 0x02eb,
+  0x222b, 0x0301,
+  0x222d, 0x2003,
+  0x222e, 0x1dc8,
+  0x2234, 0x02c0,
+  0x2235, 0x0300,
+  0x223c, 0x0299,
+  0x223d, 0x02fe,
+  0x2252, 0x02fa,
+  0x2260, 0x02ba,
+  0x2261, 0x02f9,
+  0x2266, 0x02bd,
+  0x226a, 0x02fb,
+  0x2282, 0x02e9,
+  0x2286, 0x02e7,
+  0x22a5, 0x02f5,
+  0x22bf, 0x1dce,
+  0x22ee, 0x1ed9,
+  0x22ef, 0x029c,
+  0x2312, 0x02f6,
+  0x2460, 0x1d83,
+  0x2474, 0x1f87,
+  0x2488, 0x1f7e,
+  0x249c, 0x1fb0,
+  0x24ea, 0x2020,
+  0x2500, 0x1d37,
+  0x2550, 0x203b,
+  0x255e, 0x203c,
+  0x2561, 0x203e,
+  0x256a, 0x203d,
+  0x256d, 0x2037,
+  0x256f, 0x203a,
+  0x2570, 0x2039,
+  0x2571, 0x2045,
+  0x2581, 0x2026,
+  0x2589, 0x2034,
+  0x258a, 0x2033,
+  0x258b, 0x2032,
+  0x258c, 0x2031,
+  0x258d, 0x2030,
+  0x258e, 0x202f,
+  0x258f, 0x202e,
+  0x2594, 0x2035,
+  0x25a0, 0x02d9,
+  0x25a1, 0x02d8,
+  0x25a2, 0x1f4f,
+  0x25b2, 0x02db,
+  0x25b3, 0x02da,
+  0x25b7, 0x1f4a,
+  0x25bc, 0x02dd,
+  0x25bd, 0x02dc,
+  0x25c1, 0x1f49,
+  0x25c6, 0x02d7,
+  0x25c7, 0x02d6,
+  0x25c9, 0x2012,
+  0x25cb, 0x02d3,
+  0x25ce, 0x02d5,
+  0x25cf, 0x02d4,
+  0x25e2, 0x203f,
+  0x25e4, 0x2042,
+  0x25e5, 0x2041,
+  0x25ef, 0x030b,
+  0x2600, 0x2017,
+  0x2605, 0x02d2,
+  0x2606, 0x02d1,
+  0x260e, 0x1f78,
+  0x261c, 0x201c,
+  0x261e, 0x201b,
+  0x261f, 0x201e,
+  0x2640, 0x02c2,
+  0x2642, 0x02c1,
+  0x2660, 0x2013,
+  0x2661, 0x1f51,
+  0x2662, 0x1f53,
+  0x2663, 0x2015,
+  0x2664, 0x1f52,
+  0x2665, 0x2014,
+  0x2666, 0x2016,
+  0x2667, 0x1f50,
+  0x266a, 0x0307,
+  0x266d, 0x0306,
+  0x266f, 0x0305,
+  0x2776, 0x205e,
+  0x27a1, 0x200e,
+  0x3000, 0x0279,
+  0x3003, 0x028f,
+  0x3004, 0x2074,
+  0x3005, 0x0291,
+  0x3008, 0x02aa,
+  0x3012, 0x02df,
+  0x3013, 0x02e4,
+  0x3014, 0x02a4,
+  0x301c, 0x0299,
+  0x301d, 0x1db8,
+  0x301f, 0x1db9,
+  0x3020, 0x1f7a,
+  0x3036, 0x1f79,
+  0x3041, 0x034a,
+  0x3094, 0x1f16,
+  0x309b, 0x0283,
+  0x309d, 0x028d,
+  0x30a1, 0x039d,
+  0x30f7, 0x2079,
+  0x30fb, 0x027e,
+  0x30fc, 0x0294,
+  0x30fd, 0x028b,
+  0x322a, 0x2006,
+  0x3230, 0x2005,
+  0x3231, 0x1dc2,
+  0x3233, 0x1fcf,
+  0x3234, 0x1fcd,
+  0x3235, 0x1fd4,
+  0x3236, 0x1fd3,
+  0x3237, 0x200c,
+  0x3238, 0x1fce,
+  0x3239, 0x1dc4,
+  0x323a, 0x1fd7,
+  0x323b, 0x1fd5,
+  0x323c, 0x1fd0,
+  0x323d, 0x1fcb,
+  0x323e, 0x1fd2,
+  0x323f, 0x1fcc,
+  0x3240, 0x1fd6,
+  0x3241, 0x200d,
+  0x3242, 0x1fd1,
+  0x3243, 0x1fca,
+  0x3291, 0x1fe1,
+  0x3292, 0x1fe0,
+  0x3293, 0x1fe2,
+  0x3294, 0x1fdc,
+  0x3296, 0x1fe5,
+  0x3298, 0x1fde,
+  0x3299, 0x201f,
+  0x329d, 0x207f,
+  0x329e, 0x1fff,
+  0x32a4, 0x1dbd,
+  0x32a9, 0x1fda,
+  0x32aa, 0x1fdd,
+  0x32ab, 0x1fdf,
+  0x32ac, 0x1fe3,
+  0x32ad, 0x1fd9,
+  0x32ae, 0x1fe4,
+  0x32af, 0x1fdb,
+  0x32b0, 0x1fd8,
+  0x3300, 0x1f70,
+  0x3303, 0x1f6a,
+  0x3305, 0x1ff7,
+  0x330d, 0x1dab,
+  0x3314, 0x1da2,
+  0x3315, 0x1f69,
+  0x3316, 0x1f67,
+  0x3318, 0x1f68,
+  0x331e, 0x1f73,
+  0x3322, 0x1f66,
+  0x3323, 0x1f6b,
+  0x3326, 0x1dac,
+  0x3327, 0x1da6,
+  0x332a, 0x1f74,
+  0x332b, 0x1dae,
+  0x3331, 0x1f71,
+  0x3333, 0x2087,
+  0x3336, 0x1da8,
+  0x3339, 0x1f6e,
+  0x333b, 0x1f6f,
+  0x3342, 0x1f6d,
+  0x3347, 0x1f72,
+  0x3349, 0x1da1,
+  0x334a, 0x1daf,
+  0x334d, 0x1da4,
+  0x334e, 0x2088,
+  0x3351, 0x1da9,
+  0x3357, 0x1f6c,
+  0x337b, 0x2083,
+  0x337c, 0x1dc7,
+  0x337d, 0x1dc6,
+  0x337e, 0x1dc5,
+  0x337f, 0x1f76,
+  0x3385, 0x1f5f,
+  0x3388, 0x2000,
+  0x338e, 0x1db4,
+  0x3390, 0x1f63,
+  0x3396, 0x1f65,
+  0x3397, 0x1f58,
+  0x3398, 0x1f5a,
+  0x339c, 0x1db1,
+  0x339f, 0x1ffa,
+  0x33a0, 0x1f54,
+  0x33a1, 0x1db7,
+  0x33a2, 0x1f55,
+  0x33a3, 0x1ffb,
+  0x33a4, 0x1f56,
+  0x33a6, 0x1ffc,
+  0x33b0, 0x1f5e,
+  0x33b1, 0x1f5d,
+  0x33b2, 0x1f5c,
+  0x33b3, 0x1f5b,
+  0x33c4, 0x1db6,
+  0x33c8, 0x2002,
+  0x33cb, 0x1f62,
+  0x33cc, 0x1ff6,
+  0x33cd, 0x1dbb,
+  0x33d4, 0x1f64,
+  0x4e00, 0x04b0,
+  0x4e01, 0x0bb8,
+  0x4e03, 0x08e3,
+  0x4e07, 0x0eaa,
+  0x4e08, 0x09ce,
+  0x4e09, 0x087e,
+  0x4e0a, 0x09cd,
+  0x4e0b, 0x053c,
+  0x4e0d, 0x0dc6,
+  0x4e0e, 0x0f29,
+  0x4e10, 0x0ffb,
+  0x4e11, 0x04d1,
+  0x4e14, 0x05cc,
+  0x4e15, 0x0ffc,
+  0x4e16, 0x0a48,
+  0x4e17, 0x10d7,
+  0x4e18, 0x0670,
+  0x4e19, 0x0e0a,
+  0x4e1e, 0x09cf,
+  0x4e21, 0x0f86,
+  0x4e26, 0x0e12,
+  0x4e28, 0x20b3,
+  0x4e2a, 0x0ffd,
+  0x4e2d, 0x0ba4,
+  0x4e31, 0x0ffe,
+  0x4e32, 0x06f2,
+  0x4e36, 0x0fff,
+  0x4e38, 0x0619,
+  0x4e39, 0x0b6e,
+  0x4e3b, 0x0913,
+  0x4e3c, 0x1000,
+  0x4e3f, 0x1001,
+  0x4e42, 0x1002,
+  0x4e43, 0x0ceb,
+  0x4e45, 0x0671,
+  0x4e4b, 0x0ced,
+  0x4e4d, 0x0cbb,
+  0x4e4e, 0x0777,
+  0x4e4f, 0x0e61,
+  0x4e55, 0x1950,
+  0x4e56, 0x1003,
+  0x4e57, 0x09d0,
+  0x4e58, 0x1004,
+  0x4e59, 0x0535,
+  0x4e5d, 0x06dd,
+  0x4e5e, 0x07a4,
+  0x4e5f, 0x0ef5,
+  0x4e62, 0x1233,
+  0x4e71, 0x0f5a,
+  0x4e73, 0x0cd5,
+  0x4e7e, 0x05e1,
+  0x4e80, 0x064f,
+  0x4e82, 0x1005,
+  0x4e85, 0x1006,
+  0x4e86, 0x0f83,
+  0x4e88, 0x0f27,
+  0x4e89, 0x0aea,
+  0x4e8a, 0x1008,
+  0x4e8b, 0x08c4,
+  0x4e8c, 0x0ccb,
+  0x4e8e, 0x100b,
+  0x4e91, 0x04e0,
+  0x4e92, 0x0793,
+  0x4e94, 0x0792,
+  0x4e95, 0x04aa,
+  0x4e98, 0x0ff1,
+  0x4e99, 0x0ff0,
+  0x4e9b, 0x0823,
+  0x4e9c, 0x0465,
+  0x4e9e, 0x100c,
+  0x4ea1, 0x0e62,
+  0x4ea2, 0x100f,
+  0x4ea4, 0x07a6,
+  0x4ea5, 0x04ab,
+  0x4ea6, 0x0ea0,
+  0x4ea8, 0x0696,
+  0x4eab, 0x0697,
+  0x4ead, 0x0bfe,
+  0x4eae, 0x0f84,
+  0x4eb0, 0x1010,
+  0x4eb3, 0x1011,
+  0x4eb6, 0x1012,
+  0x4eba, 0x0a13,
+  0x4ec0, 0x0944,
+  0x4ec1, 0x0a14,
+  0x4ec2, 0x1017,
+  0x4ec4, 0x1015,
+  0x4ec6, 0x1016,
+  0x4ec7, 0x0672,
+  0x4eca, 0x0813,
+  0x4ecb, 0x0570,
+  0x4ecd, 0x1014,
+  0x4ece, 0x1013,
+  0x4ecf, 0x0df9,
+  0x4ed4, 0x0894,
+  0x4ed5, 0x0893,
+  0x4ed6, 0x0b1e,
+  0x4ed7, 0x1018,
+  0x4ed8, 0x0dc7,
+  0x4ed9, 0x0a8b,
+  0x4edd, 0x0290,
+  0x4ede, 0x1019,
+  0x4edf, 0x101b,
+  0x4ee1, 0x20b4,
+  0x4ee3, 0x0b45,
+  0x4ee4, 0x0fa9,
+  0x4ee5, 0x048e,
+  0x4eed, 0x101a,
+  0x4eee, 0x053e,
+  0x4ef0, 0x06bc,
+  0x4ef2, 0x0ba5,
+  0x4ef6, 0x0745,
+  0x4ef7, 0x101c,
+  0x4efb, 0x0cda,
+  0x4efc, 0x20b5,
+  0x4f00, 0x20b6,
+  0x4f01, 0x0627,
+  0x4f03, 0x20b7,
+  0x4f09, 0x101d,
+  0x4f0a, 0x048f,
+  0x4f0d, 0x0794,
+  0x4f0e, 0x0628,
+  0x4f0f, 0x0dec,
+  0x4f10, 0x0d46,
+  0x4f11, 0x0673,
+  0x4f1a, 0x0571,
+  0x4f1c, 0x1040,
+  0x4f1d, 0x0c3b,
+  0x4f2f, 0x0d22,
+  0x4f30, 0x101f,
+  0x4f34, 0x0d50,
+  0x4f36, 0x0faa,
+  0x4f38, 0x09f3,
+  0x4f39, 0x20b8,
+  0x4f3a, 0x0895,
+  0x4f3c, 0x08c5,
+  0x4f3d, 0x0540,
+  0x4f43, 0x0bed,
+  0x4f46, 0x0b60,
+  0x4f47, 0x1023,
+  0x4f4d, 0x0490,
+  0x4f4e, 0x0bff,
+  0x4f4f, 0x0945,
+  0x4f50, 0x0824,
+  0x4f51, 0x0f0e,
+  0x4f53, 0x0b2e,
+  0x4f55, 0x053f,
+  0x4f56, 0x20b9,
+  0x4f57, 0x1022,
+  0x4f59, 0x0f28,
+  0x4f5a, 0x101e,
+  0x4f5b, 0x1020,
+  0x4f5c, 0x085e,
+  0x4f5d, 0x1021,
+  0x4f5e, 0x11d3,
+  0x4f69, 0x1029,
+  0x4f6f, 0x102c,
+  0x4f70, 0x102a,
+  0x4f73, 0x0542,
+  0x4f75, 0x0e0b,
+  0x4f76, 0x1024,
+  0x4f7b, 0x1028,
+  0x4f7c, 0x07a7,
+  0x4f7f, 0x0896,
+  0x4f83, 0x05e2,
+  0x4f86, 0x102d,
+  0x4f88, 0x1025,
+  0x4f8a, 0x20bb,
+  0x4f8b, 0x0fab,
+  0x4f8d, 0x08c6,
+  0x4f8f, 0x1026,
+  0x4f91, 0x102b,
+  0x4f92, 0x20ba,
+  0x4f94, 0x20bd,
+  0x4f96, 0x102e,
+  0x4f98, 0x1027,
+  0x4f9a, 0x20bc,
+  0x4f9b, 0x0699,
+  0x4f9d, 0x0491,
+  0x4fa0, 0x069a,
+  0x4fa1, 0x0541,
+  0x4fab, 0x11d4,
+  0x4fad, 0x0ea7,
+  0x4fae, 0x0de0,
+  0x4faf, 0x07a8,
+  0x4fb5, 0x09f5,
+  0x4fb6, 0x0f7f,
+  0x4fbf, 0x0e28,
+  0x4fc2, 0x070e,
+  0x4fc3, 0x0b05,
+  0x4fc4, 0x0564,
+  0x4fc9, 0x20ac,
+  0x4fca, 0x095d,
+  0x4fcd, 0x20be,
+  0x4fce, 0x1032,
+  0x4fd0, 0x1037,
+  0x4fd1, 0x1035,
+  0x4fd4, 0x1030,
+  0x4fd7, 0x0b0f,
+  0x4fd8, 0x1033,
+  0x4fda, 0x1036,
+  0x4fdb, 0x1034,
+  0x4fdd, 0x0e2d,
+  0x4fdf, 0x1031,
+  0x4fe0, 0x1dec,
+  0x4fe1, 0x09f4,
+  0x4fe3, 0x0ea1,
+  0x4fe4, 0x1038,
+  0x4fee, 0x092e,
+  0x4fef, 0x1046,
+  0x4ff3, 0x0d06,
+  0x4ff5, 0x0da8,
+  0x4ff6, 0x1041,
+  0x4ff8, 0x0e40,
+  0x4ffa, 0x0536,
+  0x4ffe, 0x1045,
+  0x4fff, 0x20c1,
+  0x5005, 0x103f,
+  0x5006, 0x1048,
+  0x5009, 0x0ad4,
+  0x500b, 0x0778,
+  0x500d, 0x0d12,
+  0x500f, 0x1600,
+  0x5011, 0x1047,
+  0x5012, 0x0c57,
+  0x5014, 0x103c,
+  0x5016, 0x07aa,
+  0x5019, 0x07a9,
+  0x501a, 0x103a,
+  0x501e, 0x20c2,
+  0x501f, 0x0906,
+  0x5021, 0x1042,
+  0x5022, 0x20c0,
+  0x5023, 0x0e3f,
+  0x5024, 0x0b8b,
+  0x5025, 0x103e,
+  0x5026, 0x0747,
+  0x5028, 0x103b,
+  0x5029, 0x1043,
+  0x502a, 0x103d,
+  0x502b, 0x0f99,
+  0x502c, 0x1044,
+  0x502d, 0x0fe7,
+  0x5036, 0x06de,
+  0x5039, 0x0746,
+  0x5040, 0x20bf,
+  0x5042, 0x20c5,
+  0x5043, 0x1049,
+  0x5046, 0x20c3,
+  0x5047, 0x104a,
+  0x5048, 0x104e,
+  0x5049, 0x0492,
+  0x504f, 0x0e20,
+  0x5050, 0x104d,
+  0x5055, 0x104c,
+  0x5056, 0x1050,
+  0x505a, 0x104f,
+  0x505c, 0x0c00,
+  0x5065, 0x0748,
+  0x506c, 0x1051,
+  0x5070, 0x20c4,
+  0x5072, 0x08f1,
+  0x5074, 0x0b06,
+  0x5075, 0x0c01,
+  0x5076, 0x06ee,
+  0x5078, 0x1052,
+  0x507d, 0x0650,
+  0x5080, 0x1053,
+  0x5085, 0x1055,
+  0x508d, 0x0e63,
+  0x5091, 0x073c,
+  0x5094, 0x20c6,
+  0x5098, 0x087f,
+  0x5099, 0x0d8b,
+  0x509a, 0x1054,
+  0x50ac, 0x0835,
+  0x50ad, 0x0f2d,
+  0x50b2, 0x1057,
+  0x50b3, 0x105a,
+  0x50b4, 0x1056,
+  0x50b5, 0x0834,
+  0x50b7, 0x0987,
+  0x50be, 0x070f,
+  0x50c2, 0x105b,
+  0x50c5, 0x06c7,
+  0x50c9, 0x1058,
+  0x50cd, 0x0c87,
+  0x50cf, 0x0afe,
+  0x50d1, 0x069b,
+  0x50d5, 0x0e7b,
+  0x50d6, 0x105c,
+  0x50d8, 0x20c8,
+  0x50da, 0x0f85,
+  0x50de, 0x105d,
+  0x50e3, 0x1060,
+  0x50e5, 0x105e,
+  0x50e7, 0x0ad0,
+  0x50ed, 0x105f,
+  0x50ee, 0x1061,
+  0x50f4, 0x20c7,
+  0x50f5, 0x1063,
+  0x50f9, 0x1062,
+  0x50fb, 0x0e18,
+  0x5100, 0x0651,
+  0x5101, 0x1065,
+  0x5104, 0x052f,
+  0x5109, 0x1064,
+  0x5112, 0x0920,
+  0x5114, 0x1069,
+  0x5115, 0x1068,
+  0x5116, 0x1067,
+  0x5118, 0x102f,
+  0x511a, 0x106a,
+  0x511f, 0x0988,
+  0x5121, 0x106b,
+  0x512a, 0x0f0f,
+  0x5132, 0x0ee5,
+  0x5137, 0x106d,
+  0x513a, 0x106c,
+  0x513b, 0x106f,
+  0x513c, 0x106e,
+  0x513f, 0x1070,
+  0x5141, 0x04b8,
+  0x5143, 0x0769,
+  0x5144, 0x0711,
+  0x5145, 0x0946,
+  0x5146, 0x0bb9,
+  0x5147, 0x069c,
+  0x5148, 0x0a8c,
+  0x5149, 0x07ab,
+  0x514a, 0x20c9,
+  0x514b, 0x0800,
+  0x514c, 0x1073,
+  0x514d, 0x0ed4,
+  0x514e, 0x0c40,
+  0x5150, 0x08c7,
+  0x5152, 0x1072,
+  0x5154, 0x1074,
+  0x515a, 0x0c58,
+  0x515c, 0x05d3,
+  0x5162, 0x1075,
+  0x5164, 0x20ca,
+  0x5165, 0x0cd6,
+  0x5168, 0x0ab6,
+  0x5169, 0x1077,
+  0x516b, 0x0d40,
+  0x516c, 0x07ac,
+  0x516d, 0x0fe1,
+  0x516e, 0x1079,
+  0x5171, 0x069e,
+  0x5175, 0x0e0c,
+  0x5176, 0x0b16,
+  0x5177, 0x06e9,
+  0x5178, 0x0c2f,
+  0x517c, 0x0749,
+  0x5180, 0x107a,
+  0x5182, 0x107b,
+  0x5185, 0x0cba,
+  0x5186, 0x0501,
+  0x5189, 0x107e,
+  0x518a, 0x086d,
+  0x518c, 0x107d,
+  0x518d, 0x0836,
+  0x518f, 0x107f,
+  0x5190, 0x185b,
+  0x5191, 0x1080,
+  0x5192, 0x0e6f,
+  0x5193, 0x1081,
+  0x5195, 0x1082,
+  0x5197, 0x09d1,
+  0x5199, 0x08f8,
+  0x519d, 0x20cb,
+  0x51a0, 0x05e3,
+  0x51a2, 0x1086,
+  0x51a4, 0x1084,
+  0x51a5, 0x0ec9,
+  0x51a6, 0x1085,
+  0x51a8, 0x0dcc,
+  0x51a9, 0x1087,
+  0x51ac, 0x0c59,
+  0x51b0, 0x108d,
+  0x51b1, 0x108b,
+  0x51b3, 0x108a,
+  0x51b4, 0x0853,
+  0x51b5, 0x108e,
+  0x51b6, 0x0ef6,
+  0x51b7, 0x0fac,
+  0x51bd, 0x108f,
+  0x51be, 0x20cc,
+  0x51c4, 0x0a4c,
+  0x51c5, 0x1090,
+  0x51c6, 0x0964,
+  0x51c9, 0x1091,
+  0x51cb, 0x0bba,
+  0x51cc, 0x0f87,
+  0x51cd, 0x0c5a,
+  0x51d6, 0x10da,
+  0x51db, 0x1092,
+  0x51dc, 0x205c,
+  0x51dd, 0x06bd,
+  0x51e0, 0x1093,
+  0x51e1, 0x0e8c,
+  0x51e6, 0x0972,
+  0x51e7, 0x0b5c,
+  0x51e9, 0x1095,
+  0x51ea, 0x0cbc,
+  0x51ec, 0x20cd,
+  0x51ed, 0x1096,
+  0x51f0, 0x1097,
+  0x51f1, 0x058c,
+  0x51f5, 0x1098,
+  0x51f6, 0x069f,
+  0x51f8, 0x0ca4,
+  0x51f9, 0x051c,
+  0x51fa, 0x095a,
+  0x51fd, 0x0d35,
+  0x51fe, 0x1099,
+  0x5200, 0x0c5b,
+  0x5203, 0x0a15,
+  0x5204, 0x109a,
+  0x5206, 0x0dfc,
+  0x5207, 0x0a7e,
+  0x5208, 0x05de,
+  0x520a, 0x05e5,
+  0x520b, 0x109b,
+  0x520e, 0x109d,
+  0x5211, 0x0710,
+  0x5214, 0x109c,
+  0x5215, 0x20ce,
+  0x5217, 0x0fbb,
+  0x521d, 0x0973,
+  0x5224, 0x0d51,
+  0x5225, 0x0e1c,
+  0x5227, 0x109e,
+  0x5229, 0x0f62,
+  0x522a, 0x109f,
+  0x522e, 0x10a0,
+  0x5230, 0x0c78,
+  0x5233, 0x10a1,
+  0x5236, 0x0a4d,
+  0x5237, 0x086e,
+  0x5238, 0x074a,
+  0x5239, 0x10a2,
+  0x523a, 0x0897,
+  0x523b, 0x0801,
+  0x5243, 0x0c02,
+  0x5244, 0x10a4,
+  0x5247, 0x0b07,
+  0x524a, 0x085f,
+  0x524b, 0x10a5,
+  0x524d, 0x0ab2,
+  0x524f, 0x10a3,
+  0x5254, 0x10a8,
+  0x5256, 0x0e64,
+  0x525b, 0x07f6,
+  0x525d, 0x1e5e,
+  0x525e, 0x10a7,
+  0x5263, 0x074b,
+  0x5264, 0x084e,
+  0x5265, 0x0d23,
+  0x5269, 0x10ab,
+  0x526a, 0x10a9,
+  0x526f, 0x0ded,
+  0x5270, 0x09d2,
+  0x5271, 0x10b2,
+  0x5272, 0x05c2,
+  0x5273, 0x10ac,
+  0x5274, 0x10aa,
+  0x5275, 0x0ad1,
+  0x527d, 0x10ae,
+  0x527f, 0x10ad,
+  0x5283, 0x05a2,
+  0x5287, 0x0736,
+  0x5288, 0x10b3,
+  0x5289, 0x0f75,
+  0x528d, 0x10af,
+  0x5291, 0x10b4,
+  0x5292, 0x10b1,
+  0x5294, 0x10b0,
+  0x529b, 0x0f97,
+  0x529c, 0x20cf,
+  0x529f, 0x07ad,
+  0x52a0, 0x0543,
+  0x52a3, 0x0fbc,
+  0x52a6, 0x20d0,
+  0x52a9, 0x097f,
+  0x52aa, 0x0c52,
+  0x52ab, 0x07f7,
+  0x52ac, 0x10b7,
+  0x52af, 0x217d,
+  0x52b1, 0x0fad,
+  0x52b4, 0x0fd1,
+  0x52b5, 0x10ba,
+  0x52b9, 0x07ae,
+  0x52bc, 0x10b9,
+  0x52be, 0x058d,
+  0x52c0, 0x20d1,
+  0x52c1, 0x10bb,
+  0x52c3, 0x0e84,
+  0x52c5, 0x0bd8,
+  0x52c7, 0x0f10,
+  0x52c9, 0x0e29,
+  0x52cd, 0x10bc,
+  0x52d2, 0x1bee,
+  0x52d5, 0x0c88,
+  0x52d7, 0x10bd,
+  0x52d8, 0x05e6,
+  0x52d9, 0x0ebf,
+  0x52db, 0x20d2,
+  0x52dd, 0x0989,
+  0x52de, 0x10be,
+  0x52df, 0x0e37,
+  0x52e0, 0x10c2,
+  0x52e2, 0x0a4e,
+  0x52e3, 0x10bf,
+  0x52e4, 0x06c8,
+  0x52e6, 0x10c0,
+  0x52e7, 0x05e7,
+  0x52f2, 0x0704,
+  0x52f3, 0x10c3,
+  0x52f5, 0x10c4,
+  0x52f8, 0x10c5,
+  0x52fa, 0x0907,
+  0x52fe, 0x07af,
+  0x52ff, 0x0eea,
+  0x5300, 0x20d3,
+  0x5301, 0x0ef4,
+  0x5302, 0x0ccf,
+  0x5305, 0x0e41,
+  0x5306, 0x10c7,
+  0x5307, 0x20d4,
+  0x5308, 0x10c8,
+  0x530d, 0x10ca,
+  0x530f, 0x10cc,
+  0x5310, 0x10cb,
+  0x5315, 0x10cd,
+  0x5316, 0x053d,
+  0x5317, 0x0e7a,
+  0x5319, 0x086c,
+  0x531a, 0x10ce,
+  0x531d, 0x0adb,
+  0x5320, 0x098a,
+  0x5321, 0x06a1,
+  0x5323, 0x10cf,
+  0x5324, 0x20d5,
+  0x532a, 0x0d6f,
+  0x532f, 0x10d0,
+  0x5331, 0x10d1,
+  0x5333, 0x10d2,
+  0x5338, 0x10d3,
+  0x5339, 0x0d96,
+  0x533a, 0x06e0,
+  0x533b, 0x04a9,
+  0x533f, 0x0c97,
+  0x5340, 0x10d4,
+  0x5341, 0x0947,
+  0x5343, 0x0a8d,
+  0x5345, 0x10d6,
+  0x5346, 0x10d5,
+  0x5347, 0x098b,
+  0x5348, 0x0795,
+  0x5349, 0x10d8,
+  0x534a, 0x0d52,
+  0x534d, 0x10d9,
+  0x5351, 0x0d70,
+  0x5352, 0x0b14,
+  0x5353, 0x0b4e,
+  0x5354, 0x06a0,
+  0x5357, 0x0cc6,
+  0x5358, 0x0b6f,
+  0x535a, 0x0d24,
+  0x535c, 0x0e7c,
+  0x535e, 0x10db,
+  0x5360, 0x0a8e,
+  0x5366, 0x070b,
+  0x5369, 0x10dc,
+  0x536e, 0x10dd,
+  0x536f, 0x04ce,
+  0x5370, 0x04b9,
+  0x5371, 0x0629,
+  0x5372, 0x20d6,
+  0x5373, 0x0b08,
+  0x5374, 0x066b,
+  0x5375, 0x0f5b,
+  0x5377, 0x10e0,
+  0x5378, 0x0537,
+  0x537b, 0x10df,
+  0x537f, 0x06a2,
+  0x5382, 0x10e1,
+  0x5384, 0x0efd,
+  0x5393, 0x20d7,
+  0x5396, 0x10e2,
+  0x5398, 0x0f9a,
+  0x539a, 0x07b0,
+  0x539f, 0x076a,
+  0x53a0, 0x10e3,
+  0x53a5, 0x10e5,
+  0x53a6, 0x10e4,
+  0x53a8, 0x0a25,
+  0x53a9, 0x04db,
+  0x53ad, 0x0500,
+  0x53ae, 0x10e6,
+  0x53b0, 0x10e7,
+  0x53b2, 0x20d8,
+  0x53b3, 0x076b,
+  0x53b6, 0x10e8,
+  0x53bb, 0x0688,
+  0x53c2, 0x0880,
+  0x53c3, 0x10e9,
+  0x53c8, 0x0ea2,
+  0x53c9, 0x0825,
+  0x53ca, 0x0674,
+  0x53cb, 0x0f11,
+  0x53cc, 0x0ad2,
+  0x53cd, 0x0d53,
+  0x53ce, 0x0929,
+  0x53d4, 0x0951,
+  0x53d6, 0x0914,
+  0x53d7, 0x0921,
+  0x53d9, 0x0980,
+  0x53db, 0x0d54,
+  0x53dd, 0x20d9,
+  0x53df, 0x10ec,
+  0x53e1, 0x04e5,
+  0x53e2, 0x0ad3,
+  0x53e3, 0x07b1,
+  0x53e4, 0x0779,
+  0x53e5, 0x06df,
+  0x53e8, 0x10f0,
+  0x53e9, 0x0b5f,
+  0x53ea, 0x0b5e,
+  0x53eb, 0x06a3,
+  0x53ec, 0x098c,
+  0x53ed, 0x10f1,
+  0x53ee, 0x10ef,
+  0x53ef, 0x0544,
+  0x53f0, 0x0b46,
+  0x53f1, 0x08e4,
+  0x53f2, 0x0899,
+  0x53f3, 0x04c8,
+  0x53f6, 0x05ce,
+  0x53f7, 0x07f8,
+  0x53f8, 0x0898,
+  0x53fa, 0x10f2,
+  0x5401, 0x10f3,
+  0x5403, 0x0663,
+  0x5404, 0x05a4,
+  0x5408, 0x07f9,
+  0x5409, 0x0662,
+  0x540a, 0x0bfb,
+  0x540b, 0x04c7,
+  0x540c, 0x0c89,
+  0x540d, 0x0eca,
+  0x540e, 0x07b3,
+  0x540f, 0x0f63,
+  0x5410, 0x0c41,
+  0x5411, 0x07b2,
+  0x541b, 0x0705,
+  0x541d, 0x10fc,
+  0x541f, 0x06db,
+  0x5420, 0x0e78,
+  0x5426, 0x0d71,
+  0x5429, 0x10fb,
+  0x542b, 0x061a,
+  0x542c, 0x10f6,
+  0x542e, 0x10f9,
+  0x5436, 0x10fa,
+  0x5438, 0x0675,
+  0x5439, 0x0a27,
+  0x543b, 0x0dfd,
+  0x543c, 0x10f8,
+  0x543d, 0x10f4,
+  0x543e, 0x0797,
+  0x5440, 0x10f5,
+  0x5442, 0x0fca,
+  0x5446, 0x0e42,
+  0x5448, 0x0c04,
+  0x5449, 0x0796,
+  0x544a, 0x0802,
+  0x544e, 0x10fd,
+  0x5451, 0x0cb5,
+  0x545f, 0x1101,
+  0x5468, 0x092a,
+  0x546a, 0x0922,
+  0x5470, 0x1104,
+  0x5471, 0x1102,
+  0x5473, 0x0eaf,
+  0x5475, 0x10ff,
+  0x5476, 0x1108,
+  0x5477, 0x1103,
+  0x547b, 0x1106,
+  0x547c, 0x077a,
+  0x547d, 0x0ecb,
+  0x5480, 0x1107,
+  0x5484, 0x1109,
+  0x5486, 0x110b,
+  0x548a, 0x20dc,
+  0x548b, 0x0860,
+  0x548c, 0x0fe8,
+  0x548e, 0x1100,
+  0x548f, 0x10fe,
+  0x5490, 0x110a,
+  0x5492, 0x1105,
+  0x549c, 0x20db,
+  0x54a2, 0x110d,
+  0x54a4, 0x1116,
+  0x54a5, 0x110f,
+  0x54a8, 0x1113,
+  0x54a9, 0x20dd,
+  0x54ab, 0x1114,
+  0x54ac, 0x1110,
+  0x54af, 0x1131,
+  0x54b2, 0x0859,
+  0x54b3, 0x058f,
+  0x54b8, 0x110e,
+  0x54bc, 0x1118,
+  0x54bd, 0x04ba,
+  0x54be, 0x1117,
+  0x54c0, 0x0469,
+  0x54c1, 0x0dbc,
+  0x54c2, 0x1115,
+  0x54c4, 0x1111,
+  0x54c7, 0x110c,
+  0x54c8, 0x1112,
+  0x54c9, 0x0838,
+  0x54d8, 0x1119,
+  0x54e1, 0x04bb,
+  0x54e2, 0x1122,
+  0x54e5, 0x111a,
+  0x54e8, 0x098d,
+  0x54e9, 0x0e97,
+  0x54ed, 0x1120,
+  0x54ee, 0x111f,
+  0x54f2, 0x0c29,
+  0x54fa, 0x1121,
+  0x54fd, 0x111e,
+  0x54ff, 0x20de,
+  0x5504, 0x04d6,
+  0x5506, 0x0826,
+  0x5507, 0x09f6,
+  0x550f, 0x111c,
+  0x5510, 0x0c5c,
+  0x5514, 0x111d,
+  0x5516, 0x0466,
+  0x552e, 0x1127,
+  0x552f, 0x0f0d,
+  0x5531, 0x098f,
+  0x5533, 0x112d,
+  0x5538, 0x112c,
+  0x5539, 0x1123,
+  0x553e, 0x0b23,
+  0x5540, 0x1124,
+  0x5544, 0x0b4f,
+  0x5545, 0x1129,
+  0x5546, 0x098e,
+  0x554c, 0x1126,
+  0x554f, 0x0ef0,
+  0x5553, 0x0712,
+  0x5556, 0x112a,
+  0x555c, 0x1128,
+  0x555d, 0x112e,
+  0x555e, 0x1dd1,
+  0x5563, 0x1125,
+  0x557b, 0x1134,
+  0x557c, 0x1139,
+  0x557e, 0x1135,
+  0x5580, 0x1130,
+  0x5583, 0x113a,
+  0x5584, 0x0ab3,
+  0x5586, 0x20df,
+  0x5587, 0x113c,
+  0x5589, 0x07b4,
+  0x558a, 0x1132,
+  0x558b, 0x0bbb,
+  0x5598, 0x1136,
+  0x5599, 0x112f,
+  0x559a, 0x05e9,
+  0x559c, 0x062a,
+  0x559d, 0x05c3,
+  0x559e, 0x1137,
+  0x559f, 0x1133,
+  0x55a7, 0x074c,
+  0x55a8, 0x113d,
+  0x55a9, 0x113b,
+  0x55aa, 0x0ad5,
+  0x55ab, 0x0664,
+  0x55ac, 0x06a4,
+  0x55ae, 0x1138,
+  0x55b0, 0x06ec,
+  0x55b6, 0x04e6,
+  0x55c4, 0x1141,
+  0x55c5, 0x113f,
+  0x55c7, 0x1178,
+  0x55d4, 0x1144,
+  0x55da, 0x113e,
+  0x55dc, 0x1142,
+  0x55df, 0x1140,
+  0x55e3, 0x089a,
+  0x55e4, 0x1143,
+  0x55f7, 0x1146,
+  0x55f9, 0x114b,
+  0x55fd, 0x1149,
+  0x55fe, 0x1148,
+  0x5606, 0x0b70,
+  0x5609, 0x0545,
+  0x5614, 0x1145,
+  0x5616, 0x1147,
+  0x5617, 0x0990,
+  0x5618, 0x04d5,
+  0x561b, 0x114a,
+  0x5629, 0x055e,
+  0x562f, 0x1155,
+  0x5631, 0x09e4,
+  0x5632, 0x1151,
+  0x5634, 0x114f,
+  0x5636, 0x1150,
+  0x5638, 0x1152,
+  0x5642, 0x04df,
+  0x564c, 0x0abb,
+  0x564e, 0x114c,
+  0x5650, 0x114d,
+  0x5653, 0x1f1b,
+  0x565b, 0x05d8,
+  0x5664, 0x1154,
+  0x5668, 0x062b,
+  0x566a, 0x1157,
+  0x566b, 0x1153,
+  0x566c, 0x1156,
+  0x5674, 0x0dfe,
+  0x5678, 0x0cad,
+  0x567a, 0x0d4c,
+  0x5680, 0x1159,
+  0x5686, 0x1158,
+  0x5687, 0x05a3,
+  0x568a, 0x115a,
+  0x568f, 0x115d,
+  0x5694, 0x115c,
+  0x5699, 0x1de6,
+  0x56a0, 0x115b,
+  0x56a2, 0x0cef,
+  0x56a5, 0x115e,
+  0x56ae, 0x115f,
+  0x56b4, 0x1161,
+  0x56b6, 0x1160,
+  0x56bc, 0x1163,
+  0x56c0, 0x1166,
+  0x56c1, 0x1164,
+  0x56c2, 0x1162,
+  0x56c3, 0x1165,
+  0x56c8, 0x1167,
+  0x56ca, 0x1e5a,
+  0x56ce, 0x1168,
+  0x56d1, 0x1169,
+  0x56d3, 0x116a,
+  0x56d7, 0x116b,
+  0x56d8, 0x107c,
+  0x56da, 0x0928,
+  0x56db, 0x089b,
+  0x56de, 0x0573,
+  0x56e0, 0x04bc,
+  0x56e3, 0x0b82,
+  0x56ee, 0x116c,
+  0x56f0, 0x0814,
+  0x56f2, 0x0493,
+  0x56f3, 0x0a24,
+  0x56f9, 0x116d,
+  0x56fa, 0x077b,
+  0x56fd, 0x0803,
+  0x56ff, 0x116f,
+  0x5700, 0x116e,
+  0x5703, 0x0e30,
+  0x5704, 0x1170,
+  0x5708, 0x1172,
+  0x5709, 0x1171,
+  0x570b, 0x1173,
+  0x570d, 0x1174,
+  0x570f, 0x074d,
+  0x5712, 0x0502,
+  0x5713, 0x1175,
+  0x5716, 0x1177,
+  0x5718, 0x1176,
+  0x571c, 0x1179,
+  0x571f, 0x0c54,
+  0x5726, 0x117a,
+  0x5727, 0x0479,
+  0x5728, 0x084f,
+  0x572d, 0x0713,
+  0x5730, 0x0b8d,
+  0x5737, 0x117b,
+  0x573b, 0x117e,
+  0x5740, 0x117f,
+  0x5742, 0x0854,
+  0x5747, 0x06c9,
+  0x574a, 0x0e65,
+  0x574e, 0x117d,
+  0x574f, 0x1180,
+  0x5750, 0x0831,
+  0x5751, 0x07b5,
+  0x5759, 0x20e0,
+  0x5761, 0x1184,
+  0x5764, 0x0815,
+  0x5765, 0x20e1,
+  0x5766, 0x0b71,
+  0x5769, 0x1181,
+  0x576a, 0x0bf6,
+  0x577f, 0x1185,
+  0x5782, 0x0a28,
+  0x5788, 0x1183,
+  0x5789, 0x1186,
+  0x578b, 0x0715,
+  0x5793, 0x1187,
+  0x57a0, 0x1188,
+  0x57a2, 0x07b6,
+  0x57a3, 0x059e,
+  0x57a4, 0x118a,
+  0x57aa, 0x118b,
+  0x57ac, 0x20e2,
+  0x57b0, 0x118c,
+  0x57b3, 0x1189,
+  0x57c0, 0x1182,
+  0x57c3, 0x118d,
+  0x57c6, 0x118e,
+  0x57c7, 0x20e4,
+  0x57c8, 0x20e3,
+  0x57cb, 0x0e92,
+  0x57ce, 0x09d3,
+  0x57d2, 0x1190,
+  0x57d4, 0x118f,
+  0x57d6, 0x1193,
+  0x57dc, 0x0cee,
+  0x57df, 0x04ac,
+  0x57e0, 0x0dc8,
+  0x57e3, 0x1194,
+  0x57f4, 0x09e5,
+  0x57f7, 0x08e5,
+  0x57f9, 0x0d13,
+  0x57fa, 0x062c,
+  0x57fc, 0x085b,
+  0x5800, 0x0e87,
+  0x5802, 0x0c8a,
+  0x5805, 0x074e,
+  0x5806, 0x0b2f,
+  0x580a, 0x1192,
+  0x580b, 0x1195,
+  0x5815, 0x0b24,
+  0x5819, 0x1196,
+  0x581d, 0x1197,
+  0x5821, 0x1199,
+  0x5824, 0x0c05,
+  0x582a, 0x05ea,
+  0x582f, 0x1d32,
+  0x5830, 0x0503,
+  0x5831, 0x0e43,
+  0x5834, 0x09d4,
+  0x5835, 0x0c42,
+  0x583a, 0x0856,
+  0x583d, 0x119f,
+  0x5840, 0x0e0d,
+  0x5841, 0x0fa5,
+  0x584a, 0x0574,
+  0x584b, 0x119b,
+  0x5851, 0x0abc,
+  0x5852, 0x119e,
+  0x5854, 0x0c5d,
+  0x5857, 0x0c43,
+  0x5858, 0x0c5e,
+  0x5859, 0x0d4d,
+  0x585a, 0x0be9,
+  0x585e, 0x0839,
+  0x5861, 0x1e47,
+  0x5862, 0x119a,
+  0x5869, 0x0518,
+  0x586b, 0x0c30,
+  0x5870, 0x119c,
+  0x5872, 0x1198,
+  0x5875, 0x0a16,
+  0x5879, 0x11a0,
+  0x587e, 0x0958,
+  0x5883, 0x06a5,
+  0x5885, 0x11a1,
+  0x5893, 0x0e38,
+  0x5897, 0x0aff,
+  0x589c, 0x0be2,
+  0x589e, 0x20e7,
+  0x589f, 0x11a3,
+  0x58a8, 0x0e7d,
+  0x58ab, 0x11a4,
+  0x58ae, 0x11a9,
+  0x58b2, 0x20e8,
+  0x58b3, 0x0dff,
+  0x58b8, 0x11a8,
+  0x58b9, 0x11a2,
+  0x58ba, 0x11a5,
+  0x58bb, 0x11a7,
+  0x58be, 0x0816,
+  0x58c1, 0x0e19,
+  0x58c5, 0x11aa,
+  0x58c7, 0x0b83,
+  0x58ca, 0x0575,
+  0x58cc, 0x09d5,
+  0x58d1, 0x11ac,
+  0x58d3, 0x11ab,
+  0x58d5, 0x07fa,
+  0x58d7, 0x11ad,
+  0x58d8, 0x11af,
+  0x58d9, 0x11ae,
+  0x58dc, 0x11b1,
+  0x58de, 0x11a6,
+  0x58df, 0x11b3,
+  0x58e4, 0x11b2,
+  0x58e5, 0x11b0,
+  0x58eb, 0x089c,
+  0x58ec, 0x0a17,
+  0x58ee, 0x0ad6,
+  0x58ef, 0x11b4,
+  0x58f0, 0x0a60,
+  0x58f1, 0x04b1,
+  0x58f2, 0x0d1a,
+  0x58f7, 0x0bf7,
+  0x58f9, 0x11b6,
+  0x58fa, 0x11b5,
+  0x58fb, 0x11b7,
+  0x5902, 0x11ba,
+  0x5909, 0x0e21,
+  0x590a, 0x11bb,
+  0x590b, 0x20e9,
+  0x590f, 0x0546,
+  0x5910, 0x11bc,
+  0x5915, 0x0f26,
+  0x5916, 0x058e,
+  0x5918, 0x10de,
+  0x5919, 0x0952,
+  0x591a, 0x0b1f,
+  0x591b, 0x11bd,
+  0x591c, 0x0ef7,
+  0x5922, 0x0ec0,
+  0x5925, 0x11bf,
+  0x5927, 0x0b47,
+  0x5929, 0x0c31,
+  0x592a, 0x0b20,
+  0x592b, 0x0dc9,
+  0x592c, 0x11c0,
+  0x592e, 0x051d,
+  0x5931, 0x08e6,
+  0x5932, 0x11c2,
+  0x5937, 0x0494,
+  0x5938, 0x11c3,
+  0x593e, 0x11c4,
+  0x5944, 0x0504,
+  0x5947, 0x062d,
+  0x5948, 0x0cb8,
+  0x5949, 0x0e44,
+  0x594e, 0x11c8,
+  0x594f, 0x0ad7,
+  0x5950, 0x11c7,
+  0x5951, 0x0716,
+  0x5953, 0x20ea,
+  0x5954, 0x0e89,
+  0x5955, 0x11c6,
+  0x5957, 0x0c5f,
+  0x5958, 0x11ca,
+  0x595a, 0x11c9,
+  0x595b, 0x20eb,
+  0x595d, 0x20ec,
+  0x5960, 0x11cc,
+  0x5962, 0x11cb,
+  0x5963, 0x20ed,
+  0x5965, 0x051e,
+  0x5967, 0x11cd,
+  0x5968, 0x0991,
+  0x5969, 0x11cf,
+  0x596a, 0x0b63,
+  0x596c, 0x11ce,
+  0x596e, 0x0e03,
+  0x5973, 0x0981,
+  0x5974, 0x0c55,
+  0x5978, 0x11d0,
+  0x597d, 0x07b7,
+  0x5981, 0x11d1,
+  0x5982, 0x0cd7,
+  0x5983, 0x0d72,
+  0x5984, 0x0edd,
+  0x598a, 0x0cdb,
+  0x598d, 0x11da,
+  0x5993, 0x0652,
+  0x5996, 0x0f2f,
+  0x5999, 0x0ebb,
+  0x599b, 0x1239,
+  0x599d, 0x11d2,
+  0x59a3, 0x11d5,
+  0x59a4, 0x20ee,
+  0x59a5, 0x0b25,
+  0x59a8, 0x0e66,
+  0x59ac, 0x0c44,
+  0x59b2, 0x11d6,
+  0x59b9, 0x0e93,
+  0x59ba, 0x20ef,
+  0x59bb, 0x083a,
+  0x59be, 0x0992,
+  0x59c6, 0x11d7,
+  0x59c9, 0x089e,
+  0x59cb, 0x089d,
+  0x59d0, 0x047d,
+  0x59d1, 0x077c,
+  0x59d3, 0x0a4f,
+  0x59d4, 0x0495,
+  0x59d9, 0x11db,
+  0x59dc, 0x11d9,
+  0x59e5, 0x04da,
+  0x59e6, 0x05eb,
+  0x59e8, 0x11d8,
+  0x59ea, 0x0ed1,
+  0x59eb, 0x0da3,
+  0x59f6, 0x046c,
+  0x59fb, 0x04bd,
+  0x59ff, 0x089f,
+  0x5a01, 0x0496,
+  0x5a03, 0x0467,
+  0x5a09, 0x11e1,
+  0x5a11, 0x11df,
+  0x5a18, 0x0ec8,
+  0x5a1a, 0x11e2,
+  0x5a1c, 0x11e0,
+  0x5a1f, 0x11de,
+  0x5a20, 0x09f7,
+  0x5a25, 0x11dd,
+  0x5a29, 0x0e2a,
+  0x5a2f, 0x0798,
+  0x5a35, 0x11e6,
+  0x5a3c, 0x0993,
+  0x5a40, 0x11e3,
+  0x5a41, 0x0fd2,
+  0x5a46, 0x0d02,
+  0x5a49, 0x11e5,
+  0x5a5a, 0x0817,
+  0x5a62, 0x11e8,
+  0x5a66, 0x0dca,
+  0x5a6a, 0x11e9,
+  0x5a6c, 0x11e4,
+  0x5a7f, 0x0ec7,
+  0x5a92, 0x0d14,
+  0x5a9a, 0x11ea,
+  0x5a9b, 0x0da4,
+  0x5abc, 0x11eb,
+  0x5abd, 0x11ef,
+  0x5abe, 0x11ec,
+  0x5ac1, 0x0547,
+  0x5ac2, 0x11ee,
+  0x5ac9, 0x08e7,
+  0x5acb, 0x11ed,
+  0x5acc, 0x074f,
+  0x5ad0, 0x11fb,
+  0x5ad6, 0x11f4,
+  0x5ad7, 0x11f1,
+  0x5ae1, 0x0ba2,
+  0x5ae3, 0x11f0,
+  0x5ae6, 0x11f2,
+  0x5ae9, 0x11f3,
+  0x5afa, 0x11f5,
+  0x5b09, 0x062e,
+  0x5b0b, 0x11f8,
+  0x5b0c, 0x11f7,
+  0x5b16, 0x11f9,
+  0x5b22, 0x09d6,
+  0x5b2a, 0x11fc,
+  0x5b2c, 0x0bf8,
+  0x5b30, 0x04e7,
+  0x5b32, 0x11fa,
+  0x5b36, 0x11fd,
+  0x5b3e, 0x11fe,
+  0x5b40, 0x1201,
+  0x5b43, 0x11ff,
+  0x5b45, 0x1200,
+  0x5b50, 0x08a0,
+  0x5b51, 0x1202,
+  0x5b54, 0x07b8,
+  0x5b55, 0x1203,
+  0x5b56, 0x20f0,
+  0x5b57, 0x08c8,
+  0x5b58, 0x0b18,
+  0x5b5a, 0x1204,
+  0x5b5c, 0x08a8,
+  0x5b5d, 0x07b9,
+  0x5b5f, 0x0ede,
+  0x5b63, 0x0642,
+  0x5b64, 0x077d,
+  0x5b65, 0x1206,
+  0x5b66, 0x05b6,
+  0x5b69, 0x1207,
+  0x5b6b, 0x0b19,
+  0x5b70, 0x1208,
+  0x5b71, 0x1230,
+  0x5b73, 0x1209,
+  0x5b75, 0x120a,
+  0x5b78, 0x120b,
+  0x5b7a, 0x120d,
+  0x5b80, 0x120e,
+  0x5b83, 0x120f,
+  0x5b85, 0x0b50,
+  0x5b87, 0x04c9,
+  0x5b88, 0x0915,
+  0x5b89, 0x0486,
+  0x5b8b, 0x0ad9,
+  0x5b8c, 0x05ec,
+  0x5b8d, 0x08e1,
+  0x5b8f, 0x07ba,
+  0x5b95, 0x0c60,
+  0x5b97, 0x092b,
+  0x5b98, 0x05ed,
+  0x5b99, 0x0ba6,
+  0x5b9a, 0x0c06,
+  0x5b9b, 0x047c,
+  0x5b9c, 0x0653,
+  0x5b9d, 0x0e45,
+  0x5b9f, 0x08ee,
+  0x5ba2, 0x066c,
+  0x5ba3, 0x0a8f,
+  0x5ba4, 0x08e8,
+  0x5ba5, 0x0f12,
+  0x5ba6, 0x1210,
+  0x5bae, 0x0676,
+  0x5bb0, 0x083b,
+  0x5bb3, 0x0590,
+  0x5bb4, 0x0505,
+  0x5bb5, 0x0994,
+  0x5bb6, 0x0548,
+  0x5bb8, 0x1211,
+  0x5bb9, 0x0f30,
+  0x5bbf, 0x0953,
+  0x5bc0, 0x20f1,
+  0x5bc2, 0x0910,
+  0x5bc3, 0x1212,
+  0x5bc4, 0x062f,
+  0x5bc5, 0x0caa,
+  0x5bc6, 0x0eb5,
+  0x5bc7, 0x1213,
+  0x5bc9, 0x1214,
+  0x5bcc, 0x0dcb,
+  0x5bd0, 0x1216,
+  0x5bd2, 0x05e4,
+  0x5bd3, 0x06ef,
+  0x5bd4, 0x1215,
+  0x5bd8, 0x20f3,
+  0x5bdb, 0x05ee,
+  0x5bdd, 0x09f8,
+  0x5bde, 0x121a,
+  0x5bdf, 0x086f,
+  0x5be1, 0x0549,
+  0x5be2, 0x1219,
+  0x5be4, 0x1217,
+  0x5be5, 0x121b,
+  0x5be6, 0x1218,
+  0x5be7, 0x0ce1,
+  0x5be8, 0x148e,
+  0x5be9, 0x09f9,
+  0x5beb, 0x121c,
+  0x5bec, 0x20f4,
+  0x5bee, 0x0f88,
+  0x5bf0, 0x121d,
+  0x5bf3, 0x121f,
+  0x5bf5, 0x0bbc,
+  0x5bf6, 0x121e,
+  0x5bf8, 0x0a47,
+  0x5bfa, 0x08c9,
+  0x5bfe, 0x0b30,
+  0x5bff, 0x0923,
+  0x5c01, 0x0de7,
+  0x5c02, 0x0a90,
+  0x5c04, 0x08f9,
+  0x5c05, 0x1220,
+  0x5c06, 0x0995,
+  0x5c07, 0x1221,
+  0x5c09, 0x0497,
+  0x5c0a, 0x0b1a,
+  0x5c0b, 0x0a18,
+  0x5c0d, 0x1223,
+  0x5c0e, 0x0c8b,
+  0x5c0f, 0x0996,
+  0x5c11, 0x0997,
+  0x5c13, 0x1224,
+  0x5c16, 0x0a91,
+  0x5c1a, 0x0998,
+  0x5c1e, 0x20f5,
+  0x5c20, 0x1225,
+  0x5c22, 0x1226,
+  0x5c24, 0x0eec,
+  0x5c28, 0x1227,
+  0x5c2d, 0x06be,
+  0x5c31, 0x092c,
+  0x5c38, 0x1228,
+  0x5c3a, 0x0908,
+  0x5c3b, 0x09f2,
+  0x5c3c, 0x0ccc,
+  0x5c3d, 0x0a1a,
+  0x5c3e, 0x0d8c,
+  0x5c3f, 0x0cd8,
+  0x5c40, 0x06c1,
+  0x5c41, 0x122a,
+  0x5c45, 0x0689,
+  0x5c46, 0x122b,
+  0x5c48, 0x06f6,
+  0x5c4a, 0x0ca7,
+  0x5c4b, 0x0530,
+  0x5c4d, 0x08a1,
+  0x5c4e, 0x122c,
+  0x5c4f, 0x122f,
+  0x5c50, 0x122e,
+  0x5c51, 0x06f5,
+  0x5c53, 0x122d,
+  0x5c55, 0x0c32,
+  0x5c5b, 0x1e92,
+  0x5c5e, 0x0b10,
+  0x5c60, 0x0c45,
+  0x5c61, 0x08f4,
+  0x5c62, 0x1e0d,
+  0x5c64, 0x0ada,
+  0x5c65, 0x0f64,
+  0x5c6c, 0x1231,
+  0x5c6e, 0x1232,
+  0x5c6f, 0x0cae,
+  0x5c71, 0x0881,
+  0x5c76, 0x1234,
+  0x5c79, 0x1235,
+  0x5c8c, 0x1236,
+  0x5c90, 0x0630,
+  0x5c91, 0x1237,
+  0x5c94, 0x1238,
+  0x5ca1, 0x052c,
+  0x5ca6, 0x20f6,
+  0x5ca8, 0x0abd,
+  0x5ca9, 0x0620,
+  0x5cab, 0x123a,
+  0x5cac, 0x0eb4,
+  0x5cb1, 0x0b32,
+  0x5cb3, 0x05b7,
+  0x5cb6, 0x123c,
+  0x5cb7, 0x123e,
+  0x5cb8, 0x061b,
+  0x5cba, 0x20f7,
+  0x5cbb, 0x123b,
+  0x5cbc, 0x123d,
+  0x5cbe, 0x1240,
+  0x5cc5, 0x123f,
+  0x5cc7, 0x1241,
+  0x5cd9, 0x1242,
+  0x5ce0, 0x0c95,
+  0x5ce1, 0x06a6,
+  0x5ce8, 0x0565,
+  0x5ce9, 0x1243,
+  0x5cea, 0x1248,
+  0x5ced, 0x1246,
+  0x5cef, 0x0e47,
+  0x5cf0, 0x0e46,
+  0x5cf5, 0x20f8,
+  0x5cf6, 0x0c61,
+  0x5cfa, 0x1245,
+  0x5cfb, 0x095e,
+  0x5cfd, 0x1244,
+  0x5d07, 0x0a38,
+  0x5d0b, 0x1249,
+  0x5d0e, 0x085a,
+  0x5d11, 0x124f,
+  0x5d14, 0x1250,
+  0x5d15, 0x124a,
+  0x5d16, 0x0591,
+  0x5d17, 0x124b,
+  0x5d18, 0x1254,
+  0x5d19, 0x1253,
+  0x5d1a, 0x1252,
+  0x5d1b, 0x124e,
+  0x5d1f, 0x124d,
+  0x5d22, 0x1251,
+  0x5d27, 0x20f9,
+  0x5d29, 0x0e48,
+  0x5d42, 0x20fc,
+  0x5d4b, 0x1258,
+  0x5d4c, 0x1255,
+  0x5d4e, 0x1257,
+  0x5d50, 0x0f5c,
+  0x5d52, 0x1256,
+  0x5d53, 0x20fa,
+  0x5d5c, 0x124c,
+  0x5d69, 0x0a39,
+  0x5d6c, 0x1259,
+  0x5d6d, 0x20fd,
+  0x5d6f, 0x0827,
+  0x5d73, 0x125a,
+  0x5d76, 0x125b,
+  0x5d82, 0x125e,
+  0x5d84, 0x125d,
+  0x5d87, 0x125c,
+  0x5d8b, 0x0c62,
+  0x5d8c, 0x1247,
+  0x5d90, 0x1264,
+  0x5d9d, 0x1260,
+  0x5da2, 0x125f,
+  0x5dac, 0x1261,
+  0x5dae, 0x1262,
+  0x5db7, 0x1265,
+  0x5db8, 0x20fe,
+  0x5dba, 0x0fae,
+  0x5dbc, 0x1266,
+  0x5dbd, 0x1263,
+  0x5dc9, 0x1267,
+  0x5dcc, 0x061c,
+  0x5dcd, 0x1268,
+  0x5dd0, 0x2100,
+  0x5dd2, 0x126a,
+  0x5dd3, 0x1269,
+  0x5dd6, 0x126b,
+  0x5ddb, 0x126c,
+  0x5ddd, 0x0a92,
+  0x5dde, 0x092d,
+  0x5de1, 0x096e,
+  0x5de3, 0x0ae5,
+  0x5de5, 0x07bb,
+  0x5de6, 0x0828,
+  0x5de7, 0x07bc,
+  0x5de8, 0x068a,
+  0x5deb, 0x126d,
+  0x5dee, 0x0829,
+  0x5df1, 0x077e,
+  0x5df2, 0x126e,
+  0x5df3, 0x0eb2,
+  0x5df4, 0x0cf9,
+  0x5df5, 0x126f,
+  0x5df7, 0x07bd,
+  0x5dfb, 0x05e8,
+  0x5dfd, 0x0b65,
+  0x5dfe, 0x06ca,
+  0x5e02, 0x08a2,
+  0x5e03, 0x0dcd,
+  0x5e06, 0x0d55,
+  0x5e0b, 0x1270,
+  0x5e0c, 0x0631,
+  0x5e11, 0x1273,
+  0x5e16, 0x0bbd,
+  0x5e19, 0x1272,
+  0x5e1a, 0x1271,
+  0x5e1b, 0x1274,
+  0x5e1d, 0x0c07,
+  0x5e25, 0x0a29,
+  0x5e2b, 0x08a3,
+  0x5e2d, 0x0a6e,
+  0x5e2f, 0x0b33,
+  0x5e30, 0x063c,
+  0x5e33, 0x0bbe,
+  0x5e36, 0x1275,
+  0x5e38, 0x09d7,
+  0x5e3d, 0x0e67,
+  0x5e40, 0x1279,
+  0x5e43, 0x1278,
+  0x5e44, 0x1277,
+  0x5e45, 0x0def,
+  0x5e47, 0x1280,
+  0x5e4c, 0x0e88,
+  0x5e4e, 0x127a,
+  0x5e54, 0x127c,
+  0x5e55, 0x0e99,
+  0x5e57, 0x127b,
+  0x5e5f, 0x127d,
+  0x5e61, 0x0d3c,
+  0x5e62, 0x127e,
+  0x5e63, 0x0e0e,
+  0x5e64, 0x127f,
+  0x5e72, 0x05ef,
+  0x5e73, 0x0e0f,
+  0x5e74, 0x0ce5,
+  0x5e75, 0x1281,
+  0x5e78, 0x07be,
+  0x5e79, 0x05f0,
+  0x5e7a, 0x1283,
+  0x5e7b, 0x076c,
+  0x5e7c, 0x0f2e,
+  0x5e7d, 0x0f13,
+  0x5e7e, 0x0632,
+  0x5e7f, 0x1285,
+  0x5e81, 0x0bbf,
+  0x5e83, 0x07bf,
+  0x5e84, 0x0999,
+  0x5e87, 0x0d73,
+  0x5e8a, 0x099a,
+  0x5e8f, 0x0982,
+  0x5e95, 0x0c08,
+  0x5e96, 0x0e49,
+  0x5e97, 0x0c33,
+  0x5e9a, 0x07c0,
+  0x5e9c, 0x0dce,
+  0x5ea0, 0x1286,
+  0x5ea6, 0x0c53,
+  0x5ea7, 0x0832,
+  0x5eab, 0x077f,
+  0x5ead, 0x0c09,
+  0x5eb5, 0x0487,
+  0x5eb6, 0x0978,
+  0x5eb7, 0x07c1,
+  0x5eb8, 0x0f31,
+  0x5ec1, 0x1287,
+  0x5ec3, 0x0d07,
+  0x5ec8, 0x1289,
+  0x5ec9, 0x0fbf,
+  0x5eca, 0x0fd3,
+  0x5ecf, 0x128b,
+  0x5ed0, 0x128a,
+  0x5ed3, 0x05a5,
+  0x5ed6, 0x128c,
+  0x5eda, 0x128f,
+  0x5edd, 0x128e,
+  0x5edf, 0x0db2,
+  0x5ee0, 0x099b,
+  0x5ee1, 0x1292,
+  0x5ee2, 0x1291,
+  0x5ee3, 0x128d,
+  0x5ee8, 0x1293,
+  0x5eec, 0x1295,
+  0x5ef0, 0x1298,
+  0x5ef1, 0x1296,
+  0x5ef3, 0x1297,
+  0x5ef4, 0x1299,
+  0x5ef6, 0x0506,
+  0x5ef7, 0x0c0a,
+  0x5ef8, 0x129a,
+  0x5efa, 0x0750,
+  0x5efb, 0x0576,
+  0x5efc, 0x0cec,
+  0x5efe, 0x129b,
+  0x5eff, 0x0cd3,
+  0x5f01, 0x0e2b,
+  0x5f03, 0x129c,
+  0x5f04, 0x0fd4,
+  0x5f09, 0x129d,
+  0x5f0a, 0x0e10,
+  0x5f0b, 0x12a0,
+  0x5f0c, 0x0ffa,
+  0x5f0d, 0x100a,
+  0x5f0f, 0x08dc,
+  0x5f10, 0x0ccd,
+  0x5f11, 0x12a1,
+  0x5f13, 0x0677,
+  0x5f14, 0x0bc0,
+  0x5f15, 0x04be,
+  0x5f16, 0x12a2,
+  0x5f17, 0x0df6,
+  0x5f18, 0x07c2,
+  0x5f1b, 0x0b8e,
+  0x5f1f, 0x0c0b,
+  0x5f21, 0x2101,
+  0x5f25, 0x0efb,
+  0x5f26, 0x076d,
+  0x5f27, 0x0780,
+  0x5f29, 0x12a3,
+  0x5f2d, 0x12a4,
+  0x5f2f, 0x12aa,
+  0x5f31, 0x0911,
+  0x5f34, 0x2102,
+  0x5f35, 0x0bc1,
+  0x5f37, 0x06a7,
+  0x5f38, 0x12a5,
+  0x5f3c, 0x0d9d,
+  0x5f3e, 0x0b84,
+  0x5f41, 0x12a6,
+  0x5f45, 0x20b2,
+  0x5f48, 0x12a7,
+  0x5f4a, 0x06a8,
+  0x5f4c, 0x12a8,
+  0x5f4e, 0x12a9,
+  0x5f51, 0x12ab,
+  0x5f53, 0x0c70,
+  0x5f56, 0x12ac,
+  0x5f59, 0x12ae,
+  0x5f5c, 0x129f,
+  0x5f5d, 0x129e,
+  0x5f61, 0x12af,
+  0x5f62, 0x0717,
+  0x5f66, 0x0d99,
+  0x5f67, 0x2103,
+  0x5f69, 0x083c,
+  0x5f6a, 0x0da9,
+  0x5f6b, 0x0bc2,
+  0x5f6c, 0x0dbd,
+  0x5f6d, 0x12b0,
+  0x5f70, 0x099c,
+  0x5f71, 0x04e8,
+  0x5f73, 0x12b1,
+  0x5f77, 0x12b2,
+  0x5f79, 0x0efe,
+  0x5f7c, 0x0d74,
+  0x5f7f, 0x12b5,
+  0x5f80, 0x051f,
+  0x5f81, 0x0a50,
+  0x5f82, 0x12b4,
+  0x5f83, 0x12b3,
+  0x5f84, 0x0718,
+  0x5f85, 0x0b34,
+  0x5f87, 0x12b9,
+  0x5f88, 0x12b7,
+  0x5f8a, 0x12b6,
+  0x5f8b, 0x0f6f,
+  0x5f8c, 0x0799,
+  0x5f90, 0x0983,
+  0x5f91, 0x12b8,
+  0x5f92, 0x0c46,
+  0x5f93, 0x0948,
+  0x5f97, 0x0c98,
+  0x5f98, 0x12bc,
+  0x5f99, 0x12bb,
+  0x5f9e, 0x12ba,
+  0x5fa0, 0x12bd,
+  0x5fa1, 0x079a,
+  0x5fa8, 0x12be,
+  0x5fa9, 0x0dee,
+  0x5faa, 0x0965,
+  0x5fad, 0x12bf,
+  0x5fae, 0x0d8d,
+  0x5fb3, 0x0c99,
+  0x5fb4, 0x0bc3,
+  0x5fb7, 0x2104,
+  0x5fb9, 0x0c2a,
+  0x5fbc, 0x12c0,
+  0x5fbd, 0x0645,
+  0x5fc3, 0x09fa,
+  0x5fc5, 0x0d9e,
+  0x5fcc, 0x0633,
+  0x5fcd, 0x0cdc,
+  0x5fd6, 0x12c1,
+  0x5fd7, 0x08a4,
+  0x5fd8, 0x0e68,
+  0x5fdc, 0x0520,
+  0x5fdd, 0x12c6,
+  0x5fde, 0x2105,
+  0x5fe0, 0x0ba7,
+  0x5fe4, 0x12c3,
+  0x5feb, 0x0577,
+  0x5ff0, 0x12f6,
+  0x5ff1, 0x12c5,
+  0x5ff5, 0x0ce6,
+  0x5ff8, 0x12c4,
+  0x5ffb, 0x12c2,
+  0x5ffd, 0x080c,
+  0x5fff, 0x12c8,
+  0x600e, 0x12ce,
+  0x600f, 0x12d4,
+  0x6010, 0x12cc,
+  0x6012, 0x0c56,
+  0x6015, 0x12d1,
+  0x6016, 0x0dcf,
+  0x6019, 0x12cb,
+  0x601b, 0x12d0,
+  0x601c, 0x0faf,
+  0x601d, 0x08a5,
+  0x6020, 0x0b35,
+  0x6021, 0x12c9,
+  0x6025, 0x0678,
+  0x6026, 0x12d3,
+  0x6027, 0x0a51,
+  0x6028, 0x0507,
+  0x6029, 0x12cd,
+  0x602a, 0x0578,
+  0x602b, 0x12d2,
+  0x602f, 0x06a9,
+  0x6031, 0x12cf,
+  0x603a, 0x12d5,
+  0x6041, 0x12d7,
+  0x6042, 0x12e1,
+  0x6043, 0x12df,
+  0x6046, 0x12dc,
+  0x604a, 0x12db,
+  0x604b, 0x0fc0,
+  0x604d, 0x12dd,
+  0x6050, 0x06aa,
+  0x6052, 0x07c3,
+  0x6055, 0x0984,
+  0x6059, 0x12e4,
+  0x605a, 0x12d6,
+  0x605d, 0x2106,
+  0x605f, 0x12da,
+  0x6060, 0x12ca,
+  0x6062, 0x057a,
+  0x6063, 0x12de,
+  0x6064, 0x12e0,
+  0x6065, 0x0b8f,
+  0x6068, 0x0818,
+  0x6069, 0x0538,
+  0x606a, 0x12d8,
+  0x606b, 0x12e3,
+  0x606c, 0x12e2,
+  0x606d, 0x06ab,
+  0x606f, 0x0b09,
+  0x6070, 0x05c4,
+  0x6075, 0x0719,
+  0x6077, 0x12d9,
+  0x6081, 0x12e5,
+  0x6083, 0x12e8,
+  0x6084, 0x12ea,
+  0x6085, 0x2107,
+  0x6089, 0x08e9,
+  0x608a, 0x2108,
+  0x608b, 0x12f0,
+  0x608c, 0x0c0c,
+  0x608d, 0x12e6,
+  0x6092, 0x12ee,
+  0x6094, 0x0579,
+  0x6096, 0x12ec,
+  0x609a, 0x12e9,
+  0x609b, 0x12eb,
+  0x609f, 0x079b,
+  0x60a0, 0x0f14,
+  0x60a3, 0x05f1,
+  0x60a6, 0x04fb,
+  0x60a7, 0x12ef,
+  0x60a9, 0x0cf0,
+  0x60aa, 0x0471,
+  0x60b2, 0x0d75,
+  0x60b3, 0x12c7,
+  0x60b4, 0x12f5,
+  0x60b5, 0x12f9,
+  0x60b6, 0x0ef1,
+  0x60b8, 0x12f2,
+  0x60bc, 0x0c63,
+  0x60bd, 0x12f7,
+  0x60c5, 0x09d8,
+  0x60c6, 0x12f8,
+  0x60c7, 0x0caf,
+  0x60d1, 0x0fed,
+  0x60d3, 0x12f4,
+  0x60d5, 0x210a,
+  0x60d8, 0x12fa,
+  0x60da, 0x080d,
+  0x60dc, 0x0a6f,
+  0x60de, 0x2109,
+  0x60df, 0x0498,
+  0x60e0, 0x12f3,
+  0x60e1, 0x12f1,
+  0x60e3, 0x0adc,
+  0x60e7, 0x12e7,
+  0x60e8, 0x0882,
+  0x60f0, 0x0b26,
+  0x60f1, 0x1306,
+  0x60f2, 0x210c,
+  0x60f3, 0x0add,
+  0x60f4, 0x1301,
+  0x60f6, 0x12fe,
+  0x60f9, 0x0912,
+  0x60fa, 0x1302,
+  0x60fb, 0x1305,
+  0x6100, 0x1300,
+  0x6101, 0x092f,
+  0x6103, 0x1303,
+  0x6106, 0x12fd,
+  0x6108, 0x0f08,
+  0x6109, 0x0f07,
+  0x610d, 0x1307,
+  0x610f, 0x0499,
+  0x6111, 0x210d,
+  0x6115, 0x12fc,
+  0x611a, 0x06ea,
+  0x611b, 0x046a,
+  0x611f, 0x05f2,
+  0x6120, 0x210b,
+  0x6121, 0x1304,
+  0x6127, 0x130c,
+  0x6128, 0x130b,
+  0x612c, 0x1310,
+  0x6130, 0x210f,
+  0x6134, 0x1311,
+  0x6137, 0x210e,
+  0x613c, 0x130f,
+  0x613d, 0x1312,
+  0x613e, 0x130a,
+  0x613f, 0x130e,
+  0x6142, 0x1313,
+  0x6144, 0x1314,
+  0x6147, 0x1309,
+  0x6148, 0x08ca,
+  0x614a, 0x130d,
+  0x614b, 0x0b36,
+  0x614c, 0x07c4,
+  0x614d, 0x12fb,
+  0x614e, 0x09fb,
+  0x6153, 0x1321,
+  0x6155, 0x0e39,
+  0x6158, 0x1317,
+  0x615d, 0x1320,
+  0x615f, 0x131f,
+  0x6162, 0x0eab,
+  0x6163, 0x05f3,
+  0x6165, 0x131d,
+  0x6167, 0x071b,
+  0x6168, 0x0592,
+  0x616b, 0x131a,
+  0x616e, 0x0f80,
+  0x616f, 0x131c,
+  0x6170, 0x049a,
+  0x6171, 0x131e,
+  0x6173, 0x1315,
+  0x6174, 0x131b,
+  0x6175, 0x1322,
+  0x6176, 0x071a,
+  0x6177, 0x1316,
+  0x617e, 0x0f47,
+  0x6182, 0x0f15,
+  0x6187, 0x1325,
+  0x618a, 0x1329,
+  0x618e, 0x0b00,
+  0x6190, 0x0fc1,
+  0x6191, 0x132a,
+  0x6194, 0x1327,
+  0x6196, 0x1324,
+  0x6198, 0x2110,
+  0x6199, 0x1323,
+  0x619a, 0x1328,
+  0x61a4, 0x0e00,
+  0x61a7, 0x0c8c,
+  0x61a9, 0x071c,
+  0x61ab, 0x132b,
+  0x61ac, 0x1326,
+  0x61ae, 0x132c,
+  0x61b2, 0x0751,
+  0x61b6, 0x0531,
+  0x61ba, 0x1334,
+  0x61be, 0x05f4,
+  0x61c3, 0x1332,
+  0x61c6, 0x1333,
+  0x61c7, 0x0819,
+  0x61c8, 0x1331,
+  0x61c9, 0x132f,
+  0x61ca, 0x132e,
+  0x61cb, 0x1335,
+  0x61cc, 0x132d,
+  0x61cd, 0x1337,
+  0x61d0, 0x057b,
+  0x61e3, 0x1339,
+  0x61e6, 0x1338,
+  0x61f2, 0x0bc4,
+  0x61f4, 0x133c,
+  0x61f6, 0x133a,
+  0x61f7, 0x1330,
+  0x61f8, 0x0752,
+  0x61fa, 0x133b,
+  0x61fc, 0x133f,
+  0x61fd, 0x133e,
+  0x61fe, 0x1340,
+  0x61ff, 0x133d,
+  0x6200, 0x1341,
+  0x6208, 0x1342,
+  0x620a, 0x0e3a,
+  0x620c, 0x1345,
+  0x620d, 0x1344,
+  0x620e, 0x0949,
+  0x6210, 0x0a52,
+  0x6211, 0x0566,
+  0x6212, 0x057c,
+  0x6213, 0x2111,
+  0x6214, 0x1346,
+  0x6216, 0x0483,
+  0x621a, 0x0a70,
+  0x621b, 0x1347,
+  0x621d, 0x1a64,
+  0x621e, 0x1348,
+  0x621f, 0x0737,
+  0x6221, 0x1349,
+  0x6226, 0x0a93,
+  0x622a, 0x134a,
+  0x622e, 0x134b,
+  0x622f, 0x0654,
+  0x6230, 0x134c,
+  0x6232, 0x134d,
+  0x6234, 0x0b37,
+  0x6238, 0x0781,
+  0x623b, 0x0eed,
+  0x623f, 0x0e6a,
+  0x6240, 0x0974,
+  0x6241, 0x134f,
+  0x6247, 0x0a94,
+  0x6248, 0x1b1a,
+  0x6249, 0x0d76,
+  0x624b, 0x0916,
+  0x624d, 0x083d,
+  0x624e, 0x1350,
+  0x6253, 0x0b27,
+  0x6255, 0x0df7,
+  0x6258, 0x0b51,
+  0x625b, 0x1353,
+  0x625e, 0x1351,
+  0x6260, 0x1354,
+  0x6263, 0x1352,
+  0x6268, 0x1355,
+  0x626e, 0x0e01,
+  0x6271, 0x047b,
+  0x6276, 0x0dd0,
+  0x6279, 0x0d77,
+  0x627c, 0x1356,
+  0x627e, 0x1359,
+  0x627f, 0x099d,
+  0x6280, 0x0655,
+  0x6282, 0x1357,
+  0x6283, 0x135e,
+  0x6284, 0x099e,
+  0x6289, 0x1358,
+  0x628a, 0x0cfa,
+  0x6291, 0x0f48,
+  0x6292, 0x135a,
+  0x6294, 0x135f,
+  0x6295, 0x0c64,
+  0x6296, 0x135c,
+  0x6297, 0x07c5,
+  0x6298, 0x0a82,
+  0x629b, 0x136d,
+  0x629c, 0x0d48,
+  0x629e, 0x0b52,
+  0x62a6, 0x2112,
+  0x62ab, 0x0d78,
+  0x62ac, 0x13b2,
+  0x62b1, 0x0e4a,
+  0x62b5, 0x0c0d,
+  0x62b9, 0x0ea3,
+  0x62bb, 0x1362,
+  0x62bc, 0x0521,
+  0x62bd, 0x0ba8,
+  0x62c2, 0x136b,
+  0x62c5, 0x0b72,
+  0x62c6, 0x1365,
+  0x62c7, 0x136c,
+  0x62c8, 0x1367,
+  0x62c9, 0x136e,
+  0x62ca, 0x136a,
+  0x62cc, 0x1369,
+  0x62cd, 0x0d25,
+  0x62cf, 0x1363,
+  0x62d0, 0x057d,
+  0x62d1, 0x1361,
+  0x62d2, 0x068b,
+  0x62d3, 0x0b53,
+  0x62d4, 0x135d,
+  0x62d7, 0x1360,
+  0x62d8, 0x07c6,
+  0x62d9, 0x0a7f,
+  0x62db, 0x099f,
+  0x62dc, 0x1368,
+  0x62dd, 0x0d08,
+  0x62e0, 0x068c,
+  0x62e1, 0x05a6,
+  0x62ec, 0x05c5,
+  0x62ed, 0x09e7,
+  0x62ee, 0x1370,
+  0x62ef, 0x1375,
+  0x62f1, 0x1371,
+  0x62f3, 0x0753,
+  0x62f5, 0x1376,
+  0x62f6, 0x0870,
+  0x62f7, 0x07fb,
+  0x62fe, 0x0930,
+  0x62ff, 0x1364,
+  0x6301, 0x08cb,
+  0x6302, 0x1373,
+  0x6307, 0x08a6,
+  0x6308, 0x1374,
+  0x6309, 0x0488,
+  0x630c, 0x136f,
+  0x6311, 0x0bc5,
+  0x6319, 0x068d,
+  0x631f, 0x06ac,
+  0x6327, 0x1372,
+  0x6328, 0x046b,
+  0x632b, 0x0833,
+  0x632f, 0x09fc,
+  0x633a, 0x0c0e,
+  0x633d, 0x0d68,
+  0x633e, 0x1378,
+  0x633f, 0x0ae0,
+  0x6349, 0x0b0a,
+  0x634c, 0x0879,
+  0x634d, 0x1379,
+  0x634f, 0x137b,
+  0x6350, 0x1377,
+  0x6355, 0x0e31,
+  0x6357, 0x0bd9,
+  0x635c, 0x0ade,
+  0x6367, 0x0e4b,
+  0x6368, 0x08fa,
+  0x6369, 0x1387,
+  0x636b, 0x1386,
+  0x636e, 0x0a3e,
+  0x6372, 0x0754,
+  0x6376, 0x1380,
+  0x6377, 0x09a1,
+  0x637a, 0x0cc0,
+  0x637b, 0x0ce7,
+  0x6380, 0x137e,
+  0x6383, 0x0adf,
+  0x6388, 0x0924,
+  0x6389, 0x1383,
+  0x638c, 0x09a0,
+  0x638e, 0x137d,
+  0x638f, 0x1382,
+  0x6392, 0x0d09,
+  0x6396, 0x137c,
+  0x6398, 0x06f7,
+  0x639b, 0x05bb,
+  0x639f, 0x1384,
+  0x63a0, 0x0f73,
+  0x63a1, 0x083e,
+  0x63a2, 0x0b73,
+  0x63a3, 0x1381,
+  0x63a5, 0x0a80,
+  0x63a7, 0x07c7,
+  0x63a8, 0x0a2a,
+  0x63a9, 0x0508,
+  0x63aa, 0x0abe,
+  0x63ab, 0x137f,
+  0x63ac, 0x065f,
+  0x63b2, 0x071d,
+  0x63b4, 0x0beb,
+  0x63b5, 0x1385,
+  0x63bb, 0x0ae1,
+  0x63be, 0x1388,
+  0x63c0, 0x138a,
+  0x63c3, 0x0b17,
+  0x63c4, 0x1390,
+  0x63c6, 0x138b,
+  0x63c9, 0x138d,
+  0x63cf, 0x0db3,
+  0x63d0, 0x0c0f,
+  0x63d2, 0x138e,
+  0x63d6, 0x0f16,
+  0x63da, 0x0f32,
+  0x63db, 0x05f5,
+  0x63e1, 0x0472,
+  0x63e3, 0x138c,
+  0x63e9, 0x1389,
+  0x63ee, 0x0634,
+  0x63f4, 0x0509,
+  0x63f5, 0x2113,
+  0x63f6, 0x138f,
+  0x63fa, 0x0f33,
+  0x6406, 0x1393,
+  0x640d, 0x0b1b,
+  0x640f, 0x139a,
+  0x6413, 0x1394,
+  0x6414, 0x1e2c,
+  0x6416, 0x1391,
+  0x6417, 0x1398,
+  0x641c, 0x137a,
+  0x6426, 0x1395,
+  0x6428, 0x1399,
+  0x642c, 0x0d56,
+  0x642d, 0x0c65,
+  0x6434, 0x1392,
+  0x6436, 0x1396,
+  0x643a, 0x071e,
+  0x643e, 0x0861,
+  0x6442, 0x0a81,
+  0x644e, 0x139e,
+  0x6451, 0x1e43,
+  0x6458, 0x0c20,
+  0x6460, 0x2114,
+  0x6467, 0x139b,
+  0x6469, 0x0e8e,
+  0x646f, 0x139c,
+  0x6476, 0x139d,
+  0x6478, 0x0eda,
+  0x647a, 0x0a46,
+  0x6483, 0x0738,
+  0x6488, 0x13a4,
+  0x6492, 0x0883,
+  0x6493, 0x13a1,
+  0x6495, 0x13a0,
+  0x649a, 0x0ce8,
+  0x649d, 0x2115,
+  0x649e, 0x0c8d,
+  0x64a4, 0x0c2b,
+  0x64a5, 0x13a2,
+  0x64a9, 0x13a3,
+  0x64ab, 0x0de1,
+  0x64ad, 0x0cfb,
+  0x64ae, 0x0871,
+  0x64b0, 0x0a95,
+  0x64b2, 0x0e7e,
+  0x64b9, 0x05a7,
+  0x64bb, 0x13aa,
+  0x64bc, 0x13a5,
+  0x64c1, 0x0f34,
+  0x64c2, 0x13ac,
+  0x64c5, 0x13a8,
+  0x64c7, 0x13a9,
+  0x64cd, 0x0ae2,
+  0x64ce, 0x2116,
+  0x64d2, 0x13a7,
+  0x64d4, 0x1366,
+  0x64d8, 0x13ab,
+  0x64da, 0x13a6,
+  0x64e0, 0x13b0,
+  0x64e2, 0x0c21,
+  0x64e3, 0x13b3,
+  0x64e6, 0x0872,
+  0x64e7, 0x13ae,
+  0x64ec, 0x0656,
+  0x64ef, 0x13b4,
+  0x64f1, 0x13ad,
+  0x64f2, 0x13b8,
+  0x64f4, 0x13b7,
+  0x64f6, 0x13b6,
+  0x64fa, 0x13b9,
+  0x64fd, 0x13bb,
+  0x64fe, 0x09d9,
+  0x6500, 0x13ba,
+  0x6505, 0x13be,
+  0x6518, 0x13bc,
+  0x651c, 0x13bd,
+  0x651d, 0x1397,
+  0x6522, 0x1e97,
+  0x6523, 0x13c0,
+  0x6524, 0x13bf,
+  0x652a, 0x139f,
+  0x652b, 0x13c1,
+  0x652c, 0x13b5,
+  0x652f, 0x08a7,
+  0x6534, 0x13c2,
+  0x6536, 0x13c5,
+  0x6537, 0x13c4,
+  0x6538, 0x13c6,
+  0x6539, 0x057e,
+  0x653b, 0x07c8,
+  0x653e, 0x0e4c,
+  0x653f, 0x0a53,
+  0x6545, 0x0782,
+  0x6548, 0x13c8,
+  0x654d, 0x13cb,
+  0x654e, 0x2117,
+  0x654f, 0x0dc4,
+  0x6551, 0x0679,
+  0x6555, 0x13ca,
+  0x6556, 0x13c9,
+  0x6557, 0x0d0a,
+  0x6558, 0x13cc,
+  0x6559, 0x06ad,
+  0x655d, 0x13ce,
+  0x655e, 0x13cd,
+  0x6562, 0x05f6,
+  0x6563, 0x0884,
+  0x6566, 0x0cb0,
+  0x656c, 0x071f,
+  0x6570, 0x0a3a,
+  0x6572, 0x13cf,
+  0x6574, 0x0a54,
+  0x6575, 0x0c22,
+  0x6577, 0x0dd1,
+  0x6578, 0x13d0,
+  0x6582, 0x13d1,
+  0x6587, 0x0e08,
+  0x6588, 0x120c,
+  0x6589, 0x0a6a,
+  0x658c, 0x0dbe,
+  0x658e, 0x0848,
+  0x6590, 0x0d79,
+  0x6591, 0x0d57,
+  0x6597, 0x0c47,
+  0x6599, 0x0f89,
+  0x659b, 0x13d4,
+  0x659c, 0x08fc,
+  0x659f, 0x13d5,
+  0x65a1, 0x047a,
+  0x65a4, 0x06cc,
+  0x65a5, 0x0a71,
+  0x65a7, 0x0dd2,
+  0x65ab, 0x13d6,
+  0x65ac, 0x0890,
+  0x65ad, 0x0b85,
+  0x65af, 0x08a9,
+  0x65b0, 0x09fd,
+  0x65b7, 0x13d7,
+  0x65b9, 0x0e4d,
+  0x65bc, 0x0519,
+  0x65bd, 0x08aa,
+  0x65c1, 0x13da,
+  0x65c3, 0x13d8,
+  0x65c4, 0x13db,
+  0x65c5, 0x0f81,
+  0x65c6, 0x13d9,
+  0x65cb, 0x0a9f,
+  0x65cc, 0x13dc,
+  0x65cf, 0x0b12,
+  0x65d2, 0x13dd,
+  0x65d7, 0x0636,
+  0x65d9, 0x13df,
+  0x65db, 0x13de,
+  0x65e0, 0x13e0,
+  0x65e2, 0x0637,
+  0x65e5, 0x0cd4,
+  0x65e6, 0x0b74,
+  0x65e7, 0x0686,
+  0x65e8, 0x08ab,
+  0x65e9, 0x0ae3,
+  0x65ec, 0x0966,
+  0x65ed, 0x0474,
+  0x65f1, 0x13e2,
+  0x65fa, 0x0522,
+  0x65fb, 0x13e6,
+  0x6600, 0x2118,
+  0x6602, 0x07c9,
+  0x6603, 0x13e5,
+  0x6606, 0x081b,
+  0x6607, 0x09a2,
+  0x6609, 0x211a,
+  0x660a, 0x13e4,
+  0x660c, 0x09a3,
+  0x660e, 0x0ecc,
+  0x660f, 0x081a,
+  0x6613, 0x049b,
+  0x6614, 0x0a72,
+  0x6615, 0x2119,
+  0x661c, 0x13eb,
+  0x661e, 0x211c,
+  0x661f, 0x0a55,
+  0x6620, 0x04e9,
+  0x6624, 0x211d,
+  0x6625, 0x095f,
+  0x6627, 0x0e94,
+  0x6628, 0x0862,
+  0x662d, 0x09a4,
+  0x662e, 0x211b,
+  0x662f, 0x0a4b,
+  0x6631, 0x20ae,
+  0x6634, 0x13ea,
+  0x6635, 0x13e8,
+  0x663b, 0x1e00,
+  0x663c, 0x0ba9,
+  0x663f, 0x1409,
+  0x6641, 0x13ef,
+  0x6642, 0x08cc,
+  0x6643, 0x07ca,
+  0x6644, 0x13ed,
+  0x6649, 0x13ee,
+  0x664b, 0x09fe,
+  0x664f, 0x13ec,
+  0x6652, 0x087d,
+  0x6657, 0x211f,
+  0x6659, 0x2120,
+  0x665d, 0x13f1,
+  0x665e, 0x13f0,
+  0x665f, 0x13f5,
+  0x6662, 0x13f6,
+  0x6664, 0x13f2,
+  0x6665, 0x211e,
+  0x6666, 0x0580,
+  0x6667, 0x13f3,
+  0x6669, 0x0d69,
+  0x666e, 0x0dd3,
+  0x666f, 0x0720,
+  0x6670, 0x13f7,
+  0x6673, 0x2122,
+  0x6674, 0x0a56,
+  0x6676, 0x09a5,
+  0x667a, 0x0b90,
+  0x6681, 0x06bf,
+  0x6683, 0x13f8,
+  0x6684, 0x13fc,
+  0x6687, 0x054b,
+  0x6688, 0x13f9,
+  0x6689, 0x13fb,
+  0x668e, 0x13fa,
+  0x6691, 0x0975,
+  0x6696, 0x0b86,
+  0x6697, 0x0489,
+  0x6698, 0x13fd,
+  0x6699, 0x2123,
+  0x669d, 0x13fe,
+  0x66a0, 0x2124,
+  0x66a2, 0x0bc6,
+  0x66a6, 0x0fb9,
+  0x66ab, 0x0891,
+  0x66ae, 0x0e3b,
+  0x66b2, 0x2125,
+  0x66b4, 0x0e6b,
+  0x66b8, 0x1405,
+  0x66b9, 0x1400,
+  0x66bc, 0x1403,
+  0x66be, 0x1402,
+  0x66bf, 0x2126,
+  0x66c1, 0x13ff,
+  0x66c4, 0x1404,
+  0x66c7, 0x0cb6,
+  0x66c9, 0x1401,
+  0x66d6, 0x1406,
+  0x66d9, 0x0976,
+  0x66da, 0x1407,
+  0x66dc, 0x0f35,
+  0x66dd, 0x0d2e,
+  0x66e0, 0x1408,
+  0x66e6, 0x140a,
+  0x66e9, 0x140b,
+  0x66f0, 0x140c,
+  0x66f2, 0x06c2,
+  0x66f3, 0x04ea,
+  0x66f4, 0x07cb,
+  0x66f5, 0x140d,
+  0x66f7, 0x140e,
+  0x66f8, 0x097b,
+  0x66f9, 0x0ae4,
+  0x66fa, 0x2127,
+  0x66fb, 0x20b1,
+  0x66fc, 0x10ed,
+  0x66fd, 0x0ac0,
+  0x66fe, 0x0abf,
+  0x66ff, 0x0b38,
+  0x6700, 0x0837,
+  0x6703, 0x104b,
+  0x6708, 0x0744,
+  0x6709, 0x0f17,
+  0x670b, 0x0e4e,
+  0x670d, 0x0df0,
+  0x670e, 0x2128,
+  0x670f, 0x140f,
+  0x6714, 0x0863,
+  0x6715, 0x0bdb,
+  0x6716, 0x1410,
+  0x6717, 0x0fd5,
+  0x671b, 0x0e6c,
+  0x671d, 0x0bc7,
+  0x671e, 0x1411,
+  0x671f, 0x0638,
+  0x6726, 0x1412,
+  0x6728, 0x0ee6,
+  0x672a, 0x0eb0,
+  0x672b, 0x0ea4,
+  0x672c, 0x0e8a,
+  0x672d, 0x0873,
+  0x672e, 0x1415,
+  0x6731, 0x0917,
+  0x6734, 0x0e7f,
+  0x6736, 0x1417,
+  0x6737, 0x141a,
+  0x6738, 0x1419,
+  0x673a, 0x0635,
+  0x673d, 0x067a,
+  0x673f, 0x1416,
+  0x6741, 0x1418,
+  0x6746, 0x141b,
+  0x6749, 0x0a3f,
+  0x674e, 0x0f65,
+  0x674f, 0x048d,
+  0x6750, 0x0850,
+  0x6751, 0x0b1c,
+  0x6753, 0x0909,
+  0x6756, 0x09db,
+  0x6759, 0x141e,
+  0x675c, 0x0c48,
+  0x675e, 0x141c,
+  0x675f, 0x0b0b,
+  0x6760, 0x141d,
+  0x6761, 0x09da,
+  0x6762, 0x0ee9,
+  0x6763, 0x141f,
+  0x6765, 0x0f52,
+  0x6766, 0x212a,
+  0x676a, 0x1425,
+  0x676d, 0x07cc,
+  0x676f, 0x0d0b,
+  0x6770, 0x1422,
+  0x6771, 0x0c66,
+  0x6772, 0x13e3,
+  0x6773, 0x13e7,
+  0x6775, 0x0669,
+  0x6777, 0x0cfd,
+  0x677c, 0x1424,
+  0x677e, 0x09a6,
+  0x677f, 0x0d58,
+  0x6785, 0x142a,
+  0x6787, 0x0d8e,
+  0x6789, 0x1421,
+  0x678b, 0x1427,
+  0x678c, 0x1426,
+  0x6790, 0x0a73,
+  0x6795, 0x0e9b,
+  0x6797, 0x0f9b,
+  0x679a, 0x0e95,
+  0x679c, 0x054c,
+  0x679d, 0x08ac,
+  0x67a0, 0x0fee,
+  0x67a1, 0x1429,
+  0x67a2, 0x0a3b,
+  0x67a6, 0x1428,
+  0x67a9, 0x1423,
+  0x67af, 0x0783,
+  0x67b3, 0x142f,
+  0x67b4, 0x142d,
+  0x67b6, 0x054d,
+  0x67b7, 0x142b,
+  0x67b8, 0x1431,
+  0x67b9, 0x1437,
+  0x67bb, 0x212b,
+  0x67c0, 0x212d,
+  0x67c1, 0x0b28,
+  0x67c4, 0x0e11,
+  0x67c6, 0x1439,
+  0x67ca, 0x0d94,
+  0x67ce, 0x1438,
+  0x67cf, 0x0d26,
+  0x67d0, 0x0e6d,
+  0x67d1, 0x05f7,
+  0x67d3, 0x0a9b,
+  0x67d4, 0x094a,
+  0x67d8, 0x0bef,
+  0x67da, 0x0f18,
+  0x67dd, 0x1434,
+  0x67de, 0x1433,
+  0x67e2, 0x1435,
+  0x67e4, 0x1432,
+  0x67e7, 0x143a,
+  0x67e9, 0x1430,
+  0x67ec, 0x142e,
+  0x67ee, 0x1436,
+  0x67ef, 0x142c,
+  0x67f1, 0x0baa,
+  0x67f3, 0x0f04,
+  0x67f4, 0x08f2,
+  0x67f5, 0x0864,
+  0x67fb, 0x082a,
+  0x67fe, 0x0e9d,
+  0x67ff, 0x059f,
+  0x6801, 0x212e,
+  0x6802, 0x0bea,
+  0x6803, 0x0ca2,
+  0x6804, 0x04eb,
+  0x6805, 0x1e07,
+  0x6813, 0x0a96,
+  0x6816, 0x0a58,
+  0x6817, 0x0700,
+  0x681e, 0x143c,
+  0x6821, 0x07cd,
+  0x6822, 0x05da,
+  0x6829, 0x143e,
+  0x682a, 0x05d2,
+  0x682b, 0x1444,
+  0x6832, 0x1441,
+  0x6834, 0x0a97,
+  0x6838, 0x05a9,
+  0x6839, 0x081c,
+  0x683c, 0x05a8,
+  0x683d, 0x083f,
+  0x6840, 0x143f,
+  0x6841, 0x073b,
+  0x6842, 0x0721,
+  0x6843, 0x0c67,
+  0x6844, 0x212f,
+  0x6846, 0x143d,
+  0x6848, 0x048a,
+  0x684d, 0x1440,
+  0x684e, 0x1442,
+  0x6850, 0x06c5,
+  0x6851, 0x0702,
+  0x6852, 0x212c,
+  0x6853, 0x05f8,
+  0x6854, 0x0665,
+  0x6859, 0x1445,
+  0x685c, 0x0869,
+  0x685d, 0x0e9f,
+  0x685f, 0x0885,
+  0x6863, 0x1446,
+  0x6867, 0x0da2,
+  0x6874, 0x1452,
+  0x6876, 0x0533,
+  0x6877, 0x1447,
+  0x687e, 0x1458,
+  0x687f, 0x1448,
+  0x6881, 0x0f8a,
+  0x6883, 0x144f,
+  0x6885, 0x0d15,
+  0x688d, 0x1457,
+  0x688e, 0x1e9c,
+  0x688f, 0x144a,
+  0x6893, 0x0478,
+  0x6894, 0x144c,
+  0x6897, 0x07ce,
+  0x689b, 0x144e,
+  0x689d, 0x144d,
+  0x689f, 0x1449,
+  0x68a0, 0x1454,
+  0x68a2, 0x09a7,
+  0x68a6, 0x11be,
+  0x68a7, 0x079c,
+  0x68a8, 0x0f66,
+  0x68ad, 0x144b,
+  0x68af, 0x0c10,
+  0x68b0, 0x0581,
+  0x68b1, 0x081d,
+  0x68b3, 0x1443,
+  0x68b5, 0x1453,
+  0x68b6, 0x05bf,
+  0x68b9, 0x1451,
+  0x68ba, 0x1455,
+  0x68bc, 0x0c68,
+  0x68c4, 0x063a,
+  0x68c6, 0x1473,
+  0x68c8, 0x20af,
+  0x68c9, 0x0ed5,
+  0x68ca, 0x145a,
+  0x68cb, 0x0639,
+  0x68cd, 0x1461,
+  0x68cf, 0x2130,
+  0x68d2, 0x0e6e,
+  0x68d4, 0x1462,
+  0x68d5, 0x1464,
+  0x68d7, 0x1468,
+  0x68d8, 0x145c,
+  0x68da, 0x0b68,
+  0x68df, 0x0c69,
+  0x68e0, 0x146c,
+  0x68e1, 0x145f,
+  0x68e3, 0x1469,
+  0x68e7, 0x1463,
+  0x68ee, 0x09ff,
+  0x68ef, 0x146d,
+  0x68f2, 0x0a57,
+  0x68f9, 0x146b,
+  0x68fa, 0x05f9,
+  0x6900, 0x0ff6,
+  0x6901, 0x1459,
+  0x6904, 0x1467,
+  0x6905, 0x049c,
+  0x6908, 0x145b,
+  0x690b, 0x0ec6,
+  0x690c, 0x1460,
+  0x690d, 0x09e8,
+  0x690e, 0x0be3,
+  0x690f, 0x1456,
+  0x6912, 0x1466,
+  0x6919, 0x0a40,
+  0x691a, 0x1470,
+  0x691b, 0x05cf,
+  0x691c, 0x0755,
+  0x6921, 0x1472,
+  0x6922, 0x145d,
+  0x6923, 0x1471,
+  0x6925, 0x146a,
+  0x6926, 0x145e,
+  0x6928, 0x146e,
+  0x692a, 0x146f,
+  0x6930, 0x1480,
+  0x6934, 0x0ca6,
+  0x6936, 0x1465,
+  0x6939, 0x147c,
+  0x693d, 0x147e,
+  0x693f, 0x0bf4,
+  0x694a, 0x0f36,
+  0x6953, 0x0de8,
+  0x6954, 0x1479,
+  0x6955, 0x0b2a,
+  0x6959, 0x147f,
+  0x695a, 0x0ac1,
+  0x695c, 0x1476,
+  0x695d, 0x1483,
+  0x695e, 0x1482,
+  0x6960, 0x0cc7,
+  0x6961, 0x1481,
+  0x6962, 0x0cc2,
+  0x6968, 0x2132,
+  0x696a, 0x1485,
+  0x696b, 0x1478,
+  0x696d, 0x06c0,
+  0x696e, 0x147b,
+  0x696f, 0x0967,
+  0x6973, 0x0d16,
+  0x6974, 0x147d,
+  0x6975, 0x06c3,
+  0x6977, 0x1475,
+  0x6978, 0x1477,
+  0x6979, 0x1474,
+  0x697c, 0x0fd6,
+  0x697d, 0x05b8,
+  0x697e, 0x147a,
+  0x6981, 0x1484,
+  0x6982, 0x0593,
+  0x698a, 0x0857,
+  0x698e, 0x04ff,
+  0x6991, 0x1495,
+  0x6994, 0x0fd7,
+  0x6995, 0x1498,
+  0x6998, 0x2134,
+  0x699b, 0x0a00,
+  0x699c, 0x1497,
+  0x69a0, 0x1496,
+  0x69a7, 0x1493,
+  0x69ae, 0x1487,
+  0x69b1, 0x14a4,
+  0x69b2, 0x1486,
+  0x69b4, 0x1499,
+  0x69bb, 0x1491,
+  0x69be, 0x148c,
+  0x69bf, 0x1489,
+  0x69c1, 0x148a,
+  0x69c3, 0x1492,
+  0x69c7, 0x1d33,
+  0x69ca, 0x148f,
+  0x69cb, 0x07cf,
+  0x69cc, 0x0be4,
+  0x69cd, 0x0ae6,
+  0x69ce, 0x148d,
+  0x69d0, 0x1488,
+  0x69d3, 0x148b,
+  0x69d8, 0x0f37,
+  0x69d9, 0x0e98,
+  0x69dd, 0x1490,
+  0x69de, 0x149a,
+  0x69e2, 0x2135,
+  0x69e7, 0x14a2,
+  0x69e8, 0x149b,
+  0x69eb, 0x14a8,
+  0x69ed, 0x14a6,
+  0x69f2, 0x14a1,
+  0x69f9, 0x14a0,
+  0x69fb, 0x0bec,
+  0x69fd, 0x0ae7,
+  0x69ff, 0x149e,
+  0x6a02, 0x149c,
+  0x6a05, 0x14a3,
+  0x6a0a, 0x14a9,
+  0x6a0b, 0x0d89,
+  0x6a0c, 0x14af,
+  0x6a12, 0x14aa,
+  0x6a13, 0x14ad,
+  0x6a14, 0x14a7,
+  0x6a17, 0x0bb2,
+  0x6a19, 0x0daa,
+  0x6a1b, 0x149d,
+  0x6a1e, 0x14a5,
+  0x6a1f, 0x09a8,
+  0x6a21, 0x0edb,
+  0x6a22, 0x14b9,
+  0x6a23, 0x14ac,
+  0x6a29, 0x0756,
+  0x6a2a, 0x0523,
+  0x6a2b, 0x05bd,
+  0x6a2e, 0x1494,
+  0x6a30, 0x2136,
+  0x6a35, 0x09a9,
+  0x6a36, 0x14b1,
+  0x6a38, 0x14b8,
+  0x6a39, 0x0925,
+  0x6a3a, 0x05d0,
+  0x6a3d, 0x0b6c,
+  0x6a44, 0x14ae,
+  0x6a46, 0x2138,
+  0x6a47, 0x14b3,
+  0x6a48, 0x14b7,
+  0x6a4b, 0x06ae,
+  0x6a58, 0x0666,
+  0x6a59, 0x14b5,
+  0x6a5f, 0x063b,
+  0x6a61, 0x0ca3,
+  0x6a62, 0x14b4,
+  0x6a66, 0x14b6,
+  0x6a6b, 0x2137,
+  0x6a72, 0x14b0,
+  0x6a73, 0x2139,
+  0x6a78, 0x14b2,
+  0x6a7e, 0x213a,
+  0x6a7f, 0x05be,
+  0x6a80, 0x0b87,
+  0x6a84, 0x14bd,
+  0x6a8d, 0x14bb,
+  0x6a8e, 0x079d,
+  0x6a90, 0x14ba,
+  0x6a97, 0x14c0,
+  0x6a9c, 0x143b,
+  0x6aa0, 0x14bc,
+  0x6aa2, 0x14be,
+  0x6aaa, 0x14cb,
+  0x6aac, 0x14c7,
+  0x6aae, 0x1450,
+  0x6ab3, 0x14c6,
+  0x6ab8, 0x14c5,
+  0x6abb, 0x14c2,
+  0x6ac1, 0x14ab,
+  0x6ac2, 0x14c4,
+  0x6ac3, 0x14c3,
+  0x6ad1, 0x14c9,
+  0x6ad3, 0x0fcc,
+  0x6ada, 0x14cc,
+  0x6adb, 0x06f3,
+  0x6ade, 0x14c8,
+  0x6adf, 0x14ca,
+  0x6ae2, 0x213b,
+  0x6ae4, 0x213c,
+  0x6ae8, 0x0d3b,
+  0x6aea, 0x14cd,
+  0x6afa, 0x14d1,
+  0x6afb, 0x14ce,
+  0x6b04, 0x0f5d,
+  0x6b05, 0x14cf,
+  0x6b0a, 0x149f,
+  0x6b12, 0x14d2,
+  0x6b16, 0x14d3,
+  0x6b1d, 0x04d7,
+  0x6b1f, 0x14d5,
+  0x6b20, 0x073d,
+  0x6b21, 0x08cd,
+  0x6b23, 0x06cd,
+  0x6b27, 0x0524,
+  0x6b32, 0x0f49,
+  0x6b37, 0x14d7,
+  0x6b38, 0x14d6,
+  0x6b39, 0x14d9,
+  0x6b3a, 0x0657,
+  0x6b3d, 0x06ce,
+  0x6b3e, 0x05fa,
+  0x6b43, 0x14dc,
+  0x6b47, 0x14db,
+  0x6b49, 0x14dd,
+  0x6b4c, 0x054e,
+  0x6b4e, 0x0b75,
+  0x6b50, 0x14de,
+  0x6b53, 0x05fb,
+  0x6b54, 0x14e0,
+  0x6b59, 0x14df,
+  0x6b5b, 0x14e1,
+  0x6b5f, 0x14e2,
+  0x6b61, 0x14e3,
+  0x6b62, 0x08ad,
+  0x6b63, 0x0a59,
+  0x6b64, 0x0811,
+  0x6b66, 0x0de2,
+  0x6b69, 0x0e32,
+  0x6b6a, 0x0fea,
+  0x6b6f, 0x08c3,
+  0x6b73, 0x0840,
+  0x6b74, 0x0fba,
+  0x6b78, 0x14e4,
+  0x6b7b, 0x08ae,
+  0x6b7f, 0x14e6,
+  0x6b83, 0x14e9,
+  0x6b84, 0x14e8,
+  0x6b86, 0x0e86,
+  0x6b89, 0x0968,
+  0x6b8a, 0x0918,
+  0x6b8b, 0x0892,
+  0x6b8d, 0x14ea,
+  0x6b95, 0x14ec,
+  0x6b96, 0x09e9,
+  0x6b98, 0x14eb,
+  0x6b9e, 0x14ed,
+  0x6ba4, 0x14ee,
+  0x6baa, 0x14ef,
+  0x6baf, 0x14f1,
+  0x6bb1, 0x14f3,
+  0x6bb2, 0x14f2,
+  0x6bb3, 0x14f4,
+  0x6bb4, 0x0525,
+  0x6bb5, 0x0b88,
+  0x6bb7, 0x14f5,
+  0x6bba, 0x0874,
+  0x6bbb, 0x05aa,
+  0x6bbc, 0x14f6,
+  0x6bbf, 0x0c3c,
+  0x6bc0, 0x119d,
+  0x6bc5, 0x063d,
+  0x6bc6, 0x14f7,
+  0x6bcb, 0x14f8,
+  0x6bcd, 0x0e3c,
+  0x6bce, 0x0e96,
+  0x6bd2, 0x0c9f,
+  0x6bd3, 0x14f9,
+  0x6bd4, 0x0d7a,
+  0x6bd6, 0x213d,
+  0x6bd8, 0x0d8f,
+  0x6bdb, 0x0edf,
+  0x6bdf, 0x14fa,
+  0x6beb, 0x14fc,
+  0x6bec, 0x14fb,
+  0x6bef, 0x14fe,
+  0x6bf3, 0x14fd,
+  0x6c08, 0x1500,
+  0x6c0f, 0x08af,
+  0x6c11, 0x0ebd,
+  0x6c13, 0x1501,
+  0x6c17, 0x063e,
+  0x6c1b, 0x1503,
+  0x6c23, 0x1505,
+  0x6c24, 0x1504,
+  0x6c34, 0x0a2b,
+  0x6c37, 0x0dab,
+  0x6c38, 0x04ec,
+  0x6c3e, 0x0d59,
+  0x6c3f, 0x213e,
+  0x6c40, 0x0c11,
+  0x6c41, 0x094b,
+  0x6c42, 0x067b,
+  0x6c4e, 0x0d5a,
+  0x6c50, 0x08da,
+  0x6c55, 0x1507,
+  0x6c57, 0x05fc,
+  0x6c5a, 0x051a,
+  0x6c5c, 0x213f,
+  0x6c5d, 0x0cca,
+  0x6c5e, 0x1506,
+  0x6c5f, 0x07d0,
+  0x6c60, 0x0b91,
+  0x6c62, 0x1508,
+  0x6c68, 0x1510,
+  0x6c6a, 0x1509,
+  0x6c6f, 0x2141,
+  0x6c70, 0x0b21,
+  0x6c72, 0x067c,
+  0x6c73, 0x1511,
+  0x6c7a, 0x073e,
+  0x6c7d, 0x063f,
+  0x6c7e, 0x150f,
+  0x6c81, 0x150d,
+  0x6c82, 0x150a,
+  0x6c83, 0x0f4a,
+  0x6c86, 0x2140,
+  0x6c88, 0x0bdc,
+  0x6c8c, 0x0cb1,
+  0x6c8d, 0x150b,
+  0x6c90, 0x1513,
+  0x6c92, 0x1512,
+  0x6c93, 0x06f9,
+  0x6c96, 0x052d,
+  0x6c99, 0x082b,
+  0x6c9a, 0x150c,
+  0x6c9b, 0x150e,
+  0x6ca1, 0x0e85,
+  0x6ca2, 0x0b54,
+  0x6cab, 0x0ea5,
+  0x6cae, 0x151b,
+  0x6cb1, 0x151c,
+  0x6cb3, 0x054f,
+  0x6cb8, 0x0df8,
+  0x6cb9, 0x0f09,
+  0x6cba, 0x151e,
+  0x6cbb, 0x08cf,
+  0x6cbc, 0x09aa,
+  0x6cbd, 0x1517,
+  0x6cbe, 0x151d,
+  0x6cbf, 0x050a,
+  0x6cc1, 0x06af,
+  0x6cc4, 0x1514,
+  0x6cc5, 0x1519,
+  0x6cc9, 0x0a98,
+  0x6cca, 0x0d27,
+  0x6ccc, 0x0d7b,
+  0x6cd3, 0x1516,
+  0x6cd5, 0x0e4f,
+  0x6cd7, 0x1518,
+  0x6cd9, 0x1521,
+  0x6cda, 0x2142,
+  0x6cdb, 0x151f,
+  0x6cdd, 0x151a,
+  0x6ce1, 0x0e50,
+  0x6ce2, 0x0cfe,
+  0x6ce3, 0x067d,
+  0x6ce5, 0x0c1f,
+  0x6ce8, 0x0bab,
+  0x6cea, 0x1522,
+  0x6cef, 0x1520,
+  0x6cf0, 0x0b39,
+  0x6cf1, 0x1515,
+  0x6cf3, 0x04ed,
+  0x6d04, 0x2143,
+  0x6d0b, 0x0f38,
+  0x6d0c, 0x152d,
+  0x6d12, 0x152c,
+  0x6d17, 0x0a9a,
+  0x6d19, 0x1529,
+  0x6d1b, 0x0f56,
+  0x6d1e, 0x0c8e,
+  0x6d1f, 0x1523,
+  0x6d25, 0x0be1,
+  0x6d29, 0x04ee,
+  0x6d2a, 0x07d1,
+  0x6d2b, 0x1526,
+  0x6d32, 0x0931,
+  0x6d33, 0x152b,
+  0x6d35, 0x152a,
+  0x6d36, 0x1525,
+  0x6d38, 0x1528,
+  0x6d3b, 0x05c6,
+  0x6d3d, 0x1527,
+  0x6d3e, 0x0cff,
+  0x6d41, 0x0f76,
+  0x6d44, 0x09dc,
+  0x6d45, 0x0a99,
+  0x6d59, 0x1533,
+  0x6d5a, 0x1531,
+  0x6d5c, 0x0dbf,
+  0x6d63, 0x152e,
+  0x6d64, 0x1530,
+  0x6d66, 0x04dc,
+  0x6d69, 0x07d2,
+  0x6d6a, 0x0fd8,
+  0x6d6c, 0x059b,
+  0x6d6e, 0x0dd4,
+  0x6d6f, 0x2145,
+  0x6d74, 0x0f4b,
+  0x6d77, 0x0582,
+  0x6d78, 0x0a01,
+  0x6d79, 0x1532,
+  0x6d85, 0x1537,
+  0x6d87, 0x2144,
+  0x6d88, 0x09ab,
+  0x6d8c, 0x0f1a,
+  0x6d8e, 0x1534,
+  0x6d93, 0x152f,
+  0x6d95, 0x1535,
+  0x6d96, 0x2146,
+  0x6d99, 0x0fa6,
+  0x6d9b, 0x0c6d,
+  0x6d9c, 0x0c9a,
+  0x6dac, 0x2147,
+  0x6daf, 0x0594,
+  0x6db2, 0x04f7,
+  0x6db5, 0x153b,
+  0x6db8, 0x153e,
+  0x6dbc, 0x0f8b,
+  0x6dc0, 0x0f4e,
+  0x6dc5, 0x1545,
+  0x6dc6, 0x153f,
+  0x6dc7, 0x153c,
+  0x6dcb, 0x0f9c,
+  0x6dcc, 0x1542,
+  0x6dcf, 0x2148,
+  0x6dd1, 0x0954,
+  0x6dd2, 0x1544,
+  0x6dd5, 0x1549,
+  0x6dd8, 0x0c6b,
+  0x6dd9, 0x1547,
+  0x6dde, 0x1541,
+  0x6de1, 0x0b76,
+  0x6de4, 0x1548,
+  0x6de6, 0x153d,
+  0x6de8, 0x1543,
+  0x6dea, 0x154a,
+  0x6deb, 0x04c0,
+  0x6dec, 0x1540,
+  0x6dee, 0x154b,
+  0x6df1, 0x0a02,
+  0x6df2, 0x214a,
+  0x6df3, 0x0969,
+  0x6df5, 0x0df5,
+  0x6df7, 0x081e,
+  0x6df8, 0x2149,
+  0x6df9, 0x1538,
+  0x6dfa, 0x1546,
+  0x6dfb, 0x0c34,
+  0x6dfc, 0x214b,
+  0x6e05, 0x0a5a,
+  0x6e07, 0x05c7,
+  0x6e08, 0x0841,
+  0x6e09, 0x09ac,
+  0x6e0a, 0x153a,
+  0x6e0b, 0x094c,
+  0x6e13, 0x0722,
+  0x6e15, 0x1539,
+  0x6e19, 0x154f,
+  0x6e1a, 0x0977,
+  0x6e1b, 0x076e,
+  0x6e1d, 0x155e,
+  0x6e1f, 0x1558,
+  0x6e20, 0x068e,
+  0x6e21, 0x0c49,
+  0x6e23, 0x1553,
+  0x6e24, 0x155c,
+  0x6e25, 0x0473,
+  0x6e26, 0x04d4,
+  0x6e27, 0x214e,
+  0x6e29, 0x0539,
+  0x6e2b, 0x1555,
+  0x6e2c, 0x0b0c,
+  0x6e2d, 0x154c,
+  0x6e2e, 0x154e,
+  0x6e2f, 0x07d3,
+  0x6e38, 0x155f,
+  0x6e39, 0x214c,
+  0x6e3a, 0x155a,
+  0x6e3c, 0x214f,
+  0x6e3e, 0x1552,
+  0x6e43, 0x1559,
+  0x6e4a, 0x0eb7,
+  0x6e4d, 0x1557,
+  0x6e4e, 0x155b,
+  0x6e56, 0x0784,
+  0x6e58, 0x09ad,
+  0x6e5b, 0x0b77,
+  0x6e5c, 0x214d,
+  0x6e5f, 0x1551,
+  0x6e67, 0x0f19,
+  0x6e6b, 0x1554,
+  0x6e6e, 0x154d,
+  0x6e6f, 0x0c6c,
+  0x6e72, 0x1550,
+  0x6e76, 0x1556,
+  0x6e7e, 0x0ff7,
+  0x6e7f, 0x08ea,
+  0x6e80, 0x0eac,
+  0x6e82, 0x1560,
+  0x6e8c, 0x0d42,
+  0x6e8f, 0x156c,
+  0x6e90, 0x076f,
+  0x6e96, 0x096a,
+  0x6e98, 0x1562,
+  0x6e9c, 0x0f77,
+  0x6e9d, 0x07d4,
+  0x6e9f, 0x156f,
+  0x6ea2, 0x04b2,
+  0x6ea5, 0x156d,
+  0x6eaa, 0x1561,
+  0x6eaf, 0x1567,
+  0x6eb2, 0x1569,
+  0x6eb6, 0x0f39,
+  0x6eb7, 0x1564,
+  0x6eba, 0x0c28,
+  0x6ebd, 0x1566,
+  0x6ebf, 0x2150,
+  0x6ec2, 0x156e,
+  0x6ec4, 0x1568,
+  0x6ec5, 0x0ed3,
+  0x6ec9, 0x1563,
+  0x6ecb, 0x08ce,
+  0x6ecc, 0x157b,
+  0x6ed1, 0x05c8,
+  0x6ed3, 0x1565,
+  0x6ed4, 0x156a,
+  0x6edd, 0x0b4c,
+  0x6ede, 0x0b3a,
+  0x6eec, 0x1573,
+  0x6eef, 0x1579,
+  0x6ef2, 0x1577,
+  0x6ef4, 0x0c23,
+  0x6ef7, 0x157e,
+  0x6ef8, 0x1574,
+  0x6efe, 0x1575,
+  0x6eff, 0x155d,
+  0x6f01, 0x0693,
+  0x6f02, 0x0dac,
+  0x6f06, 0x08eb,
+  0x6f09, 0x0809,
+  0x6f0f, 0x0fd9,
+  0x6f11, 0x1571,
+  0x6f13, 0x157d,
+  0x6f14, 0x050b,
+  0x6f15, 0x0ae8,
+  0x6f20, 0x0d2f,
+  0x6f22, 0x05fd,
+  0x6f23, 0x0fc2,
+  0x6f2b, 0x0ead,
+  0x6f2c, 0x0bee,
+  0x6f31, 0x1578,
+  0x6f32, 0x157a,
+  0x6f38, 0x0ab4,
+  0x6f3e, 0x157c,
+  0x6f3f, 0x1576,
+  0x6f41, 0x1570,
+  0x6f45, 0x05ff,
+  0x6f51, 0x1e60,
+  0x6f54, 0x073f,
+  0x6f58, 0x158a,
+  0x6f5b, 0x1585,
+  0x6f5c, 0x0a9c,
+  0x6f5f, 0x05c1,
+  0x6f64, 0x096b,
+  0x6f66, 0x158e,
+  0x6f6d, 0x1587,
+  0x6f6e, 0x0bc8,
+  0x6f6f, 0x1584,
+  0x6f70, 0x0bf5,
+  0x6f74, 0x15a7,
+  0x6f78, 0x1581,
+  0x6f7a, 0x1580,
+  0x6f7c, 0x1589,
+  0x6f80, 0x1583,
+  0x6f81, 0x1582,
+  0x6f82, 0x1588,
+  0x6f84, 0x0a45,
+  0x6f86, 0x157f,
+  0x6f88, 0x2151,
+  0x6f8e, 0x158b,
+  0x6f91, 0x158c,
+  0x6f97, 0x05fe,
+  0x6fa1, 0x1591,
+  0x6fa3, 0x1590,
+  0x6fa4, 0x1592,
+  0x6faa, 0x1595,
+  0x6fb1, 0x0c3d,
+  0x6fb3, 0x158f,
+  0x6fb5, 0x2152,
+  0x6fb9, 0x1593,
+  0x6fc0, 0x0739,
+  0x6fc1, 0x0b59,
+  0x6fc2, 0x158d,
+  0x6fc3, 0x0cf1,
+  0x6fc6, 0x1594,
+  0x6fd4, 0x1599,
+  0x6fd5, 0x1597,
+  0x6fd8, 0x159a,
+  0x6fdb, 0x159d,
+  0x6fdf, 0x1596,
+  0x6fe0, 0x07fc,
+  0x6fe1, 0x0cde,
+  0x6fe4, 0x1536,
+  0x6feb, 0x0f5e,
+  0x6fec, 0x1598,
+  0x6fee, 0x159c,
+  0x6fef, 0x0b55,
+  0x6ff1, 0x159b,
+  0x6ff3, 0x1586,
+  0x6ff5, 0x2153,
+  0x6ff6, 0x1ba4,
+  0x6ffa, 0x15a0,
+  0x6ffe, 0x15a4,
+  0x7001, 0x15a2,
+  0x7005, 0x2154,
+  0x7006, 0x1e50,
+  0x7007, 0x2155,
+  0x7009, 0x159e,
+  0x700b, 0x159f,
+  0x700f, 0x15a3,
+  0x7011, 0x15a1,
+  0x7015, 0x0dc0,
+  0x7018, 0x15a9,
+  0x701a, 0x15a6,
+  0x701b, 0x15a5,
+  0x701d, 0x15a8,
+  0x701e, 0x0cac,
+  0x701f, 0x15aa,
+  0x7026, 0x0bb3,
+  0x7027, 0x0b4d,
+  0x7028, 0x2156,
+  0x702c, 0x0a49,
+  0x7030, 0x15ab,
+  0x7032, 0x15ad,
+  0x703e, 0x15ac,
+  0x704c, 0x1572,
+  0x7051, 0x15ae,
+  0x7058, 0x0cbf,
+  0x7063, 0x15af,
+  0x706b, 0x0550,
+  0x706f, 0x0c6e,
+  0x7070, 0x0583,
+  0x7078, 0x067e,
+  0x707c, 0x090a,
+  0x707d, 0x0842,
+  0x7085, 0x2157,
+  0x7089, 0x0fcd,
+  0x708a, 0x0a2c,
+  0x708e, 0x050c,
+  0x7092, 0x15b1,
+  0x7099, 0x15b0,
+  0x70ab, 0x2158,
+  0x70ac, 0x15b4,
+  0x70ad, 0x0b78,
+  0x70ae, 0x15b7,
+  0x70af, 0x15b2,
+  0x70b3, 0x15b6,
+  0x70b8, 0x15b5,
+  0x70b9, 0x0c3a,
+  0x70ba, 0x049d,
+  0x70bb, 0x20ad,
+  0x70c8, 0x0fbd,
+  0x70cb, 0x15b9,
+  0x70cf, 0x04ca,
+  0x70d9, 0x15bb,
+  0x70dd, 0x15ba,
+  0x70df, 0x15b8,
+  0x70f1, 0x15b3,
+  0x70f9, 0x0e51,
+  0x70fd, 0x15bd,
+  0x7104, 0x215a,
+  0x7109, 0x15bc,
+  0x710f, 0x2159,
+  0x7114, 0x050d,
+  0x7119, 0x15bf,
+  0x711a, 0x0e02,
+  0x711c, 0x15be,
+  0x7121, 0x0ec1,
+  0x7126, 0x09af,
+  0x7130, 0x1ddc,
+  0x7136, 0x0ab5,
+  0x713c, 0x09ae,
+  0x7146, 0x215c,
+  0x7149, 0x0fc3,
+  0x714c, 0x15c5,
+  0x714e, 0x0a9d,
+  0x7155, 0x15c1,
+  0x7156, 0x15c6,
+  0x7159, 0x050e,
+  0x715c, 0x215b,
+  0x7162, 0x15c4,
+  0x7164, 0x0d17,
+  0x7165, 0x15c0,
+  0x7166, 0x15c3,
+  0x7167, 0x09b0,
+  0x7169, 0x0d65,
+  0x716c, 0x15c7,
+  0x716e, 0x08fd,
+  0x717d, 0x0a9e,
+  0x7184, 0x15ca,
+  0x7188, 0x15c2,
+  0x718a, 0x06fd,
+  0x718f, 0x15c8,
+  0x7194, 0x0f3a,
+  0x7195, 0x15cb,
+  0x7199, 0x205d,
+  0x719f, 0x0959,
+  0x71a8, 0x15cc,
+  0x71ac, 0x15cd,
+  0x71b1, 0x0ce4,
+  0x71b9, 0x15cf,
+  0x71be, 0x15d0,
+  0x71c1, 0x215f,
+  0x71c3, 0x0ce9,
+  0x71c8, 0x0c6f,
+  0x71c9, 0x15d2,
+  0x71ce, 0x15d4,
+  0x71d0, 0x0f9d,
+  0x71d2, 0x15d1,
+  0x71d4, 0x15d3,
+  0x71d5, 0x050f,
+  0x71d7, 0x15ce,
+  0x71df, 0x114e,
+  0x71e0, 0x15d5,
+  0x71e5, 0x0ae9,
+  0x71e6, 0x0886,
+  0x71e7, 0x15d7,
+  0x71ec, 0x15d6,
+  0x71ed, 0x09ea,
+  0x71ee, 0x10ee,
+  0x71f5, 0x15d8,
+  0x71f9, 0x15da,
+  0x71fb, 0x15c9,
+  0x71fc, 0x15d9,
+  0x71fe, 0x2160,
+  0x71ff, 0x15db,
+  0x7206, 0x0d30,
+  0x720d, 0x15dc,
+  0x7210, 0x15dd,
+  0x721b, 0x15de,
+  0x7228, 0x15df,
+  0x722a, 0x0bfa,
+  0x722c, 0x15e1,
+  0x722d, 0x15e0,
+  0x7230, 0x15e2,
+  0x7232, 0x15e3,
+  0x7235, 0x090b,
+  0x7236, 0x0dd5,
+  0x723a, 0x0ef8,
+  0x723b, 0x15e4,
+  0x723d, 0x0ad8,
+  0x723e, 0x08d0,
+  0x723f, 0x15e6,
+  0x7246, 0x15e8,
+  0x7247, 0x0e22,
+  0x7248, 0x0d5b,
+  0x724b, 0x15e9,
+  0x724c, 0x0d0d,
+  0x7252, 0x0bc9,
+  0x7258, 0x15ea,
+  0x7259, 0x0567,
+  0x725b, 0x0687,
+  0x725d, 0x0ed2,
+  0x725f, 0x0ec2,
+  0x7261, 0x0534,
+  0x7262, 0x0fda,
+  0x7267, 0x0e80,
+  0x7269, 0x0dfa,
+  0x7272, 0x0a5b,
+  0x7274, 0x15eb,
+  0x7279, 0x0c9b,
+  0x727d, 0x0757,
+  0x727e, 0x15ec,
+  0x7280, 0x0844,
+  0x7281, 0x15ee,
+  0x7282, 0x15ed,
+  0x7287, 0x15ef,
+  0x7292, 0x15f0,
+  0x7296, 0x15f1,
+  0x72a0, 0x0658,
+  0x72a2, 0x15f2,
+  0x72a7, 0x15f3,
+  0x72ac, 0x0758,
+  0x72af, 0x0d5c,
+  0x72b1, 0x2161,
+  0x72b2, 0x15f5,
+  0x72b6, 0x09dd,
+  0x72b9, 0x15f4,
+  0x72be, 0x2162,
+  0x72c2, 0x06b0,
+  0x72c3, 0x15f6,
+  0x72c4, 0x15f8,
+  0x72c6, 0x15f7,
+  0x72ce, 0x15f9,
+  0x72d0, 0x0785,
+  0x72d2, 0x15fa,
+  0x72d7, 0x06e1,
+  0x72d9, 0x0ac2,
+  0x72db, 0x080f,
+  0x72e0, 0x15fc,
+  0x72e2, 0x15fb,
+  0x72e9, 0x0919,
+  0x72ec, 0x0ca0,
+  0x72ed, 0x06b1,
+  0x72f7, 0x15ff,
+  0x72f8, 0x0b6a,
+  0x72f9, 0x15fe,
+  0x72fc, 0x0fdb,
+  0x72fd, 0x0d18,
+  0x730a, 0x1602,
+  0x7316, 0x1604,
+  0x7317, 0x1601,
+  0x731b, 0x0ee0,
+  0x731c, 0x1603,
+  0x731d, 0x1605,
+  0x731f, 0x0f8c,
+  0x7324, 0x2163,
+  0x7325, 0x1609,
+  0x7329, 0x1608,
+  0x732a, 0x0bb4,
+  0x732b, 0x0ce3,
+  0x732e, 0x0759,
+  0x732f, 0x1607,
+  0x7334, 0x1606,
+  0x7336, 0x0f1b,
+  0x733e, 0x160a,
+  0x733f, 0x0510,
+  0x7344, 0x0808,
+  0x7345, 0x08b0,
+  0x734e, 0x160b,
+  0x7357, 0x160e,
+  0x7363, 0x094d,
+  0x7368, 0x1610,
+  0x736a, 0x160f,
+  0x7370, 0x1611,
+  0x7372, 0x05ab,
+  0x7375, 0x1613,
+  0x7377, 0x2165,
+  0x7378, 0x1612,
+  0x737a, 0x1615,
+  0x737b, 0x1614,
+  0x7384, 0x0770,
+  0x7387, 0x0f70,
+  0x7389, 0x06c4,
+  0x738b, 0x0526,
+  0x7396, 0x06e2,
+  0x73a9, 0x061d,
+  0x73b2, 0x0fb0,
+  0x73b3, 0x1617,
+  0x73bb, 0x1619,
+  0x73bd, 0x2166,
+  0x73c0, 0x161a,
+  0x73c2, 0x0551,
+  0x73c8, 0x1616,
+  0x73c9, 0x2167,
+  0x73ca, 0x0887,
+  0x73cd, 0x0bdd,
+  0x73ce, 0x1618,
+  0x73d2, 0x216a,
+  0x73d6, 0x2168,
+  0x73de, 0x161d,
+  0x73e0, 0x091a,
+  0x73e3, 0x2169,
+  0x73e5, 0x161b,
+  0x73ea, 0x0714,
+  0x73ed, 0x0d5d,
+  0x73ee, 0x161c,
+  0x73f1, 0x1637,
+  0x73f5, 0x216c,
+  0x73f8, 0x1622,
+  0x73fe, 0x0771,
+  0x7403, 0x067f,
+  0x7405, 0x161f,
+  0x7406, 0x0f67,
+  0x7407, 0x216b,
+  0x7409, 0x0f78,
+  0x7422, 0x0b56,
+  0x7425, 0x1621,
+  0x7426, 0x216d,
+  0x7429, 0x216f,
+  0x742a, 0x216e,
+  0x742e, 0x2170,
+  0x7432, 0x1623,
+  0x7433, 0x0f9e,
+  0x7434, 0x06cf,
+  0x7435, 0x0d90,
+  0x7436, 0x0d00,
+  0x743a, 0x1624,
+  0x743f, 0x1626,
+  0x7441, 0x1629,
+  0x7455, 0x1625,
+  0x7459, 0x1628,
+  0x745a, 0x079e,
+  0x745b, 0x04ef,
+  0x745c, 0x162a,
+  0x745e, 0x0a36,
+  0x745f, 0x1627,
+  0x7460, 0x0fa4,
+  0x7462, 0x2171,
+  0x7463, 0x162d,
+  0x7464, 0x1d35,
+  0x7469, 0x162b,
+  0x746a, 0x162e,
+  0x746f, 0x1620,
+  0x7470, 0x162c,
+  0x7473, 0x082c,
+  0x7476, 0x162f,
+  0x747e, 0x1630,
+  0x7483, 0x0f68,
+  0x7489, 0x2172,
+  0x748b, 0x1631,
+  0x749e, 0x1632,
+  0x749f, 0x2173,
+  0x74a2, 0x161e,
+  0x74a7, 0x1633,
+  0x74b0, 0x0600,
+  0x74bd, 0x08d1,
+  0x74ca, 0x1634,
+  0x74cf, 0x1635,
+  0x74d4, 0x1636,
+  0x74dc, 0x04dd,
+  0x74e0, 0x1638,
+  0x74e2, 0x0dad,
+  0x74e3, 0x1639,
+  0x74e6, 0x05e0,
+  0x74e7, 0x163a,
+  0x74e9, 0x163b,
+  0x74ee, 0x163c,
+  0x74f0, 0x163e,
+  0x74f2, 0x163d,
+  0x74f6, 0x0dc5,
+  0x74f7, 0x1641,
+  0x74f8, 0x1640,
+  0x7501, 0x2174,
+  0x7503, 0x1643,
+  0x7504, 0x1642,
+  0x7505, 0x1644,
+  0x750c, 0x1645,
+  0x750d, 0x1647,
+  0x750e, 0x1646,
+  0x7511, 0x080b,
+  0x7513, 0x1649,
+  0x7515, 0x1648,
+  0x7518, 0x0601,
+  0x751a, 0x0a19,
+  0x751c, 0x0c36,
+  0x751e, 0x164a,
+  0x751f, 0x0a5c,
+  0x7523, 0x0888,
+  0x7525, 0x051b,
+  0x7526, 0x164b,
+  0x7528, 0x0f3b,
+  0x752b, 0x0e33,
+  0x752c, 0x164c,
+  0x752f, 0x20f2,
+  0x7530, 0x0c3e,
+  0x7531, 0x0f1d,
+  0x7532, 0x07d5,
+  0x7533, 0x0a03,
+  0x7537, 0x0b89,
+  0x7538, 0x10c9,
+  0x753a, 0x0bca,
+  0x753b, 0x0568,
+  0x753c, 0x164d,
+  0x7544, 0x164e,
+  0x7546, 0x1653,
+  0x7549, 0x1651,
+  0x754a, 0x1650,
+  0x754b, 0x13c7,
+  0x754c, 0x0584,
+  0x754d, 0x164f,
+  0x754f, 0x049e,
+  0x7551, 0x0d3e,
+  0x7554, 0x0d5e,
+  0x7559, 0x0f79,
+  0x755a, 0x1654,
+  0x755b, 0x1652,
+  0x755c, 0x0b9a,
+  0x755d, 0x0a4a,
+  0x7560, 0x0d3f,
+  0x7562, 0x0d9f,
+  0x7564, 0x1656,
+  0x7565, 0x0f74,
+  0x7566, 0x0723,
+  0x7567, 0x1657,
+  0x7569, 0x1655,
+  0x756a, 0x0d6a,
+  0x756b, 0x1658,
+  0x756d, 0x1659,
+  0x756f, 0x2175,
+  0x7570, 0x049f,
+  0x7573, 0x09de,
+  0x7574, 0x165e,
+  0x7576, 0x165b,
+  0x7577, 0x0cc5,
+  0x7578, 0x165a,
+  0x757f, 0x0640,
+  0x7582, 0x1661,
+  0x7586, 0x165c,
+  0x7589, 0x1660,
+  0x758a, 0x165f,
+  0x758b, 0x0d97,
+  0x758e, 0x0ac4,
+  0x758f, 0x0ac3,
+  0x7591, 0x0659,
+  0x7594, 0x1662,
+  0x759a, 0x1663,
+  0x759d, 0x1664,
+  0x75a3, 0x1666,
+  0x75a5, 0x1665,
+  0x75ab, 0x04f8,
+  0x75b1, 0x166e,
+  0x75b2, 0x0d7c,
+  0x75b3, 0x1668,
+  0x75b5, 0x166a,
+  0x75b8, 0x166c,
+  0x75b9, 0x0a04,
+  0x75bc, 0x166d,
+  0x75bd, 0x166b,
+  0x75be, 0x08ec,
+  0x75c2, 0x1667,
+  0x75c3, 0x1669,
+  0x75c5, 0x0db4,
+  0x75c7, 0x09b1,
+  0x75ca, 0x1670,
+  0x75cd, 0x166f,
+  0x75d2, 0x1671,
+  0x75d4, 0x08d2,
+  0x75d5, 0x081f,
+  0x75d8, 0x0c71,
+  0x75d9, 0x1672,
+  0x75db, 0x0be7,
+  0x75de, 0x1674,
+  0x75e2, 0x0f69,
+  0x75e3, 0x1673,
+  0x75e9, 0x0aeb,
+  0x75f0, 0x1679,
+  0x75f2, 0x167b,
+  0x75f4, 0x0b92,
+  0x75fa, 0x167a,
+  0x75fc, 0x1677,
+  0x75fe, 0x1675,
+  0x7601, 0x1678,
+  0x7609, 0x167f,
+  0x760b, 0x167d,
+  0x760d, 0x167e,
+  0x761f, 0x1680,
+  0x7620, 0x1682,
+  0x7624, 0x1685,
+  0x7626, 0x1e2d,
+  0x7627, 0x1681,
+  0x7630, 0x1687,
+  0x7634, 0x1686,
+  0x763b, 0x1688,
+  0x7642, 0x0f8d,
+  0x7646, 0x168b,
+  0x7647, 0x1689,
+  0x764c, 0x061e,
+  0x7652, 0x0f0a,
+  0x7656, 0x0e1a,
+  0x7658, 0x168d,
+  0x765c, 0x168c,
+  0x7661, 0x168e,
+  0x7667, 0x1693,
+  0x7668, 0x1690,
+  0x766c, 0x1694,
+  0x7670, 0x1695,
+  0x7672, 0x1696,
+  0x7676, 0x1697,
+  0x7678, 0x1698,
+  0x767a, 0x0d43,
+  0x767b, 0x0c4a,
+  0x767c, 0x1699,
+  0x767d, 0x0d28,
+  0x767e, 0x0da6,
+  0x7680, 0x169a,
+  0x7682, 0x2176,
+  0x7683, 0x169b,
+  0x7684, 0x0c24,
+  0x7686, 0x0585,
+  0x7687, 0x07d6,
+  0x7688, 0x169c,
+  0x768b, 0x169d,
+  0x768e, 0x169e,
+  0x7690, 0x0877,
+  0x7693, 0x16a0,
+  0x7696, 0x169f,
+  0x7699, 0x16a1,
+  0x769b, 0x2179,
+  0x769c, 0x2177,
+  0x769e, 0x2178,
+  0x76a6, 0x217a,
+  0x76ae, 0x0d7d,
+  0x76b0, 0x16a3,
+  0x76b4, 0x16a4,
+  0x76b7, 0x1d1c,
+  0x76b8, 0x16a5,
+  0x76bf, 0x087c,
+  0x76c2, 0x16a8,
+  0x76c3, 0x0d0c,
+  0x76c6, 0x0e8d,
+  0x76c8, 0x04f0,
+  0x76ca, 0x04f9,
+  0x76cd, 0x16a9,
+  0x76d2, 0x16ab,
+  0x76d6, 0x16aa,
+  0x76d7, 0x0c6a,
+  0x76db, 0x0a5d,
+  0x76dc, 0x14d8,
+  0x76de, 0x16ac,
+  0x76df, 0x0ecd,
+  0x76e1, 0x16ad,
+  0x76e3, 0x0602,
+  0x76e4, 0x0d6b,
+  0x76e5, 0x16ae,
+  0x76e7, 0x16af,
+  0x76ea, 0x16b0,
+  0x76ee, 0x0ee8,
+  0x76f2, 0x0ee1,
+  0x76f4, 0x0bda,
+  0x76f8, 0x0aec,
+  0x76fb, 0x16b2,
+  0x76fe, 0x096c,
+  0x7701, 0x09b2,
+  0x7704, 0x16b5,
+  0x7707, 0x16b4,
+  0x7708, 0x16b3,
+  0x7709, 0x0d91,
+  0x770b, 0x0603,
+  0x770c, 0x075d,
+  0x771b, 0x16bb,
+  0x771e, 0x16b8,
+  0x771f, 0x0a05,
+  0x7720, 0x0ebe,
+  0x7724, 0x16b7,
+  0x7725, 0x16b9,
+  0x7729, 0x16b6,
+  0x7737, 0x16bc,
+  0x773a, 0x0bcb,
+  0x773c, 0x061f,
+  0x7740, 0x0ba3,
+  0x7746, 0x217c,
+  0x7747, 0x16be,
+  0x775a, 0x16bf,
+  0x775b, 0x16c2,
+  0x7761, 0x0a2d,
+  0x7762, 0x1ec5,
+  0x7763, 0x0c9c,
+  0x7765, 0x16c3,
+  0x7766, 0x0e81,
+  0x7768, 0x16c0,
+  0x776b, 0x16c1,
+  0x7779, 0x16c6,
+  0x777e, 0x16c5,
+  0x777f, 0x16c4,
+  0x778b, 0x16c8,
+  0x778e, 0x16c7,
+  0x7791, 0x16c9,
+  0x779e, 0x16cb,
+  0x77a0, 0x16ca,
+  0x77a5, 0x0e1d,
+  0x77ac, 0x0960,
+  0x77ad, 0x0f8e,
+  0x77b0, 0x16cc,
+  0x77b3, 0x0c8f,
+  0x77b6, 0x16cd,
+  0x77b9, 0x16ce,
+  0x77bb, 0x16d2,
+  0x77bc, 0x16d0,
+  0x77bf, 0x16cf,
+  0x77c7, 0x16d3,
+  0x77cd, 0x16d4,
+  0x77d7, 0x16d5,
+  0x77da, 0x16d6,
+  0x77db, 0x0ec3,
+  0x77dc, 0x16d7,
+  0x77e2, 0x0efc,
+  0x77e3, 0x16d8,
+  0x77e5, 0x0b8c,
+  0x77e7, 0x0d20,
+  0x77e9, 0x06e3,
+  0x77ed, 0x0b79,
+  0x77ee, 0x16d9,
+  0x77ef, 0x06b2,
+  0x77f3, 0x0a74,
+  0x77fc, 0x16da,
+  0x7802, 0x082d,
+  0x780c, 0x16db,
+  0x7812, 0x16dc,
+  0x7814, 0x075a,
+  0x7815, 0x0845,
+  0x7820, 0x16de,
+  0x7821, 0x217e,
+  0x7825, 0x0c50,
+  0x7826, 0x0846,
+  0x7827, 0x0668,
+  0x7832, 0x0e52,
+  0x7834, 0x0d01,
+  0x783a, 0x0c51,
+  0x783f, 0x07ee,
+  0x7845, 0x16e0,
+  0x784e, 0x217f,
+  0x785d, 0x09b3,
+  0x7864, 0x2180,
+  0x786b, 0x0f7a,
+  0x786c, 0x07d7,
+  0x786f, 0x075b,
+  0x7872, 0x0d37,
+  0x7874, 0x16e2,
+  0x787a, 0x2181,
+  0x787c, 0x16e4,
+  0x7881, 0x079f,
+  0x7886, 0x16e3,
+  0x7887, 0x0c12,
+  0x788c, 0x16e6,
+  0x788d, 0x0595,
+  0x788e, 0x16e1,
+  0x7891, 0x0d7e,
+  0x7893, 0x04d2,
+  0x7895, 0x085c,
+  0x7897, 0x0ff8,
+  0x789a, 0x16e5,
+  0x78a3, 0x16e7,
+  0x78a7, 0x0e1b,
+  0x78a9, 0x0a7d,
+  0x78aa, 0x16e9,
+  0x78af, 0x16ea,
+  0x78b5, 0x16e8,
+  0x78ba, 0x05ac,
+  0x78bc, 0x16f0,
+  0x78be, 0x16ef,
+  0x78c1, 0x08d3,
+  0x78c5, 0x16f1,
+  0x78c6, 0x16ec,
+  0x78ca, 0x16f2,
+  0x78cb, 0x16ed,
+  0x78d0, 0x0d6c,
+  0x78d1, 0x16eb,
+  0x78d4, 0x16ee,
+  0x78da, 0x16f5,
+  0x78e7, 0x16f4,
+  0x78e8, 0x0e8f,
+  0x78ec, 0x16f3,
+  0x78ef, 0x04af,
+  0x78f4, 0x16f7,
+  0x78fd, 0x16f6,
+  0x7901, 0x09b4,
+  0x7907, 0x16f8,
+  0x790e, 0x0ac5,
+  0x7911, 0x16fa,
+  0x7912, 0x16f9,
+  0x7919, 0x16fb,
+  0x7926, 0x16dd,
+  0x792a, 0x16df,
+  0x792b, 0x16fd,
+  0x792c, 0x16fc,
+  0x7930, 0x2182,
+  0x793a, 0x08d4,
+  0x793c, 0x0fb1,
+  0x793e, 0x08fe,
+  0x7940, 0x16fe,
+  0x7941, 0x070d,
+  0x7947, 0x065a,
+  0x7948, 0x0641,
+  0x7949, 0x08b1,
+  0x7950, 0x0f1e,
+  0x7953, 0x1704,
+  0x7955, 0x1703,
+  0x7956, 0x0ac6,
+  0x7957, 0x1700,
+  0x795a, 0x1702,
+  0x795d, 0x0955,
+  0x795e, 0x0a06,
+  0x795f, 0x1701,
+  0x7960, 0x16ff,
+  0x7962, 0x0ce0,
+  0x7965, 0x09b5,
+  0x7968, 0x0dae,
+  0x796d, 0x0847,
+  0x7977, 0x0c72,
+  0x797a, 0x1705,
+  0x797f, 0x1706,
+  0x7980, 0x171c,
+  0x7981, 0x06d0,
+  0x7984, 0x0fe3,
+  0x7985, 0x0ab7,
+  0x798a, 0x1707,
+  0x798d, 0x0552,
+  0x798e, 0x0c13,
+  0x798f, 0x0df1,
+  0x7994, 0x2186,
+  0x799b, 0x2188,
+  0x799d, 0x1708,
+  0x79a6, 0x0694,
+  0x79a7, 0x1709,
+  0x79aa, 0x170b,
+  0x79ae, 0x170c,
+  0x79b0, 0x0cdf,
+  0x79b1, 0x1e4e,
+  0x79b3, 0x170d,
+  0x79b9, 0x170e,
+  0x79bd, 0x06d1,
+  0x79be, 0x0553,
+  0x79bf, 0x0c9d,
+  0x79c0, 0x0932,
+  0x79c1, 0x08b2,
+  0x79c9, 0x1710,
+  0x79cb, 0x0933,
+  0x79d1, 0x054a,
+  0x79d2, 0x0db5,
+  0x79d5, 0x1711,
+  0x79d8, 0x0d7f,
+  0x79df, 0x0ac7,
+  0x79e1, 0x1714,
+  0x79e3, 0x1715,
+  0x79e4, 0x0d1f,
+  0x79e6, 0x0a07,
+  0x79e7, 0x1712,
+  0x79e9, 0x0b9f,
+  0x79ec, 0x1713,
+  0x79f0, 0x09b6,
+  0x79fb, 0x04a0,
+  0x7a00, 0x0643,
+  0x7a08, 0x1716,
+  0x7a0b, 0x0c14,
+  0x7a0d, 0x1717,
+  0x7a0e, 0x0a6b,
+  0x7a14, 0x0eb9,
+  0x7a17, 0x0d95,
+  0x7a18, 0x1718,
+  0x7a1a, 0x0b93,
+  0x7a1c, 0x0f8f,
+  0x7a1f, 0x171b,
+  0x7a20, 0x171a,
+  0x7a2e, 0x091b,
+  0x7a31, 0x171d,
+  0x7a32, 0x04b4,
+  0x7a37, 0x1720,
+  0x7a3b, 0x171e,
+  0x7a3c, 0x0554,
+  0x7a3d, 0x0724,
+  0x7a3e, 0x171f,
+  0x7a3f, 0x07d8,
+  0x7a40, 0x0804,
+  0x7a42, 0x0e36,
+  0x7a43, 0x1721,
+  0x7a46, 0x0e82,
+  0x7a49, 0x1723,
+  0x7a4d, 0x0a75,
+  0x7a4e, 0x04f1,
+  0x7a4f, 0x053a,
+  0x7a50, 0x0470,
+  0x7a57, 0x1722,
+  0x7a61, 0x1724,
+  0x7a63, 0x09df,
+  0x7a69, 0x1726,
+  0x7a6b, 0x05ad,
+  0x7a70, 0x1728,
+  0x7a74, 0x0740,
+  0x7a76, 0x0680,
+  0x7a79, 0x1729,
+  0x7a7a, 0x06ed,
+  0x7a7d, 0x172a,
+  0x7a7f, 0x0aa0,
+  0x7a81, 0x0ca5,
+  0x7a83, 0x0a84,
+  0x7a84, 0x0865,
+  0x7a88, 0x172b,
+  0x7a92, 0x0ba0,
+  0x7a93, 0x0aed,
+  0x7a95, 0x172d,
+  0x7a96, 0x172f,
+  0x7a97, 0x172c,
+  0x7a98, 0x172e,
+  0x7a9f, 0x06f8,
+  0x7aa9, 0x1730,
+  0x7aaa, 0x06fc,
+  0x7aae, 0x0681,
+  0x7aaf, 0x0f3c,
+  0x7ab0, 0x1732,
+  0x7ab6, 0x1733,
+  0x7aba, 0x04d0,
+  0x7abf, 0x1736,
+  0x7ac3, 0x05d4,
+  0x7ac4, 0x1735,
+  0x7ac5, 0x1734,
+  0x7ac7, 0x1738,
+  0x7ac8, 0x1731,
+  0x7aca, 0x1739,
+  0x7acb, 0x0f71,
+  0x7acd, 0x173a,
+  0x7acf, 0x173b,
+  0x7ad1, 0x2189,
+  0x7ad2, 0x11c5,
+  0x7ad3, 0x173d,
+  0x7ad5, 0x173c,
+  0x7ad9, 0x173e,
+  0x7adc, 0x0f7d,
+  0x7add, 0x1740,
+  0x7adf, 0x1c08,
+  0x7ae0, 0x09b7,
+  0x7ae1, 0x1741,
+  0x7ae3, 0x0961,
+  0x7ae5, 0x0c90,
+  0x7ae6, 0x1743,
+  0x7ae7, 0x218a,
+  0x7aea, 0x0b66,
+  0x7aeb, 0x218c,
+  0x7aed, 0x1744,
+  0x7aef, 0x0b7a,
+  0x7af0, 0x1745,
+  0x7af6, 0x069d,
+  0x7af8, 0x1076,
+  0x7af9, 0x0b9b,
+  0x7afa, 0x08df,
+  0x7aff, 0x0604,
+  0x7b02, 0x1746,
+  0x7b04, 0x1753,
+  0x7b06, 0x1749,
+  0x7b08, 0x0682,
+  0x7b0a, 0x1748,
+  0x7b0b, 0x1755,
+  0x7b0f, 0x1747,
+  0x7b11, 0x09b8,
+  0x7b18, 0x174b,
+  0x7b1b, 0x0c25,
+  0x7b1e, 0x174d,
+  0x7b20, 0x05bc,
+  0x7b25, 0x0a20,
+  0x7b26, 0x0dd6,
+  0x7b28, 0x174f,
+  0x7b2c, 0x0b48,
+  0x7b33, 0x174a,
+  0x7b35, 0x174e,
+  0x7b36, 0x1750,
+  0x7b39, 0x086b,
+  0x7b45, 0x1757,
+  0x7b46, 0x0da0,
+  0x7b48, 0x0d3a,
+  0x7b49, 0x0c73,
+  0x7b4b, 0x06d2,
+  0x7b4c, 0x1756,
+  0x7b4d, 0x1754,
+  0x7b4f, 0x0d49,
+  0x7b50, 0x1751,
+  0x7b51, 0x0b9c,
+  0x7b52, 0x0c75,
+  0x7b54, 0x0c74,
+  0x7b56, 0x0866,
+  0x7b5d, 0x1769,
+  0x7b65, 0x1759,
+  0x7b67, 0x175b,
+  0x7b6c, 0x175e,
+  0x7b6e, 0x175f,
+  0x7b70, 0x175c,
+  0x7b74, 0x175a,
+  0x7b75, 0x1758,
+  0x7b7a, 0x1752,
+  0x7b86, 0x0e1f,
+  0x7b87, 0x0555,
+  0x7b8b, 0x1766,
+  0x7b8d, 0x1763,
+  0x7b8f, 0x1768,
+  0x7b92, 0x1767,
+  0x7b94, 0x0d29,
+  0x7b95, 0x0eb3,
+  0x7b97, 0x0889,
+  0x7b98, 0x1761,
+  0x7b99, 0x176a,
+  0x7b9a, 0x1765,
+  0x7b9c, 0x1764,
+  0x7b9d, 0x1760,
+  0x7b9e, 0x218d,
+  0x7b9f, 0x1762,
+  0x7ba1, 0x0605,
+  0x7baa, 0x0b7b,
+  0x7bad, 0x0aa1,
+  0x7bb1, 0x0d36,
+  0x7bb4, 0x176f,
+  0x7bb8, 0x0d38,
+  0x7bc0, 0x0a85,
+  0x7bc1, 0x176c,
+  0x7bc4, 0x0d63,
+  0x7bc6, 0x1770,
+  0x7bc7, 0x0e23,
+  0x7bc9, 0x0b99,
+  0x7bcb, 0x176b,
+  0x7bcc, 0x176d,
+  0x7bcf, 0x176e,
+  0x7bdd, 0x1771,
+  0x7be0, 0x08f0,
+  0x7be4, 0x0c9e,
+  0x7be5, 0x1776,
+  0x7be6, 0x1775,
+  0x7be9, 0x1772,
+  0x7bed, 0x0fdc,
+  0x7bf3, 0x177b,
+  0x7bf6, 0x177f,
+  0x7bf7, 0x177c,
+  0x7c00, 0x1778,
+  0x7c07, 0x1779,
+  0x7c0d, 0x177e,
+  0x7c11, 0x1773,
+  0x7c12, 0x10ea,
+  0x7c13, 0x177a,
+  0x7c14, 0x1774,
+  0x7c17, 0x177d,
+  0x7c1e, 0x1e3b,
+  0x7c1f, 0x1783,
+  0x7c21, 0x0606,
+  0x7c23, 0x1780,
+  0x7c27, 0x1781,
+  0x7c2a, 0x1782,
+  0x7c2b, 0x1785,
+  0x7c37, 0x1784,
+  0x7c38, 0x0d8a,
+  0x7c3d, 0x1786,
+  0x7c3e, 0x0fc4,
+  0x7c3f, 0x0e3d,
+  0x7c40, 0x178b,
+  0x7c43, 0x1788,
+  0x7c4c, 0x1787,
+  0x7c4d, 0x0a76,
+  0x7c4f, 0x178a,
+  0x7c50, 0x178c,
+  0x7c54, 0x1789,
+  0x7c56, 0x1790,
+  0x7c58, 0x178d,
+  0x7c5f, 0x178e,
+  0x7c60, 0x1777,
+  0x7c64, 0x178f,
+  0x7c65, 0x1791,
+  0x7c6c, 0x1792,
+  0x7c73, 0x0e16,
+  0x7c75, 0x1793,
+  0x7c7e, 0x0eee,
+  0x7c81, 0x06c6,
+  0x7c82, 0x06ff,
+  0x7c83, 0x1794,
+  0x7c89, 0x0e04,
+  0x7c8b, 0x0a2e,
+  0x7c8d, 0x0ebc,
+  0x7c90, 0x1795,
+  0x7c92, 0x0f7b,
+  0x7c95, 0x0d2a,
+  0x7c97, 0x0ac8,
+  0x7c98, 0x0cea,
+  0x7c9b, 0x0957,
+  0x7c9f, 0x0484,
+  0x7ca1, 0x179a,
+  0x7ca2, 0x1798,
+  0x7ca4, 0x1796,
+  0x7ca5, 0x05dd,
+  0x7ca7, 0x09b9,
+  0x7ca8, 0x179b,
+  0x7cab, 0x1799,
+  0x7cad, 0x1797,
+  0x7cae, 0x179f,
+  0x7cb1, 0x179e,
+  0x7cb2, 0x179d,
+  0x7cb3, 0x179c,
+  0x7cb9, 0x17a0,
+  0x7cbd, 0x17a1,
+  0x7cbe, 0x0a5e,
+  0x7cc0, 0x17a2,
+  0x7cc2, 0x17a4,
+  0x7cc5, 0x17a3,
+  0x7cca, 0x0786,
+  0x7cce, 0x0aba,
+  0x7cd2, 0x17a6,
+  0x7cd6, 0x0c76,
+  0x7cd8, 0x17a5,
+  0x7cdc, 0x17a7,
+  0x7cde, 0x0e05,
+  0x7cdf, 0x0aee,
+  0x7ce0, 0x07d9,
+  0x7ce2, 0x17a8,
+  0x7ce7, 0x0f90,
+  0x7cef, 0x17aa,
+  0x7cf2, 0x17ab,
+  0x7cf4, 0x17ac,
+  0x7cf6, 0x17ad,
+  0x7cf8, 0x08b3,
+  0x7cfa, 0x17ae,
+  0x7cfb, 0x0725,
+  0x7cfe, 0x0684,
+  0x7d00, 0x0644,
+  0x7d02, 0x17b0,
+  0x7d04, 0x0eff,
+  0x7d05, 0x07da,
+  0x7d06, 0x17af,
+  0x7d0a, 0x17b3,
+  0x7d0b, 0x0ef2,
+  0x7d0d, 0x0cf2,
+  0x7d10, 0x0da5,
+  0x7d14, 0x096d,
+  0x7d15, 0x17b2,
+  0x7d17, 0x08ff,
+  0x7d18, 0x07db,
+  0x7d19, 0x08b4,
+  0x7d1a, 0x0683,
+  0x7d1b, 0x0e06,
+  0x7d1c, 0x17b1,
+  0x7d20, 0x0ac9,
+  0x7d21, 0x0e70,
+  0x7d22, 0x0867,
+  0x7d2b, 0x08b5,
+  0x7d2c, 0x0bf9,
+  0x7d2e, 0x17b6,
+  0x7d2f, 0x0fa7,
+  0x7d30, 0x0849,
+  0x7d32, 0x17b7,
+  0x7d33, 0x0a08,
+  0x7d35, 0x17b9,
+  0x7d39, 0x09ba,
+  0x7d3a, 0x0820,
+  0x7d3f, 0x17b8,
+  0x7d42, 0x0934,
+  0x7d43, 0x0772,
+  0x7d44, 0x0aca,
+  0x7d45, 0x17b4,
+  0x7d46, 0x17ba,
+  0x7d48, 0x218f,
+  0x7d4b, 0x17b5,
+  0x7d4c, 0x0726,
+  0x7d4e, 0x17bd,
+  0x7d4f, 0x17c1,
+  0x7d50, 0x0741,
+  0x7d56, 0x17bc,
+  0x7d5b, 0x17c5,
+  0x7d5c, 0x2190,
+  0x7d5e, 0x07dc,
+  0x7d61, 0x0f57,
+  0x7d62, 0x0480,
+  0x7d63, 0x17c2,
+  0x7d66, 0x0685,
+  0x7d68, 0x17bf,
+  0x7d6e, 0x17c0,
+  0x7d71, 0x0c77,
+  0x7d72, 0x17be,
+  0x7d73, 0x17bb,
+  0x7d75, 0x0586,
+  0x7d76, 0x0a88,
+  0x7d79, 0x075c,
+  0x7d7d, 0x17c7,
+  0x7d89, 0x17c4,
+  0x7d8f, 0x17c6,
+  0x7d93, 0x17c3,
+  0x7d99, 0x0727,
+  0x7d9a, 0x0b13,
+  0x7d9b, 0x17c8,
+  0x7d9c, 0x0af0,
+  0x7d9f, 0x17d5,
+  0x7da0, 0x2192,
+  0x7da2, 0x17d1,
+  0x7da3, 0x17cb,
+  0x7dab, 0x17cf,
+  0x7dac, 0x0926,
+  0x7dad, 0x04a1,
+  0x7dae, 0x17ca,
+  0x7daf, 0x17d2,
+  0x7db0, 0x17d6,
+  0x7db1, 0x07dd,
+  0x7db2, 0x0ee2,
+  0x7db4, 0x0bf2,
+  0x7db5, 0x17cc,
+  0x7db7, 0x2191,
+  0x7db8, 0x17d4,
+  0x7dba, 0x17c9,
+  0x7dbb, 0x0b7c,
+  0x7dbd, 0x17ce,
+  0x7dbe, 0x0481,
+  0x7dbf, 0x0ed6,
+  0x7dc7, 0x17cd,
+  0x7dca, 0x06d3,
+  0x7dcb, 0x0d80,
+  0x7dcf, 0x0aef,
+  0x7dd1, 0x0f98,
+  0x7dd2, 0x0979,
+  0x7dd5, 0x17fd,
+  0x7dd6, 0x2193,
+  0x7dd8, 0x17d7,
+  0x7dda, 0x0aa2,
+  0x7ddc, 0x17d3,
+  0x7ddd, 0x17d8,
+  0x7dde, 0x17da,
+  0x7de0, 0x0c15,
+  0x7de1, 0x17dd,
+  0x7de4, 0x17d9,
+  0x7de8, 0x0e24,
+  0x7de9, 0x0607,
+  0x7dec, 0x0ed7,
+  0x7def, 0x04a2,
+  0x7df2, 0x17dc,
+  0x7df4, 0x0fc5,
+  0x7dfb, 0x17db,
+  0x7e01, 0x0511,
+  0x7e04, 0x0cc4,
+  0x7e05, 0x17de,
+  0x7e09, 0x17e5,
+  0x7e0a, 0x17df,
+  0x7e0b, 0x17e6,
+  0x7e12, 0x17e2,
+  0x7e1b, 0x0d31,
+  0x7e1e, 0x08f6,
+  0x7e1f, 0x17e4,
+  0x7e21, 0x17e1,
+  0x7e22, 0x17e7,
+  0x7e23, 0x17e0,
+  0x7e26, 0x094e,
+  0x7e2b, 0x0e53,
+  0x7e2e, 0x0956,
+  0x7e31, 0x17e3,
+  0x7e32, 0x17ef,
+  0x7e35, 0x17eb,
+  0x7e37, 0x17ee,
+  0x7e39, 0x17ec,
+  0x7e3a, 0x17f0,
+  0x7e3b, 0x17ea,
+  0x7e3d, 0x17d0,
+  0x7e3e, 0x0a77,
+  0x7e41, 0x0d5f,
+  0x7e43, 0x17ed,
+  0x7e46, 0x17e8,
+  0x7e4a, 0x0aa3,
+  0x7e4b, 0x0728,
+  0x7e4d, 0x0935,
+  0x7e52, 0x2194,
+  0x7e54, 0x09eb,
+  0x7e55, 0x0ab8,
+  0x7e56, 0x17f3,
+  0x7e59, 0x17f5,
+  0x7e5d, 0x17f2,
+  0x7e5e, 0x17f4,
+  0x7e61, 0x1e11,
+  0x7e66, 0x17e9,
+  0x7e67, 0x17f1,
+  0x7e69, 0x17f9,
+  0x7e6a, 0x17f8,
+  0x7e6b, 0x1df7,
+  0x7e6d, 0x0ea8,
+  0x7e70, 0x0701,
+  0x7e79, 0x17f7,
+  0x7e7b, 0x17fb,
+  0x7e7c, 0x17fa,
+  0x7e7d, 0x17fe,
+  0x7e7f, 0x1800,
+  0x7e82, 0x088a,
+  0x7e83, 0x17fc,
+  0x7e88, 0x1801,
+  0x7e8a, 0x20a7,
+  0x7e8c, 0x1803,
+  0x7e8e, 0x1809,
+  0x7e8f, 0x0c35,
+  0x7e90, 0x1805,
+  0x7e92, 0x1804,
+  0x7e93, 0x1806,
+  0x7e96, 0x1808,
+  0x7e9b, 0x180a,
+  0x7f36, 0x0608,
+  0x7f38, 0x180c,
+  0x7f3a, 0x180d,
+  0x7f45, 0x180e,
+  0x7f47, 0x2195,
+  0x7f4c, 0x180f,
+  0x7f50, 0x1812,
+  0x7f54, 0x1815,
+  0x7f55, 0x1814,
+  0x7f58, 0x1816,
+  0x7f5f, 0x1817,
+  0x7f67, 0x181b,
+  0x7f68, 0x1819,
+  0x7f6a, 0x0851,
+  0x7f6b, 0x0729,
+  0x7f6e, 0x0b94,
+  0x7f70, 0x0d47,
+  0x7f72, 0x097a,
+  0x7f75, 0x0d03,
+  0x7f77, 0x0d81,
+  0x7f78, 0x181c,
+  0x7f79, 0x1336,
+  0x7f82, 0x181d,
+  0x7f83, 0x181f,
+  0x7f85, 0x0f4f,
+  0x7f86, 0x181e,
+  0x7f87, 0x1821,
+  0x7f88, 0x1820,
+  0x7f8a, 0x0f3d,
+  0x7f8c, 0x1822,
+  0x7f8e, 0x0d92,
+  0x7f94, 0x1823,
+  0x7f9a, 0x1826,
+  0x7f9d, 0x1825,
+  0x7f9e, 0x1824,
+  0x7fa1, 0x2196,
+  0x7fa3, 0x1827,
+  0x7fa4, 0x0708,
+  0x7fa8, 0x0aa4,
+  0x7fa9, 0x065b,
+  0x7fae, 0x182b,
+  0x7faf, 0x1828,
+  0x7fb2, 0x1829,
+  0x7fb6, 0x182c,
+  0x7fb8, 0x182d,
+  0x7fb9, 0x182a,
+  0x7fbd, 0x04cb,
+  0x7fc1, 0x0527,
+  0x7fc5, 0x182f,
+  0x7fca, 0x1831,
+  0x7fcc, 0x0f4c,
+  0x7fd2, 0x0936,
+  0x7fd4, 0x1833,
+  0x7fd5, 0x1832,
+  0x7fe0, 0x0a2f,
+  0x7fe1, 0x1834,
+  0x7fe6, 0x1835,
+  0x7fe9, 0x1836,
+  0x7feb, 0x0621,
+  0x7ff0, 0x0609,
+  0x7ff3, 0x1837,
+  0x7ff9, 0x1838,
+  0x7ffb, 0x0e8b,
+  0x7ffc, 0x0f4d,
+  0x8000, 0x0f3e,
+  0x8001, 0x0fdd,
+  0x8003, 0x07df,
+  0x8004, 0x183b,
+  0x8005, 0x0900,
+  0x8006, 0x183a,
+  0x800b, 0x183c,
+  0x800c, 0x08d5,
+  0x8010, 0x0b31,
+  0x8012, 0x183d,
+  0x8015, 0x07de,
+  0x8017, 0x0ee3,
+  0x8018, 0x183e,
+  0x801c, 0x1840,
+  0x8021, 0x1841,
+  0x8028, 0x1842,
+  0x8033, 0x08d6,
+  0x8036, 0x0ef9,
+  0x803b, 0x1844,
+  0x803d, 0x0b7d,
+  0x803f, 0x1843,
+  0x8046, 0x1846,
+  0x804a, 0x1845,
+  0x8052, 0x1847,
+  0x8056, 0x0a5f,
+  0x8058, 0x1848,
+  0x805a, 0x1849,
+  0x805e, 0x0e09,
+  0x805f, 0x184a,
+  0x8061, 0x0af1,
+  0x8062, 0x184b,
+  0x8068, 0x184c,
+  0x806f, 0x0fc6,
+  0x8070, 0x184f,
+  0x8072, 0x184e,
+  0x8073, 0x184d,
+  0x8074, 0x0bcc,
+  0x8076, 0x1850,
+  0x8077, 0x09ec,
+  0x8079, 0x1851,
+  0x807d, 0x1852,
+  0x807e, 0x0fde,
+  0x807f, 0x1853,
+  0x8084, 0x1854,
+  0x8085, 0x1856,
+  0x8086, 0x1855,
+  0x8087, 0x0d39,
+  0x8089, 0x0cd1,
+  0x808b, 0x0fe4,
+  0x808c, 0x0d3d,
+  0x8093, 0x1858,
+  0x8096, 0x09bb,
+  0x8098, 0x0d9c,
+  0x809a, 0x1859,
+  0x809b, 0x1857,
+  0x809d, 0x060a,
+  0x80a1, 0x0788,
+  0x80a2, 0x08b6,
+  0x80a5, 0x0d82,
+  0x80a9, 0x075e,
+  0x80aa, 0x0e71,
+  0x80ac, 0x185c,
+  0x80ad, 0x185a,
+  0x80af, 0x07e0,
+  0x80b1, 0x07e1,
+  0x80b2, 0x04ad,
+  0x80b4, 0x0858,
+  0x80ba, 0x0d0f,
+  0x80c3, 0x04a3,
+  0x80c4, 0x1861,
+  0x80c6, 0x0b7e,
+  0x80cc, 0x0d0e,
+  0x80ce, 0x0b3b,
+  0x80d6, 0x1863,
+  0x80d9, 0x185f,
+  0x80da, 0x1862,
+  0x80db, 0x185d,
+  0x80dd, 0x1860,
+  0x80de, 0x0e54,
+  0x80e1, 0x0789,
+  0x80e4, 0x04c1,
+  0x80e5, 0x185e,
+  0x80ef, 0x1865,
+  0x80f1, 0x1866,
+  0x80f4, 0x0c91,
+  0x80f8, 0x06b3,
+  0x80fc, 0x1871,
+  0x80fd, 0x0cf3,
+  0x8102, 0x08b7,
+  0x8105, 0x06b4,
+  0x8106, 0x0a6c,
+  0x8107, 0x0fec,
+  0x8108, 0x0eba,
+  0x8109, 0x1864,
+  0x810a, 0x0a78,
+  0x811a, 0x066d,
+  0x811b, 0x1867,
+  0x8123, 0x1869,
+  0x8129, 0x1868,
+  0x812f, 0x186a,
+  0x8131, 0x0b64,
+  0x8133, 0x0cf4,
+  0x8139, 0x0bcd,
+  0x813e, 0x186e,
+  0x8146, 0x186d,
+  0x814b, 0x186b,
+  0x814e, 0x0a1b,
+  0x8150, 0x0dd7,
+  0x8151, 0x1870,
+  0x8153, 0x186f,
+  0x8154, 0x07e2,
+  0x8155, 0x0ff9,
+  0x815f, 0x1880,
+  0x8165, 0x1874,
+  0x816b, 0x091c,
+  0x816e, 0x1873,
+  0x8170, 0x080a,
+  0x8171, 0x1872,
+  0x8174, 0x1876,
+  0x8178, 0x0bce,
+  0x8179, 0x0df2,
+  0x817a, 0x0aa5,
+  0x817f, 0x0b3c,
+  0x8180, 0x187a,
+  0x8182, 0x187b,
+  0x8183, 0x1877,
+  0x8188, 0x1878,
+  0x818a, 0x1879,
+  0x818f, 0x07e3,
+  0x8193, 0x1881,
+  0x8195, 0x187d,
+  0x819a, 0x0dd8,
+  0x819c, 0x0e9a,
+  0x819d, 0x0d9a,
+  0x81a0, 0x187c,
+  0x81a3, 0x187f,
+  0x81a4, 0x187e,
+  0x81a8, 0x0e72,
+  0x81a9, 0x1882,
+  0x81b0, 0x1883,
+  0x81b3, 0x0ab9,
+  0x81b5, 0x1884,
+  0x81b8, 0x1886,
+  0x81ba, 0x188a,
+  0x81bd, 0x1887,
+  0x81be, 0x1885,
+  0x81bf, 0x0cf5,
+  0x81c0, 0x1888,
+  0x81c2, 0x1889,
+  0x81c6, 0x0532,
+  0x81c8, 0x1890,
+  0x81c9, 0x188b,
+  0x81cd, 0x188c,
+  0x81d1, 0x188d,
+  0x81d3, 0x0b01,
+  0x81d8, 0x188f,
+  0x81d9, 0x188e,
+  0x81da, 0x1891,
+  0x81df, 0x1892,
+  0x81e3, 0x0a09,
+  0x81e5, 0x0569,
+  0x81e7, 0x1894,
+  0x81e8, 0x0f9f,
+  0x81ea, 0x08d7,
+  0x81ed, 0x0937,
+  0x81f3, 0x08b8,
+  0x81f4, 0x0b95,
+  0x81fa, 0x1895,
+  0x81fc, 0x04d3,
+  0x81fe, 0x1897,
+  0x8201, 0x1898,
+  0x8205, 0x189a,
+  0x8207, 0x189b,
+  0x8208, 0x06b5,
+  0x8209, 0x13af,
+  0x820a, 0x189c,
+  0x820c, 0x0a89,
+  0x820d, 0x189d,
+  0x820e, 0x08f7,
+  0x8210, 0x189e,
+  0x8212, 0x1009,
+  0x8216, 0x189f,
+  0x8217, 0x0e2e,
+  0x8218, 0x0618,
+  0x821b, 0x0aa6,
+  0x821c, 0x0962,
+  0x821e, 0x0de3,
+  0x821f, 0x0938,
+  0x8229, 0x18a0,
+  0x822a, 0x07e4,
+  0x822b, 0x18a1,
+  0x822c, 0x0d60,
+  0x822e, 0x18af,
+  0x8233, 0x18a3,
+  0x8235, 0x0b29,
+  0x8236, 0x0d2b,
+  0x8237, 0x0773,
+  0x8238, 0x18a2,
+  0x8239, 0x0aa7,
+  0x8240, 0x18a4,
+  0x8247, 0x0c16,
+  0x8258, 0x18a6,
+  0x8259, 0x18a5,
+  0x825a, 0x18a8,
+  0x825d, 0x18a7,
+  0x825f, 0x18a9,
+  0x8262, 0x18ab,
+  0x8264, 0x18aa,
+  0x8266, 0x060b,
+  0x8268, 0x18ac,
+  0x826a, 0x18ad,
+  0x826e, 0x0821,
+  0x826f, 0x0f91,
+  0x8271, 0x18b0,
+  0x8272, 0x09ed,
+  0x8276, 0x0512,
+  0x8277, 0x18b1,
+  0x827e, 0x18b3,
+  0x828b, 0x04b6,
+  0x828d, 0x18b4,
+  0x8292, 0x18b5,
+  0x8299, 0x0dd9,
+  0x829d, 0x08f3,
+  0x829f, 0x18b7,
+  0x82a5, 0x0587,
+  0x82a6, 0x0476,
+  0x82ab, 0x18b6,
+  0x82ac, 0x18b9,
+  0x82ad, 0x0d04,
+  0x82af, 0x0a0a,
+  0x82b1, 0x0556,
+  0x82b3, 0x0e55,
+  0x82b8, 0x0733,
+  0x82b9, 0x06d4,
+  0x82bb, 0x18b8,
+  0x82bd, 0x056a,
+  0x82c5, 0x05df,
+  0x82d1, 0x0513,
+  0x82d2, 0x18bd,
+  0x82d3, 0x0fb2,
+  0x82d4, 0x0b3d,
+  0x82d7, 0x0db6,
+  0x82d9, 0x18c9,
+  0x82db, 0x0557,
+  0x82dc, 0x18c7,
+  0x82de, 0x18c5,
+  0x82df, 0x18bc,
+  0x82e1, 0x18ba,
+  0x82e3, 0x18bb,
+  0x82e5, 0x090f,
+  0x82e6, 0x06e4,
+  0x82e7, 0x0bb5,
+  0x82eb, 0x0ca9,
+  0x82f1, 0x04f3,
+  0x82f3, 0x18bf,
+  0x82f4, 0x18be,
+  0x82f9, 0x18c4,
+  0x82fa, 0x18c0,
+  0x82fb, 0x18c3,
+  0x8301, 0x2198,
+  0x8302, 0x0edc,
+  0x8303, 0x18c2,
+  0x8304, 0x0558,
+  0x8305, 0x05db,
+  0x8306, 0x18c6,
+  0x8309, 0x18c8,
+  0x830e, 0x072a,
+  0x8316, 0x18cc,
+  0x8317, 0x18d5,
+  0x831c, 0x046f,
+  0x8323, 0x18dd,
+  0x8328, 0x04b5,
+  0x832b, 0x18d4,
+  0x832f, 0x18d3,
+  0x8331, 0x18ce,
+  0x8332, 0x18cd,
+  0x8334, 0x18cb,
+  0x8335, 0x18ca,
+  0x8336, 0x0ba1,
+  0x8338, 0x0b5b,
+  0x8339, 0x18d0,
+  0x8340, 0x18cf,
+  0x8345, 0x18d2,
+  0x8349, 0x0af2,
+  0x834a, 0x072b,
+  0x834f, 0x04e3,
+  0x8350, 0x18d1,
+  0x8352, 0x07e5,
+  0x8358, 0x0af3,
+  0x8362, 0x2199,
+  0x8373, 0x18e3,
+  0x8375, 0x18e4,
+  0x8377, 0x0559,
+  0x837b, 0x052e,
+  0x837c, 0x18e1,
+  0x837f, 0x219a,
+  0x8385, 0x18d7,
+  0x8387, 0x18df,
+  0x8389, 0x18e6,
+  0x838a, 0x18e0,
+  0x838e, 0x18de,
+  0x8393, 0x18c1,
+  0x8396, 0x18dc,
+  0x839a, 0x18d8,
+  0x839e, 0x060c,
+  0x839f, 0x18da,
+  0x83a0, 0x18e5,
+  0x83a2, 0x18db,
+  0x83a8, 0x18e7,
+  0x83aa, 0x18d9,
+  0x83ab, 0x0d32,
+  0x83b1, 0x0f53,
+  0x83b5, 0x18e2,
+  0x83bd, 0x18f8,
+  0x83c1, 0x18f0,
+  0x83c5, 0x0a41,
+  0x83c7, 0x219b,
+  0x83ca, 0x0660,
+  0x83cc, 0x06d5,
+  0x83ce, 0x18eb,
+  0x83d3, 0x055b,
+  0x83d6, 0x09bc,
+  0x83d8, 0x18ee,
+  0x83dc, 0x084a,
+  0x83df, 0x0c4b,
+  0x83e0, 0x18f3,
+  0x83e9, 0x0e3e,
+  0x83eb, 0x18ea,
+  0x83ef, 0x055a,
+  0x83f0, 0x078a,
+  0x83f1, 0x0d9b,
+  0x83f2, 0x18f4,
+  0x83f4, 0x18e8,
+  0x83f6, 0x219c,
+  0x83f7, 0x18f1,
+  0x83fb, 0x18fb,
+  0x83fd, 0x18ec,
+  0x8403, 0x18ed,
+  0x8404, 0x0c92,
+  0x8407, 0x18f2,
+  0x840a, 0x1e7f,
+  0x840b, 0x18ef,
+  0x840c, 0x0e56,
+  0x840d, 0x18f5,
+  0x840e, 0x04a4,
+  0x8413, 0x18e9,
+  0x8420, 0x18f7,
+  0x8422, 0x18f6,
+  0x8429, 0x0d21,
+  0x842a, 0x18fd,
+  0x842c, 0x1908,
+  0x8431, 0x05dc,
+  0x8435, 0x190b,
+  0x8438, 0x18f9,
+  0x843c, 0x18fe,
+  0x843d, 0x0f58,
+  0x8446, 0x1907,
+  0x8448, 0x219d,
+  0x8449, 0x0f3f,
+  0x844e, 0x0f72,
+  0x8457, 0x0bb6,
+  0x845b, 0x05c9,
+  0x8461, 0x0de4,
+  0x8462, 0x190d,
+  0x8463, 0x0c79,
+  0x8466, 0x0475,
+  0x8469, 0x1906,
+  0x846b, 0x1902,
+  0x846c, 0x0af4,
+  0x846d, 0x18fc,
+  0x846e, 0x1904,
+  0x846f, 0x1909,
+  0x8471, 0x0ce2,
+  0x8475, 0x046e,
+  0x8477, 0x1901,
+  0x8479, 0x190a,
+  0x847a, 0x0dea,
+  0x8482, 0x1905,
+  0x8484, 0x1900,
+  0x848b, 0x09bd,
+  0x8490, 0x0939,
+  0x8494, 0x08d8,
+  0x8499, 0x0ee4,
+  0x849c, 0x0db9,
+  0x849f, 0x1910,
+  0x84a1, 0x1919,
+  0x84ad, 0x1903,
+  0x84b2, 0x05d5,
+  0x84b4, 0x219e,
+  0x84b8, 0x09e0,
+  0x84b9, 0x190e,
+  0x84bb, 0x1913,
+  0x84bc, 0x0af5,
+  0x84bf, 0x190f,
+  0x84c1, 0x1916,
+  0x84c4, 0x0b9d,
+  0x84c6, 0x1917,
+  0x84c9, 0x0f40,
+  0x84ca, 0x190c,
+  0x84cb, 0x0596,
+  0x84cd, 0x1912,
+  0x84d0, 0x1915,
+  0x84d1, 0x0eb8,
+  0x84d6, 0x1918,
+  0x84d9, 0x1911,
+  0x84da, 0x1914,
+  0x84dc, 0x20ab,
+  0x84ec, 0x0e57,
+  0x84ee, 0x0fc7,
+  0x84f4, 0x191c,
+  0x84fc, 0x1923,
+  0x84ff, 0x191b,
+  0x8500, 0x08ef,
+  0x8506, 0x18fa,
+  0x8511, 0x0e1e,
+  0x8513, 0x0eae,
+  0x8514, 0x1922,
+  0x8515, 0x1921,
+  0x8517, 0x191d,
+  0x851a, 0x04d8,
+  0x851f, 0x1920,
+  0x8521, 0x191a,
+  0x8523, 0x1e1a,
+  0x8526, 0x0bf1,
+  0x852c, 0x191f,
+  0x852d, 0x04c2,
+  0x8535, 0x0b02,
+  0x853d, 0x0e13,
+  0x853e, 0x1eb5,
+  0x8540, 0x1924,
+  0x8541, 0x1928,
+  0x8543, 0x0d6d,
+  0x8548, 0x1927,
+  0x8549, 0x09be,
+  0x854a, 0x08f5,
+  0x854b, 0x192a,
+  0x854e, 0x06b6,
+  0x8553, 0x219f,
+  0x8555, 0x192b,
+  0x8557, 0x0deb,
+  0x8558, 0x1926,
+  0x8559, 0x21a0,
+  0x855a, 0x18ff,
+  0x8563, 0x1925,
+  0x8568, 0x0ff5,
+  0x8569, 0x0c7a,
+  0x856a, 0x0de5,
+  0x856b, 0x21a1,
+  0x856d, 0x1932,
+  0x8577, 0x1938,
+  0x857e, 0x1939,
+  0x8580, 0x192c,
+  0x8584, 0x0d2c,
+  0x8587, 0x1936,
+  0x8588, 0x192e,
+  0x858a, 0x1930,
+  0x8590, 0x193a,
+  0x8591, 0x192f,
+  0x8594, 0x1933,
+  0x8597, 0x0514,
+  0x8599, 0x0cbd,
+  0x859b, 0x1934,
+  0x859c, 0x1937,
+  0x85a4, 0x192d,
+  0x85a6, 0x0aa8,
+  0x85a8, 0x1931,
+  0x85a9, 0x0875,
+  0x85aa, 0x0a0b,
+  0x85ab, 0x0706,
+  0x85ac, 0x0f00,
+  0x85ae, 0x0f05,
+  0x85af, 0x097c,
+  0x85b0, 0x21a3,
+  0x85b9, 0x193e,
+  0x85ba, 0x193c,
+  0x85c1, 0x0ff4,
+  0x85c9, 0x193b,
+  0x85cd, 0x0f5f,
+  0x85cf, 0x193d,
+  0x85d0, 0x193f,
+  0x85d5, 0x1940,
+  0x85dc, 0x1943,
+  0x85dd, 0x1941,
+  0x85e4, 0x0c7b,
+  0x85e5, 0x1942,
+  0x85e9, 0x0d61,
+  0x85ea, 0x1935,
+  0x85f7, 0x097d,
+  0x85f9, 0x1944,
+  0x85fa, 0x1949,
+  0x85fb, 0x0af6,
+  0x85fe, 0x1948,
+  0x8602, 0x1929,
+  0x8606, 0x194a,
+  0x8607, 0x0acb,
+  0x860a, 0x1945,
+  0x860b, 0x1947,
+  0x8613, 0x1946,
+  0x8616, 0x14d0,
+  0x8617, 0x14c1,
+  0x861a, 0x194c,
+  0x8622, 0x194b,
+  0x862d, 0x0f60,
+  0x862f, 0x16b1,
+  0x8630, 0x194d,
+  0x863f, 0x194e,
+  0x864d, 0x194f,
+  0x864e, 0x078b,
+  0x8650, 0x066e,
+  0x8654, 0x1951,
+  0x8655, 0x1094,
+  0x865a, 0x068f,
+  0x865c, 0x0f82,
+  0x865e, 0x06eb,
+  0x865f, 0x1952,
+  0x8667, 0x1953,
+  0x866b, 0x0bac,
+  0x8671, 0x1954,
+  0x8679, 0x0cd2,
+  0x867b, 0x047e,
+  0x868a, 0x0563,
+  0x868b, 0x1959,
+  0x8693, 0x1955,
+  0x8695, 0x088b,
+  0x86a3, 0x1956,
+  0x86a4, 0x0cf8,
+  0x86a9, 0x1957,
+  0x86ab, 0x1962,
+  0x86af, 0x195c,
+  0x86b0, 0x195f,
+  0x86b6, 0x195b,
+  0x86c4, 0x195d,
+  0x86c6, 0x195e,
+  0x86c7, 0x0904,
+  0x86c9, 0x1960,
+  0x86cb, 0x0b7f,
+  0x86cd, 0x072c,
+  0x86ce, 0x05a0,
+  0x86d4, 0x1963,
+  0x86d9, 0x059d,
+  0x86db, 0x1968,
+  0x86de, 0x1964,
+  0x86df, 0x1967,
+  0x86e4, 0x0d4e,
+  0x86e9, 0x1965,
+  0x86ec, 0x1966,
+  0x86ed, 0x0dba,
+  0x86ee, 0x0d6e,
+  0x86ef, 0x1969,
+  0x86f8, 0x0b5d,
+  0x86f9, 0x1973,
+  0x86fb, 0x196f,
+  0x86fe, 0x056b,
+  0x8700, 0x196d,
+  0x8702, 0x0e58,
+  0x8703, 0x196e,
+  0x8706, 0x196b,
+  0x8708, 0x196c,
+  0x8709, 0x1971,
+  0x870a, 0x1974,
+  0x870d, 0x1972,
+  0x8711, 0x1970,
+  0x8712, 0x196a,
+  0x8718, 0x0b96,
+  0x871a, 0x197b,
+  0x871c, 0x0eb6,
+  0x8725, 0x1979,
+  0x8729, 0x197a,
+  0x8734, 0x1975,
+  0x8737, 0x1977,
+  0x873b, 0x1978,
+  0x873f, 0x1976,
+  0x8749, 0x0a8a,
+  0x874b, 0x0fdf,
+  0x874c, 0x197f,
+  0x874e, 0x1980,
+  0x8753, 0x1986,
+  0x8755, 0x09f0,
+  0x8757, 0x1982,
+  0x8759, 0x1985,
+  0x875f, 0x197d,
+  0x8760, 0x197c,
+  0x8763, 0x1987,
+  0x8766, 0x055c,
+  0x8768, 0x1983,
+  0x876a, 0x1988,
+  0x876e, 0x1984,
+  0x8774, 0x1981,
+  0x8776, 0x0bcf,
+  0x8778, 0x197e,
+  0x877f, 0x0d1e,
+  0x8782, 0x198c,
+  0x878d, 0x0f25,
+  0x879f, 0x198b,
+  0x87a2, 0x198a,
+  0x87ab, 0x1993,
+  0x87af, 0x198d,
+  0x87b3, 0x1995,
+  0x87ba, 0x0f50,
+  0x87bb, 0x1998,
+  0x87bd, 0x198f,
+  0x87c0, 0x1990,
+  0x87c4, 0x1994,
+  0x87c6, 0x1997,
+  0x87c7, 0x1996,
+  0x87cb, 0x198e,
+  0x87d0, 0x1991,
+  0x87d2, 0x19a2,
+  0x87e0, 0x199b,
+  0x87ec, 0x1e23,
+  0x87ef, 0x1999,
+  0x87f2, 0x199a,
+  0x87f6, 0x199f,
+  0x87f9, 0x0588,
+  0x87fb, 0x065c,
+  0x87fe, 0x199e,
+  0x8805, 0x1989,
+  0x8807, 0x21a6,
+  0x880d, 0x199d,
+  0x880e, 0x19a1,
+  0x880f, 0x199c,
+  0x8811, 0x19a3,
+  0x8815, 0x19a5,
+  0x8816, 0x19a4,
+  0x881f, 0x1e85,
+  0x8821, 0x19a7,
+  0x8822, 0x19a6,
+  0x8823, 0x1961,
+  0x8827, 0x19ab,
+  0x8831, 0x19a8,
+  0x8836, 0x19a9,
+  0x8839, 0x19aa,
+  0x883b, 0x19ac,
+  0x8840, 0x0742,
+  0x8842, 0x19ae,
+  0x8844, 0x19ad,
+  0x8846, 0x093a,
+  0x884c, 0x07e6,
+  0x884d, 0x1524,
+  0x8852, 0x19af,
+  0x8853, 0x095b,
+  0x8857, 0x0597,
+  0x8859, 0x19b0,
+  0x885b, 0x04f4,
+  0x885d, 0x09bf,
+  0x885e, 0x19b1,
+  0x8861, 0x07e7,
+  0x8862, 0x19b2,
+  0x8863, 0x04a5,
+  0x8868, 0x0daf,
+  0x886b, 0x19b3,
+  0x8870, 0x0a30,
+  0x8872, 0x19ba,
+  0x8875, 0x19b7,
+  0x8877, 0x0bad,
+  0x887d, 0x19b8,
+  0x887e, 0x19b5,
+  0x887f, 0x06d6,
+  0x8881, 0x19b4,
+  0x8882, 0x19bb,
+  0x8888, 0x070c,
+  0x888b, 0x0b3e,
+  0x888d, 0x19c1,
+  0x8892, 0x19bd,
+  0x8896, 0x0b15,
+  0x8897, 0x19bc,
+  0x8899, 0x19bf,
+  0x889e, 0x19b6,
+  0x88a2, 0x19c0,
+  0x88a4, 0x19c2,
+  0x88ab, 0x0d83,
+  0x88ae, 0x19be,
+  0x88b0, 0x19c3,
+  0x88b1, 0x19c5,
+  0x88b4, 0x0787,
+  0x88b5, 0x19b9,
+  0x88b7, 0x0485,
+  0x88bf, 0x19c4,
+  0x88c1, 0x084b,
+  0x88c2, 0x0fbe,
+  0x88c3, 0x19c6,
+  0x88c5, 0x0af7,
+  0x88cf, 0x0f6a,
+  0x88d4, 0x19c8,
+  0x88d5, 0x0f1f,
+  0x88d8, 0x19c9,
+  0x88dc, 0x0e34,
+  0x88dd, 0x19cb,
+  0x88df, 0x0830,
+  0x88e1, 0x0f6b,
+  0x88e8, 0x19d0,
+  0x88f2, 0x19d1,
+  0x88f3, 0x09c0,
+  0x88f4, 0x19cf,
+  0x88f5, 0x21a7,
+  0x88f8, 0x0f51,
+  0x88f9, 0x19cc,
+  0x88fc, 0x19ce,
+  0x88fd, 0x0a61,
+  0x88fe, 0x0a44,
+  0x8902, 0x19cd,
+  0x8904, 0x19d2,
+  0x8907, 0x0df3,
+  0x890a, 0x19d4,
+  0x890c, 0x19d3,
+  0x8910, 0x05ca,
+  0x8912, 0x0e59,
+  0x8913, 0x19d5,
+  0x891c, 0x20a8,
+  0x891d, 0x19e1,
+  0x891e, 0x19d7,
+  0x8925, 0x19d8,
+  0x892a, 0x19d9,
+  0x8936, 0x19de,
+  0x8938, 0x19df,
+  0x893b, 0x19dd,
+  0x8941, 0x19db,
+  0x8943, 0x19d6,
+  0x8944, 0x19dc,
+  0x894c, 0x19e0,
+  0x894d, 0x1bd0,
+  0x8956, 0x0528,
+  0x895e, 0x19e3,
+  0x895f, 0x06d7,
+  0x8960, 0x19e2,
+  0x8964, 0x19e5,
+  0x8966, 0x19e4,
+  0x896a, 0x19e7,
+  0x896d, 0x19e6,
+  0x896f, 0x19e8,
+  0x8972, 0x093b,
+  0x8974, 0x19e9,
+  0x8977, 0x19ea,
+  0x897e, 0x19eb,
+  0x897f, 0x0a62,
+  0x8981, 0x0f41,
+  0x8983, 0x19ec,
+  0x8986, 0x0df4,
+  0x8987, 0x0cfc,
+  0x8988, 0x19ed,
+  0x898a, 0x19ee,
+  0x898b, 0x075f,
+  0x898f, 0x0646,
+  0x8993, 0x19ef,
+  0x8996, 0x08b9,
+  0x8997, 0x0cf7,
+  0x8998, 0x19f0,
+  0x899a, 0x05ae,
+  0x89a1, 0x19f1,
+  0x89a6, 0x19f3,
+  0x89a7, 0x0f61,
+  0x89a9, 0x19f2,
+  0x89aa, 0x0a0c,
+  0x89ac, 0x19f4,
+  0x89af, 0x19f5,
+  0x89b2, 0x19f6,
+  0x89b3, 0x060d,
+  0x89ba, 0x19f7,
+  0x89bd, 0x19f8,
+  0x89bf, 0x19f9,
+  0x89d2, 0x05af,
+  0x89da, 0x19fb,
+  0x89dc, 0x19fc,
+  0x89e3, 0x0572,
+  0x89e6, 0x09ee,
+  0x89e7, 0x19fe,
+  0x89f4, 0x19ff,
+  0x89f8, 0x1a00,
+  0x8a00, 0x0774,
+  0x8a02, 0x0c17,
+  0x8a03, 0x1a01,
+  0x8a08, 0x072d,
+  0x8a0a, 0x0a1c,
+  0x8a0c, 0x1a04,
+  0x8a0e, 0x0c7c,
+  0x8a10, 0x1a03,
+  0x8a12, 0x21a8,
+  0x8a13, 0x0707,
+  0x8a16, 0x1a02,
+  0x8a17, 0x0b57,
+  0x8a18, 0x0647,
+  0x8a1b, 0x1a05,
+  0x8a1d, 0x1a06,
+  0x8a1f, 0x09c1,
+  0x8a23, 0x0743,
+  0x8a25, 0x1a07,
+  0x8a2a, 0x0e5a,
+  0x8a2d, 0x0a83,
+  0x8a31, 0x0690,
+  0x8a33, 0x0f01,
+  0x8a34, 0x0acc,
+  0x8a36, 0x1a08,
+  0x8a37, 0x21a9,
+  0x8a3a, 0x0a0d,
+  0x8a3b, 0x0bae,
+  0x8a3c, 0x09c2,
+  0x8a41, 0x1a09,
+  0x8a46, 0x1a0c,
+  0x8a48, 0x1a0d,
+  0x8a50, 0x082e,
+  0x8a51, 0x0b22,
+  0x8a52, 0x1a0b,
+  0x8a54, 0x09c3,
+  0x8a55, 0x0db0,
+  0x8a5b, 0x1a0a,
+  0x8a5e, 0x08ba,
+  0x8a60, 0x04f5,
+  0x8a62, 0x1a11,
+  0x8a63, 0x072e,
+  0x8a66, 0x08bc,
+  0x8a69, 0x08bb,
+  0x8a6b, 0x0ff3,
+  0x8a6c, 0x1a10,
+  0x8a6d, 0x1a0f,
+  0x8a6e, 0x0aa9,
+  0x8a70, 0x0667,
+  0x8a71, 0x0fe9,
+  0x8a72, 0x0598,
+  0x8a73, 0x09c4,
+  0x8a79, 0x21aa,
+  0x8a7c, 0x1a0e,
+  0x8a82, 0x1a13,
+  0x8a84, 0x1a14,
+  0x8a85, 0x1a12,
+  0x8a87, 0x078c,
+  0x8a89, 0x0f2a,
+  0x8a8c, 0x08bd,
+  0x8a8d, 0x0cdd,
+  0x8a91, 0x1a17,
+  0x8a93, 0x0a64,
+  0x8a95, 0x0b80,
+  0x8a98, 0x0f20,
+  0x8a9a, 0x1a1a,
+  0x8a9e, 0x07a0,
+  0x8aa0, 0x0a63,
+  0x8aa1, 0x1a16,
+  0x8aa3, 0x1a1b,
+  0x8aa4, 0x07a1,
+  0x8aa5, 0x1a18,
+  0x8aa7, 0x21ab,
+  0x8aa8, 0x1a15,
+  0x8aac, 0x0a86,
+  0x8aad, 0x0ca1,
+  0x8ab0, 0x0b6d,
+  0x8ab2, 0x055d,
+  0x8ab9, 0x0d84,
+  0x8abc, 0x065d,
+  0x8abe, 0x21ac,
+  0x8abf, 0x0bd0,
+  0x8ac2, 0x1a1e,
+  0x8ac4, 0x1a1c,
+  0x8ac7, 0x0b8a,
+  0x8acb, 0x0a65,
+  0x8acc, 0x060e,
+  0x8acd, 0x1a1d,
+  0x8acf, 0x0a21,
+  0x8ad2, 0x0f92,
+  0x8ad6, 0x0fe6,
+  0x8ada, 0x1a1f,
+  0x8adb, 0x1a2a,
+  0x8adc, 0x0bd1,
+  0x8ade, 0x1a29,
+  0x8adf, 0x21ad,
+  0x8ae0, 0x1a26,
+  0x8ae1, 0x1a2e,
+  0x8ae2, 0x1a27,
+  0x8ae4, 0x1a23,
+  0x8ae6, 0x0c18,
+  0x8ae7, 0x1a22,
+  0x8aeb, 0x1a20,
+  0x8aed, 0x0f0b,
+  0x8aee, 0x08be,
+  0x8af1, 0x1a24,
+  0x8af3, 0x1a21,
+  0x8af6, 0x21af,
+  0x8af7, 0x1a28,
+  0x8af8, 0x097e,
+  0x8afa, 0x0775,
+  0x8afe, 0x0b5a,
+  0x8b00, 0x0e73,
+  0x8b01, 0x04fc,
+  0x8b02, 0x04a6,
+  0x8b04, 0x0c7d,
+  0x8b07, 0x1a2c,
+  0x8b0c, 0x1a2b,
+  0x8b0e, 0x0cbe,
+  0x8b10, 0x1a30,
+  0x8b14, 0x1a25,
+  0x8b16, 0x1a2f,
+  0x8b17, 0x1a31,
+  0x8b19, 0x0760,
+  0x8b1a, 0x1a2d,
+  0x8b1b, 0x07e8,
+  0x8b1d, 0x0901,
+  0x8b20, 0x1a32,
+  0x8b21, 0x0f42,
+  0x8b26, 0x1a35,
+  0x8b28, 0x1a38,
+  0x8b2b, 0x1a36,
+  0x8b2c, 0x0da7,
+  0x8b33, 0x1a33,
+  0x8b39, 0x06d8,
+  0x8b3e, 0x1a37,
+  0x8b41, 0x1a39,
+  0x8b49, 0x1a3d,
+  0x8b4c, 0x1a3a,
+  0x8b4e, 0x1a3c,
+  0x8b4f, 0x1a3b,
+  0x8b53, 0x21b0,
+  0x8b56, 0x1a3e,
+  0x8b58, 0x08dd,
+  0x8b5a, 0x1a40,
+  0x8b5b, 0x1a3f,
+  0x8b5c, 0x0dda,
+  0x8b5f, 0x1a42,
+  0x8b66, 0x072f,
+  0x8b6b, 0x1a41,
+  0x8b6c, 0x1a43,
+  0x8b6f, 0x1a44,
+  0x8b70, 0x065e,
+  0x8b71, 0x182e,
+  0x8b72, 0x09e1,
+  0x8b74, 0x1a45,
+  0x8b77, 0x07a2,
+  0x8b7d, 0x1a46,
+  0x8b7f, 0x21b1,
+  0x8b80, 0x1a47,
+  0x8b83, 0x088c,
+  0x8b8a, 0x13d3,
+  0x8b8c, 0x1a48,
+  0x8b8e, 0x1a49,
+  0x8b90, 0x093c,
+  0x8b92, 0x1a4a,
+  0x8b96, 0x1a4c,
+  0x8b99, 0x1a4d,
+  0x8c37, 0x0b69,
+  0x8c3a, 0x1a4f,
+  0x8c3f, 0x1a51,
+  0x8c41, 0x1a50,
+  0x8c46, 0x0c7e,
+  0x8c48, 0x1a52,
+  0x8c4a, 0x0e5b,
+  0x8c4c, 0x1a53,
+  0x8c4e, 0x1a54,
+  0x8c50, 0x1a55,
+  0x8c55, 0x1a56,
+  0x8c5a, 0x0cb2,
+  0x8c61, 0x09c5,
+  0x8c62, 0x1a57,
+  0x8c6a, 0x07fd,
+  0x8c6b, 0x1007,
+  0x8c6c, 0x1a58,
+  0x8c78, 0x1a59,
+  0x8c79, 0x0db1,
+  0x8c7a, 0x1a5a,
+  0x8c7c, 0x1a62,
+  0x8c82, 0x1a5b,
+  0x8c85, 0x1a5d,
+  0x8c89, 0x1a5c,
+  0x8c8a, 0x1a5e,
+  0x8c8c, 0x0e74,
+  0x8c8d, 0x1a5f,
+  0x8c94, 0x1a61,
+  0x8c98, 0x1a63,
+  0x8c9d, 0x058b,
+  0x8c9e, 0x0c03,
+  0x8ca0, 0x0ddb,
+  0x8ca1, 0x0852,
+  0x8ca2, 0x07e9,
+  0x8ca7, 0x0dc1,
+  0x8ca8, 0x055f,
+  0x8ca9, 0x0d62,
+  0x8caa, 0x1a66,
+  0x8cab, 0x060f,
+  0x8cac, 0x0a79,
+  0x8cad, 0x1a65,
+  0x8cae, 0x1a6a,
+  0x8caf, 0x0bb7,
+  0x8cb0, 0x0eef,
+  0x8cb2, 0x1a68,
+  0x8cb4, 0x0648,
+  0x8cb6, 0x1a6b,
+  0x8cb7, 0x0d19,
+  0x8cb8, 0x0b3f,
+  0x8cbb, 0x0d85,
+  0x8cbc, 0x0c37,
+  0x8cbd, 0x1a67,
+  0x8cbf, 0x0e75,
+  0x8cc0, 0x056c,
+  0x8cc1, 0x1a6d,
+  0x8cc2, 0x0fce,
+  0x8cc3, 0x0bde,
+  0x8cc4, 0x0feb,
+  0x8cc7, 0x08bf,
+  0x8cc8, 0x1a6c,
+  0x8cca, 0x0b11,
+  0x8ccd, 0x1a7d,
+  0x8cce, 0x0aaa,
+  0x8cd1, 0x0cd0,
+  0x8cd3, 0x0dc2,
+  0x8cda, 0x1a70,
+  0x8cdb, 0x088d,
+  0x8cdc, 0x08c0,
+  0x8cde, 0x09c6,
+  0x8ce0, 0x0d1b,
+  0x8ce2, 0x0761,
+  0x8ce3, 0x1a6f,
+  0x8ce4, 0x1a6e,
+  0x8ce6, 0x0ddc,
+  0x8cea, 0x08ed,
+  0x8ced, 0x0c4c,
+  0x8cf0, 0x21b2,
+  0x8cf4, 0x21b3,
+  0x8cfa, 0x1a72,
+  0x8cfc, 0x07ea,
+  0x8cfd, 0x1a71,
+  0x8d04, 0x1a74,
+  0x8d07, 0x1a77,
+  0x8d08, 0x0b03,
+  0x8d0a, 0x1a76,
+  0x8d0b, 0x0622,
+  0x8d0d, 0x1a79,
+  0x8d0f, 0x1a78,
+  0x8d10, 0x1a7a,
+  0x8d12, 0x21b4,
+  0x8d13, 0x1a7c,
+  0x8d14, 0x1a7e,
+  0x8d16, 0x1a7f,
+  0x8d64, 0x0a7a,
+  0x8d66, 0x08fb,
+  0x8d67, 0x1a80,
+  0x8d6b, 0x05b0,
+  0x8d6d, 0x1a81,
+  0x8d70, 0x0af8,
+  0x8d71, 0x1a82,
+  0x8d73, 0x1a83,
+  0x8d74, 0x0ddd,
+  0x8d76, 0x21b5,
+  0x8d77, 0x0649,
+  0x8d81, 0x1a84,
+  0x8d85, 0x0bd2,
+  0x8d8a, 0x04fd,
+  0x8d99, 0x1a85,
+  0x8da3, 0x091d,
+  0x8da8, 0x0a3c,
+  0x8db3, 0x0b0d,
+  0x8dba, 0x1a88,
+  0x8dbe, 0x1a87,
+  0x8dc2, 0x1a86,
+  0x8dcb, 0x1a8e,
+  0x8dcc, 0x1a8c,
+  0x8dcf, 0x1a89,
+  0x8dd6, 0x1a8b,
+  0x8dda, 0x1a8a,
+  0x8ddb, 0x1a8d,
+  0x8ddd, 0x0691,
+  0x8ddf, 0x1a91,
+  0x8de1, 0x0a7b,
+  0x8de3, 0x1a92,
+  0x8de8, 0x078d,
+  0x8dea, 0x1a8f,
+  0x8def, 0x0fcf,
+  0x8df3, 0x0bd3,
+  0x8df5, 0x0aab,
+  0x8dfc, 0x1a93,
+  0x8dff, 0x1a96,
+  0x8e08, 0x1a94,
+  0x8e0a, 0x0f43,
+  0x8e0f, 0x0c7f,
+  0x8e10, 0x1a99,
+  0x8e1d, 0x1a97,
+  0x8e1f, 0x1a9a,
+  0x8e2a, 0x1aa8,
+  0x8e30, 0x1a9d,
+  0x8e34, 0x1a9e,
+  0x8e35, 0x1a9c,
+  0x8e42, 0x1a9b,
+  0x8e44, 0x0c19,
+  0x8e47, 0x1aa0,
+  0x8e48, 0x1aa4,
+  0x8e49, 0x1aa1,
+  0x8e4a, 0x1a9f,
+  0x8e4c, 0x1aa2,
+  0x8e50, 0x1aa3,
+  0x8e55, 0x1aaa,
+  0x8e59, 0x1aa5,
+  0x8e5f, 0x0a7c,
+  0x8e60, 0x1aa7,
+  0x8e63, 0x1aa9,
+  0x8e64, 0x1aa6,
+  0x8e72, 0x1aac,
+  0x8e74, 0x093d,
+  0x8e76, 0x1aab,
+  0x8e7c, 0x1aad,
+  0x8e81, 0x1aae,
+  0x8e84, 0x1ab1,
+  0x8e85, 0x1ab0,
+  0x8e87, 0x1aaf,
+  0x8e8a, 0x1ab3,
+  0x8e8b, 0x1ab2,
+  0x8e8d, 0x0f02,
+  0x8e91, 0x1ab5,
+  0x8e93, 0x1ab4,
+  0x8e94, 0x1ab6,
+  0x8e99, 0x1ab7,
+  0x8ea1, 0x1ab9,
+  0x8eaa, 0x1ab8,
+  0x8eab, 0x0a0e,
+  0x8eac, 0x1aba,
+  0x8eaf, 0x06e5,
+  0x8eb0, 0x1abb,
+  0x8eb1, 0x1abd,
+  0x8ebe, 0x1abe,
+  0x8ec0, 0x1def,
+  0x8ec5, 0x1abf,
+  0x8ec6, 0x1abc,
+  0x8ec8, 0x1ac0,
+  0x8eca, 0x0902,
+  0x8ecb, 0x1ac1,
+  0x8ecc, 0x064a,
+  0x8ecd, 0x0709,
+  0x8ecf, 0x21b7,
+  0x8ed2, 0x0762,
+  0x8edb, 0x1ac2,
+  0x8edf, 0x0cc8,
+  0x8ee2, 0x0c38,
+  0x8ee3, 0x1ac3,
+  0x8eeb, 0x1ac6,
+  0x8ef8, 0x08e0,
+  0x8efb, 0x1ac5,
+  0x8efc, 0x1ac4,
+  0x8efd, 0x0730,
+  0x8efe, 0x1ac7,
+  0x8f03, 0x05b1,
+  0x8f05, 0x1ac9,
+  0x8f09, 0x084c,
+  0x8f0a, 0x1ac8,
+  0x8f0c, 0x1ad1,
+  0x8f12, 0x1acb,
+  0x8f13, 0x1acd,
+  0x8f14, 0x0e35,
+  0x8f15, 0x1aca,
+  0x8f19, 0x1acc,
+  0x8f1b, 0x1ad0,
+  0x8f1c, 0x1ace,
+  0x8f1d, 0x064b,
+  0x8f1f, 0x1acf,
+  0x8f26, 0x1ad2,
+  0x8f29, 0x0d10,
+  0x8f2a, 0x0fa0,
+  0x8f2f, 0x093e,
+  0x8f33, 0x1ad3,
+  0x8f38, 0x0f0c,
+  0x8f39, 0x1ad5,
+  0x8f3b, 0x1ad4,
+  0x8f3e, 0x1ad8,
+  0x8f3f, 0x0f2b,
+  0x8f42, 0x1ad7,
+  0x8f44, 0x05cb,
+  0x8f45, 0x1ad6,
+  0x8f46, 0x1adb,
+  0x8f49, 0x1ada,
+  0x8f4c, 0x1ad9,
+  0x8f4d, 0x0c2c,
+  0x8f4e, 0x1adc,
+  0x8f57, 0x1add,
+  0x8f5c, 0x1ade,
+  0x8f5f, 0x07fe,
+  0x8f61, 0x06fb,
+  0x8f62, 0x1adf,
+  0x8f9b, 0x0a0f,
+  0x8f9c, 0x1ae2,
+  0x8f9e, 0x08d9,
+  0x8f9f, 0x1ae3,
+  0x8fa3, 0x1ae4,
+  0x8fa7, 0x10b6,
+  0x8fa8, 0x10b5,
+  0x8fad, 0x1ae5,
+  0x8fae, 0x17ff,
+  0x8faf, 0x1ae6,
+  0x8fb0, 0x0b62,
+  0x8fb1, 0x09f1,
+  0x8fb2, 0x0cf6,
+  0x8fb7, 0x1ae7,
+  0x8fba, 0x0e25,
+  0x8fbb, 0x0bf0,
+  0x8fbc, 0x0810,
+  0x8fbf, 0x0b67,
+  0x8fc2, 0x04cc,
+  0x8fc4, 0x0ea6,
+  0x8fc5, 0x0a1d,
+  0x8fce, 0x0734,
+  0x8fd1, 0x06d9,
+  0x8fd4, 0x0e26,
+  0x8fda, 0x1ae8,
+  0x8fe2, 0x1aea,
+  0x8fe5, 0x1ae9,
+  0x8fe6, 0x0560,
+  0x8fe9, 0x0cce,
+  0x8fea, 0x1aeb,
+  0x8feb, 0x0d2d,
+  0x8fed, 0x0c2d,
+  0x8fef, 0x1aec,
+  0x8ff0, 0x095c,
+  0x8ff4, 0x1aee,
+  0x8ff7, 0x0ece,
+  0x8ff8, 0x1afd,
+  0x8ff9, 0x1af0,
+  0x8ffd, 0x0be5,
+  0x9000, 0x0b40,
+  0x9001, 0x0af9,
+  0x9003, 0x0c80,
+  0x9005, 0x1aef,
+  0x9006, 0x066f,
+  0x900b, 0x1af8,
+  0x900d, 0x1af5,
+  0x900e, 0x1b02,
+  0x900f, 0x0c81,
+  0x9010, 0x0b9e,
+  0x9011, 0x1af2,
+  0x9013, 0x0c1a,
+  0x9014, 0x0c4d,
+  0x9015, 0x1af3,
+  0x9016, 0x1af7,
+  0x9017, 0x0a26,
+  0x9019, 0x0d1d,
+  0x901a, 0x0be8,
+  0x901d, 0x0a66,
+  0x901e, 0x1af6,
+  0x901f, 0x0b0e,
+  0x9020, 0x0b04,
+  0x9021, 0x1af4,
+  0x9022, 0x046d,
+  0x9023, 0x0fc8,
+  0x9027, 0x1af9,
+  0x902e, 0x0b41,
+  0x9031, 0x093f,
+  0x9032, 0x0a10,
+  0x9035, 0x1afb,
+  0x9036, 0x1afa,
+  0x9038, 0x04b3,
+  0x9039, 0x1afc,
+  0x903c, 0x0da1,
+  0x903e, 0x1b04,
+  0x9041, 0x0cb3,
+  0x9042, 0x0a31,
+  0x9045, 0x0b97,
+  0x9047, 0x06f0,
+  0x9049, 0x1b03,
+  0x904a, 0x0f21,
+  0x904b, 0x04e1,
+  0x904d, 0x0e27,
+  0x904e, 0x0561,
+  0x904f, 0x1afe,
+  0x9053, 0x0c93,
+  0x9054, 0x0b61,
+  0x9055, 0x04a7,
+  0x9056, 0x1b05,
+  0x9058, 0x1b06,
+  0x9059, 0x1d34,
+  0x905c, 0x0b1d,
+  0x905e, 0x1b07,
+  0x9060, 0x0515,
+  0x9061, 0x0ace,
+  0x9063, 0x0763,
+  0x9065, 0x0f44,
+  0x9067, 0x21ba,
+  0x9068, 0x1b08,
+  0x9069, 0x0c26,
+  0x906d, 0x0afa,
+  0x906e, 0x0903,
+  0x906f, 0x1b09,
+  0x9072, 0x1b0c,
+  0x9075, 0x096f,
+  0x9076, 0x1b0a,
+  0x9077, 0x0aad,
+  0x9078, 0x0aac,
+  0x907a, 0x04a8,
+  0x907c, 0x0f93,
+  0x907d, 0x1b0e,
+  0x907f, 0x0d86,
+  0x9080, 0x1b10,
+  0x9081, 0x1b0f,
+  0x9082, 0x1b0d,
+  0x9083, 0x1737,
+  0x9084, 0x0610,
+  0x9087, 0x1aed,
+  0x9089, 0x1b12,
+  0x908a, 0x1b11,
+  0x908f, 0x1b13,
+  0x9091, 0x0f22,
+  0x90a3, 0x0cb9,
+  0x90a6, 0x0e5c,
+  0x90a8, 0x1b14,
+  0x90aa, 0x0905,
+  0x90af, 0x1b15,
+  0x90b1, 0x1b16,
+  0x90b5, 0x1b17,
+  0x90b8, 0x0c1b,
+  0x90c1, 0x04ae,
+  0x90ca, 0x07eb,
+  0x90ce, 0x0fe0,
+  0x90db, 0x1b1b,
+  0x90de, 0x21bb,
+  0x90e1, 0x070a,
+  0x90e2, 0x1b18,
+  0x90e4, 0x1b19,
+  0x90e8, 0x0de6,
+  0x90ed, 0x05b2,
+  0x90f5, 0x0f23,
+  0x90f7, 0x06b7,
+  0x90fd, 0x0c4e,
+  0x9102, 0x1b1c,
+  0x9112, 0x1b1d,
+  0x9115, 0x21bd,
+  0x9119, 0x1b1e,
+  0x9127, 0x21be,
+  0x912d, 0x0c1c,
+  0x9130, 0x1b20,
+  0x9132, 0x1b1f,
+  0x9149, 0x0cab,
+  0x914a, 0x1b21,
+  0x914b, 0x0940,
+  0x914c, 0x090c,
+  0x914d, 0x0d11,
+  0x914e, 0x0baf,
+  0x9152, 0x091e,
+  0x9154, 0x0a32,
+  0x9156, 0x1b22,
+  0x9158, 0x1b23,
+  0x9162, 0x0a23,
+  0x9163, 0x1b24,
+  0x9165, 0x1b25,
+  0x9169, 0x1b26,
+  0x916a, 0x0f59,
+  0x916c, 0x0941,
+  0x9172, 0x1b28,
+  0x9173, 0x1b27,
+  0x9175, 0x07ec,
+  0x9177, 0x0805,
+  0x9178, 0x088e,
+  0x9182, 0x1b2b,
+  0x9187, 0x0970,
+  0x9189, 0x1b2a,
+  0x918b, 0x1b29,
+  0x918d, 0x0b49,
+  0x9190, 0x07a3,
+  0x9192, 0x0a67,
+  0x9197, 0x0d44,
+  0x919c, 0x0943,
+  0x91a2, 0x1b2c,
+  0x91a4, 0x09c7,
+  0x91aa, 0x1b2f,
+  0x91ab, 0x1b2d,
+  0x91ac, 0x1e1b,
+  0x91af, 0x1b2e,
+  0x91b1, 0x1e61,
+  0x91b4, 0x1b31,
+  0x91b5, 0x1b30,
+  0x91b8, 0x09e2,
+  0x91ba, 0x1b32,
+  0x91c0, 0x1b33,
+  0x91c6, 0x0d64,
+  0x91c7, 0x0843,
+  0x91c8, 0x090d,
+  0x91c9, 0x1b35,
+  0x91cb, 0x1b36,
+  0x91cc, 0x0f6c,
+  0x91cd, 0x094f,
+  0x91ce, 0x0efa,
+  0x91cf, 0x0f94,
+  0x91d0, 0x1b37,
+  0x91d1, 0x06da,
+  0x91d6, 0x1b38,
+  0x91d7, 0x21c0,
+  0x91d8, 0x0c1d,
+  0x91da, 0x21bf,
+  0x91db, 0x1b3b,
+  0x91dc, 0x05d6,
+  0x91dd, 0x0a11,
+  0x91de, 0x21c1,
+  0x91df, 0x1b39,
+  0x91e1, 0x1b3a,
+  0x91e3, 0x0bfc,
+  0x91e4, 0x21c4,
+  0x91e6, 0x0e83,
+  0x91e7, 0x06f4,
+  0x91ed, 0x21c2,
+  0x91f5, 0x1b3d,
+  0x91fc, 0x1b3c,
+  0x91ff, 0x1b40,
+  0x9206, 0x21c6,
+  0x920a, 0x21c8,
+  0x920d, 0x0cb7,
+  0x920e, 0x05a1,
+  0x9210, 0x21c7,
+  0x9211, 0x1b44,
+  0x9214, 0x1b41,
+  0x9215, 0x1b43,
+  0x921e, 0x1b3f,
+  0x9229, 0x1b8a,
+  0x922c, 0x1b42,
+  0x9234, 0x0fb3,
+  0x9237, 0x078e,
+  0x9239, 0x21cf,
+  0x923a, 0x21c9,
+  0x923c, 0x21cb,
+  0x923f, 0x1b4c,
+  0x9240, 0x21ca,
+  0x9244, 0x0c2e,
+  0x9245, 0x1b47,
+  0x9248, 0x1b4a,
+  0x9249, 0x1b48,
+  0x924b, 0x1b4d,
+  0x924e, 0x21cc,
+  0x9250, 0x1b4e,
+  0x9251, 0x21ce,
+  0x9257, 0x1b46,
+  0x9259, 0x21cd,
+  0x925a, 0x1b53,
+  0x925b, 0x0516,
+  0x925e, 0x1b45,
+  0x9262, 0x0d41,
+  0x9264, 0x1b49,
+  0x9266, 0x09c8,
+  0x9267, 0x21d0,
+  0x9271, 0x07ed,
+  0x9277, 0x21d2,
+  0x927e, 0x0e76,
+  0x9280, 0x06dc,
+  0x9283, 0x0950,
+  0x9285, 0x0c94,
+  0x9288, 0x20aa,
+  0x9291, 0x0aaf,
+  0x9293, 0x1b51,
+  0x9295, 0x1b4b,
+  0x9296, 0x1b50,
+  0x9298, 0x0ecf,
+  0x929a, 0x0bd4,
+  0x929b, 0x1b52,
+  0x929c, 0x1b4f,
+  0x92a7, 0x21d1,
+  0x92ad, 0x0aae,
+  0x92b7, 0x1b56,
+  0x92b9, 0x1b55,
+  0x92cf, 0x1b54,
+  0x92d0, 0x21d7,
+  0x92d2, 0x0e5d,
+  0x92d3, 0x21db,
+  0x92d5, 0x21d9,
+  0x92d7, 0x21d5,
+  0x92d9, 0x21d6,
+  0x92e0, 0x21da,
+  0x92e4, 0x0985,
+  0x92e7, 0x21d4,
+  0x92e9, 0x1b57,
+  0x92ea, 0x0e2f,
+  0x92ed, 0x04f6,
+  0x92f2, 0x0db8,
+  0x92f3, 0x0bb0,
+  0x92f8, 0x0692,
+  0x92f9, 0x20b0,
+  0x92fa, 0x1b59,
+  0x92fb, 0x21de,
+  0x92fc, 0x07ef,
+  0x92ff, 0x21e1,
+  0x9302, 0x21e3,
+  0x9306, 0x087a,
+  0x930f, 0x1b58,
+  0x9310, 0x0a33,
+  0x9318, 0x0a34,
+  0x9319, 0x1b5c,
+  0x931a, 0x1b5e,
+  0x931d, 0x21e2,
+  0x931e, 0x21e0,
+  0x9320, 0x09e3,
+  0x9321, 0x21dd,
+  0x9322, 0x1b5d,
+  0x9323, 0x1b5f,
+  0x9325, 0x21dc,
+  0x9326, 0x06cb,
+  0x9328, 0x0db7,
+  0x932b, 0x090e,
+  0x932c, 0x0fc9,
+  0x932e, 0x1b5b,
+  0x932f, 0x0868,
+  0x9332, 0x0fe5,
+  0x9335, 0x1b61,
+  0x933a, 0x1b60,
+  0x933b, 0x1b62,
+  0x9344, 0x1b5a,
+  0x9348, 0x20a9,
+  0x934b, 0x0cc1,
+  0x934d, 0x0c4f,
+  0x9354, 0x0bf3,
+  0x9356, 0x1b67,
+  0x9357, 0x21e5,
+  0x935b, 0x0b81,
+  0x935c, 0x1b63,
+  0x9360, 0x1b64,
+  0x936c, 0x0703,
+  0x936e, 0x1b66,
+  0x9370, 0x21e4,
+  0x9375, 0x0764,
+  0x937c, 0x1b65,
+  0x937e, 0x09c9,
+  0x938c, 0x05d7,
+  0x9394, 0x1b6b,
+  0x9396, 0x082f,
+  0x9397, 0x0afb,
+  0x939a, 0x0be6,
+  0x93a4, 0x21e6,
+  0x93a7, 0x0599,
+  0x93ac, 0x1b69,
+  0x93ae, 0x0bdf,
+  0x93b0, 0x1b68,
+  0x93b9, 0x1b6c,
+  0x93c3, 0x1b72,
+  0x93c6, 0x21e7,
+  0x93c8, 0x1b75,
+  0x93d0, 0x1b74,
+  0x93d1, 0x0c27,
+  0x93d6, 0x1b6d,
+  0x93d8, 0x1b71,
+  0x93dd, 0x1b73,
+  0x93de, 0x21e8,
+  0x93e1, 0x06b8,
+  0x93e4, 0x1b76,
+  0x93e5, 0x1b70,
+  0x93e8, 0x1b6f,
+  0x93f8, 0x21e9,
+  0x9403, 0x1b7a,
+  0x9407, 0x1b7b,
+  0x9410, 0x1b7c,
+  0x9413, 0x1b79,
+  0x9414, 0x1b78,
+  0x9418, 0x09ca,
+  0x9419, 0x0c82,
+  0x941a, 0x1b77,
+  0x9421, 0x1b80,
+  0x942b, 0x1b7e,
+  0x9431, 0x21ea,
+  0x9435, 0x1b7f,
+  0x9436, 0x1b7d,
+  0x9438, 0x0b58,
+  0x943a, 0x1b81,
+  0x9441, 0x1b82,
+  0x9444, 0x1b84,
+  0x9445, 0x21eb,
+  0x9448, 0x21ec,
+  0x9451, 0x0611,
+  0x9452, 0x1b83,
+  0x9453, 0x0f06,
+  0x945a, 0x1b8f,
+  0x945b, 0x1b85,
+  0x945e, 0x1b88,
+  0x9460, 0x1b86,
+  0x9462, 0x1b87,
+  0x946a, 0x1b89,
+  0x9470, 0x1b8b,
+  0x9475, 0x1b8c,
+  0x9477, 0x1b8d,
+  0x947c, 0x1b90,
+  0x947d, 0x1b8e,
+  0x947e, 0x1b91,
+  0x947f, 0x1b93,
+  0x9481, 0x1b92,
+  0x9577, 0x0bd5,
+  0x9580, 0x0ef3,
+  0x9582, 0x1b94,
+  0x9583, 0x0ab0,
+  0x9587, 0x1b95,
+  0x9589, 0x0e14,
+  0x958a, 0x1b96,
+  0x958b, 0x0589,
+  0x958f, 0x04de,
+  0x9591, 0x0613,
+  0x9592, 0x21ed,
+  0x9593, 0x0612,
+  0x9594, 0x1b97,
+  0x9596, 0x1b98,
+  0x9598, 0x1b99,
+  0x95a0, 0x1b9b,
+  0x95a2, 0x0614,
+  0x95a3, 0x05b3,
+  0x95a4, 0x07f0,
+  0x95a5, 0x0d4a,
+  0x95a7, 0x1b9d,
+  0x95a8, 0x1b9c,
+  0x95ad, 0x1b9e,
+  0x95b2, 0x04fe,
+  0x95b9, 0x1ba1,
+  0x95bb, 0x1ba0,
+  0x95bc, 0x1b9f,
+  0x95be, 0x1ba2,
+  0x95c3, 0x1ba5,
+  0x95c7, 0x048b,
+  0x95ca, 0x1ba3,
+  0x95cc, 0x1ba7,
+  0x95cd, 0x1ba6,
+  0x95d4, 0x1ba9,
+  0x95d5, 0x1ba8,
+  0x95d6, 0x1baa,
+  0x95d8, 0x0c86,
+  0x95dc, 0x1bab,
+  0x95e1, 0x1bac,
+  0x95e2, 0x1bae,
+  0x95e5, 0x1bad,
+  0x961c, 0x0dde,
+  0x9621, 0x1baf,
+  0x9628, 0x1bb0,
+  0x962a, 0x0855,
+  0x962e, 0x1bb1,
+  0x9632, 0x0e77,
+  0x963b, 0x0acd,
+  0x963f, 0x0468,
+  0x9640, 0x0b2b,
+  0x9642, 0x1bb3,
+  0x9644, 0x0ddf,
+  0x964b, 0x1bb6,
+  0x964c, 0x1bb4,
+  0x964d, 0x07f1,
+  0x964f, 0x1bb5,
+  0x9650, 0x0776,
+  0x965b, 0x0e15,
+  0x965c, 0x1bb8,
+  0x965d, 0x1bba,
+  0x965e, 0x1bb9,
+  0x965f, 0x1bbb,
+  0x9662, 0x04c3,
+  0x9663, 0x0a1e,
+  0x9664, 0x0986,
+  0x9665, 0x0615,
+  0x9666, 0x1bbc,
+  0x966a, 0x0d1c,
+  0x966c, 0x1bbe,
+  0x9670, 0x04c4,
+  0x9672, 0x1bbd,
+  0x9673, 0x0be0,
+  0x9675, 0x0f95,
+  0x9676, 0x0c83,
+  0x9677, 0x1bb7,
+  0x9678, 0x0f6e,
+  0x967a, 0x0765,
+  0x967d, 0x0f45,
+  0x9685, 0x06f1,
+  0x9686, 0x0f7c,
+  0x9688, 0x06fe,
+  0x968a, 0x0b42,
+  0x968b, 0x186c,
+  0x968d, 0x1bbf,
+  0x968e, 0x058a,
+  0x968f, 0x0a35,
+  0x9694, 0x05b4,
+  0x9695, 0x1bc1,
+  0x9697, 0x1bc2,
+  0x9698, 0x1bc0,
+  0x9699, 0x073a,
+  0x969b, 0x084d,
+  0x969c, 0x09cb,
+  0x969d, 0x21f0,
+  0x96a0, 0x04c5,
+  0x96a3, 0x0fa1,
+  0x96a7, 0x1bc4,
+  0x96a8, 0x1b0b,
+  0x96aa, 0x1bc3,
+  0x96af, 0x21f1,
+  0x96b0, 0x1bc7,
+  0x96b1, 0x1bc5,
+  0x96b4, 0x1bc8,
+  0x96b6, 0x1bc9,
+  0x96b7, 0x0fb4,
+  0x96b8, 0x1bca,
+  0x96bb, 0x0a6d,
+  0x96bc, 0x0d4f,
+  0x96c0, 0x0a43,
+  0x96c1, 0x0623,
+  0x96c4, 0x0f24,
+  0x96c5, 0x056d,
+  0x96c6, 0x0942,
+  0x96c7, 0x078f,
+  0x96c9, 0x1bce,
+  0x96cb, 0x1bcd,
+  0x96cc, 0x08c1,
+  0x96cd, 0x1bcf,
+  0x96ce, 0x1bcc,
+  0x96d1, 0x0876,
+  0x96d5, 0x1bd3,
+  0x96d6, 0x1992,
+  0x96d9, 0x10eb,
+  0x96db, 0x0a3d,
+  0x96dc, 0x1bd1,
+  0x96e2, 0x0f6d,
+  0x96e3, 0x0cc9,
+  0x96e8, 0x04cd,
+  0x96ea, 0x0a87,
+  0x96eb, 0x08e2,
+  0x96f0, 0x0e07,
+  0x96f2, 0x04e2,
+  0x96f6, 0x0fb5,
+  0x96f7, 0x0f55,
+  0x96f9, 0x1bd4,
+  0x96fb, 0x0c3f,
+  0x9700, 0x0927,
+  0x9704, 0x1bd5,
+  0x9706, 0x1bd6,
+  0x9707, 0x0a12,
+  0x9708, 0x1bd7,
+  0x970a, 0x0fb6,
+  0x970d, 0x1bd2,
+  0x970e, 0x1bd9,
+  0x970f, 0x1bdb,
+  0x9711, 0x1bda,
+  0x9713, 0x1bd8,
+  0x9716, 0x1bdc,
+  0x9719, 0x1bdd,
+  0x971c, 0x0afc,
+  0x971e, 0x0562,
+  0x9724, 0x1bde,
+  0x9727, 0x0ec4,
+  0x972a, 0x1bdf,
+  0x9730, 0x1be0,
+  0x9732, 0x0fd0,
+  0x9733, 0x21f2,
+  0x9738, 0x1414,
+  0x9739, 0x1be1,
+  0x973b, 0x21f3,
+  0x973d, 0x1be2,
+  0x9742, 0x1be7,
+  0x9743, 0x21f4,
+  0x9744, 0x1be4,
+  0x9746, 0x1be5,
+  0x9748, 0x1be6,
+  0x9749, 0x1be8,
+  0x974d, 0x21f5,
+  0x974f, 0x21f6,
+  0x9751, 0x21f7,
+  0x9752, 0x0a68,
+  0x9755, 0x21f8,
+  0x9756, 0x0f03,
+  0x9759, 0x0a69,
+  0x975c, 0x1be9,
+  0x975e, 0x0d87,
+  0x9760, 0x1bea,
+  0x9761, 0x1d06,
+  0x9762, 0x0ed8,
+  0x9764, 0x1beb,
+  0x9766, 0x1bec,
+  0x9768, 0x1bed,
+  0x9769, 0x05b5,
+  0x976b, 0x1bef,
+  0x976d, 0x0a1f,
+  0x9771, 0x1bf0,
+  0x9774, 0x06fa,
+  0x9779, 0x1bf1,
+  0x977a, 0x1bf5,
+  0x977c, 0x1bf3,
+  0x9781, 0x1bf4,
+  0x9784, 0x05d1,
+  0x9785, 0x1bf2,
+  0x9786, 0x1bf6,
+  0x978b, 0x1bf7,
+  0x978d, 0x048c,
+  0x978f, 0x1bf8,
+  0x9798, 0x09cc,
+  0x979c, 0x1bfa,
+  0x97a0, 0x0661,
+  0x97a3, 0x1bfd,
+  0x97a6, 0x1bfc,
+  0x97a8, 0x1bfb,
+  0x97ab, 0x1a34,
+  0x97ad, 0x0e2c,
+  0x97b3, 0x1bfe,
+  0x97c3, 0x1c00,
+  0x97c6, 0x1c01,
+  0x97c8, 0x1c02,
+  0x97cb, 0x1c03,
+  0x97d3, 0x0616,
+  0x97dc, 0x1c04,
+  0x97ed, 0x1c05,
+  0x97ee, 0x0cd9,
+  0x97f2, 0x1c07,
+  0x97f3, 0x053b,
+  0x97f5, 0x1c0a,
+  0x97f6, 0x1c09,
+  0x97fb, 0x04c6,
+  0x97ff, 0x06b9,
+  0x9801, 0x0e17,
+  0x9802, 0x0bd6,
+  0x9803, 0x0812,
+  0x9805, 0x07f2,
+  0x9806, 0x0971,
+  0x9808, 0x0a22,
+  0x980c, 0x1c0c,
+  0x980f, 0x1c0b,
+  0x9810, 0x0f2c,
+  0x9811, 0x0624,
+  0x9812, 0x0d66,
+  0x9813, 0x0cb4,
+  0x9817, 0x0a42,
+  0x9818, 0x0f96,
+  0x981a, 0x0731,
+  0x9821, 0x1c0f,
+  0x9824, 0x1c0e,
+  0x982c, 0x0e79,
+  0x982d, 0x0c84,
+  0x9830, 0x1e73,
+  0x9834, 0x04f2,
+  0x9837, 0x1c10,
+  0x9838, 0x1c0d,
+  0x983b, 0x0dc3,
+  0x983c, 0x0f54,
+  0x983d, 0x1c11,
+  0x9846, 0x1c12,
+  0x984b, 0x1c14,
+  0x984c, 0x0b4a,
+  0x984d, 0x05b9,
+  0x984f, 0x1c13,
+  0x9854, 0x0625,
+  0x9855, 0x0766,
+  0x9857, 0x21f9,
+  0x9858, 0x0626,
+  0x985a, 0x1e48,
+  0x985b, 0x0c39,
+  0x985e, 0x0fa8,
+  0x9865, 0x21fa,
+  0x9867, 0x0790,
+  0x986b, 0x1c15,
+  0x986f, 0x1c16,
+  0x9873, 0x1c1a,
+  0x9874, 0x1c19,
+  0x98a8, 0x0de9,
+  0x98aa, 0x1c1b,
+  0x98af, 0x1c1c,
+  0x98b1, 0x1c1d,
+  0x98b6, 0x1c1e,
+  0x98c3, 0x1c20,
+  0x98c4, 0x1c1f,
+  0x98c6, 0x1c21,
+  0x98db, 0x0d88,
+  0x98dc, 0x1839,
+  0x98df, 0x09ef,
+  0x98e2, 0x064c,
+  0x98e9, 0x1c22,
+  0x98eb, 0x1c23,
+  0x98ed, 0x10c1,
+  0x98ee, 0x14da,
+  0x98ef, 0x0d67,
+  0x98f2, 0x04bf,
+  0x98f4, 0x047f,
+  0x98fc, 0x08c2,
+  0x98fd, 0x0e5e,
+  0x98fe, 0x09e6,
+  0x9903, 0x1c24,
+  0x9905, 0x0eeb,
+  0x9909, 0x1c25,
+  0x990a, 0x0f46,
+  0x990c, 0x04e4,
+  0x9910, 0x088f,
+  0x9912, 0x1c26,
+  0x9913, 0x056e,
+  0x9914, 0x1c27,
+  0x9918, 0x1c28,
+  0x991d, 0x1c2a,
+  0x9920, 0x1c2d,
+  0x9921, 0x1c29,
+  0x9924, 0x1c2c,
+  0x9927, 0x21fd,
+  0x9928, 0x0617,
+  0x992c, 0x1c2e,
+  0x992e, 0x1c2f,
+  0x993d, 0x1c30,
+  0x9942, 0x1c32,
+  0x9945, 0x1c34,
+  0x9949, 0x1c33,
+  0x994b, 0x1c36,
+  0x994c, 0x1c39,
+  0x9950, 0x1c35,
+  0x9951, 0x1c37,
+  0x9955, 0x1c3a,
+  0x9957, 0x06ba,
+  0x9996, 0x091f,
+  0x9997, 0x1c3b,
+  0x9999, 0x07f3,
+  0x999e, 0x21ff,
+  0x99a5, 0x1c3d,
+  0x99a8, 0x059c,
+  0x99ac, 0x0d05,
+  0x99ad, 0x1c3e,
+  0x99b3, 0x0b98,
+  0x99b4, 0x0cc3,
+  0x99bc, 0x1c40,
+  0x99c1, 0x0d33,
+  0x99c4, 0x0b2c,
+  0x99c5, 0x04fa,
+  0x99c6, 0x06e6,
+  0x99c8, 0x06e7,
+  0x99d0, 0x0bb1,
+  0x99d1, 0x1c45,
+  0x99d2, 0x06e8,
+  0x99d5, 0x056f,
+  0x99d8, 0x1c44,
+  0x99db, 0x1c42,
+  0x99dd, 0x1c43,
+  0x99df, 0x1c41,
+  0x99e2, 0x1c4f,
+  0x99ed, 0x1c46,
+  0x99f1, 0x1c48,
+  0x99f8, 0x1c4b,
+  0x99fb, 0x1c4a,
+  0x99ff, 0x0963,
+  0x9a01, 0x1c4c,
+  0x9a05, 0x1c4e,
+  0x9a0e, 0x064d,
+  0x9a0f, 0x1c4d,
+  0x9a12, 0x0afd,
+  0x9a13, 0x0767,
+  0x9a19, 0x1c50,
+  0x9a28, 0x0b2d,
+  0x9a2b, 0x1c51,
+  0x9a30, 0x0c85,
+  0x9a37, 0x1c52,
+  0x9a3e, 0x1c57,
+  0x9a40, 0x1c55,
+  0x9a42, 0x1c54,
+  0x9a43, 0x1c56,
+  0x9a45, 0x1c53,
+  0x9a4d, 0x1c59,
+  0x9a4e, 0x2200,
+  0x9a52, 0x1e2f,
+  0x9a55, 0x1c58,
+  0x9a57, 0x1c5b,
+  0x9a5a, 0x06bb,
+  0x9a5b, 0x1c5a,
+  0x9a5f, 0x1c5c,
+  0x9a62, 0x1c5d,
+  0x9a64, 0x1c5f,
+  0x9a65, 0x1c5e,
+  0x9a69, 0x1c60,
+  0x9a6a, 0x1c62,
+  0x9a6b, 0x1c61,
+  0x9aa8, 0x080e,
+  0x9aad, 0x1c63,
+  0x9ab0, 0x1c64,
+  0x9ab8, 0x059a,
+  0x9abc, 0x1c65,
+  0x9ac0, 0x1c66,
+  0x9ac4, 0x0a37,
+  0x9acf, 0x1c67,
+  0x9ad1, 0x1c68,
+  0x9ad3, 0x1c69,
+  0x9ad8, 0x07f4,
+  0x9ad9, 0x2201,
+  0x9adc, 0x2202,
+  0x9ade, 0x1c6b,
+  0x9ae2, 0x1c6d,
+  0x9ae6, 0x1c6f,
+  0x9aea, 0x0d45,
+  0x9aeb, 0x1c71,
+  0x9aed, 0x0d98,
+  0x9aee, 0x1c72,
+  0x9aef, 0x1c70,
+  0x9af1, 0x1c74,
+  0x9af4, 0x1c73,
+  0x9af7, 0x1c75,
+  0x9afb, 0x1c76,
+  0x9b06, 0x1c77,
+  0x9b18, 0x1c78,
+  0x9b1a, 0x1c79,
+  0x9b1f, 0x1c7a,
+  0x9b22, 0x1c7b,
+  0x9b25, 0x1c7d,
+  0x9b27, 0x1c7e,
+  0x9b2e, 0x1c82,
+  0x9b31, 0x14d4,
+  0x9b32, 0x1c84,
+  0x9b3b, 0x17a9,
+  0x9b3c, 0x064e,
+  0x9b41, 0x057f,
+  0x9b42, 0x0822,
+  0x9b43, 0x1c86,
+  0x9b44, 0x1c85,
+  0x9b45, 0x0eb1,
+  0x9b4d, 0x1c88,
+  0x9b4f, 0x1c87,
+  0x9b51, 0x1c8a,
+  0x9b54, 0x0e90,
+  0x9b58, 0x1c8b,
+  0x9b5a, 0x0695,
+  0x9b6f, 0x0fcb,
+  0x9b72, 0x2204,
+  0x9b74, 0x1c8c,
+  0x9b75, 0x2203,
+  0x9b83, 0x1c8e,
+  0x9b8e, 0x0482,
+  0x9b8f, 0x2205,
+  0x9b91, 0x1c8f,
+  0x9b92, 0x0dfb,
+  0x9b93, 0x1c8d,
+  0x9b96, 0x1c90,
+  0x9b9f, 0x1c92,
+  0x9ba8, 0x1c94,
+  0x9baa, 0x0e9c,
+  0x9bab, 0x087b,
+  0x9bad, 0x086a,
+  0x9bae, 0x0ab1,
+  0x9bb1, 0x2206,
+  0x9bb4, 0x1c95,
+  0x9bb9, 0x1c98,
+  0x9bbb, 0x2207,
+  0x9bc0, 0x1c96,
+  0x9bc6, 0x1c99,
+  0x9bc9, 0x07a5,
+  0x9bca, 0x1c97,
+  0x9bcf, 0x1c9a,
+  0x9bd1, 0x1c9b,
+  0x9bd4, 0x1ca0,
+  0x9bd6, 0x0878,
+  0x9bdb, 0x0b44,
+  0x9be1, 0x1ca1,
+  0x9be2, 0x1c9e,
+  0x9be3, 0x1c9d,
+  0x9be4, 0x1c9f,
+  0x9be8, 0x0735,
+  0x9bf0, 0x1ca5,
+  0x9bf1, 0x1ca4,
+  0x9bf2, 0x1ca3,
+  0x9bf5, 0x0477,
+  0x9c00, 0x2208,
+  0x9c04, 0x1caf,
+  0x9c06, 0x1cab,
+  0x9c08, 0x1cac,
+  0x9c09, 0x1ca8,
+  0x9c0a, 0x1cae,
+  0x9c0c, 0x1caa,
+  0x9c0d, 0x05c0,
+  0x9c10, 0x0ff2,
+  0x9c12, 0x1cad,
+  0x9c13, 0x1ca9,
+  0x9c14, 0x1ca7,
+  0x9c15, 0x1ca6,
+  0x9c1b, 0x1cb1,
+  0x9c21, 0x1cb4,
+  0x9c24, 0x1cb3,
+  0x9c25, 0x1cb2,
+  0x9c2d, 0x0dbb,
+  0x9c2e, 0x1cb0,
+  0x9c2f, 0x04b7,
+  0x9c30, 0x1cb5,
+  0x9c32, 0x1cb7,
+  0x9c39, 0x05cd,
+  0x9c3a, 0x1ca2,
+  0x9c3b, 0x04d9,
+  0x9c3e, 0x1cb9,
+  0x9c46, 0x1cb8,
+  0x9c47, 0x1cb6,
+  0x9c48, 0x0b6b,
+  0x9c52, 0x0e9e,
+  0x9c57, 0x0fa2,
+  0x9c5a, 0x1cba,
+  0x9c60, 0x1cbb,
+  0x9c67, 0x1cbc,
+  0x9c76, 0x1cbd,
+  0x9c78, 0x1cbe,
+  0x9ce5, 0x0bd7,
+  0x9ce7, 0x1cbf,
+  0x9ce9, 0x0d4b,
+  0x9ceb, 0x1cc4,
+  0x9cec, 0x1cc0,
+  0x9cf0, 0x1cc1,
+  0x9cf3, 0x0e5f,
+  0x9cf4, 0x0ed0,
+  0x9cf6, 0x0ca8,
+  0x9d03, 0x1cc5,
+  0x9d06, 0x1cc6,
+  0x9d07, 0x0c96,
+  0x9d08, 0x1cc3,
+  0x9d09, 0x1cc2,
+  0x9d0e, 0x052a,
+  0x9d12, 0x1cce,
+  0x9d15, 0x1ccd,
+  0x9d1b, 0x0517,
+  0x9d1f, 0x1ccb,
+  0x9d23, 0x1cca,
+  0x9d26, 0x1cc8,
+  0x9d28, 0x05d9,
+  0x9d2a, 0x1cc7,
+  0x9d2b, 0x08de,
+  0x9d2c, 0x0529,
+  0x9d3b, 0x07f5,
+  0x9d3e, 0x1cd1,
+  0x9d3f, 0x1cd0,
+  0x9d41, 0x1ccf,
+  0x9d44, 0x1ccc,
+  0x9d46, 0x1cd2,
+  0x9d48, 0x1cd3,
+  0x9d50, 0x1cd8,
+  0x9d51, 0x1cd7,
+  0x9d59, 0x1cd9,
+  0x9d5c, 0x04cf,
+  0x9d5d, 0x1cd4,
+  0x9d60, 0x0806,
+  0x9d61, 0x0ec5,
+  0x9d64, 0x1cd6,
+  0x9d6b, 0x220a,
+  0x9d6c, 0x0e60,
+  0x9d6f, 0x1cde,
+  0x9d70, 0x2209,
+  0x9d72, 0x1cda,
+  0x9d7a, 0x1cdf,
+  0x9d87, 0x1cdc,
+  0x9d89, 0x1cdb,
+  0x9d8f, 0x0732,
+  0x9d9a, 0x1ce0,
+  0x9da4, 0x1ce1,
+  0x9da9, 0x1ce2,
+  0x9dab, 0x1cdd,
+  0x9daf, 0x1cc9,
+  0x9db2, 0x1ce3,
+  0x9db4, 0x0bfd,
+  0x9db8, 0x1ce7,
+  0x9dba, 0x1ce8,
+  0x9dbb, 0x1ce6,
+  0x9dc1, 0x1ce5,
+  0x9dc2, 0x1ceb,
+  0x9dc4, 0x1ce4,
+  0x9dc6, 0x1ce9,
+  0x9dcf, 0x1cea,
+  0x9dd3, 0x1ced,
+  0x9dd7, 0x1dde,
+  0x9dd9, 0x1cec,
+  0x9de6, 0x1cef,
+  0x9ded, 0x1cf0,
+  0x9def, 0x1cf1,
+  0x9df2, 0x0fef,
+  0x9df8, 0x1cee,
+  0x9df9, 0x0b4b,
+  0x9dfa, 0x085d,
+  0x9dfd, 0x1cf2,
+  0x9e19, 0x220c,
+  0x9e1a, 0x1cf3,
+  0x9e1e, 0x1cf5,
+  0x9e75, 0x1cf6,
+  0x9e78, 0x0768,
+  0x9e79, 0x1cf7,
+  0x9e7c, 0x1dfd,
+  0x9e7d, 0x1cf8,
+  0x9e7f, 0x08db,
+  0x9e81, 0x1cf9,
+  0x9e88, 0x1cfa,
+  0x9e8b, 0x1cfb,
+  0x9e91, 0x1cff,
+  0x9e92, 0x1cfd,
+  0x9e93, 0x0fe2,
+  0x9e95, 0x1cfe,
+  0x9e97, 0x0fb7,
+  0x9e9d, 0x1d00,
+  0x9e9f, 0x0fa3,
+  0x9ea5, 0x1d01,
+  0x9ea6, 0x0d34,
+  0x9ea9, 0x1d02,
+  0x9eaa, 0x1d04,
+  0x9ead, 0x1d05,
+  0x9eb4, 0x1e02,
+  0x9eb5, 0x1e75,
+  0x9eb8, 0x1d03,
+  0x9eb9, 0x07ff,
+  0x9eba, 0x0ed9,
+  0x9ebb, 0x0e91,
+  0x9ebc, 0x1284,
+  0x9ebe, 0x14ff,
+  0x9ebf, 0x0ea9,
+  0x9ec4, 0x052b,
+  0x9ecc, 0x1d07,
+  0x9ecd, 0x066a,
+  0x9ece, 0x1d08,
+  0x9ed1, 0x220d,
+  0x9ed2, 0x0807,
+  0x9ed4, 0x1d0b,
+  0x9ed8, 0x160d,
+  0x9ed9, 0x0ee7,
+  0x9edb, 0x0b43,
+  0x9edc, 0x1d0c,
+  0x9edd, 0x1d0e,
+  0x9ede, 0x1d0d,
+  0x9ee0, 0x1d0f,
+  0x9ee5, 0x1d10,
+  0x9ee8, 0x1d11,
+  0x9eef, 0x1d12,
+  0x9ef4, 0x1d13,
+  0x9ef6, 0x1d14,
+  0x9ef9, 0x1d16,
+  0x9efb, 0x1d17,
+  0x9f07, 0x1d1a,
+  0x9f0e, 0x0c1e,
+  0x9f13, 0x0791,
+  0x9f15, 0x1d1d,
+  0x9f20, 0x0acf,
+  0x9f21, 0x1d1e,
+  0x9f2c, 0x1d1f,
+  0x9f3b, 0x0d93,
+  0x9f3e, 0x1d20,
+  0x9f4a, 0x1d21,
+  0x9f4b, 0x170a,
+  0x9f4e, 0x1a7b,
+  0x9f4f, 0x1c06,
+  0x9f52, 0x1d22,
+  0x9f54, 0x1d23,
+  0x9f5f, 0x1d25,
+  0x9f62, 0x0fb8,
+  0x9f63, 0x1d24,
+  0x9f66, 0x1d28,
+  0x9f6a, 0x1d2b,
+  0x9f6c, 0x1d2a,
+  0x9f72, 0x1d2d,
+  0x9f76, 0x1d2e,
+  0x9f77, 0x1d2c,
+  0x9f8d, 0x0f7e,
+  0x9f95, 0x1d2f,
+  0x9f9c, 0x1d30,
+  0x9f9d, 0x1727,
+  0x9fa0, 0x1d31,
+  0xf929, 0x2129,
+  0xf9dc, 0x21ee,
+  0xfa0e, 0x20da,
+  0xfa0f, 0x20e5,
+  0xfa11, 0x20fb,
+  0xfa12, 0x2121,
+  0xfa13, 0x2131,
+  0xfa14, 0x2133,
+  0xfa15, 0x215e,
+  0xfa16, 0x2164,
+  0xfa17, 0x217b,
+  0xfa18, 0x2183,
+  0xfa1b, 0x2187,
+  0xfa1c, 0x218b,
+  0xfa1d, 0x218e,
+  0xfa1e, 0x2197,
+  0xfa1f, 0x21a2,
+  0xfa20, 0x21a4,
+  0xfa22, 0x21ae,
+  0xfa23, 0x21b6,
+  0xfa24, 0x21b8,
+  0xfa26, 0x21bc,
+  0xfa27, 0x21d8,
+  0xfa28, 0x21df,
+  0xfa29, 0x21ef,
+  0xfa2a, 0x21fb,
+  0xfa2c, 0x21fe,
+  0xfa2d, 0x220b,
+  0xfb01, 0x0070,
+  0xfe30, 0x1eda,
+  0xfe31, 0x1ed4,
+  0xfe33, 0x1ed2,
+  0xfe35, 0x1edb,
+  0xfe37, 0x1ee1,
+  0xfe39, 0x1edd,
+  0xfe3b, 0x1eeb,
+  0xfe3d, 0x1ee5,
+  0xfe3f, 0x1ee3,
+  0xfe41, 0x1ee7,
+  0xff01, 0x0282,
+  0xff02, 0x1f47,
+  0xff03, 0x02cc,
+  0xff04, 0x02c8,
+  0xff05, 0x02cb,
+  0xff06, 0x02cd,
+  0xff07, 0x1f46,
+  0xff08, 0x02a2,
+  0xff0a, 0x02ce,
+  0xff0b, 0x02b4,
+  0xff0c, 0x027c,
+  0xff0d, 0x0296,
+  0xff0e, 0x027d,
+  0xff0f, 0x0297,
+  0xff10, 0x030c,
+  0xff1a, 0x027f,
+  0xff1c, 0x02bb,
+  0xff1d, 0x02b9,
+  0xff1e, 0x02bc,
+  0xff1f, 0x0281,
+  0xff20, 0x02cf,
+  0xff21, 0x0316,
+  0xff3b, 0x02a6,
+  0xff3c, 0x0298,
+  0xff3d, 0x02a7,
+  0xff3e, 0x0288,
+  0xff3f, 0x028a,
+  0xff40, 0x0286,
+  0xff41, 0x0330,
+  0xff5b, 0x02a8,
+  0xff5c, 0x029b,
+  0xff5d, 0x02a9,
+  0xff5e, 0x0299,
+  0xff61, 0x0147,
+  0xffe0, 0x02c9,
+  0xffe2, 0x02ef,
+  0xffe3, 0x0289,
+  0xffe4, 0x1f45,
+  0xffe5, 0x02c7,
+  0xffe8, 0x0143,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12UniJISUCS2HEnc16 = {
+  0,
+  { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
   { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
-    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
-    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
-    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
-    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
-    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
-    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
-    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
-    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
-    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
-    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
-    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0146, 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d,
-    0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155,
-    0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d,
-    0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165,
-    0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d,
-    0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175,
-    0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
-    0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12RKSJHMap2, 122
-};
-
-static Gushort japan12RomanMap2[4] = {
-  0x0000, 0x0000,
-  0xffff, 0x0000
-};
-
-static GfxFontEncoding16 japan12RomanEnc16 = {
-  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
-  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-    0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
-    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6,
-    0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe,
-    0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106,
-    0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e,
-    0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116,
-    0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e,
-    0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
-    0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
-    0x012f, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136,
-    0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
-    0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -8514,10 +23788,10 @@ static GfxFontEncoding16 japan12RomanEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12RomanMap2, 2
+  japan12UniJISUCS2HMap2, 6963
 };
 
-static Gushort japan12UniJISUCS2HMap2[13926] = {
+static Gushort japan12UniJISUCS2VMap2[14216] = {
   0x0000, 0x0000,
   0x0020, 0x0001,
   0x005c, 0x0061,
@@ -15480,26 +30754,375 @@ static Gushort japan12UniJISUCS2HMap2[13926] = {
   0xffe4, 0x1f45,
   0xffe5, 0x02c7,
   0xffe8, 0x0143,
+  0x00b0, 0x204d,
+  0x2015, 0x1ed4,
+  0x2016, 0x1ed7,
+  0x2018, 0x2059,
+  0x201c, 0x2057,
+  0x2025, 0x1eda,
+  0x2026, 0x1ed9,
+  0x2032, 0x2051,
+  0x2033, 0x205b,
+  0x2190, 0x02e2,
+  0x2191, 0x02e0,
+  0x2192, 0x02e3,
+  0x2193, 0x02e1,
+  0x2225, 0x1ed7,
+  0x223c, 0x1ed6,
+  0x22ef, 0x1ed9,
+  0x2500, 0x1d39,
+  0x2502, 0x1d37,
+  0x2504, 0x1d3d,
+  0x2506, 0x1d3b,
+  0x2508, 0x1d41,
+  0x250a, 0x1d3f,
+  0x250c, 0x1d47,
+  0x250d, 0x1d49,
+  0x250e, 0x1d48,
+  0x250f, 0x1d4a,
+  0x2510, 0x1d4f,
+  0x2511, 0x1d51,
+  0x2512, 0x1d50,
+  0x2513, 0x1d52,
+  0x2514, 0x1d43,
+  0x2515, 0x1d45,
+  0x2516, 0x1d44,
+  0x2517, 0x1d46,
+  0x2518, 0x1d4b,
+  0x2519, 0x1d4d,
+  0x251a, 0x1d4c,
+  0x251b, 0x1d4e,
+  0x251c, 0x1d63,
+  0x251d, 0x1d67,
+  0x251e, 0x1d65,
+  0x251f, 0x1d64,
+  0x2520, 0x1d66,
+  0x2521, 0x1d69,
+  0x2522, 0x1d68,
+  0x2523, 0x1d6a,
+  0x2525, 0x1d6f,
+  0x2526, 0x1d6d,
+  0x2527, 0x1d6c,
+  0x2528, 0x1d6e,
+  0x2529, 0x1d71,
+  0x252a, 0x1d70,
+  0x252b, 0x1d72,
+  0x252c, 0x1d5b,
+  0x252d, 0x1d5d,
+  0x2530, 0x1d5c,
+  0x2531, 0x1d60,
+  0x2534, 0x1d53,
+  0x2535, 0x1d55,
+  0x2538, 0x1d54,
+  0x2539, 0x1d58,
+  0x253d, 0x1d77,
+  0x2540, 0x1d75,
+  0x2541, 0x1d74,
+  0x2542, 0x1d76,
+  0x2543, 0x1d7b,
+  0x2544, 0x1d7d,
+  0x2545, 0x1d7a,
+  0x2546, 0x1d7c,
+  0x2547, 0x1d81,
+  0x2548, 0x1d80,
+  0x2549, 0x1d7e,
+  0x3001, 0x1ecf,
+  0x3008, 0x1ee3,
+  0x3013, 0x204e,
+  0x3014, 0x1edd,
+  0x301c, 0x1ed6,
+  0x301d, 0x1f14,
+  0x301f, 0x1f15,
+  0x3041, 0x1eee,
+  0x3043, 0x1eef,
+  0x3045, 0x1ef0,
+  0x3047, 0x1ef1,
+  0x3049, 0x1ef2,
+  0x3063, 0x1ef3,
+  0x3083, 0x1ef4,
+  0x3085, 0x1ef5,
+  0x3087, 0x1ef6,
+  0x308e, 0x1ef7,
+  0x309b, 0x2050,
+  0x309c, 0x204f,
+  0x30a1, 0x1ef8,
+  0x30a3, 0x1ef9,
+  0x30a5, 0x1efa,
+  0x30a7, 0x1efb,
+  0x30a9, 0x1efc,
+  0x30c3, 0x1efd,
+  0x30e3, 0x1efe,
+  0x30e5, 0x1eff,
+  0x30e7, 0x1f00,
+  0x30ee, 0x1f01,
+  0x30f5, 0x1f02,
+  0x30fc, 0x1ed3,
+  0x3300, 0x209e,
+  0x3303, 0x2092,
+  0x3305, 0x208d,
+  0x330d, 0x1f0e,
+  0x3314, 0x1f05,
+  0x3315, 0x2094,
+  0x3316, 0x208a,
+  0x3318, 0x2093,
+  0x331e, 0x20a1,
+  0x3322, 0x2089,
+  0x3323, 0x209c,
+  0x3326, 0x1f0f,
+  0x3327, 0x1f09,
+  0x332a, 0x20a4,
+  0x332b, 0x1f11,
+  0x3331, 0x20a6,
+  0x3333, 0x208e,
+  0x3336, 0x1f0b,
+  0x3339, 0x2097,
+  0x333b, 0x209d,
+  0x3342, 0x209b,
+  0x3347, 0x20a5,
+  0x3349, 0x1f04,
+  0x334a, 0x1f12,
+  0x334d, 0x1f07,
+  0x334e, 0x2091,
+  0x3351, 0x1f0c,
+  0x3357, 0x2098,
+  0x337f, 0x2084,
+  0xff08, 0x1edb,
+  0xff0c, 0x204c,
+  0xff0d, 0x1ed5,
+  0xff0e, 0x2052,
+  0xff1d, 0x1eed,
+  0xff3b, 0x1edf,
+  0xff3d, 0x1ee0,
+  0xff3f, 0x1ed2,
+  0xff5b, 0x1ee1,
+  0xff5c, 0x1ed8,
+  0xff5d, 0x1ee2,
+  0xff5e, 0x1ed6,
+  0xffe3, 0x1ed1,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12UniJISUCS2VEnc16 = {
+  1,
+  { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12UniJISUCS2VMap2, 7108
+};
+
+static Gushort japan12VMap2[294] = {
+  0x0000, 0x0000,
+  0x2121, 0x0279,
+  0x2221, 0x02d7,
+  0x223a, 0x02e5,
+  0x224a, 0x02ed,
+  0x225c, 0x02f4,
+  0x2272, 0x0303,
+  0x227e, 0x030b,
+  0x2330, 0x030c,
+  0x2341, 0x0316,
+  0x2361, 0x0330,
+  0x2421, 0x034a,
+  0x2521, 0x039d,
+  0x2621, 0x03f3,
+  0x2641, 0x040b,
+  0x2721, 0x0423,
+  0x2751, 0x0444,
+  0x2821, 0x1d37,
+  0x2822, 0x1d39,
+  0x2823, 0x1d43,
+  0x2824, 0x1d47,
+  0x2825, 0x1d4f,
+  0x2826, 0x1d4b,
+  0x2827, 0x1d53,
+  0x2828, 0x1d63,
+  0x2829, 0x1d5b,
+  0x282a, 0x1d6b,
+  0x282b, 0x1d73,
+  0x282c, 0x1d38,
+  0x282d, 0x1d3a,
+  0x282e, 0x1d46,
+  0x282f, 0x1d4a,
+  0x2830, 0x1d52,
+  0x2831, 0x1d4e,
+  0x2832, 0x1d5a,
+  0x2833, 0x1d6a,
+  0x2834, 0x1d62,
+  0x2835, 0x1d72,
+  0x2836, 0x1d82,
+  0x2837, 0x1d57,
+  0x2838, 0x1d66,
+  0x2839, 0x1d5f,
+  0x283a, 0x1d6e,
+  0x283b, 0x1d76,
+  0x283c, 0x1d54,
+  0x283d, 0x1d67,
+  0x283e, 0x1d5c,
+  0x283f, 0x1d6f,
+  0x2840, 0x1d79,
+  0x3021, 0x0465,
+  0x3121, 0x04c3,
+  0x3221, 0x0521,
+  0x3321, 0x057f,
+  0x3421, 0x05dd,
+  0x3521, 0x063b,
+  0x3621, 0x0699,
+  0x3721, 0x06f7,
+  0x3821, 0x0755,
+  0x3921, 0x07b3,
+  0x3a21, 0x0811,
+  0x3b21, 0x086f,
+  0x3c21, 0x08cd,
+  0x3d21, 0x092b,
+  0x3e21, 0x0989,
+  0x3f21, 0x09e7,
+  0x4021, 0x0a45,
+  0x4121, 0x0aa3,
+  0x4221, 0x0b01,
+  0x4321, 0x0b5f,
+  0x4421, 0x0bbd,
+  0x4521, 0x0c1b,
+  0x4621, 0x0c79,
+  0x4721, 0x0cd7,
+  0x4821, 0x0d35,
+  0x4921, 0x0d93,
+  0x4a21, 0x0df1,
+  0x4b21, 0x0e4f,
+  0x4c21, 0x0ead,
+  0x4d21, 0x0f0b,
+  0x4e21, 0x0f69,
+  0x4f21, 0x0fc7,
+  0x5021, 0x0ffa,
+  0x5121, 0x1058,
+  0x5221, 0x10b6,
+  0x5321, 0x1114,
+  0x5421, 0x1172,
+  0x5521, 0x11d0,
+  0x5621, 0x122e,
+  0x5721, 0x128c,
+  0x5821, 0x12ea,
+  0x5921, 0x1348,
+  0x5a21, 0x13a6,
+  0x5b21, 0x1404,
+  0x5c21, 0x1462,
+  0x5d21, 0x14c0,
+  0x5e21, 0x151e,
+  0x5f21, 0x157c,
+  0x6021, 0x15da,
+  0x6121, 0x1638,
+  0x6221, 0x1696,
+  0x6321, 0x16f4,
+  0x6421, 0x1752,
+  0x6521, 0x17b0,
+  0x6621, 0x180e,
+  0x6721, 0x186c,
+  0x6821, 0x18ca,
+  0x6921, 0x1928,
+  0x6a21, 0x1986,
+  0x6b21, 0x19e4,
+  0x6c21, 0x1a42,
+  0x6d21, 0x1aa0,
+  0x6e21, 0x1afe,
+  0x6f21, 0x1b5c,
+  0x7021, 0x1bba,
+  0x7121, 0x1c18,
+  0x7221, 0x1c76,
+  0x7321, 0x1cd4,
+  0x7421, 0x1d32,
+  0x7425, 0x205c,
+  0x2122, 0x1ecf,
+  0x2131, 0x1ed1,
+  0x213c, 0x1ed3,
+  0x2141, 0x1ed6,
+  0x214a, 0x1edb,
+  0x2161, 0x1eed,
+  0x2421, 0x1eee,
+  0x2423, 0x1eef,
+  0x2425, 0x1ef0,
+  0x2427, 0x1ef1,
+  0x2429, 0x1ef2,
+  0x2443, 0x1ef3,
+  0x2463, 0x1ef4,
+  0x2465, 0x1ef5,
+  0x2467, 0x1ef6,
+  0x246e, 0x1ef7,
+  0x2521, 0x1ef8,
+  0x2523, 0x1ef9,
+  0x2525, 0x1efa,
+  0x2527, 0x1efb,
+  0x2529, 0x1efc,
+  0x2543, 0x1efd,
+  0x2563, 0x1efe,
+  0x2565, 0x1eff,
+  0x2567, 0x1f00,
+  0x256e, 0x1f01,
+  0x2575, 0x1f02,
   0xffff, 0x0000
 };
 
-static GfxFontEncoding16 japan12UniJISUCS2HEnc16 = {
-  { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+static GfxFontEncoding16 japan12VEnc16 = {
+  1,
+  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
   { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -15532,7 +31155,7 @@ static GfxFontEncoding16 japan12UniJISUCS2HEnc16 = {
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-  japan12UniJISUCS2HMap2, 6963
+  japan12VMap2, 147
 };
 
 static Gushort japan12WPSymbolMap2[4] = {
@@ -15541,6 +31164,7 @@ static Gushort japan12WPSymbolMap2[4] = {
 };
 
 static GfxFontEncoding16 japan12WPSymbolEnc16 = {
+  0,
   { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -15592,6 +31216,99 @@ static GfxFontEncoding16 japan12WPSymbolEnc16 = {
   japan12WPSymbolMap2, 2
 };
 
+static Gushort japan12AdobeJapan12VMap2[74] = {
+  0x0000, 0x0000,
+  0x0000, 0x0000,
+  0x0100, 0x0100,
+  0x0200, 0x0200,
+  0x0300, 0x0300,
+  0x0400, 0x0400,
+  0x0500, 0x0500,
+  0x0600, 0x0600,
+  0x0700, 0x0700,
+  0x0800, 0x0800,
+  0x0900, 0x0900,
+  0x0a00, 0x0a00,
+  0x0b00, 0x0b00,
+  0x0c00, 0x0c00,
+  0x0d00, 0x0d00,
+  0x0e00, 0x0e00,
+  0x0f00, 0x0f00,
+  0x1000, 0x1000,
+  0x1100, 0x1100,
+  0x1200, 0x1200,
+  0x1300, 0x1300,
+  0x1400, 0x1400,
+  0x1500, 0x1500,
+  0x1600, 0x1600,
+  0x1700, 0x1700,
+  0x1800, 0x1800,
+  0x1900, 0x1900,
+  0x1a00, 0x1a00,
+  0x1b00, 0x1b00,
+  0x1c00, 0x1c00,
+  0x1d00, 0x1d00,
+  0x1e00, 0x1e00,
+  0x1f00, 0x1f00,
+  0x2000, 0x2000,
+  0x2100, 0x2100,
+  0x2200, 0x2200,
+  0xffff, 0x0000
+};
+
+static GfxFontEncoding16 japan12AdobeJapan12VEnc16 = {
+  1,
+  { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+  { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+  japan12AdobeJapan12VMap2, 37
+};
+
 struct GfxFontEnc16Entry {
   char *name;
   GfxFontEncoding16 *enc;
@@ -15599,31 +31316,48 @@ struct GfxFontEnc16Entry {
 
 static GfxFontEnc16Entry gfxFontEnc16Tab[] = {
   { "78-EUC-H",                         &japan1278EUCHEnc16 },
+  { "78-EUC-V",                         &japan1278EUCVEnc16 },
   { "78-H",                             &japan1278HEnc16 },
   { "78-RKSJ-H",                        &japan1278RKSJHEnc16 },
+  { "78-RKSJ-V",                        &japan1278RKSJVEnc16 },
+  { "78-V",                             &japan1278VEnc16 },
   { "78ms-RKSJ-H",                      &japan1278msRKSJHEnc16 },
+  { "78ms-RKSJ-V",                      &japan1278msRKSJVEnc16 },
   { "83pv-RKSJ-H",                      &japan1283pvRKSJHEnc16 },
   { "90ms-RKSJ-H",                      &japan1290msRKSJHEnc16 },
+  { "90ms-RKSJ-V",                      &japan1290msRKSJVEnc16 },
   { "90msp-RKSJ-H",                     &japan1290mspRKSJHEnc16 },
+  { "90msp-RKSJ-V",                     &japan1290mspRKSJVEnc16 },
   { "90pv-RKSJ-H",                      &japan1290pvRKSJHEnc16 },
+  { "90pv-RKSJ-V",                      &japan1290pvRKSJVEnc16 },
   { "Add-H",                            &japan12AddHEnc16 },
   { "Add-RKSJ-H",                       &japan12AddRKSJHEnc16 },
+  { "Add-RKSJ-V",                       &japan12AddRKSJVEnc16 },
+  { "Add-V",                            &japan12AddVEnc16 },
   { "Adobe-Japan1-0",                   &japan12AdobeJapan10Enc16 },
   { "Adobe-Japan1-1",                   &japan12AdobeJapan11Enc16 },
   { "Adobe-Japan1-2",                   &japan12AdobeJapan12Enc16 },
   { "EUC-H",                            &japan12EUCHEnc16 },
+  { "EUC-V",                            &japan12EUCVEnc16 },
   { "Ext-H",                            &japan12ExtHEnc16 },
   { "Ext-RKSJ-H",                       &japan12ExtRKSJHEnc16 },
+  { "Ext-RKSJ-V",                       &japan12ExtRKSJVEnc16 },
+  { "Ext-V",                            &japan12ExtVEnc16 },
   { "H",                                &japan12HEnc16 },
   { "Hankaku",                          &japan12HankakuEnc16 },
   { "Hiragana",                         &japan12HiraganaEnc16 },
   { "Katakana",                         &japan12KatakanaEnc16 },
   { "NWP-H",                            &japan12NWPHEnc16 },
+  { "NWP-V",                            &japan12NWPVEnc16 },
   { "RKSJ-H",                           &japan12RKSJHEnc16 },
+  { "RKSJ-V",                           &japan12RKSJVEnc16 },
   { "Roman",                            &japan12RomanEnc16 },
   { "UniJIS-UCS2-H",                    &japan12UniJISUCS2HEnc16 },
+  { "UniJIS-UCS2-V",                    &japan12UniJISUCS2VEnc16 },
+  { "V",                                &japan12VEnc16 },
   { "WP-Symbol",                        &japan12WPSymbolEnc16 },
   { "Identity-H",                       &japan12AdobeJapan12Enc16 },
+  { "Identity-V",                       &japan12AdobeJapan12VEnc16 },
   { NULL,                               NULL }
 };
 
index fded0bef9a1286a238b5055486f892f105e9aa8a..ea968ee82c9b4e8f5733000c522bd2226fea8d7b 100644 (file)
@@ -26,7 +26,7 @@
 
 Catalog::Catalog(Object *catDict) {
   Object pagesDict;
-  Object obj;
+  Object obj, obj2;
   int i;
 
   ok = gTrue;
@@ -74,6 +74,16 @@ Catalog::Catalog(Object *catDict) {
     nameTree.initNull();
   obj.free();
 
+  // read base URI
+  baseURI = NULL;
+  if (catDict->dictLookup("URI", &obj)->isDict()) {
+    if (obj.dictLookup("Base", &obj2)->isString()) {
+      baseURI = obj2.getString()->copy();
+    }
+    obj2.free();
+  }
+  obj.free();
+
   return;
 
  err3:
@@ -99,6 +109,9 @@ Catalog::~Catalog() {
   }
   dests.free();
   nameTree.free();
+  if (baseURI) {
+    delete baseURI;
+  }
 }
 
 int Catalog::readPageTree(Dict *pagesDict, PageAttrs *attrs, int start) {
index 72ff0a305d60dfb94b8e263268055ab83c8aa14c..abda62d22632f3234a14b249c52b496f3a8c1b72 100644 (file)
@@ -41,6 +41,9 @@ public:
   // Get a page.
   Page *getPage(int i) { return pages[i-1]; }
 
+  // Return base URI, or NULL if none.
+  GString *getBaseURI() { return baseURI; }
+
   // Find a page, given its object ID.  Returns page number, or 0 if
   // not found.
   int findPage(int num, int gen);
@@ -56,6 +59,7 @@ private:
   int numPages;                        // number of pages
   Object dests;                        // named destination dictionary
   Object nameTree;             // name tree
+  GString *baseURI;            // base URI for URI-type links
   GBool ok;                    // true if catalog is valid
 
   int readPageTree(Dict *pages, PageAttrs *attrs, int start);
index cbb623ba33e1a51e45ad2ef54b35213639b0f739..0dc8150591d7afca559d4ea4bd66fbc3b5b03e07 100644 (file)
 // Send error messages to /dev/tty instead of stderr.
 GBool errorsToTTY = gFalse;
 
-// File to send error (and other) messages to.
 FILE *errFile;
+GBool errQuiet;
 
 void errorInit() {
-  if (!errorsToTTY || !(errFile = fopen("/dev/tty", "w")))
-    errFile = stderr;
+  if (errQuiet) {
+    errFile = NULL;
+  } else {
+    if (!errorsToTTY || !(errFile = fopen("/dev/tty", "w")))
+      errFile = stderr;
+  }
 }
 
 void CDECL error(int pos, char *msg, ...) {
   va_list args;
 
-  if (printCommands)
+  if (errQuiet) {
+    return;
+  }
+  if (printCommands) {
     fflush(stdout);
-  if (pos >= 0)
+  }
+  if (pos >= 0) {
     fprintf(errFile, "Error (%d): ", pos);
-  else
+  } else {
     fprintf(errFile, "Error: ");
+  }
   va_start(args, msg);
   vfprintf(errFile, msg, args);
   va_end(args);
index d4fd9a5b2c604a5beab6165b202f19bb053682b3..ee85b95b4997349b37dabe6f684dbf75051c0a20 100644 (file)
@@ -353,8 +353,8 @@ static char *standardEncodingNames[standardEncodingSize] = {
   "ydieresis",
   "zcaron"
 };
-static GfxFontEncoding standardEncoding(standardEncodingNames,
-                                        standardEncodingSize);
+static FontEncoding standardEncoding(standardEncodingNames,
+                                     standardEncodingSize);
 
 #define symbolEncodingSize 257
 static char *symbolEncodingNames[symbolEncodingSize] = {
@@ -616,8 +616,8 @@ static char *symbolEncodingNames[symbolEncodingSize] = {
   NULL,
   "apple"
 };
-static GfxFontEncoding symbolEncoding(symbolEncodingNames,
-                                      symbolEncodingSize);
+static FontEncoding symbolEncoding(symbolEncodingNames,
+                                   symbolEncodingSize);
 
 #define zapfDingbatsEncodingSize 270
 static char *zapfDingbatsEncodingNames[zapfDingbatsEncodingSize] = {
@@ -892,8 +892,8 @@ static char *zapfDingbatsEncodingNames[zapfDingbatsEncodingSize] = {
   "a95",
   "a96"
 };
-static GfxFontEncoding zapfDingbatsEncoding(zapfDingbatsEncodingNames,
-                                            zapfDingbatsEncodingSize);
+static FontEncoding zapfDingbatsEncoding(zapfDingbatsEncodingNames,
+                                         zapfDingbatsEncodingSize);
 
 #define macRomanEncodingSize 256
 static char *macRomanEncodingNames[macRomanEncodingSize] = {
@@ -1154,8 +1154,8 @@ static char *macRomanEncodingNames[macRomanEncodingSize] = {
   "ogonek",
   "caron"
 };
-static GfxFontEncoding macRomanEncoding(macRomanEncodingNames,
-                                        macRomanEncodingSize);
+static FontEncoding macRomanEncoding(macRomanEncodingNames,
+                                     macRomanEncodingSize);
 
 #define winAnsiEncodingSize 256
 static char *winAnsiEncodingNames[winAnsiEncodingSize] = {
@@ -1416,8 +1416,8 @@ static char *winAnsiEncodingNames[winAnsiEncodingSize] = {
   "thorn",
   "ydieresis"
 };
-static GfxFontEncoding winAnsiEncoding(winAnsiEncodingNames,
-                                       winAnsiEncodingSize);
+static FontEncoding winAnsiEncoding(winAnsiEncodingNames,
+                                    winAnsiEncodingSize);
 
 //------------------------------------------------------------------------
 // Character widths for built-in fonts.
@@ -2043,7 +2043,7 @@ static Gushort zapfDingbatsWidths[270] = {
 struct BuiltinFont {
   char *name;
   Gushort *widths;
-  GfxFontEncoding *encoding;
+  FontEncoding *encoding;
 };
 
 #define numBuiltinFonts ((int)(sizeof(builtinFonts)/sizeof(BuiltinFont)))
index d58ddd8a722793b1eb2ced8978300e08d31a74ec..bbf5bdf2d630b5e81265d095533f66461b45398e 100644 (file)
@@ -167,6 +167,8 @@ Operator Gfx::opTab[] = {
           &Gfx::opRectangle},
   {"rg",  3, {tchkNum,    tchkNum,    tchkNum},
           &Gfx::opSetFillRGBColor},
+  {"ri",  1, {tchkName},
+          &Gfx::opSetRenderingIntent},
   {"s",   0, {tchkNone},
           &Gfx::opCloseStroke},
   {"sc",  -4, {tchkNum,   tchkNum,    tchkNum,    tchkNum},
@@ -174,6 +176,8 @@ Operator Gfx::opTab[] = {
   {"scn", -5, {tchkSCN,   tchkSCN,    tchkSCN,    tchkSCN,
               tchkSCN},
           &Gfx::opSetFillColorN},
+  {"sh",  1, {tchkName},
+          &Gfx::opShFill},
   {"v",   4, {tchkNum,    tchkNum,    tchkNum,    tchkNum},
           &Gfx::opCurveTo1},
   {"w",   1, {tchkNum},
@@ -560,6 +564,9 @@ void Gfx::opSetLineWidth(Object args[], int numArgs) {
 void Gfx::opSetExtGState(Object args[], int numArgs) {
 }
 
+void Gfx::opSetRenderingIntent(Object args[], int numArgs) {
+}
+
 //------------------------------------------------------------------------
 // color operators
 //------------------------------------------------------------------------
@@ -884,6 +891,9 @@ void Gfx::opCloseEOFillStroke(Object args[], int numArgs) {
   doEndPath();
 }
 
+void Gfx::opShFill(Object args[], int numArgs) {
+}
+
 void Gfx::doEndPath() {
   if (state->isPath()) {
     if (clip == clipNormal)
@@ -1088,7 +1098,7 @@ void Gfx::doShowText(GString *s) {
   int c16;
   GString *s16;
   int m, n;
-  double dx, dy, width, w, h;
+  double dx, dy, width, height, w, h;
 
   if (fontChanged) {
     out->updateFont(state);
@@ -1110,12 +1120,19 @@ void Gfx::doShowText(GString *s) {
     n = s->getLength();
     while (n > 0) {
       m = getNextChar16(enc, p, &c16);
-      width = state->getFontSize() * state->getHorizScaling() *
-             font->getWidth16(c16) +
-             state->getCharSpace();
-      if (c16 == ' ')
-       width += state->getWordSpace();
-      state->textTransformDelta(width, 0, &w, &h);
+      if (enc->wMode == 0) {
+       width = state->getFontSize() * state->getHorizScaling() *
+               font->getWidth16(c16) +
+               state->getCharSpace();
+       if (c16 == ' ') {
+         width += state->getWordSpace();
+       }
+       height = 0;
+      } else {
+       width = 0;
+       height = state->getFontSize() * font->getHeight16(c16);
+      }
+      state->textTransformDelta(width, height, &w, &h);
       if (out->useDrawChar()) {
        out->drawChar16(state, state->getCurX() + dx, state->getCurY() + dy,
                        w, h, c16);
@@ -1124,7 +1141,7 @@ void Gfx::doShowText(GString *s) {
        s16->setChar(1, (char)c16);
        out->drawString16(state, s16);
       }
-      state->textShift(width);
+      state->textShift(width, height);
       n -= m;
       p += m;
     }
@@ -1365,9 +1382,7 @@ void Gfx::doForm(Object *str) {
   // check form type
   dict->lookup("FormType", &obj1);
   if (!(obj1.isInt() && obj1.getInt() == 1)) {
-    obj1.free();
     error(getPos(), "Unknown form type");
-    return;
   }
   obj1.free();
 
@@ -1387,10 +1402,10 @@ void Gfx::doForm(Object *str) {
   }
 
   // push new resources on stack
+  res = new GfxResources(res);
   dict->lookup("Resources", &obj1);
   if (obj1.isDict()) {
     resDict = obj1.getDict();
-    res = new GfxResources(res);
     res->fonts = NULL;
     resDict->lookup("Font", &obj2);
     if (obj2.isDict())
index e1dc3d4e692ea127588f23d8acbfc41a4f15cacd..f725f85d6f192a5af2630c908361b952bc4cb6ec 100644 (file)
@@ -61,7 +61,7 @@ struct Operator {
 class GfxResources {
 public:
 
-  GfxResources(GfxResources *next1) { next = next1; }
+  GfxResources(GfxResources *next1) { fonts = NULL; next = next1; }
   ~GfxResources();
 
   GfxFontDict *fonts;
@@ -119,6 +119,7 @@ private:
   void opSetMiterLimit(Object args[], int numArgs);
   void opSetLineWidth(Object args[], int numArgs);
   void opSetExtGState(Object args[], int numArgs);
+  void opSetRenderingIntent(Object args[], int numArgs);
 
   // color operators
   void opSetFillGray(Object args[], int numArgs);
@@ -153,6 +154,7 @@ private:
   void opCloseFillStroke(Object args[], int numArgs);
   void opEOFillStroke(Object args[], int numArgs);
   void opCloseEOFillStroke(Object args[], int numArgs);
+  void opShFill(Object args[], int numArgs);
   void doEndPath();
 
   // path clipping operators
index d1148cf212efc270471e9ec3a456435c2f34ca15..d93a81f99bd90ff5601f34c836512e9d1ce5274a 100644 (file)
@@ -24,6 +24,7 @@
 #include "Dict.h"
 #include "Error.h"
 #include "Params.h"
+#include "FontFile.h"
 #include "GfxFont.h"
 
 #include "FontInfo.h"
@@ -34,6 +35,7 @@
 //------------------------------------------------------------------------
 
 static int CDECL cmpWidthExcep(const void *w1, const void *w2);
+static int CDECL cmpWidthExcepV(const void *w1, const void *w2);
 
 //------------------------------------------------------------------------
 
@@ -52,125 +54,13 @@ static Gushort *defCharWidths[12] = {
   timesBoldItalicWidths
 };
 
-//------------------------------------------------------------------------
-// GfxFontEncoding
-//------------------------------------------------------------------------
-
-inline int GfxFontEncoding::hash(char *name) {
-  int h;
-
-  h = name[0];
-  if (name[1])
-    h = h * 61 + name[1];
-  return h % gfxFontEncHashSize;
-}
-
-GfxFontEncoding::GfxFontEncoding() {
-  int i;
-
-  encoding = (char **)gmalloc(256 * sizeof(char *));
-  freeEnc = gTrue;
-  for (i = 0; i < 256; ++i)
-    encoding[i] = NULL;
-  for (i = 0; i < gfxFontEncHashSize; ++i)
-    hashTab[i] = -1;
-}
-
-GfxFontEncoding::GfxFontEncoding(char **encoding1, int encSize) {
-  int i;
-
-  encoding = encoding1;
-  freeEnc = gFalse;
-  for (i = 0; i < gfxFontEncHashSize; ++i)
-    hashTab[i] = -1;
-  for (i = 0; i < encSize; ++i) {
-    if (encoding[i])
-      addChar1(i, encoding[i]);
-  }
-}
-
-void GfxFontEncoding::addChar(int code, char *name) {
-  int h, i;
-
-  // replace character associated with code
-  if (encoding[code]) {
-    h = hash(encoding[code]);
-    for (i = 0; i < gfxFontEncHashSize; ++i) {
-      if (hashTab[h] == code) {
-       hashTab[h] = -2;
-       break;
-      }
-      if (++h == gfxFontEncHashSize)
-       h = 0;
-    }
-    gfree(encoding[code]);
-  }
-
-  // associate name with code
-  encoding[code] = name;
-
-  // insert name in hash table
-  addChar1(code, name);
-}
-
-void GfxFontEncoding::addChar1(int code, char *name) {
-  int h, i, code2;
-
-  // insert name in hash table
-  h = hash(name); 
-  for (i = 0; i < gfxFontEncHashSize; ++i) {
-    code2 = hashTab[h];
-    if (code2 < 0) {
-      hashTab[h] = code;
-      break;
-    } else if (encoding[code2] && !strcmp(encoding[code2], name)) {
-      // keep the highest code for each char -- this is needed because
-      // X won't display chars with codes < 32
-      if (code > code2)
-       hashTab[h] = code;
-      break;
-    }
-    if (++h == gfxFontEncHashSize)
-      h = 0;
-  }
-}
-
-GfxFontEncoding::~GfxFontEncoding() {
-  int i;
-
-  if (freeEnc) {
-    for (i = 0; i < 256; ++i) {
-      if (encoding[i])
-       gfree(encoding[i]);
-    }
-    gfree(encoding);
-  }
-}
-
-int GfxFontEncoding::getCharCode(char *name) {
-  int h, i, code;
-
-  h = hash(name);
-  for (i = 0; i < gfxFontEncHashSize; ++i) {
-    code = hashTab[h];
-    if (code == -1 ||
-       (code > 0 && encoding[code] && !strcmp(encoding[code], name)))
-      return code;
-    if (++h >= gfxFontEncHashSize)
-      h = 0;
-  }
-  return -1;
-}
-
 //------------------------------------------------------------------------
 // GfxFont
 //------------------------------------------------------------------------
 
 GfxFont::GfxFont(char *tag1, Ref id1, Dict *fontDict) {
   BuiltinFont *builtinFont;
-  char buf[256];
-  Object obj1, obj2, obj3;
-  char *p1, *p2;
+  Object obj1, obj2, obj3, obj4;
   int i;
 
   // get font tag and ID
@@ -200,6 +90,8 @@ GfxFont::GfxFont(char *tag1, Ref id1, Dict *fontDict) {
   fontDict->lookup("Subtype", &obj1);
   if (obj1.isName("Type1"))
     type = fontType1;
+  else if (obj1.isName("Type1C"))
+    type = fontType1C;
   else if (obj1.isName("Type3"))
     type = fontType3;
   else if (obj1.isName("TrueType"))
@@ -209,75 +101,78 @@ GfxFont::GfxFont(char *tag1, Ref id1, Dict *fontDict) {
   obj1.free();
   is16 = gFalse;
 
-  // get info from font descriptor
-  // for flags: assume Times-Roman (or TimesNewRoman), but
-  // explicitly check for Arial and CourierNew -- certain PDF
-  // generators apparently don't include FontDescriptors for Arial,
-  // TimesNewRoman, and CourierNew
+  // assume Times-Roman (or TimesNewRoman), but explicitly check for
+  // Arial and CourierNew -- certain PDF generators apparently don't
+  // include FontDescriptors for Arial, TimesNewRoman, and CourierNew
   flags = fontSerif;   // assume Times-Roman by default
   if (type == fontTrueType && !name->cmp("Arial"))
     flags = 0;
   else if (type == fontTrueType && !name->cmp("CourierNew"))
     flags = fontFixedWidth;
+
+  // get info from font descriptor
+  embFontName = NULL;
   embFontID.num = -1;
   embFontID.gen = -1;
-  embFontName = NULL;
-  extFontFile = NULL;
   fontDict->lookup("FontDescriptor", &obj1);
   if (obj1.isDict()) {
 
-    // flags
+    // get flags
     obj1.dictLookup("Flags", &obj2);
     if (obj2.isInt())
       flags = obj2.getInt();
     obj2.free();
 
-    // embedded Type 1 font file and font name
+    // get name
+    obj1.dictLookup("FontName", &obj2);
+    if (obj2.isName())
+      embFontName = new GString(obj2.getName());
+    obj2.free();
+
+    // look for embedded font file
     if (type == fontType1) {
       obj1.dictLookupNF("FontFile", &obj2);
+      if (obj2.isRef())
+       embFontID = obj2.getRef();
+      obj2.free();
+    }
+    if (embFontID.num == -1 && type == fontTrueType) {
+      obj1.dictLookupNF("FontFile2", &obj2);
+      if (obj2.isRef())
+       embFontID = obj2.getRef();
+      obj2.free();
+    }
+    if (embFontID.num == -1) {
+      obj1.dictLookupNF("FontFile3", &obj2);
       if (obj2.isRef()) {
        embFontID = obj2.getRef();
-
-       // get font name from the font file itself since font subsets
-       // sometimes use the 'AAAAAA+foo' name and sometimes use just 'foo'
        obj2.fetch(&obj3);
        if (obj3.isStream()) {
-         obj3.streamReset();
-         for (i = 0; i < 64; ++i) {
-           obj3.streamGetLine(buf, sizeof(buf));
-           if (!strncmp(buf, "/FontName", 9)) {
-             if ((p1 = strchr(buf+9, '/'))) {
-               ++p1;
-               for (p2 = p1; *p2 && !isspace(*p2); ++p2) ;
-               embFontName = new GString(p1, p2 - p1);
-             }
-             break;
-           }
-         }
+         obj3.streamGetDict()->lookup("Subtype", &obj4);
+         if (obj4.isName("Type1"))
+           type = fontType1;
+         else if (obj4.isName("Type1C"))
+           type = fontType1C;
+         else if (obj4.isName("Type3"))
+           type = fontType3;
+         else if (obj4.isName("TrueType"))
+           type = fontTrueType;
+         else if (obj4.isName("Type0"))
+           type = fontType0;
+         obj4.free();
        }
        obj3.free();
-       obj2.free();
-
-       // couldn't find font name so just use the one in the PDF font
-       // descriptor
-       if (!embFontName) {
-         obj1.dictLookup("FontName", &obj2);
-         if (obj2.isName())
-           embFontName = new GString(obj2.getName());
-       }
       }
       obj2.free();
-
-    // embedded TrueType font file
-    } else if (type == fontTrueType) {
-      obj1.dictLookupNF("FontFile2", &obj2);
-      if (obj2.isRef())
-       embFontID = obj2.getRef();
-      obj2.free();
     }
   }
   obj1.free();
 
+  // look for an external font file
+  extFontFile = NULL;
+  if (type == fontType1 && name)
+    findExtFontFile();
+
   // get font matrix
   fontMat[0] = fontMat[3] = 1;
   fontMat[1] = fontMat[2] = fontMat[4] = fontMat[5] = 0;
@@ -291,15 +186,10 @@ GfxFont::GfxFont(char *tag1, Ref id1, Dict *fontDict) {
   obj1.free();
 
   // get encoding and character widths
-  if (type == fontType0) {
+  if (type == fontType0)
     getType0EncAndWidths(fontDict);
-  } else if (builtinFont) {
-    makeEncoding(fontDict, builtinFont->encoding);
-    makeWidths(fontDict, builtinFont->encoding, builtinFont->widths);
-  } else {
-    makeEncoding(fontDict, NULL);
-    makeWidths(fontDict, NULL, NULL);
-  }
+  else
+    getEncAndWidths(fontDict, builtinFont);
 }
 
 GfxFont::~GfxFont() {
@@ -312,8 +202,10 @@ GfxFont::~GfxFont() {
     delete embFontName;
   if (extFontFile)
     delete extFontFile;
-  if (is16)
+  if (is16) {
     gfree(widths16.exceps);
+    gfree(widths16.excepsV);
+  }
 }
 
 double GfxFont::getWidth(GString *s) {
@@ -348,36 +240,150 @@ double GfxFont::getWidth16(int c) {
   return w;
 }
 
-double GfxFont::getWidth16(GString *s) {
-  double w;
-  int c;
-  int i;
+double GfxFont::getHeight16(int c) {
+  double h;
+  int a, b, m;
 
-  w = 0;
-  for (i = 0; i < s->getLength(); i += 2) {
-    c = (s->getChar(i) << 8) + s->getChar(i+1);
-    w += getWidth16(c);
+  h = widths16.defHeight;
+  a = -1;
+  b = widths16.numExcepsV;
+  // invariant: widths16.excepsV[a].last < c < widths16.excepsV[b].first
+  while (b - a > 1) {
+    m = (a + b) / 2;
+    if (widths16.excepsV[m].last < c) {
+      a = m;
+    } else if (c < widths16.excepsV[m].first) {
+      b = m;
+    } else {
+      h = widths16.excepsV[m].height;
+      break;
+    }
   }
-  return w;
+  return h;
 }
 
-void GfxFont::makeEncoding(Dict *fontDict, GfxFontEncoding *builtinEncoding) {
-  GfxFontEncoding *baseEnc;
+double GfxFont::getOriginX16(int c) {
+  double vx;
+  int a, b, m;
+
+  vx = widths16.defWidth / 2;
+  a = -1;
+  b = widths16.numExcepsV;
+  // invariant: widths16.excepsV[a].last < c < widths16.excepsV[b].first
+  while (b - a > 1) {
+    m = (a + b) / 2;
+    if (widths16.excepsV[m].last < c) {
+      a = m;
+    } else if (c < widths16.excepsV[m].first) {
+      b = m;
+    } else {
+      vx = widths16.excepsV[m].vx;
+      break;
+    }
+  }
+  return vx;
+}
+
+double GfxFont::getOriginY16(int c) {
+  double vy;
+  int a, b, m;
+
+  vy = widths16.defVY;
+  a = -1;
+  b = widths16.numExcepsV;
+  // invariant: widths16.excepsV[a].last < c < widths16.excepsV[b].first
+  while (b - a > 1) {
+    m = (a + b) / 2;
+    if (widths16.excepsV[m].last < c) {
+      a = m;
+    } else if (c < widths16.excepsV[m].first) {
+      b = m;
+    } else {
+      vy = widths16.excepsV[m].vy;
+      break;
+    }
+  }
+  return vy;
+}
+
+void GfxFont::getEncAndWidths(Dict *fontDict, BuiltinFont *builtinFont) {
   Object obj1, obj2, obj3;
-  char *charName;
+  char *buf;
+  int len;
+  FontFile *fontFile;
   int code, i;
 
-  // start with empty encoding
-  encoding = new GfxFontEncoding();
-
-  // get encoding from font dict
+  // Encodings start with a base encoding, which can come from
+  // (in order of priority):
+  //   1. FontDict.Encoding or FontDict.Encoding.BaseEncoding
+  //        - MacRoman / WinAnsi / Standard
+  //   2. embedded font file
+  //   3. default:
+  //        - builtin --> builtin encoding
+  //        - TrueType --> MacRomanEncoding
+  //        - others --> StandardEncoding
+  // and then add a list of differences from
+  // FontDict.Encoding.Differences.
+
+  // check FontDict for base encoding
+  encoding = NULL;
   fontDict->lookup("Encoding", &obj1);
-
-  // encoding specified by dictionary
   if (obj1.isDict()) {
     obj1.dictLookup("BaseEncoding", &obj2);
-    baseEnc = makeEncoding1(obj2, fontDict, builtinEncoding);
+    if (obj2.isName("MacRomanEncoding")) {
+      encoding = macRomanEncoding.copy();
+    } else if (obj2.isName("WinAnsiEncoding")) {
+      encoding = winAnsiEncoding.copy();
+    } else if (obj2.isName("StandardEncoding")) {
+      encoding = standardEncoding.copy();
+    }
     obj2.free();
+  } else if (obj1.isName("MacRomanEncoding")) {
+    encoding = macRomanEncoding.copy();
+  } else if (obj1.isName("WinAnsiEncoding")) {
+    encoding = winAnsiEncoding.copy();
+  } else if (obj1.isName("StandardEncoding")) {
+    encoding = standardEncoding.copy();
+  }
+  obj1.free();
+
+  // check embedded or external font file for base encoding
+  if ((type == fontType1 || type == fontType1C) &&
+      (extFontFile || embFontID.num >= 0)) {
+    if (extFontFile)
+      buf = readExtFontFile(&len);
+    else
+      buf = readEmbFontFile(&len);
+    if (buf) {
+      if (type == fontType1)
+       fontFile = new Type1FontFile(buf, len);
+      else
+       fontFile = new Type1CFontFile(buf, len);
+      if (fontFile->getName()) {
+       if (embFontName)
+         delete embFontName;
+       embFontName = new GString(fontFile->getName());
+      }
+      if (!encoding)
+       encoding = fontFile->getEncoding(gTrue);
+      delete fontFile;
+      gfree(buf);
+    }
+  }
+
+  // get default base encoding
+  if (!encoding) {
+    if (builtinFont)
+      encoding = builtinFont->encoding->copy();
+    else if (type == fontTrueType)
+      encoding = macRomanEncoding.copy();
+    else
+      encoding = standardEncoding.copy();
+  }
+
+  // merge differences into encoding
+  fontDict->lookup("Encoding", &obj1);
+  if (obj1.isDict()) {
     obj1.dictLookup("Differences", &obj2);
     if (obj2.isArray()) {
       code = 0;
@@ -397,149 +403,95 @@ void GfxFont::makeEncoding(Dict *fontDict, GfxFontEncoding *builtinEncoding) {
       }
     }
     obj2.free();
-
-  // encoding specified by name or null
-  } else {
-    baseEnc = makeEncoding1(obj1, fontDict, builtinEncoding);
   }
-
-  // free the font dict encoding
   obj1.free();
 
-  // merge base encoding and differences;
-  for (code = 0; code < 256; ++code) {
-    if (!encoding->getCharName(code)) {
-      if ((charName = baseEnc->getCharName(code)))
-       encoding->addChar(code, copyString(charName));
-    }
-  }
+  // get character widths
+  if (builtinFont)
+    makeWidths(fontDict, builtinFont->encoding, builtinFont->widths);
+  else
+    makeWidths(fontDict, NULL, NULL);
 }
 
-GfxFontEncoding *GfxFont::makeEncoding1(Object obj, Dict *fontDict,
-                                       GfxFontEncoding *builtinEncoding) {
-  GfxFontEncoding *enc;
-  GBool haveEncoding;
-  Object obj1, obj2;
+void GfxFont::findExtFontFile() {
   char **path;
   FILE *f;
-  FileStream *str;
-
-  // MacRoman, WinAnsi, or Standard encoding
-  if (obj.isName("MacRomanEncoding")) {
-    enc = &macRomanEncoding;
-  } else if (obj.isName("WinAnsiEncoding")) {
-    enc = &winAnsiEncoding;
-  } else if (obj.isName("StandardEncoding")) {
-    enc = &standardEncoding;
-
-  // use the built-in font encoding if possible
-  } else if (builtinEncoding) {
-    enc = builtinEncoding;
-
-  // check font type
-  } else {
-
-    // Type 1 font: try to get encoding from font file
-    if (type == fontType1) {
-
-      // default to using standard encoding
-      enc = &standardEncoding;
-
-      // is there an external font file?
-      haveEncoding = gFalse;
-      if (name) {
-       for (path = fontPath; *path; ++path) {
-         extFontFile = appendToPath(new GString(*path), name->getCString());
-         f = fopen(extFontFile->getCString(), "rb");
-         if (!f) {
-           extFontFile->append(".pfb");
-           f = fopen(extFontFile->getCString(), "rb");
-         }
-         if (!f) {
-           extFontFile->del(extFontFile->getLength() - 4, 4);
-           extFontFile->append(".pfa");
-           f = fopen(extFontFile->getCString(), "rb");
-         }
-         if (f) {
-           obj1.initNull();
-           str = new FileStream(f, 0, -1, &obj1);
-           getType1Encoding(str);
-           delete str;
-           fclose(f);
-           haveEncoding = gTrue;
-           break;
-         }
-         delete extFontFile;
-         extFontFile = NULL;
-       }
-      }
 
-      // is there an embedded font file?
-      // (this has to be checked after the external font because
-      // XOutputDev needs the encoding from the external font)
-      if (!haveEncoding && embFontID.num >= 0) {
-       obj1.initRef(embFontID.num, embFontID.gen);
-       obj1.fetch(&obj2);
-       if (obj2.isStream())
-         getType1Encoding(obj2.getStream());
-       obj2.free();
-       obj1.free();
-      }
-
-    // TrueType font: use Mac encoding
-    } else if (type == fontTrueType) {
-      enc = &macRomanEncoding;
-
-    // not Type 1 or TrueType: just use the standard encoding
-    } else {
-      enc = &standardEncoding;
+  for (path = fontPath; *path; ++path) {
+    extFontFile = appendToPath(new GString(*path), name->getCString());
+    f = fopen(extFontFile->getCString(), "rb");
+    if (!f) {
+      extFontFile->append(".pfb");
+      f = fopen(extFontFile->getCString(), "rb");
+    }
+    if (!f) {
+      extFontFile->del(extFontFile->getLength() - 4, 4);
+      extFontFile->append(".pfa");
+      f = fopen(extFontFile->getCString(), "rb");
     }
+    if (f) {
+      fclose(f);
+      break;
+    }
+    delete extFontFile;
+    extFontFile = NULL;
   }
+}
+
+char *GfxFont::readExtFontFile(int *len) {
+  FILE *f;
+  char *buf;
 
-  return enc;
+  if (!(f = fopen(extFontFile->getCString(), "rb"))) {
+    error(-1, "Internal: external font file '%s' vanished", extFontFile);
+    return NULL;
+  }
+  fseek(f, 0, SEEK_END);
+  *len = (int)ftell(f);
+  fseek(f, 0, SEEK_SET);
+  buf = (char *)gmalloc(*len);
+  if ((int)fread(buf, 1, *len, f) != *len)
+    error(-1, "Error reading external font file '%s'", extFontFile);
+  fclose(f);
+  return buf;
 }
 
-void GfxFont::getType1Encoding(Stream *str) {
-  char buf[256];
-  char *p;
-  GBool found;
-  int code, i;
+char *GfxFont::readEmbFontFile(int *len) {
+  char *buf;
+  Object obj1, obj2;
+  Stream *str;
+  int c;
+  int size, i;
 
-  // look for encoding in font file
-  str->reset();
-  found = gFalse;
-  for (i = 0; i < 100; ++i) {
-    if (!str->getLine(buf, sizeof(buf)))
-      break;
-    if (!strncmp(buf, "/Encoding StandardEncoding def", 30))
-      break;
-    if (!strncmp(buf, "/Encoding 256 array", 19)) {
-      found = gTrue;
-      break;
-    }
+  obj1.initRef(embFontID.num, embFontID.gen);
+  obj1.fetch(&obj2);
+  if (!obj2.isStream()) {
+    error(-1, "Embedded font file is not a stream");
+    obj2.free();
+    obj1.free();
+    return NULL;
   }
+  str = obj2.getStream();
 
-  // found the encoding, grab it
-  if (found) {
-    for (i = 0; i < 300; ++i) {
-      if (!str->getLine(buf, sizeof(buf)))
-       break;
-      p = strtok(buf, " \t");
-      if (p && !strcmp(p, "dup")) {
-       if ((p = strtok(NULL, " \t"))) {
-         code = atoi(p);
-         if ((p = strtok(NULL, " \t"))) {
-           if (p[0] == '/')
-             encoding->addChar(code, copyString(p+1));
-         }
-       }
-      }
+  buf = NULL;
+  i = size = 0;
+  str->reset();
+  while ((c = str->getChar()) != EOF) {
+    if (i == size) {
+      size += 4096;
+      buf = (char *)grealloc(buf, size);
     }
-    //~ look for getinterval/putinterval junk
+    buf[i++] = c;
   }
+  *len = i;
+
+  obj2.free();
+  obj1.free();
+
+  return buf;
 }
 
-void GfxFont::makeWidths(Dict *fontDict, GfxFontEncoding *builtinEncoding,
+void GfxFont::makeWidths(Dict *fontDict, FontEncoding *builtinEncoding,
                         Gushort *builtinWidths) {
   Object obj1, obj2;
   int firstChar, lastChar;
@@ -585,7 +537,7 @@ void GfxFont::makeWidths(Dict *fontDict, GfxFontEncoding *builtinEncoding,
     } else {
 
       // couldn't find widths -- use defaults 
-#if 0
+#if 0 //~
       //~ certain PDF generators apparently don't include widths
       //~ for Arial and TimesNewRoman -- and this error message
       //~ is a nuisance
@@ -614,10 +566,14 @@ void GfxFont::makeWidths(Dict *fontDict, GfxFontEncoding *builtinEncoding,
 }
 
 void GfxFont::getType0EncAndWidths(Dict *fontDict) {
-  Object obj1, obj2, obj3, obj4, obj5, obj6;
+  Object obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8;
   int excepsSize;
   int i, j, k, n;
 
+  widths16.exceps = NULL;
+  widths16.excepsV = NULL;
+
+  // get the CIDFont
   fontDict->lookup("DescendantFonts", &obj1);
   if (!obj1.isArray() || obj1.arrayGetLength() != 1) {
     error(-1, "Bad DescendantFonts entry for Type 0 font");
@@ -629,6 +585,7 @@ void GfxFont::getType0EncAndWidths(Dict *fontDict) {
     goto err2;
   }
 
+  // get font info
   obj2.dictLookup("CIDSystemInfo", &obj3);
   if (!obj3.isDict()) {
     error(-1, "Bad CIDSystemInfo in Type 0 font descendant");
@@ -659,6 +616,7 @@ void GfxFont::getType0EncAndWidths(Dict *fontDict) {
   obj4.free();
   obj3.free();
 
+  // get default char width
   obj2.dictLookup("DW", &obj3);
   if (obj3.isInt())
     widths16.defWidth = obj3.getInt() * 0.001;
@@ -666,6 +624,25 @@ void GfxFont::getType0EncAndWidths(Dict *fontDict) {
     widths16.defWidth = 1.0;
   obj3.free();
 
+  // get default char metrics for vertical font
+  obj2.dictLookup("DW2", &obj3);
+  widths16.defVY = 0.880;
+  widths16.defHeight = -1;
+  if (obj3.isArray() && obj3.arrayGetLength() == 2) {
+    obj3.arrayGet(0, &obj4);
+    if (obj4.isInt()) {
+      widths16.defVY = obj4.getInt() * 0.001;
+    }
+    obj4.free();
+    obj3.arrayGet(1, &obj4);
+    if (obj4.isInt()) {
+      widths16.defHeight = obj4.getInt() * 0.001;
+    }
+    obj4.free();
+  }
+  obj3.free();
+
+  // get char width exceptions
   widths16.exceps = NULL;
   widths16.numExceps = 0;
   obj2.dictLookup("W", &obj3);
@@ -734,9 +711,93 @@ void GfxFont::getType0EncAndWidths(Dict *fontDict) {
   }
   obj3.free();
 
+  // get char metric exceptions for vertical font
+  widths16.excepsV = NULL;
+  widths16.numExcepsV = 0;
+  obj2.dictLookup("W2", &obj3);
+  if (obj3.isArray()) {
+    excepsSize = 0;
+    k = 0;
+    i = 0;
+    while (i+1 < obj3.arrayGetLength()) {
+      obj3.arrayGet(i, &obj4);
+      obj3.arrayGet(i+1, &obj5);
+      if (obj4.isInt() && obj5.isInt()) {
+       obj3.arrayGet(i+2, &obj6);
+       obj3.arrayGet(i+3, &obj7);
+       obj3.arrayGet(i+4, &obj8);
+       if (!obj6.isNum() || !obj7.isNum() || !obj8.isNum()) {
+         error(-1, "Bad widths (W2) array in Type 0 font");
+         obj8.free();
+         obj7.free();
+         obj6.free();
+         obj5.free();
+         obj4.free();
+         break;
+       }
+       if (k == excepsSize) {
+         excepsSize += 16;
+         widths16.excepsV = (GfxFontWidthExcepV *)
+                       grealloc(widths16.excepsV,
+                                excepsSize * sizeof(GfxFontWidthExcepV));
+       }
+       widths16.excepsV[k].first = obj4.getInt();
+       widths16.excepsV[k].last = obj5.getInt();
+       widths16.excepsV[k].height = obj6.getNum() * 0.001;
+       widths16.excepsV[k].vx = obj7.getNum() * 0.001;
+       widths16.excepsV[k].vy = obj8.getNum() * 0.001;
+       obj8.free();
+       obj7.free();
+       obj6.free();
+       ++k;
+       i += 5;
+      } else if (obj4.isInt() && obj5.isArray()) {
+       if (k + obj5.arrayGetLength() / 3 >= excepsSize) {
+         excepsSize = (k + obj5.arrayGetLength() / 3 + 15) & ~15;
+         widths16.excepsV = (GfxFontWidthExcepV *)
+                       grealloc(widths16.excepsV,
+                                excepsSize * sizeof(GfxFontWidthExcepV));
+       }
+       n = obj4.getInt();
+       for (j = 0; j < obj5.arrayGetLength(); j += 3) {
+         obj5.arrayGet(j, &obj6);
+         obj5.arrayGet(j+1, &obj7);
+         obj5.arrayGet(j+1, &obj8);
+         if (!obj6.isNum() || !obj7.isNum() || !obj8.isNum()) {
+           error(-1, "Bad widths (W2) array in Type 0 font");
+           obj6.free();
+           break;
+         }
+         widths16.excepsV[k].first = widths16.exceps[k].last = n++;
+         widths16.excepsV[k].height = obj6.getNum() * 0.001;
+         widths16.excepsV[k].vx = obj7.getNum() * 0.001;
+         widths16.excepsV[k].vy = obj8.getNum() * 0.001;
+         obj8.free();
+         obj7.free();
+         obj6.free();
+         ++k;
+       }
+       i += 2;
+      } else {
+       error(-1, "Bad widths array in Type 0 font");
+       obj5.free();
+       obj4.free();
+       break;
+      }
+      obj5.free();
+      obj4.free();
+    }
+    widths16.numExcepsV = k;
+    if (k > 0) {
+      qsort(widths16.excepsV, k, sizeof(GfxFontWidthExcepV), &cmpWidthExcepV);
+    }
+  }
+  obj3.free();
+
   obj2.free();
   obj1.free();
 
+  // get encoding (CMap)
   fontDict->lookup("Encoding", &obj1);
   if (!obj1.isName()) {
     error(-1, "Bad encoding for Type 0 font");
@@ -769,7 +830,8 @@ void GfxFont::getType0EncAndWidths(Dict *fontDict) {
   obj2.free();
  err1:
   obj1.free();
-  makeEncoding(fontDict, NULL);
+  //~ fix this --> add 16-bit font support to FontFile
+  encoding = new FontEncoding();
   makeWidths(fontDict, NULL, NULL);
 }
 
@@ -777,6 +839,10 @@ static int CDECL cmpWidthExcep(const void *w1, const void *w2) {
   return ((GfxFontWidthExcep *)w1)->first - ((GfxFontWidthExcep *)w2)->first;
 }
 
+static int CDECL cmpWidthExcepV(const void *w1, const void *w2) {
+  return ((GfxFontWidthExcepV *)w1)->first - ((GfxFontWidthExcepV *)w2)->first;
+}
+
 //------------------------------------------------------------------------
 // GfxFontDict
 //------------------------------------------------------------------------
index 0e894d9c4541d52e886a039eee175bb6b2618f3c..30bcf1a572ddd958b841826ef277b2d94a449323 100644 (file)
 #include "gtypes.h"
 #include "GString.h"
 #include "Object.h"
+#include "FontEncoding.h"
 
 class Dict;
-
-//------------------------------------------------------------------------
-// GfxFontEncoding
-//------------------------------------------------------------------------
-
-#define gfxFontEncHashSize 419
-
-class GfxFontEncoding {
-public:
-
-  // Construct an empty encoding.
-  GfxFontEncoding();
-
-  // Construct an encoding from an array of char names.
-  GfxFontEncoding(char **encoding1, int encSize);
-
-  // Destructor.
-  ~GfxFontEncoding();
-
-  // Add a char to the encoding.
-  void addChar(int code, char *name);
-
-  // Return the character name associated with <code>.
-  char *getCharName(int code) { return encoding[code]; }
-
-  // Return the code associated with <name>.
-  int getCharCode(char *name);
-
-private:
-
-  int hash(char *name);
-  void addChar1(int code, char *name);
-
-  char **encoding;             // code --> name mapping
-  GBool freeEnc;               // should we free the encoding array?
-  short                                // name --> code hash table
-    hashTab[gfxFontEncHashSize];
-};
+struct BuiltinFont;
 
 //------------------------------------------------------------------------
 // GfxFontCharSet16
@@ -70,6 +34,7 @@ enum GfxFontCharSet16 {
 //------------------------------------------------------------------------
 
 struct GfxFontEncoding16 {
+  int wMode;                   // writing mode (0=horizontal, 1=vertical)
   Guchar codeLen[256];         // length of codes, in bytes, indexed by
                                //   first byte of code
   Gushort map1[256];           // one-byte code mapping:
@@ -86,15 +51,26 @@ struct GfxFontEncoding16 {
 //------------------------------------------------------------------------
 
 struct GfxFontWidthExcep {
-  int first;                   // chars <first>..<last> have
-  int last;                    //   width <width>
-  double width;
+  int first;                   // this record applies to
+  int last;                    //   chars <first>..<last>
+  double width;                        // char width
+};
+
+struct GfxFontWidthExcepV {
+  int first;                   // this record applies to
+  int last;                    //   chars <first>..<last>
+  double height;               // char height
+  double vx, vy;               // origin position
 };
 
 struct GfxFontWidths16 {
   double defWidth;             // default char width
+  double defHeight;            // default char height
+  double defVY;                        // default origin position
   GfxFontWidthExcep *exceps;   // exceptions
   int numExceps;               // number of valid entries in exceps
+  GfxFontWidthExcepV *excepsV; // exceptions for vertical font
+  int numExcepsV;              // number of valid entries in excepsV
 };
 
 //------------------------------------------------------------------------
@@ -110,6 +86,7 @@ struct GfxFontWidths16 {
 enum GfxFontType {
   fontUnknownType,
   fontType1,
+  fontType1C,
   fontType3,
   fontTrueType,
   fontType0
@@ -167,8 +144,15 @@ public:
   // Get width of a character or string.
   double getWidth(Guchar c) { return widths[c]; }
   double getWidth(GString *s);
+
+  // Get character metrics for 16-bit font.
   double getWidth16(int c);
-  double getWidth16(GString *s);
+  double getHeight16(int c);
+  double getOriginX16(int c);
+  double getOriginY16(int c);
+
+  // Return the encoding.
+  FontEncoding *getEncoding() { return encoding; }
 
   // Return the character name associated with <code>.
   char *getCharName(int code) { return encoding->getCharName(code); }
@@ -180,16 +164,21 @@ public:
   GfxFontCharSet16 getCharSet16() { return enc16.charSet; }
   GfxFontEncoding16 *getEncoding16() { return enc16.enc; }
 
+  // Get the writing mode (0=horizontal, 1=vertical).
+  int getWMode16() { return enc16.enc->wMode; }
+
   // Return the font matrix.
   double *getFontMatrix() { return fontMat; }
 
+  // Read an external or embedded font file into a buffer.
+  char *readExtFontFile(int *len);
+  char *readEmbFontFile(int *len);
+
 private:
 
-  void makeEncoding(Dict *fontDict, GfxFontEncoding *builtinEncoding);
-  GfxFontEncoding *makeEncoding1(Object obj, Dict *fontDesc,
-                                GfxFontEncoding *builtinEncoding);
-  void getType1Encoding(Stream *str);
-  void makeWidths(Dict *fontDict, GfxFontEncoding *builtinEncoding,
+  void getEncAndWidths(Dict *fontDict, BuiltinFont *builtinFont);
+  void findExtFontFile();
+  void makeWidths(Dict *fontDict, FontEncoding *builtinEncoding,
                  Gushort *builtinWidths);
   void getType0EncAndWidths(Dict *fontDict);
 
@@ -204,7 +193,7 @@ private:
   GString *extFontFile;                // external font file name
   double fontMat[6];           // font matrix
   union {
-    GfxFontEncoding *encoding; // 8-bit font encoding
+    FontEncoding *encoding;    // 8-bit font encoding
     struct {
       GfxFontCharSet16 charSet;        // 16-bit character set
       GfxFontEncoding16 *enc;  // 16-bit encoding (CMap)
index bf0e4de331e8fcde0ff0e611f21eb5ab7986c1d1..c1b6090e80c2d75992a4dd1474aced24d22d9d33 100644 (file)
@@ -45,12 +45,12 @@ GfxColorSpace::GfxColorSpace(Object *colorSpace) {
   ok = gTrue;
   lookup = NULL;
 
-  // check for Separation colorspace
+  // check for Separation, DeviceN, and Pattern colorspaces
   colorSpace->copy(&csObj);
   sepFunc = NULL;
   if (colorSpace->isArray()) {
     colorSpace->arrayGet(0, &obj);
-    if (obj.isName("Separation")) {
+    if (obj.isName("Separation") || obj.isName("DeviceN")) {
       csObj.free();
       colorSpace->arrayGet(2, &csObj);
       sepFunc = new Function(colorSpace->arrayGet(3, &obj2));
@@ -59,6 +59,9 @@ GfxColorSpace::GfxColorSpace(Object *colorSpace) {
        delete sepFunc;
        sepFunc = NULL;
       }
+    } else if (obj.isName("Pattern")) {
+      csObj.free();
+      colorSpace->arrayGet(1, &csObj);
     }
     obj.free();
   }
@@ -80,8 +83,9 @@ GfxColorSpace::GfxColorSpace(Object *colorSpace) {
   } else {
     goto err1;
   }
-  if (!ok)
-    return;
+  if (!ok) {
+    goto err1;
+  }
 
   // get lookup table for indexed colorspace
   if (indexed) {
@@ -528,6 +532,11 @@ GfxImageColorMap::GfxImageColorMap(int bits1, Object *decode,
   colorSpace = colorSpace1;
   mode = colorSpace->getMode();
 
+  // work around a bug in Distiller (?)
+  if (colorSpace->isIndexed() && maxPixel > colorSpace->getIndexHigh()) {
+    maxPixel = colorSpace->getIndexHigh();
+  }
+
   // get decode map
   if (decode->isNull()) {
     if (colorSpace->isIndexed()) {
@@ -930,6 +939,14 @@ void GfxState::textShift(double tx) {
   curY += dy;
 }
 
+void GfxState::textShift(double tx, double ty) {
+  double dx, dy;
+
+  textTransformDelta(tx, ty, &dx, &dy);
+  curX += dx;
+  curY += dy;
+}
+
 GfxState *GfxState::save() {
   GfxState *newState;
 
index 21bbec844042b287706006109cdb984143f6994f..f93ef890364c451be2edf2d8c5173ab54e7b4d61 100644 (file)
@@ -424,6 +424,7 @@ public:
   void textMoveTo(double tx, double ty)
     { lineX = tx; lineY = ty; textTransform(tx, ty, &curX, &curY); }
   void textShift(double tx);
+  void textShift(double tx, double ty);
 
   // Push/pop GfxState on/off stack.
   GfxState *save();
index 00782fb590e2821d7bfe9aa128177dee637e3ef0..93d1c31237d2e7d7ad243f0f8a0f0eb6f97f9288 100644 (file)
@@ -90,6 +90,7 @@ void ImageOutputDev::drawImage(GfxState *state, Stream *str, int width,
                               int height, GfxImageColorMap *colorMap,
                               GBool inlineImg) {
   FILE *f;
+  ImageStream *imgStr;
   Guchar pixBuf[4];
   GfxColor color;
   int x, y;
@@ -131,20 +132,23 @@ void ImageOutputDev::drawImage(GfxState *state, Stream *str, int width,
     fprintf(f, "255\n");
 
     // initialize stream
-    str->resetImage(width, colorMap->getNumPixelComps(), colorMap->getBits());
+    imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(),
+                            colorMap->getBits());
+    imgStr->reset();
 
     // for each line...
     for (y = 0; y < height; ++y) {
 
       // write the line
       for (x = 0; x < width; ++x) {
-       str->getImagePixel(pixBuf);
+       imgStr->getPixel(pixBuf);
        colorMap->getColor(pixBuf, &color);
        fputc((int)(color.getR() * 255 + 0.5), f);
        fputc((int)(color.getG() * 255 + 0.5), f);
        fputc((int)(color.getB() * 255 + 0.5), f);
       }
     }
+    delete imgStr;
 
     fclose(f);
   }
index 02b355c1a94b344f95d161bbd632e4b1048abed1..538618bcf9c00b11a8ad664df840f3e918de50d1 100644 (file)
@@ -323,12 +323,39 @@ LinkLaunch::~LinkLaunch() {
 // LinkURI
 //------------------------------------------------------------------------
 
-LinkURI::LinkURI(Object *uriObj) {
+LinkURI::LinkURI(Object *uriObj, GString *baseURI) {
+  GString *uri2;
+  int n;
+  char c;
+
   uri = NULL;
-  if (uriObj->isString())
-    uri = uriObj->getString()->copy();
-  else
+  if (uriObj->isString()) {
+    uri2 = uriObj->getString()->copy();
+    if (baseURI) {
+      n = strcspn(uri2->getCString(), "/:");
+      if (n == uri2->getLength() || uri2->getChar(n) == '/') {
+       uri = baseURI->copy();
+       c = uri->getChar(uri->getLength() - 1);
+       if (c == '/' || c == '?') {
+         if (uri2->getChar(0) == '/') {
+           uri2->del(0);
+         }
+       } else {
+         if (uri2->getChar(0) != '/') {
+           uri->append('/');
+         }
+       }
+       uri->append(uri2);
+       delete uri2;
+      } else {
+       uri = uri2;
+      }
+    } else {
+      uri = uri2;
+    }
+  } else {
     error(-1, "Illegal URI-type link");
+  }
 }
 
 LinkURI::~LinkURI() {
@@ -352,7 +379,7 @@ LinkUnknown::~LinkUnknown() {
 // Link
 //------------------------------------------------------------------------
 
-Link::Link(Dict *dict) {
+Link::Link(Dict *dict, GString *baseURI) {
   Object obj1, obj2, obj3, obj4;
   double t;
 
@@ -442,7 +469,7 @@ Link::Link(Dict *dict) {
       // URI action
       } else if (obj2.isName("URI")) {
        obj1.dictLookup("URI", &obj3);
-       action = new LinkURI(&obj3);
+       action = new LinkURI(&obj3, baseURI);
        obj3.free();
 
       // unknown action
@@ -485,7 +512,7 @@ Link::~Link() {
 // Links
 //------------------------------------------------------------------------
 
-Links::Links(Object *annots) {
+Links::Links(Object *annots, GString *baseURI) {
   Link *link;
   Object obj1, obj2;
   int size;
@@ -499,7 +526,7 @@ Links::Links(Object *annots) {
     for (i = 0; i < annots->arrayGetLength(); ++i) {
       if (annots->arrayGet(i, &obj1)->isDict()) {
        if (obj1.dictLookup("Subtype", &obj2)->isName("Link")) {
-         link = new Link(obj1.getDict());
+         link = new Link(obj1.getDict(), baseURI);
          if (link->isOk()) {
            if (numLinks >= size) {
              size += 16;
@@ -571,6 +598,7 @@ static GString *getFileSpecName(Object *fileSpecObj) {
       name = obj1.getString()->copy();
     else
       error(-1, "Illegal file spec in link");
+    obj1.free();
 
   // error
   } else {
index 62a4c85e57dfcfc87d1ac486ef48f817778fe5c6..71ad0c5cd1b03e549c2fb5fd91a09b7793c26a0b 100644 (file)
@@ -200,8 +200,8 @@ private:
 class LinkURI: public LinkAction {
 public:
 
-  // Build a LinkURI given the URI (string).
-  LinkURI(Object *uriObj);
+  // Build a LinkURI given the URI (string) and base URI.
+  LinkURI(Object *uriObj, GString *baseURI);
 
   // Destructor.
   virtual ~LinkURI();
@@ -251,7 +251,7 @@ class Link {
 public:
 
   // Construct a link, given its dictionary.
-  Link(Dict *dict);
+  Link(Dict *dict, GString *baseURI);
 
   // Destructor.
   ~Link();
@@ -288,7 +288,7 @@ class Links {
 public:
 
   // Extract links from array of annotations.
-  Links(Object *annots);
+  Links(Object *annots, GString *baseURI);
 
   // Destructor.
   ~Links();
index 2fe723c15ae72758d6fa42c12bb635b5c7828577..6b5935bf76419dfacae271d346fa49e6b80099c8 100644 (file)
@@ -18,6 +18,11 @@ common_sources =                     \
        Catalog.cc              \
        Dict.cc                 \
        Error.cc                \
+       FontEncoding.cc         \
+       FontEncoding.h          \
+       FontFile.cc             \
+       FontFile.h              \
+       FontInfo.h              \
        Gfx.cc                  \
        GfxFont.cc              \
        GfxState.cc             \
index dc96dadfebb2f73e56c94c16dee63809e7be8e2e..74f61c2250ad436dc0f876b07532db0d4eb9780b 100644 (file)
@@ -104,6 +104,10 @@ YACC = @YACC@
 ZVT_LIBS = @ZVT_LIBS@
 cflags_set = @cflags_set@
 cxxflags_set = @cxxflags_set@
+t1_CFLAGS = @t1_CFLAGS@
+t1_LIBS = @t1_LIBS@
+t1x_CFLAGS = @t1x_CFLAGS@
+t1x_LIBS = @t1x_LIBS@
 
 INCLUDES =     -I$(top_srcdir)/goo             -I$(top_srcdir)/ltk             -DGPDF_GLADE_DIR=\""$(gladedir)"\"              $(EXTRA_GNOME_CFLAGS)
 
@@ -112,7 +116,7 @@ INCLUDES =          -I$(top_srcdir)/goo             -I$(top_srcdir)/ltk             -DGPDF_GLADE_DIR=\""$(gla
 
 bin_PROGRAMS = pdftops pdftotext pdfinfo pdftopbm pdfimages $(gui)
 
-common_sources =       Array.cc                        Catalog.cc                      Dict.cc                         Error.cc                        Gfx.cc                          GfxFont.cc                      GfxState.cc                     Lexer.cc                        Link.cc                         Object.cc                       OutputDev.cc                    Page.cc                         Params.cc                       Parser.cc                       PDFDoc.cc                       Stream.cc                       TextOutputDev.cc                XRef.cc
+common_sources =       Array.cc                        Catalog.cc                      Dict.cc                         Error.cc                        FontEncoding.cc                 FontEncoding.h                  FontFile.cc                     FontFile.h                      FontInfo.h                      Gfx.cc                          GfxFont.cc                      GfxState.cc                     Lexer.cc                        Link.cc                         Object.cc                       OutputDev.cc                    Page.cc                         Params.cc                       Parser.cc                       PDFDoc.cc                       Stream.cc                       TextOutputDev.cc                XRef.cc
 
 
 gpdf_CFLAGS = 
@@ -176,41 +180,46 @@ X_CFLAGS = @X_CFLAGS@
 X_LIBS = @X_LIBS@
 X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_PRE_LIBS = @X_PRE_LIBS@
-pdftops_OBJECTS =  Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \
-GfxState.o Lexer.o Link.o Object.o OutputDev.o Page.o Params.o Parser.o \
-PDFDoc.o Stream.o TextOutputDev.o XRef.o PSOutputDev.o pdftops.o
+pdftops_OBJECTS =  Array.o Catalog.o Dict.o Error.o FontEncoding.o \
+FontFile.o Gfx.o GfxFont.o GfxState.o Lexer.o Link.o Object.o \
+OutputDev.o Page.o Params.o Parser.o PDFDoc.o Stream.o TextOutputDev.o \
+XRef.o PSOutputDev.o pdftops.o
 pdftops_DEPENDENCIES =  ../goo/libgoo.a
 pdftops_LDFLAGS = 
-pdftotext_OBJECTS =  Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \
-GfxState.o Lexer.o Link.o Object.o OutputDev.o Page.o Params.o Parser.o \
-PDFDoc.o Stream.o TextOutputDev.o XRef.o pdftotext.o
+pdftotext_OBJECTS =  Array.o Catalog.o Dict.o Error.o FontEncoding.o \
+FontFile.o Gfx.o GfxFont.o GfxState.o Lexer.o Link.o Object.o \
+OutputDev.o Page.o Params.o Parser.o PDFDoc.o Stream.o TextOutputDev.o \
+XRef.o pdftotext.o
 pdftotext_DEPENDENCIES =  ../goo/libgoo.a
 pdftotext_LDFLAGS = 
-pdfinfo_OBJECTS =  Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \
-GfxState.o Lexer.o Link.o Object.o OutputDev.o Page.o Params.o Parser.o \
-PDFDoc.o Stream.o TextOutputDev.o XRef.o pdfinfo.o
+pdfinfo_OBJECTS =  Array.o Catalog.o Dict.o Error.o FontEncoding.o \
+FontFile.o Gfx.o GfxFont.o GfxState.o Lexer.o Link.o Object.o \
+OutputDev.o Page.o Params.o Parser.o PDFDoc.o Stream.o TextOutputDev.o \
+XRef.o pdfinfo.o
 pdfinfo_DEPENDENCIES =  ../goo/libgoo.a
 pdfinfo_LDFLAGS = 
-pdftopbm_OBJECTS =  Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \
-GfxState.o Lexer.o Link.o Object.o OutputDev.o Page.o Params.o Parser.o \
-PDFDoc.o Stream.o TextOutputDev.o XRef.o PBMOutputDev.o XOutputDev.o \
-pdftopbm.o
+pdftopbm_OBJECTS =  Array.o Catalog.o Dict.o Error.o FontEncoding.o \
+FontFile.o Gfx.o GfxFont.o GfxState.o Lexer.o Link.o Object.o \
+OutputDev.o Page.o Params.o Parser.o PDFDoc.o Stream.o TextOutputDev.o \
+XRef.o PBMOutputDev.o XOutputDev.o pdftopbm.o
 pdftopbm_DEPENDENCIES =  ../goo/libgoo.a
 pdftopbm_LDFLAGS = 
-pdfimages_OBJECTS =  Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \
-GfxState.o Lexer.o Link.o Object.o OutputDev.o Page.o Params.o Parser.o \
-PDFDoc.o Stream.o TextOutputDev.o XRef.o ImageOutputDev.o pdfimages.o
+pdfimages_OBJECTS =  Array.o Catalog.o Dict.o Error.o FontEncoding.o \
+FontFile.o Gfx.o GfxFont.o GfxState.o Lexer.o Link.o Object.o \
+OutputDev.o Page.o Params.o Parser.o PDFDoc.o Stream.o TextOutputDev.o \
+XRef.o ImageOutputDev.o pdfimages.o
 pdfimages_DEPENDENCIES =  ../goo/libgoo.a
 pdfimages_LDFLAGS = 
-gpdf_OBJECTS =  Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \
-GfxState.o Lexer.o Link.o Object.o OutputDev.o Page.o Params.o Parser.o \
-PDFDoc.o Stream.o TextOutputDev.o XRef.o GOutputDev.o gpdf.o
+gpdf_OBJECTS =  Array.o Catalog.o Dict.o Error.o FontEncoding.o \
+FontFile.o Gfx.o GfxFont.o GfxState.o Lexer.o Link.o Object.o \
+OutputDev.o Page.o Params.o Parser.o PDFDoc.o Stream.o TextOutputDev.o \
+XRef.o GOutputDev.o gpdf.o
 gpdf_DEPENDENCIES =  ../goo/libgoo.a
 gpdf_LDFLAGS = 
-xpdf_OBJECTS =  Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \
-GfxState.o Lexer.o Link.o Object.o OutputDev.o Page.o Params.o Parser.o \
-PDFDoc.o Stream.o TextOutputDev.o XRef.o XOutputDev.o LTKOutputDev.o \
-PSOutputDev.o xpdf.o
+xpdf_OBJECTS =  Array.o Catalog.o Dict.o Error.o FontEncoding.o \
+FontFile.o Gfx.o GfxFont.o GfxState.o Lexer.o Link.o Object.o \
+OutputDev.o Page.o Params.o Parser.o PDFDoc.o Stream.o TextOutputDev.o \
+XRef.o XOutputDev.o LTKOutputDev.o PSOutputDev.o xpdf.o
 xpdf_DEPENDENCIES =  ../goo/libgoo.a ../ltk/libltk.a
 xpdf_LDFLAGS = 
 CXXFLAGS = @CXXFLAGS@
@@ -218,6 +227,11 @@ CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS
 LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
 CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
 DATA =  $(glade_DATA)
 
 DIST_COMMON =  ChangeLog Makefile.am Makefile.in
@@ -228,9 +242,10 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 TAR = gtar
 GZIP_ENV = --best
 DEP_FILES =  .deps/Array.P .deps/Catalog.P .deps/Dict.P .deps/Error.P \
-.deps/GOutputDev.P .deps/Gfx.P .deps/GfxFont.P .deps/GfxState.P \
-.deps/ImageOutputDev.P .deps/LTKOutputDev.P .deps/Lexer.P .deps/Link.P \
-.deps/Object.P .deps/OutputDev.P .deps/PBMOutputDev.P .deps/PDFDoc.P \
+.deps/FontEncoding.P .deps/FontFile.P .deps/GOutputDev.P .deps/Gfx.P \
+.deps/GfxFont.P .deps/GfxState.P .deps/ImageOutputDev.P \
+.deps/LTKOutputDev.P .deps/Lexer.P .deps/Link.P .deps/Object.P \
+.deps/OutputDev.P .deps/PBMOutputDev.P .deps/PDFDoc.P \
 .deps/PSOutputDev.P .deps/Page.P .deps/Params.P .deps/Parser.P \
 .deps/Stream.P .deps/TextOutputDev.P .deps/XOutputDev.P .deps/XRef.P \
 .deps/gpdf.P .deps/pdfimages.P .deps/pdfinfo.P .deps/pdftopbm.P \
index 777f5262dc54679f72289f4616d73375a867cf82..f9c10674d8957aede9507c7aaefeace4afd71c98 100644 (file)
@@ -106,16 +106,19 @@ void Object::free() {
     gfree(name);
     break;
   case objArray:
-    if (!array->decRef())
+    if (!array->decRef()) {
       delete array;
+    }
     break;
   case objDict:
-    if (!dict->decRef())
+    if (!dict->decRef()) {
       delete dict;
+    }
     break;
   case objStream:
-    if (!stream->decRef())
+    if (!stream->decRef()) {
       delete stream;
+    }
     break;
   case objCmd:
     gfree(cmd);
index 886b6a0b11a9761097c38e9d292d16ca5439cff4..1537c6a32272da6f3dc87194751d9962619e8fda 100644 (file)
@@ -163,6 +163,7 @@ GBool PDFDoc::saveAs(GString *name) {
 void PDFDoc::getLinks(int page) {
   Object obj;
 
-  links = new Links(catalog->getPage(page)->getAnnots(&obj));
+  links = new Links(catalog->getPage(page)->getAnnots(&obj),
+                   catalog->getBaseURI());
   obj.free();
 }
index bc7fb3c747dfd9979f1f5fb2d213232067f4eab6..edff5cddfa323089bdd7e3353a10735f6e86621c 100644 (file)
@@ -21,6 +21,7 @@
 #include "Error.h"
 #include "GfxState.h"
 #include "GfxFont.h"
+#include "FontFile.h"
 #include "Catalog.h"
 #include "Page.h"
 #include "Stream.h"
@@ -45,6 +46,18 @@ static char *prolog[] = {
   "% PDF special state",
   "/pdfDictSize 14 def",
   "/pdfSetup {",
+  "  2 array astore",
+  "  /setpagedevice where {",
+  "    pop 3 dict dup begin",
+  "      exch /PageSize exch def",
+  "      /ImagingBBox null def",
+  "      /Policies 1 dict dup begin /PageSize 3 def end def",
+  "    end setpagedevice",
+  "  } {",
+  "    pop",
+  "  } ifelse",
+  "} def",
+  "/pdfStartPage {",
   "  pdfDictSize dict begin",
   "  /pdfFill [0] def",
   "  /pdfStroke [0] def",
@@ -58,18 +71,6 @@ static char *prolog[] = {
   "  /pdfWordSpacing 0 def",
   "  /pdfHorizScaling 1 def",
   "} def",
-  "/pdfStartPage {",
-  "  2 array astore",
-  "  pdfSetup",
-  "  /setpagedevice where {",
-  "    pop 2 dict dup begin",
-  "      exch /PageSize exch def",
-  "      /ImagingBBox null def",
-  "    end setpagedevice",
-  "  } {",
-  "    pop",
-  "  } ifelse",
-  "} def",
   "/pdfEndPage { end } def",
   "/sCol { pdfLastStroke not {",
   "          pdfStroke aload length",
@@ -116,7 +117,7 @@ static char *prolog[] = {
   "/l { lineto } def",
   "/c { curveto } def",
   "/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto",
-  "      neg 0 rlineto closepath } def"
+  "      neg 0 rlineto closepath } def",
   "% path painting operators",
   "/S { sCol stroke } def",
   "/f { fCol fill } def",
@@ -316,10 +317,12 @@ PSOutputDev::PSOutputDev(char *fileName, Catalog *catalog,
     if ((resDict = catalog->getPage(pg)->getResourceDict()))
       setupFonts(resDict);
   }
-  if (doForm)
+  if (doForm) {
     writePS("end\n");
-  else
+  } else {
+    writePS("%d %d pdfSetup\n", paperWidth, paperHeight);
     writePS("%%%%EndSetup\n");
+  }
 
   // write form header
   if (doForm) {
@@ -421,21 +424,28 @@ void PSOutputDev::setupFont(GfxFont *font) {
   }
   fontIDs[fontIDLen++] = font->getID();
 
-  // check for embedded font
+  // check for embedded Type 1 font
   if (embedType1 && font->getType() == fontType1 &&
       font->getEmbeddedFontID(&fontFileID)) {
-    setupEmbeddedFont(&fontFileID);
+    setupEmbeddedType1Font(&fontFileID);
     psName = font->getEmbeddedFontName();
     scale = 1;
 
-  // check for external font file
+  // check for external Type 1 font file
   } else if (embedType1 && font->getType() == fontType1 &&
             font->getExtFontFile()) {
-    setupEmbeddedFont(font->getExtFontFile());
+    setupEmbeddedType1Font(font->getExtFontFile());
     // this assumes that the PS font name matches the PDF font name
     psName = font->getName()->getCString();
     scale = 1;
 
+  // check for embedded Type 1C font
+  } else if (embedType1 && font->getType() == fontType1C &&
+            font->getEmbeddedFontID(&fontFileID)) {
+    setupEmbeddedType1CFont(font, &fontFileID);
+    psName = font->getEmbeddedFontName();
+    scale = 1;
+
   // do font substitution
   } else {
     name = font->getName();
@@ -481,7 +491,7 @@ void PSOutputDev::setupFont(GfxFont *font) {
   writePS("pdfMakeFont\n");
 }
 
-void PSOutputDev::setupEmbeddedFont(Ref *id) {
+void PSOutputDev::setupEmbeddedType1Font(Ref *id) {
   static char hexChar[17] = "0123456789abcdef";
   Object refObj, strObj, obj1, obj2;
   Dict *dict;
@@ -589,7 +599,7 @@ void PSOutputDev::setupEmbeddedFont(Ref *id) {
 
 //~ This doesn't handle .pfb files or binary eexec data (which only
 //~ happens in pfb files?).
-void PSOutputDev::setupEmbeddedFont(char *fileName) {
+void PSOutputDev::setupEmbeddedType1Font(char *fileName) {
   FILE *fontFile;
   int c;
   int i;
@@ -618,6 +628,34 @@ void PSOutputDev::setupEmbeddedFont(char *fileName) {
   fclose(fontFile);
 }
 
+void PSOutputDev::setupEmbeddedType1CFont(GfxFont *font, Ref *id) {
+  char *fontBuf;
+  int fontLen;
+  Type1CFontConverter *cvt;
+  int i;
+
+  // check if font is already embedded
+  for (i = 0; i < fontFileIDLen; ++i) {
+    if (fontFileIDs[i].num == id->num &&
+       fontFileIDs[i].gen == id->gen)
+      return;
+  }
+
+  // add entry to fontFileIDs list
+  if (fontFileIDLen >= fontFileIDSize) {
+    fontFileIDSize += 64;
+    fontFileIDs = (Ref *)grealloc(fontFileIDs, fontFileIDSize * sizeof(Ref));
+  }
+  fontFileIDs[fontFileIDLen++] = *id;
+
+  // convert it to a Type 1 font
+  fontBuf = font->readEmbFontFile(&fontLen);
+  cvt = new Type1CFontConverter(fontBuf, fontLen, f);
+  cvt->convert();
+  delete cvt;
+  gfree(fontBuf);
+}
+
 void PSOutputDev::startPage(int pageNum, GfxState *state) {
   int x1, y1, x2, y2, width, height, t;
   double xScale, yScale;
@@ -642,7 +680,7 @@ void PSOutputDev::startPage(int pageNum, GfxState *state) {
     height = y2 - y1;
     if (width > height) {
       writePS("%%%%PageOrientation: Landscape\n");
-      writePS("%d %d pdfStartPage\n", paperWidth, paperHeight);
+      writePS("pdfStartPage\n");
       writePS("90 rotate\n");
       writePS("%d %d translate\n", -x1, -(y1 + paperWidth));
       t = width;
@@ -650,7 +688,7 @@ void PSOutputDev::startPage(int pageNum, GfxState *state) {
       height = t;
     } else {
       writePS("%%%%PageOrientation: Portrait\n");
-      writePS("%d %d pdfStartPage\n", paperWidth, paperHeight);
+      writePS("pdfStartPage\n");
       if (x1 != 0 || y1 != 0)
        writePS("%d %d translate\n", -x1, -y1);
     }
@@ -911,6 +949,7 @@ void PSOutputDev::drawImage(GfxState *state, Stream *str, int width,
 void PSOutputDev::doImageL1(GfxImageColorMap *colorMap,
                            GBool invert, GBool inlineImg,
                            Stream *str, int width, int height, int len) {
+  ImageStream *imgStr;
   Guchar pixBuf[4];
   GfxColor color;
   int x, y, i;
@@ -930,7 +969,9 @@ void PSOutputDev::doImageL1(GfxImageColorMap *colorMap,
   if (colorMap) {
 
     // set up to process the data stream
-    str->resetImage(width, colorMap->getNumPixelComps(), colorMap->getBits());
+    imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(),
+                            colorMap->getBits());
+    imgStr->reset();
 
     // process the data stream
     i = 0;
@@ -938,7 +979,7 @@ void PSOutputDev::doImageL1(GfxImageColorMap *colorMap,
 
       // write the line
       for (x = 0; x < width; ++x) {
-       str->getImagePixel(pixBuf);
+       imgStr->getPixel(pixBuf);
        colorMap->getColor(pixBuf, &color);
        fprintf(f, "%02x", (int)(color.getGray() * 255 + 0.5));
        if (++i == 32) {
@@ -949,6 +990,7 @@ void PSOutputDev::doImageL1(GfxImageColorMap *colorMap,
     }
     if (i != 0)
       fputc('\n', f);
+    delete imgStr;
 
   // imagemask
   } else {
index aa991fa650bcc2d322bb6f50e59aae0c5a3f7646..603cc08afcac4d6ec58f104ab48c9c5810740c13 100644 (file)
@@ -124,8 +124,9 @@ private:
 
   void setupFonts(Dict *resDict);
   void setupFont(GfxFont *font);
-  void setupEmbeddedFont(Ref *id);
-  void setupEmbeddedFont(char *fileName);
+  void setupEmbeddedType1Font(Ref *id);
+  void setupEmbeddedType1Font(char *fileName);
+  void setupEmbeddedType1CFont(GfxFont *font, Ref *id);
   void doPath(GfxPath *path);
   void doImageL1(GfxImageColorMap *colorMap,
                 GBool invert, GBool inlineImg,
index d09170a82a4f674ec62b3dd32bacbe262534575c..7a5ee4bb1bd3daf0caa136f2c47bc85611196f0e 100644 (file)
@@ -97,23 +97,20 @@ PageAttrs::PageAttrs(PageAttrs *attrs, Dict *dict) {
     if (obj2.isNum())
       cropY2 = obj2.getNum();
     obj2.free();
-
-    // if the MediaBox is excessively larger than the CropBox,
-    // just use the CropBox
-    w = 0.25 * (cropX2 - cropX1);
-    h = 0.25 * (cropY2 - cropY1);
-    if (cropX1 - x1 > w || x2 - cropX2 > w ||
-       cropY1 - y1 > h || y2 - cropY2 > h) {
-      x1 = cropX1;
-      x2 = cropX2;
-      y1 = cropY1;
-      y2 = cropY2;
-    }
-  } else {
-    cropX1 = cropX2 = cropY1 = cropY2 = 0;
   }
   obj1.free();
 
+  // if the MediaBox is excessively larger than the CropBox,
+  // just use the CropBox
+  limitToCropBox = gFalse;
+  w = 0.25 * (cropX2 - cropX1);
+  h = 0.25 * (cropY2 - cropY1);
+  if (cropX2 > cropX1 &&
+      (cropX1 - x1 > w || x2 - cropX2 > w ||
+       cropY1 - y1 > h || y2 - cropY2 > h)) {
+    limitToCropBox = gTrue;
+  }
+
   // rotate
   dict->lookup("Rotate", &obj1);
   if (obj1.isInt())
index c74f0b5b5d5b5dbc449ed681bdfdaa061fdca292..6c020c7dc04d6dd5ed0a6c921220a2aad2debee4 100644 (file)
@@ -35,10 +35,10 @@ public:
   ~PageAttrs();
 
   // Accessors.
-  double getX1() { return x1; }
-  double getY1() { return y1; }
-  double getX2() { return x2; }
-  double getY2() { return y2; }
+  double getX1() { return limitToCropBox ? cropX1 : x1; }
+  double getY1() { return limitToCropBox ? cropY1 : y1; }
+  double getX2() { return limitToCropBox ? cropX2 : x2; }
+  double getY2() { return limitToCropBox ? cropY2 : y2; }
   GBool isCropped() { return cropX2 > cropX1; }
   double getCropX1() { return cropX1; }
   double getCropY1() { return cropY1; }
@@ -52,6 +52,7 @@ private:
 
   double x1, y1, x2, y2;
   double cropX1, cropY1, cropX2, cropY2;
+  GBool limitToCropBox;
   int rotate;
   Object resources;
 };
index 8b6c5083b27050f3edc7b1b68b44315ae00df054..35adfdfe00ad4b1544e2e51c27acec60caaee6be 100644 (file)
@@ -73,12 +73,9 @@ void freeParams() {
   int i;
 
   if (fontPath) {
-    for (i = 0; i < fontPathLen; ++i) {
+    for (i = 0; i < fontPathLen; ++i)
       gfree(fontPath[i]);
-      fontPath[i] = NULL;
-    }
     gfree(fontPath);
-    fontPath = NULL;
   }
   if (devFontMap) {
     for (i = 0; i < devFontMapLen; ++i) {
index debe1a09e0404d3300e8e9e0aa44847c169c6409..4b5cc9fb4751109b0c0dc3252bd2d294d9346c56 100644 (file)
@@ -15,6 +15,9 @@ extern GBool printCommands;
 // Send error messages to /dev/tty instead of stderr.
 extern GBool errorsToTTY;
 
+// If this is set, error messages will be silently discarded.
+extern GBool errQuiet;
+
 // Font search path.
 extern char **fontPath;
 
index fe337408d25795fb1fc388ed55898965ad264a4e..1af874225de56f746696c9c2ff57e68981289b34 100644 (file)
@@ -29,14 +29,70 @@ struct CCITTCode {
 #define twoDimVertR3 7
 #define twoDimVertL3 8
 
-// 1-4 bit codes
-static CCITTCode twoDimTab1[16] = {
-  {-1, -1},                            // 0000
-  {4, twoDimPass},                     // 0001
-  {3, twoDimHoriz}, {3, twoDimHoriz},  // 001x
-  {3, twoDimVertL1}, {3, twoDimVertL1},        // 010x
-  {3, twoDimVertR1}, {3, twoDimVertR1},        // 011x
-  {1, twoDimVert0}, {1, twoDimVert0},  // 1xxx
+// 1-7 bit codes
+static CCITTCode twoDimTab1[128] = {
+  {-1, -1}, {-1, -1},                  // 000000x
+  {7, twoDimVertL3},                   // 0000010
+  {7, twoDimVertR3},                   // 0000011
+  {6, twoDimVertL2}, {6, twoDimVertL2},        // 000010x
+  {6, twoDimVertR2}, {6, twoDimVertR2},        // 000011x
+  {4, twoDimPass}, {4, twoDimPass},     // 0001xxx
+    {4, twoDimPass}, {4, twoDimPass},
+    {4, twoDimPass}, {4, twoDimPass},
+    {4, twoDimPass}, {4, twoDimPass},
+  {3, twoDimHoriz}, {3, twoDimHoriz},  // 001xxxx
+    {3, twoDimHoriz}, {3, twoDimHoriz},
+    {3, twoDimHoriz}, {3, twoDimHoriz},
+    {3, twoDimHoriz}, {3, twoDimHoriz},
+    {3, twoDimHoriz}, {3, twoDimHoriz},
+    {3, twoDimHoriz}, {3, twoDimHoriz},
+    {3, twoDimHoriz}, {3, twoDimHoriz},
+    {3, twoDimHoriz}, {3, twoDimHoriz},
+  {3, twoDimVertL1}, {3, twoDimVertL1},        // 010xxxx
+    {3, twoDimVertL1}, {3, twoDimVertL1},
+    {3, twoDimVertL1}, {3, twoDimVertL1},
+    {3, twoDimVertL1}, {3, twoDimVertL1},
+    {3, twoDimVertL1}, {3, twoDimVertL1},
+    {3, twoDimVertL1}, {3, twoDimVertL1},
+    {3, twoDimVertL1}, {3, twoDimVertL1},
+    {3, twoDimVertL1}, {3, twoDimVertL1},
+  {3, twoDimVertR1}, {3, twoDimVertR1},        // 011xxxx
+    {3, twoDimVertR1}, {3, twoDimVertR1},
+    {3, twoDimVertR1}, {3, twoDimVertR1},
+    {3, twoDimVertR1}, {3, twoDimVertR1},
+    {3, twoDimVertR1}, {3, twoDimVertR1},
+    {3, twoDimVertR1}, {3, twoDimVertR1},
+    {3, twoDimVertR1}, {3, twoDimVertR1},
+    {3, twoDimVertR1}, {3, twoDimVertR1},
+  {1, twoDimVert0}, {1, twoDimVert0},  // 1xxxxxx
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
+    {1, twoDimVert0}, {1, twoDimVert0},
     {1, twoDimVert0}, {1, twoDimVert0},
     {1, twoDimVert0}, {1, twoDimVert0},
     {1, twoDimVert0}, {1, twoDimVert0}
index d7040cee18073721ce94d80439d35df1c828c183..667d07c8ca37441423c86a55330f7a07f6a8ee76 100644 (file)
 #include "Stream.h"
 #include "Stream-CCITT.h"
 
+#ifdef _MSC_VER
+#define popen _popen
+#define pclose _pclose
+#endif
+
+#ifdef __DJGPP__
+static GBool setDJSYSFLAGS = gFalse;
+#endif
+
 #ifdef VMS
 #if (__VMS_VER < 70000000)
 extern "C" int unlink(char *filename);
@@ -47,31 +56,14 @@ extern "C" int unlink(char *filename);
 
 Stream::Stream() {
   ref = 1;
-  predictor = 1;
-  rawLine = NULL;
-  pixLine = NULL;
 }
 
 Stream::~Stream() {
-  gfree(rawLine);
-  gfree(pixLine);
-}
-
-void Stream::resetImage(int width1, int nComps1, int nBits1) {
-  reset();
-  if (predictor > 1 &&
-      (width1 != width || nComps != nComps || nBits1 != nBits))
-    error(-1, "Mismatched image parameters in predictor");
-  width = width1;
-  nComps = nComps1;
-  nBits = nBits1;
-  nVals = width * nComps;
-  pixBytes = (nComps * nBits + 7) >> 3;
-  rowBytes = (nVals * nBits + 7) >> 3;
-  rawLine = (Guchar *)grealloc(rawLine, rowBytes + pixBytes);
-  memset(rawLine, 0, rowBytes);
-  pixLine = (Guchar *)grealloc(pixLine, ((nVals + 7) & ~7) * sizeof(Guchar));
-  pixIdx = nVals;
+}
+
+int Stream::getRawChar() {
+  error(-1, "Internal: called getRawChar() on non-predictor stream");
+  return EOF;
 }
 
 char *Stream::getLine(char *buf, int size) {
@@ -95,154 +87,6 @@ char *Stream::getLine(char *buf, int size) {
   return buf;
 }
 
-GBool Stream::getImagePixel(Guchar *pix) {
-  int curPred;
-  int left, up, upLeft, p, pa, pb, pc;
-  Guchar upLeftBuf[4];
-  Gulong buf, bitMask;
-  int c;
-  int bits;
-  int i, j;
-
-  // read an image line
-  if (pixIdx >= nVals) {
-
-    // get PNG optimum predictor number
-    if (predictor == 15) {
-      if ((curPred = getChar()) == EOF)
-       return EOF;
-      curPred += 10;
-    } else {
-      curPred = predictor;
-    }
-
-    // read the raw line, apply byte predictor
-    upLeftBuf[0] = upLeftBuf[1] = upLeftBuf[2] = upLeftBuf[3] = 0;
-    for (i = 0; i < rowBytes; ++i) {
-      upLeftBuf[3] = upLeftBuf[2];
-      upLeftBuf[2] = upLeftBuf[1];
-      upLeftBuf[1] = upLeftBuf[0];
-      upLeftBuf[0] = rawLine[pixBytes+i];
-      if ((c = getChar()) == EOF)
-       return EOF;
-      switch (curPred) {
-      case 11:                 // PNG sub
-       rawLine[pixBytes+i] = rawLine[i] + (Guchar)c;
-       break;
-      case 12:                 // PNG up
-       rawLine[pixBytes+i] = rawLine[pixBytes+i] + (Guchar)c;
-       break;
-      case 13:                 // PNG average
-       rawLine[pixBytes+i] = ((rawLine[i] + rawLine[pixBytes+i]) >> 1) +
-                             (Guchar)c;
-       break;
-      case 14:                 // PNG Paeth
-       left = rawLine[i];
-       up = rawLine[pixBytes+i];
-       upLeft = upLeftBuf[pixBytes];
-       p = left + up - upLeft;
-       if ((pa = p - left) < 0)
-         pa = -pa;
-       if ((pb = p - up) < 0)
-         pb = -pb;
-       if ((pc = p - upLeft) < 0)
-         pc = -pc;
-       if (pa <= pb && pa <= pc)
-         rawLine[pixBytes+i] = pa + (Guchar)c;
-       else if (pb <= pc)
-         rawLine[pixBytes+i] = pb + (Guchar)c;
-       else
-         rawLine[pixBytes+i] = pc + (Guchar)c;
-       break;
-      case 10:                 // PNG none
-      default:                 // no predictor or TIFF predictor
-       rawLine[pixBytes+i] = (Guchar)c;
-       break;
-      }
-    }
-
-    // convert into pixels, apply component predictor
-    if (predictor == 2) {
-      if (nBits == 1) {
-       for (i = 0, j = pixBytes; i < nVals; i += 8, ++j) {
-         c = rawLine[j];
-         pixLine[i+0] = (Guchar)((pixLine[i+0] + (c >> 7)) & 1);
-         pixLine[i+1] = (Guchar)((pixLine[i+1] + (c >> 6)) & 1);
-         pixLine[i+2] = (Guchar)((pixLine[i+2] + (c >> 5)) & 1);
-         pixLine[i+3] = (Guchar)((pixLine[i+3] + (c >> 4)) & 1);
-         pixLine[i+4] = (Guchar)((pixLine[i+4] + (c >> 3)) & 1);
-         pixLine[i+5] = (Guchar)((pixLine[i+5] + (c >> 2)) & 1);
-         pixLine[i+6] = (Guchar)((pixLine[i+6] + (c >> 1)) & 1);
-         pixLine[i+7] = (Guchar)((pixLine[i+7] + c) & 1);
-       }
-      } else if (nBits == 8) {
-       for (i = 0, j = pixBytes; i < nVals; ++i, ++j)
-         pixLine[i] = pixLine[i] + rawLine[j];
-      } else {
-       bitMask = (1 << nBits) - 1;
-       buf = 0;
-       bits = 0;
-       j = pixBytes;
-       for (i = 0; i < nVals; ++i) {
-         if (bits < nBits) {
-           buf = (buf << 8) | (rawLine[j++] & 0xff);
-           bits += 8;
-         }
-         pixLine[i] = (Guchar)((pixLine[i] +
-                                (buf >> (bits - nBits))) & bitMask);
-         bits -= nBits;
-       }
-      }
-    } else {
-      if (nBits == 1) {
-       for (i = 0, j = pixBytes; i < nVals; i += 8, ++j) {
-         c = rawLine[j];
-         pixLine[i+0] = (Guchar)((c >> 7) & 1);
-         pixLine[i+1] = (Guchar)((c >> 6) & 1);
-         pixLine[i+2] = (Guchar)((c >> 5) & 1);
-         pixLine[i+3] = (Guchar)((c >> 4) & 1);
-         pixLine[i+4] = (Guchar)((c >> 3) & 1);
-         pixLine[i+5] = (Guchar)((c >> 2) & 1);
-         pixLine[i+6] = (Guchar)((c >> 1) & 1);
-         pixLine[i+7] = (Guchar)(c & 1);
-       }
-      } else if (nBits == 8) {
-       for (i = 0, j = pixBytes; i < nVals; ++i, ++j)
-         pixLine[i] = rawLine[j];
-      } else {
-       bitMask = (1 << nBits) - 1;
-       buf = 0;
-       bits = 0;
-       j = pixBytes;
-       for (i = 0; i < nVals; ++i) {
-         if (bits < nBits) {
-           buf = (buf << 8) | (rawLine[j++] & 0xff);
-           bits += 8;
-         }
-         pixLine[i] = (Guchar)((buf >> (bits - nBits)) & bitMask);
-         bits -= nBits;
-       }
-      }
-    }
-
-    // read from start of line
-    pixIdx = 0;
-  }
-
-  for (i = 0; i < nComps; ++i)
-    pix[i] = pixLine[pixIdx++];
-  return gTrue;
-}
-
-void Stream::skipImageLine() {
-  int n, i;
-
-  n = (nVals * nBits + 7) / 8;
-  for (i = 0; i < n; ++i)
-    getChar();
-  pixIdx = nVals;
-}
-
 void Stream::setPos(int pos) {
   error(-1, "Internal: called setPos() on non-FileStream");
 }
@@ -301,8 +145,7 @@ Stream *Stream::makeFilter(char *name, Stream *str, Object *params) {
   int bits;
   int early;
   int encoding;
-  GBool byteAlign;
-  GBool black;
+  GBool endOfLine, byteAlign, endOfBlock, black;
   int columns, rows;
   Object obj;
 
@@ -343,33 +186,51 @@ Stream *Stream::makeFilter(char *name, Stream *str, Object *params) {
     str = new RunLengthStream(str);
   } else if (!strcmp(name, "CCITTFaxDecode") || !strcmp(name, "CCF")) {
     encoding = 0;
+    endOfLine = gFalse;
     byteAlign = gFalse;
     columns = 1728;
     rows = 0;
+    endOfBlock = gTrue;
     black = gFalse;
     if (params->isDict()) {
       params->dictLookup("K", &obj);
-      if (obj.isInt())
+      if (obj.isInt()) {
        encoding = obj.getInt();
+      }
+      obj.free();
+      params->dictLookup("EndOfLine", &obj);
+      if (obj.isBool()) {
+       endOfLine = obj.getBool();
+      }
       obj.free();
       params->dictLookup("EncodedByteAlign", &obj);
-      if (obj.isBool())
+      if (obj.isBool()) {
        byteAlign = obj.getBool();
+      }
       obj.free();
       params->dictLookup("Columns", &obj);
-      if (obj.isInt())
+      if (obj.isInt()) {
        columns = obj.getInt();
+      }
       obj.free();
       params->dictLookup("Rows", &obj);
-      if (obj.isInt())
+      if (obj.isInt()) {
        rows = obj.getInt();
+      }
+      obj.free();
+      params->dictLookup("EndOfBlock", &obj);
+      if (obj.isBool()) {
+       endOfBlock = obj.getBool();
+      }
       obj.free();
       params->dictLookup("BlackIs1", &obj);
-      if (obj.isBool())
+      if (obj.isBool()) {
        black = obj.getBool();
+      }
       obj.free();
     }
-    str = new CCITTFaxStream(str, encoding, byteAlign, columns, rows, black);
+    str = new CCITTFaxStream(str, encoding, endOfLine, byteAlign,
+                            columns, rows, endOfBlock, black);
   } else if (!strcmp(name, "DCTDecode") || !strcmp(name, "DCT")) {
     str = new DCTStream(str);
   } else if (!strcmp(name, "FlateDecode") || !strcmp(name, "Fl")) {
@@ -403,6 +264,249 @@ Stream *Stream::makeFilter(char *name, Stream *str, Object *params) {
   return str;
 }
 
+//------------------------------------------------------------------------
+// ImageStream
+//------------------------------------------------------------------------
+
+ImageStream::ImageStream(Stream *str, int width, int nComps, int nBits) {
+  int imgLineSize;
+
+  this->str = str;
+  this->width = width;
+  this->nComps = nComps;
+  this->nBits = nBits;
+
+  nVals = width * nComps;
+  if (nBits == 1) {
+    imgLineSize = (nVals + 7) & ~7;
+  } else {
+    imgLineSize = nVals;
+  }
+  imgLine = (Guchar *)gmalloc(imgLineSize * sizeof(Guchar));
+  imgIdx = nVals;
+}
+
+ImageStream::~ImageStream() {
+  gfree(imgLine);
+}
+
+void ImageStream::reset() {
+  str->reset();
+}
+
+GBool ImageStream::getPixel(Guchar *pix) {
+  Gulong buf, bitMask;
+  int bits;
+  int c;
+  int i;
+
+  if (imgIdx >= nVals) {
+
+    // read one line of image pixels
+    if (nBits == 1) {
+      for (i = 0; i < nVals; i += 8) {
+       c = str->getChar();
+       imgLine[i+0] = (Guchar)((c >> 7) & 1);
+       imgLine[i+1] = (Guchar)((c >> 6) & 1);
+       imgLine[i+2] = (Guchar)((c >> 5) & 1);
+       imgLine[i+3] = (Guchar)((c >> 4) & 1);
+       imgLine[i+4] = (Guchar)((c >> 3) & 1);
+       imgLine[i+5] = (Guchar)((c >> 2) & 1);
+       imgLine[i+6] = (Guchar)((c >> 1) & 1);
+       imgLine[i+7] = (Guchar)(c & 1);
+      }
+    } else if (nBits == 8) {
+      for (i = 0; i < nVals; ++i) {
+       imgLine[i] = str->getChar();
+      }
+    } else {
+      bitMask = (1 << nBits) - 1;
+      buf = 0;
+      bits = 0;
+      for (i = 0; i < nVals; ++i) {
+       if (bits < nBits) {
+         buf = (buf << 8) | (str->getChar() & 0xff);
+         bits += 8;
+       }
+       imgLine[i] = (Guchar)((buf >> (bits - nBits)) & bitMask);
+       bits -= nBits;
+      }
+    }
+
+    // reset to start of line
+    imgIdx = 0;
+  }
+
+  for (i = 0; i < nComps; ++i)
+    pix[i] = imgLine[imgIdx++];
+  return gTrue;
+}
+
+void ImageStream::skipLine() {
+  int n, i;
+
+  n = (nVals * nBits + 7) >> 3;
+  for (i = 0; i < n; ++i) {
+    str->getChar();
+  }
+}
+
+//------------------------------------------------------------------------
+// StreamPredictor
+//------------------------------------------------------------------------
+
+StreamPredictor::StreamPredictor(Stream *str, int predictor,
+                                int width, int nComps, int nBits) {
+  this->str = str;
+  this->predictor = predictor;
+  this->width = width;
+  this->nComps = nComps;
+  this->nBits = nBits;
+
+  nVals = width * nComps;
+  pixBytes = (nComps * nBits + 7) >> 3;
+  rowBytes = ((nVals * nBits + 7) >> 3) + pixBytes;
+  predLine = (Guchar *)gmalloc(rowBytes);
+  memset(predLine, 0, rowBytes);
+  predIdx = rowBytes;
+}
+
+StreamPredictor::~StreamPredictor() {
+  gfree(predLine);
+}
+
+int StreamPredictor::lookChar() {
+  if (predIdx >= rowBytes) {
+    if (!getNextLine()) {
+      return EOF;
+    }
+  }
+  return predLine[predIdx];
+}
+
+int StreamPredictor::getChar() {
+  if (predIdx >= rowBytes) {
+    if (!getNextLine()) {
+      return EOF;
+    }
+  }
+  return predLine[predIdx++];
+}
+
+GBool StreamPredictor::getNextLine() {
+  int curPred;
+  Guchar upLeftBuf[4];
+  int left, up, upLeft, p, pa, pb, pc;
+  int c;
+  Gulong inBuf, outBuf, bitMask;
+  int inBits, outBits;
+  int i, j, k;
+
+  // get PNG optimum predictor number
+  if (predictor == 15) {
+    if ((curPred = str->getRawChar()) == EOF) {
+      return gFalse;
+    }
+    curPred += 10;
+  } else {
+    curPred = predictor;
+  }
+
+  // read the raw line, apply PNG (byte) predictor
+  upLeftBuf[0] = upLeftBuf[1] = upLeftBuf[2] = upLeftBuf[3] = 0;
+  for (i = pixBytes; i < rowBytes; ++i) {
+    upLeftBuf[3] = upLeftBuf[2];
+    upLeftBuf[2] = upLeftBuf[1];
+    upLeftBuf[1] = upLeftBuf[0];
+    upLeftBuf[0] = predLine[i];
+    if ((c = str->getRawChar()) == EOF) {
+      break;
+    }
+    switch (curPred) {
+    case 11:                   // PNG sub
+      predLine[i] = predLine[i - pixBytes] + (Guchar)c;
+      break;
+    case 12:                   // PNG up
+      predLine[i] = predLine[i] + (Guchar)c;
+      break;
+    case 13:                   // PNG average
+      predLine[i] = ((predLine[i - pixBytes] + predLine[i]) >> 1) +
+                   (Guchar)c;
+      break;
+    case 14:                   // PNG Paeth
+      left = predLine[i - pixBytes];
+      up = predLine[i];
+      upLeft = upLeftBuf[pixBytes];
+      p = left + up - upLeft;
+      if ((pa = p - left) < 0)
+       pa = -pa;
+      if ((pb = p - up) < 0)
+       pb = -pb;
+      if ((pc = p - upLeft) < 0)
+       pc = -pc;
+      if (pa <= pb && pa <= pc)
+       predLine[i] = pa + (Guchar)c;
+      else if (pb <= pc)
+       predLine[i] = pb + (Guchar)c;
+      else
+       predLine[i] = pc + (Guchar)c;
+      break;
+    case 10:                   // PNG none
+    default:                   // no predictor or TIFF predictor
+      predLine[i] = (Guchar)c;
+      break;
+    }
+  }
+
+  // apply TIFF (component) predictor
+  //~ this is completely untested
+  if (predictor == 2) {
+    if (nBits == 1) {
+      inBuf = predLine[pixBytes - 1];
+      for (i = pixBytes; i < rowBytes; i += 8) {
+       // 1-bit add is just xor
+       inBuf = (inBuf << 8) | predLine[i];
+       predLine[i] ^= inBuf >> nComps;
+      }
+    } else if (nBits == 8) {
+      for (i = pixBytes; i < rowBytes; ++i) {
+       predLine[i] += predLine[i - nComps];
+      }
+    } else {
+      upLeftBuf[0] = upLeftBuf[1] = upLeftBuf[2] = upLeftBuf[3] = 0;
+      bitMask = (1 << nBits) - 1;
+      inBuf = outBuf = 0;
+      inBits = outBits = 0;
+      j = k = pixBytes;
+      for (i = 0; i < nVals; ++i) {
+       if (inBits < nBits) {
+         inBuf = (inBuf << 8) | (predLine[j++] & 0xff);
+         inBits += 8;
+       }
+       upLeftBuf[3] = upLeftBuf[2];
+       upLeftBuf[2] = upLeftBuf[1];
+       upLeftBuf[1] = upLeftBuf[0];
+       upLeftBuf[0] = (upLeftBuf[nComps] +
+                       (inBuf >> (inBits - nBits))) & bitMask;
+       outBuf = (outBuf << nBits) | upLeftBuf[0];
+       inBits -= nBits;
+       outBits += nBits;
+       if (outBits > 8) {
+         predLine[k++] = (Guchar)(outBuf >> (outBits - 8));
+       }
+      }
+      if (outBits > 0) {
+       predLine[k++] = (Guchar)(outBuf << (8 - outBits));
+      }
+    }
+  }
+
+  // reset to start of line
+  predIdx = pixBytes;
+
+  return gTrue;
+}
+
 //------------------------------------------------------------------------
 // FileStream
 //------------------------------------------------------------------------
@@ -485,7 +589,8 @@ GBool FileStream::checkHeader() {
   start += i;
   p = strtok(&hdrBuf[i+5], " \t\n\r");
   version = atof(p);
-  if (!(hdrBuf[i+5] >= '0' && hdrBuf[i+5] <= '9') || version > pdfVersionNum) {
+  if (!(hdrBuf[i+5] >= '0' && hdrBuf[i+5] <= '9') ||
+      version > pdfVersionNum + 0.0001) {
     error(getPos(), "PDF version %s -- xpdf supports version %s"
          " (continuing anyway)", p, pdfVersion);
     return gFalse;
@@ -674,11 +779,10 @@ GBool ASCII85Stream::isBinary(GBool last) {
 LZWStream::LZWStream(Stream *str1, int predictor1, int columns1, int colors1,
                     int bits1, int early1) {
   str = str1;
-  predictor = predictor1;
-  if (predictor1 > 1) {
-    width = columns1;
-    nComps = colors1;
-    nBits = bits1;
+  if (predictor1 != 1) {
+    pred = new StreamPredictor(this, predictor1, columns1, colors1, bits1);
+  } else {
+    pred = NULL;
   }
   early = early1;
   zPipe = NULL;
@@ -695,17 +799,30 @@ LZWStream::~LZWStream() {
     zPipe = NULL;
     unlink(zName);
   }
+  if (pred) {
+    delete pred;
+  }
   delete str;
 }
 
 int LZWStream::getChar() {
+  if (pred) {
+    return pred->getChar();
+  }
   return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff);
 }
 
 int LZWStream::lookChar() {
+  if (pred) {
+    return pred->lookChar();
+  }
   return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff);
 }
 
+int LZWStream::getRawChar() {
+  return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff);
+}
+
 void LZWStream::reset() {
   FILE *f;
 
@@ -720,10 +837,19 @@ void LZWStream::reset() {
     zPipe = NULL;
     unlink(zName);
   }
+#if __DJGPP__
+  if (!setDJSYSFLAGS) {
+    setenv("DJSYSFLAGS", "0x0002", 0);
+    setDJSYSFLAGS = gTrue;
+  }
+#endif
   strcpy(zCmd, uncompressCmd);
   strcat(zCmd, " ");
   zName = zCmd + strlen(zCmd);
   tmpnam(zName);
+#ifdef _MSC_VER
+  zName[strlen(zName) - 2] = '\0';
+#endif
   strcat(zName, ".Z");
   if (!(f = fopen(zName, "wb"))) {
     error(getPos(), "Couldn't open temporary file '%s'", zName);
@@ -914,6 +1040,9 @@ GBool LZWStream::fillBuf() {
 GString *LZWStream::getPSFilter(char *indent) {
   GString *s;
 
+  if (pred) {
+    return NULL;
+  }
   s = str->getPSFilter(indent);
   s->append(indent)->append("/LZWDecode filter\n");
   return s;
@@ -985,18 +1114,22 @@ GBool RunLengthStream::fillBuf() {
 // CCITTFaxStream
 //------------------------------------------------------------------------
 
-CCITTFaxStream::CCITTFaxStream(Stream *str1, int encoding1, GBool byteAlign1,
-                              int columns1, int rows1, GBool black1) {
-  str = str1;
-  encoding = encoding1;
-  byteAlign = byteAlign1;
-  columns = columns1;
-  rows = rows1;
-  black = black1;
+CCITTFaxStream::CCITTFaxStream(Stream *str, int encoding, GBool endOfLine,
+                              GBool byteAlign, int columns, int rows,
+                              GBool endOfBlock, GBool black) {
+  this->str = str;
+  this->encoding = encoding;
+  this->endOfLine = endOfLine;
+  this->byteAlign = byteAlign;
+  this->columns = columns;
+  this->rows = rows;
+  this->endOfBlock = endOfBlock;
+  this->black = black;
   refLine = (short *)gmalloc((columns + 2) * sizeof(short));
   codingLine = (short *)gmalloc((columns + 2) * sizeof(short));
 
   eof = gFalse;
+  row = 0;
   nextLine2D = encoding < 0;
   inputBits = 0;
   codingLine[0] = 0;
@@ -1013,39 +1146,55 @@ CCITTFaxStream::~CCITTFaxStream() {
 }
 
 void CCITTFaxStream::reset() {
+  int n;
+
   str->reset();
   eof = gFalse;
+  row = 0;
   nextLine2D = encoding < 0;
   inputBits = 0;
-  if ((look13Bits() >> 1) == 0x001)
-    eatBits(12);
   codingLine[0] = 0;
   codingLine[1] = refLine[2] = columns;
   a0 = 1;
   buf = EOF;
+
+  // get initial end-of-line marker and 2D encoding tag
+  if (endOfBlock) {
+    if (lookBits(12) == 0x001) {
+      eatBits(12);
+    }
+  } else {
+    for (n = 0; n < 11 && lookBits(n) == 0; ++n) ;
+    if (n == 11 && lookBits(12) == 0x001) {
+      eatBits(12);
+    }
+  }
+  if (encoding > 0) {
+    nextLine2D = !lookBits(1);
+    eatBits(1);
+  }
 }
 
 int CCITTFaxStream::lookChar() {
   short code1, code2, code3;
   int a0New;
+#if 0 //~
+  GBool err;
+#endif
   int ret;
-  int bits, i;
+  int bits, i, n;
 
   // if at eof just return EOF
-  if (eof && codingLine[a0] >= columns)
+  if (eof && codingLine[a0] >= columns) {
     return EOF;
+  }
 
   // read the next row
+#if 0 //~
+  err = gFalse;
+#endif
   if (codingLine[a0] >= columns) {
 
-    // check for end of file
-    i = look13Bits();
-    if (i == EOF || (i >> 1) == 0x001) {
-      eof = gTrue;
-      codingLine[a0 = 0] = columns;
-      return EOF;
-    }
-
     // 2-D encoding
     if (nextLine2D) {
       for (i = 0; codingLine[i] < columns; ++i)
@@ -1143,7 +1292,13 @@ int CCITTFaxStream::lookChar() {
          return EOF;
        default:
          error(getPos(), "Bad 2D code %04x in CCITTFax stream", code1);
+#if 0 //~
+         err = gTrue;
+         break;
+#else
+         eof = gTrue;
          return EOF;
+#endif
        }
       } while (codingLine[a0] < columns);
 
@@ -1170,21 +1325,104 @@ int CCITTFaxStream::lookChar() {
       }
     }
 
-    if (codingLine[a0] != columns)
+    if (codingLine[a0] != columns) {
       error(getPos(), "CCITTFax row is wrong length (%d)", codingLine[a0]);
+#if 0 //~
+      err = gTrue;
+#endif
+    }
 
-    // check for end-of-line marker
-    code1 = look13Bits();
-    if ((code1 >> 1) == 0x001) {
-      eatBits(12);
+    // byte-align the row
+    if (byteAlign) {
+      inputBits &= ~7;
+    }
+
+    // check for end-of-line marker, end-of-block marker, and
+    // 2D encoding tag
+    if (endOfBlock) {
+      code1 = lookBits(12);
+      if (code1 == EOF) {
+       eof = gTrue;
+      } else if (code1 == 0x001) {
+       eatBits(12);
+       if (encoding > 0) {
+         nextLine2D = !lookBits(1);
+         eatBits(1);
+       }
+       code1 = lookBits(12);
+       if (code1 == 0x001) {
+         eatBits(12);
+         if (encoding > 0) {
+           lookBits(1);
+           eatBits(1);
+         }
+         if (encoding >= 0) {
+           for (i = 0; i < 4; ++i) {
+             code1 = lookBits(12);
+             if (code1 != 0x001) {
+               error(getPos(), "Bad RTC code in CCITTFax stream");
+             }
+             eatBits(12);
+             if (encoding > 0) {
+               lookBits(1);
+               eatBits(1);
+             }
+           }
+         }
+         eof = gTrue;
+       }
+      } else {
+       if (encoding > 0) {
+         nextLine2D = !lookBits(1);
+         eatBits(1);
+       }
+      }
+    } else {
+      if (row == rows - 1) {
+       eof = gTrue;
+      } else {
+       for (n = 0; n < 11 && lookBits(n) == 0; ++n) ;
+       if (n == 11 && lookBits(12) == 0x001) {
+         eatBits(12);
+       }
+       if (encoding > 0) {
+         nextLine2D = !lookBits(1);
+         eatBits(1);
+       }
+      }
+    }
+
+#if 0 //~
+    // This looks for an end-of-line marker after an error, however
+    // some (most?) CCITT streams in PDF files don't use end-of-line
+    // markers, and the just-plow-on technique works better in those
+    // cases.
+    else if (err) {
+      do {
+       if (code1 == EOF) {
+         eof = gTrue;
+         return EOF;
+       }
+       eatBits(1);
+       code1 = look13Bits();
+      } while ((code1 >> 1) != 0x001);
+      eatBits(12); 
+      codingLine[++a0] = columns;
       if (encoding > 0) {
        eatBits(1);
        nextLine2D = !(code1 & 1);
       }
     }
+#endif
 
     a0 = 0;
     outputBits = codingLine[1] - codingLine[0];
+    if (outputBits == 0) {
+      a0 = 1;
+      outputBits = codingLine[2] - codingLine[1];
+    }
+
+    ++row;
   }
 
   // get a byte
@@ -1192,8 +1430,9 @@ int CCITTFaxStream::lookChar() {
     ret = ((a0 & 1) == 0) ? 0xff : 0x00;
     if ((outputBits -= 8) == 0) {
       ++a0;
-      if (codingLine[a0] < columns)
+      if (codingLine[a0] < columns) {
        outputBits = codingLine[a0 + 1] - codingLine[a0];
+      }
     }
   } else {
     bits = 8;
@@ -1202,18 +1441,21 @@ int CCITTFaxStream::lookChar() {
       if (outputBits > bits) {
        i = bits;
        bits = 0;
-       if ((a0 & 1) == 0)
+       if ((a0 & 1) == 0) {
          ret |= 0xff >> (8 - i);
+       }
        outputBits -= i;
       } else {
        i = outputBits;
        bits -= outputBits;
-       if ((a0 & 1) == 0)
+       if ((a0 & 1) == 0) {
          ret |= (0xff >> (8 - i)) << bits;
+       }
        outputBits = 0;
        ++a0;
-       if (codingLine[a0] < columns)
+       if (codingLine[a0] < columns) {
          outputBits = codingLine[a0 + 1] - codingLine[a0];
+       }
       }
     } while (bits > 0 && codingLine[a0] < columns);
   }
@@ -1222,50 +1464,74 @@ int CCITTFaxStream::lookChar() {
 }
 
 short CCITTFaxStream::getTwoDimCode() {
-  short code, code0;
+  short code;
   CCITTCode *p;
+  int n;
 
-  code0 = look13Bits();
-  code = code0 >> 6;
-  if (code == 0x0002) {
-    eatBits(7);
-    return twoDimVertL3;
-  }
-  if (code == 0x0003) {
-    eatBits(7);
-    return twoDimVertR3;
-  }
-  code >>= 1;
-  if (code == 0x0002) {
-    eatBits(6);
-    return twoDimVertL2;
-  }
-  if (code == 0x0003) {
-    eatBits(6);
-    return twoDimVertR2;
-  }
-  code >>= 2;
-  p = &twoDimTab1[code];
-  if (p->bits > 0) {
-    eatBits(p->bits);
-    return p->n;
+  code = 0; // make gcc happy
+  if (endOfBlock) {
+    code = lookBits(7);
+    p = &twoDimTab1[code];
+    if (p->bits > 0) {
+      eatBits(p->bits);
+      return p->n;
+    }
+  } else {
+    for (n = 1; n <= 7; ++n) {
+      code = lookBits(n);
+      if (n < 7) {
+       code <<= 7 - n;
+      }
+      p = &twoDimTab1[code];
+      if (p->bits == n) {
+       eatBits(n);
+       return p->n;
+      }
+    }
   }
-  error(getPos(), "Bad two dim code (%04x) in CCITTFax stream", code0);
+  error(getPos(), "Bad two dim code (%04x) in CCITTFax stream", code);
   return EOF;
 }
 
 short CCITTFaxStream::getWhiteCode() {
   short code;
   CCITTCode *p;
+  int n;
 
-  code = look13Bits();
-  if ((code >> 6) == 0)
-    p = &whiteTab1[code >> 1];
-  else
-    p = &whiteTab2[code >> 4];
-  if (p->bits > 0) {
-    eatBits(p->bits);
-    return p->n;
+  code = 0; // make gcc happy
+  if (endOfBlock) {
+    code = lookBits(12);
+    if ((code >> 5) == 0)
+      p = &whiteTab1[code];
+    else
+      p = &whiteTab2[code >> 3];
+    if (p->bits > 0) {
+      eatBits(p->bits);
+      return p->n;
+    }
+  } else {
+    for (n = 1; n <= 9; ++n) {
+      code = lookBits(n);
+      if (n < 9) {
+       code <<= 9 - n;
+      }
+      p = &whiteTab2[code];
+      if (p->bits == n) {
+       eatBits(n);
+       return p->n;
+      }
+    }
+    for (n = 11; n <= 12; ++n) {
+      code = lookBits(n);
+      if (n < 12) {
+       code <<= 12 - n;
+      }
+      p = &whiteTab1[code];
+      if (p->bits == n) {
+       eatBits(n);
+       return p->n;
+      }
+    }
   }
   error(getPos(), "Bad white code (%04x) in CCITTFax stream", code);
   return EOF;
@@ -1274,26 +1540,66 @@ short CCITTFaxStream::getWhiteCode() {
 short CCITTFaxStream::getBlackCode() {
   short code;
   CCITTCode *p;
+  int n;
 
-  code = look13Bits();
-  if ((code >> 7) == 0)
-    p = &blackTab1[code];
-  else if ((code >> 9) == 0)
-    p = &blackTab2[(code >> 1) - 64];
-  else
-    p = &blackTab3[code >> 7];
-  if (p->bits > 0) {
-    eatBits(p->bits);
-    return p->n;
+  code = 0; // make gcc happy
+  if (endOfBlock) {
+    code = lookBits(13);
+    if ((code >> 7) == 0)
+      p = &blackTab1[code];
+    else if ((code >> 9) == 0)
+      p = &blackTab2[(code >> 1) - 64];
+    else
+      p = &blackTab3[code >> 7];
+    if (p->bits > 0) {
+      eatBits(p->bits);
+      return p->n;
+    }
+  } else {
+    for (n = 2; n <= 6; ++n) {
+      code = lookBits(n);
+      if (n < 6) {
+       code <<= 6 - n;
+      }
+      p = &blackTab3[code];
+      if (p->bits == n) {
+       eatBits(n);
+       return p->n;
+      }
+    }
+    for (n = 7; n <= 12; ++n) {
+      code = lookBits(n);
+      if (n < 12) {
+       code <<= 12 - n;
+      }
+      if (code >= 64) {
+       p = &blackTab2[code - 64];
+       if (p->bits == n) {
+         eatBits(n);
+         return p->n;
+       }
+      }
+    }
+    for (n = 10; n <= 13; ++n) {
+      code = lookBits(n);
+      if (n < 13) {
+       code <<= 13 - n;
+      }
+      p = &blackTab1[code];
+      if (p->bits == n) {
+       eatBits(n);
+       return p->n;
+      }
+    }
   }
   error(getPos(), "Bad black code (%04x) in CCITTFax stream", code);
   return EOF;
 }
 
-short CCITTFaxStream::look13Bits() {
+short CCITTFaxStream::lookBits(int n) {
   int c;
 
-  while (inputBits < 13) {
+  while (inputBits < n) {
     if ((c = str->getChar()) == EOF) {
       if (inputBits == 0)
        return EOF;
@@ -1302,7 +1608,7 @@ short CCITTFaxStream::look13Bits() {
     inputBuf = (inputBuf << 8) + c;
     inputBits += 8;
   }
-  return (inputBuf >> (inputBits - 13)) & 0x1fff;
+  return (inputBuf >> (inputBits - n)) & (0xffff >> (16 - n));
 }
 
 GString *CCITTFaxStream::getPSFilter(char *indent) {
@@ -1315,16 +1621,24 @@ GString *CCITTFaxStream::getPSFilter(char *indent) {
     sprintf(s1, "/K %d ", encoding);
     s->append(s1);
   }
-  if (byteAlign)
+  if (endOfLine) {
+    s->append("/EndOfLine true ");
+  }
+  if (byteAlign) {
     s->append("/EncodedByteAlign true ");
+  }
   sprintf(s1, "/Columns %d ", columns);
   s->append(s1);
   if (rows != 0) {
     sprintf(s1, "/Rows %d ", rows);
     s->append(s1);
   }
-  if (black)
+  if (!endOfBlock) {
+    s->append("/EndOfBlock false ");
+  }
+  if (black) {
     s->append("/BlackIs1 true ");
+  }
   s->append(">> /CCITTFaxDecode filter\n");
   return s;
 }
@@ -1567,7 +1881,7 @@ GBool DCTStream::readMCURow() {
            pCr = rowBuf[2][y2][x1+x2] - 128;
            pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16;
            rowBuf[0][y2][x1+x2] = dctClip[dctClipOffset + pR];
-           pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr + 32678) >> 16;
+           pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr + 32768) >> 16;
            rowBuf[1][y2][x1+x2] = dctClip[dctClipOffset + pG];
            pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16;
            rowBuf[2][y2][x1+x2] = dctClip[dctClipOffset + pB];
@@ -1995,6 +2309,7 @@ GBool DCTStream::readHeader() {
   numDCHuffTables = 0;
   numACHuffTables = 0;
   colorXform = 0;
+  gotAdobeMarker = gFalse;
   restartInterval = 0;
 
   // read headers
@@ -2072,6 +2387,13 @@ GBool DCTStream::readHeader() {
     for (j = 0; j < mcuHeight; ++j)
       rowBuf[i][j] = (Guchar *)gmalloc(bufWidth * sizeof(Guchar));
 
+  // figure out color transform
+  if (!gotAdobeMarker && numComps == 3) {
+    if (compInfo[0].id == 1 && compInfo[1].id == 2 && compInfo[2].id == 3) {
+      colorXform = 1;
+    }
+  }
+
   // initialize counters
   comp = 0;
   x = 0;
@@ -2237,6 +2559,7 @@ GBool DCTStream::readAdobeMarker() {
   if (strncmp(buf, "Adobe", 5))
     goto err;
   colorXform = buf[11];
+  gotAdobeMarker = gTrue;
   return gTrue;
 
  err:
@@ -2367,15 +2690,17 @@ FlateDecode FlateStream::distDecode[flateMaxDistCodes] = {
 FlateStream::FlateStream(Stream *str1, int predictor1, int columns1,
                         int colors1, int bits1) {
   str = str1;
-  predictor = predictor1;
-  if (predictor1 > 1) {
-    width = columns1;
-    nComps = colors1;
-    nBits = bits1;
+  if (predictor1 != 1) {
+    pred = new StreamPredictor(this, predictor1, columns1, colors1, bits1);
+  } else {
+    pred = NULL;
   }
 }
 
 FlateStream::~FlateStream() {
+  if (pred) {
+    delete pred;
+  }
   delete str;
 }
 
@@ -2417,6 +2742,9 @@ void FlateStream::reset() {
 int FlateStream::getChar() {
   int c;
 
+  if (pred) {
+    return pred->getChar();
+  }
   while (remain == 0) {
     if (endOfBlock && eof)
       return EOF;
@@ -2431,12 +2759,29 @@ int FlateStream::getChar() {
 int FlateStream::lookChar() {
   int c;
 
+  if (pred) {
+    return pred->lookChar();
+  }
+  while (remain == 0) {
+    if (endOfBlock && eof)
+      return EOF;
+    readSome();
+  }
+  c = buf[index];
+  return c;
+}
+
+int FlateStream::getRawChar() {
+  int c;
+
   while (remain == 0) {
     if (endOfBlock && eof)
       return EOF;
     readSome();
   }
   c = buf[index];
+  index = (index + 1) & flateMask;
+  --remain;
   return c;
 }
 
index 409d2ae495e5e88ffb3ba2927bddff8857545710..3eb8160b6110e9df510b00c44d0dd404cbd58561 100644 (file)
@@ -54,28 +54,19 @@ public:
   // Reset stream to beginning.
   virtual void reset() = 0;
 
-  // Reset stream and allocate buffers for use by getPixel().
-  // The image has <width1> pixels per line, <nComps1> components per
-  // pixel, and <nBits1> bits per component.
-  virtual void resetImage(int width1, int nComps1, int nBits1);
-
   // Get next char from stream.
   virtual int getChar() = 0;
 
   // Peek at next char in stream.
   virtual int lookChar() = 0;
 
+  // Get next char from stream without using the predictor.
+  // This is only used by StreamPredictor.
+  virtual int getRawChar();
+
   // Get next line from stream.
   virtual char *getLine(char *buf, int size);
 
-  // Gets the next pixel from the stream.  (resetImage() must be called
-  // first.)  <pix> should be able to hold at least nComps elements.
-  // Returns false at end of file.
-  virtual GBool getImagePixel(Guchar *pix);
-
-  // Skip an entire line from the image.
-  virtual void skipImageLine();
-
   // Get current position in file.
   virtual int getPos() = 0;
 
@@ -109,10 +100,65 @@ private:
   Stream *makeFilter(char *name, Stream *str, Object *params);
 
   int ref;                     // reference count
+};
+
+//------------------------------------------------------------------------
+// ImageStream
+//------------------------------------------------------------------------
+
+class ImageStream {
+public:
+
+  // Create an image stream object for an image with the specified
+  // parameters.  Note that these are the actual image parameters,
+  // which may be different from the predictor parameters.
+  ImageStream(Stream *str, int width, int nComps, int nBits);
+
+  ~ImageStream();
+
+  // Reset the stream.
+  void reset();
+
+  // Gets the next pixel from the stream.  <pix> should be able to hold
+  // at least nComps elements.  Returns false at end of file.
+  GBool getPixel(Guchar *pix);
+
+  // Skip an entire line from the image.
+  void skipLine();
+
+private:
+
+  Stream *str;                 // base stream
+  int width;                   // pixels per line
+  int nComps;                  // components per pixel
+  int nBits;                   // bits per component
+  int nVals;                   // components per line
+  Guchar *imgLine;             // line buffer
+  int imgIdx;                  // current index in imgLine
+};
+
+//------------------------------------------------------------------------
+// StreamPredictor
+//------------------------------------------------------------------------
+
+class StreamPredictor {
+public:
+
+  // Create a predictor object.  Note that the parameters are for the
+  // predictor, and may not match the actual image parameters.
+  StreamPredictor(Stream *str, int predictor,
+                 int width, int nComps, int nBits);
+
+  ~StreamPredictor();
+
+  int lookChar();
+  int getChar();
+
+private:
 
-protected:
+  GBool getNextLine();
 
-  //----- image stuff
+  Stream *str;                 // base stream
   int predictor;               // predictor
   int width;                   // pixels per line
   int nComps;                  // components per pixel
@@ -120,9 +166,8 @@ protected:
   int nVals;                   // components per line
   int pixBytes;                        // bytes per pixel
   int rowBytes;                        // bytes per line
-  Guchar *rawLine;             // raw line buffer
-  Guchar *pixLine;             // pixel line buffer
-  int pixIdx;                  // current index in line buffer
+  Guchar *predLine;            // line buffer
+  int predIdx;                 // current index in predLine
 };
 
 //------------------------------------------------------------------------
@@ -266,6 +311,7 @@ public:
   virtual void reset();
   virtual int getChar();
   virtual int lookChar();
+  virtual int getRawChar();
   virtual int getPos() { return str->getPos(); }
   virtual GString *getPSFilter(char *indent);
   virtual GBool isBinary(GBool last = gTrue);
@@ -276,6 +322,7 @@ public:
 private:
 
   Stream *str;                 // stream
+  StreamPredictor *pred;       // predictor
   int early;                   // early parameter
   char zCmd[256];              // uncompress command
   FILE *zPipe;                 // uncompress pipe
@@ -334,8 +381,9 @@ struct CCITTCodeTable;
 class CCITTFaxStream: public Stream {
 public:
 
-  CCITTFaxStream(Stream *str1, int encoding1, GBool byteAlign1,
-                int columns1, int rows1, GBool black1);
+  CCITTFaxStream(Stream *str, int encoding, GBool endOfLine,
+                GBool byteAlign, int columns, int rows,
+                GBool endOfBlock, GBool black);
   virtual ~CCITTFaxStream();
   virtual StreamKind getKind() { return strCCITTFax; }
   virtual void reset();
@@ -353,12 +401,15 @@ private:
 
   Stream *str;                 // stream
   int encoding;                        // 'K' parameter
+  GBool endOfLine;             // 'EndOfLine' parameter
   GBool byteAlign;             // 'EncodedByteAlign' parameter
   int columns;                 // 'Columns' parameter
   int rows;                    // 'Rows' parameter
+  GBool endOfBlock;            // 'EndOfBlock' parameter
   GBool black;                 // 'BlackIs1' parameter
   GBool eof;                   // true if at eof
   GBool nextLine2D;            // true if next line uses 2D encoding
+  int row;                     // current row
   int inputBuf;                        // input buffer
   int inputBits;               // number of bits in input buffer
   short *refLine;              // reference line changing elements
@@ -371,8 +422,8 @@ private:
   short getTwoDimCode();
   short getWhiteCode();
   short getBlackCode();
-  short look13Bits();
-  void eatBits(int bits) { inputBits -= bits; }
+  short lookBits(int n);
+  void eatBits(int n) { inputBits -= n; }
 };
 
 //------------------------------------------------------------------------
@@ -422,6 +473,7 @@ private:
   DCTCompInfo compInfo[4];     // info for each component
   int numComps;                        // number of components in image
   int colorXform;              // need YCbCr-to-RGB transform?
+  GBool gotAdobeMarker;                // set if APP14 Adobe marker was present
   int restartInterval;         // restart interval, in MCUs
   Guchar quantTables[4][64];   // quantization tables
   int numQuantTables;          // number of quantization tables
@@ -495,6 +547,7 @@ public:
   virtual void reset();
   virtual int getChar();
   virtual int lookChar();
+  virtual int getRawChar();
   virtual int getPos() { return str->getPos(); }
   virtual GString *getPSFilter(char *indent);
   virtual GBool isBinary(GBool last = gTrue);
@@ -505,6 +558,7 @@ public:
 private:
 
   Stream *str;                 // stream
+  StreamPredictor *pred;       // predictor
   Guchar buf[flateWindow];     // output data buffer
   int index;                   // current index into output buffer
   int remain;                  // number valid bytes in output buffer
index 2d9ddde1a1e1be09a5f49d4603d6284261b97e74..6d675ef40663e9b9c3eea1da46fae506f10577fc 100644 (file)
@@ -19,7 +19,7 @@
 #include "config.h"
 #include "Error.h"
 #include "GfxState.h"
-#include "GfxFont.h"
+#include "FontEncoding.h"
 #include "TextOutputDev.h"
 
 #include "TextOutputFontInfo.h"
@@ -34,8 +34,8 @@ static char *isoLatin1Subst[] = {
   "S",                         // Scaron
   "Y",                         // Ydieresis
   "Z",                         // Zcaron
-  "fi",                                // fi
-  "fl",                                // fl
+  "fi", "fl",                  // ligatures
+  "ff", "ffi", "ffl",          // ligatures
   "i",                         // dotlessi
   "l",                         // lslash
   "oe",                                // oe
@@ -70,8 +70,8 @@ static char *ascii7Subst[] = {
   "ae",                                // ae
   "c",                         // ccedilla
   "e", "e", "e", "e",          // e{acute,circumflex,dieresis,grave}
-  "fi",                                // fi
-  "fl",                                // fl
+  "fi", "fl",                  // ligatures
+  "ff", "ffi", "ffl",          // ligatures
   "i",                         // dotlessi
   "i", "i", "i", "i",          // i{acute,circumflex,dieresis,grave}
   "l",                         // lslash
@@ -93,6 +93,72 @@ static char *ascii7Subst[] = {
   "TM"                         // trademark
 };
 
+//------------------------------------------------------------------------
+// 16-bit fonts
+//------------------------------------------------------------------------
+
+#if JAPANESE_SUPPORT
+
+// CID 0 .. 96
+static Gushort japan12Map[96] = {
+  0x2120, 0x2120, 0x212a, 0x2149, 0x2174, 0x2170, 0x2173, 0x2175, // 00 .. 07
+  0x2147, 0x214a, 0x214b, 0x2176, 0x215c, 0x2124, 0x213e, 0x2123, // 08 .. 0f
+  0x213f, 0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, // 10 .. 17
+  0x2337, 0x2338, 0x2339, 0x2127, 0x2128, 0x2163, 0x2161, 0x2164, // 18 .. 1f
+  0x2129, 0x2177, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, // 20 .. 27
+  0x2347, 0x2348, 0x2349, 0x234a, 0x234b, 0x234c, 0x234d, 0x234e, // 28 .. 2f
+  0x234f, 0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, // 30 .. 37
+  0x2357, 0x2358, 0x2359, 0x235a, 0x214e, 0x216f, 0x214f, 0x2130, // 38 .. 3f
+  0x2132, 0x2146, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, // 40 .. 47
+  0x2367, 0x2368, 0x2369, 0x236a, 0x236b, 0x236c, 0x236d, 0x236e, // 48 .. 4f
+  0x236f, 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, // 50 .. 57
+  0x2377, 0x2378, 0x2379, 0x237a, 0x2150, 0x2143, 0x2151, 0x2141  // 58 .. 5f
+};
+
+// CID 325 .. 421
+static Gushort japan12KanaMap1[97] = {
+  0x2131, 0x2121, 0x2123, 0x2156, 0x2157, 0x2122, 0x2126, 0x2572,
+  0x2521, 0x2523, 0x2525, 0x2527, 0x2529, 0x2563, 0x2565, 0x2567,
+  0x2543, 0x213c, 0x2522, 0x2524, 0x2526, 0x2528, 0x252a, 0x252b,
+  0x252d, 0x252f, 0x2531, 0x2533, 0x2535, 0x2537, 0x2539, 0x253b,
+  0x253d, 0x253f, 0x2541, 0x2544, 0x2546, 0x2548, 0x254a, 0x254b,
+  0x254c, 0x254d, 0x254e, 0x254f, 0x2552, 0x2555, 0x2558, 0x255b,
+  0x255e, 0x255f, 0x2560, 0x2561, 0x2562, 0x2564, 0x2566, 0x2568,
+  0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256f, 0x2573, 0x212b,
+  0x212c, 0x212e, 0x2570, 0x2571, 0x256e, 0x2575, 0x2576, 0x2574,
+  0x252c, 0x252e, 0x2530, 0x2532, 0x2534, 0x2536, 0x2538, 0x253a,
+  0x253c, 0x253e, 0x2540, 0x2542, 0x2545, 0x2547, 0x2549, 0x2550,
+  0x2551, 0x2553, 0x2554, 0x2556, 0x2557, 0x2559, 0x255a, 0x255c,
+  0x255d
+};
+
+// CID 501 .. 598
+static Gushort japan12KanaMap2[98] = {
+  0x212d, 0x212f, 0x216d, 0x214c, 0x214d, 0x2152, 0x2153, 0x2154,
+  0x2155, 0x2158, 0x2159, 0x215a, 0x215b, 0x213d, 0x2121, 0x2472,
+  0x2421, 0x2423, 0x2425, 0x2427, 0x2429, 0x2463, 0x2465, 0x2467,
+  0x2443, 0x2422, 0x2424, 0x2426, 0x2428, 0x242a, 0x242b, 0x242d,
+  0x242f, 0x2431, 0x2433, 0x2435, 0x2437, 0x2439, 0x243b, 0x243d,
+  0x243f, 0x2441, 0x2444, 0x2446, 0x2448, 0x244a, 0x244b, 0x244c,
+  0x244d, 0x244e, 0x244f, 0x2452, 0x2455, 0x2458, 0x245b, 0x245e,
+  0x245f, 0x2460, 0x2461, 0x2462, 0x2464, 0x2466, 0x2468, 0x2469,
+  0x246a, 0x246b, 0x246c, 0x246d, 0x246f, 0x2473, 0x2470, 0x2471,
+  0x246e, 0x242c, 0x242e, 0x2430, 0x2432, 0x2434, 0x2436, 0x2438,
+  0x243a, 0x243c, 0x243e, 0x2440, 0x2442, 0x2445, 0x2447, 0x2449,
+  0x2450, 0x2451, 0x2453, 0x2454, 0x2456, 0x2457, 0x2459, 0x245a,
+  0x245c, 0x245d
+};
+
+static char *japan12Roman[10] = {
+  "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"
+};
+
+static char *japan12Abbrev1[6] = {
+  "mm", "cm", "km", "mg", "kg", "cc"
+};
+
+#endif
+
 //------------------------------------------------------------------------
 // TextString
 //------------------------------------------------------------------------
@@ -193,15 +259,166 @@ void TextString::addChar(GfxState *state, double x, double y,
   xMax = x + dx;
 }
 
+void TextString::addChar16(GfxState *state, double x, double y,
+                          double dx, double dy,
+                          int c, GfxFontCharSet16 charSet) {
+  int c1, t1, t2;
+  int sub[8];
+  char *p;
+  int *q;
+  int i, j, n;
+
+  // get current index
+  i = text->getLength();
+
+  // convert the 16-bit character
+  c1 = 0;
+  sub[0] = 0;
+  switch (charSet) {
+
+  // convert Adobe-Japan1-2 to JIS X 0208-1983
+  case font16AdobeJapan12:
+#if JAPANESE_SUPPORT
+    if (c <= 96) {
+      c1 = 0x8080 + japan12Map[c];
+    } else if (c <= 632) {
+      if (c <= 230)
+       c1 = 0;
+      else if (c <= 324)
+       c1 = 0x8080 + japan12Map[c - 230];
+      else if (c <= 421)
+       c1 = 0x8080 + japan12KanaMap1[c - 325];
+      else if (c <= 500)
+       c1 = 0;
+      else if (c <= 598)
+       c1 = 0x8080 + japan12KanaMap2[c - 501];
+      else
+       c1 = 0;
+    } else if (c <= 1124) {
+      if (c <= 779) {
+       if (c <= 726)
+         c1 = 0xa1a1 + (c - 633);
+       else if (c <= 740)
+         c1 = 0xa2a1 + (c - 727);
+       else if (c <= 748)
+         c1 = 0xa2ba + (c - 741);
+       else if (c <= 755)
+         c1 = 0xa2ca + (c - 749);
+       else if (c <= 770)
+         c1 = 0xa2dc + (c - 756);
+       else if (c <= 778)
+         c1 = 0xa2f2 + (c - 771);
+       else
+         c1 = 0xa2fe;
+      } else if (c <= 841) {
+       if (c <= 789)
+         c1 = 0xa3b0 + (c - 780);
+       else if (c <= 815)
+         c1 = 0xa3c1 + (c - 790);
+       else
+         c1 = 0xa3e1 + (c - 816);
+      } else if (c <= 1010) {
+       if (c <= 924)
+         c1 = 0xa4a1 + (c - 842);
+       else
+         c1 = 0xa5a1 + (c - 925);
+      } else {
+       if (c <= 1034)
+         c1 = 0xa6a1 + (c - 1011);
+       else if (c <= 1058)
+         c1 = 0xa6c1 + (c - 1035);
+       else if (c <= 1091)
+         c1 = 0xa7a1 + (c - 1059);
+       else
+         c1 = 0xa7d1 + (c - 1092);
+      }
+    } else if (c <= 4089) {
+      t1 = (c - 1125) / 94;
+      t2 = (c - 1125) % 94;
+      c1 = 0xb0a1 + (t1 << 8) + t2;
+    } else if (c <= 7477) {
+      t1 = (c - 4090) / 94;
+      t2 = (c - 4090) % 94;
+      c1 = 0xd0a1 + (t1 << 8) + t2;
+    } else if (c <= 7554) {
+      c1 = 0;
+    } else if (c <= 7563) {    // circled Arabic numbers 1..9
+      c1 = 0xa3b1 + (c - 7555);
+    } else if (c <= 7574) {    // circled Arabic numbers 10..20
+      t1 = c - 7564 + 10;
+      sub[0] = 0xa3b0 + (t1 / 10);
+      sub[1] = 0xa3b0 + (t1 % 10);
+      sub[2] = 0;
+      c1 = -1;
+    } else if (c <= 7584) {    // Roman numbers I..X
+      for (p = japan12Roman[c - 7575], q = sub; *p; ++p, ++q) {
+       *q = 0xa380 + *p;
+      }
+      *q = 0;
+      c1 = -1;
+    } else if (c <= 7632) {
+      if (c <= 7600) {
+       c1 = 0;
+      } else if (c <= 7606) {
+       for (p = japan12Abbrev1[c - 7601], q = sub; *p; ++p, ++q) {
+         *q = 0xa380 + *p;
+       }
+       *q = 0;
+       c1 = -1;
+      } else {
+       c1 = 0;
+      }
+    } else {
+      c1 = 0;
+    }
+#endif // JAPANESE_SUPPORT
+    break;
+  }
+
+  // append converted character to string
+  if (c1 == 0) {
+#if 0 //~
+    error(-1, "Unsupported Adobe-Japan1-2 character: %d", c);
+#endif
+    text->append(' ');
+    n = 1;
+  } else if (c1 > 0) {
+    text->append(c1 >> 8);
+    text->append(c1 & 0xff);
+    n = 2;
+  } else {
+    n = 0;
+    for (q = sub; *q; ++q) {
+      text->append(*q >> 8);
+      text->append(*q & 0xff);
+      n += 2;
+    }
+  }
+
+  // update position information
+  if (i+n > ((i+15) & ~15)) {
+    xRight = (double *)grealloc(xRight, ((i+n+15) & ~15) * sizeof(double));
+  }
+  if (i == 0) {
+    xMin = x;
+  }
+  for (j = 0; j < n; ++j) {
+    xRight[i+j] = x + dx;
+  }
+  xMax = x + dx;
+}
+
 //------------------------------------------------------------------------
 // TextPage
 //------------------------------------------------------------------------
 
-TextPage::TextPage(GBool useASCII71) {
-  useASCII7 = useASCII71;
+TextPage::TextPage(GBool useASCII7, GBool rawOrder) {
+  this->useASCII7 = useASCII7;
+  this->rawOrder = rawOrder;
   curStr = NULL;
   yxStrings = NULL;
   xyStrings = NULL;
+  yxCur1 = yxCur2 = NULL;
 }
 
 TextPage::~TextPage() {
@@ -214,13 +431,47 @@ void TextPage::beginString(GfxState *state, GString *s, GBool hexCodes) {
 
 void TextPage::addChar(GfxState *state, double x, double y,
                       double dx, double dy, Guchar c) {
-  double x1, y1, w1, h1;
+  double x1, y1, w1, h1, dx2, dy2;
+  int n;
+  GBool hexCodes;
 
   state->transform(x, y, &x1, &y1);
+  state->textTransformDelta(state->getCharSpace(), 0, &dx2, &dy2);
+  dx -= dx2;
+  dy -= dy2;
   state->transformDelta(dx, dy, &w1, &h1);
+  n = curStr->text->getLength();
+  if (n > 0 &&
+      x1 - curStr->xRight[n-1] > 0.1 * (curStr->yMax - curStr->yMin)) {
+    hexCodes = curStr->hexCodes;
+    endString();
+    beginString(state, NULL, hexCodes);
+  }
   curStr->addChar(state, x1, y1, w1, h1, c, useASCII7);
 }
 
+void TextPage::addChar16(GfxState *state, double x, double y,
+                        double dx, double dy, int c,
+                        GfxFontCharSet16 charSet) {
+  double x1, y1, w1, h1, dx2, dy2;
+  int n;
+  GBool hexCodes;
+
+  state->transform(x, y, &x1, &y1);
+  state->textTransformDelta(state->getCharSpace(), 0, &dx2, &dy2);
+  dx -= dx2;
+  dy -= dy2;
+  state->transformDelta(dx, dy, &w1, &h1);
+  n = curStr->text->getLength();
+  if (n > 0 &&
+      x1 - curStr->xRight[n-1] > 0.1 * (curStr->yMax - curStr->yMin)) {
+    hexCodes = curStr->hexCodes;
+    endString();
+    beginString(state, NULL, hexCodes);
+  }
+  curStr->addChar16(state, x1, y1, w1, h1, c, charSet);
+}
+
 void TextPage::endString() {
   TextString *p1, *p2;
   double h, y1, y2;
@@ -245,10 +496,25 @@ void TextPage::endString() {
   h = curStr->yMax - curStr->yMin;
   y1 = curStr->yMin + 0.5 * h;
   y2 = curStr->yMin + 0.8 * h;
-  for (p1 = NULL, p2 = yxStrings; p2; p1 = p2, p2 = p2->yxNext) {
-    if (y1 < p2->yMin || (y2 < p2->yMax && curStr->xMax < p2->xMin))
-      break;
+  if (rawOrder) {
+    p1 = yxCur1;
+    p2 = NULL;
+  } else if ((!yxCur1 ||
+             (y1 >= yxCur1->yMin &&
+              (y2 >= yxCur1->yMax || curStr->xMax >= yxCur1->xMin))) &&
+            (!yxCur2 ||
+             (y1 < yxCur2->yMin ||
+              (y2 < yxCur2->yMax && curStr->xMax < yxCur2->xMin)))) {
+    p1 = yxCur1;
+    p2 = yxCur2;
+  } else {
+    for (p1 = NULL, p2 = yxStrings; p2; p1 = p2, p2 = p2->yxNext) {
+      if (y1 < p2->yMin || (y2 < p2->yMax && curStr->xMax < p2->xMin))
+       break;
+    }
+    yxCur2 = p2;
   }
+  yxCur1 = curStr;
   if (p1)
     p1->yxNext = curStr;
   else
@@ -275,9 +541,17 @@ void TextPage::coalesce() {
     space = str1->yMax - str1->yMin;
     d = str2->xMin - str1->xMax;
 #if 0 //~tmp
-    if (str2->yMin < str1->yMax && d > -0.1 * space && d < 0.2 * space) {
+    if (((rawOrder &&
+         ((str2->yMin >= str1->yMin && str2->yMin <= str1->yMax) ||
+          (str2->yMax >= str1->yMin && str2->yMax <= str1->yMax))) ||
+        (!rawOrder && str2->yMin < str1->yMax)) &&
+       d > -0.1 * space && d < 0.2 * space) {
 #else
-    if (str2->yMin < str1->yMax && d > -0.5 * space && d < space) {
+    if (((rawOrder &&
+         ((str2->yMin >= str1->yMin && str2->yMin <= str1->yMax) ||
+          (str2->yMax >= str1->yMin && str2->yMax <= str1->yMax))) ||
+        (!rawOrder && str2->yMin < str1->yMax)) &&
+       d > -0.5 * space && d < space) {
 #endif
       n = str1->text->getLength();
       if (d > 0.1 * space)
@@ -467,8 +741,13 @@ void TextPage::dump(FILE *f) {
   for (str1 = yxStrings; str1; str1 = str1->yxNext) {
 
     // line this string up with the correct column
-    for (; col1 < str1->col; ++col1)
-      fputc(' ', f);
+    if (rawOrder && col1 == 0) {
+      col1 = str1->col;
+    } else {
+      for (; col1 < str1->col; ++col1) {
+       fputc(' ', f);
+      }
+    }
 
     // print the string
     fputs(str1->text->getCString(), f);
@@ -482,10 +761,13 @@ void TextPage::dump(FILE *f) {
 
     // if we've hit the end of the line...
 #if 0 //~
-    if (!(str1->yxNext && str1->yxNext->yMin < str1->yMax &&
+    if (!(str1->yxNext &&
+         !(rawOrder && str1->yxNext->yMax < str1->yMin) &&
+         str1->yxNext->yMin < str1->yMax &&
          str1->yxNext->xMin >= str1->xMax)) {
 #else
     if (!(str1->yxNext &&
+         !(rawOrder && str1->yxNext->yMax < str1->yMin) &&
          str1->yxNext->yMin < 0.2*str1->yMin + 0.8*str1->yMax &&
          str1->yxNext->xMin >= str1->xMax)) {
 #endif
@@ -508,8 +790,12 @@ void TextPage::dump(FILE *f) {
          
        // print the space
        d = (int)((yMin - yMax) / (str1->yMax - str1->yMin) + 0.5);
-       for (; d > 0; --d)
+       if (rawOrder && d > 2) {
+         d = 2;
+       }
+       for (; d > 0; --d) {
          fputc('\n', f);
+       }
       }
 
       // set up for next line
@@ -532,14 +818,16 @@ void TextPage::clear() {
   }
   yxStrings = NULL;
   xyStrings = NULL;
+  yxCur1 = yxCur2 = NULL;
 }
 
 //------------------------------------------------------------------------
 // TextOutputDev
 //------------------------------------------------------------------------
 
-TextOutputDev::TextOutputDev(char *fileName, GBool useASCII7) {
+TextOutputDev::TextOutputDev(char *fileName, GBool useASCII7, GBool rawOrder) {
   text = NULL;
+  this->rawOrder = rawOrder;
   ok = gTrue;
 
   // open file
@@ -559,7 +847,7 @@ TextOutputDev::TextOutputDev(char *fileName, GBool useASCII7) {
   }
 
   // set up text object
-  text = new TextPage(useASCII7);
+  text = new TextPage(useASCII7, rawOrder);
 }
 
 TextOutputDev::~TextOutputDev() {
@@ -590,7 +878,7 @@ void TextOutputDev::updateFont(GfxState *state) {
 
   // look for hex char codes in subsetted font
   hexCodes = gFalse;
-  if ((font = state->getFont())) {
+  if ((font = state->getFont()) && !font->is16Bit()) {
     for (c = 0; c < 256; ++c) {
       if ((charName = font->getCharName(c))) {
        if ((charName[0] == 'B' || charName[0] == 'C' ||
@@ -621,6 +909,11 @@ void TextOutputDev::drawChar(GfxState *state, double x, double y,
   text->addChar(state, x, y, dx, dy, c);
 }
 
+void TextOutputDev::drawChar16(GfxState *state, double x, double y,
+                              double dx, double dy, int c) {
+  text->addChar16(state, x, y, dx, dy, c, state->getFont()->getCharSet16());
+}
+
 GBool TextOutputDev::findText(char *s, GBool top, GBool bottom,
                              double *xMin, double *yMin,
                              double *xMax, double *yMax) {
index 8c1cc7789f227fcad0f42874f3f9503e2b047d1e..f13a23a0503d106c01d36ffc7086e2e807e59d8c 100644 (file)
 
 #include <stdio.h>
 #include "gtypes.h"
+#include "GfxFont.h"
 #include "OutputDev.h"
 
 class GfxState;
-class GfxFont;
 class GString;
 
 //------------------------------------------------------------------------
@@ -39,6 +39,11 @@ public:
               double dx, double dy,
               Guchar c, GBool useASCII7);
 
+  // Add a 16-bit character to the string.
+  void addChar16(GfxState *state, double x, double y,
+                double dx, double dy,
+                int c, GfxFontCharSet16 charSet);
+
 private:
 
   double xMin, xMax;           // bounding box x coordinates
@@ -61,7 +66,7 @@ class TextPage {
 public:
 
   // Constructor.
-  TextPage(GBool useASCII71);
+  TextPage(GBool useASCII7, GBool rawOrder);
 
   // Destructor.
   ~TextPage();
@@ -73,6 +78,11 @@ public:
   void addChar(GfxState *state, double x, double y,
               double dx, double dy, Guchar c);
 
+  // Add a 16-bit character to the current string.
+  void addChar16(GfxState *state, double x, double y,
+                double dx, double dy, int c,
+                GfxFontCharSet16 charSet);
+
   // End the current string, sorting it into the list of strings.
   void endString();
 
@@ -101,11 +111,13 @@ public:
 private:
 
   GBool useASCII7;             // use 7-bit ASCII?
+  GBool rawOrder;              // keep strings in content stream order
 
   TextString *curStr;          // currently active string
 
   TextString *yxStrings;       // strings in y-major order
   TextString *xyStrings;       // strings in x-major order
+  TextString *yxCur1, *yxCur2; // cursors for yxStrings list
 };
 
 //------------------------------------------------------------------------
@@ -118,8 +130,10 @@ public:
   // Open a text output file.  If <fileName> is NULL, no file is written
   // (this is useful, e.g., for searching text).  If <useASCII7> is true,
   // text is converted to 7-bit ASCII; otherwise, text is converted to
-  // 8-bit ISO Latin-1.
-  TextOutputDev(char *fileName, GBool useASCII7);
+  // 8-bit ISO Latin-1.  <useASCII7> should also be set for Japanese
+  // (EUC-JP) text.  If <rawOrder> is true, the text is kept in content
+  // stream order.
+  TextOutputDev(char *fileName, GBool useASCII7, GBool rawOrder);
 
   // Destructor.
   virtual ~TextOutputDev();
@@ -152,6 +166,8 @@ public:
   virtual void endString(GfxState *state);
   virtual void drawChar(GfxState *state, double x, double y,
                        double dx, double dy, Guchar c);
+  virtual void drawChar16(GfxState *state, double x, double y,
+                         double dx, double dy, int c);
 
   //----- special access
 
@@ -169,6 +185,7 @@ private:
   FILE *f;                     // text file
   GBool needClose;             // need to close the file?
   TextPage *text;              // text for the current page
+  GBool rawOrder;              // keep text in content stream order
   GBool hexCodes;              // subsetted font with hex char codes
   GBool ok;                    // set up ok?
 };
index 0f385cbbc7a0e8c9c6b3fe3600b13c74c33aaea6..14051082ef0c3f372ad0bb6788b211e0dbf9bd94 100644 (file)
@@ -15,7 +15,7 @@
 // Character encodings.
 //------------------------------------------------------------------------
 
-#define ascii7EncodingSize 208
+#define ascii7EncodingSize 211
 static char *ascii7EncodingNames[ascii7EncodingSize] = {
   NULL,
   NULL,
@@ -192,6 +192,9 @@ static char *ascii7EncodingNames[ascii7EncodingSize] = {
   "egrave",
   "fi",
   "fl",
+  "ff",
+  "ffi",
+  "ffl",
   "dotlessi",
   "iacute",
   "icircumflex",
@@ -226,10 +229,10 @@ static char *ascii7EncodingNames[ascii7EncodingSize] = {
   "registered",
   "trademark"
 };
-static GfxFontEncoding ascii7Encoding(ascii7EncodingNames,
-                                      ascii7EncodingSize);
+static FontEncoding ascii7Encoding(ascii7EncodingNames,
+                                   ascii7EncodingSize);
 
-#define isoLatin1EncodingSize 276
+#define isoLatin1EncodingSize 279
 static char *isoLatin1EncodingNames[isoLatin1EncodingSize] = {
   NULL,
   NULL,
@@ -494,6 +497,9 @@ static char *isoLatin1EncodingNames[isoLatin1EncodingSize] = {
   "Zcaron",
   "fi",
   "fl",
+  "ff",
+  "ffi",
+  "ffl",
   "dotlessi",
   "lslash",
   "oe",
@@ -508,7 +514,7 @@ static char *isoLatin1EncodingNames[isoLatin1EncodingSize] = {
   "quotesingle",
   "trademark"
 };
-static GfxFontEncoding isoLatin1Encoding(isoLatin1EncodingNames,
-                                         isoLatin1EncodingSize);
+static FontEncoding isoLatin1Encoding(isoLatin1EncodingNames,
+                                      isoLatin1EncodingSize);
 
 #endif
index 3e762f622293bd69febe4c88f5fd78794d94fb34..119162cb35ae4215d38d42a16bd8078a2ab55e03 100644 (file)
@@ -13,6 +13,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stddef.h>
+#include <unistd.h>
 #include <string.h>
 #include <ctype.h>
 #include <math.h>
@@ -22,6 +23,8 @@
 #include "Stream.h"
 #include "GfxState.h"
 #include "GfxFont.h"
+#include "FontFile.h"
+#include "FontEncoding.h"
 #include "Error.h"
 #include "Params.h"
 #include "TextOutputDev.h"
@@ -50,9 +53,33 @@ typedef char *XPointer;
 // Parameters
 //------------------------------------------------------------------------
 
-GBool installCmap;
+GBool installCmap = gFalse;
 
-int rgbCubeSize;
+int rgbCubeSize = defaultRGBCube;
+
+#if HAVE_T1LIB_H
+GString *t1libControl = NULL;
+#endif
+
+GString *t1Courier = NULL;
+GString *t1CourierBold = NULL;
+GString *t1CourierBoldOblique = NULL;
+GString *t1CourierOblique = NULL;
+GString *t1Helvetica = NULL;
+GString *t1HelveticaBold = NULL;
+GString *t1HelveticaBoldOblique = NULL;
+GString *t1HelveticaOblique = NULL;
+GString *t1Symbol = NULL;
+GString *t1TimesBold = NULL;
+GString *t1TimesBoldItalic = NULL;
+GString *t1TimesItalic = NULL;
+GString *t1TimesRoman = NULL;
+GString *t1ZapfDingbats = NULL;
+
+GBool useEUCJP = gFalse;
+#if JAPANESE_SUPPORT
+GString *japan12Font = NULL;
+#endif
 
 //------------------------------------------------------------------------
 // Font map
@@ -61,52 +88,25 @@ int rgbCubeSize;
 struct FontMapEntry {
   char *pdfFont;
   char *xFont;
-  GfxFontEncoding *encoding;
+  GString **t1Font;
+  FontEncoding *encoding;
 };
 
 static FontMapEntry fontMap[] = {
-  {"Courier",
-   "-*-courier-medium-r-normal-*-%s-*-*-*-*-*-iso8859-1",
-   &isoLatin1Encoding},
-  {"Courier-Bold",
-   "-*-courier-bold-r-normal-*-%s-*-*-*-*-*-iso8859-1",
-   &isoLatin1Encoding},
-  {"Courier-BoldOblique",
-   "-*-courier-bold-o-normal-*-%s-*-*-*-*-*-iso8859-1",
-   &isoLatin1Encoding},
-  {"Courier-Oblique",
-   "-*-courier-medium-o-normal-*-%s-*-*-*-*-*-iso8859-1",
-   &isoLatin1Encoding},
-  {"Helvetica",
-   "-*-helvetica-medium-r-normal-*-%s-*-*-*-*-*-iso8859-1",
-   &isoLatin1Encoding},
-  {"Helvetica-Bold",
-   "-*-helvetica-bold-r-normal-*-%s-*-*-*-*-*-iso8859-1",
-   &isoLatin1Encoding},
-  {"Helvetica-BoldOblique",
-   "-*-helvetica-bold-o-normal-*-%s-*-*-*-*-*-iso8859-1",
-   &isoLatin1Encoding},
-  {"Helvetica-Oblique",
-   "-*-helvetica-medium-o-normal-*-%s-*-*-*-*-*-iso8859-1",
-   &isoLatin1Encoding},
-  {"Symbol",
-   "-*-symbol-medium-r-normal-*-%s-*-*-*-*-*-adobe-fontspecific",
-   &symbolEncoding},
-  {"Times-Bold",
-   "-*-times-bold-r-normal-*-%s-*-*-*-*-*-iso8859-1",
-   &isoLatin1Encoding},
-  {"Times-BoldItalic",
-   "-*-times-bold-i-normal-*-%s-*-*-*-*-*-iso8859-1",
-   &isoLatin1Encoding},
-  {"Times-Italic",
-   "-*-times-medium-i-normal-*-%s-*-*-*-*-*-iso8859-1",
-   &isoLatin1Encoding},
-  {"Times-Roman",
-   "-*-times-medium-r-normal-*-%s-*-*-*-*-*-iso8859-1",
-   &isoLatin1Encoding},
-  {"ZapfDingbats",
-   "-*-zapfdingbats-medium-r-normal-*-%s-*-*-*-*-*-*-*",
-   &zapfDingbatsEncoding},
+  {"Courier",               "-*-courier-medium-r-normal-*-%s-*-*-*-*-*-iso8859-1",          &t1Courier,              &isoLatin1Encoding},
+  {"Courier-Bold",          "-*-courier-bold-r-normal-*-%s-*-*-*-*-*-iso8859-1",            &t1CourierBold,          &isoLatin1Encoding},
+  {"Courier-BoldOblique",   "-*-courier-bold-o-normal-*-%s-*-*-*-*-*-iso8859-1",            &t1CourierBoldOblique,   &isoLatin1Encoding},
+  {"Courier-Oblique",       "-*-courier-medium-o-normal-*-%s-*-*-*-*-*-iso8859-1",          &t1CourierOblique,       &isoLatin1Encoding},
+  {"Helvetica",             "-*-helvetica-medium-r-normal-*-%s-*-*-*-*-*-iso8859-1",        &t1Helvetica,            &isoLatin1Encoding},
+  {"Helvetica-Bold",        "-*-helvetica-bold-r-normal-*-%s-*-*-*-*-*-iso8859-1",          &t1HelveticaBold,        &isoLatin1Encoding},
+  {"Helvetica-BoldOblique", "-*-helvetica-bold-o-normal-*-%s-*-*-*-*-*-iso8859-1",          &t1HelveticaBoldOblique, &isoLatin1Encoding},
+  {"Helvetica-Oblique",     "-*-helvetica-medium-o-normal-*-%s-*-*-*-*-*-iso8859-1",        &t1HelveticaOblique,     &isoLatin1Encoding},
+  {"Symbol",                "-*-symbol-medium-r-normal-*-%s-*-*-*-*-*-adobe-fontspecific",  &t1Symbol,               &symbolEncoding},
+  {"Times-Bold",            "-*-times-bold-r-normal-*-%s-*-*-*-*-*-iso8859-1",              &t1TimesBold,            &isoLatin1Encoding},
+  {"Times-BoldItalic",      "-*-times-bold-i-normal-*-%s-*-*-*-*-*-iso8859-1",              &t1TimesBoldItalic,      &isoLatin1Encoding},
+  {"Times-Italic",          "-*-times-medium-i-normal-*-%s-*-*-*-*-*-iso8859-1",            &t1TimesItalic,          &isoLatin1Encoding},
+  {"Times-Roman",           "-*-times-medium-r-normal-*-%s-*-*-*-*-*-iso8859-1",            &t1TimesRoman,           &isoLatin1Encoding},
+  {"ZapfDingbats",          "-*-zapfdingbats-medium-r-normal-*-%s-*-*-*-*-*-*-*",           &t1ZapfDingbats,         &zapfDingbatsEncoding},
   {NULL}
 };
 
@@ -118,27 +118,28 @@ static FontMapEntry *userFontMap;
 
 struct FontSubst {
   char *xFont;
+  GString **t1Font;
   double mWidth;
 };
 
 // index: {symbolic:12, fixed:8, serif:4, sans-serif:0} + bold*2 + italic
 static FontSubst fontSubst[16] = {
-  {"-*-helvetica-medium-r-normal-*-%s-*-*-*-*-*-iso8859-1",       0.833},
-  {"-*-helvetica-medium-o-normal-*-%s-*-*-*-*-*-iso8859-1",       0.833},
-  {"-*-helvetica-bold-r-normal-*-%s-*-*-*-*-*-iso8859-1",         0.889},
-  {"-*-helvetica-bold-o-normal-*-%s-*-*-*-*-*-iso8859-1",         0.889},
-  {"-*-times-medium-r-normal-*-%s-*-*-*-*-*-iso8859-1",           0.788},
-  {"-*-times-medium-i-normal-*-%s-*-*-*-*-*-iso8859-1",           0.722},
-  {"-*-times-bold-r-normal-*-%s-*-*-*-*-*-iso8859-1",             0.833},
-  {"-*-times-bold-i-normal-*-%s-*-*-*-*-*-iso8859-1",             0.778},
-  {"-*-courier-medium-r-normal-*-%s-*-*-*-*-*-iso8859-1",         0.600},
-  {"-*-courier-medium-o-normal-*-%s-*-*-*-*-*-iso8859-1",         0.600},
-  {"-*-courier-bold-r-normal-*-%s-*-*-*-*-*-iso8859-1",           0.600},
-  {"-*-courier-bold-o-normal-*-%s-*-*-*-*-*-iso8859-1",           0.600},
-  {"-*-symbol-medium-r-normal-*-%s-*-*-*-*-*-adobe-fontspecific", 0.576},
-  {"-*-symbol-medium-r-normal-*-%s-*-*-*-*-*-adobe-fontspecific", 0.576},
-  {"-*-symbol-medium-r-normal-*-%s-*-*-*-*-*-adobe-fontspecific", 0.576},
-  {"-*-symbol-medium-r-normal-*-%s-*-*-*-*-*-adobe-fontspecific", 0.576}
+  {"-*-helvetica-medium-r-normal-*-%s-*-*-*-*-*-iso8859-1",       &t1Helvetica,            0.833},
+  {"-*-helvetica-medium-o-normal-*-%s-*-*-*-*-*-iso8859-1",       &t1HelveticaOblique,     0.833},
+  {"-*-helvetica-bold-r-normal-*-%s-*-*-*-*-*-iso8859-1",         &t1HelveticaBold,        0.889},
+  {"-*-helvetica-bold-o-normal-*-%s-*-*-*-*-*-iso8859-1",         &t1HelveticaBoldOblique, 0.889},
+  {"-*-times-medium-r-normal-*-%s-*-*-*-*-*-iso8859-1",           &t1TimesRoman,           0.788},
+  {"-*-times-medium-i-normal-*-%s-*-*-*-*-*-iso8859-1",           &t1TimesItalic,          0.722},
+  {"-*-times-bold-r-normal-*-%s-*-*-*-*-*-iso8859-1",             &t1TimesBold,            0.833},
+  {"-*-times-bold-i-normal-*-%s-*-*-*-*-*-iso8859-1",             &t1TimesBoldItalic,      0.778},
+  {"-*-courier-medium-r-normal-*-%s-*-*-*-*-*-iso8859-1",         &t1Courier,              0.600},
+  {"-*-courier-medium-o-normal-*-%s-*-*-*-*-*-iso8859-1",         &t1CourierOblique,       0.600},
+  {"-*-courier-bold-r-normal-*-%s-*-*-*-*-*-iso8859-1",           &t1CourierBold,          0.600},
+  {"-*-courier-bold-o-normal-*-%s-*-*-*-*-*-iso8859-1",           &t1CourierBoldOblique,   0.600},
+  {"-*-symbol-medium-r-normal-*-%s-*-*-*-*-*-adobe-fontspecific", &t1Symbol,               0.576},
+  {"-*-symbol-medium-r-normal-*-%s-*-*-*-*-*-adobe-fontspecific", &t1Symbol,               0.576},
+  {"-*-symbol-medium-r-normal-*-%s-*-*-*-*-*-adobe-fontspecific", &t1Symbol,               0.576},
+  {"-*-symbol-medium-r-normal-*-%s-*-*-*-*-*-adobe-fontspecific", &t1Symbol,               0.576}
 };
 
 //------------------------------------------------------------------------
@@ -147,7 +148,8 @@ static FontSubst fontSubst[16] = {
 
 #if JAPANESE_SUPPORT
 
-static char *japan12Font = "-*-fixed-medium-r-normal-*-%s-*-*-*-*-*-jisx0208.1983-0";
+static char *japan12DefFont =
+    "-*-fixed-medium-r-normal-*-%s-*-*-*-*-*-jisx0208.1983-0";
 
 // CID 0 .. 96
 static Gushort japan12Map[96] = {
@@ -219,7 +221,7 @@ static char *japan12Abbrev1[6] = {
 #define firstConstrChar 0x105
 #define lastConstrChar  0x106
 #define firstMultiChar  0x107
-#define lastMultiChar   0x10d
+#define lastMultiChar   0x110
 
 // substituted chars
 static Guchar substChars[] = {
@@ -238,176 +240,182 @@ static Guchar substChars[] = {
 static char *multiChars[] = {
   "fi",                                // 107: fi
   "fl",                                // 108: fl
-  "OE",                                // 109: OE
-  "oe",                                // 10a: oe
-  "...",                       // 10b: ellipsis
-  "``",                                // 10c: quotedblleft
-  "''"                         // 10d: quotedblright
+  "ff",                                // 109: ff
+  "ffi",                       // 10a: ffi
+  "ffl",                       // 10b: ffl
+  "OE",                                // 10c: OE
+  "oe",                                // 10d: oe
+  "...",                       // 10e: ellipsis
+  "``",                                // 10f: quotedblleft
+  "''"                         // 110: quotedblright
 };
 
 // ignored chars
-// 10c: Lslash
-// 10d: Scaron
-// 10e: Zcaron
-// 10f: Ydieresis
-// 110: breve
-// 111: caron
-// 112: circumflex
-// 113: dagger
-// 114: daggerdbl
-// 115: dotaccent
-// 116: dotlessi
-// 117: florin
-// 118: grave
-// 119: guilsinglleft
-// 11a: guilsinglright
-// 11b: hungarumlaut
-// 11c: lslash
-// 11d: ogonek
-// 11e: perthousand
-// 11f: quotedblbase
-// 120: quotesinglbase
-// 121: scaron
-// 122: tilde
-// 123: zcaron
+// 111: Lslash
+//    : Scaron
+//    : Zcaron
+//    : Ydieresis
+//    : breve
+//    : caron
+//    : circumflex
+//    : dagger
+//    : daggerdbl
+//    : dotaccent
+//    : dotlessi
+//    : florin
+//    : grave
+//    : guilsinglleft
+//    : guilsinglright
+//    : hungarumlaut
+//    : lslash
+//    : ogonek
+//    : perthousand
+//    : quotedblbase
+//    : quotesinglbase
+//    : scaron
+//    : tilde
+//    : zcaron
 
 //------------------------------------------------------------------------
 // XOutputFont
 //------------------------------------------------------------------------
 
-// Note: if real font is substantially narrower than substituted
-// font, the size is reduced accordingly.
 XOutputFont::XOutputFont(GfxFont *gfxFont, double m11, double m12,
-                        double m21, double m22, Display *display1) {
-  GString *pdfFont;
-  FontMapEntry *p;
-  GfxFontEncoding *encoding;
-  char *fontNameFmt;
-  char fontName[200], fontSize[100];
-  GBool rotated;
-  double size;
-  int startSize, sz;
-  int index;
-  int code, code2;
-  double w1, w2, v;
-  double *fm;
+                        double m21, double m22, Display *display,
+                        XOutputFontCache *cache) {
+  int code;
   char *charName;
-  int n;
 
-  // init
   id = gfxFont->getID();
-  mat11 = m11;
-  mat12 = m12;
-  mat21 = m21;
-  mat22 = m22;
-  display = display1;
-  xFont = NULL;
-  hex = gFalse;
+  this->display = display;
+  tm11 = m11;
+  tm12 = m12;
+  tm21 = m21;
+  tm22 = m22;
 
-  // construct X font name
-  if (gfxFont->is16Bit()) {
-    fontNameFmt = fontSubst[0].xFont;
-    switch (gfxFont->getCharSet16()) {
-    case font16AdobeJapan12:
-#if JAPANESE_SUPPORT
-      fontNameFmt = japan12Font;
-#endif
-      break;
-    }
-  } else {
-    pdfFont = gfxFont->getName();
-    if (pdfFont) {
-      for (p = userFontMap; p->pdfFont; ++p) {
-       if (!pdfFont->cmp(p->pdfFont))
+  // check for hex char names
+  hex = gFalse;
+  if (!gfxFont->is16Bit()) {
+    for (code = 0; code < 256; ++code) {
+      if ((charName = gfxFont->getCharName(code))) {
+       if ((charName[0] == 'B' || charName[0] == 'C' ||
+            charName[0] == 'G') &&
+           strlen(charName) == 3 &&
+           ((charName[1] >= 'a' && charName[1] <= 'f') ||
+            (charName[1] >= 'A' && charName[1] <= 'F') ||
+            (charName[2] >= 'a' && charName[2] <= 'f') ||
+            (charName[2] >= 'A' && charName[2] <= 'F'))) {
+         hex = gTrue;
          break;
-      }
-      if (!p->pdfFont) {
-       for (p = fontMap; p->pdfFont; ++p) {
-         if (!pdfFont->cmp(p->pdfFont))
-           break;
-       }
-      }
-    } else {
-      p = NULL;
-    }
-    if (p && p->pdfFont) {
-      fontNameFmt = p->xFont;
-      encoding = p->encoding;
-    } else {
-      encoding = &isoLatin1Encoding;
-//~ Some non-symbolic fonts are tagged as symbolic.
-//      if (gfxFont->isSymbolic()) {
-//        index = 12;
-//        encoding = symbolEncoding;
-//      } else
-      if (gfxFont->isFixedWidth()) {
-       index = 8;
-      } else if (gfxFont->isSerif()) {
-       index = 4;
-      } else {
-       index = 0;
-      }
-      if (gfxFont->isBold())
-       index += 2;
-      if (gfxFont->isItalic())
-       index += 1;
-      if ((code = gfxFont->getCharCode("m")) >= 0)
-       w1 = gfxFont->getWidth(code);
-      else
-       w1 = 0;
-      w2 = fontSubst[index].mWidth;
-      if (gfxFont->getType() == fontType3) {
-       // This is a hack which makes it possible to substitute for some
-       // Type 3 fonts.  The problem is that it's impossible to know what
-       // the base coordinate system used in the font is without actually
-       // rendering the font.  This code tries to guess by looking at the
-       // width of the character 'm' (which breaks if the font is a
-       // subset that doesn't contain 'm').
-       if (w1 > 0 && (w1 > 1.1 * w2 || w1 < 0.9 * w2)) {
-         w1 /= w2;
-         mat11 *= w1;
-         mat12 *= w1;
-         mat21 *= w1;
-         mat22 *= w1;
-       }
-       fm = gfxFont->getFontMatrix();
-       v = (fm[0] == 0) ? 1 : (fm[3] / fm[0]);
-       mat12 *= v;
-       mat22 *= v;
-      } else if (!gfxFont->isSymbolic()) {
-       if (w1 > 0.01 && w1 < 0.9 * w2) {
-         w1 /= w2;
-         if (w1 < 0.8)
-           w1 = 0.8;
-         mat11 *= w1;
-         mat12 *= w1;
-         mat21 *= w1;
-         mat22 *= w1;
        }
       }
-      fontNameFmt = fontSubst[index].xFont;
     }
+  }
+}
+
+XOutputFont::~XOutputFont() {
+}
+
+#if HAVE_T1LIB_H
+//------------------------------------------------------------------------
+// XOutputT1Font
+//------------------------------------------------------------------------
+
+XOutputT1Font::XOutputT1Font(GfxFont *gfxFont, GString *pdfBaseFont,
+                            double m11, double m12, double m21, double m22,
+                            double size, double ntm11, double ntm12,
+                            double ntm21, double ntm22,
+                            Display *display, XOutputFontCache *cache):
+  XOutputFont(gfxFont, m11, m12, m21, m22, display, cache)
+{
+  Ref embRef;
+  T1_TMATRIX xform;
+
+  t1ID = -1;
+  t1libAA = cache->getT1libAA();
+
+  // keep size info (for drawChar())
+  this->size = (float)size;
+
+  // we can only handle 8-bit, Type 1/1C, with embedded font file
+  // or user-specified base fonts
+  //~ also look for external font files
+  if (!(pdfBaseFont ||
+       (!gfxFont->is16Bit() &&
+        (gfxFont->getType() == fontType1 ||
+         gfxFont->getType() == fontType1C) &&
+        gfxFont->getEmbeddedFontID(&embRef)))) {
+    return;
+  }
+
+  // load the font
+  if ((t1ID = cache->getT1Font(gfxFont, pdfBaseFont)) < 0)
+    return;
+
+  // transform the font
+  xform.cxx = ntm11;
+  xform.cxy = -ntm12;
+  xform.cyx = ntm21;
+  xform.cyy = -ntm22;
+  T1_TransformFont(t1ID, &xform);
+}
+
+XOutputT1Font::~XOutputT1Font() {
+  if (t1ID >= 0) {
+    T1_DeleteFont(t1ID);
+  }
+}
 
-    // Construct forward and reverse map.
-    // This tries to deal with font subset character names of the
-    // form 'Bxx', 'Cxx', 'Gxx', with decimal or hex numbering.
+GBool XOutputT1Font::isOk() {
+  return t1ID >= 0;
+}
+
+void XOutputT1Font::updateGC(GC gc) {
+}
+
+void XOutputT1Font::drawChar(GfxState *state, Pixmap pixmap, GC gc,
+                            double x, double y, int c) {
+  if (t1libAA) {
+    T1_AASetCharX(pixmap, gc, 0, xoutRound(x), xoutRound(y),
+                 t1ID, c, size, NULL);
+  } else {
+    T1_SetCharX(pixmap, gc, 0, xoutRound(x), xoutRound(y),
+               t1ID, c, size, NULL);
+  }
+}
+#endif // HAVE_T1LIB_H
+
+//------------------------------------------------------------------------
+// XOutputServerFont
+//------------------------------------------------------------------------
+
+XOutputServerFont::XOutputServerFont(GfxFont *gfxFont, char *fontNameFmt,
+                                    FontEncoding *encoding,
+                                    double m11, double m12,
+                                    double m21, double m22,
+                                    double size,
+                                    double ntm11, double ntm12,
+                                    double ntm21, double ntm22,
+                                    Display *display,
+                                    XOutputFontCache *cache):
+  XOutputFont(gfxFont, m11, m12, m21, m22, display, cache)
+{
+  char fontName[200], fontSize[100];
+  GBool rotated;
+  int startSize, sz;
+  int code, code2;
+  char *charName;
+  int n;
+
+  xFont = NULL;
+
+  // Construct forward and reverse map.
+  // This tries to deal with font subset character names of the
+  // form 'Bxx', 'Cxx', 'Gxx', with decimal or hex numbering.
+  if (!gfxFont->is16Bit()) {
     for (code = 0; code < 256; ++code)
       revMap[code] = 0;
     if (encoding) {
-      for (code = 0; code < 256; ++code) {
-       if ((charName = gfxFont->getCharName(code))) {
-         if ((charName[0] == 'B' || charName[0] == 'C' ||
-              charName[0] == 'G') &&
-             strlen(charName) == 3 &&
-             ((charName[1] >= 'a' && charName[1] <= 'f') ||
-              (charName[1] >= 'A' && charName[1] <= 'F') ||
-              (charName[2] >= 'a' && charName[2] <= 'f') ||
-              (charName[2] >= 'A' && charName[2] <= 'F'))) {
-           hex = gTrue;
-           break;
-         }
-       }
-      }
       for (code = 0; code < 256; ++code) {
        if ((charName = gfxFont->getCharName(code))) {
          if ((code2 = encoding->getCharCode(charName)) < 0) {
@@ -465,28 +473,27 @@ XOutputFont::XOutputFont(GfxFont *gfxFont, double m11, double m12,
     }
   }
 
-  // compute size, normalize matrix
-  size = sqrt(mat21*mat21 + mat22*mat22);
-  mat11 = mat11 / size;
-  mat12 = -mat12 / size;
-  mat21 = mat21 / size;
-  mat22 = -mat22 / size;
-  startSize = (int)size;
+  // adjust transform for the X transform convention
+  ntm12 = -ntm12;
+  ntm22 = -ntm22;
 
   // try to get a rotated font?
-  rotated = !(mat11 > 0 && mat22 > 0 && fabs(mat11/mat22 - 1) < 0.2 &&
-             fabs(mat12) < 0.01 && fabs(mat21) < 0.01);
+  rotated = !(ntm11 > 0 && ntm22 > 0 &&
+             fabs(ntm11 / ntm22 - 1) < 0.2 &&
+             fabs(ntm12) < 0.01 &&
+             fabs(ntm21) < 0.01);
 
   // open X font -- if font is not found (which means the server can't
   // scale fonts), try progressively smaller and then larger sizes
   //~ This does a linear search -- it should get a list of fonts from
   //~ the server and pick the closest.
+  startSize = (int)size;
   if (rotated)
     sprintf(fontSize, "[%s%0.2f %s%0.2f %s%0.2f %s%0.2f]",
-           mat11<0 ? "~" : "", fabs(mat11 * startSize),
-           mat12<0 ? "~" : "", fabs(mat12 * startSize),
-           mat21<0 ? "~" : "", fabs(mat21 * startSize),
-           mat22<0 ? "~" : "", fabs(mat22 * startSize));
+           ntm11<0 ? "~" : "", fabs(ntm11 * size),
+           ntm12<0 ? "~" : "", fabs(ntm12 * size),
+           ntm21<0 ? "~" : "", fabs(ntm21 * size),
+           ntm22<0 ? "~" : "", fabs(ntm22 * size));
   else
     sprintf(fontSize, "%d", startSize);
   sprintf(fontName, fontNameFmt, fontSize);
@@ -515,79 +522,518 @@ XOutputFont::XOutputFont(GfxFont *gfxFont, double m11, double m12,
   }
 }
 
-XOutputFont::~XOutputFont() {
+XOutputServerFont::~XOutputServerFont() {
   if (xFont)
     XFreeFont(display, xFont);
 }
 
+GBool XOutputServerFont::isOk() {
+  return xFont != NULL;
+}
+
+void XOutputServerFont::updateGC(GC gc) {
+  XSetFont(display, gc, xFont->fid);
+}
+
+void XOutputServerFont::drawChar(GfxState *state, Pixmap pixmap, GC gc,
+                                double x, double y, int c) {
+  GfxFont *gfxFont;
+  Gushort c1;
+  char buf;
+  char *p;
+  int n, i;
+  double tx;
+
+  c1 = map[c];
+  if (c1 <= lastRegularChar) {
+    buf = (char)c1;
+    XDrawString(display, pixmap, gc, xoutRound(x), xoutRound(y), &buf, 1);
+  } else if (c1 <= lastSubstChar) {
+    buf = (char)substChars[c1 - firstSubstChar];
+    XDrawString(display, pixmap, gc, xoutRound(x), xoutRound(y), &buf, 1);
+  } else if (c1 <= lastConstrChar) {
+    gfxFont = state->getFont();
+    //~ need to deal with rotated text here
+    switch (c1 - firstConstrChar) {
+    case 0: // bullet
+      tx = 0.25 * state->getTransformedFontSize() * gfxFont->getWidth(c);
+      XFillRectangle(display, pixmap, gc,
+                    xoutRound(x + tx),
+                    xoutRound(y - 0.4 * xFont->ascent - tx),
+                    xoutRound(2 * tx), xoutRound(2 * tx));
+      break;
+    case 1: // trademark
+//~ this should use a smaller font
+//      tx = state->getTransformedFontSize() *
+//           (gfxFont->getWidth(c) -
+//            gfxFont->getWidth(font->revMap['M']));
+      tx = 0.9 * state->getTransformedFontSize() *
+           gfxFont->getWidth(revMap['T']);
+      y -= 0.33 * (double)xFont->ascent;
+      buf = 'T';
+      XDrawString(display, pixmap, gc,
+                 xoutRound(x), xoutRound(y), &buf, 1);
+      x += tx;
+      buf = 'M';
+      XDrawString(display, pixmap, gc,
+                 xoutRound(x), xoutRound(y), &buf, 1);
+      break;
+    }
+  } else if (c1 <= lastMultiChar) {
+    gfxFont = state->getFont();
+    p = multiChars[c1 - firstMultiChar];
+    n = strlen(p);
+    tx = gfxFont->getWidth(c);
+    tx -= gfxFont->getWidth(revMap[p[n-1]]);
+    tx = tx * state->getTransformedFontSize() / (double)(n - 1);
+    for (i = 0; i < n; ++i) {
+      XDrawString(display, pixmap, gc,
+                 xoutRound(x), xoutRound(y), p + i, 1);
+      x += tx;
+    }
+  }
+}
+
 //------------------------------------------------------------------------
 // XOutputFontCache
 //------------------------------------------------------------------------
 
-XOutputFontCache::XOutputFontCache(Display *display1) {
+XOutputFontCache::XOutputFontCache(Display *display) {
+  this->display = display;
+#if HAVE_T1LIB_H
+  t1Init = gFalse;
+  if (t1libControl) {
+    useT1lib = t1libControl->cmp("none") != 0;
+    t1libAA = t1libControl->cmp("plain") != 0;
+    t1libAAHigh = t1libControl->cmp("high") == 0;
+  } else {
+    useT1lib = gFalse;
+    t1libAA = gFalse;
+    t1libAAHigh = gFalse;
+  }
+#endif
+  clear();
+}
+
+XOutputFontCache::~XOutputFontCache() {
+  delFonts();
+}
+
+void XOutputFontCache::startDoc(int screenNum, Guint depth,
+                               Colormap colormap) {
+  delFonts();
+  clear();
+
+#if HAVE_T1LIB_H
+  if (useT1lib) {
+    if (T1_InitLib(NO_LOGFILE | IGNORE_CONFIGFILE | IGNORE_FONTDATABASE |
+                  T1_NO_AFM)) {
+      if (t1libAA) {
+       T1_AASetLevel(t1libAAHigh ? T1_AA_HIGH : T1_AA_LOW);
+       if (depth <= 8)
+         T1_AASetBitsPerPixel(8);
+       else if (depth <= 16)
+         T1_AASetBitsPerPixel(16);
+       else
+         T1_AASetBitsPerPixel(32);
+      }
+      T1_SetX11Params(display, DefaultVisual(display, screenNum),
+                     depth, colormap);
+      t1Init = gTrue;
+    } else {
+      useT1lib = gFalse;
+    }
+  }
+#endif // HAVE_T1LIB_H
+}
+
+void XOutputFontCache::delFonts() {
   int i;
 
-  display = display1;
-  for (i = 0; i < fontCacheSize; ++i)
-    fonts[i] = NULL;
-  numFonts = 0;
+#if HAVE_T1LIB_H
+  // delete Type 1 fonts
+  for (i = 0; i < nT1Fonts; ++i)
+    delete t1Fonts[i];
+  for (i = 0; i < t1BaseFontsSize && t1BaseFonts[i].num >= 0; ++i) {
+    T1_DeleteFont(t1BaseFonts[i].t1ID);
+    gfree(t1BaseFonts[i].encStr);
+    gfree(t1BaseFonts[i].enc);
+  }
+  gfree(t1BaseFonts);
+  if (t1Init) {
+    T1_CloseLib();
+  }
+#endif
+
+  // delete server fonts
+  for (i = 0; i < nServerFonts; ++i)
+    delete serverFonts[i];
 }
 
-XOutputFontCache::~XOutputFontCache() {
+void XOutputFontCache::clear() {
   int i;
 
-  for (i = 0; i < numFonts; ++i)
-    delete fonts[i];
+#if HAVE_T1LIB_H
+  // clear Type 1 font cache
+  for (i = 0; i < t1FontCacheSize; ++i)
+    t1Fonts[i] = NULL;
+  nT1Fonts = 0;
+  t1BaseFonts = NULL;
+  t1BaseFontsSize = 0;
+#endif
+
+  // clear server font cache
+  for (i = 0; i < serverFontCacheSize; ++i)
+    serverFonts[i] = NULL;
+  nServerFonts = 0;
 }
 
 XOutputFont *XOutputFontCache::getFont(GfxFont *gfxFont,
                                       double m11, double m12,
                                       double m21, double m22) {
-  XOutputFont *font;
+#if HAVE_T1LIB_H
+  XOutputT1Font *t1Font;
+#endif
+  XOutputServerFont *serverFont;
+  FontMapEntry *fme;
+  GString *t1FontName;
+  char *xFontName;
+  FontEncoding *xEncoding;
+  double size;
+  double ntm11, ntm12, ntm21, ntm22;
+  double w1, w2, v;
+  double *fm;
+  int index;
+  int code;
   int i, j;
 
-  // is it the most recently used font?
-  if (numFonts > 0 && fonts[0]->matches(gfxFont->getID(),
-                                       m11, m12, m21, m22))
-    return fonts[0];
+  // is it the most recently used Type 1 or server font?
+#if HAVE_T1LIB_H
+  if (useT1lib && nT1Fonts > 0 &&
+      t1Fonts[0]->matches(gfxFont->getID(), m11, m12, m21, m22)) {
+    return t1Fonts[0];
+  }
+#endif
+  if (nServerFonts > 0 && serverFonts[0]->matches(gfxFont->getID(),
+                                                 m11, m12, m21, m22))
+    return serverFonts[0];
+
+#if HAVE_T1LIB_H
+  // is it in the Type 1 cache?
+  if (useT1lib) {
+    for (i = 1; i < nT1Fonts; ++i) {
+      if (t1Fonts[i]->matches(gfxFont->getID(), m11, m12, m21, m22)) {
+       t1Font = t1Fonts[i];
+       for (j = i; j > 0; --j)
+         t1Fonts[j] = t1Fonts[j-1];
+       t1Fonts[0] = t1Font;
+       return t1Font;
+      }
+    }
+  }
+#endif
 
-  // is it in the cache?
-  for (i = 1; i < numFonts; ++i) {
-    if (fonts[i]->matches(gfxFont->getID(), m11, m12, m21, m22)) {
-      font = fonts[i];
+  // is it in the server cache?
+  for (i = 1; i < nServerFonts; ++i) {
+    if (serverFonts[i]->matches(gfxFont->getID(), m11, m12, m21, m22)) {
+      serverFont = serverFonts[i];
       for (j = i; j > 0; --j)
-       fonts[j] = fonts[j-1];
-      fonts[0] = font;
-      return font;
+       serverFonts[j] = serverFonts[j-1];
+      serverFonts[0] = serverFont;
+      return serverFont;
+    }
+  }
+
+  // compute size and normalized transform matrix
+  size = sqrt(m21*m21 + m22*m22);
+  ntm11 = m11 / size;
+  ntm12 = m12 / size;
+  ntm21 = m21 / size;
+  ntm22 = m22 / size;
+
+  // search for a font map entry
+  t1FontName = NULL;
+  xFontName = NULL;
+  xEncoding = NULL;
+  if (!gfxFont->is16Bit() && gfxFont->getName()) {
+    for (fme = userFontMap; fme->pdfFont; ++fme) {
+      if (!gfxFont->getName()->cmp(fme->pdfFont)) {
+       break;
+      }
+    }
+    if (!fme->pdfFont) {
+      for (fme = fontMap; fme->pdfFont; ++fme) {
+       if (!gfxFont->getName()->cmp(fme->pdfFont)) {
+         break;
+       }
+      }
+    }
+    if (fme && fme->t1Font) {
+      t1FontName = *fme->t1Font;
+    }
+    if (fme && fme->xFont && fme->encoding) {
+      xFontName = fme->xFont;
+      xEncoding = fme->encoding;
     }
   }
 
-  // make a new font
-  font = new XOutputFont(gfxFont, m11, m12, m21, m22, display);
-  if (!font->getXFont()) {
-    delete font;
-    return NULL;
+  // no font map entry found, so substitute a font
+  if (!t1FontName && !xFontName) {
+    if (gfxFont->is16Bit()) {
+      xFontName = fontSubst[0].xFont;
+      t1FontName = NULL;
+      switch (gfxFont->getCharSet16()) {
+      case font16AdobeJapan12:
+#if JAPANESE_SUPPORT
+       xFontName = japan12Font ? japan12Font->getCString() : japan12DefFont;
+#endif
+       break;
+      }
+    } else {
+      if (gfxFont->isFixedWidth()) {
+       index = 8;
+      } else if (gfxFont->isSerif()) {
+       index = 4;
+      } else {
+       index = 0;
+      }
+      if (gfxFont->isBold())
+       index += 2;
+      if (gfxFont->isItalic())
+       index += 1;
+      xFontName = fontSubst[index].xFont;
+      t1FontName = *fontSubst[index].t1Font;
+      xEncoding = &isoLatin1Encoding;
+      // un-normalize
+      ntm11 = m11;
+      ntm12 = m12;
+      ntm21 = m21;
+      ntm22 = m22;
+      // get width of 'm' in real font and substituted font
+      if ((code = gfxFont->getCharCode("m")) >= 0)
+       w1 = gfxFont->getWidth(code);
+      else
+       w1 = 0;
+      w2 = fontSubst[index].mWidth;
+      if (gfxFont->getType() == fontType3) {
+       // This is a hack which makes it possible to substitute for some
+       // Type 3 fonts.  The problem is that it's impossible to know what
+       // the base coordinate system used in the font is without actually
+       // rendering the font.  This code tries to guess by looking at the
+       // width of the character 'm' (which breaks if the font is a
+       // subset that doesn't contain 'm').
+       if (w1 > 0 && (w1 > 1.1 * w2 || w1 < 0.9 * w2)) {
+         w1 /= w2;
+         ntm11 = m11 * w1;
+         ntm12 = m12 * w1;
+         ntm21 = m21 * w1;
+         ntm22 = m22 * w1;
+       }
+       fm = gfxFont->getFontMatrix();
+       v = (fm[0] == 0) ? 1 : (fm[3] / fm[0]);
+       ntm12 *= v;
+       ntm22 *= v;
+      } else if (!gfxFont->isSymbolic()) {
+       // if real font is substantially narrower than substituted
+       // font, reduce the font size accordingly
+       if (w1 > 0.01 && w1 < 0.9 * w2) {
+         w1 /= w2;
+         if (w1 < 0.8)
+           w1 = 0.8;
+         ntm11 = m11 * w1;
+         ntm12 = m12 * w1;
+         ntm21 = m21 * w1;
+         ntm22 = m22 * w1;
+       }
+      }
+      // renormalize
+      size = sqrt(ntm21*ntm21 + ntm22*ntm22);
+      ntm11 /= size;
+      ntm12 /= size;
+      ntm21 /= size;
+      ntm22 /= size;
+    }
   }
 
-  // insert font in cache
-  if (numFonts == fontCacheSize) {
-    --numFonts;
-    delete fonts[numFonts];
+#if HAVE_T1LIB_H
+  // try to create a new Type 1 font
+  if (useT1lib) {
+    t1Font = new XOutputT1Font(gfxFont, t1FontName,
+                              m11, m12, m21, m22,
+                              size, ntm11, ntm12, ntm21, ntm22,
+                              display, this);
+    if (t1Font->isOk()) {
+
+      // insert in cache
+      if (nT1Fonts == t1FontCacheSize) {
+       --nT1Fonts;
+       delete t1Fonts[nT1Fonts];
+      }
+      for (j = nT1Fonts; j > 0; --j)
+       t1Fonts[j] = t1Fonts[j-1];
+      t1Fonts[0] = t1Font;
+      ++nT1Fonts;
+
+      return t1Font;
+    }
+    delete t1Font;
   }
-  for (j = numFonts; j > 0; --j)
-    fonts[j] = fonts[j-1];
-  fonts[0] = font;
-  ++numFonts;
+#endif
 
-  // return it
-  return font;
+  // create a new server font
+  serverFont = new XOutputServerFont(gfxFont, xFontName, xEncoding,
+                                    m11, m12, m21, m22,
+                                    size, ntm11, ntm12, ntm21, ntm22,
+                                    display, this);
+  if (serverFont->isOk()) {
+
+    // insert in cache
+    if (nServerFonts == serverFontCacheSize) {
+      --nServerFonts;
+      delete serverFonts[nServerFonts];
+    }
+    for (j = nServerFonts; j > 0; --j)
+      serverFonts[j] = serverFonts[j-1];
+    serverFonts[0] = serverFont;
+    ++nServerFonts;
+
+    return serverFont;
+  }
+  delete serverFont;
+
+  return NULL;
+}
+
+#if HAVE_T1LIB_H
+int XOutputFontCache::getT1Font(GfxFont *gfxFont, GString *pdfBaseFont) {
+  Ref id;
+  char *fileName;
+  char tmpFileName[60];
+  FILE *f;
+  char *fontBuf;
+  int fontLen;
+  Type1CFontConverter *cvt;
+  Ref embRef;
+  Object refObj, strObj;
+  FontEncoding *enc;
+  int encStrSize;
+  char *encPtr;
+  int t1ID;
+  int c;
+  int i, j;
+
+  id = gfxFont->getID();
+
+  // check available fonts
+  t1ID = -1;
+  for (i = 0; i < t1BaseFontsSize && t1BaseFonts[i].num >= 0; ++i) {
+    if (t1BaseFonts[i].num == id.num && t1BaseFonts[i].gen == id.gen) {
+      t1ID = t1BaseFonts[i].t1ID;
+    }
+  }
+
+  // create a new base font
+  if (t1ID < 0) {
+
+    // resize t1BaseFonts if necessary
+    if (i == t1BaseFontsSize) {
+      t1BaseFonts = (XOutputT1BaseFont *)
+       grealloc(t1BaseFonts,
+                (t1BaseFontsSize + 16) * sizeof(XOutputT1BaseFont));
+      for (j = 0; j < 16; ++j) {
+       t1BaseFonts[t1BaseFontsSize + j].num = -1;
+      }
+      t1BaseFontsSize += 16;
+    }
+
+    // create the font file
+    tmpFileName[0] = '\0';
+    if (!gfxFont->is16Bit() &&
+       (gfxFont->getType() == fontType1 ||
+        gfxFont->getType() == fontType1C) &&
+       gfxFont->getEmbeddedFontID(&embRef)) {
+      tmpnam(tmpFileName);
+      if (!(f = fopen(tmpFileName, "wb"))) {
+       error(-1, "Couldn't open temporary Type 1 font file '%s'",
+             tmpFileName);
+       return -1;
+      }
+      if (gfxFont->getType() == fontType1C) {
+       fontBuf = gfxFont->readEmbFontFile(&fontLen);
+       cvt = new Type1CFontConverter(fontBuf, fontLen, f);
+       cvt->convert();
+       delete cvt;
+       gfree(fontBuf);
+      } else {
+       gfxFont->getEmbeddedFontID(&embRef);
+       refObj.initRef(embRef.num, embRef.gen);
+       refObj.fetch(&strObj);
+       refObj.free();
+       strObj.streamReset();
+       while ((c = strObj.streamGetChar()) != EOF)
+         fputc(c, f);
+      }
+      fclose(f);
+      strObj.free();
+      fileName = tmpFileName;
+    } else {
+      fileName = pdfBaseFont->getCString();
+    }
+
+    // create the t1lib font
+    if ((t1ID = T1_AddFont(fileName)) < 0) {
+      error(-1, "Couldn't create t1lib font from '%s'", fileName);
+      return -1;
+    }
+    T1_LoadFont(t1ID);
+    t1BaseFonts[i].num = id.num;
+    t1BaseFonts[i].gen = id.gen;
+    t1BaseFonts[i].t1ID = t1ID;
+
+    // remove the font file
+    if (tmpFileName[0]) {
+      unlink(tmpFileName);
+    }
+
+    // reencode it
+    enc = gfxFont->getEncoding();
+    encStrSize = 0;
+    for (j = 0; j < 256 && j < enc->getSize(); ++j) {
+      if (enc->getCharName(j)) {
+       encStrSize += strlen(enc->getCharName(j)) + 1;
+      }
+    }
+    t1BaseFonts[i].enc = (char **)gmalloc(257 * sizeof(char *));
+    encPtr = (char *)gmalloc(encStrSize * sizeof(char));
+    t1BaseFonts[i].encStr = encPtr;
+    for (j = 0; j < 256 && j < enc->getSize(); ++j) {
+      if (enc->getCharName(j)) {
+       strcpy(encPtr, enc->getCharName(j));
+       t1BaseFonts[i].enc[j] = encPtr;
+       encPtr += strlen(encPtr) + 1;
+      } else {
+       t1BaseFonts[i].enc[j] = ".notdef";
+      }
+    }
+    for (; j < 256; ++j) {
+      t1BaseFonts[i].enc[j] = ".notdef";
+    }
+    t1BaseFonts[i].enc[256] = "custom";
+    T1_ReencodeFont(t1BaseFonts[i].t1ID, t1BaseFonts[i].enc);
+  }
+
+  // copy it
+  t1ID = T1_CopyFont(t1ID);
+
+  return t1ID;
 }
+#endif
 
 //------------------------------------------------------------------------
 // XOutputDev
 //------------------------------------------------------------------------
 
-XOutputDev::XOutputDev(Display *display1, Pixmap pixmap1, Guint depth1,
+XOutputDev::XOutputDev(Display *display, Pixmap pixmap, Guint depth,
                       Colormap colormap, unsigned long paperColor) {
   XVisualInfo visualTempl;
   XVisualInfo *visualList;
@@ -600,15 +1046,16 @@ XOutputDev::XOutputDev(Display *display1, Pixmap pixmap1, Guint depth1,
   GBool ok;
 
   // get display/pixmap info
-  display = display1;
+  this->display = display;
   screenNum = DefaultScreen(display);
-  pixmap = pixmap1;
-  depth = depth1;
+  this->pixmap = pixmap;
+  this->depth = depth;
+  this->colormap = colormap;
 
   // check for TrueColor visual
   trueColor = gFalse;
   if (depth == 0) {
-    depth = DefaultDepth(display, screenNum);
+    this->depth = DefaultDepth(display, screenNum);
     visualList = XGetVisualInfo(display, 0, &visualTempl, &nVisuals);
     for (i = 0; i < nVisuals; ++i) {
       if (visualList[i].visual == DefaultVisual(display, screenNum)) {
@@ -746,6 +1193,7 @@ XOutputDev::XOutputDev(Display *display1, Pixmap pixmap1, Guint depth1,
       userFontMap[i].encoding = NULL;
     else
       userFontMap[i].encoding = &isoLatin1Encoding;
+    userFontMap[i].t1Font = NULL;
   }
   userFontMap[n].pdfFont = NULL;
 
@@ -758,7 +1206,7 @@ XOutputDev::XOutputDev(Display *display1, Pixmap pixmap1, Guint depth1,
   save = NULL;
 
   // create text object
-  text = new TextPage(gFalse);
+  text = new TextPage(useEUCJP, gFalse);
 }
 
 XOutputDev::~XOutputDev() {
@@ -772,6 +1220,10 @@ XOutputDev::~XOutputDev() {
   delete text;
 }
 
+void XOutputDev::startDoc() {
+  fontCache->startDoc(screenNum, depth, colormap);
+}
+
 void XOutputDev::startPage(int pageNum, GfxState *state) {
   XOutputState *s;
   XGCValues gcValues;
@@ -960,6 +1412,11 @@ void XOutputDev::updateLineAttrs(GfxState *state, GBool updateDash) {
     cap = CapButt;
     break;
   }
+#if 1 //~ work around a bug in XFree86 (???)
+  if (dashLength > 0 && cap == CapProjecting) {
+    cap = CapButt;
+  }
+#endif
   switch (state->getLineJoin()) {
   case 0: join = JoinMiter; break;
   case 1: join = JoinRound; break;
@@ -1005,8 +1462,8 @@ void XOutputDev::updateFont(GfxState *state) {
   m21 *= state->getHorizScaling();
   font = fontCache->getFont(gfxFont, m11, m12, m21, m22);
   if (font) {
-    XSetFont(display, fillGC, font->getXFont()->fid);
-    XSetFont(display, strokeGC, font->getXFont()->fid);
+    font->updateGC(fillGC);
+    font->updateGC(strokeGC);
   }
 }
 
@@ -1398,12 +1855,7 @@ void XOutputDev::endString(GfxState *state) {
 
 void XOutputDev::drawChar(GfxState *state, double x, double y,
                          double dx, double dy, Guchar c) {
-  Gushort c1;
-  char buf;
-  char *p;
-  int n, i;
   double x1, y1;
-  double tx;
 
   text->addChar(state, x, y, dx, dy, c);
 
@@ -1415,61 +1867,9 @@ void XOutputDev::drawChar(GfxState *state, double x, double y,
     return;
 
   state->transform(x, y, &x1, &y1);
-  c1 = font->mapChar(c);
-  if (c1 <= lastRegularChar) {
-    buf = (char)c1;
-    XDrawString(display, pixmap,
-               (state->getRender() & 1) ? strokeGC : fillGC,
-               xoutRound(x1), xoutRound(y1), &buf, 1);
-  } else if (c1 <= lastSubstChar) {
-    buf = (char)substChars[c1 - firstSubstChar];
-    XDrawString(display, pixmap,
-               (state->getRender() & 1) ? strokeGC : fillGC,
-               xoutRound(x1), xoutRound(y1), &buf, 1);
-  } else if (c1 <= lastConstrChar) {
-    //~ need to deal with rotated text here
-    switch (c1 - firstConstrChar) {
-    case 0: // bullet
-      tx = 0.25 * state->getTransformedFontSize() * 
-           gfxFont->getWidth(c);
-      XFillRectangle(display, pixmap,
-                    (state->getRender() & 1) ? strokeGC : fillGC,
-                    xoutRound(x1 + tx),
-                    xoutRound(y1 - 0.4 * font->getXFont()->ascent - tx),
-                    xoutRound(2 * tx), xoutRound(2 * tx));
-      break;
-    case 1: // trademark
-//~ this should use a smaller font
-//      tx = state->getTransformedFontSize() *
-//           (gfxFont->getWidth(c) -
-//            gfxFont->getWidth(font->revCharMap('M')));
-      tx = 0.9 * state->getTransformedFontSize() *
-           gfxFont->getWidth(font->revMapChar('T'));
-      y1 -= 0.33 * (double)font->getXFont()->ascent;
-      buf = 'T';
-      XDrawString(display, pixmap,
-                 (state->getRender() & 1) ? strokeGC : fillGC,
-                 xoutRound(x1), xoutRound(y1), &buf, 1);
-      x1 += tx;
-      buf = 'M';
-      XDrawString(display, pixmap,
-                 (state->getRender() & 1) ? strokeGC : fillGC,
-                 xoutRound(x1), xoutRound(y1), &buf, 1);
-      break;
-    }
-  } else if (c1 <= lastMultiChar) {
-    p = multiChars[c1 - firstMultiChar];
-    n = strlen(p);
-    tx = gfxFont->getWidth(c);
-    tx -= gfxFont->getWidth(font->revMapChar(p[n-1]));
-    tx = tx * state->getTransformedFontSize() / (double)(n - 1);
-    for (i = 0; i < n; ++i) {
-      XDrawString(display, pixmap,
-                 (state->getRender() & 1) ? strokeGC : fillGC,
-                 xoutRound(x1), xoutRound(y1), p + i, 1);
-      x1 += tx;
-    }
-  }
+
+  font->drawChar(state, pixmap, (state->getRender() & 1) ? strokeGC : fillGC,
+                xoutRound(x1), xoutRound(y1), c);
 }
 
 void XOutputDev::drawChar16(GfxState *state, double x, double y,
@@ -1484,6 +1884,12 @@ void XOutputDev::drawChar16(GfxState *state, double x, double y,
   int n, i;
 #endif
 
+  if (gfxFont) {
+    text->addChar16(state, x, y, dx, dy, c, gfxFont->getCharSet16());
+  }
+
+  //~ assumes font is an XOutputServerFont
+
   if (!font)
     return;
 
@@ -1491,6 +1897,12 @@ void XOutputDev::drawChar16(GfxState *state, double x, double y,
   if ((state->getRender() & 3) == 3)
     return;
 
+  // handle origin offset for vertical fonts
+  if (gfxFont->getWMode16() == 1) {
+    x -= gfxFont->getOriginX16(c) * state->getFontSize();
+    y -= gfxFont->getOriginY16(c) * state->getFontSize();
+  }
+
   state->transform(x, y, &x1, &y1);
 
   c1 = 0;
@@ -1658,6 +2070,7 @@ void XOutputDev::drawChar16(GfxState *state, double x, double y,
 void XOutputDev::drawImageMask(GfxState *state, Stream *str,
                               int width, int height, GBool invert,
                               GBool inlineImg) {
+  ImageStream *imgStr;
   XImage *image;
   int x0, y0;                  // top left corner of image
   int w0, h0, w1, h1;          // size of image
@@ -1752,7 +2165,8 @@ void XOutputDev::drawImageMask(GfxState *state, Stream *str,
               image, x2, y2);
 
   // initialize the image stream
-  str->resetImage(width, 1, 1);
+  imgStr = new ImageStream(str, width, 1, 1);
+  imgStr->reset();
 
   // first line (column)
   y = yFlip ? h1 - 1 : 0;
@@ -1770,7 +2184,7 @@ void XOutputDev::drawImageMask(GfxState *state, Stream *str,
 
     // drop a line (column)
     if (dy == 0) {
-      str->skipImageLine();
+      imgStr->skipLine();
 
     } else {
 
@@ -1789,7 +2203,7 @@ void XOutputDev::drawImageMask(GfxState *state, Stream *str,
        }
 
        // get image pixel
-       str->getImagePixel(&pixBuf);
+       imgStr->getPixel(&pixBuf);
        if (invert)
          pixBuf ^= 1;
 
@@ -1833,6 +2247,7 @@ void XOutputDev::drawImageMask(GfxState *state, Stream *str,
   XPutImage(display, pixmap, fillGC, image, x2, y2, x0, y0, w2, h2);
 
   // free memory
+  delete imgStr;
   gfree(image->data);
   image->data = NULL;
   XDestroyImage(image);
@@ -1881,6 +2296,7 @@ inline Gulong XOutputDev::findColor(RGBColor *x, RGBColor *err) {
 void XOutputDev::drawImage(GfxState *state, Stream *str, int width,
                           int height, GfxImageColorMap *colorMap,
                           GBool inlineImg) {
+  ImageStream *imgStr;
   XImage *image;
   int x0, y0;                  // top left corner of image
   int w0, h0, w1, h1;          // size of image
@@ -1969,7 +2385,8 @@ void XOutputDev::drawImage(GfxState *state, Stream *str, int width,
   }
 
   // initialize the image stream
-  str->resetImage(width, nComps, nBits);
+  imgStr = new ImageStream(str, width, nComps, nBits);
+  imgStr->reset();
 
   // first line (column)
   y = yFlip ? h1 - 1 : 0;
@@ -1987,7 +2404,7 @@ void XOutputDev::drawImage(GfxState *state, Stream *str, int width,
 
     // drop a line (column)
     if (dy == 0) {
-      str->skipImageLine();
+      imgStr->skipLine();
 
     } else {
 
@@ -2012,7 +2429,7 @@ void XOutputDev::drawImage(GfxState *state, Stream *str, int width,
        }
 
        // get image pixel
-       str->getImagePixel(pixBuf);
+       imgStr->getPixel(pixBuf);
 
        // draw image pixel
        if (dx > 0) {
@@ -2114,6 +2531,7 @@ void XOutputDev::drawImage(GfxState *state, Stream *str, int width,
   XPutImage(display, pixmap, fillGC, image, 0, 0, x0, y0, w0, h0);
 
   // free memory
+  delete imgStr;
   gfree(image->data);
   image->data = NULL;
   XDestroyImage(image);
index 48454212e2f95a48a0d66695c3d524b75f42344c..c0bcfd20d118e90661e636dc178f4247a5980cce 100644 (file)
 #include <stddef.h>
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
+#if HAVE_T1LIB_H
+#include <t1lib.h>
+#include <t1libx.h>
+#endif
 #include "config.h"
 #include "OutputDev.h"
 
@@ -25,6 +29,8 @@ class GfxFont;
 class GfxSubpath;
 class TextPage;
 struct RGBColor;
+class FontEncoding;
+class XOutputFontCache;
 
 //------------------------------------------------------------------------
 // Constants
@@ -59,6 +65,40 @@ extern GBool installCmap;
 // Size of RGB color cube.
 extern int rgbCubeSize;
 
+#if HAVE_T1LIB_H
+// Type of t1lib font rendering to use:
+//     "none"   -- don't use t1lib
+//     "plain"  -- t1lib, without anti-aliasing
+//     "low"    -- t1lib, with low-level anti-aliasing
+//     "high"   -- t1lib, with high-level anti-aliasing
+extern GString *t1libControl;
+#endif
+
+// If any of these are set, xpdf will use t1lib to render those font(s)
+// instead of using the X server font(s).
+extern GString *t1Courier;
+extern GString *t1CourierBold;
+extern GString *t1CourierBoldOblique;
+extern GString *t1CourierOblique;
+extern GString *t1Helvetica;
+extern GString *t1HelveticaBold;
+extern GString *t1HelveticaBoldOblique;
+extern GString *t1HelveticaOblique;
+extern GString *t1Symbol;
+extern GString *t1TimesBold;
+extern GString *t1TimesBoldItalic;
+extern GString *t1TimesItalic;
+extern GString *t1TimesRoman;
+extern GString *t1ZapfDingbats;
+
+// Use the EUC-JP encoding.
+extern GBool useEUCJP;
+
+#if JAPANESE_SUPPORT
+// X font name pattern to use for Japanese text.
+extern GString *japan12Font;
+#endif
+
 //------------------------------------------------------------------------
 // XOutputFont
 //------------------------------------------------------------------------
@@ -66,64 +106,168 @@ extern int rgbCubeSize;
 class XOutputFont {
 public:
 
-  // Constructor.
   XOutputFont(GfxFont *gfxFont, double m11, double m12,
-             double m21, double m22, Display *display1);
+             double m21, double m22, Display *display,
+             XOutputFontCache *cache);
 
-  // Destructor.
-  ~XOutputFont();
+  virtual ~XOutputFont();
 
-  // Does this font match the ID, size, and angle?
+  // Does this font match the ID and transform?
   GBool matches(Ref id1, double m11, double m12, double m21, double m22)
     { return id.num == id1.num && id.gen == id1.gen &&
-            mat11 == m11 && mat12 == m12 && mat21 == m21 && mat22 == m22; }
+            m11 == tm11 && m12 == tm12 && m21 == tm21 && m22 == tm22; }
 
-  // Get X font.
-  XFontStruct *getXFont() { return xFont; }
+  // Was font created successfully?
+  virtual GBool isOk() = 0;
 
-  // Get character mapping.
-  Gushort mapChar(Guchar c) { return map[c]; }
+  // Update <gc> with this font.
+  virtual void updateGC(GC gc) = 0;
 
-  // Reverse map a character.
-  Guchar revMapChar(Gushort c) { return revMap[c]; }
+  // Draw character <c> at <x>,<y>.
+  virtual void drawChar(GfxState *state, Pixmap pixmap, GC gc,
+                       double x, double y, int c) = 0;
 
   // Does this font use hex char codes?
   GBool isHex() { return hex; }
 
-private:
+protected:
 
-  Ref id;
-  double mat11, mat12, mat21, mat22;
-  Display *display;
-  XFontStruct *xFont;
+  Ref id;                      // font ID
+  double tm11, tm12,           // original transform matrix
+         tm21, tm22;
+  Display *display;            // X display
   GBool hex;                   // subsetted font with hex char codes
-  Gushort map[256];
-  Guchar revMap[256];
+                               //   (this flag is used for text output)
+};
+
+#if HAVE_T1LIB_H
+//------------------------------------------------------------------------
+// XOutputT1Font
+//------------------------------------------------------------------------
+
+class XOutputT1Font: public XOutputFont {
+public:
+
+  XOutputT1Font(GfxFont *gfxFont, GString *pdfBaseFont,
+               double m11, double m12, double m21, double m22,
+               double size, double ntm11, double ntm12,
+               double ntm21, double ntm22,
+               Display *display, XOutputFontCache *cache);
+
+  virtual ~XOutputT1Font();
+
+  // Was font created successfully?
+  virtual GBool isOk();
+
+  // Update <gc> with this font.
+  virtual void updateGC(GC gc);
+
+  // Draw character <c> at <x>,<y>.
+  virtual void drawChar(GfxState *state, Pixmap pixmap, GC gc,
+                       double x, double y, int c);
+
+private:
+
+  float size;                  // font size
+  int t1ID;                    // t1lib font ID
+  GBool t1libAA;               // true for anti-aliased fonts
+};
+#endif
+
+//------------------------------------------------------------------------
+// XOutputServerFont
+//------------------------------------------------------------------------
+
+class XOutputServerFont: public XOutputFont {
+public:
+
+  XOutputServerFont(GfxFont *gfxFont, char *fontNameFmt,
+                   FontEncoding *encoding,
+                   double m11, double m12, double m21, double m22,
+                   double size, double ntm11, double ntm12,
+                   double ntm21, double ntm22,
+                   Display *display, XOutputFontCache *cache);
+
+  virtual ~XOutputServerFont();
+
+  // Was font created successfully?
+  virtual GBool isOk();
+
+  // Update <gc> with this font.
+  virtual void updateGC(GC gc);
+
+  // Draw character <c> at <x>,<y>.
+  virtual void drawChar(GfxState *state, Pixmap pixmap, GC gc,
+                       double x, double y, int c);
+
+private:
+
+  XFontStruct *xFont;          // the X font
+  Gushort map[256];            // forward map (PDF code -> font code)
+  Guchar revMap[256];          // reverese map (font code -> PDF code)
 };
 
 //------------------------------------------------------------------------
 // XOutputFontCache
 //------------------------------------------------------------------------
 
+#if HAVE_T1LIB_H
+struct XOutputT1BaseFont {
+  int num, gen;
+  int t1ID;
+  char **enc;
+  char *encStr;
+};
+#endif
+
 class XOutputFontCache {
 public:
 
   // Constructor.
-  XOutputFontCache(Display *display1);
+  XOutputFontCache(Display *display);
 
   // Destructor.
   ~XOutputFontCache();
 
+  // Initialize (or re-initialize) the font cache for a new document.
+  void startDoc(int screenNum, Guint depth,
+               Colormap colormap);
+
   // Get a font.  This creates a new font if necessary.
   XOutputFont *getFont(GfxFont *gfxFont, double m11, double m12,
                       double m21, double m22);
 
+#if HAVE_T1LIB_H
+  // Get a t1lib font.
+  int getT1Font(GfxFont *gfxFont, GString *pdfBaseFont);
+
+  // Use anti-aliased Type 1 fonts?
+  GBool getT1libAA() { return t1libAA; }
+#endif
+
 private:
 
+  void delFonts();
+  void clear();
+
   Display *display;            // X display pointer
-  XOutputFont *                        // fonts in reverse-LRU order
-    fonts[fontCacheSize];
-  int numFonts;                        // number of valid entries
+
+#if HAVE_T1LIB_H
+  GBool useT1lib;              // if false, t1lib is not used at all
+  GBool t1libAA;               // true for anti-aliased fonts
+  GBool t1libAAHigh;           // low or high-level anti-aliasing
+  GBool t1Init;                        // set when t1lib has been initialized
+  XOutputT1Font *              // Type 1 fonts in reverse-LRU order
+    t1Fonts[t1FontCacheSize];
+  int nT1Fonts;                        // number of valid entries in t1Fonts[]
+  XOutputT1BaseFont *          // list of t1lib base fonts
+    t1BaseFonts;
+  int t1BaseFontsSize;         // size of t1BaseFonts array
+#endif
+
+  XOutputServerFont *          // X server fonts in reverse-LRU order
+    serverFonts[serverFontCacheSize];
+  int nServerFonts;            // number of valid entries in serverFonts[]
 };
 
 //------------------------------------------------------------------------
@@ -219,6 +363,9 @@ public:
 
   //----- special access
 
+  // Called to indicate that a new PDF document has been loaded.
+  void startDoc();
+
   // Find a string.  If <top> is true, starts looking at <xMin>,<yMin>;
   // otherwise starts looking at top of page.  If <bottom> is true,
   // stops looking at <xMax>,<yMax>; otherwise stops looking at bottom
@@ -243,6 +390,7 @@ private:
   Pixmap pixmap;               // pixmap to draw into
   int pixmapW, pixmapH;                // size of pixmap
   Guint depth;                 // pixmap depth
+  Colormap colormap;           // X colormap
   int flatness;                        // line flatness
   GC paperGC;                  // GC for background
   GC strokeGC;                 // GC with stroke color
index 0c54be3b1170f9b5e04b76c26079082449ede944..c33453a0e60aa39c9e2edd6b8848ac4575f95369 100644 (file)
@@ -15,7 +15,7 @@
 // Character encodings.
 //------------------------------------------------------------------------
 
-#define isoLatin1EncodingSize 294
+#define isoLatin1EncodingSize 297
 static char *isoLatin1EncodingNames[isoLatin1EncodingSize] = {
   NULL,
   NULL,
@@ -282,6 +282,9 @@ static char *isoLatin1EncodingNames[isoLatin1EncodingSize] = {
   "trademark",
   "fi",
   "fl",
+  "ff",
+  "ffi",
+  "ffl",
   "OE",
   "oe",
   "ellipsis",
@@ -312,10 +315,10 @@ static char *isoLatin1EncodingNames[isoLatin1EncodingSize] = {
   "tilde",
   "zcaron"
 };
-static GfxFontEncoding isoLatin1Encoding(isoLatin1EncodingNames,
-                                         isoLatin1EncodingSize);
+static FontEncoding isoLatin1Encoding(isoLatin1EncodingNames,
+                                      isoLatin1EncodingSize);
 
-#define isoLatin2EncodingSize 294
+#define isoLatin2EncodingSize 297
 static char *isoLatin2EncodingNames[isoLatin2EncodingSize] = {
   NULL,
   NULL,
@@ -508,7 +511,7 @@ static char *isoLatin2EncodingNames[isoLatin2EncodingSize] = {
   "zacute",
   "hungarumlaut",
   "zcaron",
-  "zdotaccent",
+  "zdotaccenp",
   "Racute",
   "Aacute",
   "Acircumflex",
@@ -582,6 +585,9 @@ static char *isoLatin2EncodingNames[isoLatin2EncodingSize] = {
   "trademark",
   "fi",
   "fl",
+  "ff",
+  "ffi",
+  "ffl",
   "OE",
   "oe",
   "ellipsis",
@@ -612,8 +618,8 @@ static char *isoLatin2EncodingNames[isoLatin2EncodingSize] = {
   "tilde",
   NULL
 };
-static GfxFontEncoding isoLatin2Encoding(isoLatin2EncodingNames,
-                                         isoLatin2EncodingSize);
+static FontEncoding isoLatin2Encoding(isoLatin2EncodingNames,
+                                      isoLatin2EncodingSize);
 
 #define symbolEncodingSize 256
 static char *symbolEncodingNames[symbolEncodingSize] = {
@@ -874,8 +880,8 @@ static char *symbolEncodingNames[symbolEncodingSize] = {
   "bracerightbt",
   NULL
 };
-static GfxFontEncoding symbolEncoding(symbolEncodingNames,
-                                      symbolEncodingSize);
+static FontEncoding symbolEncoding(symbolEncodingNames,
+                                   symbolEncodingSize);
 
 #define zapfDingbatsEncodingSize 256
 static char *zapfDingbatsEncodingNames[zapfDingbatsEncodingSize] = {
@@ -1136,7 +1142,7 @@ static char *zapfDingbatsEncodingNames[zapfDingbatsEncodingSize] = {
   "a191",
   NULL
 };
-static GfxFontEncoding zapfDingbatsEncoding(zapfDingbatsEncodingNames,
-                                            zapfDingbatsEncodingSize);
+static FontEncoding zapfDingbatsEncoding(zapfDingbatsEncodingNames,
+                                         zapfDingbatsEncodingSize);
 
 #endif
index 24a4672dc734436aab4e6c87defe7c502e020e2b..80810db16fe82fe73300adb39296022eb0f6c1f9 100644 (file)
@@ -14,10 +14,11 @@ GOOLIBDIR = ../goo
 LTKSRCDIR = $(srcdir)/../ltk\r
 LTKLIBDIR = ../ltk\r
 \r
-CXXFLAGS = -O2  -DHAVE_DIRENT_H=1 -DNO_POPEN -DUSE_GZIP=1   -I$(GOOSRCDIR) -I$(srcdir)\r
+CXXFLAGS = -O2  -DHAVE_DIRENT_H=1 -DJAPANESE_SUPPORT -DNO_POPEN -DUSE_GZIP=1   -I$(GOOSRCDIR) -I$(srcdir)\r
 \r
+XLIBS = -lXpm    -lSM -lICE  -L/usr/X11R6/lib -lX11 \r
 \r
-XLIBS = -lXpm  -lSM -lICE  -L/usr/X11R6/lib -lX11  \r
+OTHERLIBS = \r
 \r
 CXX = gcc\r
 STRIP = strip\r
@@ -39,6 +40,8 @@ CXX_SRC = \
        $(srcdir)/Catalog.cc \\r
        $(srcdir)/Dict.cc \\r
        $(srcdir)/Error.cc \\r
+       $(srcdir)/FontEncoding.cc \\r
+       $(srcdir)/FontFile.cc \\r
        $(srcdir)/Gfx.cc \\r
        $(srcdir)/GfxFont.cc \\r
        $(srcdir)/GfxState.cc \\r
@@ -70,102 +73,209 @@ CXX_SRC = \
 all: xpdf$(EXE) pdftops$(EXE) pdftotext$(EXE) pdfinfo$(EXE) \\r
        pdftopbm$(EXE) pdfimages$(EXE)\r
 \r
+all-no-x: pdftops$(EXE) pdftotext$(EXE) pdfinfo$(EXE) \\r
+       pdfimages$(EXE)\r
+\r
 #------------------------------------------------------------------------\r
 \r
-XPDF_OBJS = Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \\r
-       GfxState.o Lexer.o Link.o LTKOutputDev.o Object.o OutputDev.o \\r
-       Page.o Params.o Parser.o PDFDoc.o PSOutputDev.o Stream.o \\r
-       TextOutputDev.o XOutputDev.o XRef.o xpdf.o\r
-XPDF_LIBS = -L$(LTKLIBDIR) -lLTK -L$(GOOLIBDIR) -lGoo $(XLIBS) -lm\r
+XPDF_OBJS = Array.o Catalog.o Dict.o Error.o FontEncoding.o \\r
+       FontFile.o Gfx.o GfxFont.o GfxState.o Lexer.o Link.o \\r
+       LTKOutputDev.o Object.o OutputDev.o Page.o Params.o \\r
+       Parser.o PDFDoc.o PSOutputDev.o Stream.o TextOutputDev.o \\r
+       XOutputDev.o XRef.o xpdf.o\r
+XPDF_LIBS = -L$(LTKLIBDIR) -lLTK -L$(GOOLIBDIR) -lGoo $(XLIBS) $(OTHERLIBS) -lm\r
 \r
-xpdf$(EXE): $(XPDF_OBJS)\r
+xpdf$(EXE): $(XPDF_OBJS) \\r
+           $(GOOLIBDIR)/$(LIBPREFIX)Goo.a $(LTKLIBDIR)/$(LIBPREFIX)LTK.a\r
        $(CXX) $(CXXFLAGS) -o xpdf$(EXE) $(XPDF_OBJS) $(XPDF_LIBS)\r
-       $(STRIP) xpdf$(EXE).exe\r
+       $(STRIP) xpdf$(EXE)\r
 \r
 xpdf-ltk.h: xpdf.ltk\r
-       del $@\r
+#      rm -f $@\r
        $(LTKLIBDIR)/ltkbuild <xpdf.ltk >$@.new\r
        mv $@.new $@\r
 \r
 #------------------------------------------------------------------------\r
 \r
-PDFTOPS_OBJS = Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \\r
-       GfxState.o Lexer.o Link.o Object.o OutputDev.o Page.o Params.o \\r
-       Parser.o PDFDoc.o PSOutputDev.o Stream.o XRef.o pdftops.o\r
-PDFTOPS_LIBS = -L$(GOOLIBDIR) -lGoo -lm\r
+PDFTOPS_OBJS = Array.o Catalog.o Dict.o Error.o FontEncoding.o \\r
+       FontFile.o Gfx.o GfxFont.o GfxState.o Lexer.o Link.o \\r
+       Object.o OutputDev.o Page.o Params.o Parser.o PDFDoc.o \\r
+       PSOutputDev.o Stream.o XRef.o pdftops.o\r
+PDFTOPS_LIBS = -L$(GOOLIBDIR) -lGoo $(OTHERLIBS) -lm\r
 \r
-pdftops$(EXE): $(PDFTOPS_OBJS)\r
+pdftops$(EXE): $(PDFTOPS_OBJS) $(GOOLIBDIR)/$(LIBPREFIX)Goo.a\r
        $(CXX) $(CXXFLAGS) -o pdftops$(EXE) $(PDFTOPS_OBJS) $(PDFTOPS_LIBS)\r
-       $(STRIP) pdftops$(EXE).exe\r
+       $(STRIP) pdftops$(EXE)\r
 \r
 #------------------------------------------------------------------------\r
 \r
-PDFTOTEXT_OBJS = Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \\r
-       GfxState.o Lexer.o Link.o Object.o OutputDev.o Page.o Params.o \\r
-       Parser.o PDFDoc.o TextOutputDev.o Stream.o XRef.o pdftotext.o\r
-PDFTOTEXT_LIBS = -L$(GOOLIBDIR) -lGoo -lm\r
+PDFTOTEXT_OBJS = Array.o Catalog.o Dict.o Error.o FontEncoding.o \\r
+       FontFile.o Gfx.o GfxFont.o GfxState.o Lexer.o Link.o \\r
+       Object.o OutputDev.o Page.o Params.o Parser.o PDFDoc.o \\r
+       TextOutputDev.o Stream.o XRef.o pdftotext.o\r
+PDFTOTEXT_LIBS = -L$(GOOLIBDIR) -lGoo $(OTHERLIBS) -lm\r
 \r
-pdftotext$(EXE): $(PDFTOTEXT_OBJS)\r
+pdftotext$(EXE): $(PDFTOTEXT_OBJS) $(GOOLIBDIR)/$(LIBPREFIX)Goo.a\r
        $(CXX) $(CXXFLAGS) -o pdftotext$(EXE) $(PDFTOTEXT_OBJS) \\r
                $(PDFTOTEXT_LIBS)\r
-       $(STRIP) pdftotext$(EXE).exe\r
+       $(STRIP) pdftotext$(EXE)\r
 \r
 #------------------------------------------------------------------------\r
 \r
-PDFINFO_OBJS = Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \\r
-       GfxState.o Lexer.o Link.o Object.o Page.o Params.o \\r
-       Parser.o PDFDoc.o Stream.o XRef.o pdfinfo.o\r
-PDFINFO_LIBS = -L$(GOOLIBDIR) -lGoo -lm\r
+PDFINFO_OBJS = Array.o Catalog.o Dict.o Error.o FontEncoding.o \\r
+       FontFile.o Gfx.o GfxFont.o GfxState.o Lexer.o Link.o \\r
+       Object.o OutputDev.o Page.o Params.o Parser.o PDFDoc.o \\r
+       Stream.o XRef.o pdfinfo.o\r
+PDFINFO_LIBS = -L$(GOOLIBDIR) -lGoo $(OTHERLIBS) -lm\r
 \r
-pdfinfo$(EXE): $(PDFINFO_OBJS)\r
+pdfinfo$(EXE): $(PDFINFO_OBJS) $(GOOLIBDIR)/$(LIBPREFIX)Goo.a\r
        $(CXX) $(CXXFLAGS) -o pdfinfo$(EXE) $(PDFINFO_OBJS) $(PDFINFO_LIBS)\r
-       $(STRIP) pdfinfo$(EXE).exe\r
+       $(STRIP) pdfinfo$(EXE)\r
 \r
 #------------------------------------------------------------------------\r
 \r
-PDFTOPBM_OBJS = Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \\r
-       GfxState.o Lexer.o Link.o Object.o OutputDev.o PBMOutputDev.o \\r
-       Page.o Params.o Parser.o PDFDoc.o Stream.o TextOutputDev.o \\r
-       XOutputDev.o XRef.o pdftopbm.o\r
-PDFTOPBM_LIBS = -L$(GOOLIBDIR) -lGoo $(XLIBS) -lm\r
+PDFTOPBM_OBJS = Array.o Catalog.o Dict.o Error.o FontEncoding.o \\r
+       FontFile.o Gfx.o GfxFont.o GfxState.o Lexer.o Link.o \\r
+       Object.o OutputDev.o PBMOutputDev.o Page.o Params.o \\r
+       Parser.o PDFDoc.o Stream.o TextOutputDev.o XOutputDev.o \\r
+       XRef.o pdftopbm.o\r
+PDFTOPBM_LIBS = -L$(GOOLIBDIR) -lGoo $(XLIBS) $(OTHERLIBS) -lm\r
 \r
-pdftopbm$(EXE): $(PDFTOPBM_OBJS)\r
+pdftopbm$(EXE): $(PDFTOPBM_OBJS) $(GOOLIBDIR)/$(LIBPREFIX)Goo.a\r
        $(CXX) $(CXXFLAGS) -o pdftopbm$(EXE) $(PDFTOPBM_OBJS) $(PDFTOPBM_LIBS)\r
-       $(STRIP) pdftopbm$(EXE).exe\r
+       $(STRIP) pdftopbm$(EXE)\r
 \r
 #------------------------------------------------------------------------\r
 \r
-PDFIMAGES_OBJS = Array.o Catalog.o Dict.o Error.o Gfx.o GfxFont.o \\r
-       GfxState.o ImageOutputDev.o Lexer.o Link.o Object.o OutputDev.o \\r
-       Page.o Params.o Parser.o PDFDoc.o Stream.o XRef.o pdfimages.o\r
-PDFIMAGES_LIBS = -L$(GOOLIBDIR) -lGoo -lm\r
+PDFIMAGES_OBJS = Array.o Catalog.o Dict.o Error.o FontEncoding.o \\r
+       FontFile.o Gfx.o GfxFont.o GfxState.o ImageOutputDev.o \\r
+       Lexer.o Link.o Object.o OutputDev.o Page.o Params.o \\r
+       Parser.o PDFDoc.o Stream.o XRef.o pdfimages.o\r
+PDFIMAGES_LIBS = -L$(GOOLIBDIR) -lGoo $(OTHERLIBS) -lm\r
 \r
-pdfimages$(EXE): $(PDFIMAGES_OBJS)\r
+pdfimages$(EXE): $(PDFIMAGES_OBJS) $(GOOLIBDIR)/$(LIBPREFIX)Goo.a\r
        $(CXX) $(CXXFLAGS) -o pdfimages$(EXE) $(PDFIMAGES_OBJS) \\r
                $(PDFIMAGES_LIBS)\r
-       $(STRIP) pdfimages$(EXE).exe\r
+       $(STRIP) pdfimages$(EXE)\r
 \r
 #------------------------------------------------------------------------\r
 \r
 clean:\r
-       del *.o\r
-       del xpdf$(EXE)\r
-       del xpdf$(EXE).exe\r
-       del pdftops$(EXE)\r
-       del pdftops$(EXE).exe\r
-       del pdftotext$(EXE)\r
-       del pdftotext$(EXE).exe\r
-       del pdfinfo$(EXE)\r
-       del pdfinfo$(EXE).exe\r
-       del pdftopbm$(EXE)\r
-       del pdftopbm$(EXE).exe\r
-       del pdfimages$(EXE)\r
-       del pdfimages$(EXE).exe\r
-#      rm -f Makefile.bak\r
+#      rm -f $(XPDF_OBJS) xpdf-ltk.h.new xpdf$(EXE)\r
+#      rm -f $(PDFTOPS_OBJS) pdftops$(EXE)\r
+#      rm -f $(PDFTOTEXT_OBJS) pdftotext$(EXE)\r
+#      rm -f $(PDFINFO_OBJS) pdfinfo$(EXE)\r
+#      rm -f $(PDFTOPBM_OBJS) pdftopbm$(EXE)\r
+#      rm -f $(PDFIMAGES_OBJS) pdfimages$(EXE)\r
 \r
 #------------------------------------------------------------------------\r
 \r
-depend:\r
-       $(CXX) $(CXXFLAGS) -M $(CXX_SRC) >Makefile.dep\r
-\r
-#include Makefile.dep\r
+distdepend:\r
+       cp Makefile.in Makefile.in.bak\r
+       sed '/^#----- dependences -----/q' Makefile.in.bak >Makefile.in\r
+       $(CXX) $(CXXFLAGS) -MM $(CXX_SRC) >>Makefile.in\r
+\r
+#----- dependences -----\r
+Array.o: ./Array.cc ../goo/gmem.h Object.h ../goo/gtypes.h X\r
+ ../goo/GString.h Array.h Dict.h Stream.h\r
+Catalog.o: ./Catalog.cc ../goo/gmem.h Object.h ../goo/gtypes.h \\r
+ ../goo/GString.h Array.h Dict.h Stream.h Page.h Error.h config.h \\r
+ Link.h Catalog.h\r
+Dict.o: ./Dict.cc ../goo/gmem.h Object.h ../goo/gtypes.h \\r
+ ../goo/GString.h Array.h Dict.h Stream.h XRef.h\r
+Error.o: ./Error.cc ../goo/gtypes.h Params.h Error.h config.h\r
+FontEncoding.o: ./FontEncoding.cc ../goo/gmem.h FontEncoding.h \\r
+ ../goo/gtypes.h\r
+FontFile.o: ./FontFile.cc ../goo/gmem.h Error.h config.h FontFile.h \\r
+ ../goo/gtypes.h ../goo/GString.h FontEncoding.h StdFontInfo.h \\r
+ CompactFontInfo.h\r
+Gfx.o: ./Gfx.cc ../goo/gmem.h Object.h ../goo/gtypes.h \\r
+ ../goo/GString.h Array.h Dict.h Stream.h Lexer.h Parser.h GfxFont.h \\r
+ FontEncoding.h GfxState.h OutputDev.h Params.h Error.h config.h Gfx.h\r
+GfxFont.o: ./GfxFont.cc ../goo/GString.h ../goo/gmem.h ../goo/gfile.h \\r
+ ../goo/gtypes.h config.h Object.h Array.h Dict.h Stream.h Error.h \\r
+ Params.h FontFile.h FontEncoding.h GfxFont.h FontInfo.h\r
+GfxState.o: ./GfxState.cc ../goo/gmem.h Error.h config.h Object.h \\r
+ ../goo/gtypes.h ../goo/GString.h Array.h Dict.h Stream.h GfxState.h\r
+ImageOutputDev.o: ./ImageOutputDev.cc ../goo/gmem.h config.h Error.h \\r
+ GfxState.h ../goo/gtypes.h Object.h ../goo/GString.h Array.h Dict.h \\r
+ Stream.h ImageOutputDev.h OutputDev.h\r
+Lexer.o: ./Lexer.cc Lexer.h Object.h ../goo/gtypes.h ../goo/gmem.h \\r
+ ../goo/GString.h Array.h Dict.h Stream.h Error.h config.h\r
+Link.o: ./Link.cc ../goo/gmem.h ../goo/GString.h Error.h config.h \\r
+ Object.h ../goo/gtypes.h Array.h Dict.h Stream.h Link.h\r
+LTKOutputDev.o: ./LTKOutputDev.cc ../goo/gmem.h ../goo/GString.h \\r
+ ../ltk/LTKWindow.h ../goo/gtypes.h ../ltk/LTKScrollingCanvas.h \\r
+ ../ltk/LTKWidget.h Object.h Array.h Dict.h Stream.h GfxState.h \\r
+ GfxFont.h FontEncoding.h Error.h config.h Params.h LTKOutputDev.h \\r
+ XOutputDev.h OutputDev.h\r
+Object.o: ./Object.cc Object.h ../goo/gtypes.h ../goo/gmem.h \\r
+ ../goo/GString.h Array.h Dict.h Stream.h Error.h config.h XRef.h\r
+OutputDev.o: ./OutputDev.cc Object.h ../goo/gtypes.h ../goo/gmem.h \\r
+ ../goo/GString.h Array.h Dict.h Stream.h GfxState.h OutputDev.h\r
+Page.o: ./Page.cc Object.h ../goo/gtypes.h ../goo/gmem.h \\r
+ ../goo/GString.h Array.h Dict.h Stream.h XRef.h OutputDev.h Gfx.h \\r
+ Error.h config.h Params.h Page.h\r
+Params.o: ./Params.cc ../goo/gtypes.h ../goo/gmem.h ../goo/GString.h \\r
+ ../goo/gfile.h Params.h\r
+Parser.o: ./Parser.cc Object.h ../goo/gtypes.h ../goo/gmem.h \\r
+ ../goo/GString.h Array.h Dict.h Stream.h Parser.h Lexer.h Error.h \\r
+ config.h\r
+PBMOutputDev.o: ./PBMOutputDev.cc ../goo/gmem.h ../goo/GString.h \\r
+ Object.h ../goo/gtypes.h Array.h Dict.h Stream.h GfxState.h GfxFont.h \\r
+ FontEncoding.h Error.h config.h Params.h PBMOutputDev.h XOutputDev.h \\r
+ OutputDev.h\r
+PDFDoc.o: ./PDFDoc.cc ../goo/GString.h config.h Page.h Object.h \\r
+ ../goo/gtypes.h ../goo/gmem.h Array.h Dict.h Stream.h Catalog.h \\r
+ XRef.h Link.h OutputDev.h Params.h Error.h PDFDoc.h\r
+PSOutputDev.o: ./PSOutputDev.cc ../goo/GString.h config.h Object.h \\r
+ ../goo/gtypes.h ../goo/gmem.h Array.h Dict.h Stream.h Error.h \\r
+ GfxState.h GfxFont.h FontEncoding.h FontFile.h Catalog.h Page.h \\r
+ PSOutputDev.h OutputDev.h\r
+Stream.o: ./Stream.cc ../goo/gmem.h config.h Error.h Object.h \\r
+ ../goo/gtypes.h ../goo/GString.h Array.h Dict.h Stream.h \\r
+ Stream-CCITT.h\r
+TextOutputDev.o: ./TextOutputDev.cc ../goo/GString.h ../goo/gmem.h \\r
+ config.h Error.h GfxState.h ../goo/gtypes.h FontEncoding.h \\r
+ TextOutputDev.h GfxFont.h Object.h Array.h Dict.h Stream.h \\r
+ OutputDev.h TextOutputFontInfo.h\r
+XOutputDev.o: ./XOutputDev.cc ../goo/gmem.h ../goo/GString.h Object.h \\r
+ ../goo/gtypes.h Array.h Dict.h Stream.h GfxState.h GfxFont.h \\r
+ FontEncoding.h FontFile.h Error.h config.h Params.h TextOutputDev.h \\r
+ OutputDev.h XOutputDev.h XOutputFontInfo.h\r
+XRef.o: ./XRef.cc ../goo/gmem.h Object.h ../goo/gtypes.h \\r
+ ../goo/GString.h Array.h Dict.h Stream.h Lexer.h Parser.h Error.h \\r
+ config.h XRef.h\r
+xpdf.o: ./xpdf.cc ../goo/gtypes.h ../goo/GString.h ../goo/parseargs.h \\r
+ ../goo/gfile.h ../goo/gmem.h ../htk/LTKAll.h ../ltk/LTKApp.h \\r
+ ../ltk/LTKWindow.h ../ltk/LTKMenu.h ../ltk/LTKWidget.h \\r
+ ../ltk/LTKCompoundWidget.h ../ltk/LTKBox.h ../ltk/LTKBorder.h \\r
+ ../ltk/LTKButtonDialog.h ../ltk/LTKButton.h ../ltk/LTKCanvas.h \\r
+ ../ltk/LTKDblBufCanvas.h ../ltk/LTKEmpty.h ../ltk/LTKFileReq.h \\r
+ ../ltk/LTKLabel.h ../ltk/LTKList.h ../ltk/LTKMenuButton.h \\r
+ ../ltk/LTKScrollbar.h ../ltk/LTKScrollingCanvas.h ../ltk/LTKTextIn.h \\r
+ ../ltk/LTKResources.h Object.h Array.h Dict.h Stream.h XRef.h \\r
+ Catalog.h Page.h Link.h PDFDoc.h XOutputDev.h config.h OutputDev.h \\r
+ LTKOutputDev.h PSOutputDev.h TextOutputDev.h GfxFont.h FontEncoding.h \\r
+ Params.h Error.h xpdfIcon.xpm leftArrow.xbm dblLeftArrow.xbm \\r
+ rightArrow.xbm dblRightArrow.xbm backArrow.xbm forwardArrow.xbm \\r
+ find.xbm postscript.xbm about.xbm xpdf-ltk.h\r
+pdftops.o: ./pdftops.cc ../goo/parseargs.h ../goo/gtypes.h \\r
+ ../goo/GString.h ../goo/gmem.h Object.h Array.h Dict.h Stream.h \\r
+ XRef.h Catalog.h Page.h PDFDoc.h Link.h PSOutputDev.h config.h \\r
+ OutputDev.h Params.h Error.h\r
+pdftotext.o: ./pdftotext.cc ../goo/parseargs.h ../goo/gtypes.h \\r
+ ../goo/GString.h ../goo/gmem.h Object.h Array.h Dict.h Stream.h \\r
+ XRef.h Catalog.h Page.h PDFDoc.h Link.h TextOutputDev.h GfxFont.h \\r
+ FontEncoding.h OutputDev.h Params.h Error.h config.h\r
+pdfinfo.o: ./pdfinfo.cc ../goo/parseargs.h ../goo/gtypes.h \\r
+ ../goo/GString.h ../goo/gmem.h Object.h Array.h Dict.h Stream.h \\r
+ XRef.h Catalog.h Page.h PDFDoc.h Link.h Params.h Error.h config.h\r
+pdftopbm.o: ./pdftopbm.cc ../goo/parseargs.h ../goo/gtypes.h \\r
+ ../goo/GString.h ../goo/gmem.h Object.h Array.h Dict.h Stream.h \\r
+ XRef.h Catalog.h Page.h PDFDoc.h Link.h PBMOutputDev.h config.h \\r
+ XOutputDev.h OutputDev.h Params.h Error.h\r
+pdfimages.o: ./pdfimages.cc ../goo/parseargs.h ../goo/gtypes.h \\r
+ ../goo/GString.h ../goo/gmem.h Object.h Array.h Dict.h Stream.h \\r
+ XRef.h Catalog.h Page.h PDFDoc.h Link.h ImageOutputDev.h OutputDev.h \\r
+ Params.h Error.h config.h\r
index 1825a26a6f5c936d8095c48a786ba1fff81c69c9..1dd59f0b2d77125a214b222cf893159ec23cbc1a 100644 (file)
@@ -39,6 +39,8 @@ static ArgDesc argDesc[] = {
    "last page to convert"},
   {"-j",      argFlag,     &dumpJPEG,      0,
    "write JPEG images as JPEG files"},
+  {"-q",      argFlag,     &errQuiet,      0,
+   "don't print any messages or errors"},
   {"-h",      argFlag,     &printHelp,     0,
    "print usage information"},
   {"-help",   argFlag,     &printHelp,     0,
@@ -70,11 +72,18 @@ int main(int argc, char *argv[]) {
   // read config file
   initParams(xpdfConfigFile);
 
-  // open PDF file
+  // open PDF fihe
   xref = NULL;
   doc = new PDFDoc(fileName);
-  if (!doc->isOk())
-    exit(1);
+  if (!doc->isOk()) {
+    goto err1;
+  }
+
+  // check for copy permission
+  if (!doc->okToCopy()) {
+    error(-1, "Copying of images from this document is not allowed.");
+    goto err2;
+  }
 
   // get page range
   if (firstPage < 1)
@@ -89,12 +98,14 @@ int main(int argc, char *argv[]) {
   delete imgOut;
 
   // clean up
+ err2:
   delete doc;
+ err1:
   freeParams();
 
   // check for memory leaks
-  Object::memCheck(errFile);
-  gMemReport(errFile);
+  Object::memCheck(stderr);
+  gMemReport(stderr);
 
   return 0;
 }
index fae8a182a79b4c22a02a21e86802afda823d4c95..2c183c8385d77f288e8719b93f79a2102d656fcc 100644 (file)
@@ -106,16 +106,23 @@ int main(int argc, char *argv[]) {
   // print page count
   printf("Pages:        %d\n", doc->getNumPages());
 
-  // print encrypted flag
-  printf("Encrypted:    %s\n", doc->isEncrypted() ? "yes" : "no");
+  // print encryption info
+  printf("Encrypted:    ");
+  if (doc->isEncrypted()) {
+    printf("yes (print:%s copy:%s)\n",
+          doc->okToPrint() ? "yes" : "no",
+          doc->okToCopy() ? "yes" : "no");
+  } else {
+    printf("no\n");
+  }
 
   // clean up
   delete doc;
   freeParams();
 
   // check for memory leaks
-  Object::memCheck(errFile);
-  gMemReport(errFile);
+  Object::memCheck(stderr);
+  gMemReport(stderr);
 
   return 0;
 }
index 42fa3cd80024db5cd38be05e5cf1cda4d482b4d3..6cfe83059f9918af01ec5256516786973d713705 100644 (file)
@@ -39,6 +39,8 @@ static ArgDesc argDesc[] = {
    "last page to print"},
   {"-r",      argInt,      &resolution,    0,
    "resolution, in DPI (default is 150)"},
+  {"-q",      argFlag,     &errQuiet,      0,
+   "don't print any messages or errors"},
   {"-h",      argFlag,     &printHelp,     0,
    "print usage information"},
   {"-help",   argFlag,     &printHelp,     0,
@@ -93,8 +95,8 @@ int main(int argc, char *argv[]) {
   freeParams();
 
   // check for memory leaks
-  Object::memCheck(errFile);
-  gMemReport(errFile);
+  Object::memCheck(stderr);
+  gMemReport(stderr);
 
   return 0;
 }
index 08b369fa700c155b584546ae8291f09a22a3b6e5..d6fd6534258de72c0d12915936f610ff1cc97a37 100644 (file)
@@ -48,6 +48,8 @@ static ArgDesc argDesc[] = {
    "don't embed Type 1 fonts"},
   {"-form",   argFlag,     &doForm,        0,
    "generate a PostScript form"},
+  {"-q",      argFlag,     &errQuiet,      0,
+   "don't print any messages or errors"},
   {"-h",      argFlag,     &printHelp,     0,
    "print usage information"},
   {"-help",   argFlag,     &printHelp,     0,
@@ -86,8 +88,15 @@ int main(int argc, char *argv[]) {
   // open PDF file
   xref = NULL;
   doc = new PDFDoc(fileName);
-  if (!doc->isOk())
-    exit(1);
+  if (!doc->isOk()) {
+    goto err1;
+  }
+
+  // check for print permission
+  if (!doc->okToPrint()) {
+    error(-1, "Printing this document is not allowed.");
+    goto err2;
+  }
 
   // construct PostScript file name
   if (argc == 3) {
@@ -111,22 +120,22 @@ int main(int argc, char *argv[]) {
     lastPage = firstPage;
 
   // write PostScript file
-  if (doc->okToPrint()) {
-    psOut = new PSOutputDev(psFileName->getCString(), doc->getCatalog(),
-                           firstPage, lastPage, !noEmbedFonts, doForm);
-    if (psOut->isOk())
-      doc->displayPages(psOut, firstPage, lastPage, 72, 0);
-    delete psOut;
-  }
+  psOut = new PSOutputDev(psFileName->getCString(), doc->getCatalog(),
+                         firstPage, lastPage, !noEmbedFonts, doForm);
+  if (psOut->isOk())
+    doc->displayPages(psOut, firstPage, lastPage, 72, 0);
+  delete psOut;
 
   // clean up
   delete psFileName;
+ err2:
   delete doc;
+ err1:
   freeParams();
 
   // check for memory leaks
-  Object::memCheck(errFile);
-  gMemReport(errFile);
+  Object::memCheck(stderr);
+  gMemReport(stderr);
 
   return 0;
 }
index aa38a8bed725c8282bab7b16821a8fa2fdb33a04..189d4898fc89c333d115f409e5dde1c26fd87036 100644 (file)
 static int firstPage = 1;
 static int lastPage = 0;
 static GBool useASCII7 = gFalse;
+#if JAPANESE_SUPPORT
+static GBool useEUCJP = gFalse;
+#endif
+static GBool rawOrder = gFalse;
 GBool printCommands = gFalse;
 static GBool printHelp = gFalse;
 
@@ -39,6 +43,14 @@ static ArgDesc argDesc[] = {
    "last page to convert"},
   {"-ascii7", argFlag,     &useASCII7,     0,
    "convert to 7-bit ASCII (default is 8-bit ISO Latin-1)"},
+#if JAPANESE_SUPPORT
+  {"-eucjp",  argFlag,     &useEUCJP,      0,
+   "convert Japanese text to EUC-JP"},
+#endif
+  {"-raw",    argFlag,     &rawOrder,      0,
+   "keep strings in content stream order"},
+  {"-q",      argFlag,     &errQuiet,      0,
+   "don't print any messages or errors"},
   {"-h",      argFlag,     &printHelp,     0,
    "print usage information"},
   {"-help",   argFlag,     &printHelp,     0,
@@ -73,8 +85,15 @@ int main(int argc, char *argv[]) {
   // open PDF file
   xref = NULL;
   doc = new PDFDoc(fileName);
-  if (!doc->isOk())
-    exit(1);
+  if (!doc->isOk()) {
+    goto err1;
+  }
+
+  // check for copy permission
+  if (!doc->okToCopy()) {
+    error(-1, "Copying of text from this document is not allowed.");
+    goto err2;
+  }
 
   // construct text file name
   if (argc == 3) {
@@ -96,19 +115,24 @@ int main(int argc, char *argv[]) {
     lastPage = doc->getNumPages();
 
   // write text file
-  textOut = new TextOutputDev(textFileName->getCString(), useASCII7);
+#if JAPANESE_SUPPORT
+  useASCII7 |= useEUCJP;
+#endif
+  textOut = new TextOutputDev(textFileName->getCString(), useASCII7, rawOrder);
   if (textOut->isOk())
     doc->displayPages(textOut, firstPage, lastPage, 72, 0);
   delete textOut;
 
   // clean up
   delete textFileName;
+ err2:
   delete doc;
+ err1:
   freeParams();
 
   // check for memory leaks
-  Object::memCheck(errFile);
-  gMemReport(errFile);
+  Object::memCheck(stderr);
+  gMemReport(stderr);
 
   return 0;
 }
index 18429faeedcc95b89667c3490a4a8c55015647d7..32670912d8d991957dbb35f79c089845089d11f8 100644 (file)
@@ -6,41 +6,47 @@ $! Copyright 1996 Derek B. Noonburg
 $!
 $!========================================================================
 $!
-$ XPDF_OBJS = "Array.obj,Catalog.obj,Dict.obj,Error.obj,Gfx.obj," + -
+$ XPDF_OBJS = "Array.obj,Catalog.obj,Dict.obj,Error.obj," + -
+              "FontEncoding.obj,FontFile.obj,Gfx.obj," + -
               "GfxFont.obj,GfxState.obj,Lexer.obj,Link.obj," + -
               "LTKOutputDev.obj,Object.obj,OutputDev.obj,Page.obj," + -
               "Params.obj,Parser.obj,PDFDoc.obj,PSOutputDev.obj," + -
               "Stream.obj,TextOutputDev.obj,XOutputDev.obj,XRef.obj"
-$ XPDF_LIBS = "[-.goo]libgoo.olb/lib,[-.ltk]libltk.olb/lib"
+$ XPDF_LIBS = "[-.ltk]libltk.olb/lib,[-.goo]libgoo.olb/lib"
 $!
-$ PDFTOPS_OBJS = "Array.obj,Catalog.obj,Dict.obj,Error.obj,Gfx.obj," + -
+$ PDFTOPS_OBJS = "Array.obj,Catalog.obj,Dict.obj,Error.obj," + -
+                 "FontEncoding.obj,FontFile.obj,Gfx.obj," + -
                  "GfxFont.obj,GfxState.obj,Lexer.obj,Link.obj," + -
                  "Object.obj,OutputDev.obj,Page.obj,Params.obj," + -
                  "Parser.obj,PDFdoc.obj,PSOutputDev.obj,Stream.obj," + -
                  "XRef.obj"
 $ PDFTOPS_LIBS = "[-.goo]libgoo.olb/lib"
 $!
-$ PDFTOTEXT_OBJS = "Array.obj,Catalog.obj,Dict.obj,Error.obj,Gfx.obj," + -
+$ PDFTOTEXT_OBJS = "Array.obj,Catalog.obj,Dict.obj,Error.obj," + -
+                   "FontEncoding.obj,FontFile.obj,Gfx.obj," + -
                    "GfxFont.obj,GfxState.obj,Lexer.obj,Link.obj," + -
                    "Object.obj,OutputDev.obj,Page.obj,Params.obj," + -
                    "Parser.obj,PDFdoc.obj,TextOutputDev.obj,Stream.obj," + -
                    "XRef.obj"
 $ PDFTOTEXT_LIBS = "[-.goo]libgoo.olb/lib"
 $!
-$ PDFINFO_OBJS = "Array.obj,Catalog.obj,Dict.obj,Error.obj,Gfx.obj," + -
+$ PDFINFO_OBJS = "Array.obj,Catalog.obj,Dict.obj,Error.obj," + -
+                 "FontEncoding.obj,FontFile.obj,Gfx.obj," + -
                  "GfxFont.obj,GfxState.obj,Lexer.obj,Link.obj," + -
                  "Object.obj,OutputDev.obj,Page.obj,Params.obj," + -
                  "Parser.obj,PDFdoc.obj,Stream.obj,XRef.obj"
 $ PDFINFO_LIBS = "[-.goo]libgoo.olb/lib"
 $!
-$ PDFTOPBM_OBJS = "Array.obj,Catalog.obj,Dict.obj,Error.obj,Gfx.obj," + -
+$ PDFTOPBM_OBJS = "Array.obj,Catalog.obj,Dict.obj,Error.obj," + -
+                  "FontEncoding.obj,FontFile.obj,Gfx.obj," + -
                   "GfxFont.obj,GfxState.obj,Lexer.obj,Link.obj," + -
                   "Object.obj,OutputDev.obj,PBMOutputDev.obj,Page.obj," + -
                   "Params.obj,Parser.obj,PDFdoc.obj,Stream.obj," + -
                   "TextOutputDev.obj,XOutputDev.obj,XRef.obj"
 $ PDFTOPBM_LIBS = "[-.goo]libgoo.olb/lib"
 $!
-$ PDFIMAGES_OBJS = "Array.obj,Catalog.obj,Dict.obj,Error.obj,Gfx.obj," + -
+$ PDFIMAGES_OBJS = "Array.obj,Catalog.obj,Dict.obj,Error.obj," + -
+                   "FontEncoding.obj,FontFile.obj,Gfx.obj," + -
                    "GfxFont.obj,GfxState.obj,ImageOutputDev.obj," + -
                    "Lexer.obj,Link.obj,Object.obj,OutputDev.obj,Page.obj," + -
                    "Params.obj,Parser.obj,PDFdoc.obj,Stream.obj,XRef.obj"
@@ -54,6 +60,8 @@ $ CXXCOMP Array.cc
 $ CXXCOMP Catalog.cc
 $ CXXCOMP Dict.cc
 $ CXXCOMP Error.cc
+$ CXXCOMP FontEncoding.cc
+$ CXXCOMP FontFile.cc
 $ CXXCOMP Gfx.cc
 $ CXXCOMP GfxFont.cc
 $ CXXCOMP GfxState.cc
index 2c18d32edb86ee244b09fad586ced7cef438923c..bc06ee891dd6502a6e817d1591d7275f1d7a43dc 100644 (file)
@@ -1,7 +1,7 @@
-// This file was generated by ltkbuild 0.80
+// This file was generated by ltkbuild 0.90
 
-LTKWindow *makeWindow(LTKApp *app) {
-  return new LTKWindow(app, gFalse, "xpdf", xpdfIcon, NULL,
+LTKWindow *makeWindow(LTKApp *a) {
+  return new LTKWindow(a, gFalse, "xpdf", xpdfIcon, NULL,
     new LTKBox(NULL, 1, 2, 0, 0, 0, 0, ltkBorderNone, 1, 1,
       new LTKBox(NULL, 2, 2, 0, 0, 0, 0, ltkBorderNone, 1, 1,
         new LTKBox(NULL, 1, 1, 2, 2, 2, 2, ltkBorderSunken, 1, 1,
@@ -30,6 +30,9 @@ LTKWindow *makeWindow(LTKApp *app) {
         new LTKBox(NULL, 1, 1, 2, 2, 2, 2, ltkBorderNone, 0, 0,
           new LTKButton(NULL, 0, dblRightArrow_bits, dblRightArrow_width, dblRightArrow_height, ltkButtonClick, &nextTenPageCbk)
         ),
+        new LTKBox(NULL, 1, 1, 2, 2, 2, 2, ltkBorderNone, 0, 0,
+          new LTKButton(NULL, 0, forwardArrow_bits, forwardArrow_width, forwardArrow_height, ltkButtonClick, &forwardCbk)
+        ),
         new LTKBox(NULL, 1, 1, 2, 2, 2, 2, ltkBorderNone, 0, 0,
           new LTKLabel(NULL, 0, ltkLabelStatic, 8, "-*-courier-medium-r-normal-*-14-*-*-*-*-*-*-*", "Page")
         ),
@@ -40,10 +43,7 @@ LTKWindow *makeWindow(LTKApp *app) {
           new LTKLabel("numPages", 0, ltkLabelMaxLength, 9, "-*-courier-medium-r-normal-*-14-*-*-*-*-*-*-*", NULL)
         ),
         new LTKBox(NULL, 1, 1, 2, 2, 2, 2, ltkBorderNone, 0, 0,
-          new LTKButton(NULL, 0, zoomIn_bits, zoomIn_width, zoomIn_height, ltkButtonClick, &zoomInCbk)
-        ),
-        new LTKBox(NULL, 1, 1, 2, 2, 2, 2, ltkBorderNone, 0, 0,
-          new LTKButton(NULL, 0, zoomOut_bits, zoomOut_width, zoomOut_height, ltkButtonClick, &zoomOutCbk)
+          new LTKMenuButton("zoom", 0, zoomMenu)
         ),
         new LTKBox(NULL, 1, 1, 2, 2, 2, 2, ltkBorderNone, 0, 0,
           new LTKButton(NULL, 0, find_bits, find_width, find_height, ltkButtonClick, &findCbk)
@@ -78,8 +78,28 @@ LTKMenu *makeMenu() {
   );
 }
 
-LTKWindow *makePostScriptDialog(LTKApp *app) {
-  return new LTKWindow(app, gTrue, "xpdf: PostScript output", NULL, "ok",
+LTKMenu *makeZoomMenu() {
+  return new LTKMenu("zoom", 14,
+    new LTKMenuItem("-5", NULL, -5, &zoomMenuCbk, NULL),
+    new LTKMenuItem("-4", NULL, -4, &zoomMenuCbk, NULL),
+    new LTKMenuItem("-3", NULL, -3, &zoomMenuCbk, NULL),
+    new LTKMenuItem("-2", NULL, -2, &zoomMenuCbk, NULL),
+    new LTKMenuItem("-1", NULL, -1, &zoomMenuCbk, NULL),
+    new LTKMenuItem("0", NULL, 0, &zoomMenuCbk, NULL),
+    new LTKMenuItem("+1", NULL, 1, &zoomMenuCbk, NULL),
+    new LTKMenuItem("+2", NULL, 2, &zoomMenuCbk, NULL),
+    new LTKMenuItem("+3", NULL, 3, &zoomMenuCbk, NULL),
+    new LTKMenuItem("+4", NULL, 4, &zoomMenuCbk, NULL),
+    new LTKMenuItem("+5", NULL, 5, &zoomMenuCbk, NULL),
+    new LTKMenuItem(NULL, NULL, 0, NULL, NULL),
+    new LTKMenuItem("fit page", NULL, 100, &zoomMenuCbk, NULL),
+    new LTKMenuItem("fit width", NULL, 101, &zoomMenuCbk, NULL)
+
+  );
+}
+
+LTKWindow *makePostScriptDialog(LTKApp *a) {
+  return new LTKWindow(a, gTrue, "xpdf: PostScript output", NULL, "ok",
     new LTKBox(NULL, 1, 3, 0, 0, 0, 0, ltkBorderNone, 0, 0,
       new LTKBox(NULL, 4, 1, 0, 0, 0, 0, ltkBorderNone, 0, 0,
         new LTKBox(NULL, 1, 1, 2, 2, 2, 2, ltkBorderNone, 0, 0,
@@ -118,8 +138,8 @@ LTKWindow *makePostScriptDialog(LTKApp *app) {
   );
 }
 
-LTKWindow *makeOpenDialog(LTKApp *app) {
-  return new LTKWindow(app, gTrue, "xpdf: Open...", NULL, "open",
+LTKWindow *makeOpenDialog(LTKApp *a) {
+  return new LTKWindow(a, gTrue, "xpdf: Open...", NULL, "open",
     new LTKBox(NULL, 1, 2, 0, 0, 0, 0, ltkBorderNone, 1, 1,
       new LTKBox(NULL, 1, 1, 2, 2, 2, 2, ltkBorderNone, 1, 1,
         new LTKFileReq("fileReq", 0, openSelectCbk, "-*-courier-medium-r-normal-*-14-*-*-*-*-*-*-*")
@@ -139,8 +159,8 @@ LTKWindow *makeOpenDialog(LTKApp *app) {
   );
 }
 
-LTKWindow *makeSaveDialog(LTKApp *app) {
-  return new LTKWindow(app, gTrue, "xpdf: Save as...", NULL, "save",
+LTKWindow *makeSaveDialog(LTKApp *a) {
+  return new LTKWindow(a, gTrue, "xpdf: Save as...", NULL, "save",
     new LTKBox(NULL, 1, 2, 0, 0, 0, 0, ltkBorderNone, 1, 1,
       new LTKBox(NULL, 1, 1, 2, 2, 2, 2, ltkBorderNone, 1, 1,
         new LTKFileReq("fileReq", 0, saveSelectCbk, "-*-courier-medium-r-normal-*-14-*-*-*-*-*-*-*")
@@ -160,8 +180,8 @@ LTKWindow *makeSaveDialog(LTKApp *app) {
   );
 }
 
-LTKWindow *makeFindWindow(LTKApp *app) {
-  return new LTKWindow(app, gFalse, "xpdf: Find", NULL, "find",
+LTKWindow *makeFindWindow(LTKApp *a) {
+  return new LTKWindow(a, gFalse, "xpdf: Find", NULL, "find",
     new LTKBox(NULL, 1, 3, 0, 0, 0, 0, ltkBorderNone, 1, 1,
       new LTKBox(NULL, 2, 1, 0, 0, 0, 0, ltkBorderNone, 1, 0,
         new LTKBox(NULL, 1, 1, 2, 2, 2, 2, ltkBorderNone, 0, 0,
@@ -189,8 +209,8 @@ LTKWindow *makeFindWindow(LTKApp *app) {
   );
 }
 
-LTKWindow *makeAboutWindow(LTKApp *app) {
-  return new LTKWindow(app, gFalse, "About xpdf", NULL, "close",
+LTKWindow *makeAboutWindow(LTKApp *a) {
+  return new LTKWindow(a, gFalse, "About xpdf", NULL, "close",
     new LTKBox(NULL, 1, 2, 0, 0, 0, 0, ltkBorderNone, 0, 0,
       new LTKBox(NULL, 1, 11, 2, 2, 2, 2, ltkBorderSunken, 0, 0,
         new LTKBox(NULL, 1, 1, 2, 2, 2, 0, ltkBorderNone, 0, 0,
index edd1c758e29caad1f432d05c47eb61f2758a6bec..4e5a2a8cc807d920a9f7a15adb09c10e5833e512 100644 (file)
@@ -72,7 +72,7 @@ enum XpdfMenuItem {
 
 // loadFile / displayPage
 static GBool loadFile(GString *fileName);
-static void displayPage(int page1, int zoom1, int rotate1);
+static void displayPage(int page1, int zoom1, int rotate1, GBool addToHist);
 
 // key press and menu callbacks
 static void keyPressCbk(LTKWindow *win1, KeySym key, Guint modifiers,
@@ -94,9 +94,10 @@ static void nextPageCbk(LTKWidget *button, int n, GBool on);
 static void nextTenPageCbk(LTKWidget *button, int n, GBool on);
 static void prevPageCbk(LTKWidget *button, int n, GBool on);
 static void prevTenPageCbk(LTKWidget *button, int n, GBool on);
+static void backCbk(LTKWidget *button, int n, GBool on);
+static void forwardCbk(LTKWidget *button, int n, GBool on);
 static void pageNumCbk(LTKWidget *textIn, int n, GString *text);
-static void zoomInCbk(LTKWidget *button, int n, GBool on);
-static void zoomOutCbk(LTKWidget *button, int n, GBool on);
+static void zoomMenuCbk(LTKMenuItem *item);
 static void postScriptCbk(LTKWidget *button, int n, GBool on);
 static void aboutCbk(LTKWidget *button, int n, GBool on);
 static void quitCbk(LTKWidget *button, int n, GBool on);
@@ -107,6 +108,7 @@ static void scrollHorizCbk(LTKWidget *scrollbar, int n, int val);
 
 // misc callbacks
 static void layoutCbk(LTKWindow *win1);
+static void updateScrollbars();
 static void propChangeCbk(LTKWindow *win1, Atom atom);
 
 // selection
@@ -139,22 +141,6 @@ static void doFind(char *s);
 // app kill callback
 static void killCbk(LTKWindow *win1);
 
-//------------------------------------------------------------------------
-// GUI includes
-//------------------------------------------------------------------------
-
-#include "xpdfIcon.xpm"
-#include "leftArrow.xbm"
-#include "dblLeftArrow.xbm"
-#include "rightArrow.xbm"
-#include "dblRightArrow.xbm"
-#include "zoomIn.xbm"
-#include "zoomOut.xbm"
-#include "find.xbm"
-#include "postscript.xbm"
-#include "about.xbm"
-#include "xpdf-ltk.h"
-
 //------------------------------------------------------------------------
 // command line options
 //------------------------------------------------------------------------
@@ -172,6 +158,12 @@ static XrmOptionDescRec opts[] = {
   {"-cmap",          ".installCmap",   XrmoptionNoArg,   (XPointer)"on"},
   {"-rgb",           ".rgbCubeSize",   XrmoptionSepArg,  NULL},
   {"-papercolor",    ".paperColor",    XrmoptionSepArg,  NULL},
+#if JAPANESE_SUPPORT
+  {"-eucjp",         ".eucjp",         XrmoptionNoArg,   (XPointer)"off"},
+#endif
+#if HAVE_T1LIB_H
+  {"-t1lib",         ".t1libControl",  XrmoptionSepArg,  NULL},
+#endif
   {"-z",             ".initialZoom",   XrmoptionSepArg,  NULL},
   {"-ps",            ".psFile",        XrmoptionSepArg,  NULL},
   {"-paperw",        ".psPaperWidth",  XrmoptionSepArg,  NULL},
@@ -185,12 +177,13 @@ static GBool printHelp = gFalse;
 static char remoteName[100] = "xpdf_";
 static GBool doRemoteRaise = gFalse;
 static GBool doRemoteQuit = gFalse;
+static GBool viKeys = gFalse;
 
 static ArgDesc argDesc[] = {
   {"-err",        argFlag,        &errorsToTTY,   0,
    "send error messages to /dev/tty instead of stderr"},
-  {"-z",          argIntDummy,    NULL,           0,
-   "initial zoom level (-5..5)"},
+  {"-z",          argStringDummy, NULL,           0,
+   "initial zoom level (-5..5, page, width)"},
   {"-g",          argStringDummy, NULL,           0,
    "initial window geometry"},
   {"-geometry",   argStringDummy, NULL,           0,
@@ -207,6 +200,14 @@ static ArgDesc argDesc[] = {
    "biggest RGB cube to allocate (default is 5)"},
   {"-papercolor", argStringDummy, NULL,           0,
    "color of paper background"},
+#if JAPANESE_SUPPORT
+  {"-eucjp",      argStringDummy, NULL,           0,
+   "convert Japanese text to EUC-JP"},
+#endif
+#if HAVE_T1LIB_H
+  {"-t1lib",      argStringDummy, NULL,           0,
+   "t1lib font control: none, plain, low, high"},
+#endif
   {"-ps",         argStringDummy, NULL,           0,
    "default PostScript file/command name"},
   {"-paperw",     argIntDummy,    NULL,           0,
@@ -217,6 +218,8 @@ static ArgDesc argDesc[] = {
    "generate Level 1 PostScript"},
   {"-cmd",        argFlag,        &printCommands, 0,
    "print commands as they're executed"},
+  {"-q",      argFlag,     &errQuiet,      0,
+   "don't print any messages or errors"},
   {"-h",          argFlag,        &printHelp,     0,
    "print usage information"},
   {"-help",       argFlag,        &printHelp,     0,
@@ -229,14 +232,17 @@ static ArgDesc argDesc[] = {
 //------------------------------------------------------------------------
 
 // zoom factor is 1.2 (similar to DVI magsteps)
-#define minZoom -5
-#define maxZoom  5
+#define minZoom    -5
+#define maxZoom     5
+#define zoomPage  100
+#define zoomWidth 101
 static int zoomDPI[maxZoom - minZoom + 1] = {
   29, 35, 42, 50, 60,
   72,
   86, 104, 124, 149, 179
 };
-#define defZoom 1
+#define defZoom     1
+#define defZoomStr "1"
 
 static PDFDoc *doc;
 
@@ -255,6 +261,19 @@ static GBool lastDragLeft; // last dragged selection edge was left/right
 static GBool lastDragTop;      // last dragged selection edge was top/bottom
 static int panMX, panMY;       // last mouse position for pan
 
+struct History {
+  GString *fileName;
+  int page;
+};
+#define historySize 50
+static History                 // page history queue
+  history[historySize];
+static int historyCur;         // currently displayed page
+static int historyBLen;                // number of valid entries backward from
+                               //   current entry
+static int historyFLen;                // number of valid entries forward from
+                               //   current entry
+
 static GString *defPSFileName;
 static GString *psFileName;
 static int psFirstPage, psLastPage;
@@ -266,11 +285,13 @@ static GString *urlCommand;       // command to execute for URI links
 static LTKApp *app;
 static Display *display;
 static LTKWindow *win;
+static LTKMenu *zoomMenu;
 static LTKScrollingCanvas *canvas;
 static LTKScrollbar *hScrollbar, *vScrollbar;
 static LTKTextIn *pageNumText;
 static LTKLabel *numPagesLabel;
 static LTKLabel *linkLabel;
+static LTKMenuButton *zoomMenuBtn;
 static LTKWindow *aboutWin;
 static LTKWindow *psDialog;
 static LTKWindow *openDialog;
@@ -279,6 +300,22 @@ static LTKWindow *findWin;
 static Atom remoteAtom;
 static GC selectGC;
 
+//------------------------------------------------------------------------
+// GUI includes
+//------------------------------------------------------------------------
+
+#include "xpdfIcon.xpm"
+#include "leftArrow.xbm"
+#include "dblLeftArrow.xbm"
+#include "rightArrow.xbm"
+#include "dblRightArrow.xbm"
+#include "backArrow.xbm"
+#include "forwardArrow.xbm"
+#include "find.xbm"
+#include "postscript.xbm"
+#include "about.xbm"
+#include "xpdf-ltk.h"
+
 //------------------------------------------------------------------------
 // main program
 //------------------------------------------------------------------------
@@ -294,8 +331,10 @@ int main(int argc, char *argv[]) {
   int pg;
   int x, y;
   Guint width, height;
+  GString *zoomStr;
   GBool ok;
   char s[20];
+  int i;
   int ret;
 
   // initialize
@@ -372,8 +411,16 @@ int main(int argc, char *argv[]) {
   }
 
   // print banner
-  fprintf(errFile, "xpdf version %s\n", xpdfVersion);
-  fprintf(errFile, "%s\n", xpdfCopyright);
+  if (!errQuiet) {
+    fprintf(errFile, "xpdf version %s\n", xpdfVersion);
+    fprintf(errFile, "%s\n", xpdfCopyright);
+  }
+
+  // no history yet
+  historyCur = historySize - 1;
+  historyBLen = historyFLen = 0;
+  for (i = 0; i < historySize; ++i)
+    history[i].fileName = NULL;
 
   // open PDF file
   defPSFileName = app->getStringResource("psFile", NULL);
@@ -391,8 +438,9 @@ int main(int argc, char *argv[]) {
     pg = 1;
 
   // create window
-  win = makeWindow(app);
   menu = makeMenu();
+  zoomMenu = makeZoomMenu();
+  win = makeWindow(app);
   win->setMenu(menu);
   canvas = (LTKScrollingCanvas *)win->findWidget("canvas");
   hScrollbar = (LTKScrollbar *)win->findWidget("hScrollbar");
@@ -400,6 +448,7 @@ int main(int argc, char *argv[]) {
   pageNumText = (LTKTextIn *)win->findWidget("pageNum");
   numPagesLabel = (LTKLabel *)win->findWidget("numPages");
   linkLabel = (LTKLabel *)win->findWidget("link");
+  zoomMenuBtn = (LTKMenuButton *)win->findWidget("zoom");
   win->setKeyCbk(&keyPressCbk);
   win->setLayoutCbk(&layoutCbk);
   canvas->setButtonPressCbk(&buttonPressCbk);
@@ -421,32 +470,80 @@ int main(int argc, char *argv[]) {
   paperColor = app->getColorResource("paperColor", "white",
                                     WhitePixel(display, app->getScreenNum()),
                                     NULL);
-  zoom = app->getIntResource("initialZoom", defZoom);
-  if (zoom < minZoom)
-    zoom = minZoom;
-  else if (zoom > maxZoom)
-    zoom = maxZoom;
-
-  // get geometry
-  x = -1;
-  y = -1;
-  if (!doc) {
-    width = 612;
-    height = 792;
-  } else if (doc->getPageRotate(pg) == 90 || doc->getPageRotate(pg) == 270) {
-    width = (int)(doc->getPageHeight(pg) + 0.5);
-    height = (int)(doc->getPageWidth(pg) + 0.5);
+#if JAPANESE_SUPPORT
+  useEUCJP = app->getBoolResource("eucjp", gFalse);
+#else
+  useEUCJP = gFalse;
+#endif
+#if HAVE_T1LIB_H
+  t1libControl = app->getStringResource("t1libControl", "low");
+#endif
+  t1Courier = app->getStringResource("t1Courier", NULL);
+  t1CourierBold = app->getStringResource("t1CourierBold", NULL);
+  t1CourierBoldOblique = app->getStringResource("t1CourierBoldOblique", NULL);
+  t1CourierOblique = app->getStringResource("t1CourierOblique", NULL);
+  t1Helvetica = app->getStringResource("t1Helvetica", NULL);
+  t1HelveticaBold = app->getStringResource("t1HelveticaBold", NULL);
+  t1HelveticaBoldOblique =
+    app->getStringResource("t1HelveticaBoldOblique", NULL);
+  t1HelveticaOblique = app->getStringResource("t1HelveticaOblique", NULL);
+  t1Symbol = app->getStringResource("t1Symbol", NULL);
+  t1TimesBold = app->getStringResource("t1TimesBold", NULL);
+  t1TimesBoldItalic = app->getStringResource("t1TimesBoldItalic", NULL);
+  t1TimesItalic = app->getStringResource("t1TimesItalic", NULL);
+  t1TimesRoman = app->getStringResource("t1TimesRoman", NULL);
+  t1ZapfDingbats = app->getStringResource("t1ZapfDingbats", NULL);
+#if JAPANESE_SUPPORT
+  japan12Font = app->getStringResource("japaneseFont", NULL);
+#endif
+  zoomStr = app->getStringResource("initialZoom", defZoomStr);
+  if (!zoomStr->cmp("page")) {
+    zoom = zoomPage;
+    i = maxZoom - minZoom + 2;
+  } else if (!zoomStr->cmp("width")) {
+    zoom = zoomWidth;
+    i = maxZoom - minZoom + 3;
   } else {
-    width = (int)(doc->getPageWidth(pg) + 0.5);
-    height = (int)(doc->getPageHeight(pg) + 0.5);
+    zoom = atoi(zoomStr->getCString());
+    if (zoom < minZoom)
+      zoom = minZoom;
+    else if (zoom > maxZoom)
+      zoom = maxZoom;
+    i = zoom - minZoom;
   }
-  width = (width * zoomDPI[zoom - minZoom]) / 72 + 28;
-  if (width > (Guint)app->getDisplayWidth() - 100)
-    width = app->getDisplayWidth() - 100;
-  height = (height * zoomDPI[zoom - minZoom]) / 72 + 56;
-  if (height > (Guint)app->getDisplayHeight() - 100)
-    height = app->getDisplayHeight() - 100;
+  delete zoomStr;
+  zoomMenuBtn->setInitialMenuItem(zoomMenu->getItem(i));
+  viKeys = app->getBoolResource("viKeys", gFalse);
+
+  // get geometry
+  x = y = -1;
+  width = height = 0;
   app->getGeometryResource("geometry", &x, &y, &width, &height);
+  if (width == 0 || height == 0) {
+    if (!doc || doc->getNumPages() == 0) {
+      width = 612;
+      height = 792;
+    } else if (doc->getPageRotate(pg) == 90 || doc->getPageRotate(pg) == 270) {
+      width = (int)(doc->getPageHeight(pg) + 0.5);
+      height = (int)(doc->getPageWidth(pg) + 0.5);
+    } else {
+      width = (int)(doc->getPageWidth(pg) + 0.5);
+      height = (int)(doc->getPageHeight(pg) + 0.5);
+    }
+    if (zoom == zoomPage || zoom == zoomWidth) {
+      width = (width * zoomDPI[defZoom - minZoom]) / 72 + 28;
+      height = (height * zoomDPI[defZoom - minZoom]) / 72 + 56;
+    } else {
+      width = (width * zoomDPI[zoom - minZoom]) / 72 + 28;
+      height = (height * zoomDPI[zoom - minZoom]) / 72 + 56;
+    }
+    if (width > (Guint)app->getDisplayWidth() - 100) {
+      width = app->getDisplayWidth() - 100;
+    }
+    if (height > (Guint)app->getDisplayHeight() - 100) {
+      height = app->getDisplayHeight() - 100;
+    }
+  }
 
   // finish setting up window
   sprintf(s, "of %d", doc ? doc->getNumPages() : 0);
@@ -480,9 +577,10 @@ int main(int argc, char *argv[]) {
 
   // create output device
   out = new LTKOutputDev(win, paperColor);
+  out->startDoc();
 
   // display first page
-  displayPage(pg, zoom, 0);
+  displayPage(pg, zoom, 0, gTrue);
 
   // event loop
   quit = gFalse;
@@ -517,11 +615,51 @@ int main(int argc, char *argv[]) {
     delete fileReqDir;
   if (urlCommand)
     delete urlCommand;
+#if HAVE_T1LIB_H
+  if (t1libControl)
+    delete t1libControl;
+#endif
+  if (t1Courier)
+    delete t1Courier;
+  if (t1CourierBold)
+    delete t1CourierBold;
+  if (t1CourierBoldOblique)
+    delete t1CourierBoldOblique;
+  if (t1CourierOblique)
+    delete t1CourierOblique;
+  if (t1Helvetica)
+    delete t1Helvetica;
+  if (t1HelveticaBold)
+    delete t1HelveticaBold;
+  if (t1HelveticaBoldOblique)
+    delete t1HelveticaBoldOblique;
+  if (t1HelveticaOblique)
+    delete t1HelveticaOblique;
+  if (t1Symbol)
+    delete t1Symbol;
+  if (t1TimesBold)
+    delete t1TimesBold;
+  if (t1TimesBoldItalic)
+    delete t1TimesBoldItalic;
+  if (t1TimesItalic)
+    delete t1TimesItalic;
+  if (t1TimesRoman)
+    delete t1TimesRoman;
+  if (t1ZapfDingbats)
+    delete t1ZapfDingbats;
+#if JAPANESE_FONT
+  if (japan12Font)
+    delete japan12Font;
+#endif
+  for (i = 0; i < historySize; ++i) {
+    if (history[i].fileName)
+      delete history[i].fileName;
+  }
   freeParams();
 
   // check for memory leaks
-  Object::memCheck(errFile);
-  gMemReport(errFile);
+  Object::memCheck(errFile ? errFile : stderr);
+  gMemReport(errFile ? errFile : stderr);
 
   return ret;
 }
@@ -553,6 +691,8 @@ static GBool loadFile(GString *fileName) {
   if (doc)
     delete doc;
   doc = newDoc;
+  if (out)
+    out->startDoc();
 
   // nothing displayed yet
   page = -99;
@@ -588,11 +728,14 @@ static GBool loadFile(GString *fileName) {
   return gTrue;
 }
 
-static void displayPage(int page1, int zoom1, int rotate1) {
+static void displayPage(int page1, int zoom1, int rotate1, GBool addToHist) {
+  double hDPI, vDPI, dpi;
+  int rot;
   char s[20];
+  History *h;
 
   // check for document
-  if (!doc)
+  if (!doc || doc->getNumPages() == 0)
     return;
 
   // busy cursor
@@ -613,13 +756,50 @@ static void displayPage(int page1, int zoom1, int rotate1) {
   lastDragLeft = lastDragTop = gTrue;
 
   // draw the page
-  doc->displayPage(out, page, zoomDPI[zoom - minZoom], rotate, gTrue);
-  layoutCbk(win);
+  rot = rotate + doc->getPageRotate(page);
+  if (rot >= 360)
+    rot -= 360;
+  else if (rotate < 0)
+    rot += 360;
+  if (zoom == zoomPage) {
+    if (rot == 90 || rot == 270) {
+      hDPI = ((win->getWidth() - 28) / doc->getPageHeight(page)) * 72;
+      vDPI = ((win->getHeight() - 56) / doc->getPageWidth(page)) * 72;
+    } else {
+      hDPI = ((win->getWidth() - 28) / doc->getPageWidth(page)) * 72;
+      vDPI = ((win->getHeight() - 56) / doc->getPageHeight(page)) * 72;
+    }
+    dpi = (hDPI < vDPI) ? hDPI : vDPI;
+  } else if (zoom == zoomWidth) {
+    if (rot == 90 || rot == 270) {
+      dpi = ((win->getWidth() - 28) / doc->getPageHeight(page)) * 72;
+    } else {
+      dpi = ((win->getWidth() - 28) / doc->getPageWidth(page)) * 72;
+    }
+  } else {
+    dpi = zoomDPI[zoom - minZoom];
+  }
+  doc->displayPage(out, page, dpi, rotate, gTrue);
+  updateScrollbars();
 
   // update page number display
   sprintf(s, "%d", page);
   pageNumText->setText(s);
 
+  // add to history
+  if (addToHist) {
+    if (++historyCur == historySize)
+      historyCur = 0;
+    h = &history[historyCur];
+    if (h->fileName)
+      delete h->fileName;
+    h->fileName = doc->getFileName()->copy();
+    h->page = page;
+    if (historyBLen < historySize)
+      ++historyBLen;
+    historyFLen = 0;
+  }
+
   // back to regular cursor
   win->setBusyCursor(gFalse);
 }
@@ -662,15 +842,42 @@ static void keyPressCbk(LTKWindow *win1, KeySym key, Guint modifiers,
     case '\177':               // del
       if (vScrollbar->getPos() == 0) {
        prevPageCbk(NULL, 0, gTrue);
+       vScrollbar->setPos(canvas->getRealHeight() - canvas->getHeight(),
+                          canvas->getHeight());
+       canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
       } else {
        vScrollbar->setPos(vScrollbar->getPos() - canvas->getHeight(),
                           canvas->getHeight());
        canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
       }
       break;
+    case 'h':                  // vi-style left
+      if (viKeys) {
+       hScrollbar->setPos(hScrollbar->getPos() - 16, canvas->getWidth());
+       canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
+      }
+      break;
+    case 'l':                  // vi-style right
+      if (viKeys) {
+       hScrollbar->setPos(hScrollbar->getPos() + 16, canvas->getWidth());
+       canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
+      }
+      break;
+    case 'k':                  // vi-style up
+      if (viKeys) {
+       vScrollbar->setPos(vScrollbar->getPos() - 16, canvas->getHeight());
+       canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
+      }
+      break;
+    case 'j':                  // vi-style down
+      if (viKeys) {
+       vScrollbar->setPos(vScrollbar->getPos() + 16, canvas->getHeight());
+       canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
+      }
+      break;
     case '\014':               // ^L
       win->redraw();
-      displayPage(page, zoom, rotate);
+      displayPage(page, zoom, rotate, gFalse);
       break;
     case 'Q':
     case 'q':
@@ -680,11 +887,13 @@ static void keyPressCbk(LTKWindow *win1, KeySym key, Guint modifiers,
   } else {
     switch (key) {
     case XK_Home:
+    case XK_KP_Home:
       hScrollbar->setPos(0, canvas->getWidth());
       vScrollbar->setPos(0, canvas->getHeight());
       canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
       break;
     case XK_End:
+    case XK_KP_End:
       hScrollbar->setPos(canvas->getRealWidth() - canvas->getWidth(),
                         canvas->getWidth());
       vScrollbar->setPos(canvas->getRealHeight() - canvas->getHeight(),
@@ -692,8 +901,12 @@ static void keyPressCbk(LTKWindow *win1, KeySym key, Guint modifiers,
       canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
       break;
     case XK_Page_Up:
+    case XK_KP_Page_Up:
       if (vScrollbar->getPos() == 0) {
        prevPageCbk(NULL, 0, gTrue);
+       vScrollbar->setPos(canvas->getRealHeight() - canvas->getHeight(),
+                          canvas->getHeight());
+       canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
       } else {
        vScrollbar->setPos(vScrollbar->getPos() - canvas->getHeight(),
                           canvas->getHeight());
@@ -701,6 +914,7 @@ static void keyPressCbk(LTKWindow *win1, KeySym key, Guint modifiers,
       }
       break;
     case XK_Page_Down:
+    case XK_KP_Page_Down:
       if (vScrollbar->getPos() >=
          canvas->getRealHeight() - canvas->getHeight()) {
        nextPageCbk(NULL, 0, gTrue);
@@ -711,18 +925,22 @@ static void keyPressCbk(LTKWindow *win1, KeySym key, Guint modifiers,
       }
       break;
     case XK_Left:
+    case XK_KP_Left:
       hScrollbar->setPos(hScrollbar->getPos() - 16, canvas->getWidth());
       canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
       break;
     case XK_Right:
+    case XK_KP_Right:
       hScrollbar->setPos(hScrollbar->getPos() + 16, canvas->getWidth());
       canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
       break;
     case XK_Up:
+    case XK_KP_Up:
       vScrollbar->setPos(vScrollbar->getPos() - 16, canvas->getHeight());
       canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
       break;
     case XK_Down:
+    case XK_KP_Down:
       vScrollbar->setPos(vScrollbar->getPos() + 16, canvas->getHeight());
       canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
       break;
@@ -744,13 +962,13 @@ static void menuCbk(LTKMenuItem *item) {
   case menuRotateLeft:
     if (doc) {
       r = (rotate == 0) ? 270 : rotate - 90;
-      displayPage(page, zoom, r);
+      displayPage(page, zoom, r, gFalse);
     }
     break;
   case menuRotateRight:
     if (doc) {
       r = (rotate == 270) ? 0 : rotate + 90;
-      displayPage(page, zoom, r);
+      displayPage(page, zoom, r, gFalse);
     }
     break;
   case menuQuit:
@@ -765,7 +983,7 @@ static void menuCbk(LTKMenuItem *item) {
 
 static void buttonPressCbk(LTKWidget *canvas1, int n,
                           int mx, int my, int button, GBool dblClick) {
-  if (!doc)
+  if (!doc || doc->getNumPages() == 0)
     return;
   if (button == 1) {
     setSelection(mx, my, mx, my);
@@ -779,7 +997,7 @@ static void buttonReleaseCbk(LTKWidget *canvas1, int n,
                             int mx, int my, int button, GBool click) {
   GString *s;
 
-  if (!doc)
+  if (!doc || doc->getNumPages() == 0)
     return;
 
   if (button == 1) {
@@ -789,6 +1007,8 @@ static void buttonReleaseCbk(LTKWidget *canvas1, int n,
       if (doc->okToCopy()) {
        s = out->getText(selectXMin, selectYMin, selectXMax, selectYMax);
        win->setSelection(NULL, s);
+      } else {
+       error(-1, "Copying of text from this document is not allowed.");
       }
 #endif
 
@@ -856,7 +1076,7 @@ static void doLink(int mx, int my) {
       }
       if (!dest) {
        if (kind == actionGoToR)
-         displayPage(1, zoom, 0);
+         displayPage(1, zoom, 0, gTrue);
       } else {
        if (dest->isPageRef()) {
          pageRef = dest->getPageRef();
@@ -865,9 +1085,9 @@ static void doLink(int mx, int my) {
          pg = dest->getPageNum();
        }
        if (pg > 0 && pg != page)
-         displayPage(pg, zoom, rotate);
+         displayPage(pg, zoom, rotate, gTrue);
        else if (pg <= 0)
-         displayPage(1, zoom, rotate);
+         displayPage(1, zoom, rotate, gTrue);
        switch (dest->getKind()) {
        case destXYZ:
          out->cvtUserToDev(dest->getLeft(), dest->getTop(), &dx, &dy);
@@ -929,7 +1149,7 @@ static void doLink(int mx, int my) {
                         grabPath(doc->getFileName()->getCString()), s);
        if (!loadFile(fileName))
          return;
-       displayPage(1, zoom, rotate);
+       displayPage(1, zoom, rotate, gTrue);
       } else {
        fileName = fileName->copy();
        if (((LinkLaunch *)action)->getParams()) {
@@ -998,7 +1218,7 @@ static void mouseMoveCbk(LTKWidget *widget, int widgetNum, int mx, int my) {
   LinkAction *action;
   char *s;
 
-  if (!doc)
+  if (!doc || doc->getNumPages() == 0)
     return;
   out->cvtDevToUser(mx, my, &x, &y);
   if ((action = doc->findLink(x, y))) {
@@ -1117,12 +1337,12 @@ static void mouseDragCbk(LTKWidget *widget, int widgetNum,
 //------------------------------------------------------------------------
 
 static void nextPageCbk(LTKWidget *button, int n, GBool on) {
-  if (!doc)
+  if (!doc || doc->getNumPages() == 0)
     return;
   if (page < doc->getNumPages()) {
     vScrollbar->setPos(0, canvas->getHeight());
     canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
-    displayPage(page + 1, zoom, rotate);
+    displayPage(page + 1, zoom, rotate, gTrue);
   } else {
     XBell(display, 0);
   }
@@ -1131,26 +1351,26 @@ static void nextPageCbk(LTKWidget *button, int n, GBool on) {
 static void nextTenPageCbk(LTKWidget *button, int n, GBool on) {
   int pg;
 
-  if (!doc)
+  if (!doc || doc->getNumPages() == 0)
     return;
   if (page < doc->getNumPages()) {
     vScrollbar->setPos(0, canvas->getHeight());
     canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
     if ((pg = page + 10) > doc->getNumPages())
       pg = doc->getNumPages();
-    displayPage(pg, zoom, rotate);
+    displayPage(pg, zoom, rotate, gTrue);
   } else {
     XBell(display, 0);
   }
 }
 
 static void prevPageCbk(LTKWidget *button, int n, GBool on) {
-  if (!doc)
+  if (!doc || doc->getNumPages() == 0)
     return;
   if (page > 1) {
     vScrollbar->setPos(0, canvas->getHeight());
     canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
-    displayPage(page - 1, zoom, rotate);
+    displayPage(page - 1, zoom, rotate, gTrue);
   } else {
     XBell(display, 0);
   }
@@ -1159,29 +1379,65 @@ static void prevPageCbk(LTKWidget *button, int n, GBool on) {
 static void prevTenPageCbk(LTKWidget *button, int n, GBool on) {
   int pg;
 
-  if (!doc)
+  if (!doc || doc->getNumPages() == 0)
     return;
   if (page > 1) {
     vScrollbar->setPos(0, canvas->getHeight());
     canvas->scroll(hScrollbar->getPos(), vScrollbar->getPos());
     if ((pg = page - 10) < 1)
       pg = 1;
-    displayPage(pg, zoom, rotate);
+    displayPage(pg, zoom, rotate, gTrue);
   } else {
     XBell(display, 0);
   }
 }
 
+static void backCbk(LTKWidget *button, int n, GBool on) {
+  if (historyBLen <= 1) {
+    XBell(display, 0);
+    return;
+  }
+  if (--historyCur < 0)
+    historyCur = historySize - 1;
+  --historyBLen;
+  ++historyFLen;
+  if (history[historyCur].fileName->cmp(doc->getFileName()) != 0) {
+    if (!loadFile(history[historyCur].fileName->copy())) {
+      XBell(display, 0);
+      return;
+    }
+  }
+  displayPage(history[historyCur].page, zoom, rotate, gFalse);
+}
+
+static void forwardCbk(LTKWidget *button, int n, GBool on) {
+  if (historyFLen == 0) {
+    XBell(display, 0);
+    return;
+  }
+  if (++historyCur == historySize)
+    historyCur = 0;
+  --historyFLen;
+  ++historyBLen;
+  if (history[historyCur].fileName->cmp(doc->getFileName()) != 0) {
+    if (!loadFile(history[historyCur].fileName->copy())) {
+      XBell(display, 0);
+      return;
+    }
+  }
+  displayPage(history[historyCur].page, zoom, rotate, gFalse);
+}
+
 static void pageNumCbk(LTKWidget *textIn, int n, GString *text) {
   int page1;
   char s[20];
 
-  if (!doc)
+  if (!doc || doc->getNumPages() == 0)
     return;
   page1 = atoi(text->getCString());
   if (page1 >= 1 && page1 <= doc->getNumPages()) {
     if (page1 != page)
-      displayPage(page1, zoom, rotate);
+      displayPage(page1, zoom, rotate, gTrue);
   } else {
     XBell(display, 0);
     sprintf(s, "%d", page);
@@ -1189,22 +1445,16 @@ static void pageNumCbk(LTKWidget *textIn, int n, GString *text) {
   }
 }
 
-static void zoomInCbk(LTKWidget *button, int n, GBool on) {
-  if (!doc)
-    return;
-  if (zoom < maxZoom)
-    displayPage(page, zoom + 1, rotate);
-  else
-    XBell(display, 0);
-}
+static void zoomMenuCbk(LTKMenuItem *item) {
+  int z;
 
-static void zoomOutCbk(LTKWidget *button, int n, GBool on) {
-  if (!doc)
+  if (!doc || doc->getNumPages() == 0) {
     return;
-  if (zoom > minZoom)
-    displayPage(page, zoom - 1, rotate);
-  else
-    XBell(display, 0);
+  }
+  z = item->getItemNum();
+  if (z != zoom) {
+    displayPage(page, z, rotate, gFalse);
+  }
 }
 
 static void postScriptCbk(LTKWidget *button, int n, GBool on) {
@@ -1240,6 +1490,14 @@ static void scrollHorizCbk(LTKWidget *scrollbar, int n, int val) {
 //------------------------------------------------------------------------
 
 static void layoutCbk(LTKWindow *win1) {
+  if (page >= 0 && (zoom == zoomPage || zoom == zoomWidth)) {
+    displayPage(page, zoom, rotate, gFalse);
+  } else {
+    updateScrollbars();
+  }
+}
+
+static void updateScrollbars() {
   hScrollbar->setLimits(0, canvas->getRealWidth() - 1);
   hScrollbar->setPos(hScrollbar->getPos(), canvas->getWidth());
   hScrollbar->setScrollDelta(16);
@@ -1290,7 +1548,7 @@ static void propChangeCbk(LTKWindow *win1, Atom atom) {
       delete newFileName;
     }
     if (newPage != page && newPage >= 1 && newPage <= doc->getNumPages())
-      displayPage(newPage, zoom, rotate);
+      displayPage(newPage, zoom, rotate, gTrue);
 
   // quit
   } else if (cmd[0] == 'q') {
@@ -1447,7 +1705,7 @@ static void openSelectCbk(LTKWidget *widget, int n, GString *name) {
     openDialog = NULL;
   }
   if (loadFile(name1))
-    displayPage(1, zoom, rotate);
+    displayPage(1, zoom, rotate, gTrue);
 }
 
 //------------------------------------------------------------------------
@@ -1557,10 +1815,11 @@ static void psButtonCbk(LTKWidget *button, int n, GBool on) {
       psOut = new PSOutputDev(psFileName->getCString(), doc->getCatalog(),
                              psFirstPage, psLastPage, gTrue, gFalse);
       if (psOut->isOk()) {
-       doc->displayPages(psOut, psFirstPage, psLastPage,
-                         zoomDPI[zoom - minZoom], rotate);
+       doc->displayPages(psOut, psFirstPage, psLastPage, 72, 0);
       }
       delete psOut;
+    } else {
+      error(-1, "Printing this document is not allowed.");
     }
 
     delete psDialog;
@@ -1596,7 +1855,7 @@ static void closeAboutCbk(LTKWidget *button, int n, GBool on) {
 //------------------------------------------------------------------------
 
 static void findCbk(LTKWidget *button, int n, GBool on) {
-  if (!doc)
+  if (!doc || doc->getNumPages() == 0)
     return;
   mapFindWin();
 }
@@ -1614,7 +1873,7 @@ static void mapFindWin() {
 static void findButtonCbk(LTKWidget *button, int n, GBool on) {
   LTKTextIn *textIn;
 
-  if (!doc)
+  if (!doc || doc->getNumPages() == 0)
     return;
   if (n == 1) {
     textIn = (LTKTextIn *)findWin->findWidget("text");
@@ -1656,7 +1915,7 @@ static void doFind(char *s) {
     goto found;
 
   // search following pages
-  textOut = new TextOutputDev(NULL, gFalse);
+  textOut = new TextOutputDev(NULL, useEUCJP, gFalse);
   if (!textOut->isOk()) {
     delete textOut;
     goto done;
@@ -1690,7 +1949,7 @@ static void doFind(char *s) {
   // found on a different page
  foundPage:
   delete textOut;
-  displayPage(pg, zoom, rotate);
+  displayPage(pg, zoom, rotate, gTrue);
   if (!out->findText(s, gTrue, gTrue, &xMin, &yMin, &xMax, &yMax))
     goto done; // this can happen if coalescing is bad
 
index 55afc9065be619f35990ea14efd90301baefc548..ac56a091efc00df5885dbd0859d6325873e6c422 100644 (file)
@@ -28,7 +28,11 @@ Window(func:makeWindow title:"xpdf" icon:xpdfIcon) {
     }
 
     # buttons, page number, etc.
-    Box(x:14 y:1 xfill:1) {
+    Box(x:15 y:1 xfill:1) {
+      Box1() {
+        IconButton(bitmap:backArrow_bits w:backArrow_width
+                   h:backArrow_height press:&backCbk)
+      }
       Box1() {
         IconButton(bitmap:dblLeftArrow_bits w:dblLeftArrow_width
                    h:dblLeftArrow_height press:&prevTenPageCbk)
@@ -45,6 +49,10 @@ Window(func:makeWindow title:"xpdf" icon:xpdfIcon) {
         IconButton(bitmap:dblRightArrow_bits w:dblRightArrow_width
                    h:dblRightArrow_height press:&nextTenPageCbk)
       }
+      Box1() {
+        IconButton(bitmap:forwardArrow_bits w:forwardArrow_width
+                   h:forwardArrow_height press:&forwardCbk)
+      }
       Box1() {
         Label(text:"Page"
               font:"-*-courier-medium-r-normal-*-14-*-*-*-*-*-*-*")
@@ -58,12 +66,7 @@ Window(func:makeWindow title:"xpdf" icon:xpdfIcon) {
               font:"-*-courier-medium-r-normal-*-14-*-*-*-*-*-*-*")
       }
       Box1() {
-        IconButton(bitmap:zoomIn_bits w:zoomIn_width
-                   h:zoomIn_height press:&zoomInCbk)
-      }
-      Box1() {
-        IconButton(bitmap:zoomOut_bits w:zoomOut_width
-                   h:zoomOut_height press:&zoomOutCbk)
+        MenuButton(name:"zoom" menu:zoomMenu)
       }
       Box1() {
         IconButton(bitmap:find_bits w:find_width
@@ -105,6 +108,27 @@ Menu(func:makeMenu title:"xpdf" n:7) {
            select:&menuCbk)
 }
 
+#------------------------------------------------------------------------
+# popup zoom menu
+#------------------------------------------------------------------------
+
+Menu(func:makeZoomMenu title:"zoom" n:14) {
+  MenuItem(text:"-5" num:-5 select:&zoomMenuCbk)
+  MenuItem(text:"-4" num:-4 select:&zoomMenuCbk)
+  MenuItem(text:"-3" num:-3 select:&zoomMenuCbk)
+  MenuItem(text:"-2" num:-2 select:&zoomMenuCbk)
+  MenuItem(text:"-1" num:-1 select:&zoomMenuCbk)
+  MenuItem(text:"0"  num: 0 select:&zoomMenuCbk)
+  MenuItem(text:"+1" num: 1 select:&zoomMenuCbk)
+  MenuItem(text:"+2" num: 2 select:&zoomMenuCbk)
+  MenuItem(text:"+3" num: 3 select:&zoomMenuCbk)
+  MenuItem(text:"+4" num: 4 select:&zoomMenuCbk)
+  MenuItem(text:"+5" num: 5 select:&zoomMenuCbk)
+  MenuItem(text:NULL)
+  MenuItem(text:"fit page"  num:100 select:&zoomMenuCbk)
+  MenuItem(text:"fit width" num:101 select:&zoomMenuCbk)
+}
+
 #------------------------------------------------------------------------
 # "PostScript output" dialog
 #------------------------------------------------------------------------
index 5353d03e0c01058b2a0715e31bc85732ac8a32de..9816a0800b859d06c835d2e713d674e90729fcb8 100644 (file)
 //------------------------------------------------------------------------
 
 // xpdf version
-#define xpdfVersion "0.80"
+#define xpdfVersion "0.90"
 
 // supported PDF version
-#define pdfVersion "1.2"
-#define pdfVersionNum 1.2
+#define pdfVersion "1.3"
+#define pdfVersionNum 1.3
 
 // copyright notice
-#define xpdfCopyright "Copyright \251 1996-1998 Derek B. Noonburg"
+#define xpdfCopyright "Copyright \251 1996-1999 Derek B. Noonburg"
 
 // default paper size (in points) for PostScript output
 #ifdef A4_PAPER
@@ -33,7 +33,7 @@
 #endif
 
 // config file name
-#if defined(VMS) || defined(__EMX__)
+#if defined(VMS)
 #define xpdfConfigFile "xpdfrc"
 #else
 #define xpdfConfigFile ".xpdfrc"
 // default maximum size of color cube to allocate
 #define defaultRGBCube 5
 
-// number of fonts to cache
-#define fontCacheSize 16
+// number of X server fonts to cache
+#define serverFontCacheSize 16
+
+// number of Type 1 (t1lib) fonts to cache
+#define t1FontCacheSize 32
 
 //------------------------------------------------------------------------
 // uncompress program