Как конвертировать файлы Markdown в Dokuwiki, на ПК

Я ищу инструмент или скрипт для преобразования файлов Markdown в формат Dokuwiki , который будет работать на ПК.

Это значит, что я могу использовать MarkdownPad на ПК для создания первоначальных проектов документов, а затем преобразовать их в формат Dokuwiki, чтобы загрузить в установку Dokuwiki, на которую я не контролирую. (Это означает, что плагин Markdown мне не подходит).

Я мог потратить время на создание сценария Python для самостоятельного преобразования, но я бы хотел не тратить время на это, если такая вещь уже существует.

Теги Markdown, которые я хотел бы поддерживать / преобразовать:

  • Уровни уровней 1 – 5
  • Жирный, курсив, подчеркивание, шрифт с фиксированной шириной
  • Нумерованные и ненумерованные списки
  • Гиперссылки
  • Горизонтальные правила

Существует ли такой инструмент или есть хорошая отправная точка?


Вещи, которые я нашел и рассмотрел

  • Первоначально я думал, что txt2tags будет полезен, но, хотя он может писать как уценку, так и Dokuwiki, он очень привязан к своему конкретному формату ввода

  • Я также видел Markdown2Dokuwiki , и хотя я определенно хотел бы использовать сценарий sed, даже на ПК, это поддерживает только крошечную крошечную часть синтаксиса Markdown.

  • Python-markdown2 также казался многообещающим, но он только выписывает HTML.

  • Pandoc – но он не поддерживает вывод Dokuwiki

  • MultiMarkdown – похоже , не поддерживает вывод Dokuwiki

Стоп-пресс – август 2014 года

Начиная с Pandoc 1.13 , Pandoc теперь содержит мою реализацию записи DokuWiki – и там реализовано еще много функций, чем в этом скрипте. Таким образом, этот скрипт теперь довольно-таки избыточен.


Первоначально сказал, что я не хочу писать сценарий Python для преобразования, я в итоге сделал именно это.

Решающим шагом было использование Pandoc для анализа текста Markdown и записи JSON-представления документа. Этот JSON-файл был в основном довольно простым для анализа и выписывался в формате DokuWiki.

Ниже приведен скрипт, который реализует бит Markdown и DokuWiki, о которых я заботился, и еще несколько. (Я не загрузил соответствующий тест, который я написал)

Требования к использованию:

  • Python (я использовал 2,7 на Windows)
  • Pandoc insatlled и pandoc.exe в вашей PATH (или отредактируйте скрипт, чтобы вместо этого установить полный путь к Pandoc)

Надеюсь, это тоже поможет кому-то еще …

Изменить 2 : 2013-06-26: теперь я ввел этот код в github, https://github.com/claremacrae/markdown_to_dokuwiki.py . Обратите внимание, что в этом коде добавлена ​​поддержка большего количества форматов, а также содержится testuite.

Изменить 1 : отредактировано, чтобы добавить код для синтаксического анализа образцов кода в стиле обратной линии Markdown:

# -*- coding: latin-1 -*- import sys import os import json __doc__ = """This script will read a text file in Markdown format, and convert it to DokuWiki format. The basic approach is to run pandoc to convert the markdown to JSON, and then to parse the JSON output, and convert it to dokuwiki, which is written to standard output Requirements: - pandoc is in the user's PATH """ # TODOs # underlined, fixed-width # Code quotes list_depth = 0 list_depth_increment = 2 def process_list( list_marker, value ): global list_depth list_depth += list_depth_increment result = "" for item in value: result += '\n' + list_depth * unicode( ' ' ) + list_marker + process_container( item ) list_depth -= list_depth_increment if list_depth == 0: result += '\n' return result def process_container( container ): if isinstance( container, dict ): assert( len(container) == 1 ) key = container.keys()[ 0 ] value = container.values()[ 0 ] if key == 'Para': return process_container( value ) + '\n\n' if key == 'Str': return value elif key == 'Header': level = value[0] marker = ( 7 - level ) * unicode( '=' ) return marker + unicode(' ') + process_container( value[1] ) + unicode(' ') + marker + unicode('\n\n') elif key == 'Strong': return unicode('**') + process_container( value ) + unicode('**') elif key == 'Emph': return unicode('//') + process_container( value ) + unicode('//') elif key == 'Code': return unicode("''") + value[1] + unicode("''") elif key == "Link": url = value[1][0] return unicode('[[') + url + unicode('|') + process_container( value[0] ) + unicode(']]') elif key == "BulletList": return process_list( unicode( '* ' ), value) elif key == "OrderedList": return process_list( unicode( '- ' ), value[1]) elif key == "Plain": return process_container( value ) elif key == "BlockQuote": # There is no representation of blockquotes in DokuWiki - we'll just # have to spit out the unmodified text return '\n' + process_container( value ) + '\n' #elif key == 'Code': # return unicode("''") + process_container( value ) + unicode("''") else: return unicode("unknown map key: ") + key + unicode( " value: " ) + str( value ) if isinstance( container, list ): result = unicode("") for value in container: result += process_container( value ) return result if isinstance( container, unicode ): if container == unicode( "Space" ): return unicode( " " ) elif container == unicode( "HorizontalRule" ): return unicode( "----\n\n" ) return unicode("unknown") + str( container ) def process_pandoc_jason( data ): assert( len(data) == 2 ) result = unicode('') for values in data[1]: result += process_container( values ) print result def convert_file( filename ): # Use pandoc to parse the input file, and write it out as json tempfile = "temp_script_output.json" command = "pandoc --to=json \"%s\" --output=%s" % ( filename, tempfile ) #print command os.system( command ) input_file = open(tempfile, 'r' ) input_text = input_file.readline() input_file.close() ## Parse the data data = json.loads( input_text ) process_pandoc_jason( data ) def main( files ): for filename in files: convert_file( filename ) if __name__ == "__main__": files = sys.argv[1:] if len( files ) == 0: sys.stderr.write( "Supply one or more filenames to convert on the command line\n" ) return_code = 1 else: main( files ) return_code = 0 sys.exit( return_code ) 

Это альтернативный подход, который я использовал недавно.

Его преимущества:

  • Он преобразует гораздо более широкий диапазон синтаксиса MarkDown, чем скрипт Python в другом ответе
  • Он не требует установки python
  • Он не требует установки pandoc

Рецепт:

  1. Откройте файл Markdown в MarkdownPad 2

    Снимок экрана MarkdownPad 2

  2. Выберите «Редактировать» -> «Копировать документ в формате HTML»

  3. Запустить html2DokuWiki

    Скриншот HTML для DokuWiki

  4. Вставьте HTML-код в верхнюю панель «HTML Input»

  5. Выберите «Все» и скопируйте весь текст в нижней части окна «Выход DokuWiki».

Не идеальное, но функциональное решение

Markdown -> HTML -> Dokuwiki

Первое преобразование, сделанное pandoc

Второй – HTML-WikiConverter-DokuWiki Perl-модуль

Подсказка: Реверсивные действия существующего кода

Silverstripe-doc-реструктуризация git-repo содержит код (PHP) для преобразования из Dokuwiki в Markdown

Давайте будем гением компьютера.