/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk

« back to all changes in this revision

Viewing changes to js/ace/mode-abap.js

  • Committer: Gustav Hatvigsson
  • Date: 2013-05-31 06:15:46 UTC
  • mfrom: (90.1.20 lenasys2)
  • Revision ID: gustav.hartvigsson@gmail.com-20130531061546-vj8z28sq375kvghq
Merged Jonsson:s changes:
Fixed the layout on cms index so the arrows and dots marks expanded objects.
Fixed so the course content is sorted by course occasion and not by name

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
});