ST_FUNC開発日記

建築構造設計Excelアドイン開発の記録

mdからhtmlの変換 その2

環境準備が整ったので、変換のコードを書く。

qiita.com

こちらのコードを使わせていただく。

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ってなんだろう?

note.nkmk.me

ファイルリストを取得するんですね。

ファイルパスについてはとりあえずルートディレクトリの中身を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