source: node_modules/refractor/lang/haml.js

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 4.6 KB
Line 
1'use strict'
2var refractorRuby = require('./ruby.js')
3module.exports = haml
4haml.displayName = 'haml'
5haml.aliases = []
6function haml(Prism) {
7 Prism.register(refractorRuby)
8 /* TODO
9Handle multiline code after tag
10%foo= some |
11multiline |
12code |
13*/
14 ;(function (Prism) {
15 Prism.languages.haml = {
16 // Multiline stuff should appear before the rest
17 'multiline-comment': {
18 pattern:
19 /((?:^|\r?\n|\r)([\t ]*))(?:\/|-#).*(?:(?:\r?\n|\r)\2[\t ].+)*/,
20 lookbehind: true,
21 alias: 'comment'
22 },
23 'multiline-code': [
24 {
25 pattern:
26 /((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*,[\t ]*(?:(?:\r?\n|\r)\2[\t ].*,[\t ]*)*(?:(?:\r?\n|\r)\2[\t ].+)/,
27 lookbehind: true,
28 inside: Prism.languages.ruby
29 },
30 {
31 pattern:
32 /((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*\|[\t ]*(?:(?:\r?\n|\r)\2[\t ].*\|[\t ]*)*/,
33 lookbehind: true,
34 inside: Prism.languages.ruby
35 }
36 ],
37 // See at the end of the file for known filters
38 filter: {
39 pattern:
40 /((?:^|\r?\n|\r)([\t ]*)):[\w-]+(?:(?:\r?\n|\r)(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/,
41 lookbehind: true,
42 inside: {
43 'filter-name': {
44 pattern: /^:[\w-]+/,
45 alias: 'symbol'
46 }
47 }
48 },
49 markup: {
50 pattern: /((?:^|\r?\n|\r)[\t ]*)<.+/,
51 lookbehind: true,
52 inside: Prism.languages.markup
53 },
54 doctype: {
55 pattern: /((?:^|\r?\n|\r)[\t ]*)!!!(?: .+)?/,
56 lookbehind: true
57 },
58 tag: {
59 // Allows for one nested group of braces
60 pattern:
61 /((?:^|\r?\n|\r)[\t ]*)[%.#][\w\-#.]*[\w\-](?:\([^)]+\)|\{(?:\{[^}]+\}|[^{}])+\}|\[[^\]]+\])*[\/<>]*/,
62 lookbehind: true,
63 inside: {
64 attributes: [
65 {
66 // Lookbehind tries to prevent interpolations from breaking it all
67 // Allows for one nested group of braces
68 pattern: /(^|[^#])\{(?:\{[^}]+\}|[^{}])+\}/,
69 lookbehind: true,
70 inside: Prism.languages.ruby
71 },
72 {
73 pattern: /\([^)]+\)/,
74 inside: {
75 'attr-value': {
76 pattern: /(=\s*)(?:"(?:\\.|[^\\"\r\n])*"|[^)\s]+)/,
77 lookbehind: true
78 },
79 'attr-name': /[\w:-]+(?=\s*!?=|\s*[,)])/,
80 punctuation: /[=(),]/
81 }
82 },
83 {
84 pattern: /\[[^\]]+\]/,
85 inside: Prism.languages.ruby
86 }
87 ],
88 punctuation: /[<>]/
89 }
90 },
91 code: {
92 pattern: /((?:^|\r?\n|\r)[\t ]*(?:[~-]|[&!]?=)).+/,
93 lookbehind: true,
94 inside: Prism.languages.ruby
95 },
96 // Interpolations in plain text
97 interpolation: {
98 pattern: /#\{[^}]+\}/,
99 inside: {
100 delimiter: {
101 pattern: /^#\{|\}$/,
102 alias: 'punctuation'
103 },
104 ruby: {
105 pattern: /[\s\S]+/,
106 inside: Prism.languages.ruby
107 }
108 }
109 },
110 punctuation: {
111 pattern: /((?:^|\r?\n|\r)[\t ]*)[~=\-&!]+/,
112 lookbehind: true
113 }
114 }
115 var filter_pattern =
116 '((?:^|\\r?\\n|\\r)([\\t ]*)):{{filter_name}}(?:(?:\\r?\\n|\\r)(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+' // Non exhaustive list of available filters and associated languages
117 var filters = [
118 'css',
119 {
120 filter: 'coffee',
121 language: 'coffeescript'
122 },
123 'erb',
124 'javascript',
125 'less',
126 'markdown',
127 'ruby',
128 'scss',
129 'textile'
130 ]
131 var all_filters = {}
132 for (var i = 0, l = filters.length; i < l; i++) {
133 var filter = filters[i]
134 filter =
135 typeof filter === 'string'
136 ? {
137 filter: filter,
138 language: filter
139 }
140 : filter
141 if (Prism.languages[filter.language]) {
142 all_filters['filter-' + filter.filter] = {
143 pattern: RegExp(
144 filter_pattern.replace('{{filter_name}}', function () {
145 return filter.filter
146 })
147 ),
148 lookbehind: true,
149 inside: {
150 'filter-name': {
151 pattern: /^:[\w-]+/,
152 alias: 'symbol'
153 },
154 text: {
155 pattern: /[\s\S]+/,
156 alias: [filter.language, 'language-' + filter.language],
157 inside: Prism.languages[filter.language]
158 }
159 }
160 }
161 }
162 }
163 Prism.languages.insertBefore('haml', 'filter', all_filters)
164 })(Prism)
165}
Note: See TracBrowser for help on using the repository browser.