Ejemplo n.º 1
0
    def ns_data_create(self):
        res = LXB.Res("lxb_ns_data_t", self.ns_res_data, False,
                      self.ns_last_entry_name)
        res_prefix = LXB.Res("lxb_ns_prefix_data_t", self.ns_res_prefix_data,
                             False, self.ns_last_entry_name)

        for name in self.ns_list:
            str_name = ''

            if len(self.ns[name]["link"]) > 16:
                str_name = ".u.long_str = (lxb_char_t *) \"{}\"".format(
                    self.ns[name]["link"])
            else:
                str_name = ".u.short_str = \"{}\"".format(
                    self.ns[name]["link"])

            res.append(
                "{{{{{}, .length = {}, .next = NULL}}, {}, 1, true}}".format(
                    str_name, len(self.ns[name]["link"]),
                    self.ns[name]["c_name"]))

            if len(self.ns[name]["name"]) > 16:
                str_name = ".u.long_str = (lxb_char_t *) \"{}\"".format(
                    self.ns[name]["name"].lower())
            else:
                str_name = ".u.short_str = \"{}\"".format(
                    self.ns[name]["name"].lower())

            res_prefix.append(
                "{{{{{}, .length = {}, .next = NULL}}, {}, 1, true}}".format(
                    str_name, len(self.ns[name]["name"]),
                    self.ns[name]["c_name"]))

        return [res.create(1, True), res_prefix.create(1, True)]
Ejemplo n.º 2
0
    def make(self, name, temp_file_h, temp_file_c, save_to, save_to_c):
        tags = self.tags.enum_list
        res = LXB.Res("lxb_html_tree_insertion_mode_f", "{}_{}_res".format(self.prefix, name), False)
        res_closed = LXB.Res("lxb_html_tree_insertion_mode_f", "{}_{}_closed_res".format(self.prefix, name), False)

        for entry in tags:
            res.append("{}_{}_{} /* {} */".format(self.prefix, name, self.anything_else, entry["c_name"]))
            res_closed.append("{}_{}_{} /* {} */".format(self.prefix, name, self.anything_else_closed, entry["c_name"]))

        res_data = res.create(1, True)
        res_closed_data = res_closed.create(1, True)

        lxb_temp = LXB.Temp(temp_file_h, save_to)

        lxb_temp.pattern_append("%%NAME%%", name.upper())
        lxb_temp.pattern_append("%%HASH%%", self.tags.enum_hash_ifdef())
        lxb_temp.pattern_append("%%BODY-OPEN%%", ''.join(res_data))
        lxb_temp.pattern_append("%%BODY-CLOSED%%", ''.join(res_closed_data))

        lxb_temp.build()
        lxb_temp.save()

        lxb_temp = LXB.Temp(temp_file_c, save_to_c)

        lxb_temp.pattern_append("%%NAME%%", name)

        lxb_temp.build()
        lxb_temp.save()
Ejemplo n.º 3
0
    def tag_data_create_default(self):
        res = LXB.Res("lxb_tag_data_t", self.tag_res_data, False,
                      self.tag_last_entry_name)
        res_upper = LXB.Res("lxb_tag_data_t", self.tag_res_data_upper, False,
                            self.tag_last_entry_name)

        for entry in self.enum_list:
            # res.append("{{{{.u.long_str = (lxb_char_t *) \"{}\", .length = {}, .next = NULL}},\n     (const lxb_char_t *) \"{}\", {}, 1, true}}".format(entry["name"], len(entry["name"]), entry["name"].upper(), entry["c_name"]))

            if len(entry["name"]) > 16:
                res.append(
                    "{{{{.u.long_str = (lxb_char_t *) \"{}\", .length = {}, .next = NULL}}, {}, 1, true}}"
                    .format(entry["name"], len(entry["name"]),
                            entry["c_name"]))
                res_upper.append(
                    "{{{{.u.long_str = (lxb_char_t *) \"{}\", .length = {}, .next = NULL}}, {}, 1, true}}"
                    .format(entry["name"].upper(), len(entry["name"]),
                            entry["c_name"]))
            else:
                res.append(
                    "{{{{.u.short_str = \"{}\", .length = {}, .next = NULL}}, {}, 1, true}}"
                    .format(entry["name"], len(entry["name"]),
                            entry["c_name"]))
                res_upper.append(
                    "{{{{.u.short_str = \"{}\", .length = {}, .next = NULL}}, {}, 1, true}}"
                    .format(entry["name"].upper(), len(entry["name"]),
                            entry["c_name"]))

        return [res.create(1, True), res_upper.create(1, True)]
