first commit

This commit is contained in:
Mr.Qin
2022-08-19 19:48:37 +08:00
commit afdd648b65
3275 changed files with 631084 additions and 0 deletions

View 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");
});

View 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>