409 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			409 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
ace.define("ace/mode/csound_preprocessor_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
 | 
						|
var oop = require("../lib/oop");
 | 
						|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
 | 
						|
var CsoundPreprocessorHighlightRules = function (embeddedRulePrefix) {
 | 
						|
    this.embeddedRulePrefix = embeddedRulePrefix === undefined ? "" : embeddedRulePrefix;
 | 
						|
    this.semicolonComments = {
 | 
						|
        token: "comment.line.semicolon.csound",
 | 
						|
        regex: ";.*$"
 | 
						|
    };
 | 
						|
    this.comments = [
 | 
						|
        {
 | 
						|
            token: "punctuation.definition.comment.begin.csound",
 | 
						|
            regex: "/\\*",
 | 
						|
            push: [
 | 
						|
                {
 | 
						|
                    token: "punctuation.definition.comment.end.csound",
 | 
						|
                    regex: "\\*/",
 | 
						|
                    next: "pop"
 | 
						|
                }, {
 | 
						|
                    defaultToken: "comment.block.csound"
 | 
						|
                }
 | 
						|
            ]
 | 
						|
        }, {
 | 
						|
            token: "comment.line.double-slash.csound",
 | 
						|
            regex: "//.*$"
 | 
						|
        },
 | 
						|
        this.semicolonComments
 | 
						|
    ];
 | 
						|
    this.macroUses = [
 | 
						|
        {
 | 
						|
            token: ["entity.name.function.preprocessor.csound", "punctuation.definition.macro-parameter-value-list.begin.csound"],
 | 
						|
            regex: /(\$[A-Z_a-z]\w*\.?)(\()/,
 | 
						|
            next: "macro parameter value list"
 | 
						|
        }, {
 | 
						|
            token: "entity.name.function.preprocessor.csound",
 | 
						|
            regex: /\$[A-Z_a-z]\w*(?:\.|\b)/
 | 
						|
        }
 | 
						|
    ];
 | 
						|
    this.numbers = [
 | 
						|
        {
 | 
						|
            token: "constant.numeric.float.csound",
 | 
						|
            regex: /(?:\d+[Ee][+-]?\d+)|(?:\d+\.\d*|\d*\.\d+)(?:[Ee][+-]?\d+)?/
 | 
						|
        }, {
 | 
						|
            token: ["storage.type.number.csound", "constant.numeric.integer.hexadecimal.csound"],
 | 
						|
            regex: /(0[Xx])([0-9A-Fa-f]+)/
 | 
						|
        }, {
 | 
						|
            token: "constant.numeric.integer.decimal.csound",
 | 
						|
            regex: /\d+/
 | 
						|
        }
 | 
						|
    ];
 | 
						|
    this.bracedStringContents = [
 | 
						|
        {
 | 
						|
            token: "constant.character.escape.csound",
 | 
						|
            regex: /\\(?:[\\abnrt"]|[0-7]{1,3})/
 | 
						|
        },
 | 
						|
        {
 | 
						|
            token: "constant.character.placeholder.csound",
 | 
						|
            regex: /%[#0\- +]*\d*(?:\.\d+)?[diuoxXfFeEgGaAcs]/
 | 
						|
        }, {
 | 
						|
            token: "constant.character.escape.csound",
 | 
						|
            regex: /%%/
 | 
						|
        }
 | 
						|
    ];
 | 
						|
    this.quotedStringContents = [
 | 
						|
        this.macroUses,
 | 
						|
        this.bracedStringContents
 | 
						|
    ];
 | 
						|
    var start = [
 | 
						|
        this.comments,
 | 
						|
        {
 | 
						|
            token: "keyword.preprocessor.csound",
 | 
						|
            regex: /#(?:e(?:nd(?:if)?|lse)\b|##)|@@?[ \t]*\d+/
 | 
						|
        }, {
 | 
						|
            token: "keyword.preprocessor.csound",
 | 
						|
            regex: /#include/,
 | 
						|
            push: [
 | 
						|
                this.comments,
 | 
						|
                {
 | 
						|
                    token: "string.csound",
 | 
						|
                    regex: /([^ \t])(?:.*?\1)/,
 | 
						|
                    next: "pop"
 | 
						|
                }
 | 
						|
            ]
 | 
						|
        }, {
 | 
						|
            token: "keyword.preprocessor.csound",
 | 
						|
            regex: /#includestr/,
 | 
						|
            push: [
 | 
						|
                this.comments,
 | 
						|
                {
 | 
						|
                    token: "string.csound",
 | 
						|
                    regex: /([^ \t])(?:.*?\1)/,
 | 
						|
                    next: "pop"
 | 
						|
                }
 | 
						|
            ]
 | 
						|
        }, {
 | 
						|
            token: "keyword.preprocessor.csound",
 | 
						|
            regex: /#[ \t]*define/,
 | 
						|
            next: "define directive"
 | 
						|
        }, {
 | 
						|
            token: "keyword.preprocessor.csound",
 | 
						|
            regex: /#(?:ifn?def|undef)\b/,
 | 
						|
            next: "macro directive"
 | 
						|
        },
 | 
						|
        this.macroUses
 | 
						|
    ];
 | 
						|
    this.$rules = {
 | 
						|
        "start": start,
 | 
						|
        "define directive": [
 | 
						|
            this.comments,
 | 
						|
            {
 | 
						|
                token: "entity.name.function.preprocessor.csound",
 | 
						|
                regex: /[A-Z_a-z]\w*/
 | 
						|
            }, {
 | 
						|
                token: "punctuation.definition.macro-parameter-name-list.begin.csound",
 | 
						|
                regex: /\(/,
 | 
						|
                next: "macro parameter name list"
 | 
						|
            }, {
 | 
						|
                token: "punctuation.definition.macro.begin.csound",
 | 
						|
                regex: /#/,
 | 
						|
                next: "macro body"
 | 
						|
            }
 | 
						|
        ],
 | 
						|
        "macro parameter name list": [
 | 
						|
            {
 | 
						|
                token: "variable.parameter.preprocessor.csound",
 | 
						|
                regex: /[A-Z_a-z]\w*/
 | 
						|
            }, {
 | 
						|
                token: "punctuation.definition.macro-parameter-name-list.end.csound",
 | 
						|
                regex: /\)/,
 | 
						|
                next: "define directive"
 | 
						|
            }
 | 
						|
        ],
 | 
						|
        "macro body": [
 | 
						|
            {
 | 
						|
                token: "constant.character.escape.csound",
 | 
						|
                regex: /\\#/
 | 
						|
            }, {
 | 
						|
                token: "punctuation.definition.macro.end.csound",
 | 
						|
                regex: /#/,
 | 
						|
                next: "start"
 | 
						|
            },
 | 
						|
            start
 | 
						|
        ],
 | 
						|
        "macro directive": [
 | 
						|
            this.comments,
 | 
						|
            {
 | 
						|
                token: "entity.name.function.preprocessor.csound",
 | 
						|
                regex: /[A-Z_a-z]\w*/,
 | 
						|
                next: "start"
 | 
						|
            }
 | 
						|
        ],
 | 
						|
        "macro parameter value list": [
 | 
						|
            {
 | 
						|
                token: "punctuation.definition.macro-parameter-value-list.end.csound",
 | 
						|
                regex: /\)/,
 | 
						|
                next: "start"
 | 
						|
            }, {
 | 
						|
                token: "punctuation.definition.string.begin.csound",
 | 
						|
                regex: /"/,
 | 
						|
                next: "macro parameter value quoted string"
 | 
						|
            }, this.pushRule({
 | 
						|
                token: "punctuation.macro-parameter-value-parenthetical.begin.csound",
 | 
						|
                regex: /\(/,
 | 
						|
                next: "macro parameter value parenthetical"
 | 
						|
            }), {
 | 
						|
                token: "punctuation.macro-parameter-value-separator.csound",
 | 
						|
                regex: "[#']"
 | 
						|
            }
 | 
						|
        ],
 | 
						|
        "macro parameter value quoted string": [
 | 
						|
            {
 | 
						|
                token: "constant.character.escape.csound",
 | 
						|
                regex: /\\[#'()]/
 | 
						|
            }, {
 | 
						|
                token: "invalid.illegal.csound",
 | 
						|
                regex: /[#'()]/
 | 
						|
            }, {
 | 
						|
                token: "punctuation.definition.string.end.csound",
 | 
						|
                regex: /"/,
 | 
						|
                next: "macro parameter value list"
 | 
						|
            },
 | 
						|
            this.quotedStringContents,
 | 
						|
            {
 | 
						|
                defaultToken: "string.quoted.csound"
 | 
						|
            }
 | 
						|
        ],
 | 
						|
        "macro parameter value parenthetical": [
 | 
						|
            {
 | 
						|
                token: "constant.character.escape.csound",
 | 
						|
                regex: /\\\)/
 | 
						|
            }, this.popRule({
 | 
						|
                token: "punctuation.macro-parameter-value-parenthetical.end.csound",
 | 
						|
                regex: /\)/
 | 
						|
            }), this.pushRule({
 | 
						|
                token: "punctuation.macro-parameter-value-parenthetical.begin.csound",
 | 
						|
                regex: /\(/,
 | 
						|
                next: "macro parameter value parenthetical"
 | 
						|
            }),
 | 
						|
            start
 | 
						|
        ]
 | 
						|
    };
 | 
						|
};
 | 
						|
oop.inherits(CsoundPreprocessorHighlightRules, TextHighlightRules);
 | 
						|
(function () {
 | 
						|
    this.pushRule = function (params) {
 | 
						|
        if (Array.isArray(params.next)) {
 | 
						|
            for (var i = 0; i < params.next.length; i++) {
 | 
						|
                params.next[i] = this.embeddedRulePrefix + params.next[i];
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return {
 | 
						|
            regex: params.regex, onMatch: function (value, currentState, stack, line) {
 | 
						|
                if (stack.length === 0)
 | 
						|
                    stack.push(currentState);
 | 
						|
                if (Array.isArray(params.next)) {
 | 
						|
                    for (var i = 0; i < params.next.length; i++) {
 | 
						|
                        stack.push(params.next[i]);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else {
 | 
						|
                    stack.push(params.next);
 | 
						|
                }
 | 
						|
                this.next = stack[stack.length - 1];
 | 
						|
                return params.token;
 | 
						|
            },
 | 
						|
            get next() { return Array.isArray(params.next) ? params.next[params.next.length - 1] : params.next; },
 | 
						|
            set next(next) {
 | 
						|
                if (!Array.isArray(params.next)) {
 | 
						|
                    params.next = next;
 | 
						|
                }
 | 
						|
            },
 | 
						|
            get token() { return params.token; }
 | 
						|
        };
 | 
						|
    };
 | 
						|
    this.popRule = function (params) {
 | 
						|
        if (params.next) {
 | 
						|
            params.next = this.embeddedRulePrefix + params.next;
 | 
						|
        }
 | 
						|
        return {
 | 
						|
            regex: params.regex, onMatch: function (value, currentState, stack, line) {
 | 
						|
                stack.pop();
 | 
						|
                if (params.next) {
 | 
						|
                    stack.push(params.next);
 | 
						|
                    this.next = stack[stack.length - 1];
 | 
						|
                }
 | 
						|
                else {
 | 
						|
                    this.next = stack.length > 1 ? stack[stack.length - 1] : stack.pop();
 | 
						|
                }
 | 
						|
                return params.token;
 | 
						|
            }
 | 
						|
        };
 | 
						|
    };
 | 
						|
}).call(CsoundPreprocessorHighlightRules.prototype);
 | 
						|
exports.CsoundPreprocessorHighlightRules = CsoundPreprocessorHighlightRules;
 | 
						|
 | 
						|
});
 | 
						|
 | 
						|
ace.define("ace/mode/csound_score_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/csound_preprocessor_highlight_rules"], function(require, exports, module){"use strict";
 | 
						|
var oop = require("../lib/oop");
 | 
						|
var CsoundPreprocessorHighlightRules = require("./csound_preprocessor_highlight_rules").CsoundPreprocessorHighlightRules;
 | 
						|
var CsoundScoreHighlightRules = function (embeddedRulePrefix) {
 | 
						|
    CsoundPreprocessorHighlightRules.call(this, embeddedRulePrefix);
 | 
						|
    this.quotedStringContents.push({
 | 
						|
        token: "invalid.illegal.csound-score",
 | 
						|
        regex: /[^"]*$/
 | 
						|
    });
 | 
						|
    var start = this.$rules.start;
 | 
						|
    start.push({
 | 
						|
        token: "keyword.control.csound-score",
 | 
						|
        regex: /[aBbCdefiqstvxy]/
 | 
						|
    }, {
 | 
						|
        token: "invalid.illegal.csound-score",
 | 
						|
        regex: /w/
 | 
						|
    }, {
 | 
						|
        token: "constant.numeric.language.csound-score",
 | 
						|
        regex: /z/
 | 
						|
    }, {
 | 
						|
        token: ["keyword.control.csound-score", "constant.numeric.integer.decimal.csound-score"],
 | 
						|
        regex: /([nNpP][pP])(\d+)/
 | 
						|
    }, {
 | 
						|
        token: "keyword.other.csound-score",
 | 
						|
        regex: /[mn]/,
 | 
						|
        push: [
 | 
						|
            {
 | 
						|
                token: "empty",
 | 
						|
                regex: /$/,
 | 
						|
                next: "pop"
 | 
						|
            },
 | 
						|
            this.comments,
 | 
						|
            {
 | 
						|
                token: "entity.name.label.csound-score",
 | 
						|
                regex: /[A-Z_a-z]\w*/
 | 
						|
            }
 | 
						|
        ]
 | 
						|
    }, {
 | 
						|
        token: "keyword.preprocessor.csound-score",
 | 
						|
        regex: /r\b/,
 | 
						|
        next: "repeat section"
 | 
						|
    }, this.numbers, {
 | 
						|
        token: "keyword.operator.csound-score",
 | 
						|
        regex: "[!+\\-*/^%&|<>#~.]"
 | 
						|
    }, this.pushRule({
 | 
						|
        token: "punctuation.definition.string.begin.csound-score",
 | 
						|
        regex: /"/,
 | 
						|
        next: "quoted string"
 | 
						|
    }), this.pushRule({
 | 
						|
        token: "punctuation.braced-loop.begin.csound-score",
 | 
						|
        regex: /{/,
 | 
						|
        next: "loop after left brace"
 | 
						|
    }));
 | 
						|
    this.addRules({
 | 
						|
        "repeat section": [
 | 
						|
            {
 | 
						|
                token: "empty",
 | 
						|
                regex: /$/,
 | 
						|
                next: "start"
 | 
						|
            },
 | 
						|
            this.comments,
 | 
						|
            {
 | 
						|
                token: "constant.numeric.integer.decimal.csound-score",
 | 
						|
                regex: /\d+/,
 | 
						|
                next: "repeat section before label"
 | 
						|
            }
 | 
						|
        ],
 | 
						|
        "repeat section before label": [
 | 
						|
            {
 | 
						|
                token: "empty",
 | 
						|
                regex: /$/,
 | 
						|
                next: "start"
 | 
						|
            },
 | 
						|
            this.comments,
 | 
						|
            {
 | 
						|
                token: "entity.name.label.csound-score",
 | 
						|
                regex: /[A-Z_a-z]\w*/,
 | 
						|
                next: "start"
 | 
						|
            }
 | 
						|
        ],
 | 
						|
        "quoted string": [
 | 
						|
            this.popRule({
 | 
						|
                token: "punctuation.definition.string.end.csound-score",
 | 
						|
                regex: /"/
 | 
						|
            }),
 | 
						|
            this.quotedStringContents,
 | 
						|
            {
 | 
						|
                defaultToken: "string.quoted.csound-score"
 | 
						|
            }
 | 
						|
        ],
 | 
						|
        "loop after left brace": [
 | 
						|
            this.popRule({
 | 
						|
                token: "constant.numeric.integer.decimal.csound-score",
 | 
						|
                regex: /\d+/,
 | 
						|
                next: "loop after repeat count"
 | 
						|
            }),
 | 
						|
            this.comments,
 | 
						|
            {
 | 
						|
                token: "invalid.illegal.csound",
 | 
						|
                regex: /\S.*/
 | 
						|
            }
 | 
						|
        ],
 | 
						|
        "loop after repeat count": [
 | 
						|
            this.popRule({
 | 
						|
                token: "entity.name.function.preprocessor.csound-score",
 | 
						|
                regex: /[A-Z_a-z]\w*\b/,
 | 
						|
                next: "loop after macro name"
 | 
						|
            }),
 | 
						|
            this.comments,
 | 
						|
            {
 | 
						|
                token: "invalid.illegal.csound",
 | 
						|
                regex: /\S.*/
 | 
						|
            }
 | 
						|
        ],
 | 
						|
        "loop after macro name": [
 | 
						|
            start,
 | 
						|
            this.popRule({
 | 
						|
                token: "punctuation.braced-loop.end.csound-score",
 | 
						|
                regex: /}/
 | 
						|
            })
 | 
						|
        ]
 | 
						|
    });
 | 
						|
    this.normalizeRules();
 | 
						|
};
 | 
						|
oop.inherits(CsoundScoreHighlightRules, CsoundPreprocessorHighlightRules);
 | 
						|
exports.CsoundScoreHighlightRules = CsoundScoreHighlightRules;
 | 
						|
 | 
						|
});
 | 
						|
 | 
						|
ace.define("ace/mode/csound_score",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/csound_score_highlight_rules"], function(require, exports, module){"use strict";
 | 
						|
var oop = require("../lib/oop");
 | 
						|
var TextMode = require("./text").Mode;
 | 
						|
var CsoundScoreHighlightRules = require("./csound_score_highlight_rules").CsoundScoreHighlightRules;
 | 
						|
var Mode = function () {
 | 
						|
    this.HighlightRules = CsoundScoreHighlightRules;
 | 
						|
};
 | 
						|
oop.inherits(Mode, TextMode);
 | 
						|
(function () {
 | 
						|
    this.lineCommentStart = ";";
 | 
						|
    this.blockComment = { start: "/*", end: "*/" };
 | 
						|
    this.$id = "ace/mode/csound_score";
 | 
						|
}).call(Mode.prototype);
 | 
						|
exports.Mode = Mode;
 | 
						|
 | 
						|
});                (function() {
 | 
						|
                    ace.require(["ace/mode/csound_score"], function(m) {
 | 
						|
                        if (typeof module == "object" && typeof exports == "object" && module) {
 | 
						|
                            module.exports = m;
 | 
						|
                        }
 | 
						|
                    });
 | 
						|
                })();
 | 
						|
            
 |