Skip to content
Snippets Groups Projects
Commit 07bcf88d authored by Marijn Haverbeke's avatar Marijn Haverbeke
Browse files

[haskell-literate mode] Integrate

Issue #3730
parent 4955e6e0
No related branches found
No related tags found
No related merge requests found
...@@ -149,6 +149,7 @@ ...@@ -149,6 +149,7 @@
<option value="http://codemirror.net/mode/haml/haml.js">haml.js</option> <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/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/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/haxe/haxe.js">haxe.js</option>
<option value="http://codemirror.net/mode/htmlembedded/htmlembedded.js">htmlembedded.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> <option value="http://codemirror.net/mode/htmlmixed/htmlmixed.js">htmlmixed.js</option>
......
...@@ -9,30 +9,35 @@ ...@@ -9,30 +9,35 @@
else // Plain browser env else // Plain browser env
mod(CodeMirror) mod(CodeMirror)
})(function (CodeMirror) { })(function (CodeMirror) {
CodeMirror.defineMode("haskell-literate", function (config) { "use strict"
var haskellMode = CodeMirror.getMode(config, "haskell")
CodeMirror.defineMode("haskell-literate", function (config, parserConfig) {
var baseMode = CodeMirror.getMode(config, (parserConfig && parserConfig.base) || "haskell")
return { return {
startState: function () { startState: function () {
return { return {
haskellCode: false, inCode: false,
haskellState: CodeMirror.startState(haskellMode) baseState: CodeMirror.startState(baseMode)
} }
}, },
token: function (stream, state) { token: function (stream, state) {
if ((stream.sol() && stream.next() == '>') || state.haskellCode) { if (stream.sol()) {
state.haskellCode = true if (state.inCode = stream.eat(">"))
return haskellMode.token(stream, state.haskellState) return "meta"
}
if (state.inCode) {
return baseMode.token(stream, state.baseState)
} else { } else {
stream.skipToEnd() stream.skipToEnd()
return "comment" return "comment"
} }
}, },
blankLine: function (state) {
state.haskellCode = false
},
innerMode: function (state) { 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")
}) })
...@@ -269,6 +269,12 @@ Utilities ...@@ -269,6 +269,12 @@ Utilities
</textarea> </textarea>
</form> </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> <script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {mode: "haskell-literate"}); var editor = CodeMirror.fromTextArea(document.getElementById("code"), {mode: "haskell-literate"});
</script> </script>
......
...@@ -68,7 +68,7 @@ option.</p> ...@@ -68,7 +68,7 @@ option.</p>
<li><a href="groovy/index.html">Groovy</a></li> <li><a href="groovy/index.html">Groovy</a></li>
<li><a href="haml/index.html">HAML</a></li> <li><a href="haml/index.html">HAML</a></li>
<li><a href="handlebars/index.html">Handlebars</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="haxe/index.html">Haxe</a></li>
<li><a href="htmlembedded/index.html">HTML embedded</a> (JSP, ASP.NET)</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> <li><a href="htmlmixed/index.html">HTML mixed-mode</a></li>
......
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
{name: "Groovy", mime: "text/x-groovy", mode: "groovy", ext: ["groovy"]}, {name: "Groovy", mime: "text/x-groovy", mode: "groovy", ext: ["groovy"]},
{name: "HAML", mime: "text/x-haml", mode: "haml", ext: ["haml"]}, {name: "HAML", mime: "text/x-haml", mode: "haml", ext: ["haml"]},
{name: "Haskell", mime: "text/x-haskell", mode: "haskell", ext: ["hs"]}, {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: "Haxe", mime: "text/x-haxe", mode: "haxe", ext: ["hx"]},
{name: "HXML", mime: "text/x-hxml", mode: "haxe", ext: ["hxml"]}, {name: "HXML", mime: "text/x-hxml", mode: "haxe", ext: ["hxml"]},
{name: "ASP.NET", mime: "application/x-aspx", mode: "htmlembedded", ext: ["aspx"], alias: ["asp", "aspx"]}, {name: "ASP.NET", mime: "application/x-aspx", mode: "htmlembedded", ext: ["aspx"], alias: ["asp", "aspx"]},
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment