From 63155b78023911fbec3c0abdd94dc5968effbc0a Mon Sep 17 00:00:00 2001 From: Dimage Sapelkin <kerabromsmu@users.noreply.github.com> Date: Wed, 3 Jun 2015 18:38:13 +0300 Subject: [PATCH] [factor mode] Add --- doc/compress.html | 1 + mode/factor/factor.js | 83 ++++++++++++++++++++++++++++++++++++++++++ mode/factor/index.html | 77 +++++++++++++++++++++++++++++++++++++++ mode/index.html | 1 + mode/meta.js | 1 + 5 files changed, 163 insertions(+) create mode 100644 mode/factor/factor.js create mode 100644 mode/factor/index.html diff --git a/doc/compress.html b/doc/compress.html index c5d0bf6ca..39a0c2a22 100644 --- a/doc/compress.html +++ b/doc/compress.html @@ -129,6 +129,7 @@ <option value="http://codemirror.net/mode/eiffel/eiffel.js">eiffel.js</option> <option value="http://codemirror.net/mode/elm/elm.js">eml.js</option> <option value="http://codemirror.net/mode/erlang/erlang.js">erlang.js</option> + <option value="http://codemirror.net/mode/factor/factor.js">factor.js</option> <option value="http://codemirror.net/mode/forth/forth.js">forth.js</option> <option value="http://codemirror.net/mode/fortran/fortran.js">fortran.js</option> <option value="http://codemirror.net/mode/gfm/gfm.js">gfm.js</option> diff --git a/mode/factor/factor.js b/mode/factor/factor.js new file mode 100644 index 000000000..86d7adf62 --- /dev/null +++ b/mode/factor/factor.js @@ -0,0 +1,83 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Factor syntax highlight - simple mode +// +// by Dimage Sapelkin (https://github.com/kerabromsmu) + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../addon/mode/simple"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineSimpleMode("factor", { + // The start state contains the rules that are intially used + start: [ + // comments + {regex: /#?!.*/, token: "comment"}, + // strings """, multiline --> state + {regex: /"""/, token: "string", next: "string3"}, + {regex: /"/, token: "string", next: "string"}, + // numbers: dec, hex, unicode, bin, fractional, complex + {regex: /(?:[+-]?)(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\d+.?\d*)/, token: "number"}, + //{regex: /[+-]?/} //fractional + // definition: defining word, defined word, etc + {regex: /(\:)(\s+)(\S+)(\s+)(\()/, token: ["keyword", null, "def", null, "keyword"], next: "stack"}, + // vocabulary using --> state + {regex: /USING\:/, token: "keyword", next: "vocabulary"}, + // vocabulary definition/use + {regex: /(USE\:|IN\:)(\s+)(\S+)/, token: ["keyword", null, "variable-2"]}, + // <constructors> + {regex: /<\S+>/, token: "builtin"}, + // "keywords", incl. ; t f . [ ] { } defining words + {regex: /;|t|f|if|\.|\[|\]|\{|\}|MAIN:/, token: "keyword"}, + // any id (?) + {regex: /\S+/, token: "variable"}, + + { + regex: /./, + token: null + } + ], + vocabulary: [ + {regex: /;/, token: "keyword", next: "start"}, + {regex: /\S+/, token: "variable-2"}, + { + regex: /./, + token: null + } + ], + string: [ + {regex: /(?:[^\\]|\\.)*?"/, token: "string", next: "start"}, + {regex: /.*/, token: "string"} + ], + string3: [ + {regex: /(?:[^\\]|\\.)*?"""/, token: "string", next: "start"}, + {regex: /.*/, token: "string"} + ], + stack: [ + {regex: /\)/, token: "meta", next: "start"}, + {regex: /--/, token: "meta"}, + {regex: /\S+/, token: "variable-3"}, + { + regex: /./, + token: null + } + ], + // The meta property contains global information about the mode. It + // can contain properties like lineComment, which are supported by + // all modes, and also directives like dontIndentStates, which are + // specific to simple modes. + meta: { + dontIndentStates: ["start", "vocabulary", "string", "string3", "stack"], + lineComment: [ "!", "#!" ] + } + }); + + CodeMirror.defineMIME("text/x-factor", "factor"); +}); diff --git a/mode/factor/index.html b/mode/factor/index.html new file mode 100644 index 000000000..9f1548914 --- /dev/null +++ b/mode/factor/index.html @@ -0,0 +1,77 @@ +<!doctype html> + +<title>CodeMirror: Factor mode</title> +<meta charset="utf-8"/> +<link rel=stylesheet href="../../doc/docs.css"> + +<link href='http://fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'> +<link rel="stylesheet" href="../../lib/codemirror.css"> +<script src="../../lib/codemirror.js"></script> +<script src="../../addon/mode/simple.js"></script> +<script src="factor.js"></script> +<style> +.CodeMirror { + font-family: 'Droid Sans Mono', monospace; + font-size: 14px; +} +</style> +<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="#">Factor</a> + </ul> +</div> + +<article> + +<h2>Factor mode</h2> + +<form><textarea id="code" name="code"> +! Copyright (C) 2008 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. + +! A simple time server + +USING: accessors calendar calendar.format io io.encodings.ascii +io.servers kernel threads ; +IN: time-server + +: handle-time-client ( -- ) + now timestamp>rfc822 print ; + +: <time-server> ( -- threaded-server ) + ascii <threaded-server> + "time-server" >>name + 1234 >>insecure + [ handle-time-client ] >>handler ; + +: start-time-server ( -- ) + <time-server> start-server drop ; + +MAIN: start-time-server +</textarea> + </form> + +<script> + var editor = CodeMirror.fromTextArea(document.getElementById("code"), { + lineNumbers: true, + lineWrapping: true, + indentUnit: 2, + tabSize: 2, + autofocus: true, + mode: "text/x-factor" + }); +</script> +<p/> +<p>Simple mode that handles Factor Syntax (<a href="http://en.wikipedia.org/wiki/Factor_(programming_language)">Factor on WikiPedia</a>).</p> + +<p><strong>MIME types defined:</strong> <code>text/x-factor</code>.</p> + +</article> diff --git a/mode/index.html b/mode/index.html index e39561fb7..81b9b3b44 100644 --- a/mode/index.html +++ b/mode/index.html @@ -54,6 +54,7 @@ option.</p> <li><a href="eiffel/index.html">Eiffel</a></li> <li><a href="elm/index.html">Elm</a></li> <li><a href="erlang/index.html">Erlang</a></li> + <li><a href="factor/index.html">Factor</a></li> <li><a href="forth/index.html">Forth</a></li> <li><a href="fortran/index.html">Fortran</a></li> <li><a href="mllike/index.html">F#</a></li> diff --git a/mode/meta.js b/mode/meta.js index 00e32d866..b2f30c24d 100644 --- a/mode/meta.js +++ b/mode/meta.js @@ -42,6 +42,7 @@ {name: "Embedded Javascript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"]}, {name: "Embedded Ruby", mime: "application/x-erb", mode: "htmlembedded", ext: ["erb"]}, {name: "Erlang", mime: "text/x-erlang", mode: "erlang", ext: ["erl"]}, + {name: "Factor", mime: "text/x-factor", mode: "factor", ext: ["factor"]}, {name: "Forth", mime: "text/x-forth", mode: "forth", ext: ["forth", "fth", "4th"]}, {name: "Fortran", mime: "text/x-fortran", mode: "fortran", ext: ["f", "for", "f77", "f90"]}, {name: "F#", mime: "text/x-fsharp", mode: "mllike", ext: ["fs"], alias: ["fsharp"]}, -- GitLab