Ejemplo n.º 4
0
    def shs_create_and_save_html(self, temp_file, save_to, temp_file_interface,
                                 save_to_interface):
        data_list = self.tag_data_create_html()

        lxb_temp = LXB.Temp(temp_file, save_to)

        lxb_temp.pattern_append("%%CHECK_TAG_VERSION%%",
                                self.enum_hash_ifdef())
        lxb_temp.pattern_append("%%CHECK_NS_VERSION%%", self.ns_hash_ifdef())
        lxb_temp.pattern_append("%%TAG_DATA%%", ''.join(data_list[0]))
        lxb_temp.pattern_append("%%FIXNAME_SVG_DATA%%", ''.join(data_list[4]))

        lxb_temp.build()
        lxb_temp.save()

        lxb_temp = LXB.Temp(temp_file_interface, save_to_interface)

        lxb_temp.pattern_append("%%CHECK_TAG_VERSION%%",
                                self.enum_hash_ifdef())
        lxb_temp.pattern_append("%%CHECK_NS_VERSION%%", self.ns_hash_ifdef())
        lxb_temp.pattern_append("%%INCLUDES%%", '\n'.join(data_list[1]))
        lxb_temp.pattern_append("%%CONSTRUCTOR%%", ''.join(data_list[2]))
        lxb_temp.pattern_append("%%DESTRUCTOR%%", ''.join(data_list[3]))

        lxb_temp.build()
        lxb_temp.save()

        print(self.shs_stat(self.shs))
        print("Save to {}".format(save_to))
        print("Done")
Ejemplo n.º 5
0
    def save_res(self, temp_file_h, save_to_h, temp_file_c, save_to_c):
        res = self.make()

        lxb_temp = LXB.Temp(temp_file_h, save_to_h)
        lxb_temp.pattern_append("%%EXTERNS%%", '\n'.join(res[1]))
        lxb_temp.pattern_append("%%SIZES%%", '\n'.join(res[2]))
        lxb_temp.build()
        lxb_temp.save()

        lxb_temp = LXB.Temp(temp_file_c, save_to_c)
        lxb_temp.pattern_append("%%INDEX%%", '\n\n'.join(res[0]))
        lxb_temp.build()
        lxb_temp.save()
Ejemplo n.º 6
0
    def shs_create(self):
        attrs = []

        for name in attributes_name:
            if name == '_undef':
                var = "#undef"
            else:
                var = name

            attrs.append({
                "key":
                var,
                "value":
                "(void *) &{}[{}]".format(self.data_name,
                                          self.make_enum_name(name))
            })

        shs = LXB.SHS(attrs, 0, False)

        test = shs.make_test(5, 128)
        shs.table_size_set(test[0][2])

        res = shs.create(self.shs_name, rate=1)

        print(self.shs_stat(shs))

        return res
Ejemplo n.º 7
0
    def make_flat_index(self, name, values):
        buffer_size = self.buffer_size(values)

        print("Flat buffer size:", buffer_size)

        res = LXB.Res(self.flat_index_typename,
                      self.make_var_name(name) + '[{}]'.format(buffer_size),
                      False, None, 'LXB_API')

        for idx in range(0, buffer_size):
            if idx in values:
                entries = values[idx]

                res.append('{{(lxb_char_t *) "{}", {}, {}}}'.format(
                    toHex(entries[2].decode('utf-8')), entries[3],
                    entries[1].decode('utf-8')))
                res.append('/* {} */'.format(entries[4].decode('utf-8')),
                           is_comment=True)
            else:
                res.append('{NULL, 0, LXB_ENCODING_ERROR_CODEPOINT}')
                res.append('/* Not defined */', is_comment=True)

        buf = res.create()

        return buf
Ejemplo n.º 8
0
    def ns_shs_link_create(self, name):
        self.ns_shs_link = LXB.SHS(self.ns_shs_link_list, 0, True)

        test = self.ns_shs_link.make_test(5, 128)
        self.ns_shs_link.table_size_set(test[0][2])

        return self.ns_shs_link.create(name)
