Start migration to Rust
This commit is contained in:
parent
55fd264215
commit
1fb675ef91
|
@ -0,0 +1,8 @@
|
|||
[package]
|
||||
name = "hyperbuild"
|
||||
version = "0.0.1"
|
||||
authors = ["Wilson Lin <code@wilsonl.in>"]
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
phf = "0.8.0"
|
|
@ -1,23 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static nh_bitfield_ascii* hb_rule_ascii_control_set;
|
||||
|
||||
void hb_rule_ascii_control_add_elems(nh_bitfield_ascii* set)
|
||||
{
|
||||
for (char c = 0x0; c <= 0x1F; c++) {
|
||||
nh_bitfield_ascii_add(set, c);
|
||||
}
|
||||
}
|
||||
|
||||
void hb_rule_ascii_control_init(void)
|
||||
{
|
||||
hb_rule_ascii_control_set = nh_bitfield_ascii_create();
|
||||
hb_rule_ascii_control_add_elems(hb_rule_ascii_control_set);
|
||||
}
|
||||
|
||||
bool hb_rule_ascii_control_check(hb_rune c)
|
||||
{
|
||||
return nh_bitfield_ascii_has(hb_rule_ascii_control_set, c);
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static nh_bitfield_ascii* hb_rule_ascii_digit_set;
|
||||
|
||||
void hb_rule_ascii_digit_add_elems(nh_bitfield_ascii* set)
|
||||
{
|
||||
for (char c = '0'; c <= '9'; c++) {
|
||||
nh_bitfield_ascii_add(set, c);
|
||||
}
|
||||
}
|
||||
|
||||
void hb_rule_ascii_digit_init(void)
|
||||
{
|
||||
hb_rule_ascii_digit_set = nh_bitfield_ascii_create();
|
||||
hb_rule_ascii_digit_add_elems(hb_rule_ascii_digit_set);
|
||||
}
|
||||
|
||||
bool hb_rule_ascii_digit_check(hb_rune c)
|
||||
{
|
||||
return nh_bitfield_ascii_has(hb_rule_ascii_digit_set, c);
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static nh_bitfield_ascii* hb_rule_ascii_hex_set;
|
||||
|
||||
void hb_rule_ascii_hex_add_elems(nh_bitfield_ascii* set)
|
||||
{
|
||||
for (char c = '0'; c <= '9'; c++) {
|
||||
nh_bitfield_ascii_add(set, c);
|
||||
}
|
||||
for (char c = 'A'; c <= 'F'; c++) {
|
||||
nh_bitfield_ascii_add(set, c);
|
||||
}
|
||||
for (char c = 'a'; c <= 'f'; c++) {
|
||||
nh_bitfield_ascii_add(set, c);
|
||||
}
|
||||
}
|
||||
|
||||
void hb_rule_ascii_hex_init(void)
|
||||
{
|
||||
hb_rule_ascii_hex_set = nh_bitfield_ascii_create();
|
||||
hb_rule_ascii_hex_add_elems(hb_rule_ascii_hex_set);
|
||||
}
|
||||
|
||||
bool hb_rule_ascii_hex_check(hb_rune c)
|
||||
{
|
||||
return nh_bitfield_ascii_has(hb_rule_ascii_hex_set, c);
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static nh_bitfield_ascii* hb_rule_ascii_lowercase_set;
|
||||
|
||||
void hb_rule_ascii_lowercase_add_elems(nh_bitfield_ascii* set)
|
||||
{
|
||||
for (char c = 'a'; c <= 'z'; c++) {
|
||||
nh_bitfield_ascii_add(set, c);
|
||||
}
|
||||
}
|
||||
|
||||
void hb_rule_ascii_lowercase_init(void)
|
||||
{
|
||||
hb_rule_ascii_lowercase_set = nh_bitfield_ascii_create();
|
||||
hb_rule_ascii_lowercase_add_elems(hb_rule_ascii_lowercase_set);
|
||||
}
|
||||
|
||||
bool hb_rule_ascii_lowercase_check(hb_rune c)
|
||||
{
|
||||
return nh_bitfield_ascii_has(hb_rule_ascii_lowercase_set, c);
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static nh_bitfield_ascii* hb_rule_ascii_uppercase_set;
|
||||
|
||||
void hb_rule_ascii_uppercase_add_elems(nh_bitfield_ascii* set)
|
||||
{
|
||||
for (char c = 'A'; c <= 'Z'; c++) {
|
||||
nh_bitfield_ascii_add(set, c);
|
||||
}
|
||||
}
|
||||
|
||||
void hb_rule_ascii_uppercase_init(void)
|
||||
{
|
||||
hb_rule_ascii_uppercase_set = nh_bitfield_ascii_create();
|
||||
hb_rule_ascii_uppercase_add_elems(hb_rule_ascii_uppercase_set);
|
||||
}
|
||||
|
||||
bool hb_rule_ascii_uppercase_check(hb_rune c)
|
||||
{
|
||||
return nh_bitfield_ascii_has(hb_rule_ascii_uppercase_set, c);
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static nh_bitfield_ascii* hb_rule_ascii_whitespace_set;
|
||||
|
||||
void hb_rule_ascii_whitespace_add_elems(nh_bitfield_ascii* set)
|
||||
{
|
||||
nh_bitfield_ascii_add(set, '\t'); // TAB
|
||||
nh_bitfield_ascii_add(set, '\n'); // LF
|
||||
nh_bitfield_ascii_add(set, '\f'); // FF
|
||||
nh_bitfield_ascii_add(set, '\r'); // CR
|
||||
nh_bitfield_ascii_add(set, ' '); // SPACE
|
||||
}
|
||||
|
||||
void hb_rule_ascii_whitespace_init(void)
|
||||
{
|
||||
hb_rule_ascii_whitespace_set = nh_bitfield_ascii_create();
|
||||
hb_rule_ascii_whitespace_add_elems(hb_rule_ascii_whitespace_set);
|
||||
}
|
||||
|
||||
bool hb_rule_ascii_whitespace_check(hb_rune c)
|
||||
{
|
||||
return nh_bitfield_ascii_has(hb_rule_ascii_whitespace_set, c);
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static nh_bitfield_ascii* hb_rule_attr_name_exceptions;
|
||||
|
||||
void hb_rule_attr_name_add_exceptions(nh_bitfield_ascii* set)
|
||||
{
|
||||
hb_rule_ascii_control_add_elems(set);
|
||||
nh_bitfield_ascii_add(set, ' ');
|
||||
nh_bitfield_ascii_add(set, '"');
|
||||
nh_bitfield_ascii_add(set, '\'');
|
||||
nh_bitfield_ascii_add(set, '>');
|
||||
nh_bitfield_ascii_add(set, '/');
|
||||
nh_bitfield_ascii_add(set, '=');
|
||||
// NOTE: Unicode noncharacters not tested
|
||||
// (https://html.spec.whatwg.org/multipage/syntax.html#syntax-attribute-name)
|
||||
}
|
||||
|
||||
void hb_rule_attr_name_init(void)
|
||||
{
|
||||
hb_rule_attr_name_exceptions = nh_bitfield_ascii_create();
|
||||
hb_rule_attr_name_add_exceptions(hb_rule_attr_name_exceptions);
|
||||
}
|
||||
|
||||
bool hb_rule_attr_name_check(hb_rune c)
|
||||
{
|
||||
return !nh_bitfield_ascii_has(hb_rule_attr_name_exceptions, c);
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
// Does not include control characters, which are also not allowed.
|
||||
static ATTR_NAME_NON_CONTROL_DISALLOWED: Set<char> = phf_set! {
|
||||
' ',
|
||||
'"',
|
||||
'\'',
|
||||
'>',
|
||||
'/',
|
||||
'=',
|
||||
// NOTE: Unicode noncharacters not tested.
|
||||
// (https://html.spec.whatwg.org/multipage/syntax.html#syntax-attribute-name)
|
||||
};
|
||||
|
||||
fn is_valid_attr_name_char(c: char) -> bool {
|
||||
not (ATTR_NAME_NON_CONTROL_DISALLOWED.has(c) || c.is_ascii_control())
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static nh_bitfield_ascii* hb_rule_attr_quote_set;
|
||||
|
||||
void hb_rule_attr_quote_add_elems(nh_bitfield_ascii* set)
|
||||
{
|
||||
// Backtick is not a valid quote character according to
|
||||
// https://html.spec.whatwg.org/multipage/introduction.html#intro-early-example
|
||||
nh_bitfield_ascii_add(set, '\'');
|
||||
nh_bitfield_ascii_add(set, '"');
|
||||
}
|
||||
|
||||
void hb_rule_attr_quote_init(void)
|
||||
{
|
||||
hb_rule_attr_quote_set = nh_bitfield_ascii_create();
|
||||
hb_rule_attr_quote_add_elems(hb_rule_attr_quote_set);
|
||||
}
|
||||
|
||||
bool hb_rule_attr_quote_check(hb_rune c)
|
||||
{
|
||||
return nh_bitfield_ascii_has(hb_rule_attr_quote_set, c);
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
static ATTR_QUOTE: Set<char> = phf_set! {
|
||||
// Backtick is not a valid quote character according to
|
||||
// https://html.spec.whatwg.org/multipage/introduction.html#intro-early-example
|
||||
'\'',
|
||||
'"',
|
||||
};
|
|
@ -1,28 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static nh_bitfield_ascii* hb_rule_attr_unquotedvalue_exceptions;
|
||||
|
||||
void hb_rule_attr_unquotedvalue_add_exceptions(nh_bitfield_ascii* set)
|
||||
{
|
||||
hb_rule_ascii_whitespace_add_elems(set);
|
||||
nh_bitfield_ascii_add(set, '"');
|
||||
nh_bitfield_ascii_add(set, '\'');
|
||||
nh_bitfield_ascii_add(set, '`');
|
||||
nh_bitfield_ascii_add(set, '=');
|
||||
nh_bitfield_ascii_add(set, '<');
|
||||
nh_bitfield_ascii_add(set, '>');
|
||||
}
|
||||
|
||||
void hb_rule_attr_unquotedvalue_init(void)
|
||||
{
|
||||
hb_rule_attr_unquotedvalue_exceptions = nh_bitfield_ascii_create();
|
||||
hb_rule_attr_unquotedvalue_add_exceptions(
|
||||
hb_rule_attr_unquotedvalue_exceptions);
|
||||
}
|
||||
|
||||
bool hb_rule_attr_unquotedvalue_check(hb_rune c)
|
||||
{
|
||||
return !nh_bitfield_ascii_has(hb_rule_attr_unquotedvalue_exceptions, c);
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
// Does not include whitespace, which is also disallowed.
|
||||
static ATTR_VAL_UNQUOTED_NON_WHITESPACE_DISALLOWED: Set<char> = phf_set! {
|
||||
'"',
|
||||
'\'',
|
||||
'`',
|
||||
'=',
|
||||
'<',
|
||||
'>',
|
||||
};
|
||||
|
||||
fn is_valid_attr_value_unquoted_char(c: char) -> bool {
|
||||
not(ATTR_VAL_UNQUOTED_NON_WHITESPACE_DISALLOWED.has(c) || c.is_ascii_whitespace())
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,45 +0,0 @@
|
|||
#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();
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static hb_set_tag_names* hb_rule_tag_content_set;
|
||||
|
||||
void hb_rule_tag_content_add_elems(hb_set_tag_names* set)
|
||||
{
|
||||
hb_set_tag_names_add_whole_literal(set, "address");
|
||||
hb_set_tag_names_add_whole_literal(set, "audio");
|
||||
hb_set_tag_names_add_whole_literal(set, "button");
|
||||
hb_set_tag_names_add_whole_literal(set, "canvas");
|
||||
hb_set_tag_names_add_whole_literal(set, "caption");
|
||||
hb_set_tag_names_add_whole_literal(set, "figcaption");
|
||||
hb_set_tag_names_add_whole_literal(set, "h1");
|
||||
hb_set_tag_names_add_whole_literal(set, "h2");
|
||||
hb_set_tag_names_add_whole_literal(set, "h3");
|
||||
hb_set_tag_names_add_whole_literal(set, "h4");
|
||||
hb_set_tag_names_add_whole_literal(set, "h5");
|
||||
hb_set_tag_names_add_whole_literal(set, "h6");
|
||||
hb_set_tag_names_add_whole_literal(set, "legend");
|
||||
hb_set_tag_names_add_whole_literal(set, "meter");
|
||||
hb_set_tag_names_add_whole_literal(set, "object");
|
||||
hb_set_tag_names_add_whole_literal(set, "option");
|
||||
hb_set_tag_names_add_whole_literal(set, "p");
|
||||
hb_set_tag_names_add_whole_literal(
|
||||
set, "summary"); // Can also contain a heading
|
||||
hb_set_tag_names_add_whole_literal(set, "textarea");
|
||||
hb_set_tag_names_add_whole_literal(set, "video");
|
||||
}
|
||||
|
||||
void hb_rule_tag_content_init(void)
|
||||
{
|
||||
hb_rule_tag_content_set = hb_set_tag_names_create();
|
||||
hb_rule_tag_content_add_elems(hb_rule_tag_content_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_content_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_set_tag_names_has(hb_rule_tag_content_set, tag);
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
static CONTENT_TAGS: Set<&'static str> = phf_set! {
|
||||
"address",
|
||||
"audio",
|
||||
"button",
|
||||
"canvas",
|
||||
"caption",
|
||||
"figcaption",
|
||||
"h1",
|
||||
"h2",
|
||||
"h3",
|
||||
"h4",
|
||||
"h5",
|
||||
"h6",
|
||||
"legend",
|
||||
"meter",
|
||||
"object",
|
||||
"option",
|
||||
"p",
|
||||
"summary", // Can also contain a heading.
|
||||
"textarea",
|
||||
"video",
|
||||
};
|
|
@ -1,33 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static hb_set_tag_names* hb_rule_tag_contentfirst_set;
|
||||
|
||||
void hb_rule_tag_contentfirst_add_elems(hb_set_tag_names* set)
|
||||
{
|
||||
hb_set_tag_names_add_whole_literal(set, "dd");
|
||||
hb_set_tag_names_add_whole_literal(set, "details");
|
||||
hb_set_tag_names_add_whole_literal(set, "dt");
|
||||
hb_set_tag_names_add_whole_literal(set, "iframe");
|
||||
hb_set_tag_names_add_whole_literal(set, "label");
|
||||
hb_set_tag_names_add_whole_literal(set, "li");
|
||||
hb_set_tag_names_add_whole_literal(set, "noscript");
|
||||
hb_set_tag_names_add_whole_literal(set, "output");
|
||||
hb_set_tag_names_add_whole_literal(set, "progress");
|
||||
hb_set_tag_names_add_whole_literal(set, "slot");
|
||||
hb_set_tag_names_add_whole_literal(set, "td");
|
||||
hb_set_tag_names_add_whole_literal(set, "template");
|
||||
hb_set_tag_names_add_whole_literal(set, "th");
|
||||
}
|
||||
|
||||
void hb_rule_tag_contentfirst_init(void)
|
||||
{
|
||||
hb_rule_tag_contentfirst_set = hb_set_tag_names_create();
|
||||
hb_rule_tag_contentfirst_add_elems(hb_rule_tag_contentfirst_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_contentfirst_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_set_tag_names_has(hb_rule_tag_contentfirst_set, tag);
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
static CONTENT_FIRST_TAGS: Set<&'static str> = phf_set! {
|
||||
"dd",
|
||||
"details",
|
||||
"dt",
|
||||
"iframe",
|
||||
"label",
|
||||
"li",
|
||||
"noscript",
|
||||
"output",
|
||||
"progress",
|
||||
"slot",
|
||||
"td",
|
||||
"template",
|
||||
"th",
|
||||
};
|
|
@ -1,51 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static hb_set_tag_names* hb_rule_tag_formatting_set;
|
||||
|
||||
void hb_rule_tag_formatting_add_elems(hb_set_tag_names* set)
|
||||
{
|
||||
// Difference to MDN's inline text semantics list: -br, +del, +ins
|
||||
hb_set_tag_names_add_whole_literal(set, "a");
|
||||
hb_set_tag_names_add_whole_literal(set, "abbr");
|
||||
hb_set_tag_names_add_whole_literal(set, "b");
|
||||
hb_set_tag_names_add_whole_literal(set, "bdi");
|
||||
hb_set_tag_names_add_whole_literal(set, "bdo");
|
||||
hb_set_tag_names_add_whole_literal(set, "cite");
|
||||
hb_set_tag_names_add_whole_literal(set, "data");
|
||||
hb_set_tag_names_add_whole_literal(set, "del");
|
||||
hb_set_tag_names_add_whole_literal(set, "dfn");
|
||||
hb_set_tag_names_add_whole_literal(set, "em");
|
||||
hb_set_tag_names_add_whole_literal(set, "i");
|
||||
hb_set_tag_names_add_whole_literal(set, "ins");
|
||||
hb_set_tag_names_add_whole_literal(set, "kbd");
|
||||
hb_set_tag_names_add_whole_literal(set, "mark");
|
||||
hb_set_tag_names_add_whole_literal(set, "q");
|
||||
hb_set_tag_names_add_whole_literal(set, "rp");
|
||||
hb_set_tag_names_add_whole_literal(set, "rt");
|
||||
hb_set_tag_names_add_whole_literal(set, "rtc");
|
||||
hb_set_tag_names_add_whole_literal(set, "ruby");
|
||||
hb_set_tag_names_add_whole_literal(set, "s");
|
||||
hb_set_tag_names_add_whole_literal(set, "samp");
|
||||
hb_set_tag_names_add_whole_literal(set, "small");
|
||||
hb_set_tag_names_add_whole_literal(set, "span");
|
||||
hb_set_tag_names_add_whole_literal(set, "strong");
|
||||
hb_set_tag_names_add_whole_literal(set, "sub");
|
||||
hb_set_tag_names_add_whole_literal(set, "sup");
|
||||
hb_set_tag_names_add_whole_literal(set, "time");
|
||||
hb_set_tag_names_add_whole_literal(set, "u");
|
||||
hb_set_tag_names_add_whole_literal(set, "var");
|
||||
hb_set_tag_names_add_whole_literal(set, "wbr");
|
||||
}
|
||||
|
||||
void hb_rule_tag_formatting_init(void)
|
||||
{
|
||||
hb_rule_tag_formatting_set = hb_set_tag_names_create();
|
||||
hb_rule_tag_formatting_add_elems(hb_rule_tag_formatting_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_formatting_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_set_tag_names_has(hb_rule_tag_formatting_set, tag);
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
// Difference to MDN's inline text semantics list: -br, +del, +ins
|
||||
static FORMATTING_TAGS: Set<&'static str> = phf_set! {
|
||||
"a",
|
||||
"abbr",
|
||||
"b",
|
||||
"bdi",
|
||||
"bdo",
|
||||
"cite",
|
||||
"data",
|
||||
"del",
|
||||
"dfn",
|
||||
"em",
|
||||
"i",
|
||||
"ins",
|
||||
"kbd",
|
||||
"mark",
|
||||
"q",
|
||||
"rp",
|
||||
"rt",
|
||||
"rtc",
|
||||
"ruby",
|
||||
"s",
|
||||
"samp",
|
||||
"small",
|
||||
"span",
|
||||
"strong",
|
||||
"sub",
|
||||
"sup",
|
||||
"time",
|
||||
"u",
|
||||
"var",
|
||||
"wbr",
|
||||
};
|
|
@ -1,27 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static hb_set_tag_names* hb_rule_tag_heading_set;
|
||||
|
||||
void hb_rule_tag_heading_add_elems(hb_set_tag_names* set)
|
||||
{
|
||||
hb_set_tag_names_add_whole_literal(set, "hgroup");
|
||||
hb_set_tag_names_add_whole_literal(set, "h1");
|
||||
hb_set_tag_names_add_whole_literal(set, "h2");
|
||||
hb_set_tag_names_add_whole_literal(set, "h3");
|
||||
hb_set_tag_names_add_whole_literal(set, "h4");
|
||||
hb_set_tag_names_add_whole_literal(set, "h5");
|
||||
hb_set_tag_names_add_whole_literal(set, "h6");
|
||||
}
|
||||
|
||||
void hb_rule_tag_heading_init(void)
|
||||
{
|
||||
hb_rule_tag_heading_set = hb_set_tag_names_create();
|
||||
hb_rule_tag_heading_add_elems(hb_rule_tag_heading_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_heading_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_set_tag_names_has(hb_rule_tag_heading_set, tag);
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
static HEADING_TAGS: Set<&'static str> = phf_set! {
|
||||
"hgroup",
|
||||
"h1",
|
||||
"h2",
|
||||
"h3",
|
||||
"h4",
|
||||
"h5",
|
||||
"h6",
|
||||
};
|
|
@ -1,174 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
// Sourced from https://developer.mozilla.org/en-US/docs/Web/HTML/Element at
|
||||
// 2018-07-01T05:55:00Z
|
||||
|
||||
static hb_set_tag_names* hb_rule_tag_html_set;
|
||||
|
||||
void hb_rule_tag_html_add_elems(hb_set_tag_names* set)
|
||||
{
|
||||
hb_set_tag_names_add_whole_literal(set, "a");
|
||||
hb_set_tag_names_add_whole_literal(set, "abbr");
|
||||
hb_set_tag_names_add_whole_literal(set, "acronym");
|
||||
hb_set_tag_names_add_whole_literal(set, "address");
|
||||
hb_set_tag_names_add_whole_literal(set, "applet");
|
||||
hb_set_tag_names_add_whole_literal(set, "applet");
|
||||
hb_set_tag_names_add_whole_literal(set, "area");
|
||||
hb_set_tag_names_add_whole_literal(set, "article");
|
||||
hb_set_tag_names_add_whole_literal(set, "aside");
|
||||
hb_set_tag_names_add_whole_literal(set, "audio");
|
||||
hb_set_tag_names_add_whole_literal(set, "b");
|
||||
hb_set_tag_names_add_whole_literal(set, "basefont");
|
||||
hb_set_tag_names_add_whole_literal(set, "bdi");
|
||||
hb_set_tag_names_add_whole_literal(set, "bdo");
|
||||
hb_set_tag_names_add_whole_literal(set, "bgsound");
|
||||
hb_set_tag_names_add_whole_literal(set, "big");
|
||||
hb_set_tag_names_add_whole_literal(set, "blink");
|
||||
hb_set_tag_names_add_whole_literal(set, "blockquote");
|
||||
hb_set_tag_names_add_whole_literal(set, "body");
|
||||
hb_set_tag_names_add_whole_literal(set, "br");
|
||||
hb_set_tag_names_add_whole_literal(set, "button");
|
||||
hb_set_tag_names_add_whole_literal(set, "canvas");
|
||||
hb_set_tag_names_add_whole_literal(set, "caption");
|
||||
hb_set_tag_names_add_whole_literal(set, "center");
|
||||
hb_set_tag_names_add_whole_literal(set, "cite");
|
||||
hb_set_tag_names_add_whole_literal(set, "code");
|
||||
hb_set_tag_names_add_whole_literal(set, "col");
|
||||
hb_set_tag_names_add_whole_literal(set, "colgroup");
|
||||
hb_set_tag_names_add_whole_literal(set, "command");
|
||||
hb_set_tag_names_add_whole_literal(set, "content");
|
||||
hb_set_tag_names_add_whole_literal(set, "content");
|
||||
hb_set_tag_names_add_whole_literal(set, "data");
|
||||
hb_set_tag_names_add_whole_literal(set, "datalist");
|
||||
hb_set_tag_names_add_whole_literal(set, "dd");
|
||||
hb_set_tag_names_add_whole_literal(set, "del");
|
||||
hb_set_tag_names_add_whole_literal(set, "details");
|
||||
hb_set_tag_names_add_whole_literal(set, "dfn");
|
||||
hb_set_tag_names_add_whole_literal(set, "dialog");
|
||||
hb_set_tag_names_add_whole_literal(set, "dir");
|
||||
hb_set_tag_names_add_whole_literal(set, "dir");
|
||||
hb_set_tag_names_add_whole_literal(set, "div");
|
||||
hb_set_tag_names_add_whole_literal(set, "dl");
|
||||
hb_set_tag_names_add_whole_literal(set, "dt");
|
||||
hb_set_tag_names_add_whole_literal(set, "element");
|
||||
hb_set_tag_names_add_whole_literal(set, "element");
|
||||
hb_set_tag_names_add_whole_literal(set, "em");
|
||||
hb_set_tag_names_add_whole_literal(set, "embed");
|
||||
hb_set_tag_names_add_whole_literal(set, "fieldset");
|
||||
hb_set_tag_names_add_whole_literal(set, "figcaption");
|
||||
hb_set_tag_names_add_whole_literal(set, "figure");
|
||||
hb_set_tag_names_add_whole_literal(set, "font");
|
||||
hb_set_tag_names_add_whole_literal(set, "footer");
|
||||
hb_set_tag_names_add_whole_literal(set, "form");
|
||||
hb_set_tag_names_add_whole_literal(set, "frame");
|
||||
hb_set_tag_names_add_whole_literal(set, "frameset");
|
||||
hb_set_tag_names_add_whole_literal(set, "h1");
|
||||
hb_set_tag_names_add_whole_literal(set, "h2");
|
||||
hb_set_tag_names_add_whole_literal(set, "h3");
|
||||
hb_set_tag_names_add_whole_literal(set, "h4");
|
||||
hb_set_tag_names_add_whole_literal(set, "h5");
|
||||
hb_set_tag_names_add_whole_literal(set, "h6");
|
||||
hb_set_tag_names_add_whole_literal(set, "head");
|
||||
hb_set_tag_names_add_whole_literal(set, "header");
|
||||
hb_set_tag_names_add_whole_literal(set, "hgroup");
|
||||
hb_set_tag_names_add_whole_literal(set, "hr");
|
||||
hb_set_tag_names_add_whole_literal(set, "html");
|
||||
hb_set_tag_names_add_whole_literal(set, "i");
|
||||
hb_set_tag_names_add_whole_literal(set, "iframe");
|
||||
hb_set_tag_names_add_whole_literal(set, "image");
|
||||
hb_set_tag_names_add_whole_literal(set, "img");
|
||||
hb_set_tag_names_add_whole_literal(set, "input");
|
||||
hb_set_tag_names_add_whole_literal(set, "ins");
|
||||
hb_set_tag_names_add_whole_literal(set, "isindex");
|
||||
hb_set_tag_names_add_whole_literal(set, "kbd");
|
||||
hb_set_tag_names_add_whole_literal(set, "keygen");
|
||||
hb_set_tag_names_add_whole_literal(set, "label");
|
||||
hb_set_tag_names_add_whole_literal(set, "legend");
|
||||
hb_set_tag_names_add_whole_literal(set, "li");
|
||||
hb_set_tag_names_add_whole_literal(set, "link");
|
||||
hb_set_tag_names_add_whole_literal(set, "listing");
|
||||
hb_set_tag_names_add_whole_literal(set, "main");
|
||||
hb_set_tag_names_add_whole_literal(set, "map");
|
||||
hb_set_tag_names_add_whole_literal(set, "mark");
|
||||
hb_set_tag_names_add_whole_literal(set, "marquee");
|
||||
hb_set_tag_names_add_whole_literal(set, "menu");
|
||||
hb_set_tag_names_add_whole_literal(set, "menuitem");
|
||||
hb_set_tag_names_add_whole_literal(set, "menuitem");
|
||||
hb_set_tag_names_add_whole_literal(set, "meta");
|
||||
hb_set_tag_names_add_whole_literal(set, "meter");
|
||||
hb_set_tag_names_add_whole_literal(set, "multicol");
|
||||
hb_set_tag_names_add_whole_literal(set, "nav");
|
||||
hb_set_tag_names_add_whole_literal(set, "nextid");
|
||||
hb_set_tag_names_add_whole_literal(set, "nobr");
|
||||
hb_set_tag_names_add_whole_literal(set, "noembed");
|
||||
hb_set_tag_names_add_whole_literal(set, "noembed");
|
||||
hb_set_tag_names_add_whole_literal(set, "noframes");
|
||||
hb_set_tag_names_add_whole_literal(set, "noscript");
|
||||
hb_set_tag_names_add_whole_literal(set, "object");
|
||||
hb_set_tag_names_add_whole_literal(set, "ol");
|
||||
hb_set_tag_names_add_whole_literal(set, "optgroup");
|
||||
hb_set_tag_names_add_whole_literal(set, "option");
|
||||
hb_set_tag_names_add_whole_literal(set, "output");
|
||||
hb_set_tag_names_add_whole_literal(set, "p");
|
||||
hb_set_tag_names_add_whole_literal(set, "param");
|
||||
hb_set_tag_names_add_whole_literal(set, "picture");
|
||||
hb_set_tag_names_add_whole_literal(set, "plaintext");
|
||||
hb_set_tag_names_add_whole_literal(set, "pre");
|
||||
hb_set_tag_names_add_whole_literal(set, "progress");
|
||||
hb_set_tag_names_add_whole_literal(set, "q");
|
||||
hb_set_tag_names_add_whole_literal(set, "rp");
|
||||
hb_set_tag_names_add_whole_literal(set, "rt");
|
||||
hb_set_tag_names_add_whole_literal(set, "rtc");
|
||||
hb_set_tag_names_add_whole_literal(set, "ruby");
|
||||
hb_set_tag_names_add_whole_literal(set, "s");
|
||||
hb_set_tag_names_add_whole_literal(set, "samp");
|
||||
hb_set_tag_names_add_whole_literal(set, "script");
|
||||
hb_set_tag_names_add_whole_literal(set, "section");
|
||||
hb_set_tag_names_add_whole_literal(set, "select");
|
||||
hb_set_tag_names_add_whole_literal(set, "shadow");
|
||||
hb_set_tag_names_add_whole_literal(set, "shadow");
|
||||
hb_set_tag_names_add_whole_literal(set, "slot");
|
||||
hb_set_tag_names_add_whole_literal(set, "small");
|
||||
hb_set_tag_names_add_whole_literal(set, "source");
|
||||
hb_set_tag_names_add_whole_literal(set, "spacer");
|
||||
hb_set_tag_names_add_whole_literal(set, "span");
|
||||
hb_set_tag_names_add_whole_literal(set, "strike");
|
||||
hb_set_tag_names_add_whole_literal(set, "strong");
|
||||
hb_set_tag_names_add_whole_literal(set, "style");
|
||||
hb_set_tag_names_add_whole_literal(set, "sub");
|
||||
hb_set_tag_names_add_whole_literal(set, "summary");
|
||||
hb_set_tag_names_add_whole_literal(set, "sup");
|
||||
hb_set_tag_names_add_whole_literal(set, "table");
|
||||
hb_set_tag_names_add_whole_literal(set, "tbody");
|
||||
hb_set_tag_names_add_whole_literal(set, "td");
|
||||
hb_set_tag_names_add_whole_literal(set, "template");
|
||||
hb_set_tag_names_add_whole_literal(set, "textarea");
|
||||
hb_set_tag_names_add_whole_literal(set, "tfoot");
|
||||
hb_set_tag_names_add_whole_literal(set, "th");
|
||||
hb_set_tag_names_add_whole_literal(set, "thead");
|
||||
hb_set_tag_names_add_whole_literal(set, "time");
|
||||
hb_set_tag_names_add_whole_literal(set, "title");
|
||||
hb_set_tag_names_add_whole_literal(set, "tr");
|
||||
hb_set_tag_names_add_whole_literal(set, "track");
|
||||
hb_set_tag_names_add_whole_literal(set, "tt");
|
||||
hb_set_tag_names_add_whole_literal(set, "tt");
|
||||
hb_set_tag_names_add_whole_literal(set, "u");
|
||||
hb_set_tag_names_add_whole_literal(set, "ul");
|
||||
hb_set_tag_names_add_whole_literal(set, "var");
|
||||
hb_set_tag_names_add_whole_literal(set, "video");
|
||||
hb_set_tag_names_add_whole_literal(set, "wbr");
|
||||
hb_set_tag_names_add_whole_literal(set, "xmp");
|
||||
}
|
||||
|
||||
void hb_rule_tag_html_init(void)
|
||||
{
|
||||
hb_rule_tag_html_set = hb_set_tag_names_create();
|
||||
hb_rule_tag_html_add_elems(hb_rule_tag_html_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_html_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_set_tag_names_has(hb_rule_tag_html_set, tag);
|
||||
}
|
|
@ -0,0 +1,156 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
// Sourced from https://developer.mozilla.org/en-US/docs/Web/HTML/Element at 2018-07-01T05:55:00Z.
|
||||
static HTML_TAGS: Set<&'static str> = phf_set! {
|
||||
"a",
|
||||
"abbr",
|
||||
"acronym",
|
||||
"address",
|
||||
"applet",
|
||||
"applet",
|
||||
"area",
|
||||
"article",
|
||||
"aside",
|
||||
"audio",
|
||||
"b",
|
||||
"basefont",
|
||||
"bdi",
|
||||
"bdo",
|
||||
"bgsound",
|
||||
"big",
|
||||
"blink",
|
||||
"blockquote",
|
||||
"body",
|
||||
"br",
|
||||
"button",
|
||||
"canvas",
|
||||
"caption",
|
||||
"center",
|
||||
"cite",
|
||||
"code",
|
||||
"col",
|
||||
"colgroup",
|
||||
"command",
|
||||
"content",
|
||||
"content",
|
||||
"data",
|
||||
"datalist",
|
||||
"dd",
|
||||
"del",
|
||||
"details",
|
||||
"dfn",
|
||||
"dialog",
|
||||
"dir",
|
||||
"dir",
|
||||
"div",
|
||||
"dl",
|
||||
"dt",
|
||||
"element",
|
||||
"element",
|
||||
"em",
|
||||
"embed",
|
||||
"fieldset",
|
||||
"figcaption",
|
||||
"figure",
|
||||
"font",
|
||||
"footer",
|
||||
"form",
|
||||
"frame",
|
||||
"frameset",
|
||||
"h1",
|
||||
"h2",
|
||||
"h3",
|
||||
"h4",
|
||||
"h5",
|
||||
"h6",
|
||||
"head",
|
||||
"header",
|
||||
"hgroup",
|
||||
"hr",
|
||||
"html",
|
||||
"i",
|
||||
"iframe",
|
||||
"image",
|
||||
"img",
|
||||
"input",
|
||||
"ins",
|
||||
"isindex",
|
||||
"kbd",
|
||||
"keygen",
|
||||
"label",
|
||||
"legend",
|
||||
"li",
|
||||
"link",
|
||||
"listing",
|
||||
"main",
|
||||
"map",
|
||||
"mark",
|
||||
"marquee",
|
||||
"menu",
|
||||
"menuitem",
|
||||
"menuitem",
|
||||
"meta",
|
||||
"meter",
|
||||
"multicol",
|
||||
"nav",
|
||||
"nextid",
|
||||
"nobr",
|
||||
"noembed",
|
||||
"noembed",
|
||||
"noframes",
|
||||
"noscript",
|
||||
"object",
|
||||
"ol",
|
||||
"optgroup",
|
||||
"option",
|
||||
"output",
|
||||
"p",
|
||||
"param",
|
||||
"picture",
|
||||
"plaintext",
|
||||
"pre",
|
||||
"progress",
|
||||
"q",
|
||||
"rp",
|
||||
"rt",
|
||||
"rtc",
|
||||
"ruby",
|
||||
"s",
|
||||
"samp",
|
||||
"script",
|
||||
"section",
|
||||
"select",
|
||||
"shadow",
|
||||
"shadow",
|
||||
"slot",
|
||||
"small",
|
||||
"source",
|
||||
"spacer",
|
||||
"span",
|
||||
"strike",
|
||||
"strong",
|
||||
"style",
|
||||
"sub",
|
||||
"summary",
|
||||
"sup",
|
||||
"table",
|
||||
"tbody",
|
||||
"td",
|
||||
"template",
|
||||
"textarea",
|
||||
"tfoot",
|
||||
"th",
|
||||
"thead",
|
||||
"time",
|
||||
"title",
|
||||
"tr",
|
||||
"track",
|
||||
"tt",
|
||||
"tt",
|
||||
"u",
|
||||
"ul",
|
||||
"var",
|
||||
"video",
|
||||
"wbr",
|
||||
"xmp",
|
||||
};
|
|
@ -1,51 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static hb_set_tag_names* hb_rule_tag_layout_set;
|
||||
|
||||
void hb_rule_tag_layout_add_elems(hb_set_tag_names* set)
|
||||
{
|
||||
hb_rule_tag_sectioning_add_elems(set);
|
||||
hb_set_tag_names_add_whole_literal(set, "blockquote");
|
||||
hb_set_tag_names_add_whole_literal(set, "body");
|
||||
hb_set_tag_names_add_whole_literal(set, "colgroup");
|
||||
hb_set_tag_names_add_whole_literal(set, "datalist");
|
||||
hb_set_tag_names_add_whole_literal(set, "dialog");
|
||||
hb_set_tag_names_add_whole_literal(set, "div");
|
||||
hb_set_tag_names_add_whole_literal(set, "dl");
|
||||
hb_set_tag_names_add_whole_literal(set, "fieldset");
|
||||
hb_set_tag_names_add_whole_literal(set, "figure");
|
||||
hb_set_tag_names_add_whole_literal(set, "footer");
|
||||
hb_set_tag_names_add_whole_literal(set, "form");
|
||||
hb_set_tag_names_add_whole_literal(set, "head");
|
||||
hb_set_tag_names_add_whole_literal(set, "header");
|
||||
hb_set_tag_names_add_whole_literal(set, "hgroup");
|
||||
hb_set_tag_names_add_whole_literal(set, "html");
|
||||
hb_set_tag_names_add_whole_literal(set, "main");
|
||||
hb_set_tag_names_add_whole_literal(set, "map");
|
||||
hb_set_tag_names_add_whole_literal(set, "menu");
|
||||
hb_set_tag_names_add_whole_literal(set, "nav");
|
||||
hb_set_tag_names_add_whole_literal(set, "ol");
|
||||
hb_set_tag_names_add_whole_literal(set, "optgroup");
|
||||
hb_set_tag_names_add_whole_literal(set, "picture");
|
||||
hb_set_tag_names_add_whole_literal(set, "section");
|
||||
hb_set_tag_names_add_whole_literal(set, "select");
|
||||
hb_set_tag_names_add_whole_literal(set, "table");
|
||||
hb_set_tag_names_add_whole_literal(set, "tbody");
|
||||
hb_set_tag_names_add_whole_literal(set, "tfoot");
|
||||
hb_set_tag_names_add_whole_literal(set, "thead");
|
||||
hb_set_tag_names_add_whole_literal(set, "tr");
|
||||
hb_set_tag_names_add_whole_literal(set, "ul");
|
||||
}
|
||||
|
||||
void hb_rule_tag_layout_init(void)
|
||||
{
|
||||
hb_rule_tag_layout_set = hb_set_tag_names_create();
|
||||
hb_rule_tag_layout_add_elems(hb_rule_tag_layout_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_layout_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_set_tag_names_has(hb_rule_tag_layout_set, tag);
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
static LAYOUT_TAGS: Set<&'static str> = phf_set! {
|
||||
// Sectioning tags.
|
||||
"article",
|
||||
"aside",
|
||||
"nav",
|
||||
"section",
|
||||
// Other tags.
|
||||
"blockquote",
|
||||
"body",
|
||||
"colgroup",
|
||||
"datalist",
|
||||
"dialog",
|
||||
"div",
|
||||
"dl",
|
||||
"fieldset",
|
||||
"figure",
|
||||
"footer",
|
||||
"form",
|
||||
"head",
|
||||
"header",
|
||||
"hgroup",
|
||||
"html",
|
||||
"main",
|
||||
"map",
|
||||
"menu",
|
||||
"nav",
|
||||
"ol",
|
||||
"optgroup",
|
||||
"picture",
|
||||
"section",
|
||||
"select",
|
||||
"table",
|
||||
"tbody",
|
||||
"tfoot",
|
||||
"thead",
|
||||
"tr",
|
||||
"ul",
|
||||
};
|
|
@ -1,22 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static hb_set_tag_names* hb_rule_tag_media_set;
|
||||
|
||||
void hb_rule_tag_media_add_elems(hb_set_tag_names* set)
|
||||
{
|
||||
hb_set_tag_names_add_whole_literal(set, "audio");
|
||||
hb_set_tag_names_add_whole_literal(set, "video");
|
||||
}
|
||||
|
||||
void hb_rule_tag_media_init(void)
|
||||
{
|
||||
hb_rule_tag_media_set = hb_set_tag_names_create();
|
||||
hb_rule_tag_media_add_elems(hb_rule_tag_media_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_media_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_set_tag_names_has(hb_rule_tag_media_set, tag);
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
static MEDIA_TAGS: Set<&'static str> = phf_set! {
|
||||
"audio",
|
||||
"video",
|
||||
};
|
|
@ -1,25 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static nh_bitfield_ascii* hb_rule_tag_name_set;
|
||||
|
||||
void hb_rule_tag_name_add_elems(nh_bitfield_ascii* set)
|
||||
{
|
||||
hb_rule_ascii_lowercase_add_elems(set);
|
||||
hb_rule_ascii_uppercase_add_elems(set);
|
||||
hb_rule_ascii_digit_add_elems(set);
|
||||
nh_bitfield_ascii_add(set, ':');
|
||||
nh_bitfield_ascii_add(set, '-');
|
||||
}
|
||||
|
||||
void hb_rule_tag_name_init(void)
|
||||
{
|
||||
hb_rule_tag_name_set = nh_bitfield_ascii_create();
|
||||
hb_rule_tag_name_add_elems(hb_rule_tag_name_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_name_check(hb_rune c)
|
||||
{
|
||||
return nh_bitfield_ascii_has(hb_rule_tag_name_set, c);
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fn is_valid_tag_name_char(c: char) -> bool {
|
||||
c.is_ascii_alphabetic() || c.is_ascii_digit() || c == ':' || c == '-'
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static hb_set_tag_names* hb_rule_tag_sectioning_set;
|
||||
|
||||
void hb_rule_tag_sectioning_add_elems(hb_set_tag_names* set)
|
||||
{
|
||||
hb_set_tag_names_add_whole_literal(set, "article");
|
||||
hb_set_tag_names_add_whole_literal(set, "aside");
|
||||
hb_set_tag_names_add_whole_literal(set, "nav");
|
||||
hb_set_tag_names_add_whole_literal(set, "section");
|
||||
}
|
||||
|
||||
void hb_rule_tag_sectioning_init(void)
|
||||
{
|
||||
hb_rule_tag_sectioning_set = hb_set_tag_names_create();
|
||||
hb_rule_tag_sectioning_add_elems(hb_rule_tag_sectioning_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_sectioning_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_set_tag_names_has(hb_rule_tag_sectioning_set, tag);
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
static SECTIONING_TAGS: Set<&'static str> = phf_set! {
|
||||
// Also used by layout tags.
|
||||
"article",
|
||||
"aside",
|
||||
"nav",
|
||||
"section",
|
||||
};
|
|
@ -1,37 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static hb_set_tag_names* hb_rule_tag_specific_set;
|
||||
|
||||
void hb_rule_tag_specific_add_elems(hb_set_tag_names* set)
|
||||
{
|
||||
hb_rule_tag_svg_add_elems(set);
|
||||
hb_set_tag_names_add_whole_literal(set, "area");
|
||||
hb_set_tag_names_add_whole_literal(set, "base");
|
||||
hb_set_tag_names_add_whole_literal(set, "br");
|
||||
hb_set_tag_names_add_whole_literal(
|
||||
set, "code"); // Reason: unlikely to want to minify
|
||||
hb_set_tag_names_add_whole_literal(set, "col");
|
||||
hb_set_tag_names_add_whole_literal(set, "embed");
|
||||
hb_set_tag_names_add_whole_literal(set, "hr");
|
||||
hb_set_tag_names_add_whole_literal(set, "img");
|
||||
hb_set_tag_names_add_whole_literal(set, "input");
|
||||
hb_set_tag_names_add_whole_literal(set, "param");
|
||||
hb_set_tag_names_add_whole_literal(
|
||||
set, "pre"); // Reason: unlikely to want to minify
|
||||
hb_set_tag_names_add_whole_literal(set, "script");
|
||||
hb_set_tag_names_add_whole_literal(set, "source");
|
||||
hb_set_tag_names_add_whole_literal(set, "track");
|
||||
}
|
||||
|
||||
void hb_rule_tag_specific_init(void)
|
||||
{
|
||||
hb_rule_tag_specific_set = hb_set_tag_names_create();
|
||||
hb_rule_tag_specific_add_elems(hb_rule_tag_specific_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_specific_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_set_tag_names_has(hb_rule_tag_specific_set, tag);
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
// Does not include SVG tags.
|
||||
static SPECIFIC_HTML_TAGS: Set<&'static str> = phf_set! {
|
||||
"area",
|
||||
"base",
|
||||
"br",
|
||||
"code", // Reason: unlikely to want to minify.
|
||||
"col",
|
||||
"embed",
|
||||
"hr",
|
||||
"img",
|
||||
"input",
|
||||
"param",
|
||||
"pre", // Reason: unlikely to want to minify.
|
||||
"script",
|
||||
"source",
|
||||
"track",
|
||||
}
|
|
@ -1,113 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
// Sourced from https://developer.mozilla.org/en-US/docs/Web/SVG/Element at
|
||||
// 2018-08-04T03:50:00Z
|
||||
|
||||
static hb_set_tag_names* hb_rule_tag_svg_set;
|
||||
|
||||
void hb_rule_tag_svg_add_elems(hb_set_tag_names* set)
|
||||
{
|
||||
hb_set_tag_names_add_whole_literal(set, "a");
|
||||
hb_set_tag_names_add_whole_literal(set, "altGlyph");
|
||||
hb_set_tag_names_add_whole_literal(set, "altGlyphDef");
|
||||
hb_set_tag_names_add_whole_literal(set, "altGlyphItem");
|
||||
hb_set_tag_names_add_whole_literal(set, "animate");
|
||||
hb_set_tag_names_add_whole_literal(set, "animateColor");
|
||||
hb_set_tag_names_add_whole_literal(set, "animateMotion");
|
||||
hb_set_tag_names_add_whole_literal(set, "animateTransform");
|
||||
hb_set_tag_names_add_whole_literal(set, "circle");
|
||||
hb_set_tag_names_add_whole_literal(set, "clipPath");
|
||||
hb_set_tag_names_add_whole_literal(set, "color-profile");
|
||||
hb_set_tag_names_add_whole_literal(set, "cursor");
|
||||
hb_set_tag_names_add_whole_literal(set, "defs");
|
||||
hb_set_tag_names_add_whole_literal(set, "desc");
|
||||
hb_set_tag_names_add_whole_literal(set, "discard");
|
||||
hb_set_tag_names_add_whole_literal(set, "ellipse");
|
||||
hb_set_tag_names_add_whole_literal(set, "feBlend");
|
||||
hb_set_tag_names_add_whole_literal(set, "feColorMatrix");
|
||||
hb_set_tag_names_add_whole_literal(set, "feComponentTransfer");
|
||||
hb_set_tag_names_add_whole_literal(set, "feComposite");
|
||||
hb_set_tag_names_add_whole_literal(set, "feConvolveMatrix");
|
||||
hb_set_tag_names_add_whole_literal(set, "feDiffuseLighting");
|
||||
hb_set_tag_names_add_whole_literal(set, "feDisplacementMap");
|
||||
hb_set_tag_names_add_whole_literal(set, "feDistantLight");
|
||||
hb_set_tag_names_add_whole_literal(set, "feDropShadow");
|
||||
hb_set_tag_names_add_whole_literal(set, "feFlood");
|
||||
hb_set_tag_names_add_whole_literal(set, "feFuncA");
|
||||
hb_set_tag_names_add_whole_literal(set, "feFuncB");
|
||||
hb_set_tag_names_add_whole_literal(set, "feFuncG");
|
||||
hb_set_tag_names_add_whole_literal(set, "feFuncR");
|
||||
hb_set_tag_names_add_whole_literal(set, "feGaussianBlur");
|
||||
hb_set_tag_names_add_whole_literal(set, "feImage");
|
||||
hb_set_tag_names_add_whole_literal(set, "feMerge");
|
||||
hb_set_tag_names_add_whole_literal(set, "feMergeNode");
|
||||
hb_set_tag_names_add_whole_literal(set, "feMorphology");
|
||||
hb_set_tag_names_add_whole_literal(set, "feOffset");
|
||||
hb_set_tag_names_add_whole_literal(set, "fePointLight");
|
||||
hb_set_tag_names_add_whole_literal(set, "feSpecularLighting");
|
||||
hb_set_tag_names_add_whole_literal(set, "feSpotLight");
|
||||
hb_set_tag_names_add_whole_literal(set, "feTile");
|
||||
hb_set_tag_names_add_whole_literal(set, "feTurbulence");
|
||||
hb_set_tag_names_add_whole_literal(set, "filter");
|
||||
hb_set_tag_names_add_whole_literal(set, "font-face-format");
|
||||
hb_set_tag_names_add_whole_literal(set, "font-face-name");
|
||||
hb_set_tag_names_add_whole_literal(set, "font-face-src");
|
||||
hb_set_tag_names_add_whole_literal(set, "font-face-uri");
|
||||
hb_set_tag_names_add_whole_literal(set, "font-face");
|
||||
hb_set_tag_names_add_whole_literal(set, "font");
|
||||
hb_set_tag_names_add_whole_literal(set, "foreignObject");
|
||||
hb_set_tag_names_add_whole_literal(set, "g");
|
||||
hb_set_tag_names_add_whole_literal(set, "glyph");
|
||||
hb_set_tag_names_add_whole_literal(set, "glyphRef");
|
||||
hb_set_tag_names_add_whole_literal(set, "hatch");
|
||||
hb_set_tag_names_add_whole_literal(set, "hatchpath");
|
||||
hb_set_tag_names_add_whole_literal(set, "hkern");
|
||||
hb_set_tag_names_add_whole_literal(set, "image");
|
||||
hb_set_tag_names_add_whole_literal(set, "line");
|
||||
hb_set_tag_names_add_whole_literal(set, "linearGradient");
|
||||
hb_set_tag_names_add_whole_literal(set, "marker");
|
||||
hb_set_tag_names_add_whole_literal(set, "mask");
|
||||
hb_set_tag_names_add_whole_literal(set, "mesh");
|
||||
hb_set_tag_names_add_whole_literal(set, "meshgradient");
|
||||
hb_set_tag_names_add_whole_literal(set, "meshpatch");
|
||||
hb_set_tag_names_add_whole_literal(set, "meshrow");
|
||||
hb_set_tag_names_add_whole_literal(set, "metadata");
|
||||
hb_set_tag_names_add_whole_literal(set, "missing-glyph");
|
||||
hb_set_tag_names_add_whole_literal(set, "mpath");
|
||||
hb_set_tag_names_add_whole_literal(set, "path");
|
||||
hb_set_tag_names_add_whole_literal(set, "pattern");
|
||||
hb_set_tag_names_add_whole_literal(set, "polygon");
|
||||
hb_set_tag_names_add_whole_literal(set, "polyline");
|
||||
hb_set_tag_names_add_whole_literal(set, "radialGradient");
|
||||
hb_set_tag_names_add_whole_literal(set, "rect");
|
||||
hb_set_tag_names_add_whole_literal(set, "script");
|
||||
hb_set_tag_names_add_whole_literal(set, "set");
|
||||
hb_set_tag_names_add_whole_literal(set, "solidcolor");
|
||||
hb_set_tag_names_add_whole_literal(set, "stop");
|
||||
hb_set_tag_names_add_whole_literal(set, "style");
|
||||
hb_set_tag_names_add_whole_literal(set, "svg");
|
||||
hb_set_tag_names_add_whole_literal(set, "switch");
|
||||
hb_set_tag_names_add_whole_literal(set, "symbol");
|
||||
hb_set_tag_names_add_whole_literal(set, "text");
|
||||
hb_set_tag_names_add_whole_literal(set, "textPath");
|
||||
hb_set_tag_names_add_whole_literal(set, "title");
|
||||
hb_set_tag_names_add_whole_literal(set, "tref");
|
||||
hb_set_tag_names_add_whole_literal(set, "tspan");
|
||||
hb_set_tag_names_add_whole_literal(set, "unknown");
|
||||
hb_set_tag_names_add_whole_literal(set, "use");
|
||||
hb_set_tag_names_add_whole_literal(set, "view");
|
||||
hb_set_tag_names_add_whole_literal(set, "vkern");
|
||||
}
|
||||
|
||||
void hb_rule_tag_svg_init(void)
|
||||
{
|
||||
hb_rule_tag_svg_set = hb_set_tag_names_create();
|
||||
hb_rule_tag_svg_add_elems(hb_rule_tag_svg_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_svg_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_set_tag_names_has(hb_rule_tag_svg_set, tag);
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
// Sourced from https://developer.mozilla.org/en-US/docs/Web/SVG/Element at 2018-08-04T03:50:00Z.
|
||||
static SVG_TAGS: Set<&'static str> = phf_set! {
|
||||
"a",
|
||||
"altGlyph",
|
||||
"altGlyphDef",
|
||||
"altGlyphItem",
|
||||
"animate",
|
||||
"animateColor",
|
||||
"animateMotion",
|
||||
"animateTransform",
|
||||
"circle",
|
||||
"clipPath",
|
||||
"color-profile",
|
||||
"cursor",
|
||||
"defs",
|
||||
"desc",
|
||||
"discard",
|
||||
"ellipse",
|
||||
"feBlend",
|
||||
"feColorMatrix",
|
||||
"feComponentTransfer",
|
||||
"feComposite",
|
||||
"feConvolveMatrix",
|
||||
"feDiffuseLighting",
|
||||
"feDisplacementMap",
|
||||
"feDistantLight",
|
||||
"feDropShadow",
|
||||
"feFlood",
|
||||
"feFuncA",
|
||||
"feFuncB",
|
||||
"feFuncG",
|
||||
"feFuncR",
|
||||
"feGaussianBlur",
|
||||
"feImage",
|
||||
"feMerge",
|
||||
"feMergeNode",
|
||||
"feMorphology",
|
||||
"feOffset",
|
||||
"fePointLight",
|
||||
"feSpecularLighting",
|
||||
"feSpotLight",
|
||||
"feTile",
|
||||
"feTurbulence",
|
||||
"filter",
|
||||
"font-face-format",
|
||||
"font-face-name",
|
||||
"font-face-src",
|
||||
"font-face-uri",
|
||||
"font-face",
|
||||
"font",
|
||||
"foreignObject",
|
||||
"g",
|
||||
"glyph",
|
||||
"glyphRef",
|
||||
"hatch",
|
||||
"hatchpath",
|
||||
"hkern",
|
||||
"image",
|
||||
"line",
|
||||
"linearGradient",
|
||||
"marker",
|
||||
"mask",
|
||||
"mesh",
|
||||
"meshgradient",
|
||||
"meshpatch",
|
||||
"meshrow",
|
||||
"metadata",
|
||||
"missing-glyph",
|
||||
"mpath",
|
||||
"path",
|
||||
"pattern",
|
||||
"polygon",
|
||||
"polyline",
|
||||
"radialGradient",
|
||||
"rect",
|
||||
"script",
|
||||
"set",
|
||||
"solidcolor",
|
||||
"stop",
|
||||
"style",
|
||||
"svg",
|
||||
"switch",
|
||||
"symbol",
|
||||
"text",
|
||||
"textPath",
|
||||
"title",
|
||||
"tref",
|
||||
"tspan",
|
||||
"unknown",
|
||||
"use",
|
||||
"view",
|
||||
"vkern",
|
||||
};
|
|
@ -1,7 +0,0 @@
|
|||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
bool hb_rule_tag_valid_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_rule_tag_html_check(tag) || hb_rule_tag_svg_check(tag);
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fn is_valid_tag(tag: &str) -> bool {
|
||||
hb_rule_tag_html_check(tag) || hb_rule_tag_svg_check(tag)
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
static hb_set_tag_names* hb_rule_tag_void_set;
|
||||
|
||||
void hb_rule_tag_void_add_elems(hb_set_tag_names* set)
|
||||
{
|
||||
hb_set_tag_names_add_whole_literal(set, "area");
|
||||
hb_set_tag_names_add_whole_literal(set, "base");
|
||||
hb_set_tag_names_add_whole_literal(set, "br");
|
||||
hb_set_tag_names_add_whole_literal(set, "col");
|
||||
hb_set_tag_names_add_whole_literal(set, "embed");
|
||||
hb_set_tag_names_add_whole_literal(set, "hr");
|
||||
hb_set_tag_names_add_whole_literal(set, "img");
|
||||
hb_set_tag_names_add_whole_literal(set, "input");
|
||||
hb_set_tag_names_add_whole_literal(set, "keygen");
|
||||
hb_set_tag_names_add_whole_literal(set, "link");
|
||||
hb_set_tag_names_add_whole_literal(set, "meta");
|
||||
hb_set_tag_names_add_whole_literal(set, "param");
|
||||
hb_set_tag_names_add_whole_literal(set, "source");
|
||||
hb_set_tag_names_add_whole_literal(set, "track");
|
||||
hb_set_tag_names_add_whole_literal(set, "wbr");
|
||||
}
|
||||
|
||||
void hb_rule_tag_void_init(void)
|
||||
{
|
||||
hb_rule_tag_void_set = hb_set_tag_names_create();
|
||||
hb_rule_tag_void_add_elems(hb_rule_tag_void_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_void_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_set_tag_names_has(hb_rule_tag_void_set, tag);
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
use ::phf::{phf_set, Set};
|
||||
|
||||
static VOID_TAGS: Set<&'static str> = phf_set! {
|
||||
"area",
|
||||
"base",
|
||||
"br",
|
||||
"col",
|
||||
"embed",
|
||||
"hr",
|
||||
"img",
|
||||
"input",
|
||||
"keygen",
|
||||
"link",
|
||||
"meta",
|
||||
"param",
|
||||
"source",
|
||||
"track",
|
||||
"wbr",
|
||||
};
|
|
@ -1,24 +0,0 @@
|
|||
#include <hb/collection.h>
|
||||
#include <hb/rule.h>
|
||||
#include <hb/rune.h>
|
||||
|
||||
// "wss" stands for whitespace-sensitive.
|
||||
|
||||
static hb_set_tag_names* hb_rule_tag_wss_set;
|
||||
|
||||
void hb_rule_tag_wss_add_elems(hb_set_tag_names* set)
|
||||
{
|
||||
hb_set_tag_names_add_whole_literal(set, "code");
|
||||
hb_set_tag_names_add_whole_literal(set, "pre");
|
||||
}
|
||||
|
||||
void hb_rule_tag_wss_init(void)
|
||||
{
|
||||
hb_rule_tag_wss_set = hb_set_tag_names_create();
|
||||
hb_rule_tag_wss_add_elems(hb_rule_tag_wss_set);
|
||||
}
|
||||
|
||||
bool hb_rule_tag_wss_check(nh_view_str* tag)
|
||||
{
|
||||
return hb_set_tag_names_has(hb_rule_tag_wss_set, tag);
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
// "WSS" stands for whitespace-sensitive.
|
||||
use ::phf::{phf_set, Set};
|
||||
|
||||
static WSS_TAGS: Set<&'static str> = phf_set! {
|
||||
"code",
|
||||
"pre",
|
||||
};
|
Loading…
Reference in New Issue