diff options
Diffstat (limited to 'codemirror_ui/lib/CodeMirror-2.3/mode/r')
| -rw-r--r-- | codemirror_ui/lib/CodeMirror-2.3/mode/r/index.html | 73 | ||||
| -rw-r--r-- | codemirror_ui/lib/CodeMirror-2.3/mode/r/r.js | 141 | 
2 files changed, 214 insertions, 0 deletions
diff --git a/codemirror_ui/lib/CodeMirror-2.3/mode/r/index.html b/codemirror_ui/lib/CodeMirror-2.3/mode/r/index.html new file mode 100644 index 0000000..6977505 --- /dev/null +++ b/codemirror_ui/lib/CodeMirror-2.3/mode/r/index.html @@ -0,0 +1,73 @@ +<!doctype html> +<html> +  <head> +    <title>CodeMirror: R mode</title> +    <link rel="stylesheet" href="../../lib/codemirror.css"> +    <script src="../../lib/codemirror.js"></script> +    <script src="r.js"></script> +    <style> +      .CodeMirror { border-top: 1px solid silver; border-bottom: 1px solid silver; } +      .cm-s-default span.cm-semi { color: blue; font-weight: bold; } +      .cm-s-default span.cm-dollar { color: orange; font-weight: bold; } +      .cm-s-default span.cm-arrow { color: brown; } +      .cm-s-default span.cm-arg-is { color: brown; } +    </style> +    <link rel="stylesheet" href="../../doc/docs.css"> +  </head> +  <body> +    <h1>CodeMirror: R mode</h1> +    <form><textarea id="code" name="code"> +# Code from http://www.mayin.org/ajayshah/KB/R/ + +# FIRST LEARN ABOUT LISTS -- +X = list(height=5.4, weight=54) +print("Use default printing --") +print(X) +print("Accessing individual elements --") +cat("Your height is ", X$height, " and your weight is ", X$weight, "\n") + +# FUNCTIONS -- +square <- function(x) { +  return(x*x) +} +cat("The square of 3 is ", square(3), "\n") + +                 # default value of the arg is set to 5. +cube <- function(x=5) { +  return(x*x*x); +} +cat("Calling cube with 2 : ", cube(2), "\n")    # will give 2^3 +cat("Calling cube        : ", cube(), "\n")     # will default to 5^3. + +# LEARN ABOUT FUNCTIONS THAT RETURN MULTIPLE OBJECTS -- +powers <- function(x) { +  parcel = list(x2=x*x, x3=x*x*x, x4=x*x*x*x); +  return(parcel); +} + +X = powers(3); +print("Showing powers of 3 --"); print(X); + +# WRITING THIS COMPACTLY (4 lines instead of 7) + +powerful <- function(x) { +  return(list(x2=x*x, x3=x*x*x, x4=x*x*x*x)); +} +print("Showing powers of 3 --"); print(powerful(3)); + +# In R, the last expression in a function is, by default, what is +# returned. So you could equally just say: +powerful <- function(x) {list(x2=x*x, x3=x*x*x, x4=x*x*x*x)} +</textarea></form> +    <script> +      var editor = CodeMirror.fromTextArea(document.getElementById("code"), {}); +    </script> + +    <p><strong>MIME types defined:</strong> <code>text/x-rsrc</code>.</p> + +    <p>Development of the CodeMirror R mode was kindly sponsored +    by <a href="http://ubalo.com/">Ubalo</a>, who hold +    the <a href="LICENSE">license</a>.</p> + +  </body> +</html> diff --git a/codemirror_ui/lib/CodeMirror-2.3/mode/r/r.js b/codemirror_ui/lib/CodeMirror-2.3/mode/r/r.js new file mode 100644 index 0000000..53647f2 --- /dev/null +++ b/codemirror_ui/lib/CodeMirror-2.3/mode/r/r.js @@ -0,0 +1,141 @@ +CodeMirror.defineMode("r", function(config) { +  function wordObj(str) { +    var words = str.split(" "), res = {}; +    for (var i = 0; i < words.length; ++i) res[words[i]] = true; +    return res; +  } +  var atoms = wordObj("NULL NA Inf NaN NA_integer_ NA_real_ NA_complex_ NA_character_"); +  var builtins = wordObj("list quote bquote eval return call parse deparse"); +  var keywords = wordObj("if else repeat while function for in next break"); +  var blockkeywords = wordObj("if else repeat while function for"); +  var opChars = /[+\-*\/^<>=!&|~$:]/; +  var curPunc; + +  function tokenBase(stream, state) { +    curPunc = null; +    var ch = stream.next(); +    if (ch == "#") { +      stream.skipToEnd(); +      return "comment"; +    } else if (ch == "0" && stream.eat("x")) { +      stream.eatWhile(/[\da-f]/i); +      return "number"; +    } else if (ch == "." && stream.eat(/\d/)) { +      stream.match(/\d*(?:e[+\-]?\d+)?/); +      return "number"; +    } else if (/\d/.test(ch)) { +      stream.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/); +      return "number"; +    } else if (ch == "'" || ch == '"') { +      state.tokenize = tokenString(ch); +      return "string"; +    } else if (ch == "." && stream.match(/.[.\d]+/)) { +      return "keyword"; +    } else if (/[\w\.]/.test(ch) && ch != "_") { +      stream.eatWhile(/[\w\.]/); +      var word = stream.current(); +      if (atoms.propertyIsEnumerable(word)) return "atom"; +      if (keywords.propertyIsEnumerable(word)) { +        if (blockkeywords.propertyIsEnumerable(word)) curPunc = "block"; +        return "keyword"; +      } +      if (builtins.propertyIsEnumerable(word)) return "builtin"; +      return "variable"; +    } else if (ch == "%") { +      if (stream.skipTo("%")) stream.next(); +      return "variable-2"; +    } else if (ch == "<" && stream.eat("-")) { +      return "arrow"; +    } else if (ch == "=" && state.ctx.argList) { +      return "arg-is"; +    } else if (opChars.test(ch)) { +      if (ch == "$") return "dollar"; +      stream.eatWhile(opChars); +      return "operator"; +    } else if (/[\(\){}\[\];]/.test(ch)) { +      curPunc = ch; +      if (ch == ";") return "semi"; +      return null; +    } else { +      return null; +    } +  } + +  function tokenString(quote) { +    return function(stream, state) { +      if (stream.eat("\\")) { +        var ch = stream.next(); +        if (ch == "x") stream.match(/^[a-f0-9]{2}/i); +        else if ((ch == "u" || ch == "U") && stream.eat("{") && stream.skipTo("}")) stream.next(); +        else if (ch == "u") stream.match(/^[a-f0-9]{4}/i); +        else if (ch == "U") stream.match(/^[a-f0-9]{8}/i); +        else if (/[0-7]/.test(ch)) stream.match(/^[0-7]{1,2}/); +        return "string-2"; +      } else { +        var next; +        while ((next = stream.next()) != null) { +          if (next == quote) { state.tokenize = tokenBase; break; } +          if (next == "\\") { stream.backUp(1); break; } +        } +        return "string"; +      } +    }; +  } + +  function push(state, type, stream) { +    state.ctx = {type: type, +                 indent: state.indent, +                 align: null, +                 column: stream.column(), +                 prev: state.ctx}; +  } +  function pop(state) { +    state.indent = state.ctx.indent; +    state.ctx = state.ctx.prev; +  } + +  return { +    startState: function(base) { +      return {tokenize: tokenBase, +              ctx: {type: "top", +                    indent: -config.indentUnit, +                    align: false}, +              indent: 0, +              afterIdent: false}; +    }, + +    token: function(stream, state) { +      if (stream.sol()) { +        if (state.ctx.align == null) state.ctx.align = false; +        state.indent = stream.indentation(); +      } +      if (stream.eatSpace()) return null; +      var style = state.tokenize(stream, state); +      if (style != "comment" && state.ctx.align == null) state.ctx.align = true; + +      var ctype = state.ctx.type; +      if ((curPunc == ";" || curPunc == "{" || curPunc == "}") && ctype == "block") pop(state); +      if (curPunc == "{") push(state, "}", stream); +      else if (curPunc == "(") { +        push(state, ")", stream); +        if (state.afterIdent) state.ctx.argList = true; +      } +      else if (curPunc == "[") push(state, "]", stream); +      else if (curPunc == "block") push(state, "block", stream); +      else if (curPunc == ctype) pop(state); +      state.afterIdent = style == "variable" || style == "keyword"; +      return style; +    }, + +    indent: function(state, textAfter) { +      if (state.tokenize != tokenBase) return 0; +      var firstChar = textAfter && textAfter.charAt(0), ctx = state.ctx, +          closing = firstChar == ctx.type; +      if (ctx.type == "block") return ctx.indent + (firstChar == "{" ? 0 : config.indentUnit); +      else if (ctx.align) return ctx.column + (closing ? 0 : 1); +      else return ctx.indent + (closing ? 0 : config.indentUnit); +    } +  }; +}); + +CodeMirror.defineMIME("text/x-rsrc", "r");  | 
