/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 codeigniter/js/ace/mode-lsl.js

  • Committer: Gustav Hatvigsson
  • Date: 2013-05-30 12:02:31 UTC
  • mfrom: (85.1.28 lenasys)
  • Revision ID: gustav.hartvigsson@gmail.com-20130530120231-ttqgqjqw2w8enn7g
Merged Ohlsons changes:
added function to get ssn and name for the registrationspages in the user model.
added the registrationpage for students.
edited the registration page for instructors
edited the css for both the registrationpages
minor fix to registration css

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/lsl', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/lsl_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], 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 lslHighlightRules = require("./lsl_highlight_rules").lslHighlightRules;
 
38
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
 
39
var Range = require("../range").Range;
 
40
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
 
41
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
 
42
 
 
43
var Mode = function() {
 
44
    this.$tokenizer = new Tokenizer(new lslHighlightRules().getRules());
 
45
    this.$outdent = new MatchingBraceOutdent();
 
46
    this.$behaviour = new CstyleBehaviour();
 
47
    this.foldingRules = new CStyleFoldMode();
 
48
};
 
49
oop.inherits(Mode, TextMode);
 
50
 
 
51
(function() {
 
52
 
 
53
    this.toggleCommentLines = function(state, doc, startRow, endRow) {
 
54
        var outdent = true;
 
55
        var re = /^(\s*)\/\//;
 
56
 
 
57
        for (var i=startRow; i<= endRow; i++) {
 
58
            if (!re.test(doc.getLine(i))) {
 
59
                outdent = false;
 
60
                break;
 
61
            }
 
62
        }
 
63
 
 
64
        if (outdent) {
 
65
            var deleteRange = new Range(0, 0, 0, 0);
 
66
            for (var i=startRow; i<= endRow; i++)
 
67
            {
 
68
                var line = doc.getLine(i);
 
69
                var m = line.match(re);
 
70
                deleteRange.start.row = i;
 
71
                deleteRange.end.row = i;
 
72
                deleteRange.end.column = m[0].length;
 
73
                doc.replace(deleteRange, m[1]);
 
74
            }
 
75
        }
 
76
        else {
 
77
            doc.indentRows(startRow, endRow, "//");
 
78
        }
 
79
    };
 
80
 
 
81
    this.getNextLineIndent = function(state, line, tab) {
 
82
        var indent = this.$getIndent(line);
 
83
 
 
84
        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
 
85
        var tokens = tokenizedLine.tokens;
 
86
        var endState = tokenizedLine.state;
 
87
 
 
88
        if (tokens.length && tokens[tokens.length-1].type == "comment") {
 
89
            return indent;
 
90
        }
 
91
 
 
92
        if (state == "start") {
 
93
            var match = line.match(/^.*[\{\(\[]\s*$/);
 
94
            if (match) {
 
95
                indent += tab;
 
96
            }
 
97
        }
 
98
 
 
99
        return indent;
 
100
    };
 
101
 
 
102
    this.checkOutdent = function(state, line, input) {
 
103
        return this.$outdent.checkOutdent(line, input);
 
104
    };
 
105
 
 
106
    this.autoOutdent = function(state, doc, row) {
 
107
        this.$outdent.autoOutdent(doc, row);
 
108
    };
 
109
 
 
110
}).call(Mode.prototype);
 
111
 
 
112
exports.Mode = Mode;
 
113
});
 
114
define('ace/mode/lsl_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
 
115
 
 
116
 
 
117
var oop = require("../lib/oop");
 
118
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
 
119
 
 
120
var lslHighlightRules = function() {
 
121
 
 
122
    var keywords = (
 
123
        "default|event|state"
 
124
    );
 
125
 
 
126
    var controlKeywords = (
 
127
        "do|else|for|if|jump|return|while"
 
128
    );
 
129
    
 
130
    var types = (
 
131
        "float|integer|key|list|quaternion|rotation|string|vector"
 
132
    );
 
133
 
 
134
    var constants = (
 
135
        "ACTIVE|AGENT|AGENT_ALWAYS_RUN|AGENT_ATTACHMENTS|AGENT_AUTOPILOT|AGENT_AWAY|" +
 
136
        "AGENT_BUSY|AGENT_BY_LEGACY_NAME|AGENT_BY_USERNAME|AGENT_CROUCHING|AGENT_FLYING|" +
 
137
        "AGENT_IN_AIR|AGENT_LIST_PARCEL|AGENT_LIST_PARCEL_OWNER|AGENT_LIST_REGION|" +
 
138
        "AGENT_MOUSELOOK|AGENT_ON_OBJECT|AGENT_SCRIPTED|AGENT_SITTING|AGENT_TYPING|" +
 
139
        "AGENT_WALKING|ALL_SIDES|ANIM_ON|ATTACH_BACK|ATTACH_BELLY|ATTACH_CHEST|" +
 
140
        "ATTACH_CHIN|ATTACH_HEAD|ATTACH_HUD_BOTTOM|ATTACH_HUD_BOTTOM_LEFT|" +
 
141
        "ATTACH_HUD_BOTTOM_RIGHT|ATTACH_HUD_CENTER_1|ATTACH_HUD_CENTER_2|" +
 
142
        "ATTACH_HUD_TOP_CENTER|ATTACH_HUD_TOP_LEFT|ATTACH_HUD_TOP_RIGHT|ATTACH_LEAR|" +
 
143
        "ATTACH_LEFT_PEC|ATTACH_LEYE|ATTACH_LFOOT|ATTACH_LHAND|ATTACH_LHIP|ATTACH_LLARM|" +
 
144
        "ATTACH_LLLEG|ATTACH_LSHOULDER|ATTACH_LUARM|ATTACH_LULEG|ATTACH_MOUTH|" +
 
145
        "ATTACH_NOSE|ATTACH_PELVIS|ATTACH_REAR|ATTACH_REYE|ATTACH_RFOOT|ATTACH_RHAND|" +
 
146
        "ATTACH_RHIP|ATTACH_RIGHT_PEC|ATTACH_RLARM|ATTACH_RLLEG|ATTACH_RSHOULDER|" +
 
147
        "ATTACH_RUARM|ATTACH_RULEG|CAMERA_ACTIVE|CAMERA_BEHINDNESS_ANGLE|" +
 
148
        "CAMERA_BEHINDNESS_LAG|CAMERA_DISTANCE|CAMERA_FOCUS|CAMERA_FOCUS_LAG|" +
 
149
        "CAMERA_FOCUS_LOCKED|CAMERA_FOCUS_OFFSET|CAMERA_FOCUS_THRESHOLD|CAMERA_PITCH|" +
 
150
        "CAMERA_POSITION|CAMERA_POSITION_LAG|CAMERA_POSITION_LOCKED|" +
 
151
        "CAMERA_POSITION_THRESHOLD|CHANGED_ALLOWED_DROP|CHANGED_COLOR|CHANGED_INVENTORY|" +
 
152
        "CHANGED_LINK|CHANGED_MEDIA|CHANGED_OWNER|CHANGED_REGION|CHANGED_REGION_START|" +
 
153
        "CHANGED_SCALE|CHANGED_SHAPE|CHANGED_TELEPORT|CHANGED_TEXTURE|" +
 
154
        "CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES|CHARACTER_DESIRED_SPEED|CHARACTER_LENGTH|" +
 
155
        "CHARACTER_ORIENTATION|CHARACTER_RADIUS|CHARACTER_TYPE|CHARACTER_TYPE_A|" +
 
156
        "CHARACTER_TYPE_B|CHARACTER_TYPE_C|CHARACTER_TYPE_D|CHARACTER_TYPE_NONE|" +
 
157
        "CLICK_ACTION_BUY|CLICK_ACTION_NONE|CLICK_ACTION_OPEN|CLICK_ACTION_OPEN_MEDIA|" +
 
158
        "CLICK_ACTION_PAY|CLICK_ACTION_PLAY|CLICK_ACTION_SIT|CLICK_ACTION_TOUCH|" +
 
159
        "CONTROL_BACK|CONTROL_DOWN|CONTROL_FWD|CONTROL_LBUTTON|CONTROL_LEFT|" +
 
160
        "CONTROL_ML_LBUTTON|CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|" +
 
161
        "DATA_BORN|DATA_NAME|DATA_ONLINE|DATA_PAYINFO|DATA_RATING|DATA_SIM_POS|" +
 
162
        "DATA_SIM_RATING|DATA_SIM_STATUS|DEBUG_CHANNEL|DEG_TO_RAD|EOF|" +
 
163
        "ESTATE_ACCESS_BANNED_AGENT_ADD|FALSE|HORIZONTAL|HTTP_BODY_MAXLENGTH|" +
 
164
        "HTTP_BODY_TRUNCATED|HTTP_METHOD|HTTP_MIMETYPE|HTTP_PRAGMA_NO_CACHE|" +
 
165
        "HTTP_VERBOSE_THROTTLE|HTTP_VERIFY_CERT|INVENTORY_ALL|INVENTORY_ANIMATION|" +
 
166
        "INVENTORY_BODYPART|INVENTORY_CLOTHING|INVENTORY_GESTURE|INVENTORY_LANDMARK|" +
 
167
        "INVENTORY_NONE|INVENTORY_NOTECARD|INVENTORY_OBJECT|INVENTORY_SCRIPT|" +
 
168
        "INVENTORY_SOUND|INVENTORY_TEXTURE|LAND_LEVEL|LAND_LOWER|LAND_NOISE|LAND_RAISE|" +
 
169
        "LAND_REVERT|LAND_SMOOTH|LINK_ALL_CHILDREN|LINK_ALL_OTHERS|LINK_ROOT|LINK_SET|" +
 
170
        "LINK_THIS|LIST_STAT_GEOMETRIC_MEAN|LIST_STAT_MAX|LIST_STAT_MEAN|" +
 
171
        "LIST_STAT_MEDIAN|LIST_STAT_MIN|LIST_STAT_NUM_COUNT|LIST_STAT_RANGE|" +
 
172
        "LIST_STAT_STD_DEV|LIST_STAT_SUM|LIST_STAT_SUM_SQUARES|LOOP|MASK_BASE|" +
 
173
        "MASK_EVERYONE|MASK_GROUP|MASK_NEXT|MASK_OWNER|NULL_KEY|OBJECT_ATTACHED_POINT|" +
 
174
        "OBJECT_CREATOR|OBJECT_DESC|OBJECT_GROUP|OBJECT_NAME|OBJECT_OWNER|" +
 
175
        "OBJECT_PATHFINDING_TYPE|OBJECT_PHANTOM|OBJECT_PHYSICS|OBJECT_POS|" +
 
176
        "OBJECT_PRIM_EQUIVALENCE|OBJECT_ROOT|OBJECT_ROT|OBJECT_RUNNING_SCRIPT_COUNT|" +
 
177
        "OBJECT_SCRIPT_MEMORY|OBJECT_SCRIPT_TIME|OBJECT_TEMP_ON_REZ|" +
 
178
        "OBJECT_TOTAL_SCRIPT_COUNT|OBJECT_UNKNOWN_DETAIL|OBJECT_VELOCITY|OPT_CHARACTER|" +
 
179
        "OPT_AVATAR|OPT_EXCLUSION_VOLUME|OPT_LEGACY_LINKSET|OPT_MATERIAL_VOLUME|" +
 
180
        "OPT_OTHER|OPT_STATIC_OBSTACLE|OPT_WALKABLE|PARCEL_COUNT_GROUP|" +
 
181
        "PARCEL_COUNT_OTHER|PARCEL_COUNT_OWNER|PARCEL_COUNT_SELECTED|PARCEL_COUNT_TEMP|" +
 
182
        "PARCEL_COUNT_TOTAL|PARCEL_DETAILS_AREA|PARCEL_DETAILS_DESC|PARCEL_DETAILS_GROUP|" +
 
183
        "PARCEL_DETAILS_ID|PARCEL_DETAILS_NAME|PARCEL_DETAILS_OWNER|" +
 
184
        "PARCEL_DETAILS_SEE_AVATARS|PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY|" +
 
185
        "PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS|PARCEL_FLAG_ALLOW_CREATE_OBJECTS|" +
 
186
        "PARCEL_FLAG_ALLOW_DAMAGE|PARCEL_FLAG_ALLOW_FLY|" +
 
187
        "PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_GROUP_SCRIPTS|" +
 
188
        "PARCEL_FLAG_ALLOW_LANDMARK|PARCEL_FLAG_ALLOW_SCRIPTS|" +
 
189
        "PARCEL_FLAG_ALLOW_TERRAFORM|PARCEL_FLAG_LOCAL_SOUND_ONLY|" +
 
190
        "PARCEL_FLAG_RESTRICT_PUSHOBJECT|PARCEL_FLAG_USE_ACCESS_GROUP|" +
 
191
        "PARCEL_FLAG_USE_ACCESS_LIST|PARCEL_FLAG_USE_BAN_LIST|" +
 
192
        "PARCEL_FLAG_USE_LAND_PASS_LIST|PARCEL_MEDIA_COMMAND_AGENT|" +
 
193
        "PARCEL_MEDIA_COMMAND_AUTO_ALIGN|PARCEL_MEDIA_COMMAND_DESC|" +
 
194
        "PARCEL_MEDIA_COMMAND_LOOP|PARCEL_MEDIA_COMMAND_LOOP_SET|" +
 
195
        "PARCEL_MEDIA_COMMAND_PAUSE|PARCEL_MEDIA_COMMAND_PLAY|PARCEL_MEDIA_COMMAND_SIZE|" +
 
196
        "PARCEL_MEDIA_COMMAND_STOP|PARCEL_MEDIA_COMMAND_TEXTURE|" +
 
197
        "PARCEL_MEDIA_COMMAND_TIME|PARCEL_MEDIA_COMMAND_TYPE|PARCEL_MEDIA_COMMAND_UNLOAD|" +
 
198
        "PARCEL_MEDIA_COMMAND_URL|PASSIVE|PAYMENT_INFO_ON_FILE|PAYMENT_INFO_USED|" +
 
199
        "PAY_DEFAULT|PAY_HIDE|PERMISSION_ATTACH|PERMISSION_CHANGE_LINKS|" +
 
200
        "PERMISSION_CONTROL_CAMERA|PERMISSION_DEBIT|PERMISSION_SILENT_ESTATE_MANAGEMENT|" +
 
201
        "PERMISSION_TAKE_CONTROLS|PERMISSION_TELEPORT|PERMISSION_TRACK_CAMERA|" +
 
202
        "PERMISSION_TRIGGER_ANIMATION|PERM_ALL|PERM_COPY|PERM_MODIFY|PERM_MOVE|" +
 
203
        "PERM_TRANSFER|PI|PING_PONG|PI_BY_TWO|PRIM_BUMP_BARK|PRIM_BUMP_BLOBS|" +
 
204
        "PRIM_BUMP_BRICKS|PRIM_BUMP_BRIGHT|PRIM_BUMP_CHECKER|PRIM_BUMP_CONCRETE|" +
 
205
        "PRIM_BUMP_DARK|PRIM_BUMP_DISKS|PRIM_BUMP_GRAVEL|PRIM_BUMP_LARGETILE|" +
 
206
        "PRIM_BUMP_NONE|PRIM_BUMP_SHINY|PRIM_BUMP_SIDING|PRIM_BUMP_STONE|" +
 
207
        "PRIM_BUMP_STUCCO|PRIM_BUMP_SUCTION|PRIM_BUMP_TILE|PRIM_BUMP_WEAVE|" +
 
208
        "PRIM_BUMP_WOOD|PRIM_COLOR|PRIM_DESC|PRIM_FLEXIBLE|PRIM_FULLBRIGHT|PRIM_GLOW|" +
 
209
        "PRIM_HOLE_CIRCLE|PRIM_HOLE_DEFAULT|PRIM_HOLE_SQUARE|PRIM_HOLE_TRIANGLE|" +
 
210
        "PRIM_LINK_TARGET|PRIM_MATERIAL|PRIM_MATERIAL_FLESH|PRIM_MATERIAL_GLASS|" +
 
211
        "PRIM_MATERIAL_LIGHT|PRIM_MATERIAL_METAL|PRIM_MATERIAL_PLASTIC|" +
 
212
        "PRIM_MATERIAL_RUBBER|PRIM_MATERIAL_STONE|PRIM_MATERIAL_WOOD|" +
 
213
        "PRIM_MEDIA_PERM_ANYONE|PRIM_MEDIA_PERM_GROUP|PRIM_MEDIA_PERM_NONE|" +
 
214
        "PRIM_MEDIA_PERM_OWNER|PRIM_NAME|PRIM_OMEGA|PRIM_PHANTOM|PRIM_PHYSICS|" +
 
215
        "PRIM_PHYSICS_SHAPE_NONE|PRIM_PHYSICS_SHAPE_TYPE|PRIM_POINT_LIGHT|PRIM_POSITION|" +
 
216
        "PRIM_POS_LOCAL|PRIM_ROTATION|PRIM_ROT_LOCAL|PRIM_SCULPT_FLAG_INVERT|" +
 
217
        "PRIM_SCULPT_FLAG_MIRROR|PRIM_SCULPT_TYPE_CYLINDER|PRIM_SCULPT_TYPE_MASK|" +
 
218
        "PRIM_SCULPT_TYPE_PLANE|PRIM_SCULPT_TYPE_SPHERE|PRIM_SCULPT_TYPE_TORUS|" +
 
219
        "PRIM_SHINY_HIGH|PRIM_SHINY_LOW|PRIM_SHINY_MEDIUM|PRIM_SHINY_NONE|PRIM_SIZE|" +
 
220
        "PRIM_SLICE|PRIM_TEMP_ON_REZ|PRIM_TEXGEN|PRIM_TEXGEN_DEFAULT|PRIM_TEXGEN_PLANAR|" +
 
221
        "PRIM_TEXT|PRIM_TEXTURE|PRIM_TYPE|PRIM_TYPE_BOX|PRIM_TYPE_CYLINDER|" +
 
222
        "PRIM_TYPE_PRISM|PRIM_TYPE_RING|PRIM_TYPE_SCULPT|PRIM_TYPE_SPHERE|" +
 
223
        "PRIM_TYPE_TORUS|PRIM_TYPE_TUBE|PROFILE_NONE|PROFILE_SCRIPT_MEMORY|" +
 
224
        "PUBLIC_CHANNEL|RAD_TO_DEG|RCERR_CAST_TIME_EXCEEDED|RCERR_SIM_PERF_LOW|" +
 
225
        "RCERR_UNKNOWN|RC_DATA_FLAGS|RC_DETECT_PHANTOM|RC_GET_LINK_NUM|RC_GET_NORMAL|" +
 
226
        "RC_GET_ROOT_KEY|RC_MAX_HITS|RC_REJECT_AGENTS|RC_REJECT_LAND|" +
 
227
        "RC_REJECT_NONPHYSICAL|RC_REJECT_PHYSICAL|RC_REJECT_TYPES|" +
 
228
        "REGION_FLAG_ALLOW_DAMAGE|REGION_FLAG_ALLOW_DIRECT_TELEPORT|" +
 
229
        "REGION_FLAG_BLOCK_FLY|REGION_FLAG_BLOCK_TERRAFORM|" +
 
230
        "REGION_FLAG_DISABLE_COLLISIONS|REGION_FLAG_DISABLE_PHYSICS|" +
 
231
        "REGION_FLAG_FIXED_SUN|REGION_FLAG_RESTRICT_PUSHOBJECT|REGION_FLAG_SANDBOX|" +
 
232
        "REMOTE_DATA_CHANNEL|REMOTE_DATA_REPLY|REMOTE_DATA_REQUEST|REVERSE|ROTATE|SCALE|" +
 
233
        "SCRIPTED|SIM_STAT_PCT_CHARS_STEPPED|SMOOTH|SQRT2|STATUS_BLOCK_GRAB|" +
 
234
        "STATUS_BLOCK_GRAB_OBJECT|STATUS_CAST_SHADOWS|STATUS_DIE_AT_EDGE|STATUS_PHANTOM|" +
 
235
        "STATUS_PHYSICS|STATUS_RETURN_AT_EDGE|STATUS_ROTATE_X|STATUS_ROTATE_Y|" +
 
236
        "STATUS_ROTATE_Z|STATUS_SANDBOX|STRING_TRIM|STRING_TRIM_HEAD|STRING_TRIM_TAIL|" +
 
237
        "TEXTURE_BLANK|TEXTURE_MEDIA|TEXTURE_PLYWOOD|TEXTURE_TRANSPARENT|" +
 
238
        "TOUCH_INVALID_FACE|TOUCH_INVALID_TEXCOORD|TOUCH_INVALID_VECTOR|TRAVERSAL_TYPE|" +
 
239
        "TRUE|TWO_PI|TYPE_FLOAT|TYPE_INTEGER|TYPE_INVALID|TYPE_KEY|TYPE_ROTATION|" +
 
240
        "TYPE_STRING|TYPE_VECTOR|URL_REQUEST_DENIED|URL_REQUEST_GRANTED|" +
 
241
        "VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY|VEHICLE_ANGULAR_DEFLECTION_TIMESCALE|" +
 
242
        "VEHICLE_ANGULAR_FRICTION_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE|" +
 
243
        "VEHICLE_ANGULAR_MOTOR_DIRECTION|VEHICLE_ANGULAR_MOTOR_TIMESCALE|" +
 
244
        "VEHICLE_BANKING_EFFICIENCY|VEHICLE_BANKING_MIX|VEHICLE_BANKING_TIMESCALE|" +
 
245
        "VEHICLE_BUOYANCY|VEHICLE_FLAG_CAMERA_DECOUPLED|VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|" +
 
246
        "VEHICLE_FLAG_HOVER_TERRAIN_ONLY|VEHICLE_FLAG_HOVER_UP_ONLY|" +
 
247
        "VEHICLE_FLAG_HOVER_WATER_ONLY|VEHICLE_FLAG_LIMIT_MOTOR_UP|" +
 
248
        "VEHICLE_FLAG_LIMIT_ROLL_ONLY|VEHICLE_FLAG_MOUSELOOK_BANK|" +
 
249
        "VEHICLE_FLAG_MOUSELOOK_STEER|VEHICLE_FLAG_NO_DEFLECTION_UP|" +
 
250
        "VEHICLE_HOVER_EFFICIENCY|VEHICLE_HOVER_HEIGHT|VEHICLE_HOVER_TIMESCALE|" +
 
251
        "VEHICLE_LINEAR_DEFLECTION_EFFICIENCY|VEHICLE_LINEAR_DEFLECTION_TIMESCALE|" +
 
252
        "VEHICLE_LINEAR_FRICTION_TIMESCALE|VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE|" +
 
253
        "VEHICLE_LINEAR_MOTOR_DIRECTION|VEHICLE_LINEAR_MOTOR_OFFSET|" +
 
254
        "VEHICLE_LINEAR_MOTOR_TIMESCALE|VEHICLE_REFERENCE_FRAME|VEHICLE_TYPE_AIRPLANE|" +
 
255
        "VEHICLE_TYPE_BALLOON|VEHICLE_TYPE_BOAT|VEHICLE_TYPE_CAR|VEHICLE_TYPE_NONE|" +
 
256
        "VEHICLE_TYPE_SLED|VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY|" +
 
257
        "VEHICLE_VERTICAL_ATTRACTION_TIMESCALE|VERTICAL|ZERO_ROTATION|ZERO_VECTOR"
 
258
    );
 
259
 
 
260
    var events = (
 
261
        "at_rot_target|at_target|attach|changed|collision|collision_end|collision_start|" +
 
262
        "control|dataserver|email|http_request|http_response|land_collision|" +
 
263
        "land_collision_end|land_collision_start|link_message|listen|money|moving_end|" +
 
264
        "moving_start|no_sensor|not_at_rot_target|not_at_target|object_rez|on_rez|" +
 
265
        "path_update|remote_data|run_time_permissions|sensor|state_entry|state_exit|" +
 
266
        "timer|touch|touch_end|touch_start|transaction_result"
 
267
    );
 
268
 
 
269
    var functions = (
 
270
        "llAbs|llAcos|llAddToLandBanList|llAddToLandPassList|llAdjustSoundVolume|" +
 
271
        "llAllowInventoryDrop|llAngleBetween|llApplyImpulse|llApplyRotationalImpulse|" +
 
272
        "llAsin|llAtan2|llAttachToAvatar|llAttachToAvatarTemp|llAvatarOnLinkSitTarget|" +
 
273
        "llAvatarOnSitTarget|llAxes2Rot|llAxisAngle2Rot|llBase64ToInteger|" +
 
274
        "llBase64ToString|llBreakAllLinks|llBreakLink|llCastRay|llCeil|" +
 
275
        "llClearCameraParams|llClearLinkMedia|llClearPrimMedia|llCloseRemoteDataChannel|" +
 
276
        "llCloud|llCollisionFilter|llCollisionSound|llCollisionSprite|llCos|llCreateLink|" +
 
277
        "llCSV2List|llDeleteSubList|llDeleteSubString|llDetachFromAvatar|llDetectedGrab|" +
 
278
        "llDetectedGroup|llDetectedKey|llDetectedLinkNumber|llDetectedName|" +
 
279
        "llDetectedOwner|llDetectedPos|llDetectedRot|llDetectedTouchBinormal|" +
 
280
        "llDetectedTouchFace|llDetectedTouchNormal|llDetectedTouchPos|llDetectedTouchST|" +
 
281
        "llDetectedTouchUV|llDetectedType|llDetectedVel|llDialog|llDie|llDumpList2String|" +
 
282
        "llEdgeOfWorld|llEjectFromLand|llEmail|llEscapeURL|llEuler2Rot|llFabs|llFloor|" +
 
283
        "llForceMouselook|llFrand|llGenerateKey|llGetAccel|llGetAgentInfo|" +
 
284
        "llGetAgentLanguage|llGetAgentList|llGetAgentSize|llGetAlpha|llGetAndResetTime|" +
 
285
        "llGetAnimation|llGetAnimationList|llGetAttached|llGetBoundingBox|llGetCameraPos|" +
 
286
        "llGetCameraRot|llGetCenterOfMass|llGetColor|llGetCreator|llGetDate|" +
 
287
        "llGetDisplayName|llGetEnergy|llGetEnv|llGetForce|llGetFreeMemory|llGetFreeURLs|" +
 
288
        "llGetGeometricCenter|llGetGMTclock|llGetHTTPHeader|llGetInventoryCreator|" +
 
289
        "llGetInventoryKey|llGetInventoryName|llGetInventoryNumber|" +
 
290
        "llGetInventoryPermMask|llGetInventoryType|llGetKey|llGetLandOwnerAt|" +
 
291
        "llGetLinkKey|llGetLinkMedia|llGetLinkName|llGetLinkNumber|" +
 
292
        "llGetLinkNumberOfSides|llGetLinkPrimitiveParams|llGetListEntryType|" +
 
293
        "llGetListLength|llGetLocalPos|llGetLocalRot|llGetMass|llGetMassMKS|" +
 
294
        "llGetMemoryLimit|llGetNextEmail|llGetNotecardLine|llGetNumberOfNotecardLines|" +
 
295
        "llGetNumberOfPrims|llGetNumberOfSides|llGetObjectDesc|llGetObjectDetails|" +
 
296
        "llGetObjectMass|llGetObjectName|llGetObjectPermMask|llGetObjectPrimCount|" +
 
297
        "llGetOmega|llGetOwner|llGetOwnerKey|llGetParcelDetails|llGetParcelFlags|" +
 
298
        "llGetParcelMaxPrims|llGetParcelMusicURL|llGetParcelPrimCount|" +
 
299
        "llGetParcelPrimOwners|llGetPermissions|llGetPermissionsKey|llGetPhysicsMaterial|" +
 
300
        "llGetPos|llGetPrimitiveParams|llGetPrimMediaParams|llGetRegionAgentCount|" +
 
301
        "llGetRegionCorner|llGetRegionFlags|llGetRegionFPS|llGetRegionName|" +
 
302
        "llGetRegionTimeDilation|llGetRootPosition|llGetRootRotation|llGetRot|llGetScale|" +
 
303
        "llGetScriptName|llGetScriptState|llGetSimStats|llGetSimulatorHostname|" +
 
304
        "llGetSPMaxMemory|llGetStartParameter|llGetStatus|llGetSubString|" +
 
305
        "llGetSunDirection|llGetTexture|llGetTextureOffset|llGetTextureRot|" +
 
306
        "llGetTextureScale|llGetTime|llGetTimeOfDay|llGetTimestamp|llGetTorque|" +
 
307
        "llGetUnixTime|llGetUsedMemory|llGetUsername|llGetVel|llGetWallclock|" +
 
308
        "llGiveInventory|llGiveInventoryList|llGiveMoney|llGround|llGroundContour|" +
 
309
        "llGroundNormal|llGroundRepel|llGroundSlope|llHTTPRequest|llHTTPResponse|" +
 
310
        "llInsertString|llInstantMessage|llIntegerToBase64|llKey2Name|" +
 
311
        "llLinkParticleSystem|llLinkSitTarget|llList2CSV|llList2Float|llList2Integer|" +
 
312
        "llList2Key|llList2List|llList2ListStrided|llList2Rot|llList2String|" +
 
313
        "llList2Vector|llListen|llListenControl|llListenRemove|llListFindList|" +
 
314
        "llListInsertList|llListRandomize|llListReplaceList|llListSort|llListStatistics|" +
 
315
        "llLoadURL|llLog|llLog10|llLookAt|llLoopSound|llLoopSoundMaster|llLoopSoundSlave|" +
 
316
        "llManageEstateAccess|llMapDestination|llMD5String|llMessageLinked|" +
 
317
        "llMinEventDelay|llModifyLand|llModPow|llMoveToTarget|llOffsetTexture|" +
 
318
        "llOpenRemoteDataChannel|llOverMyLand|llOwnerSay|llParcelMediaCommandList|" +
 
319
        "llParcelMediaQuery|llParseString2List|llParseStringKeepNulls|llParticleSystem|" +
 
320
        "llPassCollisions|llPassTouches|llPlaySound|llPlaySoundSlave|llPow|" +
 
321
        "llPreloadSound|llPushObject|llRegionSay|llRegionSayTo|llReleaseControls|" +
 
322
        "llReleaseURL|llRemoteDataReply|llRemoteLoadScriptPin|llRemoveFromLandBanList|" +
 
323
        "llRemoveFromLandPassList|llRemoveInventory|llRemoveVehicleFlags|" +
 
324
        "llRequestAgentData|llRequestDisplayName|llRequestInventoryData|" +
 
325
        "llRequestPermissions|llRequestSecureURL|llRequestSimulatorData|llRequestURL|" +
 
326
        "llRequestUsername|llResetLandBanList|llResetLandPassList|llResetOtherScript|" +
 
327
        "llResetScript|llResetTime|llRezAtRoot|llRezObject|llRot2Angle|llRot2Axis|" +
 
328
        "llRot2Euler|llRot2Fwd|llRot2Left|llRot2Up|llRotateTexture|llRotBetween|" +
 
329
        "llRotLookAt|llRotTarget|llRotTargetRemove|llRound|llSameGroup|llSay|" +
 
330
        "llScaleTexture|llScriptDanger|llScriptProfiler|llSendRemoteData|llSensor|" +
 
331
        "llSensorRemove|llSensorRepeat|llSetAlpha|llSetAngularVelocity|llSetBuoyancy|" +
 
332
        "llSetCameraAtOffset|llSetCameraEyeOffset|llSetCameraParams|llSetClickAction|" +
 
333
        "llSetColor|llSetContentType|llSetDamage|llSetForce|llSetForceAndTorque|" +
 
334
        "llSetHoverHeight|llSetKeyframedMotion|llSetLinkAlpha|llSetLinkCamera|" +
 
335
        "llSetLinkColor|llSetLinkMedia|llSetLinkPrimitiveParams|" +
 
336
        "llSetLinkPrimitiveParamsFast|llSetLinkTexture|llSetLinkTextureAnim|" +
 
337
        "llSetLocalRot|llSetMemoryLimit|llSetObjectDesc|llSetObjectName|" +
 
338
        "llSetParcelMusicURL|llSetPayPrice|llSetPhysicsMaterial|llSetPos|" +
 
339
        "llSetPrimitiveParams|llSetPrimMediaParams|llSetRegionPos|" +
 
340
        "llSetRemoteScriptAccessPin|llSetRot|llSetScale|llSetScriptState|llSetSitText|" +
 
341
        "llSetSoundQueueing|llSetSoundRadius|llSetStatus|llSetText|llSetTexture|" +
 
342
        "llSetTextureAnim|llSetTimerEvent|llSetTorque|llSetTouchText|llSetVehicleFlags|" +
 
343
        "llSetVehicleFloatParam|llSetVehicleRotationParam|llSetVehicleType|" +
 
344
        "llSetVehicleVectorParam|llSetVelocity|llSHA1String|llShout|llSin|llSitTarget|" +
 
345
        "llSleep|llSqrt|llStartAnimation|llStopAnimation|llStopHover|llStopLookAt|" +
 
346
        "llStopMoveToTarget|llStopSound|llStringLength|llStringToBase64|llStringTrim|" +
 
347
        "llSubStringIndex|llTakeControls|llTan|llTarget|llTargetOmega|llTargetRemove|" +
 
348
        "llTeleportAgent|llTeleportAgentGlobalCoords|llTeleportAgentHome|llTextBox|" +
 
349
        "llToLower|llToUpper|llTransferLindenDollars|llTriggerSound|" +
 
350
        "llTriggerSoundLimited|llUnescapeURL|llUnSit|llVecDist|llVecMag|llVecNorm|" +
 
351
        "llVolumeDetect|llWater|llWhisper|llWind|llXorBase64StringsCorrect"
 
352
    );
 
353
 
 
354
    var keywordMapper = this.$keywords = this.createKeywordMapper({
 
355
        "keyword.control" : controlKeywords,
 
356
        "keyword.other" : keywords + "|" + events,
 
357
        "storage.type" : types,
 
358
        "constant.language": constants,
 
359
        "support.function": functions
 
360
    }, "identifier");
 
361
 
 
362
    this.$rules = {
 
363
        "start" : [
 
364
            {
 
365
                token : "comment.line",
 
366
                regex : "\\/\\/.*$"
 
367
            }, {
 
368
                token : "comment.block", // multi line comment
 
369
                regex : "\\/\\*",
 
370
                next : "comment"
 
371
            }, {
 
372
                token : "string.double", // single line
 
373
                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
 
374
            }, {
 
375
                token : "string.double", // multi line string start
 
376
                regex : '["].*$',
 
377
                next : "qqstring"
 
378
            }, {
 
379
                token : "constant.numeric", // hex
 
380
                regex : "0[xX][0-9a-fA-F]+\\b"
 
381
            }, {
 
382
                token : "constant.numeric", // float
 
383
                regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
 
384
            }, {
 
385
                token : keywordMapper,
 
386
                regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
 
387
            }, {
 
388
                token : "keyword.operator",
 
389
                regex : "!|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<|>|&&|\\|\\||\\*=|%=|\\+=|\\-="
 
390
            }, {
 
391
              token : "punctuation.operator",
 
392
              regex : "\\?|\\:|\\,|\\;|\\."
 
393
            }, {
 
394
                token : "paren.lparen",
 
395
                regex : "[[({]"
 
396
            }, {
 
397
                token : "paren.rparen",
 
398
                regex : "[\\])}]"
 
399
            }, {
 
400
                token : "text",
 
401
                regex : "\\s+"
 
402
            }
 
403
        ],
 
404
        "comment" : [
 
405
            {
 
406
                token : "comment.block", // closing comment
 
407
                regex : ".*?\\*\\/",
 
408
                next : "start"
 
409
            }, {
 
410
                token : "comment.block", // comment spanning whole line
 
411
                regex : ".+"
 
412
            }
 
413
        ],
 
414
        "qqstring" : [
 
415
            {
 
416
                token : "string.double",
 
417
                regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
 
418
                next : "start"
 
419
            }, {
 
420
                token : "string.double",
 
421
                regex : '.+'
 
422
            }
 
423
        ]
 
424
    };
 
425
};
 
426
 
 
427
oop.inherits(lslHighlightRules, TextHighlightRules);
 
428
 
 
429
exports.lslHighlightRules = lslHighlightRules;
 
430
});
 
