Comparing version 1.3.2 to 1.3.3
@@ -109,3 +109,3 @@ "use strict"; | ||
} | ||
const renderedHtml = formatter.render(html).replace(/(<\/\w+>)(\S)/g, '$1 $2'); | ||
const renderedHtml = formatter.render(html.replace(/(<\/\w+>) +(\S)/g, '$1 $2')); | ||
fs_1.default.writeFileSync(outFilePath, frontMatter + '\n' + renderedHtml, 'utf8'); | ||
@@ -112,0 +112,0 @@ // Move images |
@@ -36,2 +36,3 @@ "use strict"; | ||
let outText = data; | ||
const escaper = (text, n) => `%${text}#${n}`; | ||
for (let l = 0, last = ''; l < MAX_RECURSION; l++) { | ||
@@ -43,3 +44,3 @@ if (last === outText) | ||
// Nowiki: <nowiki></nowiki> | ||
.replace((0, common_1.RegExpBuilder)(r `<nowiki> ([^]+?) </nowiki>`), (_, m) => `%NOWIKI#${nowikis.push(m), nowikiCount++}%`) | ||
.replace((0, common_1.RegExpBuilder)(r `<nowiki> ([^]+?) </nowiki>`), (_, m) => (nowikis.push(m), escaper('NOWIKI', nowikiCount++))) | ||
// Sanitise unacceptable HTML | ||
@@ -52,2 +53,12 @@ .replace((0, common_1.RegExpBuilder)(r `<(/?) \s* (?= script|link|meta|iframe|frameset|object|embed|applet|form|input|button|textarea )`), '<$1') | ||
.replace(/^-{4,}/gm, '<hr>') | ||
// Internal links: [[Page]] and [[Page|Text]] | ||
.replace((0, common_1.RegExpBuilder)(r `\[\[ ([^\]|]+?) \]\]`), `<a class{{=}}"internal-link" title{{=}}"$1" href{{=}}"$1">$1</a>`) | ||
.replace((0, common_1.RegExpBuilder)(r `\[\[ ([^\]|]+?) \| ([^\]]+?) \]\]`), `<a class{{=}}"internal-link" title{{=}}"$1" href{{=}}"/$1">$2</a>`) | ||
.replace((0, common_1.RegExpBuilder)(r `(</a>)([a-z]+)`), '$2$1') | ||
// External links: [href Page] and just [href] | ||
.replace((0, common_1.RegExpBuilder)(r `\[ ((?:\w+:)?\/\/ [^\s\]]+) (\s [^\]]+?)? \]`), (_, href, txt) => `<a class{{=}}"external-link" href{{=}}"${href}">${txt || '[' + (++rawExtLinkCount) + ']'}</a>`) | ||
// Magic words: {{!}}, {{reflist}}, etc | ||
.replace((0, common_1.RegExpBuilder)(r `{{ \s* ! \s* }}`), escaper('VERT', 0)) | ||
.replace((0, common_1.RegExpBuilder)(r `{{ \s* = \s* }}`), escaper('EQUALS', 0)) | ||
.replace((0, common_1.RegExpBuilder)(r `{{ \s* [Rr]eflist \s* }}`), '<references/>') | ||
// Metadata: displayTitle, __NOTOC__, etc | ||
@@ -59,6 +70,2 @@ .replace((0, common_1.RegExpBuilder)(r `{{ \s* displayTitle: ([^}]+) }}`), (_, title) => (metadata.displayTitle = title, '')) | ||
.replace((0, common_1.RegExpBuilder)(r `__TOC__`), () => (metadata.toc = true, `<toc></toc>`)) | ||
// Magic words: {{!}}, {{reflist}}, etc | ||
.replace((0, common_1.RegExpBuilder)(r `{{ \s* ! \s* }}`), '|') | ||
.replace((0, common_1.RegExpBuilder)(r `{{ \s* = \s* }}`), '=') | ||
.replace((0, common_1.RegExpBuilder)(r `{{ \s* [Rr]eflist \s* }}`), '<references/>') | ||
// String functions: {{lc:}}, {{ucfirst:}}, {{len:}}, etc | ||
@@ -135,3 +142,3 @@ .replace((0, common_1.RegExpBuilder)(r `{{ \s* #? urlencode: ${arg} }}`), (_, m) => encodeURI(m)) | ||
const [arg, val] = parts[1] | ||
? [parts[0], ...parts.slice(1)] | ||
? [parts[0], parts.slice(1).join('=')] | ||
: [i.toString(), parts[0]]; | ||
@@ -232,8 +239,2 @@ content = content.replace(argMatch(arg), (_, defaultVal) => val || defaultVal || ''); | ||
.replace((0, common_1.RegExpBuilder)(r `^ (=+) \s* (.+?) \s* \1 \s* $`), (_, lvl, txt) => `<h${lvl.length} id="${encodeURI(txt.replace(/ /g, '_'))}">${txt}</h${lvl.length}>`) | ||
// Internal links: [[Page]] and [[Page|Text]] | ||
.replace((0, common_1.RegExpBuilder)(r `\[\[ ([^\]|]+?) \]\]`), `<a class="internal-link" title="$1" href="$1">$1</a>`) | ||
.replace((0, common_1.RegExpBuilder)(r `\[\[ ([^\]|]+?) \| ([^\]]+?) \]\]`), `<a class="internal-link" title="$1" href="/$1">$2</a>`) | ||
.replace((0, common_1.RegExpBuilder)(r `(</a>)([a-z]+)`), '$2$1') | ||
// External links: [href Page] and just [href] | ||
.replace((0, common_1.RegExpBuilder)(r `\[ ((?:\w+:)?\/\/ [^\s\]]+) (\s [^\]]+?)? \]`), (_, href, txt) => `<a class="external-link" href="${href}">${txt || '[' + (++rawExtLinkCount) + ']'}</a>`) | ||
// Bulleted list: *item | ||
@@ -246,4 +247,5 @@ .replace((0, common_1.RegExpBuilder)(r `^ (\*+) (.+?) $`), (_, lvl, txt) => `${'<ul>'.repeat(lvl.length)}<li>${txt}</li>${'</ul>'.repeat(lvl.length)}`) | ||
// Definition list: ;head, :item | ||
.replace((0, common_1.RegExpBuilder)(r `^ ; (.+?) : (.+?) $`), `<dl><dt>$1</td><dd>$2</dd></dl>`) | ||
.replace((0, common_1.RegExpBuilder)(r `^ (:+) (.+?) $`), (_, lvl, txt) => `${'<dl>'.repeat(lvl.length)}<dd>${txt}</dd>${'</dl>'.repeat(lvl.length)}`) | ||
.replace((0, common_1.RegExpBuilder)(r `^ ; (.+) $`), '<dl><dt>$1</dt></dl>') | ||
.replace((0, common_1.RegExpBuilder)(r `^ (:+) (.+?) $`), (_, lvl, txt) => `${'<dl>'.repeat(lvl.length)}<dd>${txt}</dd>${'</dl>'.repeat(lvl.length)}`) | ||
.replace((0, common_1.RegExpBuilder)(r `</dl> (\s*?) <dl>`), '$1') | ||
@@ -271,6 +273,11 @@ // Tables: {|, |+, !, |-, |, |} | ||
} | ||
// Final changes (run only once) | ||
// Restore nowiki contents | ||
for (let i = 0; i < nowikis.length; i++) { | ||
outText = outText | ||
.replace(escaper('NOWIKI', i), (_, n) => fullyEscape(nowikis[n])); | ||
} | ||
// Substitute magic word functions | ||
outText = outText | ||
// Restore nowiki contents | ||
.replace(/%NOWIKI#(\d+)%/g, (_, n) => fullyEscape(nowikis[n])); | ||
.replaceAll(escaper('VERT', 0), '|') | ||
.replaceAll(escaper('EQUALS', 0), '='); | ||
const result = { data: outText, metadata: metadata }; | ||
@@ -277,0 +284,0 @@ return result; |
{ | ||
"name": "wikity", | ||
"version": "1.3.2", | ||
"version": "1.3.3", | ||
"description": "Compile wikitext to HTML: wikitext as a templating language.", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
41860
570