diff --git a/mode/dockerfile/dockerfile.js b/mode/dockerfile/dockerfile.js new file mode 100644 index 0000000000..9444878699 --- /dev/null +++ b/mode/dockerfile/dockerfile.js @@ -0,0 +1,91 @@ +// 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", + next: "start" + }, + // Highlight an instruction without any arguments (for convenience) + { + regex: instructionOnlyLine, + token: "variable-2", + next: "start" + }, + // Highlight an instruction followed by arguments + { + regex: instructionWithArguments, + token: ["variable-2", null], + next: "arguments" + }, + // Fail-safe return to start + { + token: null, + next: "start" + } + ], + arguments: [ + { + // Line comment without instruction arguments is an error + regex: /#.*$/, + token: "error", + next: "start" + }, + { + regex: /[^#]+\\$/, + token: null, + next: "arguments" + }, + { + // Match everything except for the inline comment + regex: /[^#]+/, + token: null, + next: "lineComment" + }, + { + regex: /$/, + token: null, + next: "start" + }, + // Fail safe return to start + { + token: null, + next: "start" + } + ], + lineComment: [ + { + regex: /#.*$/, + token: "comment" + }, + // Fail safe return to start + { + token: null, + next: "start" + } + ] + }); + + CodeMirror.defineMIME("text/x-dockerfile", "dockerfile"); +}); diff --git a/mode/dockerfile/index.html b/mode/dockerfile/index.html new file mode 100644 index 0000000000..564f6c52c1 --- /dev/null +++ b/mode/dockerfile/index.html @@ -0,0 +1,72 @@ + + +CodeMirror: Dockerfile mode + + + + + + + + + + +
+

Dockerfile mode

+
+ + + +

Dockerfile syntac highlighting for CodeMirror.

+ +

MIME types defined: text/x-dockerfile

+