mode-makefile.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. ace.define("ace/mode/sh_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
  2. "use strict";
  3. var oop = require("../lib/oop");
  4. var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
  5. var reservedKeywords = exports.reservedKeywords = (
  6. '!|{|}|case|do|done|elif|else|'+
  7. 'esac|fi|for|if|in|then|until|while|'+
  8. '&|;|export|local|read|typeset|unset|'+
  9. 'elif|select|set'
  10. );
  11. var languageConstructs = exports.languageConstructs = (
  12. '[|]|alias|bg|bind|break|builtin|'+
  13. 'cd|command|compgen|complete|continue|'+
  14. 'dirs|disown|echo|enable|eval|exec|'+
  15. 'exit|fc|fg|getopts|hash|help|history|'+
  16. 'jobs|kill|let|logout|popd|printf|pushd|'+
  17. 'pwd|return|set|shift|shopt|source|'+
  18. 'suspend|test|times|trap|type|ulimit|'+
  19. 'umask|unalias|wait'
  20. );
  21. var ShHighlightRules = function() {
  22. var keywordMapper = this.createKeywordMapper({
  23. "keyword": reservedKeywords,
  24. "support.function.builtin": languageConstructs,
  25. "invalid.deprecated": "debugger"
  26. }, "identifier");
  27. var integer = "(?:(?:[1-9]\\d*)|(?:0))";
  28. var fraction = "(?:\\.\\d+)";
  29. var intPart = "(?:\\d+)";
  30. var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
  31. var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + ")";
  32. var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
  33. var fileDescriptor = "(?:&" + intPart + ")";
  34. var variableName = "[a-zA-Z_][a-zA-Z0-9_]*";
  35. var variable = "(?:(?:\\$" + variableName + ")|(?:" + variableName + "=))";
  36. var builtinVariable = "(?:\\$(?:SHLVL|\\$|\\!|\\?))";
  37. var func = "(?:" + variableName + "\\s*\\(\\))";
  38. this.$rules = {
  39. "start" : [{
  40. token : "constant",
  41. regex : /\\./
  42. }, {
  43. token : ["text", "comment"],
  44. regex : /(^|\s)(#.*)$/
  45. }, {
  46. token : "string",
  47. regex : '"',
  48. push : [{
  49. token : "constant.language.escape",
  50. regex : /\\(?:[$abeEfnrtv\\'"]|x[a-fA-F\d]{1,2}|u[a-fA-F\d]{4}([a-fA-F\d]{4})?|c.|\d{1,3})/
  51. }, {
  52. token : "constant",
  53. regex : /\$\w+/
  54. }, {
  55. token : "string",
  56. regex : '"',
  57. next: "pop"
  58. }, {
  59. defaultToken: "string"
  60. }]
  61. }, {
  62. token : "variable.language",
  63. regex : builtinVariable
  64. }, {
  65. token : "variable",
  66. regex : variable
  67. }, {
  68. token : "support.function",
  69. regex : func
  70. }, {
  71. token : "support.function",
  72. regex : fileDescriptor
  73. }, {
  74. token : "string", // ' string
  75. start : "'", end : "'"
  76. }, {
  77. token : "constant.numeric", // float
  78. regex : floatNumber
  79. }, {
  80. token : "constant.numeric", // integer
  81. regex : integer + "\\b"
  82. }, {
  83. token : keywordMapper,
  84. regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
  85. }, {
  86. token : "keyword.operator",
  87. regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!="
  88. }, {
  89. token : "paren.lparen",
  90. regex : "[\\[\\(\\{]"
  91. }, {
  92. token : "paren.rparen",
  93. regex : "[\\]\\)\\}]"
  94. } ]
  95. };
  96. this.normalizeRules();
  97. };
  98. oop.inherits(ShHighlightRules, TextHighlightRules);
  99. exports.ShHighlightRules = ShHighlightRules;
  100. });
  101. ace.define("ace/mode/makefile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/sh_highlight_rules"], function(require, exports, module) {
  102. "use strict";
  103. var oop = require("../lib/oop");
  104. var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
  105. var ShHighlightFile = require("./sh_highlight_rules");
  106. var MakefileHighlightRules = function() {
  107. var keywordMapper = this.createKeywordMapper({
  108. "keyword": ShHighlightFile.reservedKeywords,
  109. "support.function.builtin": ShHighlightFile.languageConstructs,
  110. "invalid.deprecated": "debugger"
  111. }, "string");
  112. this.$rules =
  113. {
  114. "start": [
  115. {
  116. token: "string.interpolated.backtick.makefile",
  117. regex: "`",
  118. next: "shell-start"
  119. },
  120. {
  121. token: "punctuation.definition.comment.makefile",
  122. regex: /#(?=.)/,
  123. next: "comment"
  124. },
  125. {
  126. token: [ "keyword.control.makefile"],
  127. regex: "^(?:\\s*\\b)(\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\b)"
  128. },
  129. {// ^([^\t ]+(\s[^\t ]+)*:(?!\=))\s*.*
  130. token: ["entity.name.function.makefile", "text"],
  131. regex: "^([^\\t ]+(?:\\s[^\\t ]+)*:)(\\s*.*)"
  132. }
  133. ],
  134. "comment": [
  135. {
  136. token : "punctuation.definition.comment.makefile",
  137. regex : /.+\\/
  138. },
  139. {
  140. token : "punctuation.definition.comment.makefile",
  141. regex : ".+",
  142. next : "start"
  143. }
  144. ],
  145. "shell-start": [
  146. {
  147. token: keywordMapper,
  148. regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
  149. },
  150. {
  151. token: "string",
  152. regex : "\\w+"
  153. },
  154. {
  155. token : "string.interpolated.backtick.makefile",
  156. regex : "`",
  157. next : "start"
  158. }
  159. ]
  160. }
  161. };
  162. oop.inherits(MakefileHighlightRules, TextHighlightRules);
  163. exports.MakefileHighlightRules = MakefileHighlightRules;
  164. });
  165. ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) {
  166. "use strict";
  167. var oop = require("../../lib/oop");
  168. var BaseFoldMode = require("./fold_mode").FoldMode;
  169. var Range = require("../../range").Range;
  170. var FoldMode = exports.FoldMode = function() {};
  171. oop.inherits(FoldMode, BaseFoldMode);
  172. (function() {
  173. this.getFoldWidgetRange = function(session, foldStyle, row) {
  174. var range = this.indentationBlock(session, row);
  175. if (range)
  176. return range;
  177. var re = /\S/;
  178. var line = session.getLine(row);
  179. var startLevel = line.search(re);
  180. if (startLevel == -1 || line[startLevel] != "#")
  181. return;
  182. var startColumn = line.length;
  183. var maxRow = session.getLength();
  184. var startRow = row;
  185. var endRow = row;
  186. while (++row < maxRow) {
  187. line = session.getLine(row);
  188. var level = line.search(re);
  189. if (level == -1)
  190. continue;
  191. if (line[level] != "#")
  192. break;
  193. endRow = row;
  194. }
  195. if (endRow > startRow) {
  196. var endColumn = session.getLine(endRow).length;
  197. return new Range(startRow, startColumn, endRow, endColumn);
  198. }
  199. };
  200. this.getFoldWidget = function(session, foldStyle, row) {
  201. var line = session.getLine(row);
  202. var indent = line.search(/\S/);
  203. var next = session.getLine(row + 1);
  204. var prev = session.getLine(row - 1);
  205. var prevIndent = prev.search(/\S/);
  206. var nextIndent = next.search(/\S/);
  207. if (indent == -1) {
  208. session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
  209. return "";
  210. }
  211. if (prevIndent == -1) {
  212. if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
  213. session.foldWidgets[row - 1] = "";
  214. session.foldWidgets[row + 1] = "";
  215. return "start";
  216. }
  217. } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
  218. if (session.getLine(row - 2).search(/\S/) == -1) {
  219. session.foldWidgets[row - 1] = "start";
  220. session.foldWidgets[row + 1] = "";
  221. return "";
  222. }
  223. }
  224. if (prevIndent!= -1 && prevIndent < indent)
  225. session.foldWidgets[row - 1] = "start";
  226. else
  227. session.foldWidgets[row - 1] = "";
  228. if (indent < nextIndent)
  229. return "start";
  230. else
  231. return "";
  232. };
  233. }).call(FoldMode.prototype);
  234. });
  235. ace.define("ace/mode/makefile",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/makefile_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) {
  236. "use strict";
  237. var oop = require("../lib/oop");
  238. var TextMode = require("./text").Mode;
  239. var MakefileHighlightRules = require("./makefile_highlight_rules").MakefileHighlightRules;
  240. var FoldMode = require("./folding/coffee").FoldMode;
  241. var Mode = function() {
  242. this.HighlightRules = MakefileHighlightRules;
  243. this.foldingRules = new FoldMode();
  244. };
  245. oop.inherits(Mode, TextMode);
  246. (function() {
  247. this.lineCommentStart = "#";
  248. this.$indentWithTabs = true;
  249. this.$id = "ace/mode/makefile";
  250. }).call(Mode.prototype);
  251. exports.Mode = Mode;
  252. });