From 4b0ca55eb79e963523eb6c8197825e9e8ae904e2 Mon Sep 17 00:00:00 2001
From: Wu Cheng-Han
Date: Mon, 4 May 2015 15:53:29 +0800
Subject: First commit, version 0.2.7
---
public/vendor/codemirror/mode/smarty/index.html | 138 +++++++++++++++
public/vendor/codemirror/mode/smarty/smarty.js | 225 ++++++++++++++++++++++++
2 files changed, 363 insertions(+)
create mode 100755 public/vendor/codemirror/mode/smarty/index.html
create mode 100755 public/vendor/codemirror/mode/smarty/smarty.js
(limited to 'public/vendor/codemirror/mode/smarty')
diff --git a/public/vendor/codemirror/mode/smarty/index.html b/public/vendor/codemirror/mode/smarty/index.html
new file mode 100755
index 00000000..b19c8f09
--- /dev/null
+++ b/public/vendor/codemirror/mode/smarty/index.html
@@ -0,0 +1,138 @@
+
+
+
CodeMirror: Smarty mode
+
+
+
+
+
+
+
+
+
+
+
+Smarty mode
+
+
+Mode for Smarty version 2 or 3, which allows for custom delimiter tags.
+
+Several configuration parameters are supported:
+
+
+ leftDelimiter
and rightDelimiter
,
+ which should be strings that determine where the Smarty syntax
+ starts and ends.
+ version
, which should be 2 or 3.
+ baseMode
, which can be a mode spec
+ like "text/html"
to set a different background mode.
+
+
+MIME types defined: text/x-smarty
+
+Smarty 2, custom delimiters
+
+
+
+Smarty 3
+
+
+
+
+
+
diff --git a/public/vendor/codemirror/mode/smarty/smarty.js b/public/vendor/codemirror/mode/smarty/smarty.js
new file mode 100755
index 00000000..6e0fbed4
--- /dev/null
+++ b/public/vendor/codemirror/mode/smarty/smarty.js
@@ -0,0 +1,225 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+/**
+ * Smarty 2 and 3 mode.
+ */
+
+(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("smarty", function(config, parserConf) {
+ var rightDelimiter = parserConf.rightDelimiter || "}";
+ var leftDelimiter = parserConf.leftDelimiter || "{";
+ var version = parserConf.version || 2;
+ var baseMode = CodeMirror.getMode(config, parserConf.baseMode || "null");
+
+ var keyFunctions = ["debug", "extends", "function", "include", "literal"];
+ var regs = {
+ operatorChars: /[+\-*&%=<>!?]/,
+ validIdentifier: /[a-zA-Z0-9_]/,
+ stringChar: /['"]/
+ };
+
+ var last;
+ function cont(style, lastType) {
+ last = lastType;
+ return style;
+ }
+
+ function chain(stream, state, parser) {
+ state.tokenize = parser;
+ return parser(stream, state);
+ }
+
+ // Smarty 3 allows { and } surrounded by whitespace to NOT slip into Smarty mode
+ function doesNotCount(stream, pos) {
+ if (pos == null) pos = stream.pos;
+ return version === 3 && leftDelimiter == "{" &&
+ (pos == stream.string.length || /\s/.test(stream.string.charAt(pos)));
+ }
+
+ function tokenTop(stream, state) {
+ var string = stream.string;
+ for (var scan = stream.pos;;) {
+ var nextMatch = string.indexOf(leftDelimiter, scan);
+ scan = nextMatch + leftDelimiter.length;
+ if (nextMatch == -1 || !doesNotCount(stream, nextMatch + leftDelimiter.length)) break;
+ }
+ if (nextMatch == stream.pos) {
+ stream.match(leftDelimiter);
+ if (stream.eat("*")) {
+ return chain(stream, state, tokenBlock("comment", "*" + rightDelimiter));
+ } else {
+ state.depth++;
+ state.tokenize = tokenSmarty;
+ last = "startTag";
+ return "tag";
+ }
+ }
+
+ if (nextMatch > -1) stream.string = string.slice(0, nextMatch);
+ var token = baseMode.token(stream, state.base);
+ if (nextMatch > -1) stream.string = string;
+ return token;
+ }
+
+ // parsing Smarty content
+ function tokenSmarty(stream, state) {
+ if (stream.match(rightDelimiter, true)) {
+ if (version === 3) {
+ state.depth--;
+ if (state.depth <= 0) {
+ state.tokenize = tokenTop;
+ }
+ } else {
+ state.tokenize = tokenTop;
+ }
+ return cont("tag", null);
+ }
+
+ if (stream.match(leftDelimiter, true)) {
+ state.depth++;
+ return cont("tag", "startTag");
+ }
+
+ var ch = stream.next();
+ if (ch == "$") {
+ stream.eatWhile(regs.validIdentifier);
+ return cont("variable-2", "variable");
+ } else if (ch == "|") {
+ return cont("operator", "pipe");
+ } else if (ch == ".") {
+ return cont("operator", "property");
+ } else if (regs.stringChar.test(ch)) {
+ state.tokenize = tokenAttribute(ch);
+ return cont("string", "string");
+ } else if (regs.operatorChars.test(ch)) {
+ stream.eatWhile(regs.operatorChars);
+ return cont("operator", "operator");
+ } else if (ch == "[" || ch == "]") {
+ return cont("bracket", "bracket");
+ } else if (ch == "(" || ch == ")") {
+ return cont("bracket", "operator");
+ } else if (/\d/.test(ch)) {
+ stream.eatWhile(/\d/);
+ return cont("number", "number");
+ } else {
+
+ if (state.last == "variable") {
+ if (ch == "@") {
+ stream.eatWhile(regs.validIdentifier);
+ return cont("property", "property");
+ } else if (ch == "|") {
+ stream.eatWhile(regs.validIdentifier);
+ return cont("qualifier", "modifier");
+ }
+ } else if (state.last == "pipe") {
+ stream.eatWhile(regs.validIdentifier);
+ return cont("qualifier", "modifier");
+ } else if (state.last == "whitespace") {
+ stream.eatWhile(regs.validIdentifier);
+ return cont("attribute", "modifier");
+ } if (state.last == "property") {
+ stream.eatWhile(regs.validIdentifier);
+ return cont("property", null);
+ } else if (/\s/.test(ch)) {
+ last = "whitespace";
+ return null;
+ }
+
+ var str = "";
+ if (ch != "/") {
+ str += ch;
+ }
+ var c = null;
+ while (c = stream.eat(regs.validIdentifier)) {
+ str += c;
+ }
+ for (var i=0, j=keyFunctions.length; i