-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #800 from Golmote/prism-asciidoc
Add support for AsciiDoc
- Loading branch information
Showing
27 changed files
with
2,311 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,271 @@ | ||
(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+$).+/ | ||
} | ||
}; | ||
Prism.languages.asciidoc = { | ||
'comment-block': { | ||
pattern: /^(\/{4,})(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?\1/m, | ||
alias: 'comment' | ||
}, | ||
'table': { | ||
pattern: /^\|={3,}(?:(?:\r?\n|\r).*)*?(?:\r?\n|\r)\|={3,}$/m, | ||
inside: { | ||
'specifiers': { | ||
pattern: /(?!\|)(?:(?:(?:\d+(?:\.\d+)?|\.\d+)[+*])?(?:[<^>](?:\.[<^>])?|\.[<^>])?[a-z]*)(?=\|)/, | ||
alias: 'attr-value' | ||
}, | ||
'punctuation': { | ||
pattern: /(^|[^\\])[|!]=*/, | ||
lookbehind: true | ||
} | ||
// See rest below | ||
} | ||
}, | ||
|
||
'passthrough-block': { | ||
pattern: /^(\+{4,})(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?\1$/m, | ||
inside: { | ||
'punctuation': /^\++|\++$/ | ||
// See rest below | ||
} | ||
}, | ||
// Literal blocks and listing blocks | ||
'literal-block': { | ||
pattern: /^(-{4,}|\.{4,})(?:\r?\n|\r)(?:.*(?:\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)(?:.*(?:\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: /^(?:TIP|NOTE|IMPORTANT|WARNING|CAUTION):/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)(?: ['`]|.)+?(?:(?:\r?\n|\r)(?: ['`]|.)+?)*['`]\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|TM|R)\)/, | ||
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. | ||
|
||
attributes.inside['interpreted'].inside.rest = { | ||
'macro': Prism.languages.asciidoc['macro'], | ||
'inline': Prism.languages.asciidoc['inline'], | ||
'replacement': Prism.languages.asciidoc['replacement'], | ||
'entity': Prism.languages.asciidoc['entity'] | ||
}; | ||
|
||
Prism.languages.asciidoc['passthrough-block'].inside.rest = { | ||
'macro': Prism.languages.asciidoc['macro'] | ||
}; | ||
|
||
Prism.languages.asciidoc['literal-block'].inside.rest = { | ||
'callout': Prism.languages.asciidoc['callout'] | ||
}; | ||
|
||
Prism.languages.asciidoc['table'].inside.rest = { | ||
'comment-block': Prism.languages.asciidoc['comment-block'], | ||
'passthrough-block': Prism.languages.asciidoc['passthrough-block'], | ||
'literal-block': Prism.languages.asciidoc['literal-block'], | ||
'other-block': Prism.languages.asciidoc['other-block'], | ||
'list-punctuation': Prism.languages.asciidoc['list-punctuation'], | ||
'indented-block': Prism.languages.asciidoc['indented-block'], | ||
'comment': Prism.languages.asciidoc['comment'], | ||
'title': Prism.languages.asciidoc['title'], | ||
'attribute-entry': Prism.languages.asciidoc['attribute-entry'], | ||
'attributes': Prism.languages.asciidoc['attributes'], | ||
'hr': Prism.languages.asciidoc['hr'], | ||
'page-break': Prism.languages.asciidoc['page-break'], | ||
'admonition': Prism.languages.asciidoc['admonition'], | ||
'list-label': Prism.languages.asciidoc['list-label'], | ||
'callout': Prism.languages.asciidoc['callout'], | ||
'macro': Prism.languages.asciidoc['macro'], | ||
'inline': Prism.languages.asciidoc['inline'], | ||
'replacement': Prism.languages.asciidoc['replacement'], | ||
'entity': Prism.languages.asciidoc['entity'], | ||
'line-continuation': Prism.languages.asciidoc['line-continuation'] | ||
}; | ||
|
||
Prism.languages.asciidoc['other-block'].inside.rest = { | ||
'table': Prism.languages.asciidoc['table'], | ||
'list-punctuation': Prism.languages.asciidoc['list-punctuation'], | ||
'indented-block': Prism.languages.asciidoc['indented-block'], | ||
'comment': Prism.languages.asciidoc['comment'], | ||
'attribute-entry': Prism.languages.asciidoc['attribute-entry'], | ||
'attributes': Prism.languages.asciidoc['attributes'], | ||
'hr': Prism.languages.asciidoc['hr'], | ||
'page-break': Prism.languages.asciidoc['page-break'], | ||
'admonition': Prism.languages.asciidoc['admonition'], | ||
'list-label': Prism.languages.asciidoc['list-label'], | ||
'macro': Prism.languages.asciidoc['macro'], | ||
'inline': Prism.languages.asciidoc['inline'], | ||
'replacement': Prism.languages.asciidoc['replacement'], | ||
'entity': Prism.languages.asciidoc['entity'], | ||
'line-continuation': Prism.languages.asciidoc['line-continuation'] | ||
}; | ||
|
||
Prism.languages.asciidoc['title'].inside.rest = { | ||
'macro': Prism.languages.asciidoc['macro'], | ||
'inline': Prism.languages.asciidoc['inline'], | ||
'replacement': Prism.languages.asciidoc['replacement'], | ||
'entity': Prism.languages.asciidoc['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(/&/, '&'); | ||
} | ||
}); | ||
}(Prism)); |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
<h1>AsciiDoc</h1> | ||
<p>To use this language, use the class "language-asciidoc".</p> | ||
|
||
<h2>Comments</h2> | ||
<pre><code>///// | ||
Comment block | ||
///// | ||
|
||
// Comment line</code></pre> | ||
|
||
<h2>Titles</h2> | ||
<pre><code>Level 0 | ||
======== | ||
Level 1 | ||
-------- | ||
Level 2 | ||
~~~~~~~~ | ||
Level 3 | ||
^^^^^^^^ | ||
Level 4 | ||
++++++++ | ||
|
||
= Document Title (level 0) = | ||
== Section title (level 1) == | ||
=== Section title (level 2) === | ||
==== Section title (level 3) ==== | ||
===== Section title (level 4) ===== | ||
|
||
.Notes</code></pre> | ||
|
||
<h2>Blocks</h2> | ||
<pre><code>++++++++++++++++++++++++++ | ||
Passthrough block | ||
++++++++++++++++++++++++++ | ||
|
||
-------------------------- | ||
Listing block | ||
-------------------------- | ||
|
||
.......................... | ||
Literal block | ||
No *highlighting* _here_ | ||
.......................... | ||
|
||
************************** | ||
Sidebar block | ||
************************** | ||
|
||
[quote,'http://en.wikipedia.org/wiki/Samuel_Johnson[Samuel Johnson]'] | ||
_____________________________________________________________________ | ||
Sir, a woman's preaching is like a dog's walking on his hind legs. It | ||
is not done well; but you are surprised to find it done at all. | ||
_____________________________________________________________________ | ||
|
||
========================== | ||
Example block | ||
==========================</code></pre> | ||
|
||
<h2>Lists</h2> | ||
<pre><code>- List item. | ||
* List item. | ||
** List item. | ||
*** List item. | ||
**** List item. | ||
***** List item. | ||
|
||
1. Arabic (decimal) numbered list item. | ||
a. Lower case alpha (letter) numbered list item. | ||
F. Upper case alpha (letter) numbered list item. | ||
iii) Lower case roman numbered list item. | ||
IX) Upper case roman numbered list item. | ||
|
||
. Arabic (decimal) numbered list item. | ||
.. Lower case alpha (letter) numbered list item. | ||
... Lower case roman numbered list item. | ||
.... Upper case alpha (letter) numbered list item. | ||
..... Upper case roman numbered list item. | ||
|
||
Dolor:: | ||
Donec eget arcu bibendum nunc consequat lobortis. | ||
Suspendisse;; | ||
A massa id sem aliquam auctor. | ||
Morbi;; | ||
Pretium nulla vel lorem. | ||
In;; | ||
Dictum mauris in urna. | ||
Vivamus::: Fringilla mi eu lacus. | ||
Donec::: Eget arcu bibendum nunc consequat lobortis.</code></pre> | ||
|
||
<h2>Tables</h2> | ||
<pre><code>[cols="e,m,^,>s",width="25%"] | ||
|============================ | ||
|1 >s|2 |3 |4 | ||
^|5 2.2+^.^|6 .3+<.>m|7 | ||
^|8 | ||
|9 2+>|10 | ||
|============================</code></pre> | ||
|
||
<h2>Inline styles</h2> | ||
<pre><code>*Some bold text* | ||
This is an _emphasis_ | ||
[[[walsh-muellner]]]</code></pre> | ||
|
||
<h2>Attribute entries</h2> | ||
<pre><code>:Author Initials: JB | ||
{authorinitials} | ||
:Author Initials!:</code></pre> |
Oops, something went wrong.