« 小説創作のための一太郎2018プレミアム | トップページ | 艦これ 2018年冬イベント・捷号決戦!邀撃、レイテ沖海戦(後篇)クリア »

DM200アウトライン記号&青空文庫ルビの一太郎変換マクロ

DM200と一太郎

 小説創作ではpomera DM200で小説を書き、一太郎で組版という手順で作業しています。その際、DM200上では

ルビ|親字《ルビ》
傍点[#「○○」に傍点]

といった青空文庫記法のマークアップとDM200用のアウトライン記号を併用しています。「.(ピリオド)」の数で階層深さを指定する形です。


マクロを置いておきます。
「rubymacro.zip」をダウンロード
テキストファイルをzip形式でアーカイブしてあります。一太郎のマクロエディタにテキストの中身をコピー&ペーストして利用ください。

以下にサンプルを示します。

.タイトル
..第一部
...第一章
あああああ親字《ルビ》
|あああああ親字《ルビ》
ここに傍点[#「傍点」に傍点]を振る
[#ここから4字下げ]いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい。[#ここで字下げ終わり]
...第二章
....第一節
...第三章
..第二部
...第四章
...第五章
..あとがき

 一太郎2018ではマークアップルビの読み込みがある程度サポートされたのですが今ひとつ痒いところに手が届きません。というわけで、自前の記法混在環境に合わせたマクロを作ることにしました。ブログ『All season with my Dear』様の「一太郎で青空文庫ルビ」という記事で公開されていたマクロを元に少しだけ改造したものです。

DM200アウトライン記号と青空ルビの一太郎用変換マクロ

 以下のGIFアニメのように動作するマクロです。上のサンプルテキストで試してみました。

Aozora_macro

  • 青空文庫ルビ、傍点、字下げ記号の一太郎形式化
  • DM200のアウトライン記号の一太郎見出し形式化
    ※階層ひとつめはタイトル、見出しはふたつめ以降に使用

以下にマクロのコードを貼っておきます。


!! --- 青空文庫のテキストにルビを振る ---
!! ---        for 一太郎2018          ---
!! ---          ver1.31b               ---
!! ---   2010/4/25 Copyright Tsukasa   ---
!! ---   2018/3/3 Modified Tou Asaya   ---
!!
!! 青空文庫形式のルビを振ります。
!!ver 1.20 傍点の処理を追加・NS画面用のスタイルに変更
!!ver 1.30 ルビの処理を訂正。長いルビにも対応した。まだエラーを起こすことがある。
!!         字下げの処理を追加した。
!!ver 1.32b DM200タイプ見出し処理追加。PDF出力削除。
!!     地付き、地上げ、縦中横処理追加。
!!↓↓ルビの処理↓↓
!!↓↓長い単語のルビの処理↓↓
 declare variable %ページ(2) 
 declare variable %行(2) 
 declare variable %字(2) 
文書頭()
 %ret(1) =1
 %i = 1
 do until %ret(1) =0
  %ret(1) = 正規表現検索("|",1)
  if(%ret(1)>0 and %i >0) then 
   %ページ(1)= GetPage()
   %行(1) = GetRow()
   %字(1) = GetColumn()
   挿入("★") 
   %ret(2) = 正規表現検索("《[^》]+》",1)
   if(%ret(2)>0) then
    %ページ(2)= GetPage()
    %行(2) = GetRow()
    %字(2) = GetColumn()
    %ルビ = GetString()
    try
   !!エラー発生時はこのルビ処理は飛ばす
     if(MaxSize(%ルビ)>1)then
      %ルビ(1) = %ルビ(1) & %ルビ(2)
     end if
     削除()
     %字数=Len(%ルビ(1))
     %ルビ(1) = Mid(%ルビ(1),2,%字数-2)
     範囲モード(1)
     ジャンプ(%ページ(1),%行(1),%字(1))
     範囲始点()
     ジャンプ(%ページ(2),%行(2),%字(2))
     範囲終点()
     ルビ( 1, %ルビ(1),1)
    exception
     case else
      挿入("★")
    end try
   end if
  end if 
  %i = %i+1
 loop
!!↑↑長い単語のルビの処理↑↑
!!↓↓短い単語のルビの処理↓↓
文書頭( )
%ret = 1
do until %ret = 0
 %ret = 正規表現検索( "《.+?》",1 )
 if(%ret<>"")then
  %ルビ = GetString(  )
  !!エラー発生時はこのルビ処理は飛ばす  try
  try
   if(MaxSize(%ルビ)>1) then 
    %ルビ(1) = %ルビ(1) & %ルビ(2)
   end if
   %字数 = Len(%ルビ(1))
   %ルビ(1) = Mid(%ルビ(1),2,%字数-2)
   挿入("★")
   LeftWord( 2 )
   範囲モード( 6 )
   範囲始点( )
   範囲終点()
   ルビ( 1,%ルビ(1) ,1)
  exception
   case else
    挿入("★")
  end try
 end if
loop
文字全置換("★",,3,0,0)
!!↑↑ルビの処理↑↑
!!↓↓傍点の処理↓↓
文書頭( )
%ret = 1
do until %ret = 0
 %ret = 正規表現検索( "[#「[^」]+」に傍点]",1 )
 if(%ret<>"")then
  %ルビ = GetString(  )
  if(MaxSize(%ルビ)>1) then 
   %ルビ(1) = %ルビ(1) & %ルビ(2)
  end if
  %字数 = Len(%ルビ(1))-8
  カット()  
  範囲モード(1)
  範囲始点( )
  前文字(%字数)
  範囲終点()
  傍点(2)
 end if
loop
!!↑↑傍点の処理↑↑
!!↓↓縦中横の処理↓↓
文書頭( )
%ret = 1
do until %ret = 0
 %ret = 正規表現検索( "[#「[^」]+」は縦中横]",1 )
 if(%ret<>"")then
  %ルビ = GetString(  )
  if(MaxSize(%ルビ)>1) then 
   %ルビ(1) = %ルビ(1) & %ルビ(2)
  end if
  %字数 = Len(%ルビ(1))-9
  カット()  
  範囲モード(1)
  範囲始点( )
  前文字(%字数)
  範囲終点()
  縦中横( )
 end if
loop
!!↑↑縦中横の処理↑↑
!!↓↓字下げの処理↓↓
文書頭()
%ret=1
do until %ret = 0
 %ret = 正規表現検索("[#ここから.字下げ]",1)
 if(%ret > 0 ) then
  %文字 = GetString()
  %数 = han(Mid(%文字(1),7,1))*2
  if(%数>0)then
   削除()
  else
   continue do
  end if
  %ページ(1)= GetPage()
  %行(1) = GetRow()   
  %ret = 正規表現検索("[#ここで字下げ終わり]",1)
  %ページ(2)=GetPage()
  %行(2) = GetRow()
  削除
  ジャンプ(%ページ(1),%行(1),1)
  範囲モード(2)
  範囲始点()
  ジャンプ(%ページ(2),%行(2),1)
  範囲終点()
  インデント(1,%数)
 end if
loop
!!↑↑字下げの処理↑↑
!!↓↓一行だけの字下げの処理↓↓
文書頭()
%ret=1
do until %ret = 0
 %ret = 正規表現検索("[#.字下げ]",1)
 if(%ret > 0 ) then
  %文字 = GetString()
  %数 = han(Mid(%文字(1),3,1))*2
  if(%数>0)then
   削除()
  else
   continue do
  end if
  インデント(1,%数)  
 end if
loop
!!↑↑一行だけの字下げの処理↑↑
!!↓↓地付きの処理↓↓
文書頭()
%ret=1
do until %ret = 0
 %ret = 正規表現検索("[#地付き]",1)
 if(%ret > 0 ) then
  %文字 = GetString()
  %数 = Len(%文字(1))*2
  if(%数>0)then
   削除()
  else
   continue do
  end if
  %ページ(1)= GetPage()
  %行(1) = GetRow()
  行頭()
  %ページ(2)=GetPage()
  %行(2) = GetRow()
  ジャンプ(%ページ(1),%行(1),1)
  範囲モード(2)
  範囲始点()
  ジャンプ(%ページ(2),%行(2),1)
  範囲終点()
  右寄せ( )
 end if
loop
!!↑↑字付きの処理↑↑
!!↓↓地から*字上げの処理↓↓
文書頭()
%ret=1
do until %ret = 0
 %ret = 正規表現検索("[#地から.字上げ]",1)
 if(%ret > 0 ) then
  %文字 = GetString()
  %数 = han(Mid(%文字(1),6,1))*2
  if(%数>0)then
   削除()
  else
   continue do
  end if
  %ページ(1)= GetPage()
  %行(1) = GetRow()
  行頭()
  %ページ(2)=GetPage()
  %行(2) = GetRow()
  ジャンプ(%ページ(1),%行(1),1)
  範囲モード(2)
  範囲始点()
  ジャンプ(%ページ(2),%行(2),1)
  範囲終点()
  右寄せ( )
  インデント(1,0,%数)  
 end if
loop
!!↑↑一行だけの字下げの処理↑↑
!!↓↓改丁の処理↓↓
!!↓↓※改丁は一太郎では改ページと判別せず↓↓
文書頭()
%ret=1
do until %ret = 0
 %ret = 正規表現検索("[#改丁]",1)
 if(%ret > 0 ) then
  %文字 = GetString()
  %数 = Len(%文字(1))*2
  if(%数>0)then
   削除()
  else
   continue do
  end if
  改ページ(1)
 end if
loop
!!↑↑改丁の処理↑↑
!!↓↓改ページの処理↓↓
文書頭()
%ret=1
do until %ret = 0
 %ret = 正規表現検索("[#改ページ]",1)
 if(%ret > 0 ) then
  %文字 = GetString()
  %数 = Len(%文字(1))*2
  if(%数>0)then
   削除()
  else
   continue do
  end if
  改ページ( 1 )
 end if
loop
!!↑↑改ページの処理↑↑
!!↓↓改段の処理↓↓
文書頭()
%ret=1
do until %ret = 0
 %ret = 正規表現検索("[#改段]",1)
 if(%ret > 0 ) then
  %文字 = GetString()
  %数 = Len(%文字(1))*2
  if(%数>0)then
   削除()
  else
   continue do
  end if
  改段( 1 )
 end if
loop
!!↑↑改段の処理↑↑
!!↓↓見出しの処理↓↓
文書頭()
%ret=1
do until %ret = 0
 %ret = 正規表現検索("^\.+?",1)
 if(%ret > 0 ) then
  %文字 = GetString()
  %階層数 = len(%文字(1))
  if(%階層数>0)then
   削除()
  else
   continue do
  end if
  %ページ(1)= GetPage()
  %行(1) = GetRow()
  if(%階層数 = 2 ) then
    SetParagraphStyle( 1, "大見出し(オートスタイル)" )
  else if(%階層数 = 3 ) then
    SetParagraphStyle( 1, "中見出し(オートスタイル)" )
  else if(%階層数 = 4 ) then
    SetParagraphStyle( 1, "小見出し(オートスタイル)" )
  else if(%階層数 = 5 ) then
    SetParagraphStyle( 1, "小見出し2(オートスタイル)" )
  else if(%階層数 = 6 ) then
    SetParagraphStyle( 1, "小見出し3(オートスタイル)" )
  else if(%階層数 = 7 ) then
    SetParagraphStyle( 1, "小見出し4(オートスタイル)" )  
  else if(%階層数 = 8 ) then
    SetParagraphStyle( 1, "小見出し5(オートスタイル)" )
  end if
 end if
loop
!!↑↑見出しの処理↑↑

※マクロを使用する前に一度文書を[保存]してください。
※段落スタイルを使用する場合はマクロ使用前に文書に対し段落スタイルを一つでも設定しないとエラーが出るようです。
※上のマクロはテキストエディタに一度コピペしてShiftJIS形式で保存しなおしてからの使用をお勧めします。

|

« 小説創作のための一太郎2018プレミアム | トップページ | 艦これ 2018年冬イベント・捷号決戦!邀撃、レイテ沖海戦(後篇)クリア »