cspell-grammar
Version:
Grammar parsing support for cspell
43 lines • 1.16 kB
JavaScript
const matchHtml = /["'&<>]/g;
const matchMarkdown = /[-"'&<>`*_+[\]()\\|~]/g;
const entityMap = {
'<': '<',
'>': '>',
'&': '&',
'"': '"',
"'": ''',
};
const charCodeToEntity = compileEntities(entityMap);
export function escapeMarkdown(text) {
return _escape(text, matchMarkdown);
}
export function escapeHtml(str) {
return _escape(str, matchHtml);
}
function _escape(str, r) {
const cvt = charCodeToEntity;
let lastIndex = 0;
let html = '';
r.lastIndex = 0;
while (r.test(str)) {
const i = r.lastIndex - 1;
html += str.substring(lastIndex, i) + (cvt[str.codePointAt(i) || 0] || '');
lastIndex = r.lastIndex;
}
return html + str.substring(lastIndex);
}
function compileEntities(entityMap) {
const result = [];
result.length = 127;
for (let i = 32; i < 128; ++i) {
result[i] = `&#${i};`;
}
for (const [char, entity] of Object.entries(entityMap)) {
const index = char.codePointAt(0);
if (!index)
continue;
result[index] = entity;
}
return result;
}
//# sourceMappingURL=escapeMarkdown.js.map