OLD | NEW |
(Empty) | |
| 1 (function(Prism) { |
| 2 // We don't allow for pipes inside parentheses |
| 3 // to not break table pattern |(. foo |). bar | |
| 4 var modifierRegex = '(?:\\([^|)]+\\)|\\[[^\\]]+\\]|\\{[^}]+\\})+'; |
| 5 var modifierTokens = { |
| 6 'css': { |
| 7 pattern: /\{[^}]+\}/, |
| 8 inside: { |
| 9 rest: Prism.languages.css |
| 10 } |
| 11 }, |
| 12 'class-id': { |
| 13 pattern: /(\()[^)]+(?=\))/, |
| 14 lookbehind: true, |
| 15 alias: 'attr-value' |
| 16 }, |
| 17 'lang': { |
| 18 pattern: /(\[)[^\]]+(?=\])/, |
| 19 lookbehind: true, |
| 20 alias: 'attr-value' |
| 21 }, |
| 22 // Anything else is punctuation (the first pattern is for row/co
l spans inside tables) |
| 23 'punctuation': /[\\\/]\d+|\S/ |
| 24 }; |
| 25 |
| 26 |
| 27 Prism.languages.textile = Prism.languages.extend('markup', { |
| 28 'phrase': { |
| 29 pattern: /(^|\r|\n)\S[\s\S]*?(?=$|\r?\n\r?\n|\r\r)/, |
| 30 lookbehind: true, |
| 31 inside: { |
| 32 |
| 33 // h1. Header 1 |
| 34 'block-tag': { |
| 35 pattern: RegExp('^[a-z]\\w*(?:' + modifi
erRegex + '|[<>=()])*\\.'), |
| 36 inside: { |
| 37 'modifier': { |
| 38 pattern: RegExp('(^[a-z]
\\w*)(?:' + modifierRegex + '|[<>=()])+(?=\\.)'), |
| 39 lookbehind: true, |
| 40 inside: Prism.util.clone
(modifierTokens) |
| 41 }, |
| 42 'tag': /^[a-z]\w*/, |
| 43 'punctuation': /\.$/ |
| 44 } |
| 45 }, |
| 46 |
| 47 // # List item |
| 48 // * List item |
| 49 'list': { |
| 50 pattern: RegExp('^[*#]+(?:' + modifierRe
gex + ')?\\s+.+', 'm'), |
| 51 inside: { |
| 52 'modifier': { |
| 53 pattern: RegExp('(^[*#]+
)' + modifierRegex), |
| 54 lookbehind: true, |
| 55 inside: Prism.util.clone
(modifierTokens) |
| 56 }, |
| 57 'punctuation': /^[*#]+/ |
| 58 } |
| 59 }, |
| 60 |
| 61 // | cell | cell | cell | |
| 62 'table': { |
| 63 // Modifiers can be applied to the row:
{color:red}.|1|2|3| |
| 64 // or the cell: |{color:red}.1|2|3| |
| 65 pattern: RegExp('^(?:(?:' + modifierRege
x + '|[<>=()^~])+\\.\\s*)?(?:\\|(?:(?:' + modifierRegex + '|[<>=()^~_]|[\\\\/]\\
d+)+\\.)?[^|]*)+\\|', 'm'), |
| 66 inside: { |
| 67 'modifier': { |
| 68 // Modifiers for rows af
ter the first one are |
| 69 // preceded by a pipe an
d a line feed |
| 70 pattern: RegExp('(^|\\|(
?:\\r?\\n|\\r)?)(?:' + modifierRegex + '|[<>=()^~_]|[\\\\/]\\d+)+(?=\\.)'), |
| 71 lookbehind: true, |
| 72 inside: Prism.util.clone
(modifierTokens) |
| 73 }, |
| 74 'punctuation': /\||^\./ |
| 75 } |
| 76 }, |
| 77 |
| 78 'inline': { |
| 79 pattern: RegExp('(\\*\\*|__|\\?\\?|[*_%@
+\\-^~])(?:' + modifierRegex + ')?.+?\\1'), |
| 80 inside: { |
| 81 // Note: superscripts and subscr
ipts are not handled specifically |
| 82 |
| 83 // *bold*, **bold** |
| 84 'bold': { |
| 85 pattern: RegExp('((^\\*\
\*?)(?:' + modifierRegex + ')?).+?(?=\\2)'), |
| 86 lookbehind: true |
| 87 }, |
| 88 |
| 89 // _italic_, __italic__ |
| 90 'italic': { |
| 91 pattern: RegExp('((^__?)
(?:' + modifierRegex + ')?).+?(?=\\2)'), |
| 92 lookbehind: true |
| 93 }, |
| 94 |
| 95 // ??cite?? |
| 96 'cite': { |
| 97 pattern: RegExp('(^\\?\\
?(?:' + modifierRegex + ')?).+?(?=\\?\\?)'), |
| 98 lookbehind: true, |
| 99 alias: 'string' |
| 100 }, |
| 101 |
| 102 // @code@ |
| 103 'code': { |
| 104 pattern: RegExp('(^@(?:'
+ modifierRegex + ')?).+?(?=@)'), |
| 105 lookbehind: true, |
| 106 alias: 'keyword' |
| 107 }, |
| 108 |
| 109 // +inserted+ |
| 110 'inserted': { |
| 111 pattern: RegExp('(^\\+(?
:' + modifierRegex + ')?).+?(?=\\+)'), |
| 112 lookbehind: true |
| 113 }, |
| 114 |
| 115 // -deleted- |
| 116 'deleted': { |
| 117 pattern: RegExp('(^-(?:'
+ modifierRegex + ')?).+?(?=-)'), |
| 118 lookbehind: true |
| 119 }, |
| 120 |
| 121 // %span% |
| 122 'span': { |
| 123 pattern: RegExp('(^%(?:'
+ modifierRegex + ')?).+?(?=%)'), |
| 124 lookbehind: true |
| 125 }, |
| 126 |
| 127 'modifier': { |
| 128 pattern: RegExp('(^\\*\\
*|__|\\?\\?|[*_%@+\\-^~])' + modifierRegex), |
| 129 lookbehind: true, |
| 130 inside: Prism.util.clone
(modifierTokens) |
| 131 }, |
| 132 'punctuation': /[*_%?@+\-^~]+/ |
| 133 } |
| 134 }, |
| 135 |
| 136 // [alias]http://example.com |
| 137 'link-ref': { |
| 138 pattern: /^\[[^\]]+\]\S+$/m, |
| 139 inside: { |
| 140 'string': { |
| 141 pattern: /(\[)[^\]]+(?=\
])/, |
| 142 lookbehind: true |
| 143 }, |
| 144 'url': { |
| 145 pattern: /(\])\S+$/, |
| 146 lookbehind: true |
| 147 }, |
| 148 'punctuation': /[\[\]]/ |
| 149 } |
| 150 }, |
| 151 |
| 152 // "text":http://example.com |
| 153 // "text":link-ref |
| 154 'link': { |
| 155 pattern: RegExp('"(?:' + modifierRegex +
')?[^"]+":.+?(?=[^\\w/]?(?:\\s|$))'), |
| 156 inside: { |
| 157 'text': { |
| 158 pattern: RegExp('(^"(?:'
+ modifierRegex + ')?)[^"]+(?=")'), |
| 159 lookbehind: true |
| 160 }, |
| 161 'modifier': { |
| 162 pattern: RegExp('(^")' +
modifierRegex), |
| 163 lookbehind: true, |
| 164 inside: Prism.util.clone
(modifierTokens) |
| 165 }, |
| 166 'url': { |
| 167 pattern: /(:).+/, |
| 168 lookbehind: true |
| 169 }, |
| 170 'punctuation': /[":]/ |
| 171 } |
| 172 }, |
| 173 |
| 174 // !image.jpg! |
| 175 // !image.jpg(Title)!:http://example.com |
| 176 'image': { |
| 177 pattern: RegExp('!(?:' + modifierRegex +
'|[<>=()])*[^!\\s()]+(?:\\([^)]+\\))?!(?::.+?(?=[^\\w/]?(?:\\s|$)))?'), |
| 178 inside: { |
| 179 'source': { |
| 180 pattern: RegExp('(^!(?:'
+ modifierRegex + '|[<>=()])*)[^!\\s()]+(?:\\([^)]+\\))?(?=!)'), |
| 181 lookbehind: true, |
| 182 alias: 'url' |
| 183 }, |
| 184 'modifier': { |
| 185 pattern: RegExp('(^!)(?:
' + modifierRegex + '|[<>=()])+'), |
| 186 lookbehind: true, |
| 187 inside: Prism.util.clone
(modifierTokens) |
| 188 }, |
| 189 'url': { |
| 190 pattern: /(:).+/, |
| 191 lookbehind: true |
| 192 }, |
| 193 'punctuation': /[!:]/ |
| 194 } |
| 195 }, |
| 196 |
| 197 // Footnote[1] |
| 198 'footnote': { |
| 199 pattern: /\b\[\d+\]/, |
| 200 alias: 'comment', |
| 201 inside: { |
| 202 'punctuation': /\[|\]/ |
| 203 } |
| 204 }, |
| 205 |
| 206 // CSS(Cascading Style Sheet) |
| 207 'acronym': { |
| 208 pattern: /\b[A-Z\d]+\([^)]+\)/, |
| 209 inside: { |
| 210 'comment': { |
| 211 pattern: /(\()[^)]+(?=\)
)/, |
| 212 lookbehind: true |
| 213 }, |
| 214 'punctuation': /[()]/ |
| 215 } |
| 216 }, |
| 217 |
| 218 // Prism(C) |
| 219 'mark': { |
| 220 pattern: /\b\((TM|R|C)\)/, |
| 221 alias: 'comment', |
| 222 inside: { |
| 223 'punctuation':/[()]/ |
| 224 } |
| 225 } |
| 226 } |
| 227 } |
| 228 }); |
| 229 |
| 230 var nestedPatterns = { |
| 231 'inline': Prism.util.clone(Prism.languages.textile['phrase'].ins
ide['inline']), |
| 232 'link': Prism.util.clone(Prism.languages.textile['phrase'].insid
e['link']), |
| 233 'image': Prism.util.clone(Prism.languages.textile['phrase'].insi
de['image']), |
| 234 'footnote': Prism.util.clone(Prism.languages.textile['phrase'].i
nside['footnote']), |
| 235 'acronym': Prism.util.clone(Prism.languages.textile['phrase'].in
side['acronym']), |
| 236 'mark': Prism.util.clone(Prism.languages.textile['phrase'].insid
e['mark']) |
| 237 }; |
| 238 |
| 239 // Allow some nesting |
| 240 Prism.languages.textile['phrase'].inside['inline'].inside['bold'].inside
= nestedPatterns; |
| 241 Prism.languages.textile['phrase'].inside['inline'].inside['italic'].insi
de = nestedPatterns; |
| 242 Prism.languages.textile['phrase'].inside['inline'].inside['inserted'].in
side = nestedPatterns; |
| 243 Prism.languages.textile['phrase'].inside['inline'].inside['deleted'].ins
ide = nestedPatterns; |
| 244 Prism.languages.textile['phrase'].inside['inline'].inside['span'].inside
= nestedPatterns; |
| 245 |
| 246 // Allow some styles inside table cells |
| 247 Prism.languages.textile['phrase'].inside['table'].inside['inline'] = nes
tedPatterns['inline']; |
| 248 Prism.languages.textile['phrase'].inside['table'].inside['link'] = neste
dPatterns['link']; |
| 249 Prism.languages.textile['phrase'].inside['table'].inside['image'] = nest
edPatterns['image']; |
| 250 Prism.languages.textile['phrase'].inside['table'].inside['footnote'] = n
estedPatterns['footnote']; |
| 251 Prism.languages.textile['phrase'].inside['table'].inside['acronym'] = ne
stedPatterns['acronym']; |
| 252 Prism.languages.textile['phrase'].inside['table'].inside['mark'] = neste
dPatterns['mark']; |
| 253 |
| 254 }(Prism)); |
OLD | NEW |