A Rust library for parsing org-mode files. https://poiscript.github.io/orgize/
Find a file
2024-04-13 17:50:36 +08:00
.cargo chore: prepare for v0.10.0-alpha.1 2023-11-13 16:33:04 +08:00
.github chore: reorganize directories 2024-03-06 15:20:40 +08:00
benches chore: reorganize directories 2024-03-06 15:20:40 +08:00
docs chore: remove outdated SYNTAX.md 2023-11-21 18:44:55 +08:00
examples feat: add from_fn and from_fn_with_ctx 2024-03-26 17:17:25 +08:00
fuzz chore: reorganize directories 2024-03-06 15:20:40 +08:00
src feat: Org::replace_range 2024-04-13 17:50:36 +08:00
tests chore: reorganize directories 2024-03-06 15:20:40 +08:00
wasm chore: reorganize directories 2024-03-06 15:20:40 +08:00
.gitignore chore: add orgize-{cli,common,lsp} package 2023-12-20 21:56:10 +08:00
Cargo.toml feat: tracing is now optional 2024-03-06 15:42:32 +08:00
development.md feat: various update 2023-11-24 14:57:45 +08:00
LICENSE chore: bump license year 2023-11-13 17:25:20 +08:00
README.md chore: reorganize directories 2024-03-06 15:20:40 +08:00

Orgize

Crates.io Documentation Build status MIT licensed

A Rust library for parsing org-mode files.

Live Demo: https://poiscript.github.io/orgize/

Parse

To parse a org-mode string, simply invoking the Org::parse function:

use orgize::{Org, rowan::ast::AstNode};

let org = Org::parse("* DONE Title :tag:");
assert_eq!(
    format!("{:#?}", org.document().syntax()),
    r#"DOCUMENT@0..18
  HEADLINE@0..18
    HEADLINE_STARS@0..1 "*"
    WHITESPACE@1..2 " "
    HEADLINE_KEYWORD_DONE@2..6 "DONE"
    WHITESPACE@6..7 " "
    HEADLINE_TITLE@7..13
      TEXT@7..13 "Title "
    HEADLINE_TAGS@13..18
      COLON@13..14 ":"
      TEXT@14..17 "tag"
      COLON@17..18 ":"
"#);

use ParseConfig::parse to specific a custom parse config

use orgize::{Org, ParseConfig, ast::Headline};

let config = ParseConfig {
    // custom todo keywords
    todo_keywords: (vec!["TASK".to_string()], vec![]),
    ..Default::default()
};
let org = config.parse("* TASK Title 1");
let hdl = org.first_node::<Headline>().unwrap();
assert_eq!(hdl.todo_keyword().unwrap(), "TASK");

Render to html

Call the Org::to_html function to export org element tree to html:

use orgize::Org;

assert_eq!(
    Org::parse("* title\n*section*").to_html(),
    "<main><h1>title</h1><section><p><b>section</b></p></section></main>"
);

Checkout examples/html-slugify.rs on how to customizing html export process.

Features

  • chrono: adds the ability to convert Timestamp into chrono::NaiveDateTime, disabled by default.

  • indexmap: adds the ability to convert PropertyDrawer properties into IndexMap, disabled by default.