mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-14 09:18:09 +00:00
checkpoint
This commit is contained in:
@@ -20,7 +20,6 @@ target:
|
||||
{
|
||||
executable: "build/mule_main.exe"
|
||||
working_directory: build
|
||||
output_label: output_a
|
||||
}
|
||||
target:
|
||||
{
|
||||
|
||||
+198
-198
@@ -948,302 +948,302 @@ RD_RegTable:
|
||||
////////////////////////////////
|
||||
//~ rjf: Command Table
|
||||
|
||||
@table(name ui_vis ipc_docs_vis q_expr q_slot q_allow_files q_allow_folders q_keep_oi q_select_oi q_is_code q_floating q_required canonical_icon string display_name desc search_tags filter_tags)
|
||||
// / | | | \___ _________________________________________________/ | | | | | |
|
||||
// / | | | \ / | | | | | |
|
||||
RD_CmdTable: // | | | | | | | | | | |
|
||||
@table(name foo ui_vis ipc_docs_vis q_expr q_slot q_allow_files q_allow_folders q_keep_oi q_select_oi q_is_code q_floating q_required canonical_icon string display_name desc search_tags filter_tags)
|
||||
// / | | | | \___ _________________________________________________/ | | | | | |
|
||||
// / | | | | \ / | | | | | |
|
||||
RD_CmdTable: // | | | | | | | | | | | |
|
||||
{
|
||||
//- rjf: exiting
|
||||
{Exit 1 1 "" Null 0 0 0 0 0 0 0 X "exit" "Exit" "Exits the debugger." "quit,close,abort" "" }
|
||||
{Exit 0 1 1 "" Null 0 0 0 0 0 0 0 X "exit" "Exit" "Exits the debugger." "quit,close,abort" "" }
|
||||
|
||||
//- rjf: palette
|
||||
{OpenPalette 1 1 "" Null 0 0 0 0 0 0 0 List "open_palette" "Open Palette" "Opens the palette." "help,cmd,lister" "" }
|
||||
{OpenPalette 0 1 1 "" Null 0 0 0 0 0 0 0 List "open_palette" "Open Palette" "Opens the palette." "help,cmd,lister" "" }
|
||||
|
||||
//- rjf: command fast-path
|
||||
{RunCommand 0 0 "query:commands" CmdName 0 0 0 0 0 1 1 Null "run_command" "Run Command" "Runs a command from the command palette." "help,cmd" "" }
|
||||
{RunCommand 0 0 0 "query:commands" CmdName 0 0 0 0 0 1 1 Null "run_command" "Run Command" "Runs a command from the command palette." "help,cmd" "" }
|
||||
|
||||
//- rjf: external drivers
|
||||
{RunExternalDriverTextCommand 0 0 "" Null 0 0 0 0 0 0 0 Null "run_ext_driver_text_command" "Run External Driver Text Command" "" "" "" }
|
||||
{State 0 1 "" Null 0 0 0 0 0 0 0 Null "state" "State" "" "" "" }
|
||||
{Eval 0 1 "" Expr 0 0 0 0 0 0 0 Null "eval" "Eval" "" "" "" }
|
||||
{LineFromVAddr 0 1 "" Vaddr 0 0 0 0 0 0 0 Null "line_from_vaddr" "Line From Virtual Address" "" "" "" }
|
||||
{RunExternalDriverTextCommand 0 0 0 "" Null 0 0 0 0 0 0 0 Null "run_ext_driver_text_command" "Run External Driver Text Command" "" "" "" }
|
||||
{State 0 0 1 "" Null 0 0 0 0 0 0 0 Null "state" "State" "" "" "" }
|
||||
{Eval 0 0 1 "" Expr 0 0 0 0 0 0 0 Null "eval" "Eval" "" "" "" }
|
||||
{LineFromVAddr 0 0 1 "" Vaddr 0 0 0 0 0 0 0 Null "line_from_vaddr" "Line From Virtual Address" "" "" "" }
|
||||
|
||||
//- rjf: os event passthrough
|
||||
{WMEvent 0 0 "" Null 0 0 0 0 0 0 0 Null "wm_event" "OS Event" "" "" "" }
|
||||
{WMEvent 0 0 0 "" Null 0 0 0 0 0 0 0 Null "wm_event" "OS Event" "" "" "" }
|
||||
|
||||
//- rjf: thread/frame selection
|
||||
{SelectThread 1 1 "query:threads" Thread 0 0 0 0 0 1 1 Thread "select_thread" "Select Thread" "Selects a thread." "" "" }
|
||||
{SelectUnwind 0 1 "query:call_stack" Null 0 0 0 0 0 0 0 Null "select_unwind" "Select Unwind" "Selects an unwind frame number for the selected thread." "" "" }
|
||||
{UpOneFrame 1 1 "" Null 0 0 0 0 0 0 0 UpArrow "up_one_frame" "Up One Frame" "Selects the call stack frame above the currently selected." "" "" }
|
||||
{DownOneFrame 1 1 "" Null 0 0 0 0 0 0 0 DownArrow "down_one_frame" "Down One Frame" "Selects the call stack frame below the currently selected." "callstack,unwind" "" }
|
||||
{SelectEntity 0 0 "" Null 0 0 0 0 0 0 0 RadioHollow "select_entity" "Select" "Selects a control entity." "" "" }
|
||||
{DeselectEntity 0 0 "" Null 0 0 0 0 0 0 0 RadioFilled "deselect_entity" "Deselect" "Deselects a control entity." "" "" }
|
||||
{SelectThread 0 1 1 "query:threads" Thread 0 0 0 0 0 1 1 Thread "select_thread" "Select Thread" "Selects a thread." "" "" }
|
||||
{SelectUnwind 0 0 1 "query:call_stack" Null 0 0 0 0 0 0 0 Null "select_unwind" "Select Unwind" "Selects an unwind frame number for the selected thread." "" "" }
|
||||
{UpOneFrame 0 1 1 "" Null 0 0 0 0 0 0 0 UpArrow "up_one_frame" "Up One Frame" "Selects the call stack frame above the currently selected." "" "" }
|
||||
{DownOneFrame 0 1 1 "" Null 0 0 0 0 0 0 0 DownArrow "down_one_frame" "Down One Frame" "Selects the call stack frame below the currently selected." "callstack,unwind" "" }
|
||||
{SelectEntity 0 0 0 "" Null 0 0 0 0 0 0 0 RadioHollow "select_entity" "Select" "Selects a control entity." "" "" }
|
||||
{DeselectEntity 0 0 0 "" Null 0 0 0 0 0 0 0 RadioFilled "deselect_entity" "Deselect" "Deselects a control entity." "" "" }
|
||||
|
||||
//- rjf: font sizes
|
||||
{IncWindowFontSize 1 1 "" Null 0 0 0 0 0 0 0 Null "inc_window_font_size" "Increase Window Font Size" "Increases the window's font size by one point." "" "" }
|
||||
{DecWindowFontSize 1 1 "" Null 0 0 0 0 0 0 0 Null "dec_window_font_size" "Decrease Window Font Size" "Decreases the window's font size by one point." "" "" }
|
||||
{IncViewFontSize 1 1 "" Null 0 0 0 0 0 0 0 Null "inc_view_font_size" "Increase View Font Size" "Increases the view's font size by one point." "" "" }
|
||||
{DecViewFontSize 1 1 "" Null 0 0 0 0 0 0 0 Null "dec_view_font_size" "Decrease View Font Size" "Decreases the view's font size by one point." "" "" }
|
||||
{IncWindowFontSize 0 1 1 "" Null 0 0 0 0 0 0 0 Null "inc_window_font_size" "Increase Window Font Size" "Increases the window's font size by one point." "" "" }
|
||||
{DecWindowFontSize 0 1 1 "" Null 0 0 0 0 0 0 0 Null "dec_window_font_size" "Decrease Window Font Size" "Decreases the window's font size by one point." "" "" }
|
||||
{IncViewFontSize 0 1 1 "" Null 0 0 0 0 0 0 0 Null "inc_view_font_size" "Increase View Font Size" "Increases the view's font size by one point." "" "" }
|
||||
{DecViewFontSize 0 1 1 "" Null 0 0 0 0 0 0 0 Null "dec_view_font_size" "Decrease View Font Size" "Decreases the view's font size by one point." "" "" }
|
||||
|
||||
//- rjf: windows
|
||||
{OpenWindow 1 1 "" Null 0 0 0 0 0 0 0 Window "open_window" "Open New Window" "Opens a new window." "" "" }
|
||||
{WindowSettings 1 1 "" Null 0 0 0 0 0 0 0 Gear "window_settings" "Window Settings" "Opens settings for a window." "" "" }
|
||||
{CloseWindow 1 1 "" Null 0 0 0 0 0 0 0 Window "close_window" "Close Window" "Closes an opened window." "" "" }
|
||||
{ToggleFullscreen 1 1 "" Null 0 0 0 0 0 0 0 Window "toggle_fullscreen" "Toggle Fullscreen" "Toggles fullscreen view on the active window." "" "" }
|
||||
{BringToFront 0 1 "" Null 0 0 0 0 0 0 0 Window "bring_to_front" "Bring To Front" "Brings all windows to the front, and focuses the most recently focused window." "top" "" }
|
||||
{OpenWindow 0 1 1 "" Null 0 0 0 0 0 0 0 Window "open_window" "Open New Window" "Opens a new window." "" "" }
|
||||
{WindowSettings 0 1 1 "" Null 0 0 0 0 0 0 0 Gear "window_settings" "Window Settings" "Opens settings for a window." "" "" }
|
||||
{CloseWindow 0 1 1 "" Null 0 0 0 0 0 0 0 Window "close_window" "Close Window" "Closes an opened window." "" "" }
|
||||
{ToggleFullscreen 0 1 1 "" Null 0 0 0 0 0 0 0 Window "toggle_fullscreen" "Toggle Fullscreen" "Toggles fullscreen view on the active window." "" "" }
|
||||
{BringToFront 0 0 1 "" Null 0 0 0 0 0 0 0 Window "bring_to_front" "Bring To Front" "Brings all windows to the front, and focuses the most recently focused window." "top" "" }
|
||||
|
||||
//- rjf: popups
|
||||
{PopupAccept 0 1 "" Null 0 0 0 0 0 0 0 Null "popup_accept" "Popup Accept" "Accepts the active popup prompt." "" "" }
|
||||
{PopupCancel 0 1 "" Null 0 0 0 0 0 0 0 Null "popup_cancel" "Popup Cancel" "Cancels the active popup prompt." "" "" }
|
||||
{PopupAccept 0 0 1 "" Null 0 0 0 0 0 0 0 Null "popup_accept" "Popup Accept" "Accepts the active popup prompt." "" "" }
|
||||
{PopupCancel 0 0 1 "" Null 0 0 0 0 0 0 0 Null "popup_cancel" "Popup Cancel" "Cancels the active popup prompt." "" "" }
|
||||
|
||||
//- rjf: keybindings
|
||||
{ResetToDefaultBindings 1 1 "" Null 0 0 0 0 0 0 0 Null "reset_to_default_bindings" "Reset To Default Bindings" "Resets all keybindings to their defaults." "" "" }
|
||||
{ResetToDefaultBindings 0 1 1 "" Null 0 0 0 0 0 0 0 Null "reset_to_default_bindings" "Reset To Default Bindings" "Resets all keybindings to their defaults." "" "" }
|
||||
|
||||
//- rjf: panel splitting
|
||||
{ResetToDefaultPanels 1 1 "" Null 0 0 0 0 0 0 0 Window "reset_to_default_panels" "Reset To Default Panel Layout" "Resets the window to the default panel layout." "panel" "" }
|
||||
{ResetToCompactPanels 1 1 "" Null 0 0 0 0 0 0 0 Window "reset_to_compact_panels" "Reset To Compact Panel Layout" "Resets the window to the compact panel layout." "panel" "" }
|
||||
{ResetToSimplePanels 1 1 "" Null 0 0 0 0 0 0 0 Window "reset_to_simple_panels" "Reset To Simple Panel Layout" "Resets the window to the simple panel layout." "panel" "" }
|
||||
{NewPanelLeft 1 1 "" Null 0 0 0 0 0 0 0 XSplit "new_panel_left" "Split Panel Left" "Creates a new panel to the left of the active panel." "panel" "" }
|
||||
{NewPanelUp 1 1 "" Null 0 0 0 0 0 0 0 YSplit "new_panel_up" "Split Panel Up" "Creates a new panel at the top of the active panel." "panel" "" }
|
||||
{NewPanelRight 1 1 "" Null 0 0 0 0 0 0 0 XSplit "new_panel_right" "Split Panel Right" "Creates a new panel to the right of the active panel." "panel" "" }
|
||||
{NewPanelDown 1 1 "" Null 0 0 0 0 0 0 0 YSplit "new_panel_down" "Split Panel Down" "Creates a new panel at the bottom of the active panel." "panel" "" }
|
||||
{SplitPanel 0 0 "" Null 0 0 0 0 0 0 0 Null "split_panel" "Split Panel" "Creates a new panel in a given direction, and moves a tab to it, if specified." "" "" }
|
||||
{ResetToDefaultPanels 0 1 1 "" Null 0 0 0 0 0 0 0 Window "reset_to_default_panels" "Reset To Default Panel Layout" "Resets the window to the default panel layout." "panel" "" }
|
||||
{ResetToCompactPanels 0 1 1 "" Null 0 0 0 0 0 0 0 Window "reset_to_compact_panels" "Reset To Compact Panel Layout" "Resets the window to the compact panel layout." "panel" "" }
|
||||
{ResetToSimplePanels 0 1 1 "" Null 0 0 0 0 0 0 0 Window "reset_to_simple_panels" "Reset To Simple Panel Layout" "Resets the window to the simple panel layout." "panel" "" }
|
||||
{NewPanelLeft 0 1 1 "" Null 0 0 0 0 0 0 0 XSplit "new_panel_left" "Split Panel Left" "Creates a new panel to the left of the active panel." "panel" "" }
|
||||
{NewPanelUp 0 1 1 "" Null 0 0 0 0 0 0 0 YSplit "new_panel_up" "Split Panel Up" "Creates a new panel at the top of the active panel." "panel" "" }
|
||||
{NewPanelRight 0 1 1 "" Null 0 0 0 0 0 0 0 XSplit "new_panel_right" "Split Panel Right" "Creates a new panel to the right of the active panel." "panel" "" }
|
||||
{NewPanelDown 0 1 1 "" Null 0 0 0 0 0 0 0 YSplit "new_panel_down" "Split Panel Down" "Creates a new panel at the bottom of the active panel." "panel" "" }
|
||||
{SplitPanel 0 0 0 "" Null 0 0 0 0 0 0 0 Null "split_panel" "Split Panel" "Creates a new panel in a given direction, and moves a tab to it, if specified." "" "" }
|
||||
|
||||
//- rjf: panel rotation
|
||||
{RotatePanelColumns 1 1 "" Null 0 0 0 0 0 0 0 Null "rotate_panel_columns" "Rotate Panel Columns" "Rotates all panels at the closest column level of the panel hierarchy." "" "" }
|
||||
{RotatePanelColumns 0 1 1 "" Null 0 0 0 0 0 0 0 Null "rotate_panel_columns" "Rotate Panel Columns" "Rotates all panels at the closest column level of the panel hierarchy." "" "" }
|
||||
|
||||
//- rjf: focused panel changing
|
||||
{NextPanel 1 1 "" Null 0 0 0 0 0 0 0 RightArrow "next_panel" "Focus Next Panel" "Cycles the active panel forward." "" "" }
|
||||
{PrevPanel 1 1 "" Null 0 0 0 0 0 0 0 LeftArrow "prev_panel" "Focus Previous Panel" "Cycles the active panel backwards." "" "" }
|
||||
{FocusPanel 0 0 "" Null 0 0 0 0 0 0 0 Null "focus_panel" "Focus Panel" "Focuses a new panel." "" "" }
|
||||
{FocusPanelRight 1 1 "" Null 0 0 0 0 0 0 0 RightArrow "focus_panel_right" "Focus Panel Right" "Focuses a panel rightward of the currently focused panel." "" "" }
|
||||
{FocusPanelLeft 1 1 "" Null 0 0 0 0 0 0 0 LeftArrow "focus_panel_left" "Focus Panel Left" "Focuses a panel leftward of the currently focused panel." "" "" }
|
||||
{FocusPanelUp 1 1 "" Null 0 0 0 0 0 0 0 UpArrow "focus_panel_up" "Focus Panel Up" "Focuses a panel upward of the currently focused panel." "" "" }
|
||||
{FocusPanelDown 1 1 "" Null 0 0 0 0 0 0 0 DownArrow "focus_panel_down" "Focus Panel Down" "Focuses a panel downward of the currently focused panel." "" "" }
|
||||
{NextPanel 0 1 1 "" Null 0 0 0 0 0 0 0 RightArrow "next_panel" "Focus Next Panel" "Cycles the active panel forward." "" "" }
|
||||
{PrevPanel 0 1 1 "" Null 0 0 0 0 0 0 0 LeftArrow "prev_panel" "Focus Previous Panel" "Cycles the active panel backwards." "" "" }
|
||||
{FocusPanel 0 0 0 "" Null 0 0 0 0 0 0 0 Null "focus_panel" "Focus Panel" "Focuses a new panel." "" "" }
|
||||
{FocusPanelRight 0 1 1 "" Null 0 0 0 0 0 0 0 RightArrow "focus_panel_right" "Focus Panel Right" "Focuses a panel rightward of the currently focused panel." "" "" }
|
||||
{FocusPanelLeft 0 1 1 "" Null 0 0 0 0 0 0 0 LeftArrow "focus_panel_left" "Focus Panel Left" "Focuses a panel leftward of the currently focused panel." "" "" }
|
||||
{FocusPanelUp 0 1 1 "" Null 0 0 0 0 0 0 0 UpArrow "focus_panel_up" "Focus Panel Up" "Focuses a panel upward of the currently focused panel." "" "" }
|
||||
{FocusPanelDown 0 1 1 "" Null 0 0 0 0 0 0 0 DownArrow "focus_panel_down" "Focus Panel Down" "Focuses a panel downward of the currently focused panel." "" "" }
|
||||
|
||||
//- rjf: undo/redo
|
||||
{Undo 0 0 "" Null 0 0 0 0 0 0 0 Undo "undo" "Undo" "Undoes the previous action." "" "" }
|
||||
{Redo 0 0 "" Null 0 0 0 0 0 0 0 Redo "redo" "Redo" "Redoes the first previously undone action." "" "" }
|
||||
{Undo 0 0 0 "" Null 0 0 0 0 0 0 0 Undo "undo" "Undo" "Undoes the previous action." "" "" }
|
||||
{Redo 0 0 0 "" Null 0 0 0 0 0 0 0 Redo "redo" "Redo" "Redoes the first previously undone action." "" "" }
|
||||
|
||||
//- rjf: focus history
|
||||
{GoBack 0 0 "" Null 0 0 0 0 0 0 0 LeftArrow "go_back" "Go Back" "Returns to the previously selected panel and tab in recorded history." "" "" }
|
||||
{GoForward 0 0 "" Null 0 0 0 0 0 0 0 RightArrow "go_forward" "Go Forward" "Returns to the next selected panel and tab in recorded history." "" "" }
|
||||
{GoBack 0 0 0 "" Null 0 0 0 0 0 0 0 LeftArrow "go_back" "Go Back" "Returns to the previously selected panel and tab in recorded history." "" "" }
|
||||
{GoForward 0 0 0 "" Null 0 0 0 0 0 0 0 RightArrow "go_forward" "Go Forward" "Returns to the next selected panel and tab in recorded history." "" "" }
|
||||
|
||||
//- rjf: panel removal
|
||||
{ClosePanel 1 1 "" Null 0 0 0 0 0 0 0 ClosePanel "close_panel" "Close Panel" "Closes the currently active panel." "" "" }
|
||||
{ClosePanel 0 1 1 "" Null 0 0 0 0 0 0 0 ClosePanel "close_panel" "Close Panel" "Closes the currently active panel." "" "" }
|
||||
|
||||
//- rjf: panel tab
|
||||
{FocusTab 0 0 "" Null 0 0 0 0 0 0 0 Null "focus_tab" "Focus Tab" "Focuses the passed tab within its containing panel." "" "" }
|
||||
{NextTab 1 1 "" Null 0 0 0 0 0 0 0 RightArrow "next_tab" "Focus Next Tab" "Focuses the next tab on the active panel." "" "" }
|
||||
{PrevTab 1 1 "" Null 0 0 0 0 0 0 0 LeftArrow "prev_tab" "Focus Previous Tab" "Focuses the previous tab on the active panel." "" "" }
|
||||
{MoveTabRight 1 1 "" Null 0 0 0 0 0 0 0 RightArrow "move_tab_right" "Move Tab Right" "Moves the selected tab right one slot." "" "" }
|
||||
{MoveTabLeft 1 1 "" Null 0 0 0 0 0 0 0 LeftArrow "move_tab_left" "Move Tab Left" "Moves the selected tab left one slot." "" "" }
|
||||
{OpenTab 1 1 "query:tab_commands" CmdName 0 0 0 0 0 1 1 Null "open_tab" "Open New Tab" "Opens a new tab." "" "" }
|
||||
{BuildTab 0 0 "" Null 0 0 0 0 0 0 0 Null "build_tab" "Build Tab" "Opens a new tab with the parameterized view specification." "" "" }
|
||||
{DuplicateTab 1 1 "" Tab 0 0 0 0 0 0 0 Duplicate "duplicate_tab" "Duplicate Tab" "Duplicates a tab." "" "" }
|
||||
{CopyTabFullPath 0 0 "" Tab 0 0 0 0 0 0 0 Clipboard "copy_tab_full_path" "Copy Full Path" "Copies the full path of the file being viewed by this tab." "" "" }
|
||||
{CloseTab 1 1 "" Tab 0 0 0 0 0 0 0 X "close_tab" "Close Tab" "Closes the currently opened tab." "" "" }
|
||||
{MoveView 0 0 "" Null 0 0 0 0 0 0 0 Null "move_view" "Move View" "Moves a view to a new panel." "" "" }
|
||||
{TabBarTop 1 1 "" Null 0 0 0 0 0 0 0 UpArrow "tab_bar_top" "Anchor Tab Bar To Top" "Anchors a panel's tab bar to the top of the panel." "" "" }
|
||||
{TabBarBottom 1 1 "" Null 0 0 0 0 0 0 0 DownArrow "tab_bar_bottom" "Anchor Tab Bar To Bottom" "Anchors a panel's tab bar to the bottom of the panel." "" "" }
|
||||
{TabSettings 1 1 "" Null 0 0 0 0 0 0 0 Gear "tab_settings" "Selected Tab Settings" "Opens settings for a tab." "view,options" "" }
|
||||
{FocusTab 0 0 0 "" Null 0 0 0 0 0 0 0 Null "focus_tab" "Focus Tab" "Focuses the passed tab within its containing panel." "" "" }
|
||||
{NextTab 0 1 1 "" Null 0 0 0 0 0 0 0 RightArrow "next_tab" "Focus Next Tab" "Focuses the next tab on the active panel." "" "" }
|
||||
{PrevTab 0 1 1 "" Null 0 0 0 0 0 0 0 LeftArrow "prev_tab" "Focus Previous Tab" "Focuses the previous tab on the active panel." "" "" }
|
||||
{MoveTabRight 0 1 1 "" Null 0 0 0 0 0 0 0 RightArrow "move_tab_right" "Move Tab Right" "Moves the selected tab right one slot." "" "" }
|
||||
{MoveTabLeft 0 1 1 "" Null 0 0 0 0 0 0 0 LeftArrow "move_tab_left" "Move Tab Left" "Moves the selected tab left one slot." "" "" }
|
||||
{OpenTab 0 1 1 "query:tab_commands" CmdName 0 0 0 0 0 1 1 Null "open_tab" "Open New Tab" "Opens a new tab." "" "" }
|
||||
{BuildTab 0 0 0 "" Null 0 0 0 0 0 0 0 Null "build_tab" "Build Tab" "Opens a new tab with the parameterized view specification." "" "" }
|
||||
{DuplicateTab 0 1 1 "" Tab 0 0 0 0 0 0 0 Duplicate "duplicate_tab" "Duplicate Tab" "Duplicates a tab." "" "" }
|
||||
{CopyTabFullPath 0 0 0 "" Tab 0 0 0 0 0 0 0 Clipboard "copy_tab_full_path" "Copy Full Path" "Copies the full path of the file being viewed by this tab." "" "" }
|
||||
{CloseTab 0 1 1 "" Tab 0 0 0 0 0 0 0 X "close_tab" "Close Tab" "Closes the currently opened tab." "" "" }
|
||||
{MoveView 0 0 0 "" Null 0 0 0 0 0 0 0 Null "move_view" "Move View" "Moves a view to a new panel." "" "" }
|
||||
{TabBarTop 0 1 1 "" Null 0 0 0 0 0 0 0 UpArrow "tab_bar_top" "Anchor Tab Bar To Top" "Anchors a panel's tab bar to the top of the panel." "" "" }
|
||||
{TabBarBottom 0 1 1 "" Null 0 0 0 0 0 0 0 DownArrow "tab_bar_bottom" "Anchor Tab Bar To Bottom" "Anchors a panel's tab bar to the bottom of the panel." "" "" }
|
||||
{TabSettings 0 1 1 "" Null 0 0 0 0 0 0 0 Gear "tab_settings" "Selected Tab Settings" "Opens settings for a tab." "view,options" "" }
|
||||
|
||||
//- rjf: files
|
||||
{SetCurrentPath 0 1 "" Null 0 0 0 0 0 0 0 FileOutline "set_current_path" "Set Current Path" "Sets the debugger's current path, which is used as a starting point when browsing for files." "" "" }
|
||||
{Open 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 FileOutline "open" "Open" "Opens a file." "code,source,file" "" }
|
||||
{OpenSourceFileFromDebugInfo 1 0 "query:source_files" Cfg 0 0 0 0 0 1 1 FileOutline "open_source_file_from_debug_info" "Open Source File From Debug Info" "Opens a source file found within loaded debug info." "code,source,file" "{tab_commands}" }
|
||||
{SwitchToPartnerFile 1 1 "" Null 0 0 0 0 0 0 0 FileOutline "switch_to_partner_file" "Switch To Partner File" "Switches to the focused file's partner; or from header to implementation or vice versa." "code,source,file" "" }
|
||||
{ShowFileInExplorer 1 1 "" Null 0 0 0 0 0 0 0 FolderClosedFilled "show_file_in_explorer" "Show File In Explorer" "Opens the operating system's file explorer and shows the selected file." "" "" }
|
||||
{SetCurrentPath 0 0 1 "" Null 0 0 0 0 0 0 0 FileOutline "set_current_path" "Set Current Path" "Sets the debugger's current path, which is used as a starting point when browsing for files." "" "" }
|
||||
{Open 0 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 FileOutline "open" "Open" "Opens a file." "code,source,file" "" }
|
||||
{OpenSourceFileFromDebugInfo 0 1 0 "query:source_files" Cfg 0 0 0 0 0 1 1 FileOutline "open_source_file_from_debug_info" "Open Source File From Debug Info" "Opens a source file found within loaded debug info." "code,source,file" "{tab_commands}" }
|
||||
{SwitchToPartnerFile 0 1 1 "" Null 0 0 0 0 0 0 0 FileOutline "switch_to_partner_file" "Switch To Partner File" "Switches to the focused file's partner; or from header to implementation or vice versa." "code,source,file" "" }
|
||||
{ShowFileInExplorer 0 1 1 "" Null 0 0 0 0 0 0 0 FolderClosedFilled "show_file_in_explorer" "Show File In Explorer" "Opens the operating system's file explorer and shows the selected file." "" "" }
|
||||
|
||||
//- rjf: source <-> disasm
|
||||
{GoToDisassembly 1 1 "" Null 0 0 0 0 0 0 0 Glasses "go_to_disassembly" "Go To Disassembly" "Goes to the disassembly, if any, for a given source code line." "code,source,disassembly,disasm" "{text_pt_commands}" }
|
||||
{GoToSource 1 1 "" Null 0 0 0 0 0 0 0 FileOutline "go_to_source" "Go To Source" "Goes to the source code, if any, for a given disassembly line." "code,source,disassembly,disasm" "{disasm_pt_commands}" }
|
||||
{GoToDisassembly 0 1 1 "" Null 0 0 0 0 0 0 0 Glasses "go_to_disassembly" "Go To Disassembly" "Goes to the disassembly, if any, for a given source code line." "code,source,disassembly,disasm" "{text_pt_commands}" }
|
||||
{GoToSource 0 1 1 "" Null 0 0 0 0 0 0 0 FileOutline "go_to_source" "Go To Source" "Goes to the source code, if any, for a given disassembly line." "code,source,disassembly,disasm" "{disasm_pt_commands}" }
|
||||
|
||||
//- rjf: override file links
|
||||
{SetFileReplacementPath 0 0 "" Null 0 0 0 0 0 0 0 Null "set_file_replacement_path" "Set File Replacement Path" "Sets the path which should be used as the replacement for the passed file." "" "" }
|
||||
{SetFileReplacementPath 0 0 0 "" Null 0 0 0 0 0 0 0 Null "set_file_replacement_path" "Set File Replacement Path" "Sets the path which should be used as the replacement for the passed file." "" "" }
|
||||
|
||||
//- rjf: setting config paths
|
||||
{NewUser 1 1 "" Null 1 0 0 0 0 1 0 Add "new_user" "New User" "Creates a new user file, and sets the current user path as that file's path." "new,user,project,layout" "" }
|
||||
{NewProject 1 1 "" Null 1 0 0 0 0 1 0 Add "new_project" "New Project" "Creates a new project file, and sets the current project path as that file's path." "new,user,project,layout" "" }
|
||||
{OpenUser 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 Person "open_user" "Open User" "Opens a user file path, immediately loading it, and begins autosaving to it." "load,user,project,layout" "" }
|
||||
{OpenProject 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 Briefcase "open_project" "Open Project" "Opens a project file path, immediately loading it, and begins autosaving to it." "project,project,session" "" }
|
||||
{OpenRecentProject 1 1 "query:recent_projects" Cfg 0 0 0 0 0 1 1 Briefcase "open_recent_project" "Open Recent Project" "Opens a recently used project file." "project,project,session" "" }
|
||||
{SaveUser 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 Save "save_user" "Save User" "Saves user data to a file, and sets the current user path as that path." "load,user,project,layout" "" }
|
||||
{SaveProject 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 Save "save_project" "Save Project" "Saves project data to a file, and sets the current project path as that path." "project,project,session" "" }
|
||||
{RecordUserAsLastOpened 0 0 "" Null 0 0 0 0 0 0 0 Null "record_user_as_last_opened" "Record User As Last Opened" "Records a file path as the last opened user." "" "" }
|
||||
{RecordProjectInUser 0 0 "" Null 0 0 0 0 0 0 0 Null "record_project_in_user" "Records Project In User" "Records a file path as a recent project in user data." "" "" }
|
||||
{NewUser 0 1 1 "" Null 1 0 0 0 0 1 0 Add "new_user" "New User" "Creates a new user file, and sets the current user path as that file's path." "new,user,project,layout" "" }
|
||||
{NewProject 0 1 1 "" Null 1 0 0 0 0 1 0 Add "new_project" "New Project" "Creates a new project file, and sets the current project path as that file's path." "new,user,project,layout" "" }
|
||||
{OpenUser 0 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 Person "open_user" "Open User" "Opens a user file path, immediately loading it, and begins autosaving to it." "load,user,project,layout" "" }
|
||||
{OpenProject 0 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 Briefcase "open_project" "Open Project" "Opens a project file path, immediately loading it, and begins autosaving to it." "project,project,session" "" }
|
||||
{OpenRecentProject 0 1 1 "query:recent_projects" Cfg 0 0 0 0 0 1 1 Briefcase "open_recent_project" "Open Recent Project" "Opens a recently used project file." "project,project,session" "" }
|
||||
{SaveUser 0 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 Save "save_user" "Save User" "Saves user data to a file, and sets the current user path as that path." "load,user,project,layout" "" }
|
||||
{SaveProject 0 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 Save "save_project" "Save Project" "Saves project data to a file, and sets the current project path as that path." "project,project,session" "" }
|
||||
{RecordUserAsLastOpened 0 0 0 "" Null 0 0 0 0 0 0 0 Null "record_user_as_last_opened" "Record User As Last Opened" "Records a file path as the last opened user." "" "" }
|
||||
{RecordProjectInUser 0 0 0 "" Null 0 0 0 0 0 0 0 Null "record_project_in_user" "Records Project In User" "Records a file path as a recent project in user data." "" "" }
|
||||
|
||||
//- rjf: writing config changes
|
||||
{WriteUserData 0 1 "" Null 0 0 0 0 0 0 0 Null "write_user_data" "Write User Data" "Writes user data to the active user file." "" "" }
|
||||
{WriteProjectData 0 1 "" Null 0 0 0 0 0 0 0 Null "write_project_data" "Write Project Data" "Writes project data to the active project file." "" "" }
|
||||
{WriteUserData 0 0 1 "" Null 0 0 0 0 0 0 0 Null "write_user_data" "Write User Data" "Writes user data to the active user file." "" "" }
|
||||
{WriteProjectData 0 0 1 "" Null 0 0 0 0 0 0 0 Null "write_project_data" "Write Project Data" "Writes project data to the active project file." "" "" }
|
||||
|
||||
//- rjf: opening user/project settings
|
||||
{UserSettings 1 1 "" Null 0 0 0 0 0 0 0 Gear "user_settings" "User Settings" "Opens user settings." "" "" }
|
||||
{ProjectSettings 1 1 "" Null 0 0 0 0 0 0 0 Gear "project_settings" "Project Settings" "Opens project settings." "" "" }
|
||||
{UserSettings 0 1 1 "" Null 0 0 0 0 0 0 0 Gear "user_settings" "User Settings" "Opens user settings." "" "" }
|
||||
{ProjectSettings 0 1 1 "" Null 0 0 0 0 0 0 0 Gear "project_settings" "Project Settings" "Opens project settings." "" "" }
|
||||
|
||||
//- rjf: meta controls
|
||||
{Edit 1 1 "" Null 0 0 0 0 0 0 0 Pencil "edit" "Edit" "Edits the current selection." "" "" }
|
||||
{Accept 1 1 "" Null 0 0 0 0 0 0 0 CheckFilled "accept" "Accept" "Accepts current changes, or answers prompts in the affirmative." "" "" }
|
||||
{Cancel 1 1 "" Null 0 0 0 0 0 0 0 X "cancel" "Cancel" "Rejects current changes, exits temporary menus, or answers prompts in the negative." "" "" }
|
||||
{FocusMenu 1 1 "" Null 0 0 0 0 0 0 0 List "focus_menu" "Focus Menu" "Focuses the menu for the selected interface, if there is one." "" "" }
|
||||
{Edit 0 1 1 "" Null 0 0 0 0 0 0 0 Pencil "edit" "Edit" "Edits the current selection." "" "" }
|
||||
{Accept 0 1 1 "" Null 0 0 0 0 0 0 0 CheckFilled "accept" "Accept" "Accepts current changes, or answers prompts in the affirmative." "" "" }
|
||||
{Cancel 0 1 1 "" Null 0 0 0 0 0 0 0 X "cancel" "Cancel" "Rejects current changes, exits temporary menus, or answers prompts in the negative." "" "" }
|
||||
{FocusMenu 0 1 1 "" Null 0 0 0 0 0 0 0 List "focus_menu" "Focus Menu" "Focuses the menu for the selected interface, if there is one." "" "" }
|
||||
|
||||
//- rjf: directional movement & text controls
|
||||
{MoveLeft 1 1 "" Null 0 0 0 0 0 0 0 Null "move_left" "Move Left" "Moves the cursor or selection left." "" "" }
|
||||
{MoveRight 1 1 "" Null 0 0 0 0 0 0 0 Null "move_right" "Move Right" "Moves the cursor or selection right." "" "" }
|
||||
{MoveUp 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up" "Move Up" "Moves the cursor or selection up." "" "" }
|
||||
{MoveDown 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down" "Move Down" "Moves the cursor or selection down." "" "" }
|
||||
{MoveLeftSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_left_select" "Move Left Select" "Moves the cursor or selection left, while selecting." "" "" }
|
||||
{MoveRightSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_right_select" "Move Right Select" "Moves the cursor or selection right, while selecting." "" "" }
|
||||
{MoveUpSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_select" "Move Up Select" "Moves the cursor or selection up, while selecting." "" "" }
|
||||
{MoveDownSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_select" "Move Down Select" "Moves the cursor or selection down, while selecting." "" "" }
|
||||
{MoveLeftChunk 1 1 "" Null 0 0 0 0 0 0 0 Null "move_left_chunk" "Move Left Chunk" "Moves the cursor or selection left one chunk." "" "" }
|
||||
{MoveRightChunk 1 1 "" Null 0 0 0 0 0 0 0 Null "move_right_chunk" "Move Right Chunk" "Moves the cursor or selection right one chunk." "" "" }
|
||||
{MoveUpChunk 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_chunk" "Move Up Chunk" "Moves the cursor or selection up one chunk." "" "" }
|
||||
{MoveDownChunk 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_chunk" "Move Down Chunk" "Moves the cursor or selection down one chunk." "" "" }
|
||||
{MoveUpPage 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_page" "Move Up Page" "Moves the cursor or selection up one page." "" "" }
|
||||
{MoveDownPage 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_page" "Move Down Page" "Moves the cursor or selection down one page." "" "" }
|
||||
{MoveUpWhole 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_whole" "Move Up Whole" "Moves the cursor or selection to the beginning of the relevant content." "" "" }
|
||||
{MoveDownWhole 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_whole" "Move Down Whole" "Moves the cursor or selection to the end of the relevant content." "" "" }
|
||||
{MoveLeftChunkSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_left_chunk_select" "Move Left Chunk Select" "Moves the cursor or selection left one chunk." "" "" }
|
||||
{MoveRightChunkSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_right_chunk_select" "Move Right Chunk Select" "Moves the cursor or selection right one chunk." "" "" }
|
||||
{MoveUpChunkSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_chunk_select" "Move Up Chunk Select" "Moves the cursor or selection up one chunk." "" "" }
|
||||
{MoveDownChunkSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_chunk_select" "Move Down Chunk Select" "Moves the cursor or selection down one chunk." "" "" }
|
||||
{MoveUpPageSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_page_select" "Move Up Page Select" "Moves the cursor or selection up one page, while selecting." "" "" }
|
||||
{MoveDownPageSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_page_select" "Move Down Page Select" "Moves the cursor or selection down one page, while selecting." "" "" }
|
||||
{MoveUpWholeSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_whole_select" "Move Up Whole Select" "Moves the cursor or selection to the beginning of the relevant content, while selecting." "" "" }
|
||||
{MoveDownWholeSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_whole_select" "Move Down Whole Select" "Moves the cursor or selection to the end of the relevant content, while selecting." "" "" }
|
||||
{MoveUpReorder 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_reorder" "Move Up Reorder" "Moves the cursor or selection up, while swapping the currently selected element with that upward." "" "" }
|
||||
{MoveDownReorder 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_reorder" "Move Down Reorder" "Moves the cursor or selection down, while swapping the currently selected element with that downward." "" "" }
|
||||
{MoveHome 1 1 "" Null 0 0 0 0 0 0 0 Null "move_home" "Move Home" "Moves the cursor to the beginning of the line." "" "" }
|
||||
{MoveEnd 1 1 "" Null 0 0 0 0 0 0 0 Null "move_end" "Move End" "Moves the cursor to the end of the line." "" "" }
|
||||
{MoveHomeSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_home_select" "Move Home Select" "Moves the cursor to the beginning of the line, while selecting." "" "" }
|
||||
{MoveEndSelect 1 1 "" Null 0 0 0 0 0 0 0 Null "move_end_select" "Move End Select" "Moves the cursor to the end of the line, while selecting." "" "" }
|
||||
{SelectAll 1 1 "" Null 0 0 0 0 0 0 0 Null "select_all" "Select All" "Selects everything possible." "" "" }
|
||||
{DeleteSingle 1 1 "" Null 0 0 0 0 0 0 0 Null "delete_single" "Delete Single" "Deletes a single element to the right of the cursor, or the active selection." "" "" }
|
||||
{DeleteChunk 1 1 "" Null 0 0 0 0 0 0 0 Null "delete_chunk" "Delete Chunk" "Deletes a chunk to the right of the cursor, or the active selection." "" "" }
|
||||
{BackspaceSingle 1 1 "" Null 0 0 0 0 0 0 0 Null "backspace_single" "Backspace Single" "Deletes a single element to the left of the cursor, or the active selection." "" "" }
|
||||
{BackspaceChunk 1 1 "" Null 0 0 0 0 0 0 0 Null "backspace_chunk" "Backspace Chunk" "Deletes a chunk to the left of the cursor, or the active selection." "" "" }
|
||||
{Copy 1 1 "" Null 0 0 0 0 0 0 0 Clipboard "copy" "Copy" "Copies the active selection to the clipboard." "" "{text_range_commands}{disasm_range_commands}" }
|
||||
{Cut 1 1 "" Null 0 0 0 0 0 0 0 Clipboard "cut" "Cut" "Copies the active selection to the clipboard, then deletes it." "" "" }
|
||||
{Paste 1 1 "" Null 0 0 0 0 0 0 0 Clipboard "paste" "Paste" "Pastes the current contents of the clipboard." "" "" }
|
||||
{InsertText 0 1 "" Null 0 0 0 0 0 0 0 Null "insert_text" "Insert Text" "Inserts the text that was used to cause this command." "" "" }
|
||||
{MoveLeft 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_left" "Move Left" "Moves the cursor or selection left." "" "" }
|
||||
{MoveRight 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_right" "Move Right" "Moves the cursor or selection right." "" "" }
|
||||
{MoveUp 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up" "Move Up" "Moves the cursor or selection up." "" "" }
|
||||
{MoveDown 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down" "Move Down" "Moves the cursor or selection down." "" "" }
|
||||
{MoveLeftSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_left_select" "Move Left Select" "Moves the cursor or selection left, while selecting." "" "" }
|
||||
{MoveRightSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_right_select" "Move Right Select" "Moves the cursor or selection right, while selecting." "" "" }
|
||||
{MoveUpSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_select" "Move Up Select" "Moves the cursor or selection up, while selecting." "" "" }
|
||||
{MoveDownSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_select" "Move Down Select" "Moves the cursor or selection down, while selecting." "" "" }
|
||||
{MoveLeftChunk 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_left_chunk" "Move Left Chunk" "Moves the cursor or selection left one chunk." "" "" }
|
||||
{MoveRightChunk 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_right_chunk" "Move Right Chunk" "Moves the cursor or selection right one chunk." "" "" }
|
||||
{MoveUpChunk 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_chunk" "Move Up Chunk" "Moves the cursor or selection up one chunk." "" "" }
|
||||
{MoveDownChunk 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_chunk" "Move Down Chunk" "Moves the cursor or selection down one chunk." "" "" }
|
||||
{MoveUpPage 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_page" "Move Up Page" "Moves the cursor or selection up one page." "" "" }
|
||||
{MoveDownPage 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_page" "Move Down Page" "Moves the cursor or selection down one page." "" "" }
|
||||
{MoveUpWhole 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_whole" "Move Up Whole" "Moves the cursor or selection to the beginning of the relevant content." "" "" }
|
||||
{MoveDownWhole 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_whole" "Move Down Whole" "Moves the cursor or selection to the end of the relevant content." "" "" }
|
||||
{MoveLeftChunkSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_left_chunk_select" "Move Left Chunk Select" "Moves the cursor or selection left one chunk." "" "" }
|
||||
{MoveRightChunkSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_right_chunk_select" "Move Right Chunk Select" "Moves the cursor or selection right one chunk." "" "" }
|
||||
{MoveUpChunkSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_chunk_select" "Move Up Chunk Select" "Moves the cursor or selection up one chunk." "" "" }
|
||||
{MoveDownChunkSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_chunk_select" "Move Down Chunk Select" "Moves the cursor or selection down one chunk." "" "" }
|
||||
{MoveUpPageSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_page_select" "Move Up Page Select" "Moves the cursor or selection up one page, while selecting." "" "" }
|
||||
{MoveDownPageSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_page_select" "Move Down Page Select" "Moves the cursor or selection down one page, while selecting." "" "" }
|
||||
{MoveUpWholeSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_whole_select" "Move Up Whole Select" "Moves the cursor or selection to the beginning of the relevant content, while selecting." "" "" }
|
||||
{MoveDownWholeSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_whole_select" "Move Down Whole Select" "Moves the cursor or selection to the end of the relevant content, while selecting." "" "" }
|
||||
{MoveUpReorder 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_up_reorder" "Move Up Reorder" "Moves the cursor or selection up, while swapping the currently selected element with that upward." "" "" }
|
||||
{MoveDownReorder 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_down_reorder" "Move Down Reorder" "Moves the cursor or selection down, while swapping the currently selected element with that downward." "" "" }
|
||||
{MoveHome 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_home" "Move Home" "Moves the cursor to the beginning of the line." "" "" }
|
||||
{MoveEnd 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_end" "Move End" "Moves the cursor to the end of the line." "" "" }
|
||||
{MoveHomeSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_home_select" "Move Home Select" "Moves the cursor to the beginning of the line, while selecting." "" "" }
|
||||
{MoveEndSelect 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_end_select" "Move End Select" "Moves the cursor to the end of the line, while selecting." "" "" }
|
||||
{SelectAll 0 1 1 "" Null 0 0 0 0 0 0 0 Null "select_all" "Select All" "Selects everything possible." "" "" }
|
||||
{DeleteSingle 0 1 1 "" Null 0 0 0 0 0 0 0 Null "delete_single" "Delete Single" "Deletes a single element to the right of the cursor, or the active selection." "" "" }
|
||||
{DeleteChunk 0 1 1 "" Null 0 0 0 0 0 0 0 Null "delete_chunk" "Delete Chunk" "Deletes a chunk to the right of the cursor, or the active selection." "" "" }
|
||||
{BackspaceSingle 0 1 1 "" Null 0 0 0 0 0 0 0 Null "backspace_single" "Backspace Single" "Deletes a single element to the left of the cursor, or the active selection." "" "" }
|
||||
{BackspaceChunk 0 1 1 "" Null 0 0 0 0 0 0 0 Null "backspace_chunk" "Backspace Chunk" "Deletes a chunk to the left of the cursor, or the active selection." "" "" }
|
||||
{Copy 0 1 1 "" Null 0 0 0 0 0 0 0 Clipboard "copy" "Copy" "Copies the active selection to the clipboard." "" "{text_range_commands}{disasm_range_commands}" }
|
||||
{Cut 0 1 1 "" Null 0 0 0 0 0 0 0 Clipboard "cut" "Cut" "Copies the active selection to the clipboard, then deletes it." "" "" }
|
||||
{Paste 0 1 1 "" Null 0 0 0 0 0 0 0 Clipboard "paste" "Paste" "Pastes the current contents of the clipboard." "" "" }
|
||||
{InsertText 0 0 1 "" Null 0 0 0 0 0 0 0 Null "insert_text" "Insert Text" "Inserts the text that was used to cause this command." "" "" }
|
||||
|
||||
//- rjf: directionless navigation
|
||||
{MoveNext 1 1 "" Null 0 0 0 0 0 0 0 Null "move_next" "Move Next" "Moves the cursor or selection to the next element." "" "" }
|
||||
{MovePrev 1 1 "" Null 0 0 0 0 0 0 0 Null "move_prev" "Move Previous" "Moves the cursor or selection to the previous element." "" "" }
|
||||
{MoveNext 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_next" "Move Next" "Moves the cursor or selection to the next element." "" "" }
|
||||
{MovePrev 0 1 1 "" Null 0 0 0 0 0 0 0 Null "move_prev" "Move Previous" "Moves the cursor or selection to the previous element." "" "" }
|
||||
|
||||
//- rjf: code navigation
|
||||
{GoToLine 1 1 "" LineNum 0 0 0 0 1 0 1 Null "goto_line" "Go To Line" "Jumps to a line number in the current code file." "" "" }
|
||||
{GoToAddress 1 1 "" Vaddr 0 0 0 0 1 0 1 Null "goto_address" "Go To Address" "Jumps to an address in the current memory or disassembly view." "" "" }
|
||||
{CenterCursor 1 1 "" Null 0 0 0 0 0 0 0 Null "center_cursor" "Center Cursor" "Snaps the current code view to center the cursor." "" "" }
|
||||
{ContainCursor 1 1 "" Null 0 0 0 0 0 0 0 Null "contain_cursor" "Contain Cursor" "Snaps the current code view to contain the cursor." "" "" }
|
||||
{FindNext 1 1 "" Null 0 0 1 0 0 0 0 Find "find_next" "Find Next" "Searches the current code file forward (from the cursor) for the last searched string." "" "" }
|
||||
{FindPrev 1 1 "" Null 0 0 1 0 0 0 0 Find "find_prev" "Find Previous" "Searches the current code file backwards (from the cursor) for the last searched string." "" "" }
|
||||
{GoToLine 0 1 1 "" LineNum 0 0 0 0 1 0 1 Null "goto_line" "Go To Line" "Jumps to a line number in the current code file." "" "" }
|
||||
{GoToAddress 0 1 1 "" Vaddr 0 0 0 0 1 0 1 Null "goto_address" "Go To Address" "Jumps to an address in the current memory or disassembly view." "" "" }
|
||||
{CenterCursor 0 1 1 "" Null 0 0 0 0 0 0 0 Null "center_cursor" "Center Cursor" "Snaps the current code view to center the cursor." "" "" }
|
||||
{ContainCursor 0 1 1 "" Null 0 0 0 0 0 0 0 Null "contain_cursor" "Contain Cursor" "Snaps the current code view to contain the cursor." "" "" }
|
||||
{FindNext 0 1 1 "" Null 0 0 1 0 0 0 0 Find "find_next" "Find Next" "Searches the current code file forward (from the cursor) for the last searched string." "" "" }
|
||||
{FindPrev 0 1 1 "" Null 0 0 1 0 0 0 0 Find "find_prev" "Find Previous" "Searches the current code file backwards (from the cursor) for the last searched string." "" "" }
|
||||
|
||||
//- rjf: thread finding
|
||||
{FindThread 1 1 "query:threads" Thread 0 0 0 0 0 1 1 Find "find_thread" "Find Thread" "Jumps to the passed thread in either source code, disassembly, or both if they're already open." "" "" }
|
||||
{FindSelectedThread 1 1 "" Null 0 0 0 0 0 0 0 Find "find_selected_thread" "Find Selected Thread" "Jumps to the selected thread in either source code, disassembly, or both if they're already open." "current,instruction" "{text_pt_commands}{text_range_commands}{disasm_pt_commands}{disasm_range_commands}" }
|
||||
{FindThread 0 1 1 "query:threads" Thread 0 0 0 0 0 1 1 Find "find_thread" "Find Thread" "Jumps to the passed thread in either source code, disassembly, or both if they're already open." "" "" }
|
||||
{FindSelectedThread 0 1 1 "" Null 0 0 0 0 0 0 0 Find "find_selected_thread" "Find Selected Thread" "Jumps to the selected thread in either source code, disassembly, or both if they're already open." "current,instruction" "{text_pt_commands}{text_range_commands}{disasm_pt_commands}{disasm_range_commands}" }
|
||||
|
||||
//- rjf: name finding
|
||||
{GoToName 1 1 "query:procedures" String 0 0 0 0 1 1 1 Null "goto_name" "Go To Name" "Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible." "" "" }
|
||||
{GoToNameAtCursor 1 1 "" Null 0 0 0 0 0 0 0 Null "goto_name_at_cursor" "Go To Name At Cursor" "Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible." "" "{text_pt_commands}{disasm_pt_commands}" }
|
||||
{GoToName 0 1 1 "query:procedures" String 0 0 0 0 1 1 1 Null "goto_name" "Go To Name" "Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible." "" "" }
|
||||
{GoToNameAtCursor 0 1 1 "" Null 0 0 0 0 0 0 0 Null "goto_name_at_cursor" "Go To Name At Cursor" "Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible." "" "{text_pt_commands}{disasm_pt_commands}" }
|
||||
|
||||
//- rjf: watch expressions
|
||||
{ToggleWatchExpression 1 1 "" Null 0 0 0 0 0 0 0 Binoculars "toggle_watch_expr" "Toggle Watch Expression" "Adds or removes an expression to an opened watch view." "" "" }
|
||||
{ToggleWatchExpressionAtCursor 1 1 "" Null 0 0 0 0 0 0 0 Binoculars "toggle_watch_expr_at_cursor" "Toggle Watch Expression At Cursor" "Adds or removes the expression that the cursor or selection is currently over to an opened watch view." "" "{text_pt_commands}{disasm_pt_commands}" }
|
||||
{ToggleWatchExpressionAtMouse 1 1 "" Null 0 0 0 0 0 0 0 Binoculars "toggle_watch_expr_at_mouse" "Toggle Watch Expression At Mouse" "Adds or removes the expression that the mouse is currently over to an opened watch view." "" "" }
|
||||
{ToggleWatchExpression 0 1 1 "" Null 0 0 0 0 0 0 0 Binoculars "toggle_watch_expr" "Toggle Watch Expression" "Adds or removes an expression to an opened watch view." "" "" }
|
||||
{ToggleWatchExpressionAtCursor 0 1 1 "" Null 0 0 0 0 0 0 0 Binoculars "toggle_watch_expr_at_cursor" "Toggle Watch Expression At Cursor" "Adds or removes the expression that the cursor or selection is currently over to an opened watch view." "" "{text_pt_commands}{disasm_pt_commands}" }
|
||||
{ToggleWatchExpressionAtMouse 0 1 1 "" Null 0 0 0 0 0 0 0 Binoculars "toggle_watch_expr_at_mouse" "Toggle Watch Expression At Mouse" "Adds or removes the expression that the mouse is currently over to an opened watch view." "" "" }
|
||||
|
||||
//- rjf: general config operations
|
||||
{EnableCfg 0 0 "" Null 0 0 0 0 0 0 0 CheckHollow "enable_cfg" "Enable" "Enables a config tree." "" "" }
|
||||
{DisableCfg 0 0 "" Null 0 0 0 0 0 0 0 CheckFilled "disable_cfg" "Disable" "Disables a config tree." "" "" }
|
||||
{SelectCfg 0 0 "" Null 0 0 0 0 0 0 0 RadioHollow "select_cfg" "Select" "Selects a config tree, disabling all others of the same kind." "" "" }
|
||||
{DeselectCfg 0 0 "" Null 0 0 0 0 0 0 0 RadioFilled "deselect_cfg" "Deselect" "Deselects a config tree." "" "" }
|
||||
{RemoveCfg 0 0 "" Null 0 0 0 0 0 0 0 Trash "remove_cfg" "Remove" "Removes a config tree." "" "" }
|
||||
{NameCfg 0 0 "" Null 0 0 0 0 0 0 0 Null "name_cfg" "Name" "Equips a config tree with a label." "" "" }
|
||||
{ConditionCfg 0 0 "" Null 0 0 0 0 0 0 0 Null "condition_cfg" "Condition" "Equips a config tree with a condition string." "" "" }
|
||||
{DuplicateCfg 0 0 "" Null 0 0 0 0 0 0 0 Duplicate "duplicate_cfg" "Duplicate" "Duplicates a config tree." "" "" }
|
||||
{RelocateCfg 0 0 "" Null 0 0 0 0 0 0 0 Null "relocate_cfg" "Relocate" "Relocates a config tree." "" "" }
|
||||
{SaveToProject 0 0 "" Null 0 0 0 0 0 0 0 Briefcase "save_cfg_to_project" "Save To Project" "Saves the config tree to the project." "" "" }
|
||||
{EnableCfg 0 0 0 "" Null 0 0 0 0 0 0 0 CheckHollow "enable_cfg" "Enable" "Enables a config tree." "" "" }
|
||||
{DisableCfg 0 0 0 "" Null 0 0 0 0 0 0 0 CheckFilled "disable_cfg" "Disable" "Disables a config tree." "" "" }
|
||||
{SelectCfg 0 0 0 "" Null 0 0 0 0 0 0 0 RadioHollow "select_cfg" "Select" "Selects a config tree, disabling all others of the same kind." "" "" }
|
||||
{DeselectCfg 0 0 0 "" Null 0 0 0 0 0 0 0 RadioFilled "deselect_cfg" "Deselect" "Deselects a config tree." "" "" }
|
||||
{RemoveCfg 0 0 0 "" Null 0 0 0 0 0 0 0 Trash "remove_cfg" "Remove" "Removes a config tree." "" "" }
|
||||
{NameCfg 0 0 0 "" Null 0 0 0 0 0 0 0 Null "name_cfg" "Name" "Equips a config tree with a label." "" "" }
|
||||
{ConditionCfg 0 0 0 "" Null 0 0 0 0 0 0 0 Null "condition_cfg" "Condition" "Equips a config tree with a condition string." "" "" }
|
||||
{DuplicateCfg 0 0 0 "" Null 0 0 0 0 0 0 0 Duplicate "duplicate_cfg" "Duplicate" "Duplicates a config tree." "" "" }
|
||||
{RelocateCfg 0 0 0 "" Null 0 0 0 0 0 0 0 Null "relocate_cfg" "Relocate" "Relocates a config tree." "" "" }
|
||||
{SaveToProject 0 0 0 "" Null 0 0 0 0 0 0 0 Briefcase "save_cfg_to_project" "Save To Project" "Saves the config tree to the project." "" "" }
|
||||
|
||||
//- rjf: breakpoints
|
||||
{AddBreakpoint 1 1 "" Null 0 0 0 0 0 0 0 CircleFilled "add_breakpoint" "Add Line Breakpoint" "Places a breakpoint at a given location (file path and line number, address, or symbol name)." "" "" }
|
||||
{AddAddressBreakpoint 1 0 "" Expr 0 0 0 0 1 1 1 CircleFilled "add_address_breakpoint" "Add Address Breakpoint" "Places a breakpoint on the specified address." "" "" }
|
||||
{AddFunctionBreakpoint 1 0 "query:procedures" String 0 0 0 0 1 1 1 CircleFilled "add_function_breakpoint" "Add Function Breakpoint" "Places a breakpoint on the first address of the specified function." "" "" }
|
||||
{ToggleBreakpoint 1 1 "" Null 0 0 0 0 0 0 0 CircleFilled "toggle_breakpoint" "Toggle Line Breakpoint" "Places or removes a breakpoint at a given location (file path and line number, address, or symbol name)." "" "{text_pt_commands}{disasm_pt_commands}" }
|
||||
{RemoveBreakpoint 1 0 "query:breakpoints" Cfg 0 0 0 0 1 1 1 Trash "remove_breakpoint" "Remove Breakpoint" "Removes an existing breakpoint." "delete" "" }
|
||||
{EnableBreakpoint 1 1 "query:breakpoints" Cfg 0 0 0 0 1 1 1 CheckFilled "enable_breakpoint" "Enable Breakpoint" "Enables a breakpoint." "" "" }
|
||||
{DisableBreakpoint 1 1 "query:breakpoints" Cfg 0 0 0 0 1 1 1 CheckHollow "disable_breakpoint" "Disable Breakpoint" "Disables a breakpoint." "" "" }
|
||||
{ClearBreakpoints 1 1 "" Null 0 0 0 0 0 0 0 Trash "clear_breakpoints" "Clear Breakpoints" "Removes all breakpoints." "" "" }
|
||||
{AddBreakpoint 0 1 1 "" Null 0 0 0 0 0 0 0 CircleFilled "add_breakpoint" "Add Line Breakpoint" "Places a breakpoint at a given location (file path and line number, address, or symbol name)." "" "" }
|
||||
{AddAddressBreakpoint 0 1 0 "" Expr 0 0 0 0 1 1 1 CircleFilled "add_address_breakpoint" "Add Address Breakpoint" "Places a breakpoint on the specified address." "" "" }
|
||||
{AddFunctionBreakpoint 0 1 0 "query:procedures" String 0 0 0 0 1 1 1 CircleFilled "add_function_breakpoint" "Add Function Breakpoint" "Places a breakpoint on the first address of the specified function." "" "" }
|
||||
{ToggleBreakpoint 0 1 1 "" Null 0 0 0 0 0 0 0 CircleFilled "toggle_breakpoint" "Toggle Line Breakpoint" "Places or removes a breakpoint at a given location (file path and line number, address, or symbol name)." "" "{text_pt_commands}{disasm_pt_commands}" }
|
||||
{RemoveBreakpoint 0 1 0 "query:breakpoints" Cfg 0 0 0 0 1 1 1 Trash "remove_breakpoint" "Remove Breakpoint" "Removes an existing breakpoint." "delete" "" }
|
||||
{EnableBreakpoint 0 1 1 "query:breakpoints" Cfg 0 0 0 0 1 1 1 CheckFilled "enable_breakpoint" "Enable Breakpoint" "Enables a breakpoint." "" "" }
|
||||
{DisableBreakpoint 0 1 1 "query:breakpoints" Cfg 0 0 0 0 1 1 1 CheckHollow "disable_breakpoint" "Disable Breakpoint" "Disables a breakpoint." "" "" }
|
||||
{ClearBreakpoints 0 1 1 "" Null 0 0 0 0 0 0 0 Trash "clear_breakpoints" "Clear Breakpoints" "Removes all breakpoints." "" "" }
|
||||
|
||||
//- rjf: output
|
||||
{ClearOutput 1 1 "" Null 0 0 0 0 0 0 0 Null "clear_output" "Clear Output" "Clears all output." "" "" }
|
||||
{ClearOutput 0 1 1 "" Null 0 0 0 0 0 0 0 Null "clear_output" "Clear Output" "Clears all output." "" "" }
|
||||
|
||||
//- rjf: watch pins
|
||||
{AddWatchPin 1 1 "" Expr 0 0 0 0 1 1 1 Pin "add_watch_pin" "Add Watch Pin" "Places a watch pin at a given location (file path and line number or address)." "" "" }
|
||||
{ToggleWatchPin 1 0 "" Expr 0 0 0 0 1 1 1 Pin "toggle_watch_pin" "Toggle Watch Pin" "Places or removes a watch pin at a given location (file path and line number or address)." "" "" }
|
||||
{AddWatchPin 0 1 1 "" Expr 0 0 0 0 1 1 1 Pin "add_watch_pin" "Add Watch Pin" "Places a watch pin at a given location (file path and line number or address)." "" "" }
|
||||
{ToggleWatchPin 0 1 0 "" Expr 0 0 0 0 1 1 1 Pin "toggle_watch_pin" "Toggle Watch Pin" "Places or removes a watch pin at a given location (file path and line number or address)." "" "" }
|
||||
|
||||
//- rjf: debug infos
|
||||
{LoadDebugInfo 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 Module "load_debug_info" "Load Debug Info" "Loads a debug info file." "" "" }
|
||||
{UnloadDebugInfo 1 1 "query:debug_infos" Cfg 0 0 0 0 1 1 1 Module "unload_debug_info" "Unload Debug Info" "Unloads a debug info file." "" "" }
|
||||
{LoadDebugInfo 0 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 Module "load_debug_info" "Load Debug Info" "Loads a debug info file." "" "" }
|
||||
{UnloadDebugInfo 0 1 1 "query:debug_infos" Cfg 0 0 0 0 1 1 1 Module "unload_debug_info" "Unload Debug Info" "Unloads a debug info file." "" "" }
|
||||
|
||||
//- rjf: type views
|
||||
{AddTypeView 0 0 "" String 0 0 0 0 0 0 0 Binoculars "add_type_view" "Add Type View" "Adds a new type view." "" "" }
|
||||
{AddTypeView 0 0 0 "" String 0 0 0 0 0 0 0 Binoculars "add_type_view" "Add Type View" "Adds a new type view." "" "" }
|
||||
|
||||
//- rjf: file path maps
|
||||
{AddFilePathMap 0 0 "" Null 0 0 0 0 0 0 0 FileOutline "add_file_path_map" "Add File Path Map" "Adds a new file path map." "" "" }
|
||||
{AddFilePathMap 0 0 0 "" Null 0 0 0 0 0 0 0 FileOutline "add_file_path_map" "Add File Path Map" "Adds a new file path map." "" "" }
|
||||
|
||||
//- rjf: themes
|
||||
{EditUserTheme 0 0 "query:themes" String 0 0 0 0 0 0 0 Palette "edit_user_theme" "Edit User Theme" "Edits the current user's theme." "color" "" }
|
||||
{EditProjectTheme 0 0 "query:themes" String 0 0 0 0 0 0 0 Palette "edit_project_theme" "Edit Project Theme" "Edits the current project's theme." "color" "" }
|
||||
{AddThemeColor 0 0 "" Null 0 0 0 0 0 0 0 Palette "add_theme_color" "Add Theme Color" "Adds a new theme color." "" "" }
|
||||
{ForkTheme 0 0 "" Null 0 0 0 0 0 0 0 Palette "fork_theme" "Fork Theme" "Imports all colors from the current theme so they can be individually edited." "" "" }
|
||||
{SaveTheme 0 0 "" String 1 0 0 0 0 1 1 Save "save_theme" "Save Theme" "Saves all theme colors to a new theme file." "" "" }
|
||||
{SaveAndSetTheme 0 0 "" String 1 0 0 0 0 1 1 Save "save_and_set_theme" "Save And Set Theme" "Saves all theme colors to a new theme file, and then sets that theme as the selected theme." "" "" }
|
||||
{EditUserTheme 0 0 0 "query:themes" String 0 0 0 0 0 0 0 Palette "edit_user_theme" "Edit User Theme" "Edits the current user's theme." "color" "" }
|
||||
{EditProjectTheme 0 0 0 "query:themes" String 0 0 0 0 0 0 0 Palette "edit_project_theme" "Edit Project Theme" "Edits the current project's theme." "color" "" }
|
||||
{AddThemeColor 0 0 0 "" Null 0 0 0 0 0 0 0 Palette "add_theme_color" "Add Theme Color" "Adds a new theme color." "" "" }
|
||||
{ForkTheme 0 0 0 "" Null 0 0 0 0 0 0 0 Palette "fork_theme" "Fork Theme" "Imports all colors from the current theme so they can be individually edited." "" "" }
|
||||
{SaveTheme 0 0 0 "" String 1 0 0 0 0 1 1 Save "save_theme" "Save Theme" "Saves all theme colors to a new theme file." "" "" }
|
||||
{SaveAndSetTheme 0 0 0 "" String 1 0 0 0 0 1 1 Save "save_and_set_theme" "Save And Set Theme" "Saves all theme colors to a new theme file, and then sets that theme as the selected theme." "" "" }
|
||||
|
||||
//- rjf: line operations
|
||||
{SetNextStatement 1 1 "" Null 0 0 0 0 0 0 0 RightArrow "set_next_statement" "Set Next Statement" "Sets the selected thread's instruction pointer to the cursor's position." "" "{text_pt_commands}{disasm_pt_commands}" }
|
||||
{SetNextStatement 0 1 1 "" Null 0 0 0 0 0 0 0 RightArrow "set_next_statement" "Set Next Statement" "Sets the selected thread's instruction pointer to the cursor's position." "" "{text_pt_commands}{disasm_pt_commands}" }
|
||||
|
||||
//- rjf: targets
|
||||
{AddTarget 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 Target "add_target" "Add Target" "Adds a new target." "application,executable,debug" "" }
|
||||
{SelectTarget 1 1 "query:targets" Cfg 0 0 0 0 0 1 1 Target "select_target" "Select Target" "Selects a target." "" "" }
|
||||
{EnableTarget 1 1 "query:targets" Cfg 0 0 0 0 0 1 1 CheckFilled "enable_target" "Enable Target" "Enables a target, in addition to all targets currently enabled." "" "" }
|
||||
{DisableTarget 1 1 "query:targets" Cfg 0 0 0 0 0 1 1 CheckHollow "disable_target" "Disable Target" "Disables a target." "" "" }
|
||||
{RemoveTarget 1 1 "query:targets" Cfg 0 0 0 0 0 1 1 Trash "remove_target" "Remove Target" "Removes a target." "delete" "" }
|
||||
{AddTarget 0 1 1 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 Target "add_target" "Add Target" "Adds a new target." "application,executable,debug" "" }
|
||||
{SelectTarget 0 1 1 "query:targets" Cfg 0 0 0 0 0 1 1 Target "select_target" "Select Target" "Selects a target." "" "" }
|
||||
{EnableTarget 0 1 1 "query:targets" Cfg 0 0 0 0 0 1 1 CheckFilled "enable_target" "Enable Target" "Enables a target, in addition to all targets currently enabled." "" "" }
|
||||
{DisableTarget 0 1 1 "query:targets" Cfg 0 0 0 0 0 1 1 CheckHollow "disable_target" "Disable Target" "Disables a target." "" "" }
|
||||
{RemoveTarget 0 1 1 "query:targets" Cfg 0 0 0 0 0 1 1 Trash "remove_target" "Remove Target" "Removes a target." "delete" "" }
|
||||
|
||||
//- rjf: attaching
|
||||
{RegisterAsJITDebugger 1 1 "" Null 0 0 0 0 0 0 0 Null "register_as_jit_debugger" "Register As Just-In-Time (JIT) Debugger" "Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system." "" "" }
|
||||
{RegisterAsJITDebugger 0 1 1 "" Null 0 0 0 0 0 0 0 Null "register_as_jit_debugger" "Register As Just-In-Time (JIT) Debugger" "Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system." "" "" }
|
||||
|
||||
//- rjf: snap-to-code-location
|
||||
{FindCodeLocation 0 1 "" FilePath 0 0 0 0 0 1 1 FileOutline "find_code_location" "Find Code Location" "Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary." "" "" }
|
||||
{FindCodeLocation 0 0 1 "" FilePath 0 0 0 0 0 1 1 FileOutline "find_code_location" "Find Code Location" "Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary." "" "" }
|
||||
|
||||
//- rjf: snap-to-memory-location
|
||||
{GoToMemory 0 1 "" Expr 0 0 0 0 1 1 0 Grid "go_to_memory" "Go To Memory" "Finds the specified expression in the memory view. Opens the memory view if necessary." "" "{memory_eval_commands}" }
|
||||
{GoToMemory 0 0 1 "" Expr 0 0 0 0 1 1 0 Grid "go_to_memory" "Go To Memory" "Finds the specified expression in the memory view. Opens the memory view if necessary." "" "{memory_eval_commands}" }
|
||||
|
||||
//- rjf: break-when-value-changes
|
||||
{BreakWhenValueChanges 0 1 "" Expr 0 0 0 0 1 1 0 CircleFilled "break_when_value_changes" "Break When Value Changes" "Adds a new write data breakpoint for this variable's range." "" "{memory_eval_commands}" }
|
||||
{BreakWhenValueChanges 0 0 1 "" Expr 0 0 0 0 1 1 0 CircleFilled "break_when_value_changes" "Break When Value Changes" "Adds a new write data breakpoint for this variable's range." "" "{memory_eval_commands}" }
|
||||
|
||||
//- rjf: searching
|
||||
{Search 1 1 "" String 0 0 1 1 1 0 1 Find "search" "Search" "Begins searching within the active interface." "sort,search,filter,find" "" }
|
||||
{SearchBackwards 1 1 "" String 0 0 1 1 1 0 1 Find "search_backwards" "Search Backwards" "Begins searching backwards within the active interface." "sort,search,filter,find" "" }
|
||||
{Search 0 1 1 "" String 0 0 1 1 1 0 1 Find "search" "Search" "Begins searching within the active interface." "sort,search,filter,find" "" }
|
||||
{SearchBackwards 0 1 1 "" String 0 0 1 1 1 0 1 Find "search_backwards" "Search Backwards" "Begins searching backwards within the active interface." "sort,search,filter,find" "" }
|
||||
|
||||
//- rjf: queries
|
||||
{PickFile 0 0 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 FileOutline "pick_file" "Pick File" "Opens the file browser to pick a file." "" "" }
|
||||
{PickFolder 0 0 `folder:\\"$input\\"` FilePath 0 1 0 0 0 1 1 FolderOpenFilled "pick_folder" "Pick Folder" "Opens the file browser to pick a folder." "" "" }
|
||||
{PickFileOrFolder 0 0 `folder:\\"$input\\"` FilePath 1 1 0 0 0 1 1 FileOutline "pick_file_or_folder" "Pick File/Folder" "Opens the file browser to pick a file or folder." "" "" }
|
||||
{PickFile 0 0 0 `folder:\\"$input\\"` FilePath 1 0 0 0 0 1 1 FileOutline "pick_file" "Pick File" "Opens the file browser to pick a file." "" "" }
|
||||
{PickFolder 0 0 0 `folder:\\"$input\\"` FilePath 0 1 0 0 0 1 1 FolderOpenFilled "pick_folder" "Pick Folder" "Opens the file browser to pick a folder." "" "" }
|
||||
{PickFileOrFolder 0 0 0 `folder:\\"$input\\"` FilePath 1 1 0 0 0 1 1 FileOutline "pick_file_or_folder" "Pick File/Folder" "Opens the file browser to pick a file or folder." "" "" }
|
||||
|
||||
//- rjf: query stack
|
||||
{PushQuery 0 0 "" Null 0 0 0 0 0 0 0 Null "push_query" "Push Query" "Opens a new temporary query interface." "" "" }
|
||||
{CompleteQuery 0 0 "" Null 0 0 0 0 0 0 0 Null "complete_query" "Complete Query" "Completes and closes a query." "" "" }
|
||||
{CancelQuery 0 0 "" Null 0 0 0 0 0 0 0 Null "cancel_query" "Cancel Query" "Closes a query." "" "" }
|
||||
{UpdateQuery 0 0 "" Null 0 0 0 0 0 0 0 Null "update_query" "Update Query" "Updates a query input." "" "" }
|
||||
{PushQuery 0 0 0 "" Null 0 0 0 0 0 0 0 Null "push_query" "Push Query" "Opens a new temporary query interface." "" "" }
|
||||
{CompleteQuery 0 0 0 "" Null 0 0 0 0 0 0 0 Null "complete_query" "Complete Query" "Completes and closes a query." "" "" }
|
||||
{CancelQuery 0 0 0 "" Null 0 0 0 0 0 0 0 Null "cancel_query" "Cancel Query" "Closes a query." "" "" }
|
||||
{UpdateQuery 0 0 0 "" Null 0 0 0 0 0 0 0 Null "update_query" "Update Query" "Updates a query input." "" "" }
|
||||
|
||||
//- rjf: event buffers
|
||||
{OpenEventBuffer 0 1 "" Null 0 0 0 0 0 0 0 Null "open_event_buffer" "Open Event Buffer" "Opens a new event buffer, to which debugger events will be written, for external processing." "" "" }
|
||||
{CloseEventBuffer 0 1 "" Cfg 0 0 0 0 0 0 0 Null "close_event_buffer" "Close Event Buffer" "Closes an existing event buffer." "" "" }
|
||||
{OpenEventBuffer 0 0 1 "" Null 0 0 0 0 0 0 0 Null "open_event_buffer" "Open Event Buffer" "Opens a new event buffer, to which debugger events will be written, for external processing." "" "" }
|
||||
{CloseEventBuffer 0 0 1 "" Cfg 0 0 0 0 0 0 0 Null "close_event_buffer" "Close Event Buffer" "Closes an existing event buffer." "" "" }
|
||||
|
||||
//- rjf: developer commands
|
||||
{ToggleDevMenu 1 1 "" Null 0 0 0 0 0 0 0 Null "toggle_dev_menu" "Toggle Developer Menu" "Opens and closes the developer menu." "" "" }
|
||||
{LogMarker 1 1 "" Null 0 0 0 0 0 0 0 Null "log_marker" "Log Marker" "Logs a marker in the application log, to denote specific points in time within the log." "" "" }
|
||||
{ToggleDevMenu 0 1 1 "" Null 0 0 0 0 0 0 0 Null "toggle_dev_menu" "Toggle Developer Menu" "Opens and closes the developer menu." "" "" }
|
||||
{LogMarker 0 1 1 "" Null 0 0 0 0 0 0 0 Null "log_marker" "Log Marker" "Logs a marker in the application log, to denote specific points in time within the log." "" "" }
|
||||
}
|
||||
|
||||
@enum RD_CmdKind:
|
||||
|
||||
@@ -9802,12 +9802,13 @@ rd_code_color_slot_from_txt_token_kind(TXT_TokenKind kind)
|
||||
switch(kind)
|
||||
{
|
||||
default:break;
|
||||
case TXT_TokenKind_Keyword:{color = RD_CodeColorSlot_CodeKeyword;}break;
|
||||
case TXT_TokenKind_Numeric:{color = RD_CodeColorSlot_CodeNumeric;}break;
|
||||
case TXT_TokenKind_String: {color = RD_CodeColorSlot_CodeString;}break;
|
||||
case TXT_TokenKind_Meta: {color = RD_CodeColorSlot_CodeMeta;}break;
|
||||
case TXT_TokenKind_Comment:{color = RD_CodeColorSlot_CodeComment;}break;
|
||||
case TXT_TokenKind_Symbol: {color = RD_CodeColorSlot_CodeDelimiterOperator;}break;
|
||||
case TXT_TokenKind_Keyword: {color = RD_CodeColorSlot_CodeKeyword;}break;
|
||||
case TXT_TokenKind_Numeric: {color = RD_CodeColorSlot_CodeNumeric;}break;
|
||||
case TXT_TokenKind_String: {color = RD_CodeColorSlot_CodeString;}break;
|
||||
case TXT_TokenKind_Meta: {color = RD_CodeColorSlot_CodeMeta;}break;
|
||||
case TXT_TokenKind_LineComment: {color = RD_CodeColorSlot_CodeComment;}break;
|
||||
case TXT_TokenKind_BlockComment:{color = RD_CodeColorSlot_CodeComment;}break;
|
||||
case TXT_TokenKind_Symbol: {color = RD_CodeColorSlot_CodeDelimiterOperator;}break;
|
||||
}
|
||||
return color;
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
|
||||
B32 need_nav = (start_cursor == start_mark || !(evt->flags & UI_EventFlag_ZeroDeltaOnSelect));
|
||||
|
||||
//- rjf: wrap lines right
|
||||
if(need_nav && evt->delta_unit != UI_EventDeltaUnit_Whole && delta.x > 0 && start_cursor == line_range.max && line_num+1 <= line_count)
|
||||
if(need_nav && evt->delta_unit != UI_EventDeltaUnit_Whole && evt->delta_unit != UI_EventDeltaUnit_Line && delta.x > 0 && start_cursor == line_range.max && line_num+1 <= line_count)
|
||||
{
|
||||
Rng1U64 next_line_range = txt_range_from_line_num(&text_patched.line_map, line_num+1);
|
||||
*cursor = next_line_range.min;
|
||||
@@ -171,7 +171,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
|
||||
}
|
||||
|
||||
//- rjf: wrap lines left
|
||||
if(need_nav && evt->delta_unit != UI_EventDeltaUnit_Whole && delta.x < 0 && start_cursor == line_range.min && line_num-1 >= 1)
|
||||
if(need_nav && evt->delta_unit != UI_EventDeltaUnit_Whole && evt->delta_unit != UI_EventDeltaUnit_Line && delta.x < 0 && start_cursor == line_range.min && line_num-1 >= 1)
|
||||
{
|
||||
Rng1U64 prev_line_range = txt_range_from_line_num(&text_patched.line_map, line_num-1);
|
||||
*cursor = prev_line_range.max;
|
||||
@@ -385,7 +385,16 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
|
||||
priority_margin_width_px = floor_f32(big_glyph_advance*3.5f);
|
||||
catchall_margin_width_px = floor_f32(big_glyph_advance*3.5f);
|
||||
}
|
||||
TXT_LineTokensSlice slice = txt_line_tokens_slice_from_info_data_line_range(scratch.arena, text_info, text_data, visible_line_num_range);
|
||||
Rng1U64 visible_byte_range = r1u64(txt_range_from_line_num(&text_patched.line_map, visible_line_num_range.min).min,
|
||||
txt_range_from_line_num(&text_patched.line_map, visible_line_num_range.max).max);
|
||||
String8 visible_data = memory_map_data_from_range(scratch.arena, &text_patched.memory_map, visible_byte_range);
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: find tokens for visible byte range
|
||||
//
|
||||
U64 ctx_token_pt_num = txt_token_pt_num_from_off(&text_patched.token_pt_map, visible_byte_range.min);
|
||||
TXT_TokenPt ctx_token_pt = txt_token_pt_from_num(&text_patched.token_pt_map, ctx_token_pt_num);
|
||||
TXT_TokenArray tokens = txt_token_array_from_data(scratch.arena, ctx_token_pt, visible_data, visible_byte_range.min, max_U64);
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: selection on single line, no query? -> set search text
|
||||
@@ -459,7 +468,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
|
||||
code_slice_params.line_text_max_width_px = (F32)line_size_x;
|
||||
code_slice_params.margin_float_off_px = scroll_pos.x.idx + floor_f32(scroll_pos.x.off);
|
||||
|
||||
// rjf: fill text info
|
||||
// rjf: fill line text / ranges
|
||||
{
|
||||
S64 line_num = visible_line_num_range.min;
|
||||
U64 line_idx = visible_line_num_range.min-1;
|
||||
@@ -474,8 +483,35 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
|
||||
memory_map_read(&text_patched.memory_map, line_range, line_text.str);
|
||||
code_slice_params.line_text[visible_line_idx] = line_text;
|
||||
code_slice_params.line_ranges[visible_line_idx] = line_range;
|
||||
// TODO(rjf): tokens
|
||||
// code_slice_params.line_tokens[visible_line_idx] = slice.line_tokens[visible_line_idx];
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: bucket tokens by line
|
||||
{
|
||||
U64 token_idx = 0;
|
||||
for EachIndex(line_idx, visible_line_count)
|
||||
{
|
||||
Temp scratch2 = scratch_begin(&scratch.arena, 1);
|
||||
Rng1U64 line_range = code_slice_params.line_ranges[line_idx];
|
||||
TXT_TokenList line_tokens = {0};
|
||||
for(;token_idx < tokens.count;)
|
||||
{
|
||||
Rng1U64 token_range = tokens.v[token_idx].range;
|
||||
if(dim_1u64(intersect_1u64(token_range, line_range)) != 0)
|
||||
{
|
||||
txt_token_list_push(scratch2.arena, &line_tokens, &tokens.v[token_idx]);
|
||||
}
|
||||
if(token_range.max <= line_range.max || token_range.max <= line_range.min)
|
||||
{
|
||||
token_idx += 1;
|
||||
}
|
||||
else if(line_range.max <= token_range.max)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
code_slice_params.line_tokens[line_idx] = txt_token_array_from_list(scratch.arena, &line_tokens);
|
||||
scratch_end(scratch2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -157,8 +157,8 @@ str8_lit_comp("->"),
|
||||
|
||||
TXT_TokenizerRule txt_tokenizer_rules__c[7] =
|
||||
{
|
||||
{TXT_TokenKind_Comment, str8_lit_comp("//"), str8_lit_comp("\n"), 0, 0, 1, 0},
|
||||
{TXT_TokenKind_Comment, str8_lit_comp("/*"), str8_lit_comp("*/"), 2, 0, 0, 0},
|
||||
{TXT_TokenKind_LineComment, str8_lit_comp("//"), str8_lit_comp("\n"), 0, 0, 1, 0},
|
||||
{TXT_TokenKind_BlockComment, str8_lit_comp("/*"), str8_lit_comp("*/"), 2, 0, 0, 0},
|
||||
{TXT_TokenKind_Meta, str8_lit_comp("#"), str8_lit_comp("\n"), 0, 0, 1, 0},
|
||||
{TXT_TokenKind_String, str8_lit_comp("\""), str8_lit_comp("\""), 1, 0, 1, 0},
|
||||
{TXT_TokenKind_String, str8_lit_comp("'"), str8_lit_comp("'"), 1, 0, 1, 0},
|
||||
|
||||
+720
-76
@@ -549,8 +549,8 @@ txt_token_array_from_string__c_cpp(Arena *arena, U64 *bytes_processed_counter, S
|
||||
char_is_digit(next_byte, 10))) { active_token_kind = TXT_TokenKind_Numeric; }
|
||||
else if(byte == '"') { active_token_kind = TXT_TokenKind_String; string_is_char = 0; }
|
||||
else if(byte == '\'') { active_token_kind = TXT_TokenKind_String; string_is_char = 1; }
|
||||
else if(byte == '/' && next_byte == '/') { active_token_kind = TXT_TokenKind_Comment; comment_is_single_line = 1; }
|
||||
else if(byte == '/' && next_byte == '*') { active_token_kind = TXT_TokenKind_Comment; comment_is_single_line = 0; }
|
||||
else if(byte == '/' && next_byte == '/') { active_token_kind = TXT_TokenKind_LineComment; comment_is_single_line = 1; }
|
||||
else if(byte == '/' && next_byte == '*') { active_token_kind = TXT_TokenKind_BlockComment; comment_is_single_line = 0; }
|
||||
else if(byte == '~' || byte == '!' ||
|
||||
byte == '%' || byte == '^' ||
|
||||
byte == '&' || byte == '*' ||
|
||||
@@ -624,17 +624,14 @@ txt_token_array_from_string__c_cpp(Arena *arena, U64 *bytes_processed_counter, S
|
||||
byte != '>' && byte != '/' &&
|
||||
byte != '?' && byte != '|');
|
||||
}break;
|
||||
case TXT_TokenKind_Comment:
|
||||
case TXT_TokenKind_LineComment:
|
||||
{
|
||||
if(comment_is_single_line)
|
||||
{
|
||||
ender_found = (!escaped && (byte == '\r' || byte == '\n'));
|
||||
}
|
||||
else
|
||||
{
|
||||
ender_found = (active_token_start_idx+1 < idx && byte == '*' && next_byte == '/');
|
||||
ender_pad += 2;
|
||||
}
|
||||
ender_found = (!escaped && (byte == '\r' || byte == '\n'));
|
||||
}break;
|
||||
case TXT_TokenKind_BlockComment:
|
||||
{
|
||||
ender_found = (active_token_start_idx+1 < idx && byte == '*' && next_byte == '/');
|
||||
ender_pad += 2;
|
||||
}break;
|
||||
case TXT_TokenKind_Meta:
|
||||
{
|
||||
@@ -893,8 +890,8 @@ txt_token_array_from_string__odin(Arena *arena, U64 *bytes_processed_counter, St
|
||||
char_is_digit(next_byte, 10))) { active_token_kind = TXT_TokenKind_Numeric; }
|
||||
else if(byte == '"') { active_token_kind = TXT_TokenKind_String; string_is_char = 0; }
|
||||
else if(byte == '\'') { active_token_kind = TXT_TokenKind_String; string_is_char = 1; }
|
||||
else if(byte == '/' && next_byte == '/') { active_token_kind = TXT_TokenKind_Comment; comment_is_single_line = 1; }
|
||||
else if(byte == '/' && next_byte == '*') { active_token_kind = TXT_TokenKind_Comment; comment_is_single_line = 0; }
|
||||
else if(byte == '/' && next_byte == '/') { active_token_kind = TXT_TokenKind_LineComment; comment_is_single_line = 1; }
|
||||
else if(byte == '/' && next_byte == '*') { active_token_kind = TXT_TokenKind_BlockComment; comment_is_single_line = 0; }
|
||||
else if(byte == '~' || byte == '!' ||
|
||||
byte == '%' || byte == '^' ||
|
||||
byte == '&' || byte == '*' ||
|
||||
@@ -968,17 +965,14 @@ txt_token_array_from_string__odin(Arena *arena, U64 *bytes_processed_counter, St
|
||||
byte != '>' && byte != '/' &&
|
||||
byte != '?' && byte != '|');
|
||||
}break;
|
||||
case TXT_TokenKind_Comment:
|
||||
case TXT_TokenKind_LineComment:
|
||||
{
|
||||
if(comment_is_single_line)
|
||||
{
|
||||
ender_found = (!escaped && (byte == '\r' || byte == '\n'));
|
||||
}
|
||||
else
|
||||
{
|
||||
ender_found = (active_token_start_idx+1 < idx && byte == '*' && next_byte == '/');
|
||||
ender_pad += 2;
|
||||
}
|
||||
ender_found = (!escaped && (byte == '\r' || byte == '\n'));
|
||||
}break;
|
||||
case TXT_TokenKind_BlockComment:
|
||||
{
|
||||
ender_found = (active_token_start_idx+1 < idx && byte == '*' && next_byte == '/');
|
||||
ender_pad += 2;
|
||||
}break;
|
||||
case TXT_TokenKind_Meta:
|
||||
{
|
||||
@@ -1179,8 +1173,8 @@ txt_token_array_from_string__jai(Arena *arena, U64 *bytes_processed_counter, Str
|
||||
char_is_digit(next_byte, 10))) { active_token_kind = TXT_TokenKind_Numeric; }
|
||||
else if(byte == '"') { active_token_kind = TXT_TokenKind_String; string_is_char = 0; }
|
||||
else if(byte == '\'') { active_token_kind = TXT_TokenKind_String; string_is_char = 1; }
|
||||
else if(byte == '/' && next_byte == '/') { active_token_kind = TXT_TokenKind_Comment; comment_is_single_line = 1; }
|
||||
else if(byte == '/' && next_byte == '*') { active_token_kind = TXT_TokenKind_Comment; comment_is_single_line = 0; }
|
||||
else if(byte == '/' && next_byte == '/') { active_token_kind = TXT_TokenKind_LineComment; comment_is_single_line = 1; }
|
||||
else if(byte == '/' && next_byte == '*') { active_token_kind = TXT_TokenKind_BlockComment; comment_is_single_line = 0; }
|
||||
else if(byte == '~' || byte == '!' ||
|
||||
byte == '%' || byte == '^' ||
|
||||
byte == '&' || byte == '*' ||
|
||||
@@ -1254,17 +1248,14 @@ txt_token_array_from_string__jai(Arena *arena, U64 *bytes_processed_counter, Str
|
||||
byte != '>' && byte != '/' &&
|
||||
byte != '?' && byte != '|');
|
||||
}break;
|
||||
case TXT_TokenKind_Comment:
|
||||
case TXT_TokenKind_LineComment:
|
||||
{
|
||||
if(comment_is_single_line)
|
||||
{
|
||||
ender_found = (!escaped && (byte == '\r' || byte == '\n'));
|
||||
}
|
||||
else
|
||||
{
|
||||
ender_found = (active_token_start_idx+1 < idx && byte == '*' && next_byte == '/');
|
||||
ender_pad += 2;
|
||||
}
|
||||
ender_found = (!escaped && (byte == '\r' || byte == '\n'));
|
||||
}break;
|
||||
case TXT_TokenKind_BlockComment:
|
||||
{
|
||||
ender_found = (active_token_start_idx+1 < idx && byte == '*' && next_byte == '/');
|
||||
ender_pad += 2;
|
||||
}break;
|
||||
case TXT_TokenKind_Meta:
|
||||
{
|
||||
@@ -1465,7 +1456,7 @@ txt_token_array_from_string__zig(Arena *arena, U64 *bytes_processed_counter, Str
|
||||
else if(byte == '\'') { active_token_kind = TXT_TokenKind_String; string_is_char = 1; }
|
||||
else if(byte == '\\' &&
|
||||
next_byte == '\\') { active_token_kind = TXT_TokenKind_String; string_is_line = 1; }
|
||||
else if(byte == '/' && next_byte == '/') { active_token_kind = TXT_TokenKind_Comment; }
|
||||
else if(byte == '/' && next_byte == '/') { active_token_kind = TXT_TokenKind_LineComment; }
|
||||
else if(byte == '~' || byte == '!' ||
|
||||
byte == '%' || byte == '^' ||
|
||||
byte == '&' || byte == '*' ||
|
||||
@@ -1547,7 +1538,7 @@ txt_token_array_from_string__zig(Arena *arena, U64 *bytes_processed_counter, Str
|
||||
byte != '?' && byte != '|' &&
|
||||
byte != 'c');
|
||||
}break;
|
||||
case TXT_TokenKind_Comment:
|
||||
case TXT_TokenKind_LineComment:
|
||||
{
|
||||
ender_found = (!escaped && (byte == '\r' || byte == '\n'));
|
||||
}break;
|
||||
@@ -1709,7 +1700,7 @@ txt_token_array_from_string__rust(Arena *arena, U64 *bytes_processed_counter, St
|
||||
{
|
||||
// NOTE(spey): Rust supports unicode identifiers. They are not handled in any way here,
|
||||
// but it might be worth looking into in the future.
|
||||
|
||||
#if 0
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
|
||||
//- rjf: generate token list
|
||||
@@ -2066,6 +2057,9 @@ txt_token_array_from_string__rust(Arena *arena, U64 *bytes_processed_counter, St
|
||||
TXT_TokenArray result = txt_token_array_from_chunk_list(arena, &tokens);
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
#endif
|
||||
TXT_TokenArray result = {0};
|
||||
return result;
|
||||
}
|
||||
|
||||
internal TXT_TokenArray
|
||||
@@ -2109,7 +2103,7 @@ txt_token_array_from_string__disasm_x64_intel(Arena *arena, U64 *bytes_processed
|
||||
else if(byte == '>' && brace_nest == 0 && paren_nest == 0)
|
||||
{
|
||||
active_token_start_off = off;
|
||||
active_token_kind = TXT_TokenKind_Comment;
|
||||
active_token_kind = TXT_TokenKind_LineComment;
|
||||
advance = 1;
|
||||
}
|
||||
else if(('a' <= byte && byte <= 'z') || ('A' <= byte && byte <= 'Z') || byte == '_')
|
||||
@@ -2259,7 +2253,7 @@ txt_token_array_from_string__disasm_x64_intel(Arena *arena, U64 *bytes_processed
|
||||
ender_found = 1;
|
||||
advance = 0;
|
||||
}break;
|
||||
case TXT_TokenKind_Comment:
|
||||
case TXT_TokenKind_LineComment:
|
||||
if(byte == '\n')
|
||||
{
|
||||
ender_found = 1;
|
||||
@@ -2357,6 +2351,296 @@ txt_range_from_line_num(TXT_LineMap *map, U64 num)
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void
|
||||
txt_token_pt_map_push(Arena *arena, TXT_TokenPtMap *map, Rng1U64 num_range, TXT_TokenPt *pts, S64 delta)
|
||||
{
|
||||
TXT_TokenPtMapRangeNode *n = push_array(arena, TXT_TokenPtMapRangeNode, 1);
|
||||
SLLQueuePush(map->first_range, map->last_range, n);
|
||||
n->num_range = num_range;
|
||||
n->pts = pts;
|
||||
n->delta = delta;
|
||||
map->total_pt_count += dim_1u64(num_range);
|
||||
}
|
||||
|
||||
internal U64
|
||||
txt_token_pt_num_from_off(TXT_TokenPtMap *map, U64 off)
|
||||
{
|
||||
U64 result = 0;
|
||||
for EachNode(n, TXT_TokenPtMapRangeNode, map->first_range)
|
||||
{
|
||||
U64 num_pts = dim_1u64(n->num_range);
|
||||
if(num_pts != 0)
|
||||
{
|
||||
U64 first_off = n->pts[0].off + n->delta;
|
||||
U64 last_off = n->pts[num_pts-1].off + n->delta;
|
||||
if(first_off <= off && off <= last_off)
|
||||
{
|
||||
U64 first_idx = 0;
|
||||
U64 last_idx = num_pts-1;
|
||||
for(;first_idx <= last_idx;)
|
||||
{
|
||||
U64 mid_idx = (last_idx + first_idx) / 2;
|
||||
U64 mid_off = n->pts[mid_idx].off + n->delta;
|
||||
if(off < mid_off)
|
||||
{
|
||||
last_idx = mid_idx - 1;
|
||||
}
|
||||
else if(mid_off < off)
|
||||
{
|
||||
first_idx = mid_idx;
|
||||
}
|
||||
else if(off == mid_off)
|
||||
{
|
||||
first_idx = mid_idx;
|
||||
break;
|
||||
}
|
||||
}
|
||||
result = n->num_range.min + first_idx;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal TXT_TokenPt
|
||||
txt_token_pt_from_num(TXT_TokenPtMap *map, U64 num)
|
||||
{
|
||||
TXT_TokenPt pt = {TXT_TokenKind_Null};
|
||||
if(num > 0)
|
||||
{
|
||||
for EachNode(n, TXT_TokenPtMapRangeNode, map->first_range)
|
||||
{
|
||||
if(contains_1u64(n->num_range, num))
|
||||
{
|
||||
pt = n->pts[num - n->num_range.min];
|
||||
pt.off += n->delta;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return pt;
|
||||
}
|
||||
|
||||
internal TXT_TokenArray
|
||||
txt_token_array_from_data(Arena *arena, TXT_TokenPt ctx_token_pt, String8 data, U64 base_off, U64 limit)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
TXT_TokenChunkList tokens = {0};
|
||||
{
|
||||
U64 chunk_size = Clamp(8, data.size/8, 4096);
|
||||
TXT_TokenKind active_token_kind = ctx_token_pt.kind;
|
||||
U64 active_token_start_off = ctx_token_pt.off;
|
||||
B32 escaped = 0;
|
||||
for(U64 off = 0; off <= data.size;)
|
||||
{
|
||||
U8 byte = (off+0 < data.size) ? data.str[off+0] : 0;
|
||||
U8 next_byte = (off+1 < data.size) ? data.str[off+1] : 0;
|
||||
B32 token_finished = 0;
|
||||
U64 advance = 1;
|
||||
|
||||
//- rjf: adjust escaping state
|
||||
if(active_token_kind != TXT_TokenKind_Null && byte == '\\')
|
||||
{
|
||||
escaped = 1;
|
||||
}
|
||||
|
||||
//- rjf: take starter bytes for new tokens
|
||||
if(active_token_kind == TXT_TokenKind_Null)
|
||||
{
|
||||
if(0){}
|
||||
else if(byte == ' ' || byte == '\n' || byte == '\t' ||
|
||||
byte == '\r' || byte == '\f' || byte == '\v')
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_Whitespace;
|
||||
advance = 0;
|
||||
}
|
||||
else if(byte == '_' || byte == '$' ||
|
||||
('a' <= byte && byte <= 'z') ||
|
||||
('A' <= byte && byte <= 'Z'))
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_Identifier;
|
||||
advance = 0;
|
||||
}
|
||||
else if(('0' <= byte && byte <= '9') ||
|
||||
(byte == '.' && ('0' <= next_byte && next_byte <= '9')))
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_Numeric;
|
||||
advance = 0;
|
||||
}
|
||||
else if(byte == '"')
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_String;
|
||||
advance = 1;
|
||||
}
|
||||
else if(byte == '\'')
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_Char;
|
||||
advance = 1;
|
||||
}
|
||||
else if(byte == '/' && next_byte == '/')
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_LineComment;
|
||||
advance = 2;
|
||||
}
|
||||
else if(byte == '/' && next_byte == '*')
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_BlockComment;
|
||||
advance = 2;
|
||||
}
|
||||
else if(byte == '~' || byte == '!' ||
|
||||
byte == '%' || byte == '^' ||
|
||||
byte == '&' || byte == '*' ||
|
||||
byte == '(' || byte == ')' ||
|
||||
byte == '-' || byte == '=' ||
|
||||
byte == '+' || byte == '[' ||
|
||||
byte == ']' || byte == '{' ||
|
||||
byte == '}' || byte == ':' ||
|
||||
byte == ';' || byte == ',' ||
|
||||
byte == '.' || byte == '<' ||
|
||||
byte == '>' || byte == '/' ||
|
||||
byte == '?' || byte == '|')
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_Symbol;
|
||||
advance = 1;
|
||||
}
|
||||
if(active_token_kind != TXT_TokenKind_Null)
|
||||
{
|
||||
active_token_start_off = off;
|
||||
}
|
||||
else
|
||||
{
|
||||
TXT_Token token = {TXT_TokenKind_Error, r1u64(base_off+off, base_off+off+1)};
|
||||
txt_token_chunk_list_push(scratch.arena, &tokens, chunk_size, &token);
|
||||
advance = 1;
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: look for active token enders
|
||||
else switch(active_token_kind)
|
||||
{
|
||||
default:{}break;
|
||||
case TXT_TokenKind_Whitespace:
|
||||
{
|
||||
if(byte != ' ' && byte != '\n' && byte != '\t' &&
|
||||
byte != '\r' && byte != '\f' && byte != '\v')
|
||||
{
|
||||
token_finished = 1;
|
||||
advance = 0;
|
||||
}
|
||||
}break;
|
||||
case TXT_TokenKind_Identifier:
|
||||
{
|
||||
// TODO(rjf): stupid C++ symbol names - `string_literals_like_this'
|
||||
if((byte < '0' || '9' < byte) &&
|
||||
(byte < 'a' || 'z' < byte) &&
|
||||
(byte < 'A' || 'Z' < byte) &&
|
||||
byte != '$' &&
|
||||
byte != '_')
|
||||
{
|
||||
token_finished = 1;
|
||||
advance = 0;
|
||||
}
|
||||
}break;
|
||||
case TXT_TokenKind_Numeric:
|
||||
{
|
||||
if((byte < '0' || '9' < byte) &&
|
||||
(byte < 'a' || 'z' < byte) &&
|
||||
(byte < 'A' || 'Z' < byte) &&
|
||||
byte != '.')
|
||||
{
|
||||
token_finished = 1;
|
||||
advance = 0;
|
||||
}
|
||||
}break;
|
||||
case TXT_TokenKind_String:
|
||||
{
|
||||
if(byte == '"')
|
||||
{
|
||||
token_finished = 1;
|
||||
advance = 1;
|
||||
}
|
||||
}break;
|
||||
case TXT_TokenKind_Char:
|
||||
{
|
||||
if(byte == '\'')
|
||||
{
|
||||
token_finished = 1;
|
||||
advance = 1;
|
||||
}
|
||||
}break;
|
||||
case TXT_TokenKind_Symbol:
|
||||
{
|
||||
if(byte != '~' && byte != '!' &&
|
||||
byte != '%' && byte != '^' &&
|
||||
byte != '&' && byte != '*' &&
|
||||
byte != '(' && byte != ')' &&
|
||||
byte != '-' && byte != '=' &&
|
||||
byte != '+' && byte != '[' &&
|
||||
byte != ']' && byte != '{' &&
|
||||
byte != '}' && byte != ':' &&
|
||||
byte != ';' && byte != ',' &&
|
||||
byte != '.' && byte != '<' &&
|
||||
byte != '>' && byte != '/' &&
|
||||
byte != '?' && byte != '|')
|
||||
{
|
||||
token_finished = 1;
|
||||
advance = 0;
|
||||
}
|
||||
}break;
|
||||
case TXT_TokenKind_LineComment:
|
||||
{
|
||||
if(byte == '\n')
|
||||
{
|
||||
token_finished = 1;
|
||||
advance = 1;
|
||||
}
|
||||
}break;
|
||||
case TXT_TokenKind_BlockComment:
|
||||
{
|
||||
if(byte == '*' && next_byte == '/')
|
||||
{
|
||||
token_finished = 1;
|
||||
advance = 2;
|
||||
}
|
||||
}break;
|
||||
case TXT_TokenKind_Meta:
|
||||
{
|
||||
if(byte == '\n')
|
||||
{
|
||||
token_finished = 1;
|
||||
advance = 1;
|
||||
}
|
||||
}break;
|
||||
}
|
||||
|
||||
//- rjf: finish all tokens if we're at the end of the data
|
||||
if(off == data.size)
|
||||
{
|
||||
token_finished = 1;
|
||||
advance = 1;
|
||||
}
|
||||
|
||||
//- rjf: push completed token
|
||||
if(token_finished)
|
||||
{
|
||||
TXT_Token token = {active_token_kind, r1u64(base_off+active_token_start_off, base_off+off+advance)};
|
||||
txt_token_chunk_list_push(scratch.arena, &tokens, chunk_size, &token);
|
||||
active_token_kind = TXT_TokenKind_Null;
|
||||
}
|
||||
|
||||
//- rjf: reset escaped state
|
||||
escaped = 0;
|
||||
|
||||
//- rjf: advance
|
||||
off += advance;
|
||||
}
|
||||
}
|
||||
TXT_TokenArray result = txt_token_array_from_chunk_list(arena, &tokens);
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal TXT_Patched
|
||||
txt_patched_from_info_data_patches(Arena *arena, TXT_TextInfo *info, String8 data, TXT_PatchList *patches)
|
||||
{
|
||||
@@ -2366,14 +2650,17 @@ txt_patched_from_info_data_patches(Arena *arena, TXT_TextInfo *info, String8 dat
|
||||
MemoryMap last_memory_map = {0};
|
||||
U64 last_size = data.size;
|
||||
TXT_LineMap last_line_map = {0};
|
||||
TXT_TokenPtMap last_token_pt_map = {0};
|
||||
memory_map_push(scratch.arena, &last_memory_map, r1u64(0, data.size), data.str);
|
||||
txt_line_map_push(scratch.arena, &last_line_map, r1u64(1, info->lines_count+1), info->lines_ranges, 0);
|
||||
txt_token_pt_map_push(scratch.arena, &last_token_pt_map, r1u64(0, info->big_token_pts_count), info->big_token_pts, 0);
|
||||
|
||||
// rjf: apply the patches in order, each being able to slice/dice the previous memory map
|
||||
for EachNode(n, TXT_PatchNode, patches->first)
|
||||
{
|
||||
MemoryMap next_memory_map = {0};
|
||||
TXT_LineMap next_line_map = {0};
|
||||
TXT_TokenPtMap next_token_pt_map = {0};
|
||||
|
||||
// rjf: compute portion of memory before/after this replace-range
|
||||
Rng1U64 pre_replace_range = r1u64(0, n->v.range.min);
|
||||
@@ -2390,6 +2677,17 @@ txt_patched_from_info_data_patches(Arena *arena, TXT_TextInfo *info, String8 dat
|
||||
Rng1U64 pre_replace_line_num_range = r1u64(1, replace_line_num_range.min);
|
||||
Rng1U64 post_replace_line_num_range = r1u64(replace_line_num_range.max+1, last_line_map.total_line_count+1);
|
||||
|
||||
// rjf: map this replace range -> range of token pts
|
||||
Rng1U64 replace_token_pt_range = {0};
|
||||
{
|
||||
replace_token_pt_range.min = txt_token_pt_num_from_off(&last_token_pt_map, n->v.range.min);
|
||||
replace_token_pt_range.max = txt_token_pt_num_from_off(&last_token_pt_map, n->v.range.max);
|
||||
}
|
||||
|
||||
// rjf: compute ranges of unchanged token pts before/after this replace-range
|
||||
Rng1U64 pre_replace_token_pt_range = r1u64(1, replace_token_pt_range.min);
|
||||
Rng1U64 post_replace_token_pt_range = r1u64(replace_token_pt_range.max, last_token_pt_map.total_pt_count+1);
|
||||
|
||||
// rjf: compute delta & next size
|
||||
S64 size_delta = (S64)n->v.replace.size - (S64)dim_1u64(n->v.range);
|
||||
U64 next_size = (U64)((S64)last_size + size_delta);
|
||||
@@ -2417,6 +2715,12 @@ txt_patched_from_info_data_patches(Arena *arena, TXT_TextInfo *info, String8 dat
|
||||
rng1u64_list_push(scratch.arena, &replace_line_ranges, r1u64(last_line_start_off, n->v.replace.size));
|
||||
}
|
||||
|
||||
// rjf: compute token pt delta
|
||||
S64 token_pt_delta = 0;
|
||||
{
|
||||
// TODO(rjf)
|
||||
}
|
||||
|
||||
// rjf: push all portions of pre-replace / post-replace ranges in previous memory map
|
||||
{
|
||||
for EachNode(map_n, MemoryMapRangeNode, last_memory_map.first_range)
|
||||
@@ -2504,10 +2808,32 @@ txt_patched_from_info_data_patches(Arena *arena, TXT_TextInfo *info, String8 dat
|
||||
// rjf: push affected line ranges
|
||||
txt_line_map_push(scratch.arena, &next_line_map, r1u64(replace_line_num_range.min, replace_line_num_range.min + affected_line_count), affected_line_ranges, 0);
|
||||
|
||||
// rjf: push all portions of pre-replace / post-replace ranges in previous token pt map
|
||||
{
|
||||
for EachNode(n, TXT_TokenPtMapRangeNode, last_token_pt_map.first_range)
|
||||
{
|
||||
Rng1U64 num_range = n->num_range;
|
||||
Rng1U64 range_x_pre = intersect_1u64(pre_replace_token_pt_range, num_range);
|
||||
Rng1U64 range_x_post = intersect_1u64(post_replace_token_pt_range, num_range);
|
||||
if(range_x_pre.max > range_x_pre.min)
|
||||
{
|
||||
txt_token_pt_map_push(scratch.arena, &next_token_pt_map, range_x_pre, n->pts + (range_x_pre.min - num_range.min), n->delta);
|
||||
}
|
||||
if(range_x_post.max > range_x_post.min)
|
||||
{
|
||||
Rng1U64 range_x_post_shifted = range_x_post;
|
||||
range_x_post_shifted.min = (U64)((S64)range_x_post_shifted.min + token_pt_delta);
|
||||
range_x_post_shifted.max = (U64)((S64)range_x_post_shifted.max + token_pt_delta);
|
||||
txt_token_pt_map_push(scratch.arena, &next_token_pt_map, range_x_post_shifted, n->pts + (range_x_post.min - num_range.min), n->delta);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: advance to the next memory map
|
||||
last_memory_map = next_memory_map;
|
||||
last_size = next_size;
|
||||
last_line_map = next_line_map;
|
||||
last_token_pt_map = next_token_pt_map;
|
||||
}
|
||||
|
||||
// rjf: fill result
|
||||
@@ -2522,6 +2848,10 @@ txt_patched_from_info_data_patches(Arena *arena, TXT_TextInfo *info, String8 dat
|
||||
{
|
||||
txt_line_map_push(arena, &result.line_map, n->num_range, n->ranges, n->delta);
|
||||
}
|
||||
for EachNode(n, TXT_TokenPtMapRangeNode, last_token_pt_map.first_range)
|
||||
{
|
||||
txt_token_pt_map_push(arena, &result.token_pt_map, n->num_range, n->pts, n->delta);
|
||||
}
|
||||
}
|
||||
|
||||
scratch_end(scratch);
|
||||
@@ -2969,38 +3299,8 @@ txt_artifact_create(String8 key, B32 *cancel_signal, AC_Status *status_out, U64
|
||||
}
|
||||
|
||||
//- rjf: set # of bytes to process
|
||||
// (line ending calc) (line counting) (line measuring) (lexing)
|
||||
set_progress_target(Min(data.size, 1024) + data.size + data.size + data.size*(lang != TXT_LangKind_Null));
|
||||
|
||||
//- rjf: detect line end kind
|
||||
TXT_LineEndKind line_end_kind = TXT_LineEndKind_Null;
|
||||
if(lane_idx() == 0)
|
||||
{
|
||||
U64 lf_count = 0;
|
||||
U64 cr_count = 0;
|
||||
for(U64 idx = 0; idx < data.size && idx < 1024; idx += 1)
|
||||
{
|
||||
if(data.str[idx] == '\r')
|
||||
{
|
||||
cr_count += 1;
|
||||
}
|
||||
if(data.str[idx] == '\n')
|
||||
{
|
||||
lf_count += 1;
|
||||
}
|
||||
}
|
||||
if(cr_count >= lf_count/2 && lf_count >= 1)
|
||||
{
|
||||
line_end_kind = TXT_LineEndKind_CRLF;
|
||||
}
|
||||
else if(lf_count >= 1)
|
||||
{
|
||||
line_end_kind = TXT_LineEndKind_LF;
|
||||
}
|
||||
shared->info.line_end_kind = line_end_kind;
|
||||
}
|
||||
lane_sync();
|
||||
set_progress(Min(data.size, 1024));
|
||||
// (line counting) (line measuring) (lexing)
|
||||
set_progress_target(data.size + data.size + data.size*(lang != TXT_LangKind_Null));
|
||||
|
||||
//- rjf: count # of lines
|
||||
U64 lane_line_count = 0;
|
||||
@@ -3048,11 +3348,16 @@ txt_artifact_create(String8 key, B32 *cancel_signal, AC_Status *status_out, U64
|
||||
lane_sync_u64(&lane_line_base_idxs, 0);
|
||||
|
||||
//- rjf: allocate & store line ranges
|
||||
U64 *lane_line_max_size = 0;
|
||||
U64 *lane_cr_count = 0;
|
||||
if(lane_idx() == 0)
|
||||
{
|
||||
lane_cr_count = push_array(scratch.arena, U64, lane_count());
|
||||
lane_line_max_size = push_array(scratch.arena, U64, lane_count());
|
||||
shared->info.lines_ranges = push_array_no_zero(shared->arena, Rng1U64, shared->info.lines_count);
|
||||
}
|
||||
lane_sync();
|
||||
lane_sync_u64(&lane_line_max_size, 0);
|
||||
lane_sync_u64(&lane_cr_count, 0);
|
||||
{
|
||||
Rng1U64 range = lane_range(data.size+1);
|
||||
U64 lane_line_idx = 0;
|
||||
@@ -3084,12 +3389,12 @@ txt_artifact_create(String8 key, B32 *cancel_signal, AC_Status *status_out, U64
|
||||
Rng1U64 line_range = r1u64(line_start_idx, idx);
|
||||
if(idx > 0 && data.str[idx-1] == '\r' && line_range.max > line_range.min)
|
||||
{
|
||||
lane_cr_count[lane_idx()] += 1;
|
||||
line_range.max -= 1;
|
||||
}
|
||||
U64 line_size = dim_1u64(line_range);
|
||||
shared->info.lines_ranges[lane_line_base_idxs[lane_idx()] + lane_line_idx] = line_range;
|
||||
// TODO(rjf): this is a race:
|
||||
shared->info.lines_max_size = Max(shared->info.lines_max_size, line_size);
|
||||
lane_line_max_size[lane_idx()] = Max(lane_line_max_size[lane_idx()], line_size);
|
||||
lane_line_idx += 1;
|
||||
line_start_idx = idx+1;
|
||||
}
|
||||
@@ -3102,6 +3407,345 @@ txt_artifact_create(String8 key, B32 *cancel_signal, AC_Status *status_out, U64
|
||||
lane_sync();
|
||||
set_progress(Min(data.size, 1024) + data.size + data.size);
|
||||
|
||||
//- rjf: find max line size across all lanes
|
||||
if(lane_idx() == 0)
|
||||
{
|
||||
for EachIndex(l_idx, lane_count())
|
||||
{
|
||||
shared->info.lines_max_size = Max(shared->info.lines_max_size, lane_line_max_size[l_idx]);
|
||||
}
|
||||
}
|
||||
lane_sync();
|
||||
|
||||
//- rjf: pick LF/CRLF based on significant ratio of CR characters across all lanes
|
||||
{
|
||||
TXT_LineEndKind line_end_kind = TXT_LineEndKind_Null;
|
||||
if(lane_idx() == 0)
|
||||
{
|
||||
U64 total_cr_count = 0;
|
||||
for EachIndex(l_idx, lane_count())
|
||||
{
|
||||
total_cr_count += lane_cr_count[l_idx];
|
||||
}
|
||||
if(total_cr_count > shared->info.lines_count / 4 && total_cr_count > 0)
|
||||
{
|
||||
line_end_kind = TXT_LineEndKind_CRLF;
|
||||
}
|
||||
shared->info.line_end_kind = line_end_kind;
|
||||
}
|
||||
lane_sync();
|
||||
}
|
||||
|
||||
//- rjf: find all token endpoint candidates across all lanes
|
||||
//
|
||||
// note that these are not necessarily actually token-forming sequences of
|
||||
// characters. we're effectively just building an acceleration structure to
|
||||
// quickly process the buffer - to skip between sequences of *plausible*
|
||||
// token markers. but, for example, if a `//` showed up inside of two `"`s,
|
||||
// then there would not be a comment token emitted. we just do this (rather
|
||||
// than going through the buffer sequentially) so that we can do this gather
|
||||
// step wide, and for the serially-dependent tokenization state machine part,
|
||||
// we can do that over much less data.
|
||||
//
|
||||
typedef struct TokenEndpointCandidateChunkNode TokenEndpointCandidateChunkNode;
|
||||
struct TokenEndpointCandidateChunkNode
|
||||
{
|
||||
TokenEndpointCandidateChunkNode *next;
|
||||
U64 *v;
|
||||
U64 count;
|
||||
U64 cap;
|
||||
};
|
||||
TokenEndpointCandidateChunkNode **lanes_first_token_endpoint_candidate_chunks = 0;
|
||||
TokenEndpointCandidateChunkNode **lanes_last_token_endpoint_candidate_chunks = 0;
|
||||
{
|
||||
if(lane_idx() == 0)
|
||||
{
|
||||
lanes_first_token_endpoint_candidate_chunks = push_array(scratch.arena, TokenEndpointCandidateChunkNode *, lane_count());
|
||||
lanes_last_token_endpoint_candidate_chunks = push_array(scratch.arena, TokenEndpointCandidateChunkNode *, lane_count());
|
||||
}
|
||||
lane_sync_u64(&lanes_first_token_endpoint_candidate_chunks, 0);
|
||||
lane_sync_u64(&lanes_last_token_endpoint_candidate_chunks, 0);
|
||||
TokenEndpointCandidateChunkNode *first_chunk = 0;
|
||||
TokenEndpointCandidateChunkNode *last_chunk = 0;
|
||||
Rng1U64 range = lane_range(data.size);
|
||||
for EachInRange(off, range)
|
||||
{
|
||||
U8 byte = data.str[off];
|
||||
U8 next_byte = (off+1 < data.size) ? data.str[off+1] : 0;
|
||||
U8 prev_byte = (off > 0) ? data.str[off-1] : 0;
|
||||
B32 off_is_endpoint = 1;
|
||||
U64 extra_advance = 0;
|
||||
if(byte == '/' && next_byte == '*')
|
||||
{
|
||||
extra_advance = 1;
|
||||
}
|
||||
else if(byte == '*' && next_byte == '/')
|
||||
{
|
||||
extra_advance = 1;
|
||||
}
|
||||
else if(byte == 'R' && next_byte == '"')
|
||||
{
|
||||
extra_advance = 1;
|
||||
}
|
||||
else if(byte == '/' && next_byte == '/')
|
||||
{
|
||||
extra_advance = 1;
|
||||
}
|
||||
else if(byte == '#')
|
||||
{
|
||||
// NOTE(rjf): no-op
|
||||
}
|
||||
else if(prev_byte != '\\' && (byte == '"' || byte == '\''))
|
||||
{
|
||||
// NOTE(rjf): no-op
|
||||
}
|
||||
else
|
||||
{
|
||||
off_is_endpoint = 0;
|
||||
}
|
||||
if(off_is_endpoint)
|
||||
{
|
||||
TokenEndpointCandidateChunkNode *chunk = last_chunk;
|
||||
if(chunk == 0 || chunk->count >= chunk->cap)
|
||||
{
|
||||
chunk = push_array(scratch.arena, TokenEndpointCandidateChunkNode, 1);
|
||||
SLLQueuePush(first_chunk, last_chunk, chunk);
|
||||
chunk->cap = 512;
|
||||
chunk->v = push_array(scratch.arena, U64, chunk->cap);
|
||||
}
|
||||
chunk->v[chunk->count] = off;
|
||||
chunk->count += 1;
|
||||
}
|
||||
off += extra_advance;
|
||||
}
|
||||
lanes_first_token_endpoint_candidate_chunks[lane_idx()] = first_chunk;
|
||||
lanes_last_token_endpoint_candidate_chunks[lane_idx()] = last_chunk;
|
||||
lane_sync();
|
||||
}
|
||||
|
||||
//- rjf: join all token endpoint candidates from all lanes
|
||||
TokenEndpointCandidateChunkNode *first_token_endpoint_candidate_chunk = 0;
|
||||
TokenEndpointCandidateChunkNode *last_token_endpoint_candidate_chunk = 0;
|
||||
if(lane_idx() == 0)
|
||||
{
|
||||
for EachIndex(l_idx, lane_count())
|
||||
{
|
||||
if(last_token_endpoint_candidate_chunk == 0)
|
||||
{
|
||||
first_token_endpoint_candidate_chunk = lanes_first_token_endpoint_candidate_chunks[l_idx];
|
||||
last_token_endpoint_candidate_chunk = lanes_last_token_endpoint_candidate_chunks[l_idx];
|
||||
}
|
||||
else
|
||||
{
|
||||
last_token_endpoint_candidate_chunk->next = lanes_first_token_endpoint_candidate_chunks[l_idx];
|
||||
last_token_endpoint_candidate_chunk = lanes_last_token_endpoint_candidate_chunks[l_idx];
|
||||
}
|
||||
}
|
||||
}
|
||||
lane_sync_u64(&first_token_endpoint_candidate_chunk, 0);
|
||||
lane_sync_u64(&last_token_endpoint_candidate_chunk, 0);
|
||||
|
||||
//- rjf: scan sequence of token endpoint candidates - find big token ranges.
|
||||
typedef struct TokenPtChunkNode TokenPtChunkNode;
|
||||
struct TokenPtChunkNode
|
||||
{
|
||||
TokenPtChunkNode *next;
|
||||
TXT_TokenPt *v;
|
||||
U64 count;
|
||||
U64 cap;
|
||||
};
|
||||
TokenPtChunkNode *first_token_pt_chunk = 0;
|
||||
TokenPtChunkNode *last_token_pt_chunk = 0;
|
||||
U64 total_token_pt_count = 0;
|
||||
if(lane_idx() == 0)
|
||||
{
|
||||
TXT_TokenKind active_token_kind = TXT_TokenKind_Null;
|
||||
U64 active_token_start_off = 0;
|
||||
String8 herestring_marker = {0};
|
||||
U64 cand_chunk_idx = 0;
|
||||
for(TokenEndpointCandidateChunkNode *cand_chunk_n = first_token_endpoint_candidate_chunk; cand_chunk_n != 0;)
|
||||
{
|
||||
U64 off = cand_chunk_n->v[cand_chunk_idx];
|
||||
U8 byte = data.str[off];
|
||||
U8 next_byte = (off+1 < data.size) ? data.str[off+1] : 0;
|
||||
|
||||
//- rjf: no active token kind -> look for token starter
|
||||
TXT_TokenKind start_active_token_kind = active_token_kind;
|
||||
if(active_token_kind == TXT_TokenKind_Null)
|
||||
{
|
||||
// rjf: " -> start a string literal
|
||||
if(byte == '"')
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_String;
|
||||
herestring_marker.size = 0;
|
||||
}
|
||||
|
||||
// rjf: ' -> start a char literal
|
||||
else if(byte == '\'')
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_Char;
|
||||
herestring_marker.size = 0;
|
||||
}
|
||||
|
||||
// rjf: R" -> start a C++11+ style herestring
|
||||
else if(byte == 'R' && next_byte == '"')
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_String;
|
||||
U64 next_paren_pos = str8_find_needle(str8_prefix(data, off+2+256), off+2, s("("), 0);
|
||||
herestring_marker = str8_substr(data, r1u64(off+2, next_paren_pos));
|
||||
}
|
||||
|
||||
// rjf: // -> start a single-line comment
|
||||
else if(byte == '/' && next_byte == '/')
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_LineComment;
|
||||
}
|
||||
|
||||
// rjf: /* -> start a multi-line comment
|
||||
else if(byte == '/' && next_byte == '*')
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_BlockComment;
|
||||
}
|
||||
|
||||
// rjf: # -> start a meta
|
||||
else if(byte == '#')
|
||||
{
|
||||
active_token_kind = TXT_TokenKind_Meta;
|
||||
}
|
||||
|
||||
// rjf: got a token kind -> remember its starting offset
|
||||
if(active_token_kind != TXT_TokenKind_Null)
|
||||
{
|
||||
active_token_start_off = off;
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: end single-line comments & meta by binary searching for the line range -
|
||||
// skip all lines that end with an escaped newline
|
||||
U64 active_token_end_off = 0;
|
||||
if(start_active_token_kind == TXT_TokenKind_Null && (active_token_kind == TXT_TokenKind_LineComment ||
|
||||
active_token_kind == TXT_TokenKind_Meta))
|
||||
{
|
||||
TXT_LineMap line_map = {0};
|
||||
txt_line_map_push(scratch.arena, &line_map, r1u64(1, shared->info.lines_count), shared->info.lines_ranges, 0);
|
||||
U64 line_num = txt_line_num_from_off(&line_map, off);
|
||||
Rng1U64 line_range = txt_range_from_line_num(&line_map, line_num);
|
||||
for(;line_num <= shared->info.lines_count;)
|
||||
{
|
||||
if(str8_match(s("\\"), str8_substr(data, r1u64(line_range.max-1, line_range.max)), 0))
|
||||
{
|
||||
line_num += 1;
|
||||
line_range = txt_range_from_line_num(&line_map, line_num);
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
active_token_end_off = line_range.max;
|
||||
}
|
||||
|
||||
//- rjf: try to end all other cases by looking at subsequent endpoint candidates
|
||||
if(start_active_token_kind == active_token_kind && active_token_kind != TXT_TokenKind_Null)
|
||||
{
|
||||
switch(active_token_kind)
|
||||
{
|
||||
default:{}break;
|
||||
case TXT_TokenKind_String:
|
||||
{
|
||||
if(herestring_marker.size == 0 && byte == '"')
|
||||
{
|
||||
active_token_end_off = off+1;
|
||||
}
|
||||
else if(herestring_marker.size != 0 && byte == '"')
|
||||
{
|
||||
String8 paren_maybe = str8_substr(data, r1u64(off - herestring_marker.size - 1, off - herestring_marker.size));
|
||||
String8 herestring_marker_maybe = str8_substr(data, r1u64(off - herestring_marker.size, off));
|
||||
if(str8_match(paren_maybe, s(")"), 0) && str8_match(herestring_marker, herestring_marker_maybe, 0))
|
||||
{
|
||||
active_token_end_off = off+1;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
case TXT_TokenKind_Char:
|
||||
{
|
||||
if(byte == '\'')
|
||||
{
|
||||
active_token_end_off = off+1;
|
||||
}
|
||||
}break;
|
||||
case TXT_TokenKind_BlockComment:
|
||||
{
|
||||
if(byte == '*' && next_byte == '/')
|
||||
{
|
||||
active_token_end_off = off+2;
|
||||
}
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: end all cases with an end-of-buffer
|
||||
B32 next_is_end_of_buffer = (cand_chunk_idx >= cand_chunk_n->count && cand_chunk_n->next == 0);
|
||||
if(next_is_end_of_buffer)
|
||||
{
|
||||
active_token_end_off = off+1;
|
||||
}
|
||||
|
||||
//- rjf: finish the active token if we can
|
||||
if(active_token_end_off > active_token_start_off)
|
||||
{
|
||||
TXT_TokenPt pts[] =
|
||||
{
|
||||
{active_token_kind, active_token_start_off},
|
||||
{TXT_TokenKind_Null, active_token_end_off},
|
||||
};
|
||||
for EachElement(pt_idx, pts)
|
||||
{
|
||||
TokenPtChunkNode *chunk = last_token_pt_chunk;
|
||||
if(chunk == 0 || chunk->count >= chunk->cap)
|
||||
{
|
||||
chunk = push_array(scratch.arena, TokenPtChunkNode, 1);
|
||||
SLLQueuePush(first_token_pt_chunk, last_token_pt_chunk, chunk);
|
||||
chunk->cap = 512;
|
||||
chunk->v = push_array(scratch.arena, TXT_TokenPt, chunk->cap);
|
||||
}
|
||||
chunk->v[chunk->count] = pts[pt_idx];
|
||||
chunk->count += 1;
|
||||
total_token_pt_count += 1;
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: advance
|
||||
cand_chunk_idx += 1;
|
||||
if(cand_chunk_idx >= cand_chunk_n->count)
|
||||
{
|
||||
cand_chunk_n = cand_chunk_n->next;
|
||||
cand_chunk_idx = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
lane_sync_u64(&first_token_pt_chunk, 0);
|
||||
lane_sync_u64(&last_token_pt_chunk, 0);
|
||||
lane_sync_u64(&total_token_pt_count, 0);
|
||||
|
||||
//- rjf: form final token pt buffer
|
||||
if(lane_idx() == 0)
|
||||
{
|
||||
shared->info.big_token_pts_count = total_token_pt_count;
|
||||
shared->info.big_token_pts = push_array(shared->arena, TXT_TokenPt, shared->info.big_token_pts_count);
|
||||
}
|
||||
lane_sync();
|
||||
{
|
||||
U64 base_idx = 0;
|
||||
for EachNode(n, TokenPtChunkNode, first_token_pt_chunk)
|
||||
{
|
||||
Rng1U64 range = lane_range(n->count);
|
||||
MemoryCopy(shared->info.big_token_pts + base_idx + range.min, n->v + range.min, sizeof(n->v[0]) * dim_1u64(range));
|
||||
base_idx += n->count;
|
||||
}
|
||||
}
|
||||
lane_sync();
|
||||
|
||||
//- rjf: lex function * data -> tokens
|
||||
#if 1
|
||||
if(lane_idx() == 0 && lex_function != 0)
|
||||
|
||||
+34
-14
@@ -25,8 +25,10 @@ typedef enum TXT_TokenKind
|
||||
TXT_TokenKind_Identifier,
|
||||
TXT_TokenKind_Numeric,
|
||||
TXT_TokenKind_String,
|
||||
TXT_TokenKind_Char,
|
||||
TXT_TokenKind_Symbol,
|
||||
TXT_TokenKind_Comment,
|
||||
TXT_TokenKind_LineComment,
|
||||
TXT_TokenKind_BlockComment,
|
||||
TXT_TokenKind_Meta, // preprocessor, etc.
|
||||
TXT_TokenKind_COUNT
|
||||
}
|
||||
@@ -65,6 +67,13 @@ struct TXT_Token
|
||||
Rng1U64 range;
|
||||
};
|
||||
|
||||
typedef struct TXT_TokenPt TXT_TokenPt;
|
||||
struct TXT_TokenPt
|
||||
{
|
||||
TXT_TokenKind kind;
|
||||
U64 off;
|
||||
};
|
||||
|
||||
typedef struct TXT_TokenChunkNode TXT_TokenChunkNode;
|
||||
struct TXT_TokenChunkNode
|
||||
{
|
||||
@@ -150,6 +159,8 @@ struct TXT_TextInfo
|
||||
Rng1U64 *lines_ranges;
|
||||
U64 lines_max_size;
|
||||
TXT_LineEndKind line_end_kind;
|
||||
U64 big_token_pts_count;
|
||||
TXT_TokenPt *big_token_pts;
|
||||
TXT_TokenArray tokens;
|
||||
TXT_ScopePtArray scope_pts;
|
||||
TXT_ScopeNodeArray scope_nodes;
|
||||
@@ -209,25 +220,30 @@ struct TXT_LineMap
|
||||
U64 total_line_count;
|
||||
};
|
||||
|
||||
typedef struct TXT_TokenPtMapRangeNode TXT_TokenPtMapRangeNode;
|
||||
struct TXT_TokenPtMapRangeNode
|
||||
{
|
||||
TXT_TokenPtMapRangeNode *next;
|
||||
Rng1U64 num_range;
|
||||
TXT_TokenPt *pts;
|
||||
S64 delta;
|
||||
};
|
||||
|
||||
typedef struct TXT_TokenPtMap TXT_TokenPtMap;
|
||||
struct TXT_TokenPtMap
|
||||
{
|
||||
TXT_TokenPtMapRangeNode *first_range;
|
||||
TXT_TokenPtMapRangeNode *last_range;
|
||||
U64 total_pt_count;
|
||||
};
|
||||
|
||||
typedef struct TXT_Patched TXT_Patched;
|
||||
struct TXT_Patched
|
||||
{
|
||||
MemoryMap memory_map;
|
||||
U64 size;
|
||||
TXT_LineMap line_map;
|
||||
};
|
||||
|
||||
typedef struct TXT_Line TXT_Line;
|
||||
struct TXT_Line
|
||||
{
|
||||
Rng1U64 range;
|
||||
};
|
||||
|
||||
typedef struct TXT_LineArray TXT_LineArray;
|
||||
struct TXT_LineArray
|
||||
{
|
||||
TXT_Line *v;
|
||||
U64 count;
|
||||
TXT_TokenPtMap token_pt_map;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
@@ -292,6 +308,10 @@ internal TXT_TokenArray txt_token_array_from_string__disasm_x64_intel(Arena *are
|
||||
internal void txt_line_map_push(Arena *arena, TXT_LineMap *map, Rng1U64 num_range, Rng1U64 *ranges, S64 delta);
|
||||
internal U64 txt_line_num_from_off(TXT_LineMap *map, U64 off);
|
||||
internal Rng1U64 txt_range_from_line_num(TXT_LineMap *map, U64 num);
|
||||
internal void txt_token_pt_map_push(Arena *arena, TXT_TokenPtMap *map, Rng1U64 num_range, TXT_TokenPt *pts, S64 delta);
|
||||
internal U64 txt_token_pt_num_from_off(TXT_TokenPtMap *map, U64 off);
|
||||
internal TXT_TokenPt txt_token_pt_from_num(TXT_TokenPtMap *map, U64 num);
|
||||
internal TXT_TokenArray txt_token_array_from_data(Arena *arena, TXT_TokenPt ctx_token_pt, String8 data, U64 base_off, U64 limit);
|
||||
internal TXT_Patched txt_patched_from_info_data_patches(Arena *arena, TXT_TextInfo *info, String8 data, TXT_PatchList *patches);
|
||||
|
||||
//~ TODO(rjf): old unpatched text viz code:
|
||||
|
||||
+7
-7
@@ -118,13 +118,13 @@ txt_multichar_symbols__c:
|
||||
|
||||
@table(token_kind open_string close_string close_advance nesting escaping parent_num) txt_tokenizer_rules__c:
|
||||
{
|
||||
{Comment "//" "\\n" 0 0 1 0}
|
||||
{Comment "/*" "*/" 2 0 0 0}
|
||||
{Meta "#" "\\n" 0 0 1 0}
|
||||
{String '\\"' '\\"' 1 0 1 0}
|
||||
{String "'" "'" 1 0 1 0}
|
||||
{String '\\"' '\\"' 1 0 1 3}
|
||||
{String "<" ">" 1 0 1 3}
|
||||
{LineComment "//" "\\n" 0 0 1 0}
|
||||
{BlockComment "/*" "*/" 2 0 0 0}
|
||||
{Meta "#" "\\n" 0 0 1 0}
|
||||
{String '\\"' '\\"' 1 0 1 0}
|
||||
{String "'" "'" 1 0 1 0}
|
||||
{String '\\"' '\\"' 1 0 1 3}
|
||||
{String "<" ">" 1 0 1 3}
|
||||
}
|
||||
@data(TXT_TokenizerRule) txt_tokenizer_rules__c:
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user