Merge branch modelist
This commit is contained in:
commit
95f822c6d8
5 changed files with 204 additions and 3 deletions
|
|
@ -55,7 +55,7 @@ var MultiSelect = require("ace/multi_select").MultiSelect;
|
|||
var whitespace = require("ace/ext/whitespace");
|
||||
|
||||
var doclist = require("./doclist");
|
||||
var modelist = require("./modelist");
|
||||
var modelist = require("ace/ext/modelist");
|
||||
var layout = require("./layout");
|
||||
var TokenTooltip = require("./token_tooltip").TokenTooltip;
|
||||
var util = require("./util");
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ var EditSession = require("ace/edit_session").EditSession;
|
|||
var UndoManager = require("ace/undomanager").UndoManager;
|
||||
var net = require("ace/lib/net");
|
||||
|
||||
var modelist = require("./modelist");
|
||||
var modelist = require("ace/ext/modelist");
|
||||
/*********** demo documents ***************************/
|
||||
var fileCache = {};
|
||||
|
||||
|
|
|
|||
61
demo/modelist.html
Normal file
61
demo/modelist.html
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title>ACE Editor Modelist Demo</title>
|
||||
<style type="text/css" media="screen">
|
||||
body {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#editor {
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<pre id="editor">var editor = ace.edit("editor");
|
||||
editor.setTheme("ace/theme/twilight");
|
||||
(function () {
|
||||
var modelist = ace.require('ace/ext/modelist');
|
||||
// the file path could come from an xmlhttp request, a drop event,
|
||||
// or any other scriptable file loading process.
|
||||
// Extensions could consume the modelist and use it to dynamically
|
||||
// set the editor mode. Webmasters could use it in their scripts
|
||||
// for site specific purposes as well.
|
||||
var filePath = 'blahblah/weee/some.js';
|
||||
var mode = modelist.getModeFromPath(filePath).mode;
|
||||
console.log(mode);
|
||||
editor.getSession().setMode(mode);
|
||||
}());
|
||||
</pre>
|
||||
|
||||
<script src="../build/src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="../build/src-noconflict/ext-modelist.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script>
|
||||
var editor = ace.edit("editor");
|
||||
editor.setTheme("ace/theme/twilight");
|
||||
(function () {
|
||||
var modelist = ace.require('ace/ext/modelist');
|
||||
// the file path could come from an xmlhttp request, a drop event,
|
||||
// or any other scriptable file loading process.
|
||||
// Extensions could consume the modelist and use it to dynamically
|
||||
// set the editor mode. Webmasters could use it in their scripts
|
||||
// for site specific purposes as well.
|
||||
var filePath = 'blahblah/weee/some.js';
|
||||
var mode = modelist.getModeFromPath(filePath).mode;
|
||||
console.log(mode);
|
||||
editor.getSession().setMode(mode);
|
||||
}());
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
140
lib/ace/ext/modelist.js
Normal file
140
lib/ace/ext/modelist.js
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
/************** modes ***********************/
|
||||
/**
|
||||
* An array containing information about rendering modes.
|
||||
*/
|
||||
var modes = [];
|
||||
/**
|
||||
* Suggests a mode based on the file extension present in the given path
|
||||
* @param {string} path The path to the file
|
||||
* @returns {object} Returns an object containing information about the
|
||||
* suggested mode.
|
||||
*/
|
||||
function getModeFromPath(path) {
|
||||
var mode = modesByName.text;
|
||||
var fileName = path.split(/[\/\\]/).pop();
|
||||
for (var i = 0; i < modes.length; i++) {
|
||||
if (modes[i].supportsFile(fileName)) {
|
||||
mode = modes[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return mode;
|
||||
}
|
||||
|
||||
var Mode = function(name, desc, extensions) {
|
||||
this.name = name;
|
||||
this.desc = desc;
|
||||
this.mode = "ace/mode/" + name;
|
||||
if (/\^/.test(extensions)) {
|
||||
var re = extensions.replace(/\|(\^)?/g, function(a, b){
|
||||
return "$|" + (b ? "^" : "^.*\\.");
|
||||
}) + "$";
|
||||
} else {
|
||||
var re = "^.*\\.(" + extensions + ")$";
|
||||
}
|
||||
|
||||
this.extRe = new RegExp(re, "gi");
|
||||
};
|
||||
|
||||
Mode.prototype.supportsFile = function(filename) {
|
||||
return filename.match(this.extRe);
|
||||
};
|
||||
|
||||
/**
|
||||
* An object containing properties that map to rendering modes. Each property
|
||||
* contains an array where element 0 is the name of the mode and element 1
|
||||
* contains information about the file extensions where this mode is
|
||||
* applicable.
|
||||
*/
|
||||
var modesByName = {
|
||||
abap: ["ABAP" , "abap"],
|
||||
asciidoc: ["AsciiDoc" , "asciidoc"],
|
||||
c9search: ["C9Search" , "c9search_results"],
|
||||
coffee: ["CoffeeScript" , "^Cakefile|coffee|cf|cson"],
|
||||
coldfusion: ["ColdFusion" , "cfm"],
|
||||
csharp: ["C#" , "cs"],
|
||||
css: ["CSS" , "css"],
|
||||
curly: ["Curly" , "curly"],
|
||||
dart: ["Dart" , "dart"],
|
||||
diff: ["Diff" , "diff|patch"],
|
||||
dot: ["Dot" , "dot"],
|
||||
ftl: ["FreeMarker" , "ftl"],
|
||||
glsl: ["Glsl" , "glsl|frag|vert"],
|
||||
golang: ["Go" , "go"],
|
||||
groovy: ["Groovy" , "groovy"],
|
||||
haxe: ["haXe" , "hx"],
|
||||
haml: ["HAML" , "haml"],
|
||||
html: ["HTML" , "htm|html|xhtml"],
|
||||
c_cpp: ["C/C++" , "c|cc|cpp|cxx|h|hh|hpp"],
|
||||
clojure: ["Clojure" , "clj"],
|
||||
jade: ["Jade" , "jade"],
|
||||
java: ["Java" , "java"],
|
||||
jsp: ["JSP" , "jsp"],
|
||||
javascript: ["JavaScript" , "js"],
|
||||
json: ["JSON" , "json"],
|
||||
jsx: ["JSX" , "jsx"],
|
||||
latex: ["LaTeX" , "latex|tex|ltx|bib"],
|
||||
less: ["LESS" , "less"],
|
||||
lisp: ["Lisp" , "lisp"],
|
||||
scheme: ["Scheme" , "scm|rkt"],
|
||||
liquid: ["Liquid" , "liquid"],
|
||||
livescript: ["LiveScript" , "ls"],
|
||||
logiql: ["LogiQL" , "logic|lql"],
|
||||
lua: ["Lua" , "lua"],
|
||||
luapage: ["LuaPage" , "lp"], // http://keplerproject.github.com/cgilua/manual.html#templates
|
||||
lucene: ["Lucene" , "lucene"],
|
||||
lsl: ["LSL" , "lsl"],
|
||||
makefile: ["Makefile" , "^GNUmakefile|^makefile|^Makefile|^OCamlMakefile|make"],
|
||||
markdown: ["Markdown" , "md|markdown"],
|
||||
mushcode: ["TinyMUSH" , "mc|mush"],
|
||||
objectivec: ["Objective-C" , "m"],
|
||||
ocaml: ["OCaml" , "ml|mli"],
|
||||
pascal: ["Pascal" , "pas|p"],
|
||||
perl: ["Perl" , "pl|pm"],
|
||||
pgsql: ["pgSQL" , "pgsql"],
|
||||
php: ["PHP" , "php|phtml"],
|
||||
powershell: ["Powershell" , "ps1"],
|
||||
python: ["Python" , "py"],
|
||||
r: ["R" , "r"],
|
||||
rdoc: ["RDoc" , "Rd"],
|
||||
rhtml: ["RHTML" , "Rhtml"],
|
||||
ruby: ["Ruby" , "ru|gemspec|rake|rb"],
|
||||
scad: ["OpenSCAD" , "scad"],
|
||||
scala: ["Scala" , "scala"],
|
||||
scss: ["SCSS" , "scss"],
|
||||
sass: ["SASS" , "sass"],
|
||||
sh: ["SH" , "sh|bash|bat"],
|
||||
sql: ["SQL" , "sql"],
|
||||
stylus: ["Stylus" , "styl|stylus"],
|
||||
svg: ["SVG" , "svg"],
|
||||
tcl: ["Tcl" , "tcl"],
|
||||
tex: ["Tex" , "tex"],
|
||||
text: ["Text" , "txt"],
|
||||
textile: ["Textile" , "textile"],
|
||||
tmsnippet: ["tmSnippet" , "tmSnippet"],
|
||||
toml: ["toml" , "toml"],
|
||||
typescript: ["Typescript" , "typescript|ts|str"],
|
||||
vbscript: ["VBScript" , "vbs"],
|
||||
xml: ["XML" , "xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl"],
|
||||
xquery: ["XQuery" , "xq"],
|
||||
yaml: ["YAML" , "yaml"]
|
||||
};
|
||||
|
||||
for (var name in modesByName) {
|
||||
var mode = modesByName[name];
|
||||
mode = new Mode(name, mode[0], mode[1]);
|
||||
modesByName[name] = mode;
|
||||
modes.push(mode);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getModeFromPath: getModeFromPath,
|
||||
modes: modes,
|
||||
modesByName: modesByName
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
|
|
@ -6,7 +6,7 @@ var net = require("ace/lib/net");
|
|||
var Range = require("ace/range").Range;
|
||||
var util = require("demo/kitchen-sink/util");
|
||||
var layout = require("demo/kitchen-sink/layout");
|
||||
var modelist = require("demo/kitchen-sink/modelist");
|
||||
var modelist = require("ace/ext/modelist");
|
||||
var doclist = require("demo/kitchen-sink/doclist");
|
||||
var TokenTooltip = require("demo/kitchen-sink/token_tooltip").TokenTooltip;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue