|
|
|
@ -1,11 +1,15 @@ |
|
|
|
|
#!/usr/bin/python |
|
|
|
|
|
|
|
|
|
from __future__ import print_function |
|
|
|
|
import sys, os, re, difflib, unicodedata, errno, cgi |
|
|
|
|
from itertools import * |
|
|
|
|
|
|
|
|
|
diff_symbols = "-+=*&^%$#@!~/" |
|
|
|
|
diff_colors = ['red', 'green', 'blue'] |
|
|
|
|
|
|
|
|
|
if sys.version_info[0] >= 3: |
|
|
|
|
unichr = chr |
|
|
|
|
|
|
|
|
|
class ColorFormatter: |
|
|
|
|
|
|
|
|
|
class Null: |
|
|
|
@ -142,7 +146,7 @@ class ZipDiffer: |
|
|
|
|
sys.stdout.writelines ([symbols[i], l]) |
|
|
|
|
except IOError as e: |
|
|
|
|
if e.errno != errno.EPIPE: |
|
|
|
|
print >> sys.stderr, "%s: %s: %s" % (sys.argv[0], e.filename, e.strerror) |
|
|
|
|
print ("%s: %s: %s" % (sys.argv[0], e.filename, e.strerror), file=sys.stderr) |
|
|
|
|
sys.exit (1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -215,7 +219,7 @@ class DiffSinks: |
|
|
|
|
else: |
|
|
|
|
failed += 1 |
|
|
|
|
total = passed + failed |
|
|
|
|
print "%d out of %d tests passed. %d failed (%g%%)" % (passed, total, failed, 100. * failed / total) |
|
|
|
|
print ("%d out of %d tests passed. %d failed (%g%%)" % (passed, total, failed, 100. * failed / total)) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def print_ngrams (f, ns=(1,2,3)): |
|
|
|
@ -240,7 +244,7 @@ class DiffSinks: |
|
|
|
|
del importantgrams |
|
|
|
|
|
|
|
|
|
for ngram, stats in allgrams.iteritems (): |
|
|
|
|
print "zscore: %9f failed: %6d passed: %6d ngram: <%s>" % (stats.zscore (allstats), stats.failed.count, stats.passed.count, ','.join ("U+%04X" % u for u in ngram)) |
|
|
|
|
print ("zscore: %9f failed: %6d passed: %6d ngram: <%s>" % (stats.zscore (allstats), stats.failed.count, stats.passed.count, ','.join ("U+%04X" % u for u in ngram))) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -310,7 +314,7 @@ class FilterHelpers: |
|
|
|
|
def filter_printer_function (filter_callback): |
|
|
|
|
def printer (f): |
|
|
|
|
for line in filter_callback (f): |
|
|
|
|
print line |
|
|
|
|
print (line) |
|
|
|
|
return printer |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
@ -344,7 +348,7 @@ class UtilMains: |
|
|
|
|
def process_multiple_files (callback, mnemonic = "FILE"): |
|
|
|
|
|
|
|
|
|
if "--help" in sys.argv: |
|
|
|
|
print "Usage: %s %s..." % (sys.argv[0], mnemonic) |
|
|
|
|
print ("Usage: %s %s..." % (sys.argv[0], mnemonic)) |
|
|
|
|
sys.exit (1) |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
@ -353,14 +357,14 @@ class UtilMains: |
|
|
|
|
callback (FileHelpers.open_file_or_stdin (s)) |
|
|
|
|
except IOError as e: |
|
|
|
|
if e.errno != errno.EPIPE: |
|
|
|
|
print >> sys.stderr, "%s: %s: %s" % (sys.argv[0], e.filename, e.strerror) |
|
|
|
|
print ("%s: %s: %s" % (sys.argv[0], e.filename, e.strerror), file=sys.stderr) |
|
|
|
|
sys.exit (1) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def process_multiple_args (callback, mnemonic): |
|
|
|
|
|
|
|
|
|
if len (sys.argv) == 1 or "--help" in sys.argv: |
|
|
|
|
print "Usage: %s %s..." % (sys.argv[0], mnemonic) |
|
|
|
|
print ("Usage: %s %s..." % (sys.argv[0], mnemonic)) |
|
|
|
|
sys.exit (1) |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
@ -368,7 +372,7 @@ class UtilMains: |
|
|
|
|
callback (s) |
|
|
|
|
except IOError as e: |
|
|
|
|
if e.errno != errno.EPIPE: |
|
|
|
|
print >> sys.stderr, "%s: %s: %s" % (sys.argv[0], e.filename, e.strerror) |
|
|
|
|
print ("%s: %s: %s" % (sys.argv[0], e.filename, e.strerror), file=sys.stderr) |
|
|
|
|
sys.exit (1) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
@ -377,8 +381,8 @@ class UtilMains: |
|
|
|
|
concat_separator = False): |
|
|
|
|
|
|
|
|
|
if "--help" in sys.argv: |
|
|
|
|
print "Usage:\n %s %s...\nor:\n %s\n\nWhen called with no arguments, input is read from standard input." \ |
|
|
|
|
% (sys.argv[0], mnemonic, sys.argv[0]) |
|
|
|
|
print ("Usage:\n %s %s...\nor:\n %s\n\nWhen called with no arguments, input is read from standard input." \ |
|
|
|
|
% (sys.argv[0], mnemonic, sys.argv[0])) |
|
|
|
|
sys.exit (1) |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
@ -389,15 +393,15 @@ class UtilMains: |
|
|
|
|
break |
|
|
|
|
if line[-1] == '\n': |
|
|
|
|
line = line[:-1] |
|
|
|
|
print callback (line) |
|
|
|
|
print (callback (line)) |
|
|
|
|
else: |
|
|
|
|
args = sys.argv[1:] |
|
|
|
|
if concat_separator != False: |
|
|
|
|
args = [concat_separator.join (args)] |
|
|
|
|
print separator.join (callback (x) for x in (args)) |
|
|
|
|
print (separator.join (callback (x) for x in (args))) |
|
|
|
|
except IOError as e: |
|
|
|
|
if e.errno != errno.EPIPE: |
|
|
|
|
print >> sys.stderr, "%s: %s: %s" % (sys.argv[0], e.filename, e.strerror) |
|
|
|
|
print ("%s: %s: %s" % (sys.argv[0], e.filename, e.strerror), file=sys.stderr) |
|
|
|
|
sys.exit (1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -415,7 +419,9 @@ class Unicode: |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def encode (s): |
|
|
|
|
return u''.join (unichr (x) for x in Unicode.parse (s)).encode ('utf-8') |
|
|
|
|
s = u''.join (unichr (x) for x in Unicode.parse (s)) |
|
|
|
|
if sys.version_info[0] == 2: s = s.encode ('utf-8') |
|
|
|
|
return s |
|
|
|
|
|
|
|
|
|
shorthands = { |
|
|
|
|
"ZERO WIDTH NON-JOINER": "ZWNJ", |
|
|
|
@ -471,7 +477,7 @@ class Manifest: |
|
|
|
|
|
|
|
|
|
if not os.path.exists (s): |
|
|
|
|
if strict: |
|
|
|
|
print >> sys.stderr, "%s: %s does not exist" % (sys.argv[0], s) |
|
|
|
|
print ("%s: %s does not exist" % (sys.argv[0], s), file=sys.stderr) |
|
|
|
|
sys.exit (1) |
|
|
|
|
return |
|
|
|
|
|
|
|
|
@ -487,7 +493,7 @@ class Manifest: |
|
|
|
|
yield p |
|
|
|
|
except IOError: |
|
|
|
|
if strict: |
|
|
|
|
print >> sys.stderr, "%s: %s does not exist" % (sys.argv[0], os.path.join (s, "MANIFEST")) |
|
|
|
|
print ("%s: %s does not exist" % (sys.argv[0], os.path.join (s, "MANIFEST")), file=sys.stderr) |
|
|
|
|
sys.exit (1) |
|
|
|
|
return |
|
|
|
|
else: |
|
|
|
@ -506,12 +512,12 @@ class Manifest: |
|
|
|
|
dirnames.sort () |
|
|
|
|
filenames.sort () |
|
|
|
|
ms = os.path.join (dirpath, "MANIFEST") |
|
|
|
|
print " GEN %s" % ms |
|
|
|
|
print (" GEN %s" % ms) |
|
|
|
|
m = open (ms, "w") |
|
|
|
|
for f in filenames: |
|
|
|
|
print >> m, f |
|
|
|
|
print (f, file=m) |
|
|
|
|
for f in dirnames: |
|
|
|
|
print >> m, f |
|
|
|
|
print (f, file=m) |
|
|
|
|
for f in dirnames: |
|
|
|
|
Manifest.update_recursive (os.path.join (dirpath, f)) |
|
|
|
|
|
|
|
|
|