| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 | 
							- /**
 
- * vkBeautify - javascript plugin to pretty-print or minify text in XML, JSON, CSS and SQL formats.
 
- *  
 
- * Version - 0.99.00.beta 
 
- * Copyright (c) 2012 Vadim Kiryukhin
 
- * vkiryukhin @ gmail.com
 
- * http://www.eslinstructor.net/vkbeautify/
 
- * 
 
- * MIT license:
 
- *   http://www.opensource.org/licenses/mit-license.php
 
- *
 
- *   Pretty print
 
- *
 
- *        vkbeautify.xml(text [,indent_pattern]);
 
- *        vkbeautify.json(text [,indent_pattern]);
 
- *        vkbeautify.css(text [,indent_pattern]);
 
- *        vkbeautify.sql(text [,indent_pattern]);
 
- *
 
- *        @text - String; text to beatufy;
 
- *        @indent_pattern - Integer | String;
 
- *                Integer:  number of white spaces;
 
- *                String:   character string to visualize indentation ( can also be a set of white spaces )
 
- *   Minify
 
- *
 
- *        vkbeautify.xmlmin(text [,preserve_comments]);
 
- *        vkbeautify.jsonmin(text);
 
- *        vkbeautify.cssmin(text [,preserve_comments]);
 
- *        vkbeautify.sqlmin(text);
 
- *
 
- *        @text - String; text to minify;
 
- *        @preserve_comments - Bool; [optional];
 
- *                Set this flag to true to prevent removing comments from @text ( minxml and mincss functions only. )
 
- *
 
- *   Examples:
 
- *        vkbeautify.xml(text); // pretty print XML
 
- *        vkbeautify.json(text, 4 ); // pretty print JSON
 
- *        vkbeautify.css(text, '. . . .'); // pretty print CSS
 
- *        vkbeautify.sql(text, '----'); // pretty print SQL
 
- *
 
- *        vkbeautify.xmlmin(text, true);// minify XML, preserve comments
 
- *        vkbeautify.jsonmin(text);// minify JSON
 
- *        vkbeautify.cssmin(text);// minify CSS, remove comments ( default )
 
- *        vkbeautify.sqlmin(text);// minify SQL
 
- *
 
- */
 
- (function() {
 
- function createShiftArr(step) {
 
- 	var space = '    ';
 
- 	
 
- 	if ( isNaN(parseInt(step)) ) {  // argument is string
 
- 		space = step;
 
- 	} else { // argument is integer
 
- 		switch(step) {
 
- 			case 1: space = ' '; break;
 
- 			case 2: space = '  '; break;
 
- 			case 3: space = '   '; break;
 
- 			case 4: space = '    '; break;
 
- 			case 5: space = '     '; break;
 
- 			case 6: space = '      '; break;
 
- 			case 7: space = '       '; break;
 
- 			case 8: space = '        '; break;
 
- 			case 9: space = '         '; break;
 
- 			case 10: space = '          '; break;
 
- 			case 11: space = '           '; break;
 
- 			case 12: space = '            '; break;
 
- 		}
 
- 	}
 
- 	var shift = ['\n']; // array of shifts
 
- 	for(ix=0;ix<100;ix++){
 
- 		shift.push(shift[ix]+space); 
 
- 	}
 
- 	return shift;
 
- }
 
- function vkbeautify(){
 
- 	this.step = '\t'; // 4 spaces
 
- 	this.shift = createShiftArr(this.step);
 
- };
 
- vkbeautify.prototype.xml = function(text,step) {
 
- 	var ar = text.replace(/>\s{0,}</g,"><")
 
- 				 .replace(/</g,"~::~<")
 
- 				 .replace(/\s*xmlns\:/g,"~::~xmlns:")
 
- 				 .replace(/\s*xmlns\=/g,"~::~xmlns=")
 
- 				 .split('~::~'),
 
- 		len = ar.length,
 
- 		inComment = false,
 
- 		deep = 0,
 
- 		str = '',
 
- 		ix = 0,
 
- 		shift = step ? createShiftArr(step) : this.shift;
 
- 		for(ix=0;ix<len;ix++) {
 
- 			// start comment or <![CDATA[...]]> or <!DOCTYPE //
 
- 			if(ar[ix].search(/<!/) > -1) { 
 
- 				str += shift[deep]+ar[ix];
 
- 				inComment = true; 
 
- 				// end comment  or <![CDATA[...]]> //
 
- 				if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { 
 
- 					inComment = false; 
 
- 				}
 
- 			} else 
 
- 			// end comment  or <![CDATA[...]]> //
 
- 			if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { 
 
- 				str += ar[ix];
 
- 				inComment = false; 
 
- 			} else 
 
- 			// <elm></elm> //
 
- 			if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) &&
 
- 				/^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { 
 
- 				str += ar[ix];
 
- 				if(!inComment) deep--;
 
- 			} else
 
- 			 // <elm> //
 
- 			if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) {
 
- 				str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix];
 
- 			} else 
 
- 			 // <elm>...</elm> //
 
- 			if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) {
 
- 				str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
 
- 			} else 
 
