diff --git a/examples/Demo/Resources/CompleteRunTest.html b/examples/Demo/Resources/CompleteRunTest.html
index 9c98726a..10072ce0 100644
--- a/examples/Demo/Resources/CompleteRunTest.html
+++ b/examples/Demo/Resources/CompleteRunTest.html
@@ -154,6 +154,34 @@
Heading 5
Wine
+ An Ordered List with Greek numbering:
+
+ - alpha
+ -
+ beta
+
+ - two.one
+ - two.two
+ - two.three
+
+
+
+ -
+ three
+
+ - three.one
+ -
+ three.two
+
+ - three.two.one
+ - three.two.two
+
+
+
+
+ - four
+
+
delta parameter (d)
diff --git a/examples/Demo/Resources/NumberingList.htm b/examples/Demo/Resources/NumberingList.htm
index e55b3202..c8d064f4 100644
--- a/examples/Demo/Resources/NumberingList.htm
+++ b/examples/Demo/Resources/NumberingList.htm
@@ -78,3 +78,30 @@
four
+
+
+ - one
+ -
+ two
+
+ - two.one
+ - two.two
+ - two.three
+
+
+
+ -
+ three
+
+ - three.one
+ -
+ three.two
+
+ - three.two.one
+ - three.two.two
+
+
+
+
+ - four
+
diff --git a/src/Html2OpenXml/Expressions/Numbering/ListExpression.cs b/src/Html2OpenXml/Expressions/Numbering/ListExpression.cs
index 53f006e0..2839e2b4 100644
--- a/src/Html2OpenXml/Expressions/Numbering/ListExpression.cs
+++ b/src/Html2OpenXml/Expressions/Numbering/ListExpression.cs
@@ -40,6 +40,7 @@ readonly struct ListContext(string listName, int absNumId, int instanceId, int l
private static readonly HashSet supportedListTypes =
["disc", "decimal", "square", "circle",
"lower-alpha", "upper-alpha", "lower-latin", "upper-latin",
+ "lower-greek", "upper-greek",
"lower-roman", "upper-roman",
"decimal-tiered" /* not W3C compliant */];
private ParagraphStyleId? listParagraphStyleId;
@@ -243,6 +244,7 @@ private static string GetListName(IElement listNode, string? parentName = null)
"A" => "upper-alpha",
"i" => "lower-roman",
"I" => "upper-roman",
+ "lower-greek" or "upper-greek" => type,
_ => null
};
diff --git a/test/HtmlToOpenXml.Tests/NumberingTests.cs b/test/HtmlToOpenXml.Tests/NumberingTests.cs
index 06225f68..faa0108d 100644
--- a/test/HtmlToOpenXml.Tests/NumberingTests.cs
+++ b/test/HtmlToOpenXml.Tests/NumberingTests.cs
@@ -1,4 +1,4 @@
-using NUnit.Framework;
+using NUnit.Framework;
using DocumentFormat.OpenXml.Wordprocessing;
using DocumentFormat.OpenXml.Packaging;
@@ -649,5 +649,57 @@ public void NestedTable_ReturnsAlignedTable()
Assert.That(Convert.ToInt32(tableProperties.TableWidth.Width.Value), Is.GreaterThan(0).And.LessThan(5000));
}
}
+
+ [Test]
+ public async Task LowerGreekList_ReturnsListWithGreekNumbering()
+ {
+ await converter.ParseBody(@"
+
+ - Item 1
+ - Item 2
+
"
+ );
+
+ var elements = mainPart.Document!.Body!.Elements().ToList();
+ Assert.That(elements, Has.Count.EqualTo(2));
+
+ var numbering = mainPart.NumberingDefinitionsPart!.Numbering!;
+ var absNum = numbering.Elements().SingleOrDefault();
+
+ Assert.That(absNum, Is.Not.Null);
+ Assert.That(absNum.AbstractNumDefinitionName?.Val?.Value, Is.EqualTo("lower-greek"));
+
+ var level = absNum.Elements().First();
+
+ using (Assert.EnterMultipleScope())
+ {
+ Assert.That(level.NumberingFormat?.Val?.Value, Is.EqualTo(NumberFormatValues.LowerLetter));
+ Assert.That(level.LevelText?.Val?.Value, Is.EqualTo("%1."));
+ }
+ }
+
+ [Test]
+ public async Task UpperGreekList_ReturnsListWithGreekNumbering()
+ {
+ await converter.ParseBody(@"
+
+ - Item 1
+
"
+ );
+
+ var numbering = mainPart.NumberingDefinitionsPart!.Numbering!;
+ var absNum = numbering.Elements().SingleOrDefault();
+
+ Assert.That(absNum, Is.Not.Null);
+ Assert.That(absNum.AbstractNumDefinitionName?.Val?.Value, Is.EqualTo("upper-greek"));
+
+ var level = absNum.Elements().First();
+
+ using (Assert.EnterMultipleScope())
+ {
+ Assert.That(level.NumberingFormat?.Val?.Value, Is.EqualTo(NumberFormatValues.UpperLetter));
+ Assert.That(level.LevelText?.Val?.Value, Is.EqualTo("%1."));
+ }
+ }
}
-}
\ No newline at end of file
+}