Commit Graph

914 Commits

Author SHA1 Message Date
Tom Alexander d443dbd468
Introduce the tab_width setting and give tabs a greater value when counting indentation level. 2023-09-15 21:59:48 -04:00
Tom Alexander c9ce32c881
Remve redundant org_spaces functions.
Turns out the nom space0/space1 parsers accept tab characters already.
2023-09-15 21:28:40 -04:00
Tom Alexander 85454a0a27
Fix footnote reference function label matcher.
Previously when a label started with a number but contained other characters, this parser would fail because it would not match the entire label.
2023-09-15 21:14:44 -04:00
Tom Alexander fdebf6dec5
Delete already solved TODO. 2023-09-15 21:08:52 -04:00
Tom Alexander 444d6758aa
Handle leading blank lines in greater blocks.
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
rust-foreign-document-test Build rust-foreign-document-test has failed Details
2023-09-15 21:03:35 -04:00
Tom Alexander bfe67b1f75
Parse plain list item checkboxes. 2023-09-15 16:09:57 -04:00
Tom Alexander fd41ad9c29
Pretend dos line endings do not exist. 2023-09-15 14:13:17 -04:00
Tom Alexander 7f751d4f28
Allow no digit in repeater in timestamp. 2023-09-15 13:12:54 -04:00
Tom Alexander 52a4dab67c
Use the timestamp parser in planning.
Previously we did not support inactive timestamps in planning. This fixes that.
2023-09-15 12:45:19 -04:00
Tom Alexander 3d86e75059
Always match the entire entity name.
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
rust-foreign-document-test Build rust-foreign-document-test has failed Details
2023-09-14 04:29:50 -04:00
Tom Alexander ca6fdf1924
Support different cases in radio links. 2023-09-14 04:04:21 -04:00
Tom Alexander 66d16d89ed
Support interchangeable whitespace in re-matching plain text. 2023-09-14 04:00:34 -04:00
Tom Alexander 22681b6a58
Support trailing whitespace in fixed-width areas. 2023-09-14 03:20:44 -04:00
Tom Alexander 876d33239e
Allow any character to be escaped in the path for links. 2023-09-14 03:05:11 -04:00
Tom Alexander 87941271a4
Handle headlines with trailing spaces without tags. 2023-09-14 02:43:40 -04:00
Tom Alexander 32b19d68d0
Support todo keywords with fast access. 2023-09-14 02:24:06 -04:00
Tom Alexander 44e9f708c9
Handle the possibility of a title-less headline. 2023-09-14 02:01:24 -04:00
Tom Alexander 33372429dd
Add a config option for org-list-allow-alphabetical.
This fixes an issue where lines in a paragraph were incorrectly getting identified as lists because I had defaulted to assuming alphabetical bullets were allowed.
2023-09-14 00:27:54 -04:00
Tom Alexander b8a4876779
Disable auto-aligning tables when Emacs loads Org-mode.
Emacs will auto-align tables when org-mode is loaded if the document contains "#+STARTUP: align". Since Organic is just a parser, it has no business editing the input it receives so we are disabling this auto-align in Emacs to make the tests work properly.
2023-09-13 21:02:38 -04:00
Tom Alexander e4c0e32536
Change public interface to return boxed dynamic error instead of String.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
rust-foreign-document-test Build rust-foreign-document-test has succeeded Details
2023-09-12 15:52:01 -04:00
Tom Alexander 37e85158ea
Reduce the exposed functions when compare feature is enabled. 2023-09-12 15:48:37 -04:00
Tom Alexander a651b79e77
Move sexp into compare. 2023-09-11 15:37:20 -04:00
Tom Alexander 98de5e4ec5
Remove unused sexp parser entry point. 2023-09-11 15:07:52 -04:00
Tom Alexander cf383fa394
Only include sexp module if compare feature is enabled.
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
rust-foreign-document-test Build rust-foreign-document-test has succeeded Details
2023-09-11 14:59:24 -04:00
Tom Alexander 84953c1669
Put back in needed pubs. 2023-09-11 14:59:23 -04:00
Tom Alexander 7650a9edff
Remove all pub. 2023-09-11 13:11:08 -04:00
Tom Alexander a74319d381
Add TODO. 2023-09-11 13:09:46 -04:00
Tom Alexander f103d168d5
Update diary sexp parser to match org-mode's behavior. 2023-09-11 12:34:57 -04:00
Tom Alexander f54081437a
Add detect element functions for all elements that can be reasonably detected more efficiently than just parsing normally. 2023-09-11 12:28:15 -04:00
Tom Alexander 1561e1e580
Update plain list item tag parser to allow double colon as long as its not the last one on that line. 2023-09-11 10:29:15 -04:00
Tom Alexander 1f11bfa2ec
Join the plain list item tag end matchers again. 2023-09-11 10:13:22 -04:00
Tom Alexander de7ad182b3
Make parse and compare their own binaries.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
rust-foreign-document-test Build rust-foreign-document-test has succeeded Details
This ensures that both code paths are capable of being parsed by rust-analyzer simultaneously and I think it will be less confusing to newcomers.
2023-09-09 04:21:34 -04:00
Tom Alexander b75d9f5c91
Remove an outdated comment. 2023-09-09 00:00:12 -04:00
Tom Alexander 5587e19f16
Cleanup. 2023-09-08 23:19:08 -04:00
Tom Alexander 80f7098f9b
Compare table formulas. 2023-09-08 23:05:04 -04:00
Tom Alexander 84d2babda9
Parse table formulas. 2023-09-08 22:47:07 -04:00
Tom Alexander cc56b79683
Add a test showing we're not handling table formulas. 2023-09-08 22:42:24 -04:00
Tom Alexander 0105b49d0d
Handle empty statistics cookies. 2023-09-08 22:21:49 -04:00
Tom Alexander 7545fb7e1a
Support keywords with colons in the key and without a space between the colon and value. 2023-09-08 22:17:10 -04:00
Tom Alexander 21c60d1036
Do not consume trailing whitespace on the footnote definition's final element. 2023-09-08 21:30:03 -04:00
Tom Alexander 6a1bdd5fee
Support blank lines before content in footnote definitions. 2023-09-08 21:11:47 -04:00
Tom Alexander a8fbf01124
Handle tabs for plain list descriptions.
This bug probably exists in hundreds of places across the code base. I am going to have to write a "fuzzer" that replaces random whitespace with tabs to find them all.
2023-09-08 20:02:49 -04:00
Tom Alexander ceb722e476
Check exit matcher after each space consumed for object trailing whitespace.
Since description list tags need to end with a space unconsumed for " ::", we need to check the exit matcher after each space consumed.
2023-09-08 19:38:49 -04:00
Tom Alexander 494fe5cceb
Handle contentless list items mid-document. 2023-09-08 19:01:46 -04:00
Tom Alexander 0d7a15bfeb
Handle spaces after statistics cookies. 2023-09-08 18:35:33 -04:00
Tom Alexander 669da4073e
Accept the end condition as a parameter to the plain text parser so it can adapt to the context. 2023-09-08 17:54:49 -04:00
Tom Alexander 8780976c15
Consume trailing whitespace after planning. 2023-09-08 16:30:40 -04:00
Tom Alexander 93d3d9471f
Compare priority, archived, and commented in headlines. 2023-09-08 16:00:16 -04:00
Tom Alexander c7c0deed74
Parse priority cookie and COMMENT from headlines. 2023-09-08 16:00:16 -04:00
Tom Alexander 2e6e6fdd2b
Move sections to their own source file. 2023-09-08 15:08:16 -04:00
Tom Alexander 3cc2294387
Move headlines into their own file. 2023-09-08 15:05:42 -04:00
Tom Alexander 40f22034da
Make the item tag exit matcher a lower class than all all others.
This is to allow for " :: " inside a description list item's tag if it is nested inside another object.
2023-09-08 14:37:30 -04:00
Tom Alexander c2eb1f51c8
Support blank lines between nested headlines. 2023-09-08 12:41:48 -04:00
Tom Alexander b0930df788
Support zero skipped text in OrgSource slicing. 2023-09-07 04:16:00 -04:00
Tom Alexander 69512f559a
Fix end conditions for subscript and superscript. 2023-09-07 04:16:00 -04:00
Tom Alexander 76a81b73ac
Add a detect object function similar to the detect element function. 2023-09-07 04:16:00 -04:00
Tom Alexander ba291c6776
Unify two places checking if text was preceded by whitespace. 2023-09-07 04:16:00 -04:00
Tom Alexander 6b82b46e09
Prevent nesting of text markup of the same type.
This greatly reduces the amount of detect element calls that are occurring.
2023-09-07 04:15:59 -04:00
Tom Alexander 6676012eb1
Change footnote reference class to Gamma. 2023-09-07 04:15:59 -04:00
Tom Alexander facbe716e9
Cleanup 2023-09-07 01:23:26 -04:00
Tom Alexander f8b99ed235
Support counter set in plain list items. 2023-09-06 19:09:20 -04:00
Tom Alexander 6fc607cfe0
Compare node properties. 2023-09-06 18:54:47 -04:00
Tom Alexander 49afcf0db6
Support property nodes with colons in their key. 2023-09-06 18:54:01 -04:00
Tom Alexander c4d7e646fc
Support spaces after the end of a lesser block. 2023-09-06 18:54:01 -04:00
Tom Alexander 3fc3a5d1ef
Add support for empty lesser blocks. 2023-09-06 18:11:57 -04:00
Tom Alexander 6e2fc362ea
Add support for babel-call keywords. 2023-09-06 18:04:53 -04:00
Tom Alexander 90fa48661c
Prefer the longer version of affiliated keywords. 2023-09-06 17:41:00 -04:00
Tom Alexander 28b2d27054
Consume trailing whitespace after a plain link.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-09-06 14:39:31 -04:00
Tom Alexander 84edd10864
Change lesser block exit class to Alpha.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
When an example block is nested inside a list, this change allows for the contents of the example block to be on lines less indented than before.
2023-09-06 14:14:02 -04:00
Tom Alexander 728a79f9a4
Handle zero-width space in text markup.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-09-06 13:56:27 -04:00
Tom Alexander 12cbb89861
Compare todo-type on headlines.
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-09-06 12:39:03 -04:00
Tom Alexander 7c471ab32e
Compare keyword keys and values. 2023-09-06 12:10:57 -04:00
Tom Alexander 400f53e440
Cleanup. 2023-09-06 11:53:21 -04:00
Tom Alexander 028aeb70aa
Use the global settings todo keywords when parsing headlines. 2023-09-06 11:45:35 -04:00
Tom Alexander 70fafd801e
Apply the TODO keyword settings. 2023-09-06 11:07:57 -04:00
Tom Alexander bdba495f69
Add a parser for the todo keyword's value.
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-09-06 09:24:59 -04:00
Tom Alexander b0392ad6fb
Trim the trailing space off keywords with values.
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-09-04 22:35:46 -04:00
Tom Alexander 1c142b68c6
Make the parse entry point call the parse_with_settings entry point. 2023-09-04 22:11:56 -04:00
Tom Alexander 9060f9b26d
Only do a single pre-pass on the full document pulling out both setupfile and all other in-buffer settings.
rust-test Build rust-test has failed Details
rust-build Build rust-build has failed Details
Previously we made a separate pass just to find setupfile and then we pulled the in-buffer settings from everything.
2023-09-04 22:05:59 -04:00
Tom Alexander d3c733c5ad
Take into account the source directory when parsing org-mode in Organic.
Previously only the emacs code was doing this.
2023-09-04 21:46:40 -04:00
Tom Alexander 275b4b53d1
Use a single function for finding all keywords. 2023-09-04 19:19:23 -04:00
Tom Alexander d38e198258
Add a parse_with_settings function. 2023-09-04 17:44:27 -04:00
Tom Alexander 27cf6c0462
Remove unnecessary map_err from main.rs.
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-09-04 17:29:50 -04:00
Tom Alexander c7d5c89a60
Passing the setupfile contents to the document parser. 2023-09-04 17:16:08 -04:00
Tom Alexander ee02e07717
Read the setup file into memory. 2023-09-04 16:53:02 -04:00
Tom Alexander a7330e38e4
Enable dynamic access to the file access interface. 2023-09-04 16:29:41 -04:00
Tom Alexander 08eb59acd3
Rename parser_context to context. 2023-09-04 13:26:11 -04:00
Tom Alexander da1ce2717d
Introduce a file access interface for reading additional files. 2023-09-04 13:00:41 -04:00
Tom Alexander a8f277efe5
Scan for setupfile at the beginning of a parse. 2023-09-04 12:48:59 -04:00
Tom Alexander 7f6f22717b
Add comment. 2023-09-04 12:31:43 -04:00
Tom Alexander 0ef141d65e
Switch to putting radio targets in the global settings instead of the context tree.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-09-04 12:28:33 -04:00
Tom Alexander 71180d19fb
Fix reading contents from stdin in parse script.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-09-04 11:45:10 -04:00
Tom Alexander 33091112a5
Remove OrgSource from the public document parser interface.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-09-04 11:38:12 -04:00
Tom Alexander 2915a81edc
Cleanup. 2023-09-03 16:22:41 -04:00
Tom Alexander df79cbd0b7
Give global options their own lifetime. 2023-09-03 16:22:40 -04:00
Tom Alexander a7b9eb9db4
Lifetime issue. 2023-09-03 12:58:46 -04:00
Tom Alexander d262833f9b
Fixing more errors. 2023-09-03 12:52:09 -04:00
Tom Alexander 0d438a8e0f
Fixing more errors. 2023-09-03 12:45:12 -04:00
Tom Alexander 0b009511ff
Fixing more errors. 2023-09-03 12:28:45 -04:00
Tom Alexander 3bdb24ad88
Fixing more errors. 2023-09-03 12:23:18 -04:00
Tom Alexander fdf35ba23c
Fixing more errors. 2023-09-03 12:07:51 -04:00
Tom Alexander cd69e08516
Fixing more errors. 2023-09-03 11:05:34 -04:00
Tom Alexander b54c6d366c
Fixing more errors. 2023-09-03 00:27:50 -04:00
Tom Alexander 15e8d1ab77
Implement check_exit_matcher. 2023-09-03 00:05:47 -04:00
Tom Alexander 8502a8830d
Fixing some errors. 2023-09-02 23:16:02 -04:00
Tom Alexander 74a6101de7
Update RefContext to three lifetimes. 2023-09-02 22:45:46 -04:00
Tom Alexander ba57eb16fd
Fix using references for context elements. 2023-09-02 22:44:21 -04:00
Tom Alexander c309d14776
Fix a reference to RefContext. 2023-09-02 20:52:02 -04:00
Tom Alexander 0d728510d7
Implement iterator for context. 2023-09-02 20:46:17 -04:00
Tom Alexander 22e9bc991f
Fixing up compiler errors. 2023-09-02 19:28:33 -04:00
Tom Alexander 564104f1e8
Switch to RefContext. 2023-09-02 19:16:44 -04:00
Tom Alexander 12ad3b09f0
Fixing imports. 2023-09-02 19:15:47 -04:00
Tom Alexander eabffe5ecc
Move over the rest of the types. 2023-09-02 19:08:01 -04:00
Tom Alexander b47029fdbb
Starting to separate the context and parsed tokens into their own modules. 2023-09-02 18:46:45 -04:00
Tom Alexander 25b8c80d4e
Add default constructors. 2023-09-02 18:40:01 -04:00
Tom Alexander 54825538e4
fixup 2023-09-02 18:21:43 -04:00
Tom Alexander 66d10a7a1b
Started switching over to a stack-based context tree with global settings.
This change should hopefully allow for matchers to have captured borrowed values, it should eliminate the use of heap-allocated reference counting on the context nodes, and it adds in a global settings struct for passing around values that do not change during parsing.
2023-09-02 18:20:10 -04:00
Tom Alexander f16a554154
Handle org-mode documents passed as args.
We were running into issues where the documents grew too large for being passed as a string to emacs, and we need to handle #+setupfile so we need to start handling org-mode documents as files and not just as anonymous streams of text.

