bzr branch
http://gegoxaren.bato24.eu/bzr/lenasys/trunk
20.1.1
by galaxyAbstractor
* Added an simple admin panel to the codeviewer-cmssy stuff |
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 |
});
|