- 			// </elm> //
 
- 			if(ar[ix].search(/<\//) > -1) { 
 
- 				str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix];
 
- 			} else 
 
- 			// <elm/> //
 
- 			if(ar[ix].search(/\/>/) > -1 ) { 
 
- 				str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
 
- 			} else 
 
- 			// <? xml ... ?> //
 
- 			if(ar[ix].search(/<\?/) > -1) { 
 
- 				str += shift[deep]+ar[ix];
 
- 			} else 
 
- 			// xmlns //
 
- 			if( ar[ix].search(/xmlns\:/) > -1  || ar[ix].search(/xmlns\=/) > -1) { 
 
- 				str += shift[deep]+ar[ix];
 
- 			} 
 
- 			
 
- 			else {
 
- 				str += ar[ix];
 
- 			}
 
- 		}
 
- 		
 
- 	return  (str[0] == '\n') ? str.slice(1) : str;
 
- }
 
- vkbeautify.prototype.json = function(text,step) {
 
- 	var step = step ? step : this.step;
 
- 	
 
- 	if (typeof JSON === 'undefined' ) return text; 
 
- 	
 
- 	if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step);
 
- 	if ( typeof text === "object" ) return JSON.stringify(text, null, step);
 
- 		
 
- 	return text; // text is not string nor object
 
- }
 
- vkbeautify.prototype.css = function(text, step) {
 
- 	var ar = text.replace(/\s{1,}/g,' ')
 
- 				.replace(/\{/g,"{~::~")
 
- 				.replace(/\}/g,"~::~}~::~")
 
- 				.replace(/\;/g,";~::~")
 
- 				.replace(/\/\*/g,"~::~/*")
 
- 				.replace(/\*\//g,"*/~::~")
 
- 				.replace(/~::~\s{0,}~::~/g,"~::~")
 
- 				.split('~::~'),
 
- 		len = ar.length,
 
- 		deep = 0,
 
- 		str = '',
 
- 		ix = 0,
 
- 		shift = step ? createShiftArr(step) : this.shift;
 
- 		
 
- 		for(ix=0;ix<len;ix++) {
 
- 			if( /\{/.exec(ar[ix]))  { 
 
- 				str += shift[deep++]+ar[ix];
 
- 			} else 
 
- 			if( /\}/.exec(ar[ix]))  { 
 
- 				str += shift[--deep]+ar[ix];
 
- 			} else
 
- 			if( /\*\\/.exec(ar[ix]))  { 
 
- 				str += shift[deep]+ar[ix];
 
- 			}
 
- 			else {
 
- 				str += shift[deep]+ar[ix];
 
- 			}
 
- 		}
 
- 		return str.replace(/^\n{1,}/,'');
 
- }
 
- //----------------------------------------------------------------------------
 
- function isSubquery(str, parenthesisLevel) {
 
- 	return  parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length )
 
- }
 
- function split_sql(str, tab) {
 
- 	return str.replace(/\s{1,}/g," ")
 
- 				.replace(/ AND /ig,"~::~"+tab+tab+"AND ")
 
- 				.replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ")
 
- 				.replace(/ CASE /ig,"~::~"+tab+"CASE ")
 
- 				.replace(/ ELSE /ig,"~::~"+tab+"ELSE ")
 
- 				.replace(/ END /ig,"~::~"+tab+"END ")
 
- 				.replace(/ FROM /ig,"~::~FROM ")
 
- 				.replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ")
 
- 				.replace(/ HAVING /ig,"~::~HAVING ")
 
- 				//.replace(/ SET /ig," SET~::~")
 
- 				.replace(/ IN /ig," IN ")
 
- 				
 
- 				.replace(/ JOIN /ig,"~::~JOIN ")
 
- 				.replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ")
 
- 				.replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ")
 
- 				.replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ")
 
- 				.replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ")
 
- 				
 
- 				.replace(/ ON /ig,"~::~"+tab+"ON ")
 
- 				.replace(/ OR /ig,"~::~"+tab+tab+"OR ")
 
- 				.replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ")
 
- 				.replace(/ OVER /ig,"~::~"+tab+"OVER ")
 
- 				.replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ")
 
- 				.replace(/\)\s{0,}SELECT /ig,")~::~SELECT ")
 
- 				
 
- 				.replace(/ THEN /ig," THEN~::~"+tab+"")
 
