From d88ae9d22248e4013a350c8d1a954e6b86888b85 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 12:42:16 +1100 Subject: [PATCH 01/49] feat(gml) proper grammar over keyword list! --- src/languages/gml.js | 3128 ++++++++++-------------------------------- 1 file changed, 708 insertions(+), 2420 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 35d3851a86..3824b25606 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -6,13 +6,50 @@ Category: scripting */ export default function(hljs) { + + /** + * @type {any[][][]} + */ + const lateConcatTargets = []; + + /** + * Somewhat evil helper function to allow us to *very* lately build arrays. This is most useful + * in the case of {@link EXPRESSION}, which is an array of a bunch of different types, of which + * some of these also can contain expressions, AND contain other things too. + * + * Note that {@link doLateConcat} MUST be called before this can be used, because we're using some + * reference-based trickery to do this. + * + * @param {...any[]} arrays The arrays to be concatenated later. + * @returns {any[]} + */ + function lateConcat(...arrays) { + lateConcatTargets.push(arrays); + return arrays; + } + + /** + * Perform the late-concatenation operation on all target arrays, converting them into effectively + * an array of the members that were to be concatenated. + */ + function doLateConcat() { + + lateConcatTargets.forEach(target => { + const arrayMembers = [...target]; + target.length = 0; + + for (const array of arrayMembers) { + target.push(...array); + } + + }); + } + const KEYWORDS = [ - "#endregion", - "#macro", - "#region", "and", "begin", "break", + "catch", "case", "constructor", "continue", @@ -22,8 +59,8 @@ export default function(hljs) { "do", "else", "end", - "enum", "exit", + "finally", "for", "function", "globalvar", @@ -37,2063 +74,69 @@ export default function(hljs) { "static", "switch", "then", + "throw", + "try", "until", "var", "while", "with", - "xor" + "xor", ]; - - const BUILT_INS = [ - "abs", - "alarm_get", - "alarm_set", - "angle_difference", - "animcurve_channel_evaluate", - "animcurve_channel_new", - "animcurve_create", - "animcurve_destroy", - "animcurve_exists", - "animcurve_get", - "animcurve_get_channel", - "animcurve_get_channel_index", - "animcurve_point_new", - "ansi_char", - "application_get_position", - "application_surface_draw_enable", - "application_surface_enable", - "application_surface_is_enabled", - "arccos", - "arcsin", - "arctan", - "arctan2", - "array_all", - "array_any", - "array_concat", - "array_contains", - "array_contains_ext", - "array_copy", - "array_copy_while", - "array_create", - "array_create_ext", - "array_delete", - "array_equals", - "array_filter", - "array_filter_ext", - "array_find_index", - "array_first", - "array_foreach", - "array_get", - "array_get_index", - "array_insert", - "array_intersection", - "array_last", - "array_length", - "array_map", - "array_map_ext", - "array_pop", - "array_push", - "array_reduce", - "array_resize", - "array_reverse", - "array_reverse_ext", - "array_set", - "array_shuffle", - "array_shuffle_ext", - "array_sort", - "array_union", - "array_unique", - "array_unique_ext", - "asset_add_tags", - "asset_clear_tags", - "asset_get_ids", - "asset_get_index", - "asset_get_tags", - "asset_get_type", - "asset_has_any_tag", - "asset_has_tags", - "asset_remove_tags", - "audio_bus_clear_emitters", - "audio_bus_create", - "audio_bus_get_emitters", - "audio_channel_num", - "audio_create_buffer_sound", - "audio_create_play_queue", - "audio_create_stream", - "audio_create_sync_group", - "audio_debug", - "audio_destroy_stream", - "audio_destroy_sync_group", - "audio_effect_create", - "audio_emitter_bus", - "audio_emitter_create", - "audio_emitter_exists", - "audio_emitter_falloff", - "audio_emitter_free", - "audio_emitter_gain", - "audio_emitter_get_bus", - "audio_emitter_get_gain", - "audio_emitter_get_listener_mask", - "audio_emitter_get_pitch", - "audio_emitter_get_vx", - "audio_emitter_get_vy", - "audio_emitter_get_vz", - "audio_emitter_get_x", - "audio_emitter_get_y", - "audio_emitter_get_z", - "audio_emitter_pitch", - "audio_emitter_position", - "audio_emitter_set_listener_mask", - "audio_emitter_velocity", - "audio_exists", - "audio_falloff_set_model", - "audio_free_buffer_sound", - "audio_free_play_queue", - "audio_get_listener_count", - "audio_get_listener_info", - "audio_get_listener_mask", - "audio_get_master_gain", - "audio_get_name", - "audio_get_recorder_count", - "audio_get_recorder_info", - "audio_get_type", - "audio_group_get_assets", - "audio_group_get_gain", - "audio_group_is_loaded", - "audio_group_load", - "audio_group_load_progress", - "audio_group_name", - "audio_group_set_gain", - "audio_group_stop_all", - "audio_group_unload", - "audio_is_paused", - "audio_is_playing", - "audio_listener_get_data", - "audio_listener_orientation", - "audio_listener_position", - "audio_listener_set_orientation", - "audio_listener_set_position", - "audio_listener_set_velocity", - "audio_listener_velocity", - "audio_master_gain", - "audio_pause_all", - "audio_pause_sound", - "audio_pause_sync_group", - "audio_play_in_sync_group", - "audio_play_sound", - "audio_play_sound_at", - "audio_play_sound_ext", - "audio_play_sound_on", - "audio_queue_sound", - "audio_resume_all", - "audio_resume_sound", - "audio_resume_sync_group", - "audio_set_listener_mask", - "audio_set_master_gain", - "audio_sound_gain", - "audio_sound_get_audio_group", - "audio_sound_get_gain", - "audio_sound_get_listener_mask", - "audio_sound_get_loop", - "audio_sound_get_loop_end", - "audio_sound_get_loop_start", - "audio_sound_get_pitch", - "audio_sound_get_track_position", - "audio_sound_is_playable", - "audio_sound_length", - "audio_sound_loop", - "audio_sound_loop_end", - "audio_sound_loop_start", - "audio_sound_pitch", - "audio_sound_set_listener_mask", - "audio_sound_set_track_position", - "audio_start_recording", - "audio_start_sync_group", - "audio_stop_all", - "audio_stop_recording", - "audio_stop_sound", - "audio_stop_sync_group", - "audio_sync_group_debug", - "audio_sync_group_get_track_pos", - "audio_sync_group_is_paused", - "audio_sync_group_is_playing", - "audio_system_is_available", - "audio_system_is_initialised", - "base64_decode", - "base64_encode", - "bool", - "browser_input_capture", - "buffer_async_group_begin", - "buffer_async_group_end", - "buffer_async_group_option", - "buffer_base64_decode", - "buffer_base64_decode_ext", - "buffer_base64_encode", - "buffer_compress", - "buffer_copy", - "buffer_copy_from_vertex_buffer", - "buffer_copy_stride", - "buffer_crc32", - "buffer_create", - "buffer_create_from_vertex_buffer", - "buffer_create_from_vertex_buffer_ext", - "buffer_decompress", - "buffer_delete", - "buffer_exists", - "buffer_fill", - "buffer_get_address", - "buffer_get_alignment", - "buffer_get_size", - "buffer_get_surface", - "buffer_get_type", - "buffer_load", - "buffer_load_async", - "buffer_load_ext", - "buffer_load_partial", - "buffer_md5", - "buffer_peek", - "buffer_poke", - "buffer_read", - "buffer_resize", - "buffer_save", - "buffer_save_async", - "buffer_save_ext", - "buffer_seek", - "buffer_set_surface", - "buffer_set_used_size", - "buffer_sha1", - "buffer_sizeof", - "buffer_tell", - "buffer_write", - "call_cancel", - "call_later", - "camera_apply", - "camera_copy_transforms", - "camera_create", - "camera_create_view", - "camera_destroy", - "camera_get_active", - "camera_get_begin_script", - "camera_get_default", - "camera_get_end_script", - "camera_get_proj_mat", - "camera_get_update_script", - "camera_get_view_angle", - "camera_get_view_border_x", - "camera_get_view_border_y", - "camera_get_view_height", - "camera_get_view_mat", - "camera_get_view_speed_x", - "camera_get_view_speed_y", - "camera_get_view_target", - "camera_get_view_width", - "camera_get_view_x", - "camera_get_view_y", - "camera_set_begin_script", - "camera_set_default", - "camera_set_end_script", - "camera_set_proj_mat", - "camera_set_update_script", - "camera_set_view_angle", - "camera_set_view_border", - "camera_set_view_mat", - "camera_set_view_pos", - "camera_set_view_size", - "camera_set_view_speed", - "camera_set_view_target", - "ceil", - "choose", - "chr", - "clamp", - "clickable_add", - "clickable_add_ext", - "clickable_change", - "clickable_change_ext", - "clickable_delete", - "clickable_exists", - "clickable_set_style", - "clipboard_get_text", - "clipboard_has_text", - "clipboard_set_text", - "cloud_file_save", - "cloud_string_save", - "cloud_synchronise", - "code_is_compiled", - "collision_circle", - "collision_circle_list", - "collision_ellipse", - "collision_ellipse_list", - "collision_line", - "collision_line_list", - "collision_point", - "collision_point_list", - "collision_rectangle", - "collision_rectangle_list", - "color_get_blue", - "color_get_green", - "color_get_hue", - "color_get_red", - "color_get_saturation", - "color_get_value", - "colour_get_blue", - "colour_get_green", - "colour_get_hue", - "colour_get_red", - "colour_get_saturation", - "colour_get_value", - "cos", - "darccos", - "darcsin", - "darctan", - "darctan2", - "date_compare_date", - "date_compare_datetime", - "date_compare_time", - "date_create_datetime", - "date_current_datetime", - "date_date_of", - "date_date_string", - "date_datetime_string", - "date_day_span", - "date_days_in_month", - "date_days_in_year", - "date_get_day", - "date_get_day_of_year", - "date_get_hour", - "date_get_hour_of_year", - "date_get_minute", - "date_get_minute_of_year", - "date_get_month", - "date_get_second", - "date_get_second_of_year", - "date_get_timezone", - "date_get_week", - "date_get_weekday", - "date_get_year", - "date_hour_span", - "date_inc_day", - "date_inc_hour", - "date_inc_minute", - "date_inc_month", - "date_inc_second", - "date_inc_week", - "date_inc_year", - "date_is_today", - "date_leap_year", - "date_minute_span", - "date_month_span", - "date_second_span", - "date_set_timezone", - "date_time_of", - "date_time_string", - "date_valid_datetime", - "date_week_span", - "date_year_span", - "db_to_lin", - "dbg_add_font_glyphs", - "dbg_button", - "dbg_checkbox", - "dbg_color", - "dbg_colour", - "dbg_drop_down", - "dbg_same_line", - "dbg_section", - "dbg_section_delete", - "dbg_section_exists", - "dbg_slider", - "dbg_slider_int", - "dbg_sprite", - "dbg_text", - "dbg_text_input", - "dbg_view", - "dbg_view_delete", - "dbg_view_exists", - "dbg_watch", - "dcos", - "debug_event", - "debug_get_callstack", - "degtorad", - "device_get_tilt_x", - "device_get_tilt_y", - "device_get_tilt_z", - "device_is_keypad_open", - "device_mouse_check_button", - "device_mouse_check_button_pressed", - "device_mouse_check_button_released", - "device_mouse_dbclick_enable", - "device_mouse_raw_x", - "device_mouse_raw_y", - "device_mouse_x", - "device_mouse_x_to_gui", - "device_mouse_y", - "device_mouse_y_to_gui", - "directory_create", - "directory_destroy", - "directory_exists", - "display_get_dpi_x", - "display_get_dpi_y", - "display_get_frequency", - "display_get_gui_height", - "display_get_gui_width", - "display_get_height", - "display_get_orientation", - "display_get_sleep_margin", - "display_get_timing_method", - "display_get_width", - "display_mouse_get_x", - "display_mouse_get_y", - "display_mouse_set", - "display_reset", - "display_set_gui_maximise", - "display_set_gui_maximize", - "display_set_gui_size", - "display_set_sleep_margin", - "display_set_timing_method", - "display_set_ui_visibility", - "distance_to_object", - "distance_to_point", - "dot_product", - "dot_product_3d", - "dot_product_3d_normalised", - "dot_product_3d_normalized", - "dot_product_normalised", - "dot_product_normalized", - "draw_arrow", - "draw_button", - "draw_circle", - "draw_circle_color", - "draw_circle_colour", - "draw_clear", - "draw_clear_alpha", - "draw_ellipse", - "draw_ellipse_color", - "draw_ellipse_colour", - "draw_enable_drawevent", - "draw_enable_skeleton_blendmodes", - "draw_enable_swf_aa", - "draw_flush", - "draw_get_alpha", - "draw_get_color", - "draw_get_colour", - "draw_get_enable_skeleton_blendmodes", - "draw_get_font", - "draw_get_halign", - "draw_get_lighting", - "draw_get_swf_aa_level", - "draw_get_valign", - "draw_getpixel", - "draw_getpixel_ext", - "draw_healthbar", - "draw_highscore", - "draw_light_define_ambient", - "draw_light_define_direction", - "draw_light_define_point", - "draw_light_enable", - "draw_light_get", - "draw_light_get_ambient", - "draw_line", - "draw_line_color", - "draw_line_colour", - "draw_line_width", - "draw_line_width_color", - "draw_line_width_colour", - "draw_path", - "draw_point", - "draw_point_color", - "draw_point_colour", - "draw_primitive_begin", - "draw_primitive_begin_texture", - "draw_primitive_end", - "draw_rectangle", - "draw_rectangle_color", - "draw_rectangle_colour", - "draw_roundrect", - "draw_roundrect_color", - "draw_roundrect_color_ext", - "draw_roundrect_colour", - "draw_roundrect_colour_ext", - "draw_roundrect_ext", - "draw_self", - "draw_set_alpha", - "draw_set_circle_precision", - "draw_set_color", - "draw_set_colour", - "draw_set_font", - "draw_set_halign", - "draw_set_lighting", - "draw_set_swf_aa_level", - "draw_set_valign", - "draw_skeleton", - "draw_skeleton_collision", - "draw_skeleton_instance", - "draw_skeleton_time", - "draw_sprite", - "draw_sprite_ext", - "draw_sprite_general", - "draw_sprite_part", - "draw_sprite_part_ext", - "draw_sprite_pos", - "draw_sprite_stretched", - "draw_sprite_stretched_ext", - "draw_sprite_tiled", - "draw_sprite_tiled_ext", - "draw_surface", - "draw_surface_ext", - "draw_surface_general", - "draw_surface_part", - "draw_surface_part_ext", - "draw_surface_stretched", - "draw_surface_stretched_ext", - "draw_surface_tiled", - "draw_surface_tiled_ext", - "draw_text", - "draw_text_color", - "draw_text_colour", - "draw_text_ext", - "draw_text_ext_color", - "draw_text_ext_colour", - "draw_text_ext_transformed", - "draw_text_ext_transformed_color", - "draw_text_ext_transformed_colour", - "draw_text_transformed", - "draw_text_transformed_color", - "draw_text_transformed_colour", - "draw_texture_flush", - "draw_tile", - "draw_tilemap", - "draw_triangle", - "draw_triangle_color", - "draw_triangle_colour", - "draw_vertex", - "draw_vertex_color", - "draw_vertex_colour", - "draw_vertex_texture", - "draw_vertex_texture_color", - "draw_vertex_texture_colour", - "ds_exists", - "ds_grid_add", - "ds_grid_add_disk", - "ds_grid_add_grid_region", - "ds_grid_add_region", - "ds_grid_clear", - "ds_grid_copy", - "ds_grid_create", - "ds_grid_destroy", - "ds_grid_get", - "ds_grid_get_disk_max", - "ds_grid_get_disk_mean", - "ds_grid_get_disk_min", - "ds_grid_get_disk_sum", - "ds_grid_get_max", - "ds_grid_get_mean", - "ds_grid_get_min", - "ds_grid_get_sum", - "ds_grid_height", - "ds_grid_multiply", - "ds_grid_multiply_disk", - "ds_grid_multiply_grid_region", - "ds_grid_multiply_region", - "ds_grid_read", - "ds_grid_resize", - "ds_grid_set", - "ds_grid_set_disk", - "ds_grid_set_grid_region", - "ds_grid_set_region", - "ds_grid_shuffle", - "ds_grid_sort", - "ds_grid_to_mp_grid", - "ds_grid_value_disk_exists", - "ds_grid_value_disk_x", - "ds_grid_value_disk_y", - "ds_grid_value_exists", - "ds_grid_value_x", - "ds_grid_value_y", - "ds_grid_width", - "ds_grid_write", - "ds_list_add", - "ds_list_clear", - "ds_list_copy", - "ds_list_create", - "ds_list_delete", - "ds_list_destroy", - "ds_list_empty", - "ds_list_find_index", - "ds_list_find_value", - "ds_list_insert", - "ds_list_is_list", - "ds_list_is_map", - "ds_list_mark_as_list", - "ds_list_mark_as_map", - "ds_list_read", - "ds_list_replace", - "ds_list_set", - "ds_list_shuffle", - "ds_list_size", - "ds_list_sort", - "ds_list_write", - "ds_map_add", - "ds_map_add_list", - "ds_map_add_map", - "ds_map_clear", - "ds_map_copy", - "ds_map_create", - "ds_map_delete", - "ds_map_destroy", - "ds_map_empty", - "ds_map_exists", - "ds_map_find_first", - "ds_map_find_last", - "ds_map_find_next", - "ds_map_find_previous", - "ds_map_find_value", - "ds_map_is_list", - "ds_map_is_map", - "ds_map_keys_to_array", - "ds_map_read", - "ds_map_replace", - "ds_map_replace_list", - "ds_map_replace_map", - "ds_map_secure_load", - "ds_map_secure_load_buffer", - "ds_map_secure_save", - "ds_map_secure_save_buffer", - "ds_map_set", - "ds_map_size", - "ds_map_values_to_array", - "ds_map_write", - "ds_priority_add", - "ds_priority_change_priority", - "ds_priority_clear", - "ds_priority_copy", - "ds_priority_create", - "ds_priority_delete_max", - "ds_priority_delete_min", - "ds_priority_delete_value", - "ds_priority_destroy", - "ds_priority_empty", - "ds_priority_find_max", - "ds_priority_find_min", - "ds_priority_find_priority", - "ds_priority_read", - "ds_priority_size", - "ds_priority_write", - "ds_queue_clear", - "ds_queue_copy", - "ds_queue_create", - "ds_queue_dequeue", - "ds_queue_destroy", - "ds_queue_empty", - "ds_queue_enqueue", - "ds_queue_head", - "ds_queue_read", - "ds_queue_size", - "ds_queue_tail", - "ds_queue_write", - "ds_set_precision", - "ds_stack_clear", - "ds_stack_copy", - "ds_stack_create", - "ds_stack_destroy", - "ds_stack_empty", - "ds_stack_pop", - "ds_stack_push", - "ds_stack_read", - "ds_stack_size", - "ds_stack_top", - "ds_stack_write", - "dsin", - "dtan", - "effect_clear", - "effect_create_above", - "effect_create_below", - "effect_create_depth", - "effect_create_layer", - "environment_get_variable", - "event_inherited", - "event_perform", - "event_perform_async", - "event_perform_object", - "event_user", - "exception_unhandled_handler", - "exp", - "extension_exists", - "extension_get_option_count", - "extension_get_option_names", - "extension_get_option_value", - "extension_get_options", - "extension_get_version", - "external_call", - "external_define", - "external_free", - "file_attributes", - "file_bin_close", - "file_bin_open", - "file_bin_position", - "file_bin_read_byte", - "file_bin_rewrite", - "file_bin_seek", - "file_bin_size", - "file_bin_write_byte", - "file_copy", - "file_delete", - "file_exists", - "file_find_close", - "file_find_first", - "file_find_next", - "file_rename", - "file_text_close", - "file_text_eof", - "file_text_eoln", - "file_text_open_append", - "file_text_open_from_string", - "file_text_open_read", - "file_text_open_write", - "file_text_read_real", - "file_text_read_string", - "file_text_readln", - "file_text_write_real", - "file_text_write_string", - "file_text_writeln", - "filename_change_ext", - "filename_dir", - "filename_drive", - "filename_ext", - "filename_name", - "filename_path", - "floor", - "font_add", - "font_add_enable_aa", - "font_add_get_enable_aa", - "font_add_sprite", - "font_add_sprite_ext", - "font_cache_glyph", - "font_delete", - "font_enable_effects", - "font_enable_sdf", - "font_exists", - "font_get_bold", - "font_get_first", - "font_get_fontname", - "font_get_info", - "font_get_italic", - "font_get_last", - "font_get_name", - "font_get_sdf_enabled", - "font_get_sdf_spread", - "font_get_size", - "font_get_texture", - "font_get_uvs", - "font_replace_sprite", - "font_replace_sprite_ext", - "font_sdf_spread", - "font_set_cache_size", - "frac", - "fx_create", - "fx_get_name", - "fx_get_parameter", - "fx_get_parameter_names", - "fx_get_parameters", - "fx_get_single_layer", - "fx_set_parameter", - "fx_set_parameters", - "fx_set_single_layer", - "game_change", - "game_end", - "game_get_speed", - "game_load", - "game_load_buffer", - "game_restart", - "game_save", - "game_save_buffer", - "game_set_speed", - "gamepad_axis_count", - "gamepad_axis_value", - "gamepad_button_check", - "gamepad_button_check_pressed", - "gamepad_button_check_released", - "gamepad_button_count", - "gamepad_button_value", - "gamepad_get_axis_deadzone", - "gamepad_get_button_threshold", - "gamepad_get_description", - "gamepad_get_device_count", - "gamepad_get_guid", - "gamepad_get_mapping", - "gamepad_get_option", - "gamepad_hat_count", - "gamepad_hat_value", - "gamepad_is_connected", - "gamepad_is_supported", - "gamepad_remove_mapping", - "gamepad_set_axis_deadzone", - "gamepad_set_button_threshold", - "gamepad_set_color", - "gamepad_set_colour", - "gamepad_set_option", - "gamepad_set_vibration", - "gamepad_test_mapping", - "gc_collect", - "gc_enable", - "gc_get_stats", - "gc_get_target_frame_time", - "gc_is_enabled", - "gc_target_frame_time", - "gesture_double_tap_distance", - "gesture_double_tap_time", - "gesture_drag_distance", - "gesture_drag_time", - "gesture_flick_speed", - "gesture_get_double_tap_distance", - "gesture_get_double_tap_time", - "gesture_get_drag_distance", - "gesture_get_drag_time", - "gesture_get_flick_speed", - "gesture_get_pinch_angle_away", - "gesture_get_pinch_angle_towards", - "gesture_get_pinch_distance", - "gesture_get_rotate_angle", - "gesture_get_rotate_time", - "gesture_get_tap_count", - "gesture_pinch_angle_away", - "gesture_pinch_angle_towards", - "gesture_pinch_distance", - "gesture_rotate_angle", - "gesture_rotate_time", - "gesture_tap_count", - "get_integer", - "get_integer_async", - "get_login_async", - "get_open_filename", - "get_open_filename_ext", - "get_save_filename", - "get_save_filename_ext", - "get_string", - "get_string_async", - "get_timer", - "gif_add_surface", - "gif_open", - "gif_save", - "gif_save_buffer", - "gml_pragma", - "gml_release_mode", - "gpu_get_alphatestenable", - "gpu_get_alphatestref", - "gpu_get_blendenable", - "gpu_get_blendmode", - "gpu_get_blendmode_dest", - "gpu_get_blendmode_destalpha", - "gpu_get_blendmode_ext", - "gpu_get_blendmode_ext_sepalpha", - "gpu_get_blendmode_src", - "gpu_get_blendmode_srcalpha", - "gpu_get_colorwriteenable", - "gpu_get_colourwriteenable", - "gpu_get_cullmode", - "gpu_get_depth", - "gpu_get_fog", - "gpu_get_state", - "gpu_get_tex_filter", - "gpu_get_tex_filter_ext", - "gpu_get_tex_max_aniso", - "gpu_get_tex_max_aniso_ext", - "gpu_get_tex_max_mip", - "gpu_get_tex_max_mip_ext", - "gpu_get_tex_min_mip", - "gpu_get_tex_min_mip_ext", - "gpu_get_tex_mip_bias", - "gpu_get_tex_mip_bias_ext", - "gpu_get_tex_mip_enable", - "gpu_get_tex_mip_enable_ext", - "gpu_get_tex_mip_filter", - "gpu_get_tex_mip_filter_ext", - "gpu_get_tex_repeat", - "gpu_get_tex_repeat_ext", - "gpu_get_texfilter", - "gpu_get_texfilter_ext", - "gpu_get_texrepeat", - "gpu_get_texrepeat_ext", - "gpu_get_zfunc", - "gpu_get_ztestenable", - "gpu_get_zwriteenable", - "gpu_pop_state", - "gpu_push_state", - "gpu_set_alphatestenable", - "gpu_set_alphatestref", - "gpu_set_blendenable", - "gpu_set_blendmode", - "gpu_set_blendmode_ext", - "gpu_set_blendmode_ext_sepalpha", - "gpu_set_colorwriteenable", - "gpu_set_colourwriteenable", - "gpu_set_cullmode", - "gpu_set_depth", - "gpu_set_fog", - "gpu_set_state", - "gpu_set_tex_filter", - "gpu_set_tex_filter_ext", - "gpu_set_tex_max_aniso", - "gpu_set_tex_max_aniso_ext", - "gpu_set_tex_max_mip", - "gpu_set_tex_max_mip_ext", - "gpu_set_tex_min_mip", - "gpu_set_tex_min_mip_ext", - "gpu_set_tex_mip_bias", - "gpu_set_tex_mip_bias_ext", - "gpu_set_tex_mip_enable", - "gpu_set_tex_mip_enable_ext", - "gpu_set_tex_mip_filter", - "gpu_set_tex_mip_filter_ext", - "gpu_set_tex_repeat", - "gpu_set_tex_repeat_ext", - "gpu_set_texfilter", - "gpu_set_texfilter_ext", - "gpu_set_texrepeat", - "gpu_set_texrepeat_ext", - "gpu_set_zfunc", - "gpu_set_ztestenable", - "gpu_set_zwriteenable", - "handle_parse", - "highscore_add", - "highscore_clear", - "highscore_name", - "highscore_value", - "http_get", - "http_get_file", - "http_get_request_crossorigin", - "http_post_string", - "http_request", - "http_set_request_crossorigin", - "iap_acquire", - "iap_activate", - "iap_consume", - "iap_enumerate_products", - "iap_product_details", - "iap_purchase_details", - "iap_restore_all", - "iap_status", - "ini_close", - "ini_key_delete", - "ini_key_exists", - "ini_open", - "ini_open_from_string", - "ini_read_real", - "ini_read_string", - "ini_section_delete", - "ini_section_exists", - "ini_write_real", - "ini_write_string", - "instance_activate_all", - "instance_activate_layer", - "instance_activate_object", - "instance_activate_region", - "instance_change", - "instance_copy", - "instance_create_depth", - "instance_create_layer", - "instance_deactivate_all", - "instance_deactivate_layer", - "instance_deactivate_object", - "instance_deactivate_region", - "instance_destroy", - "instance_exists", - "instance_find", - "instance_furthest", - "instance_id_get", - "instance_nearest", - "instance_number", - "instance_place", - "instance_place_list", - "instance_position", - "instance_position_list", - "instanceof", - "int64", - "io_clear", - "irandom", - "irandom_range", - "is_array", - "is_bool", - "is_callable", - "is_debug_overlay_open", - "is_handle", - "is_infinity", - "is_instanceof", - "is_int32", - "is_int64", - "is_keyboard_used_debug_overlay", - "is_method", - "is_mouse_over_debug_overlay", - "is_nan", - "is_numeric", - "is_ptr", - "is_real", - "is_string", - "is_struct", - "is_undefined", - "json_decode", - "json_encode", - "json_parse", - "json_stringify", - "keyboard_check", - "keyboard_check_direct", - "keyboard_check_pressed", - "keyboard_check_released", - "keyboard_clear", - "keyboard_get_map", - "keyboard_get_numlock", - "keyboard_key_press", - "keyboard_key_release", - "keyboard_set_map", - "keyboard_set_numlock", - "keyboard_unset_map", - "keyboard_virtual_height", - "keyboard_virtual_hide", - "keyboard_virtual_show", - "keyboard_virtual_status", - "layer_add_instance", - "layer_background_alpha", - "layer_background_blend", - "layer_background_change", - "layer_background_create", - "layer_background_destroy", - "layer_background_exists", - "layer_background_get_alpha", - "layer_background_get_blend", - "layer_background_get_htiled", - "layer_background_get_id", - "layer_background_get_index", - "layer_background_get_speed", - "layer_background_get_sprite", - "layer_background_get_stretch", - "layer_background_get_visible", - "layer_background_get_vtiled", - "layer_background_get_xscale", - "layer_background_get_yscale", - "layer_background_htiled", - "layer_background_index", - "layer_background_speed", - "layer_background_sprite", - "layer_background_stretch", - "layer_background_visible", - "layer_background_vtiled", - "layer_background_xscale", - "layer_background_yscale", - "layer_clear_fx", - "layer_create", - "layer_depth", - "layer_destroy", - "layer_destroy_instances", - "layer_element_move", - "layer_enable_fx", - "layer_exists", - "layer_force_draw_depth", - "layer_fx_is_enabled", - "layer_get_all", - "layer_get_all_elements", - "layer_get_depth", - "layer_get_element_layer", - "layer_get_element_type", - "layer_get_forced_depth", - "layer_get_fx", - "layer_get_hspeed", - "layer_get_id", - "layer_get_id_at_depth", - "layer_get_name", - "layer_get_script_begin", - "layer_get_script_end", - "layer_get_shader", - "layer_get_target_room", - "layer_get_visible", - "layer_get_vspeed", - "layer_get_x", - "layer_get_y", - "layer_has_instance", - "layer_hspeed", - "layer_instance_get_instance", - "layer_is_draw_depth_forced", - "layer_reset_target_room", - "layer_script_begin", - "layer_script_end", - "layer_sequence_angle", - "layer_sequence_create", - "layer_sequence_destroy", - "layer_sequence_exists", - "layer_sequence_get_angle", - "layer_sequence_get_headdir", - "layer_sequence_get_headpos", - "layer_sequence_get_instance", - "layer_sequence_get_length", - "layer_sequence_get_sequence", - "layer_sequence_get_speedscale", - "layer_sequence_get_x", - "layer_sequence_get_xscale", - "layer_sequence_get_y", - "layer_sequence_get_yscale", - "layer_sequence_headdir", - "layer_sequence_headpos", - "layer_sequence_is_finished", - "layer_sequence_is_paused", - "layer_sequence_pause", - "layer_sequence_play", - "layer_sequence_speedscale", - "layer_sequence_x", - "layer_sequence_xscale", - "layer_sequence_y", - "layer_sequence_yscale", - "layer_set_fx", - "layer_set_target_room", - "layer_set_visible", - "layer_shader", - "layer_sprite_alpha", - "layer_sprite_angle", - "layer_sprite_blend", - "layer_sprite_change", - "layer_sprite_create", - "layer_sprite_destroy", - "layer_sprite_exists", - "layer_sprite_get_alpha", - "layer_sprite_get_angle", - "layer_sprite_get_blend", - "layer_sprite_get_id", - "layer_sprite_get_index", - "layer_sprite_get_speed", - "layer_sprite_get_sprite", - "layer_sprite_get_x", - "layer_sprite_get_xscale", - "layer_sprite_get_y", - "layer_sprite_get_yscale", - "layer_sprite_index", - "layer_sprite_speed", - "layer_sprite_x", - "layer_sprite_xscale", - "layer_sprite_y", - "layer_sprite_yscale", - "layer_tile_alpha", - "layer_tile_blend", - "layer_tile_change", - "layer_tile_create", - "layer_tile_destroy", - "layer_tile_exists", - "layer_tile_get_alpha", - "layer_tile_get_blend", - "layer_tile_get_region", - "layer_tile_get_sprite", - "layer_tile_get_visible", - "layer_tile_get_x", - "layer_tile_get_xscale", - "layer_tile_get_y", - "layer_tile_get_yscale", - "layer_tile_region", - "layer_tile_visible", - "layer_tile_x", - "layer_tile_xscale", - "layer_tile_y", - "layer_tile_yscale", - "layer_tilemap_create", - "layer_tilemap_destroy", - "layer_tilemap_exists", - "layer_tilemap_get_id", - "layer_vspeed", - "layer_x", - "layer_y", - "lengthdir_x", - "lengthdir_y", - "lerp", - "lin_to_db", - "ln", - "load_csv", - "log10", - "log2", - "logn", - "make_color_hsv", - "make_color_rgb", - "make_colour_hsv", - "make_colour_rgb", - "math_get_epsilon", - "math_set_epsilon", - "matrix_build", - "matrix_build_identity", - "matrix_build_lookat", - "matrix_build_projection_ortho", - "matrix_build_projection_perspective", - "matrix_build_projection_perspective_fov", - "matrix_get", - "matrix_multiply", - "matrix_set", - "matrix_stack_clear", - "matrix_stack_is_empty", - "matrix_stack_pop", - "matrix_stack_push", - "matrix_stack_set", - "matrix_stack_top", - "matrix_transform_vertex", - "max", - "md5_file", - "md5_string_unicode", - "md5_string_utf8", - "mean", - "median", - "merge_color", - "merge_colour", - "method", - "method_call", - "method_get_index", - "method_get_self", - "min", - "motion_add", - "motion_set", - "mouse_check_button", - "mouse_check_button_pressed", - "mouse_check_button_released", - "mouse_clear", - "mouse_wheel_down", - "mouse_wheel_up", - "move_and_collide", - "move_bounce_all", - "move_bounce_solid", - "move_contact_all", - "move_contact_solid", - "move_outside_all", - "move_outside_solid", - "move_random", - "move_snap", - "move_towards_point", - "move_wrap", - "mp_grid_add_cell", - "mp_grid_add_instances", - "mp_grid_add_rectangle", - "mp_grid_clear_all", - "mp_grid_clear_cell", - "mp_grid_clear_rectangle", - "mp_grid_create", - "mp_grid_destroy", - "mp_grid_draw", - "mp_grid_get_cell", - "mp_grid_path", - "mp_grid_to_ds_grid", - "mp_linear_path", - "mp_linear_path_object", - "mp_linear_step", - "mp_linear_step_object", - "mp_potential_path", - "mp_potential_path_object", - "mp_potential_settings", - "mp_potential_step", - "mp_potential_step_object", - "nameof", - "network_connect", - "network_connect_async", - "network_connect_raw", - "network_connect_raw_async", - "network_create_server", - "network_create_server_raw", - "network_create_socket", - "network_create_socket_ext", - "network_destroy", - "network_resolve", - "network_send_broadcast", - "network_send_packet", - "network_send_raw", - "network_send_udp", - "network_send_udp_raw", - "network_set_config", - "network_set_timeout", - "object_exists", - "object_get_mask", - "object_get_name", - "object_get_parent", - "object_get_persistent", - "object_get_physics", - "object_get_solid", - "object_get_sprite", - "object_get_visible", - "object_is_ancestor", - "object_set_mask", - "object_set_persistent", - "object_set_solid", - "object_set_sprite", - "object_set_visible", - "ord", - "os_check_permission", - "os_get_config", - "os_get_info", - "os_get_language", - "os_get_region", - "os_is_network_connected", - "os_is_paused", - "os_lock_orientation", - "os_powersave_enable", - "os_request_permission", - "os_set_orientation_lock", - "parameter_count", - "parameter_string", - "part_emitter_burst", - "part_emitter_clear", - "part_emitter_create", - "part_emitter_delay", - "part_emitter_destroy", - "part_emitter_destroy_all", - "part_emitter_enable", - "part_emitter_exists", - "part_emitter_interval", - "part_emitter_region", - "part_emitter_relative", - "part_emitter_stream", - "part_particles_burst", - "part_particles_clear", - "part_particles_count", - "part_particles_create", - "part_particles_create_color", - "part_particles_create_colour", - "part_system_angle", - "part_system_automatic_draw", - "part_system_automatic_update", - "part_system_clear", - "part_system_color", - "part_system_colour", - "part_system_create", - "part_system_create_layer", - "part_system_depth", - "part_system_destroy", - "part_system_draw_order", - "part_system_drawit", - "part_system_exists", - "part_system_get_info", - "part_system_get_layer", - "part_system_global_space", - "part_system_layer", - "part_system_position", - "part_system_update", - "part_type_alpha1", - "part_type_alpha2", - "part_type_alpha3", - "part_type_blend", - "part_type_clear", - "part_type_color1", - "part_type_color2", - "part_type_color3", - "part_type_color_hsv", - "part_type_color_mix", - "part_type_color_rgb", - "part_type_colour1", - "part_type_colour2", - "part_type_colour3", - "part_type_colour_hsv", - "part_type_colour_mix", - "part_type_colour_rgb", - "part_type_create", - "part_type_death", - "part_type_destroy", - "part_type_direction", - "part_type_exists", - "part_type_gravity", - "part_type_life", - "part_type_orientation", - "part_type_scale", - "part_type_shape", - "part_type_size", - "part_type_size_x", - "part_type_size_y", - "part_type_speed", - "part_type_sprite", - "part_type_step", - "part_type_subimage", - "particle_exists", - "particle_get_info", - "path_add", - "path_add_point", - "path_append", - "path_assign", - "path_change_point", - "path_clear_points", - "path_delete", - "path_delete_point", - "path_duplicate", - "path_end", - "path_exists", - "path_flip", - "path_get_closed", - "path_get_kind", - "path_get_length", - "path_get_name", - "path_get_number", - "path_get_point_speed", - "path_get_point_x", - "path_get_point_y", - "path_get_precision", - "path_get_speed", - "path_get_x", - "path_get_y", - "path_insert_point", - "path_mirror", - "path_rescale", - "path_reverse", - "path_rotate", - "path_set_closed", - "path_set_kind", - "path_set_precision", - "path_shift", - "path_start", - "physics_apply_angular_impulse", - "physics_apply_force", - "physics_apply_impulse", - "physics_apply_local_force", - "physics_apply_local_impulse", - "physics_apply_torque", - "physics_draw_debug", - "physics_fixture_add_point", - "physics_fixture_bind", - "physics_fixture_bind_ext", - "physics_fixture_create", - "physics_fixture_delete", - "physics_fixture_set_angular_damping", - "physics_fixture_set_awake", - "physics_fixture_set_box_shape", - "physics_fixture_set_chain_shape", - "physics_fixture_set_circle_shape", - "physics_fixture_set_collision_group", - "physics_fixture_set_density", - "physics_fixture_set_edge_shape", - "physics_fixture_set_friction", - "physics_fixture_set_kinematic", - "physics_fixture_set_linear_damping", - "physics_fixture_set_polygon_shape", - "physics_fixture_set_restitution", - "physics_fixture_set_sensor", - "physics_get_density", - "physics_get_friction", - "physics_get_restitution", - "physics_joint_delete", - "physics_joint_distance_create", - "physics_joint_enable_motor", - "physics_joint_friction_create", - "physics_joint_gear_create", - "physics_joint_get_value", - "physics_joint_prismatic_create", - "physics_joint_pulley_create", - "physics_joint_revolute_create", - "physics_joint_rope_create", - "physics_joint_set_value", - "physics_joint_weld_create", - "physics_joint_wheel_create", - "physics_mass_properties", - "physics_particle_count", - "physics_particle_create", - "physics_particle_delete", - "physics_particle_delete_region_box", - "physics_particle_delete_region_circle", - "physics_particle_delete_region_poly", - "physics_particle_draw", - "physics_particle_draw_ext", - "physics_particle_get_damping", - "physics_particle_get_data", - "physics_particle_get_data_particle", - "physics_particle_get_density", - "physics_particle_get_gravity_scale", - "physics_particle_get_group_flags", - "physics_particle_get_max_count", - "physics_particle_get_radius", - "physics_particle_group_add_point", - "physics_particle_group_begin", - "physics_particle_group_box", - "physics_particle_group_circle", - "physics_particle_group_count", - "physics_particle_group_delete", - "physics_particle_group_end", - "physics_particle_group_get_ang_vel", - "physics_particle_group_get_angle", - "physics_particle_group_get_centre_x", - "physics_particle_group_get_centre_y", - "physics_particle_group_get_data", - "physics_particle_group_get_inertia", - "physics_particle_group_get_mass", - "physics_particle_group_get_vel_x", - "physics_particle_group_get_vel_y", - "physics_particle_group_get_x", - "physics_particle_group_get_y", - "physics_particle_group_join", - "physics_particle_group_polygon", - "physics_particle_set_category_flags", - "physics_particle_set_damping", - "physics_particle_set_density", - "physics_particle_set_flags", - "physics_particle_set_gravity_scale", - "physics_particle_set_group_flags", - "physics_particle_set_max_count", - "physics_particle_set_radius", - "physics_pause_enable", - "physics_remove_fixture", - "physics_set_density", - "physics_set_friction", - "physics_set_restitution", - "physics_test_overlap", - "physics_world_create", - "physics_world_draw_debug", - "physics_world_gravity", - "physics_world_update_iterations", - "physics_world_update_speed", - "place_empty", - "place_free", - "place_meeting", - "place_snapped", - "point_direction", - "point_distance", - "point_distance_3d", - "point_in_circle", - "point_in_rectangle", - "point_in_triangle", - "position_change", - "position_destroy", - "position_empty", - "position_meeting", - "power", - "ptr", - "radtodeg", - "random", - "random_get_seed", - "random_range", - "random_set_seed", - "randomise", - "randomize", - "real", - "rectangle_in_circle", - "rectangle_in_rectangle", - "rectangle_in_triangle", - "ref_create", - "rollback_chat", - "rollback_create_game", - "rollback_define_extra_network_latency", - "rollback_define_input", - "rollback_define_input_frame_delay", - "rollback_define_mock_input", - "rollback_define_player", - "rollback_display_events", - "rollback_get_info", - "rollback_get_input", - "rollback_get_player_prefs", - "rollback_join_game", - "rollback_leave_game", - "rollback_set_player_prefs", - "rollback_start_game", - "rollback_sync_on_frame", - "rollback_use_late_join", - "rollback_use_manual_start", - "rollback_use_player_prefs", - "rollback_use_random_input", - "room_add", - "room_assign", - "room_duplicate", - "room_exists", - "room_get_camera", - "room_get_info", - "room_get_name", - "room_get_viewport", - "room_goto", - "room_goto_next", - "room_goto_previous", - "room_instance_add", - "room_instance_clear", - "room_next", - "room_previous", - "room_restart", - "room_set_camera", - "room_set_height", - "room_set_persistent", - "room_set_view_enabled", - "room_set_viewport", - "room_set_width", - "round", - "scheduler_resolution_get", - "scheduler_resolution_set", - "screen_save", - "screen_save_part", - "script_execute", - "script_execute_ext", - "script_exists", - "script_get_name", - "sequence_create", - "sequence_destroy", - "sequence_exists", - "sequence_get", - "sequence_get_objects", - "sequence_instance_override_object", - "sequence_keyframe_new", - "sequence_keyframedata_new", - "sequence_track_new", - "sha1_file", - "sha1_string_unicode", - "sha1_string_utf8", - "shader_current", - "shader_enable_corner_id", - "shader_get_name", - "shader_get_sampler_index", - "shader_get_uniform", - "shader_is_compiled", - "shader_reset", - "shader_set", - "shader_set_uniform_f", - "shader_set_uniform_f_array", - "shader_set_uniform_f_buffer", - "shader_set_uniform_i", - "shader_set_uniform_i_array", - "shader_set_uniform_matrix", - "shader_set_uniform_matrix_array", - "shaders_are_supported", - "shop_leave_rating", - "show_debug_message", - "show_debug_message_ext", - "show_debug_overlay", - "show_error", - "show_message", - "show_message_async", - "show_question", - "show_question_async", - "sign", - "sin", - "skeleton_animation_clear", - "skeleton_animation_get", - "skeleton_animation_get_duration", - "skeleton_animation_get_event_frames", - "skeleton_animation_get_ext", - "skeleton_animation_get_frame", - "skeleton_animation_get_frames", - "skeleton_animation_get_position", - "skeleton_animation_is_finished", - "skeleton_animation_is_looping", - "skeleton_animation_list", - "skeleton_animation_mix", - "skeleton_animation_set", - "skeleton_animation_set_ext", - "skeleton_animation_set_frame", - "skeleton_animation_set_position", - "skeleton_attachment_create", - "skeleton_attachment_create_color", - "skeleton_attachment_create_colour", - "skeleton_attachment_destroy", - "skeleton_attachment_exists", - "skeleton_attachment_get", - "skeleton_attachment_replace", - "skeleton_attachment_replace_color", - "skeleton_attachment_replace_colour", - "skeleton_attachment_set", - "skeleton_bone_data_get", - "skeleton_bone_data_set", - "skeleton_bone_list", - "skeleton_bone_state_get", - "skeleton_bone_state_set", - "skeleton_collision_draw_set", - "skeleton_find_slot", - "skeleton_get_bounds", - "skeleton_get_minmax", - "skeleton_get_num_bounds", - "skeleton_skin_create", - "skeleton_skin_get", - "skeleton_skin_list", - "skeleton_skin_set", - "skeleton_slot_alpha_get", - "skeleton_slot_color_get", - "skeleton_slot_color_set", - "skeleton_slot_colour_get", - "skeleton_slot_colour_set", - "skeleton_slot_data", - "skeleton_slot_data_instance", - "skeleton_slot_list", - "sprite_add", - "sprite_add_ext", - "sprite_add_from_surface", - "sprite_assign", - "sprite_collision_mask", - "sprite_create_from_surface", - "sprite_delete", - "sprite_duplicate", - "sprite_exists", - "sprite_flush", - "sprite_flush_multi", - "sprite_get_bbox_bottom", - "sprite_get_bbox_left", - "sprite_get_bbox_mode", - "sprite_get_bbox_right", - "sprite_get_bbox_top", - "sprite_get_height", - "sprite_get_info", - "sprite_get_name", - "sprite_get_nineslice", - "sprite_get_number", - "sprite_get_speed", - "sprite_get_speed_type", - "sprite_get_texture", - "sprite_get_tpe", - "sprite_get_uvs", - "sprite_get_width", - "sprite_get_xoffset", - "sprite_get_yoffset", - "sprite_merge", - "sprite_nineslice_create", - "sprite_prefetch", - "sprite_prefetch_multi", - "sprite_replace", - "sprite_save", - "sprite_save_strip", - "sprite_set_alpha_from_sprite", - "sprite_set_bbox", - "sprite_set_bbox_mode", - "sprite_set_cache_size", - "sprite_set_cache_size_ext", - "sprite_set_nineslice", - "sprite_set_offset", - "sprite_set_speed", - "sqr", - "sqrt", - "static_get", - "static_set", - "string", - "string_byte_at", - "string_byte_length", - "string_char_at", - "string_concat", - "string_concat_ext", - "string_copy", - "string_count", - "string_delete", - "string_digits", - "string_ends_with", - "string_ext", - "string_foreach", - "string_format", - "string_hash_to_newline", - "string_height", - "string_height_ext", - "string_insert", - "string_join", - "string_join_ext", - "string_last_pos", - "string_last_pos_ext", - "string_length", - "string_letters", - "string_lettersdigits", - "string_lower", - "string_ord_at", - "string_pos", - "string_pos_ext", - "string_repeat", - "string_replace", - "string_replace_all", - "string_set_byte_at", - "string_split", - "string_split_ext", - "string_starts_with", - "string_trim", - "string_trim_end", - "string_trim_start", - "string_upper", - "string_width", - "string_width_ext", - "struct_exists", - "struct_foreach", - "struct_get", - "struct_get_from_hash", - "struct_get_names", - "struct_names_count", - "struct_remove", - "struct_set", - "struct_set_from_hash", - "surface_copy", - "surface_copy_part", - "surface_create", - "surface_create_ext", - "surface_depth_disable", - "surface_exists", - "surface_format_is_supported", - "surface_free", - "surface_get_depth_disable", - "surface_get_format", - "surface_get_height", - "surface_get_target", - "surface_get_target_ext", - "surface_get_texture", - "surface_get_width", - "surface_getpixel", - "surface_getpixel_ext", - "surface_reset_target", - "surface_resize", - "surface_save", - "surface_save_part", - "surface_set_target", - "surface_set_target_ext", - "tag_get_asset_ids", - "tag_get_assets", - "tan", - "texture_debug_messages", - "texture_flush", - "texture_get_height", - "texture_get_texel_height", - "texture_get_texel_width", - "texture_get_uvs", - "texture_get_width", - "texture_global_scale", - "texture_is_ready", - "texture_prefetch", - "texture_set_stage", - "texturegroup_get_fonts", - "texturegroup_get_names", - "texturegroup_get_sprites", - "texturegroup_get_status", - "texturegroup_get_textures", - "texturegroup_get_tilesets", - "texturegroup_load", - "texturegroup_set_mode", - "texturegroup_unload", - "tile_get_empty", - "tile_get_flip", - "tile_get_index", - "tile_get_mirror", - "tile_get_rotate", - "tile_set_empty", - "tile_set_flip", - "tile_set_index", - "tile_set_mirror", - "tile_set_rotate", - "tilemap_clear", - "tilemap_get", - "tilemap_get_at_pixel", - "tilemap_get_cell_x_at_pixel", - "tilemap_get_cell_y_at_pixel", - "tilemap_get_frame", - "tilemap_get_global_mask", - "tilemap_get_height", - "tilemap_get_mask", - "tilemap_get_tile_height", - "tilemap_get_tile_width", - "tilemap_get_tileset", - "tilemap_get_width", - "tilemap_get_x", - "tilemap_get_y", - "tilemap_set", - "tilemap_set_at_pixel", - "tilemap_set_global_mask", - "tilemap_set_height", - "tilemap_set_mask", - "tilemap_set_width", - "tilemap_tileset", - "tilemap_x", - "tilemap_y", - "tileset_get_info", - "tileset_get_name", - "tileset_get_texture", - "tileset_get_uvs", - "time_bpm_to_seconds", - "time_seconds_to_bpm", - "time_source_create", - "time_source_destroy", - "time_source_exists", - "time_source_get_children", - "time_source_get_parent", - "time_source_get_period", - "time_source_get_reps_completed", - "time_source_get_reps_remaining", - "time_source_get_state", - "time_source_get_time_remaining", - "time_source_get_units", - "time_source_pause", - "time_source_reconfigure", - "time_source_reset", - "time_source_resume", - "time_source_start", - "time_source_stop", - "timeline_add", - "timeline_clear", - "timeline_delete", - "timeline_exists", - "timeline_get_name", - "timeline_max_moment", - "timeline_moment_add_script", - "timeline_moment_clear", - "timeline_size", - "typeof", - "url_get_domain", - "url_open", - "url_open_ext", - "url_open_full", - "uwp_device_touchscreen_available", - "uwp_livetile_badge_clear", - "uwp_livetile_badge_notification", - "uwp_livetile_notification_begin", - "uwp_livetile_notification_end", - "uwp_livetile_notification_expiry", - "uwp_livetile_notification_image_add", - "uwp_livetile_notification_secondary_begin", - "uwp_livetile_notification_tag", - "uwp_livetile_notification_template_add", - "uwp_livetile_notification_text_add", - "uwp_livetile_queue_enable", - "uwp_livetile_tile_clear", - "uwp_secondarytile_badge_clear", - "uwp_secondarytile_badge_notification", - "uwp_secondarytile_delete", - "uwp_secondarytile_pin", - "uwp_secondarytile_tile_clear", - "variable_clone", - "variable_get_hash", - "variable_global_exists", - "variable_global_get", - "variable_global_set", - "variable_instance_exists", - "variable_instance_get", - "variable_instance_get_names", - "variable_instance_names_count", - "variable_instance_set", - "variable_struct_exists", - "variable_struct_get", - "variable_struct_get_names", - "variable_struct_names_count", - "variable_struct_remove", - "variable_struct_set", - "vertex_argb", - "vertex_begin", - "vertex_color", - "vertex_colour", - "vertex_create_buffer", - "vertex_create_buffer_ext", - "vertex_create_buffer_from_buffer", - "vertex_create_buffer_from_buffer_ext", - "vertex_delete_buffer", - "vertex_end", - "vertex_float1", - "vertex_float2", - "vertex_float3", - "vertex_float4", - "vertex_format_add_color", - "vertex_format_add_colour", - "vertex_format_add_custom", - "vertex_format_add_normal", - "vertex_format_add_position", - "vertex_format_add_position_3d", - "vertex_format_add_texcoord", - "vertex_format_begin", - "vertex_format_delete", - "vertex_format_end", - "vertex_format_get_info", - "vertex_freeze", - "vertex_get_buffer_size", - "vertex_get_number", - "vertex_normal", - "vertex_position", - "vertex_position_3d", - "vertex_submit", - "vertex_submit_ext", - "vertex_texcoord", - "vertex_ubyte4", - "vertex_update_buffer_from_buffer", - "vertex_update_buffer_from_vertex", - "video_close", - "video_draw", - "video_enable_loop", - "video_get_duration", - "video_get_format", - "video_get_position", - "video_get_status", - "video_get_volume", - "video_is_looping", - "video_open", - "video_pause", - "video_resume", - "video_seek_to", - "video_set_volume", - "view_get_camera", - "view_get_hport", - "view_get_surface_id", - "view_get_visible", - "view_get_wport", - "view_get_xport", - "view_get_yport", - "view_set_camera", - "view_set_hport", - "view_set_surface_id", - "view_set_visible", - "view_set_wport", - "view_set_xport", - "view_set_yport", - "virtual_key_add", - "virtual_key_delete", - "virtual_key_hide", - "virtual_key_show", - "wallpaper_set_config", - "wallpaper_set_subscriptions", - "weak_ref_alive", - "weak_ref_any_alive", - "weak_ref_create", - "window_center", - "window_device", - "window_enable_borderless_fullscreen", - "window_get_borderless_fullscreen", - "window_get_caption", - "window_get_color", - "window_get_colour", - "window_get_cursor", - "window_get_fullscreen", - "window_get_height", - "window_get_showborder", - "window_get_visible_rects", - "window_get_width", - "window_get_x", - "window_get_y", - "window_handle", - "window_has_focus", - "window_mouse_get_delta_x", - "window_mouse_get_delta_y", - "window_mouse_get_locked", - "window_mouse_get_x", - "window_mouse_get_y", - "window_mouse_set", - "window_mouse_set_locked", - "window_set_caption", - "window_set_color", - "window_set_colour", - "window_set_cursor", - "window_set_fullscreen", - "window_set_max_height", - "window_set_max_width", - "window_set_min_height", - "window_set_min_width", - "window_set_position", - "window_set_rectangle", - "window_set_showborder", - "window_set_size", - "window_view_mouse_get_x", - "window_view_mouse_get_y", - "window_views_mouse_get_x", - "window_views_mouse_get_y", - "winphone_tile_background_color", - "winphone_tile_background_colour", - "zip_add_file", - "zip_create", - "zip_save", - "zip_unzip", - "zip_unzip_async" - ]; - const SYMBOLS = [ - "AudioEffect", - "AudioEffectType", - "AudioLFOType", + const LITERALS = [ + "audiogroup_default", + "GM_is_sandboxed", + "self", + "other", + "all", + "noone", + "ANSI_CHARSET", + "ARABIC_CHARSET", + "BALTIC_CHARSET", + "CHINESEBIG5_CHARSET", + "DEFAULT_CHARSET", + "EASTEUROPE_CHARSET", + "GB2312_CHARSET", "GM_build_date", "GM_build_type", - "GM_is_sandboxed", "GM_project_filename", "GM_runtime_version", "GM_version", + "GREEK_CHARSET", + "HANGEUL_CHARSET", + "HEBREW_CHARSET", + "JOHAB_CHARSET", + "MAC_CHARSET", "NaN", - "_GMFILE_", - "_GMFUNCTION_", - "_GMLINE_", - "alignmentH", - "alignmentV", + "OEM_CHARSET", + "RUSSIAN_CHARSET", + "SHIFTJIS_CHARSET", + "SYMBOL_CHARSET", + "THAI_CHARSET", + "TURKISH_CHARSET", + "VIETNAMESE_CHARSET", + + "achievement_achievement_info", + "achievement_filter_favorites_only", + "achievement_our_info", + "achievement_pic_loaded", + "achievement_show_bank", + "achievement_show_friend_picker", + "achievement_show_leaderboard", + "achievement_show_profile", + "achievement_show_purchase_prompt", + "achievement_show_ui", + "achievement_type_achievement_challenge", + "achievement_type_score_challenge", "all", - "animcurvetype_bezier", - "animcurvetype_catmullrom", + "animcurvetype_linear", + "animcurvetype_catmullrom", + "animcurvetype_bezier", "asset_animationcurve", "asset_font", "asset_object", "asset_path", + "asset_particlesystem", "asset_room", "asset_script", "asset_sequence", @@ -2103,8 +146,7 @@ export default function(hljs) { "asset_tiles", "asset_timeline", "asset_unknown", - "audio_3D", - "audio_bus_main", + "audio_3d", "audio_falloff_exponent_distance", "audio_falloff_exponent_distance_clamped", "audio_falloff_exponent_distance_scaled", @@ -2116,14 +158,10 @@ export default function(hljs) { "audio_falloff_none", "audio_mono", "audio_stereo", - "bboxkind_diamond", - "bboxkind_ellipse", - "bboxkind_precise", - "bboxkind_rectangular", - "bboxmode_automatic", - "bboxmode_fullimage", - "bboxmode_manual", + "audio_new_system", + "audio_old_system", "bm_add", + "bm_complex", "bm_dest_alpha", "bm_dest_color", "bm_dest_colour", @@ -2160,7 +198,12 @@ export default function(hljs) { "buffer_f64", "buffer_fast", "buffer_fixed", + "buffer_generalerror", "buffer_grow", + "buffer_invalidtype", + "buffer_network", + "buffer_outofbounds", + "buffer_outofspace", "buffer_s16", "buffer_s32", "buffer_s8", @@ -2168,6 +211,7 @@ export default function(hljs) { "buffer_seek_relative", "buffer_seek_start", "buffer_string", + "buffer_surface_copy", "buffer_text", "buffer_u16", "buffer_u32", @@ -2175,18 +219,16 @@ export default function(hljs) { "buffer_u8", "buffer_vbuffer", "buffer_wrap", + "button_type", "c_aqua", "c_black", "c_blue", "c_dkgray", - "c_dkgrey", "c_fuchsia", "c_gray", "c_green", - "c_grey", "c_lime", "c_ltgray", - "c_ltgrey", "c_maroon", "c_navy", "c_olive", @@ -2197,8 +239,6 @@ export default function(hljs) { "c_teal", "c_white", "c_yellow", - "cache_directory", - "characterSpacing", "cmpfunc_always", "cmpfunc_equal", "cmpfunc_greater", @@ -2207,8 +247,6 @@ export default function(hljs) { "cmpfunc_lessequal", "cmpfunc_never", "cmpfunc_notequal", - "coreColor", - "coreColour", "cr_appstart", "cr_arrow", "cr_beam", @@ -2243,8 +281,6 @@ export default function(hljs) { "display_portrait_flipped", "dll_cdecl", "dll_stdcall", - "dropShadowEnabled", - "dropShadowEnabled", "ds_type_grid", "ds_type_list", "ds_type_map", @@ -2263,49 +299,17 @@ export default function(hljs) { "ef_snow", "ef_spark", "ef_star", - "effectsEnabled", - "effectsEnabled", "ev_alarm", "ev_animation_end", - "ev_animation_event", - "ev_animation_update", - "ev_async_audio_playback", - "ev_async_audio_playback_ended", - "ev_async_audio_recording", - "ev_async_dialog", - "ev_async_push_notification", - "ev_async_save_load", - "ev_async_save_load", - "ev_async_social", - "ev_async_system_event", - "ev_async_web", - "ev_async_web_cloud", - "ev_async_web_iap", - "ev_async_web_image_load", - "ev_async_web_networking", - "ev_async_web_steam", - "ev_audio_playback", - "ev_audio_playback_ended", - "ev_audio_recording", "ev_boundary", - "ev_boundary_view0", - "ev_boundary_view1", - "ev_boundary_view2", - "ev_boundary_view3", - "ev_boundary_view4", - "ev_boundary_view5", - "ev_boundary_view6", - "ev_boundary_view7", - "ev_broadcast_message", "ev_cleanup", + "ev_close_button", "ev_collision", "ev_create", "ev_destroy", - "ev_dialog_async", "ev_draw", "ev_draw_begin", "ev_draw_end", - "ev_draw_normal", "ev_draw_post", "ev_draw_pre", "ev_end_of_path", @@ -2393,27 +397,15 @@ export default function(hljs) { "ev_no_more_lives", "ev_other", "ev_outside", - "ev_outside_view0", - "ev_outside_view1", - "ev_outside_view2", - "ev_outside_view3", - "ev_outside_view4", - "ev_outside_view5", - "ev_outside_view6", - "ev_outside_view7", - "ev_pre_create", - "ev_push_notification", "ev_right_button", "ev_right_press", "ev_right_release", "ev_room_end", "ev_room_start", - "ev_social", "ev_step", "ev_step_begin", "ev_step_end", "ev_step_normal", - "ev_system_event", "ev_trigger", "ev_user0", "ev_user1", @@ -2431,48 +423,29 @@ export default function(hljs) { "ev_user7", "ev_user8", "ev_user9", - "ev_web_async", - "ev_web_cloud", - "ev_web_iap", - "ev_web_image_load", - "ev_web_networking", - "ev_web_sound_load", - "ev_web_steam", - "fa_archive", "fa_bottom", "fa_center", - "fa_directory", - "fa_hidden", "fa_left", "fa_middle", - "fa_none", - "fa_readonly", "fa_right", - "fa_sysfile", "fa_top", + "fa_archive", + "fa_directory", + "fa_hidden", + "fa_readonly", + "fa_sysfile", "fa_volumeid", "false", - "frameSizeX", - "frameSizeY", + "fb_login_default", + "fb_login_fallback_to_webview", + "fb_login_forcing_safari", + "fb_login_forcing_webview", + "fb_login_no_fallback_to_webview", + "fb_login_use_system_account", "gamespeed_fps", "gamespeed_microseconds", + "ge_lose", "global", - "glowColor", - "glowColour", - "glowEnabled", - "glowEnabled", - "glowEnd", - "glowStart", - "gp_axis_acceleration_x", - "gp_axis_acceleration_y", - "gp_axis_acceleration_z", - "gp_axis_angular_velocity_x", - "gp_axis_angular_velocity_y", - "gp_axis_angular_velocity_z", - "gp_axis_orientation_w", - "gp_axis_orientation_x", - "gp_axis_orientation_y", - "gp_axis_orientation_z", "gp_axislh", "gp_axislv", "gp_axisrh", @@ -2513,6 +486,7 @@ export default function(hljs) { "iap_storeload_ok", "iap_unavailable", "infinity", + "input_type", "kbv_autocapitalize_characters", "kbv_autocapitalize_none", "kbv_autocapitalize_sentences", @@ -2540,7 +514,6 @@ export default function(hljs) { "layerelementtype_instance", "layerelementtype_oldtilemap", "layerelementtype_particlesystem", - "layerelementtype_sequence", "layerelementtype_sprite", "layerelementtype_tile", "layerelementtype_tilemap", @@ -2549,13 +522,7 @@ export default function(hljs) { "leaderboard_type_time_mins_secs", "lighttype_dir", "lighttype_point", - "lineSpacing", - "m_axisx", - "m_axisx_gui", - "m_axisy", - "m_axisy_gui", - "m_scroll_down", - "m_scroll_up", + "local", "matrix_projection", "matrix_view", "matrix_world", @@ -2564,83 +531,49 @@ export default function(hljs) { "mb_middle", "mb_none", "mb_right", - "mb_side1", - "mb_side2", "mip_markedonly", "mip_off", "mip_on", - "network_config_avoid_time_wait", - "network_config_connect_timeout", + "network_config_enable_multicast", "network_config_disable_multicast", + "network_config_connect_timeout", "network_config_disable_reliable_udp", - "network_config_enable_multicast", "network_config_enable_reliable_udp", "network_config_use_non_blocking_socket", - "network_config_websocket_protocol", - "network_connect_active", - "network_connect_blocking", - "network_connect_nonblocking", - "network_connect_none", - "network_connect_passive", - "network_send_binary", - "network_send_text", "network_socket_bluetooth", "network_socket_tcp", "network_socket_udp", - "network_socket_ws", - "network_socket_wss", "network_type_connect", "network_type_data", "network_type_disconnect", - "network_type_down", "network_type_non_blocking_connect", - "network_type_up", - "network_type_up_failed", - "nineslice_blank", - "nineslice_bottom", - "nineslice_center", - "nineslice_centre", - "nineslice_hide", - "nineslice_left", - "nineslice_mirror", - "nineslice_repeat", - "nineslice_right", - "nineslice_stretch", - "nineslice_top", "noone", - "of_challenge_lose", + "of_challen", "of_challenge_tie", "of_challenge_win", + "os_3ds", "os_android", - "os_gdk", - "os_gxgames", + "os_bb10", "os_ios", "os_linux", "os_macosx", - "os_operagx", - "os_permission_denied", - "os_permission_denied_dont_request", - "os_permission_granted", "os_ps3", "os_ps4", - "os_ps5", "os_psvita", "os_switch", + "os_symbian", + "os_tizen", "os_tvos", "os_unknown", "os_uwp", + "os_wiiu", + "os_win32", "os_win8native", "os_windows", "os_winphone", + "os_xbox360", "os_xboxone", - "os_xboxseriesxs", "other", - "outlineColor", - "outlineColour", - "outlineDist", - "outlineEnabled", - "outlineEnabled", - "paragraphSpacing", "path_action_continue", "path_action_restart", "path_action_reverse", @@ -2707,8 +640,6 @@ export default function(hljs) { "ps_distr_gaussian", "ps_distr_invgaussian", "ps_distr_linear", - "ps_mode_burst", - "ps_mode_stream", "ps_shape_diamond", "ps_shape_ellipse", "ps_shape_line", @@ -2727,106 +658,42 @@ export default function(hljs) { "pt_shape_sphere", "pt_shape_square", "pt_shape_star", - "rollback_chat_message", - "rollback_connect_error", "rollback_connect_info", "rollback_connected_to_peer", - "rollback_connection_rejected", "rollback_disconnected_from_peer", - "rollback_end_game", "rollback_game_full", "rollback_game_info", "rollback_game_interrupted", "rollback_game_resumed", - "rollback_high_latency", - "rollback_player_prefs", - "rollback_protocol_rejected", "rollback_synchronized_with_peer", "rollback_synchronizing_with_peer", + "rollback_chat_message", "self", - "seqaudiokey_loop", - "seqaudiokey_oneshot", - "seqdir_left", - "seqdir_right", - "seqinterpolation_assign", - "seqinterpolation_lerp", - "seqplay_loop", - "seqplay_oneshot", - "seqplay_pingpong", - "seqtextkey_bottom", - "seqtextkey_center", - "seqtextkey_justify", - "seqtextkey_left", - "seqtextkey_middle", - "seqtextkey_right", - "seqtextkey_top", - "seqtracktype_audio", - "seqtracktype_bool", - "seqtracktype_clipmask", - "seqtracktype_clipmask_mask", - "seqtracktype_clipmask_subject", - "seqtracktype_color", - "seqtracktype_colour", - "seqtracktype_empty", - "seqtracktype_graphic", - "seqtracktype_group", - "seqtracktype_instance", - "seqtracktype_message", - "seqtracktype_moment", - "seqtracktype_particlesystem", - "seqtracktype_real", - "seqtracktype_sequence", - "seqtracktype_spriteframes", - "seqtracktype_string", - "seqtracktype_text", - "shadowColor", - "shadowColour", - "shadowOffsetX", - "shadowOffsetY", - "shadowSoftness", - "sprite_add_ext_error_cancelled", - "sprite_add_ext_error_decompressfailed", - "sprite_add_ext_error_loadfailed", - "sprite_add_ext_error_setupfailed", - "sprite_add_ext_error_spritenotfound", - "sprite_add_ext_error_unknown", "spritespeed_framespergameframe", "spritespeed_framespersecond", - "surface_r16float", - "surface_r32float", - "surface_r8unorm", - "surface_rg8unorm", - "surface_rgba16float", - "surface_rgba32float", - "surface_rgba4unorm", - "surface_rgba8unorm", - "texturegroup_status_fetched", - "texturegroup_status_loaded", - "texturegroup_status_loading", - "texturegroup_status_unloaded", + "text_type", "tf_anisotropic", "tf_linear", "tf_point", - "thickness", "tile_flip", "tile_index_mask", "tile_mirror", "tile_rotate", - "time_source_expire_after", - "time_source_expire_nearest", - "time_source_game", + "tileset_get_name", "time_source_global", - "time_source_state_active", + "time_source_game", + "time_source_units_seconds", + "time_source_units_frames", + "time_source_expire_nearest", + "time_source_expire_after", "time_source_state_initial", + "time_source_state_active", "time_source_state_paused", "time_source_state_stopped", - "time_source_units_frames", - "time_source_units_seconds", "timezone_local", "timezone_utc", "tm_countvsyncs", "tm_sleep", - "tm_systemtiming", "true", "ty_real", "ty_string", @@ -2851,6 +718,7 @@ export default function(hljs) { "vertex_usage_sample", "vertex_usage_tangent", "vertex_usage_texcoord", + "vertex_usage_textcoord", "video_format_rgba", "video_format_yuv", "video_status_closed", @@ -2913,13 +781,18 @@ export default function(hljs) { "vk_subtract", "vk_tab", "vk_up", - "wallpaper_config", - "wallpaper_subscription_data", - "wrap" + "xboxlive_achievement_filter_all_players", + "xboxlive_achievement_filter_friends_only", + "xboxlive_achievement_friends_info", + "xboxlive_achievement_leaderboard_info", + "xboxlive_achievement_show_achievement", ]; - const LANGUAGE_VARIABLES = [ - "alarm", - "application_surface", + // many of these look like enumerables to me (see comments below) + const SYMBOLS = [ + "audio_bus_main", + "wallpaper_config", + "wallpaper_subscription_data", + "argument_relative", "argument", "argument0", "argument1", @@ -2938,191 +811,606 @@ export default function(hljs) { "argument14", "argument15", "argument_count", - "async_load", - "background_color", - "background_colour", - "background_showcolor", - "background_showcolour", - "bbox_bottom", - "bbox_left", - "bbox_right", - "bbox_top", - "browser_height", - "browser_width", - "colour?ColourTrack", - "current_day", - "current_hour", - "current_minute", - "current_month", - "current_second", - "current_time", - "current_weekday", - "current_year", - "cursor_sprite", - "debug_mode", - "delta_time", - "depth", + "x", + "y", + "xprevious", + "yprevious", + "xstart", + "ystart", + "hspeed", + "vspeed", "direction", - "display_aa", - "drawn_by_sequence", - "event_action", - "event_data", - "event_number", - "event_object", - "event_type", - "font_texture_page_size", - "fps", - "fps_real", + "speed", "friction", - "game_display_name", - "game_id", - "game_project_name", - "game_save_id", "gravity", "gravity_direction", - "health", - "hspeed", - "iap_data", + "path_index", + "path_position", + "path_positionprevious", + "path_speed", + "path_scale", + "path_orientation", + "path_endaction", + "object_index", "id", - "image_alpha", - "image_angle", - "image_blend", - "image_index", - "image_number", - "image_speed", - "image_xscale", - "image_yscale", - "in_collision_tree", - "in_sequence", + "solid", + "persistent", + "mask_index", + "depth", + "visible", + "layer", "instance_count", "instance_id", + "room_speed", + "fps", + "fps_real", + "current_time", + "current_year", + "current_month", + "current_day", + "current_weekday", + "current_hour", + "current_minute", + "current_second", + "alarm", + "timeline_index", + "timeline_position", + "timeline_speed", + "timeline_running", + "timeline_loop", + "room", + "room_first", + "room_last", + "room_width", + "room_height", + "room_caption", + "room_persistent", + "score", + "lives", + "health", + "show_score", + "show_lives", + "show_health", + "caption_score", + "caption_lives", + "caption_health", + "event_type", + "event_number", + "event_object", + "event_action", + "application_surface", + "gamemaker_pro", + "gamemaker_registered", + "gamemaker_version", + "error_occurred", + "error_last", + "debug_mode", "keyboard_key", - "keyboard_lastchar", "keyboard_lastkey", + "keyboard_lastchar", "keyboard_string", - "layer", - "lives", - "longMessage", - "managed", - "mask_index", - "message", - "mouse_button", - "mouse_lastbutton", "mouse_x", "mouse_y", - "object_index", - "os_browser", - "os_device", + "mouse_button", + "mouse_lastbutton", + "cursor_sprite", + "sprite_index", + "sprite_width", + "sprite_height", + "sprite_xoffset", + "sprite_yoffset", + "image_number", + "image_index", + "image_speed", + "image_xscale", + "image_yscale", + "image_angle", + "image_alpha", + "image_blend", + "bbox_left", + "bbox_right", + "bbox_top", + "bbox_bottom", + "background_colour", + "background_showcolour", + "background_color", + "background_showcolor", + "view_enabled", + "view_current", + "view_visible", + "view_xview", + "view_yview", + "view_wview", + "view_hview", + "view_xport", + "view_yport", + "view_wport", + "view_hport", + "view_angle", + "view_hborder", + "view_vborder", + "view_hspeed", + "view_vspeed", + "view_object", + "view_surface_id", + "view_camera", + "game_id", + "game_display_name", + "game_project_name", + "game_save_id", + "working_directory", + "temp_directory", + "program_directory", + "browser_width", + "browser_height", "os_type", + "os_device", + "os_browser", "os_version", - "path_endaction", - "path_index", - "path_orientation", - "path_position", - "path_positionprevious", - "path_scale", - "path_speed", - "persistent", - "phy_active", - "phy_angular_damping", + "display_aa", + "async_load", + "delta_time", + "webgl_enabled", + "event_data", + "iap_data", + "phy_rotation", + "phy_position_x", + "phy_position_y", "phy_angular_velocity", + "phy_linear_velocity_x", + "phy_linear_velocity_y", + "phy_speed_x", + "phy_speed_y", + "phy_speed", + "phy_angular_damping", + "phy_linear_damping", "phy_bullet", - "phy_col_normal_x", - "phy_col_normal_y", - "phy_collision_points", - "phy_collision_x", - "phy_collision_y", + "phy_fixed_rotation", + "phy_active", + "phy_mass", + "phy_inertia", "phy_com_x", "phy_com_y", "phy_dynamic", - "phy_fixed_rotation", - "phy_inertia", "phy_kinematic", - "phy_linear_damping", - "phy_linear_velocity_x", - "phy_linear_velocity_y", - "phy_mass", - "phy_position_x", + "phy_sleeping", + "phy_collision_points", + "phy_collision_x", + "phy_collision_y", + "phy_col_normal_x", + "phy_col_normal_y", "phy_position_xprevious", - "phy_position_y", "phy_position_yprevious", - "phy_rotation", - "phy_sleeping", - "phy_speed", - "phy_speed_x", - "phy_speed_y", - "player_avatar_sprite", - "player_avatar_url", "player_id", "player_local", - "player_type", + "player_name", + "player_avatar_url", + "player_avatar_sprite", "player_user_id", - "program_directory", - "rollback_api_server", - "rollback_confirmed_frame", + "player_type", + "player_prefs", + "managed", "rollback_current_frame", "rollback_event_id", "rollback_event_param", "rollback_game_running", - "room", - "room_first", - "room_height", - "room_last", - "room_persistent", - "room_speed", - "room_width", - "score", - "script", - "sequence_instance", - "solid", - "speed", - "sprite_height", - "sprite_index", - "sprite_width", - "sprite_xoffset", - "sprite_yoffset", - "stacktrace", - "temp_directory", - "timeline_index", - "timeline_loop", - "timeline_position", - "timeline_running", - "timeline_speed", - "view_camera", - "view_current", - "view_enabled", - "view_hport", - "view_surface_id", - "view_visible", - "view_wport", - "view_xport", - "view_yport", - "visible", - "vspeed", - "webgl_enabled", - "working_directory", - "x", - "xprevious", - "xstart", - "y", - "yprevious", - "ystart" + "rollback_confirmed_frame", + "rollback_api_server", + "player_avatar_sprite", + "player_avatar_url", + "player_user_id", + "player_name", + "player_type" + ]; + /** + * Regex for some sort of identifier - i.e, a valid name of something in code. + */ + const VALID_IDENTIFIER_REG = /[a-zA-Z_][a-zA-Z0-9_]*/; + /** + * Regex for a dot separating some LHS and RHS expression with optional whitespace (as this is + * supported in the engine.) + */ + const DOT_ACCESSOR_REG = /\b\.\b/; + + /** + * Expressions, which form part of a valid statement. + * @type {Object[]} + */ + const EXPRESSION = []; + + /** + * A single-line comment. + */ + const COMMENT_LINE = hljs.COMMENT('//', /\$|\n/); + + const JSDOC_ANNOTATIONS = [ + { + match: /@((desc(ription)?)|ignore)\b/, + className: "literal" + }, + { + match: [ + /@(param|arg) *?/, + /{ *?[a-zA-Z_][a-zA-Z0-9_\.<>\|]*? *?} *?/, + /\[?/, + VALID_IDENTIFIER_REG, + /(( *=[^\n]+?)?\])? *?/ + ], + className: { + 1: "literal", + 2: "function", + 3: "variable", + 4: "variable", + 5: "variable", + } + } + ]; + + /** + * A comment that documents a function using the same style as JSDoc for JavaScript. + */ + const COMMENT_JSDOC = { + begin: /\/\/\//, + end: /$|\n/, + className: "comment", + contains: JSDOC_ANNOTATIONS + }; + + /** + * A comment that documents a function using the same style as JSDoc for JavaScript. + */ + const COMMENT_BLOCK_JSDOC = { + begin: /\/\*\*/, + end: /\*\//, + className: "comment", + contains: JSDOC_ANNOTATIONS + }; + + /** + * Modes for the types of comments supported in GML. + */ + const COMMENT = { + variants: [ + COMMENT_JSDOC, + COMMENT_BLOCK_JSDOC, + COMMENT_LINE, + hljs.C_BLOCK_COMMENT_MODE, + ] + }; + + /** + * A template string substitution. `contains` is filled in after `EXPRESSION` is defined due to + * nesting. + */ + const STRING_SUBSTITUTION = { + begin: /{/, + end: /}/, + beginScope: "literal", + endScope: "literal", + contains: EXPRESSION + }; + + /** + * A template string substitution for use with the older `string()` optional args with `"{0}"`, + * etc. + */ + const STRING_NUMERICAL_SUBSTITUTION = { + match: /{[0-9]+}/, + scope: "literal" + }; + + /** + * An escape sequence in a string. + */ + const STRING_ESCAPE = { + scope: "literal", + variants: [ + { match: /\\u[a-fA-F0-9]{1,6}/ }, + { match: /\\[^\n]/ } + ] + }; + + /** + * Various types of strings supported in the engine. + */ + const STRING = { + variants: [ + { + begin: /\$"/, + end: "\"", + beginScope: "string", + endScope: "string", + contains: [ + STRING_ESCAPE, + STRING_SUBSTITUTION, + { + match: /[^\n"{]/, + scope: "string" + } + ] + }, + { + scope: "string", + begin: "@'", + end: "'", + contains: [STRING_NUMERICAL_SUBSTITUTION] + }, + { + scope: "string", + begin: "@\"", + end: "\"", + contains: [STRING_NUMERICAL_SUBSTITUTION] + }, + { + scope: "string", + begin: /"/, + end: /"/, + illegal: "\\n", + contains: [ + STRING_ESCAPE, + STRING_NUMERICAL_SUBSTITUTION + ] + } + ] + }; + + /** + * Various representations of numbers + */ + const NUMBER = { + className: "literal", + variants: [ + { match: /(\B|^)\$[0-9a-fA-F]+/ }, + { match: /(\B|^)#[0-9a-fA-F]+/ }, + { match: /\b0x[0-9a-fA-F][0-9a-fA-F_]*/ }, + { match: /\b0b[01][01_]*/ }, + { match: /\b[0-9][0-9_.]*/ } + ] + }; + + const COMMENT_LINE_INNER = { + match: /[^\n]+/, + className: "comment" + }; + + /** + * Pre-processor modes for macro definitions and regions. + */ + const PREPROCESSOR = { + end: /$/, + variants: [ + { + begin: [ + /#macro\s+/, + VALID_IDENTIFIER_REG + ], + className: { + 1: "keyword", + 2: "literal" + }, + contains: lateConcat( + EXPRESSION, + [ + COMMENT, + { + match: /\\\n/ + } + ] + ), + }, + { + begin: "#define" + }, + { + begin: /#(end)?region\b/, + beginScope: "keyword", + contains: [COMMENT_LINE_INNER] + }, + ] + }; + + /** + * Dot accessor usage with a special highlighting case for `global`. + */ + const PROP_ACCESS = [ + { + match: [ + "global", + DOT_ACCESSOR_REG, + VALID_IDENTIFIER_REG + ], + className: { + 1: "literal", + 3: "variable" + } + }, + { + match: [ + DOT_ACCESSOR_REG, + VALID_IDENTIFIER_REG, + /\s*\(/ + ], + className: { + 2: "function" + } + }, + { + match: [ + DOT_ACCESSOR_REG, + VALID_IDENTIFIER_REG + ], + className: { + 2: "variable" + } + }, ]; + + /** + * Function call sites, just looking for `(`. This creates false positives + * for keywords such as `if ()`, so has lower priority in the mode `contains` list. + */ + const FUNCTION_CALL = { + begin: [ + VALID_IDENTIFIER_REG, + /\s*?/, + /\(/ + ], + className: { + 1: "function" + } + }; + + /** + * The manual likes using `obj_` and such to define assets. Sneaky trick to make it look nicer :P + */ + const USER_ASSET_CONSTANT = { + className: "literal", + end: VALID_IDENTIFIER_REG, + variants: [ + { begin: "spr_" }, + { begin: "obj_" }, + ] + }; + + /** + * A ternary expression, matching partial ternary as `? :`. + * Effectively exists to prevent {@link STRUCT_LITERAL_MEMBER} from stealing ` :`. + */ + const TERNARY = { + begin: /\?/, + end: /:/, + contains: EXPRESSION + }; + + const SWITCH_CASE = { + begin: [ + /case/, + /\s+/ + ], + end: /:/, + className: { + 1: "keyword" + }, + contains: EXPRESSION + }; + + /** + * A struct variable declaration, of `:` + */ + const STRUCT_LITERAL_MEMBER = { + match: [ + /\b/, + VALID_IDENTIFIER_REG, + /\s*:/ + ], + className: { + 2: "variable-instance" + }, + }; + + /** + * A function declaration matching for: + * ```gml + * function ( + * ``` + */ + const FUNCTION_DECLARATION = { + match: [ + "function", + /\s+/, + VALID_IDENTIFIER_REG, + /\s*?\(/ + ], + className: { + 1: "keyword", + 3: "function" + } + }; + + /** + * An enum definition in the form: + * ```gml + * enum { + * [= ][,] + * } + * ``` + */ + const ENUM_DEFINITION = { + begin: [ + /enum/, + /\s+/, + VALID_IDENTIFIER_REG, + /\s*{/ + ], + end: "}", + className: { + 1: "keyword", + 3: "literal" + }, + contains: [ + COMMENT, + { + begin: [ + VALID_IDENTIFIER_REG, + /\s*=\s*/ + ], + end: /,|\n|}/, + className: { + 1: "literal" + }, + contains: EXPRESSION + }, + { + match: VALID_IDENTIFIER_REG, + className: "literal" + } + ] + }; + + EXPRESSION.push( + STRING, + TERNARY, + PROP_ACCESS, + NUMBER, + FUNCTION_CALL, + USER_ASSET_CONSTANT, + { + match: VALID_IDENTIFIER_REG, + keywords: { + keyword: KEYWORDS, + literal: LITERALS, + symbol: SYMBOLS + }, + } + ); + + doLateConcat(); + return { name: 'GML', - case_insensitive: false, // language is case-insensitive + case_insensitive: false, // language is case-sensitive keywords: { keyword: KEYWORDS, - built_in: BUILT_INS, - symbol: SYMBOLS, - "variable.language": LANGUAGE_VARIABLES + literal: LITERALS, + symbol: SYMBOLS }, contains: [ - hljs.C_LINE_COMMENT_MODE, - hljs.C_BLOCK_COMMENT_MODE, - hljs.APOS_STRING_MODE, - hljs.QUOTE_STRING_MODE, - hljs.C_NUMBER_MODE + COMMENT, + PREPROCESSOR, + NUMBER, + STRING, + ENUM_DEFINITION, + SWITCH_CASE, + { + // Prevent keywords being taken by function calls. + beginKeywords: KEYWORDS.join(" ") + }, + TERNARY, + STRUCT_LITERAL_MEMBER, + FUNCTION_DECLARATION, + FUNCTION_CALL, + USER_ASSET_CONSTANT, + PROP_ACCESS ] }; } From 1f7f55e811e94d49c5d1db9cb97e3e6bf21ac2cd Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 13:20:54 +1100 Subject: [PATCH 02/49] feat(gml) support all GML jsdoc annotations Source: https://manual.gamemaker.io/lts/en/The_Asset_Editors/Code_Editor_Properties/JSDoc_Script_Comments.htm --- src/languages/gml.js | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 3824b25606..babd3058dc 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1023,15 +1023,37 @@ export default function(hljs) { */ const COMMENT_LINE = hljs.COMMENT('//', /\$|\n/); + const JSDOC_TYPE_PARAM_REG = /{ *?[a-zA-Z_][a-zA-Z0-9_\.<>\|]*? *?} *?/; + const JSDOC_ANNOTATIONS = [ { - match: /@((desc(ription)?)|ignore)\b/, + match: /@((desc(ription)?)|ignore|pure|deprecated|(func(tion)?))\b/, className: "literal" }, { match: [ - /@(param|arg) *?/, - /{ *?[a-zA-Z_][a-zA-Z0-9_\.<>\|]*? *?} *?/, + /@(self|context) *?/, + JSDOC_TYPE_PARAM_REG + ], + className: { + 1: "literal", + 2: "function" + } + }, + { + match: [ + /(@return)s? *?/, + JSDOC_TYPE_PARAM_REG + ], + className: { + 1: "literal", + 2: "function" + } + }, + { + match: [ + /@((param(eter)?)|arg(ument)?) *?/, + JSDOC_TYPE_PARAM_REG, /\[?/, VALID_IDENTIFIER_REG, /(( *=[^\n]+?)?\])? *?/ From b3c987752d195ffbe41868a96896504b2ce2b364 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 13:39:54 +1100 Subject: [PATCH 03/49] fix(gml) start untangling oddities from GM manual --- src/languages/gml.js | 114 ++++++++++++++++++++++++++----------------- 1 file changed, 68 insertions(+), 46 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index babd3058dc..b31f2f3f41 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -89,46 +89,17 @@ export default function(hljs) { "other", "all", "noone", - "ANSI_CHARSET", - "ARABIC_CHARSET", - "BALTIC_CHARSET", - "CHINESEBIG5_CHARSET", - "DEFAULT_CHARSET", - "EASTEUROPE_CHARSET", - "GB2312_CHARSET", "GM_build_date", "GM_build_type", + "GM_is_sandboxed", "GM_project_filename", "GM_runtime_version", "GM_version", - "GREEK_CHARSET", - "HANGEUL_CHARSET", - "HEBREW_CHARSET", - "JOHAB_CHARSET", - "MAC_CHARSET", "NaN", - "OEM_CHARSET", - "RUSSIAN_CHARSET", - "SHIFTJIS_CHARSET", - "SYMBOL_CHARSET", - "THAI_CHARSET", - "TURKISH_CHARSET", - "VIETNAMESE_CHARSET", - - "achievement_achievement_info", - "achievement_filter_favorites_only", - "achievement_our_info", - "achievement_pic_loaded", - "achievement_show_bank", - "achievement_show_friend_picker", - "achievement_show_leaderboard", - "achievement_show_profile", - "achievement_show_purchase_prompt", - "achievement_show_ui", - "achievement_type_achievement_challenge", - "achievement_type_score_challenge", + "_GMFILE_", + "_GMFUNCTION_", + "_GMLINE_", "all", - "animcurvetype_linear", "animcurvetype_catmullrom", "animcurvetype_bezier", @@ -158,10 +129,14 @@ export default function(hljs) { "audio_falloff_none", "audio_mono", "audio_stereo", - "audio_new_system", - "audio_old_system", + "bboxkind_diamond", + "bboxkind_ellipse", + "bboxkind_precise", + "bboxkind_rectangular", + "bboxmode_automatic", + "bboxmode_fullimage", + "bboxmode_manual", "bm_add", - "bm_complex", "bm_dest_alpha", "bm_dest_color", "bm_dest_colour", @@ -198,12 +173,7 @@ export default function(hljs) { "buffer_f64", "buffer_fast", "buffer_fixed", - "buffer_generalerror", "buffer_grow", - "buffer_invalidtype", - "buffer_network", - "buffer_outofbounds", - "buffer_outofspace", "buffer_s16", "buffer_s32", "buffer_s8", @@ -211,7 +181,6 @@ export default function(hljs) { "buffer_seek_relative", "buffer_seek_start", "buffer_string", - "buffer_surface_copy", "buffer_text", "buffer_u16", "buffer_u32", @@ -219,16 +188,18 @@ export default function(hljs) { "buffer_u8", "buffer_vbuffer", "buffer_wrap", - "button_type", "c_aqua", "c_black", "c_blue", "c_dkgray", + "c_dkgrey", "c_fuchsia", "c_gray", "c_green", + "c_grey", "c_lime", "c_ltgray", + "c_ltgrey", "c_maroon", "c_navy", "c_olive", @@ -239,6 +210,7 @@ export default function(hljs) { "c_teal", "c_white", "c_yellow", + "cache_directory", "cmpfunc_always", "cmpfunc_equal", "cmpfunc_greater", @@ -301,7 +273,33 @@ export default function(hljs) { "ef_star", "ev_alarm", "ev_animation_end", + "ev_animation_event", + "ev_animation_update", + "ev_async_audio_playback", + "ev_async_audio_playback_ended", + "ev_async_audio_recording", + "ev_async_dialog", + "ev_async_push_notification", + "ev_async_save_load", + "ev_async_save_load", + "ev_async_social", + "ev_async_system_event", + "ev_async_web", + "ev_async_web_cloud", + "ev_async_web_iap", + "ev_async_web_image_load", + "ev_async_web_networking", + "ev_async_web_steam", "ev_boundary", + "ev_boundary_view0", + "ev_boundary_view1", + "ev_boundary_view2", + "ev_boundary_view3", + "ev_boundary_view4", + "ev_boundary_view5", + "ev_boundary_view6", + "ev_boundary_view7", + "ev_broadcast_message", "ev_cleanup", "ev_close_button", "ev_collision", @@ -397,6 +395,14 @@ export default function(hljs) { "ev_no_more_lives", "ev_other", "ev_outside", + "ev_outside_view0", + "ev_outside_view1", + "ev_outside_view2", + "ev_outside_view3", + "ev_outside_view4", + "ev_outside_view5", + "ev_outside_view6", + "ev_outside_view7", "ev_right_button", "ev_right_press", "ev_right_release", @@ -444,8 +450,17 @@ export default function(hljs) { "fb_login_use_system_account", "gamespeed_fps", "gamespeed_microseconds", - "ge_lose", "global", + "gp_axis_acceleration_x", + "gp_axis_acceleration_y", + "gp_axis_acceleration_z", + "gp_axis_angular_velocity_x", + "gp_axis_angular_velocity_y", + "gp_axis_angular_velocity_z", + "gp_axis_orientation_w", + "gp_axis_orientation_x", + "gp_axis_orientation_y", + "gp_axis_orientation_z", "gp_axislh", "gp_axislv", "gp_axisrh", @@ -486,7 +501,6 @@ export default function(hljs) { "iap_storeload_ok", "iap_unavailable", "infinity", - "input_type", "kbv_autocapitalize_characters", "kbv_autocapitalize_none", "kbv_autocapitalize_sentences", @@ -514,6 +528,7 @@ export default function(hljs) { "layerelementtype_instance", "layerelementtype_oldtilemap", "layerelementtype_particlesystem", + "layerelementtype_sequence", "layerelementtype_sprite", "layerelementtype_tile", "layerelementtype_tilemap", @@ -522,15 +537,22 @@ export default function(hljs) { "leaderboard_type_time_mins_secs", "lighttype_dir", "lighttype_point", - "local", "matrix_projection", "matrix_view", "matrix_world", + "m_axisx", + "m_axisx_gui", + "m_axisy", + "m_axisy_gui", + "m_scroll_down", + "m_scroll_up", "mb_any", "mb_left", "mb_middle", "mb_none", "mb_right", + "mb_side1", + "mb_side2", "mip_markedonly", "mip_off", "mip_on", From ed25adab488acadf1a3599b63f542bcfc3b16ab0 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 13:58:48 +1100 Subject: [PATCH 04/49] fix(gml) manual untangling pt2 --- src/languages/gml.js | 179 ++++++++++++++++++++++++++++--------------- 1 file changed, 116 insertions(+), 63 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index b31f2f3f41..676b19fedb 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -100,9 +100,9 @@ export default function(hljs) { "_GMFUNCTION_", "_GMLINE_", "all", - "animcurvetype_linear", - "animcurvetype_catmullrom", "animcurvetype_bezier", + "animcurvetype_catmullrom", + "animcurvetype_linear", "asset_animationcurve", "asset_font", "asset_object", @@ -301,7 +301,6 @@ export default function(hljs) { "ev_boundary_view7", "ev_broadcast_message", "ev_cleanup", - "ev_close_button", "ev_collision", "ev_create", "ev_destroy", @@ -442,12 +441,6 @@ export default function(hljs) { "fa_sysfile", "fa_volumeid", "false", - "fb_login_default", - "fb_login_fallback_to_webview", - "fb_login_forcing_safari", - "fb_login_forcing_webview", - "fb_login_no_fallback_to_webview", - "fb_login_use_system_account", "gamespeed_fps", "gamespeed_microseconds", "global", @@ -537,15 +530,15 @@ export default function(hljs) { "leaderboard_type_time_mins_secs", "lighttype_dir", "lighttype_point", - "matrix_projection", - "matrix_view", - "matrix_world", "m_axisx", "m_axisx_gui", "m_axisy", "m_axisy_gui", "m_scroll_down", "m_scroll_up", + "matrix_projection", + "matrix_view", + "matrix_world", "mb_any", "mb_left", "mb_middle", @@ -556,45 +549,68 @@ export default function(hljs) { "mip_markedonly", "mip_off", "mip_on", - "network_config_enable_multicast", - "network_config_disable_multicast", + "network_config_avoid_time_wait", "network_config_connect_timeout", + "network_config_disable_multicast", "network_config_disable_reliable_udp", + "network_config_enable_multicast", "network_config_enable_reliable_udp", "network_config_use_non_blocking_socket", + "network_config_websocket_protocol", + "network_connect_active", + "network_connect_blocking", + "network_connect_nonblocking", + "network_connect_none", + "network_connect_passive", + "network_send_binary", + "network_send_text", "network_socket_bluetooth", "network_socket_tcp", "network_socket_udp", + "network_socket_ws", + "network_socket_wss", "network_type_connect", "network_type_data", "network_type_disconnect", + "network_type_down", "network_type_non_blocking_connect", + "network_type_up", + "network_type_up_failed", + "nineslice_blank", + "nineslice_bottom", + "nineslice_center", + "nineslice_centre", + "nineslice_hide", + "nineslice_left", + "nineslice_mirror", + "nineslice_repeat", + "nineslice_right", + "nineslice_stretch", + "nineslice_top", "noone", - "of_challen", - "of_challenge_tie", - "of_challenge_win", - "os_3ds", "os_android", - "os_bb10", + "os_gdk", + "os_gxgames", "os_ios", "os_linux", "os_macosx", + "os_operagx", + "os_permission_denied", + "os_permission_denied_dont_request", + "os_permission_granted", "os_ps3", "os_ps4", + "os_ps5", "os_psvita", "os_switch", - "os_symbian", - "os_tizen", "os_tvos", "os_unknown", "os_uwp", - "os_wiiu", - "os_win32", "os_win8native", "os_windows", "os_winphone", - "os_xbox360", "os_xboxone", + "os_xboxseriesxs", "other", "path_action_continue", "path_action_restart", @@ -662,6 +678,8 @@ export default function(hljs) { "ps_distr_gaussian", "ps_distr_invgaussian", "ps_distr_linear", + "ps_mode_burst", + "ps_mode_stream", "ps_shape_diamond", "ps_shape_ellipse", "ps_shape_line", @@ -680,20 +698,77 @@ export default function(hljs) { "pt_shape_sphere", "pt_shape_square", "pt_shape_star", + "rollback_chat_message", "rollback_connect_info", "rollback_connected_to_peer", + "rollback_connection_rejected", "rollback_disconnected_from_peer", + "rollback_end_game", "rollback_game_full", "rollback_game_info", "rollback_game_interrupted", "rollback_game_resumed", + "rollback_high_latency", + "rollback_player_prefs", + "rollback_protocol_rejected", "rollback_synchronized_with_peer", "rollback_synchronizing_with_peer", - "rollback_chat_message", "self", + "seqaudiokey_loop", + "seqaudiokey_oneshot", + "seqdir_left", + "seqdir_right", + "seqinterpolation_assign", + "seqinterpolation_lerp", + "seqplay_loop", + "seqplay_oneshot", + "seqplay_pingpong", + "seqtextkey_bottom", + "seqtextkey_center", + "seqtextkey_justify", + "seqtextkey_left", + "seqtextkey_middle", + "seqtextkey_right", + "seqtextkey_top", + "seqtracktype_audio", + "seqtracktype_bool", + "seqtracktype_clipmask", + "seqtracktype_clipmask_mask", + "seqtracktype_clipmask_subject", + "seqtracktype_color", + "seqtracktype_colour", + "seqtracktype_empty", + "seqtracktype_graphic", + "seqtracktype_group", + "seqtracktype_instance", + "seqtracktype_message", + "seqtracktype_moment", + "seqtracktype_particlesystem", + "seqtracktype_real", + "seqtracktype_sequence", + "seqtracktype_spriteframes", + "seqtracktype_string", + "seqtracktype_text", + "sprite_add_ext_error_cancelled", + "sprite_add_ext_error_decompressfailed", + "sprite_add_ext_error_loadfailed", + "sprite_add_ext_error_setupfailed", + "sprite_add_ext_error_spritenotfound", + "sprite_add_ext_error_unknown", "spritespeed_framespergameframe", "spritespeed_framespersecond", - "text_type", + "surface_r16float", + "surface_r32float", + "surface_r8unorm", + "surface_rg8unorm", + "surface_rgba16float", + "surface_rgba32float", + "surface_rgba4unorm", + "surface_rgba8unorm", + "texturegroup_status_fetched", + "texturegroup_status_loaded", + "texturegroup_status_loading", + "texturegroup_status_unloaded", "tf_anisotropic", "tf_linear", "tf_point", @@ -716,6 +791,7 @@ export default function(hljs) { "timezone_utc", "tm_countvsyncs", "tm_sleep", + "tm_systemtiming", "true", "ty_real", "ty_string", @@ -740,7 +816,6 @@ export default function(hljs) { "vertex_usage_sample", "vertex_usage_tangent", "vertex_usage_texcoord", - "vertex_usage_textcoord", "video_format_rgba", "video_format_yuv", "video_status_closed", @@ -803,11 +878,6 @@ export default function(hljs) { "vk_subtract", "vk_tab", "vk_up", - "xboxlive_achievement_filter_all_players", - "xboxlive_achievement_filter_friends_only", - "xboxlive_achievement_friends_info", - "xboxlive_achievement_leaderboard_info", - "xboxlive_achievement_show_achievement", ]; // many of these look like enumerables to me (see comments below) const SYMBOLS = [ @@ -842,6 +912,9 @@ export default function(hljs) { "hspeed", "vspeed", "direction", + "display_aa", + "drawn_by_sequence", + "font_texture_page_size", "speed", "friction", "gravity", @@ -855,6 +928,16 @@ export default function(hljs) { "path_endaction", "object_index", "id", + "image_alpha", + "image_angle", + "image_blend", + "image_index", + "image_number", + "image_speed", + "image_xscale", + "image_yscale", + "in_collision_tree", + "in_sequence", "solid", "persistent", "mask_index", @@ -863,7 +946,6 @@ export default function(hljs) { "layer", "instance_count", "instance_id", - "room_speed", "fps", "fps_real", "current_time", @@ -890,26 +972,10 @@ export default function(hljs) { "score", "lives", "health", - "show_score", - "show_lives", - "show_health", - "caption_score", - "caption_lives", - "caption_health", - "event_type", - "event_number", - "event_object", - "event_action", "application_surface", - "gamemaker_pro", - "gamemaker_registered", - "gamemaker_version", - "error_occurred", - "error_last", - "debug_mode", "keyboard_key", - "keyboard_lastkey", "keyboard_lastchar", + "keyboard_lastkey", "keyboard_string", "mouse_x", "mouse_y", @@ -921,22 +987,10 @@ export default function(hljs) { "sprite_height", "sprite_xoffset", "sprite_yoffset", - "image_number", - "image_index", - "image_speed", - "image_xscale", - "image_yscale", - "image_angle", - "image_alpha", - "image_blend", "bbox_left", "bbox_right", "bbox_top", "bbox_bottom", - "background_colour", - "background_showcolour", - "background_color", - "background_showcolor", "view_enabled", "view_current", "view_visible", @@ -969,7 +1023,6 @@ export default function(hljs) { "os_device", "os_browser", "os_version", - "display_aa", "async_load", "delta_time", "webgl_enabled", From 1b5c513697575e236d30705f09b61d89bb4acc73 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:01:37 +1100 Subject: [PATCH 05/49] fix(gml) change oddities resolved --- src/languages/gml.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 676b19fedb..16faeeaf77 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1027,7 +1027,6 @@ export default function(hljs) { "delta_time", "webgl_enabled", "event_data", - "iap_data", "phy_rotation", "phy_position_x", "phy_position_y", @@ -1058,12 +1057,10 @@ export default function(hljs) { "phy_position_yprevious", "player_id", "player_local", - "player_name", "player_avatar_url", "player_avatar_sprite", "player_user_id", "player_type", - "player_prefs", "managed", "rollback_current_frame", "rollback_event_id", From 7b2550a23f779abaf3c6823062803cfb99b88ad3 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:05:40 +1100 Subject: [PATCH 06/49] fix(gml) final remaining incorrect symbols --- src/languages/gml.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 16faeeaf77..10c89202ed 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -118,6 +118,7 @@ export default function(hljs) { "asset_timeline", "asset_unknown", "audio_3d", + "audio_bus_main", "audio_falloff_exponent_distance", "audio_falloff_exponent_distance_clamped", "audio_falloff_exponent_distance_scaled", @@ -881,10 +882,8 @@ export default function(hljs) { ]; // many of these look like enumerables to me (see comments below) const SYMBOLS = [ - "audio_bus_main", "wallpaper_config", "wallpaper_subscription_data", - "argument_relative", "argument", "argument0", "argument1", @@ -1071,7 +1070,6 @@ export default function(hljs) { "player_avatar_sprite", "player_avatar_url", "player_user_id", - "player_name", "player_type" ]; /** From e974803bc35bd2136f146b2f30035d56ea016ab4 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:18:13 +1100 Subject: [PATCH 07/49] fix(gml) correct built-ins highlight type --- src/languages/gml.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 10c89202ed..441e7463b8 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -881,7 +881,7 @@ export default function(hljs) { "vk_up", ]; // many of these look like enumerables to me (see comments below) - const SYMBOLS = [ + const LANGUAGE_VARIABLES = [ "wallpaper_config", "wallpaper_subscription_data", "argument", @@ -1471,7 +1471,7 @@ export default function(hljs) { keywords: { keyword: KEYWORDS, literal: LITERALS, - symbol: SYMBOLS + symbol: LANGUAGE_VARIABLES }, } ); @@ -1484,7 +1484,7 @@ export default function(hljs) { keywords: { keyword: KEYWORDS, literal: LITERALS, - symbol: SYMBOLS + "variable.language": LANGUAGE_VARIABLES }, contains: [ COMMENT, From de0affbf6080475efdb9641e599e396d3a526a69 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:25:44 +1100 Subject: [PATCH 08/49] fix(gml) `gml.css` updates for lang changes --- src/styles/gml.css | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/styles/gml.css b/src/styles/gml.css index 6c1da22d15..d6005c1bea 100644 --- a/src/styles/gml.css +++ b/src/styles/gml.css @@ -14,7 +14,7 @@ GML Theme - Meseta font-weight: bold; } -.hljs-built_in { +.hljs-function { color: #FFB871; } @@ -22,10 +22,14 @@ GML Theme - Meseta color: #FF8080; } -.hljs-symbol { +.hljs-variable.language_ { color: #58E55A; } +.hljs-property { + color: #b2b1ff; +} + .hljs-comment { color: #5B995B; } @@ -59,7 +63,6 @@ GML Theme - Meseta .hljs-deletion, .hljs-title, .hljs-section, -.hljs-function, .hljs-meta .hljs-keyword, .hljs-meta, From d55c5c8bbba98a347e48820a5e2e695b5f2413c1 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:26:08 +1100 Subject: [PATCH 09/49] fix(gml) use `property` scope for prop access --- src/languages/gml.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 441e7463b8..ec916983e8 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1313,7 +1313,7 @@ export default function(hljs) { ], className: { 1: "literal", - 3: "variable" + 3: "property" } }, { @@ -1332,7 +1332,7 @@ export default function(hljs) { VALID_IDENTIFIER_REG ], className: { - 2: "variable" + 2: "property" } }, ]; From 30468020fc8e24956523feb6e69a799b53ba747f Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:28:23 +1100 Subject: [PATCH 10/49] fix(gml) more accurate jsdoc highlighting --- src/languages/gml.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index ec916983e8..a94adcde88 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1098,7 +1098,7 @@ export default function(hljs) { const JSDOC_ANNOTATIONS = [ { match: /@((desc(ription)?)|ignore|pure|deprecated|(func(tion)?))\b/, - className: "literal" + className: "keyword" }, { match: [ @@ -1106,8 +1106,8 @@ export default function(hljs) { JSDOC_TYPE_PARAM_REG ], className: { - 1: "literal", - 2: "function" + 1: "keyword", + 2: "literal", } }, { @@ -1116,8 +1116,8 @@ export default function(hljs) { JSDOC_TYPE_PARAM_REG ], className: { - 1: "literal", - 2: "function" + 1: "keyword", + 2: "literal", } }, { @@ -1129,8 +1129,8 @@ export default function(hljs) { /(( *=[^\n]+?)?\])? *?/ ], className: { - 1: "literal", - 2: "function", + 1: "keyword", + 2: "literal", 3: "variable", 4: "variable", 5: "variable", From d9fc9741a1f14fcdf13dfd7b011cc6a32733661a Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:30:27 +1100 Subject: [PATCH 11/49] fix(gml) update test for GML highlighting output --- test/markup/gml/default.expect.txt | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/test/markup/gml/default.expect.txt b/test/markup/gml/default.expect.txt index f504ff8381..39d76a546b 100644 --- a/test/markup/gml/default.expect.txt +++ b/test/markup/gml/default.expect.txt @@ -1,22 +1,22 @@ -/// @description Collision code -// standard collision handling - -// Horizontal collisions -if(place_meeting(x+hspd, y, obj_wall)) { - while(!place_meeting(x+sign(hspd), y, obj_wall)) { - x += sign(hspd); +/// @description Collision code +// standard collision handling + +// Horizontal collisions +if(place_meeting(x+hspd, y, obj_wall)) { + while(!place_meeting(x+sign(hspd), y, obj_wall)) { + x += sign(hspd); } - hspd = 0; + hspd = 0; } x += hspd; -// Vertical collisions -if(place_meeting(x, y+vspd, collide_obj)) { - while(!place_meeting(x, y+sign(vspd), collide_obj)) { - y += sign(vspd); +// Vertical collisions +if(place_meeting(x, y+vspd, collide_obj)) { + while(!place_meeting(x, y+sign(vspd), collide_obj)) { + y += sign(vspd); } - vspd = 0; + vspd = 0; } y += vspd; -show_debug_message("This is a test"); \ No newline at end of file +show_debug_message("This is a test"); \ No newline at end of file From b221433bda81a95e5905c457ee493128ef598f69 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:40:16 +1100 Subject: [PATCH 12/49] docs(gml) update `gml.js` info banner --- src/languages/gml.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index a94adcde88..2de32406c6 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1,7 +1,7 @@ /* Language: GML -Description: Game Maker Language for GameMaker (rev. 2023.1) -Website: https://manual.yoyogames.com/ +Description: Game Maker Language for GameMaker (rev. 2024.11) +Website: https://manual.gamemaker.io/ Category: scripting */ From a6fb18f35dd58327cbc3bfcac2dfe91c35ad553f Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:51:22 +1100 Subject: [PATCH 13/49] docs(gml) fix incorrect desc. on `lateConcat` --- src/languages/gml.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 2de32406c6..e675cd31d4 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -17,8 +17,8 @@ export default function(hljs) { * in the case of {@link EXPRESSION}, which is an array of a bunch of different types, of which * some of these also can contain expressions, AND contain other things too. * - * Note that {@link doLateConcat} MUST be called before this can be used, because we're using some - * reference-based trickery to do this. + * Note that {@link doLateConcat} MUST be called before the results of this are valid, because + * we're using some reference-based trickery to do this. * * @param {...any[]} arrays The arrays to be concatenated later. * @returns {any[]} From 4e5ff27d795d206ef4f715587eeed0e9eae398af Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:02:49 +1100 Subject: [PATCH 14/49] refactor(gml) regex naming conventions --- src/languages/gml.js | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index e675cd31d4..73144e5503 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1075,12 +1075,12 @@ export default function(hljs) { /** * Regex for some sort of identifier - i.e, a valid name of something in code. */ - const VALID_IDENTIFIER_REG = /[a-zA-Z_][a-zA-Z0-9_]*/; + const VALID_IDENTIFIER_RE = /[a-zA-Z_][a-zA-Z0-9_]*/; /** * Regex for a dot separating some LHS and RHS expression with optional whitespace (as this is * supported in the engine.) */ - const DOT_ACCESSOR_REG = /\b\.\b/; + const DOT_ACCESSOR_RE = /\b\.\b/; /** * Expressions, which form part of a valid statement. @@ -1093,7 +1093,7 @@ export default function(hljs) { */ const COMMENT_LINE = hljs.COMMENT('//', /\$|\n/); - const JSDOC_TYPE_PARAM_REG = /{ *?[a-zA-Z_][a-zA-Z0-9_\.<>\|]*? *?} *?/; + const JSDOC_TYPE_PARAM_RE = /{ *?[a-zA-Z_][a-zA-Z0-9_\.<>\|]*? *?} *?/; const JSDOC_ANNOTATIONS = [ { @@ -1103,7 +1103,7 @@ export default function(hljs) { { match: [ /@(self|context) *?/, - JSDOC_TYPE_PARAM_REG + JSDOC_TYPE_PARAM_RE ], className: { 1: "keyword", @@ -1113,7 +1113,7 @@ export default function(hljs) { { match: [ /(@return)s? *?/, - JSDOC_TYPE_PARAM_REG + JSDOC_TYPE_PARAM_RE ], className: { 1: "keyword", @@ -1123,9 +1123,9 @@ export default function(hljs) { { match: [ /@((param(eter)?)|arg(ument)?) *?/, - JSDOC_TYPE_PARAM_REG, + JSDOC_TYPE_PARAM_RE, /\[?/, - VALID_IDENTIFIER_REG, + VALID_IDENTIFIER_RE, /(( *=[^\n]+?)?\])? *?/ ], className: { @@ -1274,7 +1274,7 @@ export default function(hljs) { { begin: [ /#macro\s+/, - VALID_IDENTIFIER_REG + VALID_IDENTIFIER_RE ], className: { 1: "keyword", @@ -1308,8 +1308,8 @@ export default function(hljs) { { match: [ "global", - DOT_ACCESSOR_REG, - VALID_IDENTIFIER_REG + DOT_ACCESSOR_RE, + VALID_IDENTIFIER_RE ], className: { 1: "literal", @@ -1318,8 +1318,8 @@ export default function(hljs) { }, { match: [ - DOT_ACCESSOR_REG, - VALID_IDENTIFIER_REG, + DOT_ACCESSOR_RE, + VALID_IDENTIFIER_RE, /\s*\(/ ], className: { @@ -1328,8 +1328,8 @@ export default function(hljs) { }, { match: [ - DOT_ACCESSOR_REG, - VALID_IDENTIFIER_REG + DOT_ACCESSOR_RE, + VALID_IDENTIFIER_RE ], className: { 2: "property" @@ -1343,7 +1343,7 @@ export default function(hljs) { */ const FUNCTION_CALL = { begin: [ - VALID_IDENTIFIER_REG, + VALID_IDENTIFIER_RE, /\s*?/, /\(/ ], @@ -1357,7 +1357,7 @@ export default function(hljs) { */ const USER_ASSET_CONSTANT = { className: "literal", - end: VALID_IDENTIFIER_REG, + end: VALID_IDENTIFIER_RE, variants: [ { begin: "spr_" }, { begin: "obj_" }, @@ -1392,7 +1392,7 @@ export default function(hljs) { const STRUCT_LITERAL_MEMBER = { match: [ /\b/, - VALID_IDENTIFIER_REG, + VALID_IDENTIFIER_RE, /\s*:/ ], className: { @@ -1410,7 +1410,7 @@ export default function(hljs) { match: [ "function", /\s+/, - VALID_IDENTIFIER_REG, + VALID_IDENTIFIER_RE, /\s*?\(/ ], className: { @@ -1431,7 +1431,7 @@ export default function(hljs) { begin: [ /enum/, /\s+/, - VALID_IDENTIFIER_REG, + VALID_IDENTIFIER_RE, /\s*{/ ], end: "}", @@ -1443,7 +1443,7 @@ export default function(hljs) { COMMENT, { begin: [ - VALID_IDENTIFIER_REG, + VALID_IDENTIFIER_RE, /\s*=\s*/ ], end: /,|\n|}/, @@ -1453,7 +1453,7 @@ export default function(hljs) { contains: EXPRESSION }, { - match: VALID_IDENTIFIER_REG, + match: VALID_IDENTIFIER_RE, className: "literal" } ] @@ -1467,7 +1467,7 @@ export default function(hljs) { FUNCTION_CALL, USER_ASSET_CONSTANT, { - match: VALID_IDENTIFIER_REG, + match: VALID_IDENTIFIER_RE, keywords: { keyword: KEYWORDS, literal: LITERALS, From e057d42f1db05d7dce3c9016b6dcc942f6b4610d Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:04:10 +1100 Subject: [PATCH 15/49] refactor(gml) prefer `scope` over `className` --- src/languages/gml.js | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 73144e5503..4297e95052 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1098,14 +1098,14 @@ export default function(hljs) { const JSDOC_ANNOTATIONS = [ { match: /@((desc(ription)?)|ignore|pure|deprecated|(func(tion)?))\b/, - className: "keyword" + scope: "keyword" }, { match: [ /@(self|context) *?/, JSDOC_TYPE_PARAM_RE ], - className: { + scope: { 1: "keyword", 2: "literal", } @@ -1115,7 +1115,7 @@ export default function(hljs) { /(@return)s? *?/, JSDOC_TYPE_PARAM_RE ], - className: { + scope: { 1: "keyword", 2: "literal", } @@ -1128,7 +1128,7 @@ export default function(hljs) { VALID_IDENTIFIER_RE, /(( *=[^\n]+?)?\])? *?/ ], - className: { + scope: { 1: "keyword", 2: "literal", 3: "variable", @@ -1144,7 +1144,7 @@ export default function(hljs) { const COMMENT_JSDOC = { begin: /\/\/\//, end: /$|\n/, - className: "comment", + scope: "comment", contains: JSDOC_ANNOTATIONS }; @@ -1154,7 +1154,7 @@ export default function(hljs) { const COMMENT_BLOCK_JSDOC = { begin: /\/\*\*/, end: /\*\//, - className: "comment", + scope: "comment", contains: JSDOC_ANNOTATIONS }; @@ -1250,7 +1250,7 @@ export default function(hljs) { * Various representations of numbers */ const NUMBER = { - className: "literal", + scope: "literal", variants: [ { match: /(\B|^)\$[0-9a-fA-F]+/ }, { match: /(\B|^)#[0-9a-fA-F]+/ }, @@ -1262,7 +1262,7 @@ export default function(hljs) { const COMMENT_LINE_INNER = { match: /[^\n]+/, - className: "comment" + scope: "comment" }; /** @@ -1276,7 +1276,7 @@ export default function(hljs) { /#macro\s+/, VALID_IDENTIFIER_RE ], - className: { + scope: { 1: "keyword", 2: "literal" }, @@ -1311,7 +1311,7 @@ export default function(hljs) { DOT_ACCESSOR_RE, VALID_IDENTIFIER_RE ], - className: { + scope: { 1: "literal", 3: "property" } @@ -1322,7 +1322,7 @@ export default function(hljs) { VALID_IDENTIFIER_RE, /\s*\(/ ], - className: { + scope: { 2: "function" } }, @@ -1331,7 +1331,7 @@ export default function(hljs) { DOT_ACCESSOR_RE, VALID_IDENTIFIER_RE ], - className: { + scope: { 2: "property" } }, @@ -1347,7 +1347,7 @@ export default function(hljs) { /\s*?/, /\(/ ], - className: { + scope: { 1: "function" } }; @@ -1356,7 +1356,7 @@ export default function(hljs) { * The manual likes using `obj_` and such to define assets. Sneaky trick to make it look nicer :P */ const USER_ASSET_CONSTANT = { - className: "literal", + scope: "literal", end: VALID_IDENTIFIER_RE, variants: [ { begin: "spr_" }, @@ -1380,7 +1380,7 @@ export default function(hljs) { /\s+/ ], end: /:/, - className: { + scope: { 1: "keyword" }, contains: EXPRESSION @@ -1395,7 +1395,7 @@ export default function(hljs) { VALID_IDENTIFIER_RE, /\s*:/ ], - className: { + scope: { 2: "variable-instance" }, }; @@ -1413,7 +1413,7 @@ export default function(hljs) { VALID_IDENTIFIER_RE, /\s*?\(/ ], - className: { + scope: { 1: "keyword", 3: "function" } @@ -1435,7 +1435,7 @@ export default function(hljs) { /\s*{/ ], end: "}", - className: { + scope: { 1: "keyword", 3: "literal" }, @@ -1447,14 +1447,14 @@ export default function(hljs) { /\s*=\s*/ ], end: /,|\n|}/, - className: { + scope: { 1: "literal" }, contains: EXPRESSION }, { match: VALID_IDENTIFIER_RE, - className: "literal" + scope: "literal" } ] }; From 3b0d288ca0216c60cbd79997b8ee0b07a04e5ace Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:11:17 +1100 Subject: [PATCH 16/49] fix(gml) prefer `$` over `\n` where applicable --- src/languages/gml.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 4297e95052..7fecd7aa98 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1091,7 +1091,7 @@ export default function(hljs) { /** * A single-line comment. */ - const COMMENT_LINE = hljs.COMMENT('//', /\$|\n/); + const COMMENT_LINE = hljs.COMMENT('//', /$/); const JSDOC_TYPE_PARAM_RE = /{ *?[a-zA-Z_][a-zA-Z0-9_\.<>\|]*? *?} *?/; @@ -1143,7 +1143,7 @@ export default function(hljs) { */ const COMMENT_JSDOC = { begin: /\/\/\//, - end: /$|\n/, + end: /$/, scope: "comment", contains: JSDOC_ANNOTATIONS }; @@ -1446,7 +1446,7 @@ export default function(hljs) { VALID_IDENTIFIER_RE, /\s*=\s*/ ], - end: /,|\n|}/, + end: /,|$|}/, scope: { 1: "literal" }, From 78afe09ebb3b87f9e2886112770b6e89f5407b03 Mon Sep 17 00:00:00 2001 From: orca <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:13:37 +1100 Subject: [PATCH 17/49] fix(gml) more specific scope for function decl Co-authored-by: Josh Goebel --- src/languages/gml.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 7fecd7aa98..cf2422ae8d 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1408,7 +1408,7 @@ export default function(hljs) { */ const FUNCTION_DECLARATION = { match: [ - "function", + "title.function", /\s+/, VALID_IDENTIFIER_RE, /\s*?\(/ From 6cd62fbc71e245b2c986e9423b87e567f520b7dc Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:18:37 +1100 Subject: [PATCH 18/49] fix(gml) `title.function` is scope not match --- src/languages/gml.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index cf2422ae8d..f518674804 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1408,14 +1408,14 @@ export default function(hljs) { */ const FUNCTION_DECLARATION = { match: [ - "title.function", + "function", /\s+/, VALID_IDENTIFIER_RE, /\s*?\(/ ], scope: { 1: "keyword", - 3: "function" + 3: "title.function" } }; From c167592a6190bf2527f2dc1294b6a5d2b6b97791 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:20:48 +1100 Subject: [PATCH 19/49] fix(gml) `function` keyword stealing function decl --- src/languages/gml.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index f518674804..0540d8291a 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -62,7 +62,6 @@ export default function(hljs) { "exit", "finally", "for", - "function", "globalvar", "if", "mod", From 3c4b6364b2352e89ac339a0be6633bc172268b08 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:23:56 +1100 Subject: [PATCH 20/49] fix(gml) other instances of `function` -> `title.function` --- src/languages/gml.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 0540d8291a..6030a3798c 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1322,7 +1322,7 @@ export default function(hljs) { /\s*\(/ ], scope: { - 2: "function" + 2: "title.function" } }, { @@ -1347,7 +1347,7 @@ export default function(hljs) { /\(/ ], scope: { - 1: "function" + 1: "title.function" } }; From e6e40cd8c67825251a3ef08a1b5c5ccd041264ab Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:24:15 +1100 Subject: [PATCH 21/49] fix(gml) update `gml.css` theme to colour func changes --- src/styles/gml.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/styles/gml.css b/src/styles/gml.css index d6005c1bea..99f768afb8 100644 --- a/src/styles/gml.css +++ b/src/styles/gml.css @@ -14,7 +14,7 @@ GML Theme - Meseta font-weight: bold; } -.hljs-function { +.hljs-title.function_ { color: #FFB871; } From be3d94469fc8e1868e5ea7bd96057cf15e3c0c5e Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:30:02 +1100 Subject: [PATCH 22/49] fix(gml) correct scopes for jsdoc tags --- src/languages/gml.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 6030a3798c..d27cc07025 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1097,7 +1097,7 @@ export default function(hljs) { const JSDOC_ANNOTATIONS = [ { match: /@((desc(ription)?)|ignore|pure|deprecated|(func(tion)?))\b/, - scope: "keyword" + scope: "doctag" }, { match: [ @@ -1105,8 +1105,8 @@ export default function(hljs) { JSDOC_TYPE_PARAM_RE ], scope: { - 1: "keyword", - 2: "literal", + 1: "doctag", + 2: "type", } }, { @@ -1115,7 +1115,7 @@ export default function(hljs) { JSDOC_TYPE_PARAM_RE ], scope: { - 1: "keyword", + 1: "doctag", 2: "literal", } }, @@ -1128,8 +1128,8 @@ export default function(hljs) { /(( *=[^\n]+?)?\])? *?/ ], scope: { - 1: "keyword", - 2: "literal", + 1: "doctag", + 2: "type", 3: "variable", 4: "variable", 5: "variable", From 12ec81387f2f8198ece4d0a662400fa1dcb18c97 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:30:37 +1100 Subject: [PATCH 23/49] fix(gml) correct doctype tag for `@returns` (oops missed this one) --- src/languages/gml.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index d27cc07025..df7a8e52d3 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1116,7 +1116,7 @@ export default function(hljs) { ], scope: { 1: "doctag", - 2: "literal", + 2: "type", } }, { From 31b3fc0ead820305c506f0aff0b93f7d359a9e8b Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:34:52 +1100 Subject: [PATCH 24/49] fix(gml) constants not as literals --- src/languages/gml.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index df7a8e52d3..d92e53be9f 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1277,7 +1277,7 @@ export default function(hljs) { ], scope: { 1: "keyword", - 2: "literal" + 2: "variable.constant" }, contains: lateConcat( EXPRESSION, @@ -1355,7 +1355,7 @@ export default function(hljs) { * The manual likes using `obj_` and such to define assets. Sneaky trick to make it look nicer :P */ const USER_ASSET_CONSTANT = { - scope: "literal", + scope: "variable.constant", end: VALID_IDENTIFIER_RE, variants: [ { begin: "spr_" }, @@ -1436,7 +1436,7 @@ export default function(hljs) { end: "}", scope: { 1: "keyword", - 3: "literal" + 3: "variable.constant" }, contains: [ COMMENT, @@ -1447,13 +1447,13 @@ export default function(hljs) { ], end: /,|$|}/, scope: { - 1: "literal" + 1: "variable.constant" }, contains: EXPRESSION }, { match: VALID_IDENTIFIER_RE, - scope: "literal" + scope: "variable.constant" } ] }; From d011d6a5c8bd4f9b9a1c28441ddd9cd65a45428c Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:36:14 +1100 Subject: [PATCH 25/49] fix(gml) function invokation more specific --- src/languages/gml.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index d92e53be9f..90d8e97d5f 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1322,7 +1322,7 @@ export default function(hljs) { /\s*\(/ ], scope: { - 2: "title.function" + 2: "title.function.invoke" } }, { @@ -1347,7 +1347,7 @@ export default function(hljs) { /\(/ ], scope: { - 1: "title.function" + 1: "title.function.invoke" } }; From a9a005e28fbceff4b2e9233b953b0e6399f12559 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:42:07 +1100 Subject: [PATCH 26/49] fix(gml) escapes should be `char.escape` --- src/languages/gml.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 90d8e97d5f..0d64e7b79a 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1194,7 +1194,7 @@ export default function(hljs) { * An escape sequence in a string. */ const STRING_ESCAPE = { - scope: "literal", + scope: "char.escape", variants: [ { match: /\\u[a-fA-F0-9]{1,6}/ }, { match: /\\[^\n]/ } From 088ace74295bac339a0c590aac4f2322a5d01f0a Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:48:18 +1100 Subject: [PATCH 27/49] fix(gml) numbers are numbers! --- src/languages/gml.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 0d64e7b79a..56de13062b 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1249,7 +1249,7 @@ export default function(hljs) { * Various representations of numbers */ const NUMBER = { - scope: "literal", + scope: "number", variants: [ { match: /(\B|^)\$[0-9a-fA-F]+/ }, { match: /(\B|^)#[0-9a-fA-F]+/ }, From 64dc5b61b616880ab7bdcf5841e68dad120bd191 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:50:21 +1100 Subject: [PATCH 28/49] fix(gml) instance vars are just variables --- src/languages/gml.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 56de13062b..b23261f2e8 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1395,7 +1395,7 @@ export default function(hljs) { /\s*:/ ], scope: { - 2: "variable-instance" + 2: "variable" }, }; From 57c830f8970321b75050a4e509b4fbc1dea5587a Mon Sep 17 00:00:00 2001 From: orca <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:52:23 +1100 Subject: [PATCH 29/49] fix(gml) redundant case sensitivity decl Co-authored-by: Josh Goebel --- src/languages/gml.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index b23261f2e8..cac51c5cb9 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1479,7 +1479,6 @@ export default function(hljs) { return { name: 'GML', - case_insensitive: false, // language is case-sensitive keywords: { keyword: KEYWORDS, literal: LITERALS, From 15ad0c47776b1251789931668f8b3fb1a084d791 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:55:27 +1100 Subject: [PATCH 30/49] fix(gml) string template `{}` is `subst` --- src/languages/gml.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index cac51c5cb9..06d05b526c 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1176,8 +1176,8 @@ export default function(hljs) { const STRING_SUBSTITUTION = { begin: /{/, end: /}/, - beginScope: "literal", - endScope: "literal", + beginScope: "subst", + endScope: "subst", contains: EXPRESSION }; From 448a6243e527e0f384be2e23bb4080fad3620ad5 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 11:01:09 +1100 Subject: [PATCH 31/49] refactor(gml) remove unneeded `lateConcat` util --- src/languages/gml.js | 108 +++++++++++++------------------------------ 1 file changed, 33 insertions(+), 75 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 06d05b526c..d92afc0060 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -7,44 +7,6 @@ Category: scripting export default function(hljs) { - /** - * @type {any[][][]} - */ - const lateConcatTargets = []; - - /** - * Somewhat evil helper function to allow us to *very* lately build arrays. This is most useful - * in the case of {@link EXPRESSION}, which is an array of a bunch of different types, of which - * some of these also can contain expressions, AND contain other things too. - * - * Note that {@link doLateConcat} MUST be called before the results of this are valid, because - * we're using some reference-based trickery to do this. - * - * @param {...any[]} arrays The arrays to be concatenated later. - * @returns {any[]} - */ - function lateConcat(...arrays) { - lateConcatTargets.push(arrays); - return arrays; - } - - /** - * Perform the late-concatenation operation on all target arrays, converting them into effectively - * an array of the members that were to be concatenated. - */ - function doLateConcat() { - - lateConcatTargets.forEach(target => { - const arrayMembers = [...target]; - target.length = 0; - - for (const array of arrayMembers) { - target.push(...array); - } - - }); - } - const KEYWORDS = [ "and", "begin", @@ -1264,42 +1226,6 @@ export default function(hljs) { scope: "comment" }; - /** - * Pre-processor modes for macro definitions and regions. - */ - const PREPROCESSOR = { - end: /$/, - variants: [ - { - begin: [ - /#macro\s+/, - VALID_IDENTIFIER_RE - ], - scope: { - 1: "keyword", - 2: "variable.constant" - }, - contains: lateConcat( - EXPRESSION, - [ - COMMENT, - { - match: /\\\n/ - } - ] - ), - }, - { - begin: "#define" - }, - { - begin: /#(end)?region\b/, - beginScope: "keyword", - contains: [COMMENT_LINE_INNER] - }, - ] - }; - /** * Dot accessor usage with a special highlighting case for `global`. */ @@ -1475,7 +1401,39 @@ export default function(hljs) { } ); - doLateConcat(); + /** + * Pre-processor modes for macro definitions and regions. + */ + const PREPROCESSOR = { + end: /$/, + variants: [ + { + begin: [ + /#macro\s+/, + VALID_IDENTIFIER_RE + ], + scope: { + 1: "keyword", + 2: "variable.constant" + }, + contains: [ + ...EXPRESSION, + COMMENT, + { + match: /\\\n/ + } + ] + }, + { + begin: "#define" + }, + { + begin: /#(end)?region\b/, + beginScope: "keyword", + contains: [COMMENT_LINE_INNER] + }, + ] + }; return { name: 'GML', From 6bc0f853ff9159a9f036b8a186b921a44f8eb875 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 11:10:21 +1100 Subject: [PATCH 32/49] fix(gml) numerical string templates are `subst` --- src/languages/gml.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index d92afc0060..0696aaed44 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1149,7 +1149,7 @@ export default function(hljs) { */ const STRING_NUMERICAL_SUBSTITUTION = { match: /{[0-9]+}/, - scope: "literal" + scope: "subst" }; /** From f223bdb4eaf45e25da797d121022366eeec33ecf Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 11:21:47 +1100 Subject: [PATCH 33/49] fix(gml) preproc is `meta` --- src/languages/gml.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 0696aaed44..062d0d1e47 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1413,7 +1413,7 @@ export default function(hljs) { VALID_IDENTIFIER_RE ], scope: { - 1: "keyword", + 1: "meta", 2: "variable.constant" }, contains: [ @@ -1425,11 +1425,12 @@ export default function(hljs) { ] }, { - begin: "#define" + begin: "#define", + scope: "meta" }, { begin: /#(end)?region\b/, - beginScope: "keyword", + beginScope: "meta", contains: [COMMENT_LINE_INNER] }, ] From 5d4d029f5620cf03f3ec707bc6e5fbc455cc6c8b Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 11:23:46 +1100 Subject: [PATCH 34/49] fix(gml) `gml.css` theme various colour fixes --- src/styles/gml.css | 54 +++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/src/styles/gml.css b/src/styles/gml.css index 99f768afb8..398ed8a224 100644 --- a/src/styles/gml.css +++ b/src/styles/gml.css @@ -5,75 +5,71 @@ GML Theme - Meseta */ .hljs { - background: #222222; - color: #C0C0C0; + background: #222222; + color: #C0C0C0; } -.hljs-keyword { - color: #FFB871; - font-weight: bold; +.hljs-keyword, +.hljs-type, +.hljs-meta { + color: #FFB871; + font-weight: bold; } .hljs-title.function_ { - color: #FFB871; + color: #FFB871; } -.hljs-literal { - color: #FF8080; +.hljs-literal, +.hljs-number, +.hljs-subst, +.hljs-char.escape_, +.hljs-doctag, +.hljs-variable.constant_ { + color: #FF8080; } .hljs-variable.language_ { - color: #58E55A; + color: #58E55A; } -.hljs-property { - color: #b2b1ff; +.hljs-property, +.hljs-variable { + color: #b2b1ff; } .hljs-comment { - color: #5B995B; + color: #5B995B; } .hljs-string { - color: #FFFF00; -} - -.hljs-number { - color: #FF8080; + color: #FFFF00; } .hljs-attribute, .hljs-selector-tag, -.hljs-doctag, .hljs-name, .hljs-bullet, .hljs-code, .hljs-addition, .hljs-regexp, -.hljs-variable, .hljs-template-variable, .hljs-link, .hljs-selector-attr, .hljs-selector-pseudo, -.hljs-type, .hljs-selector-id, .hljs-selector-class, .hljs-quote, .hljs-template-tag, .hljs-deletion, -.hljs-title, -.hljs-section, -.hljs-meta .hljs-keyword, - -.hljs-meta, -.hljs-subst { - color: #C0C0C0; +.hljs-section { + color: #C0C0C0; } .hljs-emphasis { - font-style: italic; + font-style: italic; } .hljs-strong { - font-weight: bold; + font-weight: bold; } From 74c324cbd254c5eb65d777a2a09c7c465953c94e Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 11:35:58 +1100 Subject: [PATCH 35/49] fix(gml) built ins not being highlighted in expr --- src/languages/gml.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 062d0d1e47..e161e6ca96 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1396,7 +1396,7 @@ export default function(hljs) { keywords: { keyword: KEYWORDS, literal: LITERALS, - symbol: LANGUAGE_VARIABLES + "variable.language": LANGUAGE_VARIABLES }, } ); From bb1789f9a7734efbf2a346b2c2f3bc6a2f0e7272 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 11:37:52 +1100 Subject: [PATCH 36/49] feat(gml) much more extensive test --- test/markup/gml/default.expect.txt | 79 +++++++++++++++++++++++------- test/markup/gml/default.txt | 76 ++++++++++++++++++++++------ 2 files changed, 123 insertions(+), 32 deletions(-) diff --git a/test/markup/gml/default.expect.txt b/test/markup/gml/default.expect.txt index 39d76a546b..1af33e7166 100644 --- a/test/markup/gml/default.expect.txt +++ b/test/markup/gml/default.expect.txt @@ -1,22 +1,67 @@ -/// @description Collision code -// standard collision handling - -// Horizontal collisions -if(place_meeting(x+hspd, y, obj_wall)) { - while(!place_meeting(x+sign(hspd), y, obj_wall)) { - x += sign(hspd); +#macro DEBUG false +#macro DEBUG:Debug true +#macro DEBUG:Release false + +/// @description Collision code +/// @self {Id.Instance} +function standard_collisions() { + + // standard collision handling + + // Horizontal collisions + if(place_meeting(x+hspd, y, obj_wall)) { + while(!place_meeting(x+sign(hspd), y, obj_wall)) { + x += sign(hspd); + } + hspd = 0; } - hspd = 0; -} -x += hspd; + x += hspd; -// Vertical collisions -if(place_meeting(x, y+vspd, collide_obj)) { - while(!place_meeting(x, y+sign(vspd), collide_obj)) { - y += sign(vspd); + // Vertical collisions + if(place_meeting(x, y+vspd, collide_obj)) { + while(!place_meeting(x, y+sign(vspd), collide_obj)) { + y += sign(vspd); + } + vspd = 0; } - vspd = 0; + y += vspd; + + if (DEBUG) { + show_debug_message($"x: {x},\ty: {y}"); + } + +} + +/// @description A sample constructor that does something. +/// @param {Real} [some_data=2] Some optional data. +function SomeConstructor(some_data = 2) constructor { + + self.some_data = some_data; + + /// @description Some example function! + /// @pure + /// @param {String} stuff + /// @returns {Bool} + static do_things = function(stuff) { + if (string_digits(stuff) != stuff) { + return false; + } + + return real(stuff) == self.some_data; + }; + +} + +/** @desc Some random enum. */ +enum AnEnum { + /** @desc It is zero! */ + Zero = 0, + /** @desc It is one! */ + One = 1 } -y += vspd; -show_debug_message("This is a test"); \ No newline at end of file +var some_constructor = new SomeConstructor(AnEnum.Zero); + +if (some_constructor.do_things("0")) { + throw "idk"; +} \ No newline at end of file diff --git a/test/markup/gml/default.txt b/test/markup/gml/default.txt index 354acb9ac4..f950bab513 100644 --- a/test/markup/gml/default.txt +++ b/test/markup/gml/default.txt @@ -1,22 +1,68 @@ + +#macro DEBUG false +#macro DEBUG:Debug true +#macro DEBUG:Release false + /// @description Collision code -// standard collision handling +/// @self {Id.Instance} +function standard_collisions() { + + // standard collision handling -// Horizontal collisions -if(place_meeting(x+hspd, y, obj_wall)) { - while(!place_meeting(x+sign(hspd), y, obj_wall)) { - x += sign(hspd); + // Horizontal collisions + if(place_meeting(x+hspd, y, obj_wall)) { + while(!place_meeting(x+sign(hspd), y, obj_wall)) { + x += sign(hspd); + } + hspd = 0; } - hspd = 0; -} -x += hspd; + x += hspd; -// Vertical collisions -if(place_meeting(x, y+vspd, collide_obj)) { - while(!place_meeting(x, y+sign(vspd), collide_obj)) { - y += sign(vspd); + // Vertical collisions + if(place_meeting(x, y+vspd, collide_obj)) { + while(!place_meeting(x, y+sign(vspd), collide_obj)) { + y += sign(vspd); + } + vspd = 0; } - vspd = 0; + y += vspd; + + if (DEBUG) { + show_debug_message($"x: {x},\ty: {y}"); + } + } -y += vspd; -show_debug_message("This is a test"); \ No newline at end of file +/// @description A sample constructor that does something. +/// @param {Real} [some_data=2] Some optional data. +function SomeConstructor(some_data = 2) constructor { + + self.some_data = some_data; + + /// @description Some example function! + /// @pure + /// @param {String} stuff + /// @returns {Bool} + static do_things = function(stuff) { + if (string_digits(stuff) != stuff) { + return false; + } + + return real(stuff) == self.some_data; + }; + +} + +/** @desc Some random enum. */ +enum AnEnum { + /** @desc It is zero! */ + Zero = 0, + /** @desc It is one! */ + One = 1 +} + +var some_constructor = new SomeConstructor(AnEnum.Zero); + +if (some_constructor.do_things("0")) { + throw "idk"; +} From 0a00d164472646f9c358368b373e5ea0aece8133 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 11:45:41 +1100 Subject: [PATCH 37/49] fix(gml) don't match string chars one by one --- src/languages/gml.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index e161e6ca96..7a08977e4e 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1170,14 +1170,14 @@ export default function(hljs) { variants: [ { begin: /\$"/, - end: "\"", + end: /\"/, beginScope: "string", endScope: "string", contains: [ STRING_ESCAPE, STRING_SUBSTITUTION, { - match: /[^\n"{]/, + match: /[^\n"{\\]+/, scope: "string" } ] From 6d70f6f3f477c0cdadb773bdb9ba9dd1fe84745d Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 11:47:41 +1100 Subject: [PATCH 38/49] fix(gml) update test accordingly to string change --- test/markup/gml/default.expect.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/markup/gml/default.expect.txt b/test/markup/gml/default.expect.txt index 1af33e7166..bbb2df8f53 100644 --- a/test/markup/gml/default.expect.txt +++ b/test/markup/gml/default.expect.txt @@ -27,7 +27,7 @@ y += vspd; if (DEBUG) { - show_debug_message($"x: {x},\ty: {y}"); + show_debug_message($"x: {x},\ty: {y}"); } } From aa008263a570b79dce0ace06b17e26984bac1c23 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 11:54:39 +1100 Subject: [PATCH 39/49] fix(gml) remove useless `global` special `.` case --- src/languages/gml.js | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 7a08977e4e..ad0721b6de 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1227,20 +1227,9 @@ export default function(hljs) { }; /** - * Dot accessor usage with a special highlighting case for `global`. + * Dot accessor usage. */ const PROP_ACCESS = [ - { - match: [ - "global", - DOT_ACCESSOR_RE, - VALID_IDENTIFIER_RE - ], - scope: { - 1: "literal", - 3: "property" - } - }, { match: [ DOT_ACCESSOR_RE, From 38c63e68f43adaf37f1765b76af48bb210a4d771 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Sun, 15 Dec 2024 12:45:08 +1100 Subject: [PATCH 40/49] fix(gml) chuck out redundant `?` on optional spaces --- src/languages/gml.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index ad0721b6de..fe7657c68f 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1054,7 +1054,7 @@ export default function(hljs) { */ const COMMENT_LINE = hljs.COMMENT('//', /$/); - const JSDOC_TYPE_PARAM_RE = /{ *?[a-zA-Z_][a-zA-Z0-9_\.<>\|]*? *?} *?/; + const JSDOC_TYPE_PARAM_RE = /{ *[a-zA-Z_][a-zA-Z0-9_\.<>\|]* *} */; const JSDOC_ANNOTATIONS = [ { @@ -1063,7 +1063,7 @@ export default function(hljs) { }, { match: [ - /@(self|context) *?/, + /@(self|context) */, JSDOC_TYPE_PARAM_RE ], scope: { @@ -1073,7 +1073,7 @@ export default function(hljs) { }, { match: [ - /(@return)s? *?/, + /(@return)s? */, JSDOC_TYPE_PARAM_RE ], scope: { @@ -1083,7 +1083,7 @@ export default function(hljs) { }, { match: [ - /@((param(eter)?)|arg(ument)?) *?/, + /@((param(eter)?)|arg(ument)?) */, JSDOC_TYPE_PARAM_RE, /\[?/, VALID_IDENTIFIER_RE, From a1097fdcd6d4a0b0c1014bb65285defa8c0434b0 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:42:27 +1100 Subject: [PATCH 41/49] fix(gml) remove obsolete `#define` keyword --- src/languages/gml.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index fe7657c68f..f4e9d79d1b 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1413,10 +1413,6 @@ export default function(hljs) { } ] }, - { - begin: "#define", - scope: "meta" - }, { begin: /#(end)?region\b/, beginScope: "meta", From 5221c23109e7f5eb786632d20dd550bcef09ec6e Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:42:55 +1100 Subject: [PATCH 42/49] fix(gml) template strings cannot contain newlines --- src/languages/gml.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/languages/gml.js b/src/languages/gml.js index f4e9d79d1b..ddfa47427a 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1173,6 +1173,7 @@ export default function(hljs) { end: /\"/, beginScope: "string", endScope: "string", + illegal: /\n/, contains: [ STRING_ESCAPE, STRING_SUBSTITUTION, From 1b9cecf1a5742a313d21503d6806feca3651908a Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:44:31 +1100 Subject: [PATCH 43/49] feat(gml) fine tune some relevances Given some common language features 0 relevance, whereas some stuff like common usage of `spr_*` and `obj_*` are very GML-ey, and `$""` or `@""` string types are very much GML syntax. --- src/languages/gml.js | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index ddfa47427a..4c485c47a2 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1079,7 +1079,8 @@ export default function(hljs) { scope: { 1: "doctag", 2: "type", - } + }, + relevance: 0, }, { match: [ @@ -1095,7 +1096,8 @@ export default function(hljs) { 3: "variable", 4: "variable", 5: "variable", - } + }, + relevance: 0, } ]; @@ -1106,7 +1108,8 @@ export default function(hljs) { begin: /\/\/\//, end: /$/, scope: "comment", - contains: JSDOC_ANNOTATIONS + relevance: 0, + contains: JSDOC_ANNOTATIONS, }; /** @@ -1116,6 +1119,7 @@ export default function(hljs) { begin: /\/\*\*/, end: /\*\//, scope: "comment", + relevance: 0, contains: JSDOC_ANNOTATIONS }; @@ -1173,6 +1177,7 @@ export default function(hljs) { end: /\"/, beginScope: "string", endScope: "string", + relevance: 10, illegal: /\n/, contains: [ STRING_ESCAPE, @@ -1187,21 +1192,24 @@ export default function(hljs) { scope: "string", begin: "@'", end: "'", + relevance: 10, contains: [STRING_NUMERICAL_SUBSTITUTION] }, { scope: "string", begin: "@\"", end: "\"", + relevance: 10, contains: [STRING_NUMERICAL_SUBSTITUTION] }, { scope: "string", begin: /"/, end: /"/, - illegal: "\\n", + illegal: /\n/, + relevance: 0, contains: [ - STRING_ESCAPE, + STRING_ESCAPE, STRING_NUMERICAL_SUBSTITUTION ] } @@ -1216,9 +1224,9 @@ export default function(hljs) { variants: [ { match: /(\B|^)\$[0-9a-fA-F]+/ }, { match: /(\B|^)#[0-9a-fA-F]+/ }, - { match: /\b0x[0-9a-fA-F][0-9a-fA-F_]*/ }, - { match: /\b0b[01][01_]*/ }, - { match: /\b[0-9][0-9_.]*/ } + { match: /\b0x[0-9a-fA-F][0-9a-fA-F_]*/, relevance: 0 }, + { match: /\b0b[01][01_]*/, relevance: 0 }, + { match: /\b[0-9][0-9_.]*/, relevance: 0 } ] }; @@ -1273,6 +1281,7 @@ export default function(hljs) { const USER_ASSET_CONSTANT = { scope: "variable.constant", end: VALID_IDENTIFIER_RE, + relevance: 2, variants: [ { begin: "spr_" }, { begin: "obj_" }, @@ -1388,7 +1397,7 @@ export default function(hljs) { literal: LITERALS, "variable.language": LANGUAGE_VARIABLES }, - } + }, ); /** @@ -1402,6 +1411,7 @@ export default function(hljs) { /#macro\s+/, VALID_IDENTIFIER_RE ], + end: /$/, scope: { 1: "meta", 2: "variable.constant" From 66e9ef63bbc96c917a235ed2200a3d70654653fa Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:45:50 +1100 Subject: [PATCH 44/49] fix(gml) `@""` strings are not unique actually! --- src/languages/gml.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 4c485c47a2..6dadd7d39e 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1199,7 +1199,6 @@ export default function(hljs) { scope: "string", begin: "@\"", end: "\"", - relevance: 10, contains: [STRING_NUMERICAL_SUBSTITUTION] }, { From 0fd9d05c4e37b268721e6b463b60b452de5d6c48 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Mon, 16 Dec 2024 12:32:00 +1100 Subject: [PATCH 45/49] fix(gml) nest `subst` scope instead of workaround --- src/languages/gml.js | 14 +++++--------- src/styles/gml.css | 4 ++-- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index 6dadd7d39e..bebc0fb682 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1142,8 +1142,9 @@ export default function(hljs) { const STRING_SUBSTITUTION = { begin: /{/, end: /}/, - beginScope: "subst", - endScope: "subst", + beginScope: "char.escape", + endScope: "char.escape", + scope: "subst", contains: EXPRESSION }; @@ -1175,17 +1176,12 @@ export default function(hljs) { { begin: /\$"/, end: /\"/, - beginScope: "string", - endScope: "string", + scope: "string", relevance: 10, illegal: /\n/, contains: [ STRING_ESCAPE, - STRING_SUBSTITUTION, - { - match: /[^\n"{\\]+/, - scope: "string" - } + STRING_SUBSTITUTION ] }, { diff --git a/src/styles/gml.css b/src/styles/gml.css index 398ed8a224..a8cb4c6aa0 100644 --- a/src/styles/gml.css +++ b/src/styles/gml.css @@ -22,7 +22,6 @@ GML Theme - Meseta .hljs-literal, .hljs-number, -.hljs-subst, .hljs-char.escape_, .hljs-doctag, .hljs-variable.constant_ { @@ -62,7 +61,8 @@ GML Theme - Meseta .hljs-quote, .hljs-template-tag, .hljs-deletion, -.hljs-section { +.hljs-section, +.hljs-subst { color: #C0C0C0; } From 1f0bcc430ee3105c493d7e8534be27e40180c43f Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Mon, 16 Dec 2024 14:36:43 +1100 Subject: [PATCH 46/49] fix(gml) jsdoc `@param` varname as `params` --- src/languages/gml.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/languages/gml.js b/src/languages/gml.js index bebc0fb682..ef6d93eafc 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1093,9 +1093,9 @@ export default function(hljs) { scope: { 1: "doctag", 2: "type", - 3: "variable", - 4: "variable", - 5: "variable", + 3: "params", + 4: "params", + 5: "params", }, relevance: 0, } From a746ca100b3cd03c424bf234f4ba8b331491c50a Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Mon, 16 Dec 2024 14:38:34 +1100 Subject: [PATCH 47/49] fix(gml) update theme for jsdoc changes --- src/styles/gml.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/styles/gml.css b/src/styles/gml.css index a8cb4c6aa0..525b969426 100644 --- a/src/styles/gml.css +++ b/src/styles/gml.css @@ -33,7 +33,8 @@ GML Theme - Meseta } .hljs-property, -.hljs-variable { +.hljs-variable, +.hljs-params { color: #b2b1ff; } From 1507cf25bf84a6868455f6a77898beb5bf840f48 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Mon, 16 Dec 2024 14:40:42 +1100 Subject: [PATCH 48/49] fix(gml) update markup test --- test/markup/gml/default.expect.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/markup/gml/default.expect.txt b/test/markup/gml/default.expect.txt index bbb2df8f53..1ab90cfd42 100644 --- a/test/markup/gml/default.expect.txt +++ b/test/markup/gml/default.expect.txt @@ -27,20 +27,20 @@ y += vspd; if (DEBUG) { - show_debug_message($"x: {x},\ty: {y}"); + show_debug_message($"x: {x},\ty: {y}"); } } /// @description A sample constructor that does something. -/// @param {Real} [some_data=2] Some optional data. +/// @param {Real} [some_data=2] Some optional data. function SomeConstructor(some_data = 2) constructor { self.some_data = some_data; /// @description Some example function! /// @pure - /// @param {String} stuff + /// @param {String} stuff /// @returns {Bool} static do_things = function(stuff) { if (string_digits(stuff) != stuff) { From 32d3db8087c3363940901d4bf5525cd3c0dd0732 Mon Sep 17 00:00:00 2001 From: thennothinghappened <35243139+thennothinghappened@users.noreply.github.com> Date: Wed, 1 Jan 2025 11:35:02 +1100 Subject: [PATCH 49/49] fix(gml) ds_map accessor > ternary Prevents a false match for ternary expressions for lines such as `map[? key] = { a: 2 };` --- src/languages/gml.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/languages/gml.js b/src/languages/gml.js index ef6d93eafc..6b9729ee04 100644 --- a/src/languages/gml.js +++ b/src/languages/gml.js @@ -1283,6 +1283,14 @@ export default function(hljs) { ] }; + /** + * Match for the accessor for a `ds_map`. This exists to disambiguate from ternaries, which would + * otherwise consume the match for a struct literal member. + */ + const DS_MAP_ACCESS = { + match: /\[\?/ + }; + /** * A ternary expression, matching partial ternary as `? :`. * Effectively exists to prevent {@link STRUCT_LITERAL_MEMBER} from stealing ` :`. @@ -1380,6 +1388,7 @@ export default function(hljs) { EXPRESSION.push( STRING, + DS_MAP_ACCESS, TERNARY, PROP_ACCESS, NUMBER, @@ -1445,6 +1454,7 @@ export default function(hljs) { // Prevent keywords being taken by function calls. beginKeywords: KEYWORDS.join(" ") }, + DS_MAP_ACCESS, TERNARY, STRUCT_LITERAL_MEMBER, FUNCTION_DECLARATION,