Ejemplo n.º 9
0
    def shs_create(self, name):
        self.shs = LXB.SHS(self.shs_list, 0, True)

        test = self.shs.make_test(128, 1024)
        self.shs.table_size_set(test[0][2])

        return self.shs.create(name)
Ejemplo n.º 10
0
    def ns_shs_create(self, name):
        self.ns_shs = LXB.SHS(self.ns_shs_list, 0, False)

        test = self.ns_shs.make_test(5, 128)
        self.ns_shs.table_size_set(test[0][2])

        return self.ns_shs.create(name)
Ejemplo n.º 11
0
    def make_const(self):
        idx = 0
        fconst = LXB.FormatEnum(self.const_typename)

        fconst.append(self.make_name_upper("DEFAULT"), "0x{0:02x}".format(idx))
        fconst.append(self.make_name_upper("AUTO"),
                      "0x{0:02x}".format(idx + 1))
        fconst.append(self.make_name_upper("UNDEFINED"),
                      "0x{0:02x}".format(idx + 2))

        idx += 2

        for encode in self.strict:
            idx += 1
            name = encode['name']
            fconst.append(self.make_name_upper(name), "0x{0:02x}".format(idx))

        fconst.append(self.make_name_upper(self.last_entry_name),
                      "0x{0:02x}".format(idx + 1))

        buf = fconst.build()

        if not self.silent:
            print('\n'.join(buf))

        return buf
Ejemplo n.º 12
0
    def make_shs(self, shs_name, data_name):
        idx = 2  # Skip first three data position (DEFAULT, AUTO, UNDEFINED)
        tlist = []

        for encode in self.strict:
            idx += 1

            for name in encode['labels']:
                value = '(void *) &{}[{}]'.format(data_name, idx)

                tlist.append({'key': name.lower(), 'value': value})

        shs = LXB.SHS(tlist, 0, False, '')

        test = shs.make_test(20, 2048)
        shs.table_size_set(test[0][2])

        if not self.silent:
            print('Table size: ' + str(test[0][2]))
            print('Max deep: ' + str(test[0][0]))

        buf = shs.create(shs_name)

        if not self.silent:
            print(''.join(buf))

        return buf
Ejemplo n.º 13
0
    def save_res(self, temp_file_h, save_to_h, temp_file_c, save_to_c):
        data = self.make_data('lxb_encoding_res_map')
        shs = self.make_shs('lxb_encoding_res_shs_entities',
                            'lxb_encoding_res_map')

        lxb_temp = LXB.Temp(temp_file_h, save_to_h)
        lxb_temp.pattern_append("%%MAX%%",
                                self.make_name_upper(self.last_entry_name))
        lxb_temp.build()
        lxb_temp.save()

        lxb_temp = LXB.Temp(temp_file_c, save_to_c)
        lxb_temp.pattern_append("%%DATA%%", ''.join(data))
        lxb_temp.pattern_append("%%SHS%%", ''.join(shs))
        lxb_temp.build()
        lxb_temp.save()
Ejemplo n.º 14
0
    def tag_data_create_default(self):
        result = []
        res = LXB.Res("lxb_tag_data_t", self.tag_res_data, True, self.tag_last_entry_name)

        for entry in self.enum_list:
            res.append("{{(const lxb_char_t *) \"{}\", (const lxb_char_t *) \"{}\", {}, {}}}".format(entry["name"], entry["name"].upper(), len(entry["name"]), entry["c_name"]))

        return res.create(1, False)
Ejemplo n.º 15
0
    def save_const(self, temp_file, save_to):
        buf = self.make_const()
        lxb_temp = LXB.Temp(temp_file, save_to)

        lxb_temp.pattern_append("%%CONST%%", '\n'.join(buf))

        lxb_temp.build()
        lxb_temp.save()