431
 
 
432
define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
 
433
 
 
434
 
 
435
var Range = require("../range").Range;
 
436
 
 
437
var MatchingBraceOutdent = function() {};
 
438
 
 
439
(function() {
 
440
 
 
441
    this.checkOutdent = function(line, input) {
 
442
        if (! /^\s+$/.test(line))
 
443
            return false;
 
444
 
 
445
        return /^\s*\}/.test(input);
 
446
    };
 
447
 
 
448
    this.autoOutdent = function(doc, row) {
 
449
        var line = doc.getLine(row);
 
450
        var match = line.match(/^(\s*\})/);
 
451
 
 
452
        if (!match) return 0;
 
453
 
 
454
        var column = match[1].length;
 
455
        var openBracePos = doc.findMatchingBracket({row: row, column: column});
 
456
 
 
457
        if (!openBracePos || openBracePos.row == row) return 0;
 
458
 
 
459
        var indent = this.$getIndent(doc.getLine(openBracePos.row));
 
460
        doc.replace(new Range(row, 0, row, column-1), indent);
 
461
    };
 
462
 
 
463
    this.$getIndent = function(line) {
 
464
        return line.match(/^\s*/)[0];
 
465
    };
 
466
 
 
467
}).call(MatchingBraceOutdent.prototype);
 
