Complete restructuring of rule

This commit is contained in:
Wilson Lin 2019-04-10 17:05:47 +10:00
parent df4044d332
commit e0bba6ac19
40 changed files with 1138 additions and 985 deletions

View File

@ -6,43 +6,54 @@ set(CMAKE_C_STANDARD 11)
include_directories(src lib)
add_executable(hyperbuild
src/hb/rune.h
src/hb/proc.h
src/hb/proc/matches.c
src/hb/proc/peek.c
src/hb/unit/attr.c
src/hb/unit/tag/name.c
src/hb/unit/tag.c
src/hb/unit/attr/val/unquoted.c
src/hb/unit/attr/val/quoted.c
src/hb/unit/attr/val.c
src/hb/unit/content/style.c
src/hb/unit/content/html.c
src/hb/unit/content/script.c
src/hb/unit/bang.c
src/hb/unit/entity.c
src/hb/unit/comment.c
src/hb/unit.h
src/hb/err.h
src/hb/cfg.h
src/hb/proc/view.c
src/hb/err.c
src/hb/proc/error.c
src/hb/proc/bounds.c
src/hb/proc/accept.c
src/hb/proc/write.c
src/hb/proc/bounds.c
src/hb/proc/require.c
src/hb/proc/skip.c
src/hb/unit/attr.c
src/hb/unit/attr/val.c
src/hb/unit/attr/val/quoted.c
src/hb/unit/attr/val/unquoted.c
src/hb/unit/bang.c
src/hb/unit/comment.c
src/hb/unit/content/html.c
src/hb/unit/content/script.c
src/hb/unit/content/style.c
src/hb/unit/entity.c
src/hb/unit/tag.c
src/hb/unit/tag/name.c
src/hb/err.c
src/hb/rule/attr/name.c
src/hb/rule/attr/quote.c
src/hb/rule/attr/unquotedvalue.c
src/hb/rule/ascii/control.c
src/hb/rule.h
src/hb/rule/ascii/digit.c
src/hb/rule/ascii/hex.c
src/hb/rule/ascii/lowercase.c
src/hb/rule/ascii/uppercase.c
src/hb/rule/ascii/whitespace.c
src/hb/rule/attr/quote.c
src/hb/rule/tag/name.c
src/hb/rule/attr/unquotedvalue.c
src/hb/rule/tag/contentfirst.c
src/hb/rule/tag/content.c
src/hb/rule/tag/formatting.c
src/hb/rule/tag/heading.c
src/hb/rule/tag/html.c
src/hb/rule/tag/layout.c
src/hb/rule/tag/media.c
src/hb/rule/tag/sectioning.c
src/hb/rule/tag/specific.c
src/hb/rule/tag/svg.c
src/hb/rule/tag/valid.c
src/hb/rule/tag/void.c
src/hb/rule/tag/wss.c
src/hb/rule/tag/parent/blacklist.c
src/hb/rule/tag/parent/whitelist.c
src/hb/rule/tag/child/blacklist.c
src/hb/rule/tag/child/whitelist.c
src/hb/rule/entity/reference.c
src/hb/collection.h)
src/hb/rule/rule.c)

View File

@ -2,6 +2,8 @@
#include <stdint.h>
#include <nicehash/set-int32.h>
#include <nicehash/set-str.h>
#include <nicehash/map-str.h>
NH_MAP_STR(int32, int32_t, int32_t, -1);
NH_MAP_STR(set_str, nh_set_str*, nh_set_str*, NULL);

View File

@ -3,6 +3,8 @@
#include <hb/rune.h>
#include <hb/collection.h>
void hb_rule_init(void);
void hb_rule_ascii_control_add_elems(nh_set_int32* set);
void hb_rule_ascii_control_init(void);
bool hb_rule_ascii_control_check(hb_rune c);
@ -35,11 +37,80 @@ void hb_rule_attr_quote_add_elems(nh_set_int32* set);
void hb_rule_attr_quote_init(void);
bool hb_rule_attr_quote_check(hb_rune c);
void hb_rule_attr_unquotedvalue_add_exceptions(nh_set_int32* set);
void hb_rule_attr_unquotedvalue_init(void);
bool hb_rule_attr_unquotedvalue_check(hb_rune c);
void hb_rule_entity_reference_map_add_entries(nh_map_str_int32* map);
void hb_rule_entity_reference_init(void);
bool hb_rule_entity_reference_exists(hb_rune* ref);
int32_t hb_rule_entity_reference_map_get(hb_rune* ref);
void hb_rule_tag_content_add_elems(nh_set_str* set);
void hb_rule_tag_content_init(void);
bool hb_rule_tag_content_check(hb_rune* tag);
void hb_rule_tag_contentfirst_add_elems(nh_set_str* set);
void hb_rule_tag_contentfirst_init(void);
bool hb_rule_tag_contentfirst_check(hb_rune* tag);
void hb_rule_tag_formatting_add_elems(nh_set_str* set);
void hb_rule_tag_formatting_init(void);
bool hb_rule_tag_formatting_check(hb_rune* tag);
void hb_rule_tag_heading_add_elems(nh_set_str* set);
void hb_rule_tag_heading_init(void);
bool hb_rule_tag_heading_check(hb_rune* tag);
void hb_rule_tag_html_add_elems(nh_set_str* set);
void hb_rule_tag_html_init(void);
bool hb_rule_tag_html_check(hb_rune* tag);
void hb_rule_tag_layout_add_elems(nh_set_str* set);
void hb_rule_tag_layout_init(void);
bool hb_rule_tag_layout_check(hb_rune* tag);
void hb_rule_tag_media_add_elems(nh_set_str* set);
void hb_rule_tag_media_init(void);
bool hb_rule_tag_media_check(hb_rune* tag);
void hb_rule_tag_name_add_elems(nh_set_int32* set);
void hb_rule_tag_name_init(void);
bool hb_rule_tag_name_check(hb_rune c);
void hb_rule_entity_reference_map_add_entries(nh_map_str_int32* map);
void hb_rule_entity_reference_map_init(void);
bool hb_rule_entity_reference_map_check(hb_rune* ref);
int32_t hb_rule_entity_reference_map_get(hb_rune* ref);
void hb_rule_tag_sectioning_add_elems(nh_set_str* set);
void hb_rule_tag_sectioning_init(void);
bool hb_rule_tag_sectioning_check(hb_rune* tag);
void hb_rule_tag_specific_add_elems(nh_set_str* set);
void hb_rule_tag_specific_init(void);
bool hb_rule_tag_specific_check(hb_rune* tag);
void hb_rule_tag_svg_add_elems(nh_set_str* set);
void hb_rule_tag_svg_init(void);
bool hb_rule_tag_svg_check(hb_rune* tag);
bool hb_rule_tag_valid_check(hb_rune* tag);
void hb_rule_tag_void_add_elems(nh_set_str* set);
void hb_rule_tag_void_init(void);
bool hb_rule_tag_void_check(hb_rune* tag);
void hb_rule_tag_wss_add_elems(nh_set_str* set);
void hb_rule_tag_wss_init(void);
bool hb_rule_tag_wss_check(hb_rune* tag);
void hb_rule_tag_child_blacklist_map_add_entries(nh_map_str_set_str* map);
void hb_rule_tag_child_blacklist_init(void);
bool hb_rule_tag_child_blacklist_allowed(hb_rune* parent, hb_rune* child);
void hb_rule_tag_child_whitelist_map_add_entries(nh_map_str_set_str* map);
void hb_rule_tag_child_whitelist_init(void);
bool hb_rule_tag_child_whitelist_allowed(hb_rune* parent, hb_rune* child);
void hb_rule_tag_parent_blacklist_init(void);
bool hb_rule_tag_parent_blacklist_allowed(hb_rune* child, hb_rune* parent);
void hb_rule_tag_parent_whitelist_map_add_entries(nh_map_str_set_str* map);
void hb_rule_tag_parent_whitelist_init(void);
bool hb_rule_tag_parent_whitelist_allowed(hb_rune* child, hb_rune* parent);

View File