Ejemplo n.º 16
0
    def save(self, const_temp_file, const_save_to, res_temp_file, res_save_to):
        res_class = ps.make("pseudo_class", pseudo_classes)
        res_class_function = ps.make("pseudo_class_function", pseudo_class_functions, pseudo_class_functions_dict)
        res_element = ps.make("pseudo_element", pseudo_elements)
        res_element_function = ps.make("pseudo_element_function", pseudo_element_functions, pseudo_element_functions_dict)

        # const
        lxb_temp = LXB.Temp(const_temp_file, const_save_to)

        lxb_temp.pattern_append("%%BODY%%",
                                "{}\n\n{}\n\n{}\n\n{}".format('\n'.join(res_class[0]),
                                                        '\n'.join(res_class_function[0]),
                                                        '\n'.join(res_element[0]),
                                                        '\n'.join(res_element_function[0])))

        lxb_temp.build()
        lxb_temp.save()

        print("Const saved to {}".format(const_save_to))

        # res
        lxb_temp = LXB.Temp(res_temp_file, res_save_to)

        lxb_temp.pattern_append("%%SHS_DATA%%",
                                "{}\n\n{}\n\n{}\n\n{}".format(''.join(res_class[1]),
                                                        ''.join(res_class_function[1]),
                                                        ''.join(res_element[1]),
                                                        ''.join(res_element_function[1])))
        lxb_temp.pattern_append("%%SHS%%",
                                "{}\n\n{}\n\n{}\n\n{}".format(''.join(res_class[2]),
                                                        ''.join(res_class_function[2]),
                                                        ''.join(res_element[2]),
                                                        ''.join(res_element_function[2])))

        lxb_temp.build()
        lxb_temp.save()

        print("Res saved to {}".format(res_save_to))
        print("Done")

        yn = input("Print declarations? (y - yes, n - no): ")
        if yn.lower() == 'y':
            print('LXB_API ', ';\n\nLXB_API '.join(res_class_function[3]), ';', sep='')
            print('LXB_API ', ';\n\nLXB_API '.join(res_element_function[3]), ';', sep='')
            print('\n\n'.join(res_class_function[4]))
            print('\n\n'.join(res_element_function[4]))
Ejemplo n.º 17
0
    def save_test(self, data, const_name, name):
        save_to_c = os.path.join(self.save_to, name + ".c")

        lxb_temp = LXB.Temp(self.temp_file_c, save_to_c)
        lxb_temp.pattern_append("%%DATA%%", data)
        lxb_temp.pattern_append("%%CONST_NAME%%", const_name)
        lxb_temp.pattern_append("%%NAME%%", name)
        lxb_temp.build()
        lxb_temp.save()
Ejemplo n.º 18
0
    def tag_test_create_and_save(self, temp_file, save_to):
        lxb_temp = LXB.Temp(temp_file, save_to)

        lxb_temp.pattern_append("%%TEST_NAMES%%", "\n".join(self.tag_test_name_create()))

        lxb_temp.build()
        lxb_temp.save()

        print("Test saved to {}".format(save_to))
Ejemplo n.º 19
0
    def save_res(self, filename, buf, hash_buf):
        save_to_c = os.path.join(self.save_to, filename + ".c")

        print("Save to:", save_to_c)

        lxb_temp = LXB.Temp(self.temp_file_c, save_to_c)
        lxb_temp.pattern_append("%%INDEX%%", buf)
        lxb_temp.pattern_append("%%HASH%%", hash_buf)
        lxb_temp.build()
        lxb_temp.save()
Ejemplo n.º 20
0
    def enum_save(self, data, temp_file, save_to):
        lxb_temp = LXB.Temp(temp_file, save_to)
        lxb_temp.pattern_append("%%HASH%%", self.enum_hash)
        lxb_temp.pattern_append("%%BODY%%", "\n".join(data))

        lxb_temp.build()
        lxb_temp.save()

        print("\n".join(data))
        print("Save to {}".format(save_to))
        print("Done")
Ejemplo n.º 21
0
    def enum_create(self):
        result = []

        frmt_enum = LXB.FormatEnum("{}_id_enum_t".format(self.tag_prefix))

        for idx in range(0, len(self.enum_list)):
            frmt_enum.append(self.enum_list[idx]["c_name"], "0x{0:04x}".format(idx))

        frmt_enum.append(self.tag_last_entry_name, "0x{0:04x}".format(idx + 1))

        return frmt_enum.build()
Ejemplo n.º 22
0
    def const_create(self):
        frmt_enum = LXB.FormatEnum("{}id_enum_t".format(self.prefix.lower()))

        for idx in range(0, len(attributes_name)):
            frmt_enum.append(self.make_enum_name(attributes_name[idx]),
                             "0x{0:04x}".format(idx))

        frmt_enum.append(self.make_enum_name("_LAST_ENTRY"),
                         "0x{0:04x}".format(idx + 1))

        return frmt_enum.build()
