aboutsummaryrefslogtreecommitdiffstats
path: root/public/prism/prism-asciidoc.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/prism/prism-asciidoc.js')
-rw-r--r--public/prism/prism-asciidoc.js246
1 files changed, 246 insertions, 0 deletions
diff --git a/public/prism/prism-asciidoc.js b/public/prism/prism-asciidoc.js
new file mode 100644
index 0000000..a2092d9
--- /dev/null
+++ b/public/prism/prism-asciidoc.js
@@ -0,0 +1,246 @@
+(function (Prism) {
+ var attributes = {
+ pattern:
+ /(^[ \t]*)\[(?!\[)(?:(["'$`])(?:(?!\2)[^\\]|\\.)*\2|\[(?:[^\[\]\\]|\\.)*\]|[^\[\]\\"'$`]|\\.)*\]/m,
+ lookbehind: true,
+ inside: {
+ quoted: {
+ pattern: /([$`])(?:(?!\1)[^\\]|\\.)*\1/,
+ inside: {
+ punctuation: /^[$`]|[$`]$/,
+ },
+ },
+ interpreted: {
+ pattern: /'(?:[^'\\]|\\.)*'/,
+ inside: {
+ punctuation: /^'|'$/,
+ // See rest below
+ },
+ },
+ string: /"(?:[^"\\]|\\.)*"/,
+ variable: /\w+(?==)/,
+ punctuation: /^\[|\]$|,/,
+ operator: /=/,
+ // The negative look-ahead prevents blank matches
+ 'attr-value': /(?!^\s+$).+/,
+ },
+ };
+
+ var asciidoc = (Prism.languages.asciidoc = {
+ 'comment-block': {
+ pattern: /^(\/{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1/m,
+ alias: 'comment',
+ },
+ table: {
+ pattern: /^\|={3,}(?:(?:\r?\n|\r(?!\n)).*)*?(?:\r?\n|\r)\|={3,}$/m,
+ inside: {
+ specifiers: {
+ pattern:
+ /(?:(?:(?:\d+(?:\.\d+)?|\.\d+)[+*](?:[<^>](?:\.[<^>])?|\.[<^>])?|[<^>](?:\.[<^>])?|\.[<^>])[a-z]*|[a-z]+)(?=\|)/,
+ alias: 'attr-value',
+ },
+ punctuation: {
+ pattern: /(^|[^\\])[|!]=*/,
+ lookbehind: true,
+ },
+ // See rest below
+ },
+ },
+
+ 'passthrough-block': {
+ pattern: /^(\+{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,
+ inside: {
+ punctuation: /^\++|\++$/,
+ // See rest below
+ },
+ },
+ // Literal blocks and listing blocks
+ 'literal-block': {
+ pattern: /^(-{4,}|\.{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,
+ inside: {
+ punctuation: /^(?:-+|\.+)|(?:-+|\.+)$/,
+ // See rest below
+ },
+ },
+ // Sidebar blocks, quote blocks, example blocks and open blocks
+ 'other-block': {
+ pattern:
+ /^(--|\*{4,}|_{4,}|={4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,
+ inside: {
+ punctuation: /^(?:-+|\*+|_+|=+)|(?:-+|\*+|_+|=+)$/,
+ // See rest below
+ },
+ },
+
+ // list-punctuation and list-label must appear before indented-block
+ 'list-punctuation': {
+ pattern: /(^[ \t]*)(?:-|\*{1,5}|\.{1,5}|(?:[a-z]|\d+)\.|[xvi]+\))(?= )/im,
+ lookbehind: true,
+ alias: 'punctuation',
+ },
+ 'list-label': {
+ pattern: /(^[ \t]*)[a-z\d].+(?::{2,4}|;;)(?=\s)/im,
+ lookbehind: true,
+ alias: 'symbol',
+ },
+ 'indented-block': {
+ pattern: /((\r?\n|\r)\2)([ \t]+)\S.*(?:(?:\r?\n|\r)\3.+)*(?=\2{2}|$)/,
+ lookbehind: true,
+ },
+
+ comment: /^\/\/.*/m,
+ title: {
+ pattern:
+ /^.+(?:\r?\n|\r)(?:={3,}|-{3,}|~{3,}|\^{3,}|\+{3,})$|^={1,5} .+|^\.(?![\s.]).*/m,
+ alias: 'important',
+ inside: {
+ punctuation: /^(?:\.|=+)|(?:=+|-+|~+|\^+|\++)$/,
+ // See rest below
+ },
+ },
+ 'attribute-entry': {
+ pattern: /^:[^:\r\n]+:(?: .*?(?: \+(?:\r?\n|\r).*?)*)?$/m,
+ alias: 'tag',
+ },
+ attributes: attributes,
+ hr: {
+ pattern: /^'{3,}$/m,
+ alias: 'punctuation',
+ },
+ 'page-break': {
+ pattern: /^<{3,}$/m,
+ alias: 'punctuation',
+ },
+ admonition: {
+ pattern: /^(?:CAUTION|IMPORTANT|NOTE|TIP|WARNING):/m,
+ alias: 'keyword',
+ },
+ callout: [
+ {
+ pattern: /(^[ \t]*)<?\d*>/m,
+ lookbehind: true,
+ alias: 'symbol',
+ },
+ {
+ pattern: /<\d+>/,
+ alias: 'symbol',
+ },
+ ],
+ macro: {
+ pattern:
+ /\b[a-z\d][a-z\d-]*::?(?:[^\s\[\]]*\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,
+ inside: {
+ function: /^[a-z\d-]+(?=:)/,
+ punctuation: /^::?/,
+ attributes: {
+ pattern: /(?:\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,
+ inside: attributes.inside,
+ },
+ },
+ },
+ inline: {
+ /*
+ The initial look-behind prevents the highlighting of escaped quoted text.
+
+ Quoted text can be multi-line but cannot span an empty line.
+ All quoted text can have attributes before [foobar, 'foobar', baz="bar"].
+
+ First, we handle the constrained quotes.
+ Those must be bounded by non-word chars and cannot have spaces between the delimiter and the first char.
+ They are, in order: _emphasis_, ``double quotes'', `single quotes', `monospace`, 'emphasis', *strong*, +monospace+ and #unquoted#
+
+ Then we handle the unconstrained quotes.
+ Those do not have the restrictions of the constrained quotes.
+ They are, in order: __emphasis__, **strong**, ++monospace++, +++passthrough+++, ##unquoted##, $$passthrough$$, ~subscript~, ^superscript^, {attribute-reference}, [[anchor]], [[[bibliography anchor]]], <<xref>>, (((indexes))) and ((indexes))
+ */
+ pattern:
+ /(^|[^\\])(?:(?:\B\[(?:[^\]\\"']|(["'])(?:(?!\2)[^\\]|\\.)*\2|\\.)*\])?(?:\b_(?!\s)(?: _|[^_\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: _|[^_\\\r\n]|\\.)+)*_\b|\B``(?!\s).+?(?:(?:\r?\n|\r).+?)*''\B|\B`(?!\s)(?:[^`'\s]|\s+\S)+['`]\B|\B(['*+#])(?!\s)(?: \3|(?!\3)[^\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: \3|(?!\3)[^\\\r\n]|\\.)+)*\3\B)|(?:\[(?:[^\]\\"']|(["'])(?:(?!\4)[^\\]|\\.)*\4|\\.)*\])?(?:(__|\*\*|\+\+\+?|##|\$\$|[~^]).+?(?:(?:\r?\n|\r).+?)*\5|\{[^}\r\n]+\}|\[\[\[?.+?(?:(?:\r?\n|\r).+?)*\]?\]\]|<<.+?(?:(?:\r?\n|\r).+?)*>>|\(\(\(?.+?(?:(?:\r?\n|\r).+?)*\)?\)\)))/m,
+ lookbehind: true,
+ inside: {
+ attributes: attributes,
+ url: {
+ pattern: /^(?:\[\[\[?.+?\]?\]\]|<<.+?>>)$/,
+ inside: {
+ punctuation: /^(?:\[\[\[?|<<)|(?:\]\]\]?|>>)$/,
+ },
+ },
+ 'attribute-ref': {
+ pattern: /^\{.+\}$/,
+ inside: {
+ variable: {
+ pattern: /(^\{)[a-z\d,+_-]+/,
+ lookbehind: true,
+ },
+ operator: /^[=?!#%@$]|!(?=[:}])/,
+ punctuation: /^\{|\}$|::?/,
+ },
+ },
+ italic: {
+ pattern: /^(['_])[\s\S]+\1$/,
+ inside: {
+ punctuation: /^(?:''?|__?)|(?:''?|__?)$/,
+ },
+ },
+ bold: {
+ pattern: /^\*[\s\S]+\*$/,
+ inside: {
+ punctuation: /^\*\*?|\*\*?$/,
+ },
+ },
+ punctuation:
+ /^(?:``?|\+{1,3}|##?|\$\$|[~^]|\(\(\(?)|(?:''?|\+{1,3}|##?|\$\$|[~^`]|\)?\)\))$/,
+ },
+ },
+ replacement: {
+ pattern: /\((?:C|R|TM)\)/,
+ alias: 'builtin',
+ },
+ entity: /&#?[\da-z]{1,8};/i,
+ 'line-continuation': {
+ pattern: /(^| )\+$/m,
+ lookbehind: true,
+ alias: 'punctuation',
+ },
+ });
+
+ // Allow some nesting. There is no recursion though, so cloning should not be needed.
+
+ function copyFromAsciiDoc(keys) {
+ keys = keys.split(' ');
+
+ var o = {};
+ for (var i = 0, l = keys.length; i < l; i++) {
+ o[keys[i]] = asciidoc[keys[i]];
+ }
+ return o;
+ }
+
+ attributes.inside['interpreted'].inside.rest = copyFromAsciiDoc(
+ 'macro inline replacement entity'
+ );
+
+ asciidoc['passthrough-block'].inside.rest = copyFromAsciiDoc('macro');
+
+ asciidoc['literal-block'].inside.rest = copyFromAsciiDoc('callout');
+
+ asciidoc['table'].inside.rest = copyFromAsciiDoc(
+ 'comment-block passthrough-block literal-block other-block list-punctuation indented-block comment title attribute-entry attributes hr page-break admonition list-label callout macro inline replacement entity line-continuation'
+ );
+
+ asciidoc['other-block'].inside.rest = copyFromAsciiDoc(
+ 'table list-punctuation indented-block comment attribute-entry attributes hr page-break admonition list-label macro inline replacement entity line-continuation'
+ );
+
+ asciidoc['title'].inside.rest = copyFromAsciiDoc(
+ 'macro inline replacement entity'
+ );
+
+ // Plugin to make entity title show the real entity, idea by Roman Komarov
+ Prism.hooks.add('wrap', function (env) {
+ if (env.type === 'entity') {
+ env.attributes['title'] = env.content.replace(/&amp;/, '&');
+ }
+ });
+
+ Prism.languages.adoc = Prism.languages.asciidoc;
+})(Prism);