first commit
This commit is contained in:
243
public/static/js/codemirror/mode/elm/elm.js
vendored
Normal file
243
public/static/js/codemirror/mode/elm/elm.js
vendored
Normal file
@@ -0,0 +1,243 @@
|
||||
// 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"));
|
||||
else if (typeof define == "function" && define.amd) // AMD
|
||||
define(["../../lib/codemirror"], mod);
|
||||
else // Plain browser env
|
||||
mod(CodeMirror);
|
||||
})(function(CodeMirror) {
|
||||
"use strict";
|
||||
|
||||
CodeMirror.defineMode("elm", function() {
|
||||
|
||||
function switchState(source, setState, f)
|
||||
{
|
||||
setState(f);
|
||||
return f(source, setState);
|
||||
}
|
||||
|
||||
var lowerRE = /[a-z]/;
|
||||
var upperRE = /[A-Z]/;
|
||||
var innerRE = /[a-zA-Z0-9_]/;
|
||||
|
||||
var digitRE = /[0-9]/;
|
||||
var hexRE = /[0-9A-Fa-f]/;
|
||||
var symbolRE = /[-&*+.\\/<>=?^|:]/;
|
||||
var specialRE = /[(),[\]{}]/;
|
||||
var spacesRE = /[ \v\f]/; // newlines are handled in tokenizer
|
||||
|
||||
function normal()
|
||||
{
|
||||
return function(source, setState)
|
||||
{
|
||||
if (source.eatWhile(spacesRE))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var char = source.next();
|
||||
|
||||
if (specialRE.test(char))
|
||||
{
|
||||
return (char === '{' && source.eat('-'))
|
||||
? switchState(source, setState, chompMultiComment(1))
|
||||
: (char === '[' && source.match('glsl|'))
|
||||
? switchState(source, setState, chompGlsl)
|
||||
: 'builtin';
|
||||
}
|
||||
|
||||
if (char === '\'')
|
||||
{
|
||||
return switchState(source, setState, chompChar);
|
||||
}
|
||||
|
||||
if (char === '"')
|
||||
{
|
||||
return source.eat('"')
|
||||
? source.eat('"')
|
||||
? switchState(source, setState, chompMultiString)
|
||||
: 'string'
|
||||
: switchState(source, setState, chompSingleString);
|
||||
}
|
||||
|
||||
if (upperRE.test(char))
|
||||
{
|
||||
source.eatWhile(innerRE);
|
||||
return 'variable-2';
|
||||
}
|
||||
|
||||
if (lowerRE.test(char))
|
||||
{
|
||||
var isDef = source.pos === 1;
|
||||
source.eatWhile(innerRE);
|
||||
return isDef ? "def" : "variable";
|
||||
}
|
||||
|
||||
if (digitRE.test(char))
|
||||
{
|
||||
if (char === '0')
|
||||
{
|
||||
if (source.eat(/[xX]/))
|
||||
{
|
||||
source.eatWhile(hexRE); // should require at least 1
|
||||
return "number";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
source.eatWhile(digitRE);
|
||||
}
|
||||
if (source.eat('.'))
|
||||
{
|
||||
source.eatWhile(digitRE); // should require at least 1
|
||||
}
|
||||
if (source.eat(/[eE]/))
|
||||
{
|
||||
source.eat(/[-+]/);
|
||||
source.eatWhile(digitRE); // should require at least 1
|
||||
}
|
||||
return "number";
|
||||
}
|
||||
|
||||
if (symbolRE.test(char))
|
||||
{
|
||||
if (char === '-' && source.eat('-'))
|
||||
{
|
||||
source.skipToEnd();
|
||||
return "comment";
|
||||
}
|
||||
source.eatWhile(symbolRE);
|
||||
return "keyword";
|
||||
}
|
||||
|
||||
if (char === '_')
|
||||
{
|
||||
return "keyword";
|
||||
}
|
||||
|
||||
return "error";
|
||||
}
|
||||
}
|
||||
|
||||
function chompMultiComment(nest)
|
||||
{
|
||||
if (nest == 0)
|
||||
{
|
||||
return normal();
|
||||
}
|
||||
return function(source, setState)
|
||||
{
|
||||
while (!source.eol())
|
||||
{
|
||||
var char = source.next();
|
||||
if (char == '{' && source.eat('-'))
|
||||
{
|
||||
++nest;
|
||||
}
|
||||
else if (char == '-' && source.eat('}'))
|
||||
{
|
||||
--nest;
|
||||
if (nest === 0)
|
||||
{
|
||||
setState(normal());
|
||||
return 'comment';
|
||||
}
|
||||
}
|
||||
}
|
||||
setState(chompMultiComment(nest));
|
||||
return 'comment';
|
||||
}
|
||||
}
|
||||
|
||||
function chompMultiString(source, setState)
|
||||
{
|
||||
while (!source.eol())
|
||||
{
|
||||
var char = source.next();
|
||||
if (char === '"' && source.eat('"') && source.eat('"'))
|
||||
{
|
||||
setState(normal());
|
||||
return 'string';
|
||||
}
|
||||
}
|
||||
return 'string';
|
||||
}
|
||||
|
||||
function chompSingleString(source, setState)
|
||||
{
|
||||
while (source.skipTo('\\"')) { source.next(); source.next(); }
|
||||
if (source.skipTo('"'))
|
||||
{
|
||||
source.next();
|
||||
setState(normal());
|
||||
return 'string';
|
||||
}
|
||||
source.skipToEnd();
|
||||
setState(normal());
|
||||
return 'error';
|
||||
}
|
||||
|
||||
function chompChar(source, setState)
|
||||
{
|
||||
while (source.skipTo("\\'")) { source.next(); source.next(); }
|
||||
if (source.skipTo("'"))
|
||||
{
|
||||
source.next();
|
||||
setState(normal());
|
||||
return 'string';
|
||||
}
|
||||
source.skipToEnd();
|
||||
setState(normal());
|
||||
return 'error';
|
||||
}
|
||||
|
||||
function chompGlsl(source, setState)
|
||||
{
|
||||
while (!source.eol())
|
||||
{
|
||||
var char = source.next();
|
||||
if (char === '|' && source.eat(']'))
|
||||
{
|
||||
setState(normal());
|
||||
return 'string';
|
||||
}
|
||||
}
|
||||
return 'string';
|
||||
}
|
||||
|
||||
var wellKnownWords = {
|
||||
case: 1,
|
||||
of: 1,
|
||||
as: 1,
|
||||
if: 1,
|
||||
then: 1,
|
||||
else: 1,
|
||||
let: 1,
|
||||
in: 1,
|
||||
type: 1,
|
||||
alias: 1,
|
||||
module: 1,
|
||||
where: 1,
|
||||
import: 1,
|
||||
exposing: 1,
|
||||
port: 1
|
||||
};
|
||||
|
||||
return {
|
||||
startState: function () { return { f: normal() }; },
|
||||
copyState: function (s) { return { f: s.f }; },
|
||||
|
||||
token: function(stream, state) {
|
||||
var type = state.f(stream, function(s) { state.f = s; });
|
||||
var word = stream.current();
|
||||
return (wellKnownWords.hasOwnProperty(word)) ? 'keyword' : type;
|
||||
}
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
CodeMirror.defineMIME("text/x-elm", "elm");
|
||||
});
|
||||
61
public/static/js/codemirror/mode/elm/index.html
vendored
Normal file
61
public/static/js/codemirror/mode/elm/index.html
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
<!doctype html>
|
||||
|
||||
<title>CodeMirror: Elm 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="elm.js"></script>
|
||||
<style>.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
|
||||
<div id=nav>
|
||||
<a href="https://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png" alt=""></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="#">Elm</a>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<article>
|
||||
<h2>Elm mode</h2>
|
||||
|
||||
<div><textarea id="code" name="code">
|
||||
import Color exposing (..)
|
||||
import Graphics.Collage exposing (..)
|
||||
import Graphics.Element exposing (..)
|
||||
import Time exposing (..)
|
||||
|
||||
main =
|
||||
Signal.map clock (every second)
|
||||
|
||||
clock t =
|
||||
collage 400 400
|
||||
[ filled lightGrey (ngon 12 110)
|
||||
, outlined (solid grey) (ngon 12 110)
|
||||
, hand orange 100 t
|
||||
, hand charcoal 100 (t/60)
|
||||
, hand charcoal 60 (t/720)
|
||||
]
|
||||
|
||||
hand clr len time =
|
||||
let angle = degrees (90 - 6 * inSeconds time)
|
||||
in
|
||||
segment (0,0) (fromPolar (len,angle))
|
||||
|> traced (solid clr)
|
||||
</textarea></div>
|
||||
|
||||
<script>
|
||||
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
|
||||
lineNumbers: true,
|
||||
mode: "text/x-elm"
|
||||
});
|
||||
</script>
|
||||
|
||||
<p><strong>MIME types defined:</strong> <code>text/x-elm</code>.</p>
|
||||
</article>
|
||||
Reference in New Issue
Block a user