Significant whitespace runs are wrapped in marker spans

All 13 scenarios hold

HTML output: sp spans carry space runs and tab spans carry each tab; the stylesheet draws the dots and arrows. Markup characters in the value are escaped before marking, so cell content can never inject HTML.

expected outcome broken scenario
ScenarioValueMarked?
Plain wordAliceAlice
Single internal spaceAlice SmithAlice Smith
Leading space x<span class="sp"> </span>x
Trailing spacex x<span class="sp"> </span>
Run of two spacesa ba<span class="sp"> </span>b
Whitespace-only value <span class="sp"> </span>
Tab between wordsa ba<span class="tab"> </span>b
Run of two tabs <span class="tab"> </span><span class="tab"> </span>
Tab then space <span class="tab"> </span><span class="sp"> </span>
Spaces around interior taba ba<span class="sp"> </span><span class="tab"> </span><span class="sp"> </span>b
Trailing space before newlineab \ncdab<span class="sp"> </span>\ncd
Leading space on second lineab\n cdab\n<span class="sp"> </span>cd
Markup characters escapeda<b> & 'c'a&lt;b&gt; &amp; &#39;c&#39;