2025/2/8第一次更新

This commit is contained in:
爱吃咸鱼小猫咪
2025-02-08 18:50:38 +08:00
commit d7af560866
26519 changed files with 5046029 additions and 0 deletions
@@ -0,0 +1,231 @@
"use strict";
const components_firstui_fuiParse_utils_wxDiscode = require("./wxDiscode.js");
const components_firstui_fuiParse_utils_htmlparser = require("./htmlparser.js");
var __placeImgeUrlHttps = "https";
var __emojisReg = "";
var __emojisBaseSrc = "";
var __emojis = {};
makeMap(
"area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr"
);
var block = makeMap(
"br,a,code,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video"
);
var inline = makeMap(
"abbr,acronym,applet,b,basefont,bdo,big,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var"
);
var closeSelf = makeMap("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");
makeMap(
"checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"
);
makeMap("wxxxcode-style,script,style,view,scroll-view,block");
function makeMap(str) {
var obj = {}, items = str.split(",");
for (var i = 0; i < items.length; i++)
obj[items[i]] = true;
return obj;
}
function removeDOCTYPE(html) {
return html.replace(/<\?xml.*\?>\n/, "").replace(/<.*!doctype.*\>\n/, "").replace(/<.*!DOCTYPE.*\>\n/, "");
}
function trimHtml(html) {
return html.replace(/<!--.*?-->/ig, "").replace(/[ ]+</ig, "<");
}
function removeInvalidTags(html) {
return html.replace(/\<head(.|\n)*<\/head\>/ig, "").replace(/\<title(.|\n)*<\/title\>/ig, "").replace(/\<script(.|\n)*<\/script\>/ig, "").replace(/\<meta(.|\n)*<\/meta\>/ig, "").replace(/\<style(.|\n)*<\/style\>/gm, "");
}
function html2json(html, bindName) {
html = removeDOCTYPE(html);
html = removeInvalidTags(html);
html = trimHtml(html);
html = components_firstui_fuiParse_utils_wxDiscode.wxDiscode.strDiscode(html);
var bufArray = [];
var results = {
node: bindName,
nodes: [],
images: [],
imageUrls: []
};
var index = 0;
components_firstui_fuiParse_utils_htmlparser.HTMLParser(html, {
start: function(tag, attrs, unary, content) {
var node = {
node: "element",
tag
};
content && (node["content"] = content);
if (bufArray.length === 0) {
node.index = index.toString();
index += 1;
} else {
var parent = bufArray[0];
if (parent.nodes === void 0) {
parent.nodes = [];
}
node.index = parent.index + "." + parent.nodes.length;
}
if (block[tag]) {
node.tagType = "block";
} else if (inline[tag]) {
node.tagType = "inline";
} else if (closeSelf[tag]) {
node.tagType = "closeSelf";
}
if (attrs.length !== 0) {
node.attr = attrs.reduce(function(pre, attr) {
var name = attr.name;
var value2 = attr.value;
if (name == "class") {
node.classStr = value2;
}
if (name == "style") {
node.styleStr = value2;
}
if (value2.match(/ /)) {
value2 = value2.split(" ");
}
if (pre[name]) {
if (Array.isArray(pre[name])) {
pre[name].push(value2);
} else {
pre[name] = [pre[name], value2];
}
} else {
pre[name] = value2;
}
return pre;
}, {});
}
if (node.tag === "img") {
node.imgIndex = results.images.length;
var imgUrl = node.attr.src;
if (imgUrl[0] == "") {
imgUrl.splice(0, 1);
}
imgUrl = components_firstui_fuiParse_utils_wxDiscode.wxDiscode.urlToHttpUrl(imgUrl, __placeImgeUrlHttps);
node.attr.src = imgUrl;
node.from = bindName;
results.images.push(node);
results.imageUrls.push(imgUrl);
}
if (node.tag === "font") {
var fontSize = [
"x-small",
"small",
"medium",
"large",
"x-large",
"xx-large",
"-webkit-xxx-large"
];
var styleAttrs = {
"color": "color",
"face": "font-family",
"size": "font-size"
};
if (!node.attr.style)
node.attr.style = [];
if (!node.styleStr)
node.styleStr = "";
for (var key in styleAttrs) {
if (node.attr[key]) {
var value = key === "size" ? fontSize[node.attr[key] - 1] : node.attr[key];
node.attr.style.push(styleAttrs[key]);
node.attr.style.push(value);
node.styleStr += styleAttrs[key] + ": " + value + ";";
}
}
}
if (node.tag === "source") {
results.source = node.attr.src;
}
if (unary) {
var parent = bufArray[0] || results;
if (parent.nodes === void 0) {
parent.nodes = [];
}
parent.nodes.push(node);
} else {
bufArray.unshift(node);
}
},
end: function(tag) {
var node = bufArray.shift();
if (node.tag !== tag)
console.error("invalid state: mismatch end tag");
if (node.tag === "video" && results.source) {
node.attr.src = results.source;
delete results.source;
}
if (bufArray.length === 0) {
results.nodes.push(node);
} else {
var parent = bufArray[0];
if (parent.nodes === void 0) {
parent.nodes = [];
}
parent.nodes.push(node);
}
},
chars: function(text) {
var node = {
node: "text",
text,
textArray: transEmojiStr(text)
};
if (bufArray.length === 0) {
node.index = index.toString();
index += 1;
results.nodes.push(node);
} else {
var parent = bufArray[0];
if (parent.nodes === void 0) {
parent.nodes = [];
}
node.index = parent.index + "." + parent.nodes.length;
parent.nodes.push(node);
}
},
comment: function(text) {
}
});
return results;
}
function transEmojiStr(str) {
var emojiObjs = [];
if (__emojisReg.length == 0 || !__emojis) {
var emojiObj = {};
emojiObj.node = "text";
emojiObj.text = str;
array = [emojiObj];
return array;
}
str = str.replace(/\[([^\[\]]+)\]/g, ":$1:");
var eReg = new RegExp("[:]");
var array = str.split(eReg);
for (var i = 0; i < array.length; i++) {
var ele = array[i];
var emojiObj = {};
if (__emojis[ele]) {
emojiObj.node = "element";
emojiObj.tag = "emoji";
emojiObj.text = __emojis[ele];
emojiObj.baseSrc = __emojisBaseSrc;
} else {
emojiObj.node = "text";
emojiObj.text = ele;
}
emojiObjs.push(emojiObj);
}
return emojiObjs;
}
function emojisInit(reg = "", baseSrc = "/fuiParse/emojis/", emojis) {
__emojisReg = reg;
__emojisBaseSrc = baseSrc;
__emojis = emojis;
}
const HtmlToJson = {
html2json,
emojisInit
};
exports.HtmlToJson = HtmlToJson;
@@ -0,0 +1,129 @@
"use strict";
var startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/, endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/, attr = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
var codeTag = /^<code.*?>([\s\S]*?)<\/code>/;
var empty = makeMap("area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr");
var block = makeMap("a,address,code,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video");
var inline = makeMap("abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var");
var closeSelf = makeMap("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");
var fillAttrs = makeMap("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected");
var special = makeMap("wxxxcode-style,script,style,view,scroll-view,block");
var codeContent = "";
function HTMLParser(html, handler) {
var index, chars, match, stack = [], last = html;
stack.last = function() {
return this[this.length - 1];
};
while (html) {
chars = true;
if (!stack.last() || !special[stack.last()]) {
if (html.indexOf("<!--") == 0) {
index = html.indexOf("-->");
if (index >= 0) {
if (handler.comment)
handler.comment(html.substring(4, index));
html = html.substring(index + 3);
chars = false;
}
} else if (html.indexOf("</") == 0) {
match = html.match(endTag);
if (match) {
html = html.substring(match[0].length);
match[0].replace(endTag, parseEndTag);
chars = false;
}
} else if (html.indexOf("<") == 0) {
match = html.match(startTag);
if (match) {
var tagName = match[1];
if (tagName === "code") {
var codeTagMatch = html.match(codeTag);
codeContent = codeTagMatch[1] || "";
}
html = html.substring(match[0].length);
match[0].replace(startTag, parseStartTag);
chars = false;
}
}
if (chars) {
index = html.indexOf("<");
var text = "";
while (index === 0) {
text += "<";
html = html.substring(1);
index = html.indexOf("<");
}
text += index < 0 ? html : html.substring(0, index);
html = index < 0 ? "" : html.substring(index);
if (handler.chars && text.trim() !== "") {
handler.chars(text);
}
}
} else {
html = html.replace(new RegExp("([\\s\\S]*?)</" + stack.last() + "[^>]*>"), function(all, text2) {
text2 = text2.replace(/<!--([\s\S]*?)-->|<!\[CDATA\[([\s\S]*?)]]>/g, "$1$2");
if (handler.chars && text2.trim() !== "")
handler.chars(text2);
return "";
});
parseEndTag("", stack.last());
}
if (html == last)
throw "Parse Error: " + html;
last = html;
}
parseEndTag();
function parseStartTag(tag, tagName2, rest, unary) {
tagName2 = tagName2.toLowerCase();
if (block[tagName2]) {
while (stack.last() && inline[stack.last()]) {
parseEndTag("", stack.last());
}
}
if (closeSelf[tagName2] && stack.last() == tagName2) {
parseEndTag("", tagName2);
}
unary = empty[tagName2] || !!unary;
if (!unary)
stack.push(tagName2);
if (handler.start) {
var attrs = [];
rest.replace(attr, function(match2, name) {
var value = arguments[2] ? arguments[2] : arguments[3] ? arguments[3] : arguments[4] ? arguments[4] : fillAttrs[name] ? name : "";
attrs.push({
name,
value,
escaped: value.replace(/(^|[^\\])"/g, '$1\\"')
//"
});
});
if (handler.start) {
var tagContent = codeContent || "";
handler.start(tagName2, attrs, unary, tagContent);
codeContent = "";
}
}
}
function parseEndTag(tag, tagName2) {
if (!tagName2)
var pos = 0;
else {
tagName2 = tagName2.toLowerCase();
for (var pos = stack.length - 1; pos >= 0; pos--)
if (stack[pos] == tagName2)
break;
}
if (pos >= 0) {
for (var i = stack.length - 1; i >= pos; i--)
if (handler.end)
handler.end(stack[i]);
stack.length = pos;
}
}
}
function makeMap(str) {
var obj = {}, items = str.split(",");
for (var i = 0; i < items.length; i++)
obj[items[i]] = true;
return obj;
}
exports.HTMLParser = HTMLParser;
@@ -0,0 +1,47 @@
"use strict";
const common_vendor = require("../../../../common/vendor.js");
let windowWidth = 0;
let windowHeight = 0;
common_vendor.index.getSystemInfo({
success(res) {
windowWidth = res.windowWidth;
windowHeight = res.windowHeight;
}
});
const getSystemInfo = () => {
return [windowWidth, windowHeight];
};
const bindInstance = () => {
let instance = {};
return {
/**
* 提供键名,绑定对象值
*/
set: (bindName, data = null) => {
if (!instance[bindName]) {
instance[bindName] = data;
}
return instance[bindName] || {};
},
get: (bindName) => {
return instance[bindName] || {};
},
/**
* 清除实例对象的所有缓存值
*/
clear: () => {
instance = {};
},
/**
* 清楚实例对象特定的键
*/
remove: (bindName) => {
instance[bindName] && delete instance[bindName];
}
};
};
const util = {
getSystemInfo,
cacheInstance: bindInstance()
};
exports.util = util;
@@ -0,0 +1,184 @@
"use strict";
function strNumDiscode(str) {
str = str.replace(/&forall;/g, "∀");
str = str.replace(/&part;/g, "∂");
str = str.replace(/&exists;/g, "∃");
str = str.replace(/&empty;/g, "∅");
str = str.replace(/&nabla;/g, "∇");
str = str.replace(/&isin;/g, "∈");
str = str.replace(/&notin;/g, "∉");
str = str.replace(/&ni;/g, "∋");
str = str.replace(/&prod;/g, "∏");
str = str.replace(/&sum;/g, "∑");
str = str.replace(/&minus;/g, "");
str = str.replace(/&lowast;/g, "");
str = str.replace(/&radic;/g, "√");
str = str.replace(/&prop;/g, "∝");
str = str.replace(/&infin;/g, "∞");
str = str.replace(/&ang;/g, "∠");
str = str.replace(/&and;/g, "∧");
str = str.replace(/&or;/g, "");
str = str.replace(/&cap;/g, "∩");
str = str.replace(/&cap;/g, "");
str = str.replace(/&int;/g, "∫");
str = str.replace(/&there4;/g, "∴");
str = str.replace(/&sim;/g, "");
str = str.replace(/&cong;/g, "≅");
str = str.replace(/&asymp;/g, "≈");
str = str.replace(/&ne;/g, "≠");
str = str.replace(/&le;/g, "≤");
str = str.replace(/&ge;/g, "≥");
str = str.replace(/&sub;/g, "⊂");
str = str.replace(/&sup;/g, "⊃");
str = str.replace(/&nsub;/g, "⊄");
str = str.replace(/&sube;/g, "⊆");
str = str.replace(/&supe;/g, "⊇");
str = str.replace(/&oplus;/g, "⊕");
str = str.replace(/&otimes;/g, "⊗");
str = str.replace(/&perp;/g, "⊥");
str = str.replace(/&sdot;/g, "⋅");
return str;
}
function strGreeceDiscode(str) {
str = str.replace(/&Alpha;/g, "Α");
str = str.replace(/&Beta;/g, "Β");
str = str.replace(/&Gamma;/g, "Γ");
str = str.replace(/&Delta;/g, "Δ");
str = str.replace(/&Epsilon;/g, "Ε");
str = str.replace(/&Zeta;/g, "Ζ");
str = str.replace(/&Eta;/g, "Η");
str = str.replace(/&Theta;/g, "Θ");
str = str.replace(/&Iota;/g, "Ι");
str = str.replace(/&Kappa;/g, "Κ");
str = str.replace(/&Lambda;/g, "Λ");
str = str.replace(/&Mu;/g, "Μ");
str = str.replace(/&Nu;/g, "Ν");
str = str.replace(/&Xi;/g, "Ν");
str = str.replace(/&Omicron;/g, "Ο");
str = str.replace(/&Pi;/g, "Π");
str = str.replace(/&Rho;/g, "Ρ");
str = str.replace(/&Sigma;/g, "Σ");
str = str.replace(/&Tau;/g, "Τ");
str = str.replace(/&Upsilon;/g, "Υ");
str = str.replace(/&Phi;/g, "Φ");
str = str.replace(/&Chi;/g, "Χ");
str = str.replace(/&Psi;/g, "Ψ");
str = str.replace(/&Omega;/g, "Ω");
str = str.replace(/&alpha;/g, "α");
str = str.replace(/&beta;/g, "β");
str = str.replace(/&gamma;/g, "γ");
str = str.replace(/&delta;/g, "δ");
str = str.replace(/&epsilon;/g, "ε");
str = str.replace(/&zeta;/g, "ζ");
str = str.replace(/&eta;/g, "η");
str = str.replace(/&theta;/g, "θ");
str = str.replace(/&iota;/g, "ι");
str = str.replace(/&kappa;/g, "κ");
str = str.replace(/&lambda;/g, "λ");
str = str.replace(/&mu;/g, "μ");
str = str.replace(/&nu;/g, "ν");
str = str.replace(/&xi;/g, "ξ");
str = str.replace(/&omicron;/g, "ο");
str = str.replace(/&pi;/g, "π");
str = str.replace(/&rho;/g, "ρ");
str = str.replace(/&sigmaf;/g, "ς");
str = str.replace(/&sigma;/g, "σ");
str = str.replace(/&tau;/g, "τ");
str = str.replace(/&upsilon;/g, "υ");
str = str.replace(/&phi;/g, "φ");
str = str.replace(/&chi;/g, "χ");
str = str.replace(/&psi;/g, "ψ");
str = str.replace(/&omega;/g, "ω");
str = str.replace(/&thetasym;/g, "ϑ");
str = str.replace(/&upsih;/g, "ϒ");
str = str.replace(/&piv;/g, "ϖ");
str = str.replace(/&middot;/g, "·");
return str;
}
function strcharacterDiscode(str) {
str = str.replace(/&nbsp;/g, " ");
str = str.replace(/&quot;/g, "'");
str = str.replace(/&amp;/g, "&");
str = str.replace(/&lt;/g, "<");
str = str.replace(/&gt;/g, ">");
str = str.replace(/&#8226;/g, "•");
return str;
}
function strOtherDiscode(str) {
str = str.replace(/&OElig;/g, "Œ");
str = str.replace(/&oelig;/g, "œ");
str = str.replace(/&Scaron;/g, "Š");
str = str.replace(/&scaron;/g, "š");
str = str.replace(/&Yuml;/g, "Ÿ");
str = str.replace(/&fnof;/g, "ƒ");
str = str.replace(/&circ;/g, "ˆ");
str = str.replace(/&tilde;/g, "˜");
str = str.replace(/&ensp;/g, "");
str = str.replace(/&emsp;/g, "");
str = str.replace(/&thinsp;/g, "");
str = str.replace(/&zwnj;/g, "");
str = str.replace(/&zwj;/g, "");
str = str.replace(/&lrm;/g, "");
str = str.replace(/&rlm;/g, "");
str = str.replace(/&ndash;/g, "");
str = str.replace(/&mdash;/g, "—");
str = str.replace(/&lsquo;/g, "");
str = str.replace(/&rsquo;/g, "");
str = str.replace(/&sbquo;/g, "");
str = str.replace(/&ldquo;/g, "“");
str = str.replace(/&rdquo;/g, "”");
str = str.replace(/&bdquo;/g, "„");
str = str.replace(/&dagger;/g, "†");
str = str.replace(/&Dagger;/g, "‡");
str = str.replace(/&bull;/g, "•");
str = str.replace(/&hellip;/g, "…");
str = str.replace(/&permil;/g, "‰");
str = str.replace(/&prime;/g, "");
str = str.replace(/&Prime;/g, "″");
str = str.replace(/&lsaquo;/g, "");
str = str.replace(/&rsaquo;/g, "");
str = str.replace(/&oline;/g, "‾");
str = str.replace(/&euro;/g, "€");
str = str.replace(/&trade;/g, "™");
str = str.replace(/&larr;/g, "←");
str = str.replace(/&uarr;/g, "↑");
str = str.replace(/&rarr;/g, "→");
str = str.replace(/&darr;/g, "↓");
str = str.replace(/&harr;/g, "↔");
str = str.replace(/&crarr;/g, "↵");
str = str.replace(/&lceil;/g, "⌈");
str = str.replace(/&rceil;/g, "⌉");
str = str.replace(/&lfloor;/g, "⌊");
str = str.replace(/&rfloor;/g, "⌋");
str = str.replace(/&loz;/g, "◊");
str = str.replace(/&spades;/g, "♠");
str = str.replace(/&clubs;/g, "♣");
str = str.replace(/&hearts;/g, "♥");
str = str.replace(/&diams;/g, "♦");
str = str.replace(/&#39;/g, "'");
return str;
}
function strMoreDiscode(str) {
return str;
}
function strDiscode(str) {
str = strNumDiscode(str);
str = strGreeceDiscode(str);
str = strcharacterDiscode(str);
str = strOtherDiscode(str);
str = strMoreDiscode(str);
return str;
}
function urlToHttpUrl(url, rep) {
var patt1 = new RegExp("^//");
var result = patt1.test(url);
if (result) {
url = rep + ":" + url;
}
return url;
}
const wxDiscode = {
strDiscode,
urlToHttpUrl
};
exports.wxDiscode = wxDiscode;