468
 
 
469
exports.MatchingBraceOutdent = MatchingBraceOutdent;
 
470
});
 
471
 
 
472
define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
 
473
 
 
474
 
 
475
var oop = require("../../lib/oop");
 
476
var Behaviour = require("../behaviour").Behaviour;
 
477
var TokenIterator = require("../../token_iterator").TokenIterator;
 
478
var lang = require("../../lib/lang");
 
479
 
 
480
var SAFE_INSERT_IN_TOKENS =
 
481
    ["text", "paren.rparen", "punctuation.operator"];
 
482
var SAFE_INSERT_BEFORE_TOKENS =
 
483
    ["text", "paren.rparen", "punctuation.operator", "comment"];
 
484
 
 
485
 
 
486
var autoInsertedBrackets = 0;
 
487
var autoInsertedRow = -1;
 
488
var autoInsertedLineEnd = "";
 
489
var maybeInsertedBrackets = 0;
 
490
var maybeInsertedRow = -1;
 
491
var maybeInsertedLineStart = "";
 
492
var maybeInsertedLineEnd = "";
 
493
 
 
494
var CstyleBehaviour = function () {
 
495
    
 
496
    CstyleBehaviour.isSaneInsertion = function(editor, session) {
 
497
        var cursor = editor.getCursorPosition();
 
498
        var iterator = new TokenIterator(session, cursor.row, cursor.column);
 
499
        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
 
500
            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
 
501
            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
 
502
                return false;
 
503
        }
 
504
        iterator.stepForward();
 
505
        return iterator.getCurrentTokenRow() !== cursor.row ||
 
506
            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
 
507
    };
 
