Skip to content

Definition lists and abbreviations ​

Terms and descriptions, abbreviation definitions and the document levels that may declare them.

Generated from resources/examples/edge-cases.md and resources/examples/core.md - edit the cases there, not here. Each case links the conformance fixture it produces.

Abbreviation matches on word boundaries only ​

1 conformance fixture

A defined abbreviation is expanded only as a whole word — it is not substituted inside a longer word.

carve
*[HTML]: HyperText Markup Language

HTML and XHTMLish.
html
<p><abbr title="HyperText Markup Language">HTML</abbr> and XHTMLish.</p>

Abbreviation definition interrupts a paragraph ​

1 conformance fixture

An abbreviation definition is an invisible construct (§10): on the line directly after prose it is consumed and applied, with no blank line needed.

carve
The HTML spec is long.
*[HTML]: HyperText Markup Language
html
<p>The <abbr title="HyperText Markup Language">HTML</abbr> spec is long.</p>

Abbreviation definition separator must be a space ​

1 conformance fixture

Abbreviation definitions follow the rule too: *[label]: must be followed by a literal space. A tab keeps the line as a paragraph and no abbreviation is registered.

carve
*[HTML]:	Hyper

The HTML
html
<p>*[HTML]:	Hyper</p>
<p>The HTML</p>

Definition list as a first-class block opener ​

4 conformance fixtures

A :: term definition-list opener is a block opener like every other (quote, heading, fence, table) under the content-column rule (PART 9 §24 C3): it interrupts an open list item at column 0, and nests at the item's content column. The two-line :: /: marker is recognized by look-ahead; only the :: term line opens the block.

At the content column, the definition list nests inside the item.

carve
- one
  :: term
  :  def
html
<ul>
  <li>one
    <dl>
      <dt>term</dt>
      <dd>def</dd>
    </dl>
  </li>
</ul>

At column 0 (below the content column), it interrupts: the list ends and the definition list parses at document level.

carve
- one
:: term
:  def
html
<ul>
  <li>one</li>
</ul>
<dl>
  <dt>term</dt>
  <dd>def</dd>
</dl>

Below the content column but not at column 0, it folds in as lazy item text.

carve
- one
 :: term
 :  def
html
<ul>
  <li>one
:: term
:  def</li>
</ul>

A blank line before a nested definition list keeps the outer item tight (§17), like any other nested sub-block.

carve
- one

  :: t
  :  d
html
<ul>
  <li>one
    <dl>
      <dt>t</dt>
      <dd>d</dd>
    </dl>
  </li>
</ul>

Abbreviation title escapes its markup characters ​

1 conformance fixture

An abbreviation's expansion becomes the title attribute, so &, <, > and " in it are entity-escaped like any attribute value.

carve
*[HTML]: Hyper & Text < Markup > "quoted"

The HTML spec.
html
<p>The <abbr title="Hyper &amp; Text &lt; Markup &gt; &quot;quoted&quot;">HTML</abbr> spec.</p>

Under-indented definition attaches, over-indented definition folds ​

3 conformance fixtures

The accepted wider-separator spelling : def is still a definition-list entry (PART 9 §24 C3): it attaches as a fresh <dd> to its open :: term when its column is at or below the term's, even under the item's content column. Only a definition line indented above the term folds into the term text as a lazy continuation. The canonical spelling is : def; this case deliberately keeps the wider separator while testing the marker's authored column.

Under-indented (below the content column, still above column 0): the definition attaches.

carve
- one
  :: term
 :  def
html
<ul>
  <li>one
    <dl>
      <dt>term</dt>
      <dd>def</dd>
    </dl>
  </li>
</ul>

At column 0, the definition still attaches: this accepted wider-separator marker is a lenient exception to the column-0 interrupt rule, so it does not end the item and orphan the definition.

carve
- one
  :: term
:  def
html
<ul>
  <li>one
    <dl>
      <dt>term</dt>
      <dd>def</dd>
    </dl>
  </li>
</ul>

Over-indented (above the term): the line folds into the term, preserving its over-indent whitespace.

carve
- one
  :: term
   :  def
html
<ul>
  <li>one
    <dl>
      <dt>term
 :  def</dt>
    </dl>
  </li>
</ul>

Wrapped definition term continuation below the content column strips leading whitespace ​

2 conformance fixtures

A :: term line inside a list item may be continued by a wrapped line. When that continuation sits below the item content column it is a lazy continuation, so - like a lazy paragraph or blockquote continuation - its leading whitespace is stripped before it folds into the <dt>. (A continuation above the content column instead folds with its residual indent preserved; a continuation at or above the content column is dedented rather than stripped.)

At column 1, one below the content column 2: the leading space is stripped before the fold.

carve
- one
  :: term
 wrapped
html
<ul>
  <li>one
    <dl>
      <dt>term
wrapped</dt>
    </dl>
  </li>
</ul>

At column 0, flush left: the continuation still folds into the term, byte-identically.

carve
- one
  :: term
wrapped
html
<ul>
  <li>one
    <dl>
      <dt>term
wrapped</dt>
    </dl>
  </li>
</ul>

Two abbreviation definitions ​

1 conformance fixture

