Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion ooxml/XWPF/Usermodel/XWPFAbstractNum.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class XWPFAbstractNum
private CT_AbstractNum ctAbstractNum;
protected XWPFNumbering numbering;

protected XWPFAbstractNum()
internal XWPFAbstractNum()
{
this.ctAbstractNum = null;
this.numbering = null;
Expand Down Expand Up @@ -116,6 +116,11 @@ internal void SetLevelTentative(int lvl, bool tentative)
else
this.ctAbstractNum.lvl[lvl].tentative = ST_OnOff.off;
}

internal void SetCTAbstractNum(CT_AbstractNum ctAbstractNum)
{
this.ctAbstractNum=ctAbstractNum;
}
}
/// <summary>
/// Numbering Definition Type
Expand Down
21 changes: 19 additions & 2 deletions ooxml/XWPF/Usermodel/XWPFNumbering.cs
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,14 @@ public XWPFAbstractNum GetAbstractNum(string abstractNumID){
}
return null;
}
public List<XWPFAbstractNum> GetAbstractNums()
{
return abstractNums;
}
public List<XWPFNum> GetNums()
{
return nums;
}
/**
* Compare AbstractNum with abstractNums of this numbering document.
* If the content of abstractNum Equals with an abstractNum of the List in numbering
Expand Down Expand Up @@ -273,13 +281,22 @@ public string AddAbstractNum(XWPFAbstractNum abstractNum)
}
else
{
ctNumbering.AddNewAbstractNum();
abstractNum.GetAbstractNum().abstractNumId = pos.ToString();
abstractNum.SetCTAbstractNum(ctNumbering.AddNewAbstractNum());
abstractNum.GetAbstractNum().abstractNumId = FindNextAbstractNumberingId().ToString();
ctNumbering.SetAbstractNumArray(pos, abstractNum.GetAbstractNum());
}
abstractNums.Add(abstractNum);
return abstractNum.GetAbstractNum().abstractNumId;
}
private long FindNextAbstractNumberingId()
{
long maxId = 0;
foreach(XWPFAbstractNum num in abstractNums)
{
maxId = Math.Max(maxId, long.Parse(num.GetAbstractNum().abstractNumId));
}
return maxId + 1;
}
/// <summary>
/// Add a new AbstractNum
/// </summary>
Expand Down
52 changes: 52 additions & 0 deletions testcases/ooxml/XWPF/UserModel/TestXWPFNumbering.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ namespace TestCases.XWPF.UserModel
using NPOI.OpenXmlFormats.Wordprocessing;
using NPOI.XWPF.UserModel;
using NUnit.Framework;using NUnit.Framework.Legacy;
using System;
using System.Linq;

[TestFixture]
public class TestXWPFNumbering
Expand Down Expand Up @@ -110,6 +112,56 @@ public void TestOverrideList()
CT_NumLvl ctNumLvl = ctNum.GetLvlOverrideArray(0);
ClassicAssert.AreEqual("upperLetter", ctNumLvl.lvl.numFmt.val.ToString());
}
[Test]
public void TestAddAbstractNum()
{
using(XWPFDocument doc = XWPFTestDataSamples.OpenSampleDocument("NumberingWithOutOfOrderId.docx"))
{
doc.GetNumbering().AddAbstractNum(new XWPFAbstractNum());
var count = doc.GetNumbering()
.GetAbstractNums().Select(e=>Int32.Parse(e.GetCTAbstractNum().abstractNumId)).Distinct().Count();
ClassicAssert.AreEqual(doc.GetNumbering().GetAbstractNums().Count, count);
}
}
[Test]
public void testAddAbstractNumIfAbstractNumNotEqualNull()
{
string abstractNumId = "1";
XWPFDocument docOut = new XWPFDocument();
XWPFNumbering numbering = docOut.CreateNumbering();

var cTAbstractNum = new CT_AbstractNum();
// must set the AbstractNumId, Otherwise fail
cTAbstractNum.abstractNumId = abstractNumId;
XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);
abstractNumId = numbering.AddAbstractNum(abstractNum);
var numId = numbering.AddNum(abstractNumId);

XWPFDocument docIn = XWPFTestDataSamples.WriteOutAndReadBack(docOut);

numbering = docIn.GetNumbering();
XWPFNum num = numbering.GetNum(numId);
var compareAbstractNum = num.GetCTNum().abstractNumId.val;
ClassicAssert.AreEqual(abstractNumId, compareAbstractNum);
}

[Test]
public void testAddAbstractNumIfAbstractNumEqualNull()
{
XWPFDocument docOut = new XWPFDocument();
XWPFNumbering numbering = docOut.CreateNumbering();

XWPFAbstractNum abstractNum = new XWPFAbstractNum();
var abstractNumId = numbering.AddAbstractNum(abstractNum);
var numId = numbering.AddNum(abstractNumId);

XWPFDocument docIn = XWPFTestDataSamples.WriteOutAndReadBack(docOut);

numbering = docIn.GetNumbering();
XWPFNum num = numbering.GetNum(numId);

var compareAbstractNum = num.GetCTNum().abstractNumId.val;
ClassicAssert.AreEqual(abstractNumId, compareAbstractNum);
}
}
}
Binary file not shown.
Loading