508
    
 
509
    CstyleBehaviour.$matchTokenType = function(token, types) {
 
510
        return types.indexOf(token.type || token) > -1;
 
511
    };
 
512
    
 
513
    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
 
514
        var cursor = editor.getCursorPosition();
 
515
        var line = session.doc.getLine(cursor.row);
 
516
        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
 
517
            autoInsertedBrackets = 0;
 
518
        autoInsertedRow = cursor.row;
 
519
        autoInsertedLineEnd = bracket + line.substr(cursor.column);
 
520
        autoInsertedBrackets++;
 
521
    };
 
522
    
 
523
    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
 
524
        var cursor = editor.getCursorPosition();
 
525
        var line = session.doc.getLine(cursor.row);
 
526
        if (!this.isMaybeInsertedClosing(cursor, line))
 
527
            maybeInsertedBrackets = 0;
 
528
        maybeInsertedRow = cursor.row;
 
529
        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
 
530
        maybeInsertedLineEnd = line.substr(cursor.column);
 
531
        maybeInsertedBrackets++;
 
532
    };
 
533
    
 
534
    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
 
535
        return autoInsertedBrackets > 0 &&
 
536
            cursor.row === autoInsertedRow &&
 
537
            bracket === autoInsertedLineEnd[0] &&
 
