#!/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 . """ __author__ = "Stevan White" __email__ = "stevan.white@googlemail.com" __copyright__ = "Copyright 2009, 2010, Stevan White" __date__ = "$Date: 2011-11-03 01:51:05 +0100 (Thu, 03 Nov 2011) $" __version__ = "$Revision: 1864 $" __doc__ = """ Diagnostic tool that checks that fonts are really monospace. Allows characters to have 0 width though (note this is controversial) Also: in order for box-drawing characters to connect properly, it is important that the glyphs all lie between 800 and -200EM vertically. """ import fontforge import sys problem = False def ismonomono( fontfilename ): print "Checking character bounding boxes: " + fontfilename font = fontforge.open( fontfilename ) g = font.selection.all() g = font.selection.byGlyphs nonzero = 0 for e in g: if nonzero == 0: if e.width > 0: nonzero = e.width else: if e.width > 0 and e.width != nonzero: print ' ' + e.glyphname \ + '(' + str( e.encoding ) \ + ') width is ' + str( e.width ) \ + ' not ' + str( nonzero ) problem = True ( xmin, ymin, xmax, ymax ) = e.boundingBox() if ymin < -200 or ymax > 800: print ' ' + e.glyphname + ' goes between heights ' \ + str( ymin ) + ' and ' + str( ymax ) """ For FontForge handling of TrueType/OpenType magic characters: 1) check that 0x0000 0x0001, 0x000D exist and have names .notdef, .null, nonmarkingreturn 2) check that 0x0000 and 0x000D are width 600, and 0x0001 has no glyph and is width 0 Othewise complain that FontForge may not treat it right. """ if not font[0x0000] \ or font[0x0000].glyphname != '.notdef' \ or font[0x0000].width != nonzero: print 'Should be full-width ".notdef" glyph at 0x0000.' if not font[0x0001] \ or font[0x0001].glyphname != '.null' \ or font[0x0001].width != 0: print 'Should be zero-width ".null" glyph at 0x0001.' if not font[0x000D] \ or font[0x000D].glyphname != 'nonmarkingreturn' \ or font[0x000D].width != nonzero: print 'Should be full-width "nonmarkingreturn" glyph at 0x000D.' scriptname = sys.argv[0]; argc = len( sys.argv ) if argc > 1: for i in range( 1, argc ): ismonomono( sys.argv[i] ) if problem: sys.exit( 1 ) else: sys.exit( 0 )