391 lines
9.9 KiB
JSON
391 lines
9.9 KiB
JSON
{
|
|
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
|
|
"name": "ASHES",
|
|
"scopeName": "source.ashes",
|
|
"patterns": [
|
|
{
|
|
"include": "#comments"
|
|
},
|
|
{
|
|
"include": "#events"
|
|
},
|
|
{
|
|
"include": "#dialog-blocks"
|
|
},
|
|
{
|
|
"include": "#dialog-choices"
|
|
},
|
|
{
|
|
"include": "#commands"
|
|
},
|
|
{
|
|
"include": "#variables"
|
|
},
|
|
{
|
|
"include": "#control-flow"
|
|
},
|
|
{
|
|
"include": "#strings"
|
|
},
|
|
{
|
|
"include": "#numbers"
|
|
},
|
|
{
|
|
"include": "#operators"
|
|
},
|
|
{
|
|
"include": "#keywords"
|
|
},
|
|
{
|
|
"include": "#builtin-variables"
|
|
},
|
|
{
|
|
"include": "#global-ids"
|
|
}
|
|
],
|
|
"repository": {
|
|
"comments": {
|
|
"patterns": [
|
|
{
|
|
"name": "comment.line.number-sign.ashes",
|
|
"begin": "#",
|
|
"end": "$",
|
|
"patterns": [
|
|
{
|
|
"name": "comment.line.number-sign.ashes",
|
|
"match": "."
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"events": {
|
|
"patterns": [
|
|
{
|
|
"name": "entity.name.function.event.ashes",
|
|
"match": "^\\s*(:)([a-zA-Z_][a-zA-Z0-9_]*)(\\s*\\|\\s*[A-Z_]+)*",
|
|
"captures": {
|
|
"1": {
|
|
"name": "punctuation.definition.event.ashes"
|
|
},
|
|
"2": {
|
|
"name": "entity.name.function.event.ashes"
|
|
},
|
|
"3": {
|
|
"name": "entity.name.tag.event-flags.ashes"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "entity.name.function.event-with-target.ashes",
|
|
"match": "^\\s*(:)([a-zA-Z_][a-zA-Z0-9_]*)(\\s*\\|\\s*[A-Z_]+)*\\s+(\"[^\"]*\")",
|
|
"captures": {
|
|
"1": {
|
|
"name": "punctuation.definition.event.ashes"
|
|
},
|
|
"2": {
|
|
"name": "entity.name.function.event.ashes"
|
|
},
|
|
"3": {
|
|
"name": "entity.name.tag.event-flags.ashes"
|
|
},
|
|
"4": {
|
|
"name": "string.quoted.double.event-target.ashes"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"dialog-blocks": {
|
|
"patterns": [
|
|
{
|
|
"name": "meta.dialog-block.ashes",
|
|
"begin": "^(\\s*)(\\?\\!)",
|
|
"beginCaptures": {
|
|
"1": {
|
|
"name": "punctuation.whitespace.indent.ashes"
|
|
},
|
|
"2": {
|
|
"name": "keyword.control.dialog.ashes"
|
|
}
|
|
},
|
|
"end": "^(?=\\1[^\\s]|\\s*$)",
|
|
"patterns": [
|
|
{
|
|
"include": "#dialog-choices"
|
|
},
|
|
{
|
|
"include": "#commands"
|
|
},
|
|
{
|
|
"include": "#variables"
|
|
},
|
|
{
|
|
"include": "#control-flow"
|
|
},
|
|
{
|
|
"include": "#strings"
|
|
},
|
|
{
|
|
"include": "#comments"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"dialog-choices": {
|
|
"patterns": [
|
|
{
|
|
"name": "meta.dialog-choice.ashes",
|
|
"begin": "^(\\s*)(-)\\s*(\"[^\"]*\")\\s*(\\[.*?\\])?",
|
|
"beginCaptures": {
|
|
"1": {
|
|
"name": "punctuation.whitespace.indent.ashes"
|
|
},
|
|
"2": {
|
|
"name": "punctuation.definition.dialog-choice.ashes"
|
|
},
|
|
"3": {
|
|
"name": "string.quoted.double.dialog-choice.ashes"
|
|
},
|
|
"4": {
|
|
"name": "meta.condition.dialog-choice.ashes"
|
|
}
|
|
},
|
|
"end": "^(?=\\1[^\\s-]|\\s*$)",
|
|
"patterns": [
|
|
{
|
|
"include": "#commands"
|
|
},
|
|
{
|
|
"include": "#variables"
|
|
},
|
|
{
|
|
"include": "#control-flow"
|
|
},
|
|
{
|
|
"include": "#strings"
|
|
},
|
|
{
|
|
"include": "#comments"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"commands": {
|
|
"patterns": [
|
|
{
|
|
"name": "support.function.command.ashes",
|
|
"match": "\\b(accept_input|anim|anim_block|block_say|camera_push|camera_push_block|camera_set_limits|camera_set_pos|camera_set_pos_block|camera_set_target|camera_set_target_block|camera_set_zoom|camera_set_zoom_block|camera_set_zoom_height|camera_set_zoom_height_block|camera_shift|camera_shift_block|change_scene|custom|dec_global|enable_terrain|end_block_say|hide_menu|inc_global|inventory_add|inventory_remove|item_count_add|play_lib_snd|play_snd|play_video|print|print_internal|queue_event|queue_resource|rand_global|repeat|save_game|say|say_last_dialog_option|say_random|say_sequence|sched_event|set_active|set_active_if_exists|set_angle|set_animations|set_direction|set_global|set_globals|set_gui_visible|set_interactive|set_item_custom_data|set_speed|set_state|set_tooltip|show_menu|slide|slide_block|spawn|stop|stop_snd|teleport|teleport_pos|transition|turn_to|wait|walk|walk_block|walk_to_pos|walk_to_pos_block)\\b",
|
|
"captures": {
|
|
"1": {
|
|
"name": "support.function.command.ashes"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "meta.function-call.ashes",
|
|
"begin": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\s*(\\()",
|
|
"beginCaptures": {
|
|
"1": {
|
|
"name": "support.function.command.ashes"
|
|
},
|
|
"2": {
|
|
"name": "punctuation.definition.parameters.begin.ashes"
|
|
}
|
|
},
|
|
"end": "\\)",
|
|
"endCaptures": {
|
|
"0": {
|
|
"name": "punctuation.definition.parameters.end.ashes"
|
|
}
|
|
},
|
|
"patterns": [
|
|
{
|
|
"include": "#strings"
|
|
},
|
|
{
|
|
"include": "#numbers"
|
|
},
|
|
{
|
|
"include": "#global-ids"
|
|
},
|
|
{
|
|
"include": "#builtin-variables"
|
|
},
|
|
{
|
|
"include": "#operators"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"variables": {
|
|
"patterns": [
|
|
{
|
|
"name": "storage.type.variable.ashes",
|
|
"match": "\\b(var|global)\\b",
|
|
"captures": {
|
|
"1": {
|
|
"name": "storage.type.variable.ashes"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "variable.other.ashes",
|
|
"match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\s*(=)",
|
|
"captures": {
|
|
"1": {
|
|
"name": "variable.other.ashes"
|
|
},
|
|
"2": {
|
|
"name": "keyword.operator.assignment.ashes"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"control-flow": {
|
|
"patterns": [
|
|
{
|
|
"name": "keyword.control.ashes",
|
|
"match": "\\b(if|elif|else|while|break|done|stop|pass)\\b",
|
|
"captures": {
|
|
"1": {
|
|
"name": "keyword.control.ashes"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "meta.control-flow.ashes",
|
|
"begin": "\\b(if|elif|while)\\s+",
|
|
"beginCaptures": {
|
|
"1": {
|
|
"name": "keyword.control.ashes"
|
|
}
|
|
},
|
|
"end": ":",
|
|
"endCaptures": {
|
|
"0": {
|
|
"name": "punctuation.separator.condition.ashes"
|
|
}
|
|
},
|
|
"patterns": [
|
|
{
|
|
"include": "#operators"
|
|
},
|
|
{
|
|
"include": "#builtin-variables"
|
|
},
|
|
{
|
|
"include": "#global-ids"
|
|
},
|
|
{
|
|
"include": "#strings"
|
|
},
|
|
{
|
|
"include": "#numbers"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"strings": {
|
|
"patterns": [
|
|
{
|
|
"name": "string.quoted.double.ashes",
|
|
"begin": "\"",
|
|
"end": "\"",
|
|
"patterns": [
|
|
{
|
|
"name": "constant.character.escape.ashes",
|
|
"match": "\\\\."
|
|
},
|
|
{
|
|
"name": "variable.other.global.ashes",
|
|
"match": "\\{[^}]+\\}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "string.quoted.single.ashes",
|
|
"begin": "'",
|
|
"end": "'",
|
|
"patterns": [
|
|
{
|
|
"name": "constant.character.escape.ashes",
|
|
"match": "\\\\."
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"numbers": {
|
|
"patterns": [
|
|
{
|
|
"name": "constant.numeric.integer.ashes",
|
|
"match": "\\b\\d+\\b"
|
|
},
|
|
{
|
|
"name": "constant.numeric.float.ashes",
|
|
"match": "\\b\\d+\\.\\d+\\b"
|
|
}
|
|
]
|
|
},
|
|
"operators": {
|
|
"patterns": [
|
|
{
|
|
"name": "keyword.operator.arithmetic.ashes",
|
|
"match": "\\+|-|\\*|/"
|
|
},
|
|
{
|
|
"name": "keyword.operator.comparison.ashes",
|
|
"match": "==|!=|<=|>=|<|>"
|
|
},
|
|
{
|
|
"name": "keyword.operator.logical.ashes",
|
|
"match": "\\b(and|or|not)\\b|!"
|
|
},
|
|
{
|
|
"name": "keyword.operator.assignment.ashes",
|
|
"match": "="
|
|
}
|
|
]
|
|
},
|
|
"keywords": {
|
|
"patterns": [
|
|
{
|
|
"name": "constant.language.boolean.ashes",
|
|
"match": "\\b(true|false|nil)\\b"
|
|
},
|
|
{
|
|
"name": "keyword.other.ashes",
|
|
"match": "\\b(in|is|active)\\b"
|
|
}
|
|
]
|
|
},
|
|
"builtin-variables": {
|
|
"patterns": [
|
|
{
|
|
"name": "variable.language.builtin.ashes",
|
|
"match": "\\b(CURRENT_PLAYER|ESC_LAST_SCENE|ESC_CURRENT_SCENE|FORCE_LAST_SCENE_NULL|ANIMATION_RESOURCES)\\b"
|
|
}
|
|
]
|
|
},
|
|
"global-ids": {
|
|
"patterns": [
|
|
{
|
|
"name": "variable.other.global-id.ashes",
|
|
"match": "\\$([a-zA-Z_][a-zA-Z0-9_]*)",
|
|
"captures": {
|
|
"1": {
|
|
"name": "variable.other.global-id.ashes"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|