538
            line.substr(cursor.column) === autoInsertedLineEnd;
 
539
    };
 
540
    
 
541
    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
 
542
        return maybeInsertedBrackets > 0 &&
 
543
            cursor.row === maybeInsertedRow &&
 
544
            line.substr(cursor.column) === maybeInsertedLineEnd &&
 
545
            line.substr(0, cursor.column) == maybeInsertedLineStart;
 
546
    };
 
547
    
 
548
    CstyleBehaviour.popAutoInsertedClosing = function() {
 
549
        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
 
550
        autoInsertedBrackets--;
 
551
    };
 
552
    
 
553
    CstyleBehaviour.clearMaybeInsertedClosing = function() {
 
554
        maybeInsertedBrackets = 0;
 
555
        maybeInsertedRow = -1;
 
556
    };
 
557
 
 
558
    this.add("braces", "insertion", function (state, action, editor, session, text) {
 
559
        var cursor = editor.getCursorPosition();
 
560
        var line = session.doc.getLine(cursor.row);
 
561
        if (text == '{') {
 
562
            var selection = editor.getSelectionRange();
 
563
            var selected = session.doc.getTextRange(selection);
 
564
            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
 
565
                return {
 
566
                    text: '{' + selected + '}',
 
567
                    selection: false
 
568
                };
 
569
            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
 
570
                if (/[\]\}\)]/.test(line[cursor.column])) {
 
571
                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
 
572
                    return {
 
573
                        text: '{}',
 
574
                        selection: [1, 1]
 
575
                    };
 
576
                } else {
 
577
                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
 
578
                    return {
 
579
                        text: '{',
 
580
                        selection: [1, 1]
 
581
                    };
 
582
                }
 
