123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- // 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'))
- else if (typeof define == 'function' && define.amd)
- // AMD
- define(['../../lib/codemirror', '../../addon/mode/simple'], mod)
- // Plain browser env
- else mod(CodeMirror)
- })(function (CodeMirror) {
- 'use strict'
- var from = 'from'
- var fromRegex = new RegExp('^(\\s*)\\b(' + from + ')\\b', 'i')
- var shells = ['run', 'cmd', 'entrypoint', 'shell']
- var shellsAsArrayRegex = new RegExp('^(\\s*)(' + shells.join('|') + ')(\\s+\\[)', 'i')
- var expose = 'expose'
- var exposeRegex = new RegExp('^(\\s*)(' + expose + ')(\\s+)', 'i')
- var others = ['arg', 'from', 'maintainer', 'label', 'env', 'add', 'copy', 'volume', 'user', 'workdir', 'onbuild', 'stopsignal', 'healthcheck', 'shell']
- // Collect all Dockerfile directives
- var instructions = [from, expose].concat(shells).concat(others),
- instructionRegex = '(' + instructions.join('|') + ')',
- instructionOnlyLine = new RegExp('^(\\s*)' + instructionRegex + '(\\s*)(#.*)?$', 'i'),
- instructionWithArguments = new RegExp('^(\\s*)' + instructionRegex + '(\\s+)', 'i')
- CodeMirror.defineSimpleMode('dockerfile', {
- start: [
- // Block comment: This is a line starting with a comment
- {
- regex: /^\s*#.*$/,
- sol: true,
- token: 'comment',
- },
- {
- regex: fromRegex,
- token: [null, 'keyword'],
- sol: true,
- next: 'from',
- },
- // Highlight an instruction without any arguments (for convenience)
- {
- regex: instructionOnlyLine,
- token: [null, 'keyword', null, 'error'],
- sol: true,
- },
- {
- regex: shellsAsArrayRegex,
- token: [null, 'keyword', null],
- sol: true,
- next: 'array',
- },
- {
- regex: exposeRegex,
- token: [null, 'keyword', null],
- sol: true,
- next: 'expose',
- },
- // Highlight an instruction followed by arguments
- {
- regex: instructionWithArguments,
- token: [null, 'keyword', null],
- sol: true,
- next: 'arguments',
- },
- {
- regex: /./,
- token: null,
- },
- ],
- from: [
- {
- regex: /\s*$/,
- token: null,
- next: 'start',
- },
- {
- // Line comment without instruction arguments is an error
- regex: /(\s*)(#.*)$/,
- token: [null, 'error'],
- next: 'start',
- },
- {
- regex: /(\s*\S+\s+)(as)/i,
- token: [null, 'keyword'],
- next: 'start',
- },
- // Fail safe return to start
- {
- token: null,
- next: 'start',
- },
- ],
- single: [
- {
- regex: /(?:[^\\']|\\.)/,
- token: 'string',
- },
- {
- regex: /'/,
- token: 'string',
- pop: true,
- },
- ],
- double: [
- {
- regex: /(?:[^\\"]|\\.)/,
- token: 'string',
- },
- {
- regex: /"/,
- token: 'string',
- pop: true,
- },
- ],
- array: [
- {
- regex: /\]/,
- token: null,
- next: 'start',
- },
- {
- regex: /"(?:[^\\"]|\\.)*"?/,
- token: 'string',
- },
- ],
- expose: [
- {
- regex: /\d+$/,
- token: 'number',
- next: 'start',
- },
- {
- regex: /[^\d]+$/,
- token: null,
- next: 'start',
- },
- {
- regex: /\d+/,
- token: 'number',
- },
- {
- regex: /[^\d]+/,
- token: null,
- },
- // Fail safe return to start
- {
- token: null,
- next: 'start',
- },
- ],
- arguments: [
- {
- regex: /^\s*#.*$/,
- sol: true,
- token: 'comment',
- },
- {
- regex: /"(?:[^\\"]|\\.)*"?$/,
- token: 'string',
- next: 'start',
- },
- {
- regex: /"/,
- token: 'string',
- push: 'double',
- },
- {
- regex: /'(?:[^\\']|\\.)*'?$/,
- token: 'string',
- next: 'start',
- },
- {
- regex: /'/,
- token: 'string',
- push: 'single',
- },
- {
- regex: /[^#"']+[\\`]$/,
- token: null,
- },
- {
- regex: /[^#"']+$/,
- token: null,
- next: 'start',
- },
- {
- regex: /[^#"']+/,
- token: null,
- },
- // Fail safe return to start
- {
- token: null,
- next: 'start',
- },
- ],
- meta: {
- lineComment: '#',
- },
- })
- CodeMirror.defineMIME('text/x-dockerfile', 'dockerfile')
- })
|