corrade-nucleus-nucleons – Blame information for rev 4
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
2 | office | 1 | /*jshint curly:true, eqeqeq:true, laxbreak:true, noempty:false */ |
2 | /* |
||
3 | |||
4 | The MIT License (MIT) |
||
5 | |||
6 | Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and contributors. |
||
7 | |||
8 | Permission is hereby granted, free of charge, to any person |
||
9 | obtaining a copy of this software and associated documentation files |
||
10 | (the "Software"), to deal in the Software without restriction, |
||
11 | including without limitation the rights to use, copy, modify, merge, |
||
12 | publish, distribute, sublicense, and/or sell copies of the Software, |
||
13 | and to permit persons to whom the Software is furnished to do so, |
||
14 | subject to the following conditions: |
||
15 | |||
16 | The above copyright notice and this permission notice shall be |
||
17 | included in all copies or substantial portions of the Software. |
||
18 | |||
19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||
20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||
21 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
||
22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
||
23 | BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
||
24 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
||
25 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||
26 | SOFTWARE. |
||
27 | |||
28 | |||
29 | Style HTML |
||
30 | --------------- |
||
31 | |||
32 | Written by Nochum Sossonko, (nsossonko@hotmail.com) |
||
33 | |||
34 | Based on code initially developed by: Einar Lielmanis, <einar@jsbeautifier.org> |
||
35 | http://jsbeautifier.org/ |
||
36 | |||
37 | Usage: |
||
38 | style_html(html_source); |
||
39 | |||
40 | style_html(html_source, options); |
||
41 | |||
42 | The options are: |
||
43 | indent_inner_html (default false) — indent <head> and <body> sections, |
||
44 | indent_size (default 4) — indentation size, |
||
45 | indent_char (default space) — character to indent with, |
||
46 | wrap_line_length (default 250) - maximum amount of characters per line (0 = disable) |
||
47 | brace_style (default "collapse") - "collapse" | "expand" | "end-expand" | "none" |
||
48 | put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line, or attempt to keep them where they are. |
||
49 | unformatted (defaults to inline tags) - list of tags, that shouldn't be reformatted |
||
50 | content_unformatted (defaults to pre tag) - list of tags, that its content shouldn't be reformatted |
||
51 | indent_scripts (default normal) - "keep"|"separate"|"normal" |
||
52 | preserve_newlines (default true) - whether existing line breaks before elements should be preserved |
||
53 | Only works before elements, not inside tags or for text. |
||
54 | max_preserve_newlines (default unlimited) - maximum number of line breaks to be preserved in one chunk |
||
55 | indent_handlebars (default false) - format and indent {{#foo}} and {{/foo}} |
||
56 | end_with_newline (false) - end with a newline |
||
57 | extra_liners (default [head,body,/html]) -List of tags that should have an extra newline before them. |
||
58 | |||
59 | e.g. |
||
60 | |||
61 | style_html(html_source, { |
||
62 | 'indent_inner_html': false, |
||
63 | 'indent_size': 2, |
||
64 | 'indent_char': ' ', |
||
65 | 'wrap_line_length': 78, |
||
66 | 'brace_style': 'expand', |
||
67 | 'preserve_newlines': true, |
||
68 | 'max_preserve_newlines': 5, |
||
69 | 'indent_handlebars': false, |
||
70 | 'extra_liners': ['/html'] |
||
71 | }); |
||
72 | */ |
||
73 | |||
74 | (function() { |
||
75 | |||
76 | // function trim(s) { |
||
77 | // return s.replace(/^\s+|\s+$/g, ''); |
||
78 | // } |
||
79 | |||
80 | function ltrim(s) { |
||
81 | return s.replace(/^\s+/g, ''); |
||
82 | } |
||
83 | |||
84 | function rtrim(s) { |
||
85 | return s.replace(/\s+$/g, ''); |
||
86 | } |
||
87 | |||
88 | function mergeOpts(allOptions, targetType) { |
||
89 | var finalOpts = {}; |
||
90 | var name; |
||
91 | |||
92 | for (name in allOptions) { |
||
93 | if (name !== targetType) { |
||
94 | finalOpts[name] = allOptions[name]; |
||
95 | } |
||
96 | } |
||
97 | |||
98 | //merge in the per type settings for the targetType |
||
99 | if (targetType in allOptions) { |
||
100 | for (name in allOptions[targetType]) { |
||
101 | finalOpts[name] = allOptions[targetType][name]; |
||
102 | } |
||
103 | } |
||
104 | return finalOpts; |
||
105 | } |
||
106 | |||
107 | var lineBreak = /\r\n|[\n\r\u2028\u2029]/; |
||
108 | var allLineBreaks = new RegExp(lineBreak.source, 'g'); |
||
109 | |||
110 | function style_html(html_source, options, js_beautify, css_beautify) { |
||
111 | //Wrapper function to invoke all the necessary constructors and deal with the output. |
||
112 | |||
113 | var multi_parser, |
||
114 | indent_inner_html, |
||
115 | indent_body_inner_html, |
||
116 | indent_head_inner_html, |
||
117 | indent_size, |
||
118 | indent_character, |
||
119 | wrap_line_length, |
||
120 | brace_style, |
||
121 | unformatted, |
||
122 | content_unformatted, |
||
123 | preserve_newlines, |
||
124 | max_preserve_newlines, |
||
125 | indent_handlebars, |
||
126 | wrap_attributes, |
||
127 | wrap_attributes_indent_size, |
||
128 | is_wrap_attributes_force, |
||
129 | is_wrap_attributes_force_expand_multiline, |
||
130 | is_wrap_attributes_force_aligned, |
||
131 | end_with_newline, |
||
132 | extra_liners, |
||
133 | eol; |
||
134 | |||
135 | options = options || {}; |
||
136 | |||
137 | // Allow the setting of language/file-type specific options |
||
138 | // with inheritance of overall settings |
||
139 | options = mergeOpts(options, 'html'); |
||
140 | |||
141 | // backwards compatibility to 1.3.4 |
||
142 | if ((options.wrap_line_length === undefined || parseInt(options.wrap_line_length, 10) === 0) && |
||
143 | (options.max_char !== undefined && parseInt(options.max_char, 10) !== 0)) { |
||
144 | options.wrap_line_length = options.max_char; |
||
145 | } |
||
146 | |||
147 | indent_inner_html = (options.indent_inner_html === undefined) ? false : options.indent_inner_html; |
||
148 | indent_body_inner_html = (options.indent_body_inner_html === undefined) ? true : options.indent_body_inner_html; |
||
149 | indent_head_inner_html = (options.indent_head_inner_html === undefined) ? true : options.indent_head_inner_html; |
||
150 | indent_size = (options.indent_size === undefined) ? 4 : parseInt(options.indent_size, 10); |
||
151 | indent_character = (options.indent_char === undefined) ? ' ' : options.indent_char; |
||
152 | brace_style = (options.brace_style === undefined) ? 'collapse' : options.brace_style; |
||
153 | wrap_line_length = parseInt(options.wrap_line_length, 10) === 0 ? 32786 : parseInt(options.wrap_line_length || 250, 10); |
||
154 | unformatted = options.unformatted || [ |
||
155 | // https://www.w3.org/TR/html5/dom.html#phrasing-content |
||
156 | 'a', 'abbr', 'area', 'audio', 'b', 'bdi', 'bdo', 'br', 'button', 'canvas', 'cite', |
||
157 | 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'i', 'iframe', 'img', |
||
158 | 'input', 'ins', 'kbd', 'keygen', 'label', 'map', 'mark', 'math', 'meter', 'noscript', |
||
159 | 'object', 'output', 'progress', 'q', 'ruby', 's', 'samp', /* 'script', */ 'select', 'small', |
||
160 | 'span', 'strong', 'sub', 'sup', 'svg', 'template', 'textarea', 'time', 'u', 'var', |
||
161 | 'video', 'wbr', 'text', |
||
162 | // prexisting - not sure of full effect of removing, leaving in |
||
163 | 'acronym', 'address', 'big', 'dt', 'ins', 'strike', 'tt', |
||
164 | ]; |
||
165 | content_unformatted = options.content_unformatted || [ |
||
166 | 'pre', |
||
167 | ]; |
||
168 | preserve_newlines = (options.preserve_newlines === undefined) ? true : options.preserve_newlines; |
||
169 | max_preserve_newlines = preserve_newlines ? |
||
170 | (isNaN(parseInt(options.max_preserve_newlines, 10)) ? 32786 : parseInt(options.max_preserve_newlines, 10)) : |
||
171 | 0; |
||
172 | indent_handlebars = (options.indent_handlebars === undefined) ? false : options.indent_handlebars; |
||
173 | wrap_attributes = (options.wrap_attributes === undefined) ? 'auto' : options.wrap_attributes; |
||
174 | wrap_attributes_indent_size = (isNaN(parseInt(options.wrap_attributes_indent_size, 10))) ? indent_size : parseInt(options.wrap_attributes_indent_size, 10); |
||
175 | is_wrap_attributes_force = wrap_attributes.substr(0, 'force'.length) === 'force'; |
||
176 | is_wrap_attributes_force_expand_multiline = (wrap_attributes === 'force-expand-multiline'); |
||
177 | is_wrap_attributes_force_aligned = (wrap_attributes === 'force-aligned'); |
||
178 | end_with_newline = (options.end_with_newline === undefined) ? false : options.end_with_newline; |
||
179 | extra_liners = (typeof options.extra_liners === 'object') && options.extra_liners ? |
||
180 | options.extra_liners.concat() : (typeof options.extra_liners === 'string') ? |
||
181 | options.extra_liners.split(',') : 'head,body,/html'.split(','); |
||
182 | eol = options.eol ? options.eol : 'auto'; |
||
183 | |||
184 | if (options.indent_with_tabs) { |
||
185 | indent_character = '\t'; |
||
186 | indent_size = 1; |
||
187 | } |
||
188 | |||
189 | if (eol === 'auto') { |
||
190 | eol = '\n'; |
||
191 | if (html_source && lineBreak.test(html_source || '')) { |
||
192 | eol = html_source.match(lineBreak)[0]; |
||
193 | } |
||
194 | } |
||
195 | |||
196 | eol = eol.replace(/\\r/, '\r').replace(/\\n/, '\n'); |
||
197 | |||
198 | // HACK: newline parsing inconsistent. This brute force normalizes the input. |
||
199 | html_source = html_source.replace(allLineBreaks, '\n'); |
||
200 | |||
201 | function Parser() { |
||
202 | |||
203 | this.pos = 0; //Parser position |
||
204 | this.token = ''; |
||
205 | this.current_mode = 'CONTENT'; //reflects the current Parser mode: TAG/CONTENT |
||
206 | this.tags = { //An object to hold tags, their position, and their parent-tags, initiated with default values |
||
207 | parent: 'parent1', |
||
208 | parentcount: 1, |
||
209 | parent1: '' |
||
210 | }; |
||
211 | this.tag_type = ''; |
||
212 | this.token_text = this.last_token = this.last_text = this.token_type = ''; |
||
213 | this.newlines = 0; |
||
214 | this.indent_content = indent_inner_html; |
||
215 | this.indent_body_inner_html = indent_body_inner_html; |
||
216 | this.indent_head_inner_html = indent_head_inner_html; |
||
217 | |||
218 | this.Utils = { //Uilities made available to the various functions |
||
219 | whitespace: "\n\r\t ".split(''), |
||
220 | |||
221 | single_token: options.void_elements || [ |
||
222 | // HTLM void elements - aka self-closing tags - aka singletons |
||
223 | // https://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements |
||
224 | 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', |
||
225 | 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr', |
||
226 | // NOTE: Optional tags - are not understood. |
||
227 | // https://www.w3.org/TR/html5/syntax.html#optional-tags |
||
228 | // The rules for optional tags are too complex for a simple list |
||
229 | // Also, the content of these tags should still be indented in many cases. |
||
230 | // 'li' is a good exmple. |
||
231 | |||
232 | // Doctype and xml elements |
||
233 | '!doctype', '?xml', |
||
234 | // ?php tag |
||
235 | '?php', |
||
236 | // other tags that were in this list, keeping just in case |
||
237 | 'basefont', 'isindex' |
||
238 | ], |
||
239 | extra_liners: extra_liners, //for tags that need a line of whitespace before them |
||
240 | in_array: function(what, arr) { |
||
241 | for (var i = 0; i < arr.length; i++) { |
||
242 | if (what === arr[i]) { |
||
243 | return true; |
||
244 | } |
||
245 | } |
||
246 | return false; |
||
247 | } |
||
248 | }; |
||
249 | |||
250 | // Return true if the given text is composed entirely of whitespace. |
||
251 | this.is_whitespace = function(text) { |
||
252 | for (var n = 0; n < text.length; n++) { |
||
253 | if (!this.Utils.in_array(text.charAt(n), this.Utils.whitespace)) { |
||
254 | return false; |
||
255 | } |
||
256 | } |
||
257 | return true; |
||
258 | }; |
||
259 | |||
260 | this.traverse_whitespace = function() { |
||
261 | var input_char = ''; |
||
262 | |||
263 | input_char = this.input.charAt(this.pos); |
||
264 | if (this.Utils.in_array(input_char, this.Utils.whitespace)) { |
||
265 | this.newlines = 0; |
||
266 | while (this.Utils.in_array(input_char, this.Utils.whitespace)) { |
||
267 | if (preserve_newlines && input_char === '\n' && this.newlines <= max_preserve_newlines) { |
||
268 | this.newlines += 1; |
||
269 | } |
||
270 | |||
271 | this.pos++; |
||
272 | input_char = this.input.charAt(this.pos); |
||
273 | } |
||
274 | return true; |
||
275 | } |
||
276 | return false; |
||
277 | }; |
||
278 | |||
279 | // Append a space to the given content (string array) or, if we are |
||
280 | // at the wrap_line_length, append a newline/indentation. |
||
281 | // return true if a newline was added, false if a space was added |
||
282 | this.space_or_wrap = function(content) { |
||
283 | if (this.line_char_count >= this.wrap_line_length) { //insert a line when the wrap_line_length is reached |
||
284 | this.print_newline(false, content); |
||
285 | this.print_indentation(content); |
||
286 | return true; |
||
287 | } else { |
||
288 | this.line_char_count++; |
||
289 | content.push(' '); |
||
290 | return false; |
||
291 | } |
||
292 | }; |
||
293 | |||
294 | this.get_content = function() { //function to capture regular content between tags |
||
295 | var input_char = '', |
||
296 | content = [], |
||
297 | handlebarsStarted = 0; |
||
298 | |||
299 | while (this.input.charAt(this.pos) !== '<' || handlebarsStarted === 2) { |
||
300 | if (this.pos >= this.input.length) { |
||
301 | return content.length ? content.join('') : ['', 'TK_EOF']; |
||
302 | } |
||
303 | |||
304 | if (handlebarsStarted < 2 && this.traverse_whitespace()) { |
||
305 | this.space_or_wrap(content); |
||
306 | continue; |
||
307 | } |
||
308 | |||
309 | input_char = this.input.charAt(this.pos); |
||
310 | |||
311 | if (indent_handlebars) { |
||
312 | if (input_char === '{') { |
||
313 | handlebarsStarted += 1; |
||
314 | } else if (handlebarsStarted < 2) { |
||
315 | handlebarsStarted = 0; |
||
316 | } |
||
317 | |||
318 | if (input_char === '}' && handlebarsStarted > 0) { |
||
319 | if (handlebarsStarted-- === 0) { |
||
320 | break; |
||
321 | } |
||
322 | } |
||
323 | // Handlebars parsing is complicated. |
||
324 | // {{#foo}} and {{/foo}} are formatted tags. |
||
325 | // {{something}} should get treated as content, except: |
||
326 | // {{else}} specifically behaves like {{#if}} and {{/if}} |
||
327 | var peek3 = this.input.substr(this.pos, 3); |
||
328 | if (peek3 === '{{#' || peek3 === '{{/') { |
||
329 | // These are tags and not content. |
||
330 | break; |
||
331 | } else if (peek3 === '{{!') { |
||
332 | return [this.get_tag(), 'TK_TAG_HANDLEBARS_COMMENT']; |
||
333 | } else if (this.input.substr(this.pos, 2) === '{{') { |
||
334 | if (this.get_tag(true) === '{{else}}') { |
||
335 | break; |
||
336 | } |
||
337 | } |
||
338 | } |
||
339 | |||
340 | this.pos++; |
||
341 | this.line_char_count++; |
||
342 | content.push(input_char); //letter at-a-time (or string) inserted to an array |
||
343 | } |
||
344 | return content.length ? content.join('') : ''; |
||
345 | }; |
||
346 | |||
347 | this.get_contents_to = function(name) { //get the full content of a script or style to pass to js_beautify |
||
348 | if (this.pos === this.input.length) { |
||
349 | return ['', 'TK_EOF']; |
||
350 | } |
||
351 | var content = ''; |
||
352 | var reg_match = new RegExp('</' + name + '\\s*>', 'igm'); |
||
353 | reg_match.lastIndex = this.pos; |
||
354 | var reg_array = reg_match.exec(this.input); |
||
355 | var end_script = reg_array ? reg_array.index : this.input.length; //absolute end of script |
||
356 | if (this.pos < end_script) { //get everything in between the script tags |
||
357 | content = this.input.substring(this.pos, end_script); |
||
358 | this.pos = end_script; |
||
359 | } |
||
360 | return content; |
||
361 | }; |
||
362 | |||
363 | this.record_tag = function(tag) { //function to record a tag and its parent in this.tags Object |
||
364 | if (this.tags[tag + 'count']) { //check for the existence of this tag type |
||
365 | this.tags[tag + 'count']++; |
||
366 | this.tags[tag + this.tags[tag + 'count']] = this.indent_level; //and record the present indent level |
||
367 | } else { //otherwise initialize this tag type |
||
368 | this.tags[tag + 'count'] = 1; |
||
369 | this.tags[tag + this.tags[tag + 'count']] = this.indent_level; //and record the present indent level |
||
370 | } |
||
371 | this.tags[tag + this.tags[tag + 'count'] + 'parent'] = this.tags.parent; //set the parent (i.e. in the case of a div this.tags.div1parent) |
||
372 | this.tags.parent = tag + this.tags[tag + 'count']; //and make this the current parent (i.e. in the case of a div 'div1') |
||
373 | }; |
||
374 | |||
375 | this.retrieve_tag = function(tag) { //function to retrieve the opening tag to the corresponding closer |
||
376 | if (this.tags[tag + 'count']) { //if the openener is not in the Object we ignore it |
||
377 | var temp_parent = this.tags.parent; //check to see if it's a closable tag. |
||
378 | while (temp_parent) { //till we reach '' (the initial value); |
||
379 | if (tag + this.tags[tag + 'count'] === temp_parent) { //if this is it use it |
||
380 | break; |
||
381 | } |
||
382 | temp_parent = this.tags[temp_parent + 'parent']; //otherwise keep on climbing up the DOM Tree |
||
383 | } |
||
384 | if (temp_parent) { //if we caught something |
||
385 | this.indent_level = this.tags[tag + this.tags[tag + 'count']]; //set the indent_level accordingly |
||
386 | this.tags.parent = this.tags[temp_parent + 'parent']; //and set the current parent |
||
387 | } |
||
388 | delete this.tags[tag + this.tags[tag + 'count'] + 'parent']; //delete the closed tags parent reference... |
||
389 | delete this.tags[tag + this.tags[tag + 'count']]; //...and the tag itself |
||
390 | if (this.tags[tag + 'count'] === 1) { |
||
391 | delete this.tags[tag + 'count']; |
||
392 | } else { |
||
393 | this.tags[tag + 'count']--; |
||
394 | } |
||
395 | } |
||
396 | }; |
||
397 | |||
398 | this.indent_to_tag = function(tag) { |
||
399 | // Match the indentation level to the last use of this tag, but don't remove it. |
||
400 | if (!this.tags[tag + 'count']) { |
||
401 | return; |
||
402 | } |
||
403 | var temp_parent = this.tags.parent; |
||
404 | while (temp_parent) { |
||
405 | if (tag + this.tags[tag + 'count'] === temp_parent) { |
||
406 | break; |
||
407 | } |
||
408 | temp_parent = this.tags[temp_parent + 'parent']; |
||
409 | } |
||
410 | if (temp_parent) { |
||
411 | this.indent_level = this.tags[tag + this.tags[tag + 'count']]; |
||
412 | } |
||
413 | }; |
||
414 | |||
415 | this.get_tag = function(peek) { //function to get a full tag and parse its type |
||
416 | var input_char = '', |
||
417 | content = [], |
||
418 | comment = '', |
||
419 | space = false, |
||
420 | first_attr = true, |
||
421 | has_wrapped_attrs = false, |
||
422 | tag_start, tag_end, |
||
423 | tag_start_char, |
||
424 | orig_pos = this.pos, |
||
425 | orig_line_char_count = this.line_char_count, |
||
426 | is_tag_closed = false, |
||
427 | tail; |
||
428 | |||
429 | peek = peek !== undefined ? peek : false; |
||
430 | |||
431 | do { |
||
432 | if (this.pos >= this.input.length) { |
||
433 | if (peek) { |
||
434 | this.pos = orig_pos; |
||
435 | this.line_char_count = orig_line_char_count; |
||
436 | } |
||
437 | return content.length ? content.join('') : ['', 'TK_EOF']; |
||
438 | } |
||
439 | |||
440 | input_char = this.input.charAt(this.pos); |
||
441 | this.pos++; |
||
442 | |||
443 | if (this.Utils.in_array(input_char, this.Utils.whitespace)) { //don't want to insert unnecessary space |
||
444 | space = true; |
||
445 | continue; |
||
446 | } |
||
447 | |||
448 | if (input_char === "'" || input_char === '"') { |
||
449 | input_char += this.get_unformatted(input_char); |
||
450 | space = true; |
||
451 | } |
||
452 | |||
453 | if (input_char === '=') { //no space before = |
||
454 | space = false; |
||
455 | } |
||
456 | tail = this.input.substr(this.pos - 1); |
||
457 | if (is_wrap_attributes_force_expand_multiline && has_wrapped_attrs && !is_tag_closed && (input_char === '>' || input_char === '/')) { |
||
458 | if (tail.match(/^\/?\s*>/)) { |
||
459 | space = false; |
||
460 | is_tag_closed = true; |
||
461 | this.print_newline(false, content); |
||
462 | this.print_indentation(content); |
||
463 | } |
||
464 | } |
||
465 | if (content.length && content[content.length - 1] !== '=' && input_char !== '>' && space) { |
||
466 | //no space after = or before > |
||
467 | var wrapped = this.space_or_wrap(content); |
||
468 | var indentAttrs = wrapped && input_char !== '/' && !is_wrap_attributes_force; |
||
469 | space = false; |
||
470 | |||
471 | if (is_wrap_attributes_force && input_char !== '/') { |
||
472 | var force_first_attr_wrap = false; |
||
473 | if (is_wrap_attributes_force_expand_multiline && first_attr) { |
||
474 | var is_only_attribute = tail.match(/^\S*(="([^"]|\\")*")?\s*\/?\s*>/) !== null; |
||
475 | force_first_attr_wrap = !is_only_attribute; |
||
476 | } |
||
477 | if (!first_attr || force_first_attr_wrap) { |
||
478 | this.print_newline(false, content); |
||
479 | this.print_indentation(content); |
||
480 | indentAttrs = true; |
||
481 | } |
||
482 | } |
||
483 | if (indentAttrs) { |
||
484 | has_wrapped_attrs = true; |
||
485 | |||
486 | //indent attributes an auto, forced, or forced-align line-wrap |
||
487 | var alignment_size = wrap_attributes_indent_size; |
||
488 | if (is_wrap_attributes_force_aligned) { |
||
489 | alignment_size = content.indexOf(' ') + 1; |
||
490 | } |
||
491 | |||
492 | for (var count = 0; count < alignment_size; count++) { |
||
493 | // only ever further indent with spaces since we're trying to align characters |
||
494 | content.push(' '); |
||
495 | } |
||
496 | } |
||
497 | if (first_attr) { |
||
498 | for (var i = 0; i < content.length; i++) { |
||
499 | if (content[i] === ' ') { |
||
500 | first_attr = false; |
||
501 | break; |
||
502 | } |
||
503 | } |
||
504 | } |
||
505 | } |
||
506 | |||
507 | if (indent_handlebars && tag_start_char === '<') { |
||
508 | // When inside an angle-bracket tag, put spaces around |
||
509 | // handlebars not inside of strings. |
||
510 | if ((input_char + this.input.charAt(this.pos)) === '{{') { |
||
511 | input_char += this.get_unformatted('}}'); |
||
512 | if (content.length && content[content.length - 1] !== ' ' && content[content.length - 1] !== '<') { |
||
513 | input_char = ' ' + input_char; |
||
514 | } |
||
515 | space = true; |
||
516 | } |
||
517 | } |
||
518 | |||
519 | if (input_char === '<' && !tag_start_char) { |
||
520 | tag_start = this.pos - 1; |
||
521 | tag_start_char = '<'; |
||
522 | } |
||
523 | |||
524 | if (indent_handlebars && !tag_start_char) { |
||
525 | if (content.length >= 2 && content[content.length - 1] === '{' && content[content.length - 2] === '{') { |
||
526 | if (input_char === '#' || input_char === '/' || input_char === '!') { |
||
527 | tag_start = this.pos - 3; |
||
528 | } else { |
||
529 | tag_start = this.pos - 2; |
||
530 | } |
||
531 | tag_start_char = '{'; |
||
532 | } |
||
533 | } |
||
534 | |||
535 | this.line_char_count++; |
||
536 | content.push(input_char); //inserts character at-a-time (or string) |
||
537 | |||
538 | if (content[1] && (content[1] === '!' || content[1] === '?' || content[1] === '%')) { //if we're in a comment, do something special |
||
539 | // We treat all comments as literals, even more than preformatted tags |
||
540 | // we just look for the appropriate close tag |
||
541 | content = [this.get_comment(tag_start)]; |
||
542 | break; |
||
543 | } |
||
544 | |||
545 | if (indent_handlebars && content[1] && content[1] === '{' && content[2] && content[2] === '!') { //if we're in a comment, do something special |
||
546 | // We treat all comments as literals, even more than preformatted tags |
||
547 | // we just look for the appropriate close tag |
||
548 | content = [this.get_comment(tag_start)]; |
||
549 | break; |
||
550 | } |
||
551 | |||
552 | if (indent_handlebars && tag_start_char === '{' && content.length > 2 && content[content.length - 2] === '}' && content[content.length - 1] === '}') { |
||
553 | break; |
||
554 | } |
||
555 | } while (input_char !== '>'); |
||
556 | |||
557 | var tag_complete = content.join(''); |
||
558 | var tag_index; |
||
559 | var tag_offset; |
||
560 | |||
561 | // must check for space first otherwise the tag could have the first attribute included, and |
||
562 | // then not un-indent correctly |
||
563 | if (tag_complete.indexOf(' ') !== -1) { //if there's whitespace, thats where the tag name ends |
||
564 | tag_index = tag_complete.indexOf(' '); |
||
565 | } else if (tag_complete.indexOf('\n') !== -1) { //if there's a line break, thats where the tag name ends |
||
566 | tag_index = tag_complete.indexOf('\n'); |
||
567 | } else if (tag_complete.charAt(0) === '{') { |
||
568 | tag_index = tag_complete.indexOf('}'); |
||
569 | } else { //otherwise go with the tag ending |
||
570 | tag_index = tag_complete.indexOf('>'); |
||
571 | } |
||
572 | if (tag_complete.charAt(0) === '<' || !indent_handlebars) { |
||
573 | tag_offset = 1; |
||
574 | } else { |
||
575 | tag_offset = tag_complete.charAt(2) === '#' ? 3 : 2; |
||
576 | } |
||
577 | var tag_check = tag_complete.substring(tag_offset, tag_index).toLowerCase(); |
||
578 | if (tag_complete.charAt(tag_complete.length - 2) === '/' || |
||
579 | this.Utils.in_array(tag_check, this.Utils.single_token)) { //if this tag name is a single tag type (either in the list or has a closing /) |
||
580 | if (!peek) { |
||
581 | this.tag_type = 'SINGLE'; |
||
582 | } |
||
583 | } else if (indent_handlebars && tag_complete.charAt(0) === '{' && tag_check === 'else') { |
||
584 | if (!peek) { |
||
585 | this.indent_to_tag('if'); |
||
586 | this.tag_type = 'HANDLEBARS_ELSE'; |
||
587 | this.indent_content = true; |
||
588 | this.traverse_whitespace(); |
||
589 | } |
||
590 | } else if (this.is_unformatted(tag_check, unformatted) || |
||
591 | this.is_unformatted(tag_check, content_unformatted)) { |
||
592 | // do not reformat the "unformatted" or "content_unformatted" tags |
||
593 | comment = this.get_unformatted('</' + tag_check + '>', tag_complete); //...delegate to get_unformatted function |
||
594 | content.push(comment); |
||
595 | tag_end = this.pos - 1; |
||
596 | this.tag_type = 'SINGLE'; |
||
597 | } else if (tag_check === 'script' && |
||
598 | (tag_complete.search('type') === -1 || |
||
599 | (tag_complete.search('type') > -1 && |
||
600 | tag_complete.search(/\b(text|application|dojo)\/(x-)?(javascript|ecmascript|jscript|livescript|(ld\+)?json|method|aspect)/) > -1))) { |
||
601 | if (!peek) { |
||
602 | this.record_tag(tag_check); |
||
603 | this.tag_type = 'SCRIPT'; |
||
604 | } |
||
605 | } else if (tag_check === 'style' && |
||
606 | (tag_complete.search('type') === -1 || |
||
607 | (tag_complete.search('type') > -1 && tag_complete.search('text/css') > -1))) { |
||
608 | if (!peek) { |
||
609 | this.record_tag(tag_check); |
||
610 | this.tag_type = 'STYLE'; |
||
611 | } |
||
612 | } else if (tag_check.charAt(0) === '!') { //peek for <! comment |
||
613 | // for comments content is already correct. |
||
614 | if (!peek) { |
||
615 | this.tag_type = 'SINGLE'; |
||
616 | this.traverse_whitespace(); |
||
617 | } |
||
618 | } else if (!peek) { |
||
619 | if (tag_check.charAt(0) === '/') { //this tag is a double tag so check for tag-ending |
||
620 | this.retrieve_tag(tag_check.substring(1)); //remove it and all ancestors |
||
621 | this.tag_type = 'END'; |
||
622 | } else { //otherwise it's a start-tag |
||
623 | this.record_tag(tag_check); //push it on the tag stack |
||
624 | if (tag_check.toLowerCase() !== 'html') { |
||
625 | this.indent_content = true; |
||
626 | } |
||
627 | this.tag_type = 'START'; |
||
628 | } |
||
629 | |||
630 | // Allow preserving of newlines after a start or end tag |
||
631 | if (this.traverse_whitespace()) { |
||
632 | this.space_or_wrap(content); |
||
633 | } |
||
634 | |||
635 | if (this.Utils.in_array(tag_check, this.Utils.extra_liners)) { //check if this double needs an extra line |
||
636 | this.print_newline(false, this.output); |
||
637 | if (this.output.length && this.output[this.output.length - 2] !== '\n') { |
||
638 | this.print_newline(true, this.output); |
||
639 | } |
||
640 | } |
||
641 | } |
||
642 | |||
643 | if (peek) { |
||
644 | this.pos = orig_pos; |
||
645 | this.line_char_count = orig_line_char_count; |
||
646 | } |
||
647 | |||
648 | return content.join(''); //returns fully formatted tag |
||
649 | }; |
||
650 | |||
651 | this.get_comment = function(start_pos) { //function to return comment content in its entirety |
||
652 | // this is will have very poor perf, but will work for now. |
||
653 | var comment = '', |
||
654 | delimiter = '>', |
||
655 | matched = false; |
||
656 | |||
657 | this.pos = start_pos; |
||
658 | var input_char = this.input.charAt(this.pos); |
||
659 | this.pos++; |
||
660 | |||
661 | while (this.pos <= this.input.length) { |
||
662 | comment += input_char; |
||
663 | |||
664 | // only need to check for the delimiter if the last chars match |
||
665 | if (comment.charAt(comment.length - 1) === delimiter.charAt(delimiter.length - 1) && |
||
666 | comment.indexOf(delimiter) !== -1) { |
||
667 | break; |
||
668 | } |
||
669 | |||
670 | // only need to search for custom delimiter for the first few characters |
||
671 | if (!matched && comment.length < 10) { |
||
672 | if (comment.indexOf('<![if') === 0) { //peek for <![if conditional comment |
||
673 | delimiter = '<![endif]>'; |
||
674 | matched = true; |
||
675 | } else if (comment.indexOf('<![cdata[') === 0) { //if it's a <[cdata[ comment... |
||
676 | delimiter = ']]>'; |
||
677 | matched = true; |
||
678 | } else if (comment.indexOf('<![') === 0) { // some other ![ comment? ... |
||
679 | delimiter = ']>'; |
||
680 | matched = true; |
||
681 | } else if (comment.indexOf('<!--') === 0) { // <!-- comment ... |
||
682 | delimiter = '-->'; |
||
683 | matched = true; |
||
684 | } else if (comment.indexOf('{{!--') === 0) { // {{!-- handlebars comment |
||
685 | delimiter = '--}}'; |
||
686 | matched = true; |
||
687 | } else if (comment.indexOf('{{!') === 0) { // {{! handlebars comment |
||
688 | if (comment.length === 5 && comment.indexOf('{{!--') === -1) { |
||
689 | delimiter = '}}'; |
||
690 | matched = true; |
||
691 | } |
||
692 | } else if (comment.indexOf('<?') === 0) { // {{! handlebars comment |
||
693 | delimiter = '?>'; |
||
694 | matched = true; |
||
695 | } else if (comment.indexOf('<%') === 0) { // {{! handlebars comment |
||
696 | delimiter = '%>'; |
||
697 | matched = true; |
||
698 | } |
||
699 | } |
||
700 | |||
701 | input_char = this.input.charAt(this.pos); |
||
702 | this.pos++; |
||
703 | } |
||
704 | |||
705 | return comment; |
||
706 | }; |
||
707 | |||
708 | function tokenMatcher(delimiter) { |
||
709 | var token = ''; |
||
710 | |||
711 | var add = function(str) { |
||
712 | var newToken = token + str.toLowerCase(); |
||
713 | token = newToken.length <= delimiter.length ? newToken : newToken.substr(newToken.length - delimiter.length, delimiter.length); |
||
714 | }; |
||
715 | |||
716 | var doesNotMatch = function() { |
||
717 | return token.indexOf(delimiter) === -1; |
||
718 | }; |
||
719 | |||
720 | return { |
||
721 | add: add, |
||
722 | doesNotMatch: doesNotMatch |
||
723 | }; |
||
724 | } |
||
725 | |||
726 | this.get_unformatted = function(delimiter, orig_tag) { //function to return unformatted content in its entirety |
||
727 | if (orig_tag && orig_tag.toLowerCase().indexOf(delimiter) !== -1) { |
||
728 | return ''; |
||
729 | } |
||
730 | var input_char = ''; |
||
731 | var content = ''; |
||
732 | var space = true; |
||
733 | |||
734 | var delimiterMatcher = tokenMatcher(delimiter); |
||
735 | |||
736 | do { |
||
737 | |||
738 | if (this.pos >= this.input.length) { |
||
739 | return content; |
||
740 | } |
||
741 | |||
742 | input_char = this.input.charAt(this.pos); |
||
743 | this.pos++; |
||
744 | |||
745 | if (this.Utils.in_array(input_char, this.Utils.whitespace)) { |
||
746 | if (!space) { |
||
747 | this.line_char_count--; |
||
748 | continue; |
||
749 | } |
||
750 | if (input_char === '\n' || input_char === '\r') { |
||
751 | content += '\n'; |
||
752 | /* Don't change tab indention for unformatted blocks. If using code for html editing, this will greatly affect <pre> tags if they are specified in the 'unformatted array' |
||
753 | for (var i=0; i<this.indent_level; i++) { |
||
754 | content += this.indent_string; |
||
755 | } |
||
756 | space = false; //...and make sure other indentation is erased |
||
757 | */ |
||
758 | this.line_char_count = 0; |
||
759 | continue; |
||
760 | } |
||
761 | } |
||
762 | content += input_char; |
||
763 | delimiterMatcher.add(input_char); |
||
764 | this.line_char_count++; |
||
765 | space = true; |
||
766 | |||
767 | if (indent_handlebars && input_char === '{' && content.length && content.charAt(content.length - 2) === '{') { |
||
768 | // Handlebars expressions in strings should also be unformatted. |
||
769 | content += this.get_unformatted('}}'); |
||
770 | // Don't consider when stopping for delimiters. |
||
771 | } |
||
772 | } while (delimiterMatcher.doesNotMatch()); |
||
773 | |||
774 | return content; |
||
775 | }; |
||
776 | |||
777 | this.get_token = function() { //initial handler for token-retrieval |
||
778 | var token; |
||
779 | |||
780 | if (this.last_token === 'TK_TAG_SCRIPT' || this.last_token === 'TK_TAG_STYLE') { //check if we need to format javascript |
||
781 | var type = this.last_token.substr(7); |
||
782 | token = this.get_contents_to(type); |
||
783 | if (typeof token !== 'string') { |
||
784 | return token; |
||
785 | } |
||
786 | return [token, 'TK_' + type]; |
||
787 | } |
||
788 | if (this.current_mode === 'CONTENT') { |
||
789 | token = this.get_content(); |
||
790 | if (typeof token !== 'string') { |
||
791 | return token; |
||
792 | } else { |
||
793 | return [token, 'TK_CONTENT']; |
||
794 | } |
||
795 | } |
||
796 | |||
797 | if (this.current_mode === 'TAG') { |
||
798 | token = this.get_tag(); |
||
799 | if (typeof token !== 'string') { |
||
800 | return token; |
||
801 | } else { |
||
802 | var tag_name_type = 'TK_TAG_' + this.tag_type; |
||
803 | return [token, tag_name_type]; |
||
804 | } |
||
805 | } |
||
806 | }; |
||
807 | |||
808 | this.get_full_indent = function(level) { |
||
809 | level = this.indent_level + level || 0; |
||
810 | if (level < 1) { |
||
811 | return ''; |
||
812 | } |
||
813 | |||
814 | return Array(level + 1).join(this.indent_string); |
||
815 | }; |
||
816 | |||
817 | this.is_unformatted = function(tag_check, unformatted) { |
||
818 | //is this an HTML5 block-level link? |
||
819 | if (!this.Utils.in_array(tag_check, unformatted)) { |
||
820 | return false; |
||
821 | } |
||
822 | |||
823 | if (tag_check.toLowerCase() !== 'a' || !this.Utils.in_array('a', unformatted)) { |
||
824 | return true; |
||
825 | } |
||
826 | |||
827 | //at this point we have an tag; is its first child something we want to remain |
||
828 | //unformatted? |
||
829 | var next_tag = this.get_tag(true /* peek. */ ); |
||
830 | |||
831 | // test next_tag to see if it is just html tag (no external content) |
||
832 | var tag = (next_tag || "").match(/^\s*<\s*\/?([a-z]*)\s*[^>]*>\s*$/);\s*\/?([a-z]*)\s*[^> |
||
833 | |||
834 | <\s*\/?([a-z]*)\s*[^> // if next_tag comes back but is not an isolated tag, then\s*\/?([a-z]*)\s*[^> |
||
835 | <\s*\/?([a-z]*)\s*[^> // let's treat the 'a' tag as having content\s*\/?([a-z]*)\s*[^> |
||
836 | <\s*\/?([a-z]*)\s*[^> // and respect the unformatted option\s*\/?([a-z]*)\s*[^> |
||
837 | <\s*\/?([a-z]*)\s*[^> if (!tag || this.Utils.in_array(tag[1], unformatted)) {\s*\/?([a-z]*)\s*[^> |
||
838 | <\s*\/?([a-z]*)\s*[^> return true;\s*\/?([a-z]*)\s*[^> |
||
839 | <\s*\/?([a-z]*)\s*[^> } else {\s*\/?([a-z]*)\s*[^> |
||
840 | <\s*\/?([a-z]*)\s*[^> return false;\s*\/?([a-z]*)\s*[^> |
||
841 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
842 | <\s*\/?([a-z]*)\s*[^> };\s*\/?([a-z]*)\s*[^> |
||
843 | |||
844 | <\s*\/?([a-z]*)\s*[^> this.printer = function(js_source, indent_character, indent_size, wrap_line_length, brace_style) { //handles input/output and some other printing functions\s*\/?([a-z]*)\s*[^> |
||
845 | |||
846 | <\s*\/?([a-z]*)\s*[^> this.input = js_source || ''; //gets the input for the Parser\s*\/?([a-z]*)\s*[^> |
||
847 | |||
848 | <\s*\/?([a-z]*)\s*[^> // HACK: newline parsing inconsistent. This brute force normalizes the input.\s*\/?([a-z]*)\s*[^> |
||
849 | <\s*\/?([a-z]*)\s*[^> this.input = this.input.replace(/\r\n|[\r\u2028\u2029]/g, '\n');\s*\/?([a-z]*)\s*[^> |
||
850 | |||
851 | <\s*\/?([a-z]*)\s*[^> this.output = [];\s*\/?([a-z]*)\s*[^> |
||
852 | <\s*\/?([a-z]*)\s*[^> this.indent_character = indent_character;\s*\/?([a-z]*)\s*[^> |
||
853 | <\s*\/?([a-z]*)\s*[^> this.indent_string = '';\s*\/?([a-z]*)\s*[^> |
||
854 | <\s*\/?([a-z]*)\s*[^> this.indent_size = indent_size;\s*\/?([a-z]*)\s*[^> |
||
855 | <\s*\/?([a-z]*)\s*[^> this.brace_style = brace_style;\s*\/?([a-z]*)\s*[^> |
||
856 | <\s*\/?([a-z]*)\s*[^> this.indent_level = 0;\s*\/?([a-z]*)\s*[^> |
||
857 | <\s*\/?([a-z]*)\s*[^> this.wrap_line_length = wrap_line_length;\s*\/?([a-z]*)\s*[^> |
||
858 | <\s*\/?([a-z]*)\s*[^> this.line_char_count = 0; //count to see if wrap_line_length was exceeded\s*\/?([a-z]*)\s*[^> |
||
859 | |||
860 | <\s*\/?([a-z]*)\s*[^> for (var i = 0; i < this.indent_size; i++) {\s*\/?([a-z]*)\s*[^> |
||
861 | <\s*\/?([a-z]*)\s*[^> this.indent_string += this.indent_character;\s*\/?([a-z]*)\s*[^> |
||
862 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
863 | |||
864 | <\s*\/?([a-z]*)\s*[^> this.print_newline = function(force, arr) {\s*\/?([a-z]*)\s*[^> |
||
865 | <\s*\/?([a-z]*)\s*[^> this.line_char_count = 0;\s*\/?([a-z]*)\s*[^> |
||
866 | <\s*\/?([a-z]*)\s*[^> if (!arr || !arr.length) {\s*\/?([a-z]*)\s*[^> |
||
867 | <\s*\/?([a-z]*)\s*[^> return;\s*\/?([a-z]*)\s*[^> |
||
868 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
869 | <\s*\/?([a-z]*)\s*[^> if (force || (arr[arr.length - 1] !== '\n')) { //we might want the extra line\s*\/?([a-z]*)\s*[^> |
||
870 | <\s*\/?([a-z]*)\s*[^> if ((arr[arr.length - 1] !== '\n')) {\s*\/?([a-z]*)\s*[^> |
||
871 | <\s*\/?([a-z]*)\s*[^> arr[arr.length - 1] = rtrim(arr[arr.length - 1]);\s*\/?([a-z]*)\s*[^> |
||
872 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
873 | <\s*\/?([a-z]*)\s*[^> arr.push('\n');\s*\/?([a-z]*)\s*[^> |
||
874 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
875 | <\s*\/?([a-z]*)\s*[^> };\s*\/?([a-z]*)\s*[^> |
||
876 | |||
877 | <\s*\/?([a-z]*)\s*[^> this.print_indentation = function(arr) {\s*\/?([a-z]*)\s*[^> |
||
878 | <\s*\/?([a-z]*)\s*[^> for (var i = 0; i < this.indent_level; i++) {\s*\/?([a-z]*)\s*[^> |
||
879 | <\s*\/?([a-z]*)\s*[^> arr.push(this.indent_string);\s*\/?([a-z]*)\s*[^> |
||
880 | <\s*\/?([a-z]*)\s*[^> this.line_char_count += this.indent_string.length;\s*\/?([a-z]*)\s*[^> |
||
881 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
882 | <\s*\/?([a-z]*)\s*[^> };\s*\/?([a-z]*)\s*[^> |
||
883 | |||
884 | <\s*\/?([a-z]*)\s*[^> this.print_token = function(text) {\s*\/?([a-z]*)\s*[^> |
||
885 | <\s*\/?([a-z]*)\s*[^> // Avoid printing initial whitespace.\s*\/?([a-z]*)\s*[^> |
||
886 | <\s*\/?([a-z]*)\s*[^> if (this.is_whitespace(text) && !this.output.length) {\s*\/?([a-z]*)\s*[^> |
||
887 | <\s*\/?([a-z]*)\s*[^> return;\s*\/?([a-z]*)\s*[^> |
||
888 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
889 | <\s*\/?([a-z]*)\s*[^> if (text || text !== '') {\s*\/?([a-z]*)\s*[^> |
||
890 | <\s*\/?([a-z]*)\s*[^> if (this.output.length && this.output[this.output.length - 1] === '\n') {\s*\/?([a-z]*)\s*[^> |
||
891 | <\s*\/?([a-z]*)\s*[^> this.print_indentation(this.output);\s*\/?([a-z]*)\s*[^> |
||
892 | <\s*\/?([a-z]*)\s*[^> text = ltrim(text);\s*\/?([a-z]*)\s*[^> |
||
893 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
894 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
895 | <\s*\/?([a-z]*)\s*[^> this.print_token_raw(text);\s*\/?([a-z]*)\s*[^> |
||
896 | <\s*\/?([a-z]*)\s*[^> };\s*\/?([a-z]*)\s*[^> |
||
897 | |||
898 | <\s*\/?([a-z]*)\s*[^> this.print_token_raw = function(text) {\s*\/?([a-z]*)\s*[^> |
||
899 | <\s*\/?([a-z]*)\s*[^> // If we are going to print newlines, truncate trailing\s*\/?([a-z]*)\s*[^> |
||
900 | <\s*\/?([a-z]*)\s*[^> // whitespace, as the newlines will represent the space.\s*\/?([a-z]*)\s*[^> |
||
901 | <\s*\/?([a-z]*)\s*[^> if (this.newlines > 0) {\s*\/?([a-z]*)\s*[^> |
||
902 | <\s*\/?([a-z]*)\s*[^> text = rtrim(text);\s*\/?([a-z]*)\s*[^> |
||
903 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
904 | |||
905 | <\s*\/?([a-z]*)\s*[^> if (text && text !== '') {\s*\/?([a-z]*)\s*[^> |
||
906 | <\s*\/?([a-z]*)\s*[^> if (text.length > 1 && text.charAt(text.length - 1) === '\n') {\s*\/?([a-z]*)\s*[^> |
||
907 | <\s*\/?([a-z]*)\s*[^> // unformatted tags can grab newlines as their last character\s*\/?([a-z]*)\s*[^> |
||
908 | <\s*\/?([a-z]*)\s*[^> this.output.push(text.slice(0, -1));\s*\/?([a-z]*)\s*[^> |
||
909 | <\s*\/?([a-z]*)\s*[^> this.print_newline(false, this.output);\s*\/?([a-z]*)\s*[^> |
||
910 | <\s*\/?([a-z]*)\s*[^> } else {\s*\/?([a-z]*)\s*[^> |
||
911 | <\s*\/?([a-z]*)\s*[^> this.output.push(text);\s*\/?([a-z]*)\s*[^> |
||
912 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
913 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
914 | |||
915 | <\s*\/?([a-z]*)\s*[^> for (var n = 0; n < this.newlines; n++) {\s*\/?([a-z]*)\s*[^> |
||
916 | <\s*\/?([a-z]*)\s*[^> this.print_newline(n > 0, this.output);\s*\/?([a-z]*)\s*[^> |
||
917 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
918 | <\s*\/?([a-z]*)\s*[^> this.newlines = 0;\s*\/?([a-z]*)\s*[^> |
||
919 | <\s*\/?([a-z]*)\s*[^> };\s*\/?([a-z]*)\s*[^> |
||
920 | |||
921 | <\s*\/?([a-z]*)\s*[^> this.indent = function() {\s*\/?([a-z]*)\s*[^> |
||
922 | <\s*\/?([a-z]*)\s*[^> this.indent_level++;\s*\/?([a-z]*)\s*[^> |
||
923 | <\s*\/?([a-z]*)\s*[^> };\s*\/?([a-z]*)\s*[^> |
||
924 | |||
925 | <\s*\/?([a-z]*)\s*[^> this.unindent = function() {\s*\/?([a-z]*)\s*[^> |
||
926 | <\s*\/?([a-z]*)\s*[^> if (this.indent_level > 0) {\s*\/?([a-z]*)\s*[^> |
||
927 | <\s*\/?([a-z]*)\s*[^> this.indent_level--;\s*\/?([a-z]*)\s*[^> |
||
928 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
929 | <\s*\/?([a-z]*)\s*[^> };\s*\/?([a-z]*)\s*[^> |
||
930 | <\s*\/?([a-z]*)\s*[^> };\s*\/?([a-z]*)\s*[^> |
||
931 | <\s*\/?([a-z]*)\s*[^> return this;\s*\/?([a-z]*)\s*[^> |
||
932 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
933 | |||
934 | <\s*\/?([a-z]*)\s*[^> /*_____________________--------------------_____________________*/\s*\/?([a-z]*)\s*[^> |
||
935 | |||
936 | <\s*\/?([a-z]*)\s*[^> multi_parser = new Parser(); //wrapping functions Parser\s*\/?([a-z]*)\s*[^> |
||
937 | <\s*\/?([a-z]*)\s*[^> multi_parser.printer(html_source, indent_character, indent_size, wrap_line_length, brace_style); //initialize starting values\s*\/?([a-z]*)\s*[^> |
||
938 | |||
939 | <\s*\/?([a-z]*)\s*[^> while (true) {\s*\/?([a-z]*)\s*[^> |
||
940 | <\s*\/?([a-z]*)\s*[^> var t = multi_parser.get_token();\s*\/?([a-z]*)\s*[^> |
||
941 | <\s*\/?([a-z]*)\s*[^> multi_parser.token_text = t[0];\s*\/?([a-z]*)\s*[^> |
||
942 | <\s*\/?([a-z]*)\s*[^> multi_parser.token_type = t[1];\s*\/?([a-z]*)\s*[^> |
||
943 | |||
944 | <\s*\/?([a-z]*)\s*[^> if (multi_parser.token_type === 'TK_EOF') {\s*\/?([a-z]*)\s*[^> |
||
945 | <\s*\/?([a-z]*)\s*[^> break;\s*\/?([a-z]*)\s*[^> |
||
946 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
947 | |||
948 | <\s*\/?([a-z]*)\s*[^> switch (multi_parser.token_type) {\s*\/?([a-z]*)\s*[^> |
||
949 | <\s*\/?([a-z]*)\s*[^> case 'TK_TAG_START':\s*\/?([a-z]*)\s*[^> |
||
950 | <\s*\/?([a-z]*)\s*[^> multi_parser.print_newline(false, multi_parser.output);\s*\/?([a-z]*)\s*[^> |
||
951 | <\s*\/?([a-z]*)\s*[^> multi_parser.print_token(multi_parser.token_text);\s*\/?([a-z]*)\s*[^> |
||
952 | <\s*\/?([a-z]*)\s*[^> if (multi_parser.indent_content) {\s*\/?([a-z]*)\s*[^> |
||
953 | <\s*\/?([a-z]*)\s*[^> if ((multi_parser.indent_body_inner_html || !multi_parser.token_text.match(//)) &&\s*\/?([a-z]*)\s*[^> |
||
954 | <\s*\/?([a-z]*)\s*[^> (multi_parser.indent_head_inner_html || !multi_parser.token_text.match(//))) {\s*\/?([a-z]*)\s*[^> |
||
955 | |||
956 | <\s*\/?([a-z]*)\s*[^> multi_parser.indent();\s*\/?([a-z]*)\s*[^> |
||
957 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
958 | |||
959 | <\s*\/?([a-z]*)\s*[^> multi_parser.indent_content = false;\s*\/?([a-z]*)\s*[^> |
||
960 | <\s*\/?([a-z]*)\s*[^> }\s*\/?([a-z]*)\s*[^> |
||
961 | <\s*\/?([a-z]*)\s*[^> multi_parser.current_mode = 'CONTENT';\s*\/?([a-z]*)\s*[^> |
||
962 | <\s*\/?([a-z]*)\s*[^> break;\s*\/?([a-z]*)\s*[^> |
||
963 | <\s*\/?([a-z]*)\s*[^> case 'TK_TAG_STYLE':\s*\/?([a-z]*)\s*[^> |
||
964 | <\s*\/?([a-z]*)\s*[^> case 'TK_TAG_SCRIPT':\s*\/?([a-z]*)\s*[^> |
||
965 | <\s*\/?([a-z]*)\s*[^> multi_parser.print_newline(false, multi_parser.output);\s*\/?([a-z]*)\s*[^> |
||
966 | <\s*\/?([a-z]*)\s*[^> multi_parser.print_token(multi_parser.token_text);\s*\/?([a-z]*)\s*[^> |
||
967 | <\s*\/?([a-z]*)\s*[^> multi_parser.current_mode = 'CONTENT';\s*\/?([a-z]*)\s*[^> |
||
968 | <\s*\/?([a-z]*)\s*[^> break;\s*\/?([a-z]*)\s*[^> |
||
969 | <\s*\/?([a-z]*)\s*[^> case 'TK_TAG_END':\s*\/?([a-z]*)\s*[^> |
||
970 | <\s*\/?([a-z]*)\s*[^> //Print new line only if the tag has no content and has child\s*\/?([a-z]*)\s*[^> |
||
971 | <\s*\/?([a-z]*)\s*[^> if (multi_parser.last_token === 'TK_CONTENT' && multi_parser.last_text === '') {\s*\/?([a-z]*)\s*[^> |
||
972 | <\s*\/?([a-z]*)\s*[^> var tag_name = (multi_parser.token_text.match(/\w+/) || [])[0];\s*\/?([a-z]*)\s*[^> |
||
973 | <\s*\/?([a-z]*)\s*[^> var tag_extracted_from_last_output = null;\s*\/?([a-z]*)\s*[^> |
||
974 | <\s*\/?([a-z]*)\s*[^> if (multi_parser.output.length) {\s*\/?([a-z]*)\s*[^> |
||
975 | <\s*\/?([a-z]*)\s*[^> tag_extracted_from_last_output = multi_parser.output[multi_parser.output.length - 1].match(/(?:<|{{#)\s*(\w+)/);|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
976 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/ }|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
977 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/ if (tag_extracted_from_last_output === null |||{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
978 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/ (tag_extracted_from_last_output[1] !== tag_name && !multi_parser.Utils.in_array(tag_extracted_from_last_output[1], unformatted))) {|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
979 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/ multi_parser.print_newline(false, multi_parser.output);|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
980 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/ }|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
981 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/ }|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
982 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/ multi_parser.print_token(multi_parser.token_text);|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
983 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/ multi_parser.current_mode = 'CONTENT';|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
984 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/ break;|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
985 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/ case 'TK_TAG_SINGLE':|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
986 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/ // Don't add a newline before elements that should remain unformatted.|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
987 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/ var tag_check = multi_parser.token_text.match(/^\s*<([a-z-]+)/i);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
988 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (!tag_check || !multi_parser.Utils.in_array(tag_check[1], unformatted)) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
989 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.print_newline(false, multi_parser.output);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
990 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
991 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.print_token(multi_parser.token_text);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
992 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.current_mode = 'CONTENT';([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
993 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ break;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
994 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ case 'TK_TAG_HANDLEBARS_ELSE':([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
995 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ // Don't add a newline if opening {{#if}} tag is on the current line([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
996 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var foundIfOnCurrentLine = false;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
997 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ for (var lastCheckedOutput = multi_parser.output.length - 1; lastCheckedOutput >= 0; lastCheckedOutput--) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
998 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (multi_parser.output[lastCheckedOutput] === '\n') {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
999 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ break;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1000 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ } else {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1001 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (multi_parser.output[lastCheckedOutput].match(/{{#if/)) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1002 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ foundIfOnCurrentLine = true;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1003 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ break;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1004 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1005 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1006 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1007 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (!foundIfOnCurrentLine) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1008 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.print_newline(false, multi_parser.output);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1009 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1010 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.print_token(multi_parser.token_text);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1011 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (multi_parser.indent_content) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1012 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.indent();([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1013 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.indent_content = false;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1014 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1015 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.current_mode = 'CONTENT';([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1016 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ break;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1017 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ case 'TK_TAG_HANDLEBARS_COMMENT':([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1018 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.print_token(multi_parser.token_text);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1019 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.current_mode = 'TAG';([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1020 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ break;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1021 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ case 'TK_CONTENT':([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1022 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.print_token(multi_parser.token_text);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1023 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.current_mode = 'TAG';([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1024 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ break;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1025 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ case 'TK_STYLE':([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1026 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ case 'TK_SCRIPT':([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1027 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (multi_parser.token_text !== '') {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1028 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.print_newline(false, multi_parser.output);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1029 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var text = multi_parser.token_text,([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1030 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ _beautifier,([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1031 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ script_indent_level = 1;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1032 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (multi_parser.token_type === 'TK_SCRIPT') {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1033 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ _beautifier = typeof js_beautify === 'function' && js_beautify;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1034 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ } else if (multi_parser.token_type === 'TK_STYLE') {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1035 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ _beautifier = typeof css_beautify === 'function' && css_beautify;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1036 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1037 | |||
1038 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (options.indent_scripts === "keep") {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1039 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ script_indent_level = 0;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1040 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ } else if (options.indent_scripts === "separate") {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1041 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ script_indent_level = -multi_parser.indent_level;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1042 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1043 | |||
1044 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var indentation = multi_parser.get_full_indent(script_indent_level);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1045 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (_beautifier) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1046 | |||
1047 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ // call the Beautifier if avaliable([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1048 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var Child_options = function() {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1049 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ this.eol = '\n';([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1050 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ };([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1051 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ Child_options.prototype = options;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1052 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var child_options = new Child_options();([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1053 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ text = _beautifier(text.replace(/^\s*/, indentation), child_options);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1054 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ } else {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1055 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ // simply indent the string otherwise([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1056 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var white = text.match(/^\s*/)[0];([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1057 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var _level = white.match(/[^\n\r]*$/)[0].split(multi_parser.indent_string).length - 1;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1058 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var reindent = multi_parser.get_full_indent(script_indent_level - _level);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1059 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ text = text.replace(/^\s*/, indentation)([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1060 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ .replace(/\r\n|\r|\n/g, '\n' + reindent)([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1061 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ .replace(/\s+$/, '');([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1062 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1063 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (text) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1064 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.print_token_raw(text);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1065 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.print_newline(true, multi_parser.output);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1066 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1067 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1068 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.current_mode = 'TAG';([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1069 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ break;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1070 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ default:([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1071 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ // We should not be getting here but we don't want to drop input on the floor([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1072 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ // Just output the text and move on([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1073 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (multi_parser.token_text !== '') {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1074 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.print_token(multi_parser.token_text);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1075 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1076 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ break;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1077 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1078 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.last_token = multi_parser.token_type;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1079 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ multi_parser.last_text = multi_parser.token_text;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1080 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1081 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var sweet_code = multi_parser.output.join('').replace(/[\r\n\t ]+$/, '');([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1082 | |||
1083 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ // establish end_with_newline([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1084 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (end_with_newline) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1085 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ sweet_code += '\n';([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1086 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1087 | |||
1088 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (eol !== '\n') {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1089 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ sweet_code = sweet_code.replace(/[\n]/g, eol);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1090 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1091 | |||
1092 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ return sweet_code;([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1093 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1094 | |||
1095 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ if (typeof define === "function" && define.amd) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1096 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ // Add support for AMD ( https://github.com/amdjs/amdjs-api/wiki/AMD#defineamd-property- )([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1097 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ define(["require", "./beautify", "./beautify-css"], function(requireamd) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1098 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var js_beautify = requireamd("./beautify");([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1099 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var css_beautify = requireamd("./beautify-css");([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1100 | |||
1101 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ return {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1102 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ html_beautify: function(html_source, options) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1103 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ return style_html(html_source, options, js_beautify.js_beautify, css_beautify.css_beautify);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1104 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1105 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ };([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1106 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ });([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1107 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ } else if (typeof exports !== "undefined") {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1108 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ // Add support for CommonJS. Just put this file somewhere on your require.paths([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1109 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ // and you will be able to `var html_beautify = require("beautify").html_beautify`.([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1110 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var js_beautify = require('./beautify.js');([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1111 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ var css_beautify = require('./beautify-css.js');([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1112 | |||
1113 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ exports.html_beautify = function(html_source, options) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1114 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ return style_html(html_source, options, js_beautify.js_beautify, css_beautify.css_beautify);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1115 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ };([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1116 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ } else if (typeof window !== "undefined") {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1117 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ // If we're running a web page and don't have either of the above, add our one global([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1118 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ window.html_beautify = function(html_source, options) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1119 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ return style_html(html_source, options, window.js_beautify, window.css_beautify);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1120 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ };([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1121 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ } else if (typeof global !== "undefined") {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1122 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ // If we don't even have window, try global.([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1123 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ global.html_beautify = function(html_source, options) {([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1124 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ return style_html(html_source, options, global.js_beautify, global.css_beautify);([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1125 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ };([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1126 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/ }([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |
||
1127 | |||
1128 | <\s*\/?([a-z]*)\s*[^><|{{#)\s*(\w+)/<([a-z-]+)/}());([a-z-]+)/|{{#)\s*(\w+)/\s*\/?([a-z]*)\s*[^> |