Metadata-Version: 2.4
Name: mdsrc
Version: 0.1.0
Summary: Treat Markdown (*.py.md) as Python source: transpile and run.
Requires-Python: >=3.14
Description-Content-Type: text/markdown

# mdsrc

Markdown を Python ソースとして扱うツール。拡張子は `*.py.md`。

```bash
mdsrc run tutorials/hello.py.md    # python hello.py 相当
mdsrc run -m pkg                   # python -m pkg 相当
mdsrc run tutorials/app/           # python dir/ 相当（__main__.py を実行）
mdsrc build [path]                 # 生成のみ（実行しない）
```

## 変換ルール

- バッククォートのフェンス付きコードブロック（` ``` `）だけがソースになる。
  Python プロファイルでは `~~~` はフェンス扱いせず散文とする。
- 言語タグが空・`python`・`py` のブロックを Python として取り込む。
  それ以外（`bash`, `json` …）は無視。
- 入力拡張子・出力拡張子・ランナー・フェンス文字・言語タグは言語ごとの
  「プロファイル」に集約される。スキーマは `mdsrc/languages/base.py`、各言語は
  `mdsrc/languages/<lang>/`（現状 `python/` の `PYTHON`）に置き、他言語
  （例: `*.sh.md` 用の `shell/`）を追加できる。
- インラインコード（`` `x` ``）は取り込まない。
- 散文・フェンス行・非 Python ブロックは空行に置換され、生成 `.py` の
  行番号が `.py.md` と 1:1 で一致する（traceback が Markdown の行を指す）。

## 仕組み

`foo.py.md` → 同じ場所に `foo.py` を生成。実行前にツリー内の全 `*.py.md` を
ビルドするため、Markdown モジュール同士の `import` も解決される。生成された
`.py` はビルド成果物なので `.gitignore` 済み。


## チュートリアル

```
uv run mdsrc run tutorials/app/
uv run mdsrc run tutorials/hello.py.md
```
