2018-05-16 19:10:50 +02:00
|
|
|
/**
|
|
|
|
* @author n1474335 [n1474335@gmail.com]
|
|
|
|
* @copyright Crown Copyright 2016
|
|
|
|
* @license Apache-2.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
import Operation from "../Operation";
|
|
|
|
import Utils from "../Utils";
|
|
|
|
|
|
|
|
/**
|
|
|
|
* To HTML Entity operation
|
|
|
|
*/
|
|
|
|
class ToHTMLEntity extends Operation {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* ToHTMLEntity constructor
|
|
|
|
*/
|
|
|
|
constructor() {
|
|
|
|
super();
|
|
|
|
|
|
|
|
this.name = "To HTML Entity";
|
|
|
|
this.module = "Default";
|
|
|
|
this.description = "Converts characters to HTML entities<br><br>e.g. <code>&</code> becomes <code>&<span>amp;</span></code>";
|
2018-08-21 20:07:13 +02:00
|
|
|
this.infoURL = "https://wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references";
|
2018-05-16 19:10:50 +02:00
|
|
|
this.inputType = "string";
|
|
|
|
this.outputType = "string";
|
|
|
|
this.args = [
|
|
|
|
{
|
|
|
|
"name": "Convert all characters",
|
|
|
|
"type": "boolean",
|
|
|
|
"value": false
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"name": "Convert to",
|
|
|
|
"type": "option",
|
|
|
|
"value": ["Named entities where possible", "Numeric entities", "Hex entities"]
|
|
|
|
}
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param {string} input
|
|
|
|
* @param {Object[]} args
|
|
|
|
* @returns {string}
|
|
|
|
*/
|
|
|
|
run(input, args) {
|
|
|
|
const convertAll = args[0],
|
|
|
|
numeric = args[1] === "Numeric entities",
|
|
|
|
hexa = args[1] === "Hex entities";
|
|
|
|
|
|
|
|
const charcodes = Utils.strToCharcode(input);
|
|
|
|
let output = "";
|
|
|
|
|
|
|
|
for (let i = 0; i < charcodes.length; i++) {
|
|
|
|
if (convertAll && numeric) {
|
|
|
|
output += "&#" + charcodes[i] + ";";
|
|
|
|
} else if (convertAll && hexa) {
|
|
|
|
output += "&#x" + Utils.hex(charcodes[i]) + ";";
|
|
|
|
} else if (convertAll) {
|
|
|
|
output += byteToEntity[charcodes[i]] || "&#" + charcodes[i] + ";";
|
|
|
|
} else if (numeric) {
|
|
|
|
if (charcodes[i] > 255 || byteToEntity.hasOwnProperty(charcodes[i])) {
|
|
|
|
output += "&#" + charcodes[i] + ";";
|
|
|
|
} else {
|
|
|
|
output += Utils.chr(charcodes[i]);
|
|
|
|
}
|
|
|
|
} else if (hexa) {
|
|
|
|
if (charcodes[i] > 255 || byteToEntity.hasOwnProperty(charcodes[i])) {
|
|
|
|
output += "&#x" + Utils.hex(charcodes[i]) + ";";
|
|
|
|
} else {
|
|
|
|
output += Utils.chr(charcodes[i]);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
output += byteToEntity[charcodes[i]] || (
|
|
|
|
charcodes[i] > 255 ?
|
|
|
|
"&#" + charcodes[i] + ";" :
|
|
|
|
Utils.chr(charcodes[i])
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return output;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Lookup table to translate byte values to their HTML entity codes.
|
|
|
|
*/
|
|
|
|
const byteToEntity = {
|
|
|
|
34: """,
|
|
|
|
38: "&",
|
|
|
|
39: "'",
|
|
|
|
60: "<",
|
|
|
|
62: ">",
|
|
|
|
160: " ",
|
|
|
|
161: "¡",
|
|
|
|
162: "¢",
|
|
|
|
163: "£",
|
|
|
|
164: "¤",
|
|
|
|
165: "¥",
|
|
|
|
166: "¦",
|
|
|
|
167: "§",
|
|
|
|
168: "¨",
|
|
|
|
169: "©",
|
|
|
|
170: "ª",
|
|
|
|
171: "«",
|
|
|
|
172: "¬",
|
|
|
|
173: "­",
|
|
|
|
174: "®",
|
|
|
|
175: "¯",
|
|
|
|
176: "°",
|
|
|
|
177: "±",
|
|
|
|
178: "²",
|
|
|
|
179: "³",
|
|
|
|
180: "´",
|
|
|
|
181: "µ",
|
|
|
|
182: "¶",
|
|
|
|
183: "·",
|
|
|
|
184: "¸",
|
|
|
|
185: "¹",
|
|
|
|
186: "º",
|
|
|
|
187: "»",
|
|
|
|
188: "¼",
|
|
|
|
189: "½",
|
|
|
|
190: "¾",
|
|
|
|
191: "¿",
|
|
|
|
192: "À",
|
|
|
|
193: "Á",
|
|
|
|
194: "Â",
|
|
|
|
195: "Ã",
|
|
|
|
196: "Ä",
|
|
|
|
197: "Å",
|
|
|
|
198: "Æ",
|
|
|
|
199: "Ç",
|
|
|
|
200: "È",
|
|
|
|
201: "É",
|
|
|
|
202: "Ê",
|
|
|
|
203: "Ë",
|
|
|
|
204: "Ì",
|
|
|
|
205: "Í",
|
|
|
|
206: "Î",
|
|
|
|
207: "Ï",
|
|
|
|
208: "Ð",
|
|
|
|
209: "Ñ",
|
|
|
|
210: "Ò",
|
|
|
|
211: "Ó",
|
|
|
|
212: "Ô",
|
|
|
|
213: "Õ",
|
|
|
|
214: "Ö",
|
|
|
|
215: "×",
|
|
|
|
216: "Ø",
|
|
|
|
217: "Ù",
|
|
|
|
218: "Ú",
|
|
|
|
219: "Û",
|
|
|
|
220: "Ü",
|
|
|
|
221: "Ý",
|
|
|
|
222: "Þ",
|
|
|
|
223: "ß",
|
|
|
|
224: "à",
|
|
|
|
225: "á",
|
|
|
|
226: "â",
|
|
|
|
227: "ã",
|
|
|
|
228: "ä",
|
|
|
|
229: "å",
|
|
|
|
230: "æ",
|
|
|
|
231: "ç",
|
|
|
|
232: "è",
|
|
|
|
233: "é",
|
|
|
|
234: "ê",
|
|
|
|
235: "ë",
|
|
|
|
236: "ì",
|
|
|
|
237: "í",
|
|
|
|
238: "î",
|
|
|
|
239: "ï",
|
|
|
|
240: "ð",
|
|
|
|
241: "ñ",
|
|
|
|
242: "ò",
|
|
|
|
243: "ó",
|
|
|
|
244: "ô",
|
|
|
|
245: "õ",
|
|
|
|
246: "ö",
|
|
|
|
247: "÷",
|
|
|
|
248: "ø",
|
|
|
|
249: "ù",
|
|
|
|
250: "ú",
|
|
|
|
251: "û",
|
|
|
|
252: "ü",
|
|
|
|
253: "ý",
|
|
|
|
254: "þ",
|
|
|
|
255: "ÿ",
|
|
|
|
338: "Œ",
|
|
|
|
339: "œ",
|
|
|
|
352: "Š",
|
|
|
|
353: "š",
|
|
|
|
376: "Ÿ",
|
|
|
|
402: "ƒ",
|
|
|
|
710: "ˆ",
|
|
|
|
732: "˜",
|
|
|
|
913: "Α",
|
|
|
|
914: "Β",
|
|
|
|
915: "Γ",
|
|
|
|
916: "Δ",
|
|
|
|
917: "Ε",
|
|
|
|
918: "Ζ",
|
|
|
|
919: "Η",
|
|
|
|
920: "Θ",
|
|
|
|
921: "Ι",
|
|
|
|
922: "Κ",
|
|
|
|
923: "Λ",
|
|
|
|
924: "Μ",
|
|
|
|
925: "Ν",
|
|
|
|
926: "Ξ",
|
|
|
|
927: "Ο",
|
|
|
|
928: "Π",
|
|
|
|
929: "Ρ",
|
|
|
|
931: "Σ",
|
|
|
|
932: "Τ",
|
|
|
|
933: "Υ",
|
|
|
|
934: "Φ",
|
|
|
|
935: "Χ",
|
|
|
|
936: "Ψ",
|
|
|
|
937: "Ω",
|
|
|
|
945: "α",
|
|
|
|
946: "β",
|
|
|
|
947: "γ",
|
|
|
|
948: "δ",
|
|
|
|
949: "ε",
|
|
|
|
950: "ζ",
|
|
|
|
951: "η",
|
|
|
|
952: "θ",
|
|
|
|
953: "ι",
|
|
|
|
954: "κ",
|
|
|
|
955: "λ",
|
|
|
|
956: "μ",
|
|
|
|
957: "ν",
|
|
|
|
958: "ξ",
|
|
|
|
959: "ο",
|
|
|
|
960: "π",
|
|
|
|
961: "ρ",
|
|
|
|
962: "ς",
|
|
|
|
963: "σ",
|
|
|
|
964: "τ",
|
|
|
|
965: "υ",
|
|
|
|
966: "φ",
|
|
|
|
967: "χ",
|
|
|
|
968: "ψ",
|
|
|
|
969: "ω",
|
|
|
|
977: "ϑ",
|
|
|
|
978: "ϒ",
|
|
|
|
982: "ϖ",
|
|
|
|
8194: " ",
|
|
|
|
8195: " ",
|
|
|
|
8201: " ",
|
|
|
|
8204: "‌",
|
|
|
|
8205: "‍",
|
|
|
|
8206: "‎",
|
|
|
|
8207: "‏",
|
|
|
|
8211: "–",
|
|
|
|
8212: "—",
|
|
|
|
8216: "‘",
|
|
|
|
8217: "’",
|
|
|
|
8218: "‚",
|
|
|
|
8220: "“",
|
|
|
|
8221: "”",
|
|
|
|
8222: "„",
|
|
|
|
8224: "†",
|
|
|
|
8225: "‡",
|
|
|
|
8226: "•",
|
|
|
|
8230: "…",
|
|
|
|
8240: "‰",
|
|
|
|
8242: "′",
|
|
|
|
8243: "″",
|
|
|
|
8249: "‹",
|
|
|
|
8250: "›",
|
|
|
|
8254: "‾",
|
|
|
|
8260: "⁄",
|
|
|
|
8364: "€",
|
|
|
|
8465: "ℑ",
|
|
|
|
8472: "℘",
|
|
|
|
8476: "ℜ",
|
|
|
|
8482: "™",
|
|
|
|
8501: "ℵ",
|
|
|
|
8592: "←",
|
|
|
|
8593: "↑",
|
|
|
|
8594: "→",
|
|
|
|
8595: "↓",
|
|
|
|
8596: "↔",
|
|
|
|
8629: "↵",
|
|
|
|
8656: "⇐",
|
|
|
|
8657: "⇑",
|
|
|
|
8658: "⇒",
|
|
|
|
8659: "⇓",
|
|
|
|
8660: "⇔",
|
|
|
|
8704: "∀",
|
|
|
|
8706: "∂",
|
|
|
|
8707: "∃",
|
|
|
|
8709: "∅",
|
|
|
|
8711: "∇",
|
|
|
|
8712: "∈",
|
|
|
|
8713: "∉",
|
|
|
|
8715: "∋",
|
|
|
|
8719: "∏",
|
|
|
|
8721: "∑",
|
|
|
|
8722: "−",
|
|
|
|
8727: "∗",
|
|
|
|
8730: "√",
|
|
|
|
8733: "∝",
|
|
|
|
8734: "∞",
|
|
|
|
8736: "∠",
|
|
|
|
8743: "∧",
|
|
|
|
8744: "∨",
|
|
|
|
8745: "∩",
|
|
|
|
8746: "∪",
|
|
|
|
8747: "∫",
|
|
|
|
8756: "∴",
|
|
|
|
8764: "∼",
|
|
|
|
8773: "≅",
|
|
|
|
8776: "≈",
|
|
|
|
8800: "≠",
|
|
|
|
8801: "≡",
|
|
|
|
8804: "≤",
|
|
|
|
8805: "≥",
|
|
|
|
8834: "⊂",
|
|
|
|
8835: "⊃",
|
|
|
|
8836: "⊄",
|
|
|
|
8838: "⊆",
|
|
|
|
8839: "⊇",
|
|
|
|
8853: "⊕",
|
|
|
|
8855: "⊗",
|
|
|
|
8869: "⊥",
|
|
|
|
8901: "⋅",
|
|
|
|
8942: "⋮",
|
|
|
|
8968: "⌈",
|
|
|
|
8969: "⌉",
|
|
|
|
8970: "⌊",
|
|
|
|
8971: "⌋",
|
|
|
|
9001: "⟨",
|
|
|
|
9002: "⟩",
|
|
|
|
9674: "◊",
|
|
|
|
9824: "♠",
|
|
|
|
9827: "♣",
|
|
|
|
9829: "♥",
|
|
|
|
9830: "♦",
|
|
|
|
};
|
|
|
|
|
|
|
|
export default ToHTMLEntity;
|