Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More ā†’
Socket
Socket
Sign inDemoInstall

wikity

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

wikity - npm Package Compare versions

Comparing version 1.1.0 to 1.2.0

src/common.d.ts

11

changelog.md
# Changelog
## 1.2.0
*2021-04-01*
- Added function `eleventyPlugin()` for use with Eleventy's `addPlugin` method.
- Added configuration option `outputFolder` to configure the folder the compiled HTML files are placed in.
- Added configuration option `templatesFolder` to configure the folder templates are placed in.
- Added CLI options `--outputFolder`, `--templatesFolder`, `--eleventy`, and `--defaultStyles` to change configuration options.
- Added support for tables.
- Added a warning when the parser detects non-repetition-based `#time` function syntax is being used.
## 1.1.0
*2021-03-28*
- Added `parse` CLI command to implement `parse()`.
- Added support for a table of contents.
- Added a generated table of contents if there are over 4 headings.
- Added support for `nowiki` tag.

@@ -8,0 +17,0 @@ - Added support for `onlyinclude`, `includeonly`, and `noinclude` tags in templates.

19

package.json
{
"name": "wikity",
"version": "1.1.0",
"version": "1.2.0",
"description": "Wikitext as a templating language, with built-in Eleventy support.",

@@ -12,2 +12,6 @@ "main": "src/index.js",

},
"files": [
"src/*.js",
"src/*.d.ts"
],
"keywords": [

@@ -22,3 +26,11 @@ "eleventy",

],
"repository": {
"type": "git",
"url": "git+https://github.com/Nixinova/Wikity.git"
},
"author": "Nixinova (https://nixinova.com)",
"bugs": {
"url": "https://github.com/Nixinova/Wikity/issues"
},
"homepage": "https://github.com/Nixinova/Wikity#readme",
"license": "ISC",

@@ -29,4 +41,3 @@ "dependencies": {

"glob": "^7.1.6",
"html-formatter": "^0.1.9",
"novasheets": "1.0.0-pre3"
"html-formatter": "^0.1.9"
},

@@ -38,4 +49,4 @@ "peerDependencies": {

"@types/node": "^14.14.37",
"typescript": "^4.2.3"
"typescript": "~4.2.3"
}
}

@@ -15,7 +15,13 @@ # Wikity

- `wikity.compile(directory?: string, options?: object)`
- Compile Wikitext files into HTML. Find outputted files in folder `wikity-out/`.
### Node
- `wikity.compile(folder?: string, options?: object): void`
- Compile all Wikitext (`.wiki`) files into HTML.
- `directory?: string`
- The folder to compile (default: `.`, the current directory).
- `options?: object`
- `outputFolder?: string`
- Where outputted HTML files shall be placed (default: `wikity-out`).
- `templatesFolder?: string`
- What folder to place templates in (default: `'templates'`).
- `eleventy?: boolean`

