diff options
Diffstat (limited to 'public/vendor/codemirror/mode/pegjs')
| -rwxr-xr-x | public/vendor/codemirror/mode/pegjs/index.html | 66 | ||||
| -rwxr-xr-x | public/vendor/codemirror/mode/pegjs/pegjs.js | 114 | 
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"); + +}); | 
