123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- // CodeMirror, copyright (c) by Marijn Haverbeke and others
- // Distributed under an MIT license: https://codemirror.net/LICENSE
- ;(function (mod) {
- if (typeof exports == 'object' && typeof module == 'object')
- // CommonJS
- mod(require('../../lib/codemirror'))
- else if (typeof define == 'function' && define.amd)
- // AMD
- define(['../../lib/codemirror'], mod)
- // Plain browser env
- else mod(CodeMirror)
- })(function (CodeMirror) {
- 'use strict'
- CodeMirror.defineMode('yaml', function () {
- var cons = ['true', 'false', 'on', 'off', 'yes', 'no']
- var keywordRegex = new RegExp('\\b((' + cons.join(')|(') + '))$', 'i')
- return {
- token: function (stream, state) {
- var ch = stream.peek()
- var esc = state.escaped
- state.escaped = false
- /* comments */
- if (ch == '#' && (stream.pos == 0 || /\s/.test(stream.string.charAt(stream.pos - 1)))) {
- stream.skipToEnd()
- return 'comment'
- }
- if (stream.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/)) return 'string'
- if (state.literal && stream.indentation() > state.keyCol) {
- stream.skipToEnd()
- return 'string'
- } else if (state.literal) {
- state.literal = false
- }
- if (stream.sol()) {
- state.keyCol = 0
- state.pair = false
- state.pairStart = false
- /* document start */
- if (stream.match('---')) {
- return 'def'
- }
- /* document end */
- if (stream.match('...')) {
- return 'def'
- }
- /* array list item */
- if (stream.match(/\s*-\s+/)) {
- return 'meta'
- }
- }
- /* inline pairs/lists */
- if (stream.match(/^(\{|\}|\[|\])/)) {
- if (ch == '{') state.inlinePairs++
- else if (ch == '}') state.inlinePairs--
- else if (ch == '[') state.inlineList++
- else state.inlineList--
- return 'meta'
- }
- /* list separator */
- if (state.inlineList > 0 && !esc && ch == ',') {
- stream.next()
- return 'meta'
- }
- /* pairs separator */
- if (state.inlinePairs > 0 && !esc && ch == ',') {
- state.keyCol = 0
- state.pair = false
- state.pairStart = false
- stream.next()
- return 'meta'
- }
- /* start of value of a pair */
- if (state.pairStart) {
- /* block literals */
- if (stream.match(/^\s*(\||\>)\s*/)) {
- state.literal = true
- return 'meta'
- }
- /* references */
- if (stream.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) {
- return 'variable-2'
- }
- /* numbers */
- if (state.inlinePairs == 0 && stream.match(/^\s*-?[0-9\.\,]+\s?$/)) {
- return 'number'
- }
- if (state.inlinePairs > 0 && stream.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) {
- return 'number'
- }
- /* keywords */
- if (stream.match(keywordRegex)) {
- return 'keyword'
- }
- }
- /* pairs (associative arrays) -> key */
- if (!state.pair && stream.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)) {
- state.pair = true
- state.keyCol = stream.indentation()
- return 'atom'
- }
- if (state.pair && stream.match(/^:\s*/)) {
- state.pairStart = true
- return 'meta'
- }
- /* nothing found, continue */
- state.pairStart = false
- state.escaped = ch == '\\'
- stream.next()
- return null
- },
- startState: function () {
- return {
- pair: false,
- pairStart: false,
- keyCol: 0,
- inlinePairs: 0,
- inlineList: 0,
- literal: false,
- escaped: false,
- }
- },
- lineComment: '#',
- fold: 'indent',
- }
- })
- CodeMirror.defineMIME('text/x-yaml', 'yaml')
- CodeMirror.defineMIME('text/yaml', 'yaml')
- })
|