!!********************************************************************************** !! 《 ルビ付与マクロ-2.4 》 !! ルビ以外に、傍点と、傍線を付与します。 !! 傍点は、傍点・丸傍点・白丸傍点の何れも、区別せず"ヽ" を付します。 !! 傍線は、傍線・二重傍線の何れも、区別せず傍線を付します。 !! その他、何もしません(記号や、コメントは、そのまま残します)。 !! 「不視実行」(実行時に処理経過を画面に表示しないモード)を追加。 !! ルビ付与制度up !! 2011年4月作成・2012年6月/2012年12月改造/2013年12月再改造 Knee Keizou !!********************************************************************************** ErrorBreakMode (0, 1, 0) %arry = {"可視実行","不視実行","Cancel"} %num = Alert("処理を選択してください。(実行時には何れかの文字キーで強制停止)",1,{{%arry(1),"D"},{%arry(2),"H"},{%arry(3),"C"}} ) if %num = nil then stop else if %num = 3 then stop else if %num = 2 then DisplayMode(0)           !!マクロ実行を非表示 else if %num = 1 then DisplayMode(1)           !!マクロ実行を表示 end if end if JumpStart()                   !! カーソルを文書頭にセット %exist = SearchRegexp("【テキスト中に現れる記号について】", 1, 1) if %exist = 1 then %exist = SearchRegexp("-----$", 1, 1) if %exist = 0 then JumpStart() end if else JumpStart() end if !!********************************************************************************** !! メインルーチン !!********************************************************************************** do   %Key = GetKey(2,0) !!   if %key <> nil then !! 何かの文字キーの操作で強制停止     exit do !!   end if 文字列取得() if $文末検出 = 1 then  exit do end if 文字列解析() $取得列 = ""  if $CN = 1 then  continue do end if 表示処理() ルビ付与() loop   Message("処理が終了しました  ",0 ) end !!********************************************************************************** !! 改行位置までの文字列を取得 → $取得列 !!********************************************************************************** sub 文字列取得() SearchRegexp("^.*$", 1, 1) %取得 = GetString() if not %取得 = nil then         !! 範囲が指定されていない場合には、%取得 = nil   %配列数 = MaxSize( %取得 )       !! 配列数を取得  if %配列数 > 1 then  %n = 1   do while %配列数 => %n       !! 2以上の配列数の場合には取得した文字列を連結   $取得列 = $取得列 & %取得(%n)   %n = %n + 1   loop  else   $取得列 = %取得(1)  end if   $取得列長 = Len( $取得列 ) else $文末検出 = 1              !!  end if end sub !!********************************************************************************** !! 取得した文字列を解析 !!********************************************************************************** sub 文字列解析() !!  初期設定 !!---------------------------------------------------------------------------------- $CN = 1 $保存ルビ列 = "" $保存ルビ対象列 = "" $保存起点 = "" $保存付与判定 = "" $処理変数 = 1 $ペースト列 = "" $ペースト列長 = "" !!$ルビ付加対象列長($CN) = "" !! 検索文字を条件をセットして$用語列《ルビ列》にマッチするものを抽出 → $用語列  !! $用語列を%ルビ付加対象列 と $ルビ列 とに分離 !!---------------------------------------------------------------------------------- do !!   Unicodeで検索文字を条件をセット(半角カタカナは含まない) !!set %obj = RegularExpression("([一-龠々]+|[ァ-ヴ]+|[#-〜|0-z・]+|[Α-ω#-〜・]+)《[ぁ-ヾ|/\|/″\]+》", 1) !!set %obj = RegularExpression("(([一-龠々]+|[ァ-ヴ]+|[Α-ω#-〜・]+||[一-龠々ぁ-ヾ、。]+)《[ぁ-ヾ|/\|/″\]+》)+", 2) !!set %obj = RegularExpression("((|[一-龠々ぁ-ヾ、。]+|[一-龠々]+|[ァ-ヴ]+|[Α-ω#-〜・]+)《[ぁ-ヾ|/\|/″\]+》)+", 2) !!set %obj = RegularExpression("((|[一-龠々ぁ-ヾ、。]+|[一-龠々]+|[ァ-ヴ]+|[Α-ω#-Za-z〜・]+)《[ぁ-ヾ|/\|/″\]+》|[#「[一-龠々ぁ-ヾ、]+」に(二重)*傍[点線]])+", 2) !!set %obj = RegularExpression("((|[]一-龠々ぁ-ヾ、。]+|[]一-龠々]+|[]ァ-ヴ]+|[Α-ω#-Za-z〜・]+)《[ぁ-ヾ|/\|/″\]+》|[#「[一-龠々ぁ-ヾ、]+」に(二重)*傍[点線]])+", 2) !!set %obj = RegularExpression("((|[]一-龠々ぁ-ヾ、。]+|[]一-龠々]+|[]ァ-ヴ]+|[Α-ω#-Za-z〜・]+)《[ぁ-ヾ|/\|/″\]+》|[#「[一-龠々ぁ-ヾ、]+」に(白*丸)?傍[点線]])+", 2) set %obj = RegularExpression("((|[]一-龠々ぁ-ヾ、。]+|[]一-龠々]+|[]ァ-ヴ]+|[Α-ω#-Za-z〜・]+)《[ぁ-ヾ|/\|/″\]+》|[#「[一-龠々ぁ-ヾ、]+」に(白*丸)?傍点]|[#「[一-龠々ぁ-ヾ、]+」に(二重)?傍線])+", 2) $用語列頭 = %obj.Find( $取得列 , 1 ) $用語列長 = %obj.Length $初期列長 = $用語列長  if $用語列長 = nil then   $ペースト列 = $ペースト列 & $取得列   $ペースト列長 = Len ( $ペースト列 )  exit do  end if   $用語列 = Mid ( $取得列 , $用語列頭 , $用語列長)        !! $用語列を取得して処理の分岐 $先頭 = Left($用語列, 1) if $先頭 = "]" then                            !! $先頭が""]" である場合    $ペースト列 = $ペースト列 & Left ( $取得列 , $用語列頭 + $用語列長 - 1)       $取得列 = Right ( $取得列, $取得列長 - $用語列頭 - $用語列長 + 1)    $取得列長 = Len ( $取得列 ) else  if not $先頭 = "[" then   ルビ処理()   else if 0 < Find("傍点", $用語列 ) then    傍点処理()   else if 0 < Find("傍線", $用語列 ) then    傍線処理()  end if end if loop $用語列 = "" end sub !!---------------------------------------------------------------------------------- !! ルビ処理 (sub 文字列解析()のsubroutine) !!---------------------------------------------------------------------------------- sub ルビ処理()   %頭文字 = Left ( $用語列 , 1 )  !! $用語列の先頭の文字を取得    if %頭文字 = "|" then     $用語列長 = $用語列長 -1     $用語列 = Right ( $用語列 , $用語列長 )     $用語列頭 = $用語列頭 + 1     $処理変数 = 2    else     $処理変数 = 1    end if !!-----------------------------------------------------------------------------   %前《位置 = Find("《", $用語列 )                 !! $用語列の最初の《の位置   %次《位置 = Find("《", $用語列 , %前《位置 + 1)       !! $用語列の次の《の位置 !!-----------------------------------------------------------------------------  if %次《位置 = 0 then   %後》位置 = Find("》", $用語列 )   $ルビ列 = Mid($用語列 , %前《位置 + 1, $用語列長 - %前《位置 - 1 )     !! 《ルビ》のルビを抽出   %ルビ付加対象列 = Left($用語列 , %前《位置 - 1 )   $ペースト列 = $ペースト列 & Left ( $取得列 , $用語列頭 - $処理変数 ) & %ルビ付加対象列    !!   $取得列 = Right ( $取得列, $取得列長 - $用語列頭 - $用語列長 + 1 )   $取得列長 = Len ( $取得列 )       $保存ルビ列($CN) = $ルビ列                          !!    $保存ルビ対象列($CN) = %ルビ付加対象列                  !!    $保存起点($CN) = $用語列頭 - $処理変数 + 1               !! + 1 を付加    $保存付与判定($CN) = 0                             !!    $CN = $CN +1                                    !! !!-----------------------------------------------------------------------------   else                     !! 用語列が東京《とうきょう》大阪《おおさか》のように連続する場合     %ルビ付加対象列 =""    $ルビ列 = ""    $ペースト列 = $ペースト列 & Left ( $取得列 , $用語列頭 - $処理変数 ) & %ルビ付加対象列    %Lcount = 0    do    set %obj = RegularExpression("([一-龠々]+|[ァ-ヴ]+|[Α-ω#-〜・]+)《[ぁ-ヾ|/\|/″\]+》", 2)    %抽出列頭 = %obj.Find( $用語列 , 1 )    %抽出列長 = %obj.Length    %Lcount = %Lcount + 1     if $用語列長 = 0 then     exit do     end if    %抽出列 = Mid ( $用語列 , %抽出列頭 , %抽出列長)    %前《位置 = Find("《", %抽出列 )    %後》位置 = Find("》", %抽出列 )    $ルビ列 = Mid(%抽出列 , %前《位置 + 1, %抽出列長 - %前《位置 - 1 )         !!    %ルビ付加対象列 = Left(%抽出列 , %前《位置 - 1 )                     !!    $用語列 = Right ( $用語列, $用語列長 - %抽出列頭 - %後》位置 + 1 )    $用語列長 = Len ( $用語列 )        $保存ルビ列($CN) = $ルビ列                          !!    $保存ルビ対象列($CN) = %ルビ付加対象列                  !! if  %Lcount = 1 then    $保存起点($CN) = $用語列頭 - $処理変数 + 1              !! + 1 を付加 else     $保存起点($CN) = 2                                !! end if    $保存付与判定($CN) = 0                             !!    $CN = $CN +1                                    !!    $ペースト列 = $ペースト列 & %ルビ付加対象列                !!       loop    $取得列 = Right ( $取得列, $取得列長 - $用語列頭 - $初期列長 + $処理変数 )    $取得列長 = Len ( $取得列 )  end if end sub !!---------------------------------------------------------------------------------- !! 傍線処理(sub 文字列解析()のsubroutine) !!---------------------------------------------------------------------------------- sub 傍線処理() set %obj = RegularExpression("「[一-龠々ぁ-ヾ、]+」", 1) $抽出列頭 = %obj.Find( $用語列 , 1 ) $抽出列長 = %obj.Length $傍線対象先頭位置 = $用語列頭 - $抽出列長 + 2 %傍線対象文字列 = Mid($取得列 , $傍線対象先頭位置 , $抽出列長 - 2 )   $ペースト列 = $ペースト列 & Left ( $取得列 , $傍線対象先頭位置 - 1 ) & %傍線対象文字列     $取得列 = Right ( $取得列, $取得列長 - $用語列頭- $用語列長 + 1 )   $取得列長 = Len ( $取得列 ) !!  %傍線対象列と%傍線列とを配列で保存 !!----------------------------------------------------------------------------------   $保存ルビ列($CN) = ""                     !! %ルビ列と同様の扱い   $保存ルビ対象列($CN) = %傍線対象文字列          !! %ルビ付加対象列と同様の扱い   $保存起点($CN) = $用語列頭 - $抽出列長 + 2   $保存付与判定($CN) = 1                      !! "0"は傍点・"1"は傍線   $CN = $CN +1 end sub !!********************************************************************************** !! 表示処理($ペースト列をペースト) !!********************************************************************************** sub 表示処理() if $CN = 1 then  exit sub  else  Insert($ペースト列 )  PreviousCharacter( $ペースト列長 )  end if end sub !!********************************************************************************** !! ルビ付与処理( ペーストした$取得列のルビ付加対象列にルビを付与 ) !!********************************************************************************** sub ルビ付与()  if $CN = 1 then  exit sub  end if %Cr = 1 do !! %カーソル位置はカーソルの移動量(付加対象の文字列の先頭までカーソルを移動) !!---------------------------------------------------------------------------------- NextCharacter( $保存起点(%Cr) - 1) SearchString( $保存ルビ対象列(%Cr) , 1 )  if $保存付与判定(%Cr) = 0 then  Ruby(1, $保存ルビ列(%Cr), 1)  EndOfRange()  else  Underline()  end if %Cr = %Cr + 1  if %Cr >= $CN then $保存ルビ対象列 = ""  exit do  end if loop end sub