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:

    +
      +
    1. alpha
    2. +
    3. + beta +
        +
      1. two.one
      2. +
      3. two.two
      4. +
      5. two.three
      6. +
      +
    4. + +
    5. + three +
        +
      1. three.one
      2. +
      3. + three.two +
          +
        1. three.two.one
        2. +
        3. three.two.two
        4. +
        +
      4. +
      +
    6. +
    7. four
    8. +
    +
    Inside table

    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
  • + +
      +
    1. one
    2. +
    3. + two +
        +
      1. two.one
      2. +
      3. two.two
      4. +
      5. two.three
      6. +
      +
    4. + +
    5. + three +
        +
      1. three.one
      2. +
      3. + three.two +
          +
        1. three.two.one
        2. +
        3. three.two.two
        4. +
        +
      4. +
      +
    6. +
    7. four
    8. +
    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(@" +
      +
    1. Item 1
    2. +
    3. Item 2
    4. +
    " + ); + + 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(@" +
      +
    1. Item 1
    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("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 +}