@ -2043,12 +2043,12 @@ void hb_rule_entity_reference_map_add_entries(nh_map_str_int32* map) {
nh_map_str_int32_set(map, "zwnj", 0x200c);
}
void hb_rule_entity_reference_map_init(void) {
void hb_rule_entity_reference_init(void) {
hb_rule_entity_reference_map = nh_map_str_int32_create();
hb_rule_entity_reference_map_add_entries(hb_rule_entity_reference_map);
}
bool hb_rule_entity_reference_map_check(hb_rune* ref) {
bool hb_rule_entity_reference_exists(hb_rune* ref) {
return nh_map_str_int32_has(hb_rule_entity_reference_map, ref);
}

46
src/hb/rule/rule.c Normal file
View File

@ -0,0 +1,46 @@
#pragma once
#include <hb/rule.h>
void hb_rule_init(void) {
// Core
hb_rule_ascii_control_init();
hb_rule_ascii_digit_init();
hb_rule_ascii_hex_init();
hb_rule_ascii_uppercase_init();
hb_rule_ascii_lowercase_init();
hb_rule_ascii_whitespace_init();
// Identifiers
hb_rule_tag_name_init();
hb_rule_attr_name_init();
// Values
hb_rule_attr_quote_init();
hb_rule_attr_unquotedvalue_init();
hb_rule_entity_reference_init();
// Specification tag categories
hb_rule_tag_heading_init();
hb_rule_tag_media_init();
hb_rule_tag_sectioning_init();
hb_rule_tag_void_init();
hb_rule_tag_wss_init();
hb_rule_tag_html_init();
hb_rule_tag_svg_init();
// Hyperbuild tag categories
hb_rule_tag_contentfirst_init();
hb_rule_tag_content_init();
hb_rule_tag_formatting_init();
hb_rule_tag_layout_init();
hb_rule_tag_specific_init();
// Relations
hb_rule_tag_child_blacklist_init();
hb_rule_tag_child_whitelist_init();
hb_rule_tag_parent_blacklist_init();
hb_rule_tag_parent_whitelist_init();
}

View File

@ -0,0 +1,87 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_map_str_set_str* hb_rule_tag_child_blacklist_map;
void hb_rule_tag_child_blacklist_map_add_entries(nh_map_str_set_str* map) {
// <address>
nh_set_str* address = nh_set_str_create();
hb_rule_tag_heading_add_elems(address);
hb_rule_tag_sectioning_add_elems(address);
nh_set_str_add(address, "address");
nh_set_str_add(address, "header");
nh_set_str_add(address, "footer");
nh_map_str_set_str_set(map, "address", address);
// <audio>
nh_set_str* audio = nh_set_str_create();
hb_rule_tag_media_add_elems(audio);
nh_map_str_set_str_set(map, "audio", audio);
// <dfn>
nh_set_str* dfn = nh_set_str_create();
nh_set_str_add(dfn, "dfn");
nh_map_str_set_str_set(map, "dfn", dfn);
// <dt>
nh_set_str* dt = nh_set_str_create();
hb_rule_tag_heading_add_elems(dt);
hb_rule_tag_sectioning_add_elems(dt);
nh_set_str_add(dt, "header");
nh_set_str_add(dt, "footer");
nh_map_str_set_str_set(map, "dt", dt);
// <footer>
nh_set_str* footer = nh_set_str_create();
nh_set_str_add(footer, "header");
nh_set_str_add(footer, "footer");
nh_map_str_set_str_set(map, "footer", footer);
// <form>
nh_set_str* form = nh_set_str_create();
nh_set_str_add(form, "form");
nh_map_str_set_str_set(map, "form", form);
// <header>
nh_set_str* header = nh_set_str_create();
nh_set_str_add(header, "header");
nh_set_str_add(header, "footer");
nh_map_str_set_str_set(map, "header", header);
// <label>
nh_set_str* label = nh_set_str_create();
nh_set_str_add(label, "label");
nh_map_str_set_str_set(map, "label", label);
// <progress>
nh_set_str* progress = nh_set_str_create();
nh_set_str_add(progress, "progress");
nh_map_str_set_str_set(map, "progress", progress);
// <th>
nh_set_str* th = nh_set_str_create();
hb_rule_tag_heading_add_elems(th);
hb_rule_tag_sectioning_add_elems(th);
nh_set_str_add(th, "header");
nh_set_str_add(th, "footer");
nh_map_str_set_str_set(map, "th", th);
// <video>
nh_set_str* video = nh_set_str_create();
hb_rule_tag_media_add_elems(video);
nh_map_str_set_str_set(map, "video", video);
}
void hb_rule_tag_child_blacklist_init(void) {
hb_rule_tag_child_blacklist_map = nh_map_str_set_str_create();
hb_rule_tag_child_blacklist_map_add_entries(hb_rule_tag_child_blacklist_map);
}
// Check if a parent is allowed to have a specific child, based on the blacklist.
bool hb_rule_tag_child_blacklist_allowed(hb_rune* parent, hb_rune* child) {
nh_set_str* set = nh_map_str_set_str_get(hb_rule_tag_child_blacklist_map, parent);
return set == NULL || !nh_set_str_has(set, child);
}

View File

@ -0,0 +1,102 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_map_str_set_str* hb_rule_tag_child_whitelist_map;
void hb_rule_tag_child_whitelist_map_add_entries(nh_map_str_set_str* map) {
// <colgroup>
nh_set_str* colgroup = nh_set_str_create();
nh_set_str_add(colgroup, "col");
nh_map_str_set_str_set(map, "colgroup", colgroup);
// <datalist>
nh_set_str* datalist = nh_set_str_create();
nh_set_str_add(datalist, "option");
nh_map_str_set_str_set(map, "datalist", datalist);
// <dl>
nh_set_str* dl = nh_set_str_create();
nh_set_str_add(dl, "dt");
nh_set_str_add(dl, "dd");
nh_map_str_set_str_set(map, "dl", dl);
// <hgroup>
nh_set_str* hgroup = nh_set_str_create();
hb_rule_tag_heading_add_elems(hgroup);
nh_map_str_set_str_set(map, "hgroup", hgroup);
// <ol>
nh_set_str* ol = nh_set_str_create();
nh_set_str_add(ol, "li");
nh_map_str_set_str_set(map, "ol", ol);
// <optgroup>
nh_set_str* optgroup = nh_set_str_create();
nh_set_str_add(optgroup, "option");
nh_map_str_set_str_set(map, "optgroup", optgroup);
// <picture>
nh_set_str* picture = nh_set_str_create();
nh_set_str_add(picture, "source");
nh_set_str_add(picture, "img");
nh_map_str_set_str_set(map, "picture", picture);
// <select>
nh_set_str* select = nh_set_str_create();
nh_set_str_add(select, "optgroup");
nh_set_str_add(select, "option");
nh_map_str_set_str_set(map, "select", select);
// <table>
nh_set_str* table = nh_set_str_create();
nh_set_str_add(table, "caption");
nh_set_str_add(table, "colgroup");
nh_set_str_add(table, "col");
nh_set_str_add(table, "thead");
nh_set_str_add(table, "tbody");
nh_set_str_add(table, "tfoot");
nh_set_str_add(table, "tr");
nh_map_str_set_str_set(map, "table", table);
// <tbody>
nh_set_str* tbody = nh_set_str_create();
nh_set_str_add(tbody, "tr");
nh_map_str_set_str_set(map, "tbody", tbody);
// <tfoot>
nh_set_str* tfoot = nh_set_str_create();
nh_set_str_add(tfoot, "tr");
nh_map_str_set_str_set(map, "tfoot", tfoot);
// <thead>
nh_set_str* thead = nh_set_str_create();
nh_set_str_add(thead, "tr");
nh_map_str_set_str_set(map, "thead", thead);
// <tr>
nh_set_str* tr = nh_set_str_create();
nh_set_str_add(tr, "td");
nh_set_str_add(tr, "th");
nh_set_str_add(tr, "template");
nh_set_str_add(tr, "script");
nh_map_str_set_str_set(map, "tr", tr);
// <ul>
nh_set_str* ul = nh_set_str_create();
nh_set_str_add(ul, "li");
nh_map_str_set_str_set(map, "ul", ul);
}
void hb_rule_tag_child_whitelist_init(void) {
hb_rule_tag_child_whitelist_map = nh_map_str_set_str_create();
hb_rule_tag_child_whitelist_map_add_entries(hb_rule_tag_child_whitelist_map);
}
// Check if a parent is allowed to have a specific child.
bool hb_rule_tag_child_whitelist_allowed(hb_rune* parent, hb_rune* child) {
nh_set_str* set = nh_map_str_set_str_get(hb_rule_tag_child_whitelist_map, parent);
return set == NULL || nh_set_str_has(set, child);
}

39
src/hb/rule/tag/content.c Normal file
View File

@ -0,0 +1,39 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_set_str* hb_rule_tag_content_set;
void hb_rule_tag_content_add_elems(nh_set_str* set) {
nh_set_str_add(set, "address");
nh_set_str_add(set, "audio");
nh_set_str_add(set, "button");
nh_set_str_add(set, "canvas");
nh_set_str_add(set, "caption");
nh_set_str_add(set, "figcaption");
nh_set_str_add(set, "h1");
nh_set_str_add(set, "h2");
nh_set_str_add(set, "h3");
nh_set_str_add(set, "h4");
nh_set_str_add(set, "h5");
nh_set_str_add(set, "h6");
nh_set_str_add(set, "legend");
nh_set_str_add(set, "meter");
nh_set_str_add(set, "object");
nh_set_str_add(set, "option");
nh_set_str_add(set, "p");
nh_set_str_add(set, "summary"); // Can also contain a heading
nh_set_str_add(set, "textarea");
nh_set_str_add(set, "video");
}
void hb_rule_tag_content_init(void) {
hb_rule_tag_content_set = nh_set_str_create();
hb_rule_tag_content_add_elems(hb_rule_tag_content_set);
}
bool hb_rule_tag_content_check(hb_rune* tag) {
return nh_set_str_has(hb_rule_tag_content_set, tag);
}

View File

@ -0,0 +1,32 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_set_str* hb_rule_tag_contentfirst_set;
void hb_rule_tag_contentfirst_add_elems(nh_set_str* set) {
nh_set_str_add(set, "dd");
nh_set_str_add(set, "details");
nh_set_str_add(set, "dt");
nh_set_str_add(set, "iframe");
nh_set_str_add(set, "label");
nh_set_str_add(set, "li");
nh_set_str_add(set, "noscript");
nh_set_str_add(set, "output");
nh_set_str_add(set, "progress");
nh_set_str_add(set, "slot");
nh_set_str_add(set, "td");
nh_set_str_add(set, "template");
nh_set_str_add(set, "th");
}
void hb_rule_tag_contentfirst_init(void) {
hb_rule_tag_contentfirst_set = nh_set_str_create();
hb_rule_tag_contentfirst_add_elems(hb_rule_tag_contentfirst_set);
}
bool hb_rule_tag_contentfirst_check(hb_rune* tag) {
return nh_set_str_has(hb_rule_tag_contentfirst_set, tag);
}

View File

@ -0,0 +1,50 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_set_str* hb_rule_tag_formatting_set;
void hb_rule_tag_formatting_add_elems(nh_set_str* set) {
// Difference to MDN's inline text semantics list: -br, +del, +ins
nh_set_str_add(set, "a");
nh_set_str_add(set, "abbr");
nh_set_str_add(set, "b");
nh_set_str_add(set, "bdi");
nh_set_str_add(set, "bdo");
nh_set_str_add(set, "cite");
nh_set_str_add(set, "data");
nh_set_str_add(set, "del");
nh_set_str_add(set, "dfn");
nh_set_str_add(set, "em");
nh_set_str_add(set, "i");
nh_set_str_add(set, "ins");
nh_set_str_add(set, "kbd");
nh_set_str_add(set, "mark");
nh_set_str_add(set, "q");
nh_set_str_add(set, "rp");
nh_set_str_add(set, "rt");
nh_set_str_add(set, "rtc");
nh_set_str_add(set, "ruby");
nh_set_str_add(set, "s");
nh_set_str_add(set, "samp");
nh_set_str_add(set, "small");
nh_set_str_add(set, "span");
nh_set_str_add(set, "strong");
nh_set_str_add(set, "sub");
nh_set_str_add(set, "sup");
nh_set_str_add(set, "time");
nh_set_str_add(set, "u");
nh_set_str_add(set, "var");
nh_set_str_add(set, "wbr");
}
void hb_rule_tag_formatting_init(void) {
hb_rule_tag_formatting_set = nh_set_str_create();
hb_rule_tag_formatting_add_elems(hb_rule_tag_formatting_set);
}
bool hb_rule_tag_formatting_check(hb_rune* tag) {
return nh_set_str_has(hb_rule_tag_formatting_set, tag);
}

26
src/hb/rule/tag/heading.c Normal file
View File

@ -0,0 +1,26 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_set_str* hb_rule_tag_heading_set;
void hb_rule_tag_heading_add_elems(nh_set_str* set) {
nh_set_str_add(set, "hgroup");
nh_set_str_add(set, "h1");
nh_set_str_add(set, "h2");
nh_set_str_add(set, "h3");
nh_set_str_add(set, "h4");
nh_set_str_add(set, "h5");
nh_set_str_add(set, "h6");
}
void hb_rule_tag_heading_init(void) {
hb_rule_tag_heading_set = nh_set_str_create();
hb_rule_tag_heading_add_elems(hb_rule_tag_heading_set);
}
bool hb_rule_tag_heading_check(hb_rune* tag) {
return nh_set_str_has(hb_rule_tag_heading_set, tag);
}

173
src/hb/rule/tag/html.c Normal file
View File

@ -0,0 +1,173 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
// Sourced from https://developer.mozilla.org/en-US/docs/Web/HTML/Element at
// 2018-07-01T05:55:00Z
static nh_set_str* hb_rule_tag_html_set;
void hb_rule_tag_html_add_elems(nh_set_str* set) {
nh_set_str_add(set, "a");
nh_set_str_add(set, "abbr");
nh_set_str_add(set, "acronym");
nh_set_str_add(set, "address");
nh_set_str_add(set, "applet");
nh_set_str_add(set, "applet");
nh_set_str_add(set, "area");
nh_set_str_add(set, "article");
nh_set_str_add(set, "aside");
nh_set_str_add(set, "audio");
nh_set_str_add(set, "b");
nh_set_str_add(set, "basefont");
nh_set_str_add(set, "bdi");
nh_set_str_add(set, "bdo");
nh_set_str_add(set, "bgsound");
nh_set_str_add(set, "big");
nh_set_str_add(set, "blink");
nh_set_str_add(set, "blockquote");
nh_set_str_add(set, "body");
nh_set_str_add(set, "br");
nh_set_str_add(set, "button");
nh_set_str_add(set, "canvas");
nh_set_str_add(set, "caption");
nh_set_str_add(set, "center");
nh_set_str_add(set, "cite");
nh_set_str_add(set, "code");
nh_set_str_add(set, "col");
nh_set_str_add(set, "colgroup");
nh_set_str_add(set, "command");
nh_set_str_add(set, "content");
nh_set_str_add(set, "content");
nh_set_str_add(set, "data");
nh_set_str_add(set, "datalist");
nh_set_str_add(set, "dd");
nh_set_str_add(set, "del");
nh_set_str_add(set, "details");
nh_set_str_add(set, "dfn");
nh_set_str_add(set, "dialog");
nh_set_str_add(set, "dir");
nh_set_str_add(set, "dir");
nh_set_str_add(set, "div");
nh_set_str_add(set, "dl");
nh_set_str_add(set, "dt");
nh_set_str_add(set, "element");
nh_set_str_add(set, "element");
nh_set_str_add(set, "em");
nh_set_str_add(set, "embed");
nh_set_str_add(set, "fieldset");
nh_set_str_add(set, "figcaption");
nh_set_str_add(set, "figure");
nh_set_str_add(set, "font");
nh_set_str_add(set, "footer");
nh_set_str_add(set, "form");
nh_set_str_add(set, "frame");
nh_set_str_add(set, "frameset");
nh_set_str_add(set, "h1");
nh_set_str_add(set, "h2");
nh_set_str_add(set, "h3");
nh_set_str_add(set, "h4");
nh_set_str_add(set, "h5");
nh_set_str_add(set, "h6");
nh_set_str_add(set, "head");
nh_set_str_add(set, "header");
nh_set_str_add(set, "hgroup");
nh_set_str_add(set, "hr");
nh_set_str_add(set, "html");
nh_set_str_add(set, "i");
nh_set_str_add(set, "iframe");
nh_set_str_add(set, "image");
nh_set_str_add(set, "img");
nh_set_str_add(set, "input");
nh_set_str_add(set, "ins");
nh_set_str_add(set, "isindex");
nh_set_str_add(set, "kbd");
nh_set_str_add(set, "keygen");
nh_set_str_add(set, "label");
nh_set_str_add(set, "legend");
nh_set_str_add(set, "li");
nh_set_str_add(set, "link");
nh_set_str_add(set, "listing");
nh_set_str_add(set, "main");
nh_set_str_add(set, "map");
nh_set_str_add(set, "mark");
nh_set_str_add(set, "marquee");
nh_set_str_add(set, "menu");
nh_set_str_add(set, "menuitem");
nh_set_str_add(set, "menuitem");
nh_set_str_add(set, "meta");
nh_set_str_add(set, "meter");
nh_set_str_add(set, "multicol");
nh_set_str_add(set, "nav");
nh_set_str_add(set, "nextid");
nh_set_str_add(set, "nobr");
nh_set_str_add(set, "noembed");
nh_set_str_add(set, "noembed");
nh_set_str_add(set, "noframes");
nh_set_str_add(set, "noscript");
nh_set_str_add(set, "object");
nh_set_str_add(set, "ol");
nh_set_str_add(set, "optgroup");
nh_set_str_add(set, "option");
nh_set_str_add(set, "output");
nh_set_str_add(set, "p");
nh_set_str_add(set, "param");
nh_set_str_add(set, "picture");
nh_set_str_add(set, "plaintext");
nh_set_str_add(set, "pre");
nh_set_str_add(set, "progress");
nh_set_str_add(set, "q");
nh_set_str_add(set, "rp");
nh_set_str_add(set, "rt");
nh_set_str_add(set, "rtc");
nh_set_str_add(set, "ruby");
nh_set_str_add(set, "s");
nh_set_str_add(set, "samp");
nh_set_str_add(set, "script");
nh_set_str_add(set, "section");
nh_set_str_add(set, "select");
nh_set_str_add(set, "shadow");
nh_set_str_add(set, "shadow");
nh_set_str_add(set, "slot");
nh_set_str_add(set, "small");
nh_set_str_add(set, "source");
nh_set_str_add(set, "spacer");
nh_set_str_add(set, "span");
nh_set_str_add(set, "strike");
nh_set_str_add(set, "strong");
nh_set_str_add(set, "style");
nh_set_str_add(set, "sub");
nh_set_str_add(set, "summary");
nh_set_str_add(set, "sup");
nh_set_str_add(set, "table");
nh_set_str_add(set, "tbody");
nh_set_str_add(set, "td");
nh_set_str_add(set, "template");
nh_set_str_add(set, "textarea");
nh_set_str_add(set, "tfoot");
nh_set_str_add(set, "th");
nh_set_str_add(set, "thead");
nh_set_str_add(set, "time");
nh_set_str_add(set, "title");
nh_set_str_add(set, "tr");
nh_set_str_add(set, "track");
nh_set_str_add(set, "tt");
nh_set_str_add(set, "tt");
nh_set_str_add(set, "u");
nh_set_str_add(set, "ul");
nh_set_str_add(set, "var");
nh_set_str_add(set, "video");
nh_set_str_add(set, "wbr");
nh_set_str_add(set, "xmp");
}
void hb_rule_tag_html_init(void) {
hb_rule_tag_html_set = nh_set_str_create();
hb_rule_tag_html_add_elems(hb_rule_tag_html_set);
}
bool hb_rule_tag_html_check(hb_rune* tag) {
return nh_set_str_has(hb_rule_tag_html_set, tag);
}

50
src/hb/rule/tag/layout.c Normal file
View File

@ -0,0 +1,50 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_set_str* hb_rule_tag_layout_set;
void hb_rule_tag_layout_add_elems(nh_set_str* set) {
hb_rule_tag_sectioning_add_elems(set);
nh_set_str_add(set, "blockquote");
nh_set_str_add(set, "body");
nh_set_str_add(set, "colgroup");
nh_set_str_add(set, "datalist");
nh_set_str_add(set, "dialog");
nh_set_str_add(set, "div");
nh_set_str_add(set, "dl");
nh_set_str_add(set, "fieldset");
nh_set_str_add(set, "figure");
nh_set_str_add(set, "footer");
nh_set_str_add(set, "form");
nh_set_str_add(set, "head");
nh_set_str_add(set, "header");
nh_set_str_add(set, "hgroup");
nh_set_str_add(set, "html");
nh_set_str_add(set, "main");
nh_set_str_add(set, "map");
nh_set_str_add(set, "menu");
nh_set_str_add(set, "nav");
nh_set_str_add(set, "ol");
nh_set_str_add(set, "optgroup");
nh_set_str_add(set, "picture");
nh_set_str_add(set, "section");
nh_set_str_add(set, "select");
nh_set_str_add(set, "table");
nh_set_str_add(set, "tbody");
nh_set_str_add(set, "tfoot");
nh_set_str_add(set, "thead");
nh_set_str_add(set, "tr");
nh_set_str_add(set, "ul");
}
void hb_rule_tag_layout_init(void) {
hb_rule_tag_layout_set = nh_set_str_create();
hb_rule_tag_layout_add_elems(hb_rule_tag_layout_set);
}
bool hb_rule_tag_layout_check(hb_rune* tag) {
return nh_set_str_has(hb_rule_tag_layout_set, tag);
}

21
src/hb/rule/tag/media.c Normal file
View File

@ -0,0 +1,21 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_set_str* hb_rule_tag_media_set;
void hb_rule_tag_media_add_elems(nh_set_str* set) {
nh_set_str_add(set, "audio");
nh_set_str_add(set, "video");
}
void hb_rule_tag_media_init(void) {
hb_rule_tag_media_set = nh_set_str_create();
hb_rule_tag_media_add_elems(hb_rule_tag_media_set);
}
bool hb_rule_tag_media_check(hb_rune* tag) {
return nh_set_str_has(hb_rule_tag_media_set, tag);
}

View File

@ -0,0 +1,17 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_map_str_set_str* hb_rule_tag_parent_blacklist_map;
void hb_rule_tag_parent_blacklist_init(void) {
// Don't do anything. This rule is currently unused.
}
// Check if a child is allowed to have a specific parent, based on the blacklist.
bool hb_rule_tag_parent_blacklist_allowed(hb_rune* child, hb_rune* parent) {
// Since this rule is currently not being used, directly allow without any checks.
return true;
}

View File

@ -0,0 +1,147 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_map_str_set_str* hb_rule_tag_parent_whitelist_map;
void hb_rule_tag_parent_whitelist_map_add_entries(nh_map_str_set_str* map) {
// <caption>
nh_set_str* caption = nh_set_str_create();
nh_set_str_add(caption, "table");
nh_map_str_set_str_set(map, "caption", caption);
// <col>
nh_set_str* col = nh_set_str_create();
nh_set_str_add(col, "table");
nh_set_str_add(col, "colgroup");
nh_map_str_set_str_set(map, "col", col);
// <colgroup>
nh_set_str* colgroup = nh_set_str_create();
nh_set_str_add(colgroup, "table");
nh_map_str_set_str_set(map, "colgroup", colgroup);
// <dd>
nh_set_str* dd = nh_set_str_create();
nh_set_str_add(dd, "dl");
nh_map_str_set_str_set(map, "dd", dd);
// <dt>
nh_set_str* dt = nh_set_str_create();
nh_set_str_add(dt, "dl");
nh_map_str_set_str_set(map, "dt", dt);
// <figcaption>
nh_set_str* figcaption = nh_set_str_create();
nh_set_str_add(figcaption, "figure");
nh_map_str_set_str_set(map, "figcaption", figcaption);
// <legend>
nh_set_str* legend = nh_set_str_create();
nh_set_str_add(legend, "fieldset");
nh_map_str_set_str_set(map, "legend", legend);
// <li>
nh_set_str* li = nh_set_str_create();
nh_set_str_add(li, "ul");
nh_set_str_add(li, "ol");
nh_set_str_add(li, "menu");
nh_map_str_set_str_set(map, "li", li);
// <optgroup>
nh_set_str* optgroup = nh_set_str_create();
nh_set_str_add(optgroup, "select");
nh_map_str_set_str_set(map, "optgroup", optgroup);
// <option>
nh_set_str* option = nh_set_str_create();
nh_set_str_add(option, "select");
nh_set_str_add(option, "optgroup");
nh_set_str_add(option, "datalist");
nh_map_str_set_str_set(map, "option", option);
// <param>
nh_set_str* param = nh_set_str_create();
nh_set_str_add(param, "object");
nh_map_str_set_str_set(map, "param", param);
// <rp>
nh_set_str* rp = nh_set_str_create();
nh_set_str_add(rp, "ruby");
nh_map_str_set_str_set(map, "rp", rp);
// <rt>
nh_set_str* rt = nh_set_str_create();
nh_set_str_add(rt, "ruby");
nh_map_str_set_str_set(map, "rt", rt);
// <rtc>
nh_set_str* rtc = nh_set_str_create();
nh_set_str_add(rtc, "ruby");
nh_map_str_set_str_set(map, "rtc", rtc);
// <summary>
nh_set_str* summary = nh_set_str_create();
nh_set_str_add(summary, "details");
nh_map_str_set_str_set(map, "summary", summary);
// <source>
nh_set_str* source = nh_set_str_create();
hb_rule_tag_media_add_elems(source);
nh_set_str_add(source, "picture");
nh_map_str_set_str_set(map, "source", source);
// <track>
nh_set_str* track = nh_set_str_create();
hb_rule_tag_media_add_elems(track);
nh_map_str_set_str_set(map, "track", track);
// <tbody>
nh_set_str* tbody = nh_set_str_create();
nh_set_str_add(tbody, "table");
nh_map_str_set_str_set(map, "tbody", tbody);
// <td>
nh_set_str* td = nh_set_str_create();
nh_set_str_add(td, "tr");
nh_map_str_set_str_set(map, "td", td);
// <tfoot>
nh_set_str* tfoot = nh_set_str_create();
nh_set_str_add(tfoot, "table");
nh_map_str_set_str_set(map, "tfoot", tfoot);
// <th>
nh_set_str* th = nh_set_str_create();
nh_set_str_add(th, "tr");
nh_map_str_set_str_set(map, "th", th);
// <thead>
nh_set_str* thead = nh_set_str_create();
nh_set_str_add(thead, "table");
nh_map_str_set_str_set(map, "thead", thead);
// <tr>
nh_set_str* tr = nh_set_str_create();
nh_set_str_add(tr, "table");
nh_set_str_add(tr, "thead");
nh_set_str_add(tr, "tbody");
nh_set_str_add(tr, "tfoot");
nh_map_str_set_str_set(map, "tr", tr);
// <template>
// Should be <body>, <frameset>, <head>, <dl>, <colgroup>, but ignoring
}
void hb_rule_tag_parent_whitelist_init(void) {
hb_rule_tag_parent_whitelist_map = nh_map_str_set_str_create();
hb_rule_tag_parent_whitelist_map_add_entries(hb_rule_tag_parent_whitelist_map);
}
// Check if a child is allowed to have a specific parent.
bool hb_rule_tag_parent_whitelist_allowed(hb_rune* child, hb_rune* parent) {
nh_set_str* set = nh_map_str_set_str_get(hb_rule_tag_parent_whitelist_map, child);
return set == NULL || nh_set_str_has(set, parent);
}

View File

@ -0,0 +1,23 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_set_str* hb_rule_tag_sectioning_set;
void hb_rule_tag_sectioning_add_elems(nh_set_str* set) {
nh_set_str_add(set, "article");
nh_set_str_add(set, "aside");
nh_set_str_add(set, "nav");
nh_set_str_add(set, "section");
}
void hb_rule_tag_sectioning_init(void) {
hb_rule_tag_sectioning_set = nh_set_str_create();
hb_rule_tag_sectioning_add_elems(hb_rule_tag_sectioning_set);
}
bool hb_rule_tag_sectioning_check(hb_rune* tag) {
return nh_set_str_has(hb_rule_tag_sectioning_set, tag);
}

View File

@ -0,0 +1,34 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_set_str* hb_rule_tag_specific_set;
void hb_rule_tag_specific_add_elems(nh_set_str* set) {
hb_rule_tag_svg_add_elems(set);
nh_set_str_add(set, "area");
nh_set_str_add(set, "base");
nh_set_str_add(set, "br");
nh_set_str_add(set, "code"); // Reason: unlikely to want to minify
nh_set_str_add(set, "col");
nh_set_str_add(set, "embed");
nh_set_str_add(set, "hr");
nh_set_str_add(set, "img");
nh_set_str_add(set, "input");
nh_set_str_add(set, "param");
nh_set_str_add(set, "pre"); // Reason: unlikely to want to minify
nh_set_str_add(set, "script");
nh_set_str_add(set, "source");
nh_set_str_add(set, "track");
}
void hb_rule_tag_specific_init(void) {
hb_rule_tag_specific_set = nh_set_str_create();
hb_rule_tag_specific_add_elems(hb_rule_tag_specific_set);
}
bool hb_rule_tag_specific_check(hb_rune* tag) {
return nh_set_str_has(hb_rule_tag_specific_set, tag);
}

112
src/hb/rule/tag/svg.c Normal file
View File

@ -0,0 +1,112 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
// Sourced from https://developer.mozilla.org/en-US/docs/Web/SVG/Element at
// 2018-08-04T03:50:00Z
static nh_set_str* hb_rule_tag_svg_set;
void hb_rule_tag_svg_add_elems(nh_set_str* set) {
nh_set_str_add(set, "a");
nh_set_str_add(set, "altGlyph");
nh_set_str_add(set, "altGlyphDef");
nh_set_str_add(set, "altGlyphItem");
nh_set_str_add(set, "animate");
nh_set_str_add(set, "animateColor");
nh_set_str_add(set, "animateMotion");
nh_set_str_add(set, "animateTransform");
nh_set_str_add(set, "circle");
nh_set_str_add(set, "clipPath");
nh_set_str_add(set, "color-profile");
nh_set_str_add(set, "cursor");
nh_set_str_add(set, "defs");
nh_set_str_add(set, "desc");
nh_set_str_add(set, "discard");
nh_set_str_add(set, "ellipse");
nh_set_str_add(set, "feBlend");
nh_set_str_add(set, "feColorMatrix");
nh_set_str_add(set, "feComponentTransfer");
nh_set_str_add(set, "feComposite");
nh_set_str_add(set, "feConvolveMatrix");
nh_set_str_add(set, "feDiffuseLighting");
nh_set_str_add(set, "feDisplacementMap");
nh_set_str_add(set, "feDistantLight");
nh_set_str_add(set, "feDropShadow");
nh_set_str_add(set, "feFlood");
nh_set_str_add(set, "feFuncA");
nh_set_str_add(set, "feFuncB");
nh_set_str_add(set, "feFuncG");
nh_set_str_add(set, "feFuncR");
nh_set_str_add(set, "feGaussianBlur");
nh_set_str_add(set, "feImage");
nh_set_str_add(set, "feMerge");
nh_set_str_add(set, "feMergeNode");
nh_set_str_add(set, "feMorphology");
nh_set_str_add(set, "feOffset");
nh_set_str_add(set, "fePointLight");
nh_set_str_add(set, "feSpecularLighting");
nh_set_str_add(set, "feSpotLight");
nh_set_str_add(set, "feTile");
nh_set_str_add(set, "feTurbulence");
nh_set_str_add(set, "filter");
nh_set_str_add(set, "font-face-format");
nh_set_str_add(set, "font-face-name");
nh_set_str_add(set, "font-face-src");
nh_set_str_add(set, "font-face-uri");
nh_set_str_add(set, "font-face");
nh_set_str_add(set, "font");
nh_set_str_add(set, "foreignObject");
nh_set_str_add(set, "g");
nh_set_str_add(set, "glyph");
nh_set_str_add(set, "glyphRef");
nh_set_str_add(set, "hatch");
nh_set_str_add(set, "hatchpath");
nh_set_str_add(set, "hkern");
nh_set_str_add(set, "image");
nh_set_str_add(set, "line");
nh_set_str_add(set, "linearGradient");
nh_set_str_add(set, "marker");
nh_set_str_add(set, "mask");
nh_set_str_add(set, "mesh");
nh_set_str_add(set, "meshgradient");
nh_set_str_add(set, "meshpatch");
nh_set_str_add(set, "meshrow");
nh_set_str_add(set, "metadata");
nh_set_str_add(set, "missing-glyph");
nh_set_str_add(set, "mpath");
nh_set_str_add(set, "path");
nh_set_str_add(set, "pattern");
nh_set_str_add(set, "polygon");
nh_set_str_add(set, "polyline");
nh_set_str_add(set, "radialGradient");
nh_set_str_add(set, "rect");
nh_set_str_add(set, "script");
nh_set_str_add(set, "set");
nh_set_str_add(set, "solidcolor");
nh_set_str_add(set, "stop");
nh_set_str_add(set, "style");
nh_set_str_add(set, "svg");
nh_set_str_add(set, "switch");
nh_set_str_add(set, "symbol");
nh_set_str_add(set, "text");
nh_set_str_add(set, "textPath");
nh_set_str_add(set, "title");
nh_set_str_add(set, "tref");
nh_set_str_add(set, "tspan");
nh_set_str_add(set, "unknown");
nh_set_str_add(set, "use");
nh_set_str_add(set, "view");
nh_set_str_add(set, "vkern");
}
void hb_rule_tag_svg_init(void) {
hb_rule_tag_svg_set = nh_set_str_create();
hb_rule_tag_svg_add_elems(hb_rule_tag_svg_set);
}
bool hb_rule_tag_svg_check(hb_rune* tag) {
return nh_set_str_has(hb_rule_tag_svg_set, tag);
}

9
src/hb/rule/tag/valid.c Normal file
View File

@ -0,0 +1,9 @@
#pragma once
#include <hb/rune.h>
#include <hb/rule.h>
bool hb_rule_tag_valid_check(hb_rune* tag) {
return hb_rule_tag_html_check(tag) ||
hb_rule_tag_svg_check(tag);
}

34
src/hb/rule/tag/void.c Normal file
View File

@ -0,0 +1,34 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
static nh_set_str* hb_rule_tag_void_set;
void hb_rule_tag_void_add_elems(nh_set_str* set) {
nh_set_str_add(set, "area");
nh_set_str_add(set, "base");
nh_set_str_add(set, "br");
nh_set_str_add(set, "col");
nh_set_str_add(set, "embed");
nh_set_str_add(set, "hr");
nh_set_str_add(set, "img");
nh_set_str_add(set, "input");
nh_set_str_add(set, "keygen");
nh_set_str_add(set, "link");
nh_set_str_add(set, "meta");
nh_set_str_add(set, "param");
nh_set_str_add(set, "source");
nh_set_str_add(set, "track");
nh_set_str_add(set, "wbr");
}
void hb_rule_tag_void_init(void) {
hb_rule_tag_void_set = nh_set_str_create();
hb_rule_tag_void_add_elems(hb_rule_tag_void_set);
}
bool hb_rule_tag_void_check(hb_rune* tag) {
return nh_set_str_has(hb_rule_tag_void_set, tag);
}

23
src/hb/rule/tag/wss.c Normal file
View File

@ -0,0 +1,23 @@
#pragma once
#include <hb/rune.h>
#include <hb/collection.h>
#include <hb/rule.h>
// "wss" stands for whitespace-sensitive.
static nh_set_str* hb_rule_tag_wss_set;
void hb_rule_tag_wss_add_elems(nh_set_str* set) {
nh_set_str_add(set, "code");
nh_set_str_add(set, "pre");
}
void hb_rule_tag_wss_init(void) {
hb_rule_tag_wss_set = nh_set_str_create();
hb_rule_tag_wss_add_elems(hb_rule_tag_wss_set);
}
bool hb_rule_tag_wss_check(hb_rune* tag) {
return nh_set_str_has(hb_rule_tag_wss_set, tag);
}

View File

@ -1,80 +0,0 @@
#ifndef _HDR_HYPERBUILD_RULE_INIT
#define _HDR_HYPERBUILD_RULE_INIT
#include "./char/attrname.c"
#include "./char/attrvalquote.c"
#include "./char/c0.c"
#include "./char/digit.c"
#include "./char/hex.c"
#include "./char/lcalpha.c"
#include "./char/tagname.c"
#include "./char/ucalpha.c"
#include "./char/unquotedattrval.c"
#include "./char/whitespace.c"
#include "./entity/entity_references.c"
#include "./relation/blacklistchildren.c"
#include "./relation/blacklistparents.c"
#include "./relation/whitelistchildren.c"
#include "./relation/whitelistparents.c"
#include "./tag/contentfirsttags.c"
#include "./tag/contenttags.c"
#include "./tag/formattingtags.c"
#include "./tag/headingtags.c"
#include "./tag/layouttags.c"
#include "./tag/mediatags.c"
#include "./tag/sectioningtags.c"
#include "./tag/specifictags.c"
#include "./tag/voidtags.c"
#include "./tag/wsstags.c"
#include "./tag/htmltags.c"
#include "./tag/svgtags.c"
#include "./tag/tags.c"
void hb_rule_init(void) {
// Core
hb_rule_c0_init();
hb_rule_digit_init();
hb_rule_hex_init();
hb_rule_ucalpha_init();
hb_rule_lcalpha_init();
hb_rule_whitespace_init();
// Identifiers
hb_rule_tagname_init();
hb_rule_attrname_init();
// Values
hb_rule_attrvalquote_init();
hb_rule_unquotedattrval_init();
hb_rule_entity_references_init();
// Specification tag categories
hb_rule_headingtags_init();
hb_rule_mediatags_init();
hb_rule_sectioningtags_init();
hb_rule_voidtags_init();
hb_rule_wsstags_init();
hb_rule_htmltags_init();
hb_rule_svgtags_init();
hb_rule_tags_init();
// Hyperbuild tag categories
hb_rule_contentfirsttags_init();
hb_rule_contenttags_init();
hb_rule_formattingtags_init();
hb_rule_layouttags_init();
hb_rule_specifictags_init();
// Relations
hb_rule_whitelistparents_init();
hb_rule_blacklistparents_init();
hb_rule_whitelistchildren_init();
hb_rule_blacklistchildren_init();
}
#endif // _HDR_HYPERBUILD_RULE_INIT

View File

@ -1,81 +0,0 @@
#include "../tag/headingtags.c"
#include "../tag/mediatags.c"
#include "../tag/sectioningtags.c"
static nh_map_str_strset_t hb_rule_blacklistchildren_map;
void hb_rule_blacklistchildren_init(void) {
hb_rule_blacklistchildren_map = nh_map_str_strset_create();
// <address>
nh_set_str_t address = nh_set_str_create();
hb_rule_headingtags_add_elems(address);
hb_rule_sectioningtags_add_elems(address);
nh_set_str_add(address, "address");
nh_set_str_add(address, "header");
nh_set_str_add(address, "footer");
nh_map_str_strset_set(hb_rule_blacklistchildren_map, "address", address);
// <audio>
nh_set_str_t audio = nh_set_str_create();
hb_rule_mediatags_add_elems(audio);
nh_map_str_strset_set(hb_rule_blacklistchildren_map, "audio", audio);
// <dfn>
nh_set_str_t dfn = nh_set_str_create();
nh_set_str_add(dfn, "dfn");
nh_map_str_strset_set(hb_rule_blacklistchildren_map, "dfn", dfn);
// <dt>
nh_set_str_t dt = nh_set_str_create();
hb_rule_headingtags_add_elems(dt);
hb_rule_sectioningtags_add_elems(dt);
nh_set_str_add(dt, "header");
nh_set_str_add(dt, "footer");
nh_map_str_strset_set(hb_rule_blacklistchildren_map, "dt", dt);
// <footer>
nh_set_str_t footer = nh_set_str_create();
nh_set_str_add(footer, "header");
nh_set_str_add(footer, "footer");
nh_map_str_strset_set(hb_rule_blacklistchildren_map, "footer", footer);
// <form>
nh_set_str_t form = nh_set_str_create();
nh_set_str_add(form, "form");
nh_map_str_strset_set(hb_rule_blacklistchildren_map, "form", form);
// <header>
nh_set_str_t header = nh_set_str_create();
nh_set_str_add(header, "header");
nh_set_str_add(header, "footer");
nh_map_str_strset_set(hb_rule_blacklistchildren_map, "header", header);
// <label>
nh_set_str_t label = nh_set_str_create();
nh_set_str_add(label, "label");
nh_map_str_strset_set(hb_rule_blacklistchildren_map, "label", label);
// <progress>
nh_set_str_t progress = nh_set_str_create();
nh_set_str_add(progress, "progress");
nh_map_str_strset_set(hb_rule_blacklistchildren_map, "progress", progress);
// <th>
nh_set_str_t th = nh_set_str_create();
hb_rule_headingtags_add_elems(th);
hb_rule_sectioningtags_add_elems(th);
nh_set_str_add(th, "header");
nh_set_str_add(th, "footer");
nh_map_str_strset_set(hb_rule_blacklistchildren_map, "th", th);
// <video>
nh_set_str_t video = nh_set_str_create();
hb_rule_mediatags_add_elems(video);
nh_map_str_strset_set(hb_rule_blacklistchildren_map, "video", video);
}
int hb_rule_blacklistchildren_allowed(hb_proc_char_t *parent, hb_proc_char_t *child) {
nh_set_str_t set = nh_map_str_strset_get(hb_rule_blacklistchildren_map, (char *) parent, NULL);
return set == NULL || !nh_set_str_has(set, (char *) child);
}

View File

@ -1,10 +0,0 @@
static nh_map_str_strset_t hb_rule_blacklistparents_map;
void hb_rule_blacklistparents_init(void) {
hb_rule_blacklistparents_map = nh_map_str_strset_create();
}
int hb_rule_blacklistparents_allowed(hb_proc_char_t *child, hb_proc_char_t *parent) {
nh_set_str_t set = nh_map_str_strset_get(hb_rule_blacklistparents_map, (char *) child, NULL);
return set == NULL || !nh_set_str_has(set, (char *) parent);
}

View File

@ -1,94 +0,0 @@
#include "../tag/headingtags.c"
static nh_map_str_strset_t hb_rule_whitelistchildren_map;
void hb_rule_whitelistchildren_init(void) {
hb_rule_whitelistchildren_map = nh_map_str_strset_create();
// <colgroup>
nh_set_str_t colgroup = nh_set_str_create();
nh_set_str_add(colgroup, "col");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "colgroup", colgroup);
// <datalist>
nh_set_str_t datalist = nh_set_str_create();
nh_set_str_add(datalist, "option");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "datalist", datalist);
// <dl>
nh_set_str_t dl = nh_set_str_create();
nh_set_str_add(dl, "dt");
nh_set_str_add(dl, "dd");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "dl", dl);
// <hgroup>
nh_set_str_t hgroup = nh_set_str_create();
hb_rule_headingtags_add_elems(hgroup);
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "hgroup", hgroup);
// <ol>
nh_set_str_t ol = nh_set_str_create();
nh_set_str_add(ol, "li");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "ol", ol);
// <optgroup>
nh_set_str_t optgroup = nh_set_str_create();
nh_set_str_add(optgroup, "option");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "optgroup", optgroup);
// <picture>
nh_set_str_t picture = nh_set_str_create();
nh_set_str_add(picture, "source");
nh_set_str_add(picture, "img");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "picture", picture);
// <select>
nh_set_str_t select = nh_set_str_create();
nh_set_str_add(select, "optgroup");
nh_set_str_add(select, "option");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "select", select);
// <table>
nh_set_str_t table = nh_set_str_create();
nh_set_str_add(table, "caption");
nh_set_str_add(table, "colgroup");
nh_set_str_add(table, "col");
nh_set_str_add(table, "thead");
nh_set_str_add(table, "tbody");
nh_set_str_add(table, "tfoot");
nh_set_str_add(table, "tr");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "table", table);
// <tbody>
nh_set_str_t tbody = nh_set_str_create();
nh_set_str_add(tbody, "tr");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "tbody", tbody);
// <tfoot>
nh_set_str_t tfoot = nh_set_str_create();
nh_set_str_add(tfoot, "tr");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "tfoot", tfoot);
// <thead>
nh_set_str_t thead = nh_set_str_create();
nh_set_str_add(thead, "tr");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "thead", thead);
// <tr>
nh_set_str_t tr = nh_set_str_create();
nh_set_str_add(tr, "td");
nh_set_str_add(tr, "th");
nh_set_str_add(tr, "template");
nh_set_str_add(tr, "script");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "tr", tr);
// <ul>
nh_set_str_t ul = nh_set_str_create();
nh_set_str_add(ul, "li");
nh_map_str_strset_set(hb_rule_whitelistchildren_map, "ul", ul);
}
int hb_rule_whitelistchildren_allowed(hb_proc_char_t *parent, hb_proc_char_t *child) {
nh_set_str_t set = nh_map_str_strset_get(hb_rule_whitelistchildren_map, (char *) parent, NULL);
return set == NULL || nh_set_str_has(set, (char *) child);
}

