2016-12-06 6 views
6

В моем новом проекте у меня есть несколько файлов разметки, которые связаны друг с другом. Эти ссылки относятся к исходным файлам .md.Преобразование ссылок на ссылки в html с Pandoc

Пример: Файл README.md

... 
1. [Development documentation](Development.md) 
1. [User documentation](Usage.md) 
... 

Если преобразовать эти файлы с Pandoc, например, в html-файлы все ссылки по-прежнему указывают на исходный файл .md. Я ищу способ конвертировать также тип ссылки, а это значит, что выходные файлы должны ссылаться на тип выходного файла, такой как HTML, PDF, TeX и т. Д. Есть ли способ конвертировать внутренний тип ссылки с Pandoc?

Я использую это для преобразования файлов:

pandoc -f markdown -t html5 input.md -o output.html 
+0

вы можете привести пример имен файлов и ссылок? – mb21

+0

Пример добавлен в описании. –

ответ

5

Вы можете создать фильтр, который проверяет каждый элемент link и - если URL заканчивается .md --replaces его с .html.

Пример с Python, используя panflute пакет:

import panflute as pf 

def action(elem, doc): 
    if isinstance(elem, pf.Link) and elem.url.endswith('.md'): 
     elem.url = elem.url[:-3] + '.html' 
     return elem 

if __name__ == '__main__': 
    pf.run_filter(action) 
+0

Спасибо, это здорово!Мне просто интересно, нет ли простого способа, используя параметры Pandoc? –

+2

@ P.Tail no, не существует готового способа сделать это. Markdown предполагает, что ваши ссылки уже указывают на визуализированные HTML-документы и не изменяют ваши URL-адреса. Фактически, любое изменение URL-адресов будет ошибкой. Конечно, использование настраиваемого плагина (например, здесь) возможно с различными анализаторами Markdown. Но это должно быть обычаем, потому что только вы знаете свои конкретные потребности, и ни одно решение не может удовлетворить потребности большинства (не говоря уже о всех) пользователях. – Waylan

0

Предполагая, что вы собираетесь служить вам HTML-страниц через веб-сервер, это относительно просто решить все *.md URLs, как *.html те, вместо того, чтобы переписывать их с помощью pandoc, например с помощью Nginx:

location ~ \.md$ { 
    if (!-f $request_filename) { 
    rewrite ^(.*)\.md$ $1 permanent; 
    } 
} 

location/{ 
    try_files /$uri /$uri.html; 
} 

В качестве альтернативы, вы можете заменить все md связи с использованием htmlsed (взято из here):

Измените все внутренние адреса файлов из указывая на * .md ссылки и вместо точки к локальному файлу * .html

  1. Рекурсивно запустить эту команду sed (программно заменить FILENAME)

    sed -n -i.bak '/href="\./s/\.md/\.html/' FILENAME.html 
    
  2. в качестве альтернативы, выполните следующую команду вместо (программно заменить FILENAME)

    sed -e '/href="\./s/\.md/\.html/' FILENAME.html > FILENAME.html.tmp && mv FILENAME.html.tmp FILENAME.html` 
    
1

У меня была аналогичная проблема, так что я сделал это: https://github.com/MatrixManAtYrService/md_htmldoc

Он находит все файлы .md в каталоге, а затем создает отдельный каталог, где все уценки был преобразован в html.

Он исправляет гиперссылки (благодаря ответу @ Sergio_Correia).

Он также собирает все локальные ссылки на файлы, так что ссылки на изображения и такие до сих пор работают

 Смежные вопросы

  • Нет связанных вопросов^_^