3 # Generate Escape tables.
4 # Copyright 2011 Facebook
6 # @author Tudor Bosman (tudorb@fb.com)
9 from optparse import OptionParser
11 OUTPUT_FILE = "EscapeTables.cpp"
14 f.write("namespace folly {\n"
15 "namespace detail {\n"
17 f.write("extern const char cEscapeTable[] =\n")
26 for i in range(0, 256):
34 elif i < 32 or i > 126:
42 f.write("extern const char cUnescapeTable[] =\n")
43 for i in range(0, 256):
51 elif c in '"\\abfnrtv':
53 elif i >= ord('0') and i <= ord('7'):
58 f.write("I") # invalid
61 "extern const unsigned char hexTable[] = {")
63 for i in range(0, 256):
66 if i >= ord('0') and i <= ord('9'):
67 f.write("{0:2d}, ".format(i - ord('0')))
68 elif i >= ord('a') and i <= ord('f'):
69 f.write("{0:2d}, ".format(i - ord('a') + 10))
70 elif i >= ord('A') and i <= ord('F'):
71 f.write("{0:2d}, ".format(i - ord('A') + 10))
77 f.write("} // namespace detail\n"
78 "} // namespace folly\n")
81 parser = OptionParser()
82 parser.add_option("--install_dir", dest="install_dir", default=".",
83 help="write output to DIR", metavar="DIR")
84 parser.add_option("--fbcode_dir")
85 (options, args) = parser.parse_args()
86 f = open(os.path.join(options.install_dir, OUTPUT_FILE), "w")
90 if __name__ == "__main__":