View File

@ -1,139 +0,0 @@
#include "../tag/mediatags.c"
static nh_map_str_strset_t hb_rule_whitelistparents_map;
void hb_rule_whitelistparents_init(void) {
hb_rule_whitelistparents_map = nh_map_str_strset_create();
// <caption>
nh_set_str_t caption = nh_set_str_create();
nh_set_str_add(caption, "table");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "caption", caption);
// <col>
nh_set_str_t col = nh_set_str_create();
nh_set_str_add(col, "table");
nh_set_str_add(col, "colgroup");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "col", col);
// <colgroup>
nh_set_str_t colgroup = nh_set_str_create();
nh_set_str_add(colgroup, "table");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "colgroup", colgroup);
// <dd>
nh_set_str_t dd = nh_set_str_create();
nh_set_str_add(dd, "dl");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "dd", dd);
// <dt>
nh_set_str_t dt = nh_set_str_create();
nh_set_str_add(dt, "dl");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "dt", dt);
// <figcaption>
nh_set_str_t figcaption = nh_set_str_create();
nh_set_str_add(figcaption, "figure");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "figcaption", figcaption);
// <legend>
nh_set_str_t legend = nh_set_str_create();
nh_set_str_add(legend, "fieldset");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "legend", legend);
// <li>
nh_set_str_t li = nh_set_str_create();
nh_set_str_add(li, "ul");
nh_set_str_add(li, "ol");
nh_set_str_add(li, "menu");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "li", li);
// <optgroup>
nh_set_str_t optgroup = nh_set_str_create();
nh_set_str_add(optgroup, "select");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "optgroup", optgroup);
// <option>
nh_set_str_t option = nh_set_str_create();
nh_set_str_add(option, "select");
nh_set_str_add(option, "optgroup");
nh_set_str_add(option, "datalist");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "option", option);
// <param>
nh_set_str_t param = nh_set_str_create();
nh_set_str_add(param, "object");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "param", param);
// <rp>
nh_set_str_t rp = nh_set_str_create();
nh_set_str_add(rp, "ruby");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "rp", rp);
// <rt>
nh_set_str_t rt = nh_set_str_create();
nh_set_str_add(rt, "ruby");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "rt", rt);
// <rtc>
nh_set_str_t rtc = nh_set_str_create();
nh_set_str_add(rtc, "ruby");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "rtc", rtc);
// <summary>
nh_set_str_t summary = nh_set_str_create();
nh_set_str_add(summary, "details");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "summary", summary);
// <source>
nh_set_str_t source = nh_set_str_create();
hb_rule_mediatags_add_elems(source);
nh_set_str_add(source, "picture");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "source", source);
// <track>
nh_set_str_t track = nh_set_str_create();
hb_rule_mediatags_add_elems(track);
nh_map_str_strset_set(hb_rule_whitelistparents_map, "track", track);
// <tbody>
nh_set_str_t tbody = nh_set_str_create();
nh_set_str_add(tbody, "table");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "tbody", tbody);
// <td>
nh_set_str_t td = nh_set_str_create();
nh_set_str_add(td, "tr");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "td", td);
// <tfoot>
nh_set_str_t tfoot = nh_set_str_create();
nh_set_str_add(tfoot, "table");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "tfoot", tfoot);
// <th>
nh_set_str_t th = nh_set_str_create();
nh_set_str_add(th, "tr");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "th", th);
// <thead>
nh_set_str_t thead = nh_set_str_create();
nh_set_str_add(thead, "table");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "thead", thead);
// <tr>
nh_set_str_t tr = nh_set_str_create();
nh_set_str_add(tr, "table");
nh_set_str_add(tr, "thead");
nh_set_str_add(tr, "tbody");
nh_set_str_add(tr, "tfoot");
nh_map_str_strset_set(hb_rule_whitelistparents_map, "tr", tr);
// <template>
// Should be <body>, <frameset>, <head>, <dl>, <colgroup>, but ignoring
}
int hb_rule_whitelistparents_allowed(hb_proc_char_t *child, hb_proc_char_t *parent) {
nh_set_str_t set = nh_map_str_strset_get(hb_rule_whitelistparents_map, (char *) child, NULL);
return set == NULL || nh_set_str_has(set, (char *) parent);
}

