Module: Coradoc::LinkRewriter
- Defined in:
- lib/coradoc/link_rewriter.rb,
lib/coradoc/link_rewriter/visitor.rb,
lib/coradoc/link_rewriter/identity.rb
Overview
Post-parse link/xref rewriting.
Consumers that need to canonicalize link and xref targets (snake→kebab,
strip .adoc, redirect maps, dialect translation) get a single
immutable entry point: Coradoc.rewrite_links(doc, rewriter:, &).
The visitor walks the parsed CoreModel, invokes the supplied rewriter
for every link/xref target, and returns a NEW document. Verbatim
blocks (source, listing, literal, pass, stem) are skipped entirely —
coradoc owns the parse and guarantees those bodies never reach the
rewriter, removing the "track parser state to avoid verbatim bodies"
footgun that plagues regex-based rewriting.
Two-step API mirrors Coradoc.resolve_includes: parse produces the
document, rewrite is a separate explicit step the caller controls.
Defined Under Namespace
Class Method Summary collapse
-
.rewrite(doc, rewriter: nil, &block) ⇒ Object
Rewrite every link/xref target in
doc.
Class Method Details
.rewrite(doc, rewriter: nil, &block) ⇒ Object
Rewrite every link/xref target in doc.
rewriter responds to #call(target:, kind:, context:) and returns
the new target String. If a block is given it is used as the
rewriter. Omitting both falls back to Identity (no-op) — useful
for "give me a structurally identical copy" cases.
Returns a NEW document; the input is never mutated.
31 32 33 34 |
# File 'lib/coradoc/link_rewriter.rb', line 31 def rewrite(doc, rewriter: nil, &block) callable = rewriter || block || Identity.new Visitor.new(callable).visit_document(doc) end |