'
+- print '
Private Use Area in ' + font.fontname + '
'
++ print('
')
++ print('
Private Use Area in ' + font.fontname + '
')
+
+ font.selection.select(("ranges",None),0xe000,0xf8ff)
+- print '
'
++ print('')
+ for g in font.selection.byGlyphs:
+- print ''
+- print '%s%0.4x%s' %( "0x", g.encoding, "" )
+- print ' | '
+- print '' + g.glyphname
+- print ' | '
++ print(' |
')
++ print('%s%0.4x%s' %( "0x", g.encoding, "" ))
++ print(' | ')
++ print('' + g.glyphname)
++ print(' | ')
+ if g.getPosSub( '*' ):
+- print "is ligature"
++ print("is ligature")
+ if g.references:
+- print "has references"
+- print ' | '
+- print ' |
'
++ print("has references")
++ print('')
++ print(' | ')
+
+- print '
'
+- print ''
++ print('
')
++ print('
')
+ sys.stdout.flush()
+
+ def printentity( font, s ):
+ if s == -1:
+- print >> sys.stderr, 'Missing glyph: ' + a
++ print('Missing glyph: ' + a, file=sys.stderr)
+ sys.stdout.write( '
' )
+ else:
+ sys.stdout.write( formatted_hex_value( s ) )
+@@ -86,7 +86,7 @@ args = sys.argv[1:]
+ if len( args ) < 1 or len( args[0].strip() ) == 0:
+ sys.exit( 0 )
+
+-print makePreamble()
++print(makePreamble())
+ for font_name in args:
+ print_private( font_name )
+-print postamble
++print(postamble)
+diff -up ./doc/fonts/gnu-freefont/tools/report/range_report.py.py3 ./doc/fonts/gnu-freefont/tools/report/range_report.py
+--- ./doc/fonts/gnu-freefont/tools/report/range_report.py.py3 2019-08-18 08:35:42.417732872 -0400
++++ ./doc/fonts/gnu-freefont/tools/report/range_report.py 2019-08-18 08:39:50.949749956 -0400
+@@ -63,8 +63,8 @@ def count_glyphs_in_intervals( font, int
+ for e in g:
+ num += 1
+ except ValueError:
+- print >> stderr, "interval " + str( r ) \
+- + " not representable in " + font.fontname
++ print("interval " + str( r ) \
++ + " not representable in " + font.fontname, file=stderr)
+ exit( 1 )
+ return num
+
+@@ -96,7 +96,7 @@ class FontSupport:
+
+ r = font.os2_unicoderanges
+
+- # print >> stderr, font.fontname, hex( r[0] ), hex( r[1] ),hex( r[2] ),hex( r[3] );
++ # print(font.fontname, hex( r[0] ), hex( r[1] ),hex( r[2] ),hex( r[3] ), file=stderr);
+
+ nRanges = len( ulUnicodeRange )
+
+@@ -111,16 +111,16 @@ class FontSupport:
+ cp = g.encoding
+ if ( not codepointIsInSomeRange( cp )
+ and not codepointIsSpecialTT( cp ) ):
+- print >> stderr, font.fontname, \
+- "no range for", hex( cp )
++ print(font.fontname, \
++ "no range for", hex( cp ), file=stderr)
+
+ """ '''Would like to check that special TT slots are
+ present, but don't know how...'''
+ for cp in special_TT_points:
+ font.selection.all()
+ if not cp in font.selection.byGlyphs:
+- print >> stderr, font.fontname, \
+- "special TT glyph missing", hex( cp )
++ print(font.fontname, \
++ "special TT glyph missing", hex( cp ), file=stderr)
+ """
+
+ def collectRangeInfo( self, font, os2supportbyte, bit, index ):
+@@ -135,13 +135,13 @@ class FontSupport:
+
+ def setRangeSupport( self, idx, supports, total ):
+ if self.myInfos.has_key( idx ):
+- print >> stderr, "OS/2 index ", idx, " duplicated"
++ print("OS/2 index ", idx, " duplicated", file=stderr)
+ exit( 1 )
+ self.myInfos[idx] = SupportInfo( idx, supports, total )
+
+ def getInfo( self, idx ):
+ if not self.myInfos.has_key( idx ):
+- print >> stderr, "OS/2 index ", idx, " not found"
++ print("OS/2 index ", idx, " not found", file=stderr)
+ exit( 1 )
+ return self.myInfos[ idx ]
+
+@@ -177,7 +177,7 @@ def print_font_range_table( fontSupportL
+ headings = ''
+ for fsl in fontSupportList:
+ headings += '
' + fsl.short + ' | '
+- print table_head % ( headings )
++ print(table_head % ( headings ))
+
+ for r in ulUnicodeRange:
+ idx = r[0]
+@@ -190,10 +190,10 @@ def print_font_range_table( fontSupportL
+ if idx == 60 or idx == 90:
+ rowclass = ' class="private"'
+
+- print '
%s | ' % ( rowclass, range_name )
+- print '%i | ' % (
+- total_intervals( intervals ) )
+- print ' | '
++ print('
%s | ' % ( rowclass, range_name ))
++ print('%i | ' % (
++ total_intervals( intervals ) ))
++ print(' | ')
+ for fsl in fontSupportList:
+ supportInfo = fsl.getInfo( idx )
+ supportString = ''
+@@ -203,28 +203,28 @@ def print_font_range_table( fontSupportL
+ if supportInfo.total:
+ totalStr = str( supportInfo.total )
+
+- print '%s | %s | ' % (
+- totalStr, supportString )
++ print('%s | %s | ' % (
++ totalStr, supportString ))
+
+- print '
'
+- print '
total in Unicode ranges | '
++ print('
---|
')
++ print('
total in Unicode ranges | ')
+ for fsl in fontSupportList:
+- print '%i | ' % (
+- fsl.totalGlyphs )
+- print '
---|
'
+- print '
total in font | '
++ print('%i | ' % (
++ fsl.totalGlyphs ))
++ print('
---|
')
++ print('
total in font | ')
+ for fsl in fontSupportList:
+- print '%i | ' % (
+- fsl.fontTotalGlyphs )
+- print '
---|
'
+- print '
total in Private Use | '
++ print('%i | ' % (
++ fsl.fontTotalGlyphs ))
++ print('
---|
')
++ print('
total in Private Use | ')
+ for fsl in fontSupportList:
+- print '%i | ' % (
+- fsl.privateUseGlyphs )
+- print '
---|
'
++ print('
%i | ' % (
++ fsl.privateUseGlyphs ))
++ print('')
+ # Would also like to total glyphs in ranges for each font,
+ # and also print total glyphs in each font.
+- print ''
++ print('')
+
+ table_introduction = """
+ For historical reasons, TrueType classifies Unicode ranges according to
+@@ -286,25 +286,25 @@ Gnu FreeFont character range support
+ '''
+
+ def print_font_range_report( fontSupportList ):
+- print html_heading
++ print(html_heading)
+
+- print ''
+- print '
'
+- print 'Gnu FreeFont support for OpenType OS/2 character ranges'
+- print '
'
+- print '
'
+- print table_introduction
+- print '
'
++ print('')
++ print('
')
++ print('Gnu FreeFont support for OpenType OS/2 character ranges')
++ print('
')
++ print('
')
++ print(table_introduction)
++ print('
')
+ print_font_range_table( fontSupportList )
+- print '
'
+- print table_explanation
++ print('
')
++ print(table_explanation)
+ tzset()
+- print 'Generated by range_report.py
on %s.' % (
+- strftime('%X %x %Z') )
+- print '
'
+- print ''
++ print('Generated by
range_report.py
on %s.' % (
++ strftime('%X %x %Z') ))
++ print('')
++ print('')
+
+- print ''
++ print('