View File

@ -1,26 +0,0 @@
static nh_set_str_t hb_rule_contentfirsttags_set;
void hb_rule_contentfirsttags_add_elems(nh_set_str_t set) {
nh_set_str_add(set, "dd");
nh_set_str_add(set, "details");
nh_set_str_add(set, "dt");
nh_set_str_add(set, "iframe");
nh_set_str_add(set, "label");
nh_set_str_add(set, "li");
nh_set_str_add(set, "noscript");
nh_set_str_add(set, "output");
nh_set_str_add(set, "progress");
nh_set_str_add(set, "slot");
nh_set_str_add(set, "td");
nh_set_str_add(set, "template");
nh_set_str_add(set, "th");
}
void hb_rule_contentfirsttags_init(void) {
hb_rule_contentfirsttags_set = nh_set_str_create();
hb_rule_contentfirsttags_add_elems(hb_rule_contentfirsttags_set);
}
int hb_rule_contentfirsttags_check(hb_proc_char_t *tag) {
return nh_set_str_has(hb_rule_contentfirsttags_set, (char *) tag);
}

View File

@ -1,33 +0,0 @@
static nh_set_str_t hb_rule_contenttags_set;
void hb_rule_contenttags_add_elems(nh_set_str_t set) {
nh_set_str_add(set, "address");
nh_set_str_add(set, "audio");
nh_set_str_add(set, "button");
nh_set_str_add(set, "canvas");
nh_set_str_add(set, "caption");
nh_set_str_add(set, "figcaption");
nh_set_str_add(set, "h1");
nh_set_str_add(set, "h2");
nh_set_str_add(set, "h3");
nh_set_str_add(set, "h4");
nh_set_str_add(set, "h5");
nh_set_str_add(set, "h6");
nh_set_str_add(set, "legend");
nh_set_str_add(set, "meter");
nh_set_str_add(set, "object");
nh_set_str_add(set, "option");
nh_set_str_add(set, "p");
nh_set_str_add(set, "summary"); // Can also contain a heading
nh_set_str_add(set, "textarea");
nh_set_str_add(set, "video");
}
void hb_rule_contenttags_init(void) {
hb_rule_contenttags_set = nh_set_str_create();
hb_rule_contenttags_add_elems(hb_rule_contenttags_set);
}
int hb_rule_contenttags_check(hb_proc_char_t *tag) {
return nh_set_str_has(hb_rule_contenttags_set, (char *) tag);
}

