Встроенное преобразование заголовков из 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

Вы ищете фильтр pandoc lua, который преобразует все сильные элементы в элементы h1? Это должно быть осуществимо...

mb21 13.07.2024 15:57

Спасибо @mb21. Ссылка на своего рода пример, который преобразует сильные капиталы в малые. Вы случайно не знаете, как указывать элементы h1?

Packwood 13.07.2024 16:08

Примечание: размещение <h1> внутри <p> является недопустимым HTML.

Rob 13.07.2024 16:09

@Rob Хорошо, мне действительно следует заменить <p><strong> на <h1> и т. д. Спасибо.

Packwood 13.07.2024 16:13

Это было бы намного лучше и описывает содержание.

Rob 13.07.2024 16:21
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
5
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

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

Спасибо, это конечно работает. Я надеялся, что именно эту команду для управления HTML сделает фильтр Pandoc.

Packwood 14.07.2024 18:57

Другие вопросы по теме