aboutsummaryrefslogtreecommitdiff
path: root/node_modules/prismjs/components/prism-textile.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/prismjs/components/prism-textile.js')
-rw-r--r--node_modules/prismjs/components/prism-textile.js257
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