As text is parsed it is accumulated into chunks.
chunks +≡variable chunk : chunk+=$ ( A -- ) chunk @ if chunk @ atom+=$ else drop then ; : chunk+=ref ( A -- ) chunk @ if chunk @ atom+=ref else drop then ;
A special primary chunk is kept for the main document.
chunks +≡atom" ~~~DOC" constant main-documentation variable documentation-chunk main-documentation documentation-chunk !
A number of words are provided to write to the current documentation chunk or to set it.
chunks +≡: documentation ( -- A ) documentation-chunk @ ; : doc! ( back to documentation) 0 chunk ! ; : doc+=$ ( A -- ) documentation atom+=$ ; : .d{ ( -- ) postpone atom{ postpone doc+=$ ; immediate : .d| ( -- ) parse..| ; immediate : |.d ( -- ) postpone literal postpone doc+=$ ; immediate : .dcr atom-cr doc+=$ ; : doc+=ref ( A -- ) documentation atom+=ref ; : doc+=use ( A -- ) .d{ <b>} doc+=$ .d{ </b>} ; : doc+=def ( A -- ) .d{ </p><tt><b>} doc+=$ .d{ </b> +≡</tt><div class="chunk"><pre>} ;
This is critically use by nearly every tag to parse until the next tag using the word feed .
chunks +≡: feed ( read into current chunk ) parse..| dup ?atom-cr+ escape doc+=$ atom-cr+ chunk+=$ ;