add README.md
This commit is contained in:
parent
83eebf369d
commit
f4d8aee4cc
1 changed files with 127 additions and 0 deletions
127
README.md
Normal file
127
README.md
Normal file
|
@ -0,0 +1,127 @@
|
|||
# Jotdown
|
||||
|
||||
Jotdown is a pull parser Rust library for the [Djot][djot] markup language. It
|
||||
parses a Djot document into a sequence of events and may also render the events
|
||||
to HTML.
|
||||
|
||||
Jotdown aims to be fast and efficient, using a minimal number of allocations.
|
||||
The API should use idiomatic Rust and be easy to use and flexible. The event
|
||||
interface allows clients to e.g. construct an AST or generate any type of
|
||||
output format. It also allows one to perform filters on the document before
|
||||
generating the output. Jotdown aims to be feature complete and match the
|
||||
[syntax reference][djot-syntax] and the [reference implementation][djot-js] in
|
||||
terms of output.
|
||||
|
||||
Another goal is to keep the implementation minimal and build times low. The
|
||||
current implementation has zero dependencies, if major non-essential features
|
||||
are added or larger dependencies are utilized, these should be optional using
|
||||
feature flags.
|
||||
|
||||
Jotdown supports Rust edition 2021, i.e. Rust 1.56 and above.
|
||||
|
||||
[djot]: https://djot.net
|
||||
[djot-syntax]: https://htmlpreview.github.io/?https://github.com/jgm/djot/blob/master/doc/syntax.html
|
||||
[djot-js]: https://github.com/jgm/djot.js
|
||||
|
||||
## Usage
|
||||
|
||||
Jotdown is primarily a parsing library but also has a minimal CLI
|
||||
implementation and a simple online demo version.
|
||||
|
||||
### Library
|
||||
|
||||
The Jotdown API is inspired by [pulldown-cmark] and is overall very similar.
|
||||
The Jotdown crate contains in-source documentation, a rendered version is
|
||||
available at <https://docs.rs/jotdown>.
|
||||
|
||||
While Jotdown is usable, it is still in early development and breaking changes
|
||||
to the API may occur frequently. The Djot syntax is also in quite early stages
|
||||
and may also change significantly.
|
||||
|
||||
[pulldown-cmark]: https://github.com/raphlinus/pulldown-cmark
|
||||
|
||||
### CLI
|
||||
|
||||
The Jotdown crate contains a minimal implementation of a CLI that simply reads
|
||||
from standard input and writes HTML to standard output. It can be built from
|
||||
this repository and run locally with cargo:
|
||||
|
||||
```
|
||||
$ cargo build --release
|
||||
$ echo "hello world" | ./target/release/djot
|
||||
<p>hello world</p>
|
||||
```
|
||||
|
||||
Alternatively, it can be installed from the crates.io repository using simply:
|
||||
|
||||
```
|
||||
$ cargo install jotdown
|
||||
```
|
||||
|
||||
It will be placed in `~/.cargo/bin/jotdown`.
|
||||
|
||||
### Web demo
|
||||
|
||||
A version of Jotdown compiled to WebAssembly and runnable in a web browser is
|
||||
available at <https://hllmn.net/projects/jotdown/demo>. It can also be run
|
||||
locally:
|
||||
|
||||
```
|
||||
$ cd examples/jotdown_wasm
|
||||
$ make run
|
||||
```
|
||||
|
||||
You may need to install [wasm-pack] and make sure your Rust compiler has the
|
||||
WebAssembly backend.
|
||||
|
||||
[wasm-pack]: https://rustwasm.github.io/wasm-pack/
|
||||
|
||||
## Status
|
||||
|
||||
As of writing, Jotdown implements all the current features of the Djot syntax,
|
||||
including:
|
||||
|
||||
- links, images, either inline or with reference link definitions,
|
||||
- autolinks,
|
||||
- inline typesetting
|
||||
- emphasis,
|
||||
- highlight,
|
||||
- super/subscript,
|
||||
- insert/delete,
|
||||
- smart punctuation,
|
||||
- inline verbatim, code and code blocks,
|
||||
- math,
|
||||
- line breaks,
|
||||
- comments,
|
||||
- symbols,
|
||||
- headings, including hierarchical sections, and automatic links
|
||||
- block quotes,
|
||||
- lists,
|
||||
- unordered,
|
||||
- ordered,
|
||||
- task,
|
||||
- definitions,
|
||||
- raw inline and blocks,
|
||||
- thematic breaks,
|
||||
- pipe tables,
|
||||
- attributes, on inline and block elements,
|
||||
- inline spans and div blocks,
|
||||
- footnotes.
|
||||
|
||||
The HTML output is in some cases not exactly identical to the [reference
|
||||
implementation][djot-js]. There are two test suites that compares Jotdown with
|
||||
the reference implementation. One uses the unit tests of the reference
|
||||
implementation and runs them with Jotdown. It can be run with:
|
||||
|
||||
```
|
||||
$ make suite
|
||||
```
|
||||
|
||||
Another target uses the reference implementation to generate html output for
|
||||
its benchmark files and compares it to the output of Jotdown:
|
||||
|
||||
```
|
||||
$ make suite_bench
|
||||
```
|
||||
|
||||
Note that it requires node in order to run the reference implementation.
|
Loading…
Reference in a new issue