Nothing about the second definition is special - it is here because a document with TWO of them is what tells the engines apart. The HTML says nothing about how the definitions were spelled, so a formatter that joined them differently stayed invisible until the canonical-Carve target was compared across engines (carve-php#682).

carve
*[HTML]: HyperText Markup Language
*[CSS]: Cascading Style Sheets

HTML and CSS.
html
<p><abbr title="HyperText Markup Language">HTML</abbr> and <abbr title="Cascading Style Sheets">CSS</abbr>.</p>

An abbreviation definition is recognized only at document level ​

1 conformance fixture

*[TERM]: expansion defines an abbreviation only as a direct child of the document. Inside a block quote, a list item or a div the line is ordinary paragraph text: it defines nothing and it is preserved as written. An abbreviation is the only definition kind with no marker at the use site, so a definition carried in quoted material would otherwise rewrite every occurrence of its term in the quoting document.

carve
> *[HTML]: Hyper Text

The HTML spec.
html
<blockquote><p>*[HTML]: Hyper Text</p></blockquote>
<p>The HTML spec.</p>

A list item does not define an abbreviation either ​

1 conformance fixture

The same rule holds for every container, not just the block quote: the definition line stays visible text and expands nothing.

carve
- *[HTML]: Hyper Text

The HTML spec.
html
<ul>
  <li>*[HTML]: Hyper Text</li>
</ul>
<p>The HTML spec.</p>

A div does not define an abbreviation either ​

1 conformance fixture

The rule names three containers - a block quote, a list item and a div - and the first two were pinned while the third was not. A div is the one of the three that renders its children unchanged, so a definition inside it is the case where the line looks most like a document-level one, and the use below it still gets no <abbr>.

carve
:::
*[HTML]: Hyper Text

The HTML spec.
:::
html
<div>
  <p>*[HTML]: Hyper Text</p>
  <p>The HTML spec.</p>
</div>

A definition below every content column folds as text ​

1 conformance fixture

A definition is not block-shaped, but §24 C3's "every other line" covers it too: below every open content column it folds into the item paragraph as literal text and registers nothing, so a reference to it elsewhere stays literal. The failure this guards against is not a wrong shape but a disappearance - a definition that falls past the fold branch lands at the item's own column 0, where it is skipped as already-extracted and renders as nothing at all.

carve
- - a
 [^f]: x
html
<ul>
  <li>
    <ul>
      <li>a
[^f]: x</li>
    </ul>
  </li>
</ul>

An abbreviation at a list item's content column is still not a definition ​

2 conformance fixtures

*[TERM]: expansion is recognized only at document level - NORMATIVE, and already pinned inside a block quote and on a list item's MARKER line. The position that was missing is the one where the other definition kinds do the opposite: an item's CONTENT COLUMN, on a continuation line. There the line is item text and defines nothing, so the reference below it renders without an <abbr>.

carve
- a
  *[HTML]: Hyper Text

The HTML spec.
html
<ul>
  <li>a
*[HTML]: Hyper Text</li>
</ul>
<p>The HTML spec.</p>

The contrast is the point: a REFERENCE definition written at that same column IS the item's block, so it renders nothing and resolves. Three definition kinds, one column, two answers - and until now nothing measured the difference at this position.

carve
- a
  [r]: /u

see [t][r]
html
<ul>
  <li>a</li>
</ul>
<p>see <a href="/u">t</a></p>

An abbreviation definition in an item body is paragraph text ​

5 conformance fixtures

PART 12 §7 says an abbreviation_definition is one only as a direct child of the document: written inside a block quote, a list item or a div, "the line is not a definition at all: it is ordinary paragraph text, it defines nothing, and it is preserved as the text the author typed". So the looseness question §17 L1 asks - does the item hold a blank-line-separated second paragraph - has an answer that follows from §7 rather than from a rule about abbreviations: the line renders, so it IS that paragraph, and the item is loose.

carve
- a

  *[A]: a
html
<ul>
  <li><p>a</p>
    <p>*[A]: a</p>
  </li>
</ul>

Nothing changes when a sublist follows it. The definition-shaped line is already the second paragraph, and §17 L2's attached sub-block cannot take that back:

carve
- a

  *[A]: a
  - b
html
<ul>
  <li><p>a</p>
    <p>*[A]: a</p>
    <ul>
      <li>b</li>
    </ul>
  </li>
</ul>

Looseness is a property of the LIST, so a sibling item is wrapped too:

carve
- a

  *[A]: a
  - b
- c
html
<ul>
  <li><p>a</p>
    <p>*[A]: a</p>
    <ul>
      <li>b</li>
    </ul>
  </li>
  <li><p>c</p></li>
</ul>

The control is the definition kind that IS collected at that column. A link reference definition inside the item renders nothing, resolves for the rest of the document, and leaves the item tight - which is what makes the abbreviation's answer a consequence of §7 rather than an inconsistency:

carve
- a

  [r]: /u

See [x][r].
html
<ul>
  <li>a</li>
</ul>
<p>See <a href="/u">x</a>.</p>

At document level the abbreviation is collected, renders nothing of its own, and expands its term - the behavior the container position does not get:

carve
*[A]: alpha

A here
html
<p><abbr title="alpha">A</abbr> here</p>

A : description line needs a term above it ​

1 conformance fixture

A definition list is a term plus its descriptions, so a : line with no term above it opens nothing - the line is ordinary paragraph text, and anything on it stays text too.

carve
:  [r]: /u

see [t][r]
html
<p>:  [r]: /u</p>
<p>see [t][r]</p>

A tab as the first character of a definition term ​

1 conformance fixture

A tab right after the marker's separator space is a different question from the previous one: the separator itself is a literal space, and it is present, so the marker is satisfied and a term forms. The tab is the first character of the term's content, not part of the separator - ordinary leading whitespace there, stripped the same way a bullet's own extra separator spaces never reach the item's text. It is not protected by the tabs-in-code verbatim rule, which covers fenced code content and inline code spans only (carve#698).

carve
:: 	x
html
<dl>
  <dt>x</dt>
</dl>

An abbreviation term is one ASCII alphanumeric word ​

2 conformance fixtures

abbreviation_term = (letter | digit)+, and letter is enumerated as a..z plus A..Z. So the term is case-blind, may start with a digit, and may be a digit alone - every corpus abbreviation before this one was an uppercase multi-letter word, which is the one shape that hides all of those.

carve
*[dl]: definition list
*[3D]: three dimensional
*[9]: nine

A dl, a 3D one, and 9.
html
<p>A <abbr title="definition list">dl</abbr>, a <abbr title="three dimensional">3D</abbr> one, and <abbr title="nine">9</abbr>.</p>

A term outside that alphabet is not a definition, and the line stays as written rather than being dropped. An abbreviation has no marker at the use site, so a definition swallowed here would take its whole line of prose with it and leave nothing behind to explain the loss.

carve
*[ß]: sharp s
*[e.g.]: for example
*[HTTP API]: an interface

Text about ss and eg below.
html
<p>*[ß]: sharp s
*[e.g.]: for example
*[HTTP API]: an interface</p>
<p>Text about ss and eg below.</p>

A definition inside a definition-list dd is collected, and the entry keeps no trace ​

2 conformance fixtures

A <dd> continues like a list item (§17, definition_body) and is one of the block-level contexts §17 L6 names: a definition written as its content is collected into the document-wide table and the entry renders empty, exactly as a list item or block quote does. This holds the same way for both definition kinds a <dd> can hold - a link reference definition and a footnote definition - so a fix for one is not a fix for only one (carve#666).

carve
:: term
:  [r]: /u

see [t][r]
html
<dl>
  <dt>term</dt>
  <dd></dd>
</dl>
<p>see <a href="/u">t</a></p>
carve
:: term
:  [^f]: x

see[^f]
html
<dl>
  <dt>term</dt>
  <dd></dd>
</dl>
<p>see<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a></p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>x<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

An empty abbreviation term is not a definition ​

1 conformance fixture

abbreviation_term = (letter | digit)+ needs at least one character, so *[]: opens nothing and the line stays paragraph text.

carve
*[]: expansion

Text.
html
<p>*[]: expansion</p>
<p>Text.</p>

A definition body opener at or past its column stays structural ​

3 conformance fixtures

definition_indent reaches the body's minimum column. A recognized block opener at or beyond that column establishes its authored position as a local block base, matching list items and footnote bodies. The > here therefore opens a quote. Ordinary over-indented text still continues the paragraph.

The two documents after it are CONTROLS. They pin the columns on either side of the boundary, which do not change and are not what was ruled: at the body's own column a block opener still opens a block, and flush left the body ends and the quote is its sibling. Without them the rule above reads as "an indented > is never a quote", which is not what it says.

carve
:: t
:  body
    > q
html
<dl>
  <dt>t</dt>
  <dd>
    <p>body</p>
    <blockquote><p>q</p></blockquote>
  </dd>
</dl>

CONTROL, at the body's column. Three spaces reach column 3, so the line is the body's own block content and the quote opens.

carve
:: t
:  body
   > q
html
<dl>
  <dt>t</dt>
  <dd>
    <p>body</p>
    <blockquote><p>q</p></blockquote>
  </dd>
</dl>

CONTROL, flush left. Column 0 does not reach the body's column at all, so the body ends and the quote is a sibling of the list.

carve
:: t
:  body
> q
html
<dl>
  <dt>t</dt>
  <dd>body</dd>
</dl>
<blockquote><p>q</p></blockquote>

An abbreviation expands inside an inline container ​

5 conformance fixtures

PART 9R R3 matches a term in RENDERED TEXT at word boundaries. The container the text sits in does not change that: an ordinary span, a compact semantic span and the :name[…] extension form all expand, exactly as emphasis and a link do.

The corpus had one case here - the explicit-abbr row, which every engine agreed on - so every neighbouring row was unpinned, and two engines kept opposite defects for months with no red test: carve-rs dropped the expansion inside a span, carve-js dropped it inside :name[…] (markup-carve/carve#1151).

carve
*[HTML]: Long Form

The [HTML]{.x} key.
html
<p>The <span class="x"><abbr title="Long Form">HTML</abbr></span> key.</p>

A compact semantic span is the same question, and PART 9 §10 made this spelling a documented feature - so a dropped expansion here is silent loss inside a construct the docs teach.

carve
*[HTML]: Long Form

The [HTML]{kbd} key.
html
<p>The <kbd><abbr title="Long Form">HTML</abbr></kbd> key.</p>

The :name[…] form takes the generic fallback in a core render, and the term still expands inside it.

carve
*[HTML]: Long Form

The :kbd[HTML] key.
html
<p>The <span class="ext-kbd"><abbr title="Long Form">HTML</abbr></span> key.</p>

The controls: emphasis and a link already agreed across engines, and they pin that the containers above are not special-cased in one direction.

carve
*[HTML]: Long Form

Both *HTML* and [HTML](/u) expand.
html
<p>Both <strong><abbr title="Long Form">HTML</abbr></strong> and <a href="/u"><abbr title="Long Form">HTML</abbr></a> expand.</p>

An explicit abbr attribute is the one exception (markup-carve/carve#1127): the authored expansion wins and the definition does not apply on top of it.

carve
*[HTML]: Long Form

The [HTML]{abbr="Custom"} key.
html
<p>The <abbr title="Custom">HTML</abbr> key.</p>

Definition lists ​

1 conformance fixture

A definition list also does not interrupt a paragraph - a :: line directly under prose folds into that paragraph, so a list needs a blank line before it.

A blank line may separate a term from its definition (or one definition from the next) for readability - a following : line still attaches to the entry:

carve
:: term

: the definition
html
<dl>
  <dt>term</dt>
  <dd>the definition</dd>
</dl>

A definition (<dd>) ends at a blank line that is followed by neither an indented continuation nor a : definition, at a new :: term, or at a block opener.

Attributes attach to the whole <dl> via a preceding block-attribute line ({.class} on the line before the first :: term). There is deliberately no per-<dt> / per-<dd> attribute form: unlike a list item (-{.c}) or a table row (| … |{.c}), a term or definition takes no glued marker attributes. Style individual terms/definitions with CSS descendant selectors (dl.gloss dt), or put the attributes on the <dl>.

One consumed boolean spells the looseness no blank line can ​

1 conformance fixture
carve
{loose}
:: Term
:  Definition.
html
<dl>
  <dt>Term</dt>
  <dd><p>Definition.</p></dd>
</dl>

A definition body's separator width sets its content column ​

7 conformance fixtures

The separator after : is a run of one or more spaces, and the body's content column is 1 + separator width - the rule a bullet already follows. One space is canonical; a wider run is accepted and the formatter narrows it, carrying the body's continuations down with it.

carve
:: term
: definition
html
<dl>
  <dt>term</dt>
  <dd>definition</dd>
</dl>

A one-space body establishes column 2, so a continuation reaching column 2 folds into the dd.

carve
:: term
: first

  second
html
<dl>
  <dt>term</dt>
  <dd>
    <p>first</p>
    <p>second</p>
  </dd>
</dl>

Column 1 does not reach it, and the block after the blank is the document's own.

carve
:: term
: first

 second
html
<dl>
  <dt>term</dt>
  <dd>first</dd>
</dl>
<p>second</p>

The two-space spelling keeps column 3, so the same column-2 continuation does not reach ITS body. The two spellings differ in how far a continuation indents, never in what they mean.

carve
:: term
:  first

  second
html
<dl>
  <dt>term</dt>
  <dd>first</dd>
</dl>
<p>second</p>

Both spellings may appear in one list, each carrying its own column.

carve
:: term
: one
:  two
html
<dl>
  <dt>term</dt>
  <dd>one</dd>
  <dd>two</dd>
</dl>

The first-block + form reads the same on either width.

carve
:: term
: +
flush block
html
<dl>
  <dt>term</dt>
  <dd>flush block</dd>
</dl>

A colon line below a folding term is the body, not more term text. This is the case the engines answered three ways while the one-space spelling had no meaning: carve-js folded it into the dt, the executable spec left it a stray paragraph.

carve
:: term
wrapped on
: definition
html
<dl>
  <dt>term
wrapped on</dt>
  <dd>definition</dd>
</dl>

An ordered item's separator width sets its content column ​

13 conformance fixtures

An ordered marker's content column is where its content actually starts - marker width plus the authored separator run (PART 9 §24 C3). One space puts 1. x at column 3, two put 1. x at 4, three put 1. x at 5, and a continuation belongs to the item only by reaching its own item's column. This is the rule the bullet already follows and the one carve#1757 gave the definition body; the ordered marker was the last construct measuring its separator against a fixed width.

The one-space control: column 3, and a continuation at 3 reaches it.

carve
1. first

   second
html
<ol>
  <li><p>first</p>
    <p>second</p>
  </li>
</ol>

Two spaces move the column to 4, so the same column-3 continuation no longer reaches it and the block after the blank is the document's own.

carve
1.  first

   second
html
<ol>
  <li>first</li>
</ol>
<p>second</p>

At column 4 it reaches.

carve
1.  first

    second
html
<ol>
  <li><p>first</p>
    <p>second</p>
  </li>
</ol>

Three spaces move it to 5. A wider run is not a third column and not a fixed one: each spelling carries its own.

carve
1.   first

   second
html
<ol>
  <li>first</li>
</ol>
<p>second</p>
carve
1.   first

     second
html
<ol>
  <li><p>first</p>
    <p>second</p>
  </li>
</ol>

A marker-attached attribute block is metadata and contributes zero columns (§15 A8), so it does not move the column the separator sets: 1.{.note} is still 4.

carve
1.{.note}  first

    second
html
<ol>
  <li class="note"><p>first</p>
    <p>second</p>
  </li>
</ol>

The bare decimal dot claims one marker column, so its separator run sets the column from 1 rather than from 2: . x is column 3.

carve
.  first

   second
html
<ol>
  <li><p>first</p>
    <p>second</p>
  </li>
</ol>

The marker's own width is the other half of the sum, and it is a RUN: 11. claims two value columns, 111. three, and a roman iii. three. A two-space separator therefore puts 11. x at column 5 and 111. x at 6, and a continuation one column short of each reaches neither.

carve
11.  first

     second
html
<ol start="11">
  <li><p>first</p>
    <p>second</p>
  </li>
</ol>
carve
11.  first

    second
html
<ol start="11">
  <li>first</li>
</ol>
<p>second</p>
carve
111.  first

      second
html
<ol start="111">
  <li><p>first</p>
    <p>second</p>
  </li>
</ol>
carve
111.  first

     second
html
<ol start="111">
  <li>first</li>
</ol>
<p>second</p>

A roman numeral is a run too, so the same arithmetic reaches a dialect whose value is not a digit at all.

carve
iii.  first

      second
html
<ol type="i" start="3">
  <li><p>first</p>
    <p>second</p>
  </li>
</ol>
carve
iii.  first

     second
html
<ol type="i" start="3">
  <li>first</li>
</ol>
<p>second</p>

Below a definition body's column the body ends ​

7 conformance fixtures

A definition body has three bands, and the boundary is its own content column (PART 9, BELOW THE BODY'S COLUMN THE BODY ENDS). Below the column the body ENDS and the line is classified in whatever context survives it. At the column the line is the body's own block content. Past it a recognized opener takes its authored column as that block's local base.

Column 0 is not a special case of the first band, it is the ordinary case: the dd closes and the quote is the document's own.

carve
:: term
:  definition
> quote
html
<dl>
  <dt>term</dt>
  <dd>definition</dd>
</dl>
<blockquote><p>quote</p></blockquote>

One and two columns in are the same band, and the surviving context here is the document, where an opener must be written at column 0. So the body still ends and the indented > is ordinary paragraph text - it opens a quote nowhere.

carve
:: term
:  definition
 > quote
html
<dl>
  <dt>term</dt>
  <dd>definition</dd>
</dl>
<p>&gt; quote</p>
carve
:: term
:  definition
  # H
html
<dl>
  <dt>term</dt>
  <dd>definition</dd>
</dl>
<p># H</p>

The band is about OPENERS, not about indentation. A line that opens nothing is lazy paragraph text and folds into the body from any column, exactly as it does under a list item.

carve
:: term
:  definition
  more
html
<dl>
  <dt>term</dt>
  <dd>definition
more</dd>
</dl>

At the body's column the quote is the body's own block content, and past it the opener keeps its authored column as the block's base. Both nest.

carve
:: term
:  definition
   > quote
html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <blockquote><p>quote</p></blockquote>
  </dd>
</dl>
carve
:: term
:  definition
    > quote
html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <blockquote><p>quote</p></blockquote>
  </dd>
</dl>

"The surviving context" is not always the document. Inside a list item the body ends the same way, and the quote is then measured against the ITEM's content column, which it reaches - so it opens inside the item rather than inside the dd. The base a block establishes governs that block, never the next opener written below it.

carve
- intro

  :: term
  :  definition
   > quote
html
<ul>
  <li>intro
    <dl>
      <dt>term</dt>
      <dd>definition</dd>
    </dl>
    <blockquote><p>quote</p></blockquote>
  </li>
</ul>

An opener at or past a description body's column closes its paragraph ​

15 conformance fixtures

BELOW THE BODY'S COLUMN THE BODY ENDS gives a description body three bands, and its first band - A NON-OPENER STILL FOLDS - is conditioned on an OPEN PARAGRAPH: a flush-left line that opens nothing folds in because §10 I2's lazy continuation still reaches it. The two upper bands decide whether there is one. An opener at the body's column and an opener past it are both the body's own block content, so §10 I1 closes the paragraph for a visible opener and §10 I5 closes it for a definition or an attribute block. With the paragraph closed the flush-left line has nothing left to reach and the body ENDS (markup-carve/carve#1911).

The reported document. : sets the body's content column at 3 and the definition is written at 4, one past it. It registers in the shared table, which closes the paragraph, so tail is a document paragraph rather than the body's second one.

carve
:: term
:  definition
    [r]: /url
tail
html
<dl>
  <dt>term</dt>
  <dd>definition</dd>
</dl>
<p>tail</p>

The same definition AT the column, which is the answer the row above has to match. A reader whose answer moves between column 3 and column 4 is reading indentation rather than the rule.

carve
:: term
:  definition
   [r]: /url
tail
html
<dl>
  <dt>term</dt>
  <dd>definition</dd>
</dl>
<p>tail</p>

A heading is the visible half of the same rule. It opens at its authored base inside the dd and closes the paragraph above it, so tail leaves the body here too.

carve
:: term
:  definition
    # H
tail
html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <h1 id="H">H</h1>
  </dd>
</dl>
<p>tail</p>

The heading at the column, the control the row above must equal.

carve
:: term
:  definition
   # H
tail
html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <h1 id="H">H</h1>
  </dd>
</dl>
<p>tail</p>

A thematic break is a visible opener with no content of its own, and answers the same.

carve
:: term
:  definition
    ***
tail
html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <hr>
  </dd>
</dl>
<p>tail</p>

So is a table row, which spans lines - the row below it would be the table's, and a flush-left line is neither that nor the closed paragraph's.

carve
:: term
:  definition
    | a |
tail
html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <table>
      <tbody>
        <tr><td>a</td></tr>
      </tbody>
    </table>
  </dd>
</dl>
<p>tail</p>

An attribute block past the column closes the paragraph the same way §10 I5 closes it at the column, and with the body ended there is no following block in it for the attribute to attach to (§15 A4).

carve
:: term
:  definition
    {.k}
tail
html
<dl>
  <dt>term</dt>
  <dd>definition</dd>
</dl>
<p>tail</p>

The same attribute block at the column, which every reader already answers this way.

carve
:: term
:  definition
   {.k}
tail
html
<dl>
  <dt>term</dt>
  <dd>definition</dd>
</dl>
<p>tail</p>

A comment past the column is the row this rule was read off: it closes the paragraph and ends the body at every column, and the definition row above had to answer alike.

carve
:: term
:  definition
    %% c
tail
html
<dl>
  <dt>term</dt>
  <dd>definition</dd>
</dl>
<p>tail</p>

The band still needs a NON-opener to fold. Over-indented ordinary text opens nothing, leaves the paragraph open, and both lines join the body - so a reader that ends the body at every line past the column is wrong in the other direction.

carve
:: term
:  definition
    more
tail
html
<dl>
  <dt>term</dt>
  <dd>definition
more
tail</dd>
</dl>

And an opener that leaves a paragraph OPEN keeps the follower. The quote opens inside the dd and its own paragraph is still open, so tail lazily continues THE QUOTE. What ends the body is a closed paragraph, never the presence of an opener.

carve
:: term
:  definition
    > q
tail
html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <blockquote><p>q
tail</p></blockquote>
  </dd>
</dl>

The band moves with the SEPARATOR WIDTH rather than sitting at column 4: a four-space separator sets the body's column at 5, and the heading one past it is at 6.

carve
:: term
:    definition
      # H
tail
html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <h1 id="H">H</h1>
  </dd>
</dl>
<p>tail</p>

THE SURVIVING CONTEXT IS WHATEVER HOLDS THE LIST. Inside a list item the body ends at the heading exactly as it does at the top level, and tail is then measured against the ITEM, whose content column it reaches - so it is the item's own text and not a document paragraph.

carve
- intro

  :: term
  :  definition
      # H
  tail
html
<ul>
  <li>intro
    <dl>
      <dt>term</dt>
      <dd>
        <p>definition</p>
        <h1 id="H">H</h1>
      </dd>
    </dl>
    tail
  </li>
</ul>

The line BELOW the ended body is classified in the surviving context whatever its shape. A definition written one column in is not at the document's column 0, so it opens nothing there and is ordinary paragraph text - it does not fold back into the dd as the first band's lazy text, because the heading closed the paragraph that band folds into.

carve
:: term
:  definition
    # H
 [r]: /url
html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <h1 id="H">H</h1>
  </dd>
</dl>
<p>[r]: /url</p>

The same follower under a heading AT the column, the control the row above must equal.

carve
:: term
:  definition
   # H
 [r]: /url
html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <h1 id="H">H</h1>
  </dd>
</dl>
<p>[r]: /url</p>

The host does not change which column a definition reaches ​

24 conformance fixtures

PART 0's AT OR PAST MEANS THE DEEPEST COLUMN THE LINE REACHES is written about CONTAINERS, and the three indented-block collectors are containers alike - a description body and a footnote body select an owner by content column exactly as a list item does (§10 I5, DEFINITION BODIES FOLLOW THE SAME CONTAINER REACH RULE). So a definition written strictly between two open content columns registers in the outer one whatever pair of hosts opened them (markup-carve/carve#1918).

The band is pinned at both edges and in the middle, because the middle column is the only one the other reading answers differently: read as the deepest container still OPEN, one added space would remove a definition and a second would restore it. Section 441 pins that band for two list items; this section pins the same band for every other pair.

A two-space separator opens the description body at column 3 and the item inside it at column 5. Column 3 first - the body's own content column.

carve
:: t
:  - a
   [r]: /url

See [r][].
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>a</li>
    </ul>
  </dd>
</dl>
<p>See <a href="/url">r</a>.</p>

Column 4, strictly between the two. This is the column that read as lazy text under a body while the identical shape under an item registered.

carve
:: t
:  - a
    [r]: /url

See [r][].
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>a</li>
    </ul>
  </dd>
</dl>
<p>See <a href="/url">r</a>.</p>

Column 5, the item's own content column.

carve
:: t
:  - a
     [r]: /url

See [r][].
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>a</li>
    </ul>
  </dd>
</dl>
<p>See <a href="/url">r</a>.</p>

The separator width moves the band and nothing else. A one-space separator puts the same middle column at 3, and a three-space separator at 5.

carve
:: t
: - a
   [r]: /url

See [r][].
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>a</li>
    </ul>
  </dd>
</dl>
<p>See <a href="/url">r</a>.</p>
carve
:: t
:   - a
     [r]: /url

See [r][].
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>a</li>
    </ul>
  </dd>
</dl>
<p>See <a href="/url">r</a>.</p>

The inner container is not a parameter either. A description body inside a description body answers the middle column the same way.

carve
:: t
:  :: u
   : d
    [r]: /url

See [r][].
html
<dl>
  <dt>t</dt>
  <dd>
    <dl>
      <dt>u</dt>
      <dd>d</dd>
    </dl>
  </dd>
</dl>
<p>See <a href="/url">r</a>.</p>

Nor is the outer one. A footnote body opens at column 2, the list inside it at column 4, and the definition at column 3 is the note's.

carve
[^f]: b

  - a
   [r]: /url

See [r][] and [^f].
html
<p>See <a href="/url">r</a> and <a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a>.</p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>b</p>
      <ul>
        <li>a</li>
      </ul>
      <p><a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

The same note holding a description body.

carve
[^f]: b

  :: t
  : d
   [r]: /url

See [r][] and [^f].
html
<p>See <a href="/url">r</a> and <a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a>.</p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>b</p>
      <dl>
        <dt>t</dt>
        <dd>d</dd>
      </dl>
      <p><a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

A list item outside and a description body inside: the definition at column 3 reaches the ITEM, so the body ends above it and the item's paragraph closes (§10 I5).

carve
- x
  :: t
  : d
   [r]: /url

See [r][].
html
<ul>
  <li>x
    <dl>
      <dt>t</dt>
      <dd>d</dd>
    </dl>
  </li>
</ul>
<p>See <a href="/url">r</a>.</p>

A list item outside and a footnote body inside. The note's body column is two past the definition line's own, so column 3 is between them and the item owns it. A definition renders nothing where it is written, so the item holds only x.

carve
- x
  [^g]: b
   [r]: /url

See [r][] and [^g].
html
<ul>
  <li>x</li>
</ul>
<p>See <a href="/url">r</a> and <a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a>.</p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>b<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

The payload kind is not a parameter. A footnote definition in the same slot answers the same way.

carve
- x
  [^g]: b
   [^n]: note text

See [^n] and [^g].
html
<ul>
  <li>x</li>
</ul>
<p>See <a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a> and <a id="fnref2" href="#fn2" role="doc-noteref"><sup>2</sup></a>.</p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>note text<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn2">
      <p>b<a href="#fnref2" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>
carve
:: t
:  - a
    [^n]: note text

See [^n].
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>a</li>
    </ul>
  </dd>
</dl>
<p>See <a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a>.</p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>note text<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

A description body holding a footnote definition, and a footnote body holding another one, complete the pairs.

carve
:: t
: [^g]: b
   [r]: /url

See [r][] and [^g].
html
<dl>
  <dt>t</dt>
  <dd></dd>
</dl>
<p>See <a href="/url">r</a> and <a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a>.</p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>b<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>
carve
[^f]: b

  [^g]: c
   [^n]: note text

See [^n] and [^f] and [^g].
html
<p>See <a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a> and <a id="fnref2" href="#fn2" role="doc-noteref"><sup>2</sup></a> and <a id="fnref3" href="#fn3" role="doc-noteref"><sup>3</sup></a>.</p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>note text<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn2">
      <p>b<a href="#fnref2" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn3">
      <p>c<a href="#fnref3" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

A REPEATED label is the same question with the table as no evidence: the second spelling is a definition wherever it lands, so it registers rather than publishing its own characters.

carve
- - x
  [r]: /first
   [r]: /second

See [r][].
html
<ul>
  <li>
    <ul>
      <li>x</li>
    </ul>
  </li>
</ul>
<p>See <a href="/second">r</a>.</p>

And the controls. An ABBREVIATION definition is recognized only as a direct child of the document (PART 12 §7), so the same slot leaves it as text - a fix that registered every definition-shaped line would move this row.

carve
:: t
:  - a
    *[HTML]: HyperText

HTML here.
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>a
*[HTML]: HyperText</li>
    </ul>
  </dd>
</dl>
<p>HTML here.</p>

BELOW EVERY OPEN COLUMN IS UNCHANGED. A definition at a nonzero column below the OUTERMOST open content column reaches no opener column at all and stays lazy paragraph text of the body it fell below (§24 C3).

carve
:: t
: d
 [r]: /url

See [r][].
html
<dl>
  <dt>t</dt>
  <dd>d
[r]: /url</dd>
</dl>
<p>See [r][].</p>

A NON-OPENER at the middle column still folds. The band is about lines the surviving context can open a block with; ordinary prose is not one.

carve
:: t
:  - a
    more
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>a
more</li>
    </ul>
  </dd>
</dl>

AN OPENER THAT LEAVES A PARAGRAPH OPEN IS NOT COVERED (carve#1917). A block quote past the body's column opens inside the dd, its own paragraph is still open, and the flush-left line lazily continues THE QUOTE.

carve
:: t
:  d
    > q
tail
html
<dl>
  <dt>t</dt>
  <dd>
    <p>d</p>
    <blockquote><p>q
tail</p></blockquote>
  </dd>
</dl>

A definition at the INNER container's own content column is that container's block content, so the extent does not end there and the line below it is still the item's text. The rule is what a container REACHES, not that a definition appeared.

carve
:: t
:  - a
     [r]: /url
     more

See [r][].
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>a
        more
      </li>
    </ul>
  </dd>
</dl>
<p>See <a href="/url">r</a>.</p>

AN OPAQUE PAYLOAD IS NOT SCANNED. A definition written inside a code, raw or comment fence is verbatim content and registers nothing, at any column, so the band's question is never asked of it - the fence runs to its own closer and [r][] stays literal.

carve
:: t
:  - a
     ```
     [r]: /url
     ```

See [r][].
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>a
        <pre><code>[r]: /url
</code></pre>
      </li>
    </ul>
  </dd>
</dl>
<p>See [r][].</p>

The same control for a fence attached by a continuation marker, where the block being measured is the fence itself.

carve
- a
+
```
 [r]: /url
```

See [r][].
html
<ul>
  <li>a
    <pre><code> [r]: /url
</code></pre>
  </li>
</ul>
<p>See [r][].</p>

A COMMENT fence's payload is opaque the same way, and its closer is matched on EXACT length (§28), so the definition inside it registers nothing and the reference below stays literal.

carve
:: t
:  - a
     %%%
     [r]: /url
     %%%

See [r][].
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>a</li>
    </ul>
  </dd>
</dl>
<p>See [r][].</p>

And a definition at the measured block's OWN column 0 is the block's by construction, however many of them there are: the second spelling of one label does not end the block it is written in, so the line under it is still the block's.

carve
- a
+
[r]: /a
[r]: /b
more

See [r][].
html
<ul>
  <li>a
    more
  </li>
</ul>
<p>See <a href="/b">r</a>.</p>

Below a definition body's column an invisible line folds as text ​

6 conformance fixtures

§10 I5 and AN INVISIBLE LINE FOLDS LIKE ANY OTHER both say the same thing about this band, in their own words: at a nonzero column below the container's content column an invisible line is lazy paragraph text of that container, and registers nothing. Corpus 426-4 already pins the plain-line control folding from this column. Every invisible kind gives the same answer, so the band has one answer and not one per construct.

A link reference definition folds as characters. The reference elsewhere in the document stays literal, which is what "registers nothing" costs - half-folding it, text on the page and a definition in the tables, is not on offer.

carve
:: t
:  d
  [r]: /u
tail

See [text][r].
html
<dl>
  <dt>t</dt>
  <dd>d
[r]: /u
tail</dd>
</dl>
<p>See [text][r].</p>

The footnote spelling is the same answer one construct over, and the same unresolved reference below it.

carve
:: t
:  d
  [^f]: n
tail

See[^f]
html
<dl>
  <dt>t</dt>
  <dd>d
[^f]: n
tail</dd>
</dl>
<p>See[^f]</p>

A block-attribute line is on I5's interrupter list with the definitions and folds with them. It attaches nothing: the braces are characters in the description, and the following line folds in behind them exactly as it does above.

carve
:: t
:  d
  {.k}
tail
html
<dl>
  <dt>t</dt>
  <dd>d
{.k}
tail</dd>
</dl>

An abbreviation definition already answered this way, because PART 12 §7 recognizes one only as a direct child of the document; it is in the band so all four kinds are held by one row each rather than by an argument that three of them are alike.

carve
:: t
:  d
  *[A]: a
tail
html
<dl>
  <dt>t</dt>
  <dd>d
*[A]: a
tail</dd>
</dl>

A COMMENT IS THE ONE EXCEPTION and is invisible at any column, including this one. What the line AFTER a comment belongs to is a separate open question about the comment's own column, recorded in PART 9 §24 and pinned in the list-item host by corpus 189 and 192, so this row asks only what the comment itself renders.

carve
:: t
:  d
  %% c
html
<dl>
  <dt>t</dt>
  <dd>d</dd>
</dl>

The band is more than one column wide, and the answer does not move inside it. One column below the content column reads the same as two.

carve
:: t
:  d
 [r]: /u
tail
html
<dl>
  <dt>t</dt>
  <dd>d
[r]: /u
tail</dd>
</dl>

A comment below a description body's column ends the body ​

13 conformance fixtures

A %%% written at DOCUMENT column 0 below a description body ends the body and is classified in the surviving context, where a matching run below it makes it a comment BLOCK. The line between the two delimiters is comment content and renders nothing (markup-carve/carve#1930).

This is the rule the ITEM host has always had -- a comment fence at the frame's column 0 ends the item and hands the following line to the enclosing block, while an indented fence stays with the item. §17's band says the same for a description body in so many words: below the body's content column the body ends and the line is classified in the surviving context, and "at DOCUMENT column 0 they are interrupters and the body does end". The dd had no such arm, so the fence folded in as an invisible body line, no block was ever opened, and BOTH delimiters degraded to line comments while the text between them was published.

TERMINATED IS WHAT MAKES IT A BLOCK, and the degraded control below is why that has to be said: §28's degradation is total, so an opener with no exact-width closer ahead is one %% line comment for every question the layout asks, and it opens nothing here either.

The ticket's document.

carve
:: t
:  x
%%%
y
%%%
z
html
<dl>
  <dt>t</dt>
  <dd>x</dd>
</dl>
<p>z</p>

The width is not a parameter -- a wider run answers the same way.

carve
:: t
:  x
%%%%
y
%%%%
z
html
<dl>
  <dt>t</dt>
  <dd>x</dd>
</dl>
<p>z</p>

The closer is looked for AHEAD rather than on the next line, so a two-line body is the same block.

carve
:: t
:  x
%%%
y
w
%%%
z
html
<dl>
  <dt>t</dt>
  <dd>x</dd>
</dl>
<p>z</p>

DEGRADED IS THE CONTROL. With no closer ahead the opener is one line comment, it opens nothing, and the lines below it are ordinary paragraph text.

carve
:: t
:  x
%%%
y
z
html
<dl>
  <dt>t</dt>
  <dd>x</dd>
</dl>
<p>y
z</p>

The %% LINE FORM is the other control. It is invisible at any column and opens no block, so the body ends at it and the following line is a document paragraph.

carve
:: t
:  x
%% c
z
html
<dl>
  <dt>t</dt>
  <dd>x</dd>
</dl>
<p>z</p>

AT THE BODY'S OWN COLUMN the fence is the body's content, its closer is not in the body, and both delimiters degrade to line comments. This row is what makes column 0 legible as the document's column rather than the body's.

carve
:: t
:  x
   %%%
y
   %%%
z
html
<dl>
  <dt>t</dt>
  <dd>x</dd>
</dl>
<p>y</p>
<p>z</p>

THE ITEM HOST IS THE TWIN, pinned beside the description so the two cannot drift apart again.

carve
- a
%%%
c
%%%
b
html
<ul>
  <li>a</li>
</ul>
<p>b</p>

A FOLLOWER AT THE BODY'S OWN COLUMN is what makes the three comment shapes one rule rather than three. With the body ended at the comment, a line back at column 3 is a document paragraph -- it has no body left to rejoin. The %% line form first.

carve
:: t
:  x
%% c
   more
html
<dl>
  <dt>t</dt>
  <dd>x</dd>
</dl>
<p>more</p>

The DEGRADED fence, same answer: whether a closer follows decides what the comment IS, never whether the body survives it.

carve
:: t
:  x
%%%
   more
html
<dl>
  <dt>t</dt>
  <dd>x</dd>
</dl>
<p>more</p>

And the terminated fence, which completes the trio.

carve
:: t
:  x
%%%
y
%%%
   more
html
<dl>
  <dt>t</dt>
  <dd>x</dd>
</dl>
<p>more</p>

THE COLUMN IS NOT A PARAMETER EITHER, as long as the comment is BELOW the body's content column. One column in answers as column 0 does.

carve
:: t
:  x
 %%%
y
 %%%
z
html
<dl>
  <dt>t</dt>
  <dd>x</dd>
</dl>
<p>z</p>

Two columns in, the last column below the body's own.

carve
:: t
:  x
  %%%
y
  %%%
z
html
<dl>
  <dt>t</dt>
  <dd>x</dd>
</dl>
<p>z</p>

And the line form one column in, with a follower back at the body's column -- the two axes crossed, so neither can be read as the one doing the work.

carve
:: t
:  x
 %% c
   more
html
<dl>
  <dt>t</dt>
  <dd>x</dd>
</dl>
<p>more</p>

A closed fence in a description body ends it ​

4 conformance fixtures

A FENCED BODY IS NOT A PARAGRAPH and FENCE KIND DOES NOT DETERMINE CONTAINER REACH say S4's lazy branch asks for an OPEN PARAGRAPH, and that a code fence body cannot hold one at all. So a body whose last block is a CLOSED fence has nothing for the flush-left line to continue, and the line is the document's. The list-item host pins the same answer at 270-a-real-div-in-a-container-and-the-flush-left-line-after-it-3 and 86-list-lazy-continuation-7; these rows pin the description-body host (markup-carve/carve#1930).

carve
:: term
:  definition
   ::: note
   body

tail


```html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <aside class="admonition note" aria-label="Note">
      <p>body</p>
    </aside>
  </dd>
</dl>
<p>tail</p>

:::

The CODE-fence spelling of the same rule, which is the one the normative clause names outright.

carve
:: term
:  definition

c

tail
html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <pre><code>c
</code></pre>
  </dd>
</dl>
<p>tail</p>

CONTROL -- an UNTERMINATED fence is the opposite answer, and the reason the rule is about the closed fence rather than about the fence line: an unterminated fence opens no block, so the paragraph above it is still open and the flush-left line folds into the body.

carve
:: term
:  definition

c tail


```html
<dl>
  <dt>term</dt>
  <dd>definition
<code>
c
tail</code></dd>
</dl>

A ::: INSIDE A CODE FENCE is payload, not the container's closer. The rule reads the body's fence state, and a code fence's contents are opaque to it - mistaking the payload for the closer would make the real closer look like an opener and pull the flush-left line back in.

carve
:: term
:  definition
   ::: note
   ```
:::
tail
html
<dl>
  <dt>term</dt>
  <dd>
    <p>definition</p>
    <aside class="admonition note" aria-label="Note">
      <pre><code>:::
</code></pre>
    </aside>
  </dd>
</dl>
<p>tail</p>

:::

A container in a host body owns a line past its own content column ​

9 conformance fixtures

A QUOTE or a DIV opened inside a list item, definition body or footnote body, holding a line indented past its OWN content column, was covered by nothing here. The questions it settles are ruled elsewhere - whether the inner container owns the run, whether a definition written there is consumed - but no document pinned them together, so an engine could answer them either way and stay green. A right-to-wrong regression passed all 1623 documents on both sides before these rows existed (markup-carve/carve#1937).

[r][] sits at the end of each document so consumption is OBSERVABLE: a consumed definition resolves to a link, and one left as text shows its own source in the output. Without it the two answers render alike and the row pins nothing.

THE HOST DECIDES CONSUMPTION, and that is the whole content of the regression. A definition written in a container in a LIST ITEM stays text.

carve
- a
  ::: note
   [r]: /url
  :::

[r][]
html
<ul>
  <li>a
    <aside class="admonition note" aria-label="Note">
      <p>[r]: /url</p>
    </aside>
  </li>
</ul>
<p>[r][]</p>

The same document under a DEFINITION BODY consumes it, and the reference below resolves.

carve
:: t
:  a
   ::: note
    [r]: /url
   :::

[r][]
html
<dl>
  <dt>t</dt>
  <dd>
    <p>a</p>
    <aside class="admonition note" aria-label="Note">

    </aside>
  </dd>
</dl>
<p><a href="/url">r</a></p>

A FOOTNOTE BODY agrees with the definition body. Written with a QUOTE as the inner container deliberately: the div spelling under this host trips a separate defect where the closer is swallowed once its only line is consumed (markup-carve/carve#1948), and a row must not bake that in. It wants the div spelling too once that is settled.

carve
see[^f]

[^f]: a
    > q
     [r]: /url

[r][]
html
<p>see<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a></p>
<p><a href="/url">r</a></p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>a</p>
      <blockquote><p>q</p></blockquote>
      <p><a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

A BLOCKQUOTE HOST agrees with the list item.

carve
> a
> ::: note
>  [r]: /url
> :::

[r][]
html
<blockquote>
  <p>a</p>
  <aside class="admonition note" aria-label="Note">
    <p>[r]: /url</p>
  </aside>
</blockquote>
<p>[r][]</p>

THE INNER CONTAINER FLIPS IT TOO, under one host. Swap the div for a quote in the SAME list item and the definition IS consumed, which is the opposite answer on the same host and the same geometry.

carve
- a
  > q
   [r]: /url

[r][]
html
<ul>
  <li>a
    <blockquote><p>q</p></blockquote>
  </li>
</ul>
<p><a href="/url">r</a></p>

THE FLIP DOES NOT GENERALIZE, which is why the next row is here rather than left to inference. A quote under a DEFINITION BODY consumes exactly as the div did, so it is the list item's div that is the odd one out and not quotes that are special. Without this row the one above reads as "a quote always consumes".

carve
:: t
:  a
   > q
    [r]: /url

[r][]
html
<dl>
  <dt>t</dt>
  <dd>
    <p>a</p>
    <blockquote><p>q</p></blockquote>
  </dd>
</dl>
<p><a href="/url">r</a></p>

A DIV'S EXTENT IS ITS FENCES AND A QUOTE'S IS ITS LAZY RUN, the second distinction two engine fixes turned on. A div holds both paragraphs across the blank line.

carve
- a
  ::: note
   first

   second
  :::
html
<ul>
  <li>a
    <aside class="admonition note" aria-label="Note">
      <p>first</p>
      <p>second</p>
    </aside>
  </li>
</ul>

A quote's run ends at the blank, and the follower is a sibling in the item rather than in the quote.

carve
- a
  > q
   first

   second
html
<ul>
  <li><p>a</p>
    <blockquote><p>q
first</p></blockquote>
    <p>second</p>
  </li>
</ul>

THE NEGATIVE THAT BOUNDS THE REST. A blockquote host at the inner container's own indent does not open a container at all: ::: note is lazy paragraph text in the quote's paragraph, and the definition is not consumed because no container ever held it. Contrast the > ::: spelling four rows up, which does open one. Without this row the others read as "any host at any indent".

carve
> a
  ::: note
   [r]: /url
  :::

[r][]
html
<blockquote><p>a
::: note
[r]: /url
:::</p></blockquote>
<p>[r][]</p>

A block opener past a nested footnote definition opens in the item ​

4 conformance fixtures

A footnote definition is INVISIBLE - it leaves no paragraph open on the page. Its body reaches two columns past the definition, so a line ONE column past it is not body residue; it is the enclosing item's next block. A block opener there opens its block, and the item stays tight, exactly as it would with no definition between. The oracle used to demote the opener to paragraph text and turn the item loose - <p># h</p> for a heading visible in the source and absent from the render - which no engine does (markup-carve/carve#1949).

carve
- body

  [^g]: n
   # h

after
html
<ul>
  <li>body
    <h1 id="h">h</h1>
  </li>
</ul>
<p>after</p>

A quote marker opens its blockquote the same way.

carve
- body

  [^g]: n
   > z

after
html
<ul>
  <li>body
    <blockquote><p>z</p></blockquote>
  </li>
</ul>
<p>after</p>

A line that opens NOTHING is the control: prose one column past the definition is an ordinary paragraph in the item, and the item is loose because a blank line separates it from body. This is the answer that does not move.

carve
- body

  [^g]: n
   prose

after
html
<ul>
  <li><p>body</p>
    <p>prose</p>
  </li>
</ul>
<p>after</p>

A list marker opens a sublist, which is what makes the rule about MARKERS and not about the column: the same column that carries a heading, a quote and a sublist carries plain text as a paragraph.

carve
- body

  [^g]: n
   - item

after
html
<ul>
  <li>body
    <ul>
      <li>item</li>
    </ul>
  </li>
</ul>
<p>after</p>

An unterminated fence on a nested lead in a description body owns its body ​

4 conformance fixtures

A fence's content is not re-scanned for structure, so an unterminated code fence opened on a nested item's LEAD line owns every line below it - including a flush-left closing fence, which becomes body text. markup-carve/carve#1900 ruled this for the LIST-ITEM host; the description body is the same construct one host over. The oracle used to leave the fence EMPTY, demote the body to a paragraph in the description body, and open a SECOND document-level fence on the flush-left closer - a pre no source line asked for (markup-carve/carve#1947).

carve
:: t
: - ``` x
code
```
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>
        <pre><code class="language-x">code
```
</code></pre>
      </li>
    </ul>
  </dd>
</dl>

The tilde spelling owns its body the same way.

carve
:: t
: - ~~~ x
code
~~~
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>
        <pre><code class="language-x">code
~~~
</code></pre>
      </li>
    </ul>
  </dd>
</dl>

An info-less fence does too; the flush-left closer is still its content.

carve
:: t
: - ```
code
```
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>
        <pre><code>code
```
</code></pre>
      </li>
    </ul>
  </dd>
</dl>

The fence owns the body only to the END of the description body: a new term closes the body above it, and the fence with it, so a second term is a second term and not fence content.

carve
:: t
: - ``` x
code

:: t2
: plain
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>
        <pre><code class="language-x">code
</code></pre>
      </li>
    </ul>
  </dd>
  <dt>t2</dt>
  <dd>plain</dd>
</dl>

A definition nested past a footnote body is a note, and a reference below it resolves ​

2 conformance fixtures

In a stack of nested footnote definitions, whether the innermost definition is a NOTE and whether a reference below it is CONSUMED are settled by the spec's current reading (markup-carve/carve#1946): the innermost [^h] is a third note, and [r] is consumed so [t][r] resolves. An earlier revision read [^h] as text inside [^f] and left [r] unresolved; those two facts are the ones an engine cannot straddle, and the spec's own answer is canonical.

carve
[^f]: outer

   [^g]: mid

    [^h]: inner

  [r]: /url
  TAILWORD

x[^f] [^g] [^h] [t][r]
html
<p>x<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a> <a id="fnref2" href="#fn2" role="doc-noteref"><sup>2</sup></a> <a id="fnref3" href="#fn3" role="doc-noteref"><sup>3</sup></a> <a href="/url">t</a></p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>outer</p>
      <p>TAILWORD<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn2">
      <p>mid<a href="#fnref2" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn3">
      <p>inner<a href="#fnref3" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

The reference axis, isolated: the innermost definition is a note and the link below the stack resolves against a definition consumed inside it.

carve
[^f]: outer

  [^g]: mid

    [^h]: inner

   [r]: /url
   TAILWORD

x[^f] [^g] [^h] [t][r]
html
<p>x<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a> <a id="fnref2" href="#fn2" role="doc-noteref"><sup>2</sup></a> <a id="fnref3" href="#fn3" role="doc-noteref"><sup>3</sup></a> <a href="/url">t</a></p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>outer</p>
      <p>TAILWORD<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn2">
      <p>mid<a href="#fnref2" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn3">
      <p>inner<a href="#fnref3" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

A container closer closes its container in a footnote body too ​

2 conformance fixtures

A colon-fence closer at its opener's column closes the container whatever the host. A container opened in a FOOTNOTE body, holding a definition one column past its content column, then closed: the definition is consumed and the closer leaves the container empty. The footnote-body host used to keep the closer as a ::: paragraph inside the container; it now closes it, exactly as the description-body host already does (markup-carve/carve#1948).

carve
see[^f]

[^f]: a
    ::: note
     [r]: /url
    :::

[r][]
html
<p>see<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a></p>
<p><a href="/url">r</a></p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>a</p>
      <aside class="admonition note" aria-label="Note">

      </aside>
      <p><a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

The description-body host of the same geometry, unchanged - the control that shows the two hosts now agree.

carve
:: t
:  a
   ::: note
    [r]: /url
   :::

[r][]
html
<dl>
  <dt>t</dt>
  <dd>
    <p>a</p>
    <aside class="admonition note" aria-label="Note">

    </aside>
  </dd>
</dl>
<p><a href="/url">r</a></p>

A wrapped attribute block ends at its quote and reaches no line below it ​

3 conformance fixtures

An attribute block at the end of a quote ends where the quote ends. A line below the quote carries no quote marker, so it is not the block's target - the block is dropped and the line is a top-level paragraph. The WRAPPED spelling of the block ({.k then #x} on two quoted lines) used to reach past the quote's closing boundary and pull that line inside; it now stops at the boundary, exactly as the equivalent single-line block already does (markup-carve/carve#1956).

carve
> > q
> > {.k
> > #x}
tail
html
<blockquote>
  <blockquote><p>q</p></blockquote>
</blockquote>
<p>tail</p>

The single-line spelling of the same block, the control it now matches.

carve
> > q
> > {.k #x}
tail
html
<blockquote>
  <blockquote><p>q</p></blockquote>
</blockquote>
<p>tail</p>

When the line below IS still in the quote, both spellings attach the block to it - the block reaches a line the quote covers, which is the case that stayed the same.

carve
> > q
> > {.k
> > #x}
> > after
html
<blockquote>
  <blockquote>
    <p>q</p>
    <p class="k" id="x">after</p>
  </blockquote>
</blockquote>

A trailing line after a consumed definition is placed by column-reach ​

2 conformance fixtures

In the nested stack (markup-carve/carve#1946), a definition consumed below the notes and the line following it belong to the innermost note whose BODY CONTENT COLUMN - its own marker column plus two - the line's indentation reaches. The two rows of the section above pin the OUTER band; these pin the MID and INNER ones, so all three sinks are covered.

The MID band: the payload sits at column 4, past the mid note's body column (marker 2 plus two) but short of the inner note's (marker 6 plus two), so [r] is consumed inside [^g] and TAILWORD is its second paragraph.

carve
[^f]: outer

  [^g]: mid

      [^h]: inner

    [r]: /url
    TAILWORD

x[^f] [^g] [^h] [t][r]
html
<p>x<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a> <a id="fnref2" href="#fn2" role="doc-noteref"><sup>2</sup></a> <a id="fnref3" href="#fn3" role="doc-noteref"><sup>3</sup></a> <a href="/url">t</a></p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>outer<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn2">
      <p>mid</p>
      <p>TAILWORD<a href="#fnref2" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn3">
      <p>inner<a href="#fnref3" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

The INNER band: the payload sits at column 7, past the inner note's own body column (marker 4 plus two), so [r] and TAILWORD land in [^h].

carve
[^f]: outer

  [^g]: mid

    [^h]: inner

       [r]: /url
       TAILWORD

x[^f] [^g] [^h] [t][r]
html
<p>x<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a> <a id="fnref2" href="#fn2" role="doc-noteref"><sup>2</sup></a> <a id="fnref3" href="#fn3" role="doc-noteref"><sup>3</sup></a> <a href="/url">t</a></p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>outer<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn2">
      <p>mid<a href="#fnref2" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn3">
      <p>inner</p>
      <p>TAILWORD<a href="#fnref3" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

A nested note's floor is two columns past its own marker ​

3 conformance fixtures

A footnote body starts two columns past the definition that opened it, and the definition's OWN column is what those two columns are counted from. Between a nested note's marker and its floor there is a band that belongs to no line of that note: PART 0's owner selection hands it to the nearest surviving ancestor, which is the note outside it (markup-carve/carve#1971).

Below the nested note's floor, a definition ends it. [r] sits at column 2 and [^g] at 3, so the note's floor is 5 and the definition is outside it - it is consumed by the outer note, and [t][r] resolves there.

carve
[^f]: outer

   [^g]: mid
  [r]: /url

x[^f] [^g] [t][r]
html
<p>x<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a> <a id="fnref2" href="#fn2" role="doc-noteref"><sup>2</sup></a> <a href="/url">t</a></p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>outer<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn2">
      <p>mid<a href="#fnref2" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

The band above that floor, with the definition inside the note and a trailing line below it. [^g] stands at column 7, so its floor is 9: the definition at 9 is the note's own, and TAILWORD at 6 is not - it is at or past the OUTER note's floor of 2 and below the inner one's, so it belongs to the outer note.

carve
[^f]: outer

       [^g]: mid

         [r]: /url
      TAILWORD

x[^f] [^g] [t][r]
html
<p>x<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a> <a id="fnref2" href="#fn2" role="doc-noteref"><sup>2</sup></a> <a href="/url">t</a></p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>outer</p>
      <p>TAILWORD<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn2">
      <p>mid<a href="#fnref2" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

The other side of the same floor, the control: move that trailing line to column 9 and it is the nested note's own.

carve
[^f]: outer

       [^g]: mid

         [r]: /url
         TAILWORD

x[^f] [^g] [t][r]
html
<p>x<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a> <a id="fnref2" href="#fn2" role="doc-noteref"><sup>2</sup></a> <a href="/url">t</a></p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>outer<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
    <li id="fn2">
      <p>mid</p>
      <p>TAILWORD<a href="#fnref2" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

A column-0 line after a description-hosted note is a document sibling ​

4 conformance fixtures

A footnote definition written as a description body's content absorbs its opener the way it does anywhere: the note's floor is its marker column plus two (PART 9 §16), and a block opener there is the note's body. : sets the body's content column at 3, so the note stands at column 3 and its floor is 5. The nested list at 5 reaches it and is the note's; the note is unreferenced, so it renders nothing and the <dd> is empty.

tail at column 0 is a different question. Column 0 is the surrounding DOCUMENT's own opener column (PART 0 owner selection), which the note's body at column 5 does not reach - so the body ends and tail is a top-level sibling paragraph rather than the description's lazy continuation (markup-carve/carve#1974, carve-js#1667, carve-php#1929, carve-rs#1577).

carve
:: t
:  [^f]: note
     - nested
tail
html
<dl>
  <dt>t</dt>
  <dd></dd>
</dl>
<p>tail</p>

Continuation TEXT at the floor answers the same - the opener and the plain line are one rule, not two - so the parity is pinned rather than assumed.

carve
:: t
:  [^f]: note
     cont
tail
html
<dl>
  <dt>t</dt>
  <dd></dd>
</dl>
<p>tail</p>

The column decides, and only column 0 goes to the document. Move tail to the body's own content column 3 and it is the description's, exactly as a plain line there always is.

carve
:: t
:  [^f]: note
     - nested
   tail
html
<dl>
  <dt>t</dt>
  <dd>tail</dd>
</dl>

One column shy of the floor the opener never reached the note, so nothing was absorbed: the list is the description's own, tail lazily continues its item, and the <dd> keeps both. This is the reach boundary the rows above turn on.

carve
:: t
:  [^f]: note
    - nested
tail
html
<dl>
  <dt>t</dt>
  <dd>
    <ul>
      <li>nested
tail</li>
    </ul>
  </dd>
</dl>

An empty unterminated container ends at a flush-left line ​

5 conformance fixtures

A flush-left plain line folds into a host only as LAZY CONTINUATION of an open paragraph. An EMPTY unterminated container has no paragraph to continue, so the line is a new block at column 0 and closes what is above it. The list host answered that way already; the description host folded the line INTO the container instead, starting a fresh paragraph three columns to the left of it, on no clause at all (markup-carve/carve#1938).

The list host, which was the twin nothing pinned either.

carve
- d
  ::: d
tail
html
<ul>
  <li>d
    <div class="d">

    </div>
  </li>
</ul>
<p>tail</p>

The description host now agrees. This is the answer that moved.

carve
:: t
:  d
   ::: d
tail
html
<dl>
  <dt>t</dt>
  <dd>
    <p>d</p>
    <div class="d">

    </div>
  </dd>
</dl>
<p>tail</p>

The marker-line spelling of the same body moves with it, since the container it opens is equally empty.

A MARKER-LINE COLON OPENER UNDER A LIST HOST IS A DIFFERENT QUESTION and is not touched here: - ::: d is demoted to literal text by lazy folding, which 161-below-content-column-div-body-in-a-list-item-stays-literal and 364-only-lazy-folding-demotes-a-marker-line-colon-opener pin. Reading "the description host should behave like the list host" as reaching that spelling would retire both rows, and the first draft of this rule did exactly that.

carve
:: t
:  ::: d
tail
html
<dl>
  <dt>t</dt>
  <dd>
    <div class="d">

    </div>
  </dd>
</dl>
<p>tail</p>

IT IS ABOUT COLUMN 0, NOT ABOUT EMPTINESS ALONE. A follower AT the container's own content column is inside it, and starts a paragraph there as it always did.

carve
:: t
:  d
   ::: d
   tail
html
<dl>
  <dt>t</dt>
  <dd>
    <p>d</p>
    <div class="d">
      <p>tail</p>
    </div>
  </dd>
</dl>

AND IT IS ABOUT EMPTINESS, NOT ABOUT COLUMN 0 ALONE. Give the container a body and the flush-left line has an open paragraph to continue again, so it folds in as lazy continuation.

carve
:: t
:  d
   ::: d
   body
tail
html
<dl>
  <dt>t</dt>
  <dd>
    <p>d</p>
    <div class="d">
      <p>body
tail</p>
    </div>
  </dd>
</dl>

An abbreviation definition outside document level is not an invisible line ​

2 conformance fixtures

The second of the two exceptions to the invisible-line classification (§10 I5) is a question of MEMBERSHIP, not of a member behaving differently: an abbreviation definition is recognized at document level only (§16), so anywhere else the line is not invisible at all. It is paragraph text, it is VISIBLE, and it folds like any other plain line - and because it registered nothing, a use of the abbreviation elsewhere in the document stays literal. Both halves have to be pinned together: rendering the line AND defining from it is the half-fold the classification does not offer.

At a definition description's content column, where a link or footnote definition would be collected and would leave no trace:

carve
:: t
:  d
   *[A]: a
   tail

A
html
<dl>
  <dt>t</dt>
  <dd>d
*[A]: a
tail</dd>
</dl>
<p>A</p>

In a footnote body at its own minimum column, which is the other body with a collector of its own:

carve
[^a]: intro
  *[A]: a
  more

see[^a] A
html
<p>see<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a> A</p>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>intro
*[A]: a
more<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

Document level is the contrast that makes this an exception rather than a rule about abbreviations - the identical line one host out both disappears from the page and registers - and it needs no document of its own here: 177-two-abbreviation-definitions and 305-an-abbreviation-expands-inside-an-inline-container already pin it, and a third copy could not fail.

A block opener indented under a definition term is term text at every depth ​

10 conformance fixtures

A term has no content column (CARVE-P2-028), so strict column 0 reads a line under an open term against the container that holds the list. Past that column the line folds into the term, whatever it would open.

carve
:: c
  # H
html
<dl>
  <dt>c
  # H</dt>
</dl>
carve
:: c
  ::: note
  body
  :::
html
<dl>
  <dt>c
  ::: note
  body
  :::</dt>
</dl>

Inside a quote the column is the one after the quote marker.

carve
> :: c
>   # H
html
<blockquote>
  <dl>
    <dt>c
  # H</dt>
  </dl>
</blockquote>

Inside a list item it is the item's content column, 2 here, so column 4 is past it.

carve
- item

  :: c
    # H
html
<ul>
  <li>item
    <dl>
      <dt>c
  # H</dt>
    </dl>
  </li>
</ul>

Inside a description it is the description's column.

carve
:: a
: b
  :: c
    # H
html
<dl>
  <dt>a</dt>
  <dd>
    <p>b</p>
    <dl>
      <dt>c
  # H</dt>
    </dl>
  </dd>
</dl>
carve
:: a
: b
  :: c
    ::: note
    body
    :::
html
<dl>
  <dt>a</dt>
  <dd>
    <p>b</p>
    <dl>
      <dt>c
  ::: note
  body
  :::</dt>
    </dl>
  </dd>
</dl>

At the container's content column the opener ends the term and opens.

carve
:: c
# H
html
<dl>
  <dt>c</dt>
</dl>
<section id="H">
  <h1>H</h1>
</section>
carve
:: a
: b
  :: c
  # H
html
<dl>
  <dt>a</dt>
  <dd>
    <p>b</p>
    <dl>
      <dt>c</dt>
    </dl>
    <h1 id="H">H</h1>
  </dd>
</dl>

A list marker is not term text: §24 C4 lets it open at any column.

carve
:: a
: b
  :: c
    - x
html
<dl>
  <dt>a</dt>
  <dd>
    <p>b</p>
    <dl>
      <dt>c</dt>
    </dl>
    <ul>
      <li>x</li>
    </ul>
  </dd>
</dl>

A colon fence at the container's column opens like any other opener.

carve
:: c
::: note
body
:::
html
<dl>
  <dt>c</dt>
</dl>
<aside class="admonition note" aria-label="Note">
  <p>body</p>
</aside>

A comment or a definition under a definition term folds at every depth ​

25 conformance fixtures

A term has no content column (CARVE-P2-028), and that holds for the invisible lines too. Past the column of the container that holds the list, a comment stays a comment and the term goes on after it; a %%% fence keeps its body.

carve
:: c
  %% note
  more
html
<dl>
  <dt>c

  more</dt>
</dl>
carve
> :: c
>   %% note
>   more
html
<blockquote>
  <dl>
    <dt>c

  more</dt>
  </dl>
</blockquote>
carve
- item

  :: c
    %% note
    more
html
<ul>
  <li>item
    <dl>
      <dt>c

  more</dt>
    </dl>
  </li>
</ul>
carve
:: a
: b
  :: c
    %% note
    more
html
<dl>
  <dt>a</dt>
  <dd>
    <p>b</p>
    <dl>
      <dt>c

  more</dt>
    </dl>
  </dd>
</dl>

A comment fence keeps its body and closer, and the term goes on after it.

carve
:: c
  %%%
  hidden
  %%%
  more
html
<dl>
  <dt>c

  more</dt>
</dl>
carve
> :: c
>   %%%
>   hidden
>   %%%
>   more
html
<blockquote>
  <dl>
    <dt>c

  more</dt>
  </dl>
</blockquote>
carve
- item

  :: c
    %%%
    hidden
    %%%
    more
html
<ul>
  <li>item
    <dl>
      <dt>c

  more</dt>
    </dl>
  </li>
</ul>
carve
:: a
: b
  :: c
    %%%
    hidden
    %%%
    more
html
<dl>
  <dt>a</dt>
  <dd>
    <p>b</p>
    <dl>
      <dt>c

  more</dt>
    </dl>
  </dd>
</dl>

A link definition past the column is term text, so the reference above it stays unresolved.

carve
[t][r]

:: c
  [r]: /u
html
<p>[t][r]</p>
<dl>
  <dt>c
  [r]: /u</dt>
</dl>
carve
[t][r]

> :: c
>   [r]: /u
html
<p>[t][r]</p>
<blockquote>
  <dl>
    <dt>c
  [r]: /u</dt>
  </dl>
</blockquote>
carve
[t][r]

- item

  :: c
    [r]: /u
html
<p>[t][r]</p>
<ul>
  <li>item
    <dl>
      <dt>c
  [r]: /u</dt>
    </dl>
  </li>
</ul>
carve
[t][r]

:: a
: b
  :: c
    [r]: /u
html
<p>[t][r]</p>
<dl>
  <dt>a</dt>
  <dd>
    <p>b</p>
    <dl>
      <dt>c
  [r]: /u</dt>
    </dl>
  </dd>
</dl>

A footnote definition past the column is term text as well.

carve
x[^n]

:: c
  [^n]: y
html
<p>x[^n]</p>
<dl>
  <dt>c
  [^n]: y</dt>
</dl>
carve
x[^n]

> :: c
>   [^n]: y
html
<p>x[^n]</p>
<blockquote>
  <dl>
    <dt>c
  [^n]: y</dt>
  </dl>
</blockquote>
carve
x[^n]

- item

  :: c
    [^n]: y
html
<p>x[^n]</p>
<ul>
  <li>item
    <dl>
      <dt>c
  [^n]: y</dt>
    </dl>
  </li>
</ul>
carve
x[^n]

:: a
: b
  :: c
    [^n]: y
html
<p>x[^n]</p>
<dl>
  <dt>a</dt>
  <dd>
    <p>b</p>
    <dl>
      <dt>c
  [^n]: y</dt>
    </dl>
  </dd>
</dl>

At the container's column a comment ends the term.

carve
:: c
%% note
more
html
<dl>
  <dt>c</dt>
</dl>
<p>more</p>
carve
:: a
: b
  :: c
  %% note
  more
html
<dl>
  <dt>a</dt>
  <dd>
    <p>b</p>
    <dl>
      <dt>c</dt>
    </dl>
    <p>more</p>
  </dd>
</dl>

At the container's column a definition ends the term and registers.

carve
[t][r]

:: a
: b
  :: c
  [r]: /u
html
<p><a href="/u">t</a></p>
<dl>
  <dt>a</dt>
  <dd>
    <p>b</p>
    <dl>
      <dt>c</dt>
    </dl>
  </dd>
</dl>
carve
x[^n]

- item

  :: c
  [^n]: y
html
<p>x<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a></p>
<ul>
  <li>item
    <dl>
      <dt>c</dt>
    </dl>
  </li>
</ul>
<section role="doc-endnotes" aria-label="Footnotes">
  <hr>
  <ol>
    <li id="fn1">
      <p>y<a href="#fnref1" role="doc-backlink" aria-label="Back to reference">↩</a></p>
    </li>
  </ol>
</section>

A comment fence's body is opaque, so a :: inside it opens no term, and the definition after the fence registers past the description's column.

carve
[t][r]

:: a
: b
  %%%
  :: fake
    %%%
    [r]: /u
html
<p><a href="/u">t</a></p>
<dl>
  <dt>a</dt>
  <dd>b</dd>
</dl>

A blank line inside a folded comment fence does not end the term.

carve
[t][r]

:: a
: b
  :: c
    %%%

    hidden
    %%%
    [r]: /u
html
<p>[t][r]</p>
<dl>
  <dt>a</dt>
  <dd>
    <p>b</p>
    <dl>
      <dt>c

  [r]: /u</dt>
    </dl>
  </dd>
</dl>

A term on a list marker line is measured against the item's content column.

carve
- :: c
    # H
html
<ul>
  <li>
    <dl>
      <dt>c
  # H</dt>
    </dl>
  </li>
</ul>
carve
x[^n]

- :: c
    %% note
    [^n]: y
html
<p>x[^n]</p>
<ul>
  <li>
    <dl>
      <dt>c

  [^n]: y</dt>
    </dl>
  </li>
</ul>

A > past the column is term text, so the term stays open under it.

carve
[t][r]

:: a
: b
  :: c
    > text
    [r]: /u
html
<p>[t][r]</p>
<dl>
  <dt>a</dt>
  <dd>
    <p>b</p>
    <dl>
      <dt>c
  &gt; text
  [r]: /u</dt>
    </dl>
  </dd>
</dl>

Released under the MIT License.