- 				.replace(/ UNION /ig,"~::~UNION~::~")
 
- 				.replace(/ USING /ig,"~::~USING ")
 
- 				.replace(/ WHEN /ig,"~::~"+tab+"WHEN ")
 
- 				.replace(/ WHERE /ig,"~::~WHERE ")
 
- 				.replace(/ WITH /ig,"~::~WITH ")
 
- 				
 
- 				//.replace(/\,\s{0,}\(/ig,",~::~( ")
 
- 				//.replace(/\,/ig,",~::~"+tab+tab+"")
 
- 				.replace(/ ALL /ig," ALL ")
 
- 				.replace(/ AS /ig," AS ")
 
- 				.replace(/ ASC /ig," ASC ")	
 
- 				.replace(/ DESC /ig," DESC ")	
 
- 				.replace(/ DISTINCT /ig," DISTINCT ")
 
- 				.replace(/ EXISTS /ig," EXISTS ")
 
- 				.replace(/ NOT /ig," NOT ")
 
- 				.replace(/ NULL /ig," NULL ")
 
- 				.replace(/ LIKE /ig," LIKE ")
 
- 				.replace(/\s{0,}SELECT /ig,"SELECT ")
 
- 				.replace(/\s{0,}UPDATE /ig,"UPDATE ")
 
- 				.replace(/ SET /ig," SET ")
 
- 							
 
- 				.replace(/~::~{1,}/g,"~::~")
 
- 				.split('~::~');
 
- }
 
- vkbeautify.prototype.sql = function(text,step) {
 
- 	var ar_by_quote = text.replace(/\s{1,}/g," ")
 
- 							.replace(/\'/ig,"~::~\'")
 
- 							.split('~::~'),
 
- 		len = ar_by_quote.length,
 
- 		ar = [],
 
- 		deep = 0,
 
- 		tab = this.step,//+this.step,
 
- 		inComment = true,
 
- 		inQuote = false,
 
- 		parenthesisLevel = 0,
 
- 		str = '',
 
- 		ix = 0,
 
- 		shift = step ? createShiftArr(step) : this.shift;;
 
- 		for(ix=0;ix<len;ix++) {
 
- 			if(ix%2) {
 
- 				ar = ar.concat(ar_by_quote[ix]);
 
- 			} else {
 
- 				ar = ar.concat(split_sql(ar_by_quote[ix], tab) );
 
- 			}
 
- 		}
 
- 		
 
- 		len = ar.length;
 
- 		for(ix=0;ix<len;ix++) {
 
- 			
 
- 			parenthesisLevel = isSubquery(ar[ix], parenthesisLevel);
 
- 			
 
- 			if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
 
- 				ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
 
- 			} 
 
- 			
 
- 			if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix]))  { 
 
- 				ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
 
- 			} 
 
- 			
 
- 			if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
 
- 				deep++;
 
- 				str += shift[deep]+ar[ix];
 
- 			} else 
 
- 			if( /\'/.exec(ar[ix]) )  { 
 
- 				if(parenthesisLevel<1 && deep) {
 
- 					deep--;
 
- 				}
 
- 				str += ar[ix];
 
- 			}
 
- 			else  { 
 
- 				str += shift[deep]+ar[ix];
 
- 				if(parenthesisLevel<1 && deep) {
 
- 					deep--;
 
- 				}
 
- 			} 
 
- 			var junk = 0;
 
- 		}
 
- 		str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n");
 
- 		return str;
 
- }
 
- vkbeautify.prototype.xmlmin = function(text, preserveComments) {
 
- 	var str = preserveComments ? text
 
- 							   : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"")
 
- 									 .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns');
 
- 	return  str.replace(/>\s{0,}</g,"><"); 
 
- }
 
- vkbeautify.prototype.jsonmin = function(text) {
 
- 	if (typeof JSON === 'undefined' ) return text; 
 
- 	
 
- 	return JSON.stringify(JSON.parse(text), null, 0); 
 
- 				
 
- }
 
- vkbeautify.prototype.cssmin = function(text, preserveComments) {
 
- 	
 
- 	var str = preserveComments ? text
 
- 							   : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ;
 
- 	return str.replace(/\s{1,}/g,' ')
 
- 			  .replace(/\{\s{1,}/g,"{")
 
- 			  .replace(/\}\s{1,}/g,"}")
 
- 			  .replace(/\;\s{1,}/g,";")
 
- 			  .replace(/\/\*\s{1,}/g,"/*")
 
- 			  .replace(/\*\/\s{1,}/g,"*/");
 
- }
 
- vkbeautify.prototype.sqlmin = function(text) {
 
- 	return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")");
 
- }
 
- window.vkbeautify = new vkbeautify();
 
- })();
 
 
  |