2 using System.Collections.Generic;
5 using System.Threading.Tasks;
10 public sealed class OutlineItem : FoldingItem
15 public OutlineItem(int start, int end, int level)
31 sealed class WZTextFoldingGenerator : IFoldingStrategy
37 public TextLevelInfo(int index, int level)
43 public IEnumerable<FoldingItem> AnalyzeDocument(Document doc, int start, int end)
45 Stack<TextLevelInfo> beginIndexs = new Stack<TextLevelInfo>();
46 int lineHeadIndex = start;
47 foreach (string lineStr in doc.GetLines(start, end))
49 int level = GetWZTextLevel(lineStr);
52 foreach(FoldingItem item in GetFoldings(beginIndexs,level, lineHeadIndex))
54 beginIndexs.Push(new TextLevelInfo(lineHeadIndex, level));
56 lineHeadIndex += lineStr.Length;
58 foreach (FoldingItem item in GetFoldings(beginIndexs, 0, lineHeadIndex))
62 IEnumerable<FoldingItem> GetFoldings(Stack<TextLevelInfo> beginIndexs,int level,int lineHeadIndex)
64 while (beginIndexs.Count > 0)
66 TextLevelInfo begin = beginIndexs.Peek();
67 if (level > begin.Level)
70 int endIndex = lineHeadIndex - 1;
71 if (begin.Index < endIndex)
72 yield return new OutlineItem(begin.Index, endIndex,begin.Level);
77 /// WZText形式ののアウトラインレベルを取得する
79 int GetWZTextLevel(string str)
82 for (int i = 0; i < str.Length; i++)