View File

@ -1,44 +0,0 @@
static nh_set_str_t hb_rule_formattingtags_set;
void hb_rule_formattingtags_add_elems(nh_set_str_t set) {
// Difference to MDN's inline text semantics list: -br, +del, +ins
nh_set_str_add(set, "a");
nh_set_str_add(set, "abbr");
nh_set_str_add(set, "b");
nh_set_str_add(set, "bdi");
nh_set_str_add(set, "bdo");
nh_set_str_add(set, "cite");
nh_set_str_add(set, "data");
nh_set_str_add(set, "del");
nh_set_str_add(set, "dfn");
nh_set_str_add(set, "em");
nh_set_str_add(set, "i");
nh_set_str_add(set, "ins");
nh_set_str_add(set, "kbd");
nh_set_str_add(set, "mark");
nh_set_str_add(set, "q");
nh_set_str_add(set, "rp");
nh_set_str_add(set, "rt");
nh_set_str_add(set, "rtc");
nh_set_str_add(set, "ruby");
nh_set_str_add(set, "s");
nh_set_str_add(set, "samp");
nh_set_str_add(set, "small");
nh_set_str_add(set, "span");
nh_set_str_add(set, "strong");
nh_set_str_add(set, "sub");
nh_set_str_add(set, "sup");
nh_set_str_add(set, "time");
nh_set_str_add(set, "u");
nh_set_str_add(set, "var");
nh_set_str_add(set, "wbr");
}
void hb_rule_formattingtags_init(void) {
hb_rule_formattingtags_set = nh_set_str_create();
hb_rule_formattingtags_add_elems(hb_rule_formattingtags_set);
}
int hb_rule_formattingtags_check(hb_proc_char_t *tag) {
return nh_set_str_has(hb_rule_formattingtags_set, (char *) tag);
}

