-
Notifications
You must be signed in to change notification settings - Fork 1
/
MXLIFFTextExtractor.cs
99 lines (78 loc) · 2.39 KB
/
MXLIFFTextExtractor.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using Sdl.FileTypeSupport.Framework.BilingualApi;
using Sdl.FileTypeSupport.Framework.NativeApi;
using System;
using System.Collections.Generic;
using System.Text;
namespace Leo.FileTypeSupport.MXLIFF
{
internal class MXLIFFTextExtractor : IMarkupDataVisitor
{
private readonly List<IComment> comments = new List<IComment>();
public List<IComment> GetSegmentComment(ISegment segment)
{
comments.Clear();
VisitChildren(segment);
return comments;
}
public void VisitCommentMarker(ICommentMarker commentMarker)
{
for (int i = 0; i < commentMarker.Comments.Count; i++)
{
comments.Add(commentMarker.Comments.GetItem(i));
}
VisitChildren(commentMarker);
}
internal StringBuilder PlainText
{
get;
set;
}
public string GetPlainText(ISegment segment)
{
PlainText = new StringBuilder("");
VisitChildren(segment);
string segContent = PlainText.ToString();
return segContent;
}
// Loops through all sub items of the container (IMarkupDataContainer)
private void VisitChildren(IEnumerable<IAbstractMarkupData> container)
{
foreach (var item in container)
{
item.AcceptVisitor(this);
}
}
public void VisitText(IText text)
{
string segContent = text.Properties.Text;
PlainText.Append(segContent);
}
public void VisitTagPair(ITagPair tagPair)
{
// Tag pairs should not be present
throw new NotImplementedException();
}
#region "left empty"
public void VisitSegment(ISegment segment)
{
VisitChildren(segment);
}
public void VisitLocationMarker(ILocationMarker location)
{
}
public void VisitLockedContent(ILockedContent lockedContent)
{
}
public void VisitOtherMarker(IOtherMarker marker)
{
}
public void VisitPlaceholderTag(IPlaceholderTag tag)
{
PlainText.Append(tag.TagProperties.TagContent);
}
public void VisitRevisionMarker(IRevisionMarker revisionMarker)
{
}
#endregion "left empty"
}
}