-
Notifications
You must be signed in to change notification settings - Fork 523
/
Copy pathComparisonUnitGroup.cs
77 lines (63 loc) · 2.72 KB
/
ComparisonUnitGroup.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
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
namespace OpenXmlPowerTools
{
internal class ComparisonUnitGroup : ComparisonUnit
{
public ComparisonUnitGroup(
IEnumerable<ComparisonUnit> comparisonUnitList,
ComparisonUnitGroupType groupType,
int level)
{
Contents = comparisonUnitList.ToList();
ComparisonUnitGroupType = groupType;
ComparisonUnit first = Contents.First();
ComparisonUnitAtom comparisonUnitAtom = GetFirstComparisonUnitAtomOfGroup(first);
XElement[] ancestorsToLookAt = comparisonUnitAtom
.AncestorElements
.Where(e => e.Name == W.tbl || e.Name == W.tr || e.Name == W.tc || e.Name == W.p || e.Name == W.txbxContent)
.ToArray();
XElement ancestor = ancestorsToLookAt[level];
if (ancestor == null) throw new OpenXmlPowerToolsException("Internal error: ComparisonUnitGroup");
SHA1Hash = (string) ancestor.Attribute(PtOpenXml.SHA1Hash);
CorrelatedSHA1Hash = (string) ancestor.Attribute(PtOpenXml.CorrelatedSHA1Hash);
StructureSHA1Hash = (string) ancestor.Attribute(PtOpenXml.StructureSHA1Hash);
}
public ComparisonUnitGroupType ComparisonUnitGroupType { get; }
public string CorrelatedSHA1Hash { get; }
public string StructureSHA1Hash { get; }
private static ComparisonUnitAtom GetFirstComparisonUnitAtomOfGroup(ComparisonUnit group)
{
ComparisonUnit thisGroup = group;
while (true)
{
if (thisGroup is ComparisonUnitGroup tg)
{
thisGroup = tg.Contents.First();
continue;
}
if (!(thisGroup is ComparisonUnitWord tw))
{
throw new OpenXmlPowerToolsException("Internal error: GetFirstComparisonUnitAtomOfGroup");
}
var ca = (ComparisonUnitAtom) tw.Contents.First();
return ca;
}
}
public override string ToString(int indent)
{
var sb = new StringBuilder();
sb.Append("".PadRight(indent) + "Group Type: " + ComparisonUnitGroupType + " SHA1:" + SHA1Hash + Environment.NewLine);
foreach (ComparisonUnit comparisonUnitAtom in Contents)
{
sb.Append(comparisonUnitAtom.ToString(indent + 2));
}
return sb.ToString();
}
}
}