From dd68e93de7eb1c50cc5b5779497e03f491c90373 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Mon, 11 Jun 2012 18:04:17 +0300 Subject: Add the AGLFN tables generator, update the tables up to AGLFN 1.7 Task-number: QTBUG-21727 Change-Id: Ib2cacc2a52b2853059d6c873a33dcde735fbe168 Reviewed-by: Lars Knoll --- src/gui/text/qfontsubset.cpp | 179 +--------- src/gui/text/qfontsubset_agl.cpp | 285 ++++++++++++++++ util/aglfn/README | 1 + util/aglfn/aglfn.pro | 3 + util/aglfn/data/aglfn.txt | 697 +++++++++++++++++++++++++++++++++++++++ util/aglfn/main.cpp | 216 ++++++++++++ 6 files changed, 1206 insertions(+), 175 deletions(-) create mode 100644 src/gui/text/qfontsubset_agl.cpp create mode 100644 util/aglfn/README create mode 100644 util/aglfn/aglfn.pro create mode 100644 util/aglfn/data/aglfn.txt create mode 100644 util/aglfn/main.cpp diff --git a/src/gui/text/qfontsubset.cpp b/src/gui/text/qfontsubset.cpp index ae54c6653e..874ef692bf 100644 --- a/src/gui/text/qfontsubset.cpp +++ b/src/gui/text/qfontsubset.cpp @@ -38,188 +38,17 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -#include + #include "qfontsubset_p.h" +#include #include #include #include "private/qpdf_p.h" #include "private/qfunctions_p.h" -QT_BEGIN_NAMESPACE +#include "qfontsubset_agl.cpp" -static const char glyph_names[] = -".notdef\0space\0exclam\0quotedbl\0numbersign\0dollar\0percent\0ampersand\0" -"quotesingle\0parenleft\0parenright\0asterisk\0plus\0comma\0hyphen\0period\0" -"slash\0zero\0one\0two\0three\0four\0five\0six\0seven\0eight\0nine\0colon\0" -"semicolon\0less\0equal\0greater\0question\0at\0A\0B\0C\0D\0E\0F\0G\0H\0I\0J\0" -"K\0L\0M\0N\0O\0P\0Q\0R\0S\0T\0U\0V\0W\0X\0Y\0Z\0bracketleft\0backslash\0" -"bracketright\0asciicircum\0underscore\0grave\0a\0b\0c\0d\0e\0f\0g\0h\0i\0j\0" -"k\0l\0m\0n\0o\0p\0q\0r\0s\0t\0u\0v\0w\0x\0y\0z\0braceleft\0bar\0braceright\0" -"asciitilde\0space\0exclamdown\0cent\0sterling\0currency\0yen\0brokenbar\0" -"section\0dieresis\0copyright\0ordfeminine\0guillemotleft\0logicalnot\0" -"hyphen\0registered\0macron\0degree\0plusminus\0twosuperior\0threesuperior\0" -"acute\0mu\0paragraph\0periodcentered\0cedilla\0onesuperior\0ordmasculine\0" -"guillemotright\0onequarter\0onehalf\0threequarters\0questiondown\0Agrave\0" -"Aacute\0Acircumflex\0Atilde\0Adieresis\0Aring\0AE\0Ccedilla\0Egrave\0Eacute\0" -"Ecircumflex\0Edieresis\0Igrave\0Iacute\0Icircumflex\0Idieresis\0Eth\0Ntilde\0" -"Ograve\0Oacute\0Ocircumflex\0Otilde\0Odieresis\0multiply\0Oslash\0Ugrave\0" -"Uacute\0Ucircumflex\0Udieresis\0Yacute\0Thorn\0germandbls\0agrave\0aacute\0" -"acircumflex\0atilde\0adieresis\0aring\0ae\0ccedilla\0egrave\0eacute\0" -"ecircumflex\0edieresis\0igrave\0iacute\0icircumflex\0idieresis\0eth\0ntilde\0" -"ograve\0oacute\0ocircumflex\0otilde\0odieresis\0divide\0oslash\0ugrave\0" -"uacute\0ucircumflex\0udieresis\0yacute\0thorn\0ydieresis\0Amacron\0amacron\0" -"Abreve\0abreve\0Aogonek\0aogonek\0Cacute\0cacute\0Ccircumflex\0ccircumflex\0" -"Cdotaccent\0cdotaccent\0Ccaron\0ccaron\0Dcaron\0dcaron\0Dcroat\0dcroat\0" -"Emacron\0emacron\0Ebreve\0ebreve\0Edotaccent\0edotaccent\0Eogonek\0eogonek\0" -"Ecaron\0ecaron\0Gcircumflex\0gcircumflex\0Gbreve\0gbreve\0Gdotaccent\0" -"gdotaccent\0Gcommaaccent\0gcommaaccent\0Hcircumflex\0hcircumflex\0Hbar\0" -"hbar\0Itilde\0itilde\0Imacron\0imacron\0Ibreve\0ibreve\0Iogonek\0iogonek\0" -"Idotaccent\0dotlessi\0IJ\0ij\0Jcircumflex\0jcircumflex\0Kcommaaccent\0" -"kcommaaccent\0kgreenlandic\0Lacute\0lacute\0Lcommaaccent\0lcommaaccent\0" -"Lcaron\0lcaron\0Ldot\0ldot\0Lslash\0lslash\0Nacute\0nacute\0Ncommaaccent\0" -"ncommaaccent\0Ncaron\0ncaron\0napostrophe\0Eng\0eng\0Omacron\0omacron\0" -"Obreve\0obreve\0Ohungarumlaut\0ohungarumlaut\0OE\0oe\0Racute\0racute\0" -"Rcommaaccent\0rcommaaccent\0Rcaron\0rcaron\0Sacute\0sacute\0Scircumflex\0" -"scircumflex\0Scedilla\0scedilla\0Scaron\0scaron\0Tcaron\0tcaron\0Tbar\0tbar\0" -"Utilde\0utilde\0Umacron\0umacron\0Ubreve\0ubreve\0Uring\0uring\0" -"Uhungarumlaut\0uhungarumlaut\0Uogonek\0uogonek\0Wcircumflex\0wcircumflex\0" -"Ycircumflex\0ycircumflex\0Ydieresis\0Zacute\0zacute\0Zdotaccent\0zdotaccent\0" -"Zcaron\0zcaron\0longs\0florin\0Ohorn\0ohorn\0Uhorn\0uhorn\0Gcaron\0gcaron\0" -"Aringacute\0aringacute\0AEacute\0aeacute\0Oslashacute\0oslashacute\0" -"Scommaaccent\0scommaaccent\0Tcommaaccent\0tcommaaccent\0afii57929\0" -"afii64937\0circumflex\0caron\0breve\0dotaccent\0ring\0ogonek\0tilde\0" -"hungarumlaut\0gravecomb\0acutecomb\0tildecomb\0hookabovecomb\0dotbelowcomb\0" -"tonos\0dieresistonos\0Alphatonos\0anoteleia\0Epsilontonos\0Etatonos\0" -"Iotatonos\0Omicrontonos\0Upsilontonos\0Omegatonos\0iotadieresistonos\0Alpha\0" -"Beta\0Gamma\0Delta\0Epsilon\0Zeta\0Eta\0Theta\0Iota\0Kappa\0Lambda\0Mu\0Nu\0" -"Xi\0Omicron\0Pi\0Rho\0Sigma\0Tau\0Upsilon\0Phi\0Chi\0Psi\0Omega\0" -"Iotadieresis\0Upsilondieresis\0alphatonos\0epsilontonos\0etatonos\0" -"iotatonos\0upsilondieresistonos\0alpha\0beta\0gamma\0delta\0epsilon\0zeta\0" -"eta\0theta\0iota\0kappa\0lambda\0mu\0nu\0xi\0omicron\0pi\0rho\0sigma1\0" -"sigma\0tau\0upsilon\0phi\0chi\0psi\0omega\0iotadieresis\0upsilondieresis\0" -; - -struct AGLEntry { - unsigned short uc; - unsigned short index; -}; - -inline bool operator<(unsigned short uc, AGLEntry entry) -{ return uc < entry.uc; } -inline bool operator<(AGLEntry entry, unsigned short uc) -{ return entry.uc < uc; } - -static const AGLEntry unicode_to_agl_map[] = { - {0x0000, 0}, {0x0020, 8}, {0x0021, 14}, {0x0022, 21}, - {0x0023, 30}, {0x0024, 41}, {0x0025, 48}, {0x0026, 56}, - {0x0027, 66}, {0x0028, 78}, {0x0029, 88}, {0x002A, 99}, - {0x002B, 108}, {0x002C, 113}, {0x002D, 119}, {0x002E, 126}, - {0x002F, 133}, {0x0030, 139}, {0x0031, 144}, {0x0032, 148}, - {0x0033, 152}, {0x0034, 158}, {0x0035, 163}, {0x0036, 168}, - {0x0037, 172}, {0x0038, 178}, {0x0039, 184}, {0x003A, 189}, - {0x003B, 195}, {0x003C, 205}, {0x003D, 210}, {0x003E, 216}, - {0x003F, 224}, {0x0040, 233}, {0x0041, 236}, {0x0042, 238}, - {0x0043, 240}, {0x0044, 242}, {0x0045, 244}, {0x0046, 246}, - {0x0047, 248}, {0x0048, 250}, {0x0049, 252}, {0x004A, 254}, - {0x004B, 256}, {0x004C, 258}, {0x004D, 260}, {0x004E, 262}, - {0x004F, 264}, {0x0050, 266}, {0x0051, 268}, {0x0052, 270}, - {0x0053, 272}, {0x0054, 274}, {0x0055, 276}, {0x0056, 278}, - {0x0057, 280}, {0x0058, 282}, {0x0059, 284}, {0x005A, 286}, - {0x005B, 288}, {0x005C, 300}, {0x005D, 310}, {0x005E, 323}, - {0x005F, 335}, {0x0060, 346}, {0x0061, 352}, {0x0062, 354}, - {0x0063, 356}, {0x0064, 358}, {0x0065, 360}, {0x0066, 362}, - {0x0067, 364}, {0x0068, 366}, {0x0069, 368}, {0x006A, 370}, - {0x006B, 372}, {0x006C, 374}, {0x006D, 376}, {0x006E, 378}, - {0x006F, 380}, {0x0070, 382}, {0x0071, 384}, {0x0072, 386}, - {0x0073, 388}, {0x0074, 390}, {0x0075, 392}, {0x0076, 394}, - {0x0077, 396}, {0x0078, 398}, {0x0079, 400}, {0x007A, 402}, - {0x007B, 404}, {0x007C, 414}, {0x007D, 418}, {0x007E, 429}, - {0x00A0, 440}, {0x00A1, 446}, {0x00A2, 457}, {0x00A3, 462}, - {0x00A4, 471}, {0x00A5, 480}, {0x00A6, 484}, {0x00A7, 494}, - {0x00A8, 502}, {0x00A9, 511}, {0x00AA, 521}, {0x00AB, 533}, - {0x00AC, 547}, {0x00AD, 558}, {0x00AE, 565}, {0x00AF, 576}, - {0x00B0, 583}, {0x00B1, 590}, {0x00B2, 600}, {0x00B3, 612}, - {0x00B4, 626}, {0x00B5, 632}, {0x00B6, 635}, {0x00B7, 645}, - {0x00B8, 660}, {0x00B9, 668}, {0x00BA, 680}, {0x00BB, 693}, - {0x00BC, 708}, {0x00BD, 719}, {0x00BE, 727}, {0x00BF, 741}, - {0x00C0, 754}, {0x00C1, 761}, {0x00C2, 768}, {0x00C3, 780}, - {0x00C4, 787}, {0x00C5, 797}, {0x00C6, 803}, {0x00C7, 806}, - {0x00C8, 815}, {0x00C9, 822}, {0x00CA, 829}, {0x00CB, 841}, - {0x00CC, 851}, {0x00CD, 858}, {0x00CE, 865}, {0x00CF, 877}, - {0x00D0, 887}, {0x00D1, 891}, {0x00D2, 898}, {0x00D3, 905}, - {0x00D4, 912}, {0x00D5, 924}, {0x00D6, 931}, {0x00D7, 941}, - {0x00D8, 950}, {0x00D9, 957}, {0x00DA, 964}, {0x00DB, 971}, - {0x00DC, 983}, {0x00DD, 993}, {0x00DE, 1000}, {0x00DF, 1006}, - {0x00E0, 1017}, {0x00E1, 1024}, {0x00E2, 1031}, {0x00E3, 1043}, - {0x00E4, 1050}, {0x00E5, 1060}, {0x00E6, 1066}, {0x00E7, 1069}, - {0x00E8, 1078}, {0x00E9, 1085}, {0x00EA, 1092}, {0x00EB, 1104}, - {0x00EC, 1114}, {0x00ED, 1121}, {0x00EE, 1128}, {0x00EF, 1140}, - {0x00F0, 1150}, {0x00F1, 1154}, {0x00F2, 1161}, {0x00F3, 1168}, - {0x00F4, 1175}, {0x00F5, 1187}, {0x00F6, 1194}, {0x00F7, 1204}, - {0x00F8, 1211}, {0x00F9, 1218}, {0x00FA, 1225}, {0x00FB, 1232}, - {0x00FC, 1244}, {0x00FD, 1254}, {0x00FE, 1261}, {0x00FF, 1267}, - {0x0100, 1277}, {0x0101, 1285}, {0x0102, 1293}, {0x0103, 1300}, - {0x0104, 1307}, {0x0105, 1315}, {0x0106, 1323}, {0x0107, 1330}, - {0x0108, 1337}, {0x0109, 1349}, {0x010A, 1361}, {0x010B, 1372}, - {0x010C, 1383}, {0x010D, 1390}, {0x010E, 1397}, {0x010F, 1404}, - {0x0110, 1411}, {0x0111, 1418}, {0x0112, 1425}, {0x0113, 1433}, - {0x0114, 1441}, {0x0115, 1448}, {0x0116, 1455}, {0x0117, 1466}, - {0x0118, 1477}, {0x0119, 1485}, {0x011A, 1493}, {0x011B, 1500}, - {0x011C, 1507}, {0x011D, 1519}, {0x011E, 1531}, {0x011F, 1538}, - {0x0120, 1545}, {0x0121, 1556}, {0x0122, 1567}, {0x0123, 1580}, - {0x0124, 1593}, {0x0125, 1605}, {0x0126, 1617}, {0x0127, 1622}, - {0x0128, 1627}, {0x0129, 1634}, {0x012A, 1641}, {0x012B, 1649}, - {0x012C, 1657}, {0x012D, 1664}, {0x012E, 1671}, {0x012F, 1679}, - {0x0130, 1687}, {0x0131, 1698}, {0x0132, 1707}, {0x0133, 1710}, - {0x0134, 1713}, {0x0135, 1725}, {0x0136, 1737}, {0x0137, 1750}, - {0x0138, 1763}, {0x0139, 1776}, {0x013A, 1783}, {0x013B, 1790}, - {0x013C, 1803}, {0x013D, 1816}, {0x013E, 1823}, {0x013F, 1830}, - {0x0140, 1835}, {0x0141, 1840}, {0x0142, 1847}, {0x0143, 1854}, - {0x0144, 1861}, {0x0145, 1868}, {0x0146, 1881}, {0x0147, 1894}, - {0x0148, 1901}, {0x0149, 1908}, {0x014A, 1920}, {0x014B, 1924}, - {0x014C, 1928}, {0x014D, 1936}, {0x014E, 1944}, {0x014F, 1951}, - {0x0150, 1958}, {0x0151, 1972}, {0x0152, 1986}, {0x0153, 1989}, - {0x0154, 1992}, {0x0155, 1999}, {0x0156, 2006}, {0x0157, 2019}, - {0x0158, 2032}, {0x0159, 2039}, {0x015A, 2046}, {0x015B, 2053}, - {0x015C, 2060}, {0x015D, 2072}, {0x015E, 2084}, {0x015F, 2093}, - {0x0160, 2102}, {0x0161, 2109}, {0x0164, 2116}, {0x0165, 2123}, - {0x0166, 2130}, {0x0167, 2135}, {0x0168, 2140}, {0x0169, 2147}, - {0x016A, 2154}, {0x016B, 2162}, {0x016C, 2170}, {0x016D, 2177}, - {0x016E, 2184}, {0x016F, 2190}, {0x0170, 2196}, {0x0171, 2210}, - {0x0172, 2224}, {0x0173, 2232}, {0x0174, 2240}, {0x0175, 2252}, - {0x0176, 2264}, {0x0177, 2276}, {0x0178, 2288}, {0x0179, 2298}, - {0x017A, 2305}, {0x017B, 2312}, {0x017C, 2323}, {0x017D, 2334}, - {0x017E, 2341}, {0x017F, 2348}, {0x0192, 2354}, {0x01A0, 2361}, - {0x01A1, 2367}, {0x01AF, 2373}, {0x01B0, 2379}, {0x01E6, 2385}, - {0x01E7, 2392}, {0x01FA, 2399}, {0x01FB, 2410}, {0x01FC, 2421}, - {0x01FD, 2429}, {0x01FE, 2437}, {0x01FF, 2449}, {0x0218, 2461}, - {0x0219, 2474}, {0x021A, 2487}, {0x021B, 2500}, {0x02BC, 2513}, - {0x02BD, 2523}, {0x02C6, 2533}, {0x02C7, 2544}, {0x02D8, 2550}, - {0x02D9, 2556}, {0x02DA, 2566}, {0x02DB, 2571}, {0x02DC, 2578}, - {0x02DD, 2584}, {0x0300, 2597}, {0x0301, 2607}, {0x0303, 2617}, - {0x0309, 2627}, {0x0323, 2641}, {0x0384, 2654}, {0x0385, 2660}, - {0x0386, 2674}, {0x0387, 2685}, {0x0388, 2695}, {0x0389, 2708}, - {0x038A, 2717}, {0x038C, 2727}, {0x038E, 2740}, {0x038F, 2753}, - {0x0390, 2764}, {0x0391, 2782}, {0x0392, 2788}, {0x0393, 2793}, - {0x0394, 2799}, {0x0395, 2805}, {0x0396, 2813}, {0x0397, 2818}, - {0x0398, 2822}, {0x0399, 2828}, {0x039A, 2833}, {0x039B, 2839}, - {0x039C, 2846}, {0x039D, 2849}, {0x039E, 2852}, {0x039F, 2855}, - {0x03A0, 2863}, {0x03A1, 2866}, {0x03A3, 2870}, {0x03A4, 2876}, - {0x03A5, 2880}, {0x03A6, 2888}, {0x03A7, 2892}, {0x03A8, 2896}, - {0x03A9, 2900}, {0x03AA, 2906}, {0x03AB, 2919}, {0x03AC, 2935}, - {0x03AD, 2946}, {0x03AE, 2959}, {0x03AF, 2968}, {0x03B0, 2978}, - {0x03B1, 2999}, {0x03B2, 3005}, {0x03B3, 3010}, {0x03B4, 3016}, - {0x03B5, 3022}, {0x03B6, 3030}, {0x03B7, 3035}, {0x03B8, 3039}, - {0x03B9, 3045}, {0x03BA, 3050}, {0x03BB, 3056}, {0x03BC, 3063}, - {0x03BD, 3066}, {0x03BE, 3069}, {0x03BF, 3072}, {0x03C0, 3080}, - {0x03C1, 3083}, {0x03C2, 3087}, {0x03C3, 3094}, {0x03C4, 3100}, - {0x03C5, 3104}, {0x03C6, 3112}, {0x03C7, 3116}, {0x03C8, 3120}, - {0x03C9, 3124}, {0x03CA, 3130}, {0x03CB, 3143}, {0x03CC, 3159}, - {0x03CD, 3172}, {0x03CE, 3185}, {0x03D1, 3196}, {0x03D2, 3203}, - {0x03D5, 3212}, {0x03D6, 3217} -}; - -enum { unicode_to_agl_map_size = sizeof(unicode_to_agl_map) / sizeof(unicode_to_agl_map[0]) }; +QT_BEGIN_NAMESPACE // This map is used for symbol fonts to get the correct glyph names for the latin range static const unsigned short symbol_map[0x100] = { diff --git a/src/gui/text/qfontsubset_agl.cpp b/src/gui/text/qfontsubset_agl.cpp new file mode 100644 index 0000000000..dc2192b9c4 --- /dev/null +++ b/src/gui/text/qfontsubset_agl.cpp @@ -0,0 +1,285 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* This file is autogenerated from the Adobe Glyph List database v1.7. Do not edit */ + +namespace { + +static const char glyph_names[] = +".notdef\0A\0AE\0AEacute\0Aacute\0Abreve\0Acircumflex\0Adieresis\0Agrave\0" +"Alpha\0Alphatonos\0Amacron\0Aogonek\0Aring\0Aringacute\0Atilde\0B\0Beta\0C\0" +"Cacute\0Ccaron\0Ccedilla\0Ccircumflex\0Cdotaccent\0Chi\0D\0Dcaron\0Dcroat\0" +"Delta\0E\0Eacute\0Ebreve\0Ecaron\0Ecircumflex\0Edieresis\0Edotaccent\0" +"Egrave\0Emacron\0Eng\0Eogonek\0Epsilon\0Epsilontonos\0Eta\0Etatonos\0Eth\0" +"Euro\0F\0G\0Gamma\0Gbreve\0Gcaron\0Gcircumflex\0Gdotaccent\0H\0H18533\0" +"H18543\0H18551\0H22073\0Hbar\0Hcircumflex\0I\0IJ\0Iacute\0Ibreve\0" +"Icircumflex\0Idieresis\0Idotaccent\0Ifraktur\0Igrave\0Imacron\0Iogonek\0" +"Iota\0Iotadieresis\0Iotatonos\0Itilde\0J\0Jcircumflex\0K\0Kappa\0L\0Lacute\0" +"Lambda\0Lcaron\0Ldot\0Lslash\0M\0Mu\0N\0Nacute\0Ncaron\0Ntilde\0Nu\0O\0OE\0" +"Oacute\0Obreve\0Ocircumflex\0Odieresis\0Ograve\0Ohorn\0Ohungarumlaut\0" +"Omacron\0Omega\0Omegatonos\0Omicron\0Omicrontonos\0Oslash\0Oslashacute\0" +"Otilde\0P\0Phi\0Pi\0Psi\0Q\0R\0Racute\0Rcaron\0Rfraktur\0Rho\0S\0SF010000\0" +"SF020000\0SF030000\0SF040000\0SF050000\0SF060000\0SF070000\0SF080000\0" +"SF090000\0SF100000\0SF110000\0SF190000\0SF200000\0SF210000\0SF220000\0" +"SF230000\0SF240000\0SF250000\0SF260000\0SF270000\0SF280000\0SF360000\0" +"SF370000\0SF380000\0SF390000\0SF400000\0SF410000\0SF420000\0SF430000\0" +"SF440000\0SF450000\0SF460000\0SF470000\0SF480000\0SF490000\0SF500000\0" +"SF510000\0SF520000\0SF530000\0SF540000\0Sacute\0Scaron\0Scedilla\0" +"Scircumflex\0Sigma\0T\0Tau\0Tbar\0Tcaron\0Theta\0Thorn\0U\0Uacute\0Ubreve\0" +"Ucircumflex\0Udieresis\0Ugrave\0Uhorn\0Uhungarumlaut\0Umacron\0Uogonek\0" +"Upsilon\0Upsilon1\0Upsilondieresis\0Upsilontonos\0Uring\0Utilde\0V\0W\0" +"Wacute\0Wcircumflex\0Wdieresis\0Wgrave\0X\0Xi\0Y\0Yacute\0Ycircumflex\0" +"Ydieresis\0Ygrave\0Z\0Zacute\0Zcaron\0Zdotaccent\0Zeta\0a\0aacute\0abreve\0" +"acircumflex\0acute\0acutecomb\0adieresis\0ae\0aeacute\0agrave\0aleph\0alpha\0" +"alphatonos\0amacron\0ampersand\0angle\0angleleft\0angleright\0anoteleia\0" +"aogonek\0approxequal\0aring\0aringacute\0arrowboth\0arrowdblboth\0" +"arrowdbldown\0arrowdblleft\0arrowdblright\0arrowdblup\0arrowdown\0arrowleft\0" +"arrowright\0arrowup\0arrowupdn\0arrowupdnbse\0asciicircum\0asciitilde\0" +"asterisk\0asteriskmath\0at\0atilde\0b\0backslash\0bar\0beta\0block\0" +"braceleft\0braceright\0bracketleft\0bracketright\0breve\0brokenbar\0bullet\0" +"c\0cacute\0caron\0carriagereturn\0ccaron\0ccedilla\0ccircumflex\0cdotaccent\0" +"cedilla\0cent\0chi\0circle\0circlemultiply\0circleplus\0circumflex\0club\0" +"colon\0colonmonetary\0comma\0congruent\0copyright\0currency\0d\0dagger\0" +"daggerdbl\0dcaron\0dcroat\0degree\0delta\0diamond\0dieresis\0dieresistonos\0" +"divide\0dkshade\0dnblock\0dollar\0dong\0dotaccent\0dotbelowcomb\0dotlessi\0" +"dotmath\0e\0eacute\0ebreve\0ecaron\0ecircumflex\0edieresis\0edotaccent\0" +"egrave\0eight\0element\0ellipsis\0emacron\0emdash\0emptyset\0endash\0eng\0" +"eogonek\0epsilon\0epsilontonos\0equal\0equivalence\0estimated\0eta\0" +"etatonos\0eth\0exclam\0exclamdbl\0exclamdown\0existential\0f\0female\0" +"figuredash\0filledbox\0filledrect\0five\0fiveeighths\0florin\0four\0" +"fraction\0franc\0g\0gamma\0gbreve\0gcaron\0gcircumflex\0gdotaccent\0" +"germandbls\0gradient\0grave\0gravecomb\0greater\0greaterequal\0" +"guillemotleft\0guillemotright\0guilsinglleft\0guilsinglright\0h\0hbar\0" +"hcircumflex\0heart\0hookabovecomb\0house\0hungarumlaut\0hyphen\0i\0iacute\0" +"ibreve\0icircumflex\0idieresis\0igrave\0ij\0imacron\0infinity\0integral\0" +"integralbt\0integraltp\0intersection\0invbullet\0invcircle\0invsmileface\0" +"iogonek\0iota\0iotadieresis\0iotadieresistonos\0iotatonos\0itilde\0j\0" +"jcircumflex\0k\0kappa\0kgreenlandic\0l\0lacute\0lambda\0lcaron\0ldot\0less\0" +"lessequal\0lfblock\0lira\0logicaland\0logicalnot\0logicalor\0longs\0lozenge\0" +"lslash\0ltshade\0m\0macron\0male\0minus\0minute\0mu\0multiply\0musicalnote\0" +"musicalnotedbl\0n\0nacute\0napostrophe\0ncaron\0nine\0notelement\0notequal\0" +"notsubset\0ntilde\0nu\0numbersign\0o\0oacute\0obreve\0ocircumflex\0" +"odieresis\0oe\0ogonek\0ograve\0ohorn\0ohungarumlaut\0omacron\0omega\0omega1\0" +"omegatonos\0omicron\0omicrontonos\0one\0onedotenleader\0oneeighth\0onehalf\0" +"onequarter\0onethird\0openbullet\0ordfeminine\0ordmasculine\0orthogonal\0" +"oslash\0oslashacute\0otilde\0p\0paragraph\0parenleft\0parenright\0" +"partialdiff\0percent\0period\0periodcentered\0perpendicular\0perthousand\0" +"peseta\0phi\0phi1\0pi\0plus\0plusminus\0prescription\0product\0propersubset\0" +"propersuperset\0proportional\0psi\0q\0question\0questiondown\0quotedbl\0" +"quotedblbase\0quotedblleft\0quotedblright\0quoteleft\0quotereversed\0" +"quoteright\0quotesinglbase\0quotesingle\0r\0racute\0radical\0rcaron\0" +"reflexsubset\0reflexsuperset\0registered\0revlogicalnot\0rho\0ring\0rtblock\0" +"s\0sacute\0scaron\0scedilla\0scircumflex\0second\0section\0semicolon\0seven\0" +"seveneighths\0shade\0sigma\0sigma1\0similar\0six\0slash\0smileface\0space\0" +"spade\0sterling\0suchthat\0summation\0sun\0t\0tau\0tbar\0tcaron\0therefore\0" +"theta\0theta1\0thorn\0three\0threeeighths\0threequarters\0tilde\0tildecomb\0" +"tonos\0trademark\0triagdn\0triaglf\0triagrt\0triagup\0two\0twodotenleader\0" +"twothirds\0u\0uacute\0ubreve\0ucircumflex\0udieresis\0ugrave\0uhorn\0" +"uhungarumlaut\0umacron\0underscore\0underscoredbl\0union\0universal\0" +"uogonek\0upblock\0upsilon\0upsilondieresis\0upsilondieresistonos\0" +"upsilontonos\0uring\0utilde\0v\0w\0wacute\0wcircumflex\0wdieresis\0" +"weierstrass\0wgrave\0x\0xi\0y\0yacute\0ycircumflex\0ydieresis\0yen\0ygrave\0" +"z\0zacute\0zcaron\0zdotaccent\0zero\0zeta\0" +; + +struct AGLEntry { + unsigned short uc; + unsigned short index; +}; + +inline bool operator<(unsigned short uc, AGLEntry entry) +{ return uc < entry.uc; } +inline bool operator<(AGLEntry entry, unsigned short uc) +{ return entry.uc < uc; } + +static const AGLEntry unicode_to_agl_map[] = { + { 0x0000, 0 }, { 0x0020, 4183 }, { 0x0021, 2512 }, { 0x0022, 3850 }, + { 0x0023, 3356 }, { 0x0024, 2265 }, { 0x0025, 3670 }, { 0x0026, 1604 }, + { 0x0027, 3949 }, { 0x0028, 3637 }, { 0x0029, 3647 }, { 0x002a, 1847 }, + { 0x002b, 3745 }, { 0x002c, 2130 }, { 0x002d, 2855 }, { 0x002e, 3678 }, + { 0x002f, 4167 }, { 0x0030, 4727 }, { 0x0031, 3495 }, { 0x0032, 4371 }, + { 0x0033, 4274 }, { 0x0034, 2617 }, { 0x0035, 2593 }, { 0x0036, 4163 }, + { 0x0037, 4117 }, { 0x0038, 2380 }, { 0x0039, 3311 }, { 0x003a, 2110 }, + { 0x003b, 4107 }, { 0x003c, 3128 }, { 0x003d, 2467 }, { 0x003e, 2718 }, + { 0x003f, 3828 }, { 0x0040, 1869 }, { 0x0041, 8 }, { 0x0042, 121 }, + { 0x0043, 128 }, { 0x0044, 180 }, { 0x0045, 202 }, { 0x0046, 328 }, + { 0x0047, 330 }, { 0x0048, 375 }, { 0x0049, 422 }, { 0x004a, 541 }, + { 0x004b, 555 }, { 0x004c, 563 }, { 0x004d, 598 }, { 0x004e, 603 }, + { 0x004f, 629 }, { 0x0050, 769 }, { 0x0051, 782 }, { 0x0052, 784 }, + { 0x0053, 813 }, { 0x0054, 1216 }, { 0x0055, 1246 }, { 0x0056, 1386 }, + { 0x0057, 1388 }, { 0x0058, 1426 }, { 0x0059, 1431 }, { 0x005a, 1469 }, + { 0x005b, 1927 }, { 0x005c, 1881 }, { 0x005d, 1939 }, { 0x005e, 1824 }, + { 0x005f, 4473 }, { 0x0060, 2702 }, { 0x0061, 1501 }, { 0x0062, 1879 }, + { 0x0063, 1975 }, { 0x0064, 2165 }, { 0x0065, 2317 }, { 0x0066, 2552 }, + { 0x0067, 2637 }, { 0x0068, 2797 }, { 0x0069, 2862 }, { 0x006a, 3065 }, + { 0x006b, 3079 }, { 0x006c, 3100 }, { 0x006d, 3217 }, { 0x006e, 3283 }, + { 0x006f, 3367 }, { 0x0070, 3625 }, { 0x0071, 3826 }, { 0x0072, 3961 }, + { 0x0073, 4055 }, { 0x0074, 4227 }, { 0x0075, 4400 }, { 0x0076, 4601 }, + { 0x0077, 4603 }, { 0x0078, 4653 }, { 0x0079, 4658 }, { 0x007a, 4700 }, + { 0x007b, 1906 }, { 0x007c, 1891 }, { 0x007d, 1916 }, { 0x007e, 1836 }, + { 0x00a1, 2529 }, { 0x00a2, 2052 }, { 0x00a3, 4195 }, { 0x00a4, 2156 }, + { 0x00a5, 4689 }, { 0x00a6, 1958 }, { 0x00a7, 4099 }, { 0x00a8, 2219 }, + { 0x00a9, 2146 }, { 0x00aa, 3563 }, { 0x00ab, 2739 }, { 0x00ac, 3167 }, + { 0x00ae, 4013 }, { 0x00af, 3219 }, { 0x00b0, 2198 }, { 0x00b1, 3750 }, + { 0x00b4, 1529 }, { 0x00b5, 3244 }, { 0x00b6, 3627 }, { 0x00b7, 3685 }, + { 0x00b8, 2044 }, { 0x00ba, 3575 }, { 0x00bb, 2753 }, { 0x00bc, 3532 }, + { 0x00bd, 3524 }, { 0x00be, 4293 }, { 0x00bf, 3837 }, { 0x00c0, 57 }, + { 0x00c1, 21 }, { 0x00c2, 35 }, { 0x00c3, 114 }, { 0x00c4, 47 }, + { 0x00c5, 97 }, { 0x00c6, 10 }, { 0x00c7, 144 }, { 0x00c8, 258 }, + { 0x00c9, 204 }, { 0x00ca, 225 }, { 0x00cb, 237 }, { 0x00cc, 483 }, + { 0x00cd, 427 }, { 0x00ce, 441 }, { 0x00cf, 453 }, { 0x00d0, 319 }, + { 0x00d1, 619 }, { 0x00d2, 670 }, { 0x00d3, 634 }, { 0x00d4, 648 }, + { 0x00d5, 762 }, { 0x00d6, 660 }, { 0x00d7, 3247 }, { 0x00d8, 743 }, + { 0x00d9, 1284 }, { 0x00da, 1248 }, { 0x00db, 1262 }, { 0x00dc, 1274 }, + { 0x00dd, 1433 }, { 0x00de, 1240 }, { 0x00df, 2682 }, { 0x00e0, 1566 }, + { 0x00e1, 1503 }, { 0x00e2, 1517 }, { 0x00e3, 1872 }, { 0x00e4, 1545 }, + { 0x00e5, 1671 }, { 0x00e6, 1555 }, { 0x00e7, 2012 }, { 0x00e8, 2373 }, + { 0x00e9, 2319 }, { 0x00ea, 2340 }, { 0x00eb, 2352 }, { 0x00ec, 2900 }, + { 0x00ed, 2864 }, { 0x00ee, 2878 }, { 0x00ef, 2890 }, { 0x00f0, 2508 }, + { 0x00f1, 3346 }, { 0x00f2, 3415 }, { 0x00f3, 3369 }, { 0x00f4, 3383 }, + { 0x00f5, 3618 }, { 0x00f6, 3395 }, { 0x00f7, 2242 }, { 0x00f8, 3599 }, + { 0x00f9, 4438 }, { 0x00fa, 4402 }, { 0x00fb, 4416 }, { 0x00fc, 4428 }, + { 0x00fd, 4660 }, { 0x00fe, 4268 }, { 0x00ff, 4679 }, { 0x0100, 81 }, + { 0x0101, 1596 }, { 0x0102, 28 }, { 0x0103, 1510 }, { 0x0104, 89 }, + { 0x0105, 1651 }, { 0x0106, 130 }, { 0x0107, 1977 }, { 0x0108, 153 }, + { 0x0109, 2021 }, { 0x010a, 165 }, { 0x010b, 2033 }, { 0x010c, 137 }, + { 0x010d, 2005 }, { 0x010e, 182 }, { 0x010f, 2184 }, { 0x0110, 189 }, + { 0x0111, 2191 }, { 0x0112, 265 }, { 0x0113, 2403 }, { 0x0114, 211 }, + { 0x0115, 2326 }, { 0x0116, 247 }, { 0x0117, 2362 }, { 0x0118, 277 }, + { 0x0119, 2438 }, { 0x011a, 218 }, { 0x011b, 2333 }, { 0x011c, 352 }, + { 0x011d, 2659 }, { 0x011e, 338 }, { 0x011f, 2645 }, { 0x0120, 364 }, + { 0x0121, 2671 }, { 0x0124, 410 }, { 0x0125, 2804 }, { 0x0126, 405 }, + { 0x0127, 2799 }, { 0x0128, 534 }, { 0x0129, 3058 }, { 0x012a, 490 }, + { 0x012b, 2910 }, { 0x012c, 434 }, { 0x012d, 2871 }, { 0x012e, 498 }, + { 0x012f, 3004 }, { 0x0130, 463 }, { 0x0131, 2300 }, { 0x0132, 424 }, + { 0x0133, 2907 }, { 0x0134, 543 }, { 0x0135, 3067 }, { 0x0138, 3087 }, + { 0x0139, 565 }, { 0x013a, 3102 }, { 0x013d, 579 }, { 0x013e, 3116 }, + { 0x013f, 586 }, { 0x0140, 3123 }, { 0x0141, 591 }, { 0x0142, 3202 }, + { 0x0143, 605 }, { 0x0144, 3285 }, { 0x0147, 612 }, { 0x0148, 3304 }, + { 0x0149, 3292 }, { 0x014a, 273 }, { 0x014b, 2434 }, { 0x014c, 697 }, + { 0x014d, 3442 }, { 0x014e, 641 }, { 0x014f, 3376 }, { 0x0150, 683 }, + { 0x0151, 3428 }, { 0x0152, 631 }, { 0x0153, 3405 }, { 0x0154, 786 }, + { 0x0155, 3963 }, { 0x0158, 793 }, { 0x0159, 3978 }, { 0x015a, 1175 }, + { 0x015b, 4057 }, { 0x015c, 1198 }, { 0x015d, 4080 }, { 0x015e, 1189 }, + { 0x015f, 4071 }, { 0x0160, 1182 }, { 0x0161, 4064 }, { 0x0164, 1227 }, + { 0x0165, 4238 }, { 0x0166, 1222 }, { 0x0167, 4233 }, { 0x0168, 1379 }, + { 0x0169, 4594 }, { 0x016a, 1311 }, { 0x016b, 4465 }, { 0x016c, 1255 }, + { 0x016d, 4409 }, { 0x016e, 1373 }, { 0x016f, 4588 }, { 0x0170, 1297 }, + { 0x0171, 4451 }, { 0x0172, 1319 }, { 0x0173, 4514 }, { 0x0174, 1397 }, + { 0x0175, 4612 }, { 0x0176, 1440 }, { 0x0177, 4667 }, { 0x0178, 1452 }, + { 0x0179, 1471 }, { 0x017a, 4702 }, { 0x017b, 1485 }, { 0x017c, 4716 }, + { 0x017d, 1478 }, { 0x017e, 4709 }, { 0x017f, 3188 }, { 0x0192, 2610 }, + { 0x01a0, 677 }, { 0x01a1, 3422 }, { 0x01af, 1291 }, { 0x01b0, 4445 }, + { 0x01e6, 345 }, { 0x01e7, 2652 }, { 0x01fa, 103 }, { 0x01fb, 1677 }, + { 0x01fc, 13 }, { 0x01fd, 1558 }, { 0x01fe, 750 }, { 0x01ff, 3606 }, + { 0x02c6, 2094 }, { 0x02c7, 1984 }, { 0x02d8, 1952 }, { 0x02d9, 2277 }, + { 0x02da, 4042 }, { 0x02db, 3408 }, { 0x02dc, 4307 }, { 0x02dd, 2842 }, + { 0x0300, 2708 }, { 0x0301, 1535 }, { 0x0303, 4313 }, { 0x0309, 2822 }, + { 0x0323, 2287 }, { 0x0384, 4323 }, { 0x0385, 2228 }, { 0x0386, 70 }, + { 0x0387, 1641 }, { 0x0388, 293 }, { 0x0389, 310 }, { 0x038a, 524 }, + { 0x038c, 730 }, { 0x038e, 1360 }, { 0x038f, 711 }, { 0x0390, 3030 }, + { 0x0391, 64 }, { 0x0392, 123 }, { 0x0393, 332 }, { 0x0395, 285 }, + { 0x0396, 1496 }, { 0x0397, 306 }, { 0x0398, 1234 }, { 0x0399, 506 }, + { 0x039a, 557 }, { 0x039b, 572 }, { 0x039c, 600 }, { 0x039d, 626 }, + { 0x039e, 1428 }, { 0x039f, 722 }, { 0x03a0, 775 }, { 0x03a1, 809 }, + { 0x03a3, 1210 }, { 0x03a4, 1218 }, { 0x03a5, 1327 }, { 0x03a6, 771 }, + { 0x03a7, 176 }, { 0x03a8, 778 }, { 0x03aa, 511 }, { 0x03ab, 1344 }, + { 0x03ac, 1585 }, { 0x03ad, 2454 }, { 0x03ae, 2499 }, { 0x03af, 3048 }, + { 0x03b0, 4554 }, { 0x03b1, 1579 }, { 0x03b2, 1895 }, { 0x03b3, 2639 }, + { 0x03b4, 2205 }, { 0x03b5, 2446 }, { 0x03b6, 4732 }, { 0x03b7, 2495 }, + { 0x03b8, 4255 }, { 0x03b9, 3012 }, { 0x03ba, 3081 }, { 0x03bb, 3109 }, + { 0x03bd, 3353 }, { 0x03be, 4655 }, { 0x03bf, 3474 }, { 0x03c0, 3742 }, + { 0x03c1, 4038 }, { 0x03c2, 4148 }, { 0x03c3, 4142 }, { 0x03c4, 4229 }, + { 0x03c5, 4530 }, { 0x03c6, 3733 }, { 0x03c7, 2057 }, { 0x03c8, 3822 }, + { 0x03c9, 3450 }, { 0x03ca, 3017 }, { 0x03cb, 4538 }, { 0x03cc, 3482 }, + { 0x03cd, 4575 }, { 0x03ce, 3463 }, { 0x03d1, 4261 }, { 0x03d2, 1335 }, + { 0x03d5, 3737 }, { 0x03d6, 3456 }, { 0x1e80, 1419 }, { 0x1e81, 4646 }, + { 0x1e82, 1390 }, { 0x1e83, 4605 }, { 0x1e84, 1409 }, { 0x1e85, 4624 }, + { 0x1ef2, 1462 }, { 0x1ef3, 4693 }, { 0x2012, 2561 }, { 0x2013, 2427 }, + { 0x2014, 2411 }, { 0x2017, 4484 }, { 0x2018, 3899 }, { 0x2019, 3923 }, + { 0x201a, 3934 }, { 0x201b, 3909 }, { 0x201c, 3872 }, { 0x201d, 3885 }, + { 0x201e, 3859 }, { 0x2020, 2167 }, { 0x2021, 2174 }, { 0x2022, 1968 }, + { 0x2024, 3499 }, { 0x2025, 4375 }, { 0x2026, 2394 }, { 0x2030, 3714 }, + { 0x2032, 3237 }, { 0x2033, 4092 }, { 0x2039, 2768 }, { 0x203a, 2782 }, + { 0x203c, 2519 }, { 0x2044, 2622 }, { 0x20a1, 2116 }, { 0x20a3, 2631 }, + { 0x20a4, 3151 }, { 0x20a7, 3726 }, { 0x20ab, 2272 }, { 0x20ac, 323 }, + { 0x2111, 474 }, { 0x2118, 4634 }, { 0x211c, 800 }, { 0x211e, 3760 }, + { 0x2122, 4329 }, { 0x2126, 705 }, { 0x212e, 2485 }, { 0x2135, 1573 }, + { 0x2153, 3543 }, { 0x2154, 4390 }, { 0x215b, 3514 }, { 0x215c, 4280 }, + { 0x215d, 2598 }, { 0x215e, 4123 }, { 0x2190, 1772 }, { 0x2191, 1793 }, + { 0x2192, 1782 }, { 0x2193, 1762 }, { 0x2194, 1688 }, { 0x2195, 1801 }, + { 0x21a8, 1811 }, { 0x21b5, 1990 }, { 0x21d0, 1724 }, { 0x21d1, 1751 }, + { 0x21d2, 1737 }, { 0x21d3, 1711 }, { 0x21d4, 1698 }, { 0x2200, 4504 }, + { 0x2202, 3658 }, { 0x2203, 2540 }, { 0x2205, 2418 }, { 0x2206, 196 }, + { 0x2207, 2693 }, { 0x2208, 2386 }, { 0x2209, 3316 }, { 0x220b, 4204 }, + { 0x220f, 3773 }, { 0x2211, 4213 }, { 0x2212, 3231 }, { 0x2217, 1856 }, + { 0x221a, 3970 }, { 0x221d, 3809 }, { 0x221e, 2918 }, { 0x221f, 3588 }, + { 0x2220, 1614 }, { 0x2227, 3156 }, { 0x2228, 3178 }, { 0x2229, 2958 }, + { 0x222a, 4498 }, { 0x222b, 2927 }, { 0x2234, 4245 }, { 0x223c, 4155 }, + { 0x2245, 2136 }, { 0x2248, 1659 }, { 0x2260, 3327 }, { 0x2261, 2473 }, + { 0x2264, 3133 }, { 0x2265, 2726 }, { 0x2282, 3781 }, { 0x2283, 3794 }, + { 0x2284, 3336 }, { 0x2286, 3985 }, { 0x2287, 3998 }, { 0x2295, 2083 }, + { 0x2297, 2068 }, { 0x22a5, 3700 }, { 0x22c5, 2309 }, { 0x2302, 2836 }, + { 0x2310, 4024 }, { 0x2320, 2947 }, { 0x2321, 2936 }, { 0x2329, 1620 }, + { 0x232a, 1630 }, { 0x2500, 896 }, { 0x2502, 905 }, { 0x250c, 815 }, + { 0x2510, 833 }, { 0x2514, 824 }, { 0x2518, 842 }, { 0x251c, 878 }, + { 0x2524, 887 }, { 0x252c, 860 }, { 0x2534, 869 }, { 0x253c, 851 }, + { 0x2550, 1067 }, { 0x2551, 959 }, { 0x2552, 1139 }, { 0x2553, 1148 }, + { 0x2554, 1031 }, { 0x2555, 941 }, { 0x2556, 932 }, { 0x2557, 968 }, + { 0x2558, 1130 }, { 0x2559, 1121 }, { 0x255a, 1022 }, { 0x255b, 995 }, + { 0x255c, 986 }, { 0x255d, 977 }, { 0x255e, 1004 }, { 0x255f, 1013 }, + { 0x2560, 1058 }, { 0x2561, 914 }, { 0x2562, 923 }, { 0x2563, 950 }, + { 0x2564, 1103 }, { 0x2565, 1112 }, { 0x2566, 1049 }, { 0x2567, 1085 }, + { 0x2568, 1094 }, { 0x2569, 1040 }, { 0x256a, 1166 }, { 0x256b, 1157 }, + { 0x256c, 1076 }, { 0x2580, 4522 }, { 0x2584, 2257 }, { 0x2588, 1900 }, + { 0x258c, 3143 }, { 0x2590, 4047 }, { 0x2591, 3209 }, { 0x2592, 4136 }, + { 0x2593, 2249 }, { 0x25a0, 2572 }, { 0x25a1, 398 }, { 0x25aa, 384 }, + { 0x25ab, 391 }, { 0x25ac, 2582 }, { 0x25b2, 4363 }, { 0x25ba, 4355 }, + { 0x25bc, 4339 }, { 0x25c4, 4347 }, { 0x25ca, 3194 }, { 0x25cb, 2061 }, + { 0x25cf, 377 }, { 0x25d8, 2971 }, { 0x25d9, 2981 }, { 0x25e6, 3552 }, + { 0x263a, 4173 }, { 0x263b, 2991 }, { 0x263c, 4223 }, { 0x2640, 2554 }, + { 0x2642, 3226 }, { 0x2660, 4189 }, { 0x2663, 2105 }, { 0x2665, 2816 }, + { 0x2666, 2211 }, { 0x266a, 3256 }, { 0x266b, 3268 } +}; + +enum { unicode_to_agl_map_size = sizeof(unicode_to_agl_map) / sizeof(unicode_to_agl_map[0]) }; + +} diff --git a/util/aglfn/README b/util/aglfn/README new file mode 100644 index 0000000000..f748dcf15a --- /dev/null +++ b/util/aglfn/README @@ -0,0 +1 @@ +Aglfn is used to generate the Adobe Glyph List For New Fonts data in src/gui/text. diff --git a/util/aglfn/aglfn.pro b/util/aglfn/aglfn.pro new file mode 100644 index 0000000000..0250c2a43a --- /dev/null +++ b/util/aglfn/aglfn.pro @@ -0,0 +1,3 @@ +SOURCES += main.cpp +QT = core +CONFIG += console diff --git a/util/aglfn/data/aglfn.txt b/util/aglfn/data/aglfn.txt new file mode 100644 index 0000000000..86a5bb3889 --- /dev/null +++ b/util/aglfn/data/aglfn.txt @@ -0,0 +1,697 @@ +# ----------------------------------------------------------- +# Copyright 2003, 2005-2008, 2010 Adobe Systems Incorporated. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or +# without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above +# copyright notice, this list of conditions and the following +# disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# Neither the name of Adobe Systems Incorporated nor the names +# of its contributors may be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------- +# Name: Adobe Glyph List For New Fonts +# Table version: 1.7 +# Date: November 6, 2008 +# URL: http://sourceforge.net/adobe/aglfn/ +# +# Description: +# +# AGLFN (Adobe Glyph List For New Fonts) provides a list of base glyph +# names that are recommended for new fonts, which are compatible with +# the AGL (Adobe Glyph List) Specification, and which should be used +# as described in Section 6 of that document. AGLFN comprises the set +# of glyph names from AGL that map via the AGL Specification rules to +# the semantically correct UV (Unicode Value). For example, "Asmall" +# is omitted because AGL maps this glyph name to the PUA (Private Use +# Area) value U+F761, rather than to the UV that maps from the glyph +# name "A." Also omitted is "ffi," because AGL maps this to the +# Alphabetic Presentation Forms value U+FB03, rather than decomposing +# it into the following sequence of three UVs: U+0066, U+0066, and +# U+0069. The name "arrowvertex" has been omitted because this glyph +# now has a real UV, and AGL is now incorrect in mapping it to the PUA +# value U+F8E6. If you do not find an appropriate name for your glyph +# in this list, then please refer to Section 6 of the AGL +# Specification. +# +# Format: three semicolon-delimited fields: +# (1) Standard UV or CUS UV--four uppercase hexadecimal digits +# (2) Glyph name--upper/lowercase letters and digits +# (3) Character names: Unicode character names for standard UVs, and +# descriptive names for CUS UVs--uppercase letters, hyphen, and +# space +# +# The records are sorted by glyph name in increasing ASCII order, +# entries with the same glyph name are sorted in decreasing priority +# order, the UVs and Unicode character names are provided for +# convenience, lines starting with "#" are comments, and blank lines +# should be ignored. +# +# Revision History: +# +# 1.7 [6 November 2008] +# - Reverted to the original 1.4 and earlier mappings for Delta, +# Omega, and mu. +# - Removed mappings for "afii" names. These should now be assigned +# "uni" names. +# - Removed mappings for "commaaccent" names. These should now be +# assigned "uni" names. +# +# 1.6 [30 January 2006] +# - Completed work intended in 1.5. +# +# 1.5 [23 November 2005] +# - Removed duplicated block at end of file. +# - Changed mappings: +# 2206;Delta;INCREMENT changed to 0394;Delta;GREEK CAPITAL LETTER DELTA +# 2126;Omega;OHM SIGN changed to 03A9;Omega;GREEK CAPITAL LETTER OMEGA +# 03BC;mu;MICRO SIGN changed to 03BC;mu;GREEK SMALL LETTER MU +# - Corrected statement above about why "ffi" is omitted. +# +# 1.4 [24 September 2003] +# - Changed version to 1.4, to avoid confusion with the AGL 1.3. +# - Fixed spelling errors in the header. +# - Fully removed "arrowvertex," as it is mapped only to a PUA Unicode +# value in some fonts. +# +# 1.1 [17 April 2003] +# - Renamed [Tt]cedilla back to [Tt]commaaccent. +# +# 1.0 [31 January 2003] +# - Original version. +# - Derived from the AGLv1.2 by: +# removing the PUA area codes; +# removing duplicate Unicode mappings; and +# renaming "tcommaaccent" to "tcedilla" and "Tcommaaccent" to "Tcedilla" +# +0041;A;LATIN CAPITAL LETTER A +00C6;AE;LATIN CAPITAL LETTER AE +01FC;AEacute;LATIN CAPITAL LETTER AE WITH ACUTE +00C1;Aacute;LATIN CAPITAL LETTER A WITH ACUTE +0102;Abreve;LATIN CAPITAL LETTER A WITH BREVE +00C2;Acircumflex;LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C4;Adieresis;LATIN CAPITAL LETTER A WITH DIAERESIS +00C0;Agrave;LATIN CAPITAL LETTER A WITH GRAVE +0391;Alpha;GREEK CAPITAL LETTER ALPHA +0386;Alphatonos;GREEK CAPITAL LETTER ALPHA WITH TONOS +0100;Amacron;LATIN CAPITAL LETTER A WITH MACRON +0104;Aogonek;LATIN CAPITAL LETTER A WITH OGONEK +00C5;Aring;LATIN CAPITAL LETTER A WITH RING ABOVE +01FA;Aringacute;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +00C3;Atilde;LATIN CAPITAL LETTER A WITH TILDE +0042;B;LATIN CAPITAL LETTER B +0392;Beta;GREEK CAPITAL LETTER BETA +0043;C;LATIN CAPITAL LETTER C +0106;Cacute;LATIN CAPITAL LETTER C WITH ACUTE +010C;Ccaron;LATIN CAPITAL LETTER C WITH CARON +00C7;Ccedilla;LATIN CAPITAL LETTER C WITH CEDILLA +0108;Ccircumflex;LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010A;Cdotaccent;LATIN CAPITAL LETTER C WITH DOT ABOVE +03A7;Chi;GREEK CAPITAL LETTER CHI +0044;D;LATIN CAPITAL LETTER D +010E;Dcaron;LATIN CAPITAL LETTER D WITH CARON +0110;Dcroat;LATIN CAPITAL LETTER D WITH STROKE +2206;Delta;INCREMENT +0045;E;LATIN CAPITAL LETTER E +00C9;Eacute;LATIN CAPITAL LETTER E WITH ACUTE +0114;Ebreve;LATIN CAPITAL LETTER E WITH BREVE +011A;Ecaron;LATIN CAPITAL LETTER E WITH CARON +00CA;Ecircumflex;LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB;Edieresis;LATIN CAPITAL LETTER E WITH DIAERESIS +0116;Edotaccent;LATIN CAPITAL LETTER E WITH DOT ABOVE +00C8;Egrave;LATIN CAPITAL LETTER E WITH GRAVE +0112;Emacron;LATIN CAPITAL LETTER E WITH MACRON +014A;Eng;LATIN CAPITAL LETTER ENG +0118;Eogonek;LATIN CAPITAL LETTER E WITH OGONEK +0395;Epsilon;GREEK CAPITAL LETTER EPSILON +0388;Epsilontonos;GREEK CAPITAL LETTER EPSILON WITH TONOS +0397;Eta;GREEK CAPITAL LETTER ETA +0389;Etatonos;GREEK CAPITAL LETTER ETA WITH TONOS +00D0;Eth;LATIN CAPITAL LETTER ETH +20AC;Euro;EURO SIGN +0046;F;LATIN CAPITAL LETTER F +0047;G;LATIN CAPITAL LETTER G +0393;Gamma;GREEK CAPITAL LETTER GAMMA +011E;Gbreve;LATIN CAPITAL LETTER G WITH BREVE +01E6;Gcaron;LATIN CAPITAL LETTER G WITH CARON +011C;Gcircumflex;LATIN CAPITAL LETTER G WITH CIRCUMFLEX +0120;Gdotaccent;LATIN CAPITAL LETTER G WITH DOT ABOVE +0048;H;LATIN CAPITAL LETTER H +25CF;H18533;BLACK CIRCLE +25AA;H18543;BLACK SMALL SQUARE +25AB;H18551;WHITE SMALL SQUARE +25A1;H22073;WHITE SQUARE +0126;Hbar;LATIN CAPITAL LETTER H WITH STROKE +0124;Hcircumflex;LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0049;I;LATIN CAPITAL LETTER I +0132;IJ;LATIN CAPITAL LIGATURE IJ +00CD;Iacute;LATIN CAPITAL LETTER I WITH ACUTE +012C;Ibreve;LATIN CAPITAL LETTER I WITH BREVE +00CE;Icircumflex;LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF;Idieresis;LATIN CAPITAL LETTER I WITH DIAERESIS +0130;Idotaccent;LATIN CAPITAL LETTER I WITH DOT ABOVE +2111;Ifraktur;BLACK-LETTER CAPITAL I +00CC;Igrave;LATIN CAPITAL LETTER I WITH GRAVE +012A;Imacron;LATIN CAPITAL LETTER I WITH MACRON +012E;Iogonek;LATIN CAPITAL LETTER I WITH OGONEK +0399;Iota;GREEK CAPITAL LETTER IOTA +03AA;Iotadieresis;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +038A;Iotatonos;GREEK CAPITAL LETTER IOTA WITH TONOS +0128;Itilde;LATIN CAPITAL LETTER I WITH TILDE +004A;J;LATIN CAPITAL LETTER J +0134;Jcircumflex;LATIN CAPITAL LETTER J WITH CIRCUMFLEX +004B;K;LATIN CAPITAL LETTER K +039A;Kappa;GREEK CAPITAL LETTER KAPPA +004C;L;LATIN CAPITAL LETTER L +0139;Lacute;LATIN CAPITAL LETTER L WITH ACUTE +039B;Lambda;GREEK CAPITAL LETTER LAMDA +013D;Lcaron;LATIN CAPITAL LETTER L WITH CARON +013F;Ldot;LATIN CAPITAL LETTER L WITH MIDDLE DOT +0141;Lslash;LATIN CAPITAL LETTER L WITH STROKE +004D;M;LATIN CAPITAL LETTER M +039C;Mu;GREEK CAPITAL LETTER MU +004E;N;LATIN CAPITAL LETTER N +0143;Nacute;LATIN CAPITAL LETTER N WITH ACUTE +0147;Ncaron;LATIN CAPITAL LETTER N WITH CARON +00D1;Ntilde;LATIN CAPITAL LETTER N WITH TILDE +039D;Nu;GREEK CAPITAL LETTER NU +004F;O;LATIN CAPITAL LETTER O +0152;OE;LATIN CAPITAL LIGATURE OE +00D3;Oacute;LATIN CAPITAL LETTER O WITH ACUTE +014E;Obreve;LATIN CAPITAL LETTER O WITH BREVE +00D4;Ocircumflex;LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D6;Odieresis;LATIN CAPITAL LETTER O WITH DIAERESIS +00D2;Ograve;LATIN CAPITAL LETTER O WITH GRAVE +01A0;Ohorn;LATIN CAPITAL LETTER O WITH HORN +0150;Ohungarumlaut;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +014C;Omacron;LATIN CAPITAL LETTER O WITH MACRON +2126;Omega;OHM SIGN +038F;Omegatonos;GREEK CAPITAL LETTER OMEGA WITH TONOS +039F;Omicron;GREEK CAPITAL LETTER OMICRON +038C;Omicrontonos;GREEK CAPITAL LETTER OMICRON WITH TONOS +00D8;Oslash;LATIN CAPITAL LETTER O WITH STROKE +01FE;Oslashacute;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +00D5;Otilde;LATIN CAPITAL LETTER O WITH TILDE +0050;P;LATIN CAPITAL LETTER P +03A6;Phi;GREEK CAPITAL LETTER PHI +03A0;Pi;GREEK CAPITAL LETTER PI +03A8;Psi;GREEK CAPITAL LETTER PSI +0051;Q;LATIN CAPITAL LETTER Q +0052;R;LATIN CAPITAL LETTER R +0154;Racute;LATIN CAPITAL LETTER R WITH ACUTE +0158;Rcaron;LATIN CAPITAL LETTER R WITH CARON +211C;Rfraktur;BLACK-LETTER CAPITAL R +03A1;Rho;GREEK CAPITAL LETTER RHO +0053;S;LATIN CAPITAL LETTER S +250C;SF010000;BOX DRAWINGS LIGHT DOWN AND RIGHT +2514;SF020000;BOX DRAWINGS LIGHT UP AND RIGHT +2510;SF030000;BOX DRAWINGS LIGHT DOWN AND LEFT +2518;SF040000;BOX DRAWINGS LIGHT UP AND LEFT +253C;SF050000;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +252C;SF060000;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +2534;SF070000;BOX DRAWINGS LIGHT UP AND HORIZONTAL +251C;SF080000;BOX DRAWINGS LIGHT VERTICAL AND RIGHT +2524;SF090000;BOX DRAWINGS LIGHT VERTICAL AND LEFT +2500;SF100000;BOX DRAWINGS LIGHT HORIZONTAL +2502;SF110000;BOX DRAWINGS LIGHT VERTICAL +2561;SF190000;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +2562;SF200000;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE +2556;SF210000;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE +2555;SF220000;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE +2563;SF230000;BOX DRAWINGS DOUBLE VERTICAL AND LEFT +2551;SF240000;BOX DRAWINGS DOUBLE VERTICAL +2557;SF250000;BOX DRAWINGS DOUBLE DOWN AND LEFT +255D;SF260000;BOX DRAWINGS DOUBLE UP AND LEFT +255C;SF270000;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE +255B;SF280000;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +255E;SF360000;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +255F;SF370000;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +255A;SF380000;BOX DRAWINGS DOUBLE UP AND RIGHT +2554;SF390000;BOX DRAWINGS DOUBLE DOWN AND RIGHT +2569;SF400000;BOX DRAWINGS DOUBLE UP AND HORIZONTAL +2566;SF410000;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +2560;SF420000;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +2550;SF430000;BOX DRAWINGS DOUBLE HORIZONTAL +256C;SF440000;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +2567;SF450000;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +2568;SF460000;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +2564;SF470000;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE +2565;SF480000;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE +2559;SF490000;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +2558;SF500000;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +2552;SF510000;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +2553;SF520000;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE +256B;SF530000;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE +256A;SF540000;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +015A;Sacute;LATIN CAPITAL LETTER S WITH ACUTE +0160;Scaron;LATIN CAPITAL LETTER S WITH CARON +015E;Scedilla;LATIN CAPITAL LETTER S WITH CEDILLA +015C;Scircumflex;LATIN CAPITAL LETTER S WITH CIRCUMFLEX +03A3;Sigma;GREEK CAPITAL LETTER SIGMA +0054;T;LATIN CAPITAL LETTER T +03A4;Tau;GREEK CAPITAL LETTER TAU +0166;Tbar;LATIN CAPITAL LETTER T WITH STROKE +0164;Tcaron;LATIN CAPITAL LETTER T WITH CARON +0398;Theta;GREEK CAPITAL LETTER THETA +00DE;Thorn;LATIN CAPITAL LETTER THORN +0055;U;LATIN CAPITAL LETTER U +00DA;Uacute;LATIN CAPITAL LETTER U WITH ACUTE +016C;Ubreve;LATIN CAPITAL LETTER U WITH BREVE +00DB;Ucircumflex;LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC;Udieresis;LATIN CAPITAL LETTER U WITH DIAERESIS +00D9;Ugrave;LATIN CAPITAL LETTER U WITH GRAVE +01AF;Uhorn;LATIN CAPITAL LETTER U WITH HORN +0170;Uhungarumlaut;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +016A;Umacron;LATIN CAPITAL LETTER U WITH MACRON +0172;Uogonek;LATIN CAPITAL LETTER U WITH OGONEK +03A5;Upsilon;GREEK CAPITAL LETTER UPSILON +03D2;Upsilon1;GREEK UPSILON WITH HOOK SYMBOL +03AB;Upsilondieresis;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +038E;Upsilontonos;GREEK CAPITAL LETTER UPSILON WITH TONOS +016E;Uring;LATIN CAPITAL LETTER U WITH RING ABOVE +0168;Utilde;LATIN CAPITAL LETTER U WITH TILDE +0056;V;LATIN CAPITAL LETTER V +0057;W;LATIN CAPITAL LETTER W +1E82;Wacute;LATIN CAPITAL LETTER W WITH ACUTE +0174;Wcircumflex;LATIN CAPITAL LETTER W WITH CIRCUMFLEX +1E84;Wdieresis;LATIN CAPITAL LETTER W WITH DIAERESIS +1E80;Wgrave;LATIN CAPITAL LETTER W WITH GRAVE +0058;X;LATIN CAPITAL LETTER X +039E;Xi;GREEK CAPITAL LETTER XI +0059;Y;LATIN CAPITAL LETTER Y +00DD;Yacute;LATIN CAPITAL LETTER Y WITH ACUTE +0176;Ycircumflex;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0178;Ydieresis;LATIN CAPITAL LETTER Y WITH DIAERESIS +1EF2;Ygrave;LATIN CAPITAL LETTER Y WITH GRAVE +005A;Z;LATIN CAPITAL LETTER Z +0179;Zacute;LATIN CAPITAL LETTER Z WITH ACUTE +017D;Zcaron;LATIN CAPITAL LETTER Z WITH CARON +017B;Zdotaccent;LATIN CAPITAL LETTER Z WITH DOT ABOVE +0396;Zeta;GREEK CAPITAL LETTER ZETA +0061;a;LATIN SMALL LETTER A +00E1;aacute;LATIN SMALL LETTER A WITH ACUTE +0103;abreve;LATIN SMALL LETTER A WITH BREVE +00E2;acircumflex;LATIN SMALL LETTER A WITH CIRCUMFLEX +00B4;acute;ACUTE ACCENT +0301;acutecomb;COMBINING ACUTE ACCENT +00E4;adieresis;LATIN SMALL LETTER A WITH DIAERESIS +00E6;ae;LATIN SMALL LETTER AE +01FD;aeacute;LATIN SMALL LETTER AE WITH ACUTE +00E0;agrave;LATIN SMALL LETTER A WITH GRAVE +2135;aleph;ALEF SYMBOL +03B1;alpha;GREEK SMALL LETTER ALPHA +03AC;alphatonos;GREEK SMALL LETTER ALPHA WITH TONOS +0101;amacron;LATIN SMALL LETTER A WITH MACRON +0026;ampersand;AMPERSAND +2220;angle;ANGLE +2329;angleleft;LEFT-POINTING ANGLE BRACKET +232A;angleright;RIGHT-POINTING ANGLE BRACKET +0387;anoteleia;GREEK ANO TELEIA +0105;aogonek;LATIN SMALL LETTER A WITH OGONEK +2248;approxequal;ALMOST EQUAL TO +00E5;aring;LATIN SMALL LETTER A WITH RING ABOVE +01FB;aringacute;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +2194;arrowboth;LEFT RIGHT ARROW +21D4;arrowdblboth;LEFT RIGHT DOUBLE ARROW +21D3;arrowdbldown;DOWNWARDS DOUBLE ARROW +21D0;arrowdblleft;LEFTWARDS DOUBLE ARROW +21D2;arrowdblright;RIGHTWARDS DOUBLE ARROW +21D1;arrowdblup;UPWARDS DOUBLE ARROW +2193;arrowdown;DOWNWARDS ARROW +2190;arrowleft;LEFTWARDS ARROW +2192;arrowright;RIGHTWARDS ARROW +2191;arrowup;UPWARDS ARROW +2195;arrowupdn;UP DOWN ARROW +21A8;arrowupdnbse;UP DOWN ARROW WITH BASE +005E;asciicircum;CIRCUMFLEX ACCENT +007E;asciitilde;TILDE +002A;asterisk;ASTERISK +2217;asteriskmath;ASTERISK OPERATOR +0040;at;COMMERCIAL AT +00E3;atilde;LATIN SMALL LETTER A WITH TILDE +0062;b;LATIN SMALL LETTER B +005C;backslash;REVERSE SOLIDUS +007C;bar;VERTICAL LINE +03B2;beta;GREEK SMALL LETTER BETA +2588;block;FULL BLOCK +007B;braceleft;LEFT CURLY BRACKET +007D;braceright;RIGHT CURLY BRACKET +005B;bracketleft;LEFT SQUARE BRACKET +005D;bracketright;RIGHT SQUARE BRACKET +02D8;breve;BREVE +00A6;brokenbar;BROKEN BAR +2022;bullet;BULLET +0063;c;LATIN SMALL LETTER C +0107;cacute;LATIN SMALL LETTER C WITH ACUTE +02C7;caron;CARON +21B5;carriagereturn;DOWNWARDS ARROW WITH CORNER LEFTWARDS +010D;ccaron;LATIN SMALL LETTER C WITH CARON +00E7;ccedilla;LATIN SMALL LETTER C WITH CEDILLA +0109;ccircumflex;LATIN SMALL LETTER C WITH CIRCUMFLEX +010B;cdotaccent;LATIN SMALL LETTER C WITH DOT ABOVE +00B8;cedilla;CEDILLA +00A2;cent;CENT SIGN +03C7;chi;GREEK SMALL LETTER CHI +25CB;circle;WHITE CIRCLE +2297;circlemultiply;CIRCLED TIMES +2295;circleplus;CIRCLED PLUS +02C6;circumflex;MODIFIER LETTER CIRCUMFLEX ACCENT +2663;club;BLACK CLUB SUIT +003A;colon;COLON +20A1;colonmonetary;COLON SIGN +002C;comma;COMMA +2245;congruent;APPROXIMATELY EQUAL TO +00A9;copyright;COPYRIGHT SIGN +00A4;currency;CURRENCY SIGN +0064;d;LATIN SMALL LETTER D +2020;dagger;DAGGER +2021;daggerdbl;DOUBLE DAGGER +010F;dcaron;LATIN SMALL LETTER D WITH CARON +0111;dcroat;LATIN SMALL LETTER D WITH STROKE +00B0;degree;DEGREE SIGN +03B4;delta;GREEK SMALL LETTER DELTA +2666;diamond;BLACK DIAMOND SUIT +00A8;dieresis;DIAERESIS +0385;dieresistonos;GREEK DIALYTIKA TONOS +00F7;divide;DIVISION SIGN +2593;dkshade;DARK SHADE +2584;dnblock;LOWER HALF BLOCK +0024;dollar;DOLLAR SIGN +20AB;dong;DONG SIGN +02D9;dotaccent;DOT ABOVE +0323;dotbelowcomb;COMBINING DOT BELOW +0131;dotlessi;LATIN SMALL LETTER DOTLESS I +22C5;dotmath;DOT OPERATOR +0065;e;LATIN SMALL LETTER E +00E9;eacute;LATIN SMALL LETTER E WITH ACUTE +0115;ebreve;LATIN SMALL LETTER E WITH BREVE +011B;ecaron;LATIN SMALL LETTER E WITH CARON +00EA;ecircumflex;LATIN SMALL LETTER E WITH CIRCUMFLEX +00EB;edieresis;LATIN SMALL LETTER E WITH DIAERESIS +0117;edotaccent;LATIN SMALL LETTER E WITH DOT ABOVE +00E8;egrave;LATIN SMALL LETTER E WITH GRAVE +0038;eight;DIGIT EIGHT +2208;element;ELEMENT OF +2026;ellipsis;HORIZONTAL ELLIPSIS +0113;emacron;LATIN SMALL LETTER E WITH MACRON +2014;emdash;EM DASH +2205;emptyset;EMPTY SET +2013;endash;EN DASH +014B;eng;LATIN SMALL LETTER ENG +0119;eogonek;LATIN SMALL LETTER E WITH OGONEK +03B5;epsilon;GREEK SMALL LETTER EPSILON +03AD;epsilontonos;GREEK SMALL LETTER EPSILON WITH TONOS +003D;equal;EQUALS SIGN +2261;equivalence;IDENTICAL TO +212E;estimated;ESTIMATED SYMBOL +03B7;eta;GREEK SMALL LETTER ETA +03AE;etatonos;GREEK SMALL LETTER ETA WITH TONOS +00F0;eth;LATIN SMALL LETTER ETH +0021;exclam;EXCLAMATION MARK +203C;exclamdbl;DOUBLE EXCLAMATION MARK +00A1;exclamdown;INVERTED EXCLAMATION MARK +2203;existential;THERE EXISTS +0066;f;LATIN SMALL LETTER F +2640;female;FEMALE SIGN +2012;figuredash;FIGURE DASH +25A0;filledbox;BLACK SQUARE +25AC;filledrect;BLACK RECTANGLE +0035;five;DIGIT FIVE +215D;fiveeighths;VULGAR FRACTION FIVE EIGHTHS +0192;florin;LATIN SMALL LETTER F WITH HOOK +0034;four;DIGIT FOUR +2044;fraction;FRACTION SLASH +20A3;franc;FRENCH FRANC SIGN +0067;g;LATIN SMALL LETTER G +03B3;gamma;GREEK SMALL LETTER GAMMA +011F;gbreve;LATIN SMALL LETTER G WITH BREVE +01E7;gcaron;LATIN SMALL LETTER G WITH CARON +011D;gcircumflex;LATIN SMALL LETTER G WITH CIRCUMFLEX +0121;gdotaccent;LATIN SMALL LETTER G WITH DOT ABOVE +00DF;germandbls;LATIN SMALL LETTER SHARP S +2207;gradient;NABLA +0060;grave;GRAVE ACCENT +0300;gravecomb;COMBINING GRAVE ACCENT +003E;greater;GREATER-THAN SIGN +2265;greaterequal;GREATER-THAN OR EQUAL TO +00AB;guillemotleft;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00BB;guillemotright;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +2039;guilsinglleft;SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A;guilsinglright;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0068;h;LATIN SMALL LETTER H +0127;hbar;LATIN SMALL LETTER H WITH STROKE +0125;hcircumflex;LATIN SMALL LETTER H WITH CIRCUMFLEX +2665;heart;BLACK HEART SUIT +0309;hookabovecomb;COMBINING HOOK ABOVE +2302;house;HOUSE +02DD;hungarumlaut;DOUBLE ACUTE ACCENT +002D;hyphen;HYPHEN-MINUS +0069;i;LATIN SMALL LETTER I +00ED;iacute;LATIN SMALL LETTER I WITH ACUTE +012D;ibreve;LATIN SMALL LETTER I WITH BREVE +00EE;icircumflex;LATIN SMALL LETTER I WITH CIRCUMFLEX +00EF;idieresis;LATIN SMALL LETTER I WITH DIAERESIS +00EC;igrave;LATIN SMALL LETTER I WITH GRAVE +0133;ij;LATIN SMALL LIGATURE IJ +012B;imacron;LATIN SMALL LETTER I WITH MACRON +221E;infinity;INFINITY +222B;integral;INTEGRAL +2321;integralbt;BOTTOM HALF INTEGRAL +2320;integraltp;TOP HALF INTEGRAL +2229;intersection;INTERSECTION +25D8;invbullet;INVERSE BULLET +25D9;invcircle;INVERSE WHITE CIRCLE +263B;invsmileface;BLACK SMILING FACE +012F;iogonek;LATIN SMALL LETTER I WITH OGONEK +03B9;iota;GREEK SMALL LETTER IOTA +03CA;iotadieresis;GREEK SMALL LETTER IOTA WITH DIALYTIKA +0390;iotadieresistonos;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +03AF;iotatonos;GREEK SMALL LETTER IOTA WITH TONOS +0129;itilde;LATIN SMALL LETTER I WITH TILDE +006A;j;LATIN SMALL LETTER J +0135;jcircumflex;LATIN SMALL LETTER J WITH CIRCUMFLEX +006B;k;LATIN SMALL LETTER K +03BA;kappa;GREEK SMALL LETTER KAPPA +0138;kgreenlandic;LATIN SMALL LETTER KRA +006C;l;LATIN SMALL LETTER L +013A;lacute;LATIN SMALL LETTER L WITH ACUTE +03BB;lambda;GREEK SMALL LETTER LAMDA +013E;lcaron;LATIN SMALL LETTER L WITH CARON +0140;ldot;LATIN SMALL LETTER L WITH MIDDLE DOT +003C;less;LESS-THAN SIGN +2264;lessequal;LESS-THAN OR EQUAL TO +258C;lfblock;LEFT HALF BLOCK +20A4;lira;LIRA SIGN +2227;logicaland;LOGICAL AND +00AC;logicalnot;NOT SIGN +2228;logicalor;LOGICAL OR +017F;longs;LATIN SMALL LETTER LONG S +25CA;lozenge;LOZENGE +0142;lslash;LATIN SMALL LETTER L WITH STROKE +2591;ltshade;LIGHT SHADE +006D;m;LATIN SMALL LETTER M +00AF;macron;MACRON +2642;male;MALE SIGN +2212;minus;MINUS SIGN +2032;minute;PRIME +00B5;mu;MICRO SIGN +00D7;multiply;MULTIPLICATION SIGN +266A;musicalnote;EIGHTH NOTE +266B;musicalnotedbl;BEAMED EIGHTH NOTES +006E;n;LATIN SMALL LETTER N +0144;nacute;LATIN SMALL LETTER N WITH ACUTE +0149;napostrophe;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +0148;ncaron;LATIN SMALL LETTER N WITH CARON +0039;nine;DIGIT NINE +2209;notelement;NOT AN ELEMENT OF +2260;notequal;NOT EQUAL TO +2284;notsubset;NOT A SUBSET OF +00F1;ntilde;LATIN SMALL LETTER N WITH TILDE +03BD;nu;GREEK SMALL LETTER NU +0023;numbersign;NUMBER SIGN +006F;o;LATIN SMALL LETTER O +00F3;oacute;LATIN SMALL LETTER O WITH ACUTE +014F;obreve;LATIN SMALL LETTER O WITH BREVE +00F4;ocircumflex;LATIN SMALL LETTER O WITH CIRCUMFLEX +00F6;odieresis;LATIN SMALL LETTER O WITH DIAERESIS +0153;oe;LATIN SMALL LIGATURE OE +02DB;ogonek;OGONEK +00F2;ograve;LATIN SMALL LETTER O WITH GRAVE +01A1;ohorn;LATIN SMALL LETTER O WITH HORN +0151;ohungarumlaut;LATIN SMALL LETTER O WITH DOUBLE ACUTE +014D;omacron;LATIN SMALL LETTER O WITH MACRON +03C9;omega;GREEK SMALL LETTER OMEGA +03D6;omega1;GREEK PI SYMBOL +03CE;omegatonos;GREEK SMALL LETTER OMEGA WITH TONOS +03BF;omicron;GREEK SMALL LETTER OMICRON +03CC;omicrontonos;GREEK SMALL LETTER OMICRON WITH TONOS +0031;one;DIGIT ONE +2024;onedotenleader;ONE DOT LEADER +215B;oneeighth;VULGAR FRACTION ONE EIGHTH +00BD;onehalf;VULGAR FRACTION ONE HALF +00BC;onequarter;VULGAR FRACTION ONE QUARTER +2153;onethird;VULGAR FRACTION ONE THIRD +25E6;openbullet;WHITE BULLET +00AA;ordfeminine;FEMININE ORDINAL INDICATOR +00BA;ordmasculine;MASCULINE ORDINAL INDICATOR +221F;orthogonal;RIGHT ANGLE +00F8;oslash;LATIN SMALL LETTER O WITH STROKE +01FF;oslashacute;LATIN SMALL LETTER O WITH STROKE AND ACUTE +00F5;otilde;LATIN SMALL LETTER O WITH TILDE +0070;p;LATIN SMALL LETTER P +00B6;paragraph;PILCROW SIGN +0028;parenleft;LEFT PARENTHESIS +0029;parenright;RIGHT PARENTHESIS +2202;partialdiff;PARTIAL DIFFERENTIAL +0025;percent;PERCENT SIGN +002E;period;FULL STOP +00B7;periodcentered;MIDDLE DOT +22A5;perpendicular;UP TACK +2030;perthousand;PER MILLE SIGN +20A7;peseta;PESETA SIGN +03C6;phi;GREEK SMALL LETTER PHI +03D5;phi1;GREEK PHI SYMBOL +03C0;pi;GREEK SMALL LETTER PI +002B;plus;PLUS SIGN +00B1;plusminus;PLUS-MINUS SIGN +211E;prescription;PRESCRIPTION TAKE +220F;product;N-ARY PRODUCT +2282;propersubset;SUBSET OF +2283;propersuperset;SUPERSET OF +221D;proportional;PROPORTIONAL TO +03C8;psi;GREEK SMALL LETTER PSI +0071;q;LATIN SMALL LETTER Q +003F;question;QUESTION MARK +00BF;questiondown;INVERTED QUESTION MARK +0022;quotedbl;QUOTATION MARK +201E;quotedblbase;DOUBLE LOW-9 QUOTATION MARK +201C;quotedblleft;LEFT DOUBLE QUOTATION MARK +201D;quotedblright;RIGHT DOUBLE QUOTATION MARK +2018;quoteleft;LEFT SINGLE QUOTATION MARK +201B;quotereversed;SINGLE HIGH-REVERSED-9 QUOTATION MARK +2019;quoteright;RIGHT SINGLE QUOTATION MARK +201A;quotesinglbase;SINGLE LOW-9 QUOTATION MARK +0027;quotesingle;APOSTROPHE +0072;r;LATIN SMALL LETTER R +0155;racute;LATIN SMALL LETTER R WITH ACUTE +221A;radical;SQUARE ROOT +0159;rcaron;LATIN SMALL LETTER R WITH CARON +2286;reflexsubset;SUBSET OF OR EQUAL TO +2287;reflexsuperset;SUPERSET OF OR EQUAL TO +00AE;registered;REGISTERED SIGN +2310;revlogicalnot;REVERSED NOT SIGN +03C1;rho;GREEK SMALL LETTER RHO +02DA;ring;RING ABOVE +2590;rtblock;RIGHT HALF BLOCK +0073;s;LATIN SMALL LETTER S +015B;sacute;LATIN SMALL LETTER S WITH ACUTE +0161;scaron;LATIN SMALL LETTER S WITH CARON +015F;scedilla;LATIN SMALL LETTER S WITH CEDILLA +015D;scircumflex;LATIN SMALL LETTER S WITH CIRCUMFLEX +2033;second;DOUBLE PRIME +00A7;section;SECTION SIGN +003B;semicolon;SEMICOLON +0037;seven;DIGIT SEVEN +215E;seveneighths;VULGAR FRACTION SEVEN EIGHTHS +2592;shade;MEDIUM SHADE +03C3;sigma;GREEK SMALL LETTER SIGMA +03C2;sigma1;GREEK SMALL LETTER FINAL SIGMA +223C;similar;TILDE OPERATOR +0036;six;DIGIT SIX +002F;slash;SOLIDUS +263A;smileface;WHITE SMILING FACE +0020;space;SPACE +2660;spade;BLACK SPADE SUIT +00A3;sterling;POUND SIGN +220B;suchthat;CONTAINS AS MEMBER +2211;summation;N-ARY SUMMATION +263C;sun;WHITE SUN WITH RAYS +0074;t;LATIN SMALL LETTER T +03C4;tau;GREEK SMALL LETTER TAU +0167;tbar;LATIN SMALL LETTER T WITH STROKE +0165;tcaron;LATIN SMALL LETTER T WITH CARON +2234;therefore;THEREFORE +03B8;theta;GREEK SMALL LETTER THETA +03D1;theta1;GREEK THETA SYMBOL +00FE;thorn;LATIN SMALL LETTER THORN +0033;three;DIGIT THREE +215C;threeeighths;VULGAR FRACTION THREE EIGHTHS +00BE;threequarters;VULGAR FRACTION THREE QUARTERS +02DC;tilde;SMALL TILDE +0303;tildecomb;COMBINING TILDE +0384;tonos;GREEK TONOS +2122;trademark;TRADE MARK SIGN +25BC;triagdn;BLACK DOWN-POINTING TRIANGLE +25C4;triaglf;BLACK LEFT-POINTING POINTER +25BA;triagrt;BLACK RIGHT-POINTING POINTER +25B2;triagup;BLACK UP-POINTING TRIANGLE +0032;two;DIGIT TWO +2025;twodotenleader;TWO DOT LEADER +2154;twothirds;VULGAR FRACTION TWO THIRDS +0075;u;LATIN SMALL LETTER U +00FA;uacute;LATIN SMALL LETTER U WITH ACUTE +016D;ubreve;LATIN SMALL LETTER U WITH BREVE +00FB;ucircumflex;LATIN SMALL LETTER U WITH CIRCUMFLEX +00FC;udieresis;LATIN SMALL LETTER U WITH DIAERESIS +00F9;ugrave;LATIN SMALL LETTER U WITH GRAVE +01B0;uhorn;LATIN SMALL LETTER U WITH HORN +0171;uhungarumlaut;LATIN SMALL LETTER U WITH DOUBLE ACUTE +016B;umacron;LATIN SMALL LETTER U WITH MACRON +005F;underscore;LOW LINE +2017;underscoredbl;DOUBLE LOW LINE +222A;union;UNION +2200;universal;FOR ALL +0173;uogonek;LATIN SMALL LETTER U WITH OGONEK +2580;upblock;UPPER HALF BLOCK +03C5;upsilon;GREEK SMALL LETTER UPSILON +03CB;upsilondieresis;GREEK SMALL LETTER UPSILON WITH DIALYTIKA +03B0;upsilondieresistonos;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03CD;upsilontonos;GREEK SMALL LETTER UPSILON WITH TONOS +016F;uring;LATIN SMALL LETTER U WITH RING ABOVE +0169;utilde;LATIN SMALL LETTER U WITH TILDE +0076;v;LATIN SMALL LETTER V +0077;w;LATIN SMALL LETTER W +1E83;wacute;LATIN SMALL LETTER W WITH ACUTE +0175;wcircumflex;LATIN SMALL LETTER W WITH CIRCUMFLEX +1E85;wdieresis;LATIN SMALL LETTER W WITH DIAERESIS +2118;weierstrass;SCRIPT CAPITAL P +1E81;wgrave;LATIN SMALL LETTER W WITH GRAVE +0078;x;LATIN SMALL LETTER X +03BE;xi;GREEK SMALL LETTER XI +0079;y;LATIN SMALL LETTER Y +00FD;yacute;LATIN SMALL LETTER Y WITH ACUTE +0177;ycircumflex;LATIN SMALL LETTER Y WITH CIRCUMFLEX +00FF;ydieresis;LATIN SMALL LETTER Y WITH DIAERESIS +00A5;yen;YEN SIGN +1EF3;ygrave;LATIN SMALL LETTER Y WITH GRAVE +007A;z;LATIN SMALL LETTER Z +017A;zacute;LATIN SMALL LETTER Z WITH ACUTE +017E;zcaron;LATIN SMALL LETTER Z WITH CARON +017C;zdotaccent;LATIN SMALL LETTER Z WITH DOT ABOVE +0030;zero;DIGIT ZERO +03B6;zeta;GREEK SMALL LETTER ZETA +#END diff --git a/util/aglfn/main.cpp b/util/aglfn/main.cpp new file mode 100644 index 0000000000..1c79bf32a4 --- /dev/null +++ b/util/aglfn/main.cpp @@ -0,0 +1,216 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the utils of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include + +static QByteArray fileVersion; + +static QList glyphNames; +static QList glyphNameOffsets; +static QMap uni_to_agl_map; // sort by code point for bsearch + +static void readGlyphList() +{ + qDebug("Reading aglfn.txt:"); + QFile f("data/aglfn.txt"); + if (!f.exists()) + qFatal("Couldn't find aglfn.txt"); + + f.open(QFile::ReadOnly); + + glyphNames.append(".notdef"); + glyphNameOffsets.append(0); + uni_to_agl_map.insert(0, 0); + while (!f.atEnd()) { + QByteArray line; + line.resize(1024); + int len = f.readLine(line.data(), 1024); + line.resize(len-1); + + int comment = line.indexOf('#'); + if (comment != -1) { + if (fileVersion.isEmpty()) { + int commentTableVersion = line.indexOf("Table version:", comment); + if (commentTableVersion != -1) + fileVersion = line.mid(commentTableVersion + 15).trimmed(); + } + line = line.left(comment); + } + line = line.trimmed(); + + if (line.isEmpty()) + continue; + + QList l = line.split(';'); + Q_ASSERT(l.size() == 3); + + bool ok; + ushort codepoint = l[0].toUShort(&ok, 16); + Q_ASSERT(ok); + QByteArray glyphName = l[1].trimmed(); + + int glyphIndex = glyphNames.indexOf(glyphName); + if (glyphIndex == -1) { + glyphIndex = glyphNames.size(); + glyphNameOffsets.append(glyphNameOffsets.last() + glyphNames.last().size() + 1); + glyphNames.append(glyphName); + } + uni_to_agl_map.insert(codepoint, glyphIndex); + } + + qDebug(" %d unique glyph names found", glyphNames.size()); +} + +static QByteArray createGlyphList() +{ + qDebug("createGlyphList:"); + + QByteArray out; + + out += "static const char glyph_names[] =\n\""; + int linelen = 2; + for (int i = 0; i < glyphNames.size(); ++i) { + if (linelen + glyphNames.at(i).size() + 2 >= 80) { + linelen = 2; + out += "\"\n\""; + } + linelen += glyphNames.at(i).size() + 2; + out += glyphNames.at(i) + "\\0"; + } + if (out.endsWith("\"")) + out.chop(2); + out += "\"\n;\n\n"; + + out += "struct AGLEntry {\n" + " unsigned short uc;\n" + " unsigned short index;\n" + "};\n" + "\n" + "inline bool operator<(unsigned short uc, AGLEntry entry)\n" + "{ return uc < entry.uc; }\n" + "inline bool operator<(AGLEntry entry, unsigned short uc)\n" + "{ return entry.uc < uc; }\n" + "\n" + "static const AGLEntry unicode_to_agl_map[] = {"; + + int i = 0; + QMap::const_iterator it = uni_to_agl_map.constBegin(); + while (it != uni_to_agl_map.constEnd()) { + if (i++ % 4 == 0) + out += "\n "; + out += " { 0x" + QByteArray::number(it.key(), 16).rightJustified(4, '0') + ", "; + out += QByteArray::number(glyphNameOffsets.at(it.value())).leftJustified(4, ' ') + " },"; + ++it; + } + out.chop(1); + out += "\n};\n\n"; + + out += "enum { unicode_to_agl_map_size = sizeof(unicode_to_agl_map) / sizeof(unicode_to_agl_map[0]) };\n\n"; + + qDebug(" Glyph names list uses : %d bytes", glyphNameOffsets.last() + glyphNames.last().size() + 1); + qDebug(" Unicode to Glyph names map uses : %d bytes", uni_to_agl_map.size()*4); + + return out; +} + + +int main(int, char **) +{ + readGlyphList(); + + QByteArray header = + "/****************************************************************************\n" + "**\n" + "** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).\n" + "** Contact: http://www.qt-project.org/\n" + "**\n" + "** This file is part of the QtGui module of the Qt Toolkit.\n" + "**\n" + "** $QT_BEGIN_LICENSE:LGPL$\n" + "** GNU Lesser General Public License Usage\n" + "** This file may be used under the terms of the GNU Lesser General Public\n" + "** License version 2.1 as published by the Free Software Foundation and\n" + "** appearing in the file LICENSE.LGPL included in the packaging of this\n" + "** file. Please review the following information to ensure the GNU Lesser\n" + "** General Public License version 2.1 requirements will be met:\n" + "** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.\n" + "**\n" + "** In addition, as a special exception, Nokia gives you certain additional\n" + "** rights. These rights are described in the Nokia Qt LGPL Exception\n" + "** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.\n" + "**\n" + "** GNU General Public License Usage\n" + "** Alternatively, this file may be used under the terms of the GNU General\n" + "** Public License version 3.0 as published by the Free Software Foundation\n" + "** and appearing in the file LICENSE.GPL included in the packaging of this\n" + "** file. Please review the following information to ensure the GNU General\n" + "** Public License version 3.0 requirements will be met:\n" + "** http://www.gnu.org/copyleft/gpl.html.\n" + "**\n" + "** Other Usage\n" + "** Alternatively, this file may be used in accordance with the terms and\n" + "** conditions contained in a signed written agreement between you and Nokia.\n" + "**\n" + "**\n" + "**\n" + "**\n" + "**\n" + "**\n" + "** $QT_END_LICENSE$\n" + "**\n" + "****************************************************************************/\n\n"; + + QByteArray note = + "/* This file is autogenerated from the Adobe Glyph List database" + + (!fileVersion.isEmpty() ? " v" + fileVersion : "") + ". Do not edit */\n\n"; + + QFile f("../../src/gui/text/qfontsubset_agl.cpp"); + f.open(QFile::WriteOnly|QFile::Truncate); + f.write(header); + f.write(note); + f.write("namespace {\n\n"); + f.write(createGlyphList()); + f.write("}\n"); + f.close(); +} -- cgit v1.2.3