Module: RedQuilt::FootnoteDefinition

Defined in:
lib/red_quilt/footnote_definition.rb

Overview

GitHub-style footnote definitions: ‘[^label]: content`. `match` handles the opener line; `Parser` (a cached BlockParser collaborator, like List::Parser) collects the optionally-indented, multi-paragraph continuation and parses it into a FOOTNOTE_DEFINITION node. Label normalization is shared with link reference definitions.

NOTE: ReferenceDefinition’s REF_DEF_RE also matches ‘[^label]:` (treating `^label` as an ordinary label), so the block dispatch must try this matcher BEFORE the reference-definition branch when footnotes are on.

Defined Under Namespace

Classes: Parser

Constant Summary collapse

RE =

Up to 3 spaces of indent, then ‘[^label]:`. The label is non-empty and contains no whitespace or `]` (GFM rule).

/\A {0,3}\[\^([^\]\s]+)\]:(.*)\z/m

Class Method Summary collapse

Class Method Details

.match(text) ⇒ Object

Returns { label:, content_start:, content: } for a footnote-definition opener, or nil. ‘content_start` is the byte offset (within `text`) where the content begins, after `]:` and an optional single separating space/tab; `content` is that text (possibly empty).



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/red_quilt/footnote_definition.rb', line 24

def match(text)
  m = RE.match(text)
  return nil unless m

  rest = m[2]
  lead = rest.match?(/\A[ \t]/) ? 1 : 0
  {
    label: m[1],
    content_start: text.bytesize - rest.bytesize + lead,
    content: lead.zero? ? rest : rest[lead..],
  }
end