Uniorgは、統一エコシステムと互換性のある正確な組織モードパーサーです。
Org-ModeノートからBraindumpを公開したいと思います。私が試したパーサーのどれも、十分な精度を提供していません。
Uniorgは、パーサーの書き込みの速度や容易さではなく、解析の精度を求めて努力します。
Uniorgは、Org構文とORG要素APIに従います。 Org-Element.elから大きく描画します。これは、UniorgがOrg-Modeと同じ方法でORGファイルを見ていることを意味します。コードは正規表現でいっぱいですが、それがまさにORGモードのファイルを解析する方法です。
ただし、Uniorgをより快適または操作しやすくするOrg-Modeからの意図的な逸脱がいくつかあります。
Uniorgは、ほとんどのOrg構文を正常に解析します。ただし、まだ終わっていない場所がいくつかあります。
構文の残りの部分は、EMACS(複雑なリストのネスト、リンク、引き出し、クロックエントリ、ラテックスなどを含む)とまったく同じように正常に動作する必要があります。上記のアイテムを手伝いたい場合は、grep parser.ts for TODO:
このリポジトリには、次のパッケージが含まれています。
uniorg - Uniorg構文ツリーのタイプスクリプト定義uniorg-parse Parse - uniorg構文ツリーに組織モードファイルを解析しますuniorg-stringify - Stringify uniorg構文ツリーを組織モード文字列にstringifyuniorg-rehype - uniorg構文ツリーを再ヒュープに変換しますuniorg-extract-keywords - vfileに組織モードキーワードを保存しますuniorg-attach - attachment: file:リンクuniorg-slug - Githubのアルゴリズムを使用して、見出しにアンカーを追加しますorgast-util-to-string - ノードの平易なテキストコンテンツを取得するためのユーティリティorgast-util-visit-ids - IDを使用してすべての組織ノードにアクセスするユーティリティUniorgは統一されたエコシステムと互換性があるため、多くの既存のプラグインを利用できます。
たとえば、Org-ModeをHTMLに変換する方法は次のとおりです。
import { unified } from 'unified' ;
import parse from 'uniorg-parse' ;
import uniorg2rehype from 'uniorg-rehype' ;
import stringify from 'rehype-stringify' ;
const processor = unified ( ) . use ( parse ) . use ( uniorg2rehype ) . use ( stringify ) ;
processor
. process ( `* org-mode examplen your text goes here` )
. then ( ( file ) => console . log ( file . value ) ) ;コード構文のプラグインハイライト(Rehype-Highlight、 @Mapbox/Rehype-Prism)およびLaTex-Formatting(Rehype-Katex、Rehype-Mathjax)は、箱から出てくるはずです。
import { unified } from 'unified' ;
import parse from 'uniorg-parse' ;
import uniorg2rehype from 'uniorg-rehype' ;
import highlight from 'rehype-highlight' ;
import katex from 'rehype-katex' ;
import stringify from 'rehype-stringify' ;
const processor = unified ( )
. use ( parse )
. use ( uniorg2rehype )
. use ( highlight )
. use ( katex )
. use ( stringify ) ;
processor
. process (
`* org-mode example
When $a ne 0$, there are two solutions to (ax^2 + bx + c = 0) and they are
$$x = {-b pm sqrt{b^2-4ac} over 2a}.$$
#+begin_src js
console.log('uniorg is cool!');
#+end_src
`
)
. then ( ( file ) => console . log ( file . value ) ) ;GNU一般公開ライセンスv3.0以降