@@ -27,11 +33,15 @@ - Whether [front matter](https://www.11ty.dev/docs/data-frontmatter/) will be added to the outputted HTML for Eleventy to read (default: `false`).

- Custom CSS to style the wiki pages (default: `''`).
- `wikity.clean()`
- Clean up residual folders after compilation.
- `wikity.eleventyPlugin(folder?: string, options?: object): void`
- An implementation of `compile` for use with Eleventy's `addPlugin` API.
- `wikity.parse(input: string): string`
- Parse raw wikitext input into HTML.
Calling `wikity()` will compile all `.wiki` files into their corresponding `.html` versions.
Outputted files are located in the `wikity-out/` directory.
```js
const wikity = require('wikity');
wikity.compile(); // compile all .wiki files inside this directory
// compile all .wiki files inside this directory
wikity.compile();
// parse wikitext from an input string
let html = wikity.parse(`'''bold''' [[link|text]]`); // <b>bold</b> <a href="/link"...>text</a>
```

@@ -44,5 +54,19 @@

const wikity = require('wikity');
wikity.compile('.', { eleventy: true });
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin( () => wikity.eleventyPlugin() );
}
```
### Command-line
```cmd
$ wikity help
Display a help message
$ wikity (compile|-c) [<folder>] [-o <folder>] [-t <folder>] [-e] [-d]
Compile Wikity with various options
$ wikity parse <input>
Parse raw input into HTML
$ wikity version
Display the latest version of Wikity
```
## Usage

@@ -52,3 +76,3 @@

Any wiki templates (called using `{{template name}}`) must be inside the `templates/` folder.
Any wiki templates (called using `{{template name}}`) must be inside the `templates/` folder by default.

@@ -82,2 +106,7 @@ ### Wiki markup

| `{{{arg\|default val}}}` | *(ditto but 'default val' if unset)* |
| `{\| style="margin:1em"` | *table opening* |
| `! Cell heading` | **Cell heading** |
| `\|- class="new-row"` | *new table row* |
| `\| Cell content` | Cell content |
| `\|}` | *table closing* |
| `{{#if:non-empty-string\|text}}` | text |

@@ -90,13 +119,13 @@ | `{{#ifeq:1\|2\|true\|false}}` | false |

| `{{#time:dd/mm/yy\|2021-03-28}}` | 28/03/21 |
| `{{lc:TEXT}}` | text |
| `{{ucfirst:text}}` | Text |
| `{{len:12345}}` | 5 |
| `{{sub:string|2|4}}` | ring |
| `{{pos:text|x}}` | 2 |
| `{{padleft:text|5|_}}` | _text |
| `{{padright:msg|5|_}}` | msg__ |
| `{{replace:Message|e|3}}` | M3ssag3 |
| `{{explode:A-B-C-D|-|2}}` | C |
| `{{urlencode:t e x t}}` | t%20e%20x%20t |
| `{{urldecode:a%20b%27c}}` | a b'c |
| `{{#lc:TEXT}}` | text |
| `{{#ucfirst:text}}` | Text |
| `{{#len:12345}}` | 5 |
| `{{#sub:string\|2\|4}}` | ring |
| `{{#pos:text\|x}}` | 2 |
| `{{#padleft:text\|5\|_}}` | _text |
| `{{#padright:msg\|5\|_}}` | msg__ |
| `{{#replace:Message\|e\|3}}` | M3ssag3 |
| `{{#explode:A-B-C-D\|-\|2}}` | C |
| `{{#urlencode:t e x t}}` | t%20e%20x%20t |
| `{{#urldecode:a%20b%27c}}` | a b'c |
| `<noinclude>No</noinclude>` | *(blank outside a template)* |

@@ -103,0 +132,0 @@ | `<onlyinclude>Yes</onlyinclude>` | Yes |

@@ -8,10 +8,10 @@ #!/usr/bin/env node

const index_1 = __importDefault(require("./index"));
const VERSION = '1.1.0';
const VERSION = '1.2.0';
const indent = (n) => ' '.repeat(n * 4);
const usage = (command, ...desc) => {
console.log('\n' + indent(2) + command);
for (let msg of desc)
console.log(indent(3) + msg);
desc.forEach((msg) => console.log(indent(2.5) + msg));
};
const arg = (n) => process.argv[n + 1] || '';
const args = process.argv.slice(1);
if (!arg(1)) {

@@ -22,12 +22,19 @@ console.log('Type `wikity help` for a list of commands.');

console.log(`\n${indent(1)}Wikity CLI commands:`);
usage(`wikity [--]h[elp]`, `Display this help message.`);
usage(`wikity [--]c[ompile] [<folder>]`, `Compile wikitext files from a given folder.`);
usage(`wikity [--]p[arse] "<input>"`, `Parse raw wikitext from the command line.`);
usage(`wikity [--]v[ersion]`, `Display the current version of Wikity.`);
usage(`wikity (help|-h)`, `Display this help message.`);
usage(`wikity (compile|-c) [<folder>] [-o <folder>] [-t <folder>] [-e] [-d]`, `Compile wikitext files from a given folder.`, ` [<folder>]\n${indent(3.5)}Input folder ('.' (current folder) if unset).`, ` (-o|--outputFolder) <folder>\n${indent(3.5)}Folder that compiled HTML files are placed in ('wikity-out' if unset).`, ` (-t|--templatesFolder) <folder>\n${indent(3.5)}Where to place wiki templates ('templates' if unset).`, ` (-e|--eleventy)\n${indent(3.5)}Compiles files with Eleventy front matter (false if unset).`, ` (-d|--defaultStyles)\n${indent(3.5)}Add default wiki styling to all pages (true if unset).`);
usage(`wikity (parse|-p) "<input>"`, `Parse raw wikitext from the command line.`);
usage(`wikity (version|-v)`, `Display the current version of Wikity.`);
}
else if (arg(1).includes('c')) {
index_1.default.compile(arg(2) || '.', { eleventy: !!arg(3) });
const configArgs = args.slice(2);
const folder = arg(2) || '.';
const outputFolder = configArgs.join(' ').includes('-o') && configArgs.filter((_, i) => { var _a; return (_a = configArgs[i - 1]) === null || _a === void 0 ? void 0 : _a.includes('-o'); }).join(' ') || '';
const templatesFolder = configArgs.join(' ').includes('-t') && configArgs.filter((_, i) => { var _a; return (_a = configArgs[i - 1]) === null || _a === void 0 ? void 0 : _a.includes('-t'); }).join(' ') || '';
const eleventy = configArgs.join(' ').includes('-e');
const defaultStyles = configArgs.join(' ').includes('-d');
index_1.default.compile(folder, { outputFolder, templatesFolder, eleventy, defaultStyles });
}
else if (arg(1).includes('p')) {
console.log(index_1.default.parse(arg(2)));
const input = arg(2);
console.log(index_1.default.parse(input));
}

@@ -34,0 +41,0 @@ else if (arg(1).includes('v')) {

@@ -1,2 +0,2 @@

import { Config } from './types';
import { Config } from './common';
export declare function compile(dir?: string, config?: Config): void;

@@ -7,5 +7,4 @@ "use strict";

const formatter = require('html-formatter');
const novasheets = require('novasheets');
const parse_1 = require("./parse");
const OUT_FOLDER = 'wikity-out/';
const common_1 = require("./common");
function compile(dir = '.', config = {}) {

@@ -18,6 +17,7 @@ let stylesCreated = false;

let data = fs.readFileSync(file, { encoding: 'utf8' });
let content = parse_1.parse(data);
let content = parse_1.parse(data, config);
let outText = content.toString();
let [, folder, filename] = file.match(/^(.+?[\/\\])((?:templates[\/\\])?[^\/\\]+)$/);
let outFolder = (dir || folder || '.') + '/' + OUT_FOLDER;
const templatesFolder = config.templatesFolder || 'templates';
let [, folder, filename] = file.match(common_1.RegExpBuilder(common_1.RawString `^(.+?[\/\\]) ((?:${templatesFolder}[\/\\])?[^\/\\]+)$`, ''));
let outFolder = (dir || folder || '.') + '/' + (config.outputFolder || 'wikity-out') + '/';
let outFilename = filename.replace(/ /g, '_').replace('.wiki', '.html');

@@ -98,3 +98,3 @@ let url = outFilename.replace(/(?<=^|\/)\w/g, m => m.toUpperCase());

if (config.defaultStyles !== false) {
styles += novasheets.parse(`
styles += `
body {font-family: sans-serif; margin: 4em; max-width: 1000px; background: #eee;}

@@ -108,11 +108,15 @@ main {margin: 3em -1em; background: #fff; padding: 1em;}

a:not(:hover) {text-decoration: none;}
a.internal-link {color: #04a;} &:visited {color: #26d;}
a.external-link {color: #36b;} &:visited {color: #58d;} &::after {content: '\\1f855';}
a.redlink {color: #d33;} &:visited {color: #b44;}
a.internal-link {color: #04a;}
a.internal-link:visited {color: #26d;}
a.external-link {color: #36b;}
&:visited {color: #58d;}
a.external-link&::after {content: '\\1f855';}
a.redlink {color: #d33;}
a.redlink:visited {color: #b44;}
#toc {display: inline-block; border: 1px solid #aab; padding: 8px; background-color: #f8f8f8; font-size: 95%;}
&-heading {display: block; text-align: center;}
& ol {margin: 0 0 0 1.3em;}
&.toc-hidden {height: 1em;} % ol {display: none;}
`.replace(/^\s+/gm, ''));
#toc-heading {display: block; text-align: center;}
#toc ol {margin: 0 0 0 1.3em;}
#toc.toc-hidden {height: 1em;} % ol {display: none;}
`.replace(/^\s+/gm, '');
}

@@ -119,0 +123,0 @@ if (config.customStyles)

import { compile } from './compile';
import { plugin } from './eleventy';
declare const _default: {
compile: typeof compile;
parse: (data: string) => string;
eleventyPlugin: typeof plugin;
};
export = _default;
"use strict";
const compile_1 = require("./compile");
const parse_1 = require("./parse");
const eleventy_1 = require("./eleventy");
module.exports = {
compile: compile_1.compile,
parse: (data) => parse_1.parse(data).toString(),
eleventyPlugin: eleventy_1.plugin,
};

@@ -1,2 +0,2 @@

import { Result } from './types';
export declare function parse(data: string): Result;
import { Config, Result } from './common';
export declare function parse(data: string, config?: Config): Result;

@@ -7,8 +7,6 @@ "use strict";

const dateFormat = require('dateformat');
const types_1 = require("./types");
const re = (regex, flag = 'mgi') => RegExp(regex.replace(/ /g, '').replace(/\|\|.+?\|\|/g, ''), flag);
const r = String.raw;
const common_1 = require("./common");
const MAX_RECURSION = 50;
const arg = `\s*([^|}]+?)\s*`;
function parse(data) {
const arg = common_1.RawString `\s*([^|}]+?)\s*`;
function parse(data, config = {}) {
const vars = {};

@@ -28,6 +26,6 @@ const metadata = {};

// Nowiki: <nowiki></nowiki>
.replace(re(r `<nowiki> ([^]+?) </nowiki>`), (_, m) => `%NOWIKI#${nowikis.push(m), nowikiCount++}%`)
.replace(common_1.RegExpBuilder(common_1.RawString `<nowiki> ([^]+?) </nowiki>`), (_, m) => `%NOWIKI#${nowikis.push(m), nowikiCount++}%`)
// Sanitise unacceptable HTML
.replace(re(r `<(/?) \s* (?= script|link|meta|iframe|frameset|object|embed|applet|form|input|button|textarea )`), '&lt;$1')
.replace(re(r `(?<= <[^>]+ ) (\bon(\w+))`), 'data-$2')
.replace(common_1.RegExpBuilder(common_1.RawString `<(/?) \s* (?= script|link|meta|iframe|frameset|object|embed|applet|form|input|button|textarea )`), '&lt;$1')
.replace(common_1.RegExpBuilder(common_1.RawString `(?<= <[^>]+ ) (\bon(\w+))`), 'data-$2')
// Comments: <!-- -->

@@ -38,27 +36,27 @@ .replace(/<!--[^]+?-->/g, '')

// Metadata: displayTitle, __NOTOC__, etc
.replace(re(r `{{ \s* displayTitle: ([^}]+) }}`), (_, title) => (metadata.displayTitle = title, ''))
.replace(re(r `__NOINDEX__`), () => (metadata.noindex = true, ''))
.replace(re(r `__NOTOC__`), () => (metadata.notoc = true, ''))
.replace(re(r `__FORCETOC__`), () => (metadata.toc = true, ''))
.replace(re(r `__TOC__`), () => (metadata.toc = true, `<toc></toc>`))
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* displayTitle: ([^}]+) }}`), (_, title) => (metadata.displayTitle = title, ''))
.replace(common_1.RegExpBuilder(common_1.RawString `__NOINDEX__`), () => (metadata.noindex = true, ''))
.replace(common_1.RegExpBuilder(common_1.RawString `__NOTOC__`), () => (metadata.notoc = true, ''))
.replace(common_1.RegExpBuilder(common_1.RawString `__FORCETOC__`), () => (metadata.toc = true, ''))
.replace(common_1.RegExpBuilder(common_1.RawString `__TOC__`), () => (metadata.toc = true, `<toc></toc>`))
// Magic words: {{!}}, {{reflist}}, etc
.replace(re(r `{{ \s* ! \s* }}`), '&vert;')
.replace(re(r `{{ \s* = \s* }}`), '&equals;')
.replace(re(r `{{ \s* [Rr]eflist \s* }}`), '<references/>')
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* ! \s* }}`), '&vert;')
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* = \s* }}`), '&equals;')
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* [Rr]eflist \s* }}`), '<references/>')
// String functions: {{lc:}}, {{ucfirst:}}, {{len:}}, etc
.replace(re(r `{{ \s* #? urlencode: ${arg} }}`), (_, m) => encodeURI(m))
.replace(re(r `{{ \s* #? urldecode: ${arg} }}`), (_, m) => decodeURI(m))
.replace(re(r `{{ \s* #? lc: ${arg} }}`), (_, m) => m.toLowerCase())
.replace(re(r `{{ \s* #? uc: ${arg} }}`), (_, m) => m.toUpperCase())
.replace(re(r `{{ \s* #? lcfirst: ${arg} }}`), (_, m) => m[0].toLowerCase() + m.substr(1))
.replace(re(r `{{ \s* #? ucfirst: ${arg} }}`), (_, m) => m[0].toUpperCase() + m.substr(1))
.replace(re(r `{{ \s* #? len: ${arg} }}`), (_, m) => m.length)
.replace(re(r `{{ \s* #? pos: ${arg} \|${arg} (?: \s*\|${arg} )? }}`), (_, find, str, n = 0) => find.substr(n).indexOf(str))
.replace(re(r `{{ \s* #? sub: ${arg} \|${arg} (?:\|${arg})? }}`), (_, str, from, len) => str.substr(+from - 1, +len))
.replace(re(r `{{ \s* #? padleft: ${arg} \|${arg} \|${arg} }}`), (_, str, n, char) => str.padStart(+n, char))
.replace(re(r `{{ \s* #? padright: ${arg} \|${arg} \|${arg} }}`), (_, str, n, char) => str.padEnd(+n, char))
.replace(re(r `{{ \s* #? replace: ${arg} \|${arg} \|${arg} }}`), (_, str, find, rep) => str.split(find).join(rep))
.replace(re(r `{{ \s* #? explode: ${arg} \|${arg} \|${arg} }}`), (_, str, delim, pos) => str.split(delim)[+pos])
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? urlencode: ${arg} }}`), (_, m) => encodeURI(m))
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? urldecode: ${arg} }}`), (_, m) => decodeURI(m))
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? lc: ${arg} }}`), (_, m) => m.toLowerCase())
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? uc: ${arg} }}`), (_, m) => m.toUpperCase())
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? lcfirst: ${arg} }}`), (_, m) => m[0].toLowerCase() + m.substr(1))
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? ucfirst: ${arg} }}`), (_, m) => m[0].toUpperCase() + m.substr(1))
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? len: ${arg} }}`), (_, m) => m.length)
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? pos: ${arg} \|${arg} (?: \s*\|${arg} )? }}`), (_, find, str, n = 0) => find.substr(n).indexOf(str))
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? sub: ${arg} \|${arg} (?:\|${arg})? }}`), (_, str, from, len) => str.substr(+from - 1, +len))
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? padleft: ${arg} \|${arg} \|${arg} }}`), (_, str, n, char) => str.padStart(+n, char))
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? padright: ${arg} \|${arg} \|${arg} }}`), (_, str, n, char) => str.padEnd(+n, char))
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? replace: ${arg} \|${arg} \|${arg} }}`), (_, str, find, rep) => str.split(find).join(rep))
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* #? explode: ${arg} \|${arg} \|${arg} }}`), (_, str, delim, pos) => str.split(delim)[+pos])
// Parser functions: {{#if:}}, {{#switch:}}, etc
.replace(re(r `{{ \s* (#\w+) \s* : \s* ( [^{}]+ ) \s* }} ( ?!} )`), (_, name, content) => {
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* (#\w+) \s* : \s* ( [^{}]+ ) \s* }} ( ?!} )`), (_, name, content) => {
if (/{{\s*#/.test(content))

@@ -76,3 +74,3 @@ return _;

case '#var':
if (re(r `{{ \s* #vardefine \s* : \s* ${args[0]}`).test(outText))
if (common_1.RegExpBuilder(common_1.RawString `{{ \s* #vardefine \s* : \s* ${args[0]}`).test(outText))
return _; // wait until var is set

@@ -86,10 +84,16 @@ return vars[args[0]] || args[1] || '';

case '#date':
case '#datetime': return dateFormat(args[1] ? new Date(args[1]) : new Date(), args[0]);
case '#datetime':
// make sure the characters are not inside a string
let parsedMatch = args[0].replace(/".+?"/g, '').replace(/'.+?'/g, '');
if (/[abcefgijkqruvx]/i.test(parsedMatch)) {
console.warn(`<Wikity> [WARN] Wikity does not use Wikipedia's #time function syntax. Use repetition-based formatting instead.`);
}
return dateFormat(args[1] ? new Date(args[1]) : new Date(), args[0]);
}
})
// Templates: {{template}}
.replace(re(r `{{ \s* ([^#}|]+?) (\|[^}]+)? }} (?!})`), (_, title, params = '') => {
.replace(common_1.RegExpBuilder(common_1.RawString `{{ \s* ([^#}|]+?) (\|[^}]+)? }} (?!})`), (_, title, params = '') => {
if (/{{/.test(params))
return _;
const page = 'templates/' + title.trim().replace(/ /g, '_');
const page = (config.templatesFolder || 'templates') + '/' + title.trim().replace(/ /g, '_');
// Retrieve template content

@@ -108,3 +112,3 @@ let content = '';

// Substitite arguments
const argMatch = (arg) => re(r `{{{ \s* ${arg} (?:\|([^}]*))? \s* }}}`);
const argMatch = (arg) => common_1.RegExpBuilder(common_1.RawString `{{{ \s* ${arg} (?:\|([^}]*))? \s* }}}`);
let args = params.split('|').slice(1);

@@ -122,24 +126,30 @@ for (let i in args) {

// Markup: '''bold''' and '''italic'''
.replace(re(r `''' ([^']+?) '''`), '<b>$1</b>')
.replace(re(r `'' ([^']+?) ''`), '<i>$1</i>')
.replace(common_1.RegExpBuilder(common_1.RawString `''' ([^']+?) '''`), '<b>$1</b>')
.replace(common_1.RegExpBuilder(common_1.RawString `'' ([^']+?) ''`), '<i>$1</i>')
// Headings: ==heading==
.replace(re(r `^ (=+) \s* (.+?) \s* \1 \s* $`), (_, lvl, txt) => `<h${lvl.length} id="${encodeURI(txt.replace(/ /g, '_'))}">${txt}</h${lvl.length}>`)
.replace(common_1.RegExpBuilder(common_1.RawString `^ (=+) \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(re(r `\[\[ ([^\]|]+?) \]\]`), `<a class="internal-link" title="$1" href="/$1">$1</a>`)
.replace(re(r `\[\[ ([^\]|]+?) \| ([^\]]+?) \]\]`), `<a class="internal-link" title="$1" href="/$1">$2</a>`)
.replace(re(r `(</a>)([a-z]+)`), '$2$1')
.replace(common_1.RegExpBuilder(common_1.RawString `\[\[ ([^\]|]+?) \]\]`), `<a class="internal-link" title="$1" href="/$1">$1</a>`)
.replace(common_1.RegExpBuilder(common_1.RawString `\[\[ ([^\]|]+?) \| ([^\]]+?) \]\]`), `<a class="internal-link" title="$1" href="/$1">$2</a>`)
.replace(common_1.RegExpBuilder(common_1.RawString `(</a>)([a-z]+)`), '$2$1')
// External links: [href Page] and just [href]
.replace(re(r `\[ ((?:\w+:)?\/\/ [^\s\]]+) (\s [^\]]+?)? \]`), (_, href, txt) => `<a class="external-link" href="${href}">${txt || '[' + (++rawExtLinkCount) + ']'}</a>`)
.replace(common_1.RegExpBuilder(common_1.RawString `\[ ((?:\w+:)?\/\/ [^\s\]]+) (\s [^\]]+?)? \]`), (_, href, txt) => `<a class="external-link" href="${href}">${txt || '[' + (++rawExtLinkCount) + ']'}</a>`)
// Bulleted list: *item
.replace(re(r `^ (\*+) (.+?) $`), (_, lvl, txt) => `${'<ul>'.repeat(lvl.length)}<li>${txt}</li>${'</ul>'.repeat(lvl.length)}`)
.replace(re(r `</ul> (\s*?) <ul>`), '$1')
.replace(common_1.RegExpBuilder(common_1.RawString `^ (\*+) (.+?) $`), (_, lvl, txt) => `${'<ul>'.repeat(lvl.length)}<li>${txt}</li>${'</ul>'.repeat(lvl.length)}`)
.replace(common_1.RegExpBuilder(common_1.RawString `</ul> (\s*?) <ul>`), '$1')
// Numbered list: #item
.replace(re(r `^ (#+) (.+?) $`), (_, lvl, txt) => `${'<ol>'.repeat(lvl.length)}<li>${txt}</li>${'</ol>'.repeat(lvl.length)}`)
.replace(re(r `</ol> (\s*?) <ol>`), '$1')
.replace(common_1.RegExpBuilder(common_1.RawString `^ (#+) (.+?) $`), (_, lvl, txt) => `${'<ol>'.repeat(lvl.length)}<li>${txt}</li>${'</ol>'.repeat(lvl.length)}`)
.replace(common_1.RegExpBuilder(common_1.RawString `</ol> (\s*?) <ol>`), '$1')
// Definition list: ;head, :item
.replace(re(r `^ ; (.+) $`), '<dl><dt>$1</dt></dl>')
.replace(re(r `^ (:+) (.+?) $`), (_, lvl, txt) => `${'<dl>'.repeat(lvl.length)}<dd>${txt}</dd>${'</dl>'.repeat(lvl.length)}`)
.replace(re(r `</dl> (\s*?) <dl>`), '$1')
.replace(common_1.RegExpBuilder(common_1.RawString `^ ; (.+) $`), '<dl><dt>$1</dt></dl>')
.replace(common_1.RegExpBuilder(common_1.RawString `^ (:+) (.+?) $`), (_, lvl, txt) => `${'<dl>'.repeat(lvl.length)}<dd>${txt}</dd>${'</dl>'.repeat(lvl.length)}`)
.replace(common_1.RegExpBuilder(common_1.RawString `</dl> (\s*?) <dl>`), '$1')
// Tables: {|, |, |-, |}
.replace(common_1.RegExpBuilder(common_1.RawString `^ \{\| (.*?) $`), (_, attrs) => `<table ${attrs}><tr>`)
.replace(common_1.RegExpBuilder(common_1.RawString `^ ! ([^]+?) (?= \n^[!|] )`), (_, content) => `<th>${content}</th>`)
.replace(common_1.RegExpBuilder(common_1.RawString `^ \|[^-}] ([^]*?) (?= \n^[!|] )`), (_, content) => `<td>${content}</td>`)
.replace(common_1.RegExpBuilder(common_1.RawString `^ \|- (.*?) $`), (_, attrs) => `</tr><tr ${attrs}>`)
.replace(common_1.RegExpBuilder(common_1.RawString `^ \|\}`), `</tr></table>`)
// References: <ref></ref>, <references/>
.replace(re(r `<ref> (.+?) </ref>`), (_, text) => {
.replace(common_1.RegExpBuilder(common_1.RawString `<ref> (.+?) </ref>`), (_, text) => {
refs.push(text);

@@ -149,6 +159,6 @@ refCount++;

})
.replace(re(r `<references \s* /?>`), '<ol>' + refs.map((ref, i) => `<li id="ref-${+i + 1}"> <a href="#cite-${+i + 1}">ā†‘</a> ${ref} </li>`).join('\n') + '</ol>')
.replace(common_1.RegExpBuilder(common_1.RawString `<references \s* /?>`), '<ol>' + refs.map((ref, i) => `<li id="ref-${+i + 1}"> <a href="#cite-${+i + 1}">ā†‘</a> ${ref} </li>`).join('\n') + '</ol>')
// Nonstandard: ``code`` and ```code blocks```
.replace(re(r ` \`\`\` ([^\`]+?) \`\`\` `), '<pre>$1</pre>')
.replace(re(r ` \`\` ([^\`]+?) \`\` `), '<code>$1</code>')
.replace(common_1.RegExpBuilder(common_1.RawString ` \`\`\` ([^\`]+?) \`\`\` `), '<pre>$1</pre>')
.replace(common_1.RegExpBuilder(common_1.RawString ` \`\` ([^\`]+?) \`\` `), '<code>$1</code>')
// Spacing

@@ -159,3 +169,3 @@ .replace(/(\r?\n){2}/g, '\n</p><p>\n')

}
let result = new types_1.Result(outText);
let result = new common_1.Result(outText);
result.metadata = metadata;

@@ -162,0 +172,0 @@ return result;

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with āš”ļø by Socket Inc