Complete tag relation rules

This commit is contained in:
Wilson Lin 2018-07-05 23:58:05 +12:00
parent 2856aa71c2
commit ab284aa71e
3 changed files with 267 additions and 16 deletions

View File

@ -3,11 +3,81 @@
#include "../../datastructure/map/str-strset.h"
#include "../../util/hbchar.h"
#include "../tag/headingtags.c"
#include "../tag/mediatags.c"
#include "../tag/sectioningtags.c"
static nh_map_str_strset_t hb_r_blacklistchildren_map;
void hb_r_blacklistchildren_init(void) {
hb_r_blacklistchildren_map = nh_map_str_strset_create();
// <address>
nh_set_str_t address = nh_set_str_create();
hb_r_headingtags_add_elems(address);
hb_r_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_r_blacklistchildren_map, "address", address);
// <audio>
nh_set_str_t audio = nh_set_str_create();
hb_r_mediatags_add_elems(audio);
nh_map_str_strset_set(hb_r_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_r_blacklistchildren_map, "dfn", dfn);
// <dt>
nh_set_str_t dt = nh_set_str_create();
hb_r_headingtags_add_elems(dt);
hb_r_sectioningtags_add_elems(dt);
nh_set_str_add(dt, "header");
nh_set_str_add(dt, "footer");
nh_map_str_strset_set(hb_r_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_r_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_r_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_r_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_r_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_r_blacklistchildren_map, "progress", progress);
// <th>
nh_set_str_t th = nh_set_str_create();
hb_r_headingtags_add_elems(th);
hb_r_sectioningtags_add_elems(th);
nh_set_str_add(th, "header");
nh_set_str_add(th, "footer");
nh_map_str_strset_set(hb_r_blacklistchildren_map, "th", th);
// <video>
nh_set_str_t video = nh_set_str_create();
hb_r_mediatags_add_elems(video);
nh_map_str_strset_set(hb_r_blacklistchildren_map, "video", video);
}
int hb_r_blacklistchildren_check(hb_char_t *parent) {

View File

@ -3,12 +3,57 @@
#include "../../datastructure/map/str-strset.h"
#include "../../util/hbchar.h"
#include "../tag/headingtags.c"
static nh_map_str_strset_t hb_r_whitelistchildren_map;
void hb_r_whitelistchildren_init(void) {
hb_r_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_r_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_r_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_r_whitelistchildren_map, "dl", dl);
// <hgroup>
nh_set_str_t hgroup = nh_set_str_create();
hb_r_headingtags_add_elems(hgroup);
nh_map_str_strset_set(hb_r_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_r_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_r_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_r_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_r_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");
@ -18,6 +63,34 @@ void hb_r_whitelistchildren_init(void) {
nh_set_str_add(table, "tfoot");
nh_set_str_add(table, "tr");
nh_map_str_strset_set(hb_r_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_r_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_r_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_r_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_r_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_r_whitelistchildren_map, "ul", ul);
}
int hb_r_whitelistchildren_check(hb_char_t *parent) {

View File

@ -3,36 +3,144 @@
#include "../../datastructure/map/str-strset.h"
#include "../../util/hbchar.h"
#include "../tag/mediatags.c"
static nh_map_str_strset_t hb_r_whitelistparents_map;
void hb_r_whitelistparents_init(void) {
hb_r_whitelistparents_map = nh_map_str_strset_create();
nh_set_str_t li = nh_set_str_create();
nh_set_str_add(li, "ul");
nh_set_str_add(li, "ol");
nh_map_str_strset_set(hb_r_whitelistparents_map, "li", li);
nh_set_str_t dt = nh_set_str_create();
nh_set_str_add(dt, "dl");
nh_map_str_strset_set(hb_r_whitelistparents_map, "dt", dt);
nh_set_str_t dd = nh_set_str_create();
nh_set_str_add(dd, "dl");
nh_map_str_strset_set(hb_r_whitelistparents_map, "dd", dd);
// <caption>
nh_set_str_t caption = nh_set_str_create();
nh_set_str_add(caption, "table");
nh_map_str_strset_set(hb_r_whitelistparents_map, "caption", caption);
// <caption>
nh_set_str_t caption = nh_set_str_create();
nh_set_str_add(caption, "table");
nh_map_str_strset_set(hb_r_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_r_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_r_whitelistparents_map, "colgroup", colgroup);
nh_set_str_t col = nh_set_str_create();
nh_set_str_add(col, "table");
nh_map_str_strset_set(hb_r_whitelistparents_map, "col", col);
// <dd>
nh_set_str_t dd = nh_set_str_create();
nh_set_str_add(dd, "dl");
nh_map_str_strset_set(hb_r_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_r_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_r_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_r_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_r_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_r_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_r_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_r_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_r_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_r_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_r_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_r_whitelistparents_map, "summary", summary);
// <source>
nh_set_str_t source = nh_set_str_create();
hb_r_mediatags_add_elems(source);
nh_set_str_add(source, "picture");
nh_map_str_strset_set(hb_r_whitelistparents_map, "source", source);
// <track>
nh_set_str_t track = nh_set_str_create();
hb_r_mediatags_add_elems(track);
nh_map_str_strset_set(hb_r_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_r_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_r_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_r_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_r_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_r_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_r_whitelistparents_map, "tr", tr);
// <template>
// Should be <body>, <frameset>, <head>, <dl>, <colgroup>, but ignoring
}
int hb_r_whitelistparents_check(hb_char_t *child) {