Ejemplo n.º 23
0
def create(name, enum_tokens):
    tlist = []

    for (key, value) in enum_tokens.items():
        tlist.append({'key': key, 'value': "(void *) " + value})

    shs = LXB.SHS(tlist, 0, True)

    test = shs.make_test(5, 128)
    shs.table_size_set(test[0][2])

    return shs.create(name)
Ejemplo n.º 24
0
    def ns_create(self):
        result = []

        frmt_ns = LXB.FormatEnum("{}_id_enum_t".format(self.ns_prefix))

        for idx in range(0, len(self.ns_list)):
            name = self.ns_list[idx]
            frmt_ns.append(self.ns[name]["c_name"], "0x{0:02x}".format(idx))

        frmt_ns.append(self.ns_last_entry_name, "0x{0:02x}".format(idx + 1))

        return frmt_ns.build()
Ejemplo n.º 25
0
    def ns_data_create(self):
        result = []
        res = LXB.Res("lxb_ns_data_t", self.ns_res_data, True,
                      self.ns_last_entry_name)

        for name in self.ns_list:
            res.append("{{\"{0}\", \"{1}\", {2}, \"{3}\", {4}, {5}}}".format(
                self.ns[name]["name"], self.ns[name]["name"].lower(),
                len(self.ns[name]["name"]), self.ns[name]["link"],
                len(self.ns[name]["link"]), self.ns[name]["c_name"]))

        return res.create(1, False)
Ejemplo n.º 26
0
    def make_range_index(self, name, values):
        res = LXB.Res(self.range_index_typename,
                      self.make_range_name(name) + '[{}]'.format(len(values)),
                      False, None, 'LXB_API')

        for entry in values:
            res.append('{{{}, {}}}'.format(entry[0].decode('utf-8'),
                                           entry[1].decode('utf-8')))

        buf = res.create(rate=4)

        return buf
Ejemplo n.º 27
0
    def const_save(self, temp_file, save_to):
        res = self.const_create()

        lxb_temp = LXB.Temp(temp_file, save_to)

        lxb_temp.pattern_append("%%BODY%%", '\n'.join(res))

        lxb_temp.build()
        lxb_temp.save()

        print("\n".join(res))
        print("Save to {}".format(save_to))
        print("Done")
Ejemplo n.º 28
0
    def make_hash_index(self, name, values):
        name = self.make_hash_name(name)

        hash_key = LXB.HashKey(412, name, 'LXB_API')

        for idx in range(0, self.buffer_size):
            if idx in values:
                entries = values[idx]
                key_id = entries[1].decode('utf-8')

                hash_key.append(key_id, '(void *) {}'.format(idx + 0x80))

        return hash_key.create(rate=1)
Ejemplo n.º 29
0
    def shs_save(self, data, temp_file, save_to):
        lxb_temp = LXB.Temp(temp_file, save_to)

        lxb_temp.pattern_append("%%CHECK_TAG_VERSION%%", self.enum_hash_ifdef())
        lxb_temp.pattern_append("%%TAG_DATA%%", ''.join(self.tag_data_create_default()))
        lxb_temp.pattern_append("%%SHS_DATA%%", ''.join(data))

        lxb_temp.build()
        lxb_temp.save()

        print("".join(data))
        print(self.shs_stat(self.shs))
        print("Save to {}".format(save_to))
        print("Done")
Ejemplo n.º 30
0
    def ns_shs_save(self, data, data_link, temp_file, save_to):
        lxb_temp = LXB.Temp(temp_file, save_to)

        lxb_temp.pattern_append("%%CHECK_NS_VERSION%%", self.ns_hash_ifdef())
        lxb_temp.pattern_append("%%NS_DATA%%", ''.join(self.ns_data_create()))
        # lxb_temp.pattern_append("%%SHS_DATA%%", ''.join(data))
        lxb_temp.pattern_append("%%SHS_DATA_LINK%%", ''.join(data_link))

        lxb_temp.build()
        lxb_temp.save()

        print("".join(data))
        print(self.shs_stat(self.ns_shs))
        print("Save to {}".format(save_to))
        print("Done")