583
            }
 
584
        } else if (text == '}') {
 
585
            var rightChar = line.substring(cursor.column, cursor.column + 1);
 
586
            if (rightChar == '}') {
 
587
                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
 
588
                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
 
589
                    CstyleBehaviour.popAutoInsertedClosing();
 
590
                    return {
 
591
                        text: '',
 
592
                        selection: [1, 1]
 
593
                    };
 
594
                }
 
595
            }
 
596
        } else if (text == "\n" || text == "\r\n") {
 
597
            var closing = "";
 
598
            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
 
599
                closing = lang.stringRepeat("}", maybeInsertedBrackets);
 
600
                CstyleBehaviour.clearMaybeInsertedClosing();
 
601
            }
 
602
            var rightChar = line.substring(cursor.column, cursor.column + 1);
 
603
            if (rightChar == '}' || closing !== "") {
 
604
                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
 
605
                if (!openBracePos)
 
606
                     return null;
 
607
 
 
608
                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
 
609
                var next_indent = this.$getIndent(line);
 
610
 
 
611
                return {
 
612
                    text: '\n' + indent + '\n' + next_indent + closing,
 
613
                    selection: [1, indent.length, 1, indent.length]
 
614
                };
 
615
            }
 
616
        }
 
617
    });
 
618
 
 
619
    this.add("braces", "deletion", function (state, action, editor, session, range) {
 
620
        var selected = session.doc.getTextRange(range);
 
621
        if (!range.isMultiLine() && selected == '{') {
 
622
            var line = session.doc.getLine(range.start.row);
 
623
            var rightChar = line.substring(range.end.column, range.end.column + 1);
 
624
            if (rightChar == '}') {
 
625
                range.end.column++;
 
626
                return range;
 
627
            } else {
 
628
                maybeInsertedBrackets--;
 
629
            }
 
630
        }
 
631
    });
 
