From 9f0e357f09d96c4e957fcebb628d9ed59bf6bc3d Mon Sep 17 00:00:00 2001 From: Ykkrosh Date: Thu, 22 Dec 2011 22:44:57 +0000 Subject: [PATCH] Add a hack for a-macron-acute characters (see #1039) This was SVN commit r10796. --- source/tools/fontbuilder2/charset.txt | 139 +++++++++++++++++++++++ source/tools/fontbuilder2/fontbuilder.py | 14 ++- source/tools/fontbuilder2/gencharset.pl | 1 + 3 files changed, 153 insertions(+), 1 deletion(-) diff --git a/source/tools/fontbuilder2/charset.txt b/source/tools/fontbuilder2/charset.txt index 91c3079a2a..a9f1c81381 100644 --- a/source/tools/fontbuilder2/charset.txt +++ b/source/tools/fontbuilder2/charset.txt @@ -518,6 +518,20 @@ 023F: ȿ LATIN SMALL LETTER S WITH SWASH TAIL 0240: ɀ LATIN SMALL LETTER Z WITH SWASH TAIL 0241: Ɂ LATIN CAPITAL LETTER GLOTTAL STOP +0242: ɂ LATIN SMALL LETTER GLOTTAL STOP +0243: Ƀ LATIN CAPITAL LETTER B WITH STROKE +0244: Ʉ LATIN CAPITAL LETTER U BAR +0245: Ʌ LATIN CAPITAL LETTER TURNED V +0246: Ɇ LATIN CAPITAL LETTER E WITH STROKE +0247: ɇ LATIN SMALL LETTER E WITH STROKE +0248: Ɉ LATIN CAPITAL LETTER J WITH STROKE +0249: ɉ LATIN SMALL LETTER J WITH STROKE +024A: Ɋ LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +024B: ɋ LATIN SMALL LETTER Q WITH HOOK TAIL +024C: Ɍ LATIN CAPITAL LETTER R WITH STROKE +024D: ɍ LATIN SMALL LETTER R WITH STROKE +024E: Ɏ LATIN CAPITAL LETTER Y WITH STROKE +024F: ɏ LATIN SMALL LETTER Y WITH STROKE # Latin Extended Additional 1E00: Ḁ LATIN CAPITAL LETTER A WITH RING BELOW @@ -676,6 +690,10 @@ 1E99: ẙ LATIN SMALL LETTER Y WITH RING ABOVE 1E9A: ẚ LATIN SMALL LETTER A WITH RIGHT HALF RING 1E9B: ẛ LATIN SMALL LETTER LONG S WITH DOT ABOVE +1E9C: ẜ LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE +1E9D: ẝ LATIN SMALL LETTER LONG S WITH HIGH STROKE +1E9E: ẞ LATIN CAPITAL LETTER SHARP S +1E9F: ẟ LATIN SMALL LETTER DELTA 1EA0: Ạ LATIN CAPITAL LETTER A WITH DOT BELOW 1EA1: ạ LATIN SMALL LETTER A WITH DOT BELOW 1EA2: Ả LATIN CAPITAL LETTER A WITH HOOK ABOVE @@ -766,6 +784,12 @@ 1EF7: ỷ LATIN SMALL LETTER Y WITH HOOK ABOVE 1EF8: Ỹ LATIN CAPITAL LETTER Y WITH TILDE 1EF9: ỹ LATIN SMALL LETTER Y WITH TILDE +1EFA: Ỻ LATIN CAPITAL LETTER MIDDLE-WELSH LL +1EFB: ỻ LATIN SMALL LETTER MIDDLE-WELSH LL +1EFC: Ỽ LATIN CAPITAL LETTER MIDDLE-WELSH V +1EFD: ỽ LATIN SMALL LETTER MIDDLE-WELSH V +1EFE: Ỿ LATIN CAPITAL LETTER Y WITH LOOP +1EFF: ỿ LATIN SMALL LETTER Y WITH LOOP # Spacing Modifier Letters 02B0: ʰ MODIFIER LETTER SMALL H @@ -950,6 +974,7 @@ 2061: ⁡ FUNCTION APPLICATION 2062: ⁢ INVISIBLE TIMES 2063: ⁣ INVISIBLE SEPARATOR +2064: ⁤ INVISIBLE PLUS 206A:  INHIBIT SYMMETRIC SWAPPING 206B:  ACTIVATE SYMMETRIC SWAPPING 206C:  INHIBIT ARABIC FORM SHAPING @@ -957,5 +982,119 @@ 206E:  NATIONAL DIGIT SHAPES 206F:  NOMINAL DIGIT SHAPES +# Combining Diacritical Marks +0300: ̀ COMBINING GRAVE ACCENT +0301: ́ COMBINING ACUTE ACCENT +0302: ̂ COMBINING CIRCUMFLEX ACCENT +0303: ̃ COMBINING TILDE +0304: ̄ COMBINING MACRON +0305: ̅ COMBINING OVERLINE +0306: ̆ COMBINING BREVE +0307: ̇ COMBINING DOT ABOVE +0308: ̈ COMBINING DIAERESIS +0309: ̉ COMBINING HOOK ABOVE +030A: ̊ COMBINING RING ABOVE +030B: ̋ COMBINING DOUBLE ACUTE ACCENT +030C: ̌ COMBINING CARON +030D: ̍ COMBINING VERTICAL LINE ABOVE +030E: ̎ COMBINING DOUBLE VERTICAL LINE ABOVE +030F: ̏ COMBINING DOUBLE GRAVE ACCENT +0310: ̐ COMBINING CANDRABINDU +0311: ̑ COMBINING INVERTED BREVE +0312: ̒ COMBINING TURNED COMMA ABOVE +0313: ̓ COMBINING COMMA ABOVE +0314: ̔ COMBINING REVERSED COMMA ABOVE +0315: ̕ COMBINING COMMA ABOVE RIGHT +0316: ̖ COMBINING GRAVE ACCENT BELOW +0317: ̗ COMBINING ACUTE ACCENT BELOW +0318: ̘ COMBINING LEFT TACK BELOW +0319: ̙ COMBINING RIGHT TACK BELOW +031A: ̚ COMBINING LEFT ANGLE ABOVE +031B: ̛ COMBINING HORN +031C: ̜ COMBINING LEFT HALF RING BELOW +031D: ̝ COMBINING UP TACK BELOW +031E: ̞ COMBINING DOWN TACK BELOW +031F: ̟ COMBINING PLUS SIGN BELOW +0320: ̠ COMBINING MINUS SIGN BELOW +0321: ̡ COMBINING PALATALIZED HOOK BELOW +0322: ̢ COMBINING RETROFLEX HOOK BELOW +0323: ̣ COMBINING DOT BELOW +0324: ̤ COMBINING DIAERESIS BELOW +0325: ̥ COMBINING RING BELOW +0326: ̦ COMBINING COMMA BELOW +0327: ̧ COMBINING CEDILLA +0328: ̨ COMBINING OGONEK +0329: ̩ COMBINING VERTICAL LINE BELOW +032A: ̪ COMBINING BRIDGE BELOW +032B: ̫ COMBINING INVERTED DOUBLE ARCH BELOW +032C: ̬ COMBINING CARON BELOW +032D: ̭ COMBINING CIRCUMFLEX ACCENT BELOW +032E: ̮ COMBINING BREVE BELOW +032F: ̯ COMBINING INVERTED BREVE BELOW +0330: ̰ COMBINING TILDE BELOW +0331: ̱ COMBINING MACRON BELOW +0332: ̲ COMBINING LOW LINE +0333: ̳ COMBINING DOUBLE LOW LINE +0334: ̴ COMBINING TILDE OVERLAY +0335: ̵ COMBINING SHORT STROKE OVERLAY +0336: ̶ COMBINING LONG STROKE OVERLAY +0337: ̷ COMBINING SHORT SOLIDUS OVERLAY +0338: ̸ COMBINING LONG SOLIDUS OVERLAY +0339: ̹ COMBINING RIGHT HALF RING BELOW +033A: ̺ COMBINING INVERTED BRIDGE BELOW +033B: ̻ COMBINING SQUARE BELOW +033C: ̼ COMBINING SEAGULL BELOW +033D: ̽ COMBINING X ABOVE +033E: ̾ COMBINING VERTICAL TILDE +033F: ̿ COMBINING DOUBLE OVERLINE +0340: ̀ COMBINING GRAVE TONE MARK +0341: ́ COMBINING ACUTE TONE MARK +0342: ͂ COMBINING GREEK PERISPOMENI +0343: ̓ COMBINING GREEK KORONIS +0344: ̈́ COMBINING GREEK DIALYTIKA TONOS +0345: ͅ COMBINING GREEK YPOGEGRAMMENI +0346: ͆ COMBINING BRIDGE ABOVE +0347: ͇ COMBINING EQUALS SIGN BELOW +0348: ͈ COMBINING DOUBLE VERTICAL LINE BELOW +0349: ͉ COMBINING LEFT ANGLE BELOW +034A: ͊ COMBINING NOT TILDE ABOVE +034B: ͋ COMBINING HOMOTHETIC ABOVE +034C: ͌ COMBINING ALMOST EQUAL TO ABOVE +034D: ͍ COMBINING LEFT RIGHT ARROW BELOW +034E: ͎ COMBINING UPWARDS ARROW BELOW +034F: ͏ COMBINING GRAPHEME JOINER +0350: ͐ COMBINING RIGHT ARROWHEAD ABOVE +0351: ͑ COMBINING LEFT HALF RING ABOVE +0352: ͒ COMBINING FERMATA +0353: ͓ COMBINING X BELOW +0354: ͔ COMBINING LEFT ARROWHEAD BELOW +0355: ͕ COMBINING RIGHT ARROWHEAD BELOW +0356: ͖ COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW +0357: ͗ COMBINING RIGHT HALF RING ABOVE +0358: ͘ COMBINING DOT ABOVE RIGHT +0359: ͙ COMBINING ASTERISK BELOW +035A: ͚ COMBINING DOUBLE RING BELOW +035B: ͛ COMBINING ZIGZAG ABOVE +035C: ͜ COMBINING DOUBLE BREVE BELOW +035D: ͝ COMBINING DOUBLE BREVE +035E: ͞ COMBINING DOUBLE MACRON +035F: ͟ COMBINING DOUBLE MACRON BELOW +0360: ͠ COMBINING DOUBLE TILDE +0361: ͡ COMBINING DOUBLE INVERTED BREVE +0362: ͢ COMBINING DOUBLE RIGHTWARDS ARROW BELOW +0363: ͣ COMBINING LATIN SMALL LETTER A +0364: ͤ COMBINING LATIN SMALL LETTER E +0365: ͥ COMBINING LATIN SMALL LETTER I +0366: ͦ COMBINING LATIN SMALL LETTER O +0367: ͧ COMBINING LATIN SMALL LETTER U +0368: ͨ COMBINING LATIN SMALL LETTER C +0369: ͩ COMBINING LATIN SMALL LETTER D +036A: ͪ COMBINING LATIN SMALL LETTER H +036B: ͫ COMBINING LATIN SMALL LETTER M +036C: ͬ COMBINING LATIN SMALL LETTER R +036D: ͭ COMBINING LATIN SMALL LETTER T +036E: ͮ COMBINING LATIN SMALL LETTER V +036F: ͯ COMBINING LATIN SMALL LETTER X + FE33: ︳ PRESENTATION FORM FOR VERTICAL LOW LINE FFFD: � REPLACEMENT CHARACTER diff --git a/source/tools/fontbuilder2/fontbuilder.py b/source/tools/fontbuilder2/fontbuilder.py index 238929b713..4f9b945953 100644 --- a/source/tools/fontbuilder2/fontbuilder.py +++ b/source/tools/fontbuilder2/fontbuilder.py @@ -145,7 +145,19 @@ def generate_font(chars, outname, ttf, loadopts, size, renderstyle): fnt.write("%d\n" % charheight) glyphs.sort(key = lambda g: ord(g.char)) for g in glyphs: - fnt.write("%d %d %d %d %d %d %d %d\n" % (ord(g.char), g.pos.x, h-g.pos.y, g.w, g.h, -g.x0, g.y0, g.xadvance)) + x0 = g.x0 + y0 = g.y0 + # UGLY HACK: see http://trac.wildfiregames.com/ticket/1039 ; + # to handle a-macron-acute characters without the hassle of + # doing proper OpenType GPOS layout (which the Pagella font + # doesn't support anyway), we'll just shift the combining acute + # glyph by an arbitrary amount to make it roughly the right + # place when used after an a-macron glyph. + if ord(g.char) == 0x0301: + y0 += charheight/3 + + fnt.write("%d %d %d %d %d %d %d %d\n" % (ord(g.char), g.pos.x, h-g.pos.y, g.w, g.h, -x0, y0, g.xadvance)) + fnt.close() return diff --git a/source/tools/fontbuilder2/gencharset.pl b/source/tools/fontbuilder2/gencharset.pl index 6dffce4546..22f91ec6d9 100644 --- a/source/tools/fontbuilder2/gencharset.pl +++ b/source/tools/fontbuilder2/gencharset.pl @@ -16,6 +16,7 @@ for ( # (these are probably more than we really need) 'Latin Extended Additional', 'Spacing Modifier Letters', 'General Punctuation', + 'Combining Diacritical Marks', ) { print "# $_\n"; for my $r (@{Unicode::UCD::charblock($_)}) {