Beispiel #1
0
def main(args):
    if len(args) != 1:
        print("usage: %s <configuration file>" % sys.argv[0])
        return 1
    config = read_config_file(args[0])
    arrays = {}
    for label, path in config:
        print(f"{label} {path}", file=sys.stderr)
        name = os.path.basename(path)
        name = os.path.splitext(name)[0].replace("-", "_")
        mapping = read_character_map(path)
        ranges = get_char_ranges(mapping)
        if not ranges:
            continue
        ranges.sort(key=lambda v: v[1])
        lines = [f"constexpr CodePageRange {label}_{name}_CHARS[] = {{"]
        strs = []
        for index, char, count in ranges:
            count -= 1
            if char < 65536:
                strs.append(f"{{0x{char:04X}, {index:3d}, {count:3d}}}")
            else:
                first = (char >> 16) & 0xFFFF
                second = char & 0xFFFF
                strs.append(f"{{0x{first:04X}, 255, 255}}")
                strs.append(f"{{0x{second:04X}, {index:3d}, {count:3d}}}")
        value_lines = codegen.join(strs,
                                   line_width=70,
                                   sep=", ",
                                   newline_sep=",")
        lines.extend("    " + s for s in value_lines)
        lines.append("};")
        entry = arrays.setdefault(label, ([], []))
        entry[0].append(lines)
        entry[1].append(f"{label}_{name}")
    lines = []
    for key in arrays:
        lines.append("")
        lines.append(f"#ifdef YCONVERT_ENABLE_{key}_CODE_PAGES")
        for arr_lines in arrays[key][0]:
            lines.append("")
            lines.extend(arr_lines)
        lines.append("")
        cases = []
        for c in arrays[key][1]:
            expander = codegen.DictExpander(dict(name=c))
            cases.extend(codegen.make_lines(CASE_TEMPLATE, expander))
        expander = codegen.DictExpander(dict(cases=cases, label=key.title()))
        lines.extend(codegen.make_lines(GET_RANGES_TEMPLATE, expander))
        lines.append("#endif")
    date = datetime.date.today()
    expander = codegen.DictExpander(
        dict(arrays=lines,
             year=date.year,
             date="%d-%02d-%02d" % (date.year, date.month, date.day)))
    print(codegen.make_text(FILE_TEMPLATE, expander))
    return 0
Beispiel #2
0
def writeCpp(asciiClasses, allClasses):
    date = datetime.date.today()
    codegenParams = dict(
        year=date.year,
        date="%d-%02d-%02d" % (date.year, date.month, date.day),
        asciiClasses=asciiClasses,
        allClasses=allClasses)
    print(codegen.makeText(template, codegen.DictExpander(codegenParams)))
Beispiel #3
0
def write_cpp(ascii_classes, all_classes):
    date = datetime.date.today()
    codegen_params = {
        'year': date.year,
        'date': "%d-%02d-%02d" % (date.year, date.month, date.day),
        'asciiClasses': ascii_classes,
        'allClasses': all_classes
    }
    print(codegen.make_text(Template, codegen.DictExpander(codegen_params)))
Beispiel #4
0
def write_cpp(normalized, denormalized):
    date = datetime.date.today()
    codegen_params = {
        'year': date.year,
        'date': "%d-%02d-%02d" % (date.year, date.month, date.day),
        'to_normalized': normalized,
        'to_denormalized': denormalized
    }
    print(codegen.make_text(Template, codegen.DictExpander(codegen_params)))
Beispiel #5
0
def write_cpp(diff_sets, mappings, name):
    compact_mappings = []
    for diff_set in diff_sets:
        if diff_set[1] < 0:
            s = "{0x%06X, 0x%08X, 0x%08X, 0x%08X}," % (
                diff_set[0], 2**32 + diff_set[1], diff_set[2], diff_set[3])
        else:
            s = "{0x%06X, 0x%08X, 0x%08X, 0x%08X}," % diff_set
        compact_mappings.append(s)
    expanded_mappings = []
    for ch, alt_ch in mappings:
        expanded_mappings.append("{0x%06X, 0x%06X}," % (ch, alt_ch))
    date = datetime.date.today()
    codegen_params = dict(year=date.year,
                          date="%d-%02d-%02d" %
                          (date.year, date.month, date.day),
                          name=name.upper(),
                          compact_mappings=compact_mappings,
                          mappings=expanded_mappings)
    print(codegen.make_text(template, codegen.DictExpander(codegen_params)))