all repos — NoPaste @ 3e3c433f026c49e04d0efa0f0f39fc688ed32bb1

Resurrected - The PussTheCat.org fork of NoPaste

scripts/CodeMirror/mode/properties/properties.js (view raw)

 1// CodeMirror, copyright (c) by Marijn Haverbeke and others
 2// Distributed under an MIT license: https://codemirror.net/LICENSE
 3
 4(function(mod) {
 5  if (typeof exports == "object" && typeof module == "object") // CommonJS
 6    mod(require("../../lib/codemirror"));
 7  else if (typeof define == "function" && define.amd) // AMD
 8    define(["../../lib/codemirror"], mod);
 9  else // Plain browser env
10    mod(CodeMirror);
11})(function(CodeMirror) {
12"use strict";
13
14CodeMirror.defineMode("properties", function() {
15  return {
16    token: function(stream, state) {
17      var sol = stream.sol() || state.afterSection;
18      var eol = stream.eol();
19
20      state.afterSection = false;
21
22      if (sol) {
23        if (state.nextMultiline) {
24          state.inMultiline = true;
25          state.nextMultiline = false;
26        } else {
27          state.position = "def";
28        }
29      }
30
31      if (eol && ! state.nextMultiline) {
32        state.inMultiline = false;
33        state.position = "def";
34      }
35
36      if (sol) {
37        while(stream.eatSpace()) {}
38      }
39
40      var ch = stream.next();
41
42      if (sol && (ch === "#" || ch === "!" || ch === ";")) {
43        state.position = "comment";
44        stream.skipToEnd();
45        return "comment";
46      } else if (sol && ch === "[") {
47        state.afterSection = true;
48        stream.skipTo("]"); stream.eat("]");
49        return "header";
50      } else if (ch === "=" || ch === ":") {
51        state.position = "quote";
52        return null;
53      } else if (ch === "\\" && state.position === "quote") {
54        if (stream.eol()) {  // end of line?
55          // Multiline value
56          state.nextMultiline = true;
57        }
58      }
59
60      return state.position;
61    },
62
63    startState: function() {
64      return {
65        position : "def",       // Current position, "def", "quote" or "comment"
66        nextMultiline : false,  // Is the next line multiline value
67        inMultiline : false,    // Is the current line a multiline value
68        afterSection : false    // Did we just open a section
69      };
70    }
71
72  };
73});
74
75CodeMirror.defineMIME("text/x-properties", "properties");
76CodeMirror.defineMIME("text/x-ini", "properties");
77
78});