Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

222 lines
4.9 KiB
C++

#include "TblCell.h"
#include "CtrlCharacter.h"
#include "../Common/NodeNames.h"
namespace HWP
{
CTblCell::CTblCell(int nSize, CHWPStream& oBuffer, int nOff, int nVersion)
: m_nSize(nSize)
{
oBuffer.SavePosition();
oBuffer.Skip(2);
oBuffer.ReadShort(m_shColAddr);
oBuffer.ReadShort(m_shRowAddr);
oBuffer.ReadShort(m_shColSpan);
oBuffer.ReadShort(m_shRowSpan);
oBuffer.ReadInt(m_nWidth);
oBuffer.ReadInt(m_nHeight);
for (unsigned int unIndex = 0; unIndex < 4; ++unIndex)
m_arMargin[unIndex] = oBuffer.ReadShort();
oBuffer.ReadShort(m_shBorderFill);
oBuffer.Skip(nSize - oBuffer.GetDistanceToLastPos(true));
}
CTblCell::CTblCell(CXMLReader& oReader, EHanType eType)
{
switch (eType)
{
case EHanType::HWPX: ReadFromHWPX(oReader); return;
case EHanType::HWPML: ReadFromHWPML(oReader); return;
default: break;
}
}
void CTblCell::ReadFromHWPX(CXMLReader &oReader)
{
m_shBorderFill = oReader.GetAttributeInt("borderFillIDRef");
WHILE_READ_NEXT_NODE_WITH_NAME(oReader)
{
if ("hp:cellAddr" == sNodeName)
{
START_READ_ATTRIBUTES(oReader)
{
if ("colAddr" == sAttributeName)
m_shColAddr = oReader.GetInt();
else if ("rowAddr" == sAttributeName)
m_shRowAddr = oReader.GetInt();
}
END_READ_ATTRIBUTES(oReader)
}
else if ("hp:cellSpan" == sNodeName)
{
START_READ_ATTRIBUTES(oReader)
{
if ("colSpan" == sAttributeName)
m_shColSpan = oReader.GetInt();
else if ("rowSpan" == sAttributeName)
m_shRowSpan = oReader.GetInt();
}
END_READ_ATTRIBUTES(oReader)
}
else if ("hp:cellSz" == sNodeName)
{
START_READ_ATTRIBUTES(oReader)
{
if ("width" == sAttributeName)
m_nWidth = oReader.GetInt();
else if ("height" == sAttributeName)
m_nHeight = oReader.GetInt();
}
END_READ_ATTRIBUTES(oReader)
}
else if ("hp:cellSz" == sNodeName)
ReadCellMargin(oReader, EHanType::HWPX);
else if ("hp:subList" == sNodeName)
{
m_eVertAlign = ::HWP::GetVertAlign(oReader.GetAttributeA("vertAlign"), EHanType::HWPX);
WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "hp:p")
ReadCell(oReader, EHanType::HWPX);
END_WHILE
}
}
END_WHILE
}
void CTblCell::ReadFromHWPML(CXMLReader &oReader)
{
START_READ_ATTRIBUTES(oReader)
{
if ("Name" == sAttributeName)
m_sMergedColName = oReader.GetText();
else if ("ColAddr" == sAttributeName)
m_shColAddr = oReader.GetInt();
else if ("RowAddr" == sAttributeName)
m_shRowAddr = oReader.GetInt();
else if ("ColSpan" == sAttributeName)
m_shColSpan = oReader.GetInt();
else if ("RowSpan" == sAttributeName)
m_shRowSpan = oReader.GetInt();
else if ("Width" == sAttributeName)
m_nWidth = oReader.GetInt();
else if ("Height" == sAttributeName)
m_nHeight = oReader.GetInt();
else if ("BorderFill" == sAttributeName)
m_shBorderFill = oReader.GetInt();
}
END_READ_ATTRIBUTES(oReader)
WHILE_READ_NEXT_NODE_WITH_NAME(oReader)
{
if ("CELLMARGIN" == sNodeName)
ReadCellMargin(oReader, EHanType::HWPML);
else if ("PARALIST" == sNodeName)
{
m_eVertAlign = ::HWP::GetVertAlign(oReader.GetAttributeA("VertAlign"), EHanType::HWPML);
WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "P")
ReadCell(oReader, EHanType::HWPML);
END_WHILE
}
}
END_WHILE
}
void CTblCell::ReadCellMargin(CXMLReader &oReader, EHanType eType)
{
START_READ_ATTRIBUTES(oReader)
{
if (GetAttributeName(EAttribute::Left, eType) == sAttributeName)
m_arMargin[0] = oReader.GetInt();
else if (GetAttributeName(EAttribute::Right, eType) == sAttributeName)
m_arMargin[1] = oReader.GetInt();
else if (GetAttributeName(EAttribute::Top, eType) == sAttributeName)
m_arMargin[2] = oReader.GetInt();
else if (GetAttributeName(EAttribute::Bottom, eType) == sAttributeName)
m_arMargin[3] = oReader.GetInt();
}
END_READ_ATTRIBUTES(oReader)
}
void HWP::CTblCell::ReadCell(CXMLReader &oReader, EHanType eType)
{
CCellParagraph *pCellParagraphs = new CCellParagraph(oReader, eType);
if (nullptr == pCellParagraphs)
return;
if (ECtrlObjectType::Character != pCellParagraphs->GetCtrls().back()->GetCtrlType())
pCellParagraphs->AddCtrl(new CCtrlCharacter(L" _", ECtrlCharType::PARAGRAPH_BREAK));
m_arParas.push_back(pCellParagraphs);
}
void CTblCell::SetVertAlign(EVertAlign eVertAlign)
{
m_eVertAlign = eVertAlign;
}
void CTblCell::AddParagraph(CCellParagraph* pParagraph)
{
m_arParas.push_back(pParagraph);
}
int CTblCell::GetSize()
{
return m_nSize;
}
short CTblCell::GetColAddr() const
{
return m_shColAddr;
}
short CTblCell::GetRowAddr() const
{
return m_shRowAddr;
}
short CTblCell::GetColSpan() const
{
return m_shColSpan;
}
short CTblCell::GetRowSpan() const
{
return m_shRowSpan;
}
VECTOR<CCellParagraph*> CTblCell::GetParagraphs() const
{
return m_arParas;
}
int CTblCell::GetWidth() const
{
return m_nWidth;
}
int CTblCell::GetHeight() const
{
return m_nHeight;
}
EVertAlign CTblCell::GetVertAlign() const
{
return m_eVertAlign;
}
short CTblCell::GetBorderFillID() const
{
return m_shBorderFill;
}
}