markdown格式wiki文档

ext-beautify.js 8.1KB

    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() {}); })();