PC上で実行できる Markdown ファイルを Dokuwiki 形式に変換するツールまたはスクリプトを探しています。
これは、PCで MarkdownPad を使用してドキュメントの初期ドラフトを作成し、それをDokuwiki形式に変換して、制御できないDokuwikiインストールにアップロードできるようにするためです。 (これは、 Markdownプラグイン は私には役に立たないことを意味します。)
I could Pythonスクリプトを作成して自分で変換を行うのに時間を費やしますが、そのようなことがすでに存在する場合は、これに時間を費やすことは避けたいと思います。
サポート/変換したいMarkdownタグは次のとおりです。
そのようなツールは存在しますか、それとも利用可能な良い出発点がありますか?
私が見つけて検討したこと
私は当初、 txt2tags が役立つと思っていましたが、マークダウンとDokuwikiの両方を記述できますが、独自の特定の入力形式に非常に関連しています。
Markdown2Dokuwiki も見てきました。確かに、PCでも、sedスクリプトを使用したいと思いますが、これはMarkdownの構文のごく一部しかサポートしていません。
python-markdown2 も有望に聞こえますが、HTMLを書き出すだけです。
pandoc -しかしそれ Dokuwiki出力をサポートしていません
これは私が最近使用している代替アプローチです。
その利点は次のとおりです。
レシピ:
MarkdownPad 2 でMarkdownファイルを開きます
[編集]-> [ドキュメントをHTMLとしてコピー]を選択します
HTMLを上部の[HTML入力]ペインに貼り付けます
Pandoc 1.1 以降、PandocにはDokuWiki書き込みの実装が含まれるようになり、このスクリプトよりも多くの機能が実装されています。したがって、このスクリプトはかなり冗長になりました。
もともと、変換を行うためにPythonスクリプトを書きたくないと言っていましたが、結局それを行うことになりました。
リアルタイムの節約ステップは、Pandocを使用してMarkdownテキストを解析し、ドキュメントのJSON表現を書き出すことでした。このJSONファイルは、ほとんどの場合、解析がかなり簡単で、DokuWiki形式で書き出すことができました。
以下は、私が気にかけたMarkdownとDokuWikiのビットを実装するスクリプトです-そしてさらにいくつか。 (私が書いた対応するテストスイートをアップロードしていません)
それを使用するための要件:
これで他の人の時間を節約できることを願っています...
編集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 )
理想的ではありませんが、機能的な解決策
マークダウン-> HTML-> Dokuwiki
Pandocによる最初の変換
2番目- HTML-WikiConverter-DokuWiki Perlモジュール
ヒント:既存のコードのアクションを元に戻す
silverstripe-doc-restructuring git-repoには、をDokuwikiからMarkdownに変換するためのコード(PHP)が含まれています