the source is over 100KB, syntax highlighting in the browser is too slow
// GMC Greasemonkey Extension
// Version 1.0
// January 25, 2010
// Copyright © 2010, Caleb Helbling
// --------------------------------------------------------------------
// LaTeX script courtesy of Steve Cheng.
// --------------------------------------------------------------------
// ==UserScript==
// @name GMC Greasemonkey Extension
// @description Provides Syntax Coloring, Youtube Videos, the old creations form, and LaTeX viewer
// @include http://www.gmc.yoyogames.com/*
// @include http://gmc.yoyogames.com/*
// ==/UserScript==
// CONFIG
var options = {};
options.syntax_coloring = true;
options.youtube = true;
options.old_forums = true;
options.latex = true;
// Set the color of the syntax coloring
// Possible options:
// GM8
// GM7
// CUSTOM
options.colors = {};
options.colors.color_style = 'GM8';
// All colors should be in hexadecimal
switch (options.colors.color_style) {
// DEFINE YOUR CUSTOM COLORS HERE
case 'CUSTOM':
options.colors.functions = '';
options.colors.variables = '';
options.colors.constants = '';
options.colors.logic = '';
options.colors.comments = '';
options.colors.numbers = '';
options.colors.string = '';
break;
case 'GM8':
options.colors.functions = '800000';
options.colors.variables = '800000';
options.colors.constants = '800000';
options.colors.logic = '000080';
options.colors.comments = '008000';
options.colors.numbers = '0000ff';
options.colors.string = '0000ff';
break;
case 'GM7':
options.colors.functions = '000080';
options.colors.variables = '0000ff';
options.colors.constants = '800000';
options.colors.logic = '000000';
options.colors.comments = '008000';
options.colors.numbers = '000000';
options.colors.string = '000000';
break;
}
var i, ii, iii, len;
// Get the main content wrapper
var wrapper = document.getElementById('ipbwrapper').getElementsByClassName('borderwrap')[0];
// Synchronous ajax function
function ajax(url) {
var AJAX;
if (window.XMLHttpRequest) {
AJAX=new XMLHttpRequest();
} else {
AJAX=new ActiveXObject("Microsoft.XMLHTTP");
}
if (AJAX) {
AJAX.open("GET", url, false);
AJAX.send(null);
return AJAX.responseText;
} else {
return false;
}
}
function getUrlVars(url) {
if (url === undefined) {
url = window.location.href;
}
var map = {};
url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
map[key] = value;
});
return map;
}
var get = getUrlVars();
function check_array(sub_array,data) {
if (sub_array!==undefined && sub_array.length>0) {
for (var b=0, len=sub_array.length; b<len; b++) {
if (sub_array[b] === data) {
return true;
}
}
}
return false;
}
function get_color(data) {
if (data === "\n") {
return '<br />';
}
if (check_array(functions[data.length],data)) {
return '<span style="color:#'+options.colors.functions+';">'+data+'</span>';
}
if (check_array(variables[data.length],data)) {
return '<span style="color:#'+options.colors.variables+';">'+data+'</span>';
}
if (check_array(constants[data.length],data)) {
return '<span style="color:#'+options.colors.constants+';">'+data+'</span>';
}
if (check_array(logic[data.length],data)) {
return '<span style="color:#'+options.colors.logic+';font-weight:bold;">'+data+'</span>';
}
// Check to see if it's a number
if (data.match(/^[\-|\+]?[0-9]*\.?[0-9]+$/) !== null) {
return '<span style="color:#'+options.colors.numbers+';">'+data+'</span>';
}
return data;
}
function chr(string) {
return (String.fromCharCode(string));
}
if (options.syntax_coloring === true && get.showtopic !== undefined) {
// Functions organized by length
var functions = [[],[],["ln"],["abs","chr","cos","exp","max","min","ord","sin","sqr","tan"],["ceil","frac","log2","logn","max3","mean","min3","real","sign","sqrt"],["floor","log10","power","round","sleep"],["arccos","arcsin","arctan","choose","median","random","string"],["arctan2","cd_init","cd_play","cd_stop","d3d_end","irandom","is_real"],["cd_pause","cd_track","degtorad","file_eof","font_add","game_end","ini_open","io_clear","path_add","path_end","radtodeg","room_add","tile_add"],["action_if","cd_length","cd_number","cd_paused","cd_resume","d3d_start","disk_free","disk_size","draw_line","draw_path","draw_text","file_copy","file_eoln","font_name","game_load","game_save","get_color","ini_close","io_handle","is_string","load_info","move_snap","move_wrap","mplay_end","path_flip","path_name","randomize","room_goto","room_name","room_next","show_info","show_menu","show_text","sound_add","sound_pan","tile_find"],["cd_playing","cd_present","d3d_vertex","draw_arrow","draw_clear","draw_point","ds_map_add","event_user","file_close","get_string","make_color","motion_add","motion_set","mouse_wait","object_add","path_get_x","path_get_y","path_scale","path_shift","path_start","place_free","show_error","show_image","show_video","sound_fade","sound_loop","sound_name","sound_play","sound_stop","sprite_add","string_pos","tile_get_x","tile_get_y"],["MCI_command","action_font","action_move","action_path","action_snap","action_wrap","cd_position","d3d_set_fog","draw_button","draw_circle","draw_sprite","draw_vertex","ds_grid_add","ds_grid_get","ds_grid_set","ds_list_add","ds_map_copy","ds_map_read","ds_map_size","file_delete","file_exists","file_readln","file_rename","font_delete","font_exists","get_integer","lengthdir_x","lengthdir_y","merge_color","mouse_clear","move_bounce","move_random","move_random","object_name","path_append","path_assign","path_delete","path_exists","path_mirror","path_rotate","place_empty","room_assign","room_exists","screen_save","script_name","sprite_name","sprite_save","string_copy","tile_delete","tile_exists"],["action_color","action_sleep","action_sound","cd_open_door","date_date_of","date_get_day","date_inc_day","date_time_of","draw_ellipse","draw_surface","ds_grid_copy","ds_grid_read","ds_list_copy","ds_list_read","ds_list_size","ds_list_sort","ds_map_clear","ds_map_empty","ds_map_write","ds_stack_pop","ds_stack_top","effect_clear","execute_file","file_writeln","filename_dir","filename_ext","font_replace","game_restart","joystick_pov","message_size","move_contact","mp_grid_draw","mp_grid_path","path_reverse","random_range","room_restart","show_message","show_message","sound_delete","sound_exists","sound_volume","sprite_merge","string_count","string_lower","string_upper","string_width","surface_copy","surface_free","surface_save","tile_get_top","timeline_add","window_get_x","window_get_y"],["action_bounce","action_effect","cd_close_door","color_get_hue","color_get_red","d3d_draw_cone","d3d_draw_wall","d3d_set_depth","date_day_span","date_get_hour","date_get_week","date_get_year","date_inc_hour","date_inc_week","date_inc_year","date_is_today","display_reset","draw_getpixel","draw_set_font","draw_text_ext","draw_triangle","ds_grid_clear","ds_grid_width","ds_grid_write","ds_list_clear","ds_list_empty","ds_list_write","ds_map_create","ds_map_delete","ds_map_exists","ds_queue_copy","ds_queue_head","ds_queue_read","ds_queue_size","ds_queue_tail","ds_stack_copy","ds_stack_push","ds_stack_read","ds_stack_size","event_perform","execute_shell","external_call","external_free","file_bin_open","file_bin_seek","file_bin_size","file_text_eof","filename_name","filename_path","font_get_bold","font_get_last","font_get_name","font_get_size","get_directory","highscore_add","ini_read_real","instance_copy","instance_find","irandom_range","joystick_axes","joystick_name","joystick_rpos","joystick_upos","joystick_vpos","joystick_xpos","joystick_ypos","joystick_zpos","keyboard_wait","message_alpha","object_delete","object_exists","path_get_kind","path_get_name","path_set_kind","place_meeting","place_snapped","room_get_name","room_previous","room_set_code","room_set_view","room_tile_add","screen_redraw","script_exists","show_menu_pos","show_question","show_question","sound_discard","sound_replace","sound_restore","sprite_assign","sprite_delete","sprite_exists","string_delete","string_digits","string_format","string_height","string_insert","string_length","string_repeat","tile_get_left","timeline_name","window_center","window_handle"],["action_cd_play","action_cd_stop","action_if_dice","action_if_life","action_message","action_move_to","action_webpage","background_add","collision_line","color_get_blue","d3d_draw_block","d3d_draw_floor","d3d_model_cone","d3d_model_draw","d3d_model_load","d3d_model_save","d3d_model_wall","d3d_set_hidden","date_get_month","date_hour_span","date_inc_month","date_leap_year","date_week_span","date_year_span","draw_get_alpha","draw_get_color","draw_healthbar","draw_highscore","draw_rectangle","draw_roundrect","draw_set_alpha","draw_set_color","ds_grid_create","ds_grid_height","ds_grid_resize","ds_list_create","ds_list_delete","ds_list_insert","ds_map_destroy","ds_map_replace","ds_queue_clear","ds_queue_empty","ds_queue_write","ds_stack_clear","ds_stack_empty","ds_stack_write","execute_string","external_call0","external_call1","external_call2","external_call3","external_call4","external_call5","external_call6","external_call7","external_call8","file_bin_close","file_find_next","file_open_read","file_read_real","file_text_eoln","filename_drive","font_get_first","highscore_name","highscore_show","ini_key_delete","ini_key_exists","ini_write_real","instance_place","keyboard_check","keyboard_clear","make_color_hsv","make_color_rgb","message_button","mouse_wheel_up","mp_grid_create","mp_linear_path","mp_linear_step","mplay_init_ipx","part_type_life","part_type_size","part_type_step","path_add_point","path_duplicate","path_get_speed","point_distance","position_empty","room_duplicate","room_goto_next","room_set_width","screen_refresh","script_execute","sound_get_kind","sound_get_name","sound_stop_all","splash_set_top","sprite_replace","string_char_at","string_letters","string_replace","surface_create","surface_exists","texture_exists","tile_delete_at","tile_get_alpha","tile_get_blend","tile_get_depth","tile_get_width","tile_set_alpha","tile_set_blend","tile_set_depth","tile_set_scale","timeline_clear","window_default"],["action_cd_pause","action_end_game","action_if_empty","action_if_mouse","action_if_score","action_if_sound","action_path_end","action_set_life","action_snapshot","background_name","background_save","cd_set_position","cd_track_length","collision_point","color_get_green","color_get_value","d3d_model_block","d3d_model_clear","d3d_model_floor","d3d_set_culling","d3d_set_shading","date_get_minute","date_get_second","date_inc_minute","date_inc_second","date_month_span","date_valid_date","date_valid_time","display_set_all","draw_background","draw_line_color","draw_line_width","draw_set_halign","draw_set_valign","draw_sprite_ext","draw_text_color","ds_grid_destroy","ds_grid_get_max","ds_grid_get_min","ds_grid_get_sum","ds_grid_shuffle","ds_grid_value_x","ds_grid_value_y","ds_list_destroy","ds_list_replace","ds_list_shuffle","ds_priority_add","ds_queue_create","ds_stack_create","event_inherited","event_inherited","execute_program","external_define","file_attributes","file_find_close","file_find_first","file_open_write","file_text_close","file_write_real","font_add_sprite","font_get_italic","highscore_clear","highscore_value","ini_read_string","instance_change","instance_create","instance_exists","instance_number","instance_sprite","joystick_exists","message_caption","move_bounce_all","mp_grid_destroy","mplay_data_mode","mplay_data_read","mplay_ipaddress","mplay_player_id","object_get_mask","object_get_name","object_set_mask","parameter_count","part_type_alpha","part_type_blend","part_type_clear","part_type_color","part_type_death","part_type_scale","part_type_shape","part_type_speed","path_get_closed","path_get_length","path_get_number","path_set_closed","point_direction","position_change","random_get_seed","random_set_seed","registry_exists","room_set_height","room_tile_clear","script_get_name","script_get_text","sound_isplaying","splash_set_main","splash_set_size","splash_show_web","sprite_get_name","texture_preload","tile_get_height","tile_get_xscale","tile_get_yscale","tile_layer_find","tile_layer_hide","tile_layer_show","tile_set_region","timeline_delete","timeline_exists","window_set_size"],["action_cd_resume","action_draw_life","action_draw_line","action_draw_text","action_end_sound","action_if_health","action_if_number","action_if_object","action_inherited","action_load_game","action_next_room","action_save_game","action_set_alarm","action_set_score","action_show_info","collision_circle","d3d_light_enable","d3d_model_create","d3d_model_vertex","d3d_set_lighting","d3d_vertex_color","date_create_date","date_create_time","date_date_string","date_get_weekday","date_minute_span","date_second_span","date_time_string","directory_create","directory_exists","display_set_size","display_test_all","draw_clear_alpha","draw_point_color","draw_sprite_part","draw_surface_ext","ds_grid_add_disk","ds_grid_get_mean","ds_grid_multiply","ds_grid_set_disk","ds_map_find_last","ds_map_find_next","ds_priority_copy","ds_priority_read","ds_priority_size","ds_queue_dequeue","ds_queue_destroy","ds_queue_enqueue","ds_set_precision","ds_stack_destroy","external_define0","external_define1","external_define2","external_define3","external_define4","external_define5","external_define6","external_define7","external_define8","file_bin_rewrite","file_open_append","file_read_string","file_text_readln","ini_write_string","instance_destroy","instance_nearest","joystick_buttons","joystick_has_pov","keyboard_get_map","keyboard_set_map","message_position","mouse_wheel_down","move_contact_all","move_outside_all","mp_grid_add_cell","mplay_data_write","mplay_init_modem","mplay_init_tcpip","mplay_message_id","object_event_add","object_get_depth","object_get_solid","object_set_depth","object_set_solid","parameter_string","part_type_alpha1","part_type_alpha2","part_type_alpha3","part_type_color1","part_type_color2","part_type_color3","part_type_create","part_type_exists","part_type_sprite","path_get_point_x","path_get_point_y","position_destroy","position_meeting","room_set_caption","screen_save_part","show_message_ext","sound_effect_set","splash_set_adapt","splash_set_color","splash_set_scale","splash_show_text","sprite_duplicate","sprite_get_width","string_width_ext","surface_getpixel","tile_get_visible","tile_layer_depth","tile_layer_shift","tile_set_visible","window_get_color","window_get_width","window_mouse_set","window_set_color"],["action_cd_playing","action_cd_present","action_draw_arrow","action_draw_score","action_fullscreen","action_if_aligned","action_move_point","action_move_start","action_path_speed","action_set_cursor","action_set_health","action_set_hspeed","action_set_motion","action_set_vspeed","action_show_video","action_splash_web","action_sprite_set","background_assign","background_delete","background_exists","cd_track_position","collision_ellipse","d3d_draw_cylinder","d3d_model_destroy","d3d_primitive_end","d3d_vertex_normal","date_compare_date","date_compare_time","date_current_date","date_current_time","date_days_in_year","display_get_width","display_mouse_set","distance_to_point","draw_circle_color","draw_sprite_tiled","draw_surface_part","draw_vertex_color","ds_map_find_first","ds_map_find_value","ds_priority_clear","ds_priority_empty","ds_priority_write","file_bin_position","file_text_writeln","file_write_string","font_get_fontname","get_directory_alt","get_open_filename","get_save_filename","instance_furthest","instance_position","message_text_font","move_bounce_solid","mp_grid_clear_all","mp_potential_path","mp_potential_step","mplay_init_serial","mplay_player_find","mplay_player_name","mplay_session_end","object_get_parent","object_get_sprite","object_set_parent","object_set_sprite","part_changer_kind","part_system_clear","part_system_depth","part_type_destroy","part_type_gravity","path_change_point","path_clear_points","path_delete_point","path_insert_point","registry_set_root","room_instance_add","room_tile_add_ext","screen_wait_vsync","sound_effect_echo","sound_get_preload","splash_set_border","splash_set_cursor","splash_show_image","splash_show_video","sprite_add_sprite","sprite_get_height","sprite_get_number","sprite_save_strip","sprite_set_offset","string_height_ext","surface_copy_part","surface_get_width","surface_save_part","texture_get_width","tile_layer_delete","tile_set_position","timeline_get_name","transition_define","transition_exists","window_get_cursor","window_get_height","window_set_cursor"],["action_draw_health","action_draw_sprite","action_if_question","action_if_variable","action_kill_object","action_linear_step","action_move_random","action_set_caption","action_set_gravity","action_splash_text","background_replace","clipboard_get_text","clipboard_has_text","clipboard_set_text","d3d_draw_ellipsoid","d3d_model_cylinder","d3d_set_projection","d3d_vertex_texture","date_days_in_month","display_get_height","distance_to_object","draw_ellipse_color","draw_primitive_end","draw_surface_tiled","ds_grid_add_region","ds_grid_set_region","ds_list_find_index","ds_list_find_value","ds_priority_create","file_bin_read_byte","highscore_set_font","highscore_show_ext","ini_section_delete","ini_section_exists","joystick_direction","keyboard_key_press","keyboard_unset_map","message_background","message_input_font","mouse_check_button","move_contact_solid","move_outside_solid","move_towards_point","mp_grid_clear_cell","mplay_message_name","mplay_message_send","mplay_session_find","mplay_session_join","mplay_session_mode","mplay_session_name","object_event_clear","object_get_visible","object_is_ancestor","object_set_visible","part_changer_clear","part_changer_types","part_emitter_burst","part_emitter_clear","part_system_create","part_system_drawit","part_system_exists","part_system_update","path_get_precision","path_set_precision","registry_read_real","room_goto_previous","set_automatic_draw","show_debug_message","splash_set_caption","sprite_get_texture","sprite_get_xoffset","sprite_get_yoffset","string_replace_all","surface_get_height","surface_set_target","texture_get_height","texture_set_repeat","variable_local_get","variable_local_set","window_get_caption","window_get_visible","window_mouse_get_x","window_mouse_get_y","window_set_caption","window_set_visible"],["action_another_room","action_current_room","action_draw_ellipse","action_if_collision","action_if_next_room","action_move_contact","action_restart_game","action_reverse_xdir","action_reverse_ydir","action_set_friction","action_set_timeline","action_splash_image","action_splash_video","action_sprite_color","action_timeline_set","background_get_name","collision_rectangle","d3d_model_ellipsoid","d3d_primitive_begin","d3d_set_perspective","date_valid_datetime","display_mouse_get_x","display_mouse_get_y","draw_background_ext","draw_set_blend_mode","draw_sprite_general","draw_text_ext_color","draw_triangle_color","draw_vertex_texture","ds_priority_destroy","effect_create_above","effect_create_below","export_include_file","file_bin_write_byte","file_text_open_read","file_text_read_real","filename_change_ext","font_replace_sprite","message_button_font","message_input_color","message_mouse_color","mplay_message_clear","mplay_message_count","mplay_message_value","part_changer_create","part_changer_exists","part_changer_region","part_deflector_kind","part_emitter_create","part_emitter_exists","part_emitter_region","part_emitter_stream","part_system_destroy","part_type_color_hsv","part_type_color_mix","part_type_color_rgb","part_type_direction","registry_exists_ext","registry_write_real","room_instance_clear","room_set_background","room_set_persistent","set_synchronization","sound_effect_chorus","sound_effect_gargle","sound_effect_reverb","sound_global_volume","splash_set_position","splash_set_stop_key","sprite_get_bbox_top","surface_get_texture","tile_get_background","tile_set_background","timeline_moment_add","variable_global_get","variable_global_set","window_get_sizeable","window_set_position","window_set_sizeable"],["action_change_object","action_create_object","action_draw_variable","action_kill_position","action_parttype_life","action_path_position","action_previous_room","action_replace_sound","action_timeline_stop","background_duplicate","background_get_width","color_get_saturation","date_create_datetime","date_datetime_string","date_get_day_of_year","discard_include_file","draw_background_part","draw_primitive_begin","draw_rectangle_color","draw_roundrect_color","draw_sprite_part_ext","draw_surface_general","ds_grid_get_disk_max","ds_grid_get_disk_min","ds_grid_get_disk_sum","ds_grid_value_disk_x","ds_grid_value_disk_y","ds_grid_value_exists","ds_map_find_previous","ds_priority_find_max","ds_priority_find_min","event_perform_object","file_text_open_write","file_text_write_real","highscore_set_border","highscore_set_colors","keyboard_get_numlock","keyboard_key_release","keyboard_set_numlock","mplay_connect_status","mplay_message_player","mplay_session_create","mplay_session_status","part_attractor_clear","part_attractor_force","part_changer_destroy","part_deflector_clear","part_destroyer_clear","part_emitter_destroy","part_particles_clear","part_particles_count","part_system_position","path_get_point_speed","registry_read_string","set_program_priority","sound_effect_flanger","splash_set_interrupt","sprite_get_bbox_left","string_lettersdigits","surface_reset_target","texture_set_blending","texture_set_priority","tile_layer_delete_at","window_get_showicons","window_get_stayontop","window_set_rectangle","window_set_showicons","window_set_stayontop"],["action_draw_rectangle","action_execute_script","action_highscore_show","action_partemit_burst","action_partsyst_clear","action_parttype_color","action_parttype_speed","action_potential_step","action_replace_sprite","action_timeline_pause","action_timeline_start","background_get_height","cd_set_track_position","date_compare_datetime","date_current_datetime","date_get_hour_of_year","display_get_frequency","display_set_frequency","draw_background_tiled","draw_line_width_color","draw_sprite_stretched","draw_sprite_tiled_ext","draw_surface_part_ext","draw_text_transformed","ds_grid_get_disk_mean","ds_grid_multiply_disk","file_text_open_append","file_text_read_string","highscore_add_current","highscore_set_strings","instance_activate_all","joystick_check_button","keyboard_check_direct","mp_grid_add_instances","mp_grid_add_rectangle","mp_linear_path_object","mp_linear_step_object","mp_potential_settings","mplay_message_receive","object_get_persistent","object_set_persistent","part_attractor_create","part_attractor_exists","part_deflector_create","part_deflector_exists","part_deflector_region","part_destroyer_create","part_destroyer_exists","part_destroyer_region","part_particles_create","part_type_orientation","registry_write_string","room_set_view_enabled","set_application_title","splash_set_fullscreen","splash_set_stop_mouse","sprite_collision_mask","sprite_get_bbox_right","sprite_replace_sprite","timeline_moment_clear","variable_local_exists","window_get_fullscreen","window_get_showborder","window_set_fullscreen","window_set_showborder","window_view_mouse_set"],["action_draw_background","action_highscore_clear","action_partemit_create","action_partemit_stream","action_partsyst_create","action_parttype_create","action_splash_settings","background_get_texture","d3d_light_define_point","d3d_model_vertex_color","d3d_set_projection_ext","display_get_colordepth","display_set_colordepth","draw_surface_stretched","draw_surface_tiled_ext","ds_priority_delete_max","ds_priority_delete_min","file_text_write_string","keyboard_check_pressed","part_attractor_destroy","part_deflector_destroy","part_destroyer_destroy","part_system_draw_order","registry_read_real_ext","sound_background_tempo","sound_effect_equalizer","sprite_add_from_screen","sprite_get_bbox_bottom","variable_global_exists","window_set_region_size","window_views_mouse_set"],["action_draw_life_images","action_if_previous_room","action_partemit_destroy","action_partsyst_destroy","action_parttype_gravity","action_sprite_transform","background_create_color","d3d_model_primitive_end","d3d_model_vertex_normal","d3d_transform_stack_pop","d3d_transform_stack_top","d3d_vertex_normal_color","date_get_minute_of_year","date_get_second_of_year","draw_background_general","draw_set_blend_mode_ext","ds_grid_add_grid_region","ds_grid_multiply_region","ds_grid_set_grid_region","instance_deactivate_all","keyboard_check_released","mp_grid_clear_rectangle","part_attractor_position","part_deflector_friction","registry_write_real_ext","sound_3d_set_sound_cone","sound_effect_compressor","splash_set_close_button","sprite_add_from_surface","window_get_region_scale","window_get_region_width","window_set_region_scale","window_view_mouse_get_x","window_view_mouse_get_y"],["action_draw_gradient_hor","d3d_model_vertex_texture","d3d_set_projection_ortho","d3d_transform_stack_push","d3d_vertex_texture_color","draw_background_part_ext","ds_priority_delete_value","environment_get_variable","highscore_set_background","instance_activate_object","instance_activate_region","mp_potential_path_object","mp_potential_step_object","part_changer_destroy_all","part_emitter_destroy_all","registry_read_string_ext","variable_local_array_get","variable_local_array_set","window_get_region_height","window_views_mouse_get_x","window_views_mouse_get_y"],["action_draw_gradient_vert","action_parttype_secondary","action_replace_background","action_set_timeline_speed","background_add_background","d3d_model_primitive_begin","d3d_transform_add_scaling","d3d_transform_set_scaling","d3d_transform_stack_clear","d3d_transform_stack_empty","d3d_vertex_normal_texture","draw_background_stretched","draw_background_tiled_ext","draw_set_circle_precision","draw_sprite_stretched_ext","draw_text_ext_transformed","draw_vertex_texture_color","ds_grid_value_disk_exists","ds_priority_find_priority","registry_write_string_ext","room_set_background_color","sprite_create_from_screen","texture_set_interpolation","variable_global_array_get","variable_global_array_set","variable_local_array2_get","variable_local_array2_set"],["background_create_gradient","d3d_light_define_direction","d3d_transform_set_identity","draw_surface_stretched_ext","instance_deactivate_object","instance_deactivate_region","mouse_check_button_pressed","part_attractor_destroy_all","part_deflector_destroy_all","part_destroyer_destroy_all","part_system_automatic_draw","sound_set_search_directory","sprite_create_from_surface","variable_global_array2_get","variable_global_array2_set"],["action_create_object_motion","action_create_object_random","d3d_primitive_begin_texture","d3d_transform_stack_discard","draw_text_transformed_color","ds_priority_change_priority","mouse_check_button_released","part_particles_create_color","sound_3d_set_sound_distance","sound_3d_set_sound_position","sound_3d_set_sound_velocity"],["action_draw_ellipse_gradient","action_draw_text_transformed","action_set_timeline_position","d3d_transform_add_rotation_x","d3d_transform_add_rotation_y","d3d_transform_add_rotation_z","d3d_transform_set_rotation_x","d3d_transform_set_rotation_y","d3d_transform_set_rotation_z","draw_primitive_begin_texture","ds_grid_multiply_grid_region","export_include_file_location","part_system_automatic_update","sprite_set_alpha_from_sprite"],["background_create_from_screen","background_replace_background","d3d_model_vertex_normal_color","d3d_transform_add_translation","d3d_transform_set_translation","draw_background_stretched_ext","mplay_message_send_guaranteed"],["background_create_from_surface","d3d_model_vertex_texture_color","d3d_set_projection_perspective"],["d3d_model_vertex_normal_texture","d3d_transform_add_rotation_axis","d3d_transform_set_rotation_axis","d3d_vertex_normal_texture_color","draw_text_ext_transformed_color"],[],[],[],[],["background_set_alpha_from_background"],["d3d_model_vertex_normal_texture_color"]];
// Variables organized by length
var variables = [[],["x","y"],["id"],["fps"],["room"],["lives","score","alarm","depth","solid","speed"],["health","hspeed","vspeed","xstart","ystart"],["game_id","mouse_x","mouse_y","gravity","visible"],["argument","bbox_top","friction"],["argument0","argument1","argument2","argument3","argument4","argument5","argument6","argument7","argument8","argument9","room_last","bbox_left","direction","xprevious","yprevious"],["argument10","argument11","argument12","argument13","argument14","argument15","debug_mode","error_last","event_type","room_first","room_speed","room_width","show_lives","show_score","view_angle","view_hport","view_hview","view_wport","view_wview","view_xport","view_xview","view_yport","view_yview","bbox_right","mask_index","path_index","path_scale","path_speed","persistent"],["current_day","instance_id","room_height","secure_mode","show_health","view_hspeed","view_object","view_vspeed","bbox_bottom","image_alpha","image_angle","image_blend","image_index","image_speed"],["background_x","background_y","current_hour","current_time","current_year","event_action","event_number","event_object","keyboard_key","mouse_button","room_caption","view_current","view_enabled","view_hborder","view_vborder","view_visible","image_number","image_single","image_xscale","image_yscale","object_index","sprite_index","sprite_width"],["caption_lives","caption_score","current_month","cursor_sprite","gamemaker_pro","path_position","sprite_height","timeline_loop"],["caption_health","current_minute","current_second","error_occurred","instance_count","temp_directory","path_endaction","sprite_xoffset","sprite_yoffset","timeline_index","timeline_speed"],["current_weekday","keyboard_string","room_persistent","transition_kind"],["background_alpha","background_blend","background_color","background_index","background_width","keyboard_lastkey","mouse_lastbutton","transition_color","transition_steps","path_orientation","timeline_running"],["argument_relative","background_height","background_hspeed","background_htiled","background_vspeed","background_vtiled","background_xscale","background_yscale","gamemaker_version","keyboard_lastchar","program_directory","working_directory","gravity_direction","timeline_position"],["background_visible"],[],["background_showcolor","gamemaker_registered"],["background_foreground","path_positionprevious"]];
// Constants organized by length
var constants = [[],[],["pi"],[],["true"],["c_red","cr_no","false","vk_f1","vk_f2","vk_f3","vk_f4","vk_f5","vk_f6","vk_f7","vk_f8","vk_f9","vk_up"],["bm_add","bm_max","bm_one","c_aqua","c_blue","c_gray","c_lime","c_navy","c_teal","fa_top","mb_any","vk_add","vk_alt","vk_end","vk_f10","vk_f11","vk_f12","vk_tab"],["bm_zero","c_black","c_green","c_olive","c_white","cr_beam","cr_drag","cr_help","cr_none","ef_rain","ef_ring","ef_snow","ef_star","ev_draw","ev_step","fa_left","mb_left","mb_none","se_echo","se_none","ty_real","vk_down","vk_home","vk_lalt","vk_left","vk_ralt"],["c_dkgray","c_ltgray","c_maroon","c_orange","c_purple","c_silver","c_yellow","cr_arrow","cr_cross","ef_cloud","ef_flare","ef_smoke","ef_spark","ev_alarm","ev_mouse","ev_other","ev_user0","ev_user1","ev_user2","ev_user3","ev_user4","ev_user5","ev_user6","ev_user7","ev_user8","ev_user9","fa_right","mb_right","vk_enter","vk_nokey","vk_pause","vk_right","vk_shift","vk_space"],["bm_normal","c_fuchsia","cr_arrrow","cr_hsplit","cr_nodrop","cr_vsplit","dll_cdecl","ev_create","ev_user10","ev_user11","ev_user12","ev_user13","ev_user14","ev_user15","fa_bottom","fa_center","fa_hidden","fa_middle","mb_middle","se_chorus","se_gargle","se_reverb","ty_string","vk_anykey","vk_delete","vk_divide","vk_escape","vk_insert","vk_lshift","vk_pageup","vk_return","vk_rshift"],["cr_default","cr_size_ns","cr_size_we","cr_sqlwait","cr_uparrow","ef_ellipse","ef_smokeup","ev_destroy","ev_outside","ev_trigger","fa_archive","fa_sysfile","se_flanger","vk_control","vk_decimal","vk_numpad0","vk_numpad1","vk_numpad2","vk_numpad3","vk_numpad4","vk_numpad5","vk_numpad6","vk_numpad7","vk_numpad8","vk_numpad9"],["bm_subtract","cr_appstart","cr_size_all","dll_stdcall","ef_firework","ev_boundary","ev_game_end","ev_keyboard","ev_keypress","ev_room_end","ev_step_end","fa_readonly","fa_volumeid","pr_linelist","vk_lcontrol","vk_multiply","vk_pagedown","vk_rcontrol","vk_subtract"],["bm_src_alpha","bm_src_color","cr_handpoint","cr_hourglass","cr_multidrag","cr_size_nesw","cr_size_nwse","ef_explosion","ev_collision","ev_no_button","fa_directory","pr_linestrip","pr_pointlist","se_equalizer","vk_backspace"],["bm_dest_alpha","bm_dest_color","ev_game_start","ev_keyrelease","ev_left_press","ev_room_start","ev_step_begin","ps_change_all","ps_shape_line","pt_shape_disk","pt_shape_line","pt_shape_ring","pt_shape_snow","pt_shape_star","se_compressor"],["ev_end_of_path","ev_left_button","ev_mouse_enter","ev_mouse_leave","ev_right_press","ev_step_normal","pr_trianglefan","pt_shape_cloud","pt_shape_flare","pt_shape_pixel","pt_shape_smoke","pt_shape_spark","vk_printscreen"],["ev_close_button","ev_global_press","ev_joystick1_up","ev_joystick2_up","ev_left_release","ev_middle_press","ev_right_button","pr_trianglelist","ps_change_shape","ps_distr_linear","ps_force_linear","pt_shape_circle","pt_shape_sphere","pt_shape_square"],["bm_inv_src_alpha","bm_inv_src_color","bm_src_alpha_sat","ev_animation_end","ev_middle_button","ev_no_more_lives","ev_right_release","pr_trianglestrip","ps_change_motion","ps_shape_diamond","ps_shape_ellipse"],["bm_inv_dest_alpha","bm_inv_dest_color","ev_global_release","ev_joystick1_down","ev_joystick1_left","ev_joystick2_down","ev_joystick2_left","ev_middle_release","ev_mouse_wheel_up","ev_no_more_health","ps_distr_gaussian","ps_force_constant"],["ev_joystick1_right","ev_joystick2_right","ps_force_quadratic","ps_shape_rectangle","pt_shape_explosion"],["ev_mouse_wheel_down","ps_deflect_vertical"],["ev_global_left_press","ev_joystick1_button1","ev_joystick1_button2","ev_joystick1_button3","ev_joystick1_button4","ev_joystick1_button5","ev_joystick1_button6","ev_joystick1_button7","ev_joystick1_button8","ev_joystick2_button1","ev_joystick2_button2","ev_joystick2_button3","ev_joystick2_button4","ev_joystick2_button5","ev_joystick2_button6","ev_joystick2_button7","ev_joystick2_button8","ps_distr_invgaussian"],["ev_global_left_button","ev_global_right_press","ps_deflect_horizontal"],["ev_global_left_release","ev_global_middle_press","ev_global_right_button"],["ev_global_middle_button","ev_global_right_release"],["ev_global_middle_release"]];
// Logic organized by length
var logic = [[],["{","}"],["if","or","do"],["and","for","not","end","xor","mod","div","var","all"],["else","case","with","self","exit","then"],["while","local","until","begin","break","other","noone"],["global","repeat","return","switch"],["default"],["continue"]];
var tokens = ["$"," ",".","(",")","\n",";",",",'>','<',"=","+","-","*","/","[","]","{","}",":","!","^","&","|","~",'"',"'",chr(160),chr(2)];
var codeboxes = document.getElementsByClassName('codemain');
var is_rich_text = false;
var rich_text = document.getElementById('ed-0_wysiwyg_used');
if (rich_text !== null) {
if (rich_text.getAttribute('value')==1) {
is_rich_text = true;
}
}
if (is_rich_text === false) {
for (i=0; i < codeboxes.length; i++) {
// Get the current code section
var this_code_box = codeboxes[i];
var code_box_data = this_code_box.innerHTML;
code_box_data = code_box_data.replace(/<br>/gi,"\n");
code_box_data = code_box_data.replace(/<br \/>/gi,"\n");
code_box_data = code_box_data.replace(/<br\/>/gi,"\n");
code_box_data = code_box_data.replace(/ /gi,chr(160));
code_box_data = code_box_data.replace(/&/gi,"&");
code_box_data = code_box_data.replace(/ /g,chr(160));
code_box_data = code_box_data.replace(/>/gi,'>');
code_box_data = code_box_data.replace(/</gi,'<');
code_box_data = code_box_data.replace(/<!--.*?-->/gi,'');
// Stop the annoying codebox scrollbars and set some other css
this_code_box.setAttribute('style','overflow:auto;color:black;background-color:#FFF;line-height:17px;font-size:13px;font-family:\'Courier New\'');
// The seperator character is used to make sure tokens are also outputted in the explosion
var seperator = chr(6);
var reg;
for (ii=0, len=tokens.length; ii<len; ii++) {
reg = new RegExp("\\"+tokens[ii],'g');
code_box_data = code_box_data.replace(reg,seperator+tokens[ii]+seperator);
}
// Get rid of superfluous seperators
code_box_data = code_box_data.replace(new RegExp(seperator+seperator,'g'),seperator);
// Explode the code into an array
var code = code_box_data.split(seperator);
var comSingle = false;
var comMulti = false;
var stringD = false;
var stringS = false;
var result='';
for (ii=0, len=code.length; ii<len; ii++) {
if (code[ii] === '>') {
code[ii] = '>';
} else if (code[ii] === '<') {
code[ii] = '<';
}
// Check if we're currently in a special code section
if (comSingle === false && comMulti === false && stringD === false && stringS === false) {
// Check if a comment is being started
if (code[ii] === '/') {
// Grab the next piece
var next = code[ii+1];
// Single line
if (next === '/') {
comSingle = true;
result += '<span style="color:#'+options.colors.comments+';font-style:italic;">'+'//';
ii++;
// Multiline
} else if (next === '*') {
comMulti = true;
result += '<span style="color:#'+options.colors.comments+';font-style:italic;">'+'/*';
ii++;
} else {
// None
result += get_color(code[ii]);
}
// Check for " string
} else if (code[ii] === '"') {
stringD = true;
result += '<span style="color:#'+options.colors.string+';">"';
// Check for ' string
} else if (code[ii] === "'") {
stringS = true;
result += '<span style="color:#'+options.colors.string+';">\'';
// Finally, check everything else
} else {
result += get_color(code[ii]);
}
} else {
// Check to end a special code section
// Check to end a single line comment
if (comSingle === true && code[ii] === "\n") {
comSingle = false;
result += "<br /></span>";
// Check to end a multiline comment
} else if (comMulti === true && code[ii] === '*' && code[ii+1] === '/') {
comMulti = false;
result += '*/</span>';
ii++;
// Check to end a " string
} else if (stringD === true && code[ii] === '"') {
stringD = false;
result += '"</span>';
// Check to end a ' string
} else if (stringS === true && code[ii] === "'") {
stringS = false;
result += "'</span>";
// The special code section has not ended, so add in the stuff without special coloring
} else {
if (code[ii] === "\n") {
result += '<br />';
} else {
result += code[ii];
}
}
}
}
this_code_box.innerHTML = result;
}
}
}
// Begin Youtube video
if (options.youtube && get.showtopic !== undefined) {
// Get only the posts
var posts = document.getElementsByClassName('postcolor');
// Loop through the posts
for (i=0; i <posts.length; i++) {
// In each post, get all the links
var links = posts[i].getElementsByTagName('a');
for (ii=0; ii < links.length; ii++) {
// Set the current link we're looking at right now
var thisLink = links[ii];
// Grab the link location
var thisHref = thisLink.href;
// Get the variables stored in the youtube url
var getYt = getUrlVars(thisHref);
if (getYt.v !== undefined) {
thisLink.innerHTML = '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/'+getYt.v+'&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'+getYt.v+'&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>';
}
}
}
}
// Begin creation form generator
function getMonth(data) {
var month = {};
month.January = 0;
month.February = 1;
month.March = 2;
month.April = 3;
month.May = 4;
month.June = 5;
month.July = 6;
month.August = 7;
month.September = 8;
month.October = 9;
month.November = 10;
month.December = 11;
return month[data];
}
function sortMultiDimensional(a,b) {
// this sorts the array using the first element
return ((a[0] > b[0]) ? -1 : ((a[0] < b[0]) ? 1 : 0));
}
if (options.old_forums) {
// If we're at the main index, inject some html to show a link to the "forum"
if (get.showforum === undefined && get.showtopic === undefined && (get.act === 'idx' || get.act === undefined)) {
var new_tr = document.createElement('tr');
var tbody = document.getElementById('fo_25').getElementsByTagName('table')[0].getElementsByTagName('tbody')[0];
var this_tr = tbody.insertBefore(new_tr,tbody.getElementsByTagName('tr')[1]);
this_tr.innerHTML = '<td class="row1"><img border="0" alt="New Posts" src="style_images/chronicpro/bf_new.gif"/></td><td colspan="4" class="row2"><b><a href="http://gmc.yoyogames.com/index.php?showforum=999">All Creations</a></b><br /><span class="forumdesc">View all topics in a single forum</span></td>';
} else if (get.showforum === '999') {
// Change the document title
document.title = 'All Creations';
// Get the navstrip element and change it
var navstrip = document.getElementById('navstrip');
navstrip.innerHTML = navstrip.innerHTML + ' > <a href="http://gmc.yoyogames.com/index.php?showforum=25">Games</a> > <a href="http://gmc.yoyogames.com/index.php?showforum=999">All Creations</a>';
// Inject in the table used in the forums
wrapper.innerHTML = '<div class="maintitle"><table width="100%" cellspacing="0" cellpadding="0"><tbody><tr><td width="99%"><div>All Creations</div></td><td width="1%" nowrap="nowrap" align="right"><div id="forummenu-options" class="popmenubutton" style="cursor: pointer;"><a href="#forumoptions">Forum Options</a> <img border="0" title="Open Menu" alt="V" src="style_images/chronicpro/menu_action_down.gif"/></div><div style="display: none; z-index: 100; position: absolute; left: 0px; top: 0px;" id="forummenu-options_menu" class="popupmenu"><div class="popupmenu-item"><img border="0" style="vertical-align: middle;" alt="V" src="style_images/chronicpro/menu_item.gif"/> <a href="http://gmc.yoyogames.com/index.php?act=Login&CODE=04&f=44&fromforum=44">Mark forum as read and return</a></div><div class="popupmenu-item"><img border="0" style="vertical-align: middle;" alt="V" src="style_images/chronicpro/menu_item.gif"/> <a href="http://gmc.yoyogames.com/index.php?act=Login&CODE=04&f=44&fromforum=0">Mark forum as read and return to board index</a></div><div class="popupmenu-item-last"><img border="0" style="vertical-align: middle;" alt="V" src="style_images/chronicpro/menu_item.gif"/> <a href="http://gmc.yoyogames.com/index.php?act=usercp&CODE=start_subs&method=forum&fid=44">Subscribe to this forum</a></div></div></td></tr></tbody></table></div><table cellspacing="0" class="ipbtable"><tbody><tr> <th align="center"> </th><th align="center"> </th><th width="50%" nowrap="nowrap">Topic Title</th><th width="7%" nowrap="nowrap" style="text-align: center;">Replies</th><th width="14%" nowrap="nowrap" style="text-align: center;">Topic Starter</th><th width="7%" nowrap="nowrap" style="text-align: center;">Views</th><th width="22%" nowrap="nowrap">Last Action</th></tr></tbody></table>';
// Get the table to inject our rows into
var games_table = wrapper.getElementsByTagName('table')[1].getElementsByTagName('tbody')[0];
var topics = [];
// Loop through all the game maker creation forums
for (i=44; i<=51; i++) {
// Grab the correct forum
var data = ajax('/index.php?showforum='+i);
// Get rid of the line breaks to work with future regular expressions
data = data.replace(/\n/g,"").replace(/\r/g,"");
// Get all the topics
data = data.match(/<!-- Begin Topic Entry .*?<!-- End Topic Entry [0-9]* -->/g);
// Loop through all the topics
for (ii=0; ii<data.length; ii++) {
var topic_row = data[ii];
topic_row = topic_row.replace(/<tr>/gi,'');
topic_row = topic_row.replace(/<tr \/>/gi,'');
// Get the date info from the topic
var dateInfo = topic_row.match(/<span class="lastaction">.*?<br \/>/)[0];
var date = new Date();
if (dateInfo.indexOf('Today') !== -1) {
// Set the current day, year, and month to the user's local machine
date.setDate(date.getDate());
} else if (dateInfo.indexOf('Yesterday') !== -1) {
// Set yesterday day, year, and month to the user's local machine
date.setDate(date.getDate()-1);
} else {
// Extract the day, year, and month from the topic info
var year = dateInfo.match(/[0-9]{4}/)[0];
year = parseInt(year,10);
var day = dateInfo.match(/[0-9]{1,2}[a-z]{2}/)[0];
day = day.match(/[0-9]{1,2}/)[0];
day = parseInt(day,10);
var month = dateInfo.match(/[A-Z]{1}[a-z]+/)[0];
month = getMonth(month);
date.setFullYear(year,month,day);
}
// Time stores the hours and minutes
var time = dateInfo.match(/[0-9]{2}:[0-9]{2}/)[0];
time = time.match(/[0-9]{2}/g);
var hour = parseInt(time[0],10);
var minute = parseInt(time[1],10);
// xm stores PM or AM
var xm = dateInfo.match(/[A|P]{1}M/)[0];
// If it's PM, add 12 hours (because javascript uses the 24 hour system)
if (xm === 'PM') {
hour += 12;
}
// Set the hours and minutes to the date object
date.setHours(hour,minute,0,0);
// Build the unix timestamp
var unix_time = Math.floor(date.getTime()/1000);
// Add the timestamp and topic data to the topic array
topics.push([unix_time,topic_row]);
}
}
// Sort the topic array based on the timestamp
topics.sort(sortMultiDimensional);
var this_class = 1;
var this_display = 'table-row';
// Loop through the topic array and add it to the page
for (i=0; i<topics.length; i++) {
if (((i % 30) === 0) && (i !== 0)) {
this_class += 1;
this_display = 'none';
}
var newElem = document.createElement('tr');
var topicElem = games_table.appendChild(newElem);
topicElem.innerHTML = topics[i][1];
topicElem.setAttribute('class',this_class);
topicElem.style.display = this_display;
}
}
if (get.showforum === '999') {
// The key is located at the bottom of the page and gives definitions of the icons
key = wrapper.parentNode.insertBefore(document.createElement('div'), wrapper.nextSibling);
key.innerHTML = '<div class="activeusers"><div class="row2"><table cellspacing="0" class="ipbtable"><tbody><tr><td width="5%" nowrap="nowrap"><img border="0" alt="New Posts" src="style_images/chronicpro/f_norm.gif"> <span class="desc">New Replies</span><br><img border="0" alt="No New Posts" src="style_images/chronicpro/f_norm_no.gif"> <span class="desc">No New Replies</span><br><img border="0" alt="Hot topic" src="style_images/chronicpro/f_hot.gif"> <span class="desc">Hot Topic (New)</span><br><img border="0" alt="No new" src="style_images/chronicpro/f_hot_no.gif"> <span class="desc">Hot Topic (No New)</span> </td><td width="5%" nowrap="nowrap"><img border="0" alt="Poll" src="style_images/chronicpro/f_poll.gif"> <span class="desc">Poll (New)</span><br><img border="0" alt="No new votes" src="style_images/chronicpro/f_poll_no.gif"> <span class="desc">Poll (No New)</span><br><img border="0" alt="Closed" src="style_images/chronicpro/f_closed.gif"> <span class="desc">Locked Topic</span><br><img border="0" alt="Moved" src="style_images/chronicpro/f_moved.gif"> <span class="desc">Moved Topic</span></td><td width="90%" align="right"><form name="jumpmenu" method="get" action="http://gmc.yoyogames.com/index.php?act=SF" onsubmit="if(document.jumpmenu.f.value == -1){return false;}"><input type="hidden" value="SF" name="act"><input type="hidden" value="" name="s"><select class="dropdown" onchange="if(this.options[this.selectedIndex].value != -1){ document.jumpmenu.submit() }" name="f"><optgroup label="Site Jump"><option value="sj_home">Forum Home</option><option value="sj_search">Search</option><option value="sj_help">Help</option></optgroup><optgroup label="Forum Jump"><option value="23">General</option><option value="1"> |-- Announcements</option><option value="19"> |-- Forum Rules and Regulations</option><option value="3"> |-- The Community</option><option value="40"> |---- Spam Box</option><option value="20"> |-- Web Site Announcements</option><option value="39"> |-- Team Requests</option><option value="24">Working with Game Maker</option><option value="28"> |-- Tutorials and Examples</option><option value="43"> |---- Staff Choice</option><option value="2"> |-- Novice and Intermediate Users</option><option value="4"> |-- Advanced Users Only</option><option value="29"> |-- 3D Game Techniques</option><option value="41"> |---- 3D Editable Examples</option><option value="6"> |-- Extending Game Maker</option><option value="33"> |---- Extensions [GEX]</option><option value="34"> |---- Scripts [GML]</option><option value="35"> |---- Libraries [LIB]</option><option value="36"> |---- DLLs [DLL]</option><option value="5"> |-- GML and Mathematics Discussion</option><option value="25">Games</option><option value="12"> |-- Game Maker Creations</option><option selected="selected" value="44"> |---- Arcade</option><option value="45"> |---- Adventure & RPG</option><option value="46"> |---- Platform</option><option value="47"> |---- Puzzle</option><option value="48"> |---- Shooter</option><option value="49"> |---- Strategy</option><option value="50"> |---- Simulation & Sports</option><option value="51"> |---- Tools & Applications</option><option value="38"> |---- Open Source</option><option value="52"> |---- Cage Match</option><option value="11"> |-- Work in Progress</option><option value="10"> |-- Game Ideas and Design</option><option value="13"> |-- Distributing Games</option><option value="42"> |-- Games in General</option><option value="26">Resources</option><option value="14"> |-- Graphics</option><option value="15"> |-- Sound and Music</option><option value="54">Game Maker Community Game</option><option value="55"> |-- GMCG Project Discussion</option><option value="66"> |---- Weekly Vote</option><option value="60"> |-- GMCG Design and Ideas</option><option value="64"> |---- Design Documents</option><option value="67"> |---- Discussions</option><option value="59"> |-- GMCG Storyline</option><option value="57"> |-- GMCG Graphics</option><option value="63"> |---- Concept Art</option><option value="65"> |---- Sprites</option><option value="68"> |---- Discussions</option><option value="56"> |-- GMCG Sound and Music</option><option value="69"> |---- Discussions</option><option value="58"> |-- GMCG Programming</option><option value="62"> |---- Programming Task - Movement Engine</option><option value="70"> |---- Discussions</option><option value="71"> |---- Inventory Engine</option></optgroup></select> <input type="submit" class="button" value="Go"></form></td></tr></tbody></table></div></div>';
for (i=16; i>=1; i--) {
// i values greater than 8 indicate buttons at the top
if (i>8) {
// Change ii to make sure the numbers on the buttons are correct
ii = 17-i;
// Insert the button before the main topic wrapper
p_button = wrapper.parentNode.insertBefore(document.createElement('input'), wrapper);
} else {
ii = i;
p_button = wrapper.parentNode.insertBefore(document.createElement('input'), wrapper.nextSibling);
}
// Create the button and set the attributes/styles
p_button.setAttribute('type','button');
p_button.setAttribute('value',ii);
p_button.setAttribute('id','p'+ii);
p_button.style.height = '19px';
p_button.style.width = '17px';
p_button.style.fontSize = '11px';
p_button.style.borderWidth = '1px';
p_button.style.borderStyle = 'solid';
p_button.style.marginRight = '2px';
p_button.style.marginLeft = '2px';
p_button.style.borderColor = '#999999';
// Set the 1 button to a default selected style
if (ii === 1) {
p_button.style.backgroundColor = '#B9C3D3';
p_button.style.color = 'white';
} else {
p_button.style.backgroundColor = '#F7F7F7';
p_button.style.color = 'black';
}
// Bind the listener
p_button.addEventListener('click', function(event) {
// Get all the topics in the page
topics = document.getElementById('ipbwrapper').getElementsByTagName('table')[1].getElementsByTagName('tr');
// Show elements of this class only
show = this.getAttribute('value');
// Loop through all the topics
for (i=0; i<topics.length; i++) {
// Grab the class value
thisclass = topics[i].getAttribute('class');
// If the class is correct, show it. If not, hide it
if (thisclass == show) {
topics[i].style.display = 'table-row';
} else if (thisclass !== null) {
topics[i].style.display = 'none';
}
}
input = document.getElementsByTagName('input');
// Loop through all the input tags
for (i=0; i<input.length; i++) {
if (input[i].value.match(/[0-9]*/) !== '') {
if (input[i].value == show) {
input[i].style.backgroundColor = '#B9C3D3';
input[i].style.color = 'white';
} else {
input[i].style.backgroundColor = '#F7F7F7';
input[i].style.color = 'black';
}
}
}
// Scroll to the top of the page
window.scroll(0,0);
}, false);
}
}
}
/* This script was automatically generated from a literate source.
Do not edit this file; look at the literate source instead!
Greasemonkey user script to
Display LaTeX in Web pages by transforming to MathML
Home page: http://gold-saucer.afraid.org/mathml/greasemonkey/
--------------------------------------------------------------------
Copyright (C) 2006 Steve Cheng <stevecheng@users.sourceforge.net>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALNGS IN THE SOFTWARE.
--------------------------------------------------------------------*/
if (options.latex && get.showtopic !== undefined) {
const mmlns = 'http://www.w3.org/1998/Math/MathML';
function result_element(tag, num_attrs)
{
var node = document.createElementNS(mmlns, tag);
var k = 2;
while(--num_attrs >= 0) {
if(arguments[k+1] != null) {
node.setAttribute(arguments[k], arguments[k+1]);
}
k += 2;
}
for(; k < arguments.length; k++) {
if(arguments[k] != null) {
if(typeof(arguments[k]) == 'string')
node.appendChild(document.createTextNode(arguments[k]));
else
node.appendChild(arguments[k]);
}
}
return node;
}
function result_element_append(parent, child)
{
if(parent != null && child != null) {
if(typeof(child) == 'string')
parent.appendChild(document.createTextNode(child));
else
parent.appendChild(child);
}
}
function result_element_prepend(parent, child, next)
{
if(next == null)
result_element_append(parent, child);
else if (parent != null && child != null)
parent.insertBefore(child, next);
}
function result_set_attr(elem, attr, value)
{
if(elem != null && attr != null) {
if(value != null)
elem.setAttribute(attr, value);
else
elem.removeAttribute(attr);
}
}
function result_append_attr(elem, attr, value)
{
if(elem != null && attr != null) {
var old_value = elem.getAttribute(elem, attr);
if(old_value == null)
elem.setAttribute(attr, value);
else
elem.setAttribute(attr, old_value + value);
}
}
if(!this.GM_getValue) {
this.GM_getValue = function(key, value) { return value; }
this.GM_log = function() {}
}
if(this.GM_registerMenuCommand) {
GM_registerMenuCommand("Enable native display of math images",
function() {
GM_setValue("patch-images", true);
do_patch_images = true;
patch_element(document.documentElement);
});
GM_registerMenuCommand("Disable native display of math images",
function() {
GM_setValue("patch-images", false);
});
}
const char_map = {
'script': [
'\uEF35', '\u212C', '\uEF36', '\uEF37', '\u2130', '\u2131',
'\uEF38', '\u210B', '\u2110', '\uEF39', '\uEF3A', '\u2112',
'\u2133', '\uEF3B', '\uEF3C', '\uEF3D', '\uEF3E', '\u211B',
'\uEF3F', '\uEF40', '\uEF41', '\uEF42', '\uEF43', '\uEF44',
'\uEF45', '\uEF46' ],
'fraktur': [
'\uEF5D', '\uEF5E', '\u212D', '\uEF5F', '\uEF60', '\uEF61',
'\uEF62', '\u210C', '\u2111', '\uEF63', '\uEF64', '\uEF65',
'\uEF66', '\uEF67', '\uEF68', '\uEF69', '\uEF6A', '\u211C',
'\uEF6B', '\uEF6C', '\uEF6D', '\uEF6E', '\uEF6F', '\uEF70',
'\uEF71', '\u2128' ],
'double-struck': [
'\uEF8C', '\uEF8D', '\u2102', '\uEF8E', '\uEF8F', '\uEF90',
'\uEF91', '\u210D', '\uEF92', '\uEF93', '\uEF94', '\uEF95',
'\uEF96', '\u2115', '\uEF97', '\u2119', '\u211A', '\u211D',
'\uEF98', '\uEF99', '\uEF9A', '\uEF9B', '\uEF9C', '\uEF9D',
'\uEF9E', '\u2124' ],
};
const uppercase_re = /[A-Z]/;
function fix_mathvariant(node, style)
{
if(node.nodeType == node.TEXT_NODE) {
if(style != null && style != '' && style in char_map) {
node.data = node.data.replace(uppercase_re,
function(s) { return char_map[style][s.charCodeAt(0)-65] });
}
} else if(node.nodeType == node.ELEMENT_NODE) {
var new_style = node.getAttribute('mathvariant');
if(new_style != null && new_style != '')
style = new_style;
for(var i=0; i < node.childNodes.length; i++)
fix_mathvariant(node.childNodes.item(i), style);
}
}
var g_punct_and_space
= { "\\quad" : "\u2003" ,
"\\qquad" : "\u2003\u2003" ,
"\\thickspace" : "\u2002" ,
"\\;" : "\u2002" ,
"\\medspace" : "\u2005" ,
"\\:" : "\u2005" ,
"\\thinspace" : "\u2004" ,
"\\," : "\u2004" ,
"\\!" : "\u200b" ,
"." : "." ,
";" : ";" ,
"?" : "?" ,
"\\qedsymbol" : "\u25a0" ,
}
;
var g_left_delimiters
= { "(" : "(" ,
"[" : "[" ,
"\\{" : "{" ,
"\\lgroup" : "(" ,
"\\lbrace" : "{" ,
"\\lvert" : "|" ,
"\\lVert" : "\u2016" ,
"\\lceil" : "\u2308" ,
"\\lfloor" : "\u230a" ,
"\\lmoustache" : "\u23b0" ,
"\\langle" : "\u2329" ,
}
;
var g_right_delimiters
= { ")" : ")" ,
"]" : "]" ,
"\\}" : "}" ,
"\\rbrace" : "}" ,
"\\rgroup" : ")" ,
"\\rvert" : "|" ,
"\\rVert" : "\u2016" ,
"\\rceil" : "\u2309" ,
"\\rfloor" : "\u230b" ,
"\\rmoustache" : "\u23b1" ,
"\\rangle" : "\u232a" ,
}
;
var g_operator_symbols
= { "\\amalg" : "\u2a3f" ,
"\\ast" : "*" ,
"\\ast" : "\u2217" ,
"\\barwedge" : "\u22bc" ,
"\\barwedge" : "\u2305" ,
"\\bigcirc" : "\u25cb" ,
"\\bigtriangledown" : "\u25bd" ,
"\\bigtriangleup" : "\u25b3" ,
"\\boxdot" : "\u22a1" ,
"\\boxminus" : "\u229f" ,
"\\boxplus" : "\u229e" ,
"\\boxtimes" : "\u22a0" ,
"\\bullet" : "\u2022" ,
"\\bullet" : "\u2219" ,
"\\cap" : "\u2229" ,
"\\Cap" : "\u22d2" ,
"\\cdot" : "\u22c5" ,
"\\centerdot" : "\u00b7" ,
"\\circ" : "\u2218" ,
"\\circledast" : "\u229b" ,
"\\circledcirc" : "\u229a" ,
"\\circleddash" : "\u229d" ,
"\\cup" : "\u222a" ,
"\\Cup" : "\u22d3" ,
"\\curlyvee" : "\u22ce" ,
"\\curlywedge" : "\u22cf" ,
"\\dagger" : "\u2020" ,
"\\ddagger" : "\u2021" ,
"\\diamond" : "\u22c4" ,
"\\div" : "\u00f7" ,
"\\divideontimes" : "\u22c7" ,
"\\dotplus" : "\u2214" ,
"\\doublebarwedge" : "\u2306" ,
"\\doublecap" : "\u22d2" ,
"\\doublecup" : "\u22d3" ,
"\\gtrdot" : "\u22d7" ,
"\\intercal" : "\u22ba" ,
"\\land" : "\u2227" ,
"\\leftthreetimes" : "\u22cb" ,
"\\lessdot" : "\u22d6" ,
"\\lor" : "\u2228" ,
"\\ltimes" : "\u22c9" ,
"\\mp" : "\u2213" ,
"\\odot" : "\u2299" ,
"\\ominus" : "\u2296" ,
"\\oplus" : "\u2295" ,
"\\oslash" : "\u2298" ,
"\\otimes" : "\u2297" ,
"\\pm" : "\u00b1" ,
"\\rightthreetimes" : "\u22cc" ,
"\\rtimes" : "\u22ca" ,
"\\setminus" : "\u2216" ,
"\\smallsetminus" : "\u2216" ,
"\\sqcap" : "\u2293" ,
"\\sqcup" : "\u2294" ,
"\\star" : "\u22c6" ,
"\\times" : "\u00d7" ,
"\\triangleleft" : "\u25c1" ,
"\\triangleright" : "\u25b7" ,
"\\uplus" : "\u228e" ,
"\\vee" : "\u2228" ,
"\\veebar" : "\u22bb" ,
"\\veebar" : "\u2a61" ,
"\\wedge" : "\u2227" ,
"\\wr" : "\u2240" ,
"+" : "+" ,
"-" : "\u2212" ,
"*" : "*" ,
"," : "," ,
"/" : "\u2215" ,
":" : ":" ,
"\\colon" : ":" ,
"|" : "|" ,
"\\vert" : "|" ,
"\\Vert" : "\u2016" ,
"\\|" : "\u2016" ,
"\\backslash" : "\\" ,
"'" : "\u2032" ,
"\\#" : "#" ,
"\\bmod" : "mod" ,
"\\mod" : "mod" ,
"\\downarrow" : "\u2193" ,
"\\Downarrow" : "\u21d3" ,
"\\uparrow" : "\u2191" ,
"\\Uparrow" : "\u21d1" ,
"\\updownarrow" : "\u2195" ,
"\\Updownarrow" : "\u21d5" ,
"\\bigcap" : "\u22c2" ,
"\\bigcup" : "\u22c3" ,
"\\bigodot" : "\u2a00" ,
"\\bigoplus" : "\u2a01" ,
"\\bigotimes" : "\u2a02" ,
"\\bigsqcup" : "\u2a06" ,
"\\biguplus" : "\u2a04" ,
"\\bigvee" : "\u22c1" ,
"\\bigwedge" : "\u22c0" ,
"\\coprod" : "\u2210" ,
"\\prod" : "\u220f" ,
"\\sum" : "\u2211" ,
"\\int" : "\u222b" ,
"\\smallint" : "\u222b" ,
"\\oint" : "\u222e" ,
"\\angle" : "\u2220" ,
"\\backprime" : "\u2035" ,
"\\bigstar" : "\u2605" ,
"\\blacklozenge" : "\u29eb" ,
"\\blacksquare" : "\u25a0" ,
"\\blacksquare" : "\u25aa" ,
"\\blacktriangle" : "\u25b4" ,
"\\blacktriangledown" : "\u25be" ,
"\\bot" : "\u22a5" ,
"\\clubsuit" : "\u2663" ,
"\\diagdown" : "\u2572" ,
"\\diagup" : "\u2571" ,
"\\diamondsuit" : "\u2662" ,
"\\emptyset" : "\u2205" ,
"\\exists" : "\u2203" ,
"\\flat" : "\u266d" ,
"\\forall" : "\u2200" ,
"\\heartsuit" : "\u2661" ,
"\\infty" : "\u221e" ,
"\\lnot" : "\u00ac" ,
"\\lozenge" : "\u25ca" ,
"\\measuredangle" : "\u2221" ,
"\\nabla" : "\u2207" ,
"\\natural" : "\u266e" ,
"\\neg" : "\u00ac" ,
"\\nexists" : "\u2204" ,
"\\prime" : "\u2032" ,
"\\sharp" : "\u266f" ,
"\\spadesuit" : "\u2660" ,
"\\sphericalangle" : "\u2222" ,
"\\square" : "\u25a1" ,
"\\surd" : "\u221a" ,
"\\top" : "\u22a4" ,
"\\triangle" : "\u25b5" ,
"\\triangledown" : "\u25bf" ,
"\\varnothing" : "\u2205" ,
"\\aleph" : "\u2135" ,
"\\Bbbk" : "\u1d55C" ,
"\\beth" : "\u2136" ,
"\\circledS" : "\u24c8" ,
"\\complement" : "\u2201" ,
"\\daleth" : "\u2138" ,
"\\ell" : "\u2113" ,
"\\eth" : "\u00f0" ,
"\\Finv" : "\u2132" ,
"\\Game" : "\u2141" ,
"\\gimel" : "\u2137" ,
"\\hbar" : "\u210f" ,
"\\hslash" : "\u210f" ,
"\\Im" : "\u2111" ,
"\\mho" : "\u2127" ,
"\\partial" : "\u2202" ,
"\\Re" : "\u211c" ,
"\\wp" : "\u2118" ,
}
;
var g_relation_symbols
= { "=" : "=" ,
"<" : "<" ,
">" : ">" ,
"\\approx" : "\u2248" ,
"\\approxeq" : "\u224a" ,
"\\asymp" : "\u224d" ,
"\\backsim" : "\u223d" ,
"\\backsimeq" : "\u22cd" ,
"\\bumpeq" : "\u224f" ,
"\\Bumpeq" : "\u224e" ,
"\\circeq" : "\u2257" ,
"\\cong" : "\u2245" ,
"\\curlyeqprec" : "\u22de" ,
"\\curlyeqsucc" : "\u22df" ,
"\\doteq" : "\u2250" ,
"\\doteqdot" : "\u2251" ,
"\\eqcirc" : "\u2256" ,
"\\eqsim" : "\u2242" ,
"\\eqslantgtr" : "\u2a96" ,
"\\eqslantless" : "\u2a95" ,
"\\equiv" : "\u2261" ,
"\\fallingdotseq" : "\u2252" ,
"\\ge" : "\u2265" ,
"\\geq" : "\u2265" ,
"\\geqq" : "\u2267" ,
"\\geqslant" : "\u2a7e" ,
"\\gg" : "\u226b" ,
"\\gg" : "\u2aa2" ,
"\\ggg" : "\u22d9" ,
"\\gggtr" : "\u22d9" ,
"\\gnapprox" : "\u2a8a" ,
"\\gneq" : "\u2a88" ,
"\\gneqq" : "\u2269" ,
"\\gnsim" : "\u22e7" ,
"\\gtrapprox" : "\u2a86" ,
"\\gtreqless" : "\u22db" ,
"\\gtreqqless" : "\u2a8c" ,
"\\gtrless" : "\u2277" ,
"\\gtrsim" : "\u2273" ,
"\\gvertneqq" : "\u2269" ,
"\\le" : "\u2264" ,
"\\leq" : "\u2264" ,
"\\leqq" : "\u2266" ,
"\\leqslant" : "\u2a7d" ,
"\\lessapprox" : "\u2a85" ,
"\\lesseqgtr" : "\u22da" ,
"\\lesseqqgtr" : "\u2a8b" ,
"\\lessgtr" : "\u2276" ,
"\\lesssim" : "\u2272" ,
"\\ll" : "\u226a" ,
"\\llless" : "\u22d8" ,
"\\lnapprox" : "\u2a89" ,
"\\lneq" : "\u2a87" ,
"\\lneqq" : "\u2268" ,
"\\lnsim" : "\u22e6" ,
"\\lvertneqq" : "\u2268" ,
"\\ncong" : "\u2247" ,
"\\ne" : "\u2260" ,
"\\neq" : "\u2260" ,
"\\ngeq" : "\u2271" ,
"\\ngeqq" : "\u2267" ,
"\\ngeqslant" : "\u2a7e" ,
"\\ngtr" : "\u226f" ,
"\\nleq" : "\u2270" ,
"\\nleqq" : "\u2266" ,
"\\nleqslant" : "\u2a7d" ,
"\\nless" : "\u226e" ,
"\\nprec" : "\u2280" ,
"\\npreceq" : "\u2aaf" ,
"\\nsim" : "\u2241" ,
"\\nsucc" : "\u2281" ,
"\\nsucceq" : "\u2ab0" ,
"\\prec" : "\u227a" ,
"\\precapprox" : "\u2ab7" ,
"\\preccurlyeq" : "\u227c" ,
"\\preceq" : "\u2aaf" ,
"\\precnapprox" : "\u2ab9" ,
"\\precneqq" : "\u2ab5" ,
"\\precnsim" : "\u22e8" ,
"\\precsim" : "\u227e" ,
"\\risingdotseq" : "\u2253" ,
"\\sim" : "\u223c" ,
"\\simeq" : "\u2243" ,
"\\succ" : "\u227b" ,
"\\succapprox" : "\u2ab8" ,
"\\succcurlyeq" : "\u227d" ,
"\\succeq" : "\u2ab0" ,
"\\succnapprox" : "\u2aba" ,
"\\succneqq" : "\u2ab6" ,
"\\succnsim" : "\u22e9" ,
"\\succsim" : "\u227f" ,
"\\thickapprox" : "\u2248" ,
"\\thicksim" : "\u223c" ,
"\\triangleq" : "\u225c" ,
"\\curvearrowleft" : "\u21b6" ,
"\\curvearrowright" : "\u21b7" ,
"\\downdownarrows" : "\u21ca" ,
"\\downharpoonleft" : "\u21c3" ,
"\\downharpoonright" : "\u21c2" ,
"\\gets" : "\u2190" ,
"\\hookleftarrow" : "\u21a9" ,
"\\hookrightarrow" : "\u21aa" ,
"\\leftarrow" : "\u2190" ,
"\\Leftarrow" : "\u21d0" ,
"\\leftarrowtail" : "\u21a2" ,
"\\leftharpoondown" : "\u21bd" ,
"\\leftharpoonup" : "\u21bc" ,
"\\leftleftarrows" : "\u21c7" ,
"\\leftrightarrow" : "\u2194" ,
"\\leftrightarrows" : "\u21c6" ,
"\\leftrightharpoons" : "\u21cb" ,
"\\leftrightsquigarrow" : "\u21ad" ,
"\\Lleftarrow" : "\u21da" ,
"\\longleftarrow" : "\u27f5" ,
"\\Longleftarrow" : "\u27f8" ,
"\\longleftrightarrow" : "\u27f7" ,
"\\Longleftrightarrow" : "\u27fa" ,
"\\looparrowleft" : "\u21ab" ,
"\\looparrowright" : "\u21ac" ,
"\\Lsh" : "\u21b0" ,
"\\mapsto" : "\u21a6" ,
"\\multimap" : "\u22b8" ,
"\\nearrow" : "\u2197" ,
"\\nleftarrow" : "\u219a" ,
"\\nLeftarrow" : "\u21cd" ,
"\\nleftrightarrow" : "\u21ae" ,
"\\nLeftrightarrow" : "\u21ce" ,
"\\nrightarrow" : "\u219b" ,
"\\nRightarrow" : "\u21cf" ,
"\\nwarrow" : "\u2196" ,
"\\restriction" : "\u21be" ,
"\\rightarrow" : "\u2192" ,
"\\Rightarrow" : "\u21d2" ,
"\\rightarrowtail" : "\u21a3" ,
"\\rightharpoondown" : "\u21c1" ,
"\\rightharpoonup" : "\u21c0" ,
"\\rightleftarrows" : "\u21c4" ,
"\\rightleftharpoons" : "\u21cc" ,
"\\rightrightarrows" : "\u21c9" ,
"\\rightsquigarrow" : "\u219d" ,
"\\Rrightarrow" : "\u21db" ,
"\\Rsh" : "\u21b1" ,
"\\searrow" : "\u2198" ,
"\\swarrow" : "\u2199" ,
"\\to" : "\u2192" ,
"\\twoheadleftarrow" : "\u219e" ,
"\\twoheadrightarrow" : "\u21a0" ,
"\\upharpoonleft" : "\u21bf" ,
"\\upharpoonright" : "\u21be" ,
"\\upuparrows" : "\u21c8" ,
"\\backepsilon" : "\u03f6" ,
"\\because" : "\u2235" ,
"\\between" : "\u226c" ,
"\\blacktriangleleft" : "\u25c0" ,
"\\blacktriangleright" : "\u25b6" ,
"\\bowtie" : "\u22c8" ,
"\\dashv" : "\u22a3" ,
"\\frown" : "\u2323" ,
"\\in" : "\u220a" ,
"\\mid" : "\u2223" ,
"\\models" : "\u22a7" ,
"\\ni" : "\u220b" ,
"\\ni" : "\u220d" ,
"\\nmid" : "\u2224" ,
"\\notin" : "\u2209" ,
"\\nparallel" : "\u2226" ,
"\\nshortmid" : "\u2224" ,
"\\nshortparallel" : "\u2226" ,
"\\nsubseteq" : "\u2286" ,
"\\nsubseteq" : "\u2288" ,
"\\nsubseteqq" : "\u2ac5" ,
"\\nsupseteq" : "\u2287" ,
"\\nsupseteq" : "\u2289" ,
"\\nsupseteqq" : "\u2ac6" ,
"\\ntriangleleft" : "\u22ea" ,
"\\ntrianglelefteq" : "\u22ec" ,
"\\ntriangleright" : "\u22eb" ,
"\\ntrianglerighteq" : "\u22ed" ,
"\\nvdash" : "\u22ac" ,
"\\nvDash" : "\u22ad" ,
"\\nVdash" : "\u22ae" ,
"\\nVDash" : "\u22af" ,
"\\owns" : "\u220d" ,
"\\parallel" : "\u2225" ,
"\\perp" : "\u22a5" ,
"\\pitchfork" : "\u22d4" ,
"\\propto" : "\u221d" ,
"\\shortmid" : "\u2223" ,
"\\shortparallel" : "\u2225" ,
"\\smallfrown" : "\u2322" ,
"\\smallsmile" : "\u2323" ,
"\\smile" : "\u2323" ,
"\\sqsubset" : "\u228f" ,
"\\sqsubseteq" : "\u2291" ,
"\\sqsupset" : "\u2290" ,
"\\sqsupseteq" : "\u2292" ,
"\\subset" : "\u2282" ,
"\\Subset" : "\u22d0" ,
"\\subseteq" : "\u2286" ,
"\\subseteqq" : "\u2ac5" ,
"\\subsetneq" : "\u228a" ,
"\\subsetneqq" : "\u2acb" ,
"\\supset" : "\u2283" ,
"\\Supset" : "\u22d1" ,
"\\supseteq" : "\u2287" ,
"\\supseteqq" : "\u2ac6" ,
"\\supsetneq" : "\u228b" ,
"\\supsetneqq" : "\u2acc" ,
"\\therefore" : "\u2234" ,
"\\trianglelefteq" : "\u22b4" ,
"\\trianglerighteq" : "\u22b5" ,
"\\varpropto" : "\u221d" ,
"\\varsubsetneq" : "\u228a" ,
"\\varsubsetneqq" : "\u2acb" ,
"\\varsupsetneq" : "\u228b" ,
"\\varsupsetneqq" : "\u2acc" ,
"\\vartriangle" : "\u25b5" ,
"\\vartriangleleft" : "\u22b2" ,
"\\vartriangleright" : "\u22b3" ,
"\\vdash" : "\u22a2" ,
"\\vDash" : "\u22a8" ,
"\\Vdash" : "\u22a9" ,
"\\Vvdash" : "\u22aa" ,
}
;
var g_named_identifiers
= { "\\arccos" : "arccos" ,
"\\arcsin" : "arcsin" ,
"\\arctan" : "arctan" ,
"\\arg" : "arg" ,
"\\cos" : "cos" ,
"\\cosh" : "cosh" ,
"\\cot" : "cot" ,
"\\coth" : "coth" ,
"\\csc" : "csc" ,
"\\deg" : "deg" ,
"\\det" : "det" ,
"\\dim" : "dim" ,
"\\exp" : "exp" ,
"\\gcd" : "gcd" ,
"\\hom" : "hom" ,
"\\ker" : "ker" ,
"\\lg" : "lg" ,
"\\ln" : "ln" ,
"\\log" : "log" ,
"\\Pr" : "Pr" ,
"\\sec" : "sec" ,
"\\sin" : "sin" ,
"\\sinh" : "sinh" ,
"\\tan" : "tan" ,
"\\tanh" : "tanh" ,
"\\inf" : "inf" ,
"\\injlim" : "inj lim" ,
"\\lim" : "lim" ,
"\\liminf" : "lim inf" ,
"\\limsup" : "lum sup" ,
"\\max" : "max" ,
"\\min" : "min" ,
"\\projlim" : "proj lim" ,
"\\sup" : "sup" ,
"\\alpha" : "\u03b1" ,
"\\beta" : "\u03b2" ,
"\\chi" : "\u03c7" ,
"\\delta" : "\u03b4" ,
"\\Delta" : "\u0394" ,
"\\digamma" : "\u03dd" ,
"\\epsilon" : "\u03f5" ,
"\\eta" : "\u03b7" ,
"\\gamma" : "\u03b3" ,
"\\Gamma" : "\u0393" ,
"\\iota" : "\u03b9" ,
"\\kappa" : "\u03ba" ,
"\\lambda" : "\u03bb" ,
"\\Lambda" : "\u039b" ,
"\\mu" : "\u03bc" ,
"\\nu" : "\u03bd" ,
"\\omega" : "\u03c9" ,
"\\Omega" : "\u03a9" ,
"\\phi" : "\u03c6" ,
"\\Phi" : "\u03a6" ,
"\\pi" : "\u03c0" ,
"\\Pi" : "\u03a0" ,
"\\psi" : "\u03c8" ,
"\\Psi" : "\u03a8" ,
"\\rho" : "\u03c1" ,
"\\sigma" : "\u03c3" ,
"\\Sigma" : "\u03a3" ,
"\\tau" : "\u03c4" ,
"\\theta" : "\u03b8" ,
"\\Theta" : "\u0398" ,
"\\upsilon" : "\u03c5" ,
"\\Upsilon" : "\u03d2" ,
"\\varepsilon" : "\u03b5" ,
"\\varkappa" : "\u03f0" ,
"\\varphi" : "\u03d5" ,
"\\varpi" : "\u03d6" ,
"\\varrho" : "\u03f1" ,
"\\varsigma" : "\u03c2" ,
"\\vartheta" : "\u03d1" ,
"\\xi" : "\u03be" ,
"\\Xi" : "\u039e" ,
"\\zeta" : "\u03b6" ,
"a" : "a" ,
"b" : "b" ,
"c" : "c" ,
"d" : "d" ,
"e" : "e" ,
"f" : "f" ,
"g" : "g" ,
"h" : "h" ,
"i" : "i" ,
"j" : "j" ,
"k" : "k" ,
"l" : "l" ,
"m" : "m" ,
"n" : "n" ,
"o" : "o" ,
"p" : "p" ,
"q" : "q" ,
"r" : "r" ,
"s" : "s" ,
"t" : "t" ,
"u" : "u" ,
"v" : "v" ,
"w" : "w" ,
"x" : "x" ,
"y" : "y" ,
"z" : "z" ,
"A" : "A" ,
"B" : "B" ,
"C" : "C" ,
"D" : "D" ,
"E" : "E" ,
"F" : "F" ,
"G" : "G" ,
"H" : "H" ,
"I" : "I" ,
"J" : "J" ,
"K" : "K" ,
"L" : "L" ,
"M" : "M" ,
"N" : "N" ,
"O" : "O" ,
"P" : "P" ,
"Q" : "Q" ,
"R" : "R" ,
"S" : "S" ,
"T" : "T" ,
"U" : "U" ,
"V" : "V" ,
"W" : "W" ,
"X" : "X" ,
"Y" : "Y" ,
"Z" : "Z" ,
"\\vdots" : "\u22ee" ,
"\\hdots" : "\u2026" ,
"\\ldots" : "\u2026" ,
"\\dots" : "\u2026" ,
"\\cdots" : "\u00b7\u00b7\u00b7" ,
"\\dotsb" : "\u00b7\u00b7\u00b7" ,
"\\dotsc" : "\u2026" ,
"\\dotsi" : "\u22c5\u22c5\u22c5" ,
"\\dotsm" : "\u22c5\u22c5\u22c5" ,
"\\dotso" : "\u2026" ,
"\\ddots" : "\u22f1" ,
}
;
var g_word_operators
= { "\\arccos" : "arccos" ,
"\\arcsin" : "arcsin" ,
"\\arctan" : "arctan" ,
"\\arg" : "arg" ,
"\\cos" : "cos" ,
"\\cosh" : "cosh" ,
"\\cot" : "cot" ,
"\\coth" : "coth" ,
"\\csc" : "csc" ,
"\\deg" : "deg" ,
"\\det" : "det" ,
"\\dim" : "dim" ,
"\\exp" : "exp" ,
"\\gcd" : "gcd" ,
"\\hom" : "hom" ,
"\\ker" : "ker" ,
"\\lg" : "lg" ,
"\\ln" : "ln" ,
"\\log" : "log" ,
"\\Pr" : "Pr" ,
"\\sec" : "sec" ,
"\\sin" : "sin" ,
"\\sinh" : "sinh" ,
"\\tan" : "tan" ,
"\\tanh" : "tanh" ,
}
;
var g_big_word_operators
= { "\\inf" : "inf" ,
"\\injlim" : "inj lim" ,
"\\lim" : "lim" ,
"\\liminf" : "lim inf" ,
"\\limsup" : "lum sup" ,
"\\max" : "max" ,
"\\min" : "min" ,
"\\projlim" : "proj lim" ,
"\\sup" : "sup" ,
}
;
var g_greek_letters
= { "\\alpha" : "\u03b1" ,
"\\beta" : "\u03b2" ,
"\\chi" : "\u03c7" ,
"\\delta" : "\u03b4" ,
"\\Delta" : "\u0394" ,
"\\digamma" : "\u03dd" ,
"\\epsilon" : "\u03f5" ,
"\\eta" : "\u03b7" ,
"\\gamma" : "\u03b3" ,
"\\Gamma" : "\u0393" ,
"\\iota" : "\u03b9" ,
"\\kappa" : "\u03ba" ,
"\\lambda" : "\u03bb" ,
"\\Lambda" : "\u039b" ,
"\\mu" : "\u03bc" ,
"\\nu" : "\u03bd" ,
"\\omega" : "\u03c9" ,
"\\Omega" : "\u03a9" ,
"\\phi" : "\u03c6" ,
"\\Phi" : "\u03a6" ,
"\\pi" : "\u03c0" ,
"\\Pi" : "\u03a0" ,
"\\psi" : "\u03c8" ,
"\\Psi" : "\u03a8" ,
"\\rho" : "\u03c1" ,
"\\sigma" : "\u03c3" ,
"\\Sigma" : "\u03a3" ,
"\\tau" : "\u03c4" ,
"\\theta" : "\u03b8" ,
"\\Theta" : "\u0398" ,
"\\upsilon" : "\u03c5" ,
"\\Upsilon" : "\u03d2" ,
"\\varepsilon" : "\u03b5" ,
"\\varkappa" : "\u03f0" ,
"\\varphi" : "\u03d5" ,
"\\varpi" : "\u03d6" ,
"\\varrho" : "\u03f1" ,
"\\varsigma" : "\u03c2" ,
"\\vartheta" : "\u03d1" ,
"\\xi" : "\u03be" ,
"\\Xi" : "\u039e" ,
"\\zeta" : "\u03b6" ,
}
;
function v_fraction_to_mathml (tokens ) {
var v_numerator = v_piece_to_mathml (tokens ) ;
var v_denominator = v_piece_to_mathml (tokens ) ;
return result_element( "mfrac" ,0 , v_numerator , v_denominator ) ;
}
function v_binom_to_mathml (tokens ) {
var v_top = v_piece_to_mathml (tokens ) ;
var v_bottom = v_piece_to_mathml (tokens ) ;
return result_element( "mrow" ,0 , result_element( "mo" ,0 , "(" ) , result_element( "mfrac" , 1
, "linethickness" , "0" , v_top , v_bottom ) , result_element( "mo" ,0 , ")" ) ) ;
}
function v_sqrt_to_mathml (tokens ) {
var v_index = v_optional_arg_to_mathml (tokens ) ;
var v_object = v_piece_to_mathml (tokens ) ;
if( ( v_index != null ) ) {
return result_element( "mroot" ,0 , v_object , v_index ) ;
}
else {
return result_element( "msqrt" ,0 , v_object ) ;
}
}
function v_parenthesized_operator (tokens , v_word ) {
var v_object = v_piece_to_mathml (tokens ) ;
if( ( v_word != null ) ) {
return result_element( "mrow" ,0 , result_element( "mo" ,0 , "(" ) , result_element( "mo" ,0 , v_word ) , v_object , result_element( "mo" ,0 , ")" ) ) ;
}
else {
return result_element( "mrow" ,0 , result_element( "mo" ,0 , "(" ) , v_object , result_element( "mo" ,0 , ")" ) ) ;
}
}
function v_operatorname_to_mathml (tokens ) {
var v_result = result_element( "mo" ,0 , tokens.list[tokens.index] ) ;
tokens.index++;
return v_result ;
}
function v_displaystyle_to_mathml (tokens ) {
var v_result = v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
) ;
return result_element( "mstyle" , 2
, "displaystyle" , "true" , "scriptlevel" , "0" , v_result ) ;
}
function v_displaymath_to_mathml (tokens ) {
var v_result = v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
) ;
v_finish_latex_block (tokens );
return result_element( "mstyle" , 2
, "displaystyle" , "true" , "scriptlevel" , "0" , v_result ) ;
}
function v_font_to_mathml (tokens , v_font_name ) {
if( ( tokens.list[tokens.index] != "{" ) ) {
var v_result = result_element( "mi" , 1
, "mathvariant" , v_font_name , tokens.list[tokens.index] ) ;
if( ( v_font_name == "normal" ) ) {
result_set_attr(
v_result , "fontstyle" , "normal" );
}
tokens.index++;
return v_result ;
}
else {
var v_result = v_piece_to_mathml (tokens ) ;
result_set_attr(
v_result , "mathvariant" , v_font_name );
if( ( v_font_name == "normal" ) ) {
result_set_attr(
v_result , "fontstyle" , "normal" );
}
return v_result ;
}
}
function v_old_font_to_mathml (tokens , v_font_name ) {
return result_element( "mstyle" , 2
, "mathvariant" , v_font_name , "fontstyle" , ( ( v_font_name == "normal" ) ? "normal" : null ) , v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
) ) ;
}
function v_size_to_mathml (tokens , v_min_size , v_max_size ) {
var v_result = v_piece_to_mathml (tokens ) ;
result_set_attr(
v_result , "minsize" , v_min_size );
result_set_attr(
v_result , "maxsize" , v_max_size );
return v_result ;
}
function v_accent_to_mathml (tokens , v_char ) {
return result_element( "mover" , 1
, "accent" , "true" , v_piece_to_mathml (tokens ) , result_element( "mo" ,0 , v_char ) ) ;
}
function v_matrix_to_mathml (tokens , v_open_delim , v_close_delim ) {
var v_mtable = v_matrix_to_mtable (tokens , result_element( "mtable" ,0) ) ;
if( ( ( v_open_delim != null ) || ( v_close_delim != null ) ) ) {
var v_mrow = result_element( "mrow" ,0) ;
if( ( v_open_delim != null ) ) {
result_element_append( v_mrow , result_element( "mo" ,0 , v_open_delim ) );
}
result_element_append( v_mrow , v_mtable );
if( ( v_close_delim != null ) ) {
result_element_append( v_mrow , result_element( "mo" ,0 , v_close_delim ) );
}
return v_mrow ;
}
else {
return v_mtable ;
}
}
function v_array_to_mathml (tokens ) {
var v_mtable = result_element( "mtable" ,0) ;
if( ( tokens.list[tokens.index] == "{" ) ) {
tokens.index++;
while( ( ( tokens.list[tokens.index] != null ) && ( tokens.list[tokens.index] != "}" ) ) ) {
if( ( tokens.list[tokens.index] == "c" ) ) {
result_append_attr(
v_mtable , "columnalign" , "center " );
}
else if( ( tokens.list[tokens.index] == "l" ) ) {
result_append_attr(
v_mtable , "columnalign" , "left " );
}
else if( ( tokens.list[tokens.index] == "r" ) ) {
result_append_attr(
v_mtable , "columnalign" , "right " );
}
tokens.index++;
}
if( ( tokens.list[tokens.index] != null ) ) {
tokens.index++;
}
}
return v_matrix_to_mtable (tokens , v_mtable ) ;
}
function v_matrix_to_mtable (tokens , v_mtable ) {
var v_mtr = result_element( "mtr" ,0) ;
var v_mtd = result_element( "mtd" ,0) ;
var v_token = tokens.list[tokens.index] ;
result_element_append( v_mtable , v_mtr );
result_element_append( v_mtr , v_mtd );
while( ( ( v_token != null ) && ( v_token != "\\end" ) ) ) {
if( ( v_token == "\\\\" ) ) {
v_mtr = result_element( "mtr" ,0) ;
v_mtd = result_element( "mtd" ,0) ;
result_element_append( v_mtable , v_mtr );
result_element_append( v_mtr , v_mtd );
tokens.index++;
}
else if( ( v_token == "&" ) ) {
v_mtd = result_element( "mtd" ,0) ;
result_element_append( v_mtr , v_mtd );
tokens.index++;
}
else {
result_element_append( v_mtd , v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
) );
}
v_token = tokens.list[tokens.index] ;
}
v_finish_latex_block (tokens );
return v_mtable ;
}
function v_over_to_mathml (tokens , v_char ) {
return result_element( "mover" ,0 , v_piece_to_mathml (tokens ) , result_element( "mo" ,0 , v_char ) ) ;
}
function v_under_to_mathml (tokens , v_char ) {
return result_element( "munder" ,0 , v_piece_to_mathml (tokens ) , result_element( "mo" ,0 , v_char ) ) ;
}
function v_delimiter_to_mathml (tokens , v_end_command , v_min_size , v_max_size ) {
var v_mrow = result_element( "mrow" ,0) ;
result_element_append( v_mrow , result_element( "mo" , 2
, "minsize" , v_min_size , "maxsize" , v_max_size , v_read_delimiter (tokens ) ) );
result_element_append( v_mrow , v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
) );
if( ( tokens.list[tokens.index] != v_end_command ) ) {
return v_mrow ;
}
tokens.index++;
result_element_append( v_mrow , result_element( "mo" , 2
, "minsize" , v_min_size , "maxsize" , v_max_size , v_read_delimiter (tokens ) ) );
return v_mrow ;
}
function v_read_delimiter (tokens ) {
var v_token = tokens.list[tokens.index] ;
if( ( v_token == null ) ) {
throw "unexpected eof" ;
}
else if( ( v_token == "." ) ) {
tokens.index++;
return "" ;
}
else if( ( v_token == "<" ) ) {
tokens.index++;
return "\u2329" ;
}
else if( ( v_token == ">" ) ) {
tokens.index++;
return "\u232a" ;
}
else if( ( v_token in g_punct_and_space
) ) {
tokens.index++;
return g_punct_and_space
[ v_token ] ;
}
else if( ( v_token in g_left_delimiters
) ) {
tokens.index++;
return g_left_delimiters
[ v_token ] ;
}
else if( ( v_token in g_right_delimiters
) ) {
tokens.index++;
return g_right_delimiters
[ v_token ] ;
}
else if( ( v_token in g_operator_symbols
) ) {
tokens.index++;
return g_operator_symbols
[ v_token ] ;
}
else {
throw "invalid delimiter" ;
}
}
function v_latex_block_to_mathml (tokens ) {
v_cmd = tokens.list[tokens.index] ;
if( ( v_cmd in g_tex_environments
) ) {
tokens.index++;
return g_tex_environments
[ v_cmd ] (tokens ) ;
}
else {
throw "unknown command" ;
}
}
function v_finish_latex_block (tokens ) {
if( ( tokens.list[tokens.index] == null ) ) {
throw "unexpected eof" ;
}
tokens.index++;
tokens.index++;
}
function v_combining_to_mathml (tokens , v_char ) {
var v_base = tokens.list[tokens.index] ;
tokens.index++;
return result_element( "mo" ,0 , v_base , v_char ) ;
}
var g_char_escape_codes
= { "93" : "#" ,
}
;
function v_char_escape_to_mathml (tokens ) {
var v_result = null ;
if( ( tokens.list[tokens.index] in g_char_escape_codes
) ) {
v_result = result_element( "mtext" ,0 , g_char_escape_codes
[ tokens.list[tokens.index] ] ) ;
}
else {
v_result = result_element( "merror" ,0 , "\\char" , tokens.list[tokens.index] ) ;
}
tokens.index++;
return v_result ;
}
function v_text_to_mathml (tokens ) {
if( ( tokens.list[tokens.index] != "{" ) ) {
var v_result = result_element( "mtext" ,0 , tokens.list[tokens.index] ) ;
tokens.index++;
return v_result ;
}
tokens.index++;
var v_result = null ;
var v_mrow = null ;
var v_node = null ;
while( ( tokens.list[tokens.index] != null ) ) {
if( ( tokens.list[tokens.index] == "}" ) ) {
tokens.index++;
return v_result ;
}
else if( ( tokens.list[tokens.index] == "$" ) ) {
tokens.index++;
v_node = v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
) ;
tokens.index++;
}
else {
v_node = result_element( "mtext" ,0 , tokens.list[tokens.index] ) ;
tokens.index++;
}
if( ( v_mrow != null ) ) {
result_element_append( v_mrow , v_node );
}
else if( ( v_result != null ) ) {
v_mrow = result_element( "mrow" ,0 , v_result , v_node ) ;
v_result = v_mrow ;
}
else {
v_result = v_node ;
}
}
return v_result ;
}
var g_tex_commands
= { "\\frac" : v_fraction_to_mathml ,
"\\dfrac" : v_fraction_to_mathml ,
"\\tfrac" : v_fraction_to_mathml ,
"\\binom" : v_binom_to_mathml ,
"\\sqrt" : v_sqrt_to_mathml ,
"\\operatorname" : v_operatorname_to_mathml ,
"\\displaystyle" : v_displaystyle_to_mathml ,
"\\pod" : function(tokens ) { return v_parenthesized_operator (tokens , null ) ; } ,
"\\pmod" : function(tokens ) { return v_parenthesized_operator (tokens , "mod" ) ; } ,
"\\boldsymbol" : function(tokens ) { return v_font_to_mathml (tokens , "bold" ) ; } ,
"\\bold" : function(tokens ) { return v_font_to_mathml (tokens , "bold" ) ; } ,
"\\Bbb" : function(tokens ) { return v_font_to_mathml (tokens , "double-struck" ) ; } ,
"\\mathbb" : function(tokens ) { return v_font_to_mathml (tokens , "double-struck" ) ; } ,
"\\mathbbmss" : function(tokens ) { return v_font_to_mathml (tokens , "double-struck" ) ; } ,
"\\mathbf" : function(tokens ) { return v_font_to_mathml (tokens , "bold" ) ; } ,
"\\mathop" : function(tokens ) { return v_font_to_mathml (tokens , "normal" ) ; } ,
"\\mathrm" : function(tokens ) { return v_font_to_mathml (tokens , "normal" ) ; } ,
"\\mathfrak" : function(tokens ) { return v_font_to_mathml (tokens , "fraktur" ) ; } ,
"\\mathit" : function(tokens ) { return v_font_to_mathml (tokens , "italic" ) ; } ,
"\\mathscr" : function(tokens ) { return v_font_to_mathml (tokens , "script" ) ; } ,
"\\mathcal" : function(tokens ) { return v_font_to_mathml (tokens , "script" ) ; } ,
"\\mathsf" : function(tokens ) { return v_font_to_mathml (tokens , "sans-serif" ) ; } ,
"\\mathtt" : function(tokens ) { return v_font_to_mathml (tokens , "monospace" ) ; } ,
"\\EuScript" : function(tokens ) { return v_font_to_mathml (tokens , "script" ) ; } ,
"\\bf" : function(tokens ) { return v_old_font_to_mathml (tokens , "bold" ) ; } ,
"\\rm" : function(tokens ) { return v_old_font_to_mathml (tokens , "normal" ) ; } ,
"\\big" : function(tokens ) { return v_size_to_mathml (tokens , "2" , "2" ) ; } ,
"\\Big" : function(tokens ) { return v_size_to_mathml (tokens , "3" , "3" ) ; } ,
"\\bigg" : function(tokens ) { return v_size_to_mathml (tokens , "4" , "4" ) ; } ,
"\\Bigg" : function(tokens ) { return v_size_to_mathml (tokens , "5" , "5" ) ; } ,
"\\acute" : function(tokens ) { return v_accent_to_mathml (tokens , "\u0301" ) ; } ,
"\\grave" : function(tokens ) { return v_accent_to_mathml (tokens , "\u0300" ) ; } ,
"\\tilde" : function(tokens ) { return v_accent_to_mathml (tokens , "\u0303" ) ; } ,
"\\bar" : function(tokens ) { return v_accent_to_mathml (tokens , "\u0304" ) ; } ,
"\\breve" : function(tokens ) { return v_accent_to_mathml (tokens , "\u0306" ) ; } ,
"\\check" : function(tokens ) { return v_accent_to_mathml (tokens , "\u030c" ) ; } ,
"\\hat" : function(tokens ) { return v_accent_to_mathml (tokens , "\u0302" ) ; } ,
"\\vec" : function(tokens ) { return v_accent_to_mathml (tokens , "\u20d7" ) ; } ,
"\\dot" : function(tokens ) { return v_accent_to_mathml (tokens , "\u0307" ) ; } ,
"\\ddot" : function(tokens ) { return v_accent_to_mathml (tokens , "\u0308" ) ; } ,
"\\dddot" : function(tokens ) { return v_accent_to_mathml (tokens , "\u20db" ) ; } ,
"\\underbrace" : function(tokens ) { return v_under_to_mathml (tokens , "\ufe38" ) ; } ,
"\\overbrace" : function(tokens ) { return v_over_to_mathml (tokens , "\ufe37" ) ; } ,
"\\underline" : function(tokens ) { return v_under_to_mathml (tokens , "\u0332" ) ; } ,
"\\overline" : function(tokens ) { return v_over_to_mathml (tokens , "\u00af" ) ; } ,
"\\widetilde" : function(tokens ) { return v_over_to_mathml (tokens , "\u0303" ) ; } ,
"\\widehat" : function(tokens ) { return v_over_to_mathml (tokens , "\u0302" ) ; } ,
"\\not" : function(tokens ) { return v_combining_to_mathml (tokens , "\u0338" ) ; } ,
"\\left" : function(tokens ) { return v_delimiter_to_mathml (tokens , "\\right" , "1" , null ) ; } ,
"\\bigl" : function(tokens ) { return v_delimiter_to_mathml (tokens , "\\bigr" , "2" , "2" ) ; } ,
"\\Bigl" : function(tokens ) { return v_delimiter_to_mathml (tokens , "\\Bigr" , "3" , "3" ) ; } ,
"\\biggl" : function(tokens ) { return v_delimiter_to_mathml (tokens , "\\biggr" , "4" , "4" ) ; } ,
"\\Biggl" : function(tokens ) { return v_delimiter_to_mathml (tokens , "\\Biggr" , "5" , "5" ) ; } ,
"\\char" : v_char_escape_to_mathml ,
"\\!" : function(tokens ) { return null ; } ,
"\\text" : v_text_to_mathml ,
"\\textnormal" : v_text_to_mathml ,
"\\textrm" : v_text_to_mathml ,
"\\textsl" : v_text_to_mathml ,
"\\textit" : v_text_to_mathml ,
"\\texttt" : v_text_to_mathml ,
"\\textbf" : v_text_to_mathml ,
"\\hbox" : v_text_to_mathml ,
"\\mbox" : v_text_to_mathml ,
"\\begin" : v_latex_block_to_mathml ,
}
;
var g_tex_environments
= { "smallmatrix" : function(tokens ) { return v_matrix_to_mathml (tokens , "(" , ")" ) ; } ,
"pmatrix" : function(tokens ) { return v_matrix_to_mathml (tokens , "(" , ")" ) ; } ,
"bmatrix" : function(tokens ) { return v_matrix_to_mathml (tokens , "[" , "]" ) ; } ,
"Bmatrix" : function(tokens ) { return v_matrix_to_mathml (tokens , "{" , "}" ) ; } ,
"vmatrix" : function(tokens ) { return v_matrix_to_mathml (tokens , "|" , "|" ) ; } ,
"Vmatrix" : function(tokens ) { return v_matrix_to_mathml (tokens , "\u2016" , "\u2016" ) ; } ,
"cases" : function(tokens ) { return v_matrix_to_mathml (tokens , "{" , null ) ; } ,
"array" : v_array_to_mathml ,
"displaymath" : v_displaymath_to_mathml ,
}
;
var g_limit_commands
= { "\\bigcap" : "\u22c2" ,
"\\bigcup" : "\u22c3" ,
"\\bigodot" : "\u2a00" ,
"\\bigoplus" : "\u2a01" ,
"\\bigotimes" : "\u2a02" ,
"\\bigsqcup" : "\u2a06" ,
"\\biguplus" : "\u2a04" ,
"\\bigvee" : "\u22c1" ,
"\\bigwedge" : "\u22c0" ,
"\\coprod" : "\u2210" ,
"\\prod" : "\u220f" ,
"\\sum" : "\u2211" ,
"\\inf" : "inf" ,
"\\injlim" : "inj lim" ,
"\\lim" : "lim" ,
"\\liminf" : "lim inf" ,
"\\limsup" : "lum sup" ,
"\\max" : "max" ,
"\\min" : "min" ,
"\\projlim" : "proj lim" ,
"\\sup" : "sup" ,
"\\underbrace" : null ,
"\\overbrace" : null ,
"\\underline" : null ,
"\\overline" : null ,
}
;
function v_piece_to_mathml (tokens ) {
var v_token = tokens.list[tokens.index] ;
var v_result = null ;
if( ( v_token == "{" ) ) {
tokens.index++;
v_result = v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
) ;
if( ( tokens.list[tokens.index] == "}" ) ) {
tokens.index++;
}
}
else if( ( v_token in g_relation_symbols
) ) {
v_result = result_element( "mo" ,0 , g_relation_symbols
[ v_token ] ) ;
tokens.index++;
}
else if( ( v_token in g_operator_symbols
) ) {
v_result = result_element( "mo" ,0 , g_operator_symbols
[ v_token ] ) ;
tokens.index++;
}
else if( ( v_token in g_left_delimiters
) ) {
v_result = result_element( "mo" ,0 , g_left_delimiters
[ v_token ] ) ;
tokens.index++;
}
else if( ( v_token in g_right_delimiters
) ) {
v_result = result_element( "mo" ,0 , g_right_delimiters
[ v_token ] ) ;
tokens.index++;
}
else if( ( v_token in g_word_operators
) ) {
v_result = result_element( "mi" , 1
, "mathvariant" , "normal" , g_word_operators
[ v_token ] ) ;
tokens.index++;
}
else if( ( v_token in g_greek_letters
) ) {
v_result = result_element( "mi" , 1
, "fontstyle" , "normal" , g_greek_letters
[ v_token ] ) ;
tokens.index++;
}
else if( ( v_token in g_named_identifiers
) ) {
v_result = result_element( "mi" ,0 , g_named_identifiers
[ v_token ] ) ;
tokens.index++;
}
else if( ( v_token in g_punct_and_space
) ) {
v_result = result_element( "mtext" ,0 , g_punct_and_space
[ v_token ] ) ;
tokens.index++;
}
else if( ( v_token in g_tex_commands
) ) {
tokens.index++;
v_result = g_tex_commands
[ v_token ] (tokens ) ;
}
else {
v_result = result_element( "mn" ,0 , v_token ) ;
tokens.index++;
}
return v_result ;
}
function v_subexpr_to_mathml (tokens ) {
var v_result = null ;
var v_mmultiscripts = null ;
var v_mprescripts = null ;
if( ( ( tokens.list[tokens.length<=tokens.index+ 0 ? tokens.length-1 : tokens.index+ 0 ]
== "{" ) && ( tokens.list[tokens.length<=tokens.index+ 1 ? tokens.length-1 : tokens.index+ 1 ]
== "}" ) && ( ( tokens.list[tokens.length<=tokens.index+ 2 ? tokens.length-1 : tokens.index+ 2 ]
== "_" ) || ( tokens.list[tokens.length<=tokens.index+ 2 ? tokens.length-1 : tokens.index+ 2 ]
== "^" ) ) ) ) {
v_mmultiscripts = result_element( "mmultiscripts" ,0) ;
v_mprescripts = result_element( "mprescripts" ,0) ;
result_element_append( v_mmultiscripts , v_mprescripts );
while( ( ( tokens.list[tokens.length<=tokens.index+ 0 ? tokens.length-1 : tokens.index+ 0 ]
== "{" ) && ( tokens.list[tokens.length<=tokens.index+ 1 ? tokens.length-1 : tokens.index+ 1 ]
== "}" ) && ( ( tokens.list[tokens.length<=tokens.index+ 2 ? tokens.length-1 : tokens.index+ 2 ]
== "_" ) || ( tokens.list[tokens.length<=tokens.index+ 2 ? tokens.length-1 : tokens.index+ 2 ]
== "^" ) ) ) ) {
var v_subscript = null ;
var v_superscript = null ;
tokens.index++;
tokens.index++;
if( ( tokens.list[tokens.index] == "_" ) ) {
tokens.index++;
v_subscript = v_piece_to_mathml (tokens ) ;
}
else if( ( tokens.list[tokens.index] == "^" ) ) {
tokens.index++;
v_superscript = v_piece_to_mathml (tokens ) ;
}
if( ( tokens.list[tokens.index] == "_" ) ) {
tokens.index++;
v_subscript = v_piece_to_mathml (tokens ) ;
}
else if( ( tokens.list[tokens.index] == "^" ) ) {
tokens.index++;
v_superscript = v_piece_to_mathml (tokens ) ;
}
result_element_append( v_mmultiscripts , ( ( v_subscript != null ) ? v_subscript : result_element( "none" ,0) ) );
result_element_append( v_mmultiscripts , ( ( v_superscript != null ) ? v_superscript : result_element( "none" ,0) ) );
}
}
var v_limit_style = ( tokens.list[tokens.index] in g_limit_commands
) ;
if( ( tokens.list[tokens.index] == null ) ) {
if( ( v_mmultiscripts != null ) ) {
result_element_prepend( v_mmultiscripts , result_element( "mrow" ,0) , v_mprescripts );
return v_mmultiscripts ;
}
else {
return result_element( "mrow" ,0) ;
}
}
else if( ( tokens.list[tokens.index] in g_left_delimiters
) ) {
v_result = v_heuristic_subexpression (tokens ) ;
}
else {
v_result = v_piece_to_mathml (tokens ) ;
}
var v_base = v_result ;
var v_subscript = null ;
var v_superscript = null ;
if( ( tokens.list[tokens.index] == "_" ) ) {
tokens.index++;
v_subscript = v_piece_to_mathml (tokens ) ;
}
else if( ( tokens.list[tokens.index] == "^" ) ) {
tokens.index++;
v_superscript = v_piece_to_mathml (tokens ) ;
}
if( ( tokens.list[tokens.index] == "_" ) ) {
tokens.index++;
v_subscript = v_piece_to_mathml (tokens ) ;
}
else if( ( tokens.list[tokens.index] == "^" ) ) {
tokens.index++;
v_superscript = v_piece_to_mathml (tokens ) ;
}
if( ( v_mmultiscripts != null ) ) {
result_element_prepend( v_mmultiscripts , v_base , v_mprescripts );
result_element_prepend( v_mmultiscripts , ( ( v_subscript != null ) ? v_subscript : result_element( "none" ,0) ) , v_mprescripts );
result_element_prepend( v_mmultiscripts , ( ( v_superscript != null ) ? v_superscript : result_element( "none" ,0) ) , v_mprescripts );
}
while( ( ( tokens.list[tokens.length<=tokens.index+ 0 ? tokens.length-1 : tokens.index+ 0 ]
== "{" ) && ( tokens.list[tokens.length<=tokens.index+ 1 ? tokens.length-1 : tokens.index+ 1 ]
== "}" ) && ( ( tokens.list[tokens.length<=tokens.index+ 2 ? tokens.length-1 : tokens.index+ 2 ]
== "_" ) || ( tokens.list[tokens.length<=tokens.index+ 2 ? tokens.length-1 : tokens.index+ 2 ]
== "^" ) ) ) ) {
if( ( v_mmultiscripts == null ) ) {
v_mmultiscripts = result_element( "mmultiscripts" ,0 , v_base ) ;
v_mprescripts = null ;
if( ( ( v_superscript != null ) || ( v_subscript != null ) ) ) {
result_element_append( v_mmultiscripts , ( ( v_subscript != null ) ? v_subscript : result_element( "none" ,0) ) );
result_element_append( v_mmultiscripts , ( ( v_superscript != null ) ? v_superscript : result_element( "none" ,0) ) );
}
}
var v_subscript = null ;
var v_superscript = null ;
tokens.index++;
tokens.index++;
if( ( tokens.list[tokens.index] == "_" ) ) {
tokens.index++;
v_subscript = v_piece_to_mathml (tokens ) ;
}
else if( ( tokens.list[tokens.index] == "^" ) ) {
tokens.index++;
v_superscript = v_piece_to_mathml (tokens ) ;
}
if( ( tokens.list[tokens.index] == "_" ) ) {
tokens.index++;
v_subscript = v_piece_to_mathml (tokens ) ;
}
else if( ( tokens.list[tokens.index] == "^" ) ) {
tokens.index++;
v_superscript = v_piece_to_mathml (tokens ) ;
}
result_element_prepend( v_mmultiscripts , ( ( v_subscript != null ) ? v_subscript : result_element( "none" ,0) ) , v_mprescripts );
result_element_prepend( v_mmultiscripts , ( ( v_superscript != null ) ? v_superscript : result_element( "none" ,0) ) , v_mprescripts );
}
if( ( v_mmultiscripts != null ) ) {
v_result = v_mmultiscripts ;
}
else if( ( ( v_subscript != null ) && ( v_superscript != null ) ) ) {
v_result = result_element( ( v_limit_style ? "munderover" : "msubsup" ) ,0 , v_base , v_subscript , v_superscript ) ;
}
else if( ( v_subscript != null ) ) {
v_result = result_element( ( v_limit_style ? "munder" : "msub" ) ,0 , v_base , v_subscript ) ;
}
else if( ( v_superscript != null ) ) {
v_result = result_element( ( v_limit_style ? "mover" : "msup" ) ,0 , v_base , v_superscript ) ;
}
return v_result ;
}
function v_subexpr_chain_to_mathml (tokens , v_stop_tokens ) {
var v_result = null ;
var v_mrow = null ;
var v_mfrac = null ;
var v_wrapped_result = null ;
while( ( ( tokens.list[tokens.index] != null ) && !( ( tokens.list[tokens.index] in v_stop_tokens ) ) ) ) {
if( ( tokens.list[tokens.index] == "\\over" ) ) {
tokens.index++;
v_mfrac = result_element( "mfrac" ,0 , v_result ) ;
v_wrapped_result = v_mfrac ;
v_mrow = null ;
v_result = null ;
}
else if( ( tokens.list[tokens.index] == "\\choose" ) ) {
tokens.index++;
v_mfrac = result_element( "mfrac" , 1
, "linethickness" , "0" , v_result ) ;
v_wrapped_result = result_element( "mrow" ,0 , result_element( "mo" ,0 , "(" ) , v_mfrac , result_element( "mo" ,0 , ")" ) ) ;
v_mrow = null ;
v_result = null ;
}
else {
var v_node = v_collect_precedence_group (tokens , g_relations_precedence_group
, v_stop_tokens , function(tokens , v_stop_tokens ) { return v_collect_precedence_group (tokens , g_addition_precedence_group
, v_stop_tokens , function(tokens , v_stop_tokens ) { return v_collect_precedence_group (tokens , g_multiplication_precedence_group
, v_stop_tokens , v_collect_invisible_group ) ; } ) ; } ) ;
if( ( v_mrow != null ) ) {
result_element_append( v_mrow , v_node );
}
else if( ( v_result != null ) ) {
v_mrow = result_element( "mrow" ,0 , v_result , v_node ) ;
v_result = v_mrow ;
}
else {
v_result = v_node ;
}
}
}
if( ( v_mfrac != null ) ) {
result_element_append( v_mfrac , v_result );
return v_wrapped_result ;
}
else {
return v_result ;
}
}
var g_optional_arg_stop_tokens
= { "&" : null ,
"\\\\" : null ,
"}" : null ,
"$" : null ,
"\\end" : null ,
"\\right" : null ,
"\\bigr" : null ,
"\\Bigr" : null ,
"\\biggr" : null ,
"\\Biggr" : null ,
"\\choose" : null ,
"\\over" : null ,
"]" : null ,
}
;
function v_optional_arg_to_mathml (tokens ) {
if( ( tokens.list[tokens.index] != "[" ) ) {
return null ;
}
tokens.index++;
var v_result = v_subexpr_chain_to_mathml (tokens , g_optional_arg_stop_tokens
) ;
if( ( tokens.list[tokens.index] == "]" ) ) {
tokens.index++;
}
return v_result ;
}
var g_hard_stop_tokens
= { "&" : null ,
"\\\\" : null ,
"}" : null ,
"$" : null ,
"\\end" : null ,
"\\right" : null ,
"\\bigr" : null ,
"\\Bigr" : null ,
"\\biggr" : null ,
"\\Biggr" : null ,
"\\choose" : null ,
"\\over" : null ,
}
;
var g_right_delimiter_stop_tokens
= { "&" : null ,
"\\\\" : null ,
"}" : null ,
"$" : null ,
"\\end" : null ,
"\\right" : null ,
"\\bigr" : null ,
"\\Bigr" : null ,
"\\biggr" : null ,
"\\Biggr" : null ,
"\\choose" : null ,
"\\over" : null ,
")" : ")" ,
"]" : "]" ,
"\\}" : "}" ,
"\\rbrace" : "}" ,
"\\rgroup" : ")" ,
"\\rvert" : "|" ,
"\\rVert" : "\u2016" ,
"\\rceil" : "\u2309" ,
"\\rfloor" : "\u230b" ,
"\\rmoustache" : "\u23b1" ,
"\\rangle" : "\u232a" ,
}
;
function v_heuristic_subexpression (tokens ) {
var v_result = result_element( "mrow" ,0) ;
result_element_append( v_result , v_piece_to_mathml (tokens ) );
result_element_append( v_result , v_subexpr_chain_to_mathml (tokens , g_right_delimiter_stop_tokens
) );
if( ( ( tokens.list[tokens.index] != null ) && !( ( tokens.list[tokens.index] in g_hard_stop_tokens
) ) ) ) {
result_element_append( v_result , v_piece_to_mathml (tokens ) );
}
return v_result ;
}
var g_relations_precedence_group
= g_relation_symbols
;
var g_addition_precedence_group
= { "+" : null ,
"-" : null ,
"\\oplus" : null ,
}
;
var g_multiplication_precedence_group
= { "*" : null ,
"\\times" : null ,
"\\cdot" : null ,
"/" : null ,
}
;
function v_collect_precedence_group (tokens , v_operators , v_stop_tokens , v_reader ) {
var v_result = v_reader (tokens , v_stop_tokens ) ;
var v_mrow = null ;
while( ( ( tokens.list[tokens.index] != null ) && !( ( tokens.list[tokens.index] in v_stop_tokens ) ) && ( tokens.list[tokens.index] in v_operators ) ) ) {
if( ( v_mrow == null ) ) {
v_mrow = result_element( "mrow" ,0 , v_result ) ;
v_result = v_mrow ;
}
result_element_append( v_mrow , v_piece_to_mathml (tokens ) );
if( ( ( tokens.list[tokens.index] != null ) && ( tokens.list[tokens.index] in v_stop_tokens ) ) ) {
return v_result ;
}
else {
result_element_append( v_mrow , v_reader (tokens , v_stop_tokens ) );
}
}
return v_result ;
}
function v_collect_invisible_group (tokens , v_stop_tokens ) {
var v_result = v_subexpr_to_mathml (tokens ) ;
var v_mrow = null ;
while( ( ( tokens.list[tokens.index] != null ) && !( ( tokens.list[tokens.index] in v_stop_tokens ) ) && ( ( tokens.list[tokens.index] in g_named_identifiers
) || ( tokens.list[tokens.index] in g_left_delimiters
) ) ) ) {
if( ( v_mrow == null ) ) {
v_mrow = result_element( "mrow" ,0 , v_result ) ;
v_result = v_mrow ;
}
result_element_append( v_mrow , result_element( "mo" ,0 , "\u2062" ) );
if( ( ( tokens.list[tokens.index] != null ) && ( tokens.list[tokens.index] in v_stop_tokens ) ) ) {
return v_result ;
}
else {
result_element_append( v_mrow , v_subexpr_to_mathml (tokens ) );
}
}
return v_result ;
}
const tokenize_re = /(\\begin|\\operatorname|\\mathrm|\\mathop|\\end)\s*\{\s*([A-Z a-z]+)\s*\}|(\\[a-zA-Z]+|\\[\\#\{\},:;!])|(\s+)|([0-9\.]+)|([\$!"#%&'()*+,-.\/:;<=>?\[\]^_`\{\|\}~])|([a-zA-Z])/g;
const tokenize_text_re = /[\${}\\]|\\[a-zA-Z]+|[^{}\$]+/g;
const tokenize_text_commands = {
'\\textrm': 1,
'\\textsl': 1,
'\\textit': 1,
'\\texttt': 1,
'\\textbf': 1,
'\\textnormal': 1,
'\\text': 1,
'\\hbox': 1,
'\\mbox': 1
};
function tokenize_latex_math(input)
{
var result = new Array();
var in_text_mode = 0;
var brace_level = [];
var pos = 0;
if(input.charAt(0) == '$' &&
input.charAt(input.length-1) == '$')
input = input.slice(1, input.length-1);
while(1) {
if(!in_text_mode) {
tokenize_re.lastIndex = pos;
var m = tokenize_re.exec(input);
pos = tokenize_re.lastIndex;
if(m == null) {
return result;
} else if(m[1] != null) {
result.push(m[1], m[2]);
} else if(m[3] == '\\sp') {
result.push('^');
} else if(m[3] == '\\sb') {
result.push('_');
} else {
if(m[0] == '$') {
in_text_mode = 1;
} else if(m[4] != null) {
continue;
} else if(m[3] != null && m[3] in tokenize_text_commands) {
in_text_mode = 2;
brace_level.push(0);
}
result.push(m[0]);
}
} else {
tokenize_text_re.lastIndex = pos;
var m = tokenize_text_re.exec(input);
pos = tokenize_text_re.lastIndex;
if(m == null) {
return result;
} else if(m[0] == '$') {
in_text_mode = 0;
} else if(m[0] == '{') {
brace_level[brace_level.length-1]++;
} else if(m[0] == '}') {
if(--brace_level[brace_level.length-1] <= 0) {
in_text_mode = 0;
brace_level.pop();
}
}
result.push(m[0]);
}
}
}
function post_process_mathml(event)
{
var url = GM_getValue('click-post-url', null);
if(url == null)
return;
var ser = new XMLSerializer();
var xhr = GM_xmlhttpRequest({
method: 'POST',
url: url,
headers: { 'Content-Type': 'text/xml; charset=utf-8',
'Content-Location': document.location },
data: ser.serializeToString(event.currentTarget),
onerror: function(details) {
alert("There was an error processing the request. " +
"HTTP status code " + details.status + ' ' + details.statusText);
},
onload: function(details) {
window.status = "Successfully posted MathML. Status: "
+ details.status + ' ' + details.statusText;
}});
window.status = "Posting MathML to " + url + "...";
}
function patch_img(node)
{
if(node.currentTarget)
node = node.currentTarget;
var alt = node.getAttribute('alt');
if(alt == null ||
/^\\includegraphics|^\$\\displaystyle \\xymatrix/.test(alt))
return;
var latex_string = null;
if((node.parentNode.tagName == 'DIV' &&
node.parentNode.getAttribute('CLASS') == 'mathdisplay')
|| (node.parentNode.tagName == 'SPAN' &&
node.parentNode.getAttribute('CLASS') == 'MATH'))
{
var parent = node.parentNode;
var previous = parent.previousSibling;
const non_whitespace = /[^\s]/;
if(previous &&
previous.nodeType == node.TEXT_NODE &&
!non_whitespace.test(previous.data))
previous = previous.previousSibling;
if(previous &&
previous.nodeType == node.ELEMENT_NODE &&
previous.tagName == 'P' &&
previous.lastChild)
{
previous = previous.lastChild;
if(previous &&
previous.nodeType == node.TEXT_NODE &&
!non_whitespace.test(previous.data))
previous = previous.previousSibling;
}
if(previous &&
previous.nodeType == node.COMMENT_NODE) {
latex_string = previous.data.replace(/^\s*MATH\s*/, '')
.replace(/\s+$/, '');
}
}
if(!latex_string && /^\$.+\$$/.test(alt)
&& !(/\.{3} \.{3}/.test(alt)))
{
latex_string = alt;
}
if(latex_string == null)
return;
tokens = new Object();
tokens.list = tokenize_latex_math(latex_string);
tokens.list.push(null);
tokens.index = 0;
var mathml = null;
try {
var mrow = v_subexpr_chain_to_mathml(tokens, {});
fix_mathvariant(mrow, null);
mathml = document.createElementNS(mmlns, 'math');
mathml.setAttribute("latex", latex_string);
mathml.setAttribute("mathvariant", "normal");
mathml.appendChild(mrow);
mathml.addEventListener("click", post_process_mathml, false);
} catch(e) {
GM_log("Display LaTeX failed with error " + e + " on " + latex_string);
}
if(mathml == null)
return;
node.parentNode.replaceChild(mathml, node);
}
function patch_text(node0)
{
var text = node0.nodeValue;
var results = /\$[^$]+\$|\[tex\](.+?)\[\/tex\]/.exec(text);
if(results) {
var latex_string = (results[1] == null ? results[0] : '$'+results[1]+'$');
tokens = new Object();
tokens.list = tokenize_latex_math(latex_string);
tokens.list.push(null);
tokens.index = 0;
var mathml = null;
try {
var mrow = v_subexpr_chain_to_mathml(tokens, {});
fix_mathvariant(mrow, null);
mathml = document.createElementNS(mmlns, 'math');
mathml.setAttribute("latex", latex_string);
mathml.setAttribute("mathvariant", "normal");
mathml.appendChild(mrow);
mathml.addEventListener("click", post_process_mathml, false);
} catch(e) {
GM_log("Display LaTeX failed with error " + e + " on " + latex_string);
}
if(mathml == null)
return;
var node2 = node0.splitText(results.index);
node2.deleteData(0, results[0].length);
node2.parentNode.insertBefore(mathml, node2);
patch_text(node2);
}
}
function patch_element(node)
{
if(node.nodeType == node.TEXT_NODE)
patch_text(node);
else if(node.nodeType == node.ELEMENT_NODE) { if(node.tagName == 'TEXTAREA' || node.tagName == 'textarea' ||
node.tagName == 'INPUT' || node.tagName == 'input' ||
node.tagName == 'SCRIPT' || node.tagName == 'script')
return;
if(do_patch_images && (node.tagName == 'IMG' || node.tagName == 'img')) {
if(!delayed_patch)
patch_img(node);
else
node.addEventListener("click", patch_img, false);
return;
}
var child = node.firstChild;
while(child) {
var next = child.nextSibling;
patch_element(child);
child = next;
}
}
}
var do_patch_images = GM_getValue("patch-images", false);
var delayed_patch = GM_getValue("delayed-patch", false);
patch_element(document.documentElement);
}