12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // 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('toml', function () {
- return {
- startState: function () {
- return {
- inString: false,
- stringType: '',
- lhs: true,
- inArray: 0,
- }
- },
- token: function (stream, state) {
- //check for state changes
- if (!state.inString && (stream.peek() == '"' || stream.peek() == "'")) {
- state.stringType = stream.peek()
- stream.next() // Skip quote
- state.inString = true // Update state
- }
- if (stream.sol() && state.inArray === 0) {
- state.lhs = true
- }
- //return state
- if (state.inString) {
- while (state.inString && !stream.eol()) {
- if (stream.peek() === state.stringType) {
- stream.next() // Skip quote
- state.inString = false // Clear flag
- } else if (stream.peek() === '\\') {
- stream.next()
- stream.next()
- } else {
- stream.match(/^.[^\\\"\']*/)
- }
- }
- return state.lhs ? 'property string' : 'string' // Token style
- } else if (state.inArray && stream.peek() === ']') {
- stream.next()
- state.inArray--
- return 'bracket'
- } else if (state.lhs && stream.peek() === '[' && stream.skipTo(']')) {
- stream.next() //skip closing ]
- // array of objects has an extra open & close []
- if (stream.peek() === ']') stream.next()
- return 'atom'
- } else if (stream.peek() === '#') {
- stream.skipToEnd()
- return 'comment'
- } else if (stream.eatSpace()) {
- return null
- } else if (
- state.lhs &&
- stream.eatWhile(function (c) {
- return c != '=' && c != ' '
- })
- ) {
- return 'property'
- } else if (state.lhs && stream.peek() === '=') {
- stream.next()
- state.lhs = false
- return null
- } else if (!state.lhs && stream.match(/^\d\d\d\d[\d\-\:\.T]*Z/)) {
- return 'atom' //date
- } else if (!state.lhs && (stream.match('true') || stream.match('false'))) {
- return 'atom'
- } else if (!state.lhs && stream.peek() === '[') {
- state.inArray++
- stream.next()
- return 'bracket'
- } else if (!state.lhs && stream.match(/^\-?\d+(?:\.\d+)?/)) {
- return 'number'
- } else if (!stream.eatSpace()) {
- stream.next()
- }
- return null
- },
- }
- })
- CodeMirror.defineMIME('text/x-toml', 'toml')
- })
|