TextMate language grammar
Converted to TextMate syntax from ETextEditor.
See also: Forum post about TextMate
{ name = 'Cobra';
scopeName = 'source.cobra';
firstLineMatch = '^#!/.*\bcobra\b';
fileTypes = ( 'cobra' );
foldingStartMarker = '';
foldingStopMarker = '';
patterns = (
{ name = 'comment.line.cobra';
match = '(#).*$';
},
{ name = 'constant.numeric.hexadecimal.cobra';
match = '\b(?i:(0x\h*)L?)';
},
{ name = 'constant.numeric.octal.cobra';
match = '\b(?i:(0[0-7]+)L?)';
},
{ name = 'constant.numeric.float.cobra';
match = '\b(?i:(\d+\.\d*(e[\-\+]?\d+)?))(?=[^a-zA-Z_])';
},
{ name = 'constant.numeric.float.cobra';
match = '(?<=[^0-9a-zA-Z_])(?i:(\.\d+(e[\-\+]?\d+)?))';
},
{ name = 'constant.numeric.float.cobra';
match = '\b(?i:(\d+e[\-\+]?\d+))';
},
{ name = 'constant.numeric.integer.long.decimal.cobra';
match = '\b(?i:([1-9]+[0-9]*|0)L)';
},
{ name = 'constant.numeric.integer.decimal.cobra';
match = '\b([1-9]+[0-9]*|0)';
},
{ name = 'keyword.control.cobra';
match = '\b(branch|on|else|catch|finally|for|if|try|while|break|continue|pass|raise|return|using|yield)\b';
},
{ name = 'keyword.operator.logical.cobra';
match = '\b(and|in|not|or)\b';
},
{ name = 'keyword.other.cobra';
match = '\b(as|from|assert|print|var|invariant|is)\b';
},
{ name = 'keyword.operator.comparison.cobra';
match = '<\=|>\=|\=\=|<|>|<>';
},
{ name = 'keyword.operator.assignment.cobra';
match = '\=|\+\=|-\=|\*\=|/\=|//\=|%\=|&\=|\|\=|\^\=|>>\=|<<\=|\*\*\=';
},
{ name = 'keyword.operator.arithmetic.cobra';
match = '\+|\-|\*|\*\*|/|//|%|<<|>>|&|\||\^|~';
},
{ match = '\s*(use|namespace)\s+([a-zA-Z0-9_.]+)$';
captures = {
1 = { name = 'keyword.other.namespacing.cobra'; };
2 = { name = 'constant.class.cobra'; };
};
},
{ name = 'storage.type.function.cobra';
match = '\b(def|cue|get|set|test|ensure|body|require)\b';
},
{ name = 'support.type.primitive.cobra';
match = '\b(nil|bool|char|int|uint|float|decimal|number|dynamic|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\b(\?)?';
captures = { 2 = { name = 'support.type.nillible-marker.cobra'; }; };
},
{ name = 'support.class.cobra';
match = '\b(String|List|Dictionary|Set|Stack|Queue|TextWriter|TextReader|StringBuilder)(?:\?)?\s*(<of\s*[a-zA-Z0-9_]+>)\b';
},
{ include = '#strings'; },
{ name = 'comment.block.cobra';
begin = '^\s*(""")';
end = '"""\s*$';
},
{ match = '^\s+(var)\s+(_[\w_]+)\s+(as)?(\s+[\w_<>\s?]+)';
captures = {
1 = { name = 'keyword.operator.declaration.cobra'; };
2 = { name = 'support.private-variable.cobra'; };
3 = { name = 'keyword.operator.specifier.cobra'; };
4 = { name = 'support.other.type.cobra'; };
};
},
{ name = 'keyword.operator.enumeration.cobra';
match = '\s*(?:enum|interface|struct|mixin)\s+([\w_]+)';
captures = { 1 = { name = 'entity.name.enumeration.cobras'; }; };
},
{ name = 'keyword.operator.enumeration.cobra';
match = '\s*(is|has)\s+(shared|partial)\s*';
captures = {
1 = { name = 'operator.name.is.cobra'; };
2 = { name = 'constant.other.modifier.cobra'; };
};
},
{ name = 'keyword.operator.enumeration.cobra';
match = '\s*(implements|inherits)\s+([a-zA-Z_][\w_]*)\s*';
captures = {
1 = { name = 'operator.name.is.cobra'; };
2 = { name = 'constant.other.interface.cobra'; };
};
},
{ name = 'meta.type.method.cobra';
match = '^\s+(def|cue|get|pro|sig)\s+([a-zA-Z_]\w+)';
captures = {
1 = { name = 'keyword.operator.method.cobra'; };
2 = { name = 'entity.name.type.cobra'; };
};
},
{ match = '^\s*(class)\s+([a-zA-Z_][\w_]*)\s*';
captures = {
1 = { name = 'keyword.operator.class-definition.cobra'; };
2 = { name = 'entity.name.user-defined-type.cobra'; };
};
},
);
repository = {
escaped-characters = {
name = 'constant.character.escape.cobra';
match = '(\\x[0-9A-F]{2})|(\\[0-7]{3})|(\\\n)|(\\\\)|(\\\")|(\\'')|(\\a)|(\\b)|(\\f)|(\\n)|(\\r)|(\\t)|(\\v)';
};
strings = {
patterns = (
{ name = 'string.quoted.single.cobra';
begin = "(?<!')r?'(?!')";
end = "'";
patterns = (
{ include = '#escaped-characters'; },
{ include = '#varsub'; },
);
},
{ name = 'string.quoted.single.cobra';
begin = '(?<!")r?"(?!")';
end = '"';
patterns = (
{ include = '#escaped-characters'; },
{ include = '#varsub'; },
);
},
);
};
varsub = {
name = 'support.other.variable-substitution.cobra';
match = '(\[[\w.]+\])';
};
};
}



