環境準備が整ったので、変換のコードを書く。
こちらのコードを使わせていただく。
convert_md_to_html関数が実際の変換の部分。
def convert_md_to_html(input_path, output_path): with open(input_path, "r", encoding="utf-8") as md_file: md_text = md_file.read() html = markdown.markdown(md_text) with open(output_path, "w", encoding="utf-8") as html_file: html_file.write(html)
ファイルを開いて、markdown.markdownで変換して書き込む。
main関数の中で、フォルダ内のmdファイルをすべて変換する処理を行う。
def main(): input_folder = "." output_folder = "html" if not os.path.exists(output_folder): os.makedirs(output_folder) for md_file_path in glob.glob(f"{input_folder}/**/*.md", recursive=True): relative_path = os.path.relpath(md_file_path, input_folder) output_path = ( os.path.splitext(os.path.join(output_folder, relative_path))[0] + ".html" ) output_dir = os.path.dirname(output_path) if not os.path.exists(output_dir): os.makedirs(output_dir) convert_md_to_html(md_file_path, output_path) print(f"変換完了: {md_file_path} -> {output_path}")
初めにoutput_folderがなければ作る。
次に・・・globってなんだろう?
ファイルリストを取得するんですね。
ファイルパスについてはとりあえずルートディレクトリの中身をhtmlフォルダに出力する設定にする。
gitに入らないようにhtmlフォルダはgitignoreに入れておく。
試しに変換テスト用にいろいろな要素をいれたmdを作ってみる。
# タイトルです ## 小見出し * リスト1 * リスト2 1. 数字リスト1 1. 数字リスト2 > 引用 > > 引用 *強調*や**さらに強調** ```python print("ソースコード") ``` | header|header| |:--|--:| |テーブル1|テーブル2| 数式 $$e^{i\pi}=-1$$ インライン数式$e^{i\pi}=-1$もできるかな ハイパーリンク [STF.secBuildBox関数](st_func_addin/functions/sec_build_box.md) 画像 ![組立H形鋼の寸法定義](st_func_addin/images/sec_build_h.svg)
さて、これで変換を実行してみる。
python md_to_html.py
で実行!
出てきた結果が下記。
<h1>タイトルです</h1> <h2>小見出し</h2> <ul> <li>リスト1</li> <li>リスト2</li> <li>数字リスト1</li> <li>数字リスト2</li> </ul> <blockquote> <p>引用</p> <p>引用</p> </blockquote> <p><em>強調</em>や<strong>さらに強調</strong></p> <p><code>python print("ソースコード")</code></p> <p>| header|header| |:--|--:| |テーブル1|テーブル2|</p> <p>数式</p> <p>$$e^{i\pi}=-1$$</p> <p>インライン数式$e^{i\pi}=-1$もできるかな</p> <p>ハイパーリンク</p> <p><a href="st_func_addin/functions/sec_build_box.md">STF.secBuildBox関数</a></p> <p>画像</p> <p><img alt="組立H形鋼の寸法定義" src="st_func_addin/images/sec_build_h.svg" /></p>
変換はうまくいったが、問題点がいくつか。
- 単純にそのまま変換するので、ヘッダーとかがない
- 表が変換されていない
- 数式が変換されていない
- ハイパーリンクが機能しない
- 画像が表示されない。
次回以降にこれらを対応していく。
mdをhtmlに変換するスクリプトの作成 · st-func/st_func_docs@01c738e · GitHub