632
 
 
633
    this.add("parens", "insertion", function (state, action, editor, session, text) {
 
634
        if (text == '(') {
 
635
            var selection = editor.getSelectionRange();
 
636
            var selected = session.doc.getTextRange(selection);
 
637
            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
 
638
                return {
 
639
                    text: '(' + selected + ')',
 
640
                    selection: false
 
641
                };
 
642
            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
 
643
                CstyleBehaviour.recordAutoInsert(editor, session, ")");
 
644
                return {
 
645
                    text: '()',
 
646
                    selection: [1, 1]
 
647
                };
 
648
            }
 
649
        } else if (text == ')') {
 
650
            var cursor = editor.getCursorPosition();
 
651
            var line = session.doc.getLine(cursor.row);
 
652
            var rightChar = line.substring(cursor.column, cursor.column + 1);
 
653
            if (rightChar == ')') {
 
654
                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
 
655
                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
 
656
                    CstyleBehaviour.popAutoInsertedClosing();
 
657
                    return {
 
658
                        text: '',
 
659
                        selection: [1, 1]
 
660
                    };
 
661
                }
 
662
            }
 
663
        }
 
664
    });
 
665
 
 
666
    this.add("parens", "deletion", function (state, action, editor, session, range) {
 
667
        var selected = session.doc.getTextRange(range);
 
668
        if (!range.isMultiLine() && selected == '(') {
 
669
            var line = session.doc.getLine(range.start.row);
 
670
            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
 
671
            if (rightChar == ')') {
 
672
                range.end.column++;
 
673
                return range;
 
674
            }
 
675
        }
 
676
    });
 
