#include"abc_html.h"
// HTML & CSS attrs
-static char* src_keys[] = {"src", "源", NULL};
-static char* rel_keys[] = {"rel", "关系", NULL};
-static char* alt_keys[] = {"alt", "替代文本", NULL};
-static char* href_keys[] = {"href", "地址", NULL};
-
-static char* width_keys[] = {"width", "宽度", NULL};
-static char* height_keys[] = {"height", "高度", NULL};
-
-static char* display_keys[] = {"display", "显示模式", NULL};
-static char* visible_keys[] = {"visibility", "可见性", NULL};
-static char* opacity_keys[] = {"opacity", "透明度", NULL};
-static char* filter_keys[] = {"filter", "滤镜", NULL};
-
-static char* margin_keys[] = {"margin", "外边距", NULL};
-static char* margin_top_keys[] = {"margin-top", "上边缘", NULL};
-static char* margin_bottom_keys[] = {"margin-bottom", "下边缘", NULL};
-static char* margin_left_keys[] = {"margin-left", "左边缘", NULL};
-static char* margin_right_keys[] = {"margin-right", "右边缘", NULL};
-
-static char* border_keys[] = {"border", "边框", NULL};
-static char* border_top_keys[] = {"border-top", "上边框", NULL};
-static char* border_bottom_keys[] = {"border-bottom", "下边框", NULL};
-static char* border_left_keys[] = {"border-left", "左边框", NULL};
-static char* border_right_keys[] = {"border-right", "右边框", NULL};
-
-static char* padding_keys[] = {"padding", "内边距", NULL};
-static char* padding_top_keys[] = {"padding-top", "上填充", NULL};
-static char* padding_bottom_keys[] = {"padding-bottom", "下填充", NULL};
-static char* padding_left_keys[] = {"padding-left", "左填充", NULL};
-static char* padding_right_keys[] = {"padding-right", "右填充", NULL};
-
-static char* position_keys[] = {"position", "定位", NULL};
-static char* top_keys[] = {"top", "上", NULL};
-static char* bottom_keys[] = {"bottom", "下", NULL};
-static char* left_keys[] = {"left", "左", NULL};
-static char* right_keys[] = {"right", "右", NULL};
-
-static char* font_keys[] = {"font", "字体", NULL};
-static char* font_size_keys[] = {"font-size", "字号", NULL};
-static char* font_color_keys[] = {"font-color", "字体颜色", "color", "颜色", NULL};
-static char* font_style_keys[] = {"style", "字体风格", NULL};
-
-static char* text_align_keys[] = {"text-align", "对齐", NULL};
-static char* text_decoration_keys[] = {"text-decoration", "下划线", NULL};
-static char* text_transform_keys[] = {"text-transform", "大小写", NULL};
-static char* text_indent_keys[] = {"text-transform", "缩进", NULL};
-
-static char* vertical_align_keys[] = {"vertical-align", "垂直对齐", NULL};
-
-static char* bg_keys[] = {"background", "背景", NULL};
-static char* bg_color_keys[] = {"background-color", "背景颜色", NULL};
-static char* bg_image_keys[] = {"background-image", "背景图片", NULL};
-static char* bg_repeat_keys[] = {"background-repeat", "背景重复", NULL};
-static char* bg_position_keys[] = {"background-position", "背景位置", NULL};
-
-static char* overflow_keys[] = {"overflow", "内容溢出", NULL};
-static char* scroll_width_keys[] = {"scrollbar-width", "滚动条宽度", NULL};
-static char* scroll_color_keys[] = {"scrollbar-color", "滚动条颜色", NULL};
-
-static char* list_style_keys[] = {"list-style", "列表风格", NULL};
-static char* list_style_type_keys[] = {"list-style-type", "列表标记", NULL};
-static char* list_style_image_keys[] = {"list-style-image", "列表标记图片", NULL};
-static char* list_style_pos_keys[] = {"list-style-position", "列表标记位置", NULL};
-
-static char* border_collapse_keys[] = {"border-collapse", "边框折叠", NULL};
-
-static char* class_keys[] = {"class", "类名", NULL};
-static char* type_keys[] = {"type", "类型", NULL};
-static char* name_keys[] = {"name", "名字", NULL};
-static char* for_keys[] = {"for", "关于", NULL};
-static char* id_keys[] = {"id", "编号", NULL};
-
-static char* size_keys[] = {"size", NULL};
-static char* value_keys[] = {"value", "值", NULL};
-static char* action_keys[] = {"action", "动作", NULL};
-static char* method_keys[] = {"method", "方法", NULL};
-static char* control_keys[] = {"controls", "控件", NULL};
-
-static char* xmlns_keys[] = {"xmlns", NULL};
-static char* xmlang_keys[] = {"xml:lang", NULL};
-static char* lang_keys[] = {"lang", "语言", NULL};
-
-static char* http_equiv_keys[] = {"http-equiv", NULL};
-static char* content_keys[] = {"content", "正文类型", NULL};
-static char* charset_keys[] = {"charset", "字符集", NULL};
-
-static char* enctype_keys[] = {"enctype", NULL};
-
+static abc_str_t src_keys[] = {ABC_STR("src"), ABC_STR("源")};
+static abc_str_t rel_keys[] = {ABC_STR("rel"), ABC_STR("关系")};
+static abc_str_t alt_keys[] = {ABC_STR("alt"), ABC_STR("替代文本")};
+static abc_str_t href_keys[] = {ABC_STR("href"), ABC_STR("地址")};
+
+static abc_str_t width_keys[] = {ABC_STR("width"), ABC_STR("宽度")};
+static abc_str_t height_keys[] = {ABC_STR("height"), ABC_STR("高度")};
+static abc_str_t display_keys[] = {ABC_STR("display"), ABC_STR("显示模式")};
+static abc_str_t visible_keys[] = {ABC_STR("visibility"), ABC_STR("可见性")};
+static abc_str_t opacity_keys[] = {ABC_STR("opacity"), ABC_STR("透明度")};
+static abc_str_t filter_keys[] = {ABC_STR("filter"), ABC_STR("滤镜")};
+
+static abc_str_t margin_keys[] = {ABC_STR("margin"), ABC_STR("外边距")};
+static abc_str_t margin_top_keys[] = {ABC_STR("margin-top"), ABC_STR("上边缘")};
+static abc_str_t margin_bottom_keys[] = {ABC_STR("margin-bottom"), ABC_STR("下边缘")};
+static abc_str_t margin_left_keys[] = {ABC_STR("margin-left"), ABC_STR("左边缘")};
+static abc_str_t margin_right_keys[] = {ABC_STR("margin-right"), ABC_STR("右边缘")};
+
+static abc_str_t border_keys[] = {ABC_STR("border"), ABC_STR("边框")};
+static abc_str_t border_top_keys[] = {ABC_STR("border-top"), ABC_STR("上边框")};
+static abc_str_t border_bottom_keys[] = {ABC_STR("border-bottom"), ABC_STR("下边框")};
+static abc_str_t border_left_keys[] = {ABC_STR("border-left"), ABC_STR("左边框")};
+static abc_str_t border_right_keys[] = {ABC_STR("border-right"), ABC_STR("右边框")};
+
+static abc_str_t padding_keys[] = {ABC_STR("padding"), ABC_STR("内边距")};
+static abc_str_t padding_top_keys[] = {ABC_STR("padding-top"), ABC_STR("上填充")};
+static abc_str_t padding_bottom_keys[] = {ABC_STR("padding-bottom"), ABC_STR("下填充")};
+static abc_str_t padding_left_keys[] = {ABC_STR("padding-left"), ABC_STR("左填充")};
+static abc_str_t padding_right_keys[] = {ABC_STR("padding-right"), ABC_STR("右填充")};
+
+static abc_str_t position_keys[] = {ABC_STR("position"), ABC_STR("定位")};
+static abc_str_t top_keys[] = {ABC_STR("top"), ABC_STR("上")};
+static abc_str_t bottom_keys[] = {ABC_STR("bottom"), ABC_STR("下")};
+static abc_str_t left_keys[] = {ABC_STR("left"), ABC_STR("左")};
+static abc_str_t right_keys[] = {ABC_STR("right"), ABC_STR("右")};
+
+static abc_str_t font_keys[] = {ABC_STR("font"), ABC_STR("字体")};
+static abc_str_t font_size_keys[] = {ABC_STR("font-size"), ABC_STR("字号")};
+static abc_str_t font_color_keys[] = {ABC_STR("font-color"), ABC_STR("字体颜色"), ABC_STR("color"), ABC_STR("颜色")};
+static abc_str_t font_style_keys[] = {ABC_STR("style"), ABC_STR("字体风格")};
+
+static abc_str_t text_align_keys[] = {ABC_STR("text-align"), ABC_STR("对齐")};
+static abc_str_t text_decoration_keys[] = {ABC_STR("text-decoration"), ABC_STR("下划线")};
+static abc_str_t text_transform_keys[] = {ABC_STR("text-transform"), ABC_STR("大小写")};
+static abc_str_t text_indent_keys[] = {ABC_STR("text-indent"), ABC_STR("缩进")};
+static abc_str_t vertical_align_keys[] = {ABC_STR("vertical-align"), ABC_STR("垂直对齐")};
+
+static abc_str_t bg_keys[] = {ABC_STR("background"), ABC_STR("背景")};
+static abc_str_t bg_color_keys[] = {ABC_STR("background-color"), ABC_STR("背景颜色")};
+static abc_str_t bg_image_keys[] = {ABC_STR("background-image"), ABC_STR("背景图片")};
+static abc_str_t bg_repeat_keys[] = {ABC_STR("background-repeat"), ABC_STR("背景重复")};
+static abc_str_t bg_position_keys[] = {ABC_STR("background-position"), ABC_STR("背景位置")};
+
+static abc_str_t overflow_keys[] = {ABC_STR("overflow"), ABC_STR("内容溢出")};
+static abc_str_t scroll_width_keys[] = {ABC_STR("scrollbar-width"), ABC_STR("滚动条宽度")};
+static abc_str_t scroll_color_keys[] = {ABC_STR("scrollbar-color"), ABC_STR("滚动条颜色")};
+
+static abc_str_t list_style_keys[] = {ABC_STR("list-style"), ABC_STR("列表风格")};
+static abc_str_t list_style_type_keys[] = {ABC_STR("list-style-type"), ABC_STR("列表标记")};
+static abc_str_t list_style_image_keys[] = {ABC_STR("list-style-image"), ABC_STR("列表标记图片")};
+static abc_str_t list_style_pos_keys[] = {ABC_STR("list-style-position"), ABC_STR("列表标记位置")};
+
+static abc_str_t border_collapse_keys[] = {ABC_STR("border-collapse"), ABC_STR("边框折叠")};
+
+static abc_str_t class_keys[] = {ABC_STR("class"), ABC_STR("类名")};
+static abc_str_t type_keys[] = {ABC_STR("type"), ABC_STR("类型")};
+static abc_str_t name_keys[] = {ABC_STR("name"), ABC_STR("名字")};
+static abc_str_t for_keys[] = {ABC_STR("for"), ABC_STR("关于")};
+static abc_str_t id_keys[] = {ABC_STR("id"), ABC_STR("编号")};
+
+static abc_str_t size_keys[] = {ABC_STR("size"), ABC_STR("大小")};
+static abc_str_t value_keys[] = {ABC_STR("value"), ABC_STR("值")};
+static abc_str_t action_keys[] = {ABC_STR("action"), ABC_STR("动作")};
+static abc_str_t method_keys[] = {ABC_STR("method"), ABC_STR("方法")};
+static abc_str_t control_keys[] = {ABC_STR("controls"), ABC_STR("控件")};
+
+static abc_str_t xmlns_keys[] = {ABC_STR("xmlns")};
+static abc_str_t xmlang_keys[] = {ABC_STR("xml:lang")};
+static abc_str_t lang_keys[] = {ABC_STR("lang"), ABC_STR("语言")};
+static abc_str_t content_keys[] = {ABC_STR("content"), ABC_STR("正文类型")};
+static abc_str_t charset_keys[] = {ABC_STR("charset"), ABC_STR("字符集")};
+static abc_str_t enctype_keys[] = {ABC_STR("enctype")};
+
+static abc_str_t http_equiv_keys[] = {ABC_STR("http-equiv")};
// HTML labels
-static char* html_keys[] = {"html", "网页", NULL};
-static char* head_keys[] = {"head", "头部", NULL};
-static char* body_keys[] = {"body", "主体", NULL};
-static char* form_keys[] = {"form", "表单", NULL};
-static char* link_keys[] = {"link", "链接", NULL};
-static char* div_keys[] = {"div", "分区", NULL};
-static char* img_keys[] = {"img", "图片", NULL};
-
-static char* meta_keys[] = {"meta", NULL};
-
-static char* center_keys[] = {"center", "居中", NULL};
-static char* title_keys[] = {"title", "标题", NULL};
-static char* input_keys[] = {"input", "输入", NULL};
-static char* label_keys[] = {"label", "标签", NULL};
-
-static char* video_keys[] = {"video", "视频", NULL};
-static char* audio_keys[] = {"audio", "音频", NULL};
-static char* source_keys[] = {"source", "源", NULL};
-
-static char* table_keys[] = {"table", "表格", NULL};
-static char* th_keys[] = {"th", "表头", NULL};
-static char* tr_keys[] = {"tr", "行", NULL};
-static char* td_keys[] = {"td", "列", NULL};
-
-static char* ol_keys[] = {"ol", "有序列表", NULL};
-static char* ul_keys[] = {"ul", "无序列表", NULL};
-static char* li_keys[] = {"li", "列表项", NULL};
-
-static char* br_keys[] = {"br", "换行", NULL};
-static char* hr_keys[] = {"hr", "标题换行", NULL};
-
-static char* h1_keys[] = {"h1", "标题1", NULL};
-static char* h2_keys[] = {"h2", "标题2", NULL};
-static char* h3_keys[] = {"h3", "标题3", NULL};
-static char* h4_keys[] = {"h4", "标题4", NULL};
-static char* h5_keys[] = {"h5", "标题5", NULL};
-static char* h6_keys[] = {"h6", "标题6", NULL};
-static char* p_keys[] = {"p", "段落", NULL};
-static char* a_keys[] = {"a", "超链接", NULL};
-static char* b_keys[] = {"b", "加粗", NULL};
-static char* i_keys[] = {"i", "斜体", NULL};
-
-static char* play_keys[] = {"play", "播放", NULL};
-static char* progress_keys[] = {"progress", "进度条", NULL};
-
-static char* script_keys[] = {"script", "脚本", NULL};
-static char* style_keys[] = {"style", "样式", NULL};
+static abc_str_t html_keys[] = {ABC_STR("html"), ABC_STR("网页")};
+static abc_str_t head_keys[] = {ABC_STR("head"), ABC_STR("头部")};
+static abc_str_t body_keys[] = {ABC_STR("body"), ABC_STR("主体")};
+static abc_str_t form_keys[] = {ABC_STR("form"), ABC_STR("表单")};
+static abc_str_t link_keys[] = {ABC_STR("link"), ABC_STR("链接")};
+static abc_str_t div_keys[] = {ABC_STR("div"), ABC_STR("分区")};
+static abc_str_t img_keys[] = {ABC_STR("img"), ABC_STR("图片")};
+static abc_str_t meta_keys[] = {ABC_STR("meta")};
+
+static abc_str_t center_keys[] = {ABC_STR("center"), ABC_STR("居中")};
+static abc_str_t title_keys[] = {ABC_STR("title"), ABC_STR("标题")};
+static abc_str_t input_keys[] = {ABC_STR("input"), ABC_STR("输入")};
+static abc_str_t label_keys[] = {ABC_STR("label"), ABC_STR("标签")};
+
+static abc_str_t video_keys[] = {ABC_STR("video"), ABC_STR("视频")};
+static abc_str_t audio_keys[] = {ABC_STR("audio"), ABC_STR("音频")};
+static abc_str_t source_keys[] = {ABC_STR("source"), ABC_STR("源")};
+
+static abc_str_t table_keys[] = {ABC_STR("table"), ABC_STR("表格")};
+static abc_str_t th_keys[] = {ABC_STR("th"), ABC_STR("表头")};
+static abc_str_t tr_keys[] = {ABC_STR("tr"), ABC_STR("行")};
+static abc_str_t td_keys[] = {ABC_STR("td"), ABC_STR("列")};
+
+static abc_str_t ol_keys[] = {ABC_STR("ol"), ABC_STR("有序列表")};
+static abc_str_t ul_keys[] = {ABC_STR("ul"), ABC_STR("无序列表")};
+static abc_str_t li_keys[] = {ABC_STR("li"), ABC_STR("列表项")};
+
+static abc_str_t h1_keys[] = {ABC_STR("h1"), ABC_STR("标题1")};
+static abc_str_t h2_keys[] = {ABC_STR("h2"), ABC_STR("标题2")};
+static abc_str_t h3_keys[] = {ABC_STR("h3"), ABC_STR("标题3")};
+static abc_str_t h4_keys[] = {ABC_STR("h4"), ABC_STR("标题4")};
+static abc_str_t h5_keys[] = {ABC_STR("h5"), ABC_STR("标题5")};
+static abc_str_t h6_keys[] = {ABC_STR("h6"), ABC_STR("标题6")};
+static abc_str_t hr_keys[] = {ABC_STR("hr"), ABC_STR("标题换行")};
+
+static abc_str_t p_keys[] = {ABC_STR("p"), ABC_STR("段落")};
+static abc_str_t a_keys[] = {ABC_STR("a"), ABC_STR("超链接")};
+static abc_str_t b_keys[] = {ABC_STR("b"), ABC_STR("加粗")};
+static abc_str_t i_keys[] = {ABC_STR("i"), ABC_STR("斜体")};
+static abc_str_t br_keys[] = {ABC_STR("br"), ABC_STR("换行")};
+
+static abc_str_t play_keys[] = {ABC_STR("play"), ABC_STR("播放")};
+static abc_str_t progress_keys[] = {ABC_STR("progress"), ABC_STR("进度条")};
+
+static abc_str_t script_keys[] = {ABC_STR("script"), ABC_STR("脚本")};
+static abc_str_t style_keys[] = {ABC_STR("style"), ABC_STR("样式")};
// css selectors
-static char* css_id_keys[] = {"#", NULL};
-static char* css_class_keys[] = {".", NULL};
-static char* css_attr_keys[] = {"[]", NULL};
-static char* css_other_keys[] = {"*", NULL};
-static char* css_pse_class_keys[] = {":", NULL};
-static char* css_pse_element_keys[] = {"::", NULL};
+static abc_str_t css_id_keys[] = {ABC_STR("#")};
+static abc_str_t css_class_keys[] = {ABC_STR(".")};
+static abc_str_t css_attr_keys[] = {ABC_STR("[]")};
+static abc_str_t css_other_keys[] = {ABC_STR("*")};
+static abc_str_t css_pse_class_keys[] = {ABC_STR(":")};
+static abc_str_t css_pse_element_keys[] = {ABC_STR("::")};
// css pse class (element)
-static char* css_link_keys[] = {":link", "未访问", NULL};
-static char* css_visited_keys[] = {":visited", "已访问", NULL};
-static char* css_hover_keys[] = {":hover", "正在指向", NULL};
-static char* css_active_keys[] = {":active", "正在点击", NULL};
+static abc_str_t css_link_keys[] = {ABC_STR(":link"), ABC_STR("未访问")};
+static abc_str_t css_visited_keys[] = {ABC_STR(":visited"), ABC_STR("已访问")};
+static abc_str_t css_hover_keys[] = {ABC_STR(":hover"), ABC_STR("正在指向")};
+static abc_str_t css_active_keys[] = {ABC_STR(":active"), ABC_STR("正在点击")};
+
+static abc_str_t css_first_child_keys[] = {ABC_STR(":first-child"), ABC_STR("第1个子元素"), ABC_STR("第一个子元素")};
-static char* css_first_child_keys[] = {":first-child", "第1个子元素", "第一个子元素", NULL};
static html_attr_t html_attrs[] =
{
#define ABC_CSS_BOX(display, margin, border, padding) \
- {display_keys, #display, ABC_CSS_DISPLAY, ABC_HTML_FLAG_SHOW}, \
- {visible_keys, "", ABC_CSS_VISIBILITY, ABC_HTML_FLAG_SHOW}, \
- {border_keys, #border, ABC_CSS_BORDER, ABC_HTML_FLAG_SHOW}, \
- {border_top_keys, #border, ABC_CSS_BORDER_TOP, ABC_HTML_FLAG_SHOW}, \
- {border_bottom_keys, #border, ABC_CSS_BORDER_BOTTOM, ABC_HTML_FLAG_SHOW}, \
- {border_left_keys, #border, ABC_CSS_BORDER_LEFT, ABC_HTML_FLAG_SHOW}, \
- {border_right_keys, #border, ABC_CSS_BORDER_RIGHT, ABC_HTML_FLAG_SHOW}, \
+ {display_keys, abc_number_of(display_keys), #display, ABC_CSS_DISPLAY, ABC_HTML_FLAG_SHOW}, \
+ {visible_keys, abc_number_of(visible_keys), "", ABC_CSS_VISIBILITY, ABC_HTML_FLAG_SHOW}, \
+ {border_keys, abc_number_of(border_keys), #border, ABC_CSS_BORDER, ABC_HTML_FLAG_SHOW}, \
+ {border_top_keys, abc_number_of(border_top_keys), #border, ABC_CSS_BORDER_TOP, ABC_HTML_FLAG_SHOW}, \
+ {border_bottom_keys, abc_number_of(border_bottom_keys), #border, ABC_CSS_BORDER_BOTTOM, ABC_HTML_FLAG_SHOW}, \
+ {border_left_keys, abc_number_of(border_left_keys), #border, ABC_CSS_BORDER_LEFT, ABC_HTML_FLAG_SHOW}, \
+ {border_right_keys, abc_number_of(border_right_keys), #border, ABC_CSS_BORDER_RIGHT, ABC_HTML_FLAG_SHOW}, \
\
- {margin_keys, #margin, ABC_CSS_MARGIN, ABC_HTML_FLAG_SHOW}, \
- {margin_top_keys, #margin, ABC_CSS_MARGIN_TOP, ABC_HTML_FLAG_SHOW}, \
- {margin_bottom_keys, #margin, ABC_CSS_MARGIN_BOTTOM, ABC_HTML_FLAG_SHOW}, \
- {margin_left_keys, #margin, ABC_CSS_MARGIN_LEFT, ABC_HTML_FLAG_SHOW}, \
- {margin_right_keys, #margin, ABC_CSS_MARGIN_RIGHT, ABC_HTML_FLAG_SHOW}, \
+ {margin_keys, abc_number_of(margin_keys), #margin, ABC_CSS_MARGIN, ABC_HTML_FLAG_SHOW}, \
+ {margin_top_keys, abc_number_of(margin_top_keys), #margin, ABC_CSS_MARGIN_TOP, ABC_HTML_FLAG_SHOW}, \
+ {margin_bottom_keys, abc_number_of(margin_bottom_keys), #margin, ABC_CSS_MARGIN_BOTTOM, ABC_HTML_FLAG_SHOW}, \
+ {margin_left_keys, abc_number_of(margin_left_keys), #margin, ABC_CSS_MARGIN_LEFT, ABC_HTML_FLAG_SHOW}, \
+ {margin_right_keys, abc_number_of(margin_right_keys), #margin, ABC_CSS_MARGIN_RIGHT, ABC_HTML_FLAG_SHOW}, \
\
- {padding_keys, #padding, ABC_CSS_PADDING, ABC_HTML_FLAG_SHOW}, \
- {padding_top_keys, #padding, ABC_CSS_PADDING_TOP, ABC_HTML_FLAG_SHOW}, \
- {padding_bottom_keys, #padding, ABC_CSS_PADDING_BOTTOM, ABC_HTML_FLAG_SHOW}, \
- {padding_left_keys, #padding, ABC_CSS_PADDING_LEFT, ABC_HTML_FLAG_SHOW}, \
- {padding_right_keys, #padding, ABC_CSS_PADDING_RIGHT, ABC_HTML_FLAG_SHOW}, \
+ {padding_keys, abc_number_of(padding_keys), #padding, ABC_CSS_PADDING, ABC_HTML_FLAG_SHOW}, \
+ {padding_top_keys, abc_number_of(padding_top_keys), #padding, ABC_CSS_PADDING_TOP, ABC_HTML_FLAG_SHOW}, \
+ {padding_bottom_keys, abc_number_of(padding_bottom_keys), #padding, ABC_CSS_PADDING_BOTTOM, ABC_HTML_FLAG_SHOW}, \
+ {padding_left_keys, abc_number_of(padding_left_keys), #padding, ABC_CSS_PADDING_LEFT, ABC_HTML_FLAG_SHOW}, \
+ {padding_right_keys, abc_number_of(padding_right_keys), #padding, ABC_CSS_PADDING_RIGHT, ABC_HTML_FLAG_SHOW}, \
\
- {position_keys, "", ABC_CSS_POSITION, ABC_HTML_FLAG_SHOW}, \
- {top_keys, "", ABC_CSS_TOP, ABC_HTML_FLAG_SHOW}, \
- {bottom_keys, "", ABC_CSS_BOTTOM, ABC_HTML_FLAG_SHOW}, \
- {left_keys, "", ABC_CSS_LEFT, ABC_HTML_FLAG_SHOW}, \
- {right_keys, "", ABC_CSS_RIGHT, ABC_HTML_FLAG_SHOW}, \
+ {position_keys, abc_number_of(position_keys), "", ABC_CSS_POSITION, ABC_HTML_FLAG_SHOW}, \
+ {top_keys, abc_number_of(top_keys), "", ABC_CSS_TOP, ABC_HTML_FLAG_SHOW}, \
+ {bottom_keys, abc_number_of(bottom_keys), "", ABC_CSS_BOTTOM, ABC_HTML_FLAG_SHOW}, \
+ {left_keys, abc_number_of(left_keys), "", ABC_CSS_LEFT, ABC_HTML_FLAG_SHOW}, \
+ {right_keys, abc_number_of(right_keys), "", ABC_CSS_RIGHT, ABC_HTML_FLAG_SHOW}, \
\
- {width_keys, "", ABC_HTML_ATTR_WIDTH, ABC_HTML_FLAG_SHOW}, \
- {height_keys, "", ABC_HTML_ATTR_HEIGHT, ABC_HTML_FLAG_SHOW},
+ {width_keys, abc_number_of(width_keys), "", ABC_HTML_ATTR_WIDTH, ABC_HTML_FLAG_SHOW}, \
+ {height_keys, abc_number_of(height_keys), "", ABC_HTML_ATTR_HEIGHT, ABC_HTML_FLAG_SHOW}, \
+ {opacity_keys, abc_number_of(opacity_keys), "1.0", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW}, \
+ {filter_keys, abc_number_of(filter_keys), "", ABC_CSS_FILTER, 0},
#define ABC_CSS_SCROLL(overflow, scroll_width, scroll_color) \
- {overflow_keys, #overflow, ABC_CSS_OVERFLOW, ABC_HTML_FLAG_SHOW}, \
- {scroll_width_keys, #scroll_width, ABC_CSS_SCROLLBAR_WIDTH, ABC_HTML_FLAG_SHOW}, \
- {scroll_color_keys, #scroll_color, ABC_CSS_SCROLLBAR_COLOR, ABC_HTML_FLAG_SHOW},
+ {overflow_keys, abc_number_of(overflow_keys), #overflow, ABC_CSS_OVERFLOW, ABC_HTML_FLAG_SHOW}, \
+ {scroll_width_keys, abc_number_of(scroll_width_keys), #scroll_width, ABC_CSS_SCROLLBAR_WIDTH, ABC_HTML_FLAG_SHOW}, \
+ {scroll_color_keys, abc_number_of(scroll_color_keys), #scroll_color, ABC_CSS_SCROLLBAR_COLOR, ABC_HTML_FLAG_SHOW},
#define ABC_CSS_SELECTOR(type) \
- {style_keys, "", ABC_HTML_ATTR_STYLE, ABC_HTML_FLAG_SHOW}, \
- {title_keys, "", ABC_HTML_ATTR_TITLE, ABC_HTML_FLAG_SHOW}, \
- {type_keys, #type, ABC_HTML_ATTR_TYPE, ABC_HTML_FLAG_SHOW}, \
- {name_keys, "", ABC_HTML_ATTR_NAME, ABC_HTML_FLAG_SHOW}, \
- {class_keys, "", ABC_CSS_CLASS, ABC_HTML_FLAG_SHOW}, \
- {id_keys, "", ABC_CSS_ID, ABC_HTML_FLAG_SHOW},
+ {style_keys, abc_number_of(style_keys), "", ABC_HTML_ATTR_STYLE, ABC_HTML_FLAG_SHOW}, \
+ {title_keys, abc_number_of(title_keys), "", ABC_HTML_ATTR_TITLE, ABC_HTML_FLAG_SHOW}, \
+ {type_keys, abc_number_of(type_keys), #type, ABC_HTML_ATTR_TYPE, ABC_HTML_FLAG_SHOW}, \
+ {name_keys, abc_number_of(name_keys), "", ABC_HTML_ATTR_NAME, ABC_HTML_FLAG_SHOW}, \
+ {class_keys, abc_number_of(class_keys), "", ABC_CSS_CLASS, ABC_HTML_FLAG_SHOW}, \
+ {id_keys, abc_number_of(id_keys), "", ABC_CSS_ID, ABC_HTML_FLAG_SHOW},
#define ABC_CSS_BACK_GROUND(color) \
- {bg_keys, "", ABC_HTML_ATTR_BG, ABC_HTML_FLAG_SHOW}, \
- {bg_color_keys, #color, ABC_HTML_ATTR_BG_COLOR, ABC_HTML_FLAG_SHOW}, \
- {bg_image_keys, "", ABC_HTML_ATTR_BG_IMAGE, ABC_HTML_FLAG_SHOW}, \
- {bg_repeat_keys, "", ABC_HTML_ATTR_BG_REPEAT, ABC_HTML_FLAG_SHOW}, \
- {bg_position_keys, "", ABC_HTML_ATTR_BG_POSITION, ABC_HTML_FLAG_SHOW}, \
+ {bg_keys, abc_number_of(bg_keys), "", ABC_HTML_ATTR_BG, ABC_HTML_FLAG_SHOW}, \
+ {bg_color_keys, abc_number_of(bg_color_keys), #color, ABC_HTML_ATTR_BG_COLOR, ABC_HTML_FLAG_SHOW}, \
+ {bg_image_keys, abc_number_of(bg_image_keys), "", ABC_HTML_ATTR_BG_IMAGE, ABC_HTML_FLAG_SHOW}, \
+ {bg_repeat_keys, abc_number_of(bg_repeat_keys), "", ABC_HTML_ATTR_BG_REPEAT, ABC_HTML_FLAG_SHOW}, \
+ {bg_position_keys, abc_number_of(bg_position_keys), "", ABC_HTML_ATTR_BG_POSITION, ABC_HTML_FLAG_SHOW},
#define ABC_CSS_FONT(font, size, color, style) \
- {font_keys, #font, ABC_HTML_ATTR_FONT, 0}, \
- {font_size_keys, #size, ABC_HTML_ATTR_FONT_SIZE, 0}, \
- {font_color_keys, #color, ABC_HTML_ATTR_FONT_COLOR, ABC_HTML_FLAG_SHOW}, \
- {font_style_keys, #style, ABC_HTML_ATTR_FONT_STYLE, 0},
+ {font_keys, abc_number_of(font_keys), #font, ABC_HTML_ATTR_FONT, 0}, \
+ {font_size_keys, abc_number_of(font_size_keys), #size, ABC_HTML_ATTR_FONT_SIZE, 0}, \
+ {font_color_keys, abc_number_of(font_color_keys), #color, ABC_HTML_ATTR_FONT_COLOR, ABC_HTML_FLAG_SHOW}, \
+ {font_style_keys, abc_number_of(font_style_keys), #style, ABC_HTML_ATTR_FONT_STYLE, 0}, \
+ {size_keys, abc_number_of(size_keys), "", ABC_HTML_ATTR_SIZE, ABC_HTML_FLAG_SHOW}, \
+ {value_keys, abc_number_of(value_keys), "", ABC_HTML_ATTR_VALUE, ABC_HTML_FLAG_SHOW},
#define ABC_CSS_TEXT(align, underline) \
- {text_align_keys, #align, ABC_HTML_ATTR_TEXT_ALIGN, ABC_HTML_FLAG_SHOW}, \
- {text_decoration_keys, #underline, ABC_HTML_ATTR_TEXT_DECORATION, ABC_HTML_FLAG_SHOW}, \
- {text_transform_keys, "", ABC_HTML_ATTR_TEXT_TRANSFORM, ABC_HTML_FLAG_SHOW}, \
- {text_indent_keys, "", ABC_HTML_ATTR_TEXT_INDENT, ABC_HTML_FLAG_SHOW},
-
-#define ABC_CSS_PSE_MOUSE() \
- {css_link_keys, "", ABC_CSS_LINK, ABC_HTML_FLAG_SHOW}, \
- {css_visited_keys, "", ABC_CSS_VISITED, ABC_HTML_FLAG_SHOW}, \
- {css_hover_keys, "", ABC_CSS_HOVER, ABC_HTML_FLAG_SHOW}, \
- {css_active_keys, "", ABC_CSS_ACTIVE, ABC_HTML_FLAG_SHOW},
+ {text_align_keys, abc_number_of(text_align_keys), #align, ABC_HTML_ATTR_TEXT_ALIGN, ABC_HTML_FLAG_SHOW}, \
+ {text_decoration_keys, abc_number_of(text_decoration_keys), #underline, ABC_HTML_ATTR_TEXT_DECORATION, ABC_HTML_FLAG_SHOW}, \
+ {text_transform_keys, abc_number_of(text_transform_keys), "", ABC_HTML_ATTR_TEXT_TRANSFORM, ABC_HTML_FLAG_SHOW}, \
+ {text_indent_keys, abc_number_of(text_indent_keys), "", ABC_HTML_ATTR_TEXT_INDENT, ABC_HTML_FLAG_SHOW}, \
+ {vertical_align_keys, abc_number_of(vertical_align_keys), "", ABC_HTML_ATTR_VERTICAL_ALIGN, ABC_HTML_FLAG_SHOW},
+
+#define ABC_CSS_PSE() \
+ {css_link_keys, abc_number_of(css_link_keys), "", ABC_CSS_LINK, ABC_HTML_FLAG_SHOW}, \
+ {css_visited_keys, abc_number_of(css_visited_keys), "", ABC_CSS_VISITED, ABC_HTML_FLAG_SHOW}, \
+ {css_hover_keys, abc_number_of(css_hover_keys), "", ABC_CSS_HOVER, ABC_HTML_FLAG_SHOW}, \
+ {css_active_keys, abc_number_of(css_active_keys), "", ABC_CSS_ACTIVE, ABC_HTML_FLAG_SHOW}, \
+ {css_first_child_keys, abc_number_of(css_first_child_keys), "", ABC_CSS_FIRST_CHILD, 0},
ABC_CSS_BOX(block, , , 12px)
ABC_CSS_SCROLL(scroll, 12px, orangeRed white)
ABC_CSS_FONT(SimSong, 16, black, )
ABC_CSS_TEXT(left, )
- {xmlns_keys, "", ABC_HTML_ATTR_XMLNS, 0},
- {xmlang_keys, "", ABC_HTML_ATTR_XMLANG, 0},
- {lang_keys, "", ABC_HTML_ATTR_LANG, 0},
-
- {opacity_keys, "1.0", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
+ {xmlns_keys, abc_number_of(xmlns_keys), "", ABC_HTML_ATTR_XMLNS, 0},
+ {xmlang_keys, abc_number_of(xmlang_keys), "", ABC_HTML_ATTR_XMLANG, 0},
+ {lang_keys, abc_number_of(lang_keys), "", ABC_HTML_ATTR_LANG, 0},
};
static html_attr_t meta_attrs[] =
{
- {http_equiv_keys, "", ABC_HTML_ATTR_HTTP_EQUIV, ABC_HTML_FLAG_SHOW},
- {content_keys, "", ABC_HTML_ATTR_CONTENT, ABC_HTML_FLAG_SHOW},
- {charset_keys, "", ABC_HTML_ATTR_CHARSET, ABC_HTML_FLAG_SHOW},
+ {http_equiv_keys, abc_number_of(http_equiv_keys), "", ABC_HTML_ATTR_HTTP_EQUIV, ABC_HTML_FLAG_SHOW},
+ {content_keys, abc_number_of(content_keys), "", ABC_HTML_ATTR_CONTENT, ABC_HTML_FLAG_SHOW},
+ {charset_keys, abc_number_of(charset_keys), "", ABC_HTML_ATTR_CHARSET, ABC_HTML_FLAG_SHOW},
};
static html_attr_t body_attrs[] =
ABC_CSS_FONT(SimSong, 16, black, )
ABC_CSS_TEXT(left, )
-
- {opacity_keys, "1.0", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
};
static html_attr_t div_attrs[] =
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
ABC_CSS_BACK_GROUND()
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimSong, 16, black, )
ABC_CSS_TEXT(left, )
-
- ABC_CSS_PSE_MOUSE()
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
};
static html_attr_t h1_attrs[] =
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
ABC_CSS_BACK_GROUND()
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimHei, 40, black, )
ABC_CSS_TEXT(left, )
-
- ABC_CSS_PSE_MOUSE()
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
};
static html_attr_t h2_attrs[] =
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
ABC_CSS_BACK_GROUND()
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimHei, 32, black, )
ABC_CSS_TEXT(left, )
-
- ABC_CSS_PSE_MOUSE()
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
};
static html_attr_t h3_attrs[] =
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
ABC_CSS_BACK_GROUND()
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimHei, 28, black, )
ABC_CSS_TEXT(left, )
-
- ABC_CSS_PSE_MOUSE()
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
};
static html_attr_t h4_attrs[] =
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
ABC_CSS_BACK_GROUND()
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimHei, 24, black, )
ABC_CSS_TEXT(left, )
-
- ABC_CSS_PSE_MOUSE()
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
};
static html_attr_t h5_attrs[] =
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
ABC_CSS_BACK_GROUND()
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimHei, 20, black, )
ABC_CSS_TEXT(left, )
-
- ABC_CSS_PSE_MOUSE()
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
};
static html_attr_t h6_attrs[] =
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
ABC_CSS_BACK_GROUND()
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimHei, 16, black, )
ABC_CSS_TEXT(left, )
-
- ABC_CSS_PSE_MOUSE()
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
};
static html_attr_t hr_attrs[] =
ABC_CSS_FONT(SimHei, 16, lightGray, )
ABC_CSS_TEXT(left, )
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
};
static html_attr_t p_attrs[] =
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
ABC_CSS_BACK_GROUND()
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimSong, 16, black, )
ABC_CSS_TEXT(left, )
-
- ABC_CSS_PSE_MOUSE()
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
-
- {css_first_child_keys, "", ABC_CSS_FIRST_CHILD, ABC_HTML_FLAG_SHOW},
};
static html_attr_t css_id_attrs[] =
{
#define ABC_CSS_LIST() \
- {list_style_keys, "", ABC_CSS_LIST_STYLE, ABC_HTML_FLAG_SHOW}, \
- {list_style_type_keys, "", ABC_CSS_LIST_STYLE_TYPE, ABC_HTML_FLAG_SHOW}, \
- {list_style_image_keys, "", ABC_CSS_LIST_STYLE_IMAGE, ABC_HTML_FLAG_SHOW}, \
- {list_style_pos_keys, "", ABC_CSS_LIST_STYLE_POSITION, ABC_HTML_FLAG_SHOW},
+ {list_style_keys, abc_number_of(list_style_keys), "", ABC_CSS_LIST_STYLE, ABC_HTML_FLAG_SHOW}, \
+ {list_style_type_keys, abc_number_of(list_style_type_keys), "", ABC_CSS_LIST_STYLE_TYPE, ABC_HTML_FLAG_SHOW}, \
+ {list_style_image_keys, abc_number_of(list_style_image_keys), "", ABC_CSS_LIST_STYLE_IMAGE, ABC_HTML_FLAG_SHOW}, \
+ {list_style_pos_keys, abc_number_of(list_style_pos_keys), "", ABC_CSS_LIST_STYLE_POSITION, ABC_HTML_FLAG_SHOW},
ABC_CSS_BOX( , 2px, , 2px)
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
ABC_CSS_BACK_GROUND()
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimSong, 16, black, )
ABC_CSS_TEXT(left, )
ABC_CSS_LIST()
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
-
- {vertical_align_keys, "", ABC_HTML_ATTR_VERTICAL_ALIGN, ABC_HTML_FLAG_SHOW},
};
static html_attr_t b_attrs[] =
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
ABC_CSS_BACK_GROUND()
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimHei, 16, , bold)
ABC_CSS_TEXT(left, )
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
-
- {css_first_child_keys, "", ABC_CSS_FIRST_CHILD, ABC_HTML_FLAG_SHOW},
};
static html_attr_t i_attrs[] =
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
ABC_CSS_BACK_GROUND()
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimSong, 16, , italic)
ABC_CSS_TEXT(left, )
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
-
- {css_first_child_keys, "", ABC_CSS_FIRST_CHILD, ABC_HTML_FLAG_SHOW},
};
static html_attr_t a_attrs[] =
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
ABC_CSS_BACK_GROUND()
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimSong, 16, blue, )
ABC_CSS_TEXT(left, underline)
- ABC_CSS_PSE_MOUSE()
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
-
- {href_keys, "", ABC_HTML_ATTR_HREF, ABC_HTML_FLAG_SHOW},
+ {href_keys, abc_number_of(href_keys), "", ABC_HTML_ATTR_HREF, ABC_HTML_FLAG_SHOW},
};
static html_attr_t link_attrs[] =
{
- {rel_keys, "", ABC_HTML_ATTR_REL, ABC_HTML_FLAG_SHOW},
- {type_keys, "", ABC_HTML_ATTR_TYPE, ABC_HTML_FLAG_SHOW},
- {href_keys, "", ABC_HTML_ATTR_HREF, ABC_HTML_FLAG_SHOW},
+ {rel_keys, abc_number_of(rel_keys), "", ABC_HTML_ATTR_REL, ABC_HTML_FLAG_SHOW},
+ {type_keys, abc_number_of(type_keys), "", ABC_HTML_ATTR_TYPE, ABC_HTML_FLAG_SHOW},
+ {href_keys, abc_number_of(href_keys), "", ABC_HTML_ATTR_HREF, ABC_HTML_FLAG_SHOW},
};
static html_attr_t img_attrs[] =
ABC_CSS_BOX(inline-block, , , )
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
+ ABC_CSS_PSE()
- ABC_CSS_PSE_MOUSE()
-
- {src_keys, "", ABC_HTML_ATTR_SRC, ABC_HTML_FLAG_SHOW},
- {alt_keys, "", ABC_HTML_ATTR_ALT, ABC_HTML_FLAG_SHOW},
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
+ {src_keys, abc_number_of(src_keys), "", ABC_HTML_ATTR_SRC, ABC_HTML_FLAG_SHOW},
+ {alt_keys, abc_number_of(alt_keys), "", ABC_HTML_ATTR_ALT, ABC_HTML_FLAG_SHOW},
};
static html_attr_t video_attrs[] =
ABC_CSS_BOX(block, , , )
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR()
+ ABC_CSS_PSE()
- ABC_CSS_PSE_MOUSE()
-
- {control_keys, "", ABC_HTML_ATTR_CONTROLS, 0},
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
+ {control_keys, abc_number_of(control_keys), "", ABC_HTML_ATTR_CONTROLS, 0},
};
static html_attr_t audio_attrs[] =
{
- {control_keys, "", ABC_HTML_ATTR_CONTROLS, 0},
+ {control_keys, abc_number_of(control_keys), "", ABC_HTML_ATTR_CONTROLS, 0},
};
static html_attr_t source_attrs[] =
{
- {src_keys, "", ABC_HTML_ATTR_SRC, ABC_HTML_FLAG_SHOW},
- {type_keys, "", ABC_HTML_ATTR_TYPE, ABC_HTML_FLAG_SHOW},
+ {src_keys, abc_number_of(src_keys), "", ABC_HTML_ATTR_SRC, ABC_HTML_FLAG_SHOW},
+ {type_keys, abc_number_of(type_keys), "", ABC_HTML_ATTR_TYPE, ABC_HTML_FLAG_SHOW},
};
static html_attr_t input_attrs[] =
ABC_CSS_SCROLL( , , )
ABC_CSS_SELECTOR(text)
ABC_CSS_BACK_GROUND(lightGray)
+ ABC_CSS_PSE()
ABC_CSS_FONT(SimSong, 16, black, )
ABC_CSS_TEXT(left, )
-
- ABC_CSS_PSE_MOUSE()
-
- {size_keys, "", ABC_HTML_ATTR_SIZE, ABC_HTML_FLAG_SHOW},
- {value_keys, "", ABC_HTML_ATTR_VALUE, ABC_HTML_FLAG_SHOW},
-
- {opacity_keys, "", ABC_CSS_OPACITY, ABC_HTML_FLAG_SHOW},
- {filter_keys, "", ABC_CSS_FILTER, 0},
};
static html_attr_t label_attrs[] =
ABC_CSS_FONT(SimSong, 16, black, )
ABC_CSS_TEXT(left, )
- {for_keys, "", ABC_HTML_ATTR_FOR, ABC_HTML_FLAG_SHOW},
+ {for_keys, abc_number_of(for_keys), "", ABC_HTML_ATTR_FOR, ABC_HTML_FLAG_SHOW},
};
static html_attr_t form_attrs[] =
ABC_CSS_FONT(SimSong, 16, black, )
ABC_CSS_TEXT(left, )
- {action_keys, "/", ABC_HTML_ATTR_ACTION, ABC_HTML_FLAG_SHOW},
- {method_keys, "post", ABC_HTML_ATTR_METHOD, ABC_HTML_FLAG_SHOW},
- {enctype_keys, "", ABC_HTML_ATTR_ENCTYPE, 0},
+ {action_keys, abc_number_of(action_keys), "/", ABC_HTML_ATTR_ACTION, ABC_HTML_FLAG_SHOW},
+ {method_keys, abc_number_of(method_keys), "post", ABC_HTML_ATTR_METHOD, ABC_HTML_FLAG_SHOW},
+ {enctype_keys, abc_number_of(enctype_keys), "", ABC_HTML_ATTR_ENCTYPE, 0},
};
static html_attr_t ol_attrs[] =
ABC_CSS_FONT(SimSong, 16, black, )
ABC_CSS_TEXT(left, )
- {border_collapse_keys, "", ABC_CSS_BORDER_COLLAPSE, ABC_HTML_FLAG_SHOW},
+ {border_collapse_keys, abc_number_of(border_collapse_keys), "", ABC_CSS_BORDER_COLLAPSE, ABC_HTML_FLAG_SHOW},
};
static html_attr_t th_attrs[] =
ABC_CSS_FONT(SimHei, 24, black, )
ABC_CSS_TEXT( , )
-
- {vertical_align_keys, "", ABC_HTML_ATTR_VERTICAL_ALIGN, ABC_HTML_FLAG_SHOW},
};
static html_attr_t tr_attrs[] =
ABC_CSS_FONT(SimSong, 16, black, )
ABC_CSS_TEXT( , )
-
- {vertical_align_keys, "", ABC_HTML_ATTR_VERTICAL_ALIGN, ABC_HTML_FLAG_SHOW},
};
static html_attr_t td_attrs[] =
ABC_CSS_FONT(SimSong, 16, black, )
ABC_CSS_TEXT( , )
-
- {vertical_align_keys, "", ABC_HTML_ATTR_VERTICAL_ALIGN, ABC_HTML_FLAG_SHOW},
};
static html_attr_t script_attrs[] =
{
- {font_keys, "SimSong", ABC_HTML_ATTR_FONT, 0},
- {font_size_keys, "16", ABC_HTML_ATTR_FONT_SIZE, 0},
+ {font_keys, abc_number_of(font_keys), "SimSong", ABC_HTML_ATTR_FONT, 0},
+ {font_size_keys, abc_number_of(font_size_keys), "16", ABC_HTML_ATTR_FONT_SIZE, 0},
};
static html_label_t html_labels[] =
{
- {html_keys, ABC_HTML, abc_number_of(html_attrs), html_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {meta_keys, ABC_HTML_META, abc_number_of(meta_attrs), meta_attrs, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
- {head_keys, ABC_HTML_HEAD, 0, NULL, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {title_keys, ABC_HTML_TITLE, 0, NULL, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {body_keys, ABC_HTML_BODY, abc_number_of(body_attrs), body_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {div_keys, ABC_HTML_DIV, abc_number_of(div_attrs), div_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
-
- {h1_keys, ABC_HTML_H1, abc_number_of(h1_attrs), h1_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {h2_keys, ABC_HTML_H2, abc_number_of(h2_attrs), h2_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {h3_keys, ABC_HTML_H3, abc_number_of(h3_attrs), h3_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {h4_keys, ABC_HTML_H4, abc_number_of(h4_attrs), h4_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {h5_keys, ABC_HTML_H5, abc_number_of(h5_attrs), h5_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {h6_keys, ABC_HTML_H6, abc_number_of(h6_attrs), h6_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
-
- {p_keys, ABC_HTML_P, abc_number_of(p_attrs), p_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {b_keys, ABC_HTML_B, abc_number_of(b_attrs), b_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {i_keys, ABC_HTML_I, abc_number_of(i_attrs), i_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
-
- {br_keys, ABC_HTML_BR, 0, NULL, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
- {hr_keys, ABC_HTML_HR, abc_number_of(hr_attrs), hr_attrs, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
-
- {a_keys, ABC_HTML_A, abc_number_of(a_attrs), a_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {img_keys, ABC_HTML_IMG, abc_number_of(img_attrs), img_attrs, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
- {link_keys, ABC_HTML_LINK, abc_number_of(link_attrs), link_attrs, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
-
- {form_keys, ABC_HTML_FORM, abc_number_of(form_attrs), form_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {input_keys, ABC_HTML_INPUT, abc_number_of(input_attrs), input_attrs, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
- {label_keys, ABC_HTML_LABEL, abc_number_of(label_attrs), label_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {center_keys, ABC_HTML_CENTER, 0, NULL, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
-
- {table_keys, ABC_HTML_TABLE, abc_number_of(table_attrs), table_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {tr_keys, ABC_HTML_TR, abc_number_of(tr_attrs), tr_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {td_keys, ABC_HTML_TD, abc_number_of(td_attrs), td_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {th_keys, ABC_HTML_TH, abc_number_of(th_attrs), th_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
-
- {ol_keys, ABC_HTML_OL, abc_number_of(ol_attrs), ol_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {ul_keys, ABC_HTML_UL, abc_number_of(ol_attrs), ol_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {li_keys, ABC_HTML_LI, 0, NULL, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
-
- {video_keys, ABC_HTML_VIDEO, abc_number_of(video_attrs), video_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {audio_keys, ABC_HTML_AUDIO, abc_number_of(audio_attrs), audio_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {source_keys, ABC_HTML_SOURCE, abc_number_of(source_attrs), source_attrs, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
- {play_keys, ABC_HTML_PLAY, 0, NULL, ABC_HTML_FLAG_OPEN},
- {progress_keys, ABC_HTML_PROGRESS, 0, NULL, ABC_HTML_FLAG_OPEN},
-
- {script_keys, ABC_HTML_SCRIPT, abc_number_of(script_attrs), script_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {style_keys, ABC_HTML_STYLE, 0, NULL, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
-
- {css_id_keys, ABC_CSS_ID, abc_number_of(css_id_attrs), css_id_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {css_class_keys, ABC_CSS_CLASS, abc_number_of(css_id_attrs), css_id_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {css_attr_keys, ABC_CSS_ATTR, abc_number_of(css_id_attrs), css_id_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {css_pse_class_keys, ABC_CSS_PSE_CLASS, abc_number_of(css_id_attrs), css_id_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {css_pse_element_keys, ABC_CSS_PSE_ELEMENT, abc_number_of(css_id_attrs), css_id_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
- {css_other_keys, ABC_CSS_COMBINATOR, abc_number_of(css_id_attrs), css_id_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {html_keys, abc_number_of(html_keys), ABC_HTML, abc_number_of(html_attrs), html_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {meta_keys, abc_number_of(meta_keys), ABC_HTML_META, abc_number_of(meta_attrs), meta_attrs, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
+ {head_keys, abc_number_of(head_keys), ABC_HTML_HEAD, 0, NULL, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {title_keys, abc_number_of(title_keys), ABC_HTML_TITLE, 0, NULL, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {body_keys, abc_number_of(body_keys), ABC_HTML_BODY, abc_number_of(body_attrs), body_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {div_keys, abc_number_of(div_keys), ABC_HTML_DIV, abc_number_of(div_attrs), div_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+
+ {h1_keys, abc_number_of(h1_keys), ABC_HTML_H1, abc_number_of(h1_attrs), h1_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {h2_keys, abc_number_of(h2_keys), ABC_HTML_H2, abc_number_of(h2_attrs), h2_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {h3_keys, abc_number_of(h3_keys), ABC_HTML_H3, abc_number_of(h3_attrs), h3_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {h4_keys, abc_number_of(h4_keys), ABC_HTML_H4, abc_number_of(h4_attrs), h4_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {h5_keys, abc_number_of(h5_keys), ABC_HTML_H5, abc_number_of(h5_attrs), h5_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {h6_keys, abc_number_of(h6_keys), ABC_HTML_H6, abc_number_of(h6_attrs), h6_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+
+ {p_keys, abc_number_of(p_keys), ABC_HTML_P, abc_number_of(p_attrs), p_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {b_keys, abc_number_of(b_keys), ABC_HTML_B, abc_number_of(b_attrs), b_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {i_keys, abc_number_of(i_keys), ABC_HTML_I, abc_number_of(i_attrs), i_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {br_keys, abc_number_of(br_keys), ABC_HTML_BR, 0, NULL, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
+ {hr_keys, abc_number_of(hr_keys), ABC_HTML_HR, abc_number_of(hr_attrs), hr_attrs, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
+
+ {a_keys, abc_number_of(a_keys), ABC_HTML_A, abc_number_of(a_attrs), a_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {img_keys, abc_number_of(img_keys), ABC_HTML_IMG, abc_number_of(img_attrs), img_attrs, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
+ {link_keys, abc_number_of(link_keys), ABC_HTML_LINK, abc_number_of(link_attrs), link_attrs, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
+
+ {form_keys, abc_number_of(form_keys), ABC_HTML_FORM, abc_number_of(form_attrs), form_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {input_keys, abc_number_of(input_keys), ABC_HTML_INPUT, abc_number_of(input_attrs), input_attrs, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
+ {label_keys, abc_number_of(label_keys), ABC_HTML_LABEL, abc_number_of(label_attrs), label_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {center_keys, abc_number_of(center_keys), ABC_HTML_CENTER, 0, NULL, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+
+ {table_keys, abc_number_of(table_keys), ABC_HTML_TABLE, abc_number_of(table_attrs), table_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {tr_keys, abc_number_of(tr_keys), ABC_HTML_TR, abc_number_of(tr_attrs), tr_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {td_keys, abc_number_of(td_keys), ABC_HTML_TD, abc_number_of(td_attrs), td_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {th_keys, abc_number_of(th_keys), ABC_HTML_TH, abc_number_of(th_attrs), th_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+
+ {ol_keys, abc_number_of(ol_keys), ABC_HTML_OL, abc_number_of(ol_attrs), ol_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {ul_keys, abc_number_of(ul_keys), ABC_HTML_UL, abc_number_of(ol_attrs), ol_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {li_keys, abc_number_of(li_keys), ABC_HTML_LI, 0, NULL, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+
+ {video_keys, abc_number_of(video_keys), ABC_HTML_VIDEO, abc_number_of(video_attrs), video_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {audio_keys, abc_number_of(audio_keys), ABC_HTML_AUDIO, abc_number_of(audio_attrs), audio_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {source_keys, abc_number_of(source_keys), ABC_HTML_SOURCE, abc_number_of(source_attrs), source_attrs, ABC_HTML_FLAG_OPEN | ABC_HTML_FLAG_SHOW},
+ {play_keys, abc_number_of(play_keys), ABC_HTML_PLAY, 0, NULL, ABC_HTML_FLAG_OPEN},
+ {progress_keys, abc_number_of(progress_keys), ABC_HTML_PROGRESS, 0, NULL, ABC_HTML_FLAG_OPEN},
+
+ {script_keys, abc_number_of(script_keys), ABC_HTML_SCRIPT, abc_number_of(script_attrs), script_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {style_keys, abc_number_of(style_keys), ABC_HTML_STYLE, 0, NULL, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+
+ {css_id_keys, abc_number_of(css_id_keys), ABC_CSS_ID, abc_number_of(css_id_attrs), css_id_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {css_class_keys, abc_number_of(css_class_keys), ABC_CSS_CLASS, abc_number_of(css_id_attrs), css_id_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {css_attr_keys, abc_number_of(css_attr_keys), ABC_CSS_ATTR, abc_number_of(css_id_attrs), css_id_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {css_pse_class_keys, abc_number_of(css_pse_class_keys), ABC_CSS_PSE_CLASS, abc_number_of(css_id_attrs), css_id_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {css_pse_element_keys, abc_number_of(css_pse_element_keys), ABC_CSS_PSE_ELEMENT, abc_number_of(css_id_attrs), css_id_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
+ {css_other_keys, abc_number_of(css_other_keys), ABC_CSS_COMBINATOR, abc_number_of(css_id_attrs), css_id_attrs, ABC_HTML_FLAG_CLOSE | ABC_HTML_FLAG_SHOW},
};
static int __html_parse_obj(abc_html_t* html, abc_char_t* c);
-html_label_t* __html_find_label(const char* name)
+html_label_t* __html_find_label(const char* name, size_t len)
{
html_label_t* label;
-
+ abc_str_t* s;
int i;
int j;
for (i = 0; i < sizeof(html_labels) / sizeof(html_labels[0]); i++) {
label = &html_labels[i];
- for (j = 0; label->names[j]; j++) {
+ for (j = 0; j < label->n_names; j++) {
+ s = &(label->names[j]);
- if (!__html_strcmp(label->names[j], name))
+ if (len == s->len && !__html_strncmp(s->data, name, len))
return label;
}
}
return NULL;
}
-int __html_add_attr(abc_obj_t* obj, int type, char** names, const char* value, int flags)
+int __html_add_attr(abc_obj_t* obj, int type, abc_str_t* names, size_t n_names, const char* value, int flags)
{
if (type < ABC_CSS_CLASS || type >= ABC_HTML_CSS_NB)
return -EINVAL;
return -ENOMEM;
}
- attr->type = type;
- attr->keys = names;
- attr->flags = flags;
+ attr->flags = flags;
+ attr->type = type;
+ attr->keys = names;
+ attr->n_keys = n_names;
int i = type - ABC_CSS_CLASS;
if (obj->attrs[i])
if (!play)
return -ENOMEM;
- label = __html_find_label("play");
+ label = __html_find_label2(ABC_HTML_PLAY);
play->flags = label->flags;
play->keys = label->names;
+ play->n_keys = label->n_names;
play->parent = obj;
progress = abc_obj_alloc(obj->file, obj->line, obj->pos, ABC_HTML_PROGRESS);
return -ENOMEM;
}
- label = __html_find_label("progress");
+ label = __html_find_label2(ABC_HTML_PROGRESS);
progress->flags = label->flags;
progress->keys = label->names;
+ progress->n_keys = label->n_names;
progress->parent = obj;
scf_list_add_tail(&obj->childs, &play->list);
if (attrs && n_attrs > 0) {
for (i = 0; i < n_attrs; i++) {
- ret = __html_add_attr(obj, attrs[i].type, attrs[i].names, attrs[i].value, attrs[i].flags);
+ ret = __html_add_attr(obj, attrs[i].type, attrs[i].names, attrs[i].n_names, attrs[i].value, attrs[i].flags);
if (ret < 0)
return ret;
}
if (!attr)
continue;
- ret = __html_add_attr(obj, attr->type, attr->keys, attr->value->data, 0);
+ ret = __html_add_attr(obj, attr->type, attr->keys, attr->n_keys, attr->value->data, 0);
if (ret < 0)
return ret;
}
free(c);
c = NULL;
+ abc_str_t* s;
int j;
- for (j = 0; obj->keys[j]; j++) {
- if (!__html_strcmp(obj->keys[j], end->data)) {
+ for (j = 0; j < obj->n_keys; j++) {
+ s = &(obj->keys[j]);
+
+ if (s->len == end->len && !__html_strcmp(s->data, end->data)) {
scf_string_free(end);
return 0;
}
}
scf_loge("end label '%s' file: %s, line: %d, NOT for label '%s' line: %d\n",
- end->data, html->file->data, html->n_lines, obj->keys[0], obj->line);
+ end->data, html->file->data, html->n_lines, obj->keys[0].data, obj->line);
scf_string_free(end);
return -1;
c = NULL;
abc_attr_t* attr;
+ abc_str_t* s;
int i;
int j;
if (!attr)
continue;
- for (j = 0; attr->keys[j]; j++)
- {
- if (!__html_strcmp(attr->keys[j], key->data))
+ for (j = 0; j < attr->n_keys; j++) {
+ s = &(attr->keys[j]);
+
+ if (s->len == key->len && !__html_strncmp(s->data, key->data, key->len))
goto found;
}
}
free(c);
c = NULL;
- label = __html_find_label(key->data);
+ label = __html_find_label(key->data, key->len);
if (!label) {
scf_loge("invalid HTML label '%s' in file: %s, line: %d\n",
key->data, html->file->data, html->n_lines);
if (!obj)
return -ENOMEM;
- obj->flags = label->flags;
- obj->keys = label->names;
+ obj->flags = label->flags;
+ obj->keys = label->names;
+ obj->n_keys = label->n_names;
obj->parent = html->current;
if ('>' != tmp) {
scf_loge("HTML label '%s' (%d) not closed, in file: %s, line: %d\n",
- obj->keys[0], tmp, html->file->data, html->n_lines);
+ obj->keys[0].data, tmp, html->file->data, html->n_lines);
return -1;
}
} else