Встроенное преобразование заголовков из RTF в HTML с помощью Pandoc

У меня есть файл rtf, который в конечном итоге я хочу преобразовать в фрагментированный HTML, разделив его на заголовки уровня 1.

Мой первый шаг — преобразовать rtf в один html-файл, что очень просто:

pandoc -f rtf -t html -o inputfile.html inputfile.rtf

Полученный html-файл имеет заголовки, определенные <strong></strong>, а не <h1></h1>, поэтому мне придется отредактировать файл в текстовом редакторе, чтобы изменить все это. Вот образец из файла:

<p><strong>George Stewart</strong></p>
<p>Title: George Stewart</p>
<p>Type: Task</p>
<p>Date:1734</p>
<p>Description: Christening</p>
<p>Status: +open</p>
<p>Repository: LDS Library</p>
<p>Last action: 8 May 2024</p>
<p><strong>Ann Hill</strong></p>
<p>Title: Ann Hill</p>
<p>Type: Task</p>
<p>Date: 1799</p>
<p>Description: Family</p>
<p>Status: +ToDo</p>
<p>Repository: LDS Library</p>

который нужно отредактировать так:

<p><h1>George Stewart</h1></p>
<p>Title: George Stewart</p>
<p>Type: Task</p>
<p>Date:1734</p>
<p>Description: Christening</p>
<p>Status: +open</p>
<p>Repository: LDS Library</p>
<p>Last action: 8 May 2024</p>
<p><h1>Ann Hill</h1></p>
<p>Title: Ann Hill</p>
<p>Type: Task</p>
<p>Date: 1799</p>
<p>Description: Family</p>
<p>Status: +ToDo</p>
<p>Repository: LDS Library</p>

Затем я могу выполнить следующий шаг: разбить HTML на множество файлов, разделив их на уровне h1 с помощью другой команды Pandoc.

pandoc -t chunkedhtml --split-level=1 -o RN_File inputfile.html

Я хотел бы иметь возможность выполнять это преобразование заголовков внутри команды Pandoc. Возможно, это возможно с помощью фильтра (json/lua?), но я не могу разобраться с синтаксисом.

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

Руководство Pandoc Lua filter предполагает, что мне нужен блок кода, например:

function Strong(elem)
  return pandoc.SmallCaps(elem.content)
end

но мне нужно захватить <p><strong> и заменить на <h1>, это не работает, но может дать представление о том, чего я пытаюсь достичь...

function Para+Strong(elem)
  return pandoc.Header(1)
end

🤔 А знаете ли вы, что...
HTML предоставляет атрибуты для задания альтернативного текста и описания изображений и мультимедиа.


71
1

Ответ:

Решено

Вы можете использовать sed в inputfile.html между двумя командами pandoc.

#!/bin/bash

pandoc -f rtf -t html -o inputfile.html inputfile.rtf

cat inputfile.html | sed 's/<p><strong>\(.*\)</strong></p>/<h1>\1</h1>/g' > inputfile-fixed.html && rm inputfile.html

pandoc -t chunkedhtml --split-level=1 -o RN_File inputfile-fixed.html

Сохранить как: fix_heading.sh
Изменить режим исполняемого файла: chmod +x fix_heading.sh
Использование: ./fix_heading.sh


Я использовал cat в качестве меры предосторожности. Если вы хотите напрямую редактировать файл, замените строку cat на:

sed -i 's/<p><strong>\(.*\)</strong></p>/<h1>\1</h1>/g' inputfile.html

Это устранит необходимость в промежуточном файле.