Прошу прощения за такой вопрос. Но я действительно новичок в Haskell. Я обыскал Интернет целый день, но не нашел никакого примера.Как использовать фильтр Pandoc в Hakyll?
У меня есть фильтр pandoc, написанный на python (tikzcd.py
). Я хочу использовать этот фильтр для обработки сообщений в блоге.
Я думаю, мне нужно использовать unixFilter
или pandocCompileWithTransform
, но мои знания для Haskell действительно недостаточны, чтобы найти решение самостоятельно.
Итак, может ли кто-нибудь предоставить мне пример?
----------- U - P - D - A - T - E - S ---------------
@ Майкл дает решение, используя pandocCompileWithTransformM
и unixFilter
. Оно работает. Но есть проблема.
При использовании фильтра из командной строки, что я буду делать это
pandoc -t json -READEROPTIONS input.markdown | ./filter.py | pandoc -f JSON -WRITEROPTIONS -o output.html
или, что эквивалентноpandoc --filter ./filter.py -READEROPTIONS -WRITEROPTIONS -o html
Эта команда короче, но это не делает показать процедуры.
Но с pandocCompilerTransformM
, он делает что-то вроде
pandoc -t html -READEROPTIONS -WRITEROPTIONS input.mardown | pandoc -t JSON | ./filter.py | pandoc -f JSON -WRITEROPTIONS -o output.html
Разница в том, что текст, который передается filter.py
отличается: одно содержимое непосредственно производится из уценки, в то время как другой это некоторые тексты, созданные из HTML, созданные из уценки. Как вы знаете, конвертировать что-то взад и вперед всегда вызовет непредсказуемую проблему. Поэтому я думаю, что может быть лучшее решение.
PS. Я уставился на изучение Хаскелла. Надеюсь, я смогу самостоятельно решить эту проблему. Спасибо!
Большое спасибо за ваш ответ. Но у меня все еще есть вопрос. Если я правильно понял, ваше решение делает что-то вроде 'pandoc | pandoc -t json | ./filter.py | pandoc -f json'Pandoc дважды (Markdown ---> HTML ---> JSON ---> JSON ---> HTML) перед фильтром, результат немного отличается от результата 'pandoc -t | ./filter.py | pandoc -f json' (Markdown ---> JSON ---> JSON ---> HTML), посмотрев внешний вывод pandoc. Тем не менее, я мог немного изменить свой фильтр, чтобы получить желаемый результат. Еще раз спасибо. –
Ой, подождите, я подумал, что вы используете hakyll, который сам будет обрабатывать эти вещи, используя библиотеки pandoc haskell, а не используя исполняемый файл 'pandoc'. Я в любом случае представлял себе «md -> json -> json -> html», где python выполняет бит 'json -> json' - это то, что делает скрипт. Если вы делаете html вручную с помощью исполняемого файла 'pandoc', то, как вы говорите, просто сделайте' cat myfile.md | pandoc -t json | ./filter.py | pandoc -f json -t html -s' (используя '-s' для автономного html). – Michael
Верно, что процесс hakyll, который я описывал, преобразует уценку в «собственное» представление pandoc, затем перейдите к json, затем перечитайте измененный python json в собственное представление pandoc, а затем в html. Однако собственное представление haskell в стиле «Pandoc» практически не отличается от json, который ваш фильтр читает и записывает. Если бы у вас был фильтр, написанный в haskell, конечно, он мог бы пропустить json-шаг, который был бы использован для фильтра python. – Michael