datagram 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. data/.env.sample +7 -0
  2. data/.gitignore +20 -0
  3. data/.rbenv-version +1 -0
  4. data/Gemfile +12 -0
  5. data/LICENSE.txt +22 -0
  6. data/Procfile +1 -0
  7. data/README.md +29 -0
  8. data/Rakefile +1 -0
  9. data/config.ru +5 -0
  10. data/datagram.gemspec +23 -0
  11. data/db/migrate/1_create_queries.rb +9 -0
  12. data/db/migrate/2_add_name_to_queries.rb +5 -0
  13. data/lib/datagram/version.rb +3 -0
  14. data/lib/datagram.rb +135 -0
  15. data/lib/views/application.coffee +222 -0
  16. data/lib/views/index.haml +47 -0
  17. data/lib/views/layout.haml +17 -0
  18. data/lib/views/style.sass +179 -0
  19. data/public/ace/ace.js +15209 -0
  20. data/public/ace/ext-elastic_tabstops_lite.js +301 -0
  21. data/public/ace/ext-emmet.js +253 -0
  22. data/public/ace/ext-searchbox.js +441 -0
  23. data/public/ace/ext-spellcheck.js +67 -0
  24. data/public/ace/ext-static_highlight.js +96 -0
  25. data/public/ace/ext-textarea.js +492 -0
  26. data/public/ace/ext-whitespace.js +204 -0
  27. data/public/ace/keybinding-emacs.js +962 -0
  28. data/public/ace/keybinding-vim.js +1704 -0
  29. data/public/ace/mode-abap.js +260 -0
  30. data/public/ace/mode-asciidoc.js +372 -0
  31. data/public/ace/mode-c9search.js +182 -0
  32. data/public/ace/mode-c_cpp.js +737 -0
  33. data/public/ace/mode-clojure.js +299 -0
  34. data/public/ace/mode-coffee.js +426 -0
  35. data/public/ace/mode-coldfusion.js +1753 -0
  36. data/public/ace/mode-csharp.js +612 -0
  37. data/public/ace/mode-css.js +773 -0
  38. data/public/ace/mode-curly.js +1950 -0
  39. data/public/ace/mode-dart.js +945 -0
  40. data/public/ace/mode-diff.js +166 -0
  41. data/public/ace/mode-django.js +1969 -0
  42. data/public/ace/mode-dot.js +320 -0
  43. data/public/ace/mode-ftl.js +907 -0
  44. data/public/ace/mode-glsl.js +810 -0
  45. data/public/ace/mode-golang.js +632 -0
  46. data/public/ace/mode-groovy.js +1037 -0
  47. data/public/ace/mode-haml.js +487 -0
  48. data/public/ace/mode-haxe.js +609 -0
  49. data/public/ace/mode-html.js +1881 -0
  50. data/public/ace/mode-jade.js +1951 -0
  51. data/public/ace/mode-java.js +996 -0
  52. data/public/ace/mode-javascript.js +876 -0
  53. data/public/ace/mode-json.js +578 -0
  54. data/public/ace/mode-jsp.js +1351 -0
  55. data/public/ace/mode-jsx.js +635 -0
  56. data/public/ace/mode-latex.js +189 -0
  57. data/public/ace/mode-less.js +807 -0
  58. data/public/ace/mode-liquid.js +862 -0
  59. data/public/ace/mode-lisp.js +138 -0
  60. data/public/ace/mode-livescript.js +288 -0
  61. data/public/ace/mode-logiql.js +664 -0
  62. data/public/ace/mode-lsl.js +828 -0
  63. data/public/ace/mode-lua.js +455 -0
  64. data/public/ace/mode-luapage.js +2340 -0
  65. data/public/ace/mode-lucene.js +64 -0
  66. data/public/ace/mode-makefile.js +313 -0
  67. data/public/ace/mode-markdown.js +2280 -0
  68. data/public/ace/mode-mushcode.js +704 -0
  69. data/public/ace/mode-mushcode_high_rules.js +569 -0
  70. data/public/ace/mode-objectivec.js +659 -0
  71. data/public/ace/mode-ocaml.js +443 -0
  72. data/public/ace/mode-pascal.js +233 -0
  73. data/public/ace/mode-perl.js +316 -0
  74. data/public/ace/mode-pgsql.js +908 -0
  75. data/public/ace/mode-php.js +2291 -0
  76. data/public/ace/mode-powershell.js +618 -0
  77. data/public/ace/mode-python.js +264 -0
  78. data/public/ace/mode-r.js +404 -0
  79. data/public/ace/mode-rdoc.js +184 -0
  80. data/public/ace/mode-rhtml.js +2168 -0
  81. data/public/ace/mode-ruby.js +431 -0
  82. data/public/ace/mode-sass.js +442 -0
  83. data/public/ace/mode-scad.js +670 -0
  84. data/public/ace/mode-scala.js +1025 -0
  85. data/public/ace/mode-scheme.js +144 -0
  86. data/public/ace/mode-scss.js +832 -0
  87. data/public/ace/mode-sh.js +204 -0
  88. data/public/ace/mode-sql.js +118 -0
  89. data/public/ace/mode-stylus.js +483 -0
  90. data/public/ace/mode-svg.js +1442 -0
  91. data/public/ace/mode-tcl.js +319 -0
  92. data/public/ace/mode-tex.js +166 -0
  93. data/public/ace/mode-text.js +0 -0
  94. data/public/ace/mode-textile.js +170 -0
  95. data/public/ace/mode-tmsnippet.js +200 -0
  96. data/public/ace/mode-toml.js +180 -0
  97. data/public/ace/mode-typescript.js +961 -0
  98. data/public/ace/mode-vbscript.js +281 -0
  99. data/public/ace/mode-velocity.js +962 -0
  100. data/public/ace/mode-xml.js +789 -0
  101. data/public/ace/mode-xquery.js +2750 -0
  102. data/public/ace/mode-yaml.js +289 -0
  103. data/public/ace/theme-ambiance.js +202 -0
  104. data/public/ace/theme-chaos.js +182 -0
  105. data/public/ace/theme-chrome.js +161 -0
  106. data/public/ace/theme-clouds.js +135 -0
  107. data/public/ace/theme-clouds_midnight.js +136 -0
  108. data/public/ace/theme-cobalt.js +150 -0
  109. data/public/ace/theme-crimson_editor.js +154 -0
  110. data/public/ace/theme-dawn.js +146 -0
  111. data/public/ace/theme-dreamweaver.js +173 -0
  112. data/public/ace/theme-eclipse.js +122 -0
  113. data/public/ace/theme-github.js +136 -0
  114. data/public/ace/theme-idle_fingers.js +136 -0
  115. data/public/ace/theme-kr.js +143 -0
  116. data/public/ace/theme-merbivore.js +135 -0
  117. data/public/ace/theme-merbivore_soft.js +136 -0
  118. data/public/ace/theme-mono_industrial.js +148 -0
  119. data/public/ace/theme-monokai.js +140 -0
  120. data/public/ace/theme-pastel_on_dark.js +148 -0
  121. data/public/ace/theme-solarized_dark.js +128 -0
  122. data/public/ace/theme-solarized_light.js +131 -0
  123. data/public/ace/theme-terminal.js +154 -0
  124. data/public/ace/theme-textmate.js +0 -0
  125. data/public/ace/theme-tomorrow.js +147 -0
  126. data/public/ace/theme-tomorrow_night.js +147 -0
  127. data/public/ace/theme-tomorrow_night_blue.js +145 -0
  128. data/public/ace/theme-tomorrow_night_bright.js +147 -0
  129. data/public/ace/theme-tomorrow_night_eighties.js +144 -0
  130. data/public/ace/theme-twilight.js +147 -0
  131. data/public/ace/theme-vibrant_ink.js +131 -0
  132. data/public/ace/theme-xcode.js +125 -0
  133. data/public/ace/worker-coffee.js +7091 -0
  134. data/public/ace/worker-css.js +8289 -0
  135. data/public/ace/worker-javascript.js +6496 -0
  136. data/public/ace/worker-json.js +2305 -0
  137. data/public/ace/worker-lua.js +3313 -0
  138. data/public/ace/worker-php.js +6743 -0
  139. data/public/ace/worker-xquery.js +21897 -0
  140. data/public/font/FontAwesome.otf +0 -0
  141. data/public/font/fontawesome-webfont.eot +0 -0
  142. data/public/font/fontawesome-webfont.svg +284 -0
  143. data/public/font/fontawesome-webfont.ttf +0 -0
  144. data/public/font/fontawesome-webfont.woff +0 -0
  145. data/public/font-awesome.css +540 -0
  146. data/public/jquery.js +9597 -0
  147. data/script/migrate.sh +2 -0
  148. metadata +242 -0
