| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | // CodeMirror, copyright (c) by Marijn Haverbeke and others
 | 
					
						
							| 
									
										
										
										
											2022-10-15 12:22:09 +02:00
										 |  |  | // Distributed under an MIT license: https://codemirror.net/5/LICENSE
 | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | (function(mod) { | 
					
						
							|  |  |  |   if (typeof exports == "object" && typeof module == "object") // CommonJS
 | 
					
						
							|  |  |  |     mod(require("../../lib/codemirror")); | 
					
						
							|  |  |  |   else if (typeof define == "function" && define.amd) // AMD
 | 
					
						
							|  |  |  |     define(["../../lib/codemirror"], mod); | 
					
						
							|  |  |  |   else // Plain browser env
 | 
					
						
							|  |  |  |     mod(CodeMirror); | 
					
						
							|  |  |  | })(function(CodeMirror) { | 
					
						
							|  |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CodeMirror.defineMode("properties", function() { | 
					
						
							|  |  |  |   return { | 
					
						
							|  |  |  |     token: function(stream, state) { | 
					
						
							|  |  |  |       var sol = stream.sol() || state.afterSection; | 
					
						
							|  |  |  |       var eol = stream.eol(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       state.afterSection = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (sol) { | 
					
						
							|  |  |  |         if (state.nextMultiline) { | 
					
						
							|  |  |  |           state.inMultiline = true; | 
					
						
							|  |  |  |           state.nextMultiline = false; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |           state.position = "def"; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (eol && ! state.nextMultiline) { | 
					
						
							|  |  |  |         state.inMultiline = false; | 
					
						
							|  |  |  |         state.position = "def"; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (sol) { | 
					
						
							|  |  |  |         while(stream.eatSpace()) {} | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       var ch = stream.next(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (sol && (ch === "#" || ch === "!" || ch === ";")) { | 
					
						
							|  |  |  |         state.position = "comment"; | 
					
						
							|  |  |  |         stream.skipToEnd(); | 
					
						
							|  |  |  |         return "comment"; | 
					
						
							|  |  |  |       } else if (sol && ch === "[") { | 
					
						
							|  |  |  |         state.afterSection = true; | 
					
						
							|  |  |  |         stream.skipTo("]"); stream.eat("]"); | 
					
						
							|  |  |  |         return "header"; | 
					
						
							|  |  |  |       } else if (ch === "=" || ch === ":") { | 
					
						
							|  |  |  |         state.position = "quote"; | 
					
						
							|  |  |  |         return null; | 
					
						
							|  |  |  |       } else if (ch === "\\" && state.position === "quote") { | 
					
						
							|  |  |  |         if (stream.eol()) {  // end of line?
 | 
					
						
							|  |  |  |           // Multiline value
 | 
					
						
							|  |  |  |           state.nextMultiline = true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       return state.position; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     startState: function() { | 
					
						
							|  |  |  |       return { | 
					
						
							|  |  |  |         position : "def",       // Current position, "def", "quote" or "comment"
 | 
					
						
							|  |  |  |         nextMultiline : false,  // Is the next line multiline value
 | 
					
						
							|  |  |  |         inMultiline : false,    // Is the current line a multiline value
 | 
					
						
							|  |  |  |         afterSection : false    // Did we just open a section
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CodeMirror.defineMIME("text/x-properties", "properties"); | 
					
						
							|  |  |  | CodeMirror.defineMIME("text/x-ini", "properties"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }); |