So konvertieren Sie Markdown-Dateien auf einem PC in Dokuwiki

8520
Clare Macrae

Ich suche nach einem Tool oder Skript, um Markdown- Dateien in das Dokuwiki- Format zu konvertieren, das auf einem PC ausgeführt werden kann.

Dies ist so, dass ich MarkdownPad auf einem PC verwenden kann, um erste Entwürfe von Dokumenten zu erstellen und sie dann in das Dokuwiki-Format zu konvertieren, um sie in eine Dokuwiki-Installation hochzuladen, auf die ich keinen Einfluss habe. (Dies bedeutet, dass das Markdown-Plugin für mich nicht von Nutzen ist.)

Ich könnte etwas Zeit damit verbringen, ein Python-Skript zu schreiben, um die Konvertierung selbst durchzuführen, aber ich möchte gerne Zeit dafür aufwenden, falls es so etwas schon gibt.

Die Markdown-Tags, die ich unterstützt / konvertiert haben möchte, sind:

  • Überschriftenebenen 1 - 5
  • Fett, Kursiv, Unterstrichen, Schrift mit fester Breite
  • Nummerierte und nicht nummerierte Listen
  • Hyperlinks
  • Horizontale Regeln

Gibt es ein solches Werkzeug oder gibt es einen guten Ausgangspunkt?


Dinge, die ich gefunden und überlegt habe

13
Filter zu Pandoc für DW-Ausgabe hinzufügen ?! Übrigens, für angeforderte kleine Teilmengen können Sie ** versuchen, ** mit reinen Markdown in DW zu beginnen (haben Sie DW-Syntaxregeln gelesen ?!) Lazy Badger vor 12 Jahren 0
@ LazyBadger Danke. Ich habe gerade http://johnmacfarlane.net/pandoc/scripting.html gelesen, und soweit ich sehen kann, geht es darum, den Pandoc AST zu ändern. Ich möchte die AST unverändert lassen, aber das Ausgabeformat ändern. Oder habe ich missverstanden? Clare Macrae vor 12 Jahren 0
@LazyBadger Re deinen zweiten Vorschlag, ja, ich (glaube ich) kenne die DW-Syntax sehr gut! Aber selbst wenn DW Markdown unterstützt, möchte ich den Text für meine Kollegen, die ihn bearbeiten, in die herkömmliche DW-Syntax konvertieren. Clare Macrae vor 12 Jahren 0
Ich habe gerade erfahren, dass es eine sehr kurze [Pandoc-Ausgabe] (https://github.com/jgm/pandoc/issues/386) gibt, die DokuWiki-Support anfordert. Clare Macrae vor 12 Jahren 0
Wenn ich über die Integration von Pandoc spreche, denke ich an "addiere zusätzlichen Autor", was AFAICS [den Kern nicht ändert] (http://code.google.com/p/pandoc/issues/detail?id=170) ) wie * MoinMoin Reader * zeigt - es ist nur ein zusätzliches Haskell-Skript Lazy Badger vor 12 Jahren 0
Ah, richtig, das Hinzufügen eines Pandoc _writer_ macht definitiv Sinn, sobald ich weiß, wozu Google es braucht. Vielen Dank. Clare Macrae vor 12 Jahren 0

3 Antworten auf die Frage

11
Clare Macrae

Stop-Press - August 2014

Seit Pandoc 1.13 enthält Pandoc nun meine Implementierung des DokuWiki-Schreibens - und dort sind viel mehr Funktionen implementiert als in diesem Skript. Also dieses Skript ist jetzt ziemlich überflüssig.


Nachdem ich ursprünglich gesagt hatte, dass ich kein Python-Skript für die Konvertierung schreiben wollte, habe ich genau das getan.

Der wirklich zeitsparende Schritt bestand in der Verwendung von Pandoc, um den Markdown-Text zu analysieren und eine JSON-Darstellung des Dokuments auszugeben. Diese JSON-Datei war dann meist relativ einfach zu analysieren und im DokuWiki-Format zu schreiben.

Nachfolgend finden Sie das Skript, das die Teile von Markdown und DokuWiki implementiert, die mir wichtig waren - und ein paar mehr. (Ich habe nicht die entsprechende Testversion hochgeladen, die ich geschrieben habe)

Anforderungen zur Verwendung:

  • Python (ich habe 2.7 unter Windows verwendet)
  • Pandoc insatlled und pandoc.exe in Ihrem PATH (oder bearbeiten Sie das Skript, um stattdessen den vollständigen Pfad zu Pandoc einzugeben)

Ich hoffe, das erspart jemandem auch etwas Zeit ...

Edit 2 : 2013-06-26: Ich habe diesen Code jetzt in https://github.com/claremacrae/markdown_to_dokuwiki.py in github eingefügt . Beachten Sie, dass der Code dort Unterstützung für weitere Formate bietet und auch Testsuite enthält.

Edit 1 : angepasst, um Code zum Analysieren von Codebeispielen im Backtick-Stil von Markdown hinzuzufügen:

# -*- 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 ) 
@OliverSalzburg Gern geschehen. (Übrigens, ich habe gerade einen kosmetischen Tippfehler bemerkt: s / jason / json / an mehreren Stellen ... :-)) Clare Macrae vor 12 Jahren 0
2
Clare Macrae

Dies ist ein alternativer Ansatz, den ich kürzlich verwendet habe.

Ihre Vorteile sind:

  • Es konvertiert einen viel größeren Bereich der MarkDown-Syntax als das Python-Skript in meiner anderen Antwort
  • Es ist keine Installation von Python erforderlich
  • Es ist keine Installation von Pandoc erforderlich

Das Rezept:

  1. Öffnen Sie die Markdown-Datei in MarkdownPad 2

    MarkdownPad 2 Screenshot

  2. Wählen Sie Bearbeiten -> "Dokument als HTML kopieren".

  3. Führen Sie Html2DokuWiki aus

    HTML to DokuWiki Screenshot

  4. Fügen Sie den HTML-Code in den oberen Bereich "HTML-Eingabe" ein

  5. Wählen Sie Alle aus und kopieren Sie den gesamten Text im unteren Bereich "DokuWiki-Ausgabe"
1
Lazy Badger

Nicht ideal, sondern funktionell

Markdown -> HTML -> Dokuwiki

Erste Umstellung durch Pandoc

Zweitens - HTML-WikiConverter-DokuWiki Perl-Modul

Hinweis: Aktionen des vorhandenen Codes rückgängig machen

silverstripe-doc-umstrukturierung git-repo enthält Code (PHP) zum Konvertieren von Dokuwiki nach Markdown

Ich habe es ausprobiert, aber da ich mit Perl nicht vertraut war, kam ich nicht annähernd dazu, das Modul zum Laufen zu bringen. Clare Macrae vor 12 Jahren 0