web-dev-qa-db-ja.com

PCでMarkdownファイルをDokuwikiに変換する方法

PC上で実行できる Markdown ファイルを Dokuwiki 形式に変換するツールまたはスクリプトを探しています。

これは、PCで MarkdownPad を使用してドキュメントの初期ドラフトを作成し、それをDokuwiki形式に変換して、制御できないDokuwikiインストールにアップロードできるようにするためです。 (これは、 Markdownプラグイン は私には役に立たないことを意味します。)

I could Pythonスクリプトを作成して自分で変換を行うのに時間を費やしますが、そのようなことがすでに存在する場合は、これに時間を費やすことは避けたいと思います。

サポート/変換したいMarkdownタグは次のとおりです。

  • 見出しレベル1〜5
  • 太字、斜体、下線、固定幅フォント
  • 番号付きリストと番号なしリスト
  • ハイパーリンク
  • 水平方向のルール

そのようなツールは存在しますか、それとも利用可能な良い出発点がありますか?


私が見つけて検討したこと

13
Clare Macrae

これは私が最近使用している代替アプローチです。

その利点は次のとおりです。

  • それはより広い範囲のMarkDown構文を変換しますPythonスクリプトの 私の他の答え ==
  • pythonをインストールする必要はありません
  • pandocをインストールする必要はありません

レシピ:

  1. MarkdownPad 2 でMarkdownファイルを開きます

    MarkdownPad 2 Screenshot

  2. [編集]-> [ドキュメントをHTMLとしてコピー]を選択します

  3. 実行 Html2DokuWiki

    HTML to DokuWiki Screenshot

  4. HTMLを上部の[HTML入力]ペインに貼り付けます

  5. すべてを選択し、下部の「DokuWiki出力」ペインのすべてのテキストをコピーします
2
Clare Macrae

ストッププレス-2014年8月

Pandoc 1.1 以降、PandocにはDokuWiki書き込みの実装が含まれるようになり、このスクリプトよりも多くの機能が実装されています。したがって、このスクリプトはかなり冗長になりました。


もともと、変換を行うためにPythonスクリプトを書きたくないと言っていましたが、結局それを行うことになりました。

リアルタイムの節約ステップは、Pandocを使用してMarkdownテキストを解析し、ドキュメントのJSON表現を書き出すことでした。このJSONファイルは、ほとんどの場合、解析がかなり簡単で、DokuWiki形式で書き出すことができました。

以下は、私が気にかけたMarkdownとDokuWikiのビットを実装するスクリプトです-そしてさらにいくつか。 (私が書いた対応するテストスイートをアップロードしていません)

それを使用するための要件:

  • Python(私はWindowsで2.7を使用していました)
  • Pandocがインストールされ、PATHにpandoc.exeが含まれている(またはスクリプトを編集して、代わりにPandocへのフルパスを入力する)

これで他の人の時間を節約できることを願っています...

編集2:2013-06-26:このコードをGitHubの https://github.com/ claremacrae/markdown_to_dokuwiki.py 。そこにあるコードは、より多くの形式のサポートを追加し、テストスイートも含まれていることに注意してください。

編集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 )
12
Clare Macrae

理想的ではありませんが、機能的な解決策

マークダウン-> HTML-> Dokuwiki

Pandocによる最初の変換

2番目- HTML-WikiConverter-DokuWiki Perlモジュール

ヒント:既存のコードのアクションを元に戻す

silverstripe-doc-restructuring git-repoには、をDokuwikiからMarkdownに変換するためのコード(PHP)が含まれています

1
Lazy Badger