|
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
|