diff -up ./doc/fonts/gnu-freefont/tools/report/kernclasses.py.py3 ./doc/fonts/gnu-freefont/tools/report/kernclasses.py --- ./doc/fonts/gnu-freefont/tools/report/kernclasses.py.py3 2019-08-18 08:17:06.470597138 -0400 +++ ./doc/fonts/gnu-freefont/tools/report/kernclasses.py 2019-08-18 08:27:48.164149606 -0400 @@ -16,10 +16,10 @@ def get_kern_subtables( font ): if font.isKerningClass( st ): tables.append( st ) return tables - except EnvironmentError, ( e ): - print >> sys.stderr, 'EnvironmentError ' + str( e ) - except TypeError, ( t ): - print >> sys.stderr, 'TypeError ' + str( t ) + except EnvironmentError as e: + print('EnvironmentError ' + str( e ), file=sys.stderr) + except TypeError as t: + print('TypeError ' + str( t ), file=sys.stderr) return None preamble = """ @@ -46,20 +46,20 @@ postamble=""" def print_kerns( fontPath ): font = fontforge.open( fontPath ) - print '

Kerning classes in ' + font.fontname + '

' + print('

Kerning classes in ' + font.fontname + '

') weight = '' if font.os2_weight > 500: weight = 'B' style = '' if font.italicangle < 0.0: style = 'I' - print '
' + print('
') subtables = get_kern_subtables( font ) for st in subtables: - print '

Subtable ' + st + '

' + print('

Subtable ' + st + '

