Replace case statement with a static const std::unordered_map.
This commit is contained in:
parent
fa107fcb64
commit
c4034adcea
437
src/docpp.cpp
437
src/docpp.cpp
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include <include/docpp.hpp>
|
#include <include/docpp.hpp>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
docpp::HTML::Property::Property(const std::string& key, const std::string& value) {
|
docpp::HTML::Property::Property(const std::string& key, const std::string& value) {
|
||||||
|
@ -301,293 +302,157 @@ void docpp::HTML::Section::set(const std::string& tag, const Properties& propert
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T> T docpp::HTML::resolve_tag(const Tag tag) {
|
template <typename T> T docpp::HTML::resolve_tag(const Tag tag) {
|
||||||
switch (tag) {
|
static const std::unordered_map<const Tag, const std::string> tag_map{
|
||||||
case ELEMENT_EMPTY:
|
{ELEMENT_EMPTY, ""},
|
||||||
return "";
|
{ELEMENT_ABBREVIATION, "abbr"},
|
||||||
case ELEMENT_ABBREVIATION:
|
{ELEMENT_ABBR, "abbr"},
|
||||||
return "abbr";
|
{ELEMENT_ACRONYM, "acronym"},
|
||||||
case ELEMENT_ABBR:
|
{ELEMENT_ADDRESS, "address"},
|
||||||
return "abbr";
|
{ELEMENT_APPLET, "applet"},
|
||||||
case ELEMENT_ACRONYM:
|
{ELEMENT_ANCHOR, "a"},
|
||||||
return "acronym";
|
{ELEMENT_A, "a"},
|
||||||
case ELEMENT_ADDRESS:
|
{ELEMENT_ARTICLE, "article"},
|
||||||
return "address";
|
{ELEMENT_AREA, "area"},
|
||||||
case ELEMENT_APPLET:
|
{ELEMENT_ASIDE, "aside"},
|
||||||
return "applet";
|
{ELEMENT_AUDIO, "audio"},
|
||||||
case ELEMENT_ANCHOR:
|
{ELEMENT_BASE, "base"},
|
||||||
return "a";
|
{ELEMENT_BASEFONT, "basefont"},
|
||||||
case ELEMENT_A:
|
{ELEMENT_BDI, "bdi"},
|
||||||
return "a";
|
{ELEMENT_BDO, "bdo"},
|
||||||
case ELEMENT_ARTICLE:
|
{ELEMENT_BGSOUND, "bgsound"},
|
||||||
return "article";
|
{ELEMENT_BIG, "big"},
|
||||||
case ELEMENT_AREA:
|
{ELEMENT_BLOCKQUOTE, "blockquote"},
|
||||||
return "area";
|
{ELEMENT_BODY, "body"},
|
||||||
case ELEMENT_ASIDE:
|
{ELEMENT_B, "b"},
|
||||||
return "aside";
|
{ELEMENT_BOLD, "b"},
|
||||||
case ELEMENT_AUDIO:
|
{ELEMENT_BR, "br"},
|
||||||
return "audio";
|
{ELEMENT_BREAK, "br"},
|
||||||
case ELEMENT_BASE:
|
{ELEMENT_BUTTON, "button"},
|
||||||
return "base";
|
{ELEMENT_CAPTION, "caption"},
|
||||||
case ELEMENT_BASEFONT:
|
{ELEMENT_CANVAS, "canvas"},
|
||||||
return "basefont";
|
{ELEMENT_CENTER, "center"},
|
||||||
case ELEMENT_BDI:
|
{ELEMENT_CITE, "cite"},
|
||||||
return "bdi";
|
{ELEMENT_CODE, "code"},
|
||||||
case ELEMENT_BDO:
|
{ELEMENT_COLGROUP, "colgroup"},
|
||||||
return "bdo";
|
{ELEMENT_COLUMN, "col"},
|
||||||
case ELEMENT_BGSOUND:
|
{ELEMENT_COL, "col"},
|
||||||
return "bgsound";
|
{ELEMENT_DATA, "data"},
|
||||||
case ELEMENT_BIG:
|
{ELEMENT_DATALIST, "datalist"},
|
||||||
return "big";
|
{ELEMENT_DD, "dd"},
|
||||||
case ELEMENT_BLOCKQUOTE:
|
{ELEMENT_DFN, "dfn"},
|
||||||
return "blockquote";
|
{ELEMENT_DEFINE, "dfn"},
|
||||||
case ELEMENT_BODY:
|
{ELEMENT_DELETE, "del"},
|
||||||
return "body";
|
{ELEMENT_DEL, "del"},
|
||||||
case ELEMENT_B:
|
{ELEMENT_DETAILS, "details"},
|
||||||
return "b";
|
{ELEMENT_DIALOG, "dialog"},
|
||||||
case ELEMENT_BOLD:
|
{ELEMENT_DIR, "dir"},
|
||||||
return "b";
|
{ELEMENT_DIV, "div"},
|
||||||
case ELEMENT_BR:
|
{ELEMENT_DL, "dl"},
|
||||||
return "br";
|
{ELEMENT_DT, "dt"},
|
||||||
case ELEMENT_BREAK:
|
{ELEMENT_EMBED, "embed"},
|
||||||
return "br";
|
{ELEMENT_FIELDSET, "fieldset"},
|
||||||
case ELEMENT_BUTTON:
|
{ELEMENT_FIGCAPTION, "figcaption"},
|
||||||
return "button";
|
{ELEMENT_FIGURE, "figure"},
|
||||||
case ELEMENT_CAPTION:
|
{ELEMENT_FONT, "font"},
|
||||||
return "caption";
|
{ELEMENT_FOOTER, "footer"},
|
||||||
case ELEMENT_CANVAS:
|
{ELEMENT_FORM, "form"},
|
||||||
return "canvas";
|
{ELEMENT_FRAME, "frame"},
|
||||||
case ELEMENT_CENTER:
|
{ELEMENT_FRAMESET, "frameset"},
|
||||||
return "center";
|
{ELEMENT_HEAD, "head"},
|
||||||
case ELEMENT_CITE:
|
{ELEMENT_HEADER, "header"},
|
||||||
return "cite";
|
{ELEMENT_H1, "h1"},
|
||||||
case ELEMENT_CODE:
|
{ELEMENT_H2, "h2"},
|
||||||
return "code";
|
{ELEMENT_H3, "h3"},
|
||||||
case ELEMENT_COLGROUP:
|
{ELEMENT_H4, "h4"},
|
||||||
return "colgroup";
|
{ELEMENT_H5, "h5"},
|
||||||
case ELEMENT_COLUMN:
|
{ELEMENT_H6, "h6"},
|
||||||
return "col";
|
{ELEMENT_HGROUP, "hgroup"},
|
||||||
case ELEMENT_COL:
|
{ELEMENT_HTML, "html"},
|
||||||
return "col";
|
{ELEMENT_IFRAME, "iframe"},
|
||||||
case ELEMENT_DATA:
|
{ELEMENT_IMAGE, "img"},
|
||||||
return "data";
|
{ELEMENT_IMG, "img"},
|
||||||
case ELEMENT_DATALIST:
|
{ELEMENT_INPUT, "input"},
|
||||||
return "datalist";
|
{ELEMENT_INS, "ins"},
|
||||||
case ELEMENT_DD:
|
{ELEMENT_ISINDEX, "isindex"},
|
||||||
return "dd";
|
{ELEMENT_ITALIC, "i"},
|
||||||
case ELEMENT_DFN:
|
{ELEMENT_I, "i"},
|
||||||
return "dfn";
|
{ELEMENT_KBD, "kbd"},
|
||||||
case ELEMENT_DEFINE:
|
{ELEMENT_KEYGEN, "keygen"},
|
||||||
return "dfn";
|
{ELEMENT_LABEL, "label"},
|
||||||
case ELEMENT_DELETE:
|
{ELEMENT_LEGEND, "legend"},
|
||||||
return "del";
|
{ELEMENT_LIST, "li"},
|
||||||
case ELEMENT_DEL:
|
{ELEMENT_LI, "li"},
|
||||||
return "del";
|
{ELEMENT_MAIN, "main"},
|
||||||
case ELEMENT_DETAILS:
|
{ELEMENT_MARK, "mark"},
|
||||||
return "details";
|
{ELEMENT_MARQUEE, "marquee"},
|
||||||
case ELEMENT_DIALOG:
|
{ELEMENT_MENUITEM, "menuitem"},
|
||||||
return "dialog";
|
{ELEMENT_META, "meta"},
|
||||||
case ELEMENT_DIR:
|
{ELEMENT_METER, "meter"},
|
||||||
return "dir";
|
{ELEMENT_NAV, "nav"},
|
||||||
case ELEMENT_DIV:
|
{ELEMENT_NOBREAK, "nobr"},
|
||||||
return "div";
|
{ELEMENT_NOBR, "nobr"},
|
||||||
case ELEMENT_DL:
|
{ELEMENT_NOEMBED, "noembed"},
|
||||||
return "dl";
|
{ELEMENT_NOSCRIPT, "noscript"},
|
||||||
case ELEMENT_DT:
|
{ELEMENT_OBJECT, "object"},
|
||||||
return "dt";
|
{ELEMENT_OPTGROUP, "optgroup"},
|
||||||
case ELEMENT_EMBED:
|
{ELEMENT_OPTION, "option"},
|
||||||
return "embed";
|
{ELEMENT_OUTPUT, "output"},
|
||||||
case ELEMENT_FIELDSET:
|
{ELEMENT_PARAGRAPH, "p"},
|
||||||
return "fieldset";
|
{ELEMENT_P, "p"},
|
||||||
case ELEMENT_FIGCAPTION:
|
{ELEMENT_PARAM, "param"},
|
||||||
return "figcaption";
|
{ELEMENT_PHRASE, "phrase"},
|
||||||
case ELEMENT_FIGURE:
|
{ELEMENT_PRE, "pre"},
|
||||||
return "figure";
|
{ELEMENT_PROGRESS, "progress"},
|
||||||
case ELEMENT_FONT:
|
{ELEMENT_QUOTE, "q"},
|
||||||
return "font";
|
{ELEMENT_Q, "q"},
|
||||||
case ELEMENT_FOOTER:
|
{ELEMENT_RP, "rp"},
|
||||||
return "footer";
|
{ELEMENT_RT, "rt"},
|
||||||
case ELEMENT_FORM:
|
{ELEMENT_RUBY, "ruby"},
|
||||||
return "form";
|
{ELEMENT_OUTDATED, "s"},
|
||||||
case ELEMENT_FRAME:
|
{ELEMENT_S, "s"},
|
||||||
return "frame";
|
{ELEMENT_SAMPLE, "samp"},
|
||||||
case ELEMENT_FRAMESET:
|
{ELEMENT_SAMP, "samp"},
|
||||||
return "frameset";
|
{ELEMENT_SCRIPT, "script"},
|
||||||
case ELEMENT_HEAD:
|
{ELEMENT_SECTION, "section"},
|
||||||
return "head";
|
{ELEMENT_SMALL, "small"},
|
||||||
case ELEMENT_HEADER:
|
{ELEMENT_SOURCE, "source"},
|
||||||
return "header";
|
{ELEMENT_SPACER, "spacer"},
|
||||||
case ELEMENT_H1:
|
{ELEMENT_SPAN, "span"},
|
||||||
return "h1";
|
{ELEMENT_STRIKE, "strike"},
|
||||||
case ELEMENT_H2:
|
{ELEMENT_STRONG, "strong"},
|
||||||
return "h2";
|
{ELEMENT_STYLE, "style"},
|
||||||
case ELEMENT_H3:
|
{ELEMENT_SUB, "sub"},
|
||||||
return "h3";
|
{ELEMENT_SUBSCRIPT, "sub"},
|
||||||
case ELEMENT_H4:
|
{ELEMENT_SUP, "sup"},
|
||||||
return "h4";
|
{ELEMENT_SUPERSCRIPT, "sup"},
|
||||||
case ELEMENT_H5:
|
{ELEMENT_SUMMARY, "summary"},
|
||||||
return "h5";
|
{ELEMENT_SVG, "svg"},
|
||||||
case ELEMENT_H6:
|
{ELEMENT_TABLE, "table"},
|
||||||
return "h6";
|
{ELEMENT_TBODY, "tbody"},
|
||||||
case ELEMENT_HGROUP:
|
{ELEMENT_TD, "td"},
|
||||||
return "hgroup";
|
{ELEMENT_TEMPLATE, "template"},
|
||||||
case ELEMENT_HTML:
|
{ELEMENT_TFOOT, "tfoot"},
|
||||||
return "html";
|
{ELEMENT_TH, "th"},
|
||||||
case ELEMENT_IFRAME:
|
{ELEMENT_THEAD, "thead"},
|
||||||
return "iframe";
|
{ELEMENT_TIME, "time"},
|
||||||
case ELEMENT_IMAGE:
|
{ELEMENT_TITLE, "title"},
|
||||||
return "img";
|
{ELEMENT_TRACK, "track"},
|
||||||
case ELEMENT_IMG:
|
{ELEMENT_TT, "tt"},
|
||||||
return "img";
|
{ELEMENT_UNDERLINE, "u"},
|
||||||
case ELEMENT_INPUT:
|
{ELEMENT_U, "u"},
|
||||||
return "input";
|
{ELEMENT_VAR, "var"},
|
||||||
case ELEMENT_INS:
|
{ELEMENT_VIDEO, "video"},
|
||||||
return "ins";
|
{ELEMENT_WBR, "wbr"},
|
||||||
case ELEMENT_ISINDEX:
|
{ELEMENT_XMP, "xmp"},
|
||||||
return "isindex";
|
};
|
||||||
case ELEMENT_ITALIC:
|
|
||||||
return "i";
|
if (tag_map.find(tag) != tag_map.end()) {
|
||||||
case ELEMENT_I:
|
return tag_map.at(tag);
|
||||||
return "i";
|
|
||||||
case ELEMENT_KBD:
|
|
||||||
return "kbd";
|
|
||||||
case ELEMENT_KEYGEN:
|
|
||||||
return "keygen";
|
|
||||||
case ELEMENT_LABEL:
|
|
||||||
return "label";
|
|
||||||
case ELEMENT_LEGEND:
|
|
||||||
return "legend";
|
|
||||||
case ELEMENT_LIST:
|
|
||||||
return "li";
|
|
||||||
case ELEMENT_LI:
|
|
||||||
return "li";
|
|
||||||
case ELEMENT_MAIN:
|
|
||||||
return "main";
|
|
||||||
case ELEMENT_MARK:
|
|
||||||
return "mark";
|
|
||||||
case ELEMENT_MARQUEE:
|
|
||||||
return "marquee";
|
|
||||||
case ELEMENT_MENUITEM:
|
|
||||||
return "menuitem";
|
|
||||||
case ELEMENT_META:
|
|
||||||
return "meta";
|
|
||||||
case ELEMENT_METER:
|
|
||||||
return "meter";
|
|
||||||
case ELEMENT_NAV:
|
|
||||||
return "nav";
|
|
||||||
case ELEMENT_NOBREAK:
|
|
||||||
return "nobr";
|
|
||||||
case ELEMENT_NOBR:
|
|
||||||
return "nobr";
|
|
||||||
case ELEMENT_NOEMBED:
|
|
||||||
return "noembed";
|
|
||||||
case ELEMENT_NOSCRIPT:
|
|
||||||
return "noscript";
|
|
||||||
case ELEMENT_OBJECT:
|
|
||||||
return "object";
|
|
||||||
case ELEMENT_OPTGROUP:
|
|
||||||
return "optgroup";
|
|
||||||
case ELEMENT_OPTION:
|
|
||||||
return "option";
|
|
||||||
case ELEMENT_OUTPUT:
|
|
||||||
return "output";
|
|
||||||
case ELEMENT_PARAGRAPH:
|
|
||||||
return "p";
|
|
||||||
case ELEMENT_P:
|
|
||||||
return "p";
|
|
||||||
case ELEMENT_PARAM:
|
|
||||||
return "param";
|
|
||||||
case ELEMENT_PHRASE:
|
|
||||||
return "phrase";
|
|
||||||
case ELEMENT_PRE:
|
|
||||||
return "pre";
|
|
||||||
case ELEMENT_PROGRESS:
|
|
||||||
return "progress";
|
|
||||||
case ELEMENT_QUOTE:
|
|
||||||
return "q";
|
|
||||||
case ELEMENT_Q:
|
|
||||||
return "q";
|
|
||||||
case ELEMENT_RP:
|
|
||||||
return "rp";
|
|
||||||
case ELEMENT_RT:
|
|
||||||
return "rt";
|
|
||||||
case ELEMENT_RUBY:
|
|
||||||
return "ruby";
|
|
||||||
case ELEMENT_OUTDATED:
|
|
||||||
return "s";
|
|
||||||
case ELEMENT_S:
|
|
||||||
return "s";
|
|
||||||
case ELEMENT_SAMPLE:
|
|
||||||
return "samp";
|
|
||||||
case ELEMENT_SAMP:
|
|
||||||
return "samp";
|
|
||||||
case ELEMENT_SCRIPT:
|
|
||||||
return "script";
|
|
||||||
case ELEMENT_SECTION:
|
|
||||||
return "section";
|
|
||||||
case ELEMENT_SMALL:
|
|
||||||
return "small";
|
|
||||||
case ELEMENT_SOURCE:
|
|
||||||
return "source";
|
|
||||||
case ELEMENT_SPACER:
|
|
||||||
return "spacer";
|
|
||||||
case ELEMENT_SPAN:
|
|
||||||
return "span";
|
|
||||||
case ELEMENT_STRIKE:
|
|
||||||
return "strike";
|
|
||||||
case ELEMENT_STRONG:
|
|
||||||
return "strong";
|
|
||||||
case ELEMENT_STYLE:
|
|
||||||
return "style";
|
|
||||||
case ELEMENT_SUB:
|
|
||||||
return "sub";
|
|
||||||
case ELEMENT_SUBSCRIPT:
|
|
||||||
return "sub";
|
|
||||||
case ELEMENT_SUP:
|
|
||||||
return "sup";
|
|
||||||
case ELEMENT_SUPERSCRIPT:
|
|
||||||
return "sup";
|
|
||||||
case ELEMENT_SUMMARY:
|
|
||||||
return "summary";
|
|
||||||
case ELEMENT_SVG:
|
|
||||||
return "svg";
|
|
||||||
case ELEMENT_TABLE:
|
|
||||||
return "table";
|
|
||||||
case ELEMENT_TBODY:
|
|
||||||
return "tbody";
|
|
||||||
case ELEMENT_TD:
|
|
||||||
return "td";
|
|
||||||
case ELEMENT_TEMPLATE:
|
|
||||||
return "template";
|
|
||||||
case ELEMENT_TFOOT:
|
|
||||||
return "tfoot";
|
|
||||||
case ELEMENT_TH:
|
|
||||||
return "th";
|
|
||||||
case ELEMENT_THEAD:
|
|
||||||
return "thead";
|
|
||||||
case ELEMENT_TIME:
|
|
||||||
return "time";
|
|
||||||
case ELEMENT_TITLE:
|
|
||||||
return "title";
|
|
||||||
case ELEMENT_TRACK:
|
|
||||||
return "track";
|
|
||||||
case ELEMENT_TT:
|
|
||||||
return "tt";
|
|
||||||
case ELEMENT_UNDERLINE:
|
|
||||||
return "u";
|
|
||||||
case ELEMENT_U:
|
|
||||||
return "u";
|
|
||||||
case ELEMENT_VAR:
|
|
||||||
return "var";
|
|
||||||
case ELEMENT_VIDEO:
|
|
||||||
return "video";
|
|
||||||
case ELEMENT_WBR:
|
|
||||||
return "wbr";
|
|
||||||
case ELEMENT_XMP:
|
|
||||||
return "xmp";
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return "";
|
|
||||||
|
throw docpp::invalid_argument{"Invalid tag"};
|
||||||
|
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void docpp::HTML::Section::set(const Tag tag, const Properties& properties) {
|
void docpp::HTML::Section::set(const Tag tag, const Properties& properties) {
|
||||||
|
|
Loading…
Reference in a new issue