snippets.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. define(function(require, exports, module) {
  2. "use strict";
  3. var oop = require("../lib/oop");
  4. var TextMode = require("./text").Mode;
  5. var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
  6. var SnippetHighlightRules = function() {
  7. var builtins = "SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|" +
  8. "LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME";
  9. this.$rules = {
  10. "start" : [
  11. {token:"constant.language.escape", regex: /\\[\$}`\\]/},
  12. {token:"keyword", regex: "\\$(?:TM_)?(?:" + builtins + ")\\b"},
  13. {token:"variable", regex: "\\$\\w+"},
  14. {onMatch: function(value, state, stack) {
  15. if (stack[1])
  16. stack[1]++;
  17. else
  18. stack.unshift(state, 1);
  19. return this.tokenName;
  20. }, tokenName: "markup.list", regex: "\\${", next: "varDecl"},
  21. {onMatch: function(value, state, stack) {
  22. if (!stack[1])
  23. return "text";
  24. stack[1]--;
  25. if (!stack[1])
  26. stack.splice(0,2);
  27. return this.tokenName;
  28. }, tokenName: "markup.list", regex: "}"},
  29. {token: "doc.comment", regex:/^\${2}-{5,}$/}
  30. ],
  31. "varDecl" : [
  32. {regex: /\d+\b/, token: "constant.numeric"},
  33. {token:"keyword", regex: "(?:TM_)?(?:" + builtins + ")\\b"},
  34. {token:"variable", regex: "\\w+"},
  35. {regex: /:/, token: "punctuation.operator", next: "start"},
  36. {regex: /\//, token: "string.regex", next: "regexp"},
  37. {regex: "", next: "start"}
  38. ],
  39. "regexp" : [
  40. {regex: /\\./, token: "escape"},
  41. {regex: /\[/, token: "regex.start", next: "charClass"},
  42. {regex: "/", token: "string.regex", next: "format"},
  43. //{"default": "string.regex"},
  44. {"token": "string.regex", regex:"."}
  45. ],
  46. charClass : [
  47. {regex: "\\.", token: "escape"},
  48. {regex: "\\]", token: "regex.end", next: "regexp"},
  49. {"token": "string.regex", regex:"."}
  50. ],
  51. "format" : [
  52. {regex: /\\[ulULE]/, token: "keyword"},
  53. {regex: /\$\d+/, token: "variable"},
  54. {regex: "/[gim]*:?", token: "string.regex", next: "start"},
  55. // {"default": "string"},
  56. {"token": "string", regex:"."}
  57. ]
  58. };
  59. };
  60. oop.inherits(SnippetHighlightRules, TextHighlightRules);
  61. exports.SnippetHighlightRules = SnippetHighlightRules;
  62. var SnippetGroupHighlightRules = function() {
  63. this.$rules = {
  64. "start" : [
  65. {token: "text", regex: "^\\t", next: "sn-start"},
  66. {token:"invalid", regex: /^ \s*/},
  67. {token:"comment", regex: /^#.*/},
  68. {token:"constant.language.escape", regex: "^regex ", next: "regex"},
  69. {token:"constant.language.escape", regex: "^(trigger|endTrigger|name|snippet|guard|endGuard|tabTrigger|key)\\b"}
  70. ],
  71. "regex" : [
  72. {token:"text", regex: "\\."},
  73. {token:"keyword", regex: "/"},
  74. {token:"empty", regex: "$", next: "start"}
  75. ]
  76. };
  77. this.embedRules(SnippetHighlightRules, "sn-", [
  78. {token: "text", regex: "^\\t", next: "sn-start"},
  79. {onMatch: function(value, state, stack) {
  80. stack.splice(stack.length);
  81. return this.tokenName;
  82. }, tokenName: "text", regex: "^(?!\t)", next: "start"}
  83. ])
  84. };
  85. oop.inherits(SnippetGroupHighlightRules, TextHighlightRules);
  86. exports.SnippetGroupHighlightRules = SnippetGroupHighlightRules;
  87. var FoldMode = require("./folding/coffee").FoldMode;
  88. var Mode = function() {
  89. this.HighlightRules = SnippetGroupHighlightRules;
  90. this.foldingRules = new FoldMode();
  91. };
  92. oop.inherits(Mode, TextMode);
  93. (function() {
  94. this.$indentWithTabs = true;
  95. this.lineCommentStart = "#";
  96. this.$id = "ace/mode/snippets";
  97. }).call(Mode.prototype);
  98. exports.Mode = Mode;
  99. });