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

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

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

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

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

  • заголовок уровня 1 - 5
  • полужирный, курсив, подчеркивание, фиксированная ширина шрифта
  • нумерованные и ненумерованные списки
  • ссылки
  • горизонтальное правила

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


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

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

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

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

  • pandoc - но не поддерживает вывод Dokuwiki

  • MultiMarkdown -не поддерживает вывод Dokuwiki

23
задан Clare Macrae
20.12.2022 2:33 Количество просмотров материала 2613
Распечатать страницу

3 ответа

Стоп-Пресс-Август 2014

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


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

в режиме реального времени шаг экономии было использовать Pandoc для разбора Уценка текст, и выписать представление JSON документа. Этот файл в формате JSON было тогда в основном довольно легко разобрать, и выписать в формате DokuWiki.

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

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

  • Python (я использовал 2.7 на Windows)
  • Pandoc insatlled, и pandoc.exe в свой путь (или отредактируйте скрипт поставить в полный путь вместо Pandoc)

Я надеюсь, что это спасает кого-то еще какое-то время...

Edit 2: 2013-06-26: теперь я поместил этот код в github, вhttps://github.com/claremacrae/markdown_to_dokuwiki.py. Обратите внимание, что код добавляет поддержку дополнительных форматов, а также содержит testsuite.

Edit 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 )
11
отвечен Clare Macrae 2022-12-21 10:21

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

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

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

рецепт:

  1. открыть файл Markdown в MarkdownPad 2

    MarkdownPad 2 Screenshot

  2. выберите Редактировать - > "копировать документ как HTML"

  3. Run Html2DokuWiki

    HTML to DokuWiki Screenshot

  4. вставьте HTML в верхней панели "HTML ввода"

  5. выбрать все и скопировать весь текст в нижней панели "выход" Докувики""
2
отвечен Clare Macrae 2022-12-21 12:38

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

из Markdown -> HTML-код -> Вики

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

второй - HTML-код-WikiConverter- "Докувики" модуль Perl

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

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

1
отвечен Lazy Badger 2022-12-21 14:55

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх