Byte-accurate source positions in TreeSink
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 2.6k
- Forks
- 288
- Avg merge
- 2d 22h
- Merged PRs (30d)
- 8
Description
Cadmus is a Reader software for e-readers.
The original HTML parsing implementation was hand written, and is not spec complete and contains some minor bugs.
While working on https://github.com/OGKevin/cadmus/issues/343, I decided to give html5ever a try to replace at least the parsing bit.
It turns out, that html5ever does not provide a way to accurately know a position within a document.
The reason this is needed:
- Save and restore reading positions across sessions
- Persist bookmarks and annotations
- Resolve
#anchor-idURI fragment links
For all of these to work correctly across re-parses, the offset stored on each node
must be the byte position of that node's opening token in the source string. It
needs to be stable and comparable to the raw byte sizes of the EPUB spine entries.
For the rendering of dictionary HTML, html5ever covers the use case, as there is no need for position tracking,
but it can't be used for EPUB rendering.
Would it be interesting to add the ability for when parsing a document, to store byte offsets, as this
would be the most stable way to refer to a position within a document and doesn't matter
which parsing system is being used.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the TreeSink API and the discussion in related issues #48 and #492. Determine how parsing can expose the byte position of each node's opening token, then define what API behavior and tests would demonstrate stable offsets across EPUB re-parses.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- web-dev
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100