diff options
Diffstat (limited to 'Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/checkGlyphNumbers.py')
-rwxr-xr-x | Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/checkGlyphNumbers.py | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/checkGlyphNumbers.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/checkGlyphNumbers.py new file mode 100755 index 00000000000..c845d0d55ec --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/checkGlyphNumbers.py @@ -0,0 +1,98 @@ +#!/usr/bin/env ../utility/fontforge-interp.sh +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. + +Gnu FreeFont is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, 2011 Stevan White" +__date__ = "$Date: 2011-11-27 01:33:15 +0100 (Sun, 27 Nov 2011) $" +__version__ = "$Revision: 1907 $" + +__doc__ = """ +For most unicode ranges, glyph slot numbers should be the same as the +Unicode value. +The Private Use ranges are the exception: those characters should have a +definate non-Unicode number: -1 + +This script checks that this is the case, and prints out a warning +whenever it isn't. +""" + +import fontforge +import sys + +problem = False + +def inPrivateUseRange( glyph ): + e = glyph.encoding + + return ( ( e >= 0xE800 and e <= 0xF8FF ) + or ( e >= 0xFF000 and e <= 0xFFFFD ) + or ( e >= 0x100000 and e <= 0x10FFFD ) ) + +def isSpecialTrueType( glyph ): + """ Fontforge treats three control characters as the special + TrueType characters recommended by that standard + """ + e = glyph.encoding + + return e == 0 or e == 1 or e == 0xD + +from os import path +def checkGlyphNumbers( fontDir, fontFile ): + if isinstance( fontFile, ( list, tuple ) ): + print "In directory " + fontDir + for fontName in fontFile: + checkGlyphNumbers( fontDir, fontName ) + return + + print "Checking slot numbers in " + fontFile + font = fontforge.open( path.join( fontDir, fontFile ) ) + + g = font.selection.all() + g = font.selection.byGlyphs + + valid = True + for glyph in g: + if isSpecialTrueType( glyph ): + # FIXME really should complain if it DOESNT exist + pass + elif inPrivateUseRange( glyph ): + if glyph.unicode != -1: + print "Glyph at slot " + str( glyph.encoding ) \ + + " is Private Use but has Unicode" + problem = True + else: + if glyph.encoding != glyph.unicode: + print "Glyph at slot " + str( glyph.encoding ) \ + + " has wrong Unicode" + problem = True + +# -------------------------------------------------------------------------- +args = sys.argv[1:] + +if len( args ) < 1 or len( args[0].strip() ) == 0: + checkGlyphNumbers( '../../sfd/', + ( 'FreeSerif.sfd', 'FreeSerifItalic.sfd', + 'FreeSerifBold.sfd', 'FreeSerifBoldItalic.sfd', + 'FreeSans.sfd', 'FreeSansOblique.sfd', + 'FreeSansBold.sfd', 'FreeSansBoldOblique.sfd', + 'FreeMono.sfd', 'FreeMonoOblique.sfd', + 'FreeMonoBold.sfd', 'FreeMonoBoldOblique.sfd' ) ) +else: + checkGlyphNumbers( args[0], args[1:] ) + +if problem: + sys.exit( 1 ) |