// CodeMirror, copyright © by Marijn Haverbeke and others // Distributed under an MIT license: codemirror.net/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")

});