MCPcopy Index your code
hub / github.com/devgutt/wdr-render-basic / textFormatting

Function textFormatting

src/TextFormatting.js:3–53  ·  view source on GitHub ↗
(str)

Source from the content-addressed store, hash-verified

1'use strict';
2
3function textFormatting(str) {
4
5 if (str === undefined) return "";
6 if (typeof str != 'string') return "";
7
8 const regTop = /(\*\*?|__?|~~|[<>\r\n])|\[([^[]*)\]\(([^(]*)\)|!\[([^[]*)\]\(([^(]*)\)|`([^`]+)`|```((?:.|\n)*)```|(#{1,6})\ (.*)/g;
9
10 const closeTag = {};
11 const renderTag = tag => {
12 if (!closeTag[tag]) {
13 closeTag[tag] = true;
14 return "<" + tag + ">";
15 } else {
16 closeTag[tag] = false;
17 return "</" + tag + ">";
18 }
19 };
20
21 return str.replace(regTop, (m, cmd, linkName, linkUrl, imgAlt, imgPath, code, pre, titleNum, title) => {
22
23 if (cmd) {
24 if (cmd == '**' || cmd == '__') {
25 return renderTag('strong');
26 } else if (cmd == '*' || cmd == '_') {
27 return renderTag('em');
28 } else if (cmd == '~~') {
29 return renderTag('del');
30 } else if (cmd == '>') {
31 return "&gt;";
32 } else if (cmd == '<') {
33 return "&lt;";
34 } else if (cmd == '\n') {
35 return "<br>";
36 } else {
37 return "";
38 }
39 } else if (linkUrl) {
40 return `<a href='${linkUrl}'>${linkName || linkUrl}</a>`;
41 } else if (imgAlt) {
42 return `<img src='${imgPath}' alt='${imgAlt}'/>`;
43 } else if (code) {
44 return `<code>${htmlEntities(code)}</code>`
45 } else if (pre) {
46 return `<pre>${htmlEntities(pre)}</pre>`
47 } else if (title) {
48 return `<h${titleNum.length}>${title}</h1>`
49 } else {
50 return "";
51 }
52 })
53}
54
55function htmlEntities(str) {
56 return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');

Callers

nothing calls this directly

Calls 2

renderTagFunction · 0.85
htmlEntitiesFunction · 0.85

Tested by

no test coverage detected