Преобразовать текст Markdown в RTF, используя Ruby и Pandoc?

Играем с Руби и Руби-Пандок. Кажется, хороший инструмент, если я могу заставить его работать.

Я хотел бы преобразовать некоторый текст Markdown (со встроенными списками и другими причудами) в форматированный текст. Вот текст, который я конвертирую:

Title
===

This is a paragraph. Hallelujah.

Here comes a nested list.
---

* List item 1
  * List item 1.1
  * List item 1.2
* List item 2
  * List item 2.1

Вот мой код Руби...

require 'pandoc-ruby'

input = File.read(test.md)
converter = PandocRuby.new(input, from: :markdown, to: :rtf)
puts converter.convert

... который (после сохранения вывода в файл) создает документ без всего, кроме заголовка:

скриншот RTF

Вот код файла RTF:

{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 Title\par}
{\pard \ql \f0 \sa180 \li0 \fi0 This is a paragraph. Hallelujah.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 Here comes a nested list.\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab List item 1\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab List item 1.1\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab List item 1.2\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab List item 2\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab List item 2.1\sa180\par}

Кроме того, даже если он появился в моем средстве просмотра RTF (Mac TextEdit), код RTF, похоже, потерял все вложенные списки. Я не знаю, как это диагностировать, то ли я не указал необходимую информацию заголовка, то ли что-то в Ruby-Pandoc.

Заранее спасибо!


person aljabear    schedule 09.10.2012    source источник


Ответы (1)


Оберните вывод в пролог и закрывающую фигурную скобку. Нравится:

{\rtf1\ansi\deff0{\fonttbl{\f0 Times New Roman;}}
{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 Title\par}
{\pard \ql \f0 \sa180 \li0 \fi0 This is a paragraph. Hallelujah.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 Here comes a nested list.\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab List item 1\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab List item 1.1\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab List item 1.2\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab List item 2\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab List item 2.1\sa180\par}
}

Обновить

я пропустил параметр конфигурации "оболочка"?

Да, согласно ознакомлению с гемом.

Если вы пытаетесь создать автономный файл с полными заголовками файлов, а не только с размеченным фрагментом, не забудьте передать параметр :standalone, чтобы добавить правильные верхний и нижний колонтитулы.

а как насчет отсутствия вложенных списков?

Согласно документации PanDoc, в исходном тексте отсутствуют еще 2 пробелы отступов.

Итак, собрав это вместе, вот полное решение.

Ваш исходный файл:

Title
===

This is a paragraph. Hallelujah.

Here comes a nested list.
---

* List item 1
    * List item 1.1
    * List item 1.2
* List item 2
    * List item 2.1

Код конвертации:

require 'pandoc-ruby'
input = File.read('./test.md')
puts PandocRuby.markdown(input).to_rtf(:standalone)
person manzoid    schedule 09.10.2012
comment
Хорошо, я мог бы сделать это с обработкой строк Ruby, но это означало бы жесткое программирование исправления... возможно ли исправить это с помощью Pandoc (т.е. я пропустил параметр конфигурации оболочки)? А как насчет отсутствия вложенных списков? - person aljabear; 09.10.2012
comment
Что касается вложенных списков, см. документацию pandoc. - person John MacFarlane; 09.10.2012
comment
И да, вам не хватает параметра конфигурации оболочки: :standalone. - person John MacFarlane; 09.10.2012
comment
Спасибо, Джон, проголосовал за оба комментария и включил их в расширенный ответ. Также спасибо за вашу работу над самим Пандоком, это круто. - person manzoid; 09.10.2012