ace.define("ace/mode/mushcode_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/*
 * MUSHCodeMode
 */
"use strict";
var oop = require("../lib/oop");
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
var MushCodeRules = function () {
    var keywords = ("@if|" +
        "@ifelse|" +
        "@switch|" +
        "@halt|" +
        "@dolist|" +
        "@create|" +
        "@scent|" +
        "@sound|" +
        "@touch|" +
        "@ataste|" +
        "@osound|" +
        "@ahear|" +
        "@aahear|" +
        "@amhear|" +
        "@otouch|" +
        "@otaste|" +
        "@drop|" +
        "@odrop|" +
        "@adrop|" +
        "@dropfail|" +
        "@odropfail|" +
        "@smell|" +
        "@oemit|" +
        "@emit|" +
        "@pemit|" +
        "@parent|" +
        "@clone|" +
        "@taste|" +
        "whisper|" +
        "page|" +
        "say|" +
        "pose|" +
        "semipose|" +
        "teach|" +
        "touch|" +
        "taste|" +
        "smell|" +
        "listen|" +
        "look|" +
        "move|" +
        "go|" +
        "home|" +
        "follow|" +
        "unfollow|" +
        "desert|" +
        "dismiss|" +
        "@tel");
    var builtinConstants = ("=#0");
    var builtinFunctions = ("default|" +
        "edefault|" +
        "eval|" +
        "get_eval|" +
        "get|" +
        "grep|" +
        "grepi|" +
        "hasattr|" +
        "hasattrp|" +
        "hasattrval|" +
        "hasattrpval|" +
        "lattr|" +
        "nattr|" +
        "poss|" +
        "udefault|" +
        "ufun|" +
        "u|" +
        "v|" +
        "uldefault|" +
        "xget|" +
        "zfun|" +
        "band|" +
        "bnand|" +
        "bnot|" +
        "bor|" +
        "bxor|" +
        "shl|" +
        "shr|" +
        "and|" +
        "cand|" +
        "cor|" +
        "eq|" +
        "gt|" +
        "gte|" +
        "lt|" +
        "lte|" +
        "nand|" +
        "neq|" +
        "nor|" +
        "not|" +
        "or|" +
        "t|" +
        "xor|" +
        "con|" +
        "entrances|" +
        "exit|" +
        "followers|" +
        "home|" +
        "lcon|" +
        "lexits|" +
        "loc|" +
        "locate|" +
        "lparent|" +
        "lsearch|" +
        "next|" +
        "num|" +
        "owner|" +
        "parent|" +
        "pmatch|" +
        "rloc|" +
        "rnum|" +
        "room|" +
        "where|" +
        "zone|" +
        "worn|" +
        "held|" +
        "carried|" +
        "acos|" +
        "asin|" +
        "atan|" +
        "ceil|" +
        "cos|" +
        "e|" +
        "exp|" +
        "fdiv|" +
        "fmod|" +
        "floor|" +
        "log|" +
        "ln|" +
        "pi|" +
        "power|" +
        "round|" +
        "sin|" +
        "sqrt|" +
        "tan|" +
        "aposs|" +
        "andflags|" +
        "conn|" +
        "commandssent|" +
        "controls|" +
        "doing|" +
        "elock|" +
        "findable|" +
        "flags|" +
        "fullname|" +
        "hasflag|" +
        "haspower|" +
        "hastype|" +
        "hidden|" +
        "idle|" +
        "isbaker|" +
        "lock|" +
        "lstats|" +
        "money|" +
        "who|" +
        "name|" +
        "nearby|" +
        "obj|" +
        "objflags|" +
        "photo|" +
        "poll|" +
        "powers|" +
        "pendingtext|" +
        "receivedtext|" +
        "restarts|" +
        "restarttime|" +
        "subj|" +
        "shortestpath|" +
        "tmoney|" +
        "type|" +
        "visible|" +
        "cat|" +
        "element|" +
        "elements|" +
        "extract|" +
        "filter|" +
        "filterbool|" +
        "first|" +
        "foreach|" +
        "fold|" +
        "grab|" +
        "graball|" +
        "index|" +
        "insert|" +
        "itemize|" +
        "items|" +
        "iter|" +
        "last|" +
        "ldelete|" +
        "map|" +
        "match|" +
        "matchall|" +
        "member|" +
        "mix|" +
        "munge|" +
        "pick|" +
        "remove|" +
        "replace|" +
        "rest|" +
        "revwords|" +
        "setdiff|" +
        "setinter|" +
        "setunion|" +
        "shuffle|" +
        "sort|" +
        "sortby|" +
        "splice|" +
        "step|" +
        "wordpos|" +
        "words|" +
        "add|" +
        "lmath|" +
        "max|" +
        "mean|" +
        "median|" +
        "min|" +
        "mul|" +
        "percent|" +
        "sign|" +
        "stddev|" +
        "sub|" +
        "val|" +
        "bound|" +
        "abs|" +
        "inc|" +
        "dec|" +
        "dist2d|" +
        "dist3d|" +
        "div|" +
        "floordiv|" +
        "mod|" +
        "modulo|" +
        "remainder|" +
        "vadd|" +
        "vdim|" +
        "vdot|" +
        "vmag|" +
        "vmax|" +
        "vmin|" +
        "vmul|" +
        "vsub|" +
        "vunit|" +
        "regedit|" +
        "regeditall|" +
        "regeditalli|" +
        "regediti|" +
        "regmatch|" +
        "regmatchi|" +
        "regrab|" +
        "regraball|" +
        "regraballi|" +
        "regrabi|" +
        "regrep|" +
        "regrepi|" +
        "after|" +
        "alphamin|" +
        "alphamax|" +
        "art|" +
        "before|" +
        "brackets|" +
        "capstr|" +
        "case|" +
        "caseall|" +
        "center|" +
        "containsfansi|" +
        "comp|" +
        "decompose|" +
        "decrypt|" +
        "delete|" +
        "edit|" +
        "encrypt|" +
        "escape|" +
        "if|" +
        "ifelse|" +
        "lcstr|" +
        "left|" +
        "lit|" +
        "ljust|" +
        "merge|" +
        "mid|" +
        "ostrlen|" +
        "pos|" +
        "repeat|" +
        "reverse|" +
        "right|" +
        "rjust|" +
        "scramble|" +
        "secure|" +
        "space|" +
        "spellnum|" +
        "squish|" +
        "strcat|" +
        "strmatch|" +
        "strinsert|" +
        "stripansi|" +
        "stripfansi|" +
        "strlen|" +
        "switch|" +
        "switchall|" +
        "table|" +
        "tr|" +
        "trim|" +
        "ucstr|" +
        "unsafe|" +
        "wrap|" +
        "ctitle|" +
        "cwho|" +
        "channels|" +
        "clock|" +
        "cflags|" +
        "ilev|" +
        "itext|" +
        "inum|" +
        "convsecs|" +
        "convutcsecs|" +
        "convtime|" +
        "ctime|" +
        "etimefmt|" +
        "isdaylight|" +
        "mtime|" +
        "secs|" +
        "msecs|" +
        "starttime|" +
        "time|" +
        "timefmt|" +
        "timestring|" +
        "utctime|" +
        "atrlock|" +
        "clone|" +
        "create|" +
        "cook|" +
        "dig|" +
        "emit|" +
        "lemit|" +
        "link|" +
        "oemit|" +
        "open|" +
        "pemit|" +
        "remit|" +
        "set|" +
        "tel|" +
        "wipe|" +
        "zemit|" +
        "fbcreate|" +
        "fbdestroy|" +
        "fbwrite|" +
        "fbclear|" +
        "fbcopy|" +
        "fbcopyto|" +
        "fbclip|" +
        "fbdump|" +
        "fbflush|" +
        "fbhset|" +
        "fblist|" +
        "fbstats|" +
        "qentries|" +
        "qentry|" +
        "play|" +
        "ansi|" +
        "break|" +
        "c|" +
        "asc|" +
        "die|" +
        "isdbref|" +
        "isint|" +
        "isnum|" +
        "isletters|" +
        "linecoords|" +
        "localize|" +
        "lnum|" +
        "nameshort|" +
        "null|" +
        "objeval|" +
        "r|" +
        "rand|" +
        "s|" +
        "setq|" +
        "setr|" +
        "soundex|" +
        "soundslike|" +
        "valid|" +
        "vchart|" +
        "vchart2|" +
        "vlabel|" +
        "@@|" +
        "bakerdays|" +
        "bodybuild|" +
        "box|" +
        "capall|" +
        "catalog|" +
        "children|" +
        "ctrailer|" +
        "darttime|" +
        "debt|" +
        "detailbar|" +
        "exploredroom|" +
        "fansitoansi|" +
        "fansitoxansi|" +
        "fullbar|" +
        "halfbar|" +
        "isdarted|" +
        "isnewbie|" +
        "isword|" +
        "lambda|" +
        "lobjects|" +
        "lplayers|" +
        "lthings|" +
        "lvexits|" +
        "lvobjects|" +
        "lvplayers|" +
        "lvthings|" +
        "newswrap|" +
        "numsuffix|" +
        "playerson|" +
        "playersthisweek|" +
        "randomad|" +
        "randword|" +
        "realrandword|" +
        "replacechr|" +
        "second|" +
        "splitamount|" +
        "strlenall|" +
        "text|" +
        "third|" +
        "tofansi|" +
        "totalac|" +
        "unique|" +
        "getaddressroom|" +
        "listpropertycomm|" +
        "listpropertyres|" +
        "lotowner|" +
        "lotrating|" +
        "lotratingcount|" +
        "lotvalue|" +
        "boughtproduct|" +
        "companyabb|" +
        "companyicon|" +
        "companylist|" +
        "companyname|" +
        "companyowners|" +
        "companyvalue|" +
        "employees|" +
        "invested|" +
        "productlist|" +
        "productname|" +
        "productowners|" +
        "productrating|" +
        "productratingcount|" +
        "productsoldat|" +
        "producttype|" +
        "ratedproduct|" +
        "soldproduct|" +
        "topproducts|" +
        "totalspentonproduct|" +
        "totalstock|" +
        "transfermoney|" +
        "uniquebuyercount|" +
        "uniqueproductsbought|" +
        "validcompany|" +
        "deletepicture|" +
        "fbsave|" +
        "getpicturesecurity|" +
        "haspicture|" +
        "listpictures|" +
        "picturesize|" +
        "replacecolor|" +
        "rgbtocolor|" +
        "savepicture|" +
        "setpicturesecurity|" +
        "showpicture|" +
        "piechart|" +
        "piechartlabel|" +
        "createmaze|" +
        "drawmaze|" +
        "drawwireframe");
    var keywordMapper = this.createKeywordMapper({
        "invalid.deprecated": "debugger",
        "support.function": builtinFunctions,
        "constant.language": builtinConstants,
        "keyword": keywords
    }, "identifier");
    var strPre = "(?:r|u|ur|R|U|UR|Ur|uR)?";
    var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
    var octInteger = "(?:0[oO]?[0-7]+)";
    var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
    var binInteger = "(?:0[bB][01]+)";
    var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")";
    var exponent = "(?:[eE][+-]?\\d+)";
    var fraction = "(?:\\.\\d+)";
    var intPart = "(?:\\d+)";
    var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
    var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + exponent + ")";
    var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
    this.$rules = {
        "start": [
            {
                token: "variable", // mush substitution register
                regex: "%[0-9]{1}"
            },
            {
                token: "variable", // mush substitution register
                regex: "%q[0-9A-Za-z]{1}"
            },
            {
                token: "variable", // mush special character register
                regex: "%[a-zA-Z]{1}"
            },
            {
                token: "variable.language",
                regex: "%[a-z0-9-_]+"
            },
            {
                token: "constant.numeric", // imaginary
                regex: "(?:" + floatNumber + "|\\d+)[jJ]\\b"
            }, {
                token: "constant.numeric", // float
                regex: floatNumber
            }, {
                token: "constant.numeric", // long integer
                regex: integer + "[lL]\\b"
            }, {
                token: "constant.numeric", // integer
                regex: integer + "\\b"
            }, {
                token: keywordMapper,
                regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
            }, {
                token: "keyword.operator",
                regex: "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|#|%|<<|>>|\\||\\^|~|<|>|<=|=>|==|!=|<>|="
            }, {
                token: "paren.lparen",
                regex: "[\\[\\(\\{]"
            }, {
                token: "paren.rparen",
                regex: "[\\]\\)\\}]"
            }, {
                token: "text",
                regex: "\\s+"
            }
        ]
    };
};
oop.inherits(MushCodeRules, TextHighlightRules);
exports.MushCodeRules = MushCodeRules;

});

