User:GWicke/Parsoid source ranges

Parsoid annotates tokens with two kinds of source ranges in their dataAttribs property:


 * tsr : The token source range just for that particular token (often equivalent to a tag).
 * bsr : The block source range for the top-level block as the tokenizer sees it, set on the first token of the block. A page is modeled as a sequence of top-level blocks.

The token source range is directly useful for the lossless re-serialization of individual unmodified tokens. The DOM tree builder removes attributes of end tags, so normally the end tag source range is lost when building a DOM from tokens. A source range for a given subtree can still be established approximately using (start-)tag source ranges of sibling DOM sub-trees.

A possible strategy to preserve attributes from end tags using empty ('self-closind') elements is described in Parsoid/Todo.

The block source range directly provides the start and end offsets of an entire DOM tree for well-formed content. Unfortunately we can't currently assume well-formed-ness since the tokenizer only tokenizes (does not build a tree from) html tags, and templates can inject arbitrary tokens. So the value of the block source range is a bit doubtful right now, but might become more useful for known-well-formed content later.