UNIORG ist ein genauer org-Mode-Parser, der mit einem einheitlichen Ökosystem kompatibel ist.
Ich möchte meinen Braindump aus Org-Mode-Notizen veröffentlichen. Keiner der Parsers, die ich ausprobiert habe, hat genug Präzision bereitgestellt.
Uniorg bemüht sich eher um die Parsengenauigkeit als nach Geschwindigkeit oder Leichtigkeit des Schreibens des Parsers.
UNiorg folgt der ORG -Syntax und der org -Element -API. Es zeichnet stark aus org-element.el, was bedeutet, dass Uniorg Org-Dateien genauso wie der Org-Mode sieht. Der Code ist voller Regexes, aber genau so Parse-Dateien.
Es gibt jedoch einige absichtliche Abweichungen vom Org-Modus, mit denen Unior angenehmer oder einfacher zu arbeiten.
UNIRG spricht erfolgreich den größten Teil der ORG -Syntax. Es gibt jedoch ein paar Orte, die ich noch nicht beendet habe:
Der Rest der Syntax sollte gut und genauso funktionieren wie in EMACs (einschließlich komplexer Listen -Verschachtelung, Links, Schubladen, Takteinträge, Latex usw.). Wenn Sie bei den obigen Artikeln helfen möchten, grep parser.ts für TODO: .
Dieses Repository enthält die folgenden Pakete:
uniorg - Typscript -Definitionen des UNIORG -Syntaxbaumsuniorg-parse -Analysieren Sie Org-Mode-Dateien an UNIORG-Syntaxbäumeuniorg-stringify -Stringify UniORG-Syntaxbaum zu Org-Mode-Zeichenfolgeuniorg-rehype -UNIORG-Syntaxbäume in Rehypen transformierenuniorg-extract-keywords -Store Org-Mode-Schlüsselwörter in VFILE speichernuniorg-attach - attachment: Links zu file: Linksuniorg-slug -Fügen Sie Ankern zu den Überschriften mit Githubs Algorithmus hinzuorgast-util-to-string -Dienstprogramm, um den einfachen Textinhalt eines Knotens zu erhaltenorgast-util-visit-ids -Dienstprogramm, um alle Org-Knoten mit IDs zu besuchenUniorg ist mit einem einheitlichen Ökosystem kompatibel, sodass Sie viele vorhandene Plugins nutzen können.
So transformieren Sie beispielsweise einen Org-Mode in 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 ) ) ;Plugins für die Code-Syntax-Highlight (Rehype-Highlight, @Mapbox/Rehype-Prism) und Latex-Formatierung (Rehype-Katex, Rehype-Mathjax) sollten nicht in der Box funktionieren:
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 Allgemeine öffentliche Lizenz v3.0 oder später