@@ -0,0 +1,260 @@
1
+ /* ***** BEGIN LICENSE BLOCK *****
2
+ * Distributed under the BSD license:
3
+ *
4
+ * Copyright (c) 2010, Ajax.org B.V.
5
+ * All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions are met:
9
+ * * Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ * * Redistributions in binary form must reproduce the above copyright
12
+ * notice, this list of conditions and the following disclaimer in the
13
+ * documentation and/or other materials provided with the distribution.
14
+ * * Neither the name of Ajax.org B.V. nor the
15
+ * names of its contributors may be used to endorse or promote products
16
+ * derived from this software without specific prior written permission.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ *
29
+ * ***** END LICENSE BLOCK ***** */
30
+
31
+ define('ace/mode/abap', ['require', 'exports', 'module' , 'ace/tokenizer', 'ace/mode/abap_highlight_rules', 'ace/mode/folding/coffee', 'ace/range', 'ace/mode/text', 'ace/lib/oop'], function(require, exports, module) {
32
+
33
+
34
+ var Tokenizer = require("../tokenizer").Tokenizer;
35
+ var Rules = require("./abap_highlight_rules").AbapHighlightRules;
36
+ var FoldMode = require("./folding/coffee").FoldMode;
37
+ var Range = require("../range").Range;
38
+ var TextMode = require("./text").Mode;
39
+ var oop = require("../lib/oop");
40
+
41
+ function Mode() {
42
+ this.$tokenizer = new Tokenizer(new Rules().getRules());
43
+ this.foldingRules = new FoldMode();
44
+ }
45
+
46
+ oop.inherits(Mode, TextMode);
47
+
48
+ (function() {
49
+
50
+ this.getNextLineIndent = function(state, line, tab) {
51
+ var indent = this.$getIndent(line);
52
+ return indent;
53
+ };
54
+
55
+ this.toggleCommentLines = function(state, doc, startRow, endRow){
56
+ var range = new Range(0, 0, 0, 0);
57
+ for (var i = startRow; i <= endRow; ++i) {
58
+ var line = doc.getLine(i);
59
+ if (hereComment.test(line))
60
+ continue;
61
+
62
+ if (commentLine.test(line))
63
+ line = line.replace(commentLine, '$1');
64
+ else
65
+ line = line.replace(indentation, '$&#');
66
+
67
+ range.end.row = range.start.row = i;
68
+ range.end.column = line.length + 1;
69
+ doc.replace(range, line);
70
+ }
71
+ };
72
+
73
+ }).call(Mode.prototype);
74
+
75
+ exports.Mode = Mode;
76
+
77
+ });
78
+
79
+ define('ace/mode/abap_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
80
+
81
+
82
+ var oop = require("../lib/oop");
83
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
84
+
85
+ var AbapHighlightRules = function() {
86
+
87
+ var keywordMapper = this.createKeywordMapper({
88
+ "variable.language": "this",
89
+ "keyword":
90
+ "ADD ALIAS ALIASES ASSERT ASSIGN ASSIGNING AT BACK" +
91
+ " CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY" +
92
+ " DATA DEFINE DEFINITION DEFERRED DELETE DESCRIBE DETAIL DIVIDE DO" +
93
+ " ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT" +
94
+ " FETCH FIELDS FORM FORMAT FREE FROM FUNCTION" +
95
+ " GENERATE GET" +
96
+ " HIDE" +
97
+ " IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION" +
98
+ " LEAVE LIKE LINE LOAD LOCAL LOOP" +
99
+ " MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY" +
100
+ " ON OVERLAY OPTIONAL OTHERS" +
101
+ " PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT" +
102
+ " RAISE RANGES READ RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURNING ROLLBACK" +
103
+ " SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS" +
104
+ " TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES" +
105
+ " UNASSIGN ULINE UNPACK UPDATE" +
106
+ " WHEN WHILE WINDOW WRITE" +
107
+ " OCCURS STRUCTURE OBJECT PROPERTY" +
108
+ " CASTING APPEND RAISING VALUE COLOR" +
109
+ " CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT" +
110
+ " ID NUMBER FOR TITLE OUTPUT" +
111
+ " WITH EXIT USING" +
112
+ " INTO WHERE GROUP BY HAVING ORDER BY SINGLE" +
113
+ " APPENDING CORRESPONDING FIELDS OF TABLE" +
114
+ " LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING" +
115
+ " EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN",
116
+ "constant.language":
117
+ "TRUE FALSE NULL SPACE",
118
+ "support.type":
119
+ "c n i p f d t x string xstring decfloat16 decfloat34",
120
+ "keyword.operator":
121
+ "abs sign ceil floor trunc frac acos asin atan cos sin tan" +
122
+ " abapOperator cosh sinh tanh exp log log10 sqrt" +
123
+ " strlen xstrlen charlen numofchar dbmaxlen lines"
124
+ }, "text", true, " ");
125
+
126
+ var compoundKeywords = "WITH\\W+(?:HEADER\\W+LINE|FRAME|KEY)|NO\\W+STANDARD\\W+PAGE\\W+HEADING|"+
127
+ "EXIT\\W+FROM\\W+STEP\\W+LOOP|BEGIN\\W+OF\\W+(?:BLOCK|LINE)|BEGIN\\W+OF|"+
128
+ "END\\W+OF\\W+(?:BLOCK|LINE)|END\\W+OF|NO\\W+INTERVALS|"+
129
+ "RESPECTING\\W+BLANKS|SEPARATED\\W+BY|USING\\W+(?:EDIT\\W+MASK)|"+
130
+ "WHERE\\W+(?:LINE)|RADIOBUTTON\\W+GROUP|REF\\W+TO|"+
131
+ "(?:PUBLIC|PRIVATE|PROTECTED)(?:\\W+SECTION)?|DELETING\\W+(?:TRAILING|LEADING)"+
132
+ "(?:ALL\\W+OCCURRENCES)|(?:FIRST|LAST)\\W+OCCURRENCE|INHERITING\\W+FROM|"+
133
+ "LINE-COUNT|ADD-CORRESPONDING|AUTHORITY-CHECK|BREAK-POINT|CLASS-DATA|CLASS-METHODS|"+
134
+ "CLASS-METHOD|DIVIDE-CORRESPONDING|EDITOR-CALL|END-OF-DEFINITION|END-OF-PAGE|END-OF-SELECTION|"+
135
+ "FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|"+
136
+ "NEW-PAGE|NEW-SECTION|PRINT-CONTROL|RP-PROVIDE-FROM-LAST|SELECT-OPTIONS|SELECTION-SCREEN|"+
137
+ "START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYNTAX-TRACE|TOP-OF-PAGE|TYPE-POOL|"+
138
+ "TYPE-POOLS|LINE-SIZE|LINE-COUNT|MESSAGE-ID|DISPLAY-MODE|READ(?:-ONLY)?|"+
139
+ "IS\\W+(?:NOT\\W+)?(?:ASSIGNED|BOUND|INITIAL|SUPPLIED)";
140
+
141
+ this.$rules = {
142
+ "start" : [
143
+ {token : "string", regex : "`", next : "string"},
144
+ {token : "string", regex : "'", next : "qstring"},
145
+ {token : "doc.comment", regex : /^\*.+/},
146
+ {token : "comment", regex : /".+$/},
147
+ {token : "invalid", regex: "\\.{2,}"},
148
+ {token : "keyword.operator", regex: /\W[\-+\%=<>*]\W|\*\*|[~:,\.&$]|->*?|=>/},
149
+ {token : "paren.lparen", regex : "[\\[({]"},
150
+ {token : "paren.rparen", regex : "[\\])}]"},
151
+ {token : "constant.numeric", regex: "[+-]?\\d+\\b"},
152
+ {token : "variable.parameter", regex : /sy|pa?\d\d\d\d\|t\d\d\d\.|innnn/},
153
+ {token : "keyword", regex : compoundKeywords},
154
+ {token : "variable.parameter", regex : /\w+-\w+(?:-\w+)*/},
155
+ {token : keywordMapper, regex : "\\b\\w+\\b"},
156
+ {caseInsensitive: true}
157
+ ],
158
+ "qstring" : [
159
+ {token : "constant.language.escape", regex : "''"},
160
+ {token : "string", regex : "'", next : "start"},
161
+ {defaultToken : "string"}
162
+ ],
163
+ "string" : [
164
+ {token : "constant.language.escape", regex : "``"},
165
+ {token : "string", regex : "`", next : "start"},
166
+ {defaultToken : "string"}
167
+ ]
168
+ }
169
+ };
170
+ oop.inherits(AbapHighlightRules, TextHighlightRules);
171
+
172
+ exports.AbapHighlightRules = AbapHighlightRules;
173
+ });
174
+
175
+ define('ace/mode/folding/coffee', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
176
+
177
+
178
+ var oop = require("../../lib/oop");
179
+ var BaseFoldMode = require("./fold_mode").FoldMode;
180
+ var Range = require("../../range").Range;
181
+
182
+ var FoldMode = exports.FoldMode = function() {};
183
+ oop.inherits(FoldMode, BaseFoldMode);
184
+
185
+ (function() {
186
+
187
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
188
+ var range = this.indentationBlock(session, row);
189
+ if (range)
190
+ return range;
191
+
192
+ var re = /\S/;
193
+ var line = session.getLine(row);
194
+ var startLevel = line.search(re);
195
+ if (startLevel == -1 || line[startLevel] != "#")
196
+ return;
197
+
198
+ var startColumn = line.length;
199
+ var maxRow = session.getLength();
200
+ var startRow = row;
201
+ var endRow = row;
202
+
203
+ while (++row < maxRow) {
204
+ line = session.getLine(row);
205
+ var level = line.search(re);
206
+
207
+ if (level == -1)
208
+ continue;
209
+
210
+ if (line[level] != "#")
211
+ break;
212
+
213
+ endRow = row;
214
+ }
215
+
216
+ if (endRow > startRow) {
217
+ var endColumn = session.getLine(endRow).length;
218
+ return new Range(startRow, startColumn, endRow, endColumn);
219
+ }
220
+ };
221
+ this.getFoldWidget = function(session, foldStyle, row) {
222
+ var line = session.getLine(row);
223
+ var indent = line.search(/\S/);
224
+ var next = session.getLine(row + 1);
225
+ var prev = session.getLine(row - 1);
226
+ var prevIndent = prev.search(/\S/);
227
+ var nextIndent = next.search(/\S/);
228
+
229
+ if (indent == -1) {
230
+ session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
231
+ return "";
232
+ }
233
+ if (prevIndent == -1) {
234
+ if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
235
+ session.foldWidgets[row - 1] = "";
236
+ session.foldWidgets[row + 1] = "";
237
+ return "start";
238
+ }
239
+ } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
240
+ if (session.getLine(row - 2).search(/\S/) == -1) {
241
+ session.foldWidgets[row - 1] = "start";
242
+ session.foldWidgets[row + 1] = "";
243
+ return "";
244
+ }
245
+ }
246
+
247
+ if (prevIndent!= -1 && prevIndent < indent)
248
+ session.foldWidgets[row - 1] = "start";
249
+ else
250
+ session.foldWidgets[row - 1] = "";
251
+
252
+ if (indent < nextIndent)
253
+ return "start";
254
+ else
255
+ return "";
256
+ };
257
+
258
+ }).call(FoldMode.prototype);
259
+
260
+ });
@@ -0,0 +1,372 @@
1
+ /* ***** BEGIN LICENSE BLOCK *****
2
+ * Distributed under the BSD license:
3
+ *
4
+ * Copyright (c) 2010, Ajax.org B.V.
5
+ * All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions are met:
9
+ * * Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ * * Redistributions in binary form must reproduce the above copyright
12
+ * notice, this list of conditions and the following disclaimer in the
13
+ * documentation and/or other materials provided with the distribution.
14
+ * * Neither the name of Ajax.org B.V. nor the
15
+ * names of its contributors may be used to endorse or promote products
16
+ * derived from this software without specific prior written permission.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ *
29
+ * ***** END LICENSE BLOCK ***** */
30
+
31
+ define('ace/mode/asciidoc', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/asciidoc_highlight_rules', 'ace/mode/folding/asciidoc'], function(require, exports, module) {
32
+
33
+
34
+ var oop = require("../lib/oop");
35
+ var TextMode = require("./text").Mode;
36
+ var Tokenizer = require("../tokenizer").Tokenizer;
37
+ var AsciidocHighlightRules = require("./asciidoc_highlight_rules").AsciidocHighlightRules;
38
+ var AsciidocFoldMode = require("./folding/asciidoc").FoldMode;
39
+
40
+ var Mode = function() {
41
+ var highlighter = new AsciidocHighlightRules();
42
+
43
+ this.$tokenizer = new Tokenizer(highlighter.getRules());
44
+ this.foldingRules = new AsciidocFoldMode();
45
+ };
46
+ oop.inherits(Mode, TextMode);
47
+
48
+ (function() {
49
+ this.getNextLineIndent = function(state, line, tab) {
50
+ if (state == "listblock") {
51
+ var match = /^((?:.+)?)([-+*][ ]+)/.exec(line);
52
+ if (match) {
53
+ return new Array(match[1].length + 1).join(" ") + match[2];
54
+ } else {
55
+ return "";
56
+ }
57
+ } else {
58
+ return this.$getIndent(line);
59
+ }
60
+ };
61
+ }).call(Mode.prototype);
62
+
63
+ exports.Mode = Mode;
64
+ });
65
+
66
+ define('ace/mode/asciidoc_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
67
+
68
+
69
+ var oop = require("../lib/oop");
70
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
71
+
72
+ var AsciidocHighlightRules = function() {
73
+ var identifierRe = "[a-zA-Z\u00a1-\uffff]+\\b";
74
+
75
+ this.$rules = {
76
+ "start": [
77
+ {token: "empty", regex: /$/},
78
+ {token: "literal", regex: /^\.{4,}\s*$/, next: "listingBlock"},
79
+ {token: "literal", regex: /^-{4,}\s*$/, next: "literalBlock"},
80
+ {token: "string", regex: /^\+{4,}\s*$/, next: "passthroughBlock"},
81
+ {token: "keyword", regex: /^={4,}\s*$/},
82
+ {token: "text", regex: /^\s*$/},
83
+ {token: "empty", regex: "", next: "dissallowDelimitedBlock"}
84
+ ],
85
+
86
+ "dissallowDelimitedBlock": [
87
+ {include: "paragraphEnd"},
88
+ {token: "comment", regex: '^//.+$'},
89
+ {token: "keyword", regex: "^(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION):"},
90
+
91
+ {include: "listStart"},
92
+ {token: "literal", regex: /^\s+.+$/, next: "indentedBlock"},
93
+ {token: "empty", regex: "", next: "text"}
94
+ ],
95
+
96
+ "paragraphEnd": [
97
+ {token: "doc.comment", regex: /^\/{4,}\s*$/, next: "commentBlock"},
98
+ {token: "tableBlock", regex: /^\s*[|!]=+\s*$/, next: "tableBlock"},
99
+ {token: "keyword", regex: /^(?:--|''')\s*$/, next: "start"},
100
+ {token: "option", regex: /^\[.*\]\s*$/, next: "start"},
101
+ {token: "pageBreak", regex: /^>{3,}$/, next: "start"},
102
+ {token: "literal", regex: /^\.{4,}\s*$/, next: "listingBlock"},
103
+ {token: "titleUnderline", regex: /^(?:={2,}|-{2,}|~{2,}|\^{2,}|\+{2,})\s*$/, next: "start"},
104
+ {token: "singleLineTitle", regex: /^={1,5}\s+\S.*$/, next: "start"},
105
+
106
+ {token: "otherBlock", regex: /^(?:\*{2,}|_{2,})\s*$/, next: "start"},
107
+ {token: "optionalTitle", regex: /^\.[^.\s].+$/, next: "start"}
108
+ ],
109
+
110
+ "listStart": [
111
+ {token: "keyword", regex: /^\s*(?:\d+\.|[a-zA-Z]\.|[ixvmIXVM]+\)|\*{1,5}|-|\.{1,5})\s/, next: "listText"},
112
+ {token: "meta.tag", regex: /^.+(?::{2,4}|;;)(?: |$)/, next: "listText"},
113
+ {token: "support.function.list.callout", regex: /^(?:<\d+>|\d+>|>) /, next: "text"},
114
+ {token: "keyword", regex: /^\+\s*$/, next: "start"}
115
+ ],
116
+
117
+ "text": [
118
+ {token: ["link", "variable.language"], regex: /((?:https?:\/\/|ftp:\/\/|file:\/\/|mailto:|callto:)[^\s\[]+)(\[.*?\])/},
119
+ {token: "link", regex: /(?:https?:\/\/|ftp:\/\/|file:\/\/|mailto:|callto:)[^\s\[]+/},
120
+ {token: "link", regex: /\b[\w\.\/\-]+@[\w\.\/\-]+\b/},
121
+ {include: "macros"},
122
+ {include: "paragraphEnd"},
123
+ {token: "literal", regex:/\+{3,}/, next:"smallPassthrough"},
124
+ {token: "escape", regex: /\((?:C|TM|R)\)|\.{3}|->|<-|=>|<=|&#(?:\d+|x[a-fA-F\d]+);|(?: |^)--(?=\s+\S)/},
125
+ {token: "escape", regex: /\\[_*'`+#]|\\{2}[_*'`+#]{2}/},
126
+ {token: "keyword", regex: /\s\+$/},
127
+ {token: "text", regex: identifierRe},
128
+ {token: ["keyword", "string", "keyword"],
129
+ regex: /(<<[\w\d\-$]+,)(.*?)(>>|$)/},
130
+ {token: "keyword", regex: /<<[\w\d\-$]+,?|>>/},
131
+ {token: "constant.character", regex: /\({2,3}.*?\){2,3}/},
132
+ {token: "keyword", regex: /\[\[.+?\]\]/},
133
+ {token: "support", regex: /^\[{3}[\w\d =\-]+\]{3}/},
134
+
135
+ {include: "quotes"},
136
+ {token: "empty", regex: /^\s*$/, next: "start"}
137
+ ],
138
+
139
+ "listText": [
140
+ {include: "listStart"},
141
+ {include: "text"}
142
+ ],
143
+
144
+ "indentedBlock": [
145
+ {token: "literal", regex: /^[\s\w].+$/, next: "indentedBlock"},
146
+ {token: "literal", regex: "", next: "start"}
147
+ ],
148
+
149
+ "listingBlock": [
150
+ {token: "literal", regex: /^\.{4,}\s*$/, next: "dissallowDelimitedBlock"},
151
+ {token: "constant.numeric", regex: '<\\d+>'},
152
+ {token: "literal", regex: '[^<]+'},
153
+ {token: "literal", regex: '<'}
154
+ ],
155
+ "literalBlock": [
156
+ {token: "literal", regex: /^-{4,}\s*$/, next: "dissallowDelimitedBlock"},
157
+ {token: "constant.numeric", regex: '<\\d+>'},
158
+ {token: "literal", regex: '[^<]+'},
159
+ {token: "literal", regex: '<'}
160
+ ],
161
+ "passthroughBlock": [
162
+ {token: "literal", regex: /^\+{4,}\s*$/, next: "dissallowDelimitedBlock"},
163
+ {token: "literal", regex: identifierRe + "|\\d+"},
164
+ {include: "macros"},
165
+ {token: "literal", regex: "."}
166
+ ],
167
+
168
+ "smallPassthrough": [
169
+ {token: "literal", regex: /[+]{3,}/, next: "dissallowDelimitedBlock"},
170
+ {token: "literal", regex: /^\s*$/, next: "dissallowDelimitedBlock"},
171
+ {token: "literal", regex: identifierRe + "|\\d+"},
172
+ {include: "macros"}
173
+ ],
174
+
175
+ "commentBlock": [
176
+ {token: "doc.comment", regex: /^\/{4,}\s*$/, next: "dissallowDelimitedBlock"},
177
+ {token: "doc.comment", regex: '^.*$'}
178
+ ],
179
+ "tableBlock": [
180
+ {token: "tableBlock", regex: /^\s*\|={3,}\s*$/, next: "dissallowDelimitedBlock"},
181
+ {token: "tableBlock", regex: /^\s*!={3,}\s*$/, next: "innerTableBlock"},
182
+ {token: "tableBlock", regex: /\|/},
183
+ {include: "text", noEscape: true}
184
+ ],
185
+ "innerTableBlock": [
186
+ {token: "tableBlock", regex: /^\s*!={3,}\s*$/, next: "tableBlock"},
187
+ {token: "tableBlock", regex: /^\s*|={3,}\s*$/, next: "dissallowDelimitedBlock"},
188
+ {token: "tableBlock", regex: /\!/}
189
+ ],
190
+ "macros": [
191
+ {token: "macro", regex: /{[\w\-$]+}/},
192
+ {token: ["text", "string", "text", "constant.character", "text"], regex: /({)([\w\-$]+)(:)?(.+)?(})/},
193
+ {token: ["text", "markup.list.macro", "keyword", "string"], regex: /(\w+)(footnote(?:ref)?::?)([^\s\[]+)?(\[.*?\])?/},
194
+ {token: ["markup.list.macro", "keyword", "string"], regex: /([a-zA-Z\-][\w\.\/\-]*::?)([^\s\[]+)(\[.*?\])?/},
195
+ {token: ["markup.list.macro", "keyword"], regex: /([a-zA-Z\-][\w\.\/\-]+::?)(\[.*?\])/},
196
+ {token: "keyword", regex: /^:.+?:(?= |$)/}
197
+ ],
198
+
199
+ "quotes": [
200
+ {token: "string.italic", regex: /__[^_\s].*?__/},
201
+ {token: "string.italic", regex: quoteRule("_")},
202
+
203
+ {token: "keyword.bold", regex: /\*\*[^*\s].*?\*\*/},
204
+ {token: "keyword.bold", regex: quoteRule("\\*")},
205
+
206
+ {token: "literal", regex: quoteRule("\\+")},
207
+ {token: "literal", regex: /\+\+[^+\s].*?\+\+/},
208
+ {token: "literal", regex: /\$\$.+?\$\$/},
209
+ {token: "literal", regex: quoteRule("`")},
210
+
211
+ {token: "keyword", regex: quoteRule("^")},
212
+ {token: "keyword", regex: quoteRule("~")},
213
+ {token: "keyword", regex: /##?/},
214
+ {token: "keyword", regex: /(?:\B|^)``|\b''/}
215
+ ]
216
+
217
+ };
218
+
219
+ function quoteRule(ch) {
220
+ var prefix = /\w/.test(ch) ? "\\b" : "(?:\\B|^)";
221
+ return prefix + ch + "[^" + ch + "].*?" + ch + "(?![\\w*])";
222
+ }
223
+
224
+ var tokenMap = {
225
+ macro: "constant.character",
226
+ tableBlock: "doc.comment",
227
+ titleUnderline: "markup.heading",
228
+ singleLineTitle: "markup.heading",
229
+ pageBreak: "string",
230
+ option: "string.regexp",
231
+ otherBlock: "markup.list",
232
+ literal: "support.function",
233
+ optionalTitle: "constant.numeric",
234
+ escape: "constant.language.escape",
235
+ link: "markup.underline.list"
236
+ };
237
+
238
+ for (var state in this.$rules) {
239
+ var stateRules = this.$rules[state];
240
+ for (var i = stateRules.length; i--; ) {
241
+ var rule = stateRules[i];
242
+ if (rule.include || typeof rule == "string") {
243
+ var args = [i, 1].concat(this.$rules[rule.include || rule]);
244
+ if (rule.noEscape) {
245
+ args = args.filter(function(x) {
246
+ return !x.next;
247
+ });
248
+ }
249
+ stateRules.splice.apply(stateRules, args);
250
+ } else if (rule.token in tokenMap) {
251
+ rule.token = tokenMap[rule.token];
252
+ }
253
+ }
254
+ }
255
+ };
256
+ oop.inherits(AsciidocHighlightRules, TextHighlightRules);
257
+
258
+ exports.AsciidocHighlightRules = AsciidocHighlightRules;
259
+ });
260
+
261
+ define('ace/mode/folding/asciidoc', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
262
+
263
+
264
+ var oop = require("../../lib/oop");
265
+ var BaseFoldMode = require("./fold_mode").FoldMode;
266
+ var Range = require("../../range").Range;
267
+
268
+ var FoldMode = exports.FoldMode = function() {};
269
+ oop.inherits(FoldMode, BaseFoldMode);
270
+
271
+ (function() {
272
+ this.foldingStartMarker = /^(?:\|={10,}|[\.\/=\-~^+]{4,}\s*$|={1,5} )/;
273
+ this.singleLineHeadingRe = /^={1,5}(?=\s+\S)/;
274
+
275
+ this.getFoldWidget = function(session, foldStyle, row) {
276
+ var line = session.getLine(row);
277
+ if (!this.foldingStartMarker.test(line))
278
+ return ""
279
+
280
+ if (line[0] == "=") {
281
+ if (this.singleLineHeadingRe.test(line))
282
+ return "start";
283
+ if (session.getLine(row - 1).length != session.getLine(row).length)
284
+ return "";
285
+ return "start";
286
+ }
287
+ if (session.bgTokenizer.getState(row) == "dissallowDelimitedBlock")
288
+ return "end";
289
+ return "start";
290
+ };
291
+
292
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
293
+ var line = session.getLine(row);
294
+ var startColumn = line.length;
295
+ var maxRow = session.getLength();
296
+ var startRow = row;
297
+ var endRow = row;
298
+ if (!line.match(this.foldingStartMarker))
299
+ return;
300
+
301
+ var token;
302
+ function getTokenType(row) {
303
+ token = session.getTokens(row)[0];
304
+ return token && token.type;
305
+ }
306
+
307
+ var levels = ["=","-","~","^","+"];
308
+ var heading = "markup.heading";
309
+ var singleLineHeadingRe = this.singleLineHeadingRe;
310
+ function getLevel() {
311
+ var match = token.value.match(singleLineHeadingRe);
312
+ if (match)
313
+ return match[0].length;
314
+ var level = levels.indexOf(token.value[0]) + 1;
315
+ if (level == 1) {
316
+ if (session.getLine(row - 1).length != session.getLine(row).length)
317
+ return Infinity;
318
+ }
319
+ return level;
320
+ }
321
+
322
+ if (getTokenType(row) == heading) {
323
+ var startHeadingLevel = getLevel();
324
+ while (++row < maxRow) {
325
+ if (getTokenType(row) != heading)
326
+ continue;
327
+ var level = getLevel();
328
+ if (level <= startHeadingLevel)
329
+ break;
330
+ }
331
+
332
+ var isSingleLineHeading = token && token.value.match(this.singleLineHeadingRe);
333
+ endRow = isSingleLineHeading ? row - 1 : row - 2;
334
+
335
+ if (endRow > startRow) {
336
+ while (endRow > startRow && (!getTokenType(endRow) || token.value[0] == "["))
337
+ endRow--;
338
+ }
339
+
340
+ if (endRow > startRow) {
341
+ var endColumn = session.getLine(endRow).length;
342
+ return new Range(startRow, startColumn, endRow, endColumn);
343
+ }
344
+ } else {
345
+ var state = session.bgTokenizer.getState(row);
346
+ if (state == "dissallowDelimitedBlock") {
347
+ while (row -- > 0) {
348
+ if (session.bgTokenizer.getState(row).lastIndexOf("Block") == -1)
349
+ break;
350
+ }
351
+ endRow = row + 1;
352
+ if (endRow < startRow) {
353
+ var endColumn = session.getLine(row).length;
354
+ return new Range(endRow, 5, startRow, startColumn - 5);
355
+ }
356
+ } else {
357
+ while (++row < maxRow) {
358
+ if (session.bgTokenizer.getState(row) == "dissallowDelimitedBlock")
359
+ break;
360
+ }
361
+ endRow = row;
362
+ if (endRow > startRow) {
363
+ var endColumn = session.getLine(row).length;
364
+ return new Range(startRow, 5, endRow, endColumn - 5);
365
+ }
366
+ }
367
+ }
368
+ };
369
+
370
+ }).call(FoldMode.prototype);
371
+
372
+ });