You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
334 lines
8.1 KiB
334 lines
8.1 KiB
ace.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; |
|
}; |
|
|
|
|
|
|
|
}); |
|
|
|
ace.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() { |
|
ace.require(["ace/ext/beautify"], function() {}); |
|
})(); |
|
|