codemirror 3.18 with enabled the fullscreen addon
This commit is contained in:
+32
-16
@@ -1,18 +1,31 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>CodeMirror: Velocity mode</title>
|
||||
<link rel="stylesheet" href="../../lib/codemirror.css">
|
||||
<script src="../../lib/codemirror.js"></script>
|
||||
<script src="velocity.js"></script>
|
||||
<link rel="stylesheet" href="../../theme/night.css">
|
||||
<style>.CodeMirror {border: 1px solid black;}</style>
|
||||
<link rel="stylesheet" href="../../doc/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>CodeMirror: Velocity mode</h1>
|
||||
<form><textarea id="code" name="code">
|
||||
|
||||
<title>CodeMirror: Velocity mode</title>
|
||||
<meta charset="utf-8"/>
|
||||
<link rel=stylesheet href="../../doc/docs.css">
|
||||
|
||||
<link rel="stylesheet" href="../../lib/codemirror.css">
|
||||
<link rel="stylesheet" href="../../theme/night.css">
|
||||
<script src="../../lib/codemirror.js"></script>
|
||||
<script src="velocity.js"></script>
|
||||
<style>.CodeMirror {border: 1px solid black;}</style>
|
||||
<div id=nav>
|
||||
<a href="http://codemirror.net"><img id=logo src="../../doc/logo.png"></a>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a>
|
||||
<li><a href="../../doc/manual.html">Manual</a>
|
||||
<li><a href="https://github.com/marijnh/codemirror">Code</a>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><a href="../index.html">Language modes</a>
|
||||
<li><a class=active href="#">Velocity</a>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<article>
|
||||
<h2>Velocity mode</h2>
|
||||
<form><textarea id="code" name="code">
|
||||
## Velocity Code Demo
|
||||
#*
|
||||
based on PL/SQL mode by Peter Raganitsch, adapted to Velocity by Steve O'Hara ( http://www.pivotal-solutions.co.uk )
|
||||
@@ -62,13 +75,17 @@
|
||||
$someObject.getValues("this is a string split
|
||||
across lines")
|
||||
|
||||
$someObject("This plus $something in the middle").method(7567).property
|
||||
|
||||
#macro( tablerows $color $somelist )
|
||||
#foreach( $something in $somelist )
|
||||
<tr><td bgcolor=$color>$something</td></tr>
|
||||
<tr><td bgcolor=$color>$bodyContent</td></tr>
|
||||
#end
|
||||
#end
|
||||
|
||||
#tablerows("red" ["dadsdf","dsa"])
|
||||
#@tablerows("red" ["dadsdf","dsa"]) some body content #end
|
||||
|
||||
Variable reference: #set( $monkey = $bill )
|
||||
String literal: #set( $monkey.Friend = 'monica' )
|
||||
@@ -99,5 +116,4 @@ Addition: #set( $value = $foo + 1 )
|
||||
|
||||
<p><strong>MIME types defined:</strong> <code>text/velocity</code>.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</article>
|
||||
|
||||
+54
-12
@@ -9,7 +9,7 @@ CodeMirror.defineMode("velocity", function() {
|
||||
"#{end} #{else} #{break} #{stop}");
|
||||
var functions = parseWords("#if #elseif #foreach #set #include #parse #macro #define #evaluate " +
|
||||
"#{if} #{elseif} #{foreach} #{set} #{include} #{parse} #{macro} #{define} #{evaluate}");
|
||||
var specials = parseWords("$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent $velocityCount");
|
||||
var specials = parseWords("$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent.count $foreach.parent.hasNext $foreach.parent.first $foreach.parent.last $foreach.parent $velocityCount $!bodyContent $bodyContent");
|
||||
var isOperatorChar = /[+\-*&%=<>!?:\/|]/;
|
||||
|
||||
function chain(stream, state, f) {
|
||||
@@ -20,30 +20,50 @@ CodeMirror.defineMode("velocity", function() {
|
||||
var beforeParams = state.beforeParams;
|
||||
state.beforeParams = false;
|
||||
var ch = stream.next();
|
||||
// start of string?
|
||||
if ((ch == '"' || ch == "'") && state.inParams)
|
||||
// start of unparsed string?
|
||||
if ((ch == "'") && state.inParams) {
|
||||
state.lastTokenWasBuiltin = false;
|
||||
return chain(stream, state, tokenString(ch));
|
||||
}
|
||||
// start of parsed string?
|
||||
else if ((ch == '"')) {
|
||||
state.lastTokenWasBuiltin = false;
|
||||
if (state.inString) {
|
||||
state.inString = false;
|
||||
return "string";
|
||||
}
|
||||
else if (state.inParams)
|
||||
return chain(stream, state, tokenString(ch));
|
||||
}
|
||||
// is it one of the special signs []{}().,;? Seperator?
|
||||
else if (/[\[\]{}\(\),;\.]/.test(ch)) {
|
||||
if (ch == "(" && beforeParams) state.inParams = true;
|
||||
else if (ch == ")") state.inParams = false;
|
||||
if (ch == "(" && beforeParams)
|
||||
state.inParams = true;
|
||||
else if (ch == ")") {
|
||||
state.inParams = false;
|
||||
state.lastTokenWasBuiltin = true;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
// start of a number value?
|
||||
else if (/\d/.test(ch)) {
|
||||
state.lastTokenWasBuiltin = false;
|
||||
stream.eatWhile(/[\w\.]/);
|
||||
return "number";
|
||||
}
|
||||
// multi line comment?
|
||||
else if (ch == "#" && stream.eat("*")) {
|
||||
state.lastTokenWasBuiltin = false;
|
||||
return chain(stream, state, tokenComment);
|
||||
}
|
||||
// unparsed content?
|
||||
else if (ch == "#" && stream.match(/ *\[ *\[/)) {
|
||||
state.lastTokenWasBuiltin = false;
|
||||
return chain(stream, state, tokenUnparsed);
|
||||
}
|
||||
// single line comment?
|
||||
else if (ch == "#" && stream.eat("#")) {
|
||||
state.lastTokenWasBuiltin = false;
|
||||
stream.skipToEnd();
|
||||
return "comment";
|
||||
}
|
||||
@@ -51,33 +71,44 @@ CodeMirror.defineMode("velocity", function() {
|
||||
else if (ch == "$") {
|
||||
stream.eatWhile(/[\w\d\$_\.{}]/);
|
||||
// is it one of the specials?
|
||||
if (specials && specials.propertyIsEnumerable(stream.current().toLowerCase())) {
|
||||
if (specials && specials.propertyIsEnumerable(stream.current())) {
|
||||
return "keyword";
|
||||
}
|
||||
else {
|
||||
state.lastTokenWasBuiltin = true;
|
||||
state.beforeParams = true;
|
||||
return "builtin";
|
||||
}
|
||||
}
|
||||
// is it a operator?
|
||||
else if (isOperatorChar.test(ch)) {
|
||||
state.lastTokenWasBuiltin = false;
|
||||
stream.eatWhile(isOperatorChar);
|
||||
return "operator";
|
||||
}
|
||||
else {
|
||||
// get the whole word
|
||||
stream.eatWhile(/[\w\$_{}]/);
|
||||
var word = stream.current().toLowerCase();
|
||||
stream.eatWhile(/[\w\$_{}@]/);
|
||||
var word = stream.current();
|
||||
// is it one of the listed keywords?
|
||||
if (keywords && keywords.propertyIsEnumerable(word))
|
||||
return "keyword";
|
||||
// is it one of the listed functions?
|
||||
if (functions && functions.propertyIsEnumerable(word) ||
|
||||
stream.current().match(/^#[a-z0-9_]+ *$/i) && stream.peek()=="(") {
|
||||
(stream.current().match(/^#@?[a-z0-9_]+ *$/i) && stream.peek()=="(") &&
|
||||
!(functions && functions.propertyIsEnumerable(word.toLowerCase()))) {
|
||||
state.beforeParams = true;
|
||||
state.lastTokenWasBuiltin = false;
|
||||
return "keyword";
|
||||
}
|
||||
if (state.inString) {
|
||||
state.lastTokenWasBuiltin = false;
|
||||
return "string";
|
||||
}
|
||||
if (stream.pos > word.length && stream.string.charAt(stream.pos-word.length-1)=="." && state.lastTokenWasBuiltin)
|
||||
return "builtin";
|
||||
// default: just a "word"
|
||||
state.lastTokenWasBuiltin = false;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -86,7 +117,12 @@ CodeMirror.defineMode("velocity", function() {
|
||||
return function(stream, state) {
|
||||
var escaped = false, next, end = false;
|
||||
while ((next = stream.next()) != null) {
|
||||
if (next == quote && !escaped) {
|
||||
if ((next == quote) && !escaped) {
|
||||
end = true;
|
||||
break;
|
||||
}
|
||||
if (quote=='"' && stream.peek() == '$' && !escaped) {
|
||||
state.inString = true;
|
||||
end = true;
|
||||
break;
|
||||
}
|
||||
@@ -130,14 +166,20 @@ CodeMirror.defineMode("velocity", function() {
|
||||
return {
|
||||
tokenize: tokenBase,
|
||||
beforeParams: false,
|
||||
inParams: false
|
||||
inParams: false,
|
||||
inString: false,
|
||||
lastTokenWasBuiltin: false
|
||||
};
|
||||
},
|
||||
|
||||
token: function(stream, state) {
|
||||
if (stream.eatSpace()) return null;
|
||||
return state.tokenize(stream, state);
|
||||
}
|
||||
},
|
||||
blockCommentStart: "#*",
|
||||
blockCommentEnd: "*#",
|
||||
lineComment: "##",
|
||||
fold: "velocity"
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user