View File

@ -1,20 +0,0 @@
static nh_set_str_t hb_rule_headingtags_set;
void hb_rule_headingtags_add_elems(nh_set_str_t set) {
nh_set_str_add(set, "hgroup");
nh_set_str_add(set, "h1");
nh_set_str_add(set, "h2");
nh_set_str_add(set, "h3");
nh_set_str_add(set, "h4");
nh_set_str_add(set, "h5");
nh_set_str_add(set, "h6");
}
void hb_rule_headingtags_init(void) {
hb_rule_headingtags_set = nh_set_str_create();
hb_rule_headingtags_add_elems(hb_rule_headingtags_set);
}
int hb_rule_headingtags_check(hb_proc_char_t *tag) {
return nh_set_str_has(hb_rule_headingtags_set, (char *) tag);
}

View File

@ -1,162 +0,0 @@
// Sourced from https://developer.mozilla.org/en-US/docs/Web/HTML/Element at 2018-07-01T05:55:00Z
static nh_set_str_t hb_rule_htmltags_set;
void hb_rule_htmltags_init(void) {
hb_rule_htmltags_set = nh_set_str_create();
nh_set_str_add(hb_rule_htmltags_set, "a");
nh_set_str_add(hb_rule_htmltags_set, "abbr");
nh_set_str_add(hb_rule_htmltags_set, "acronym");
nh_set_str_add(hb_rule_htmltags_set, "address");
nh_set_str_add(hb_rule_htmltags_set, "applet");
nh_set_str_add(hb_rule_htmltags_set, "applet");
nh_set_str_add(hb_rule_htmltags_set, "area");
nh_set_str_add(hb_rule_htmltags_set, "article");
nh_set_str_add(hb_rule_htmltags_set, "aside");
nh_set_str_add(hb_rule_htmltags_set, "audio");
nh_set_str_add(hb_rule_htmltags_set, "b");
nh_set_str_add(hb_rule_htmltags_set, "basefont");
nh_set_str_add(hb_rule_htmltags_set, "bdi");
nh_set_str_add(hb_rule_htmltags_set, "bdo");
nh_set_str_add(hb_rule_htmltags_set, "bgsound");
nh_set_str_add(hb_rule_htmltags_set, "big");
nh_set_str_add(hb_rule_htmltags_set, "blink");
nh_set_str_add(hb_rule_htmltags_set, "blockquote");
nh_set_str_add(hb_rule_htmltags_set, "body");
nh_set_str_add(hb_rule_htmltags_set, "br");
nh_set_str_add(hb_rule_htmltags_set, "button");
nh_set_str_add(hb_rule_htmltags_set, "canvas");
nh_set_str_add(hb_rule_htmltags_set, "caption");
nh_set_str_add(hb_rule_htmltags_set, "center");
nh_set_str_add(hb_rule_htmltags_set, "cite");
nh_set_str_add(hb_rule_htmltags_set, "code");
nh_set_str_add(hb_rule_htmltags_set, "col");
nh_set_str_add(hb_rule_htmltags_set, "colgroup");
nh_set_str_add(hb_rule_htmltags_set, "command");
nh_set_str_add(hb_rule_htmltags_set, "content");
nh_set_str_add(hb_rule_htmltags_set, "content");
nh_set_str_add(hb_rule_htmltags_set, "data");
nh_set_str_add(hb_rule_htmltags_set, "datalist");
nh_set_str_add(hb_rule_htmltags_set, "dd");
nh_set_str_add(hb_rule_htmltags_set, "del");
nh_set_str_add(hb_rule_htmltags_set, "details");
nh_set_str_add(hb_rule_htmltags_set, "dfn");
nh_set_str_add(hb_rule_htmltags_set, "dialog");
nh_set_str_add(hb_rule_htmltags_set, "dir");
nh_set_str_add(hb_rule_htmltags_set, "dir");
nh_set_str_add(hb_rule_htmltags_set, "div");
nh_set_str_add(hb_rule_htmltags_set, "dl");
nh_set_str_add(hb_rule_htmltags_set, "dt");
nh_set_str_add(hb_rule_htmltags_set, "element");
nh_set_str_add(hb_rule_htmltags_set, "element");
nh_set_str_add(hb_rule_htmltags_set, "em");
nh_set_str_add(hb_rule_htmltags_set, "embed");
nh_set_str_add(hb_rule_htmltags_set, "fieldset");
nh_set_str_add(hb_rule_htmltags_set, "figcaption");
nh_set_str_add(hb_rule_htmltags_set, "figure");
nh_set_str_add(hb_rule_htmltags_set, "font");
nh_set_str_add(hb_rule_htmltags_set, "footer");
nh_set_str_add(hb_rule_htmltags_set, "form");
nh_set_str_add(hb_rule_htmltags_set, "frame");
nh_set_str_add(hb_rule_htmltags_set, "frameset");
nh_set_str_add(hb_rule_htmltags_set, "h1");
nh_set_str_add(hb_rule_htmltags_set, "h2");
nh_set_str_add(hb_rule_htmltags_set, "h3");
nh_set_str_add(hb_rule_htmltags_set, "h4");
nh_set_str_add(hb_rule_htmltags_set, "h5");
nh_set_str_add(hb_rule_htmltags_set, "h6");
nh_set_str_add(hb_rule_htmltags_set, "head");
nh_set_str_add(hb_rule_htmltags_set, "header");
nh_set_str_add(hb_rule_htmltags_set, "hgroup");
nh_set_str_add(hb_rule_htmltags_set, "hr");
nh_set_str_add(hb_rule_htmltags_set, "html");
nh_set_str_add(hb_rule_htmltags_set, "i");
nh_set_str_add(hb_rule_htmltags_set, "iframe");
nh_set_str_add(hb_rule_htmltags_set, "image");
nh_set_str_add(hb_rule_htmltags_set, "img");
nh_set_str_add(hb_rule_htmltags_set, "input");
nh_set_str_add(hb_rule_htmltags_set, "ins");
nh_set_str_add(hb_rule_htmltags_set, "isindex");
nh_set_str_add(hb_rule_htmltags_set, "kbd");
nh_set_str_add(hb_rule_htmltags_set, "keygen");
nh_set_str_add(hb_rule_htmltags_set, "label");
nh_set_str_add(hb_rule_htmltags_set, "legend");
nh_set_str_add(hb_rule_htmltags_set, "li");
nh_set_str_add(hb_rule_htmltags_set, "link");
nh_set_str_add(hb_rule_htmltags_set, "listing");
nh_set_str_add(hb_rule_htmltags_set, "main");
nh_set_str_add(hb_rule_htmltags_set, "map");
nh_set_str_add(hb_rule_htmltags_set, "mark");
nh_set_str_add(hb_rule_htmltags_set, "marquee");
nh_set_str_add(hb_rule_htmltags_set, "menu");
nh_set_str_add(hb_rule_htmltags_set, "menuitem");
nh_set_str_add(hb_rule_htmltags_set, "menuitem");
nh_set_str_add(hb_rule_htmltags_set, "meta");
nh_set_str_add(hb_rule_htmltags_set, "meter");
nh_set_str_add(hb_rule_htmltags_set, "multicol");
nh_set_str_add(hb_rule_htmltags_set, "nav");
nh_set_str_add(hb_rule_htmltags_set, "nextid");
nh_set_str_add(hb_rule_htmltags_set, "nobr");
nh_set_str_add(hb_rule_htmltags_set, "noembed");
nh_set_str_add(hb_rule_htmltags_set, "noembed");
nh_set_str_add(hb_rule_htmltags_set, "noframes");
nh_set_str_add(hb_rule_htmltags_set, "noscript");
nh_set_str_add(hb_rule_htmltags_set, "object");
nh_set_str_add(hb_rule_htmltags_set, "ol");
nh_set_str_add(hb_rule_htmltags_set, "optgroup");
nh_set_str_add(hb_rule_htmltags_set, "option");
nh_set_str_add(hb_rule_htmltags_set, "output");
nh_set_str_add(hb_rule_htmltags_set, "p");
nh_set_str_add(hb_rule_htmltags_set, "param");
nh_set_str_add(hb_rule_htmltags_set, "picture");
nh_set_str_add(hb_rule_htmltags_set, "plaintext");
nh_set_str_add(hb_rule_htmltags_set, "pre");
nh_set_str_add(hb_rule_htmltags_set, "progress");
nh_set_str_add(hb_rule_htmltags_set, "q");
nh_set_str_add(hb_rule_htmltags_set, "rp");
nh_set_str_add(hb_rule_htmltags_set, "rt");
nh_set_str_add(hb_rule_htmltags_set, "rtc");
nh_set_str_add(hb_rule_htmltags_set, "ruby");
nh_set_str_add(hb_rule_htmltags_set, "s");
nh_set_str_add(hb_rule_htmltags_set, "samp");
nh_set_str_add(hb_rule_htmltags_set, "script");
nh_set_str_add(hb_rule_htmltags_set, "section");
nh_set_str_add(hb_rule_htmltags_set, "select");
nh_set_str_add(hb_rule_htmltags_set, "shadow");
nh_set_str_add(hb_rule_htmltags_set, "shadow");
nh_set_str_add(hb_rule_htmltags_set, "slot");
nh_set_str_add(hb_rule_htmltags_set, "small");
nh_set_str_add(hb_rule_htmltags_set, "source");
nh_set_str_add(hb_rule_htmltags_set, "spacer");
nh_set_str_add(hb_rule_htmltags_set, "span");
nh_set_str_add(hb_rule_htmltags_set, "strike");
nh_set_str_add(hb_rule_htmltags_set, "strong");
nh_set_str_add(hb_rule_htmltags_set, "style");
nh_set_str_add(hb_rule_htmltags_set, "sub");
nh_set_str_add(hb_rule_htmltags_set, "summary");
nh_set_str_add(hb_rule_htmltags_set, "sup");
nh_set_str_add(hb_rule_htmltags_set, "table");
nh_set_str_add(hb_rule_htmltags_set, "tbody");
nh_set_str_add(hb_rule_htmltags_set, "td");
nh_set_str_add(hb_rule_htmltags_set, "template");
nh_set_str_add(hb_rule_htmltags_set, "textarea");
nh_set_str_add(hb_rule_htmltags_set, "tfoot");
nh_set_str_add(hb_rule_htmltags_set, "th");
nh_set_str_add(hb_rule_htmltags_set, "thead");
nh_set_str_add(hb_rule_htmltags_set, "time");
nh_set_str_add(hb_rule_htmltags_set, "title");
nh_set_str_add(hb_rule_htmltags_set, "tr");
nh_set_str_add(hb_rule_htmltags_set, "track");
nh_set_str_add(hb_rule_htmltags_set, "tt");
nh_set_str_add(hb_rule_htmltags_set, "tt");
nh_set_str_add(hb_rule_htmltags_set, "u");
nh_set_str_add(hb_rule_htmltags_set, "ul");
nh_set_str_add(hb_rule_htmltags_set, "var");
nh_set_str_add(hb_rule_htmltags_set, "video");
nh_set_str_add(hb_rule_htmltags_set, "wbr");
nh_set_str_add(hb_rule_htmltags_set, "xmp");
}
int hb_rule_htmltags_check(hb_proc_char_t *tag) {
return nh_set_str_has(hb_rule_htmltags_set, (char *) tag);
}