677
 
 
678
    this.add("brackets", "insertion", function (state, action, editor, session, text) {
 
679
        if (text == '[') {
 
680
            var selection = editor.getSelectionRange();
 
681
            var selected = session.doc.getTextRange(selection);
 
682
            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
 
683
                return {
 
684
                    text: '[' + selected + ']',
 
685
                    selection: false
 
686
                };
 
687
            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
 
688
                CstyleBehaviour.recordAutoInsert(editor, session, "]");
 
689
                return {
 
690
                    text: '[]',
 
691
                    selection: [1, 1]
 
692
                };
 
693
            }
 
694
        } else if (text == ']') {
 
695
            var cursor = editor.getCursorPosition();
 
696
            var line = session.doc.getLine(cursor.row);
 
697
            var rightChar = line.substring(cursor.column, cursor.column + 1);
 
698
            if (rightChar == ']') {
 
699
                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
 
700
                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
 
701
                    CstyleBehaviour.popAutoInsertedClosing();
 
702
                    return {
 
703
                        text: '',
 
704
                        selection: [1, 1]
 
705
                    };
 
706
                }
 
707
            }
 
708
        }
 
709
    });
 
710
 
 
711
    this.add("brackets", "deletion", function (state, action, editor, session, range) {
 
712
        var selected = session.doc.getTextRange(range);
 
713
        if (!range.isMultiLine() && selected == '[') {
 
714
            var line = session.doc.getLine(range.start.row);
 
715
            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
 
716
            if (rightChar == ']') {
 
717
                range.end.column++;
 
718
                return range;
 
719
            }
 
720
        }
 
721
    });
 
722
 
 
723
    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
 
724
        if (text == '"' || text == "'") {
 
725
            var quote = text;
 
726
            var selection = editor.getSelectionRange();
 
727
            var selected = session.doc.getTextRange(selection);
 
728
            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
 
729
                return {
 
730
                    text: quote + selected + quote,
 
731
                    selection: false
 
732
                };
 
733
            } else {
 
734
                var cursor = editor.getCursorPosition();
 
735
                var line = session.doc.getLine(cursor.row);
 
736
                var leftChar = line.substring(cursor.column-1, cursor.column);
 
737
                if (leftChar == '\\') {
 
738
                    return null;
 
739
                }
 
740
                var tokens = session.getTokens(selection.start.row);
 
741
                var col = 0, token;
 
742
                var quotepos = -1; // Track whether we're inside an open quote.
 
743
 
 
744
                for (var x = 0; x < tokens.length; x++) {
 
745
                    token = tokens[x];
 
746
                    if (token.type == "string") {
 
747
                      quotepos = -1;
 
748
                    } else if (quotepos < 0) {
 
749
                      quotepos = token.value.indexOf(quote);
 
750
                    }
 
751
                    if ((token.value.length + col) > selection.start.column) {
 
752
                        break;
 
753
                    }
 
754
                    col += tokens[x].value.length;
 
755
                }
 
756
                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
 
757
                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
 
758
                        return;
 
759
                    return {
 
760
                        text: quote + quote,
 
761
                        selection: [1,1]
 
762
                    };
 
763
                } else if (token && token.type === "string") {
 
764
                    var rightChar = line.substring(cursor.column, cursor.column + 1);
 
765
                    if (rightChar == quote) {
 
766
                        return {
 
767
                            text: '',
 
768
                            selection: [1, 1]
 
769
                        };
 
770
                    }
 
771
                }
 
772
            }
 
773
        }
 
774
    });
 
775
 
 
776
    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
 
777
        var selected = session.doc.getTextRange(range);
 
778
        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
 
779
            var line = session.doc.getLine(range.start.row);
 
780
            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
 
781
            if (rightChar == selected) {
 
782
                range.end.column++;
 
783
                return range;
 
784
            }
 
785
        }
 
786
    });
 
787
 
 
788
};
 
789
 
 
790
oop.inherits(CstyleBehaviour, Behaviour);
 
791
 
 
792
exports.CstyleBehaviour = CstyleBehaviour;
 
793
});
 
794
 
 
795
define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
 
796
 
 
797
 
 
798
var oop = require("../../lib/oop");
 
799
var Range = require("../../range").Range;
 
800
var BaseFoldMode = require("./fold_mode").FoldMode;
 
801
 
 
802
var FoldMode = exports.FoldMode = function(commentRegex) {
 
803
    if (commentRegex) {
 
804
        this.foldingStartMarker = new RegExp(
 
805
            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
 
806
        );
 
807
        this.foldingStopMarker = new RegExp(
 
808
            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
 
809
        );
 
810
    }
 
811
};
 
812
oop.inherits(FoldMode, BaseFoldMode);
 
813
 
 
814
(function() {
 
815
 
 
816
    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
 
817
    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
 
818
 
 
819
    this.getFoldWidgetRange = function(session, foldStyle, row) {
 
820
        var line = session.getLine(row);
 
821
        var match = line.match(this.foldingStartMarker);
 
822
        if (match) {
 
823
            var i = match.index;
 
824
 
 
825
            if (match[1])
 
826
                return this.openingBracketBlock(session, match[1], row, i);
 
827
 
 
828
            return session.getCommentFoldRange(row, i + match[0].length, 1);
 
829
        }
 
830
 
 
831
        if (foldStyle !== "markbeginend")
 
832
            return;
 
833
 
 
834
        var match = line.match(this.foldingStopMarker);
 
835
        if (match) {
 
836
            var i = match.index + match[0].length;
 
837
 
 
838
            if (match[1])
 
839
                return this.closingBracketBlock(session, match[1], row, i);
 
840
 
 
841
            return session.getCommentFoldRange(row, i, -1);
 
842
        }
 
843
    };
 
844
 
 
845
}).call(FoldMode.prototype);
 
846
 
 
847
});