diff --git a/doc/compress.html b/doc/compress.html index 1f1d0f0764b0aae45cc9dd7416f203296603ad95..25379782906f300c610689bc11e2f6779a26daa1 100644 --- a/doc/compress.html +++ b/doc/compress.html @@ -149,6 +149,7 @@ <option value="http://codemirror.net/mode/haml/haml.js">haml.js</option> <option value="http://codemirror.net/mode/handlebars/handlebars.js">handlebars.js</option> <option value="http://codemirror.net/mode/haskell/haskell.js">haskell.js</option> + <option value="http://codemirror.net/mode/haskell-literate/haskell-literate.js">haskell-literate.js</option> <option value="http://codemirror.net/mode/haxe/haxe.js">haxe.js</option> <option value="http://codemirror.net/mode/htmlembedded/htmlembedded.js">htmlembedded.js</option> <option value="http://codemirror.net/mode/htmlmixed/htmlmixed.js">htmlmixed.js</option> diff --git a/mode/haskell-literate/haskell-literate.js b/mode/haskell-literate/haskell-literate.js index f50d2fb10084d12f710d0525d2435475e31e2a45..f51e96b6047895242f62ece567beb501e91b8589 100644 --- a/mode/haskell-literate/haskell-literate.js +++ b/mode/haskell-literate/haskell-literate.js @@ -9,30 +9,35 @@ else // Plain browser env mod(CodeMirror) })(function (CodeMirror) { - CodeMirror.defineMode("haskell-literate", function (config) { - var haskellMode = CodeMirror.getMode(config, "haskell") + "use strict" + + CodeMirror.defineMode("haskell-literate", function (config, parserConfig) { + var baseMode = CodeMirror.getMode(config, (parserConfig && parserConfig.base) || "haskell") + return { startState: function () { return { - haskellCode: false, - haskellState: CodeMirror.startState(haskellMode) + inCode: false, + baseState: CodeMirror.startState(baseMode) } }, token: function (stream, state) { - if ((stream.sol() && stream.next() == '>') || state.haskellCode) { - state.haskellCode = true - return haskellMode.token(stream, state.haskellState) + if (stream.sol()) { + if (state.inCode = stream.eat(">")) + return "meta" + } + if (state.inCode) { + return baseMode.token(stream, state.baseState) } else { stream.skipToEnd() return "comment" } }, - blankLine: function (state) { - state.haskellCode = false - }, innerMode: function (state) { - return {state: state.haskellState, mode: haskellMode}; + return state.inCode ? {state: state.baseState, mode: baseMode} : null } } }) + + CodeMirror.defineMIME("text/x-literate-haskell", "haskell-literate") }) diff --git a/mode/haskell-literate/index.html b/mode/haskell-literate/index.html index 051724776b803a1507d59bb4fb80549d8e4f5c01..8c9bc60d151f34108c63517a22616dad9e22f365 100644 --- a/mode/haskell-literate/index.html +++ b/mode/haskell-literate/index.html @@ -269,6 +269,12 @@ Utilities </textarea> </form> + <p><strong>MIME types + defined:</strong> <code>text/x-literate-haskell</code>.</p> + + <p>Parser configuration parameters recognized: <code>base</code> to + set the base mode (defaults to <code>"haskell"</code>).</p> + <script> var editor = CodeMirror.fromTextArea(document.getElementById("code"), {mode: "haskell-literate"}); </script> diff --git a/mode/index.html b/mode/index.html index 072b89bdaaa8c73b43ef7db76cc1fb82216f2ce1..2a159ec53f0c41df3b0c9723a9731c66b7e1ed1a 100644 --- a/mode/index.html +++ b/mode/index.html @@ -68,7 +68,7 @@ option.</p> <li><a href="groovy/index.html">Groovy</a></li> <li><a href="haml/index.html">HAML</a></li> <li><a href="handlebars/index.html">Handlebars</a></li> - <li><a href="haskell/index.html">Haskell</a></li> + <li><a href="haskell/index.html">Haskell</a> (<a href="haskell-literate/index.html">Literate</a>)</li> <li><a href="haxe/index.html">Haxe</a></li> <li><a href="htmlembedded/index.html">HTML embedded</a> (JSP, ASP.NET)</li> <li><a href="htmlmixed/index.html">HTML mixed-mode</a></li> diff --git a/mode/meta.js b/mode/meta.js index 69e2a3ef697cd7ec27ddeb8967e9397ed6948e7f..e4b97360c368e91bcc5a5fc84ce232b88736f3ea 100644 --- a/mode/meta.js +++ b/mode/meta.js @@ -56,6 +56,7 @@ {name: "Groovy", mime: "text/x-groovy", mode: "groovy", ext: ["groovy"]}, {name: "HAML", mime: "text/x-haml", mode: "haml", ext: ["haml"]}, {name: "Haskell", mime: "text/x-haskell", mode: "haskell", ext: ["hs"]}, + {name: "Haskell (Literate)", mime: "text/x-literate-haskell", mode: "haskell-literate", ext: ["lhs"]}, {name: "Haxe", mime: "text/x-haxe", mode: "haxe", ext: ["hx"]}, {name: "HXML", mime: "text/x-hxml", mode: "haxe", ext: ["hxml"]}, {name: "ASP.NET", mime: "application/x-aspx", mode: "htmlembedded", ext: ["aspx"], alias: ["asp", "aspx"]},