UNPKG

derya

Version:

Multi-Parser & Code-Generator, developed with TypeScript on node.js.

979 lines 27.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HTMLSourceCode = void 0; //Imports const html_element_1 = require("./html_element"); const html_validation_1 = require("./html_validation"); const sys = require("samara"); const tags = require("./ref/html_tags.json"); //Classes class HTMLSourceCode { //Constructor constructor(sourceCode) { //Declarations this._ids = 0; this.sc = []; if (!sys.isNull(sourceCode)) { this.parse(sourceCode); } } //Methods addCharset(charset) { let tag = new html_element_1.HTMLElement(this.getNewID(), "meta", true, false); if (!sys.isNull(charset)) { tag.addAttributeCharset(charset.toUpperCase()); return this.addElement(tag); } return undefined; } addComment(comment) { if (!sys.isNull(comment)) { return this.addContent("<!-- " + comment + " -->"); } return undefined; } addContent(content) { content = sys.removeTags(content).trim(); if (!sys.isNull(content)) { return this.addElement(new html_element_1.HTMLElement(this.getNewID(), content, false, undefined)); } return undefined; } addContentUnsafe(content) { if (!sys.isNull(content)) { return this.addElement(new html_element_1.HTMLElement(this.getNewID(), content.trim(), false, undefined)); } return undefined; } addDoctype() { return this.addElement(new html_element_1.HTMLElement(this.getNewID(), "!DOCTYPE html", true, false)); } addElement(element) { this.sc.push(element); return element; } addFontFace(family, url) { return this.addContent("@font-face{font-family: \"" + family + "\"; src: url(\"/" + url + "\");}"); } addIcon(name, md) { let tag = this.openSpan(); if (md.length < 1) { tag.addAttributeClass("material-icons"); } else { let str = "material-icons"; for (let i = 0; i < md.length; i++) { str += " " + md[i]; } tag.addAttributeClass(str); } tag = this.addContent(name); this.closeSpan(); return tag; } addImgDefault(src, alt) { let tag = this.addImg(); tag.addAttributeSrc(src); tag.addAttributeAlt(alt); return tag; } addInputDefault(type, id, name) { let tag = this.addInput(); tag.addAttributeType(type); tag.addAttributeId(id); tag.addAttributeName(name); return tag; } addMetaDefault(name, content) { let tag = new html_element_1.HTMLElement(this.getNewID(), "meta", true, false); if (!sys.isNull(name) && !sys.isNull(content)) { tag.addAttributeName(name.toLowerCase()); tag.addAttributeContent(content); return this.addElement(tag); } return undefined; } addSourceCode(sc) { for (let element of sc.sc) { this.sc.push(element); } } addTag(tag) { if ((0, html_validation_1.isTag)(tag.toLowerCase())) { return this.addTagUnsafe(tag); } return undefined; } addTagUnsafe(tag) { return this.addElement(new html_element_1.HTMLElement(this.getNewID(), tag.toLowerCase(), true, false)); } addTitle(value) { this.openTitle(); this.addContent(value); this.closeTitle(); } closeTag(tag) { if ((0, html_validation_1.isClosedTag)(tag.toLowerCase())) { return this.closeTagUnsafe(tag); } return undefined; } closeTagUnsafe(tag) { return this.addElement(new html_element_1.HTMLElement(this.getNewID(), tag.toLowerCase(), true, true)); } static containsTags(sourceCode) { if (sourceCode.indexOf("<") > -1 && sourceCode.indexOf(">") > sourceCode.indexOf("<")) { return true; } else { return false; } } static extractComment(str) { str = str.substring(4, str.length); str = sys.removeAll(str, "-->"); if (str.indexOf(">") > -1) { str = str.substring(0, str.indexOf(">")); } return str.trim(); } getElement(id) { for (let element of this.sc) { if (element.id === id) { return element; } } return undefined; } getHTML(validate) { let html = ""; if (validate === true) { let errors = (0, html_validation_1.validatePage)(this.sc); if (errors.getLength() > 0) { for (let error of errors.objects) { html += "ERROR: " + error.object + "!\r\n"; } } } //Generate format String let lvl = 0; for (let element of this.sc) { if (element.tag && (0, html_validation_1.isClosedTag)(element.content) && element.closed) { lvl--; } let tabs = ""; for (let i = 0; i < lvl; i++) { tabs += "\t"; } html += tabs + element.getContent() + "\r\n"; //console.log("YYY: " + element.getContent()); if (element.tag && (0, html_validation_1.isClosedTag)(element.content) && !element.closed) { lvl++; } } return html; } getNewID() { return this.ids++; } static getTag(name) { if (name.indexOf("/") === 0) { name = name.substring(name.indexOf("/") + 1, name.length); } if (name.indexOf(" ") > -1) { name = name.substring(0, name.indexOf(" ")); } //console.log("NAME: " + name) for (let tag of tags.tags) { if (tag.name === name) { return tag; } } return undefined; } static isComment(str) { if (str.indexOf("<!--") === 0 && str.indexOf("-->") > 3) { return true; } else { return false; } } openBodyDefault() { let tag = this.openBody(); tag.addStyleSizes("100%", "100%"); tag.addStyleMarginPadding("0em", "0em"); return tag; } openDivWithClass(value) { let element = this.openDiv(); element.addAttributeClass(value); return element; } openDivWithID(value) { let element = this.openDiv(); element.addAttributeId(value); return element; } openHTMLDefault() { let tag = this.openHtml(); tag.addStyleSizes("100%", "100%"); return tag; } openScriptDefault(src) { let tag = this.openScript(); tag.addAttributeType("text/javascript"); tag.addAttributeSrc(src); return tag; } openTag(tag) { if ((0, html_validation_1.isClosedTag)(tag.toLowerCase())) { return this.openTagUnsafe(tag); } return undefined; } openTagUnsafe(tag) { return this.addElement(new html_element_1.HTMLElement(this.getNewID(), tag.toLowerCase(), true, false)); } openTagWithClass(tag, value) { let element = this.openTag(tag); element.addAttributeClass(value); return element; } openTagWithID(tag, value) { let element = this.openTag(tag); element.addAttributeId(value); return element; } parse(sourceCode) { sourceCode = cleanSourceCode(sourceCode); let isScript = false; while (HTMLSourceCode.containsTags(sourceCode)) { let index1; if (isScript) { index1 = sourceCode.indexOf("</script>"); //console.log("SCRIPT: " + sourceCode.substring(0, index1).trim()); this.addContentUnsafe(sourceCode.substring(0, index1).trim()); sourceCode = sourceCode.substring(index1, sourceCode.length); isScript = false; } index1 = sourceCode.indexOf("<"); if (index1 > 0) { //console.log("CONTENT: " + sourceCode.substring(0, index1).trim()); this.addContent(sourceCode.substring(0, index1).trim()); sourceCode = sourceCode.substring(index1, sourceCode.length); } else { let index2 = sourceCode.indexOf(">") + 1; let tag = sourceCode.substring(0, index2); tag = sys.replaceAll(tag, "/>", ">"); if (HTMLSourceCode.isComment(tag)) { this.addComment(HTMLSourceCode.extractComment(tag)); } else { if (tag.toLowerCase().indexOf("doctype") > -1) { this.addDoctype(); } else { //console.log("TAG: " + tag); let name = tag.substring(1, tag.length - 1); if (name === "script") { isScript = true; } //console.log("TAG-NAME: " + name); let t = HTMLSourceCode.getTag(name); if (t !== undefined) { if (t.closed) { if (name.indexOf("/") === 0) { name = name.substring(name.indexOf("/") + 1, name.length); if (name.indexOf(" ") > -1) { name = name.substring(0, name.indexOf(" ")); } name = name.trim(); //console.log("CLOSE: " + name); this.closeTagUnsafe(name); } else { //console.log("OPEN: " + name); createElement(this.openTagUnsafe(extractName(name)), getParas(name)); } } else { //console.log("ADD: " + name); createElement(this.addTagUnsafe(extractName(name)), getParas(name)); } } } } sourceCode = sourceCode.substring(index2, sourceCode.length); } } sourceCode = sourceCode.trim(); if (sourceCode.length > 0) { this.addContent(sourceCode); } //console.log("sourceCode: " + sourceCode); //SubFunctions function cleanSourceCode(sourceCode) { sourceCode = sys.removeBreaksAndTabs(sourceCode); sourceCode = sys.removeDoubleSpaces(sourceCode); return sourceCode.trim(); } function createElement(tag, paras) { for (let p of paras) { //console.log("PARA: " + p); if (p.indexOf("=") < 0) { //console.log("PARA1: " + p); tag.addAttribute(p); } else { let split = p.split("="); //console.log("PARA2: " + split[0] + " || " + split[1]); tag.addAttribute(split[0].toLowerCase().trim(), sys.removeAll(split[1], "\"").trim()); } } //console.log("TTT: " + tag.attributes.length); return tag; } function extractName(str) { str = str.trim(); if (str.indexOf(" ") < 0) { return str; } else { return str.substring(0, str.indexOf(" ")); } } function getParas(str) { str = str.trim(); let paras = []; if (str.indexOf(" ") > -1) { str = str.substring(str.indexOf(" ") + 1, str.length); //console.log("GP: " + str); if (str.indexOf("\" ") < 0) { paras.push(str); } else { paras = str.split("\" "); } //paras = str.split(" "); //paras.shift(); } return paras; } } //Get-Methods get ids() { return this._ids; } get sc() { return this._sc; } //Set-Methods set ids(value) { this._ids = value; } set sc(values) { this._sc = values; } //Generated-Methods addArea() { return this.addTagUnsafe("area"); } addBase() { return this.addTagUnsafe("base"); } addEmbed() { return this.addTagUnsafe("embed"); } addHr() { return this.addTagUnsafe("hr"); } addImg() { return this.addTagUnsafe("img"); } addInput() { return this.addTagUnsafe("input"); } addLink() { return this.addTagUnsafe("link"); } addMeta() { return this.addTagUnsafe("meta"); } addParam() { return this.addTagUnsafe("param"); } addTrack() { return this.addTagUnsafe("track"); } addWbr() { return this.addTagUnsafe("wbr"); } closeA() { return this.closeTagUnsafe("a"); } closeAbbr() { return this.closeTagUnsafe("abbr"); } closeAddress() { return this.closeTagUnsafe("address"); } closeArticle() { return this.closeTagUnsafe("article"); } closeAside() { return this.closeTagUnsafe("aside"); } closeAudio() { return this.closeTagUnsafe("audio"); } closeB() { return this.closeTagUnsafe("b"); } closeBdi() { return this.closeTagUnsafe("bdi"); } closeBdo() { return this.closeTagUnsafe("bdo"); } closeBlockquote() { return this.closeTagUnsafe("blockquote"); } closeBody() { return this.closeTagUnsafe("body"); } closeBr() { return this.closeTagUnsafe("br"); } closeButton() { return this.closeTagUnsafe("button"); } closeCanvas() { return this.closeTagUnsafe("canvas"); } closeCaption() { return this.closeTagUnsafe("caption"); } closeCite() { return this.closeTagUnsafe("cite"); } closeCode() { return this.closeTagUnsafe("code"); } closeCol() { return this.closeTagUnsafe("col"); } closeColgroup() { return this.closeTagUnsafe("colgroup"); } closeData() { return this.closeTagUnsafe("data"); } closeDatalist() { return this.closeTagUnsafe("datalist"); } closeDd() { return this.closeTagUnsafe("dd"); } closeDel() { return this.closeTagUnsafe("del"); } closeDetails() { return this.closeTagUnsafe("details"); } closeDfn() { return this.closeTagUnsafe("dfn"); } closeDialog() { return this.closeTagUnsafe("dialog"); } closeDiv() { return this.closeTagUnsafe("div"); } closeDl() { return this.closeTagUnsafe("dl"); } closeDt() { return this.closeTagUnsafe("dt"); } closeEm() { return this.closeTagUnsafe("em"); } closeFieldset() { return this.closeTagUnsafe("fieldset"); } closeFigcaption() { return this.closeTagUnsafe("figcaption"); } closeFigure() { return this.closeTagUnsafe("figure"); } closeFooter() { return this.closeTagUnsafe("footer"); } closeForm() { return this.closeTagUnsafe("form"); } closeH1() { return this.closeTagUnsafe("h1"); } closeHead() { return this.closeTagUnsafe("head"); } closeHeader() { return this.closeTagUnsafe("header"); } closeHtml() { return this.closeTagUnsafe("html"); } closeI() { return this.closeTagUnsafe("i"); } closeIframe() { return this.closeTagUnsafe("iframe"); } closeIns() { return this.closeTagUnsafe("ins"); } closeKbd() { return this.closeTagUnsafe("kbd"); } closeLabel() { return this.closeTagUnsafe("label"); } closeLegend() { return this.closeTagUnsafe("legend"); } closeLi() { return this.closeTagUnsafe("li"); } closeMain() { return this.closeTagUnsafe("main"); } closeMap() { return this.closeTagUnsafe("map"); } closeMark() { return this.closeTagUnsafe("mark"); } closeMeter() { return this.closeTagUnsafe("meter"); } closeNav() { return this.closeTagUnsafe("nav"); } closeNoscript() { return this.closeTagUnsafe("noscript"); } closeObject() { return this.closeTagUnsafe("object"); } closeOl() { return this.closeTagUnsafe("ol"); } closeOptgroup() { return this.closeTagUnsafe("optgroup"); } closeOption() { return this.closeTagUnsafe("option"); } closeOutput() { return this.closeTagUnsafe("output"); } closeP() { return this.closeTagUnsafe("p"); } closePicture() { return this.closeTagUnsafe("picture"); } closePre() { return this.closeTagUnsafe("pre"); } closeProgress() { return this.closeTagUnsafe("progress"); } closeQ() { return this.closeTagUnsafe("q"); } closeRp() { return this.closeTagUnsafe("rp"); } closeRt() { return this.closeTagUnsafe("rt"); } closeRuby() { return this.closeTagUnsafe("ruby"); } closeS() { return this.closeTagUnsafe("s"); } closeSamp() { return this.closeTagUnsafe("samp"); } closeScript() { return this.closeTagUnsafe("script"); } closeSection() { return this.closeTagUnsafe("section"); } closeSelect() { return this.closeTagUnsafe("select"); } closeSmall() { return this.closeTagUnsafe("small"); } closeSource() { return this.closeTagUnsafe("source"); } closeSpan() { return this.closeTagUnsafe("span"); } closeStrong() { return this.closeTagUnsafe("strong"); } closeStyle() { return this.closeTagUnsafe("style"); } closeSub() { return this.closeTagUnsafe("sub"); } closeSummary() { return this.closeTagUnsafe("summary"); } closeSup() { return this.closeTagUnsafe("sup"); } closeSvg() { return this.closeTagUnsafe("svg"); } closeTable() { return this.closeTagUnsafe("table"); } closeTbody() { return this.closeTagUnsafe("tbody"); } closeTd() { return this.closeTagUnsafe("td"); } closeTemplate() { return this.closeTagUnsafe("template"); } closeTextarea() { return this.closeTagUnsafe("textarea"); } closeTfoot() { return this.closeTagUnsafe("tfoot"); } closeTh() { return this.closeTagUnsafe("th"); } closeThead() { return this.closeTagUnsafe("thead"); } closeTime() { return this.closeTagUnsafe("time"); } closeTitle() { return this.closeTagUnsafe("title"); } closeTr() { return this.closeTagUnsafe("tr"); } closeU() { return this.closeTagUnsafe("u"); } closeUl() { return this.closeTagUnsafe("ul"); } closeVar() { return this.closeTagUnsafe("var"); } closeVideo() { return this.closeTagUnsafe("video"); } openA() { return this.openTagUnsafe("a"); } openAbbr() { return this.openTagUnsafe("abbr"); } openAddress() { return this.openTagUnsafe("address"); } openArticle() { return this.openTagUnsafe("article"); } openAside() { return this.openTagUnsafe("aside"); } openAudio() { return this.openTagUnsafe("audio"); } openB() { return this.openTagUnsafe("b"); } openBdi() { return this.openTagUnsafe("bdi"); } openBdo() { return this.openTagUnsafe("bdo"); } openBlockquote() { return this.openTagUnsafe("blockquote"); } openBody() { return this.openTagUnsafe("body"); } openBr() { return this.openTagUnsafe("br"); } openButton() { return this.openTagUnsafe("button"); } openCanvas() { return this.openTagUnsafe("canvas"); } openCaption() { return this.openTagUnsafe("caption"); } openCite() { return this.openTagUnsafe("cite"); } openCode() { return this.openTagUnsafe("code"); } openCol() { return this.openTagUnsafe("col"); } openColgroup() { return this.openTagUnsafe("colgroup"); } openData() { return this.openTagUnsafe("data"); } openDatalist() { return this.openTagUnsafe("datalist"); } openDd() { return this.openTagUnsafe("dd"); } openDel() { return this.openTagUnsafe("del"); } openDetails() { return this.openTagUnsafe("details"); } openDfn() { return this.openTagUnsafe("dfn"); } openDialog() { return this.openTagUnsafe("dialog"); } openDiv() { return this.openTagUnsafe("div"); } openDl() { return this.openTagUnsafe("dl"); } openDt() { return this.openTagUnsafe("dt"); } openEm() { return this.openTagUnsafe("em"); } openFieldset() { return this.openTagUnsafe("fieldset"); } openFigcaption() { return this.openTagUnsafe("figcaption"); } openFigure() { return this.openTagUnsafe("figure"); } openFooter() { return this.openTagUnsafe("footer"); } openForm() { return this.openTagUnsafe("form"); } openH1() { return this.openTagUnsafe("h1"); } openHead() { return this.openTagUnsafe("head"); } openHeader() { return this.openTagUnsafe("header"); } openHtml() { return this.openTagUnsafe("html"); } openI() { return this.openTagUnsafe("i"); } openIframe() { return this.openTagUnsafe("iframe"); } openIns() { return this.openTagUnsafe("ins"); } openKbd() { return this.openTagUnsafe("kbd"); } openLabel() { return this.openTagUnsafe("label"); } openLegend() { return this.openTagUnsafe("legend"); } openLi() { return this.openTagUnsafe("li"); } openMain() { return this.openTagUnsafe("main"); } openMap() { return this.openTagUnsafe("map"); } openMark() { return this.openTagUnsafe("mark"); } openMeter() { return this.openTagUnsafe("meter"); } openNav() { return this.openTagUnsafe("nav"); } openNoscript() { return this.openTagUnsafe("noscript"); } openObject() { return this.openTagUnsafe("object"); } openOl() { return this.openTagUnsafe("ol"); } openOptgroup() { return this.openTagUnsafe("optgroup"); } openOption() { return this.openTagUnsafe("option"); } openOutput() { return this.openTagUnsafe("output"); } openP() { return this.openTagUnsafe("p"); } openPicture() { return this.openTagUnsafe("picture"); } openPre() { return this.openTagUnsafe("pre"); } openProgress() { return this.openTagUnsafe("progress"); } openQ() { return this.openTagUnsafe("q"); } openRp() { return this.openTagUnsafe("rp"); } openRt() { return this.openTagUnsafe("rt"); } openRuby() { return this.openTagUnsafe("ruby"); } openS() { return this.openTagUnsafe("s"); } openSamp() { return this.openTagUnsafe("samp"); } openScript() { return this.openTagUnsafe("script"); } openSection() { return this.openTagUnsafe("section"); } openSelect() { return this.openTagUnsafe("select"); } openSmall() { return this.openTagUnsafe("small"); } openSource() { return this.openTagUnsafe("source"); } openSpan() { return this.openTagUnsafe("span"); } openStrong() { return this.openTagUnsafe("strong"); } openStyle() { return this.openTagUnsafe("style"); } openSub() { return this.openTagUnsafe("sub"); } openSummary() { return this.openTagUnsafe("summary"); } openSup() { return this.openTagUnsafe("sup"); } openSvg() { return this.openTagUnsafe("svg"); } openTable() { return this.openTagUnsafe("table"); } openTbody() { return this.openTagUnsafe("tbody"); } openTd() { return this.openTagUnsafe("td"); } openTemplate() { return this.openTagUnsafe("template"); } openTextarea() { return this.openTagUnsafe("textarea"); } openTfoot() { return this.openTagUnsafe("tfoot"); } openTh() { return this.openTagUnsafe("th"); } openThead() { return this.openTagUnsafe("thead"); } openTime() { return this.openTagUnsafe("time"); } openTitle() { return this.openTagUnsafe("title"); } openTr() { return this.openTagUnsafe("tr"); } openU() { return this.openTagUnsafe("u"); } openUl() { return this.openTagUnsafe("ul"); } openVar() { return this.openTagUnsafe("var"); } openVideo() { return this.openTagUnsafe("video"); } } exports.HTMLSourceCode = HTMLSourceCode; //# sourceMappingURL=html_sourcecode.js.map