core.markdownview
local markdownview = require "core.markdownview"
_layout_generation
(field) _layout_generation: integer
_layout_thread_key
(field) _layout_thread_key: table
_parse_generation
(field) _parse_generation: integer
_parse_thread_key
(field) _parse_thread_key: table
_ready_callbacks
(field) _ready_callbacks: table
_text_chunks
(field) _text_chunks: table
_text_length
(field) _text_length: integer
_text_suffix
(field) _text_suffix: string
append_stale_frame
(field) append_stale_frame: unknown
async_layout_threshold
(field) async_layout_threshold: integer
async_parse_threshold
(field) async_parse_threshold: integer
blocks
(field) blocks: table[]
capture_text_input
(field) capture_text_input: boolean?
Receive text input while floating without taking focus
context
(field) context: string
current_scale
(field) current_scale: number
cursor
(field) cursor: string
estimated_block_height
(field) estimated_block_height: number?
floating
(field) floating: boolean
Whether the view uses floating placement
floating_closing
(field) floating_closing: boolean?
Whether input is disabled while a closing slide runs
floating_destination
(field) floating_destination: (core.view.position)?
Settled position retained during a slide
floating_gesture
(field) floating_gesture: (core.view.floating_gesture)?
Active pointer drag or resize
floating_options
(field) floating_options: (core.view.floating_options)?
Placement ownership and input policy
floating_position
(field) floating_position: (core.view.position)?
Persistent interpolation state for a slide
floating_previous_focus
(field) floating_previous_focus: (core.view)?
Focus target to restore when hiding
floating_transition
(field) floating_transition: (core.view.floating_transition)?
Active slide and callback
floating_visible
(field) floating_visible: boolean?
Whether the view is registered, including closing slides
font
(field) font: (renderer.font)?
font_cache
(field) font_cache: table?
footnotes
(field) footnotes: table
h_scrollbar
(field) h_scrollbar: core.scrollbar
Scrollable viewport indicator with draggable thumb. Supports both vertical and horizontal orientation with configurable alignment. Uses a "normal" coordinate system internally that treats all scrollbars as vertical-end-aligned, then transforms to the actual orientation/alignment.
hovered_link_url
(field) hovered_link_url: string?
hovered_scrollbar
(field) hovered_scrollbar: boolean
image_cache
(field) image_cache: table<string, table>
last_doc_change_id
(field) last_doc_change_id: integer?
layout
(field) layout: table?
layouting
(field) layouting: boolean
linked_doc
(field) linked_doc: (core.doc)?
mouse_selecting
(field) mouse_selecting: unknown
parsing
(field) parsing: boolean
partial_commit_stale_frame
(field) partial_commit_stale_frame: unknown
partial_layout
(field) partial_layout: table|nil
partial_text
(field) partial_text: string
path
(field) path: string?
pending_h_scrollable_size
(field) pending_h_scrollable_size: unknown
pending_layout
(field) pending_layout: table
pending_scrollable_size
(field) pending_scrollable_size: unknown
position
(field) position: core.view.position
preserved_scroll
(field) preserved_scroll: unknown
references
(field) references: table<string, string>
scroll
(field) scroll: core.view.scroll
scrollable
(field) scrollable: boolean
selecting
(field) selecting: boolean?
selection_anchor
(field) selection_anchor: integer?
selection_cursor
(field) selection_cursor: integer?
size
(field) size: core.view.position
stale_layout
(field) stale_layout: unknown
super
(field) super: core.view
Base view.
text
(field) text: string
title
(field) title: string?
v_scrollbar
(field) v_scrollbar: core.scrollbar
Scrollable viewport indicator with draggable thumb. Supports both vertical and horizontal orientation with configurable alignment. Uses a "normal" coordinate system internally that treats all scrollbars as vertical-end-aligned, then transforms to the actual orientation/alignment.
virtual_block_cache
(field) virtual_block_cache: table
virtual_layout_cache
(field) virtual_layout_cache: unknown
virtual_metrics
(field) virtual_metrics: unknown
virtual_overscan_px
(field) virtual_overscan_px: number?
virtualized
(field) virtualized: boolean
core.markdownview.source
doc
(field) doc: (core.doc)?
estimated_block_height
(field) estimated_block_height: number?
font
(field) font: (renderer.font)?
linked_doc
(field) linked_doc: (core.doc)?
name
(field) name: string?
path
(field) path: string?
text
(field) text: string?
title
(field) title: string?
virtual_overscan_px
(field) virtual_overscan_px: number?
virtualized
(field) virtualized: boolean?
core.markdownview.state
path
(field) path: string
scroll
(field) scroll: { x: number, y: number }
__index
function core.markdownview.__index(self: core.markdownview, key: any)
-> string|unknown
@param self: core.markdownview
append_markdown
function
from_state
function core.markdownview.from_state(state: core.markdownview.state)
-> (core.markdownview)?
Restores a file-backed markdown preview from saved state.
@param state: core.markdownview.state
@return: (core.markdownview)?
is_supported
function core.markdownview.is_supported(path: string)
-> boolean
Checks whether a file path should be opened by the markdown preview.
parse_blocks
function core.markdownview.parse_blocks(text: string)
-> table[]
Parses markdown text into the intermediate block structure used by the view.
resolve_color
function
__call
(method) core.object:__call(...any)
-> obj: core.object
Metamethod allowing class to be called like a constructor.
Enables syntax: local obj = MyClass(args) instead of MyClass:new(args)
Automatically creates instance and calls new() with provided arguments.
@return obj: core.object — The new instance of the class
__tostring
(method) core.markdownview:__tostring()
-> string
append_text
(method) core.markdownview:append_text(text?: string)
-> incremental: boolean
Appends markdown to the preview, reparsing only the appended blocks when safe.
Markdown can continue the previous block across a line boundary. When the
existing text and appended text do not meet at a blank block boundary, this
falls back to set_text so the rendered document remains equivalent.
@return incremental: boolean — True when only appended blocks were parsed.
bring_to_front
(method) core.view:bring_to_front()
-> view: core.view
Raise a shown floating view and its owned popups above the other floating views.
@return view: core.view — This view, for chaining
clamp_scroll_position
(method) core.view:clamp_scroll_position()
Clamp scroll position to valid range (0 to max scrollable size). Called automatically by update(). Override get_scrollable_size() to customize.
clear_partial_text
(method) core.markdownview:clear_partial_text()
Clears temporary plain text rendered after the parsed markdown document.
clear_selection
(method) core.markdownview:clear_selection()
Clears the active text selection.
commit_partial_text
(method) core.markdownview:commit_partial_text(markdown_text?: string)
-> incremental: boolean
Commits the partial text by appending final markdown to the document.
@return incremental: boolean — True when only appended blocks were parsed.
copy_selection
(method) core.markdownview:copy_selection()
-> copied: boolean
Copies the selected rendered text to the system clipboard.
@return copied: boolean
draw
(method) core.markdownview:draw()
Draws the markdown preview contents and scrollbars.
draw_at
(method) core.markdownview:draw_at(x: number, y: number, width: number, height: number, background?: renderer.color, show_scrollbars?: boolean)
Draws the markdown contents at an arbitrary rectangle.
@param background?: renderer.color — Array of bytes that represents a color used by the rendering functions.
draw_background
(method) core.view:draw_background(color: renderer.color)
Draw a solid background color for the entire view. Commonly called at the start of draw() methods.
@param color: renderer.color — Array of bytes that represents a color used by the rendering functions.
draw_scrollbar
(method) core.view:draw_scrollbar()
Draw the view's scrollbars. Commonly called at the end of draw() methods.
ensure_image_entry
(method) core.markdownview:ensure_image_entry(block: table)
-> table
Returns an image cache entry for the given markdown image block.
ensure_layout
(method) core.markdownview:ensure_layout()
-> table
Builds the render command list for the current view width.
ensure_partial_layout
(method) core.markdownview:ensure_partial_layout()
-> table?
Builds the render command list for temporary partial text.
extend
(method) core.object:extend()
-> cls: core.object
Create a new class that inherits from this one.
Returns a new class with this class as its parent.
Example: local MyClass = Object:extend()
@return cls: core.object — The new class table
extends
(method) core.object:extends(T: any)
-> extends: boolean
Check if object inherits from the given type (inheritance-aware).
Use this to check class hierarchy.
Example: view:extends(View) returns true for View and all subclasses
@param T: any — Class to check inheritance from
@return extends: boolean — True if object is T or inherits from T
get_content_bounds
(method) core.view:get_content_bounds()
-> x1: number
2. y1: number
3. x2: number
4. y2: number
Get the content bounds in content coordinates (accounting for scroll).
@return x1: number — Left edge
@return y1: number — Top edge
@return x2: number — Right edge
@return y2: number — Bottom edge
get_content_offset
(method) core.view:get_content_offset()
-> x: number
2. y: number
Get the top-left corner of content area in screen coordinates. Accounts for scroll offset. Use for drawing content at correct position.
@return x: number — Screen x coordinate
@return y: number — Screen y coordinate
get_context_target_at
(method) core.markdownview:get_context_target_at(x: number, y: number)
-> { link_url: string?, image_url: string? }?
Returns a context-copy target under the given mouse position, if any.
get_floating_bounds
(method) core.view:get_floating_bounds()
-> x: number
2. y: number
3. w: number
4. h: number
Get the popup's outer rectangle in screen coordinates, including borders. Override together with set_floating_bounds() for composite views.
@return x: number — Screen x coordinate
@return y: number — Screen y coordinate
@return w: number — Outer width in pixels
@return h: number — Outer height in pixels
get_floating_drag_region
(method) core.view:get_floating_drag_region()
-> x: number?
2. y: number?
3. w: number?
4. h: number?
Get the screen rectangle where a floating view can be dragged. Override to restrict dragging to a header; defaults to the full popup bounds.
@return x: number? — Screen x coordinate, or nil to disable dragging
@return y: number? — Screen y coordinate
@return w: number? — Region width
@return h: number? — Region height
get_focus_target
(method) core.view:get_focus_target()
-> target: (core.view)?
Get the view that should receive focus when this view is shown or clicked. Override for composites whose keyboard focus belongs to a descendant.
@return target: (core.view)? — View to focus, or nil to preserve the current focus
get_font_cache
(method) core.markdownview:get_font_cache()
-> table
Builds and caches the fonts used by the markdown renderer.
get_h_scrollable_size
(method) core.markdownview:get_h_scrollable_size()
-> number
get_link_at
(method) core.markdownview:get_link_at(x: number, y: number)
-> string?
Returns the URL under the given mouse position, if any.
get_module
(method) core.view:get_module()
-> path: string?
Returns the module path of this view.
This method resolves the Lua module name that loaded the concrete view
class (for example "core.view").
If the view class cannot be associated with any loaded module, nil
is returned.
@return path: string?
get_name
(method) core.markdownview:get_name()
-> string
get_rendered_size
(method) core.markdownview:get_rendered_size(width: number)
-> width: number
2. height: number
Returns the rendered size for the given outer width.
@return width: number
@return height: number
get_scaled_image
(method) core.markdownview:get_scaled_image(entry: table, max_width: number)
-> image: canvas?
2. width: number?
3. height: number?
Returns a scaled canvas for an image entry constrained to the given width.
@return image: canvas?
@return width: number?
@return height: number?
get_scrollable_size
(method) core.markdownview:get_scrollable_size()
-> number
get_selected_text
(method) core.markdownview:get_selected_text()
-> string
Returns the selected rendered text.
get_state
(method) core.markdownview:get_state()
-> (core.markdownview.state)?
Returns the persisted view state for file-backed previews.
@return: (core.markdownview.state)?
get_text
(method) core.markdownview:get_text()
-> text: string
Returns the full markdown source text, materializing appended chunks lazily.
@return text: string
get_text_position_at
(method) core.markdownview:get_text_position_at(x: number, y: number)
-> integer
Returns the selectable text position nearest to the given mouse position.
has_selection
(method) core.markdownview:has_selection()
-> boolean
Returns whether the preview has selected text.
hide_floating
(method) core.view:hide_floating(options?: core.view.floating_transition)
-> view: core.view
Hide the floating view, close owned popups, cancel input, and restore focus. A closing slide delays removal while the view immediately stops receiving input. Disabled transitions remove the view and run the completion callback immediately.
@param options?: core.view.floating_transition — Optional closing slide (to) and callback
@return view: core.view — This view, for chaining
hit_test
(method) core.view:hit_test(x: number, y: number)
-> inside: boolean
Check whether a screen point lies inside the view's outer rectangle. Override for custom shapes or composites with additional hit regions.
@param x: number — Screen x coordinate
@param y: number — Screen y coordinate
@return inside: boolean — Whether the view contains the point
invalidate_layout
(method) core.markdownview:invalidate_layout()
Invalidates the cached layout so it will be rebuilt on the next draw.
is
(method) core.object:is(T: any)
-> is_exact: boolean
Check if object is exactly of the given type (no inheritance check).
Use this for strict type matching.
Example: view:is(DocView) returns true only if view is a DocView, not a subclass
@param T: any — Class to check against
@return is_exact: boolean — True if object is exactly type T
is_class_of
(method) core.object:is_class_of(T: any)
-> is_instance: boolean
Check if the given object is exactly an instance of this class.
Inverse of is() - checks if T is an instance of self.
Example: DocView:is_class_of(obj) checks if obj is exactly a DocView
@param T: any — Object to check
@return is_instance: boolean — True if T is exactly an instance of this class
is_extended_by
(method) core.object:is_extended_by(T: any)
-> is_extended: boolean
Check if the given object/class inherits from this class.
Inverse of extends() - checks if T is a subclass of self.
Example: View:is_extended_by(DocView) checks if DocView inherits from View
@param T: any — Object or class to check
@return is_extended: boolean — True if T inherits from this class
is_floating_owner_visible
(method) core.view:is_floating_owner_visible()
-> visible: boolean?
Check whether floating popups owned by this view should remain visible. Docked owners must be active in their node; container children follow their parent. Override for composites with their own visibility rules.
@return visible: boolean? — Falsy when the owner is hidden or its tab is inactive
is_ready
(method) core.markdownview:is_ready()
-> boolean
Returns whether markdown parsing and layout work is currently settled.
load
(method) core.markdownview:load(path: string)
-> loaded: boolean
2. errmsg: string?
Loads markdown contents from disk into the view.
@return loaded: boolean
@return errmsg: string?
load_image_from_path
(method) core.markdownview:load_image_from_path(entry: table, path: string)
Loads an image entry from a local file path.
move_towards
(method) core.view:move_towards(t: table, k: string|number, dest: number, rate?: number, name?: string)
Smoothly animate a value towards a destination. Use this for animations instead of direct assignment.
@param t: table — Table containing the value
@param k: string|number — Key in table
@param dest: number — Target value
@param rate?: number — Animation speed (0-1, default 0.5, higher = faster)
@param name?: string — Transition name (for config.disabled_transitions)
new
(method) core.markdownview:new(source?: string|core.markdownview.source, title?: string)
Constructor.
@param source?: string|core.markdownview.source
on_file_dropped
(method) core.view:on_file_dropped(filename: string, x: number, y: number)
-> consumed: boolean
Handle file drop events (drag and drop from OS). Override to handle dropped files. Return true to consume event.
@param filename: string — Absolute path to dropped file
@param x: number — Screen x where file was dropped
@param y: number — Screen y where file was dropped
@return consumed: boolean — True to consume event, false to propagate
on_floating_dismiss
(method) core.view:on_floating_dismiss(reason: "escape"|"focuslost"|"outside")
Handle a dismissal requested by Escape, an outside click, or window focus loss. The default implementation hides the view immediately; override for custom handling.
reason:
| "escape"
| "outside"
| "focuslost"
@param reason: "escape"|"focuslost"|"outside" — Event that requested dismissal
on_floating_visibility_changed
(method) core.view:on_floating_visibility_changed(visible: boolean)
Called when showing a floating view or completing its removal. Override to synchronize widget visibility or clear popup controller state.
@param visible: boolean — True on show, false when removal completes
on_ime_text_editing
(method) core.view:on_ime_text_editing(text: string, start: number, length: number)
Handle IME (Input Method Editor) text composition events. Override for IME support in text editors. Called during composition.
@param text: string — Composition text being edited
@param start: number — Start position of selection within composition
@param length: number — Length of selection within composition
on_key_pressed
(method) core.view:on_key_pressed(stroke: string, ...any)
-> consumed: boolean?
Handle a floating view's keyboard input before command dispatch. Override and return true to consume the normalized key binding.
@param stroke: string — Normalized key binding, such as "ctrl+return"
@param: any — Additional arguments forwarded by the keyboard handler
@return consumed: boolean? — Whether the event was handled
on_mouse_capture_lost
(method) core.markdownview:on_mouse_capture_lost()
Cancel selection without triggering a release action.
on_mouse_left
(method) core.markdownview:on_mouse_left()
Clears hover state when the mouse leaves the preview.
on_mouse_moved
(method) core.markdownview:on_mouse_moved(x: number, y: number, dx: number, dy: number)
-> boolean?
on_mouse_pressed
(method) core.markdownview:on_mouse_pressed(button: string, x: number, y: number, clicks: integer)
-> boolean?
on_mouse_released
(method) core.markdownview:on_mouse_released(button: string, x: number, y: number)
-> boolean?
on_mouse_wheel
(method) core.view:on_mouse_wheel(y: number, x: number)
-> consumed: boolean?
Handle mouse wheel scroll events. Override for custom scroll behavior. Base implementation does nothing.
@param y: number — Vertical scroll delta; positive is "up"
@param x: number — Horizontal scroll delta; positive is "left"
@return consumed: boolean? — True to consume event
on_scale_change
(method) core.markdownview:on_scale_change()
Clears cached font and layout data after a scale change.
on_text_input
(method) core.view:on_text_input(text: string)
Handle text input events (typing, IME composition). Override for text editing. Called after IME composition completes.
@param text: string — Input text (may be multiple characters)
on_touch_moved
(method) core.view:on_touch_moved(x: number, y: number, dx: number, dy: number, i: number)
Handle touch move events (touchscreen/trackpad gestures). Override for touch-specific behavior. Base implementation handles scrolling.
@param x: number — Current touch x coordinate
@param y: number — Current touch y coordinate
@param dx: number — Delta x since last position
@param dy: number — Delta y since last position
@param i: number — Touch finger/pointer index
open_link
(method) core.markdownview:open_link(url: string)
Opens a markdown link target, handling anchors, local files and external URLs.
owns_view
(method) core.view:owns_view(view?: core.view)
-> owned: boolean
Check whether a view is this view or belongs to it through a container or owner. Follows parent, subparent, and floating owner links while guarding against cycles.
@param view?: core.view — Candidate view
@return owned: boolean — Whether the candidate belongs to this view
refresh_from_doc
(method) core.markdownview:refresh_from_doc()
Refreshes preview contents from the bound document.
resolve_project_link
(method) core.markdownview:resolve_project_link(url: string)
-> string?
Resolves a markdown link to a project-local absolute path when possible.
scrollbar_dragging
(method) core.view:scrollbar_dragging()
-> dragging: boolean
Check if user is currently dragging either scrollbar.
@return dragging: boolean — True if scrollbar drag is in progress
scrollbar_hovering
(method) core.view:scrollbar_hovering()
-> hovering: boolean
Check if mouse is hovering over either scrollbar track.
@return hovering: boolean — True if mouse is over scrollbar
scrollbar_overlaps_point
(method) core.view:scrollbar_overlaps_point(x: number, y: number)
-> overlaps: boolean
Check if a screen point overlaps either scrollbar. Useful for determining cursor style or handling clicks.
@param x: number — Screen x coordinate
@param y: number — Screen y coordinate
@return overlaps: boolean — True if point is over vertical or horizontal scrollbar
set_floating
(method) core.view:set_floating(enabled: boolean, options?: core.view.floating_options)
-> view: core.view
Enable or disable floating placement and configure popup input and ownership. Call show_floating() to show the view after enabling this mode. Detach it from its node or parent container before showing. Disabling hides it.
@param enabled: boolean — Whether the view should use floating placement
@param options?: core.view.floating_options — Options merged with existing ones when enabling
@return view: core.view — This view, for chaining
set_floating_bounds
(method) core.view:set_floating_bounds(x: number, y: number, w: number, h: number)
Set the popup's outer rectangle when RootView places, drags, or resizes it. Override for composites that need to update child layout or account for borders.
@param x: number — Screen x coordinate
@param y: number — Screen y coordinate
@param w: number — Outer width in pixels
@param h: number — Outer height in pixels
set_font
(method) core.markdownview:set_font(font?: renderer.font)
Sets a fixed font object for all rendered markdown fonts.
@param font?: renderer.font
set_hovered_link
(method) core.markdownview:set_hovered_link(url?: string)
Updates hover state and status-bar tooltip for links.
set_partial_text
(method) core.markdownview:set_partial_text(text?: string)
Sets temporary plain text rendered after the parsed markdown document.
The partial text is intended for streaming output. It is displayed literally and does not mutate the parsed markdown document until committed.
set_text
(method) core.markdownview:set_text(text?: string)
Replaces the preview text and reparses the markdown document.
show_floating
(method) core.view:show_floating(options?: core.view.floating_transition)
-> view: core.view
Show or raise the view in RootView's floating layer and apply its focus policy. Requires a view detached from its node and parent container. Reopening cancels a pending close and its completion callback. Disabled transitions apply placement and run the completion callback immediately.
@param options?: core.view.floating_transition — Optional opening slide (from) and callback
@return view: core.view — This view, for chaining
start_remote_image_download
(method) core.markdownview:start_remote_image_download(entry: table)
Starts downloading a remote image used by the markdown document.
supports_text_input
(method) core.view:supports_text_input()
-> boolean
Whether this view accepts text input (enables IME). Override and return true for text editors and input fields.
try_close
(method) core.view:try_close(do_close: function)
Called when view is requested to close (e.g., tab close button).
Override to show confirmation dialogs for unsaved changes.
Example: core.command_view:enter("Save?", \{submit = do_close\})
@param do_close: function — Call this function to actually close the view
update
(method) core.markdownview:update()
Refreshes the preview when the bound document changes.
update_floating
(method) core.view:update_floating()
Update anchor placement or advance an opening or closing slide. RootView calls this before update() for each shown floating view. Completes removal and invokes the transition callback when a slide finishes.
update_scrollbar
(method) core.view:update_scrollbar()
Update scrollbar positions and sizes. Called automatically by update(). Rarely needs to be called manually.
when_ready
(method) core.markdownview:when_ready(callback: fun(view: core.markdownview))
Runs a callback once current asynchronous parsing/layout work has settled.
@param callback: fun(view: core.markdownview)