dockerfile.js
76 lines
| 2.1 KiB
| application/javascript
|
JavascriptLexer
r1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others | |||
// Distributed under an MIT license: http://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); | ||||
else // Plain browser env | ||||
mod(CodeMirror); | ||||
})(function(CodeMirror) { | ||||
"use strict"; | ||||
// Collect all Dockerfile directives | ||||
var instructions = ["from", "maintainer", "run", "cmd", "expose", "env", | ||||
"add", "copy", "entrypoint", "volume", "user", | ||||
"workdir", "onbuild"], | ||||
instructionRegex = "(" + instructions.join('|') + ")", | ||||
instructionOnlyLine = new RegExp(instructionRegex + "\\s*$", "i"), | ||||
instructionWithArguments = new RegExp(instructionRegex + "(\\s+)", "i"); | ||||
CodeMirror.defineSimpleMode("dockerfile", { | ||||
start: [ | ||||
// Block comment: This is a line starting with a comment | ||||
{ | ||||
regex: /#.*$/, | ||||
token: "comment" | ||||
}, | ||||
// Highlight an instruction without any arguments (for convenience) | ||||
{ | ||||
regex: instructionOnlyLine, | ||||
token: "variable-2" | ||||
}, | ||||
// Highlight an instruction followed by arguments | ||||
{ | ||||
regex: instructionWithArguments, | ||||
token: ["variable-2", null], | ||||
next: "arguments" | ||||
}, | ||||
{ | ||||
regex: /./, | ||||
token: null | ||||
} | ||||
], | ||||
arguments: [ | ||||
{ | ||||
// Line comment without instruction arguments is an error | ||||
regex: /#.*$/, | ||||
token: "error", | ||||
next: "start" | ||||
}, | ||||
{ | ||||
regex: /[^#]+\\$/, | ||||
token: null | ||||
}, | ||||
{ | ||||
// Match everything except for the inline comment | ||||
regex: /[^#]+/, | ||||
token: null, | ||||
next: "start" | ||||
}, | ||||
{ | ||||
regex: /$/, | ||||
token: null, | ||||
next: "start" | ||||
}, | ||||
// Fail safe return to start | ||||
{ | ||||
token: null, | ||||
next: "start" | ||||
} | ||||
] | ||||
}); | ||||
CodeMirror.defineMIME("text/x-dockerfile", "dockerfile"); | ||||
}); | ||||