summaryrefslogtreecommitdiff
path: root/public/vendor/codemirror/mode/pegjs
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/pegjs
parent61eb11d23c65c9e5c493c67d055f785cbec139e2 (diff)
First commit, version 0.2.7
Diffstat (limited to 'public/vendor/codemirror/mode/pegjs')
-rwxr-xr-xpublic/vendor/codemirror/mode/pegjs/index.html66
-rwxr-xr-xpublic/vendor/codemirror/mode/pegjs/pegjs.js114
2 files changed, 180 insertions, 0 deletions
diff --git a/public/vendor/codemirror/mode/pegjs/index.html b/public/vendor/codemirror/mode/pegjs/index.html
new file mode 100755
index 00000000..0c746048
--- /dev/null
+++ b/public/vendor/codemirror/mode/pegjs/index.html
@@ -0,0 +1,66 @@
+<!doctype html>
+<html>
+ <head>
+ <title>CodeMirror: PEG.js 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="../javascript/javascript.js"></script>
+ <script src="pegjs.js"></script>
+ <style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
+ </head>
+ <body>
+ <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="#">PEG.js Mode</a>
+ </ul>
+ </div>
+
+ <article>
+ <h2>PEG.js Mode</h2>
+ <form><textarea id="code" name="code">
+/*
+ * Classic example grammar, which recognizes simple arithmetic expressions like
+ * "2*(3+4)". The parser generated from this grammar then computes their value.
+ */
+
+start
+ = additive
+
+additive
+ = left:multiplicative "+" right:additive { return left + right; }
+ / multiplicative
+
+multiplicative
+ = left:primary "*" right:multiplicative { return left * right; }
+ / primary
+
+primary
+ = integer
+ / "(" additive:additive ")" { return additive; }
+
+integer "integer"
+ = digits:[0-9]+ { return parseInt(digits.join(""), 10); }
+
+letter = [a-z]+</textarea></form>
+ <script>
+ var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
+ mode: {name: "pegjs"},
+ lineNumbers: true
+ });
+ </script>
+ <h3>The PEG.js Mode</h3>
+ <p> Created by Forbes Lindesay.</p>
+ </article>
+ </body>
+</html>
diff --git a/public/vendor/codemirror/mode/pegjs/pegjs.js b/public/vendor/codemirror/mode/pegjs/pegjs.js
new file mode 100755
index 00000000..306e3768
--- /dev/null
+++ b/public/vendor/codemirror/mode/pegjs/pegjs.js
@@ -0,0 +1,114 @@
+// 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"), require("../javascript/javascript"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror", "../javascript/javascript"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.defineMode("pegjs", function (config) {
+ var jsMode = CodeMirror.getMode(config, "javascript");
+
+ function identifier(stream) {
+ return stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);
+ }
+
+ return {
+ startState: function () {
+ return {
+ inString: false,
+ stringType: null,
+ inComment: false,
+ inChracterClass: false,
+ braced: 0,
+ lhs: true,
+ localState: null
+ };
+ },
+ token: function (stream, state) {
+ if (stream)
+
+ //check for state changes
+ if (!state.inString && !state.inComment && ((stream.peek() == '"') || (stream.peek() == "'"))) {
+ state.stringType = stream.peek();
+ stream.next(); // Skip quote
+ state.inString = true; // Update state
+ }
+ if (!state.inString && !state.inComment && stream.match(/^\/\*/)) {
+ state.inComment = true;
+ }
+
+ //return state
+ if (state.inString) {
+ while (state.inString && !stream.eol()) {
+ if (stream.peek() === state.stringType) {
+ stream.next(); // Skip quote
+ state.inString = false; // Clear flag
+ } else if (stream.peek() === '\\') {
+ stream.next();
+ stream.next();
+ } else {
+ stream.match(/^.[^\\\"\']*/);
+ }
+ }
+ return state.lhs ? "property string" : "string"; // Token style
+ } else if (state.inComment) {
+ while (state.inComment && !stream.eol()) {
+ if (stream.match(/\*\//)) {
+ state.inComment = false; // Clear flag
+ } else {
+ stream.match(/^.[^\*]*/);
+ }
+ }
+ return "comment";
+ } else if (state.inChracterClass) {
+ while (state.inChracterClass && !stream.eol()) {
+ if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) {
+ state.inChracterClass = false;
+ }
+ }
+ } else if (stream.peek() === '[') {
+ stream.next();
+ state.inChracterClass = true;
+ return 'bracket';
+ } else if (stream.match(/^\/\//)) {
+ stream.skipToEnd();
+ return "comment";
+ } else if (state.braced || stream.peek() === '{') {
+ if (state.localState === null) {
+ state.localState = jsMode.startState();
+ }
+ var token = jsMode.token(stream, state.localState);
+ var text = stream.current();
+ if (!token) {
+ for (var i = 0; i < text.length; i++) {
+ if (text[i] === '{') {
+ state.braced++;
+ } else if (text[i] === '}') {
+ state.braced--;
+ }
+ };
+ }
+ return token;
+ } else if (identifier(stream)) {
+ if (stream.peek() === ':') {
+ return 'variable';
+ }
+ return 'variable-2';
+ } else if (['[', ']', '(', ')'].indexOf(stream.peek()) != -1) {
+ stream.next();
+ return 'bracket';
+ } else if (!stream.eatSpace()) {
+ stream.next();
+ }
+ return null;
+ }
+ };
+}, "javascript");
+
+});