Como converter arquivos Markdown em Dokuwiki, em um PC

13

Estou procurando uma ferramenta ou script para converter arquivos Markdown para Dokuwiki , que será executado em um PC.

Isso é para que eu possa usar MarkdownPad em um PC para criar rascunhos iniciais de documentos e, em seguida, convertê-los para o formato Dokuwiki, para fazer o upload para uma instalação do Dokuwiki sobre a qual não tenho controle. (Isso significa que o plug-in do Markdown não é útil para mim.)

Eu poderia gastar tempo escrevendo um script Python para fazer a conversão, mas gostaria de evitar gastar tempo com isso, se isso já existir.

As tags Markdown que eu gostaria de ter suportado / convertido são:

  • Níveis de título 1 - 5
  • Fonte em negrito, itálico, sublinhado e largura fixa
  • Listas numeradas e não numeradas
  • hiperlinks
  • Regras horizontais

Essa ferramenta existe ou existe um bom ponto de partida disponível?

Coisas que encontrei e considerei

por Clare Macrae 18.03.2012 / 14:56

3 respostas

2

Esta é uma abordagem alternativa que tenho usado recentemente.

Suas vantagens são:

  • ele converte uma faixa muito mais ampla de sintaxe MarkDown do que o script Python na minha outra resposta
  • não requer que o python seja instalado
  • não requer que o pandoc seja instalado

A receita:

  1. Abra o arquivo Markdown em MarkdownPad 2

  2. SelecioneEditar->"Copiar documento como HTML"

  3. Execute Html2DokuWiki

  4. ColeoHTMLnopainel"Entrada HTML" superior

  5. Selecionar tudo e Copiar todo o texto na parte inferior do painel "Saída do DokuWiki"
por 03.06.2014 / 13:10
11

Stop-Press - agosto de 2014

Desde Pandoc 1.13 , o Pandoc agora contém minha implementação de Escrita do DokuWiki - e muitos outros recursos são implementados lá do que neste script. Então, esse script agora é praticamente redundante.

Tendo originalmente dito que eu não queria escrever um script Python para fazer a conversão, acabei fazendo exatamente isso.

O passo em tempo real foi usar o Pandoc para analisar o texto Markdown e escrever uma representação JSON do documento. Este arquivo JSON era então razoavelmente fácil de analisar e escrever no formato DokuWiki.

Abaixo está o script, que implementa os pedaços de Markdown e DokuWiki com os quais eu me importo - e mais alguns. (Eu não fiz o upload do testuite correspondente que eu escrevi)

Requisitos para usar:

  • Python (eu estava usando o 2.7 no Windows)
  • Pandoc insatlled e pandoc.exe no seu PATH (ou edite o script para colocar no caminho completo para o Pandoc)

Espero que isso poupe outra pessoa também ...

Editar 2 : 2013-06-26: Eu agora coloquei este código no github, em link . Note que o código ali adiciona suporte para mais formatos, e também contém testsuite.

Editar 1 : ajustado para adicionar código para analisar amostras de código no estilo backtick do 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 )
    
por 02.04.2012 / 17:18
1

Solução não ideal, mas funcional

Markdown - > HTML - > Dokuwiki

Primeira conversão feita por pandoc

Segunda - HTML-WikiConverter-DokuWiki Módulo Perl

Dica: inversão de ações do código existente

silverstripe-doc-restructuring git-repo contém código (PHP) para converter do Dokuwiki para Markdown

    
por 19.03.2012 / 08:51