diff .cms/lib/codemirror/mode/haskell-literate/haskell-literate.js @ 0:78edf6b517a0 draft

24.10
author Coffee CMS <info@coffee-cms.ru>
date Fri, 11 Oct 2024 22:40:23 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.cms/lib/codemirror/mode/haskell-literate/haskell-literate.js	Fri Oct 11 22:40:23 2024 +0000
@@ -0,0 +1,43 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/5/LICENSE
+
+(function (mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"), require("../haskell/haskell"))
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror", "../haskell/haskell"], mod)
+  else // Plain browser env
+    mod(CodeMirror)
+})(function (CodeMirror) {
+  "use strict"
+
+  CodeMirror.defineMode("haskell-literate", function (config, parserConfig) {
+    var baseMode = CodeMirror.getMode(config, (parserConfig && parserConfig.base) || "haskell")
+
+    return {
+      startState: function () {
+        return {
+          inCode: false,
+          baseState: CodeMirror.startState(baseMode)
+        }
+      },
+      token: function (stream, state) {
+        if (stream.sol()) {
+          if (state.inCode = stream.eat(">"))
+            return "meta"
+        }
+        if (state.inCode) {
+          return baseMode.token(stream, state.baseState)
+        } else {
+          stream.skipToEnd()
+          return "comment"
+        }
+      },
+      innerMode: function (state) {
+        return state.inCode ? {state: state.baseState, mode: baseMode} : null
+      }
+    }
+  }, "haskell")
+
+  CodeMirror.defineMIME("text/x-literate-haskell", "haskell-literate")
+});