Module: RedQuilt::PlainText
- Defined in:
- lib/red_quilt/plain_text.rb
Overview
Extracts plain-text content from an arena subtree.
TEXT / CODE_SPAN contribute their textual content as-is; SOFTBREAK / HARDBREAK become a single space; every other inline structure (EMPHASIS, STRONG, LINK, …) is transparently recursed into. The starting ‘node_id` itself is treated as a container — its children are visited, but the node’s own type does not appear in the output (callers pass an IMAGE / HEADING / PARAGRAPH and want the assembled inner text).
Used by:
-
Renderer::HTML for an image’s alt attribute
-
Document#first_heading_text for the CLI’s –auto-title
-
LintPass#check_missing_alt
Class Method Summary collapse
Class Method Details
.from(arena, node_id) ⇒ Object
21 22 23 24 25 |
# File 'lib/red_quilt/plain_text.rb', line 21 def from(arena, node_id) out = +"" walk(arena, node_id, out) out end |
.walk(arena, node_id, out) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/red_quilt/plain_text.rb', line 27 def walk(arena, node_id, out) arena.each_child(node_id) do |child_id| case arena.type(child_id) when NodeType::TEXT # TEXT may be span-only or carry a literal (entity / escape # decoded). Arena#text handles both. out << arena.text(child_id).to_s when NodeType::CODE_SPAN # CODE_SPAN always has str1 (normalized content), so read it # directly to skip Arena#text's nil-check / byteslice branch. out << arena.str1(child_id).to_s when NodeType::SOFTBREAK, NodeType::HARDBREAK out << " " else walk(arena, child_id, out) end end end |