File: /var/www/html/laravel/node_modules/.vite/deps_temp_f3d6b3ef/simply-beautiful.js.map
{
"version": 3,
"sources": ["../../simply-beautiful/dist/index.js"],
"sourcesContent": ["(function (root, factory) {\n // https://github.com/umdjs/umd/blob/master/templates/returnExports.js\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.returnExports = factory();\n }\n}(typeof self !== 'undefined' ? self : this, function () {\n\n var environment = (Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]') ? 'node' : 'browser';\n\n /*\n JS\n\n\n Style HTML\n ---------------\n\n Written by Nochum Sossonko, (nsossonko@hotmail.com)\n\n Based on code initially developed by: Einar Lielmanis, <elfz@laacz.lv>\n http://jsbeautifier.org/\n\n\n You are free to use this in any way you want, in case you find this useful or working for you.\n\n Usage:\n style_html(html_source);\n\n style_html(html_source, options);\n\n The options are:\n indent_size (default 4) — indentation size,\n indent_char (default space) — character to indent with,\n max_char (default 70) - maximum amount of characters per line,\n brace_style (default \"collapse\") - \"collapse\" | \"expand\" | \"end-expand\"\n 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.\n unformatted (defaults to inline tags) - list of tags, that shouldn't be reformatted\n indent_scripts (default normal) - \"keep\"|\"separate\"|\"normal\"\n\n e.g.\n\n style_html(html_source, {\n 'indent_size': 2,\n 'indent_char': ' ',\n 'max_char': 78,\n 'brace_style': 'expand',\n 'unformatted': ['a', 'sub', 'sup', 'b', 'i', 'u']\n });\n */\n\n function style_html(html_source, options) {\n //Wrapper function to invoke all the necessary constructors and deal with the output.\n\n var multi_parser,\n indent_size,\n indent_character,\n max_char,\n brace_style,\n unformatted;\n\n options = options || {};\n indent_size = options.indent_size || 4;\n indent_character = options.indent_char || ' ';\n brace_style = options.brace_style || 'collapse';\n max_char = options.max_char == 0 ? Infinity : options.max_char || 70;\n unformatted = options.unformatted || ['a', 'span', 'bdo', 'em', 'strong', 'dfn', 'code', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'q', 'sub', 'sup', 'tt', 'i', 'b', 'big', 'small', 'u', 's', 'strike', 'font', 'ins', 'del', 'pre', 'address', 'dt', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n\n function Parser() {\n\n this.pos = 0; //Parser position\n this.token = '';\n this.current_mode = 'CONTENT'; //reflects the current Parser mode: TAG/CONTENT\n this.tags = { //An object to hold tags, their position, and their parent-tags, initiated with default values\n parent: 'parent1',\n parentcount: 1,\n parent1: ''\n };\n this.tag_type = '';\n this.token_text = this.last_token = this.last_text = this.token_type = '';\n\n this.Utils = { //Uilities made available to the various functions\n whitespace: \"\\n\\r\\t \".split(''),\n single_token: 'br,input,link,meta,!doctype,basefont,base,area,hr,wbr,param,img,isindex,?xml,embed,?php,?,?='.split(','), //all the single tags for HTML\n extra_liners: 'head,body,/html'.split(','), //for tags that need a line of whitespace before them\n in_array: function (what, arr) {\n for (var i=0; i<arr.length; i++) {\n if (what === arr[i]) {\n return true;\n }\n }\n return false;\n }\n }\n\n this.get_content = function () { //function to capture regular content between tags\n\n var input_char = '',\n content = [],\n space = false; //if a space is needed\n\n while (this.input.charAt(this.pos) !== '<') {\n if (this.pos >= this.input.length) {\n return content.length?content.join(''):['', 'TK_EOF'];\n }\n\n input_char = this.input.charAt(this.pos);\n this.pos++;\n this.line_char_count++;\n\n if (this.Utils.in_array(input_char, this.Utils.whitespace)) {\n if (content.length) {\n space = true;\n }\n this.line_char_count--;\n continue; //don't want to insert unnecessary space\n }\n else if (space) {\n if (this.line_char_count >= this.max_char) { //insert a line when the max_char is reached\n content.push('\\n');\n for (var i=0; i<this.indent_level; i++) {\n content.push(this.indent_string);\n }\n this.line_char_count = 0;\n }\n else{\n content.push(' ');\n this.line_char_count++;\n }\n space = false;\n }\n content.push(input_char); //letter at-a-time (or string) inserted to an array\n }\n return content.length?content.join(''):'';\n }\n\n this.get_contents_to = function (name) { //get the full content of a script or style to pass to js_beautify\n if (this.pos == this.input.length) {\n return ['', 'TK_EOF'];\n }\n var input_char = '';\n var content = '';\n var reg_match = new RegExp('\\<\\/' + name + '\\\\s*\\>', 'igm');\n reg_match.lastIndex = this.pos;\n var reg_array = reg_match.exec(this.input);\n var end_script = reg_array?reg_array.index:this.input.length; //absolute end of script\n if(this.pos < end_script) { //get everything in between the script tags\n content = this.input.substring(this.pos, end_script);\n this.pos = end_script;\n }\n return content;\n }\n\n this.record_tag = function (tag){ //function to record a tag and its parent in this.tags Object\n if (this.tags[tag + 'count']) { //check for the existence of this tag type\n this.tags[tag + 'count']++;\n this.tags[tag + this.tags[tag + 'count']] = this.indent_level; //and record the present indent level\n }\n else { //otherwise initialize this tag type\n this.tags[tag + 'count'] = 1;\n this.tags[tag + this.tags[tag + 'count']] = this.indent_level; //and record the present indent level\n }\n 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)\n this.tags.parent = tag + this.tags[tag + 'count']; //and make this the current parent (i.e. in the case of a div 'div1')\n }\n\n this.retrieve_tag = function (tag) { //function to retrieve the opening tag to the corresponding closer\n if (this.tags[tag + 'count']) { //if the openener is not in the Object we ignore it\n var temp_parent = this.tags.parent; //check to see if it's a closable tag.\n while (temp_parent) { //till we reach '' (the initial value);\n if (tag + this.tags[tag + 'count'] === temp_parent) { //if this is it use it\n break;\n }\n temp_parent = this.tags[temp_parent + 'parent']; //otherwise keep on climbing up the DOM Tree\n }\n if (temp_parent) { //if we caught something\n this.indent_level = this.tags[tag + this.tags[tag + 'count']]; //set the indent_level accordingly\n this.tags.parent = this.tags[temp_parent + 'parent']; //and set the current parent\n }\n delete this.tags[tag + this.tags[tag + 'count'] + 'parent']; //delete the closed tags parent reference...\n delete this.tags[tag + this.tags[tag + 'count']]; //...and the tag itself\n if (this.tags[tag + 'count'] == 1) {\n delete this.tags[tag + 'count'];\n }\n else {\n this.tags[tag + 'count']--;\n }\n }\n }\n\n this.get_tag = function () { //function to get a full tag and parse its type\n var input_char = '',\n content = [],\n space = false,\n tag_start, tag_end;\n\n do {\n if (this.pos >= this.input.length) {\n return content.length?content.join(''):['', 'TK_EOF'];\n }\n\n input_char = this.input.charAt(this.pos);\n this.pos++;\n this.line_char_count++;\n\n if (this.Utils.in_array(input_char, this.Utils.whitespace)) { //don't want to insert unnecessary space\n space = true;\n this.line_char_count--;\n continue;\n }\n\n if (input_char === \"'\" || input_char === '\"') {\n if (!content[1] || content[1] !== '!') { //if we're in a comment strings don't get treated specially\n input_char += this.get_unformatted(input_char);\n space = true;\n }\n }\n\n if (input_char === '=') { //no space before =\n space = false;\n }\n\n if (content.length && content[content.length-1] !== '=' && input_char !== '>'\n && space) { //no space after = or before >\n if (this.line_char_count >= this.max_char) {\n this.print_newline(false, content);\n this.line_char_count = 0;\n }\n else {\n content.push(' ');\n this.line_char_count++;\n }\n space = false;\n }\n if (input_char === '<') {\n tag_start = this.pos - 1;\n }\n content.push(input_char); //inserts character at-a-time (or string)\n } while (input_char !== '>');\n\n var tag_complete = content.join('');\n var tag_index;\n if (tag_complete.indexOf(' ') != -1) { //if there's whitespace, thats where the tag name ends\n tag_index = tag_complete.indexOf(' ');\n }\n else { //otherwise go with the tag ending\n tag_index = tag_complete.indexOf('>');\n }\n var tag_check = tag_complete.substring(1, tag_index).toLowerCase();\n if (tag_complete.charAt(tag_complete.length-2) === '/' ||\n 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 /)\n this.tag_type = 'SINGLE';\n }\n else if (tag_check === 'script') { //for later script handling\n this.record_tag(tag_check);\n this.tag_type = 'SCRIPT';\n }\n else if (tag_check === 'style') { //for future style handling (for now it justs uses get_content)\n this.record_tag(tag_check);\n this.tag_type = 'STYLE';\n }\n else if (this.Utils.in_array(tag_check, unformatted)) { // do not reformat the \"unformatted\" tags\n var comment = this.get_unformatted('</'+tag_check+'>', tag_complete); //...delegate to get_unformatted function\n content.push(comment);\n // Preserve collapsed whitespace either before or after this tag.\n if (tag_start > 0 && this.Utils.in_array(this.input.charAt(tag_start - 1), this.Utils.whitespace)){\n content.splice(0, 0, this.input.charAt(tag_start - 1));\n }\n tag_end = this.pos - 1;\n if (this.Utils.in_array(this.input.charAt(tag_end + 1), this.Utils.whitespace)){\n content.push(this.input.charAt(tag_end + 1));\n }\n this.tag_type = 'SINGLE';\n }\n else if (tag_check.charAt(0) === '!') { //peek for <!-- comment\n if (tag_check.indexOf('[if') != -1) { //peek for <!--[if conditional comment\n if (tag_complete.indexOf('!IE') != -1) { //this type needs a closing --> so...\n var comment = this.get_unformatted('-->', tag_complete); //...delegate to get_unformatted\n content.push(comment);\n }\n this.tag_type = 'START';\n }\n else if (tag_check.indexOf('[endif') != -1) {//peek for <!--[endif end conditional comment\n this.tag_type = 'END';\n this.unindent();\n }\n else if (tag_check.indexOf('[cdata[') != -1) { //if it's a <[cdata[ comment...\n var comment = this.get_unformatted(']]>', tag_complete); //...delegate to get_unformatted function\n content.push(comment);\n this.tag_type = 'SINGLE'; //<![CDATA[ comments are treated like single tags\n }\n else {\n var comment = this.get_unformatted('-->', tag_complete);\n content.push(comment);\n this.tag_type = 'SINGLE';\n }\n }\n else {\n if (tag_check.charAt(0) === '/') { //this tag is a double tag so check for tag-ending\n this.retrieve_tag(tag_check.substring(1)); //remove it and all ancestors\n this.tag_type = 'END';\n }\n else { //otherwise it's a start-tag\n this.record_tag(tag_check); //push it on the tag stack\n this.tag_type = 'START';\n }\n if (this.Utils.in_array(tag_check, this.Utils.extra_liners)) { //check if this double needs an extra line\n this.print_newline(true, this.output);\n }\n }\n return content.join(''); //returns fully formatted tag\n }\n\n this.get_unformatted = function (delimiter, orig_tag) { //function to return unformatted content in its entirety\n\n if (orig_tag && orig_tag.indexOf(delimiter) != -1) {\n return '';\n }\n var input_char = '';\n var content = '';\n var space = true;\n do {\n\n if (this.pos >= this.input.length) {\n return content;\n }\n\n input_char = this.input.charAt(this.pos);\n this.pos++\n\n if (this.Utils.in_array(input_char, this.Utils.whitespace)) {\n if (!space) {\n this.line_char_count--;\n continue;\n }\n if (input_char === '\\n' || input_char === '\\r') {\n content += '\\n';\n /* 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'\n for (var i=0; i<this.indent_level; i++) {\n content += this.indent_string;\n }\n space = false; //...and make sure other indentation is erased\n */\n this.line_char_count = 0;\n continue;\n }\n }\n content += input_char;\n this.line_char_count++;\n space = true;\n\n\n } while (content.indexOf(delimiter) == -1);\n return content;\n }\n\n this.get_token = function () { //initial handler for token-retrieval\n var token;\n\n if (this.last_token === 'TK_TAG_SCRIPT' || this.last_token === 'TK_TAG_STYLE') { //check if we need to format javascript\n var type = this.last_token.substr(7)\n token = this.get_contents_to(type);\n if (typeof token !== 'string') {\n return token;\n }\n return [token, 'TK_' + type];\n }\n if (this.current_mode === 'CONTENT') {\n token = this.get_content();\n if (typeof token !== 'string') {\n return token;\n }\n else {\n return [token, 'TK_CONTENT'];\n }\n }\n\n if (this.current_mode === 'TAG') {\n token = this.get_tag();\n if (typeof token !== 'string') {\n return token;\n }\n else {\n var tag_name_type = 'TK_TAG_' + this.tag_type;\n return [token, tag_name_type];\n }\n }\n }\n\n this.get_full_indent = function (level) {\n level = this.indent_level + level || 0;\n if (level < 1)\n return '';\n\n return Array(level + 1).join(this.indent_string);\n }\n\n\n this.printer = function (js_source, indent_character, indent_size, max_char, brace_style) { //handles input/output and some other printing functions\n\n this.input = js_source || ''; //gets the input for the Parser\n this.output = [];\n this.indent_character = indent_character;\n this.indent_string = '';\n this.indent_size = indent_size;\n this.brace_style = brace_style;\n this.indent_level = 0;\n this.max_char = max_char;\n this.line_char_count = 0; //count to see if max_char was exceeded\n\n for (var i=0; i<this.indent_size; i++) {\n this.indent_string += this.indent_character;\n }\n\n this.print_newline = function (ignore, arr) {\n this.line_char_count = 0;\n if (!arr || !arr.length) {\n return;\n }\n if (!ignore) { //we might want the extra line\n while (this.Utils.in_array(arr[arr.length-1], this.Utils.whitespace)) {\n arr.pop();\n }\n }\n arr.push('\\n');\n for (var i=0; i<this.indent_level; i++) {\n arr.push(this.indent_string);\n }\n }\n\n this.print_token = function (text) {\n this.output.push(text);\n }\n\n this.indent = function () {\n this.indent_level++;\n }\n\n this.unindent = function () {\n if (this.indent_level > 0) {\n this.indent_level--;\n }\n }\n }\n return this;\n }\n\n /*_____________________--------------------_____________________*/\n\n multi_parser = new Parser(); //wrapping functions Parser\n multi_parser.printer(html_source, indent_character, indent_size, max_char, brace_style); //initialize starting values\n\n while (true) {\n var t = multi_parser.get_token();\n multi_parser.token_text = t[0];\n multi_parser.token_type = t[1];\n\n if (multi_parser.token_type === 'TK_EOF') {\n break;\n }\n\n switch (multi_parser.token_type) {\n case 'TK_TAG_START':\n multi_parser.print_newline(false, multi_parser.output);\n multi_parser.print_token(multi_parser.token_text);\n multi_parser.indent();\n multi_parser.current_mode = 'CONTENT';\n break;\n case 'TK_TAG_STYLE':\n case 'TK_TAG_SCRIPT':\n multi_parser.print_newline(false, multi_parser.output);\n multi_parser.print_token(multi_parser.token_text);\n multi_parser.current_mode = 'CONTENT';\n break;\n case 'TK_TAG_END':\n //Print new line only if the tag has no content and has child\n if (multi_parser.last_token === 'TK_CONTENT' && multi_parser.last_text === '') {\n var tag_name = multi_parser.token_text.match(/\\w+/)[0];\n var tag_extracted_from_last_output = multi_parser.output[multi_parser.output.length -1].match(/<\\s*(\\w+)/);\n if (tag_extracted_from_last_output === null || tag_extracted_from_last_output[1] !== tag_name)\n multi_parser.print_newline(true, multi_parser.output);\n }\n multi_parser.print_token(multi_parser.token_text);\n multi_parser.current_mode = 'CONTENT';\n break;\n case 'TK_TAG_SINGLE':\n // Don't add a newline before elements that should remain unformatted.\n var tag_check = multi_parser.token_text.match(/^\\s*<([a-z]+)/i);\n if (!tag_check || !multi_parser.Utils.in_array(tag_check[1], unformatted)){\n multi_parser.print_newline(false, multi_parser.output);\n }\n multi_parser.print_token(multi_parser.token_text);\n multi_parser.current_mode = 'CONTENT';\n break;\n case 'TK_CONTENT':\n if (multi_parser.token_text !== '') {\n multi_parser.print_token(multi_parser.token_text);\n }\n multi_parser.current_mode = 'TAG';\n break;\n case 'TK_STYLE':\n case 'TK_SCRIPT':\n if (multi_parser.token_text !== '') {\n multi_parser.output.push('\\n');\n var text = multi_parser.token_text;\n if (multi_parser.token_type == 'TK_SCRIPT') {\n var _beautifier = typeof js_beautify == 'function' && js_beautify;\n } else if (multi_parser.token_type == 'TK_STYLE') {\n var _beautifier = typeof css_beautify == 'function' && css_beautify;\n }\n\n if (options.indent_scripts == \"keep\") {\n var script_indent_level = 0;\n } else if (options.indent_scripts == \"separate\") {\n var script_indent_level = -multi_parser.indent_level;\n } else {\n var script_indent_level = 1;\n }\n\n var indentation = multi_parser.get_full_indent(script_indent_level);\n if (_beautifier) {\n // call the Beautifier if avaliable\n text = _beautifier(text.replace(/^\\s*/, indentation), options);\n } else {\n // simply indent the string otherwise\n var white = text.match(/^\\s*/)[0];\n var _level = white.match(/[^\\n\\r]*$/)[0].split(multi_parser.indent_string).length - 1;\n var reindent = multi_parser.get_full_indent(script_indent_level -_level);\n text = text.replace(/^\\s*/, indentation)\n .replace(/\\r\\n|\\r|\\n/g, '\\n' + reindent)\n .replace(/\\s*$/, '');\n }\n if (text) {\n multi_parser.print_token(text);\n multi_parser.print_newline(true, multi_parser.output);\n }\n }\n multi_parser.current_mode = 'TAG';\n break;\n }\n multi_parser.last_token = multi_parser.token_type;\n multi_parser.last_text = multi_parser.token_text;\n }\n return multi_parser.output.join('');\n }\n\n /*\n\n CSS Beautifier\n ---------------\n\n Written by Harutyun Amirjanyan, (amirjanyan@gmail.com)\n\n Based on code initially developed by: Einar Lielmanis, <elfz@laacz.lv>\n http://jsbeautifier.org/\n\n\n You are free to use this in any way you want, in case you find this useful or working for you.\n\n Usage:\n css_beautify(source_text);\n css_beautify(source_text, options);\n\n The options are:\n indent_size (default 4) — indentation size,\n indent_char (default space) — character to indent with,\n\n e.g\n\n css_beautify(css_source_text, {\n 'indent_size': 1,\n 'indent_char': '\\t'\n });\n */\n\n // http://www.w3.org/TR/CSS21/syndata.html#tokenization\n // http://www.w3.org/TR/css3-syntax/\n function css_beautify(source_text, options) {\n options = options || {};\n var indentSize = options.indent_size || 4;\n var indentCharacter = options.indent_char || ' ';\n\n // compatibility\n if (typeof indentSize == \"string\")\n indentSize = parseInt(indentSize);\n\n\n // tokenizer\n var whiteRe = /^\\s+$/;\n var wordRe = /[\\w$\\-_]/;\n\n var pos = -1, ch;\n function next() {\n return ch = source_text.charAt(++pos)\n }\n function peek() {\n return source_text.charAt(pos+1)\n }\n function eatString(comma) {\n var start = pos;\n while(next()){\n if (ch==\"\\\\\"){\n next();\n next();\n } else if (ch == comma) {\n break;\n } else if (ch == \"\\n\") {\n break;\n }\n }\n return source_text.substring(start, pos + 1);\n }\n\n function eatWhitespace() {\n var start = pos;\n while (whiteRe.test(peek()))\n pos++;\n return pos != start;\n }\n\n function skipWhitespace() {\n var start = pos;\n do{\n }while (whiteRe.test(next()))\n return pos != start + 1;\n }\n\n function eatComment() {\n var start = pos;\n next();\n while (next()) {\n if (ch == \"*\" && peek() == \"/\") {\n pos ++;\n break;\n }\n }\n\n return source_text.substring(start, pos + 1);\n }\n\n\n function lookBack(str, index) {\n return output.slice(-str.length + (index||0), index).join(\"\").toLowerCase() == str;\n }\n\n // printer\n var indentString = source_text.match(/^[\\r\\n]*[\\t ]*/)[0];\n var singleIndent = Array(indentSize + 1).join(indentCharacter);\n var indentLevel = 0;\n function indent() {\n indentLevel++;\n indentString += singleIndent;\n }\n function outdent() {\n indentLevel--;\n indentString = indentString.slice(0, -indentSize);\n }\n\n var print = {}\n print[\"{\"] = function(ch) {\n print.singleSpace();\n output.push(ch);\n print.newLine();\n }\n print[\"}\"] = function(ch) {\n print.newLine();\n output.push(ch);\n print.newLine();\n }\n\n print.newLine = function(keepWhitespace) {\n if (!keepWhitespace)\n while (whiteRe.test(output[output.length - 1]))\n output.pop();\n\n if (output.length)\n output.push('\\n');\n if (indentString)\n output.push(indentString);\n }\n print.singleSpace = function() {\n if (output.length && !whiteRe.test(output[output.length - 1]))\n output.push(' ');\n }\n var output = [];\n if (indentString)\n output.push(indentString);\n /*_____________________--------------------_____________________*/\n\n while(true) {\n var isAfterSpace = skipWhitespace();\n\n if (!ch)\n break;\n\n if (ch == '{') {\n indent();\n print[\"{\"](ch);\n } else if (ch == '}') {\n outdent();\n print[\"}\"](ch);\n } else if (ch == '\"' || ch == '\\'') {\n output.push(eatString(ch))\n } else if (ch == ';') {\n output.push(ch, '\\n', indentString);\n } else if (ch == '/' && peek() == '*') { // comment\n print.newLine();\n output.push(eatComment(), \"\\n\", indentString);\n } else if (ch == '(') { // may be a url\n if (lookBack(\"url\", -1)) {\n output.push(ch);\n eatWhitespace();\n if (next()) {\n if (ch != ')' && ch != '\"' && ch != '\\'')\n output.push(eatString(')'));\n else\n pos--;\n }\n } else {\n if (isAfterSpace)\n print.singleSpace();\n output.push(ch);\n eatWhitespace();\n }\n } else if (ch == ')') {\n output.push(ch);\n } else if (ch == ',') {\n eatWhitespace();\n output.push(ch);\n print.singleSpace();\n } else if (ch == ']') {\n output.push(ch);\n } else if (ch == '[' || ch == '=') { // no whitespace before or after\n eatWhitespace();\n output.push(ch);\n } else {\n if (isAfterSpace)\n print.singleSpace();\n\n output.push(ch);\n }\n }\n\n\n var sweetCode = output.join('').replace(/[\\n ]+$/, '');\n return sweetCode;\n }\n\n\n if (typeof exports !== \"undefined\")\n exports.css_beautify = css_beautify;\n\n /*jslint onevar: false, plusplus: false */\n /*jshint curly:true, eqeqeq:true, laxbreak:true, noempty:false */\n /*\n\n JS Beautifier\n ---------------\n\n\n Written by Einar Lielmanis, <einar@jsbeautifier.org>\n http://jsbeautifier.org/\n\n Originally converted to javascript by Vital, <vital76@gmail.com>\n \"End braces on own line\" added by Chris J. Shull, <chrisjshull@gmail.com>\n\n You are free to use this in any way you want, in case you find this useful or working for you.\n\n Usage:\n js_beautify(js_source_text);\n js_beautify(js_source_text, options);\n\n The options are:\n indent_size (default 4) - indentation size,\n indent_char (default space) - character to indent with,\n preserve_newlines (default true) - whether existing line breaks should be preserved,\n max_preserve_newlines (default unlimited) - maximum number of line breaks to be preserved in one chunk,\n\n jslint_happy (default false) - if true, then jslint-stricter mode is enforced.\n\n jslint_happy !jslint_happy\n ---------------------------------\n function () function()\n\n brace_style (default \"collapse\") - \"collapse\" | \"expand\" | \"end-expand\" | \"expand-strict\"\n 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.\n\n expand-strict: put brace on own line even in such cases:\n\n var a =\n {\n a: 5,\n b: 6\n }\n This mode may break your scripts - e.g \"return { a: 1 }\" will be broken into two lines, so beware.\n\n space_before_conditional (default true) - should the space before conditional statement be added, \"if(true)\" vs \"if (true)\",\n\n unescape_strings (default false) - should printable characters in strings encoded in \\xNN notation be unescaped, \"example\" vs \"\\x65\\x78\\x61\\x6d\\x70\\x6c\\x65\"\n\n e.g\n\n js_beautify(js_source_text, {\n 'indent_size': 1,\n 'indent_char': '\\t'\n });\n\n\n */\n\n\n\n function js_beautify(js_source_text, options) {\n\n var input, output, token_text, last_type, last_text, last_last_text, last_word, flags, flag_store, indent_string;\n var whitespace, wordchar, punct, parser_pos, line_starters, digits;\n var prefix, token_type, do_block_just_closed;\n var wanted_newline, just_added_newline, n_newlines;\n var preindent_string = '';\n\n\n // Some interpreters have unexpected results with foo = baz || bar;\n options = options ? options : {};\n\n var opt_brace_style;\n\n // compatibility\n if (options.space_after_anon_function !== undefined && options.jslint_happy === undefined) {\n options.jslint_happy = options.space_after_anon_function;\n }\n if (options.braces_on_own_line !== undefined) { //graceful handling of deprecated option\n opt_brace_style = options.braces_on_own_line ? \"expand\" : \"collapse\";\n }\n opt_brace_style = options.brace_style ? options.brace_style : (opt_brace_style ? opt_brace_style : \"collapse\");\n\n\n var opt_indent_size = options.indent_size ? options.indent_size : 4,\n opt_indent_char = options.indent_char ? options.indent_char : ' ',\n opt_preserve_newlines = typeof options.preserve_newlines === 'undefined' ? true : options.preserve_newlines,\n opt_break_chained_methods = typeof options.break_chained_methods === 'undefined' ? false : options.break_chained_methods,\n opt_max_preserve_newlines = typeof options.max_preserve_newlines === 'undefined' ? false : options.max_preserve_newlines,\n opt_jslint_happy = options.jslint_happy === 'undefined' ? false : options.jslint_happy,\n opt_keep_array_indentation = typeof options.keep_array_indentation === 'undefined' ? false : options.keep_array_indentation,\n opt_space_before_conditional = typeof options.space_before_conditional === 'undefined' ? true : options.space_before_conditional,\n opt_unescape_strings = typeof options.unescape_strings === 'undefined' ? false : options.unescape_strings;\n\n just_added_newline = false;\n\n // cache the source's length.\n var input_length = js_source_text.length;\n\n function trim_output(eat_newlines) {\n eat_newlines = typeof eat_newlines === 'undefined' ? false : eat_newlines;\n while (output.length && (output[output.length - 1] === ' '\n || output[output.length - 1] === indent_string\n || output[output.length - 1] === preindent_string\n || (eat_newlines && (output[output.length - 1] === '\\n' || output[output.length - 1] === '\\r')))) {\n output.pop();\n }\n }\n\n function trim(s) {\n return s.replace(/^\\s\\s*|\\s\\s*$/, '');\n }\n\n // we could use just string.split, but\n // IE doesn't like returning empty strings\n function split_newlines(s) {\n //return s.split(/\\x0d\\x0a|\\x0a/);\n\n s = s.replace(/\\x0d/g, '');\n var out = [],\n idx = s.indexOf(\"\\n\");\n while (idx !== -1) {\n out.push(s.substring(0, idx));\n s = s.substring(idx + 1);\n idx = s.indexOf(\"\\n\");\n }\n if (s.length) {\n out.push(s);\n }\n return out;\n }\n\n function force_newline() {\n var old_keep_array_indentation = opt_keep_array_indentation;\n opt_keep_array_indentation = false;\n print_newline();\n opt_keep_array_indentation = old_keep_array_indentation;\n }\n\n function print_newline(ignore_repeated, reset_statement_flags) {\n\n flags.eat_next_space = false;\n if (opt_keep_array_indentation && is_array(flags.mode)) {\n return;\n }\n\n ignore_repeated = typeof ignore_repeated === 'undefined' ? true : ignore_repeated;\n reset_statement_flags = typeof reset_statement_flags === 'undefined' ? true : reset_statement_flags;\n\n if (reset_statement_flags) {\n flags.if_line = false;\n flags.chain_extra_indentation = 0;\n }\n\n trim_output();\n\n if (!output.length) {\n return; // no newline on start of file\n }\n\n if (output[output.length - 1] !== \"\\n\" || !ignore_repeated) {\n just_added_newline = true;\n output.push(\"\\n\");\n }\n if (preindent_string) {\n output.push(preindent_string);\n }\n for (var i = 0; i < flags.indentation_level + flags.chain_extra_indentation; i += 1) {\n output.push(indent_string);\n }\n if (flags.var_line && flags.var_line_reindented) {\n output.push(indent_string); // skip space-stuffing, if indenting with a tab\n }\n }\n\n\n\n function print_single_space() {\n\n if (last_type === 'TK_COMMENT') {\n return print_newline();\n }\n if (flags.eat_next_space) {\n flags.eat_next_space = false;\n return;\n }\n var last_output = ' ';\n if (output.length) {\n last_output = output[output.length - 1];\n }\n if (last_output !== ' ' && last_output !== '\\n' && last_output !== indent_string) { // prevent occassional duplicate space\n output.push(' ');\n }\n }\n\n\n function print_token() {\n just_added_newline = false;\n flags.eat_next_space = false;\n output.push(token_text);\n }\n\n function indent() {\n flags.indentation_level += 1;\n }\n\n\n function remove_indent() {\n if (output.length && output[output.length - 1] === indent_string) {\n output.pop();\n }\n }\n\n function set_mode(mode) {\n if (flags) {\n flag_store.push(flags);\n }\n flags = {\n previous_mode: flags ? flags.mode : 'BLOCK',\n mode: mode,\n var_line: false,\n var_line_tainted: false,\n var_line_reindented: false,\n in_html_comment: false,\n if_line: false,\n chain_extra_indentation: 0,\n in_case_statement: false, // switch(..){ INSIDE HERE }\n in_case: false, // we're on the exact line with \"case 0:\"\n case_body: false, // the indented case-action block\n eat_next_space: false,\n indentation_level: (flags ? flags.indentation_level + ((flags.var_line && flags.var_line_reindented) ? 1 : 0) : 0),\n ternary_depth: 0\n };\n }\n\n function is_array(mode) {\n return mode === '[EXPRESSION]' || mode === '[INDENTED-EXPRESSION]';\n }\n\n function is_expression(mode) {\n return in_array(mode, ['[EXPRESSION]', '(EXPRESSION)', '(FOR-EXPRESSION)', '(COND-EXPRESSION)']);\n }\n\n function restore_mode() {\n do_block_just_closed = flags.mode === 'DO_BLOCK';\n if (flag_store.length > 0) {\n var mode = flags.mode;\n flags = flag_store.pop();\n flags.previous_mode = mode;\n }\n }\n\n function all_lines_start_with(lines, c) {\n for (var i = 0; i < lines.length; i++) {\n var line = trim(lines[i]);\n if (line.charAt(0) !== c) {\n return false;\n }\n }\n return true;\n }\n\n function is_special_word(word) {\n return in_array(word, ['case', 'return', 'do', 'if', 'throw', 'else']);\n }\n\n function in_array(what, arr) {\n for (var i = 0; i < arr.length; i += 1) {\n if (arr[i] === what) {\n return true;\n }\n }\n return false;\n }\n\n function look_up(exclude) {\n var local_pos = parser_pos;\n var c = input.charAt(local_pos);\n while (in_array(c, whitespace) && c !== exclude) {\n local_pos++;\n if (local_pos >= input_length) {\n return 0;\n }\n c = input.charAt(local_pos);\n }\n return c;\n }\n\n function get_next_token() {\n var i;\n var resulting_string;\n\n n_newlines = 0;\n\n if (parser_pos >= input_length) {\n return ['', 'TK_EOF'];\n }\n\n wanted_newline = false;\n\n var c = input.charAt(parser_pos);\n parser_pos += 1;\n\n\n var keep_whitespace = opt_keep_array_indentation && is_array(flags.mode);\n\n if (keep_whitespace) {\n\n var whitespace_count = 0;\n\n while (in_array(c, whitespace)) {\n\n if (c === \"\\n\") {\n trim_output();\n output.push(\"\\n\");\n just_added_newline = true;\n whitespace_count = 0;\n } else {\n if (c === '\\t') {\n whitespace_count += 4;\n } else if (c === '\\r') {\n // nothing\n } else {\n whitespace_count += 1;\n }\n }\n\n if (parser_pos >= input_length) {\n return ['', 'TK_EOF'];\n }\n\n c = input.charAt(parser_pos);\n parser_pos += 1;\n\n }\n\n if (just_added_newline) {\n for (i = 0; i < whitespace_count; i++) {\n output.push(' ');\n }\n }\n\n } else {\n while (in_array(c, whitespace)) {\n\n if (c === \"\\n\") {\n n_newlines += ((opt_max_preserve_newlines) ? (n_newlines <= opt_max_preserve_newlines) ? 1 : 0 : 1);\n }\n\n\n if (parser_pos >= input_length) {\n return ['', 'TK_EOF'];\n }\n\n c = input.charAt(parser_pos);\n parser_pos += 1;\n\n }\n\n if (opt_preserve_newlines) {\n if (n_newlines > 1) {\n for (i = 0; i < n_newlines; i += 1) {\n print_newline(i === 0);\n just_added_newline = true;\n }\n }\n }\n wanted_newline = n_newlines > 0;\n }\n\n\n if (in_array(c, wordchar)) {\n if (parser_pos < input_length) {\n while (in_array(input.charAt(parser_pos), wordchar)) {\n c += input.charAt(parser_pos);\n parser_pos += 1;\n if (parser_pos === input_length) {\n break;\n }\n }\n }\n\n // small and surprisingly unugly hack for 1E-10 representation\n if (parser_pos !== input_length && c.match(/^[0-9]+[Ee]$/) && (input.charAt(parser_pos) === '-' || input.charAt(parser_pos) === '+')) {\n\n var sign = input.charAt(parser_pos);\n parser_pos += 1;\n\n var t = get_next_token();\n c += sign + t[0];\n return [c, 'TK_WORD'];\n }\n\n if (c === 'in') { // hack for 'in' operator\n return [c, 'TK_OPERATOR'];\n }\n if (wanted_newline && last_type !== 'TK_OPERATOR'\n && last_type !== 'TK_EQUALS'\n && !flags.if_line && (opt_preserve_newlines || last_text !== 'var')) {\n print_newline();\n }\n return [c, 'TK_WORD'];\n }\n\n if (c === '(' || c === '[') {\n return [c, 'TK_START_EXPR'];\n }\n\n if (c === ')' || c === ']') {\n return [c, 'TK_END_EXPR'];\n }\n\n if (c === '{') {\n return [c, 'TK_START_BLOCK'];\n }\n\n if (c === '}') {\n return [c, 'TK_END_BLOCK'];\n }\n\n if (c === ';') {\n return [c, 'TK_SEMICOLON'];\n }\n\n if (c === '/') {\n var comment = '';\n // peek for comment /* ... */\n var inline_comment = true;\n if (input.charAt(parser_pos) === '*') {\n parser_pos += 1;\n if (parser_pos < input_length) {\n while (parser_pos < input_length &&\n ! (input.charAt(parser_pos) === '*' && input.charAt(parser_pos + 1) && input.charAt(parser_pos + 1) === '/')) {\n c = input.charAt(parser_pos);\n comment += c;\n if (c === \"\\n\" || c === \"\\r\") {\n inline_comment = false;\n }\n parser_pos += 1;\n if (parser_pos >= input_length) {\n break;\n }\n }\n }\n parser_pos += 2;\n if (inline_comment && n_newlines === 0) {\n return ['/*' + comment + '*/', 'TK_INLINE_COMMENT'];\n } else {\n return ['/*' + comment + '*/', 'TK_BLOCK_COMMENT'];\n }\n }\n // peek for comment // ...\n if (input.charAt(parser_pos) === '/') {\n comment = c;\n while (input.charAt(parser_pos) !== '\\r' && input.charAt(parser_pos) !== '\\n') {\n comment += input.charAt(parser_pos);\n parser_pos += 1;\n if (parser_pos >= input_length) {\n break;\n }\n }\n if (wanted_newline) {\n print_newline();\n }\n return [comment, 'TK_COMMENT'];\n }\n\n }\n\n if (c === \"'\" || // string\n c === '\"' || // string\n (c === '/' &&\n ((last_type === 'TK_WORD' && is_special_word(last_text)) ||\n (last_text === ')' && in_array(flags.previous_mode, ['(COND-EXPRESSION)', '(FOR-EXPRESSION)'])) ||\n (last_type === 'TK_COMMA' || last_type === 'TK_COMMENT' || last_type === 'TK_START_EXPR' || last_type === 'TK_START_BLOCK' || last_type === 'TK_END_BLOCK' || last_type === 'TK_OPERATOR' || last_type === 'TK_EQUALS' || last_type === 'TK_EOF' || last_type === 'TK_SEMICOLON')))) { // regexp\n var sep = c;\n var esc = false;\n var esc1 = 0;\n var esc2 = 0;\n resulting_string = c;\n\n if (parser_pos < input_length) {\n if (sep === '/') {\n //\n // handle regexp separately...\n //\n var in_char_class = false;\n while (esc || in_char_class || input.charAt(parser_pos) !== sep) {\n resulting_string += input.charAt(parser_pos);\n if (!esc) {\n esc = input.charAt(parser_pos) === '\\\\';\n if (input.charAt(parser_pos) === '[') {\n in_char_class = true;\n } else if (input.charAt(parser_pos) === ']') {\n in_char_class = false;\n }\n } else {\n esc = false;\n }\n parser_pos += 1;\n if (parser_pos >= input_length) {\n // incomplete string/rexp when end-of-file reached.\n // bail out with what had been received so far.\n return [resulting_string, 'TK_STRING'];\n }\n }\n\n } else {\n //\n // and handle string also separately\n //\n while (esc || input.charAt(parser_pos) !== sep) {\n resulting_string += input.charAt(parser_pos);\n if (esc1 && esc1 >= esc2) {\n esc1 = parseInt(resulting_string.substr(-esc2), 16);\n if (esc1 && esc1 >= 0x20 && esc1 <= 0x7e) {\n esc1 = String.fromCharCode(esc1);\n resulting_string = resulting_string.substr(0, resulting_string.length - esc2 - 2) + (((esc1 === sep) || (esc1 === '\\\\')) ? '\\\\' : '') + esc1;\n }\n esc1 = 0;\n }\n if (esc1) {\n esc1++;\n } else if (!esc) {\n esc = input.charAt(parser_pos) === '\\\\';\n } else {\n esc = false;\n if (opt_unescape_strings) {\n if (input.charAt(parser_pos) === 'x') {\n esc1++;\n esc2 = 2;\n } else if (input.charAt(parser_pos) === 'u') {\n esc1++;\n esc2 = 4;\n }\n }\n }\n parser_pos += 1;\n if (parser_pos >= input_length) {\n // incomplete string/rexp when end-of-file reached.\n // bail out with what had been received so far.\n return [resulting_string, 'TK_STRING'];\n }\n }\n }\n\n\n\n }\n\n parser_pos += 1;\n\n resulting_string += sep;\n\n if (sep === '/') {\n // regexps may have modifiers /regexp/MOD , so fetch those, too\n while (parser_pos < input_length && in_array(input.charAt(parser_pos), wordchar)) {\n resulting_string += input.charAt(parser_pos);\n parser_pos += 1;\n }\n }\n return [resulting_string, 'TK_STRING'];\n }\n\n if (c === '#') {\n\n\n if (output.length === 0 && input.charAt(parser_pos) === '!') {\n // shebang\n resulting_string = c;\n while (parser_pos < input_length && c !== '\\n') {\n c = input.charAt(parser_pos);\n resulting_string += c;\n parser_pos += 1;\n }\n output.push(trim(resulting_string) + '\\n');\n print_newline();\n return get_next_token();\n }\n\n\n\n // Spidermonkey-specific sharp variables for circular references\n // https://developer.mozilla.org/En/Sharp_variables_in_JavaScript\n // https://mxr.mozilla.org/mozilla-central/source/js/src/jsscan.cpp around line 1935\n var sharp = '#';\n if (parser_pos < input_length && in_array(input.charAt(parser_pos), digits)) {\n do {\n c = input.charAt(parser_pos);\n sharp += c;\n parser_pos += 1;\n } while (parser_pos < input_length && c !== '#' && c !== '=');\n if (c === '#') {\n //\n } else if (input.charAt(parser_pos) === '[' && input.charAt(parser_pos + 1) === ']') {\n sharp += '[]';\n parser_pos += 2;\n } else if (input.charAt(parser_pos) === '{' && input.charAt(parser_pos + 1) === '}') {\n sharp += '{}';\n parser_pos += 2;\n }\n return [sharp, 'TK_WORD'];\n }\n }\n\n if (c === '<' && input.substring(parser_pos - 1, parser_pos + 3) === '<!--') {\n parser_pos += 3;\n c = '<!--';\n while (input.charAt(parser_pos) !== '\\n' && parser_pos < input_length) {\n c += input.charAt(parser_pos);\n parser_pos++;\n }\n flags.in_html_comment = true;\n return [c, 'TK_COMMENT'];\n }\n\n if (c === '-' && flags.in_html_comment && input.substring(parser_pos - 1, parser_pos + 2) === '-->') {\n flags.in_html_comment = false;\n parser_pos += 2;\n if (wanted_newline) {\n print_newline();\n }\n return ['-->', 'TK_COMMENT'];\n }\n\n if (c === '.') {\n return [c, 'TK_DOT'];\n }\n\n if (in_array(c, punct)) {\n while (parser_pos < input_length && in_array(c + input.charAt(parser_pos), punct)) {\n c += input.charAt(parser_pos);\n parser_pos += 1;\n if (parser_pos >= input_length) {\n break;\n }\n }\n\n if (c === ',') {\n return [c, 'TK_COMMA'];\n } else if (c === '=') {\n return [c, 'TK_EQUALS'];\n } else {\n return [c, 'TK_OPERATOR'];\n }\n }\n\n return [c, 'TK_UNKNOWN'];\n }\n\n //----------------------------------\n indent_string = '';\n while (opt_indent_size > 0) {\n indent_string += opt_indent_char;\n opt_indent_size -= 1;\n }\n\n while (js_source_text && (js_source_text.charAt(0) === ' ' || js_source_text.charAt(0) === '\\t')) {\n preindent_string += js_source_text.charAt(0);\n js_source_text = js_source_text.substring(1);\n }\n input = js_source_text;\n\n last_word = ''; // last 'TK_WORD' passed\n last_type = 'TK_START_EXPR'; // last token type\n last_text = ''; // last token text\n last_last_text = ''; // pre-last token text\n output = [];\n\n do_block_just_closed = false;\n\n whitespace = \"\\n\\r\\t \".split('');\n wordchar = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$'.split('');\n digits = '0123456789'.split('');\n\n punct = '+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> >>>= >>= <<= && &= | || ! !! , : ? ^ ^= |= ::';\n punct += ' <%= <% %> <?= <? ?>'; // try to be a good boy and try not to break the markup language identifiers\n punct = punct.split(' ');\n\n // words which should always start on new line.\n line_starters = 'continue,try,throw,return,var,if,switch,case,default,for,while,break,function'.split(',');\n\n // states showing if we are currently in expression (i.e. \"if\" case) - 'EXPRESSION', or in usual block (like, procedure), 'BLOCK'.\n // some formatting depends on that.\n flag_store = [];\n set_mode('BLOCK');\n\n parser_pos = 0;\n while (true) {\n var t = get_next_token();\n token_text = t[0];\n token_type = t[1];\n if (token_type === 'TK_EOF') {\n break;\n }\n\n switch (token_type) {\n\n case 'TK_START_EXPR':\n\n if (token_text === '[') {\n\n if (last_type === 'TK_WORD' || last_text === ')') {\n // this is array index specifier, break immediately\n // a[x], fn()[x]\n if (in_array(last_text, line_starters)) {\n print_single_space();\n }\n set_mode('(EXPRESSION)');\n print_token();\n break;\n }\n\n if (flags.mode === '[EXPRESSION]' || flags.mode === '[INDENTED-EXPRESSION]') {\n if (last_last_text === ']' && last_text === ',') {\n // ], [ goes to new line\n if (flags.mode === '[EXPRESSION]') {\n flags.mode = '[INDENTED-EXPRESSION]';\n if (!opt_keep_array_indentation) {\n indent();\n }\n }\n set_mode('[EXPRESSION]');\n if (!opt_keep_array_indentation) {\n print_newline();\n }\n } else if (last_text === '[') {\n if (flags.mode === '[EXPRESSION]') {\n flags.mode = '[INDENTED-EXPRESSION]';\n if (!opt_keep_array_indentation) {\n indent();\n }\n }\n set_mode('[EXPRESSION]');\n\n if (!opt_keep_array_indentation) {\n print_newline();\n }\n } else {\n set_mode('[EXPRESSION]');\n }\n } else {\n set_mode('[EXPRESSION]');\n }\n\n\n\n } else {\n if (last_word === 'for') {\n set_mode('(FOR-EXPRESSION)');\n } else if (in_array(last_word, ['if', 'while'])) {\n set_mode('(COND-EXPRESSION)');\n } else {\n set_mode('(EXPRESSION)');\n }\n }\n\n if (last_text === ';' || last_type === 'TK_START_BLOCK') {\n print_newline();\n } else if (last_type === 'TK_END_EXPR' || last_type === 'TK_START_EXPR' || last_type === 'TK_END_BLOCK' || last_text === '.') {\n if (wanted_newline) {\n print_newline();\n }\n // do nothing on (( and )( and ][ and ]( and .(\n } else if (last_type !== 'TK_WORD' && last_type !== 'TK_OPERATOR') {\n print_single_space();\n } else if (last_word === 'function' || last_word === 'typeof') {\n // function() vs function ()\n if (opt_jslint_happy) {\n print_single_space();\n }\n } else if (in_array(last_text, line_starters) || last_text === 'catch') {\n if (opt_space_before_conditional) {\n print_single_space();\n }\n }\n print_token();\n\n break;\n\n case 'TK_DOT':\n\n if (is_special_word(last_text)) {\n print_single_space();\n } else if (last_text === ')') {\n if (opt_break_chained_methods || wanted_newline) {\n flags.chain_extra_indentation = 1;\n print_newline(true /* ignore_repeated */, false /* reset_statement_flags */);\n }\n }\n\n print_token();\n break;\n\n case 'TK_END_EXPR':\n if (token_text === ']') {\n if (opt_keep_array_indentation) {\n if (last_text === '}') {\n // trim_output();\n // print_newline(true);\n remove_indent();\n print_token();\n restore_mode();\n break;\n }\n } else {\n if (flags.mode === '[INDENTED-EXPRESSION]') {\n if (last_text === ']') {\n restore_mode();\n print_newline();\n print_token();\n break;\n }\n }\n }\n }\n restore_mode();\n print_token();\n break;\n\n case 'TK_START_BLOCK':\n\n if (last_word === 'do') {\n set_mode('DO_BLOCK');\n } else {\n set_mode('BLOCK');\n }\n if (opt_brace_style === \"expand\" || opt_brace_style === \"expand-strict\") {\n var empty_braces = false;\n if (opt_brace_style === \"expand-strict\") {\n empty_braces = (look_up() === '}');\n if (!empty_braces) {\n print_newline(true);\n }\n } else {\n if (last_type !== 'TK_OPERATOR') {\n if (last_text === '=' || (is_special_word(last_text) && last_text !== 'else')) {\n print_single_space();\n } else {\n print_newline(true);\n }\n }\n }\n print_token();\n if (!empty_braces) {\n indent();\n }\n } else {\n if (last_type !== 'TK_OPERATOR' && last_type !== 'TK_START_EXPR') {\n if (last_type === 'TK_START_BLOCK') {\n print_newline();\n } else {\n print_single_space();\n }\n } else {\n // if TK_OPERATOR or TK_START_EXPR\n if (is_array(flags.previous_mode) && last_text === ',') {\n if (last_last_text === '}') {\n // }, { in array context\n print_single_space();\n } else {\n print_newline(); // [a, b, c, {\n }\n }\n }\n indent();\n print_token();\n }\n\n break;\n\n case 'TK_END_BLOCK':\n restore_mode();\n if (opt_brace_style === \"expand\" || opt_brace_style === \"expand-strict\") {\n if (last_text !== '{') {\n print_newline();\n }\n print_token();\n } else {\n if (last_type === 'TK_START_BLOCK') {\n // nothing\n if (just_added_newline) {\n remove_indent();\n } else {\n // {}\n trim_output();\n }\n } else {\n if (is_array(flags.mode) && opt_keep_array_indentation) {\n // we REALLY need a newline here, but newliner would skip that\n opt_keep_array_indentation = false;\n print_newline();\n opt_keep_array_indentation = true;\n\n } else {\n print_newline();\n }\n }\n print_token();\n }\n break;\n\n case 'TK_WORD':\n\n // no, it's not you. even I have problems understanding how this works\n // and what does what.\n if (do_block_just_closed) {\n // do {} ## while ()\n print_single_space();\n print_token();\n print_single_space();\n do_block_just_closed = false;\n break;\n }\n\n prefix = 'NONE';\n\n if (token_text === 'function') {\n if (flags.var_line && last_type !== 'TK_EQUALS' ) {\n flags.var_line_reindented = true;\n }\n if ((just_added_newline || last_text === ';') && last_text !== '{'\n && last_type !== 'TK_BLOCK_COMMENT' && last_type !== 'TK_COMMENT') {\n // make sure there is a nice clean space of at least one blank line\n // before a new function definition\n n_newlines = just_added_newline ? n_newlines : 0;\n if (!opt_preserve_newlines) {\n n_newlines = 1;\n }\n\n for (var i = 0; i < 2 - n_newlines; i++) {\n print_newline(false);\n }\n }\n if (last_type === 'TK_WORD') {\n if (last_text === 'get' || last_text === 'set' || last_text === 'new' || last_text === 'return') {\n print_single_space();\n } else {\n print_newline();\n }\n } else if (last_type === 'TK_OPERATOR' || last_text === '=') {\n // foo = function\n print_single_space();\n } else if (is_expression(flags.mode)) {\n // print nothing\n } else {\n print_newline();\n }\n\n print_token();\n last_word = token_text;\n break;\n }\n\n if (token_text === 'case' || (token_text === 'default' && flags.in_case_statement)) {\n print_newline();\n if (flags.case_body) {\n // switch cases following one another\n flags.indentation_level--;\n flags.case_body = false;\n remove_indent();\n }\n print_token();\n flags.in_case = true;\n flags.in_case_statement = true;\n break;\n }\n\n if (last_type === 'TK_END_BLOCK') {\n\n if (!in_array(token_text.toLowerCase(), ['else', 'catch', 'finally'])) {\n prefix = 'NEWLINE';\n } else {\n if (opt_brace_style === \"expand\" || opt_brace_style === \"end-expand\" || opt_brace_style === \"expand-strict\") {\n prefix = 'NEWLINE';\n } else {\n prefix = 'SPACE';\n print_single_space();\n }\n }\n } else if (last_type === 'TK_SEMICOLON' && (flags.mode === 'BLOCK' || flags.mode === 'DO_BLOCK')) {\n prefix = 'NEWLINE';\n } else if (last_type === 'TK_SEMICOLON' && is_expression(flags.mode)) {\n prefix = 'SPACE';\n } else if (last_type === 'TK_STRING') {\n prefix = 'NEWLINE';\n } else if (last_type === 'TK_WORD') {\n if (last_text === 'else') {\n // eat newlines between ...else *** some_op...\n // won't preserve extra newlines in this place (if any), but don't care that much\n trim_output(true);\n }\n prefix = 'SPACE';\n } else if (last_type === 'TK_START_BLOCK') {\n prefix = 'NEWLINE';\n } else if (last_type === 'TK_END_EXPR') {\n print_single_space();\n prefix = 'NEWLINE';\n }\n\n if (in_array(token_text, line_starters) && last_text !== ')') {\n if (last_text === 'else') {\n prefix = 'SPACE';\n } else {\n prefix = 'NEWLINE';\n }\n\n }\n\n if (flags.if_line && last_type === 'TK_END_EXPR') {\n flags.if_line = false;\n }\n if (in_array(token_text.toLowerCase(), ['else', 'catch', 'finally'])) {\n if (last_type !== 'TK_END_BLOCK' || opt_brace_style === \"expand\" || opt_brace_style === \"end-expand\" || opt_brace_style === \"expand-strict\") {\n print_newline();\n } else {\n trim_output(true);\n print_single_space();\n }\n } else if (prefix === 'NEWLINE') {\n if (is_special_word(last_text)) {\n // no newline between 'return nnn'\n print_single_space();\n } else if (last_type !== 'TK_END_EXPR') {\n if ((last_type !== 'TK_START_EXPR' || token_text !== 'var') && last_text !== ':') {\n // no need to force newline on 'var': for (var x = 0...)\n if (token_text === 'if' && last_word === 'else' && last_text !== '{') {\n // no newline for } else if {\n print_single_space();\n } else {\n flags.var_line = false;\n flags.var_line_reindented = false;\n print_newline();\n }\n }\n } else if (in_array(token_text, line_starters) && last_text !== ')') {\n flags.var_line = false;\n flags.var_line_reindented = false;\n print_newline();\n }\n } else if (is_array(flags.mode) && last_text === ',' && last_last_text === '}') {\n print_newline(); // }, in lists get a newline treatment\n } else if (prefix === 'SPACE') {\n print_single_space();\n }\n print_token();\n last_word = token_text;\n\n if (token_text === 'var') {\n flags.var_line = true;\n flags.var_line_reindented = false;\n flags.var_line_tainted = false;\n }\n\n if (token_text === 'if') {\n flags.if_line = true;\n }\n if (token_text === 'else') {\n flags.if_line = false;\n }\n\n break;\n\n case 'TK_SEMICOLON':\n\n print_token();\n flags.var_line = false;\n flags.var_line_reindented = false;\n if (flags.mode === 'OBJECT') {\n // OBJECT mode is weird and doesn't get reset too well.\n flags.mode = 'BLOCK';\n }\n break;\n\n case 'TK_STRING':\n\n if (last_type === 'TK_END_EXPR' && in_array(flags.previous_mode, ['(COND-EXPRESSION)', '(FOR-EXPRESSION)'])) {\n print_single_space();\n } else if (last_type === 'TK_COMMENT' || last_type === 'TK_STRING' || last_type === 'TK_START_BLOCK' || last_type === 'TK_END_BLOCK' || last_type === 'TK_SEMICOLON') {\n print_newline();\n } else if (last_type === 'TK_WORD') {\n print_single_space();\n } else {\n if (opt_preserve_newlines && wanted_newline) {\n print_newline();\n output.push(indent_string);\n }\n }\n print_token();\n break;\n\n case 'TK_EQUALS':\n if (flags.var_line) {\n // just got an '=' in a var-line, different formatting/line-breaking, etc will now be done\n flags.var_line_tainted = true;\n }\n print_single_space();\n print_token();\n print_single_space();\n break;\n\n case 'TK_COMMA':\n if (flags.var_line) {\n if (is_expression(flags.mode) || last_type === 'TK_END_BLOCK' ) {\n // do not break on comma, for(var a = 1, b = 2)\n flags.var_line_tainted = false;\n }\n if (flags.var_line_tainted) {\n print_token();\n flags.var_line_reindented = true;\n flags.var_line_tainted = false;\n print_newline();\n break;\n } else {\n flags.var_line_tainted = false;\n }\n\n print_token();\n print_single_space();\n break;\n }\n\n if (last_type === 'TK_COMMENT') {\n print_newline();\n }\n\n if (last_type === 'TK_END_BLOCK' && flags.mode !== \"(EXPRESSION)\") {\n print_token();\n if (flags.mode === 'OBJECT' && last_text === '}') {\n print_newline();\n } else {\n print_single_space();\n }\n } else {\n if (flags.mode === 'OBJECT') {\n print_token();\n print_newline();\n } else {\n // EXPR or DO_BLOCK\n print_token();\n print_single_space();\n }\n }\n break;\n\n\n case 'TK_OPERATOR':\n\n var space_before = true;\n var space_after = true;\n if (is_special_word(last_text)) {\n // \"return\" had a special handling in TK_WORD. Now we need to return the favor\n print_single_space();\n print_token();\n break;\n }\n\n // hack for actionscript's import .*;\n if (token_text === '*' && last_type === 'TK_DOT' && !last_last_text.match(/^\\d+$/)) {\n print_token();\n break;\n }\n\n if (token_text === ':' && flags.in_case) {\n flags.case_body = true;\n indent();\n print_token();\n print_newline();\n flags.in_case = false;\n break;\n }\n\n if (token_text === '::') {\n // no spaces around exotic namespacing syntax operator\n print_token();\n break;\n }\n\n if (in_array(token_text, ['--', '++', '!']) || (in_array(token_text, ['-', '+']) && (in_array(last_type, ['TK_START_BLOCK', 'TK_START_EXPR', 'TK_EQUALS', 'TK_OPERATOR']) || in_array(last_text, line_starters) || last_text == ','))) {\n // unary operators (and binary +/- pretending to be unary) special cases\n\n space_before = false;\n space_after = false;\n\n if (last_text === ';' && is_expression(flags.mode)) {\n // for (;; ++i)\n // ^^^\n space_before = true;\n }\n if (last_type === 'TK_WORD' && in_array(last_text, line_starters)) {\n space_before = true;\n }\n\n if (flags.mode === 'BLOCK' && (last_text === '{' || last_text === ';')) {\n // { foo; --i }\n // foo(); --bar;\n print_newline();\n }\n } else if (token_text === ':') {\n if (flags.ternary_depth === 0) {\n if (flags.mode === 'BLOCK') {\n flags.mode = 'OBJECT';\n }\n space_before = false;\n } else {\n flags.ternary_depth -= 1;\n }\n } else if (token_text === '?') {\n flags.ternary_depth += 1;\n }\n if (space_before) {\n print_single_space();\n }\n\n print_token();\n\n if (space_after) {\n print_single_space();\n }\n\n break;\n\n case 'TK_BLOCK_COMMENT':\n\n var lines = split_newlines(token_text);\n var j; // iterator for this case\n\n if (all_lines_start_with(lines.slice(1), '*')) {\n // javadoc: reformat and reindent\n print_newline();\n output.push(lines[0]);\n for (j = 1; j < lines.length; j++) {\n print_newline();\n output.push(' ');\n output.push(trim(lines[j]));\n }\n\n } else {\n\n // simple block comment: leave intact\n if (lines.length > 1) {\n // multiline comment block starts with a new line\n print_newline();\n } else {\n // single-line /* comment */ stays where it is\n if (last_type === 'TK_END_BLOCK') {\n print_newline();\n } else {\n print_single_space();\n }\n\n }\n\n for (j = 0; j < lines.length; j++) {\n output.push(lines[j]);\n output.push(\"\\n\");\n }\n\n }\n if (look_up('\\n') !== '\\n') {\n print_newline();\n }\n break;\n\n case 'TK_INLINE_COMMENT':\n print_single_space();\n print_token();\n if (is_expression(flags.mode)) {\n print_single_space();\n } else {\n force_newline();\n }\n break;\n\n case 'TK_COMMENT':\n\n if (last_text === ',' && !wanted_newline) {\n trim_output(true);\n }\n if (last_type !== 'TK_COMMENT') {\n if (wanted_newline) {\n print_newline();\n } else {\n print_single_space();\n }\n }\n print_token();\n print_newline();\n break;\n\n case 'TK_UNKNOWN':\n print_token();\n break;\n }\n\n last_last_text = last_text;\n last_type = token_type;\n last_text = token_text;\n }\n\n var sweet_code = preindent_string + output.join('').replace(/[\\r\\n ]+$/, '');\n return sweet_code;\n\n }\n\n // Add support for CommonJS. Just put this file somewhere on your require.paths\n // and you will be able to `var js_beautify = require(\"beautify\").js_beautify`.\n // if (typeof exports !== \"undefined\") {\n // exports.js_beautify = js_beautify;\n // }\n\n var SimplyBeautiful = function () {\n var ret = {};\n ret.js = function(content, options) {\n options = options || {};\n options.indent_size = typeof options.indent_size !== 'undefined' ? options.indent_size : 4;\n options.space_before_conditional = typeof options.space_before_conditional !== 'undefined' ? options.space_before_conditional : true;\n options.jslint_happy = typeof options.jslint_happy !== 'undefined' ? options.jslint_happy : true;\n options.max_char = typeof options.max_char !== 'undefined' ? options.max_char : 0;\n return js_beautify(content, options);\n }\n ret.html = function(content, options) {\n options = options || {};\n options.indent_size = typeof options.indent_size !== 'undefined' ? options.indent_size : 4;\n options.max_char = typeof options.max_char !== 'undefined' ? options.max_char : 0;\n return style_html(content, options);\n }\n ret.css = function(content, options) {\n options = options || {};\n options.indent_size = typeof options.indent_size !== 'undefined' ? options.indent_size : 4;\n options.max_char = typeof options.max_char !== 'undefined' ? options.max_char : 0;\n return css_beautify(content, options);\n }\n ret.json = ret.js;\n ret.javascript = ret.js;\n return ret;\n };\n\n if (environment == 'browser') {\n try {\n window.SimplyBeautiful = SimplyBeautiful;\n } catch (e) {\n }\n }\n // Just return a value to define the module export.\n // This example returns an object, but the module\n // can return a function as the exported value.\n return SimplyBeautiful(); // Enable if using UMD\n\n}));\n"],
"mappings": "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",
"names": ["tag_check", "indent_character", "indent_size", "max_char", "brace_style", "i", "text", "ch", "lines", "t"]
}