ace.define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict";
var oop = require("../../lib/oop");
var BaseFoldMode = require("./fold_mode").FoldMode;
var FoldMode = exports.FoldMode = function (markers) {
    this.foldingStartMarker = new RegExp("([\\[{])(?:\\s*)$|(" + markers + ")(?:\\s*)(?:#.*)?$");
};
oop.inherits(FoldMode, BaseFoldMode);
(function () {
    this.getFoldWidgetRange = function (session, foldStyle, row) {
        var line = session.getLine(row);
        var match = line.match(this.foldingStartMarker);
        if (match) {
            if (match[1])
                return this.openingBracketBlock(session, match[1], row, match.index);
            if (match[2])
                return this.indentationBlock(session, row, match.index + match[2].length);
            return this.indentationBlock(session, row);
        }
    };
}).call(FoldMode.prototype);

});

ace.define("ace/mode/mushcode",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/mushcode_highlight_rules","ace/mode/folding/pythonic","ace/range"], function(require, exports, module){"use strict";
var oop = require("../lib/oop");
var TextMode = require("./text").Mode;
var MushCodeRules = require("./mushcode_highlight_rules").MushCodeRules;
var PythonFoldMode = require("./folding/pythonic").FoldMode;
var Range = require("../range").Range;
var Mode = function () {
    this.HighlightRules = MushCodeRules;
    this.foldingRules = new PythonFoldMode("\\:");
    this.$behaviour = this.$defaultBehaviour;
};
oop.inherits(Mode, TextMode);
(function () {
    this.getNextLineIndent = function (state, line, tab) {
        var indent = this.$getIndent(line);
        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
        var tokens = tokenizedLine.tokens;
        if (tokens.length && tokens[tokens.length - 1].type == "comment") {
            return indent;
        }
        if (state == "start") {
            var match = line.match(/^.*[\{\(\[:]\s*$/);
            if (match) {
                indent += tab;
            }
        }
        return indent;
    };
    var outdents = {
        "pass": 1,
        "return": 1,
        "raise": 1,
        "break": 1,
        "continue": 1
    };
    this.checkOutdent = function (state, line, input) {
        if (input !== "\r\n" && input !== "\r" && input !== "\n")
            return false;
        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;
        if (!tokens)
            return false;
        do {
            var last = tokens.pop();
        } while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/))));
        if (!last)
            return false;
        return (last.type == "keyword" && outdents[last.value]);
    };
    this.autoOutdent = function (state, doc, row) {
        row += 1;
        var indent = this.$getIndent(doc.getLine(row));
        var tab = doc.getTabString();
        if (indent.slice(-tab.length) == tab)
            doc.remove(new Range(row, indent.length - tab.length, row, indent.length));
    };
    this.$id = "ace/mode/mushcode";
}).call(Mode.prototype);
exports.Mode = Mode;

});                (function() {
                    ace.require(["ace/mode/mushcode"], function(m) {
                        if (typeof module == "object" && typeof exports == "object" && module) {
                            module.exports = m;
                        }
                    });
                })();
            