View File

@ -1,46 +0,0 @@
#include "./sectioningtags.c"
static nh_set_str_t hb_rule_layouttags_set;
void hb_rule_layouttags_add_elems(nh_set_str_t set) {
hb_rule_sectioningtags_add_elems(set);
nh_set_str_add(set, "blockquote");
nh_set_str_add(set, "body");
nh_set_str_add(set, "colgroup");
nh_set_str_add(set, "datalist");
nh_set_str_add(set, "dialog");
nh_set_str_add(set, "div");
nh_set_str_add(set, "dl");
nh_set_str_add(set, "fieldset");
nh_set_str_add(set, "figure");
nh_set_str_add(set, "footer");
nh_set_str_add(set, "form");
nh_set_str_add(set, "head");
nh_set_str_add(set, "header");
nh_set_str_add(set, "hgroup");
nh_set_str_add(set, "html");
nh_set_str_add(set, "main");
nh_set_str_add(set, "map");
nh_set_str_add(set, "menu");
nh_set_str_add(set, "nav");
nh_set_str_add(set, "ol");
nh_set_str_add(set, "optgroup");
nh_set_str_add(set, "picture");
nh_set_str_add(set, "section");
nh_set_str_add(set, "select");
nh_set_str_add(set, "table");
nh_set_str_add(set, "tbody");
nh_set_str_add(set, "tfoot");
nh_set_str_add(set, "thead");
nh_set_str_add(set, "tr");
nh_set_str_add(set, "ul");
}
void hb_rule_layouttags_init(void) {
hb_rule_layouttags_set = nh_set_str_create();
hb_rule_layouttags_add_elems(hb_rule_layouttags_set);
}
int hb_rule_layouttags_check(hb_proc_char_t *tag) {
return nh_set_str_has(hb_rule_layouttags_set, (char *) tag);
}