The anonymous stream of text handling will remain because the automated tests use it.
2023-09-02 17:28:22 -04:00
Tom Alexander 80d77ff5d6
Fix handling of unicode in compare tests.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-08-31 20:20:00 -04:00
Tom Alexander 510985e97c
Fix greater blocks by preventing nesting even if they are not the immediate parent. 2023-08-31 19:17:46 -04:00
Tom Alexander 7a903acedc
Support special blocks in compare. 2023-08-31 19:04:44 -04:00
Tom Alexander 5171326d63
Create a test for special blocks. 2023-08-31 19:02:18 -04:00
Tom Alexander 67f79aeb51
Remove context from detect plain list.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-08-31 18:53:28 -04:00
Tom Alexander b2383d9f93
Fix footnote definition performance.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
We were re-parsing each footnote definition in the footnote definition exit matcher which causes their contents to get re-parsed. This compounds with long lists of footnote definitions.
2023-08-31 18:47:23 -04:00
Tom Alexander 0fcb3f73f9
Move handling of contentless item to handle contentless description item. 2023-08-31 17:25:42 -04:00
Tom Alexander bfc9e7f58d
When re-parsing last item in list, only disable white space consumption for last element in item. 2023-08-31 17:08:21 -04:00
Tom Alexander b5f0521b56
Only consume trailing whitespace when not exiting for all objects. 2023-08-31 15:45:31 -04:00
Tom Alexander 2048d8f0b6
Support comments at the end of the line in diary sexp.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-08-31 15:31:54 -04:00
Tom Alexander 466716881e
Fix macros consuming whitespace even when the exit matcher is calling for an exit.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-08-31 15:11:29 -04:00
Tom Alexander eb9c582fa5
'>' is allowed as a post character in text markup.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-08-29 23:57:15 -04:00
Tom Alexander 214e895d85
Support backslash at the end of a macro. 2023-08-29 23:42:16 -04:00
Tom Alexander 28aca041f7
Publish version 0.1.3.
rustfmt Build rustfmt has failed Details
rust-test Build rust-test has failed Details
rust-build Build rust-build has succeeded Details
2023-08-29 23:05:36 -04:00
Tom Alexander d471f7178b
Wrap the components of headlines in diff layers. 2023-08-29 22:57:08 -04:00
Tom Alexander 2c5c26c55f
Allow diff layers that are not associated with tokens. 2023-08-29 22:47:40 -04:00
Tom Alexander 7944659802
Compare headline level. 2023-08-29 22:11:56 -04:00
Tom Alexander 58aca53144
Move get_property into util. 2023-08-29 22:07:23 -04:00
Tom Alexander 6f2d90162b
Do not use the plain text parser for property drawers.
This additional exit condition was causing property drawers to parse incorrectly.
2023-08-29 22:03:20 -04:00
Tom Alexander f170a557ed
Use character offsets in diff. 2023-08-29 21:49:16 -04:00
Tom Alexander eaa38ce772
Include an error message for failed bounds checking.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-08-29 21:27:54 -04:00
Tom Alexander a6d742a536
Fix handling line breaks after divider in description lists. 2023-08-29 21:27:54 -04:00
Tom Alexander f6c895319f
Add support for diffing description lists. 2023-08-29 19:35:54 -04:00
Tom Alexander 2682779534
Add support for parsing description lists. 2023-08-29 18:13:55 -04:00
Tom Alexander b48d472546
Fix build.
rustfmt Build rustfmt has succeeded Details
rust-test Build rust-test has succeeded Details
rust-build Build rust-build has succeeded Details
2023-08-29 18:07:35 -04:00
Tom Alexander 80b55fdd45
Consume trailing whitespace for macro. 2023-08-29 17:42:58 -04:00
Tom Alexander f426e32798
Do not include trailing punctuation or whitespace in plain links. 2023-08-29 17:35:04 -04:00
Tom Alexander 1bcd1895c0
Allow affiliating keywords with regular keywords. 2023-08-29 17:19:13 -04:00
Tom Alexander 2ba0dc49be
Support export affiliated keywords. 2023-08-29 17:01:35 -04:00
Tom Alexander 9df40fb13f
Only allow specific keywords for affiliated keywords. 2023-08-29 16:56:07 -04:00
Tom Alexander cc671925db
Support empty sections under headings. 2023-08-29 16:07:43 -04:00
Tom Alexander 950baa9d5d
Only allow a single section under a heading. 2023-08-29 16:03:13 -04:00