marktxt headings are always ;= followed by exactly 4 characters.
the weight descends by eroding = into - into .
;==== H1 TITLE ;. 4 equals (heaviest)
;===- H2 section ;. 3 equals, 1 dash
;==-- H3 subsection ;. 2 equals, 2 dashes
;=--- H4 detail ;. 1 equal, 3 dashes
;=--. H5 minor ;. 1 equal, 2 dashes, 1 dot
;=-.. H6 smallest ;. 1 equal, 1 dash, 2 dots (lightest)
# H1 TITLE
## H2 section
### H3 subsection
#### H4 detail
##### H5 minor
###### H6 smallest
<h1>H1 TITLE</h1>
<h2>H2 section</h2>
<h3>H3 subsection</h3>
<h4>H4 detail</h4>
<h5>H5 minor</h5>
<h6>H6 smallest</h6>
markdown: # is a heading — but also a comment in bash, python, yaml, etc.
marktxt: ;= is always a heading. nothing else uses ;=
every heading operator is exactly 4 characters after ;
the parser reads ;= then exactly 3 chars from = - . — deterministic.
you can see the heading level in the source without counting characters:
;==== heavy (all equals)
;===-
;==--
;=---
;=--.
;=-.. light (mostly dots)
the visual weight of the operator matches the semantic weight of the heading.