UniOrg является точным синтаквиком Org-Mode, совместимым с унифицированной экосистемой.
Я хочу опубликовать свой BrainDump из заметок Org-Mode. Ни один из проборителей, которые я пробовал, не обеспечил достаточную точность.
Uniorg стремится к точности анализа, а не для скорости или простоты написания анализатора.
UniOrg следует за синтаксисом орг и API org Element. Он в значительной степени рисует из org-element.el, что означает, что Uniorg видит файлы орг так же, как и Org-Mode. Код полон режимов, но именно это именно так инициатирует файлы Org-Mode.
Тем не менее, есть несколько преднамеренных отклонений от Org-Mode, которые делают Uniorg более приятным или легче работать.
Uniorg успешно анализирует большую часть синтаксиса ORG. Тем не менее, есть несколько мест, которые я еще не закончил:
Остальная часть синтаксиса должна работать нормально и точно так же, как и в EMAC (включая сложное гнездование списка, ссылки, ящики, записи часов, латекс и т. Д.). Если вы хотите помочь с предметами выше, grep parser.ts для TODO: .
Этот репозиторий содержит следующие пакеты:
uniorg - определения типового типового дерева синтаксиса UniORGuniorg-parse -файлы Parse Org-Mode к синтаксисам UniOrguniorg-stringify -Stringify uniorg Синтаксис дерево к строке орг-режимаuniorg-rehype - преобразовать синтаксические деревья UniOrguniorg-extract-keywords -хранить ключевые слова Org-Mode для VFILEuniorg-attach -конвертировать attachment: ссылки на file: ссылкиuniorg-slug -добавьте якоря к заголовкам, используя алгоритм GitHuborgast-util-to-string -утилита, чтобы получить простое текстовое содержание узлаorgast-util-visit-idsUniOrg совместим с унифицированной экосистемой, поэтому вы можете воспользоваться многими существующими плагинами.
Например, вот как вы преобразуете орг-режим в 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) и латексное форматирование (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 General Public License v3.0 или позже