PC에서 Markdown 파일을 Dokuwiki로 변환하는 방법


13

Markdown 파일을 PC에서 실행 되는 Dokuwiki 형식 으로 변환하는 도구 또는 스크립트를 찾고 있습니다.

이것은 PC에서 MarkdownPad 를 사용 하여 문서의 초기 초안을 만든 다음 Dokuwiki 형식으로 변환하여 내가 제어 할 수없는 Dokuwiki 설치에 업로드 할 수 있도록하기위한 것입니다. (이것은 Markdown 플러그인 이 나에게 쓸모 가 없다는 것을 의미합니다 .)

내가 할 수 변환 나 자신을 수행하는 파이썬 스크립트를 작성 시간을 보내고 있지만, 나는 그런 일이 이미 존재하는 경우,이 시간을 소비하지 않도록하고 싶습니다.

지원 / 전환하고 싶은 마크 다운 태그는 다음과 같습니다.

  • 제목 수준 1-5
  • 굵은 기울임 꼴, 밑줄, 고정 너비 글꼴
  • 번호 매기기 및 번호 매기기 목록
  • 하이퍼 링크
  • 수평 규칙

그러한 도구가 있습니까, 아니면 좋은 출발점이 있습니까?


내가 찾아서 고려한 것들


DW 출력을 위해 pandoc에 필터를 추가 하시겠습니까? 그리고 btw, 요청 된 작은 하위 집합의 경우 DW에서 순수한 Markdown으로 시작해 볼 수 있습니다 (DW 구문 규칙을 읽었습니까?)
Lazy Badger

@LazyBadger 감사합니다. 나는 johnmacfarlane.net/pandoc/scripting.html을 읽었 으며 내가 볼 수있는 한 Pandoc AST 변경에 관한 것입니다. AST를 변경하지 않고 출력 형식을 변경하고 싶습니다. 아니면 내가 잘못 이해 했습니까?
Clare Macrae

@LazyBadger 두 번째 제안을 다시 해보십시오. 예, 저는 (믿습니다) DW 구문을 잘 알고 있습니다! 그러나 DW가 Markdown을 지원하더라도 편집 가능한 동료를 위해 텍스트를 기존 DW 구문으로 변환하고 싶습니다.
Clare Macrae

방금 DokuWiki 지원을 요청 하는 매우 간단한 Pandoc 문제 가 있음을 발견했습니다 .
Clare Macrae

pandoc 통합에 대해 이야기 할 때, "추가 작가 추가"를 염두에두고 있습니다. AFAICS 는 MoinMoin 독자가 보여 주듯이 코어바꾸지 않습니다. 추가 Haskell 스크립트입니다
Lazy Badger

답변:


12

스톱 프레스-2014 년 8 월

Pandoc 1.13 부터 Pandoc 에는 DokuWiki 쓰기 구현이 포함되어 있으며이 스크립트보다 더 많은 기능이 구현되어 있습니다. 따라서이 스크립트는 이제 거의 중복됩니다.


원래 변환을 수행하기 위해 Python 스크립트를 작성하고 싶지 않다고 말하면서 결국 그렇게했습니다.

실제로 시간을 절약하는 단계는 Pandoc을 사용하여 Markdown 텍스트를 구문 분석하고 문서의 JSON 표현을 작성하는 것이 었습니다. 이 JSON 파일은 대부분 구문 분석이 쉽고 DokuWiki 형식으로 작성되었습니다.

아래는 내가 걱정했던 Markdown과 DokuWiki의 비트를 구현하는 스크립트입니다. (내가 작성한 해당 테스트 스위트를 업로드하지 않았습니다)

사용 요구 사항 :

  • 파이썬 (Windows에서 2.7을 사용하고있었습니다)
  • Pandoc을 설치하고 PATH에 pandoc.exe를 설치하십시오 (또는 대신 Pandoc의 전체 경로를 입력하도록 스크립트를 편집하십시오)

나는 이것이 다른 누군가를 구하기를 바랍니다.

편집 2 : 2013-06-26 : 이제이 코드를 https://github.com/claremacrae/markdown_to_dokuwiki.py 에서 GitHub에 넣었습니다 . 이 코드는 더 많은 형식에 대한 지원을 추가하고 테스트 스위트도 포함합니다.

편집 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 )

@OliverSalzburg 천만에요. (BTW, 나는 방금 화장품 오타를 발견했습니다 : s / jason / json / 여러 곳에서 ... :-))
Clare Macrae

2

이것은 내가 최근에 사용한 대체 방법입니다.

장점은 다음과 같습니다.

  • 다른 답변 에서 Python 스크립트보다 훨씬 넓은 MarkDown 구문을 변환합니다.
  • 파이썬을 설치할 필요가 없습니다.
  • pandoc을 설치할 필요가 없습니다.

조리법:

  1. MarkdownPad 2 에서 Markdown 파일을 엽니 다

    MarkdownPad 2 스크린 샷

  2. 편집-> "문서를 HTML로 복사"를 선택하십시오.

  3. Html2DokuWiki 실행

    HTML to DokuWiki 스크린 샷

  4. HTML을 상단 "HTML 입력"창에 붙여 넣기

  5. 모두를 선택하고 하단 "DokuWiki 출력"창의 모든 텍스트를 복사하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.