GPQAPP

Форк
0
72 строки · 2.4 Кб
1
// CodeMirror, copyright (c) by Marijn Haverbeke and others
2
// Distributed under an MIT license: https://codemirror.net/LICENSE
3

4
(function (mod) {
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
6
    mod(require("../../lib/codemirror"), require("../yaml/yaml"))
7
  else if (typeof define == "function" && define.amd) // AMD
8
    define(["../../lib/codemirror", "../yaml/yaml"], mod)
9
  else // Plain browser env
10
    mod(CodeMirror)
11
})(function (CodeMirror) {
12

13
  var START = 0, FRONTMATTER = 1, BODY = 2
14

15
  // a mixed mode for Markdown text with an optional YAML front matter
16
  CodeMirror.defineMode("yaml-frontmatter", function (config, parserConfig) {
17
    var yamlMode = CodeMirror.getMode(config, "yaml")
18
    var innerMode = CodeMirror.getMode(config, parserConfig && parserConfig.base || "gfm")
19

20
    function localMode(state) {
21
      return state.state == FRONTMATTER ? {mode: yamlMode, state: state.yaml} : {mode: innerMode, state: state.inner}
22
    }
23

24
    return {
25
      startState: function () {
26
        return {
27
          state: START,
28
          yaml: null,
29
          inner: CodeMirror.startState(innerMode)
30
        }
31
      },
32
      copyState: function (state) {
33
        return {
34
          state: state.state,
35
          yaml: state.yaml && CodeMirror.copyState(yamlMode, state.yaml),
36
          inner: CodeMirror.copyState(innerMode, state.inner)
37
        }
38
      },
39
      token: function (stream, state) {
40
        if (state.state == START) {
41
          if (stream.match('---', false)) {
42
            state.state = FRONTMATTER
43
            state.yaml = CodeMirror.startState(yamlMode)
44
            return yamlMode.token(stream, state.yaml)
45
          } else {
46
            state.state = BODY
47
            return innerMode.token(stream, state.inner)
48
          }
49
        } else if (state.state == FRONTMATTER) {
50
          var end = stream.sol() && stream.match(/(---|\.\.\.)/, false)
51
          var style = yamlMode.token(stream, state.yaml)
52
          if (end) {
53
            state.state = BODY
54
            state.yaml = null
55
          }
56
          return style
57
        } else {
58
          return innerMode.token(stream, state.inner)
59
        }
60
      },
61
      innerMode: localMode,
62
      indent: function(state, a, b) {
63
        var m = localMode(state)
64
        return m.mode.indent ? m.mode.indent(m.state, a, b) : CodeMirror.Pass
65
      },
66
      blankLine: function (state) {
67
        var m = localMode(state)
68
        if (m.mode.blankLine) return m.mode.blankLine(m.state)
69
      }
70
    }
71
  })
72
});
73

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.