/**
* @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
e.g. &
becomes &
";
this.infoURL = "https://wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references";
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 += "" + 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 += "" + 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;