Tree @master (Download .tar.gz)
Feedmark
Version 0.17. Subject to change in backwards-incompatible ways without notice.
Feedmark is a format for embedding structured data in Markdown files in a way which is both human-readable and machine-extractable. The structured data is intended to be "curational" in nature. Articles in Chrysoberyl, Some Games of Note, and other collections of Cat's Eye Technologies' are written in Feedmark.
Informally, the format says that every h3-level heading in the
Markdown file gives the title of an entity, and may be followed
immediately by the entity's "plaque", which is a bullet list
where every item is in the form "field-name: field-value".
Why Feedmark?
In the same way that a Markdown file is still a readable text file, which is nice, a Feedmark file is still a readable Markdown file, which is still a readable text file, which is nice.
While some structured data formats like YAML are fairly easy to read, many web-based file viewers (such as GitHub, GitLab, Forgejo, klaus, etc.) will automatically format Markdown as HTML, making it that much nicer.
Example Feedmark documents can be found in the eg/ directory,
and in the projects mentioned above.
Implementation
This repository contains a Python 3 program, feedmark, which is a
reference implementation of a processor for the Feedmark format.
To use it, you can clone this repository and run it as bin/feedmark
from the directory of your clone, or you can put the bin directory
on your executable search path, and run it as feedmark anywhere.
Or you can install it using pip:
pip install Feedmark==0.17
(Depending on your needs, you may wish to establish a virtual environment first. How to do this is outside the scope of this document.)
feedmark is currently able to do the following things:
Parse and check Feedmark documents
Loading documents will always check that they are minimally well-formed.
feedmark eg/*.md
You can also check documents against a Feedmark schema, which is simply another Feedmark document, one in which each entry describes a property that entries should have.
feedmark eg/*Sightings*.md --check-against=eg/schema/Llama\ sighting.md
Convert Feedmark documents to various formats
The original use case of this tool was to generate an Atom (née RSS) feed of entries in a document:
feedmark "eg/Recent Llama Sightings.md" --output-atom=feed.xml
python3 -m http.server 7000 &
python3 -m webbrowser http://localhost:7000/feed.xml
It can now also output entries as JSON, indexed by entry, or by property, or by publication date:
feedmark --output-json eg/*.md
feedmark --by-property eg/*.md
feedmark --by-publication-date eg/*.md
...or as Markdown or HTML (using the toc extension, which generates
link anchors on headings compatible with the ones generated by GitHub
and which are now in widespread use).
feedmark --output-markdown eg/*.md
feedmark --output-html eg/*.md
Rewrite documents in-place
Feedmark documents can be rewritten in-place; they will be parsed as Feedmark,
and then written out as Markdown, to the same filename that were read in as
input. Note! This is a destructive operation, and it isrecommended that
the files being processed this way are kept under version control such
as git, as this will easily allow the changes to be reverted if necessary.
feedmark --rewrite-markdown eg/*.md
Interlink documents
Markdown supports "reference-style" links, which are not inline with the text.
feedmark can rewrite reference-style links that match the name of
an entry in a previously-created "refdex", so that they
can be kept current and point to the canonical document in which the
entry exists, since it may exist in multiple, or be moved over time.
feedmark eg/*.md --output-refdex >refdex.json
feedmark --input-refdex=refdex.json --rewrite-markdown eg/*.md
See also
Feedmark is a subset of Markdown, which is something it has in common with Falderal, however it has decidedly different goals.
See TODO.md for planned features and HISTORY.md for a record of features added in past versions.
Commit History
@master
git clone https://git.catseye.tc/Feedmark/
- In LinkRefDefs, track, and retrieve unnormalized labels. Chris Pressey 1 year, 5 months ago
- Brace ourselves for considering a huge zag. Chris Pressey 1 year, 5 months ago
- Rid the world of "section link_ref_defs", they shouldn't exist. Chris Pressey 1 year, 5 months ago
- Cleanup. Chris Pressey 1 year, 5 months ago
- Move LinkRefDefs class. Chris Pressey 1 year, 5 months ago
- Use link_ref_defs instead of reference_links, everywhere. Chris Pressey 1 year, 5 months ago
- Override render_link_ref, not render_link itself. Chris Pressey 1 year, 5 months ago
- Adopt the CleanMarkdownRenderer from Cleandown project. Chris Pressey 1 year, 5 months ago
- Update unit tests for recent import of recent marko fork. Chris Pressey 1 year, 5 months ago
- Import latest changes from Cat's Eye Technologies' marko fork. Chris Pressey 1 year, 5 months ago
- Split module in two. Chris Pressey 1 year, 5 months ago
- Push dependencies down, and split. Chris Pressey 1 year, 5 months ago
- Import and use the CleanMarkdownRenderer. Chris Pressey 1 year, 5 months ago
- Comment some tests. Chris Pressey 1 year, 5 months ago
- Make test pass, for now. (This functionality is underused now.) Chris Pressey 1 year, 5 months ago
- Fix bugs in parse_image_children(). Chris Pressey 1 year, 5 months ago
- Parse images. Chris Pressey 1 year, 5 months ago
- I will accept the changed behaviour in this case actually. Chris Pressey 1 year, 5 months ago
- Pass more tests, but we still have a long ways to go. Chris Pressey 1 year, 5 months ago
- Some small progress in accumulating properties and sections. Chris Pressey 1 year, 5 months ago
- Import Marko library and checkpoint using it to parse Markdown. Chris Pressey 1 year, 5 months ago
- Drop support for Python 2.x. Chris Pressey 1 year, 5 months ago
- Bump version number in development branch. Chris Pressey 1 year, 5 months ago
- Bump version number. Chris Pressey 1 year, 5 months ago
- Improve how anchors are generated, w.r.t. characters like `.`. Chris Pressey 1 year, 5 months ago
- Arrange licensing info in repo according to REUSE 3.2 convention. Chris Pressey 1 year, 11 months ago
- Arrange licensing info in repo following REUSE 3.0 convention. Chris Pressey 2 years ago
- Update links in example documents and test suite and README. Chris Pressey 2 years ago
- Merge pull request #14 from catseye/develop-0.14 Chris Pressey (commit: GitHub) 3 years ago
- Final small updates to README before release of 0.14. Chris Pressey 3 years ago