Danaのアウトラインデータをmarkdown形式に変換する

Danaでアウトラインのデータをmarkdown形式で本文に反映するためのマクロ.DanaからVisual Studio Codeへの移行のために作成しました.

背景

テキストエディタDana を長年愛用しているのですが,諸事情によりVisual Studio Codeへの移行を考えています.

Danaにはアウトライン機能があり,これが便利で多用しているのですが,
これをvscodeでどうするかというのが今回の話です.

方針

vscodeのアウトライン対応ですが,
vscodeでは,markdown形式のファイルについては見出しをアウトラインとして左側に表示できるようなので,
元のテキストにmarkdown形式でアウトライン用の見出しを入れれば良さそうです.

しかしDanaのアウトラインのデータは,マーカーのデータとして本体のテキストとは別の独自ファイル(#marks#)に保存されているため,
取り出すことが出来ません.

そのため,テキストを開いた(= マーカーデータも読み込んでいる)状態のDanaで動かすと,
マーカー状態によって見出しを入れるようテキストを書き換える,というマクロ(Dana Script)を作成しました.

テキストの書き換えは,
-1階層目の見出し:# を行頭に入れる
-2階層目の見出し(= 行頭がスペース1文字):## を行頭に入れる

という仕様で行います.(自分は2階層までしか使わないので,こうしています)

動かす

最後のOutline2md.dasを,Dana.exeがインストールされているディレクトリにコピーして,
メニューの「ツール」-「設定」から「組み込みスクリプト」として登録すればよいです.

必要になったときに,ツールメニューから実行するもよし,
キーを割り当てておいてキーで実行するもよし.

実行結果の例:

'
' Outline to markdown
'
Main ()
	Dim line%, h%
	Dim s$

	line% = 1
	h% = GetTopLine()

	While h%
		If IsMarked(h%) Then
			s$ = LoadThisLine(h%)
			if LeftMB$(s$, 1) <> "#" Then
				JumpLine(line%)
				Command("BegLine")

				If LeftMB$(s$, 1) <> " " Then
					InsertString("# ")
				Else If LeftMB$(s$, 2) <> " " Then
					InsertString("## ")
				End If
			End If
		End If

		line% = line% + 1
		h% = GetNext(h%)
	Wend

	JumpLine(1)
	Refresh()
	MsgBox("処理が終了しました")
End

Comment