- No regexp for parsing
- Fast
- Minimum dependencies as possible
- Real tree structure
- Idempotency, which means reverse operations lead to the original state
Firstly, when I started building the org roam web implementation I faced one big problem, there are no parsers that could satisfy all requirements that I need
Also, I figured out the implementation a bit and found that these very complex solutions, most of the time based on regexp, are not good for parsing and readability, and also have poor performance.
This project completely ignores implementation from the emacs data tree, cause I have been developing this code for my purposes. I wanted to control every node and property which I have in my tree. Moreover, I wanted to have idempotency with converting from AST to text and vice versa. Right now, many parsers losing some characters, like newlines or extra spaces.
Of these requirements I want the following from this parser:
- Full testing of all possible nodes.
- Development according to the TDD principles.
- Easy to read.
- There are small handlers for each node type
- The structure of the tree is very similar to the visible result (including nested folding)
- Each element of the tree has its own range with beginning and end positions.
- All operations with the tree, such as formatting, auto-insert, etc. must be implemented as a separate logic with its own class.
- [X] Bold/italic/crossed out text
- [X] Lists
- [X] List Progress
- [X] Headline tags
- [X] List item tags
- [X] Headlines
- [X] Inline code
- [X] Inline quotes
- [X] Links
- [X] Src blocs
- [X] Latex blocks
- [X] Latex environment
- [X] Keywords
- [X] Html/quotes blocks
- [X] Verbatim
- [X] Fixed width value
- [X] Inline HTML
- [X] Comments
- [X] Properties
- [X] Horizontal rule
- [X] Date and time
- [X] Tags
- [X] Tables
- [X] Float dates
Am I missing something? Please, let me know.
- [ ] Metadata collecting
- [ ] Paragraph
- [ ] Planning
- [ ] attributes
- [ ] Dynamic blocks
- [ ] Filetags
- [ ] Footnote
- [ ] Subscripts
- [ ] Latex fragment (partial)
- [ ] Radioa targets
- [ ] Results block
- [ ] Cross-links
- [ ] Noweb support
- [X] Entities
- [ ] Inline source blocks
- [ ] Auto-align tables
- [ ] Calculate the progress of the list
- [ ] Insert headline by level
Any help is greatly appreciated.