3 # Generate Format tables
7 from optparse import OptionParser
9 OUTPUT_FILE = "FormatTables.cpp"
11 def generate_table(f, type_name, name, map):
12 f.write("extern const {0} {1}[] = {{".format(type_name, name))
13 for i in range(0, 256):
16 f.write("{0}::{1}, ".format(type_name, map.get(chr(i), "INVALID")))
19 def generate_conv_table(f, name, values):
22 for i, v in enumerate(values):
24 f.write("extern const char {0}[{1}][{2}] = {{\n".format(
25 name, len(values), len(v)))
26 row = "{{{0}}}, ".format(", ".join("'{0}'".format(x) for x in v))
27 if len(line) + len(row) > 79:
36 return (tuple("{0:03o}".format(x)) for x in range(512))
38 def hex_values(upper):
39 fmt = "{0:02X}" if upper else "{0:02x}"
40 return (tuple(fmt.format(x)) for x in range(256))
43 return (tuple("{0:08b}".format(x)) for x in range(256))
46 f.write("#include <folly/FormatArg.h>\n"
49 "namespace detail {\n"
53 f, "FormatArg::Align", "formatAlignTable",
54 {"<": "LEFT", ">": "RIGHT", "=": "PAD_AFTER_SIGN", "^": "CENTER"})
57 f, "FormatArg::Sign", "formatSignTable",
58 {"+": "PLUS_OR_MINUS", "-": "MINUS", " ": "SPACE_OR_MINUS"})
60 generate_conv_table(f, "formatOctal", octal_values())
61 generate_conv_table(f, "formatHexLower", hex_values(False))
62 generate_conv_table(f, "formatHexUpper", hex_values(True))
63 generate_conv_table(f, "formatBinary", binary_values())
65 f.write("} // namespace detail\n"
66 "} // namespace folly\n")
69 parser = OptionParser()
70 parser.add_option("--install_dir", dest="install_dir", default=".",
71 help="write output to DIR", metavar="DIR")
72 parser.add_option("--fbcode_dir")
73 (options, args) = parser.parse_args()
74 f = open(os.path.join(options.install_dir, OUTPUT_FILE), "w")
78 if __name__ == "__main__":