Blame tools/report/private_use.py

Packit f0e7df
#!/usr/bin/env ../utility/fontforge-interp.sh
Packit f0e7df
Packit f0e7df
__doc__ = """
Packit f0e7df
private_use.py
Packit f0e7df
Packit f0e7df
	fontforge -script private_use.py font_file_path...
Packit f0e7df
Packit f0e7df
Output is HTML showing all the font's glyphs that are in Unicode "Private Use"
Packit f0e7df
areas.
Packit f0e7df
Also reports whether glyphs have references, or if they are ligatures.
Packit f0e7df
"""
Packit f0e7df
__author__ = "Stevan White <stevan.white@googlemail.com>"
Packit f0e7df
__date__ = "Dec 2009"
Packit f0e7df
__version__ = "$Revision: 1.2 $"
Packit f0e7df
Packit f0e7df
import fontforge
Packit f0e7df
import sys
Packit f0e7df
Packit f0e7df
Packit f0e7df
preamble = """
Packit f0e7df
Packit f0e7df
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Packit f0e7df
<html xmlns="http://www.w3.org/1999/xhtml">
Packit f0e7df
<head>
Packit f0e7df
<title>Private Use area</title>
Packit f0e7df
<style type="text/css">
Packit f0e7df
	.nonchar { background-color: red; }
Packit f0e7df
	table, tr, td { font-family: inherit; }
Packit f0e7df
	table, tr, td { font-style: inherit; }
Packit f0e7df
	table, tr, td { font-weight: inherit; }
Packit f0e7df
	td { text-align: right; }
Packit f0e7df
	td { line-height: 1; }
Packit f0e7df
	.ligatures td { width: 2em; }
Packit f0e7df
	.ligatures th { text-align: left; font-family: freemono, monospace; }
Packit f0e7df
</style>
Packit f0e7df
</head>
Packit f0e7df
<body>
Packit f0e7df
"""
Packit f0e7df
Packit f0e7df
def makePreamble():
Packit f0e7df
	return preamble
Packit f0e7df
Packit f0e7df
postamble="""
Packit f0e7df
</body>
Packit f0e7df
</html>
Packit f0e7df
"""
Packit f0e7df
Packit f0e7df
def print_private( fontPath ):
Packit f0e7df
	font = fontforge.open( fontPath )
Packit f0e7df
Packit f0e7df
	print  '
Packit f0e7df
			 '\">'
Packit f0e7df
	print  '

Private Use Area in ' + font.fontname + '

'
Packit f0e7df
Packit f0e7df
	font.selection.select(("ranges",None),0xe000,0xf8ff)
Packit f0e7df
	print  ''
Packit f0e7df
	for g in font.selection.byGlyphs:
Packit f0e7df
		print  ''
Packit f0e7df
		print '%s%0.4x%s' %( "0x", g.encoding, "" )
Packit f0e7df
		print  ''
Packit f0e7df
		print  '' + g.glyphname
Packit f0e7df
		print  ''
Packit f0e7df
		if g.getPosSub( '*' ):
Packit f0e7df
			print "is ligature"
Packit f0e7df
		if g.references:
Packit f0e7df
			print "has references"
Packit f0e7df
		print  ''
Packit f0e7df
		print  ''
Packit f0e7df
		
Packit f0e7df
	print  ''
Packit f0e7df
	print  ''
Packit f0e7df
	sys.stdout.flush()
Packit f0e7df
Packit f0e7df
def printentity( font, s ):
Packit f0e7df
	if s == -1:
Packit f0e7df
		print >> sys.stderr, 'Missing glyph: ' + a
Packit f0e7df
		sys.stdout.write( ' ' )
Packit f0e7df
	else:
Packit f0e7df
		sys.stdout.write( formatted_hex_value( s ) )
Packit f0e7df
Packit f0e7df
def formatted_hex_value( n ):
Packit f0e7df
	return '%s%0.4x%s' %( "&#x", n, ";" )
Packit f0e7df
Packit f0e7df
args = sys.argv[1:]
Packit f0e7df
Packit f0e7df
if len( args ) < 1 or len( args[0].strip() ) == 0:
Packit f0e7df
	sys.exit( 0 )
Packit f0e7df
Packit f0e7df
print makePreamble()
Packit f0e7df
for font_name in args:
Packit f0e7df
	print_private( font_name )
Packit f0e7df
print postamble