12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- // 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'), require('../../addon/mode/simple'), require('../../addon/mode/multiplex'))
- else if (typeof define == 'function' && define.amd)
- // AMD
- define(['../../lib/codemirror', '../../addon/mode/simple', '../../addon/mode/multiplex'], mod)
- // Plain browser env
- else mod(CodeMirror)
- })(function (CodeMirror) {
- 'use strict'
- CodeMirror.defineSimpleMode('handlebars-tags', {
- start: [
- { regex: /\{\{\{/, push: 'handlebars_raw', token: 'tag' },
- { regex: /\{\{!--/, push: 'dash_comment', token: 'comment' },
- { regex: /\{\{!/, push: 'comment', token: 'comment' },
- { regex: /\{\{/, push: 'handlebars', token: 'tag' },
- ],
- handlebars_raw: [{ regex: /\}\}\}/, pop: true, token: 'tag' }],
- handlebars: [
- { regex: /\}\}/, pop: true, token: 'tag' },
- // Double and single quotes
- { regex: /"(?:[^\\"]|\\.)*"?/, token: 'string' },
- { regex: /'(?:[^\\']|\\.)*'?/, token: 'string' },
- // Handlebars keywords
- { regex: />|[#\/]([A-Za-z_]\w*)/, token: 'keyword' },
- { regex: /(?:else|this)\b/, token: 'keyword' },
- // Numeral
- { regex: /\d+/i, token: 'number' },
- // Atoms like = and .
- { regex: /=|~|@|true|false/, token: 'atom' },
- // Paths
- { regex: /(?:\.\.\/)*(?:[A-Za-z_][\w\.]*)+/, token: 'variable-2' },
- ],
- dash_comment: [
- { regex: /--\}\}/, pop: true, token: 'comment' },
- // Commented code
- { regex: /./, token: 'comment' },
- ],
- comment: [
- { regex: /\}\}/, pop: true, token: 'comment' },
- { regex: /./, token: 'comment' },
- ],
- meta: {
- blockCommentStart: '{{--',
- blockCommentEnd: '--}}',
- },
- })
- CodeMirror.defineMode('handlebars', function (config, parserConfig) {
- var handlebars = CodeMirror.getMode(config, 'handlebars-tags')
- if (!parserConfig || !parserConfig.base) return handlebars
- return CodeMirror.multiplexingMode(CodeMirror.getMode(config, parserConfig.base), { open: '{{', close: /\}\}\}?/, mode: handlebars, parseDelimiters: true })
- })
- CodeMirror.defineMIME('text/x-handlebars-template', 'handlebars')
- })
|