2017-09-06 1 views
0

私はプログラムで.mdソースファイルからhtmlを生成しようとしています。htmlへのPython 3のマークダウン:コードフェンシング/構文の強調表示を有効にする方法

Remarkableエディタで編集すると、python3のマークダウンが使用されます。私は編集者からエクスポートされたhtmlが正しいことを意味します。たとえば、ソース

~~~~python 
import os, sys 
~~~~ 

は約しかし、私のPythonスクリプトは、この構文がサポートされていない表示されたテキストをレンダリングしようとすると

import os, sys 

としてレンダリングされたHTMLを生成します。フェンシングタグは、解析される代わりに出力に表示されます。私は基本的に次の操作を行います。

>>> markdown.markdown (markdown_text, extensions=markdown.extensions.fenced_code) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: module 'markdown.extensions' has no attribute 'fenced_code' 
>>> dir (markdown.extensions) 
['Extension', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'parseBoolValue', 'unicode_literals', 'warnings'] 

私は、関連する拡張機能がRemarkable以降がなければならないコードを正しく処理していると仮定します。

html = markdown.markdown(md_text) 

Pythonはfenced_codeの拡張子を認識しないように表示されます。

コードフェンシング/構文の強調表示を有効にするにはどうすればよいですか?

Githubスタイルのフェンシングは同じです。つまり、それは私のスクリプトではなく注目に値します。ブロックインデントは、ブロック引用ハイライトを行うように見えます。あなたがmarkdown.extensions.fenced_codeをインポートしていないので、

答えて

3

あなたが取得している最初のエラー...

AttributeError: module 'markdown.extensions' has no attribute 'fenced_code' 

は...です:

>>> import markdown.extensions.fenced_code 

をしかし、その後、あなたは第二の問題は、持っていますextensionsキーワードがリストを取ること:

>>> markdown.markdown (markdown_text, extensions=markdown.extensions.fenced_code) 
TypeError: 'module' object is not iterable 

しかし、実際には、markdown.markdown方法は、モジュールを期待されていません。

>>> markdown.markdown (markdown_text, extensions=[markdown.extensions.fenced_code]) 
TypeError: Extension "builtins.module" must be of type: "markdown.Extension" 

あなたはエラーが言うんやクラスのインスタンスを渡す、またはあなただけの文字列として拡張名に渡し、markdownフィギュア、それを出すことができますすることができます

>>> markdown.markdown (markdown_text, extensions=['fenced_code']) 

このモデルを使用すると、モジュール名を決して使用していないので、このメカニズムを使用してmarkdown.extensions.fenced_codeをインポートする必要はありません。そのコードのハイライトは、あなたもpygmentsライブラリがインストールされている場合のみ機能しますcodehilite延長、によって提供され

#!/usr/bin/python3 

import markdown 

markdown_text = '''# This is a test 

~~~~python 
import os, sys 
~~~~ 
''' 

print(markdown.markdown(markdown_text, 
         extensions=['fenced_code', 'codehilite'])) 

注:これはこれは完全な例です。

+0

ありがとうございました。また、pygments.cssはすべて、 '.highlight'と呼ばれるCSSクラスの周りに配置されていました。私はそれを' .codehilite'に変更しなければなりませんでした。 – Rodney

関連する問題