1
0
Fork 0
mirror of https://github.com/janickiy/yii2-nomer synced 2025-03-09 15:39:59 +00:00

add files to project

This commit is contained in:
janickiy 2020-02-05 06:34:26 +03:00
commit 5cac498444
3729 changed files with 836998 additions and 0 deletions

View file

@ -0,0 +1,92 @@
<!doctype html>
<title>CodeMirror: Smarty 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="../xml/xml.js"></script>
<script src="smarty.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="#">Smarty</a>
</ul>
</div>
<article>
<h2>Smarty mode</h2>
<form>
<textarea id="code" name="code"> {extends file="parent.tpl"} {include file="template.tpl"} {* some example Smarty content *} {if isset($name) && $name == 'Blog'} This is a {$var}. {$integer = 451}, {$array[] = "a"}, {$stringvar = "string"} {assign var='bob' value=$var.prop} {elseif
$name == $foo} {function name=menu level=0} {foreach $data as $entry} {if is_array($entry)} - {$entry@key} {menu data=$entry level=$level+1} {else} {$entry} {/if} {/foreach} {/function} {/if}</textarea>
</form>
<p>Mode for Smarty version 2 or 3, which allows for custom delimiter tags.</p>
<p>Several configuration parameters are supported:</p>
<ul>
<li><code>leftDelimiter</code> and <code>rightDelimiter</code>, which should be strings that determine where the Smarty syntax starts and ends.</li>
<li><code>version</code>, which should be 2 or 3.</li>
<li><code>baseMode</code>, which can be a mode spec like <code>"text/html"</code> to set a different background mode.</li>
</ul>
<p>
<strong>MIME types defined:</strong> <code>text/x-smarty</code></p>
<h3>Smarty 2, custom delimiters</h3>
<form>
<textarea id="code2" name="code2"> {--extends file="parent.tpl"--} {--include file="template.tpl"--} {--* some example Smarty content *--} {--if isset($name) && $name == 'Blog'--} This is a {--$var--}. {--$integer = 451--}, {--$array[] = "a"--}, {--$stringvar = "string"--} {--assign
var='bob' value=$var.prop--} {--elseif $name == $foo--} {--function name=menu level=0--} {--foreach $data as $entry--} {--if is_array($entry)--} - {--$entry@key--} {--menu data=$entry level=$level+1--} {--else--} {--$entry--} {--/if--} {--/foreach--}
{--/function--} {--/if--}</textarea>
</form>
<h3>Smarty 3</h3>
<textarea id="code3" name="code3"> Nested tags {$foo={counter one=1 two={inception}}+3} are now valid in Smarty 3.
<script>
function test()
{
console.log("Smarty 3 permits single curly braces followed by whitespace to NOT slip into Smarty mode.");
}
</script> {assign var=foo value=[1,2,3]} {assign var=foo value=['y'=>'yellow','b'=>'blue']} {assign var=foo value=[1,[9,8],3]} {$foo=$bar+2} {* a comment *} {$foo.bar=1} {* another comment *} {$foo = myfunct(($x+$y)*3)} {$foo = strlen($bar)} {$foo.bar.baz=1},
{$foo[]=1} Smarty "dot" syntax (note: embedded {} are used to address ambiguities): {$foo.a.b.c} => $foo['a']['b']['c'] {$foo.a.$b.c} => $foo['a'][$b]['c'] {$foo.a.{$b+4}.c} => $foo['a'][$b+4]['c'] {$foo.a.{$b.c}} => $foo['a'][$b['c']] {$object->method1($x)->method2($y)}</textarea>
<script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"),
{
lineNumbers: true,
mode: "smarty"
});
var editor = CodeMirror.fromTextArea(document.getElementById("code2"),
{
lineNumbers: true,
mode:
{
name: "smarty",
leftDelimiter: "{--",
rightDelimiter: "--}"
}
});
var editor = CodeMirror.fromTextArea(document.getElementById("code3"),
{
lineNumbers: true,
mode:
{
name: "smarty",
version: 3,
baseMode: "text/html"
}
});
</script>
</article>

View file

@ -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<j; i++) {
if (keyFunctions[i] == str) {
return cont("keyword", "keyword");
}
}
if (/\s/.test(ch)) {
return null;
}
return cont("tag", "tag");
}
}
function tokenAttribute(quote) {
return function(stream, state) {
var prevChar = null;
var currChar = null;
while (!stream.eol()) {
currChar = stream.peek();
if (stream.next() == quote && prevChar !== '\\') {
state.tokenize = tokenSmarty;
break;
}
prevChar = currChar;
}
return "string";
};
}
function tokenBlock(style, terminator) {
return function(stream, state) {
while (!stream.eol()) {
if (stream.match(terminator)) {
state.tokenize = tokenTop;
break;
}
stream.next();
}
return style;
};
}
return {
startState: function() {
return {
base: CodeMirror.startState(baseMode),
tokenize: tokenTop,
last: null,
depth: 0
};
},
copyState: function(state) {
return {
base: CodeMirror.copyState(baseMode, state.base),
tokenize: state.tokenize,
last: state.last,
depth: state.depth
};
},
innerMode: function(state) {
if (state.tokenize == tokenTop)
return {mode: baseMode, state: state.base};
},
token: function(stream, state) {
var style = state.tokenize(stream, state);
state.last = last;
return style;
},
indent: function(state, text) {
if (state.tokenize == tokenTop && baseMode.indent)
return baseMode.indent(state.base, text);
else
return CodeMirror.Pass;
},
blockCommentStart: leftDelimiter + "*",
blockCommentEnd: "*" + rightDelimiter
};
});
CodeMirror.defineMIME("text/x-smarty", "smarty");
});