[ "a string, a fixnum, or an integer" ]
[ [ { $or string fixnum integer } print-element ] with-string-writer ] unit-test
+! Layout
+
+[ "span" ]
+[ [ { "span" } print-content ] with-string-writer ] unit-test
+
+[ "span1span2" ]
+[ [ { "span1" "span2" } print-content ] with-string-writer ] unit-test
+
+[ "span1\n\nspan2" ]
+[ [ { "span1" { $nl } "span2" } print-content ] with-string-writer ] unit-test
+
+[ "\nspan" ]
+[ [ { { $nl } "span" } print-content ] with-string-writer ] unit-test
+
+[ "2 2 +\nspan" ]
+[ [ { { $code "2 2 +" } "span" } print-content ] with-string-writer ] unit-test
+
+[ "2 2 +" ]
+[ [ { { $code "2 2 +" } } print-content ] with-string-writer ] unit-test
+
+[ "span\n2 2 +" ]
+[ [ { "span" { $code "2 2 +" } } print-content ] with-string-writer ] unit-test
+
+[ "\n2 2 +" ]
+[ [ { { $nl } { $code "2 2 +" } } print-content ] with-string-writer ] unit-test
+
+[ "span\n\n2 2 +" ]
+[ [ { "span" { $nl } { $code "2 2 +" } } print-content ] with-string-writer ] unit-test
+
+[ "Heading" ]
+[ [ { { $heading "Heading" } } print-content ] with-string-writer ] unit-test
+
+[ "Heading1\n\nHeading2" ]
+[ [ { { $heading "Heading1" } { $heading "Heading2" } } print-content ] with-string-writer ] unit-test
+
+[ "span\n\nHeading" ]
+[ [ { "span" { $heading "Heading" } } print-content ] with-string-writer ] unit-test
+
+[ "\nHeading" ]
+[ [ { { $nl } { $heading "Heading" } } print-content ] with-string-writer ] unit-test
+
+[ "span\n\nHeading" ]
+[ [ { "span" { $nl } { $heading "Heading" } } print-content ] with-string-writer ] unit-test
SYMBOL: last-element
SYMBOL: span
SYMBOL: block
+SYMBOL: blank-line
: last-span? ( -- ? ) last-element get span eq? ;
: last-block? ( -- ? ) last-element get block eq? ;
+: last-blank-line? ( -- ? ) last-element get blank-line eq? ;
+
+: ?nl ( -- )
+ last-element get
+ last-blank-line? not
+ and [ nl ] when ;
: ($span) ( quot -- )
last-block? [ nl ] when
[ print-element ] with-default-style ;
: ($block) ( quot -- )
- last-element get [ nl ] when
+ ?nl
span last-element set
call
block last-element set ; inline
] ($span) ;
: $nl ( children -- )
- nl last-block? [ nl ] unless drop ;
+ drop nl last-element get [ nl ] when
+ blank-line last-element set ;
! Some blocks
: ($heading) ( children quot -- )
- last-element get [ nl ] when ($block) ; inline
+ ?nl ($block) ; inline
: $heading ( element -- )
[ heading-style get print-element* ] ($heading) ;
] ($subsection) ;
: $subsections ( children -- )
- [ $subsection* ] each nl ;
+ [ $subsection* ] each nl nl blank-line last-element set ;
: $subsection ( element -- )
first $subsection* ;