diff options
Diffstat (limited to 'node_modules/prismjs/components/prism-textile.js')
| -rw-r--r-- | node_modules/prismjs/components/prism-textile.js | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/node_modules/prismjs/components/prism-textile.js b/node_modules/prismjs/components/prism-textile.js new file mode 100644 index 00000000..8e72a117 --- /dev/null +++ b/node_modules/prismjs/components/prism-textile.js @@ -0,0 +1,257 @@ +(function(Prism) { + // We don't allow for pipes inside parentheses + // to not break table pattern |(. foo |). bar | + var modifierRegex = '(?:\\([^|)]+\\)|\\[[^\\]]+\\]|\\{[^}]+\\})+'; + var modifierTokens = { + 'css': { + pattern: /\{[^}]+\}/, + inside: { + rest: Prism.languages.css + } + }, + 'class-id': { + pattern: /(\()[^)]+(?=\))/, + lookbehind: true, + alias: 'attr-value' + }, + 'lang': { + pattern: /(\[)[^\]]+(?=\])/, + lookbehind: true, + alias: 'attr-value' + }, + // Anything else is punctuation (the first pattern is for row/col spans inside tables) + 'punctuation': /[\\\/]\d+|\S/ + }; + + + Prism.languages.textile = Prism.languages.extend('markup', { + 'phrase': { + pattern: /(^|\r|\n)\S[\s\S]*?(?=$|\r?\n\r?\n|\r\r)/, + lookbehind: true, + inside: { + + // h1. Header 1 + 'block-tag': { + pattern: RegExp('^[a-z]\\w*(?:' + modifierRegex + '|[<>=()])*\\.'), + inside: { + 'modifier': { + pattern: RegExp('(^[a-z]\\w*)(?:' + modifierRegex + '|[<>=()])+(?=\\.)'), + lookbehind: true, + inside: modifierTokens + }, + 'tag': /^[a-z]\w*/, + 'punctuation': /\.$/ + } + }, + + // # List item + // * List item + 'list': { + pattern: RegExp('^[*#]+(?:' + modifierRegex + ')?\\s+.+', 'm'), + inside: { + 'modifier': { + pattern: RegExp('(^[*#]+)' + modifierRegex), + lookbehind: true, + inside: modifierTokens + }, + 'punctuation': /^[*#]+/ + } + }, + + // | cell | cell | cell | + 'table': { + // Modifiers can be applied to the row: {color:red}.|1|2|3| + // or the cell: |{color:red}.1|2|3| + pattern: RegExp('^(?:(?:' + modifierRegex + '|[<>=()^~])+\\.\\s*)?(?:\\|(?:(?:' + modifierRegex + '|[<>=()^~_]|[\\\\/]\\d+)+\\.)?[^|]*)+\\|', 'm'), + inside: { + 'modifier': { + // Modifiers for rows after the first one are + // preceded by a pipe and a line feed + pattern: RegExp('(^|\\|(?:\\r?\\n|\\r)?)(?:' + modifierRegex + '|[<>=()^~_]|[\\\\/]\\d+)+(?=\\.)'), + lookbehind: true, + inside: modifierTokens + }, + 'punctuation': /\||^\./ + } + }, + + 'inline': { + pattern: RegExp('(\\*\\*|__|\\?\\?|[*_%@+\\-^~])(?:' + modifierRegex + ')?.+?\\1'), + inside: { + // Note: superscripts and subscripts are not handled specifically + + // *bold*, **bold** + 'bold': { + pattern: RegExp('(^(\\*\\*?)(?:' + modifierRegex + ')?).+?(?=\\2)'), + lookbehind: true + }, + + // _italic_, __italic__ + 'italic': { + pattern: RegExp('(^(__?)(?:' + modifierRegex + ')?).+?(?=\\2)'), + lookbehind: true + }, + + // ??cite?? + 'cite': { + pattern: RegExp('(^\\?\\?(?:' + modifierRegex + ')?).+?(?=\\?\\?)'), + lookbehind: true, + alias: 'string' + }, + + // @code@ + 'code': { + pattern: RegExp('(^@(?:' + modifierRegex + ')?).+?(?=@)'), + lookbehind: true, + alias: 'keyword' + }, + + // +inserted+ + 'inserted': { + pattern: RegExp('(^\\+(?:' + modifierRegex + ')?).+?(?=\\+)'), + lookbehind: true + }, + + // -deleted- + 'deleted': { + pattern: RegExp('(^-(?:' + modifierRegex + ')?).+?(?=-)'), + lookbehind: true + }, + + // %span% + 'span': { + pattern: RegExp('(^%(?:' + modifierRegex + ')?).+?(?=%)'), + lookbehind: true + }, + + 'modifier': { + pattern: RegExp('(^\\*\\*|__|\\?\\?|[*_%@+\\-^~])' + modifierRegex), + lookbehind: true, + inside: modifierTokens + }, + 'punctuation': /[*_%?@+\-^~]+/ + } + }, + + // [alias]http://example.com + 'link-ref': { + pattern: /^\[[^\]]+\]\S+$/m, + inside: { + 'string': { + pattern: /(\[)[^\]]+(?=\])/, + lookbehind: true + }, + 'url': { + pattern: /(\])\S+$/, + lookbehind: true + }, + 'punctuation': /[\[\]]/ + } + }, + + // "text":http://example.com + // "text":link-ref + 'link': { + pattern: RegExp('"(?:' + modifierRegex + ')?[^"]+":.+?(?=[^\\w/]?(?:\\s|$))'), + inside: { + 'text': { + pattern: RegExp('(^"(?:' + modifierRegex + ')?)[^"]+(?=")'), + lookbehind: true + }, + 'modifier': { + pattern: RegExp('(^")' + modifierRegex), + lookbehind: true, + inside: modifierTokens + }, + 'url': { + pattern: /(:).+/, + lookbehind: true + }, + 'punctuation': /[":]/ + } + }, + + // !image.jpg! + // !image.jpg(Title)!:http://example.com + 'image': { + pattern: RegExp('!(?:' + modifierRegex + '|[<>=()])*[^!\\s()]+(?:\\([^)]+\\))?!(?::.+?(?=[^\\w/]?(?:\\s|$)))?'), + inside: { + 'source': { + pattern: RegExp('(^!(?:' + modifierRegex + '|[<>=()])*)[^!\\s()]+(?:\\([^)]+\\))?(?=!)'), + lookbehind: true, + alias: 'url' + }, + 'modifier': { + pattern: RegExp('(^!)(?:' + modifierRegex + '|[<>=()])+'), + lookbehind: true, + inside: modifierTokens + }, + 'url': { + pattern: /(:).+/, + lookbehind: true + }, + 'punctuation': /[!:]/ + } + }, + + // Footnote[1] + 'footnote': { + pattern: /\b\[\d+\]/, + alias: 'comment', + inside: { + 'punctuation': /\[|\]/ + } + }, + + // CSS(Cascading Style Sheet) + 'acronym': { + pattern: /\b[A-Z\d]+\([^)]+\)/, + inside: { + 'comment': { + pattern: /(\()[^)]+(?=\))/, + lookbehind: true + }, + 'punctuation': /[()]/ + } + }, + + // Prism(C) + 'mark': { + pattern: /\b\((?:TM|R|C)\)/, + alias: 'comment', + inside: { + 'punctuation':/[()]/ + } + } + } + } + }); + + var nestedPatterns = { + 'inline': Prism.languages.textile['phrase'].inside['inline'], + 'link': Prism.languages.textile['phrase'].inside['link'], + 'image': Prism.languages.textile['phrase'].inside['image'], + 'footnote': Prism.languages.textile['phrase'].inside['footnote'], + 'acronym': Prism.languages.textile['phrase'].inside['acronym'], + 'mark': Prism.languages.textile['phrase'].inside['mark'] + }; + + // Only allow alpha-numeric HTML tags, not XML tags + Prism.languages.textile.tag.pattern = /<\/?(?!\d)[a-z0-9]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i; + + // Allow some nesting + Prism.languages.textile['phrase'].inside['inline'].inside['bold'].inside = nestedPatterns; + Prism.languages.textile['phrase'].inside['inline'].inside['italic'].inside = nestedPatterns; + Prism.languages.textile['phrase'].inside['inline'].inside['inserted'].inside = nestedPatterns; + Prism.languages.textile['phrase'].inside['inline'].inside['deleted'].inside = nestedPatterns; + Prism.languages.textile['phrase'].inside['inline'].inside['span'].inside = nestedPatterns; + + // Allow some styles inside table cells + Prism.languages.textile['phrase'].inside['table'].inside['inline'] = nestedPatterns['inline']; + Prism.languages.textile['phrase'].inside['table'].inside['link'] = nestedPatterns['link']; + Prism.languages.textile['phrase'].inside['table'].inside['image'] = nestedPatterns['image']; + Prism.languages.textile['phrase'].inside['table'].inside['footnote'] = nestedPatterns['footnote']; + Prism.languages.textile['phrase'].inside['table'].inside['acronym'] = nestedPatterns['acronym']; + Prism.languages.textile['phrase'].inside['table'].inside['mark'] = nestedPatterns['mark']; + +}(Prism));
\ No newline at end of file |
