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


2017/1/30 (月) 22:54:40 返信 削除
[610] Re:プレーンテキストをWZ階層付テキストに変換するマクロ

なかなか興味深い使い方です。
インデント形式が揃っていれば、タブのファイルにも対応しているところがなかなかいいですね。

これを基にプラグインには簡単にできますね。
先頭付近に
Outline.SetTitle("インデントアウトライン")
Outline.SetListType(100) ' ツリー表示
を追加

   xLine = String(nII+1,".") & " " & Trim(xLine)
   Jump(nJJ)
   BeginSelect(0)
   GoLineEnd( )
   InsText xLine
の部分を
   'ツリーに追加
   Outline.AddFuncInfo2 nJJ, 1, Trim(xLine), nII
にするだけでファイル自体は完成で、あとは他のプラグインを参考にして
plugin.defを書くだけでできます。
なおこれだけだとWzみたいに「1.」「1-1.」みたいな番号はついてません。

ysiさんさえよろしければpluginとこのマクロをwikiに乗っけておきましょうか?
もか
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0


2017/1/31 (火) 20:02:26 返信 削除
[611] Re2:プレーンテキストをWZ階層付テキストに変換するマクロ

▼ もかさん
> ysiさんさえよろしければpluginとこのマクロをwikiに乗っけておきましょうか?

pluginの導入は未経験で完成させる自信がないので
是非、お願いいたします。
なお、プレーンテキストをアウトライン解析することが大目的ですので
Wzの機能は必須ではないです。
ysi
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko


2017/2/1 (水) 00:14:28 返信 削除
[612] Re3:プレーンテキストをWZ階層付テキストに変換するマクロ

プラグインをアップローダへ、Wikiにページを作りました。
http://sakura.qp.land.to/?Plugin%2F%C5%EA%B9%C6%2F28

プラグインの導入は、サクラの共通設定のプラグインのタブで
「□プラグインを有効にする」をONにして
「フォルダを開く」を押すとpluginsフォルダができて開きます。
フォルダは閉じていいです。
[ZIPプラグインを導入]からプラグインのzipを選択すると追加されます。
新しく開いたファイルから有効になりますので、
開いていたファイルはウィンドウごと一度閉じて開きなおす必要があります。
開きなおしたら、タイプ別のアウトラインを「Indent」にすれば使えるようになるはずです。
もか
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0


2017/2/1 (水) 23:26:45 返信 削除
[613] Re4:プレーンテキストをWZ階層付テキストに変換するマクロ

動作することを確認しました。
長年の夢が叶って、うれしいです。

ありがとうございました。
ysi
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

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