This is a major release with probably significant backwards-incompatible changes (mostly in the "Changes to output format" section).
Features
- Org mode 9.7 support (#9, thanks to tcahill for the contribution):
- Handle deferred properties and the
:standard-propertiesvector viaorg-element-properties-map - Skip private properties (names containing
--) - Stop exporting
:post-affiliated,:robust-begin, and:robust-end - Export tests now compare full document output against checked-in reference JSON. The single
tests/test.org/test.jsonpair was replaced by a set of topic-focused fixtures in
tests/export/(one.org/.jsonpair per feature area), each with its own ERT test.
- Handle deferred properties and the
- New export options:
:json-postprocess(pretty,minimal, or nil): to control final JSON formatting (default
:pretty).:json-deterministic-refs(tor nil): Make elementrefvalues deterministic
(based on structural path in the parse tree) (default nil).
Changes to output format
- Omit the
contentskey from exported nodes when it is empty. - Custom type-specific node properties/fields have been moved from inside
"properties"to the
outer level, to distinguish them from Org's builtin properties:headlinenodes:tags-alllinknodes:target-ref,is-internal,is-inline-imagetimestampnodes:start,end
- Node
propertiesobjects now export keys in alphabetical order. - Omit default node property values from export. Set the
:json-omit-default-property-valuesto
nilto restore old behavior. - Export single-character properties (
headlinepriority) as strings instead of character codes.
Bug fixes
- Resolve Org 9.7 headline deferred properties (
:archivedp,:footnote-section-p,
etc.) with force-undefer when enumerating node properties. Shared deferred
placeholders withauto-undefer-pnil were previously exported astrue. - Fix improper quoting in
cl-caselink-type branches. - Fix incorrect argument order in
ox-json--type-errorcalls. - Fix
wrong-number-of-argumentscrash during JSON post-processing on Emacs
versions before 28.1, wherejson-pretty-print-buffertakes no arguments.
Other
- Raise minimum supported versions of Emacs from 26.1 to 27.1 and Org from 9 to 9.4.
- Split into multiple source files.
- Adopt Eask for dependency management, byte compilation, and CI.
- Add
DEVELOPER.mddeveloper guide. - Add test coverage reporting via
undercover. - Makefile refactored as a thin facade over Eask.
- Use strict bool parsing by default (properties marked as bools must be
nilort). - Add
scripts/json-to-markdown.pyandscripts/json-to-html.pyto render exported JSON as
human-readable Markdown/HTML for reviewing fixtures (make update-exports-pretty). - Add
scripts/eask-docker.shandEASK_DOCKERMakefile support for testing against specific
Emacs versions in asilex/emacscontainer.