[スレッド全体]

2017/1/28 (土) 02:01:43 返信 削除
[609] プレーンテキストをWZ階層付テキストに変換するマクロ

編集中のプレーンテキストを、インデントに沿ってWZ階層付テキストに変換します。
プレーンテキストを直接、アウトライン解析できれば良いのですが、pluginを作れないので、このマクロで凌いでいます。
Plain2WZTree.vbs:編集中のプレーンテキストをWZ階層付テキストに変換
WZTree2Plain.vbs:編集中のWZ階層付テキストをプレーンテキストに変換

-----------------------------------
Plain2WZTree.vbs
-----------------------------------
'プレーンテキストをWZ階層付テキストに変換
Option Explicit
Dim aIndent_positions() 'インデント位置
ReDim Preserve aIndent_positions(0)
aIndent_positions(0) = -1
Dim nJJ
Dim nTabWidth : nTabWidth = ChangeTabWidth(0) 'タブ幅
'プレーンテキストをWZ階層付テキストに変換
For nJJ = 1 To GetLineCount( 0 )
 Dim xLine : xLine = GetLineStr( nJJ )
 '改行を削除
 xLine = Replace(xLine, vbNewLine, "")
 Dim nII
 Dim nBol_Space : nBol_Space = 0 '行頭スペースの個数
 '行頭スペースの個数を数える
 For nII = 1 To Len(xLine)
  '全角空白はスペース2個分
  If Mid(xLine,nII,1) = " " Then
    nBol_Space = nBol_Space + 1
  Else
   'タブ文字は桁数を計算
   If Mid(xLine,nII,1) = vbTab Then
    nBol_Space = nBol_Space + ( nTabWidth - (nBol_Space mod nTabWidth)-1)
   Else
    If Mid(xLine,nII,1) <> " "   Then
     xLine = Mid(xLine,nII)
     Exit For
    End If
   End If
  End If
  nBol_Space = nBol_Space + 1
 Next
 'プレーンテキストをWZ階層付テキストに変換
 If Len(xLine) = 0 Then
 Else
  If Len(Trim( Replace(xLine, vbTab, ""))) = 0 Then
   Jump(nJJ)
   BeginSelect(0)
   GoLineEnd( )
   InsText ""
  Else
   '階層数を調べ行頭スペースの個数を保存する
   For nII = UBound(aIndent_positions) To 0 Step -1
    If aIndent_positions(nII) < nBol_Space Then
     ReDim Preserve aIndent_positions(nII+1)
     aIndent_positions(nII+1) = nBol_Space
     Exit For
    End If
   Next
   'プレーンテキストをWZ階層付テキストに変換
   xLine = String(nII+1,".") & " " & Trim(xLine)
   Jump(nJJ)
   BeginSelect(0)
   GoLineEnd( )
   InsText xLine
  End If
 End If
Next

-----------------------------------
WZTree2Plain.vbs
-----------------------------------
'WZ階層付テキストをプレーンテキストに変換
Option Explicit
Dim nII
ReDim Preserve aLine(0)
'WZ階層付テキストをプレーンテキストに変換
For nII = 1 To GetLineCount( 0 )
 Dim nJJ : nJJ = 1
 '行頭の"."の個数を調べる
 For nJJ = 1 To Len(GetLineStr( nII ))
  If Mid(GetLineStr( nII ),nJJ,1) <> "." Then Exit For
 Next
 'WZ階層付テキストをプレーンテキストに変換
 If nJJ >= 2 Then
  Call Jump(nII,0)
  BeginSelect(0)
  GoLineEnd( )
  InsText Space(4*(nJJ-2)) & Trim(Mid( Replace(GetLineStr( nII ), vbNewLine, ""),nJJ))
 End If
Next
ysi
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81