| define("ace/ext/beautify/php_rules",["require","exports","module","ace/token_iterator"], function(require, exports, module) { |
| "use strict"; |
| var TokenIterator = require("ace/token_iterator").TokenIterator; |
| exports.newLines = [{ |
| type: 'support.php_tag', |
| value: '<?php' |
| }, { |
| type: 'support.php_tag', |
| value: '<?' |
| }, { |
| type: 'support.php_tag', |
| value: '?>' |
| }, { |
| type: 'paren.lparen', |
| value: '{', |
| indent: true |
| }, { |
| type: 'paren.rparen', |
| breakBefore: true, |
| value: '}', |
| indent: false |
| }, { |
| type: 'paren.rparen', |
| breakBefore: true, |
| value: '})', |
| indent: false, |
| dontBreak: true |
| }, { |
| type: 'comment' |
| }, { |
| type: 'text', |
| value: ';' |
| }, { |
| type: 'text', |
| value: ':', |
| context: 'php' |
| }, { |
| type: 'keyword', |
| value: 'case', |
| indent: true, |
| dontBreak: true |
| }, { |
| type: 'keyword', |
| value: 'default', |
| indent: true, |
| dontBreak: true |
| }, { |
| type: 'keyword', |
| value: 'break', |
| indent: false, |
| dontBreak: true |
| }, { |
| type: 'punctuation.doctype.end', |
| value: '>' |
| }, { |
| type: 'meta.tag.punctuation.end', |
| value: '>' |
| }, { |
| type: 'meta.tag.punctuation.begin', |
| value: '<', |
| blockTag: true, |
| indent: true, |
| dontBreak: true |
| }, { |
| type: 'meta.tag.punctuation.begin', |
| value: '</', |
| indent: false, |
| breakBefore: true, |
| dontBreak: true |
| }, { |
| type: 'punctuation.operator', |
| value: ';' |
| }]; |
| |
| exports.spaces = [{ |
| type: 'xml-pe', |
| prepend: true |
| },{ |
| type: 'entity.other.attribute-name', |
| prepend: true |
| }, { |
| type: 'storage.type', |
| value: 'var', |
| append: true |
| }, { |
| type: 'storage.type', |
| value: 'function', |
| append: true |
| }, { |
| type: 'keyword.operator', |
| value: '=' |
| }, { |
| type: 'keyword', |
| value: 'as', |
| prepend: true, |
| append: true |
| }, { |
| type: 'keyword', |
| value: 'function', |
| append: true |
| }, { |
| type: 'support.function', |
| next: /[^\(]/, |
| append: true |
| }, { |
| type: 'keyword', |
| value: 'or', |
| append: true, |
| prepend: true |
| }, { |
| type: 'keyword', |
| value: 'and', |
| append: true, |
| prepend: true |
| }, { |
| type: 'keyword', |
| value: 'case', |
| append: true |
| }, { |
| type: 'keyword.operator', |
| value: '||', |
| append: true, |
| prepend: true |
| }, { |
| type: 'keyword.operator', |
| value: '&&', |
| append: true, |
| prepend: true |
| }]; |
| exports.singleTags = ['!doctype','area','base','br','hr','input','img','link','meta']; |
| |
| exports.transform = function(iterator, maxPos, context) { |
| var token = iterator.getCurrentToken(); |
| |
| var newLines = exports.newLines; |
| var spaces = exports.spaces; |
| var singleTags = exports.singleTags; |
| |
| var code = ''; |
| |
| var indentation = 0; |
| var dontBreak = false; |
| var tag; |
| var lastTag; |
| var lastToken = {}; |
| var nextTag; |
| var nextToken = {}; |
| var breakAdded = false; |
| var value = ''; |
| |
| while (token!==null) { |
| console.log(token); |
| |
| if( !token ){ |
| token = iterator.stepForward(); |
| continue; |
| } |
| if( token.type == 'support.php_tag' && token.value != '?>' ){ |
| context = 'php'; |
| } |
| else if( token.type == 'support.php_tag' && token.value == '?>' ){ |
| context = 'html'; |
| } |
| else if( token.type == 'meta.tag.name.style' && context != 'css' ){ |
| context = 'css'; |
| } |
| else if( token.type == 'meta.tag.name.style' && context == 'css' ){ |
| context = 'html'; |
| } |
| else if( token.type == 'meta.tag.name.script' && context != 'js' ){ |
| context = 'js'; |
| } |
| else if( token.type == 'meta.tag.name.script' && context == 'js' ){ |
| context = 'html'; |
| } |
| |
| nextToken = iterator.stepForward(); |
| if (nextToken && nextToken.type.indexOf('meta.tag.name') == 0) { |
| nextTag = nextToken.value; |
| } |
| if ( lastToken.type == 'support.php_tag' && lastToken.value == '<?=') { |
| dontBreak = true; |
| } |
| if (token.type == 'meta.tag.name') { |
| token.value = token.value.toLowerCase(); |
| } |
| if (token.type == 'text') { |
| token.value = token.value.trim(); |
| } |
| if (!token.value) { |
| token = nextToken; |
| continue; |
| } |
| value = token.value; |
| for (var i in spaces) { |
| if ( |
| token.type == spaces[i].type && |
| (!spaces[i].value || token.value == spaces[i].value) && |
| ( |
| nextToken && |
| (!spaces[i].next || spaces[i].next.test(nextToken.value)) |
| ) |
| ) { |
| if (spaces[i].prepend) { |
| value = ' ' + token.value; |
| } |
| |
| if (spaces[i].append) { |
| value += ' '; |
| } |
| } |
| } |
| if (token.type.indexOf('meta.tag.name') == 0) { |
| tag = token.value; |
| } |
| breakAdded = false; |
| for (i in newLines) { |
| if ( |
| token.type == newLines[i].type && |
| ( |
| !newLines[i].value || |
| token.value == newLines[i].value |
| ) && |
| ( |
| !newLines[i].blockTag || |
| singleTags.indexOf(nextTag) === -1 |
| ) && |
| ( |
| !newLines[i].context || |
| newLines[i].context === context |
| ) |
| ) { |
| if (newLines[i].indent === false) { |
| indentation--; |
| } |
| |
| if ( |
| newLines[i].breakBefore && |
| ( !newLines[i].prev || newLines[i].prev.test(lastToken.value) ) |
| ) { |
| code += "\n"; |
| breakAdded = true; |
| for (i = 0; i < indentation; i++) { |
| code += "\t"; |
| } |
| } |
| |
| break; |
| } |
| } |
| |
| if (dontBreak===false) { |
| for (i in newLines) { |
| if ( |
| lastToken.type == newLines[i].type && |
| ( |
| !newLines[i].value || lastToken.value == newLines[i].value |
| ) && |
| ( |
| !newLines[i].blockTag || |
| singleTags.indexOf(tag) === -1 |
| ) && |
| ( |
| !newLines[i].context || |
| newLines[i].context === context |
| ) |
| ) { |
| if (newLines[i].indent === true) { |
| indentation++; |
| } |
| |
| if (!newLines[i].dontBreak && !breakAdded) { |
| code += "\n"; |
| for (i = 0; i < indentation; i++) { |
| code += "\t"; |
| } |
| } |
| |
| break; |
| } |
| } |
| } |
| |
| code += value; |
| if ( lastToken.type == 'support.php_tag' && lastToken.value == '?>' ) { |
| dontBreak = false; |
| } |
| lastTag = tag; |
| |
| lastToken = token; |
| |
| token = nextToken; |
| |
| if (token===null) { |
| break; |
| } |
| } |
| |
| return code; |
| }; |
| |
| |
| |
| }); |
| |
| define("ace/ext/beautify",["require","exports","module","ace/token_iterator","ace/ext/beautify/php_rules"], function(require, exports, module) { |
| "use strict"; |
| var TokenIterator = require("ace/token_iterator").TokenIterator; |
| |
| var phpTransform = require("./beautify/php_rules").transform; |
| |
| exports.beautify = function(session) { |
| var iterator = new TokenIterator(session, 0, 0); |
| var token = iterator.getCurrentToken(); |
| |
| var context = session.$modeId.split("/").pop(); |
| |
| var code = phpTransform(iterator, context); |
| session.doc.setValue(code); |
| }; |
| |
| exports.commands = [{ |
| name: "beautify", |
| exec: function(editor) { |
| exports.beautify(editor.session); |
| }, |
| bindKey: "Ctrl-Shift-B" |
| }] |
| |
| }); |
| (function() { |
| window.require(["ace/ext/beautify"], function() {}); |
| })(); |
| |