Uniorg adalah parser org-mode yang akurat yang kompatibel dengan ekosistem terpadu.
Saya ingin mempublikasikan braindump saya dari catatan mode org. Tidak ada parser yang saya coba telah memberikan presisi yang cukup.
Uniorg berusaha untuk penguraian akurasi daripada kecepatan atau kemudahan menulis parser.
Uniorg mengikuti org sintaks dan org elemen API. Ini menarik banyak dari org-element.el, yang berarti Uniorg melihat file org dengan cara yang sama seperti mode org. Kode ini penuh dengan regex, tetapi itulah persis bagaimana mode org-mode parses file.
Padahal, ada beberapa penyimpangan yang disengaja dari mode org yang membuat Uniorg lebih menyenangkan atau lebih mudah untuk dikerjakan.
Uniorg berhasil mem -parsing sebagian besar sintaks org. Namun, ada beberapa tempat yang belum saya selesaikan:
Sisa sintaks harus berfungsi dengan baik dan dengan cara yang persis sama seperti di Emac (termasuk daftar sarang, tautan, laci, entri jam, lateks, dll.). Jika Anda ingin membantu dengan barang -barang di atas, grep parser.ts untuk TODO: .
Repositori ini berisi paket -paket berikut:
uniorg - Definisi TypeScript dari Pohon Sintaks Uniorguniorg-parse -Parse org-mode file ke pohon sintaks Uniorguniorg-stringify -Stringify Uniorg Sintaks Tree menjadi Org-Mode Stringuniorg-rehype -Ubah Pohon Sintaks Uniorg menjadi Rehypeuniorg-extract-keywords -Simpan kata kunci org-mode ke vfileuniorg-attach -Konversi attachment: Tautan ke file: Tautanuniorg-slug -Tambahkan jangkar ke judul menggunakan algoritma GitHuborgast-util-to-string -utilitas untuk mendapatkan konten teks biasa dari suatu nodeorgast-util-visit-ids -utilitas untuk mengunjungi semua node org dengan IDUniorg kompatibel dengan ekosistem terpadu, sehingga Anda dapat memanfaatkan banyak plugin yang ada.
Misalnya, inilah cara Anda mengubah mode org menjadi 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 ) ) ;Plugin untuk Sorot Sintaks Kode (Rehype-Highlight, @MapBox/Rehype-Prism) dan formate lateks (Rehype-Katex, Rehype-Mathjax) harus bekerja di luar kotak:
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 ) ) ;Lisensi Publik Umum GNU v3.0 atau lebih baru