Originally I was using just `(usize, usize)` for marks, and `Vec`s
of those for sets. But that was already becoming unwieldy even for
really basic code. This abstracts just a handful of common
operations away to make this easier to reason about. However,
the internals are (intentionally) left exposed to allow other fiddly
things to be done.
This is very WIP. The intent is for these to be used for e.g.
cursors, screen positions, etc. The intent is for the buffer
itself to keep them synced properly with the actual text on edits,
although this is not yet implemented.
They are largely auto-generated from text-based tables from the
WHATWG encoding standard. Most of them are still not available
in the code itself, but they are generating correctly, and exposing
them is just a matter of boiler plate.
This is mainly just for kicks and giggles, since it really won't
work quite properly anyway, due to the lack of grapheme indexing.
The next real thing is to... well, start from scratch.