annotate .cms/lib/codemirror/mode/textile/textile.js @ 1:1d486627aa1e draft default tip

24.10
author Coffee CMS <info@coffee-cms.ru>
date Sat, 12 Oct 2024 02:51:39 +0000
parents 78edf6b517a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 (function(mod) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 if (typeof exports == "object" && typeof module == "object") { // CommonJS
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 mod(require("../../lib/codemirror"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 } else if (typeof define == "function" && define.amd) { // AMD
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 define(["../../lib/codemirror"], mod);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 } else { // Plain browser env
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 mod(CodeMirror);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 })(function(CodeMirror) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13 "use strict";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 var TOKEN_STYLES = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 addition: "positive",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 attributes: "attribute",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 bold: "strong",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 cite: "keyword",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 code: "atom",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 definitionList: "number",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 deletion: "negative",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 div: "punctuation",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 em: "em",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 footnote: "variable",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 footCite: "qualifier",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 header: "header",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 html: "comment",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 image: "string",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 italic: "em",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 link: "link",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 linkDefinition: "link",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 list1: "variable-2",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 list2: "variable-3",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 list3: "keyword",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 notextile: "string-2",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 pre: "operator",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 p: "property",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 quote: "bracket",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 span: "quote",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 specialChar: "tag",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 strong: "strong",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 sub: "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 sup: "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 table: "variable-3",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 tableHeading: "operator"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 function startNewLine(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 state.mode = Modes.newLayout;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 state.tableHeading = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 if (state.layoutType === "definitionList" && state.spanningLayout &&
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 stream.match(RE("definitionListEnd"), false))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 state.spanningLayout = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 function handlePhraseModifier(stream, state, ch) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 if (ch === "_") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 if (stream.eat("_"))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 return togglePhraseModifier(stream, state, "italic", /__/, 2);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 return togglePhraseModifier(stream, state, "em", /_/, 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 if (ch === "*") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 if (stream.eat("*")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 return togglePhraseModifier(stream, state, "bold", /\*\*/, 2);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 return togglePhraseModifier(stream, state, "strong", /\*/, 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 if (ch === "[") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 if (stream.match(/\d+\]/)) state.footCite = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 if (ch === "(") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 var spec = stream.match(/^(r|tm|c)\)/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 if (spec)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 return tokenStylesWith(state, TOKEN_STYLES.specialChar);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 if (ch === "<" && stream.match(/(\w+)[^>]+>[^<]+<\/\1>/))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 return tokenStylesWith(state, TOKEN_STYLES.html);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 if (ch === "?" && stream.eat("?"))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 return togglePhraseModifier(stream, state, "cite", /\?\?/, 2);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 if (ch === "=" && stream.eat("="))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 return togglePhraseModifier(stream, state, "notextile", /==/, 2);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 if (ch === "-" && !stream.eat("-"))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 return togglePhraseModifier(stream, state, "deletion", /-/, 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 if (ch === "+")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 return togglePhraseModifier(stream, state, "addition", /\+/, 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 if (ch === "~")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 return togglePhraseModifier(stream, state, "sub", /~/, 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 if (ch === "^")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 return togglePhraseModifier(stream, state, "sup", /\^/, 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 if (ch === "%")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 return togglePhraseModifier(stream, state, "span", /%/, 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108 if (ch === "@")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 return togglePhraseModifier(stream, state, "code", /@/, 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 if (ch === "!") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 var type = togglePhraseModifier(stream, state, "image", /(?:\([^\)]+\))?!/, 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 stream.match(/^:\S+/); // optional Url portion
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 return type;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 function togglePhraseModifier(stream, state, phraseModifier, closeRE, openSize) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 var charBefore = stream.pos > openSize ? stream.string.charAt(stream.pos - openSize - 1) : null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121 var charAfter = stream.peek();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 if (state[phraseModifier]) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 if ((!charAfter || /\W/.test(charAfter)) && charBefore && /\S/.test(charBefore)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124 var type = tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 state[phraseModifier] = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 return type;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128 } else if ((!charBefore || /\W/.test(charBefore)) && charAfter && /\S/.test(charAfter) &&
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129 stream.match(new RegExp("^.*\\S" + closeRE.source + "(?:\\W|$)"), false)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 state[phraseModifier] = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131 state.mode = Modes.attributes;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
133 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
134 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
135
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
136 function tokenStyles(state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
137 var disabled = textileDisabled(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
138 if (disabled) return disabled;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
139
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
140 var styles = [];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
141 if (state.layoutType) styles.push(TOKEN_STYLES[state.layoutType]);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
142
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
143 styles = styles.concat(activeStyles(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
144 state, "addition", "bold", "cite", "code", "deletion", "em", "footCite",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
145 "image", "italic", "link", "span", "strong", "sub", "sup", "table", "tableHeading"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
146
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
147 if (state.layoutType === "header")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
148 styles.push(TOKEN_STYLES.header + "-" + state.header);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
149
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
150 return styles.length ? styles.join(" ") : null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
151 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
152
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
153 function textileDisabled(state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
154 var type = state.layoutType;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
155
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
156 switch(type) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
157 case "notextile":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
158 case "code":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
159 case "pre":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
160 return TOKEN_STYLES[type];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
161 default:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
162 if (state.notextile)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
163 return TOKEN_STYLES.notextile + (type ? (" " + TOKEN_STYLES[type]) : "");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
164 return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
165 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
166 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
167
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
168 function tokenStylesWith(state, extraStyles) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
169 var disabled = textileDisabled(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
170 if (disabled) return disabled;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
171
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
172 var type = tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
173 if (extraStyles)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
174 return type ? (type + " " + extraStyles) : extraStyles;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
175 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
176 return type;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
177 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
178
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
179 function activeStyles(state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
180 var styles = [];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
181 for (var i = 1; i < arguments.length; ++i) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
182 if (state[arguments[i]])
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
183 styles.push(TOKEN_STYLES[arguments[i]]);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
184 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
185 return styles;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
186 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
187
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
188 function blankLine(state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
189 var spanningLayout = state.spanningLayout, type = state.layoutType;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
190
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
191 for (var key in state) if (state.hasOwnProperty(key))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
192 delete state[key];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
193
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
194 state.mode = Modes.newLayout;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
195 if (spanningLayout) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
196 state.layoutType = type;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
197 state.spanningLayout = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
198 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
199 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
200
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
201 var REs = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
202 cache: {},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
203 single: {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
204 bc: "bc",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
205 bq: "bq",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
206 definitionList: /- .*?:=+/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
207 definitionListEnd: /.*=:\s*$/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
208 div: "div",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
209 drawTable: /\|.*\|/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
210 foot: /fn\d+/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
211 header: /h[1-6]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
212 html: /\s*<(?:\/)?(\w+)(?:[^>]+)?>(?:[^<]+<\/\1>)?/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
213 link: /[^"]+":\S/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
214 linkDefinition: /\[[^\s\]]+\]\S+/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
215 list: /(?:#+|\*+)/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
216 notextile: "notextile",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
217 para: "p",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
218 pre: "pre",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
219 table: "table",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
220 tableCellAttributes: /[\/\\]\d+/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
221 tableHeading: /\|_\./,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
222 tableText: /[^"_\*\[\(\?\+~\^%@|-]+/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
223 text: /[^!"_=\*\[\(<\?\+~\^%@-]+/
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
224 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
225 attributes: {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
226 align: /(?:<>|<|>|=)/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
227 selector: /\([^\(][^\)]+\)/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
228 lang: /\[[^\[\]]+\]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
229 pad: /(?:\(+|\)+){1,2}/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
230 css: /\{[^\}]+\}/
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
231 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
232 createRe: function(name) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
233 switch (name) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
234 case "drawTable":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
235 return REs.makeRe("^", REs.single.drawTable, "$");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
236 case "html":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
237 return REs.makeRe("^", REs.single.html, "(?:", REs.single.html, ")*", "$");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
238 case "linkDefinition":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
239 return REs.makeRe("^", REs.single.linkDefinition, "$");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
240 case "listLayout":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
241 return REs.makeRe("^", REs.single.list, RE("allAttributes"), "*\\s+");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
242 case "tableCellAttributes":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
243 return REs.makeRe("^", REs.choiceRe(REs.single.tableCellAttributes,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
244 RE("allAttributes")), "+\\.");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
245 case "type":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
246 return REs.makeRe("^", RE("allTypes"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
247 case "typeLayout":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
248 return REs.makeRe("^", RE("allTypes"), RE("allAttributes"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
249 "*\\.\\.?", "(\\s+|$)");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
250 case "attributes":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
251 return REs.makeRe("^", RE("allAttributes"), "+");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
252
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
253 case "allTypes":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
254 return REs.choiceRe(REs.single.div, REs.single.foot,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
255 REs.single.header, REs.single.bc, REs.single.bq,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
256 REs.single.notextile, REs.single.pre, REs.single.table,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
257 REs.single.para);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
258
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
259 case "allAttributes":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
260 return REs.choiceRe(REs.attributes.selector, REs.attributes.css,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
261 REs.attributes.lang, REs.attributes.align, REs.attributes.pad);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
262
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
263 default:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
264 return REs.makeRe("^", REs.single[name]);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
265 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
266 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
267 makeRe: function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
268 var pattern = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
269 for (var i = 0; i < arguments.length; ++i) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
270 var arg = arguments[i];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
271 pattern += (typeof arg === "string") ? arg : arg.source;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
272 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
273 return new RegExp(pattern);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
274 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
275 choiceRe: function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
276 var parts = [arguments[0]];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
277 for (var i = 1; i < arguments.length; ++i) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
278 parts[i * 2 - 1] = "|";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
279 parts[i * 2] = arguments[i];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
280 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
281
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
282 parts.unshift("(?:");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
283 parts.push(")");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
284 return REs.makeRe.apply(null, parts);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
285 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
286 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
287
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
288 function RE(name) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
289 return (REs.cache[name] || (REs.cache[name] = REs.createRe(name)));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
290 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
291
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
292 var Modes = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
293 newLayout: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
294 if (stream.match(RE("typeLayout"), false)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
295 state.spanningLayout = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
296 return (state.mode = Modes.blockType)(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
297 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
298 var newMode;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
299 if (!textileDisabled(state)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
300 if (stream.match(RE("listLayout"), false))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
301 newMode = Modes.list;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
302 else if (stream.match(RE("drawTable"), false))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
303 newMode = Modes.table;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
304 else if (stream.match(RE("linkDefinition"), false))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
305 newMode = Modes.linkDefinition;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
306 else if (stream.match(RE("definitionList")))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
307 newMode = Modes.definitionList;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
308 else if (stream.match(RE("html"), false))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
309 newMode = Modes.html;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
310 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
311 return (state.mode = (newMode || Modes.text))(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
312 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
313
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
314 blockType: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
315 var match, type;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
316 state.layoutType = null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
317
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
318 if (match = stream.match(RE("type")))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
319 type = match[0];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
320 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
321 return (state.mode = Modes.text)(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
322
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
323 if (match = type.match(RE("header"))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
324 state.layoutType = "header";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
325 state.header = parseInt(match[0][1]);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
326 } else if (type.match(RE("bq"))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
327 state.layoutType = "quote";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
328 } else if (type.match(RE("bc"))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
329 state.layoutType = "code";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
330 } else if (type.match(RE("foot"))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
331 state.layoutType = "footnote";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
332 } else if (type.match(RE("notextile"))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
333 state.layoutType = "notextile";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
334 } else if (type.match(RE("pre"))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
335 state.layoutType = "pre";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
336 } else if (type.match(RE("div"))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
337 state.layoutType = "div";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
338 } else if (type.match(RE("table"))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
339 state.layoutType = "table";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
340 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
341
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
342 state.mode = Modes.attributes;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
343 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
344 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
345
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
346 text: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
347 if (stream.match(RE("text"))) return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
348
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
349 var ch = stream.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
350 if (ch === '"')
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
351 return (state.mode = Modes.link)(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
352 return handlePhraseModifier(stream, state, ch);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
353 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
354
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
355 attributes: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
356 state.mode = Modes.layoutLength;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
357
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
358 if (stream.match(RE("attributes")))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
359 return tokenStylesWith(state, TOKEN_STYLES.attributes);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
360 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
361 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
362 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
363
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
364 layoutLength: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
365 if (stream.eat(".") && stream.eat("."))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
366 state.spanningLayout = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
367
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
368 state.mode = Modes.text;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
369 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
370 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
371
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
372 list: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
373 var match = stream.match(RE("list"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
374 state.listDepth = match[0].length;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
375 var listMod = (state.listDepth - 1) % 3;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
376 if (!listMod)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
377 state.layoutType = "list1";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
378 else if (listMod === 1)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
379 state.layoutType = "list2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
380 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
381 state.layoutType = "list3";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
382
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
383 state.mode = Modes.attributes;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
384 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
385 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
386
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
387 link: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
388 state.mode = Modes.text;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
389 if (stream.match(RE("link"))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
390 stream.match(/\S+/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
391 return tokenStylesWith(state, TOKEN_STYLES.link);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
392 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
393 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
394 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
395
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
396 linkDefinition: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
397 stream.skipToEnd();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
398 return tokenStylesWith(state, TOKEN_STYLES.linkDefinition);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
399 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
400
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
401 definitionList: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
402 stream.match(RE("definitionList"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
403
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
404 state.layoutType = "definitionList";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
405
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
406 if (stream.match(/\s*$/))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
407 state.spanningLayout = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
408 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
409 state.mode = Modes.attributes;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
410
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
411 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
412 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
413
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
414 html: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
415 stream.skipToEnd();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
416 return tokenStylesWith(state, TOKEN_STYLES.html);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
417 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
418
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
419 table: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
420 state.layoutType = "table";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
421 return (state.mode = Modes.tableCell)(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
422 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
423
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
424 tableCell: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
425 if (stream.match(RE("tableHeading")))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
426 state.tableHeading = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
427 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
428 stream.eat("|");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
429
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
430 state.mode = Modes.tableCellAttributes;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
431 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
432 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
433
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
434 tableCellAttributes: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
435 state.mode = Modes.tableText;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
436
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
437 if (stream.match(RE("tableCellAttributes")))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
438 return tokenStylesWith(state, TOKEN_STYLES.attributes);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
439 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
440 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
441 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
442
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
443 tableText: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
444 if (stream.match(RE("tableText")))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
445 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
446
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
447 if (stream.peek() === "|") { // end of cell
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
448 state.mode = Modes.tableCell;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
449 return tokenStyles(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
450 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
451 return handlePhraseModifier(stream, state, stream.next());
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
452 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
453 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
454
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
455 CodeMirror.defineMode("textile", function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
456 return {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
457 startState: function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
458 return { mode: Modes.newLayout };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
459 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
460 token: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
461 if (stream.sol()) startNewLine(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
462 return state.mode(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
463 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
464 blankLine: blankLine
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
465 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
466 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
467
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
468 CodeMirror.defineMIME("text/x-textile", "textile");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
469 });