Как правильно сделать пользовательскую разметку - PullRequest
0 голосов
/ 24 февраля 2019

В настоящее время я работаю над проектом личного письма, в результате которого я поддерживал несколько разных версий из-за различий в соответствующих платформах и форматах вывода, которые я хочу поддерживать, которые не решаются тривиально.После нескольких случаев, когда я взглянул на pandoc и чистый лес, который он представляет, я пришел к выводу, что простые шаблоны не делают то, что мне нужно, и, что еще хуже, мне кажется, что мне нужна комбинация пользовательского фильтра и модуля записи ... достаточно, чтобыговорят: возиться с AST - это то, где я чувствую выход из глубины.Достаточно того, что вместо того, чтобы задавать конкретные вопросы «как мне сделать Х» здесь, это вопрос «является ли Х правильным путем или как правильно сделать это, и можете ли вы датьпример того, как это связывает воедино? »... так что, если этот вопрос довольно длинный: мои извинения.

Моя текущая цель - создать пользовательскую разметку, подобную следующей, которая должна« отслеживать », какой персонаж что-то говорит:

<paul|"Hi there">

Если я преобразую в HTML, я бы хотел, чтобы выскочило что-то похожее на:

<span class="speech paul">"Hi there"</span>

(и, возможно, теги

), тогда как если это такпросто чистая уценка / простой текст, я бы хотел, чтобы он бесшумно исчезал:

"Hi there"

Глядя на структуры JSON AST, которые я изучал, было бы разумно, если бы я хотел, чтобы новый тип структуры был похожк тегу «Emph» под названием «Речь», который позволяет помещать в него целые фрагменты текста с добавлением небольшого количества дополнительной информации (говорящий).Итак, что-то вроде этого:

{"t":"Speech","speaker":"paul","c":[ ... ] }

Задача # 1 : В тот момент, когда lua-фильтр видит документ, он, очевидно, уже передан в AST.Это означает, что замена элементов способом, подобным тому, что делает большинство образцов макроэкспандеров, не может работать, так как это потребовало бы чтения вперед.С помощью этого метода я просто заменяю кусочки на части (то, что следует, становится EndSpeech, но это сделает искаженный ввод большей потенциальной проблемой из-за сбоев без вывода сообщений.Кроме того, эти теги были бы совершенно не похожи на то, как должен выглядеть AST.

Чтобы еще больше усложнить ситуацию, некоторые из моих персонажей заканчивают тем, что изучали дополнительный язык на протяжении всей истории, к которому я применяюдругой формат, который содержит упрощенное понимание разговорного текста с пониманием персонажей в перспективе сказанного.Пример:

<paul|"Heb je goed geslapen?"|"Did you ?????">

Возможно, я мог бы добавить третью группу 'UnderstoodSpeech' к своему фильтру, но ( проблема # 2 ) на данный момент, связь между оратором, оригинальной речьюи понятный перевод полностью пропал.Пока конечные документы нуждаются в этих значениях в этих соответствующих заказах и только в этих заказах, это нормально ... но что, если я хочу, чтобы моя версия HTML выглядела как

"Did you?????"

с подсказкой/ эффект наведения, содержащий оригинальную речь?Этого было бы почти невозможно достичь, потому что AST не содержит такого рода реляционных деталей.

Какой бы тип AST я не создал в фильтре, это то, что мне нужно понять в моем авторе.В идеале, я хочу повторно использовать как можно больше стандартных функций pandoc для автора, но я даже не знаю, выполнимо ли это в данный момент.

Так что теперь мой вопрос: может кто-то с большимПандок понимает, пожалуйста, дайте мне пример того, как объединить соответствующие биты данных и правильно их применить?Под этим я подразумеваю показать базовый пример того, что нужно поместить в сценарии lua-filter и lua-writer в следующей цепочке инструментов

[CUSTOMIZED MARKDOWN INPUT] -> lua-filter -> lua-writer -> [CUSTOMIZED HTML5 OUTPUT]
...