Skip to content

Commit 524efdc

Browse files
AyUsH18102001Ayush Hiremani
andauthored
Greek numbering in ordered lists (upper-greek / lower-greek) (#227)
add support greek numbering --------- Co-authored-by: Ayush Hiremani <Ayush.Hiremani@axefinance.com>
1 parent 8aa2846 commit 524efdc

4 files changed

Lines changed: 111 additions & 2 deletions

File tree

examples/Demo/Resources/CompleteRunTest.html

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,34 @@ <h5>Heading 5</h5>
154154
<li>Wine</li>
155155
</ol>
156156

157+
<p>An Ordered List with Greek numbering: </p>
158+
<ol style="list-style-type: upper-greek">
159+
<li>alpha</li>
160+
<li>
161+
beta
162+
<ol style="list-style-type: lower-greek">
163+
<li>two.one</li>
164+
<li>two.two</li>
165+
<li>two.three</li>
166+
</ol>
167+
</li>
168+
169+
<li>
170+
three
171+
<ol style="list-style-type: lower-greek">
172+
<li>three.one</li>
173+
<li>
174+
three.two
175+
<ol>
176+
<li>three.two.one</li>
177+
<li>three.two.two</li>
178+
</ol>
179+
</li>
180+
</ol>
181+
</li>
182+
<li>four</li>
183+
</ol>
184+
157185
<table border=1><tr><td>Inside table</td></tr></table>
158186
<hr />
159187
<p>delta parameter (<span style='font-family:Symbol'>d</span>)</p>

examples/Demo/Resources/NumberingList.htm

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,30 @@
7878
</li>
7979
<li>four</li>
8080
</ol>
81+
82+
<ol style="list-style-type: upper-greek">
83+
<li>one</li>
84+
<li>
85+
two
86+
<ol style="list-style-type: lower-greek">
87+
<li>two.one</li>
88+
<li>two.two</li>
89+
<li>two.three</li>
90+
</ol>
91+
</li>
92+
93+
<li>
94+
three
95+
<ol style="list-style-type: lower-greek">
96+
<li>three.one</li>
97+
<li>
98+
three.two
99+
<ol>
100+
<li>three.two.one</li>
101+
<li>three.two.two</li>
102+
</ol>
103+
</li>
104+
</ol>
105+
</li>
106+
<li>four</li>
107+
</ol>

src/Html2OpenXml/Expressions/Numbering/ListExpression.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ readonly struct ListContext(string listName, int absNumId, int instanceId, int l
4040
private static readonly HashSet<string> supportedListTypes =
4141
["disc", "decimal", "square", "circle",
4242
"lower-alpha", "upper-alpha", "lower-latin", "upper-latin",
43+
"lower-greek", "upper-greek",
4344
"lower-roman", "upper-roman",
4445
"decimal-tiered" /* not W3C compliant */];
4546
private ParagraphStyleId? listParagraphStyleId;
@@ -243,6 +244,7 @@ private static string GetListName(IElement listNode, string? parentName = null)
243244
"A" => "upper-alpha",
244245
"i" => "lower-roman",
245246
"I" => "upper-roman",
247+
"lower-greek" or "upper-greek" => type,
246248
_ => null
247249
};
248250

test/HtmlToOpenXml.Tests/NumberingTests.cs

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using NUnit.Framework;
1+
using NUnit.Framework;
22
using DocumentFormat.OpenXml.Wordprocessing;
33
using DocumentFormat.OpenXml.Packaging;
44

@@ -649,5 +649,57 @@ public void NestedTable_ReturnsAlignedTable()
649649
Assert.That(Convert.ToInt32(tableProperties.TableWidth.Width.Value), Is.GreaterThan(0).And.LessThan(5000));
650650
}
651651
}
652+
653+
[Test]
654+
public async Task LowerGreekList_ReturnsListWithGreekNumbering()
655+
{
656+
await converter.ParseBody(@"
657+
<ol style='list-style-type: lower-greek'>
658+
<li>Item 1</li>
659+
<li>Item 2</li>
660+
</ol>"
661+
);
662+
663+
var elements = mainPart.Document!.Body!.Elements<Paragraph>().ToList();
664+
Assert.That(elements, Has.Count.EqualTo(2));
665+
666+
var numbering = mainPart.NumberingDefinitionsPart!.Numbering!;
667+
var absNum = numbering.Elements<AbstractNum>().SingleOrDefault();
668+
669+
Assert.That(absNum, Is.Not.Null);
670+
Assert.That(absNum.AbstractNumDefinitionName?.Val?.Value, Is.EqualTo("lower-greek"));
671+
672+
var level = absNum.Elements<Level>().First();
673+
674+
using (Assert.EnterMultipleScope())
675+
{
676+
Assert.That(level.NumberingFormat?.Val?.Value, Is.EqualTo(NumberFormatValues.LowerLetter));
677+
Assert.That(level.LevelText?.Val?.Value, Is.EqualTo("%1."));
678+
}
679+
}
680+
681+
[Test]
682+
public async Task UpperGreekList_ReturnsListWithGreekNumbering()
683+
{
684+
await converter.ParseBody(@"
685+
<ol style='list-style-type: upper-greek'>
686+
<li>Item 1</li>
687+
</ol>"
688+
);
689+
690+
var numbering = mainPart.NumberingDefinitionsPart!.Numbering!;
691+
var absNum = numbering.Elements<AbstractNum>().SingleOrDefault();
692+
693+
Assert.That(absNum, Is.Not.Null);
694+
Assert.That(absNum.AbstractNumDefinitionName?.Val?.Value, Is.EqualTo("upper-greek"));
695+
696+
var level = absNum.Elements<Level>().First();
697+
698+
using (Assert.EnterMultipleScope())
699+
{
700+
Assert.That(level.NumberingFormat?.Val?.Value, Is.EqualTo(NumberFormatValues.UpperLetter));
701+
Assert.That(level.LevelText?.Val?.Value, Is.EqualTo("%1."));
702+
}
703+
}
652704
}
653-
}
705+
}

0 commit comments

Comments
 (0)