Repository navigation
Expand file tree
/
Copy pathsource.lobster.js
More file actions
179 lines (177 loc) · 15.8 KB
/
Copy pathsource.lobster.js
File metadata and controls
179 lines (177 loc) · 15.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
// This is a TextMate grammar distributed by `starry-night`.
// This grammar is developed at
// <https://github.com/inferrna/lobster_ling>
// and licensed `apache-2.0`.
// See <https://github.com/wooorm/starry-night> for more info.
/**
* @import {Grammar} from '@wooorm/starry-night'
*/
/** @type {Grammar} */
const grammar = {
extensions: ['.lobster'],
names: ['lobster'],
patterns: [
{include: '#comments'},
{include: '#statements'},
{include: '#keywords'},
{include: '#strings'},
{include: '#digits'},
{include: '#ident'}
],
repository: {
comments: {
patterns: [
{begin: '/\\*', end: '\\*/', name: 'comment.block.source.lobster'},
{match: '//.*$', name: 'comment.line.double-slash.lobster'}
]
},
digits: {
patterns: [
{
match: '(?<![\\w\\d.])0x[[:xdigit:]]+',
name: 'constant.numeric.hex.lobster'
},
{
match: '(?<![\\w\\d.])\\d+(?![.])',
name: 'constant.numeric.integer.lobster'
},
{match: '(\\d+)?\\.(\\d+)?', name: 'constant.numeric.float.lobster'}
]
},
ident: {
patterns: [
{match: '[A-Za-z_][A-Za-z0-9_]*', name: 'variable.source.lobster'}
]
},
keywords: {
patterns: [
{
match:
'\\b(constructor|abstract|member|member_frame|static|static_frame|attribute|break|return|struct|class|import|namespace|pakfile|def|is|from|program|private|enum|enum_flags|typeof|var|let|not|and|or)\\b',
name: 'keyword.source.lobster'
},
{
match: '\\b(int|float|string|bool|void|resource)\\b',
name: 'storage.type.source.lobster'
},
{
match: '\\b(nil|true|false)\\b',
name: 'constant.language.source.lobster'
},
{
match: '\\b(break|return|from)\\b',
name: 'keyword.control.source.lobster'
},
{match: '\\b(else|elif)\\b', name: 'keyword.control.source.lobster'},
{
match:
'\\b(guard|if|while|switch|case|default|collectwhile|for|filter|exists|map)\\b',
name: 'keyword.control.source.lobster'
},
{
match:
'\\b(abs|acos|all|any|append|append_into|asin|assert|atan|atan2|binary_search|binary_search_first_field_object|binary_search_first_field_string|binary_search_object|breakpoint|call_function_value|cardinal_spline|ceiling|cg.average_face_colors|cg.average_surface_color|cg.bounding_box|cg.chunks_skipped|cg.clone|cg.color_to_palette|cg.copy|cg.create_3d_texture|cg.create_mesh|cg.erode|cg.get|cg.get_buf|cg.get_palette|cg.get_palette_storage_buf|cg.get_palette_storage_len|cg.init|cg.load_image|cg.load_palette|cg.load_vox|cg.load_vox_names|cg.name|cg.normal_indices|cg.num_solid|cg.offset|cg.palette_storage_index|cg.palette_to_color|cg.randomize|cg.rotate|cg.sample_down|cg.save_vox|cg.scale_up|cg.set|cg.set_palette|cg.simplex|cg.size|cg.stretch|circles_within_range|clamp|command_line_arguments|compare_substring|compile_run_code|compile_run_file|concat_string|copy|cos|crash_test_cpp_nullptr_exception|cross|date_time|date_time_build_info|date_time_string|date_time_string_format|deepcopy|degrees|delete_file|div|dot|ensure_size|equal|escape_string|exists_file|find_string|find_string_reverse|flatbuffers.binary_to_json|flatbuffers.field_float32|flatbuffers.field_float64|flatbuffers.field_int16|flatbuffers.field_int32|flatbuffers.field_int64|flatbuffers.field_int8|flatbuffers.field_present|flatbuffers.field_string|flatbuffers.field_struct|flatbuffers.field_table|flatbuffers.field_uint16|flatbuffers.field_uint32|flatbuffers.field_uint64|flatbuffers.field_uint8|flatbuffers.field_vector|flatbuffers.field_vector_len|flatbuffers.indirect|flatbuffers.json_to_binary|flatbuffers.string|flexbuffers_binary_to_json|flexbuffers_binary_to_value|flexbuffers_json_to_binary|flexbuffers_value_to_binary|float|floor|fraction|get_line|get_memory_usage|get_stack_trace|gl.animate_mesh|gl.animate_mesh_blend|gl.bind_buffer_object|gl.bind_mesh_to_compute|gl.blend|gl.button|gl.circle|gl.clear|gl.color|gl.controller_axis|gl.copy_buffer_object|gl.create_blank_texture|gl.create_colored_texture|gl.create_texture|gl.create_texture_single_channel|gl.create_time_query|gl.cull_front|gl.cursor|gl.debug_grid|gl.delta_time|gl.delta_time_rolling|gl.dispatch_compute|gl.dpi|gl.dropped_file|gl.dump_shader|gl.end_text_input|gl.frame|gl.framebuffer_size|gl.fullscreen|gl.generate_texture_mipmap|gl.get_char_code|gl.get_font_size|gl.get_glyph_name|gl.get_outline_size|gl.get_shader|gl.grab|gl.hit|gl.init_controller_database|gl.joy_axis|gl.key_repeat|gl.last_pos|gl.last_time|gl.light|gl.line|gl.line_mode|gl.load_materials|gl.load_texture|gl.local_last_pos|gl.local_mouse_pos|gl.mesh_animation_frames|gl.mesh_animations|gl.mesh_parts|gl.mesh_pointsize|gl.mesh_size|gl.model_view|gl.model_view_projection|gl.mouse_delta|gl.mouse_pos|gl.mousewheel_delta|gl.new_mesh|gl.new_mesh_iqm|gl.new_poly|gl.open_circle|gl.open_url|gl.origin|gl.ortho|gl.ortho3d|gl.perspective|gl.point_scale|gl.polygon|gl.pop_model_view|gl.projection|gl.push_model_view|gl.read_texture|gl.rect|gl.rect_tc_col|gl.render_mesh|gl.render_tiles|gl.require_version|gl.rotate_x|gl.rotate_y|gl.rotate_z|gl.rounded_rectangle|gl.save_mesh|gl.save_texture|gl.scale|gl.scaling|gl.scissor|gl.screenshot|gl.set_font_name|gl.set_font_size|gl.set_image_texture|gl.set_max_font_size|gl.set_mesh_texture|gl.set_primitive_texture|gl.set_shader|gl.set_text_input|gl.set_texture_flags|gl.set_uniform|gl.set_uniform_array|gl.set_uniform_matrix|gl.shutdown|gl.start_text_input|gl.start_time_query|gl.stop_time_query|gl.switch_to_framebuffer|gl.text|gl.text_input_state|gl.text_size|gl.texture_size|gl.time|gl.touchscreen|gl.translate|gl.unbind_all_textures|gl.unit_cube|gl.unit_square|gl.update_buffer_object|gl.visible|gl.window|gl.window_min_max|gl.window_size|gl.window_title|hash|im.accept_drag_drop_payload|im.add_font|im.button|im.button_repeat_end|im.button_repeat_start|im.calc_text_size|im.checkbox|im.child_end|im.child_start|im.close_current_popup|im.coloredit|im.color_end|im.color_start|im.combo|im.disabled_end|im.disabled_start|im.dockspace_over_viewport|im.drag_drop_source_end|im.drag_drop_source_start|im.drag_drop_target_end|im.drag_drop_target_start|im.edit_anything|im.font_end|im.font_start|im.frame_end|im.frame_start|im.get_content_region_avail|im.get_layout_pos|im.graph|im.group_end|im.group_start|im.id_end|im.id_start|im.image|im.image_button|im.image_mouseclick|im.init|im.input_float|im.input_int|im.input_text|im.input_text_multi_line|im.is_item_deactivated_after_edit|im.listbox|im.menu_bar_end|im.menu_bar_start|im.menu_end|im.menu_item|im.menu_item_toggle|im.menu_start|im.mouse_clicked|im.new_line|im.next_window_pos|im.next_window_size|im.popup_end|im.popup_open|im.popup_start|im.progress_bar|im.radio|im.same_line|im.selectable|im.separator|im.set_drag_drop_payload|im.set_layout_pos|im.set_style_color|im.set_style_frame_padding|im.set_style_inner_spacing|im.set_style_spacing|im.set_style_window_padding|im.show_debug_metrics_window|im.show_engine_stats|im.show_flexbuffer|im.show_vars|im.sliderfloat|im.sliderfloat2|im.sliderfloat3|im.sliderfloat4|im.sliderint|im.sliderint2|im.sliderint3|im.sliderint4|im.tab_bar_end|im.tab_bar_start|im.tab_end|im.table_end|im.table_headers_row|im.table_next_column|im.table_next_row|im.table_setup_column|im.table_start|im.tab_start|im.text|im.text_table|im.text_wrapped|im.tooltip|im.tooltip_multi_end|im.tooltip_multi_start|im.treenode_end|im.treenode_start|im.width_end|im.width_start|im.window_demo|im.window_end|im.window_start|in_range|insert|int|is_worker_thread|launch_subprocess|length|lerp|line_intersect|load_ogg|load_sfxr|load_wav|lobster_binary_to_value|lobster_value_to_binary|log|log2|lowercase|magnitude|magnitude_squared|manhattan|matrix.multiply|matrix.rotate_x|matrix.rotate_y|matrix.rotate_z|matrix.translation|max|mg.color|mg.convert_to_cubes|mg.cube|mg.cylinder|mg.landscape|mg.polygonize|mg.pop_transform|mg.push_transform|mg.rotate|mg.scale|mg.scale_vec|mg.set_color_noise|mg.set_point_mode|mg.set_polygon_reduction|mg.set_vertex_randomize|mg.smooth|mg.sphere|mg.superquadric|mg.superquadric_non_uniform|mg.supertoroid|mg.tapered_cylinder|mg.translate|min|music_fade_out|music_halt|music_is_playing|music_pause|music_resume|music_set_general_volume|music_volume|normalize|number_to_string|parse_data|pass|ph.apply_linear_impulse_to_center|ph.create_box|ph.create_circle|ph.create_particle|ph.create_particle_circle|ph.create_polygon|ph.delete_particle|ph.dynamic|ph.get_mass|ph.getparticle_position|ph.get_position|ph.initialize|ph.initialize_particles|ph.particle_contacts|ph.raycast|ph.render|ph.render_particles|ph.set_color|ph.set_linear_velocity|ph.set_shader|ph.set_texture|ph.step|play_music|play_music_cross_fade|play_music_fade_in|play_ogg|play_sfxr|play_wav|pop|popcount|pow|print|program_name|push|radians|read_file|read_float32_le|read_float32_le_back|read_float64_le|read_float64_le_back|read_int16_le|read_int16_le_back|read_int32_le|read_int32_le_back|read_int64_le|read_int64_le_back|read_int8_le|read_int8_le_back|read_uint16_le|read_uint16_le_back|read_uint32_le|read_uint32_le_back|read_uint64_le|read_uint64_le_back|read_uint8_le|read_uint8_le_back|reference_count|remove|remove_obj|remove_range|rename_file|repeat_string|replace_string|rnd|rnd_float|rnd_gaussian|rndm|rndm_seed|rnd_seed|round|scan_folder|seconds_elapsed|set_console|set_exit_code|set_output_level|set_print_decimals|set_print_depth|set_print_indent|set_print_length|set_print_quoted|sign|simplex|simplex_raw|sin|sincos|slice|smootherstep|smoothmin|smoothstep|sound_halt|sound_pause|sound_position|sound_resume|sound_status|sound_time_length|sound_volume|spherical_lerp|sqrt|start_worker_threads|steam.friend_get_username|steam.get_steam_id|steam.init|steam.lobby_create|steam.lobby_delete_data|steam.lobby_get_all_data|steam.lobby_get_all_joined|steam.lobby_get_created|steam.lobby_get_data|steam.lobby_get_game_server|steam.lobby_get_joined|steam.lobby_get_members|steam.lobby_get_num_members|steam.lobby_join|steam.lobby_leave|steam.lobby_request_add_numerical_filter|steam.lobby_request_add_result_count_filter|steam.lobby_request_add_string_filter|steam.lobby_request_data|steam.lobby_request_get_lobbies|steam.lobby_request_is_ready|steam.lobby_request_list|steam.lobby_request_list_reset|steam.lobby_set_data|steam.lobby_set_game_server|steam.lobby_set_joinable|steam.net_identity|steam.net_identity_from_steam_id|steam.overlay|steam.p2p_broadcast_message|steam.p2p_close_connection|steam.p2p_close_listen|steam.p2p_connect|steam.p2p_get_connections|steam.p2p_get_connection_status|steam.p2p_listen|steam.p2p_receive_messages|steam.p2p_send_message|steam.p2p_set_recv_buffer_size|steam.p2p_set_send_buffer_size|steam.read_file|steam.shutdown|steam.unlock_achievement|steam.update|steam.username|steam.write_file|stop_worker_threads|string|string_to_float|string_to_int|string_to_unicode|substring|tan|text_to_speech|text_to_speech_stop|thread_check|thread_information|thread_read|thread_write|tokenize|top|trace_bytecode|type_element_string|type_field_count|type_field_name|type_field_string|type_field_value|type_id|type_string|unicode_to_string|uppercase|vector_capacity|vector_to_buffer|vm_compiled_mode|volume|vr.create_motion_controller_mesh|vr.finish|vr.hmd_vec|vr.init|vr.motion_controller|vr.motion_controller_button|vr.motioncontrollerstracking|vr.motion_controller_vec|vr.num_motion_controllers|vr.set_eye_texture|vr.start|vr.start_eye|wave_function_collapse|workers_alive|write_file|write_float32_le|write_float32_le_back|write_float64_le|write_float64_le_back|write_int16_le|write_int16_le_back|write_int32_le|write_int32_le_back|write_int64_le|write_int64_le_back|write_int8_le|write_int8_le_back|write_substring|write_substring_back)\\b',
name: 'support.function.source.lobster'
},
{
match:
'\\b(forever|fold|reduce|connect|reducerev|filterindices|find|reverse|split|qsort|qsort_in_place|insertion_sort|nest_if|return_after|forbias|forscale|forrange|forrangeincl|try|catch|throw|protect|forxy|mapxy)\\b',
name: 'keyword.control.source.lobster'
},
{
match:
'\\b(sum|product|zip|reverselist|in_range|collect|fatal|check|allint|vecfromyawpitch|inrange2d|rotate2D|camera_FPS_update|camera_FPS_view|camera_direction|camera_2d_worldspace)\\b',
name: 'support.function.source.lobster'
},
{
match:
'\\b(xy|xy_i|xy_f|xyz|xyz_i|xyz_f|xyzw|xyzw_i|xyzw_f|color)\\b',
name: 'support.type.source.lobster'
},
{
match:
'\\b(xy_0|xy_1|xy_h|xy_x|xy_y|xy_z|xy_w|xy_xy|xy_0i|xy_1i|xy_xi|xy_yi|xy_zi|xy_wi|color_black|color_white|color_red|color_green|color_blue|color_yellow|color_cyan|color_pink|color_grey|color_dark_grey|color_light_grey|color_lightest_grey|color_darkest_grey|color_dark_red|color_dark_green|color_dark_blue|color_light_red|color_light_green|color_light_blue|color_olive|color_teal|color_purple|color_orange|color_chartreuse|color_springgreen|color_dodgerblue|color_pink_violet|color_blue_violet)\\b',
name: 'support.constant.source.lobster'
},
{
match:
'(?<![+])\\+{1,2}|(?<![-])\\-{1,2}|\\+=|-=|%|%\\=|\\*|\\*\\=|\\/|\\/\\=|\\^|==?|\\!=|<=?|>=?|(?<!\\.)\\.{2}(?!\\.)',
name: 'keyword.operator.lobster'
}
]
},
statements: {
patterns: [
{
begin: '\\b(let|var)\\s+',
beginCaptures: {1: {name: 'storage.type.lobster'}},
end: '=',
endCaptures: {0: {name: 'punctuation.definition.lobster'}},
name: 'variable.assignment.lobster',
patterns: [
{match: '[a-zA-Z_][a-zA-Z0-9_]*', name: 'variable.name.lobster'},
{match: ',', name: 'punctuation.separator.arguments.lobster'}
]
},
{
begin: '\\b(def|constructor)\\s+([A-Za-z_][A-Za-z0-9_]*)(\\()',
beginCaptures: {
1: {name: 'keyword.control.lobster'},
2: {name: 'entity.name.function.lobster'},
3: {name: 'punctuation.definition.parameters.begin.lobster'}
},
end: '\\)(?:\\s*->\\s*)?((\\[?[A-Za-z_][A-Za-z0-9_]*[A-Za-z_]*\\]?\\??(, ?)?)*?):',
endCaptures: {
0: {name: 'punctuation.definition.parameters.end.lobster'},
1: {name: 'storage.type.source.lobster'}
},
name: 'support.function.definition.lobster',
patterns: [
{
match: '[A-Za-z_][A-Za-z0-9_]*',
name: 'variable.parameter.function.lobster'
},
{
captures: {1: {name: 'storage.type.source.lobster'}},
match:
'(?<![:]):{,2}(int|float|string|resource|any|void|[A-Za-z_][A-Za-z0-9_]*)'
},
{match: ',', name: 'punctuation.separator.arguments.lobster'}
]
},
{
begin: '\\b(class|struct)\\s+([A-Za-z_][A-Za-z0-9_]*)',
beginCaptures: {
1: {name: 'support.class.lobster'},
2: {name: 'entity.name.class.lobster'}
},
end: ':',
name: 'support.class.definition.lobster'
},
{
begin: '\\b(enum|enum_flags)\\s+(\\w+)',
beginCaptures: {
1: {name: 'support.modifier.lobster'},
2: {name: 'entity.name.type.enum.lobster'}
},
end: ':',
endCaptures: {0: {name: 'punctuation.section.enum.end.lobster'}},
name: 'meta.enum.definition.lobster'
}
]
},
strings: {
patterns: [
{begin: '"{3}', end: '"{3}', name: 'string.quoted.triple.lobster'},
{begin: '"', end: '"', name: 'string.quoted.double.lobster'},
{
match:
"'(\\\\n|\\\\t|\\\\r|\\\\\"|\\\\'|\\\\x[[:xdigit:]]{2}|\\w|\\\\|)'",
name: 'constant.character.escape.lobster'
}
]
}
},
scopeName: 'source.lobster'
}
export default grammar