View File

@ -1,15 +0,0 @@
static nh_set_str_t hb_rule_mediatags_set;
void hb_rule_mediatags_add_elems(nh_set_str_t set) {
nh_set_str_add(set, "audio");
nh_set_str_add(set, "video");
}
void hb_rule_mediatags_init(void) {
hb_rule_mediatags_set = nh_set_str_create();
hb_rule_mediatags_add_elems(hb_rule_mediatags_set);
}
int hb_rule_mediatags_check(hb_proc_char_t *tag) {
return nh_set_str_has(hb_rule_mediatags_set, (char *) tag);
}

View File

@ -1,17 +0,0 @@
static nh_set_str_t hb_rule_sectioningtags_set;
void hb_rule_sectioningtags_add_elems(nh_set_str_t set) {
nh_set_str_add(set, "article");
nh_set_str_add(set, "aside");
nh_set_str_add(set, "nav");
nh_set_str_add(set, "section");
}
void hb_rule_sectioningtags_init(void) {
hb_rule_sectioningtags_set = nh_set_str_create();
hb_rule_sectioningtags_add_elems(hb_rule_sectioningtags_set);
}
int hb_rule_sectioningtags_check(hb_proc_char_t *tag) {
return nh_set_str_has(hb_rule_sectioningtags_set, (char *) tag);
}

View File

@ -1,31 +0,0 @@
#include "./sectioningtags.c"
#include "./svgtags.c"
static nh_set_str_t hb_rule_specifictags_set;
void hb_rule_specifictags_add_elems(nh_set_str_t set) {
hb_rule_svgtags_add_elems(set);
nh_set_str_add(set, "area");
nh_set_str_add(set, "base");
nh_set_str_add(set, "br");
nh_set_str_add(set, "code"); // Reason: unlikely to want to minify
nh_set_str_add(set, "col");
nh_set_str_add(set, "embed");
nh_set_str_add(set, "hr");
nh_set_str_add(set, "img");
nh_set_str_add(set, "input");
nh_set_str_add(set, "param");
nh_set_str_add(set, "pre"); // Reason: unlikely to want to minify
nh_set_str_add(set, "script");
nh_set_str_add(set, "source");
nh_set_str_add(set, "track");
}
void hb_rule_specifictags_init(void) {
hb_rule_specifictags_set = nh_set_str_create();
hb_rule_specifictags_add_elems(hb_rule_specifictags_set);
}
int hb_rule_specifictags_check(hb_proc_char_t *tag) {
return nh_set_str_has(hb_rule_specifictags_set, (char *) tag);
}

View File

@ -1,105 +0,0 @@
// Sourced from https://developer.mozilla.org/en-US/docs/Web/SVG/Element at 2018-08-04T03:50:00Z
static nh_set_str_t hb_rule_svgtags_set;
void hb_rule_svgtags_add_elems(nh_set_str_t set) {
nh_set_str_add(set, "a");
nh_set_str_add(set, "altGlyph");
nh_set_str_add(set, "altGlyphDef");
nh_set_str_add(set, "altGlyphItem");
nh_set_str_add(set, "animate");
nh_set_str_add(set, "animateColor");
nh_set_str_add(set, "animateMotion");
nh_set_str_add(set, "animateTransform");
nh_set_str_add(set, "circle");
nh_set_str_add(set, "clipPath");
nh_set_str_add(set, "color-profile");
nh_set_str_add(set, "cursor");
nh_set_str_add(set, "defs");
nh_set_str_add(set, "desc");
nh_set_str_add(set, "discard");
nh_set_str_add(set, "ellipse");
nh_set_str_add(set, "feBlend");
nh_set_str_add(set, "feColorMatrix");
nh_set_str_add(set, "feComponentTransfer");
nh_set_str_add(set, "feComposite");
nh_set_str_add(set, "feConvolveMatrix");
nh_set_str_add(set, "feDiffuseLighting");
nh_set_str_add(set, "feDisplacementMap");
nh_set_str_add(set, "feDistantLight");
nh_set_str_add(set, "feDropShadow");
nh_set_str_add(set, "feFlood");
nh_set_str_add(set, "feFuncA");
nh_set_str_add(set, "feFuncB");
nh_set_str_add(set, "feFuncG");
nh_set_str_add(set, "feFuncR");
nh_set_str_add(set, "feGaussianBlur");
nh_set_str_add(set, "feImage");
nh_set_str_add(set, "feMerge");
nh_set_str_add(set, "feMergeNode");
nh_set_str_add(set, "feMorphology");
nh_set_str_add(set, "feOffset");
nh_set_str_add(set, "fePointLight");
nh_set_str_add(set, "feSpecularLighting");
nh_set_str_add(set, "feSpotLight");
nh_set_str_add(set, "feTile");
nh_set_str_add(set, "feTurbulence");
nh_set_str_add(set, "filter");
nh_set_str_add(set, "font-face-format");
nh_set_str_add(set, "font-face-name");
nh_set_str_add(set, "font-face-src");
nh_set_str_add(set, "font-face-uri");
nh_set_str_add(set, "font-face");
nh_set_str_add(set, "font");
nh_set_str_add(set, "foreignObject");
nh_set_str_add(set, "g");
nh_set_str_add(set, "glyph");
nh_set_str_add(set, "glyphRef");
nh_set_str_add(set, "hatch");
nh_set_str_add(set, "hatchpath");
nh_set_str_add(set, "hkern");
nh_set_str_add(set, "image");
nh_set_str_add(set, "line");
nh_set_str_add(set, "linearGradient");
nh_set_str_add(set, "marker");
nh_set_str_add(set, "mask");
nh_set_str_add(set, "mesh");
nh_set_str_add(set, "meshgradient");
nh_set_str_add(set, "meshpatch");
nh_set_str_add(set, "meshrow");
nh_set_str_add(set, "metadata");
nh_set_str_add(set, "missing-glyph");
nh_set_str_add(set, "mpath");
nh_set_str_add(set, "path");
nh_set_str_add(set, "pattern");
nh_set_str_add(set, "polygon");
nh_set_str_add(set, "polyline");
nh_set_str_add(set, "radialGradient");
nh_set_str_add(set, "rect");
nh_set_str_add(set, "script");
nh_set_str_add(set, "set");
nh_set_str_add(set, "solidcolor");
nh_set_str_add(set, "stop");
nh_set_str_add(set, "style");
nh_set_str_add(set, "svg");
nh_set_str_add(set, "switch");
nh_set_str_add(set, "symbol");
nh_set_str_add(set, "text");
nh_set_str_add(set, "textPath");
nh_set_str_add(set, "title");
nh_set_str_add(set, "tref");
nh_set_str_add(set, "tspan");
nh_set_str_add(set, "unknown");
nh_set_str_add(set, "use");
nh_set_str_add(set, "view");
nh_set_str_add(set, "vkern");
}
void hb_rule_svgtags_init(void) {
hb_rule_svgtags_set = nh_set_str_create();
hb_rule_svgtags_add_elems(hb_rule_svgtags_set);
}
int hb_rule_svgtags_check(hb_proc_char_t *tag) {
return nh_set_str_has(hb_rule_svgtags_set, (char *) tag);
}

View File

@ -1,10 +0,0 @@
#include "./htmltags.c"
#include "./svgtags.c"
void hb_rule_tags_init(void) {
}
int hb_rule_tags_check(hb_proc_char_t *tag) {
return hb_rule_htmltags_check(tag) ||
hb_rule_svgtags_check(tag);
}

View File

@ -1,28 +0,0 @@
static nh_set_str_t hb_rule_voidtags_set;
void hb_rule_voidtags_add_elems(nh_set_str_t set) {
nh_set_str_add(set, "area");
nh_set_str_add(set, "base");
nh_set_str_add(set, "br");
nh_set_str_add(set, "col");
nh_set_str_add(set, "embed");
nh_set_str_add(set, "hr");
nh_set_str_add(set, "img");
nh_set_str_add(set, "input");
nh_set_str_add(set, "keygen");
nh_set_str_add(set, "link");
nh_set_str_add(set, "meta");
nh_set_str_add(set, "param");
nh_set_str_add(set, "source");
nh_set_str_add(set, "track");
nh_set_str_add(set, "wbr");
}
void hb_rule_voidtags_init(void) {
hb_rule_voidtags_set = nh_set_str_create();
hb_rule_voidtags_add_elems(hb_rule_voidtags_set);
}
int hb_rule_voidtags_check(hb_proc_char_t *tag) {
return nh_set_str_has(hb_rule_voidtags_set, (char *) tag);
}

View File

@ -1,15 +0,0 @@
static nh_set_str_t hb_rule_wsstags_set;
void hb_rule_wsstags_add_elems(nh_set_str_t set) {
nh_set_str_add(set, "code");
nh_set_str_add(set, "pre");
}
void hb_rule_wsstags_init(void) {
hb_rule_wsstags_set = nh_set_str_create();
hb_rule_wsstags_add_elems(hb_rule_wsstags_set);
}
int hb_rule_wsstags_check(hb_proc_char_t *tag) {
return nh_set_str_has(hb_rule_wsstags_set, (char *) tag);
}