589d6913792afce20641fe2ec0fd219a2b719055
[moodle.git] / lib / editor / atto / plugins / html / yui / src / beautify / js / beautify-css.js
1 /*jshint curly:false, eqeqeq:true, laxbreak:true, noempty:false */
2 /* AUTO-GENERATED. DO NOT MODIFY. */
3 /*
5   The MIT License (MIT)
7   Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and contributors.
9   Permission is hereby granted, free of charge, to any person
10   obtaining a copy of this software and associated documentation files
11   (the "Software"), to deal in the Software without restriction,
12   including without limitation the rights to use, copy, modify, merge,
13   publish, distribute, sublicense, and/or sell copies of the Software,
14   and to permit persons to whom the Software is furnished to do so,
15   subject to the following conditions:
17   The above copyright notice and this permission notice shall be
18   included in all copies or substantial portions of the Software.
20   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
24   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
25   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
26   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27   SOFTWARE.
30  CSS Beautifier
31 ---------------
33     Written by Harutyun Amirjanyan, (amirjanyan@gmail.com)
35     Based on code initially developed by: Einar Lielmanis, <einar@jsbeautifier.org>
36         http://jsbeautifier.org/
38     Usage:
39         css_beautify(source_text);
40         css_beautify(source_text, options);
42     The options are (default in brackets):
43         indent_size (4)                         — indentation size,
44         indent_char (space)                     — character to indent with,
45         selector_separator_newline (true)       - separate selectors with newline or
46                                                   not (e.g. "a,\nbr" or "a, br")
47         end_with_newline (false)                - end with a newline
48         newline_between_rules (true)            - add a new line after every css rule
49         space_around_selector_separator (false) - ensure space around selector separators:
50                                                   '>', '+', '~' (e.g. "a>b" -> "a > b")
51     e.g
53     css_beautify(css_source_text, {
54       'indent_size': 1,
55       'indent_char': '\t',
56       'selector_separator': ' ',
57       'end_with_newline': false,
58       'newline_between_rules': true,
59       'space_around_selector_separator': true
60     });
61 */
63 // http://www.w3.org/TR/CSS21/syndata.html#tokenization
64 // http://www.w3.org/TR/css3-syntax/
66 (function() {
67 var legacy_beautify_css =
68 /******/ (function(modules) { // webpackBootstrap
69 /******/        // The module cache
70 /******/        var installedModules = {};
71 /******/
72 /******/        // The require function
73 /******/        function __webpack_require__(moduleId) {
74 /******/
75 /******/                // Check if module is in cache
76 /******/                if(installedModules[moduleId]) {
77 /******/                        return installedModules[moduleId].exports;
78 /******/                }
79 /******/                // Create a new module (and put it into the cache)
80 /******/                var module = installedModules[moduleId] = {
81 /******/                        i: moduleId,
82 /******/                        l: false,
83 /******/                        exports: {}
84 /******/                };
85 /******/
86 /******/                // Execute the module function
87 /******/                modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
88 /******/
89 /******/                // Flag the module as loaded
90 /******/                module.l = true;
91 /******/
92 /******/                // Return the exports of the module
93 /******/                return module.exports;
94 /******/        }
95 /******/
96 /******/
97 /******/        // expose the modules object (__webpack_modules__)
98 /******/        __webpack_require__.m = modules;
99 /******/
100 /******/        // expose the module cache
101 /******/        __webpack_require__.c = installedModules;
102 /******/
103 /******/        // identity function for calling harmony imports with the correct context
104 /******/        __webpack_require__.i = function(value) { return value; };
105 /******/
106 /******/        // define getter function for harmony exports
107 /******/        __webpack_require__.d = function(exports, name, getter) {
108 /******/                if(!__webpack_require__.o(exports, name)) {
109 /******/                        Object.defineProperty(exports, name, {
110 /******/                                configurable: false,
111 /******/                                enumerable: true,
112 /******/                                get: getter
113 /******/                        });
114 /******/                }
115 /******/        };
116 /******/
117 /******/        // getDefaultExport function for compatibility with non-harmony modules
118 /******/        __webpack_require__.n = function(module) {
119 /******/                var getter = module && module.__esModule ?
120 /******/                        function getDefault() { return module['default']; } :
121 /******/                        function getModuleExports() { return module; };
122 /******/                __webpack_require__.d(getter, 'a', getter);
123 /******/                return getter;
124 /******/        };
125 /******/
126 /******/        // Object.prototype.hasOwnProperty.call
127 /******/        __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
128 /******/
129 /******/        // __webpack_public_path__
130 /******/        __webpack_require__.p = "";
131 /******/
132 /******/        // Load entry module and return exports
133 /******/        return __webpack_require__(__webpack_require__.s = 4);
134 /******/ })
135 /************************************************************************/
136 /******/ ([
137 /* 0 */
138 /***/ (function(module, exports, __webpack_require__) {
140 /*jshint curly:true, eqeqeq:true, laxbreak:true, noempty:false */
141 /*
143   The MIT License (MIT)
145   Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and contributors.
147   Permission is hereby granted, free of charge, to any person
148   obtaining a copy of this software and associated documentation files
149   (the "Software"), to deal in the Software without restriction,
150   including without limitation the rights to use, copy, modify, merge,
151   publish, distribute, sublicense, and/or sell copies of the Software,
152   and to permit persons to whom the Software is furnished to do so,
153   subject to the following conditions:
155   The above copyright notice and this permission notice shall be
156   included in all copies or substantial portions of the Software.
158   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
159   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
160   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
161   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
162   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
163   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
164   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
165   SOFTWARE.
166 */
168 var mergeOpts = __webpack_require__(2).mergeOpts;
169 var acorn = __webpack_require__(1);
170 var Output = __webpack_require__(3).Output;
173 var lineBreak = acorn.lineBreak;
174 var allLineBreaks = acorn.allLineBreaks;
176 function Beautifier(source_text, options) {
177     options = options || {};
179     // Allow the setting of language/file-type specific options
180     // with inheritance of overall settings
181     options = mergeOpts(options, 'css');
183     source_text = source_text || '';
185     var newlinesFromLastWSEat = 0;
186     var indentSize = options.indent_size ? parseInt(options.indent_size, 10) : 4;
187     var indentCharacter = options.indent_char || ' ';
188     var preserve_newlines = (options.preserve_newlines === undefined) ? false : options.preserve_newlines;
189     var selectorSeparatorNewline = (options.selector_separator_newline === undefined) ? true : options.selector_separator_newline;
190     var end_with_newline = (options.end_with_newline === undefined) ? false : options.end_with_newline;
191     var newline_between_rules = (options.newline_between_rules === undefined) ? true : options.newline_between_rules;
192     var space_around_combinator = (options.space_around_combinator === undefined) ? false : options.space_around_combinator;
193     space_around_combinator = space_around_combinator || ((options.space_around_selector_separator === undefined) ? false : options.space_around_selector_separator);
194     var eol = options.eol ? options.eol : 'auto';
196     if (options.indent_with_tabs) {
197         indentCharacter = '\t';
198         indentSize = 1;
199     }
201     if (eol === 'auto') {
202         eol = '\n';
203         if (source_text && lineBreak.test(source_text || '')) {
204             eol = source_text.match(lineBreak)[0];
205         }
206     }
208     eol = eol.replace(/\\r/, '\r').replace(/\\n/, '\n');
210     // HACK: newline parsing inconsistent. This brute force normalizes the input.
211     source_text = source_text.replace(allLineBreaks, '\n');
213     // tokenizer
214     var whiteRe = /^\s+$/;
216     var pos = -1,
217         ch;
218     var parenLevel = 0;
220     function next() {
221         ch = source_text.charAt(++pos);
222         return ch || '';
223     }
225     function peek(skipWhitespace) {
226         var result = '';
227         var prev_pos = pos;
228         if (skipWhitespace) {
229             eatWhitespace();
230         }
231         result = source_text.charAt(pos + 1) || '';
232         pos = prev_pos - 1;
233         next();
234         return result;
235     }
237     function eatString(endChars) {
238         var start = pos;
239         while (next()) {
240             if (ch === "\\") {
241                 next();
242             } else if (endChars.indexOf(ch) !== -1) {
243                 break;
244             } else if (ch === "\n") {
245                 break;
246             }
247         }
248         return source_text.substring(start, pos + 1);
249     }
251     function peekString(endChar) {
252         var prev_pos = pos;
253         var str = eatString(endChar);
254         pos = prev_pos - 1;
255         next();
256         return str;
257     }
259     function eatWhitespace(preserve_newlines_local) {
260         var result = 0;
261         while (whiteRe.test(peek())) {
262             next();
263             if (ch === '\n' && preserve_newlines_local && preserve_newlines) {
264                 output.add_new_line(true);
265                 result++;
266             }
267         }
268         newlinesFromLastWSEat = result;
269         return result;
270     }
272     function skipWhitespace() {
273         var result = '';
274         if (ch && whiteRe.test(ch)) {
275             result = ch;
276         }
277         while (whiteRe.test(next())) {
278             result += ch;
279         }
280         return result;
281     }
283     function eatComment() {
284         var start = pos;
285         var singleLine = peek() === "/";
286         next();
287         while (next()) {
288             if (!singleLine && ch === "*" && peek() === "/") {
289                 next();
290                 break;
291             } else if (singleLine && ch === "\n") {
292                 return source_text.substring(start, pos);
293             }
294         }
296         return source_text.substring(start, pos) + ch;
297     }
300     function lookBack(str) {
301         return source_text.substring(pos - str.length, pos).toLowerCase() ===
302             str;
303     }
305     // Nested pseudo-class if we are insideRule
306     // and the next special character found opens
307     // a new block
308     function foundNestedPseudoClass() {
309         var openParen = 0;
310         for (var i = pos + 1; i < source_text.length; i++) {
311             var ch = source_text.charAt(i);
312             if (ch === "{") {
313                 return true;
314             } else if (ch === '(') {
315                 // pseudoclasses can contain ()
316                 openParen += 1;
317             } else if (ch === ')') {
318                 if (openParen === 0) {
319                     return false;
320                 }
321                 openParen -= 1;
322             } else if (ch === ";" || ch === "}") {
323                 return false;
324             }
325         }
326         return false;
327     }
329     // printer
330     var baseIndentString = '';
331     var preindent_index = 0;
332     if (source_text && source_text.length) {
333         while ((source_text.charAt(preindent_index) === ' ' ||
334                 source_text.charAt(preindent_index) === '\t')) {
335             preindent_index += 1;
336         }
337         baseIndentString = source_text.substring(0, preindent_index);
338         source_text = source_text.substring(preindent_index);
339     }
342     var singleIndent = new Array(indentSize + 1).join(indentCharacter);
343     var indentLevel;
344     var nestedLevel;
345     var output;
347     function print_string(output_string) {
348         if (output.just_added_newline()) {
349             output.set_indent(indentLevel);
350         }
351         output.add_token(output_string);
352     }
354     function preserveSingleSpace(isAfterSpace) {
355         if (isAfterSpace) {
356             output.space_before_token = true;
357         }
358     }
360     function indent() {
361         indentLevel++;
362     }
364     function outdent() {
365         if (indentLevel > 0) {
366             indentLevel--;
367         }
368     }
370     /*_____________________--------------------_____________________*/
372     this.beautify = function() {
373         // reset
374         output = new Output(singleIndent, baseIndentString);
375         indentLevel = 0;
376         nestedLevel = 0;
378         pos = -1;
379         ch = null;
380         parenLevel = 0;
382         var insideRule = false;
383         var insidePropertyValue = false;
384         var enteringConditionalGroup = false;
385         var top_ch = '';
386         var last_top_ch = '';
388         while (true) {
389             var whitespace = skipWhitespace();
390             var isAfterSpace = whitespace !== '';
391             var isAfterNewline = whitespace.indexOf('\n') !== -1;
392             last_top_ch = top_ch;
393             top_ch = ch;
395             if (!ch) {
396                 break;
397             } else if (ch === '/' && peek() === '*') { /* css comment */
398                 var header = indentLevel === 0;
400                 if (isAfterNewline || header) {
401                     output.add_new_line();
402                 }
404                 print_string(eatComment());
405                 output.add_new_line();
406                 if (header) {
407                     output.add_new_line(true);
408                 }
409             } else if (ch === '/' && peek() === '/') { // single line comment
410                 if (!isAfterNewline && last_top_ch !== '{') {
411                     output.trim(true);
412                 }
413                 output.space_before_token = true;
414                 print_string(eatComment());
415                 output.add_new_line();
416             } else if (ch === '@') {
417                 preserveSingleSpace(isAfterSpace);
419                 // deal with less propery mixins @{...}
420                 if (peek() === '{') {
421                     print_string(eatString('}'));
422                 } else {
423                     print_string(ch);
425                     // strip trailing space, if present, for hash property checks
426                     var variableOrRule = peekString(": ,;{}()[]/='\"");
428                     if (variableOrRule.match(/[ :]$/)) {
429                         // we have a variable or pseudo-class, add it and insert one space before continuing
430                         next();
431                         variableOrRule = eatString(": ").replace(/\s$/, '');
432                         print_string(variableOrRule);
433                         output.space_before_token = true;
434                     }
436                     variableOrRule = variableOrRule.replace(/\s$/, '');
438                     // might be a nesting at-rule
439                     if (variableOrRule in this.NESTED_AT_RULE) {
440                         nestedLevel += 1;
441                         if (variableOrRule in this.CONDITIONAL_GROUP_RULE) {
442                             enteringConditionalGroup = true;
443                         }
444                     }
445                 }
446             } else if (ch === '#' && peek() === '{') {
447                 preserveSingleSpace(isAfterSpace);
448                 print_string(eatString('}'));
449             } else if (ch === '{') {
450                 if (peek(true) === '}') {
451                     eatWhitespace();
452                     next();
453                     output.space_before_token = true;
454                     print_string("{}");
455                     if (!eatWhitespace(true)) {
456                         output.add_new_line();
457                     }
459                     if (newlinesFromLastWSEat < 2 && newline_between_rules && indentLevel === 0) {
460                         output.add_new_line(true);
461                     }
462                 } else {
463                     indent();
464                     output.space_before_token = true;
465                     print_string(ch);
466                     if (!eatWhitespace(true)) {
467                         output.add_new_line();
468                     }
470                     // when entering conditional groups, only rulesets are allowed
471                     if (enteringConditionalGroup) {
472                         enteringConditionalGroup = false;
473                         insideRule = (indentLevel > nestedLevel);
474                     } else {
475                         // otherwise, declarations are also allowed
476                         insideRule = (indentLevel >= nestedLevel);
477                     }
478                 }
479             } else if (ch === '}') {
480                 outdent();
481                 output.add_new_line();
482                 print_string(ch);
483                 insideRule = false;
484                 insidePropertyValue = false;
485                 if (nestedLevel) {
486                     nestedLevel--;
487                 }
489                 if (!eatWhitespace(true)) {
490                     output.add_new_line();
491                 }
493                 if (newlinesFromLastWSEat < 2 && newline_between_rules && indentLevel === 0) {
494                     output.add_new_line(true);
495                 }
496             } else if (ch === ":") {
497                 eatWhitespace();
498                 if ((insideRule || enteringConditionalGroup) &&
499                     !(lookBack("&") || foundNestedPseudoClass()) &&
500                     !lookBack("(")) {
501                     // 'property: value' delimiter
502                     // which could be in a conditional group query
503                     print_string(':');
504                     if (!insidePropertyValue) {
505                         insidePropertyValue = true;
506                         output.space_before_token = true;
507                     }
508                 } else {
509                     // sass/less parent reference don't use a space
510                     // sass nested pseudo-class don't use a space
512                     // preserve space before pseudoclasses/pseudoelements, as it means "in any child"
513                     if (lookBack(" ")) {
514                         output.space_before_token = true;
515                     }
516                     if (peek() === ":") {
517                         // pseudo-element
518                         next();
519                         print_string("::");
520                     } else {
521                         // pseudo-class
522                         print_string(':');
523                     }
524                 }
525             } else if (ch === '"' || ch === '\'') {
526                 preserveSingleSpace(isAfterSpace);
527                 print_string(eatString(ch));
528             } else if (ch === ';') {
529                 insidePropertyValue = false;
530                 print_string(ch);
531                 if (!eatWhitespace(true)) {
532                     output.add_new_line();
533                 }
534             } else if (ch === '(') { // may be a url
535                 if (lookBack("url")) {
536                     print_string(ch);
537                     eatWhitespace();
538                     if (next()) {
539                         if (ch !== ')' && ch !== '"' && ch !== '\'') {
540                             print_string(eatString(')'));
541                         } else {
542                             pos--;
543                         }
544                     }
545                 } else {
546                     parenLevel++;
547                     preserveSingleSpace(isAfterSpace);
548                     print_string(ch);
549                     eatWhitespace();
550                 }
551             } else if (ch === ')') {
552                 print_string(ch);
553                 parenLevel--;
554             } else if (ch === ',') {
555                 print_string(ch);
556                 if (!eatWhitespace(true) && selectorSeparatorNewline && !insidePropertyValue && parenLevel < 1) {
557                     output.add_new_line();
558                 } else {
559                     output.space_before_token = true;
560                 }
561             } else if ((ch === '>' || ch === '+' || ch === '~') &&
562                 !insidePropertyValue && parenLevel < 1) {
563                 //handle combinator spacing
564                 if (space_around_combinator) {
565                     output.space_before_token = true;
566                     print_string(ch);
567                     output.space_before_token = true;
568                 } else {
569                     print_string(ch);
570                     eatWhitespace();
571                     // squash extra whitespace
572                     if (ch && whiteRe.test(ch)) {
573                         ch = '';
574                     }
575                 }
576             } else if (ch === ']') {
577                 print_string(ch);
578             } else if (ch === '[') {
579                 preserveSingleSpace(isAfterSpace);
580                 print_string(ch);
581             } else if (ch === '=') { // no whitespace before or after
582                 eatWhitespace();
583                 print_string('=');
584                 if (whiteRe.test(ch)) {
585                     ch = '';
586                 }
587             } else if (ch === '!') { // !important
588                 print_string(' ');
589                 print_string(ch);
590             } else {
591                 preserveSingleSpace(isAfterSpace);
592                 print_string(ch);
593             }
594         }
596         var sweetCode = output.get_code(end_with_newline, eol);
598         return sweetCode;
599     };
601     // https://developer.mozilla.org/en-US/docs/Web/CSS/At-rule
602     this.NESTED_AT_RULE = {
603         "@page": true,
604         "@font-face": true,
605         "@keyframes": true,
606         // also in CONDITIONAL_GROUP_RULE below
607         "@media": true,
608         "@supports": true,
609         "@document": true
610     };
611     this.CONDITIONAL_GROUP_RULE = {
612         "@media": true,
613         "@supports": true,
614         "@document": true
615     };
618 module.exports.Beautifier = Beautifier;
621 /***/ }),
622 /* 1 */
623 /***/ (function(module, exports) {
625 /* jshint curly: false */
626 // This section of code is taken from acorn.
627 //
628 // Acorn was written by Marijn Haverbeke and released under an MIT
629 // license. The Unicode regexps (for identifiers and whitespace) were
630 // taken from [Esprima](http://esprima.org) by Ariya Hidayat.
631 //
632 // Git repositories for Acorn are available at
633 //
634 //     http://marijnhaverbeke.nl/git/acorn
635 //     https://github.com/marijnh/acorn.git
637 // ## Character categories
639 // Big ugly regular expressions that match characters in the
640 // whitespace, identifier, and identifier-start categories. These
641 // are only applied when a character is found to actually have a
642 // code point above 128.
644 var nonASCIIwhitespace = /[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/; // jshint ignore:line
645 var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
646 var nonASCIIidentifierChars = "\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u0620-\u0649\u0672-\u06d3\u06e7-\u06e8\u06fb-\u06fc\u0730-\u074a\u0800-\u0814\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0840-\u0857\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962-\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09d7\u09df-\u09e0\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2-\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5f-\u0b60\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62-\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2-\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d46-\u0d48\u0d57\u0d62-\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e34-\u0e3a\u0e40-\u0e45\u0e50-\u0e59\u0eb4-\u0eb9\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f41-\u0f47\u0f71-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1029\u1040-\u1049\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u170e-\u1710\u1720-\u1730\u1740-\u1750\u1772\u1773\u1780-\u17b2\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1920-\u192b\u1930-\u193b\u1951-\u196d\u19b0-\u19c0\u19c8-\u19c9\u19d0-\u19d9\u1a00-\u1a15\u1a20-\u1a53\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b46-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1bb0-\u1bb9\u1be6-\u1bf3\u1c00-\u1c22\u1c40-\u1c49\u1c5b-\u1c7d\u1cd0-\u1cd2\u1d00-\u1dbe\u1e01-\u1f15\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2d81-\u2d96\u2de0-\u2dff\u3021-\u3028\u3099\u309a\ua640-\ua66d\ua674-\ua67d\ua69f\ua6f0-\ua6f1\ua7f8-\ua800\ua806\ua80b\ua823-\ua827\ua880-\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8f3-\ua8f7\ua900-\ua909\ua926-\ua92d\ua930-\ua945\ua980-\ua983\ua9b3-\ua9c0\uaa00-\uaa27\uaa40-\uaa41\uaa4c-\uaa4d\uaa50-\uaa59\uaa7b\uaae0-\uaae9\uaaf2-\uaaf3\uabc0-\uabe1\uabec\uabed\uabf0-\uabf9\ufb20-\ufb28\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";
647 var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
648 var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
650 // Whether a single character denotes a newline.
652 exports.newline = /[\n\r\u2028\u2029]/;
654 // Matches a whole line break (where CRLF is considered a single
655 // line break). Used to count lines.
657 // in javascript, these two differ
658 // in python they are the same, different methods are called on them
659 exports.lineBreak = new RegExp('\r\n|' + exports.newline.source);
660 exports.allLineBreaks = new RegExp(exports.lineBreak.source, 'g');
663 // Test whether a given character code starts an identifier.
665 exports.isIdentifierStart = function(code) {
666     // permit $ (36) and @ (64). @ is used in ES7 decorators.
667     if (code < 65) return code === 36 || code === 64;
668     // 65 through 91 are uppercase letters.
669     if (code < 91) return true;
670     // permit _ (95).
671     if (code < 97) return code === 95;
672     // 97 through 123 are lowercase letters.
673     if (code < 123) return true;
674     return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
675 };
677 // Test whether a given character is part of an identifier.
679 exports.isIdentifierChar = function(code) {
680     if (code < 48) return code === 36;
681     if (code < 58) return true;
682     if (code < 65) return false;
683     if (code < 91) return true;
684     if (code < 97) return code === 95;
685     if (code < 123) return true;
686     return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
687 };
690 /***/ }),
691 /* 2 */
692 /***/ (function(module, exports) {
694 /*jshint curly:true, eqeqeq:true, laxbreak:true, noempty:false */
695 /*
697     The MIT License (MIT)
699     Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and contributors.
701     Permission is hereby granted, free of charge, to any person
702     obtaining a copy of this software and associated documentation files
703     (the "Software"), to deal in the Software without restriction,
704     including without limitation the rights to use, copy, modify, merge,
705     publish, distribute, sublicense, and/or sell copies of the Software,
706     and to permit persons to whom the Software is furnished to do so,
707     subject to the following conditions:
709     The above copyright notice and this permission notice shall be
710     included in all copies or substantial portions of the Software.
712     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
713     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
714     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
715     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
716     BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
717     ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
718     CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
719     SOFTWARE.
720 */
722 function mergeOpts(allOptions, targetType) {
723     var finalOpts = {};
724     var name;
726     for (name in allOptions) {
727         if (name !== targetType) {
728             finalOpts[name] = allOptions[name];
729         }
730     }
732     //merge in the per type settings for the targetType
733     if (targetType in allOptions) {
734         for (name in allOptions[targetType]) {
735             finalOpts[name] = allOptions[targetType][name];
736         }
737     }
738     return finalOpts;
741 module.exports.mergeOpts = mergeOpts;
744 /***/ }),
745 /* 3 */
746 /***/ (function(module, exports) {
748 /*jshint curly:true, eqeqeq:true, laxbreak:true, noempty:false */
749 /*
751   The MIT License (MIT)
753   Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and contributors.
755   Permission is hereby granted, free of charge, to any person
756   obtaining a copy of this software and associated documentation files
757   (the "Software"), to deal in the Software without restriction,
758   including without limitation the rights to use, copy, modify, merge,
759   publish, distribute, sublicense, and/or sell copies of the Software,
760   and to permit persons to whom the Software is furnished to do so,
761   subject to the following conditions:
763   The above copyright notice and this permission notice shall be
764   included in all copies or substantial portions of the Software.
766   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
767   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
768   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
769   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
770   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
771   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
772   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
773   SOFTWARE.
774 */
776 function OutputLine(parent) {
777     var _character_count = 0;
778     // use indent_count as a marker for lines that have preserved indentation
779     var _indent_count = -1;
781     var _items = [];
782     var _empty = true;
784     this.set_indent = function(level) {
785         _character_count = parent.baseIndentLength + level * parent.indent_length;
786         _indent_count = level;
787     };
789     this.get_character_count = function() {
790         return _character_count;
791     };
793     this.is_empty = function() {
794         return _empty;
795     };
797     this.last = function() {
798         if (!this._empty) {
799             return _items[_items.length - 1];
800         } else {
801             return null;
802         }
803     };
805     this.push = function(input) {
806         _items.push(input);
807         _character_count += input.length;
808         _empty = false;
809     };
811     this.pop = function() {
812         var item = null;
813         if (!_empty) {
814             item = _items.pop();
815             _character_count -= item.length;
816             _empty = _items.length === 0;
817         }
818         return item;
819     };
821     this.remove_indent = function() {
822         if (_indent_count > 0) {
823             _indent_count -= 1;
824             _character_count -= parent.indent_length;
825         }
826     };
828     this.trim = function() {
829         while (this.last() === ' ') {
830             _items.pop();
831             _character_count -= 1;
832         }
833         _empty = _items.length === 0;
834     };
836     this.toString = function() {
837         var result = '';
838         if (!this._empty) {
839             if (_indent_count >= 0) {
840                 result = parent.indent_cache[_indent_count];
841             }
842             result += _items.join('');
843         }
844         return result;
845     };
848 function Output(indent_string, baseIndentString) {
849     baseIndentString = baseIndentString || '';
850     this.indent_cache = [baseIndentString];
851     this.baseIndentLength = baseIndentString.length;
852     this.indent_length = indent_string.length;
853     this.raw = false;
855     var lines = [];
856     this.baseIndentString = baseIndentString;
857     this.indent_string = indent_string;
858     this.previous_line = null;
859     this.current_line = null;
860     this.space_before_token = false;
862     this.add_outputline = function() {
863         this.previous_line = this.current_line;
864         this.current_line = new OutputLine(this);
865         lines.push(this.current_line);
866     };
868     // initialize
869     this.add_outputline();
872     this.get_line_number = function() {
873         return lines.length;
874     };
876     // Using object instead of string to allow for later expansion of info about each line
877     this.add_new_line = function(force_newline) {
878         if (this.get_line_number() === 1 && this.just_added_newline()) {
879             return false; // no newline on start of file
880         }
882         if (force_newline || !this.just_added_newline()) {
883             if (!this.raw) {
884                 this.add_outputline();
885             }
886             return true;
887         }
889         return false;
890     };
892     this.get_code = function(end_with_newline, eol) {
893         var sweet_code = lines.join('\n').replace(/[\r\n\t ]+$/, '');
895         if (end_with_newline) {
896             sweet_code += '\n';
897         }
899         if (eol !== '\n') {
900             sweet_code = sweet_code.replace(/[\n]/g, eol);
901         }
903         return sweet_code;
904     };
906     this.set_indent = function(level) {
907         // Never indent your first output indent at the start of the file
908         if (lines.length > 1) {
909             while (level >= this.indent_cache.length) {
910                 this.indent_cache.push(this.indent_cache[this.indent_cache.length - 1] + this.indent_string);
911             }
913             this.current_line.set_indent(level);
914             return true;
915         }
916         this.current_line.set_indent(0);
917         return false;
918     };
920     this.add_raw_token = function(token) {
921         for (var x = 0; x < token.newlines; x++) {
922             this.add_outputline();
923         }
924         this.current_line.push(token.whitespace_before);
925         this.current_line.push(token.text);
926         this.space_before_token = false;
927     };
929     this.add_token = function(printable_token) {
930         this.add_space_before_token();
931         this.current_line.push(printable_token);
932     };
934     this.add_space_before_token = function() {
935         if (this.space_before_token && !this.just_added_newline()) {
936             this.current_line.push(' ');
937         }
938         this.space_before_token = false;
939     };
941     this.remove_indent = function(index) {
942         var output_length = lines.length;
943         while (index < output_length) {
944             lines[index].remove_indent();
945             index++;
946         }
947     };
949     this.trim = function(eat_newlines) {
950         eat_newlines = (eat_newlines === undefined) ? false : eat_newlines;
952         this.current_line.trim(indent_string, baseIndentString);
954         while (eat_newlines && lines.length > 1 &&
955             this.current_line.is_empty()) {
956             lines.pop();
957             this.current_line = lines[lines.length - 1];
958             this.current_line.trim();
959         }
961         this.previous_line = lines.length > 1 ? lines[lines.length - 2] : null;
962     };
964     this.just_added_newline = function() {
965         return this.current_line.is_empty();
966     };
968     this.just_added_blankline = function() {
969         if (this.just_added_newline()) {
970             if (lines.length === 1) {
971                 return true; // start of the file and newline = blank
972             }
974             var line = lines[lines.length - 2];
975             return line.is_empty();
976         }
977         return false;
978     };
981 module.exports.Output = Output;
984 /***/ }),
985 /* 4 */
986 /***/ (function(module, exports, __webpack_require__) {
988 /*jshint curly:true, eqeqeq:true, laxbreak:true, noempty:false */
989 /*
991     The MIT License (MIT)
993     Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and contributors.
995     Permission is hereby granted, free of charge, to any person
996     obtaining a copy of this software and associated documentation files
997     (the "Software"), to deal in the Software without restriction,
998     including without limitation the rights to use, copy, modify, merge,
999     publish, distribute, sublicense, and/or sell copies of the Software,
1000     and to permit persons to whom the Software is furnished to do so,
1001     subject to the following conditions:
1003     The above copyright notice and this permission notice shall be
1004     included in all copies or substantial portions of the Software.
1006     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
1007     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1008     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
1009     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
1010     BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
1011     ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
1012     CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1013     SOFTWARE.
1014 */
1016 var Beautifier = __webpack_require__(0).Beautifier;
1018 function css_beautify(source_text, options) {
1019     var beautifier = new Beautifier(source_text, options);
1020     return beautifier.beautify();
1023 module.exports = css_beautify;
1025 /***/ })
1026 /******/ ]);
1027 var css_beautify = legacy_beautify_css;
1028 /* Footer */
1029 if (typeof define === "function" && define.amd) {
1030     // Add support for AMD ( https://github.com/amdjs/amdjs-api/wiki/AMD#defineamd-property- )
1031     define([], function() {
1032         return {
1033             css_beautify: css_beautify
1034         };
1035     });
1036 } else if (typeof exports !== "undefined") {
1037     // Add support for CommonJS. Just put this file somewhere on your require.paths
1038     // and you will be able to `var html_beautify = require("beautify").html_beautify`.
1039     exports.css_beautify = css_beautify;
1040 } else if (typeof window !== "undefined") {
1041     // If we're running a web page and don't have either of the above, add our one global
1042     window.css_beautify = css_beautify;
1043 } else if (typeof global !== "undefined") {
1044     // If we don't even have window, try global.
1045     global.css_beautify = css_beautify;
1048 }());