-
Notifications
You must be signed in to change notification settings - Fork 0
/
CustomLayoutVisitor.cs
80 lines (69 loc) · 2.05 KB
/
CustomLayoutVisitor.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using DevExpress.XtraRichEdit.API.Layout;
using DevExpress.XtraRichEdit.API.Native;
using DevExpress.XtraRichEdit.Layout;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
namespace WindowsFormsApplication1
{
public class StaticsticsVisitor : DocumentVisitorBase
{
readonly StringBuilder buffer;
public int WordCount { get; private set; }
protected StringBuilder Buffer { get { return buffer; } }
public StaticsticsVisitor()
{
WordCount = 0;
this.buffer = new StringBuilder();
}
public override void Visit(DocumentText text)
{
Buffer.Append(text.Text);
}
public override void Visit(DocumentParagraphEnd paragraphEnd)
{
FinishParagraph();
}
void FinishParagraph()
{
string text = Buffer.ToString();
this.WordCount += text.Split(new char[] { ' ', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
Buffer.Length = 0;
}
}
public class CustomLayoutVisitor : LayoutVisitor
{
Document document;
public CustomLayoutVisitor(Document doc)
{
this.document = doc;
RowIndex = 0;
ColIndex = 0;
IsFound = false;
}
protected override void VisitRow(LayoutRow row)
{
if (!IsFound)
{
RowIndex++;
if (row.Range.Contains(document.CaretPosition.ToInt()))
{
IsFound = true;
ColIndex = document.CaretPosition.ToInt() - row.Range.Start;
}
}
base.VisitRow(row);
}
public void Reset()
{
RowIndex = 0;
ColIndex = 0;
}
public int ColIndex { get; private set; }
public int RowIndex { get; private set; }
public bool IsFound { get; private set; }
}
}