') printKernsOfSubtable( font, st ) - print '
' + print('
') sys.stdout.flush() def printKernsOfSubtable( font, subtable ): @@ -69,38 +69,38 @@ def printKernsOfSubtable( font, subtable rightclasses = kclass[1] kerns = kclass[2] nr = len( rightclasses ) - print '' - print '' - print '' - print '
left classes: right classes:
' + print('') + print('') + print('') + print('" - print "") + print("" - print "" - print "
left classes: right classes:
') for lc in leftclasses: if lc: for c in lc: printentity( font, c ) - print "
" - print "
" + print("
") + print("
") for rc in rightclasses: if rc: for c in rc: printentity( font, c ) - print "
" - print "
" - print "" - print "" - print "" + print("
") + print("") + print("") + print("
") + print("") + print("") + print("") for rc in rightclasses: if rc: sys.stdout.write( "" ) - print "" + print("") for lc in leftclasses: m = 0 if lc: - print "" + print("") sys.stdout.write( "" ) @@ -122,18 +122,18 @@ def printKernsOfSubtable( font, subtable printpair( font, lc[0], rc[0] ) sys.stdout.write( '' ) m += 1 - print "" + print("") n += 1 - print "
" ) printentity( font, rc[0] ) sys.stdout.write( "
" ) printentity( font, lc[0] ) sys.stdout.write( "
" + print("
") def printentity( font, a ): s = font.findEncodingSlot( a ) v = formatted_hex_value( s ) if s == -1: v = ' ' - print >> sys.stderr, font.fullname, 'Missing glyph: ' + a + print(font.fullname, 'Missing glyph: ' + a, file=sys.stderr) elif not codepointIsInSomeRange( s ): - print >> sys.stderr, font.fullname, 'Non-unicode: ' + v + print(font.fullname, 'Non-unicode: ' + v, file=sys.stderr) sys.stdout.write( v ) def printpair( font, p, q ): @@ -150,9 +150,9 @@ def printlist( lst ): for m in lst: s += delim + m delim = ' ' - print s + print(s) -print preamble +print(preamble) #print_kerns( '/home/swhite/font_stuff/urwsr-ttf/URWPalladioL-Roman-test.sfd' ) print_kerns( '../../sfd/FreeSerif.sfd' ) print_kerns( '../../sfd/FreeSerifItalic.sfd' ) @@ -166,4 +166,4 @@ print_kerns( '../../sfd/FreeMono.sfd' ) print_kerns( '../../sfd/FreeMonoOblique.sfd' ) print_kerns( '../../sfd/FreeMonoBold.sfd' ) print_kerns( '../../sfd/FreeMonoBoldOblique.sfd' ) -print postamble +print(postamble) diff -up ./doc/fonts/gnu-freefont/tools/report/ligatureLookups.py.py3 ./doc/fonts/gnu-freefont/tools/report/ligatureLookups.py --- ./doc/fonts/gnu-freefont/tools/report/ligatureLookups.py.py3 2019-08-18 08:30:22.164442327 -0400 +++ ./doc/fonts/gnu-freefont/tools/report/ligatureLookups.py 2019-08-18 08:33:04.545533305 -0400 @@ -60,10 +60,10 @@ def get_ligature_lookups( font ): for st in sts: tables.append( st ) return tables - except EnvironmentError, ( e ): - print >> stderr, 'EnvironmentError ' + str( e ) - except TypeError, ( t ): - print >> stderr, 'TypeError ' + str( t ) + except EnvironmentError as e: + print('EnvironmentError ' + str( e ), file=stderr) + except TypeError as t: + print('TypeError ' + str( t ), file=stderr) return None _preamble= """ @@ -105,8 +105,8 @@ def print_ligatures( fontPath ): if font.weight == 'Bold': weight = "font-weight: bold; " - print _style_div_html % ( font.familyname, style, weight ) - print _lig_header_html % ( font.fontname ) + print(_style_div_html % ( font.familyname, style, weight )) + print(_lig_header_html % ( font.fontname )) subtable_names = get_ligature_lookups( font ) for subtable_name in subtable_names: @@ -115,7 +115,7 @@ def print_ligatures( fontPath ): out = htmlListOfLigSubtable( font, subtable, subtables ) stdout.writelines( out ) stdout.flush() - print '' + print('') class Ligature: def __init__( self, glyph ): @@ -184,7 +184,7 @@ def makeLigatureSubtable( font, subtable ligature = Ligature( g ) for lr in ligs: if len( lr ) < 3 or lr[1] != 'Ligature': - print >> stderr, font.fullname, '- non-ligature: ', g.glyphname + print(font.fullname, '- non-ligature: ', g.glyphname, file=stderr) break i = 2 while i < len( lr ): @@ -242,11 +242,11 @@ def nestedEntity( font, subtable, a, sub if s >= 0xe000 and s <= 0xf8ff: # Unicode only lig = findLigatureGlyph( s, subtables ) if lig: - #print >> stderr, 'Nested glyph found: ' + a + #print('Nested glyph found: ' + a, file=stderr) for p in lig.parts: return nestedEntity( font, subtable, p, subtables ) else: - print >> stderr, font.fullname, '- No nested glyph: ', a + print(font.fullname, '- No nested glyph: ', a, file=stderr) return ' ' else: return entityHTML( font, a ) @@ -254,7 +254,7 @@ def nestedEntity( font, subtable, a, sub def entityHTML( font, a ): s = font.findEncodingSlot( a ) if s == -1: - print >> stderr, font.fullname, '- Missing glyph: ', a + print(font.fullname, '- Missing glyph: ', a, file=stderr) return ' ' else: return formatted_hex_value( s ) @@ -266,11 +266,11 @@ def formatted_hex_value( n ): args = argv[1:] if len( args ) < 1 or len( args[0].strip() ) == 0: - print >> stderr, __usage + print(__usage, file=stderr) exit( 0 ) -print _preamble +print(_preamble) for font_name in args: print_ligatures( font_name ) -print _postamble +print(_postamble) diff -up ./doc/fonts/gnu-freefont/tools/report/private_use.py.py3 ./doc/fonts/gnu-freefont/tools/report/private_use.py --- ./doc/fonts/gnu-freefont/tools/report/private_use.py.py3 2019-08-18 08:33:25.445030197 -0400 +++ ./doc/fonts/gnu-freefont/tools/report/private_use.py 2019-08-18 08:35:14.606402370 -0400 @@ -48,32 +48,32 @@ postamble=""" def print_private( fontPath ): font = fontforge.open( fontPath ) - print '
' - 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("has references") + print('') - 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('
' - 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('') supportList = [] supportList.append( FontSupport( '../../sfd/FreeSerif.sfd', 'Srf' ) ) diff -up ./doc/fonts/gnu-freefont/tools/script-menu/nameBySlot.py.py3 ./doc/fonts/gnu-freefont/tools/script-menu/nameBySlot.py --- ./doc/fonts/gnu-freefont/tools/script-menu/nameBySlot.py.py3 2019-08-18 08:40:25.964907029 -0400 +++ ./doc/fonts/gnu-freefont/tools/script-menu/nameBySlot.py 2019-08-18 08:41:02.911017630 -0400 @@ -38,7 +38,7 @@ import fontforge def explain_error_and_quit( e ): if e: - print 'Error: ', e + print('Error: ', e) exit( 1 ) try: @@ -54,9 +54,9 @@ try: newname = 'uni%0.7x' %( g.encoding ) elif g.encoding <= 0xFFFFFFFF: newname = 'uni%0.8x' %( g.encoding ) - print "naming " + str( g.glyphname ) + ' as ' + newname + print("naming " + str( g.glyphname ) + ' as ' + newname) g.glyphname = newname g.unicode = g.encoding -except ValueError, e: +except ValueError as e: explain_error_and_quit( e ) diff -up ./doc/fonts/gnu-freefont/tools/script-menu/unnameBySlot.py.py3 ./doc/fonts/gnu-freefont/tools/script-menu/unnameBySlot.py --- ./doc/fonts/gnu-freefont/tools/script-menu/unnameBySlot.py.py3 2019-08-18 08:41:15.963703405 -0400 +++ ./doc/fonts/gnu-freefont/tools/script-menu/unnameBySlot.py 2019-08-18 08:42:15.186277750 -0400 @@ -39,16 +39,16 @@ import fontforge def explain_error_and_quit( e ): if e: - print 'Error: ', e + print('Error: ', e) exit( 1 ) try: glyphs = fontforge.activeFont().selection.byGlyphs for g in glyphs: newname = 'NameMe.%s' %( str( g.encoding ) ) - print "naming " + str( g.glyphname ) + ' as ' + newname + print("naming " + str( g.glyphname ) + ' as ' + newname) g.glyphname = newname g.unicode = -1 -except ValueError, e: +except ValueError as e: explain_error_and_quit( e ) diff -up ./doc/fonts/gnu-freefont/tools/test/checkGlyphNumbers.py.py3 ./doc/fonts/gnu-freefont/tools/test/checkGlyphNumbers.py --- ./doc/fonts/gnu-freefont/tools/test/checkGlyphNumbers.py.py3 2019-08-18 08:42:25.687024974 -0400 +++ ./doc/fonts/gnu-freefont/tools/test/checkGlyphNumbers.py 2019-08-18 08:43:16.562800246 -0400 @@ -53,12 +53,12 @@ def isSpecialTrueType( glyph ): from os import path def checkGlyphNumbers( fontDir, fontFile ): if isinstance( fontFile, ( list, tuple ) ): - print "In directory " + fontDir + print("In directory " + fontDir) for fontName in fontFile: checkGlyphNumbers( fontDir, fontName ) return - print "Checking slot numbers in " + fontFile + print("Checking slot numbers in " + fontFile) font = fontforge.open( path.join( fontDir, fontFile ) ) g = font.selection.all() @@ -71,13 +71,13 @@ def checkGlyphNumbers( fontDir, fontFile pass elif inPrivateUseRange( glyph ): if glyph.unicode != -1: - print "Glyph at slot " + str( glyph.encoding ) \ - + " is Private Use but has Unicode" + 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" + print("Glyph at slot " + str( glyph.encoding ) \ + + " has wrong Unicode") problem = True # -------------------------------------------------------------------------- diff -up ./doc/fonts/gnu-freefont/tools/test/findBackLayers.py.py3 ./doc/fonts/gnu-freefont/tools/test/findBackLayers.py --- ./doc/fonts/gnu-freefont/tools/test/findBackLayers.py.py3 2019-08-18 08:43:27.206544016 -0400 +++ ./doc/fonts/gnu-freefont/tools/test/findBackLayers.py 2019-08-18 08:44:00.456743596 -0400 @@ -32,7 +32,7 @@ from sys import exit problem = False def checkBackLayers( fontPath ): - print "Checking " + fontPath + print("Checking " + fontPath) font = fontforge.open( fontPath ) g = font.selection.all() @@ -42,7 +42,7 @@ def checkBackLayers( fontPath ): for e in g: if e.layer_cnt != 2: - print e + print(e) checkBackLayers( '../sfd/FreeSerif.sfd' ) checkBackLayers( '../sfd/FreeSerifItalic.sfd' ) diff -up ./doc/fonts/gnu-freefont/tools/test/isMonoMono.py.py3 ./doc/fonts/gnu-freefont/tools/test/isMonoMono.py --- ./doc/fonts/gnu-freefont/tools/test/isMonoMono.py.py3 2019-08-18 08:44:12.128462618 -0400 +++ ./doc/fonts/gnu-freefont/tools/test/isMonoMono.py 2019-08-18 08:44:55.105428039 -0400 @@ -35,7 +35,7 @@ import sys problem = False def ismonomono( fontfilename ): - print "Checking character bounding boxes: " + fontfilename + print("Checking character bounding boxes: " + fontfilename) font = fontforge.open( fontfilename ) g = font.selection.all() @@ -49,16 +49,16 @@ def ismonomono( fontfilename ): nonzero = e.width else: if e.width > 0 and e.width != nonzero: - print ' ' + e.glyphname \ + print(' ' + e.glyphname \ + '(' + str( e.encoding ) \ + ') width is ' + str( e.width ) \ - + ' not ' + str( nonzero ) + + ' 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 ) + 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 @@ -71,15 +71,15 @@ def ismonomono( fontfilename ): if not font[0x0000] \ or font[0x0000].glyphname != '.notdef' \ or font[0x0000].width != nonzero: - print 'Should be full-width ".notdef" glyph at 0x0000.' + 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.' + 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.' + print('Should be full-width "nonmarkingreturn" glyph at 0x000D.') scriptname = sys.argv[0]; argc = len( sys.argv ) diff -up ./doc/fonts/gnu-freefont/tools/test/validate.py.py3 ./doc/fonts/gnu-freefont/tools/test/validate.py --- ./doc/fonts/gnu-freefont/tools/test/validate.py.py3 2019-08-18 08:45:06.988141993 -0400 +++ ./doc/fonts/gnu-freefont/tools/test/validate.py 2019-08-18 08:45:57.561924523 -0400 @@ -43,7 +43,7 @@ def countPointsInLayer( layer ): return p def printProblemLine( e, msg ): - print "\t" + e.glyphname + msg + print("\t" + e.glyphname + msg) def dealWithValidationState( state, e ): if state & 0x2: @@ -81,13 +81,13 @@ def dealWithValidationState( state, e ): if state & 0x10000: printProblemLine( e, " has references deeper than allowed" ) if state & 0x20000: - print e.glyphname + " fpgm or prep tables longer than allowed" ) + print(e.glyphname + " fpgm or prep tables longer than allowed" )) """ def validate( dir, fontFile ): try: font = fontforge.open( dir + fontFile ) - print "Validating " + fontFile + print("Validating " + fontFile) g = font.selection.all() g = font.selection.byGlyphs @@ -98,9 +98,9 @@ def validate( dir, fontFile ): if state != 0: dealWithValidationState( state, e ) font.validate - except Exception, e: + except Exception as e: problem = True - print >> sys.stderr, str( e ) + print(str( e ), file=sys.stderr) validate( '../sfd/', 'FreeSerif.sfd' ) validate( '../sfd/', 'FreeSerifItalic.sfd' ) diff -up ./doc/fonts/gnu-freefont/tools/utility/hex_range.py.py3 ./doc/fonts/gnu-freefont/tools/utility/hex_range.py --- ./doc/fonts/gnu-freefont/tools/utility/hex_range.py.py3 2019-08-18 08:46:09.302641885 -0400 +++ ./doc/fonts/gnu-freefont/tools/utility/hex_range.py 2019-08-18 08:46:58.356461003 -0400 @@ -40,13 +40,13 @@ postfix = ';' def explain_error_and_quit( e ): if e: - print 'Error: ', e - print "Usage:" - print " hex_range num1 [num2]" + print('Error: ', e) + print("Usage:") + print(" hex_range num1 [num2]") exit( 1 ) def print_formatted_hex_value( n ): - print '%s%0.4x%s' %( prefix, n, postfix ) + print('%s%0.4x%s' %( prefix, n, postfix )) if len( sys.argv ) == 3: try: @@ -54,13 +54,13 @@ if len( sys.argv ) == 3: b = int( sys.argv[2], 0 ) for i in xrange( a, b + 1 ): print_formatted_hex_value( i ) - except ValueError, e: + except ValueError as e: explain_error_and_quit( e ) elif len( sys.argv ) == 2: try: a = int( sys.argv[1], 0 ) print_formatted_hex_value( a ) - except ValueError, e: + except ValueError as e: explain_error_and_quit( e ) else: explain_error_and_quit() diff -up ./doc/fonts/gnu-freefont/tools/utility/metafont/bulk_eps_import.py.py3 ./doc/fonts/gnu-freefont/tools/utility/metafont/bulk_eps_import.py --- ./doc/fonts/gnu-freefont/tools/utility/metafont/bulk_eps_import.py.py3 2019-08-18 08:47:10.751162633 -0400 +++ ./doc/fonts/gnu-freefont/tools/utility/metafont/bulk_eps_import.py 2019-08-18 08:47:43.083384292 -0400 @@ -35,11 +35,11 @@ import fnmatch, re problem = False def import_glyph( font, name, chrnum ): - print "importing file: " + name + " to slot " + str( chrnum ) + print("importing file: " + name + " to slot " + str( chrnum )) g = font.createChar( chrnum ) - print "importing outlines " + name + print("importing outlines " + name) g.importOutlines( name ) # The glyphs produced by MetaPost usually have a grid, whose # right side seems to correspond to the proper right side bearing @@ -56,7 +56,7 @@ re_file_pat = re.compile( file_pat ) if argc > 2: fontfilename = sys.argv[1] font = fontforge.open( fontfilename ) - print "bulk importing to font file: " + fontfilename + print("bulk importing to font file: " + fontfilename) chrnum = 0 directories = os.listdir('.') directories.sort() diff -up ./doc/fonts/gnu-freefont/tools/utility/special-purpose/makeBraille.py.py3 ./doc/fonts/gnu-freefont/tools/utility/special-purpose/makeBraille.py --- ./doc/fonts/gnu-freefont/tools/utility/special-purpose/makeBraille.py.py3 2019-08-18 08:49:05.631397114 -0400 +++ ./doc/fonts/gnu-freefont/tools/utility/special-purpose/makeBraille.py 2019-08-18 08:49:34.269707707 -0400 @@ -60,12 +60,12 @@ def createAndName( font, off ): return font.createChar( 0x2800 + off, 'braille%0.2X' % off ) def drawtopsix( g, off ): - print 'created', 'braille%0.2X' % off + print('created', 'braille%0.2X' % off) g.clear() g.right_side_bearing = glyphwidth for col in range ( 0, 2 ): for row in range ( 0, 3 ): - print 'shift', ( 3 * col + row ) + print('shift', ( 3 * col + row )) state = ( 1 << ( 3 * col + row ) ) & off drawdot( g, col, row, state ) diff -up ./doc/fonts/punknova/tools/build.py.py3 ./doc/fonts/punknova/tools/build.py --- ./doc/fonts/punknova/tools/build.py.py3 2019-08-18 08:50:02.077038304 -0400 +++ ./doc/fonts/punknova/tools/build.py 2019-08-18 08:50:52.658820644 -0400 @@ -22,7 +22,7 @@ def run_mpost(file, tempdir): ) def import_glyphs(font, instance, tempdir): - print "Importing glyph variants set '%s'" % instance + print("Importing glyph variants set '%s'" % instance) glyph_files = glob.glob(os.path.join(tempdir, "*.eps")) @@ -67,7 +67,7 @@ def get_alt(code, name): return alt def add_gsub(font, instances): - print "Adding glyph substitution rules..." + print("Adding glyph substitution rules...") font.addLookup( "Randomize lookup", @@ -90,7 +90,7 @@ def add_gsub(font, instances): get_alt(glyph.unicode, glyph.glyphname)) def greek_caps(font, instances): - print "Adding missing Greek capitals..." + print("Adding missing Greek capitals...") caps = { "Alpha" : "A", @@ -117,7 +117,7 @@ def greek_caps(font, instances): get_alt(font.createMappedChar(name).unicode, name)) def autowidth(font): - print "Auto spacing..." + print("Auto spacing...") font.selection.all() if font.fullname.find("Slanted"): @@ -131,7 +131,7 @@ def autowidth(font): font.autoHint() def autokern(font, instances): - print "Auto kerning..." + print("Auto kerning...") font.addLookup( "Kern lookup", @@ -166,7 +166,7 @@ def finalise(font): space.width = 400 def usage(): - print "Usage: %s INFILE.mp OUTFILE.otf VERSION" % sys.argv[0] + print("Usage: %s INFILE.mp OUTFILE.otf VERSION" % sys.argv[0]) if __name__ == "__main__": if len(sys.argv) < 3: @@ -216,6 +216,6 @@ if __name__ == "__main__": sh.rmtree (tempdir) - print "Saving file '%s'..." % outfile + print("Saving file '%s'..." % outfile) # font.save() font.generate(outfile) diff -up ./doc/fonts/xcharter/altone.py.py3 ./doc/fonts/xcharter/altone.py --- ./doc/fonts/xcharter/altone.py.py3 2019-08-18 08:51:11.088376984 -0400 +++ ./doc/fonts/xcharter/altone.py 2019-08-18 08:52:37.983285156 -0400 @@ -106,7 +106,7 @@ for f in sorted(encfiles): for j in range(len(vflst)): a=vflst[j] s=afmcmds[j] - print s + print(s) if os.system(s)==0: if os.system("vptovf "+a)==0: os.system("/bin/mv -f "+a+".tfm "+tmfv+"/fonts/tfm/public/xcharter") diff -up ./doc/generic/enctex/unimap.py.py3 ./doc/generic/enctex/unimap.py --- ./doc/generic/enctex/unimap.py.py3 2019-08-18 08:52:49.201015107 -0400 +++ ./doc/generic/enctex/unimap.py 2019-08-18 08:54:08.301110903 -0400 @@ -91,12 +91,12 @@ def linetype(line): return LineType.Character, (int(line[:m.end()], 16), line[m.end():].strip().lower()) if not line.startswith('\t'): - raise ValueError, 'Queer line doesn\'t start with @ or Tab' + raise ValueError('Queer line doesn\'t start with @ or Tab') line = line.strip() if not line: return LineType.Empty, None if not LineType.map.has_key(line[0]): - raise ValueError, 'Queer character info line (marker %s)' % line[0] + raise ValueError('Queer character info line (marker %s)' % line[0]) return line[0], line[1:].strip() def utf8chars(u): @@ -132,7 +132,7 @@ while typ: char = val elif typ == LineType.TeX: if not val.startswith('\\'): - raise ValueError, '%s is not a control seq (U%X)' % (val, char[0]) + raise ValueError('%s is not a control seq (U%X)' % (val, char[0])) if sect: fw.write('\n%% %s\n' % sect) sect = None diff -up ./doc/generic/shapepar/proshap.py.py3 ./doc/generic/shapepar/proshap.py --- ./doc/generic/shapepar/proshap.py.py3 2019-08-18 08:54:26.112682120 -0400 +++ ./doc/generic/shapepar/proshap.py 2019-08-18 08:54:51.618068133 -0400 @@ -342,7 +342,7 @@ result = "\\gdef\\bassshape{{"+ middle result = result+ "\\\\{"+str(height) +"}e{"+ middle +"}" + "}\n" -print result +print(result) f = open("result.tex","w") f.write(result) f.close() diff -up ./doc/latex/aramaic-serto/serto.py.py3 ./doc/latex/aramaic-serto/serto.py --- ./doc/latex/aramaic-serto/serto.py.py3 2019-08-18 08:59:12.106797388 -0400 +++ ./doc/latex/aramaic-serto/serto.py 2019-08-18 09:09:54.334337038 -0400 @@ -13,564 +13,572 @@ # 29 September 2007: Possibility to typeset two identical letters without a qusshaya # 31 March 2013: add SERTOFONTDIR environment variable -FONTFILESERTO="serto.font" # specify absolute path -FONTFILECHALD="assyr.font" -#FONTFILEESTR="estrangelo.font" +import os.path +import string +import sys +import re +FONTFILESERTO = "serto.font" # specify absolute path +FONTFILECHALD = "assyr.font" +# FONTFILEESTR="estrangelo.font" # use the environment variable SERTOFONTDIR to specify the directory of the *.font files -import re, sys, string, os.path # translating syriac unicode points to serto codings + class Letter: - def __init__(self, - coding, # what coding to use in .ptex-file - name, # name of the letter - isolated, # what character to take in isolated usage - initial, # what character to take in word-initial usage - medial, # what character to take in word-medial usage - final, # what character to take in word-final usage - link): # does it link to the following (# link 0: next letter is initial, 1: next letter is medial, 2: ignore, 8: character is a superscript symbol 9: character is a subscript symbol - self.coding = coding - self.name = name - self.isolated = map(int, isolated.split('+')) - self.initial = map(int, initial.split('+')) - self.medial = map(int, medial.split('+')) - self.final = map(int, final.split('+')) - self.link = int(link) - - if self.isolated[0] == -1: self.isolated = None - if self.initial[0] == -1: self.initial = None - if self.medial[0] == -1: self.medial = None - if self.final[0] == -1: self.final = None - #sys.stderr.write("%s:%s-%s-%s-%s\n" \ - # % (name,self.isolated,self.initial,self.medial,self.final)) - + def __init__(self, + coding, # what coding to use in .ptex-file + name, # name of the letter + isolated, # what character to take in isolated usage + initial, # what character to take in word-initial usage + medial, # what character to take in word-medial usage + final, # what character to take in word-final usage + link): # does it link to the following (# link 0: next letter is initial, 1: next letter is medial, 2: ignore, 8: character is a superscript symbol 9: character is a subscript symbol + self.coding = coding + self.name = name + self.isolated = list(map(int, isolated.split('+'))) + self.initial = list(map(int, initial.split('+'))) + self.medial = list(map(int, medial.split('+'))) + self.final = list(map(int, final.split('+'))) + self.link = int(link) + + if self.isolated[0] == -1: + self.isolated = None + if self.initial[0] == -1: + self.initial = None + if self.medial[0] == -1: + self.medial = None + if self.final[0] == -1: + self.final = None + # sys.stderr.write("%s:%s-%s-%s-%s\n" \ + # % (name,self.isolated,self.initial,self.medial,self.final)) + def getcontext(self, ctx): - if ctx == 0: return self.isolated[0] - elif ctx == 1: return self.initial[0] - elif ctx == 2: return self.medial[0] - elif ctx == 3: return self.final[0] + if ctx == 0: + return self.isolated[0] + elif ctx == 1: + return self.initial[0] + elif ctx == 2: + return self.medial[0] + elif ctx == 3: + return self.final[0] def getChar(self, ctx): - if ctx == 0: - if not self.isolated: return [''] - return map(lambda x: "%c" % x, self.isolated) - #return int(self.isolated[0]) - elif ctx == 1: - if not self.initial: return [''] - return map(lambda x: "%c" % x, self.initial) - #return int(self.initial[0]) - elif ctx == 2: - #sys.stderr.write("MEDIAL %s\n" % self.medial) - if not self.medial: - #sys.stderr.write("NONE:e\n") - return [''] - return map(lambda x: "%c" % x, self.medial) - #return int(self.medial[0]) - elif ctx == 3: - if not self.final: return [''] - return map(lambda x: "%c" % x, self.final) - #return int(self.final[0]) + if ctx == 0: + if not self.isolated: + return [''] + return ["%c" % x for x in self.isolated] + # return int(self.isolated[0]) + elif ctx == 1: + if not self.initial: + return [''] + return ["%c" % x for x in self.initial] + # return int(self.initial[0]) + elif ctx == 2: + #sys.stderr.write("MEDIAL %s\n" % self.medial) + if not self.medial: + # sys.stderr.write("NONE:e\n") + return [''] + return ["%c" % x for x in self.medial] + # return int(self.medial[0]) + elif ctx == 3: + if not self.final: + return [''] + return ["%c" % x for x in self.final] + # return int(self.final[0]) + class Serto: def __init__(self, elatex=0): - self.elatex=elatex # eLaTeX needs \TeXXeTstate=1 - self.tabelle = {} # style: {"_d": Letter-Object} - self.transtabelle = {} # style: "_d": \d{d} - self.usingUTF8 = False - - self.inlineS = re.compile("()(.*?)()") - self.inlineT = re.compile("()(.*?)()") - self.inlineST = re.compile("()(.*?)()") - - self.inlineC = re.compile("()(.*?)()") - self.inlineCT = re.compile("()(.*?)()") - - self.inlineE = re.compile("()(.*?)()") - self.inlineET = re.compile("()(.*?)()") - - self.tabelle["serto"] = {} - self.transtabelle["serto"] = {} - self.readfont(FONTFILESERTO, - self.tabelle["serto"], - self.transtabelle["serto"]) - #print self.tabelle["serto"] - - self.tabelle["chaldean"] = {} - self.transtabelle["chaldean"] = {} - self.readfont(FONTFILECHALD, - self.tabelle["chaldean"], - self.transtabelle["chaldean"]) - - self.UnicodeTable = { 0x0710: "'", - 0x0712: "b", - 0x0713: "g", - 0x0714: "g", #gamal garshuni - 0x0715: "d", - 0x0717: "h", - 0x0718: "w", - 0x0719: "z", - 0x071a: ".h", - 0x071b: ".t", - 0x071c: ".t", # teth garshuni - 0x071d: "y", - 0x071f: "k", - 0x0720: "l", - 0x0721: "m", - 0x0722: "n", - 0x0723: "s", - 0x0724: "s", # final semkath - 0x0725: "`", - 0x0726: "p", - 0x0728: ".s", - 0x0729: "q", - 0x072a: "r", - 0x072b: "^s", - 0x072c: "t", - 0x0308: "P", # syame - 0x0730: "a", - 0x0731: "A", - 0x0732: ":a", - 0x0733: "=a", - 0x0734: "=A", - 0x0735: ":=a", - 0x0736: "e", - 0x0737: "E", - 0x0738: ":e", - 0x0739: ":e", - 0x073a: "i", - 0x073b: "I", - 0x073c: ":i", - 0x073d: "u", - 0x073e: "U", - 0x073f: ":u", - 0x0740: ":=a", - 0x0741: "*", - 0x0742: "+", - #punctuation listed in unicode not completed implemented in serto - 0x0700: ".:.", - 0x0701: ".", - 0x0702: ".", - 0x0703: ":", - 0x0704: ":", - 0x0705: ":", - 0x0706: ":", - 0x0707: ":", - 0x0708: ":", - 0x0709: ":", - 0x070D: ".X.", - } - + self.elatex = elatex # eLaTeX needs \TeXXeTstate=1 + self.tabelle = {} # style: {"_d": Letter-Object} + self.transtabelle = {} # style: "_d": \d{d} + self.usingUTF8 = False + + self.inlineS = re.compile("()(.*?)()") + self.inlineT = re.compile("()(.*?)()") + self.inlineST = re.compile("()(.*?)()") + + self.inlineC = re.compile("()(.*?)()") + self.inlineCT = re.compile("()(.*?)()") + + self.inlineE = re.compile("()(.*?)()") + self.inlineET = re.compile("()(.*?)()") + + self.tabelle["serto"] = {} + self.transtabelle["serto"] = {} + self.readfont(FONTFILESERTO, + self.tabelle["serto"], + self.transtabelle["serto"]) + # print self.tabelle["serto"] + + self.tabelle["chaldean"] = {} + self.transtabelle["chaldean"] = {} + self.readfont(FONTFILECHALD, + self.tabelle["chaldean"], + self.transtabelle["chaldean"]) + + self.UnicodeTable = {0x0710: "'", + 0x0712: "b", + 0x0713: "g", + 0x0714: "g", # gamal garshuni + 0x0715: "d", + 0x0717: "h", + 0x0718: "w", + 0x0719: "z", + 0x071a: ".h", + 0x071b: ".t", + 0x071c: ".t", # teth garshuni + 0x071d: "y", + 0x071f: "k", + 0x0720: "l", + 0x0721: "m", + 0x0722: "n", + 0x0723: "s", + 0x0724: "s", # final semkath + 0x0725: "`", + 0x0726: "p", + 0x0728: ".s", + 0x0729: "q", + 0x072a: "r", + 0x072b: "^s", + 0x072c: "t", + 0x0308: "P", # syame + 0x0730: "a", + 0x0731: "A", + 0x0732: ":a", + 0x0733: "=a", + 0x0734: "=A", + 0x0735: ":=a", + 0x0736: "e", + 0x0737: "E", + 0x0738: ":e", + 0x0739: ":e", + 0x073a: "i", + 0x073b: "I", + 0x073c: ":i", + 0x073d: "u", + 0x073e: "U", + 0x073f: ":u", + 0x0740: ":=a", + 0x0741: "*", + 0x0742: "+", + # punctuation listed in unicode not completed implemented in serto + 0x0700: ".:.", + 0x0701: ".", + 0x0702: ".", + 0x0703: ":", + 0x0704: ":", + 0x0705: ":", + 0x0706: ":", + 0x0707: ":", + 0x0708: ":", + 0x0709: ":", + 0x070D: ".X.", + } - #print "zzzzzz",UnicodeTable + # print "zzzzzz",UnicodeTable def readfont(self, filename, tabelle, transtabelle): - dirname = os.environ.get("SERTOFONTDIR") - if not dirname: - dirname = os.path.dirname(sys.argv[0]) - #print "eeee", dirname - fp = open("%s/%s" % (dirname, filename), "r") - lines = fp.readlines() - fp.close() - - - #self.tabelle = {} # "_d": (isol, init, med, fin, link) - #self.tabelle = {} # "_d": Letter-Object - #self.transtabelle = {} # "_d": \d{d} - self.fontname = "" - status = "syriac" - self.errct = 0 - for z in lines: - if len(z) < 2: - continue - if z[0] == "#": - if z[:6] == "#FONT:": - a = string.split(z) - self.fontname = string.strip(a[1]) - #self.textframe.thetext.config(font=self.fontname) - #self.testlabel.config(font=self.fontname) - elif z[:7] == "#TRANS:": - status = "transliterate" - continue - - felder = string.split(z) - if status == "syriac": - if len(felder) < 7: - self.errct = self.errct + 1 - print "ERROR:", z - else: - #print z, int(felder[2]) - #self.tabelle[felder[0]] = (int(felder[2]), - # int(felder[3]), - # int(felder[4]), - # int(felder[5]), - # int(felder[6])) - tabelle[felder[0]] = Letter(felder[0], - felder[1], - felder[2], - felder[3], - felder[4], - felder[5], - felder[6]) - else: - if len(felder) < 2: - #print "WARNING:", z - transtabelle[felder[0]] = felder[0] - else: - transtabelle[felder[0]] = felder[1] - + dirname = os.environ.get("SERTOFONTDIR") + if not dirname: + dirname = os.path.dirname(sys.argv[0]) + # print "eeee", dirname + fp = open("%s/%s" % (dirname, filename), "r") + lines = fp.readlines() + fp.close() + + # self.tabelle = {} # "_d": (isol, init, med, fin, link) + # self.tabelle = {} # "_d": Letter-Object + # self.transtabelle = {} # "_d": \d{d} + self.fontname = "" + status = "syriac" + self.errct = 0 + for z in lines: + if len(z) < 2: + continue + if z[0] == "#": + if z[:6] == "#FONT:": + a = string.split(z) + self.fontname = string.strip(a[1]) + # self.textframe.thetext.config(font=self.fontname) + # self.testlabel.config(font=self.fontname) + elif z[:7] == "#TRANS:": + status = "transliterate" + continue + + felder = string.split(z) + if status == "syriac": + if len(felder) < 7: + self.errct = self.errct + 1 + print("ERROR:", z) + else: + # print z, int(felder[2]) + # self.tabelle[felder[0]] = (int(felder[2]), + # int(felder[3]), + # int(felder[4]), + # int(felder[5]), + # int(felder[6])) + tabelle[felder[0]] = Letter(felder[0], + felder[1], + felder[2], + felder[3], + felder[4], + felder[5], + felder[6]) + else: + if len(felder) < 2: + # print "WARNING:", z + transtabelle[felder[0]] = felder[0] + else: + transtabelle[felder[0]] = felder[1] def tokenize(self, str, xlen, style="serto"): - ix = 0 - self.tokens = [] - self.digits = [] - number = 0 # - - while(ix < xlen): #for ix in range(xlen): - #print "IX", ix, str - if str[ix] == "\\": - command = "\\" - ix = ix + 1 - while(ix < xlen): - if not str[ix] in string.letters: - break - else: - command = command + str[ix] - ix = ix + 1 - self.tokens.append(command) - elif str[ix] in "{}": - self.tokens.append(str[ix]) - ix = ix + 1 - else: - for ll in range(5, 0, -1): - if self.tabelle[style].has_key(str[ix:ix+ll]): - if ll == 1 and str[ix:ix+ll] in "aeiou" \ - and (len(self.tokens) == 0 \ - or self.tokens[-1] == "~"): - #self.tokens.append("'" + str[ix:ix+ll]) - self.tokens.extend(["'", str[ix:ix+ll]]) - #pass - else: - if len(self.tokens) \ - and str[ix:ix+ll] == self.tokens[-1] \ - and self.tabelle[style][str[ix:ix+ll]].link != 3 \ - and str[ix:ix+ll] not in ["~", "0", "1", - "2", "3", "4", - "5", "6", "7", - "8", "9", "--"]: - # insert shadda - self.tokens.append("Q") - else: - self.tokens.append(str[ix:ix+ll]) - ix = ix + ll - break # for-loop - else: - ix = ix + 1 - - #print "TOKENS",self.tokens + ix = 0 + self.tokens = [] + self.digits = [] + number = 0 + + while(ix < xlen): # for ix in range(xlen): + # print "IX", ix, str + if str[ix] == "\\": + command = "\\" + ix = ix + 1 + while(ix < xlen): + if not str[ix] in string.letters: + break + else: + command = command + str[ix] + ix = ix + 1 + self.tokens.append(command) + elif str[ix] in "{}": + self.tokens.append(str[ix]) + ix = ix + 1 + else: + for ll in range(5, 0, -1): + if str[ix:ix+ll] in self.tabelle[style]: + if ll == 1 and str[ix:ix+ll] in "aeiou" \ + and (len(self.tokens) == 0 + or self.tokens[-1] == "~"): + #self.tokens.append("'" + str[ix:ix+ll]) + self.tokens.extend(["'", str[ix:ix+ll]]) + # pass + else: + if len(self.tokens) \ + and str[ix:ix+ll] == self.tokens[-1] \ + and self.tabelle[style][str[ix:ix+ll]].link != 3 \ + and str[ix:ix+ll] not in ["~", "0", "1", + "2", "3", "4", + "5", "6", "7", + "8", "9", "--"]: + # insert shadda + self.tokens.append("Q") + else: + self.tokens.append(str[ix:ix+ll]) + ix = ix + ll + break # for-loop + else: + ix = ix + 1 + + # print "TOKENS",self.tokens def transtokenize(self, str, xlen, style="serto"): - ix = 0 - self.tokens = [] - self.digits = [] - number = 0 # - while(ix < xlen): #for ix in range(xlen): - #print "IX", ix, - for ll in range(5, 0, -1): - if self.transtabelle[style].has_key(str[ix:ix+ll]): - if ll == 1 and str[ix:ix+ll] in "aeiou" \ - and (len(self.tokens) == 0 \ - or self.tokens[-1] == "~"): - self.tokens.append("'" + str[ix:ix+ll]) - #self.tokens.extend(["'", str[ix:ix+ll]]) - else: - #if len(self.tokens) \ - # and str[ix:ix+ll] == self.tokens[-1] \ - # and self.tabelle[str[ix:ix+ll]][4] != 3 \ - # and str[ix:ix+ll] not in ["~", "0", "1", "2", "3", "4", - # "5", "6", "7", "8", "9"]: - # """insert shadda""" - # self.tokens.append("Q") - #else: - self.tokens.append(str[ix:ix+ll]) - ix = ix + ll - break # for-loop - else: - ix = ix + 1 - - #print "TRANSTOKENS",self.tokens - + ix = 0 + self.tokens = [] + self.digits = [] + number = 0 + while(ix < xlen): # for ix in range(xlen): + # print "IX", ix, + for ll in range(5, 0, -1): + if str[ix:ix+ll] in self.transtabelle[style]: + if ll == 1 and str[ix:ix+ll] in "aeiou" \ + and (len(self.tokens) == 0 + or self.tokens[-1] == "~"): + self.tokens.append("'" + str[ix:ix+ll]) + #self.tokens.extend(["'", str[ix:ix+ll]]) + else: + # if len(self.tokens) \ + # and str[ix:ix+ll] == self.tokens[-1] \ + # and self.tabelle[str[ix:ix+ll]][4] != 3 \ + # and str[ix:ix+ll] not in ["~", "0", "1", "2", "3", "4", + # "5", "6", "7", "8", "9"]: + # """insert shadda""" + # self.tokens.append("Q") + # else: + self.tokens.append(str[ix:ix+ll]) + ix = ix + ll + break # for-loop + else: + ix = ix + 1 + # print "TRANSTOKENS",self.tokens def transliterate(self, syrisch, style="serto"): - if self.usingUTF8: - line = unicode(syrisch, "utf8") - newline = "" - for c in line: - #print "eee %x" % ord(c), self.UnicodeTable.has_key(ord(c)), - #print c.encode("utf8") - sertocode = self.UnicodeTable.get(ord(c), c) - newline += sertocode - #print "[%s]" % sertocode, newline - syrisch = newline - - syrisch = string.replace(syrisch, " ", "~") - self.transtokenize(syrisch, len(syrisch), style) - #self.err("TOKEN %s" %self.tokens) - ret = [] - oldtok = "" - for tok in self.tokens: - if tok == "~": # blank - ret.append(" ") - #elif tok == "Q": # shadda - #ret.append(ret[-1]) - #elif tok == "+": # soft sign under begadkefat - #if len(ret): - # ret[-1] = self.spec.get(oldtok+tok, oldtok+tok) - else: - ret.append(self.transtabelle[style].get(tok, tok)) - #oldtok = tok - - return string.join(ret, "") + if self.usingUTF8: + line = str(syrisch, "utf8") + newline = "" + for c in line: + # print "eee %x" % ord(c), self.UnicodeTable.has_key(ord(c)), + # print c.encode("utf8") + sertocode = self.UnicodeTable.get(ord(c), c) + newline += sertocode + # print "[%s]" % sertocode, newline + syrisch = newline + + syrisch = string.replace(syrisch, " ", "~") + self.transtokenize(syrisch, len(syrisch), style) + #self.err("TOKEN %s" %self.tokens) + ret = [] + oldtok = "" + for tok in self.tokens: + if tok == "~": # blank + ret.append(" ") + # elif tok == "Q": # shadda + # ret.append(ret[-1]) + # elif tok == "+": # soft sign under begadkefat + # if len(ret): + # ret[-1] = self.spec.get(oldtok+tok, oldtok+tok) + else: + ret.append(self.transtabelle[style].get(tok, tok)) + #oldtok = tok + + return string.join(ret, "") def syriacise(self, style="serto"): - # replace tokens by serto letters, take into account context - ix = 0 - out = [] - digits = [] - self.maxlen = len(self.tokens) - #sys.stderr.write("%s\n" % self.tokens) - number = 0 - for i in range(self.maxlen): - if self.tokens[i][0] in "\\{}": - out.append(self.tokens[i]) - - elif self.tabelle[style][self.tokens[i]].medial == -1: - #print "skipping letter" - continue - else: - form = self.context(i, style=style) - - if self.tokens[i] in ["0", "1", "2", "3", "4", - "5", "6", "7", "8", "9"]: - number = 1 - digits.append(chr(self.tabelle[style][self.tokens[i]].getcontext(form))) - else: - if number == 1: - number = 0 - digits.reverse() - out.extend(digits) - digits = [] - #out.append(chr(self.tabelle[self.tokens[i]][form])) - #out.append("%c" %(self.tabelle[self.tokens[i]].getcontext(form))) - for c in self.tabelle[style][self.tokens[i]].getChar(form): - #sys.stderr.write("LETTER: %s\n" % c) - out.append(c) - #print self.tokens[i], form, self.tabelle[self.tokens[i]][form] - - if number: - number = 0 - digits.reverse() - out.extend(digits) - - - #for i in out: print "%d" % ord(i), - #print - #if not self.elatex: - # out.reverse() - - # This kills empty letters, caused by -1 in .font-file - return string.join(out, "") - + # replace tokens by serto letters, take into account context + ix = 0 + out = [] + digits = [] + self.maxlen = len(self.tokens) + #sys.stderr.write("%s\n" % self.tokens) + number = 0 + for i in range(self.maxlen): + if self.tokens[i][0] in "\\{}": + out.append(self.tokens[i]) + + elif self.tabelle[style][self.tokens[i]].medial == -1: + # print "skipping letter" + continue + else: + form = self.context(i, style=style) + + if self.tokens[i] in ["0", "1", "2", "3", "4", + "5", "6", "7", "8", "9"]: + number = 1 + digits.append( + chr(self.tabelle[style][self.tokens[i]].getcontext(form))) + else: + if number == 1: + number = 0 + digits.reverse() + out.extend(digits) + digits = [] + # out.append(chr(self.tabelle[self.tokens[i]][form])) + #out.append("%c" %(self.tabelle[self.tokens[i]].getcontext(form))) + for c in self.tabelle[style][self.tokens[i]].getChar(form): + #sys.stderr.write("LETTER: %s\n" % c) + out.append(c) + # print self.tokens[i], form, self.tabelle[self.tokens[i]][form] + + if number: + number = 0 + digits.reverse() + out.extend(digits) + + # for i in out: print "%d" % ord(i), + # print + # if not self.elatex: + # out.reverse() - def context(self, ix, style="serto"): - """returns 0 if letter is isolated - 1 if letter is initial - 2 if letter is medial - 3 if letter is final""" - - if self.before(ix, style) and self.next(ix, style): - return 2 - elif self.before(ix, style) and not self.next(ix, style): - return 3 - elif not self.before(ix, style) and self.next(ix, style): - return 1 - else: - return 0 + # This kills empty letters, caused by -1 in .font-file + return string.join(out, "") + def context(self, ix, style="serto"): + """returns 0 if letter is isolated + 1 if letter is initial + 2 if letter is medial + 3 if letter is final""" + + if self.before(ix, style) and self.next(ix, style): + return 2 + elif self.before(ix, style) and not self.next(ix, style): + return 3 + elif not self.before(ix, style) and self.next(ix, style): + return 1 + else: + return 0 def next(self, ix, style="serto"): - """returns 1 if next token is a letter""" - for i in range(ix+1, self.maxlen): - if self.tokens[i][0] in "\\{}": - return 0 - elif self.tabelle[style][self.tokens[i]].link in [2,3]: - continue - elif self.tokens[i] not in ["~", "!", ",", ".", ";", "?"] : - return 1 - else: - return 0 - return 0 + """returns 1 if next token is a letter""" + for i in range(ix+1, self.maxlen): + if self.tokens[i][0] in "\\{}": + return 0 + elif self.tabelle[style][self.tokens[i]].link in [2, 3]: + continue + elif self.tokens[i] not in ["~", "!", ",", ".", ";", "?"]: + return 1 + else: + return 0 + return 0 def before(self, ix, style="serto"): - """returns 1 if preceding token is a letter""" - for i in range(ix-1, -1, -1): - if self.tokens[i][0] in "\\{}": - return 0 - elif self.tabelle[style][self.tokens[i]].link == 2: - continue - elif self.tokens[i] != "~": - if self.tabelle[style][self.tokens[i]].link == 0: - return 0 - else: - return 1 - else: - return 0 - return 0 - - - - + """returns 1 if preceding token is a letter""" + for i in range(ix-1, -1, -1): + if self.tokens[i][0] in "\\{}": + return 0 + elif self.tabelle[style][self.tokens[i]].link == 2: + continue + elif self.tokens[i] != "~": + if self.tabelle[style][self.tokens[i]].link == 0: + return 0 + else: + return 1 + else: + return 0 + return 0 def convert(self, transcript, style="serto"): - # interface function - # dummy blank - if self.usingUTF8: - line = unicode(transcript, "utf8") - newline = "" - for c in line: - #sys.stderr.write( "eee %d %s\n" % (ord(c), self.UnicodeTable.has_key(ord(c)))) - #sys.stderr.write( c.encode("utf8") + "\n") - sertocode = self.UnicodeTable.get(ord(c), c) - newline += sertocode - #sys.stderr.write( "[%s]\n" % sertocode) - transcript = newline.encode("utf8") - - transcript = string.replace(transcript, " ", "~") - self.tokenize(transcript, len(transcript), style) - return self.syriacise(style) - + # interface function + # dummy blank + if self.usingUTF8: + line = str(transcript, "utf8") + newline = "" + for c in line: + #sys.stderr.write( "eee %d %s\n" % (ord(c), self.UnicodeTable.has_key(ord(c)))) + #sys.stderr.write( c.encode("utf8") + "\n") + sertocode = self.UnicodeTable.get(ord(c), c) + newline += sertocode + #sys.stderr.write( "[%s]\n" % sertocode) + transcript = newline.encode("utf8") + + transcript = string.replace(transcript, " ", "~") + self.tokenize(transcript, len(transcript), style) + return self.syriacise(style) def texify(self, word, style="serto"): - res = [] - for ll in serto.convert(word, style): - # ll: position of current syriac character in font table - #sys.stdout.write("LETTER: 0x%x\n" % (ord(ll))) - #sys.stderr.write("LETTER: %s\n" % ord(ll)) - - if ord(ll) < 16: - #print "WWWWWWWWW", len(res), res - if len(res): - res[-1] = "\\uppersyriac{%d}{%s}" % (ord(ll), res[-1]) - else: - res.append("\\uppersyriac{%d}{A}" % (ord(ll))) # A: Olaf - elif ord(ll) < 32: - if len(res): - res[-1] = "\\lowersyriac{%d}{%s}" % (ord(ll), res[-1]) - else: - res.append("\\lowersyriac{%d}{A}" % (ord(ll))) - elif ord(ll) < 127 and ord(ll) not in [34,35,36,37,38,95]: - res.append(ll) - else: - # special (active) TeX-characters, charactes > 127 - res.append("\\char%d{}" % ord(ll)) - if not self.elatex: - res.reverse() - return string.join(res, "") + res = [] + for ll in serto.convert(word, style): + # ll: position of current syriac character in font table + #sys.stdout.write("LETTER: 0x%x\n" % (ord(ll))) + #sys.stderr.write("LETTER: %s\n" % ord(ll)) + + if ord(ll) < 16: + # print "WWWWWWWWW", len(res), res + if len(res): + res[-1] = "\\uppersyriac{%d}{%s}" % (ord(ll), res[-1]) + else: + res.append("\\uppersyriac{%d}{A}" % (ord(ll))) # A: Olaf + elif ord(ll) < 32: + if len(res): + res[-1] = "\\lowersyriac{%d}{%s}" % (ord(ll), res[-1]) + else: + res.append("\\lowersyriac{%d}{A}" % (ord(ll))) + elif ord(ll) < 127 and ord(ll) not in [34, 35, 36, 37, 38, 95]: + res.append(ll) + else: + # special (active) TeX-characters, charactes > 127 + res.append("\\char%d{}" % ord(ll)) + if not self.elatex: + res.reverse() + return string.join(res, "") def inlineserto(self, matchobject): - return "{\\serto\\beginR %s\\endR}" % self.texify(matchobject.group(2)) + return "{\\serto\\beginR %s\\endR}" % self.texify(matchobject.group(2)) def inlinechaldean(self, matchobject): - return "{\\assyr\\beginR %s\\endR}" \ - % self.texify(matchobject.group(2), "chaldean") + return "{\\assyr\\beginR %s\\endR}" \ + % self.texify(matchobject.group(2), "chaldean") def inlinetrans(self, matchobject): - return "\\emph{%s}" % self.transliterate(matchobject.group(2)) + return "\\emph{%s}" % self.transliterate(matchobject.group(2)) def inlinesertotrans(self, matchobject): - return "{\\serto\\beginR %s\\endR} \\emph{%s}" \ - % (self.texify(matchobject.group(2)), - self.transliterate(matchobject.group(2))) + return "{\\serto\\beginR %s\\endR} \\emph{%s}" \ + % (self.texify(matchobject.group(2)), + self.transliterate(matchobject.group(2))) + def inlinechaldeantrans(self, matchobject): - return "{\\assyr\\beginR %s\\endR} \\emph{%s}" \ - % (self.texify(matchobject.group(2), "chaldean"), - self.transliterate(matchobject.group(2), "chaldean")) + return "{\\assyr\\beginR %s\\endR} \\emph{%s}" \ + % (self.texify(matchobject.group(2), "chaldean"), + self.transliterate(matchobject.group(2), "chaldean")) + def err(self, s): - sys.stderr.write(s + "\n") + sys.stderr.write(s + "\n") + -#------------------------------------------------------- +# ------------------------------------------------------- if __name__ == "__main__": sys.stderr.write("serto - LaTeX - preprocessor\n(c) Johannes Heinecke\n") if len(sys.argv) < 2: - sys.stderr.write("usage:\n serto.py [-o] inputfile\n") - sys.stderr.write(" -o: for usage with an older version of LaTeX which cannot typeset right-to-left scripts elatex\n\n") - sys.exit(1) + sys.stderr.write("usage:\n serto.py [-o] inputfile\n") + sys.stderr.write( + " -o: for usage with an older version of LaTeX which cannot typeset right-to-left scripts elatex\n\n") + sys.exit(1) else: - sys.stderr.write("\n") - import getopt + sys.stderr.write("\n") + import getopt - elatex = 1 - optlist,comargs = getopt.getopt(sys.argv[1:], "") - - for (o,a) in optlist: - if o == "-o": - elatex = 0 - - serto = Serto(elatex=elatex) - fp = open(comargs[0]) - - #mode = "latin" - mode = ["latin"] - z = fp.readline() - while (z): - #print "LINE", z, - if z.find("\usepackage[utf8]{inputenc}") > -1: - serto.usingUTF8 = True - #print 'QQQ',z, mode - if z[:-1] == "": - # must be on a single line (will be deleted) - if not elatex: - sys.stderr.write("using without the -e option (and elatex) may not work!\n") - #mode = "serto" - mode.append("serto") - print '{\\serto\\beginR %' - - elif string.strip(z[:-1]) == "": - #mode = "latin" - del mode[-1] - #print '\\endR}%' # causes problems in last line - print '}%' - - elif z[:-1] == "": - # must be on a single line (will be deleted) - if not elatex: - sys.stderr.write("using without the -e option (and elatex) may not work!\n") - #mode = "chaldean" - mode.append("chaldean") - print '{\\assyr\\beginR %' - - elif string.strip(z[:-1]) == "": - #mode = "latin" - del mode[-1] - #print '\\endR}%' # causes problems in last line - print '}%' - - - elif z[:-1] == "": - #mode = "trans" - mode.append("trans") - print '{\\it %' - - elif string.strip(z[:-1]) == "": - #mode = "latin" - del mode[-1] - print '}%' + elatex = 1 + optlist, comargs = getopt.getopt(sys.argv[1:], "") + for (o, a) in optlist: + if o == "-o": + elatex = 0 + + serto = Serto(elatex=elatex) + fp = open(comargs[0]) + + #mode = "latin" + mode = ["latin"] + z = fp.readline() + while (z): + # print "LINE", z, + if z.find("\\usepackage[utf8]{inputenc}") > -1: + serto.usingUTF8 = True + # print 'QQQ',z, mode + if z[:-1] == "": + # must be on a single line (will be deleted) + if not elatex: + sys.stderr.write( + "using without the -e option (and elatex) may not work!\n") + #mode = "serto" + mode.append("serto") + print('{\\serto\\beginR %') + + elif string.strip(z[:-1]) == "": + #mode = "latin" + del mode[-1] + # print '\\endR}%' # causes problems in last line + print('}%') + + elif z[:-1] == "": + # must be on a single line (will be deleted) + if not elatex: + sys.stderr.write( + "using without the -e option (and elatex) may not work!\n") + #mode = "chaldean" + mode.append("chaldean") + print('{\\assyr\\beginR %') + + elif string.strip(z[:-1]) == "": + #mode = "latin" + del mode[-1] + # print '\\endR}%' # causes problems in last line + print('}%') + + elif z[:-1] == "": + #mode = "trans" + mode.append("trans") + print('{\\it %') + + elif string.strip(z[:-1]) == "": + #mode = "latin" + del mode[-1] + print('}%') # elif z[:-1] == "": @@ -581,29 +589,26 @@ if __name__ == "__main__": # mode = "latin" # print '\\endR}%' + else: + # print "mmm", mode, z + if mode[-1] == "latin": + #sys.stdout.write(serto.inlineS.sub(serto.inlineserto, z)) + a = serto.inlineS.sub(serto.inlineserto, z) + b = serto.inlineT.sub(serto.inlinetrans, a) + c = serto.inlineST.sub(serto.inlinesertotrans, b) + d = serto.inlineC.sub(serto.inlinechaldean, c) + e = serto.inlineCT.sub(serto.inlinechaldeantrans, d) + sys.stdout.write(e) + elif mode[-1] == "trans": + print(serto.transliterate(z)) + else: + if z[:-1] == "": + print("\n\\beginR", end=' ') + else: + print(serto.texify(z, mode[-1])) + # print "rrrrr", mode + z = fp.readline() - else: - #print "mmm", mode, z - if mode[-1] == "latin": - #sys.stdout.write(serto.inlineS.sub(serto.inlineserto, z)) - a = serto.inlineS.sub(serto.inlineserto, z) - b = serto.inlineT.sub(serto.inlinetrans, a) - c = serto.inlineST.sub(serto.inlinesertotrans, b) - d = serto.inlineC.sub(serto.inlinechaldean, c) - e = serto.inlineCT.sub(serto.inlinechaldeantrans, d) - sys.stdout.write(e) - elif mode[-1] == "trans": - print serto.transliterate(z) - else: - if z[:-1] == "": print "\n\\beginR", - else: - print serto.texify(z, mode[-1]) - - - #print "rrrrr", mode - z = fp.readline() - - - fp.close() - sys.exit(serto.errct) + fp.close() + sys.exit(serto.errct) diff -up ./doc/latex/biblatex-gb7714-2015/biblatex_check.py.py3 ./doc/latex/biblatex-gb7714-2015/biblatex_check.py --- ./doc/latex/biblatex-gb7714-2015/biblatex_check.py.py3 2019-08-18 09:11:44.399687417 -0400 +++ ./doc/latex/biblatex-gb7714-2015/biblatex_check.py 2019-08-18 09:11:53.802461065 -0400 @@ -1,5 +1,9 @@ #!/usr/bin/env python +from optparse import OptionParser +import sys +import re +import string """ BibLaTeX check on missing fields and consistent name conventions, especially developed for requirements in Computer Science. @@ -70,10 +74,6 @@ requiredFields = {"article": ["author", #################################################################### #import os -import string -import re -import sys -from optparse import OptionParser # Parse options usage = sys.argv[ @@ -110,6 +110,7 @@ else: import warnings reload(sys) sys.setdefaultencoding('utf8') + def open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None): if newline is not None: @@ -119,7 +120,7 @@ else: if opener is not None: warnings.warn('opener is not supported in py2') return codecs.open(filename=file, mode=mode, encoding=encoding, - errors=errors, buffering=buffering) + errors=errors, buffering=buffering) ### End Backport ### @@ -136,28 +137,28 @@ if options.no_console: if options.htmlOutput: print("INFO: Will output HTML to '" + options.htmlOutput + "'" - + (" and auto open in the default web browser" if options.view else "")) -else:#output a default file if -o option is not provided - options.htmlOutput=options.bibFile.repalce('.bib','.html') + + (" and auto open in the default web browser" if options.view else "")) +else: # output a default file if -o option is not provided + options.htmlOutput = options.bibFile.repalce('.bib', '.html') # Filter by reference ID's that are used usedIds = set() if options.auxFile: print("INFO: Filtering by references found in '" + options.auxFile + "'") try: - fInAux = open(options.auxFile, 'r', encoding="utf8") - for line in fInAux: - if line.startswith("\\citation"): - ids = line.split("{")[1].rstrip("} \n").split(", ") - for id in ids: - if (id != ""): - usedIds.add(id) - fInAux.close() + fInAux = open(options.auxFile, 'r', encoding="utf8") + for line in fInAux: + if line.startswith("\\citation"): + ids = line.split("{")[1].rstrip("} \n").split(", ") + for id in ids: + if (id != ""): + usedIds.add(id) + fInAux.close() except IOError as e: - print ("WARNING: Aux file '" + options.auxFile + - "' doesn't exist -> not restricting entries") - - + print("WARNING: Aux file '" + options.auxFile + + "' doesn't exist -> not restricting entries") + + # Go through and check all references completeEntry = "" currentId = "" @@ -186,7 +187,8 @@ for line in fIn: # alises use a string to point at another set of fields currentRequiredFields = requiredFieldsType while isinstance(currentRequiredFields, str): - currentRequiredFields = requiredFields[currentRequiredFields] # resolve alias + # resolve alias + currentRequiredFields = requiredFields[currentRequiredFields] for requiredFieldsString in currentRequiredFields: # support for author/editor syntax @@ -295,7 +297,8 @@ for line in fIn: fIn.close() -problemCount = counterMissingFields + counterFlawedNames + counterWrongFieldNames + counterWrongTypes + counterNonUniqueId +problemCount = counterMissingFields + counterFlawedNames + \ + counterWrongFieldNames + counterWrongTypes + counterNonUniqueId # Write out our HTML file if options.htmlOutput: diff -up ./doc/latex/braille/grade1.py.py3 ./doc/latex/braille/grade1.py --- ./doc/latex/braille/grade1.py.py3 2019-08-18 09:13:21.271355440 -0400 +++ ./doc/latex/braille/grade1.py 2019-08-18 09:13:44.621793326 -0400 @@ -24,32 +24,33 @@ import string Number = '0123456789' + def convert(line): - line = string.replace(line, "``", "{``}") # ``...'' + line = string.replace(line, "``", "{``}") # ``...'' line = string.replace(line, "''", "{''}") - line = string.replace(line, ".`", "{.`}") # .`...'. + line = string.replace(line, ".`", "{.`}") # .`...'. line = string.replace(line, "'.", "{'.}") - line = string.replace(line, '%', '{percent}') # % + line = string.replace(line, '%', '{percent}') # % s, oldi, oldii, skipchars = '', ' ', ' ', 0 for i in line: - if i == '{': - skipchars = 1 - elif i == '}': - skipchars = 0 - elif skipchars: # skip anything inside {...} - pass - elif oldi in Number and i in 'abcdefghij': - s = s + '{Letter}' - elif i in Number: - if (oldii in Number and oldi in '.-') or (oldi in Number): - pass - else: - s = s + '{Number}' - s, oldi, oldii = s + i, i, oldi + if i == '{': + skipchars = 1 + elif i == '}': + skipchars = 0 + elif skipchars: # skip anything inside {...} + pass + elif oldi in Number and i in 'abcdefghij': + s = s + '{Letter}' + elif i in Number: + if (oldii in Number and oldi in '.-') or (oldi in Number): + pass + else: + s = s + '{Number}' + s, oldi, oldii = s + i, i, oldi return string.join(string.split(s)) # return all in one line if __name__ == '__main__': import sys - line = sys.stdin.read() # swallow the whole thing - print convert(line) # may produce extra \n + line = sys.stdin.read() # swallow the whole thing + print(convert(line)) # may produce extra \n diff -up ./doc/latex/braille/grade2.py.py3 ./doc/latex/braille/grade2.py --- ./doc/latex/braille/grade2.py.py3 2019-08-18 09:14:21.083915571 -0400 +++ ./doc/latex/braille/grade2.py 2019-08-18 09:14:40.917438114 -0400 @@ -15,7 +15,9 @@ Usage: Usage: python grade2.py < text > tags """ -import string, re, grade1 +import string +import re +import grade1 part_of_word = [ 'and', 'for', 'of', 'the', 'with', @@ -43,7 +45,7 @@ final_letter_contraction = [ # middle o 'ation', 'ally', ] initial_letter_contraction = [ # whole or part of word - 'these', 'those', 'upon', 'whose', 'word', + 'these', 'those', 'upon', 'whose', 'word', 'cannot', 'had', 'many', 'spirit', 'their', 'world', @@ -82,12 +84,15 @@ whole_word = [ def begintag(tag, word): return re.sub('^%s(.)' % tag, r'{%s}\1' % tag, word) + def middletag(tag, word): return re.sub('(.)%s(.)' % tag, r'\1{%s}\2' % tag, word) + def endtag(tag, word): return re.sub('(.)%s$' % tag, r'\1{%s}' % tag, word) + def parttag(tag, word): return string.replace(word, tag, '{' + tag + '}') @@ -97,46 +102,56 @@ def parttag(tag, word): # def replace(word): if word in whole_word + initial_letter_contraction: # whole word - return '{' + word + '}' - - for tag in initial_letter_contraction: # whole or part of word - word = parttag(tag, word) - for tag in final_letter_contraction: # middle or end of word - word = middletag(tag, word) - word = endtag(tag, word) - for tag in beginning_of_word: word = begintag(tag, word) - for tag in end_of_word: word = endtag(tag, word) - for tag in middle_of_word: word = middletag(tag, word) - for tag in part_of_word: word = parttag(tag, word) + return '{' + word + '}' + + for tag in initial_letter_contraction: # whole or part of word + word = parttag(tag, word) + for tag in final_letter_contraction: # middle or end of word + word = middletag(tag, word) + word = endtag(tag, word) + for tag in beginning_of_word: + word = begintag(tag, word) + for tag in end_of_word: + word = endtag(tag, word) + for tag in middle_of_word: + word = middletag(tag, word) + for tag in part_of_word: + word = parttag(tag, word) s, braces = '', 0 for i in word: # remove nested braces - if i == '{': - braces = braces + 1 - if braces == 1: s = s + i - elif i == '}': - braces = braces - 1 - if braces == 0: s = s + i - else: - s = s + i + if i == '{': + braces = braces + 1 + if braces == 1: + s = s + i + elif i == '}': + braces = braces - 1 + if braces == 0: + s = s + i + else: + s = s + i return s # Check if word, containing [a-zA-Z] only, is all UPPER case. # def alluppercase(word): # ^[A-Z]+$ - if len(word) == 0: return 0 + if len(word) == 0: + return 0 for i in word: - if i not in string.uppercase: return 0 + if i not in string.uppercase: + return 0 return 1 # Check if word, containing [a-zA-Z] only, is all lower case. # def alllowercase(word): # ^[a-z]+$ - if len(word) == 0: return 0 + if len(word) == 0: + return 0 for i in word: - if i not in string.lowercase: return 0 + if i not in string.lowercase: + return 0 return 1 @@ -144,29 +159,29 @@ def alllowercase(word): # ^[a-z]+$ # def capitalized(word): # ^[A-Z][a-z]*$ if len(word) == 0: - return 0 + return 0 elif len(word) == 1: - return alluppercase(word[0]) + return alluppercase(word[0]) else: - return alluppercase(word[0]) and alllowercase(word[1:]) + return alluppercase(word[0]) and alllowercase(word[1:]) def convert(line): s = '' for word in re.split('([a-zA-Z]+)', line): - if len(word) <= 1 or word[0] not in string.letters: - s = s + word # no work if not 2 or more letters - elif alluppercase(word): - s = s + '{Upper}' + replace(string.lower(word)) - elif capitalized(word): - w = replace(string.lower(word)) - if w[0] in string.lowercase: - s = s + word[0] + w[1:] # preserve Capital letter - else: - s = s + '{Capital}' + w - else: - s = s + replace(word) - + if len(word) <= 1 or word[0] not in string.letters: + s = s + word # no work if not 2 or more letters + elif alluppercase(word): + s = s + '{Upper}' + replace(string.lower(word)) + elif capitalized(word): + w = replace(string.lower(word)) + if w[0] in string.lowercase: + s = s + word[0] + w[1:] # preserve Capital letter + else: + s = s + '{Capital}' + w + else: + s = s + replace(word) + # manually handle whole word {o'clock} s = re.sub(r"\bo'clock\b", "{o'clock}", s) @@ -196,5 +211,5 @@ def nopunctuations(tag, newtag, s): if __name__ == '__main__': import sys - line = sys.stdin.read() # swallow the whole thing - print convert(line) # may produce extra \n + line = sys.stdin.read() # swallow the whole thing + print(convert(line)) # may produce extra \n diff -up ./doc/latex/cals/test/support/run_tests.py.py3 ./doc/latex/cals/test/support/run_tests.py --- ./doc/latex/cals/test/support/run_tests.py.py3 2019-08-18 09:15:15.121614709 -0400 +++ ./doc/latex/cals/test/support/run_tests.py 2019-08-18 09:15:42.391958242 -0400 @@ -38,7 +38,7 @@ for fname in test_files: # Test function # def generic_test_func(self, modname, testname): - print 'I am a test case with parameters:', self.__class__, modname, testname + print('I am a test case with parameters:', self.__class__, modname, testname) self.assertEqual(1, 1) # diff -up ./doc/latex/ejpecp/mgetmref.py.py3 ./doc/latex/ejpecp/mgetmref.py --- ./doc/latex/ejpecp/mgetmref.py.py3 2019-08-18 09:15:55.190650135 -0400 +++ ./doc/latex/ejpecp/mgetmref.py 2019-08-18 09:18:48.519477627 -0400 @@ -39,9 +39,10 @@ ################################################################################### SVNinfo = "$Id: getmref.py 46 2006-03-30 07:02:14Z sigitas $" -import sys, urllib, re, os.path, time, string +import sys, urllib.request, urllib.parse, urllib.error, re, os.path, time, string from xml.dom.minidom import parseString import xml.parsers.expat as par +from functools import reduce starttime = time.time() res = re.search(r'\S+:\s\S+\s+(.*?)\s.*\$', SVNinfo) @@ -49,7 +50,7 @@ if res: ver = res.group(1) else: ver = '0.0' -print "# getmref, v. %s #" % ver +print("# getmref, v. %s #" % ver) # # bbl file parsing /begin @@ -73,21 +74,21 @@ def query(instring, bibID, address = 'ht ''' % (escapetexstring, bibID) try: indom = parseString(querystring) - except par.ExpatError, err: - print >>sys.stderr,"[parse query]: %s" % querystring - print >>sys.stderr,sys.exc_info() + except par.ExpatError as err: + print("[parse query]: %s" % querystring, file=sys.stderr) + print(sys.exc_info(), file=sys.stderr) pass else: queryinfo = {} queryinfo['qdata'] = querystring - queryval = urllib.urlencode(queryinfo) + queryval = urllib.parse.urlencode(queryinfo) try: - batchmref = urllib.urlopen(address, queryval) + batchmref = urllib.request.urlopen(address, queryval) res = batchmref.read() domas = parseString(res) except err: - print >>sys.stderr,"[parse res]: %s" % res - print >>sys.stderr,sys.exc_info() + print("[parse res]: %s" % res, file=sys.stderr) + print(sys.exc_info(), file=sys.stderr) pass return domas, res, err @@ -118,7 +119,7 @@ def formatbibitem(bibID, domas): matches = mref_items[0].getElementsByTagName("matches")[0].childNodes[0]._get_nodeValue() if matches == '1': for item in mref_items: - outtype = dict(item.attributes.items())["outtype"] + outtype = dict(list(item.attributes.items()))["outtype"] mrid = item.getElementsByTagName("mrid")[0].childNodes[0]._get_nodeValue() err = 0 if mrid[:2] == "MR": @@ -133,8 +134,8 @@ def formatbibitem(bibID, domas): err = -1 except: err = -3 - print >>sys.stderr,"[formatbibitem]: %s" % bibID - print >>sys.stderr,sys.exc_info() + print("[formatbibitem]: %s" % bibID, file=sys.stderr) + print(sys.exc_info(), file=sys.stderr) pass return mrid, outref, err @@ -155,16 +156,16 @@ def handlebibitem(lines, bibID, biblabel domas, xmlres, err = query(querystring, bibID) except: res = -2 - print >>sys.stderr,"[parse query]: %s" % querystring - print >>sys.stderr,sys.exc_info() - print 'Error', + print("[parse query]: %s" % querystring, file=sys.stderr) + print(sys.exc_info(), file=sys.stderr) + print('Error', end=' ') else: mrid, outref, err = formatbibitem(bibID, domas) if not mrid: - print 'Not Found', + print('Not Found', end=' ') res = -1 else: - print mrid, + print(mrid, end=' ') if mrid[:2] == "MR": outstring = bibstring + '\\MR{%s}' % mrid[2:].rjust(7,'0') else: @@ -178,17 +179,17 @@ def handlebibitem(lines, bibID, biblabel else: outref = re.sub(r'(?>datafile, '\\bibitem%s{%s}\n%s\n' % (biblabel, bibID, outref) + print('\\bibitem%s{%s}\n%s\n' % (biblabel, bibID, outref), file=datafile) else: - print >>datafile, '\\bibitem{%s}\n%s\n' % (bibID, outref) + print('\\bibitem{%s}\n%s\n' % (bibID, outref), file=datafile) return '%s\n' % outstring, res def handleextra(extralines): if len(extralines): - print >>outputfile, ''.join(extralines), + print(''.join(extralines), end=' ', file=outputfile) def handlebbl(inputfile, out=sys.stdout, data=sys.stdout): - print "Job started:", + print("Job started:", end=' ') total = 0; successful = 0; errors = 0; state = 0; pseudobibID = 0; readbib = '' bibl_begin = re.compile(r'\s*\\begin\s*\{thebibliography\}.*$') bibre = re.compile(r'^\s*\\bibitem.*') @@ -208,10 +209,10 @@ def handlebbl(inputfile, out=sys.stdout, if state == 0: matchobj = bibl_begin.search(line) if matchobj: - print >>data,matchobj.group(0) - print >>data,"\\csname bibmessage\\endcsname\n" + print(matchobj.group(0), file=data) + print("\\csname bibmessage\\endcsname\n", file=data) state = 1 - print >>out, line, + print(line, end=' ', file=out) continue elif state == 1: matchobj = bibre.search(line) @@ -230,7 +231,7 @@ def handlebbl(inputfile, out=sys.stdout, readbib = line continue else: - print >>out, line, + print(line, end=' ', file=out) continue elif state == 2: matchobj = bibre.search(line) @@ -238,13 +239,13 @@ def handlebbl(inputfile, out=sys.stdout, matchobj = bibreF.search(line) if matchobj: total += 1 - print >>data,line + print(line, file=data) outstring, sres = handlebibitem(lines, bibID, biblabel) if not sres: successful += 1 else: errors += 1 - print >>out, outstring, + print(outstring, end=' ', file=out) handleextra(extralines) lines = [line] extralines = [] @@ -266,10 +267,10 @@ def handlebbl(inputfile, out=sys.stdout, successful += 1 else: errors += 1 - print >>out, outstring, + print(outstring, end=' ', file=out) handleextra(extralines) - print >>out, line, - print >>data,matchobj.group(0) + print(line, end=' ', file=out) + print(matchobj.group(0), file=data) continue else: if line[:-1] == '': @@ -295,7 +296,7 @@ def handlebbl(inputfile, out=sys.stdout, successful += 1 else: errors += 1 - print >>out, outstring, + print(outstring, end=' ', file=out) handleextra(extralines) lines = [line] extralines = [] @@ -317,10 +318,10 @@ def handlebbl(inputfile, out=sys.stdout, successful += 1 else: errors += 1 - print >>out, outstring, + print(outstring, end=' ', file=out) handleextra(extralines) - print >>out, line, - print >>data,matchobj.group(0) + print(line, end=' ', file=out) + print(matchobj.group(0), file=data) continue else: if line[:-1] == '': @@ -337,8 +338,8 @@ def handlebbl(inputfile, out=sys.stdout, continue else: break - print "Job ended" - print "Total: %s, found: %s, errors: %s" % (total, successful, errors) + print("Job ended") + print("Total: %s, found: %s, errors: %s" % (total, successful, errors)) return (total, successful, errors) # @@ -347,7 +348,7 @@ def handlebbl(inputfile, out=sys.stdout, if len(sys.argv) < 2: progname = os.path.basename(sys.argv[0]) - print "Usage:\n %s " % progname + print("Usage:\n %s " % progname) sys.exit(1) infilename = sys.argv[1] filebase = os.path.splitext(infilename)[0] @@ -364,14 +365,14 @@ if os.path.isfile("%s.getmref.bak" % fil sys.stderr = file("%s.getmref.err" % filebase, 'w') total = 0; successful = 0; errors = 0 -print >>logfile, "File: %s" % infilename +print("File: %s" % infilename, file=logfile) try: total, successful, errors = handlebbl(inputfile, outputfile, datafile) except: - print >>sys.stderr,"[handlebbl]" - print >>sys.stderr,sys.exc_info() -print >>logfile, " total: %s, found: %s, errors: %s, time: %ss" % (total, successful, - errors, int(round(time.time()-starttime))) + print("[handlebbl]", file=sys.stderr) + print(sys.exc_info(), file=sys.stderr) +print(" total: %s, found: %s, errors: %s, time: %ss" % (total, successful, + errors, int(round(time.time()-starttime))), file=logfile) inputfile.close() outputfile.close() @@ -395,7 +396,7 @@ g.write(re.sub(r"\r"," ",x)) #fin de la modif -print 'Job completed in %ss' % int(round(time.time()-starttime)) +print('Job completed in %ss' % int(round(time.time()-starttime))) diff -up ./doc/latex/newcommand/newcommand.py.py3 ./doc/latex/newcommand/newcommand.py --- ./doc/latex/newcommand/newcommand.py.py3 2019-08-18 09:19:13.600873857 -0400 +++ ./doc/latex/newcommand/newcommand.py 2019-08-18 09:23:05.428293100 -0400 @@ -137,8 +137,7 @@ class CmdParser(GenericParser): GenericParser.__init__(self, start) def error(self, token): - raise ParseError, \ - ("Syntax error", 1+token.charOffset) + raise ParseError("Syntax error", 1+token.charOffset) def p_optarg(self, args): ' optarg ::= argtype delim defvals delim ' @@ -196,8 +195,7 @@ class CmdParser(GenericParser): def p_arg_3(self, args): ' arg ::= rawtext ' if args[0].attr != "*": - raise ParseError, \ - ('Literal text must be quoted between "{" and "}"', + raise ParseError('Literal text must be quoted between "{" and "}"', args[0].charOffset + 1) return AST(type='arg', charOffset=args[0].charOffset, @@ -264,8 +262,7 @@ def flattenAST(ast): node.argList = node.argList + node.kids[0].argList def default(self, node): - raise ParseError, \ - ('Internal error -- node type "%s" was unexpected' % node.type, + raise ParseError('Internal error -- node type "%s" was unexpected' % node.type, 1+node.charOffset) return FlattenAST(ast).argList @@ -293,8 +290,7 @@ def checkArgList(argList): prevformal = 0 for form, pos in formals: if form != prevformal + 1: - raise ParseError, \ - ("Expected parameter %d but saw parameter %d" % (prevformal+1, form), 1+pos) + raise ParseError("Expected parameter %d but saw parameter %d" % (prevformal+1, form), 1+pos) prevformal = form # Ensure that "*" appears at most once at the top level. @@ -302,8 +298,7 @@ def checkArgList(argList): for arg in argList: if arg[0] == "rawtext" and arg[1] == "*": if seenStar: - raise ParseError, \ - ("Only one star parameter is allowed", arg[2]) + raise ParseError("Only one star parameter is allowed", arg[2]) seenStar = True # Ensure that no optional argument contains more than nine formals. @@ -314,8 +309,7 @@ def checkArgList(argList): if oarg[0][0] == "#": optFormals += 1 if optFormals > 9: - raise ParseError, \ - ("An optional argument can contain at most nine formals", + raise ParseError("An optional argument can contain at most nine formals", oarg[2]) # Ensure that "#" is used only where it's allowed. @@ -325,8 +319,7 @@ def checkArgList(argList): if hashidx == 0 or (hashidx > 0 and arg[1][hashidx-1] != "\\"): if arg[0] == "quoted": hashidx += 1 - raise ParseError, \ - ('The "#" character cannot be used as a literal character unless escaped with "\\"', + raise ParseError('The "#" character cannot be used as a literal character unless escaped with "\\"', arg[2] + hashidx) elif arg[0] == "optarg": for oarg in arg[2:]: @@ -335,8 +328,7 @@ def checkArgList(argList): if hashidx == 0 or (hashidx > 0 and oarg[1][hashidx-1] != "\\"): if oarg[0] == "quoted": hashidx += 1 - raise ParseError, \ - ('The "#" character cannot be used as a literal character unless escaped with "\\"', + raise ParseError('The "#" character cannot be used as a literal character unless escaped with "\\"', oarg[2] + hashidx) @@ -369,7 +361,7 @@ class LaTeXgenerator(): ("i", 1)] romanStr = "" if num > 4000: - raise ParseError, ("Too many arguments", 0) + raise ParseError("Too many arguments", 0) for rom, dec in dec2rom: while num >= dec: romanStr += rom @@ -448,7 +440,7 @@ class LaTeXgenerator(): argSubtract is subtracted from each argument number. ''' if mode not in ["define", "call", "calldefault"]: - raise ParseError, ('Internal error (mode="%s")' % mode, argList[0][2]) + raise ParseError('Internal error (mode="%s")' % mode, argList[0][2]) argStr = "" findArgRE = re.compile('#(\d+)') for arg in argList: @@ -480,11 +472,11 @@ class LaTeXgenerator(): elif oarg[0] == "rawtext": argStr += oarg[1] else: - raise ParseError, ('Internal error ("%s")' % oarg[0], + raise ParseError('Internal error ("%s")' % oarg[0], oarg[2]) argStr += arg[1][1] else: - raise ParseError, ('Internal error ("%s")' % arg[0], arg[2]) + raise ParseError('Internal error ("%s")' % arg[0], arg[2]) return argStr def callMacro(self, macroNum): @@ -634,7 +626,7 @@ class LaTeXgenerator(): if arg[0] == "argument": formalsSoFar += 1 elif arg[0] == "optarg": - formalsSoFar += len(filter(lambda o: o[0][0] == "#", arg[2:])) + formalsSoFar += len([o for o in arg[2:] if o[0][0] == "#"]) def generate(self, argList): "Generate LaTeX code from an argument list." @@ -642,7 +634,7 @@ class LaTeXgenerator(): self.argList = argList self.partitionArgList() self.haveAt = len(self.argGroups) > 1 - self.haveStar = filter(lambda arg: arg[0]=="rawtext" and arg[1]=="*", self.argList) != [] + self.haveStar = [arg for arg in self.argList if arg[0]=="rawtext" and arg[1]=="*"] != [] self.topLevelName = self.argList[0][1] for arg in self.argList: if arg[0] == "argument": @@ -662,7 +654,7 @@ class LaTeXgenerator(): if self.haveAt: self.codeList.append("\\makeatother") for codeLine in self.codeList: - print codeLine + print(codeLine) # The buck starts here. @@ -679,7 +671,7 @@ if __name__ == '__main__': if oneLine=="" or oneLine[0]=="%": return if not isStdin: - print prompt, oneLine + print(prompt, oneLine) scanner = CmdScanner() parser = CmdParser() tokens = scanner.tokenize(oneLine) @@ -688,23 +680,23 @@ if __name__ == '__main__': checkArgList(argList) gen = LaTeXgenerator() gen.generate(argList) - except ParseError,(message, pos): + except ParseError(message, pos): sys.stderr.write((" "*(len(prompt)+pos)) + "^\n") sys.stderr.write("%s: %s.\n" % (sys.argv[0], message)) if isStdin: - print "" + print("") sys.setrecursionlimit(5000) prompt = "% Prototype:" if len(sys.argv) <= 1: isStdin = 1 - print prompt + " ", + print(prompt + " ", end=' ') while 1: oneLine = sys.stdin.readline() if not oneLine: break processLine() - print prompt + " ", + print(prompt + " ", end=' ') else: isStdin = 0 oneLine = string.join(sys.argv[1:]) diff -up ./doc/latex/newcommand/spark.py.py3 ./doc/latex/newcommand/spark.py --- ./doc/latex/newcommand/spark.py.py3 2019-08-18 09:23:28.774731080 -0400 +++ ./doc/latex/newcommand/spark.py 2019-08-18 09:23:53.167143894 -0400 @@ -31,7 +31,7 @@ def _namelist(instance): for b in c.__bases__: classlist.append(b) for name in dir(c): - if not namedict.has_key(name): + if name not in namedict: namelist.append(name) namedict[name] = 1 return namelist @@ -42,7 +42,7 @@ class GenericScanner: self.re = re.compile(pattern, re.VERBOSE) self.index2func = {} - for name, number in self.re.groupindex.items(): + for name, number in list(self.re.groupindex.items()): self.index2func[number-1] = getattr(self, 't_' + name) def makeRE(self, name): @@ -60,7 +60,7 @@ class GenericScanner: return string.join(rv, '|') def error(self, s, pos): - print "Lexical error at position %s" % pos + print("Lexical error at position %s" % pos) raise SystemExit def tokenize(self, s): @@ -73,7 +73,7 @@ class GenericScanner: groups = m.groups() for i in range(len(groups)): - if groups[i] and self.index2func.has_key(i): + if groups[i] and i in self.index2func: self.index2func[i](groups[i]) pos = m.end() @@ -114,7 +114,7 @@ class GenericParser: rule, fn = self.preprocess(rule, func) - if self.rules.has_key(lhs): + if lhs in self.rules: self.rules[lhs].append(rule) else: self.rules[lhs] = [ rule ] @@ -145,9 +145,9 @@ class GenericParser: union = {} self.first = {} - for rulelist in self.rules.values(): + for rulelist in list(self.rules.values()): for lhs, rhs in rulelist: - if not self.first.has_key(lhs): + if lhs not in self.first: self.first[lhs] = {} if len(rhs) == 0: @@ -155,14 +155,14 @@ class GenericParser: continue sym = rhs[0] - if not self.rules.has_key(sym): + if sym not in self.rules: self.first[lhs][sym] = 1 else: union[(sym, lhs)] = 1 changes = 1 while changes: changes = 0 - for src, dest in union.keys(): + for src, dest in list(union.keys()): destlen = len(self.first[dest]) self.first[dest].update(self.first[src]) if len(self.first[dest]) != destlen: @@ -179,7 +179,7 @@ class GenericParser: return None def error(self, token): - print "Syntax error at or near `%s' token" % token + print("Syntax error at or near `%s' token" % token) raise SystemExit def parse(self, tokens): @@ -190,7 +190,7 @@ class GenericParser: if self.ruleschanged: self.makeFIRST() - for i in xrange(len(tokens)): + for i in range(len(tokens)): states[i+1] = [] if states[i] == []: @@ -245,7 +245,7 @@ class GenericParser: # # A -> a . B (predictor) # - if self.rules.has_key(nextSym): + if nextSym in self.rules: # # Work on completer step some more; for rules # with empty RHS, the "parent state" is the @@ -253,7 +253,7 @@ class GenericParser: # so the Earley items the completer step needs # may not all be present when it runs. # - if needsCompletion.has_key(nextSym): + if nextSym in needsCompletion: new = (rule, pos+1, parent) olditem_i = needsCompletion[nextSym] if new not in state: @@ -265,7 +265,7 @@ class GenericParser: # # Has this been predicted already? # - if predicted.has_key(nextSym): + if nextSym in predicted: continue predicted[nextSym] = 1 @@ -289,15 +289,15 @@ class GenericParser: state.append(new) continue prhs0 = prhs[0] - if not self.rules.has_key(prhs0): + if prhs0 not in self.rules: if prhs0 != ttype: continue else: state.append(new) continue first = self.first[prhs0] - if not first.has_key(None) and \ - not first.has_key(ttype): + if None not in first and \ + ttype not in first: continue state.append(new) continue @@ -310,7 +310,7 @@ class GenericParser: # prhs = prule[1] if len(prhs) > 0 and \ - not self.rules.has_key(prhs[0]) and \ + prhs[0] not in self.rules and \ token != prhs[0]: continue state.append((prule, 0, i)) @@ -332,7 +332,7 @@ class GenericParser: while pos > 0: want = ((rule, pos, parent), state) - if not tree.has_key(want): + if want not in tree: # # Since pos > 0, it didn't come from closure, # and if it isn't in tree[], then there must @@ -388,7 +388,7 @@ class GenericParser: sortlist.append((len(rhs), name)) name2index[name] = i sortlist.sort() - list = map(lambda (a,b): b, sortlist) + list = [a_b[1] for a_b in sortlist] return children[name2index[self.resolve(list)]] def resolve(self, list): @@ -553,14 +553,14 @@ class GenericASTMatcher(GenericParser): def _dump(tokens, states): for i in range(len(states)): - print 'state', i + print('state', i) for (lhs, rhs), pos, parent in states[i]: - print '\t', lhs, '::=', - print string.join(rhs[:pos]), - print '.', - print string.join(rhs[pos:]), - print ',', parent + print('\t', lhs, '::=', end=' ') + print(string.join(rhs[:pos]), end=' ') + print('.', end=' ') + print(string.join(rhs[pos:]), end=' ') + print(',', parent) if i < len(tokens): - print - print 'token', str(tokens[i]) - print + print() + print('token', str(tokens[i])) + print() diff -up ./doc/latex/scanpages/replicate.py.py3 ./doc/latex/scanpages/replicate.py --- ./doc/latex/scanpages/replicate.py.py3 2019-08-18 09:24:16.753576091 -0400 +++ ./doc/latex/scanpages/replicate.py 2019-08-18 09:24:25.654361820 -0400 @@ -10,7 +10,7 @@ with open(filename,'r') as f: s='\n'.join(tmp) tmp=s.split("%Repetitions=") if len(tmp) != 2: - print "Bailing! The file does not contain exactly one '%Repetitions='" + print("Bailing! The file does not contain exactly one '%Repetitions='") sys.exit() ss=tmp[1] tmp2=ss.split('\n') @@ -18,7 +18,7 @@ numrep=int(tmp2[0]) #get variable names tmp=s.split("%Variables=") if len(tmp) != 2: - print "Bailing! The file does not contain exactly one '%Variables='" + print("Bailing! The file does not contain exactly one '%Variables='") sys.exit() ss=tmp[1] tmp2=ss.split('\n') @@ -35,7 +35,7 @@ for j in range(1,n): vbles[j]=vbles[j].strip().replace("+",":") x=vbles[j].split(":") if len(x) != 3: - print "Bad variable descriptor-- " + vbles[j] + print("Bad variable descriptor-- " + vbles[j]) sys.exit vlst.append(x[0]) nnn=0 diff -up ./tex/generic/pst-geo/data/convert.py.py3 ./tex/generic/pst-geo/data/convert.py --- ./tex/generic/pst-geo/data/convert.py.py3 2019-08-18 09:25:03.823442975 -0400 +++ ./tex/generic/pst-geo/data/convert.py 2019-08-18 09:25:09.578304446 -0400 @@ -1,79 +1,87 @@ from string import * -input=open('cities.data','r') -output=open('cities.tex','w') -nZeile=["% (c) Herbert Voss -1): - Land ="Australia" - elif (find(Land,"Italien")>-1): - Land ="Italy" - elif (find(Land,"Frankreich")>-1): - Land ="France" - elif (find(Land,"nemark")>0): - Land ="Denmark" - elif (find(Land,"britannien")>0): - Land ="GreatBritain" - elif (find(Land,"Elfenbein")>-1): - Land ="IvoryCoast" - elif (find(Land,"Emirate")>-1): - Land ="Emirates" - elif (find(Land,"rkei")>-1): - Land ="Turkey" - elif (find(Land,"thiopien")>-1): - Land ="Ethiopia" - elif (find(Land,"gypten")>-1): - Land ="Egypt" - elif (find(Land,"sterreich")>-1): - Land ="Austria" - elif (find(Land,"dafrika")>-1): - Land ="SouthAfrica" - Grad=zeile[57:59] - Minuten=zeile[61:63] - Breitengrad=float(Grad) + float(Minuten)/60.0 - NS=zeile[65] - if (NS=="S"): - Breitengrad = -Breitengrad - Grad=zeile[68:71] - Minuten=zeile[73:75] - Laengengrad=float(Grad) + float(Minuten)/60.0 - OW=zeile[77] - if (OW=="W"): - Laengengrad = -Laengengrad - if (Kstadt!=stadt): - Zeile="\\mapput("+str(Laengengrad)+","+str(Breitengrad)+")["+Kstadt+"]{"+stadt+"}["+Land+"]\n" + stadt = rstrip(zeile[0:23]) + Kstadt = umlaut(stadt) + Land = rstrip(zeile[24:56]) + if (Land == "Deutschland"): + Land = "Germany" + elif (Land[0:3] == "USA"): + Land = "USA" + elif (find(Land, "Australien") > -1): + Land = "Australia" + elif (find(Land, "Italien") > -1): + Land = "Italy" + elif (find(Land, "Frankreich") > -1): + Land = "France" + elif (find(Land, "nemark") > 0): + Land = "Denmark" + elif (find(Land, "britannien") > 0): + Land = "GreatBritain" + elif (find(Land, "Elfenbein") > -1): + Land = "IvoryCoast" + elif (find(Land, "Emirate") > -1): + Land = "Emirates" + elif (find(Land, "rkei") > -1): + Land = "Turkey" + elif (find(Land, "thiopien") > -1): + Land = "Ethiopia" + elif (find(Land, "gypten") > -1): + Land = "Egypt" + elif (find(Land, "sterreich") > -1): + Land = "Austria" + elif (find(Land, "dafrika") > -1): + Land = "SouthAfrica" + Grad = zeile[57:59] + Minuten = zeile[61:63] + Breitengrad = float(Grad) + float(Minuten)/60.0 + NS = zeile[65] + if (NS == "S"): + Breitengrad = -Breitengrad + Grad = zeile[68:71] + Minuten = zeile[73:75] + Laengengrad = float(Grad) + float(Minuten)/60.0 + OW = zeile[77] + if (OW == "W"): + Laengengrad = -Laengengrad + if (Kstadt != stadt): + Zeile = "\\mapput("+str(Laengengrad)+","+str(Breitengrad) + \ + ")["+Kstadt+"]{"+stadt+"}["+Land+"]\n" # Zeile="\\mapput[90]("+str(Laengengrad)+","+str(Breitengrad)+")["+Kstadt+"]{"+stadt+"}["+Land+"]\n" else: - Zeile="\\mapput("+str(Laengengrad)+","+str(Breitengrad)+"){"+stadt+"}["+Land+"]\n" + Zeile = "\\mapput("+str(Laengengrad)+"," + \ + str(Breitengrad)+"){"+stadt+"}["+Land+"]\n" # Zeile="\\mapput[90]("+str(Laengengrad)+","+str(Breitengrad)+"){"+stadt+"}["+Land+"]\n" return Zeile + + for line in input.readlines(): Zeile = process(line) - if (find(Zeile,"Italy")>0): # take Italy from the original file - Zeile = "% "+Zeile + if (find(Zeile, "Italy") > 0): # take Italy from the original file + Zeile = "% "+Zeile nZeile.append(Zeile) -input=open('villesItalia.tex','r') +input = open('villesItalia.tex', 'r') nZeile.append("% Italy\n") for line in input.readlines(): - if (find(line,"endinput")<0): - Zeile=line[0:len(line)-1]+"[Italy]\n" - nZeile.append(Zeile) + if (find(line, "endinput") < 0): + Zeile = line[0:len(line)-1]+"[Italy]\n" + nZeile.append(Zeile) input.close() nZeile.append("% France\n") -input=open('villesFrance.tex','r') +input = open('villesFrance.tex', 'r') for line in input.readlines(): - if (find(line,"endinput")<0): - Zeile=line[0:len(line)-1]+"[France]\n" - nZeile.append(Zeile) + if (find(line, "endinput") < 0): + Zeile = line[0:len(line)-1]+"[France]\n" + nZeile.append(Zeile) output.writelines(nZeile) nZeile.append("\\endinput\n") input.close() diff -up ./doc/generic/enctex/unimap.py.py3 ./doc/generic/enctex/unimap.py --- ./doc/generic/enctex/unimap.py.py3 2019-08-18 09:40:33.996050750 -0400 +++ ./doc/generic/enctex/unimap.py 2019-08-18 09:41:02.573362799 -0400 @@ -48,8 +48,6 @@ database = 'unimap.txt' # Input file output = 'utf8raw.tex' # Output file # Compatibility with Pyhton-2.1 -if not __builtins__.__dict__.has_key('True'): - True = 1; False = 0 if not __builtins__.__dict__.has_key('file'): file = open if not __builtins__.__dict__.has_key('dict'):