summaryrefslogtreecommitdiff
path: root/public/vendor/codemirror/mode/jinja2
diff options
context:
space:
mode:
authorWu Cheng-Han2015-05-04 15:53:29 +0800
committerWu Cheng-Han2015-05-04 15:53:29 +0800
commit4b0ca55eb79e963523eb6c8197825e9e8ae904e2 (patch)
tree574f3923af77b37b41dbf1b00bcd7827ef724a28 /public/vendor/codemirror/mode/jinja2
parent61eb11d23c65c9e5c493c67d055f785cbec139e2 (diff)
First commit, version 0.2.7
Diffstat (limited to 'public/vendor/codemirror/mode/jinja2')
-rwxr-xr-xpublic/vendor/codemirror/mode/jinja2/index.html54
-rwxr-xr-xpublic/vendor/codemirror/mode/jinja2/jinja2.js142
2 files changed, 196 insertions, 0 deletions
diff --git a/public/vendor/codemirror/mode/jinja2/index.html b/public/vendor/codemirror/mode/jinja2/index.html
new file mode 100755
index 00000000..5a70e915
--- /dev/null
+++ b/public/vendor/codemirror/mode/jinja2/index.html
@@ -0,0 +1,54 @@
+<!doctype html>
+
+<title>CodeMirror: Jinja2 mode</title>
+<meta charset="utf-8"/>
+<link rel=stylesheet href="../../doc/docs.css">
+
+<link rel="stylesheet" href="../../lib/codemirror.css">
+<script src="../../lib/codemirror.js"></script>
+<script src="jinja2.js"></script>
+<style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
+<div id=nav>
+ <a href="http://codemirror.net"><h1>CodeMirror</h1><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/codemirror/codemirror">Code</a>
+ </ul>
+ <ul>
+ <li><a href="../index.html">Language modes</a>
+ <li><a class=active href="#">Jinja2</a>
+ </ul>
+</div>
+
+<article>
+<h2>Jinja2 mode</h2>
+<form><textarea id="code" name="code">
+{# this is a comment #}
+{%- for item in li -%}
+ &lt;li&gt;{{ item.label }}&lt;/li&gt;
+{% endfor -%}
+{{ item.sand == true and item.keyword == false ? 1 : 0 }}
+{{ app.get(55, 1.2, true) }}
+{% if app.get(&#39;_route&#39;) == (&#39;_home&#39;) %}home{% endif %}
+{% if app.session.flashbag.has(&#39;message&#39;) %}
+ {% for message in app.session.flashbag.get(&#39;message&#39;) %}
+ {{ message.content }}
+ {% endfor %}
+{% endif %}
+{{ path(&#39;_home&#39;, {&#39;section&#39;: app.request.get(&#39;section&#39;)}) }}
+{{ path(&#39;_home&#39;, {
+ &#39;section&#39;: app.request.get(&#39;section&#39;),
+ &#39;boolean&#39;: true,
+ &#39;number&#39;: 55.33
+ })
+}}
+{% include (&#39;test.incl.html.twig&#39;) %}
+</textarea></form>
+ <script>
+ var editor =
+ CodeMirror.fromTextArea(document.getElementById("code"), {mode:
+ {name: "jinja2", htmlMode: true}});
+ </script>
+ </article>
diff --git a/public/vendor/codemirror/mode/jinja2/jinja2.js b/public/vendor/codemirror/mode/jinja2/jinja2.js
new file mode 100755
index 00000000..ed195581
--- /dev/null
+++ b/public/vendor/codemirror/mode/jinja2/jinja2.js
@@ -0,0 +1,142 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+
+ CodeMirror.defineMode("jinja2", function() {
+ var keywords = ["and", "as", "block", "endblock", "by", "cycle", "debug", "else", "elif",
+ "extends", "filter", "endfilter", "firstof", "for",
+ "endfor", "if", "endif", "ifchanged", "endifchanged",
+ "ifequal", "endifequal", "ifnotequal",
+ "endifnotequal", "in", "include", "load", "not", "now", "or",
+ "parsed", "regroup", "reversed", "spaceless",
+ "endspaceless", "ssi", "templatetag", "openblock",
+ "closeblock", "openvariable", "closevariable",
+ "openbrace", "closebrace", "opencomment",
+ "closecomment", "widthratio", "url", "with", "endwith",
+ "get_current_language", "trans", "endtrans", "noop", "blocktrans",
+ "endblocktrans", "get_available_languages",
+ "get_current_language_bidi", "plural"],
+ operator = /^[+\-*&%=<>!?|~^]/,
+ sign = /^[:\[\(\{]/,
+ atom = ["true", "false"],
+ number = /^(\d[+\-\*\/])?\d+(\.\d+)?/;
+
+ keywords = new RegExp("((" + keywords.join(")|(") + "))\\b");
+ atom = new RegExp("((" + atom.join(")|(") + "))\\b");
+
+ function tokenBase (stream, state) {
+ var ch = stream.peek();
+
+ //Comment
+ if (state.incomment) {
+ if(!stream.skipTo("#}")) {
+ stream.skipToEnd();
+ } else {
+ stream.eatWhile(/\#|}/);
+ state.incomment = false;
+ }
+ return "comment";
+ //Tag
+ } else if (state.intag) {
+ //After operator
+ if(state.operator) {
+ state.operator = false;
+ if(stream.match(atom)) {
+ return "atom";
+ }
+ if(stream.match(number)) {
+ return "number";
+ }
+ }
+ //After sign
+ if(state.sign) {
+ state.sign = false;
+ if(stream.match(atom)) {
+ return "atom";
+ }
+ if(stream.match(number)) {
+ return "number";
+ }
+ }
+
+ if(state.instring) {
+ if(ch == state.instring) {
+ state.instring = false;
+ }
+ stream.next();
+ return "string";
+ } else if(ch == "'" || ch == '"') {
+ state.instring = ch;
+ stream.next();
+ return "string";
+ } else if(stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) {
+ state.intag = false;
+ return "tag";
+ } else if(stream.match(operator)) {
+ state.operator = true;
+ return "operator";
+ } else if(stream.match(sign)) {
+ state.sign = true;
+ } else {
+ if(stream.eat(" ") || stream.sol()) {
+ if(stream.match(keywords)) {
+ return "keyword";
+ }
+ if(stream.match(atom)) {
+ return "atom";
+ }
+ if(stream.match(number)) {
+ return "number";
+ }
+ if(stream.sol()) {
+ stream.next();
+ }
+ } else {
+ stream.next();
+ }
+
+ }
+ return "variable";
+ } else if (stream.eat("{")) {
+ if (ch = stream.eat("#")) {
+ state.incomment = true;
+ if(!stream.skipTo("#}")) {
+ stream.skipToEnd();
+ } else {
+ stream.eatWhile(/\#|}/);
+ state.incomment = false;
+ }
+ return "comment";
+ //Open tag
+ } else if (ch = stream.eat(/\{|%/)) {
+ //Cache close tag
+ state.intag = ch;
+ if(ch == "{") {
+ state.intag = "}";
+ }
+ stream.eat("-");
+ return "tag";
+ }
+ }
+ stream.next();
+ };
+
+ return {
+ startState: function () {
+ return {tokenize: tokenBase};
+ },
+ token: function (stream, state) {
+ return state.tokenize(stream, state);
+ }
+ };
+ });
+});