mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
Fix bugs in HWPX/HWPML conversion
This commit is contained in:
@ -121,6 +121,15 @@ enum class ENode
|
|||||||
Script,
|
Script,
|
||||||
Point,
|
Point,
|
||||||
Segment,
|
Segment,
|
||||||
|
StartNumber,
|
||||||
|
Hide,
|
||||||
|
PagePropertie,
|
||||||
|
PageMargin,
|
||||||
|
FootNotePropertie,
|
||||||
|
EndNotePropertie,
|
||||||
|
PageBorderFill,
|
||||||
|
PageOffset,
|
||||||
|
MasterPage,
|
||||||
|
|
||||||
//Only hwpx
|
//Only hwpx
|
||||||
Lineseg,
|
Lineseg,
|
||||||
@ -134,7 +143,7 @@ enum class ENode
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_TYPES 2
|
#define MAX_TYPES 2
|
||||||
#define MAX_NODES 117
|
#define MAX_NODES 126
|
||||||
|
|
||||||
static constexpr const char* NODE_NAMES[MAX_TYPES][MAX_NODES] =
|
static constexpr const char* NODE_NAMES[MAX_TYPES][MAX_NODES] =
|
||||||
{
|
{
|
||||||
@ -160,7 +169,7 @@ static constexpr const char* NODE_NAMES[MAX_TYPES][MAX_NODES] =
|
|||||||
"hc:color",
|
"hc:color",
|
||||||
"hc:imgBrush",
|
"hc:imgBrush",
|
||||||
"hc:img",
|
"hc:img",
|
||||||
"h:charProperties", //20
|
"hh:charProperties", //20
|
||||||
"hh:charPr",
|
"hh:charPr",
|
||||||
"hh:fontRef",
|
"hh:fontRef",
|
||||||
"hh:ratio",
|
"hh:ratio",
|
||||||
@ -253,6 +262,15 @@ static constexpr const char* NODE_NAMES[MAX_TYPES][MAX_NODES] =
|
|||||||
"hp:script",
|
"hp:script",
|
||||||
"hc:pt",
|
"hc:pt",
|
||||||
"hp:seg",
|
"hp:seg",
|
||||||
|
"hp:startNum",
|
||||||
|
"hp:visibility",
|
||||||
|
"hp:pagePr",
|
||||||
|
"hp:margin",
|
||||||
|
"hp:footNotePr",
|
||||||
|
"hp:endNotePr",
|
||||||
|
"hp:pageBorderFill",
|
||||||
|
"hp:offset",
|
||||||
|
"hp:masterPage",
|
||||||
|
|
||||||
"hp:lineseg",
|
"hp:lineseg",
|
||||||
"hp:linesegarray",
|
"hp:linesegarray",
|
||||||
@ -377,6 +395,15 @@ static constexpr const char* NODE_NAMES[MAX_TYPES][MAX_NODES] =
|
|||||||
"SCRIPT",
|
"SCRIPT",
|
||||||
"POINT",
|
"POINT",
|
||||||
"SEGMENT",
|
"SEGMENT",
|
||||||
|
"STARTNUMBER",
|
||||||
|
"HIDE",
|
||||||
|
"PAGEDEF",
|
||||||
|
"PAGEMARGIN",
|
||||||
|
"FOOTNOTESHAPE",
|
||||||
|
"ENDNOTESHAPE",
|
||||||
|
"PAGEBORDERFILL",
|
||||||
|
"PAGEOFFSET",
|
||||||
|
"MASTERPAGE",
|
||||||
|
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -586,12 +613,37 @@ enum class EAttribute
|
|||||||
TextShape,
|
TextShape,
|
||||||
Spacing,
|
Spacing,
|
||||||
Style,
|
Style,
|
||||||
|
TextDirection,
|
||||||
|
SpaceColumns,
|
||||||
|
TabStop,
|
||||||
|
OutlineShapeId,
|
||||||
|
PageStartsOn,
|
||||||
|
Page,
|
||||||
|
Figure,
|
||||||
|
Table,
|
||||||
|
Equation,
|
||||||
|
HideHeader,
|
||||||
|
HideFooter,
|
||||||
|
HideMasterPage,
|
||||||
|
HideBorder,
|
||||||
|
HideFill,
|
||||||
|
HidePageNumPos,
|
||||||
|
HideEmptyLine,
|
||||||
|
Landscape,
|
||||||
|
GutterType,
|
||||||
|
Header,
|
||||||
|
Footer,
|
||||||
|
Gutter,
|
||||||
|
TextBorder,
|
||||||
|
HeaderInside,
|
||||||
|
FooterInside,
|
||||||
|
FillArea,
|
||||||
|
|
||||||
PageBreak,
|
PageBreak,
|
||||||
ColumnBreak,
|
ColumnBreak,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_ATTRIBUTES 177
|
#define MAX_ATTRIBUTES 202
|
||||||
|
|
||||||
//TODO:: добавить все аргументы
|
//TODO:: добавить все аргументы
|
||||||
static constexpr const char* ATTRUBUTE_NAMES[MAX_TYPES][MAX_ATTRIBUTES] =
|
static constexpr const char* ATTRUBUTE_NAMES[MAX_TYPES][MAX_ATTRIBUTES] =
|
||||||
@ -773,9 +825,34 @@ static constexpr const char* ATTRUBUTE_NAMES[MAX_TYPES][MAX_ATTRIBUTES] =
|
|||||||
"textShape",
|
"textShape",
|
||||||
"spacing",
|
"spacing",
|
||||||
"style",
|
"style",
|
||||||
|
"textDirection",
|
||||||
|
"spaceColumns",
|
||||||
|
"tabStop",
|
||||||
|
"outlineShapeIDRef",
|
||||||
|
"pageStartsOn",
|
||||||
|
"page",
|
||||||
|
"pic",
|
||||||
|
"tbl",
|
||||||
|
"equation",
|
||||||
|
"hideFirstHeader",
|
||||||
|
"hideFirstFooter",
|
||||||
|
"hideFirstMasterPage",
|
||||||
|
"border",
|
||||||
|
"fill",
|
||||||
|
"hideFirstPageNum",
|
||||||
|
"hideFirstEmptyLine",
|
||||||
|
"landscape",
|
||||||
|
"gutterType",
|
||||||
|
"header",
|
||||||
|
"footer",
|
||||||
|
"gutter",
|
||||||
|
"textBorder",
|
||||||
|
"headerInside",
|
||||||
|
"footerInside",
|
||||||
|
"fillArea",
|
||||||
|
|
||||||
"pageBreak",
|
"pageBreak",
|
||||||
"columnBreak",
|
"columnBreak"
|
||||||
},
|
},
|
||||||
// HWPML
|
// HWPML
|
||||||
{
|
{
|
||||||
@ -954,6 +1031,31 @@ static constexpr const char* ATTRUBUTE_NAMES[MAX_TYPES][MAX_ATTRIBUTES] =
|
|||||||
"TextShape",
|
"TextShape",
|
||||||
"Spacing",
|
"Spacing",
|
||||||
"Style",
|
"Style",
|
||||||
|
"TextDirection",
|
||||||
|
"SpaceColumns",
|
||||||
|
"TabStop",
|
||||||
|
"OutlineShape",
|
||||||
|
"PageStartsOn",
|
||||||
|
"Page",
|
||||||
|
"Figure",
|
||||||
|
"Table",
|
||||||
|
"Equation",
|
||||||
|
"Header",
|
||||||
|
"Footer",
|
||||||
|
"MasterPage",
|
||||||
|
"Border",
|
||||||
|
"Fill",
|
||||||
|
"PageNumPos",
|
||||||
|
"EmptyLine",
|
||||||
|
"Landscape",
|
||||||
|
"GutterType",
|
||||||
|
"Header",
|
||||||
|
"Footer",
|
||||||
|
"Gutter",
|
||||||
|
"TextBorder",
|
||||||
|
"HeaderInside",
|
||||||
|
"FooterInside",
|
||||||
|
"FillArea",
|
||||||
|
|
||||||
"PageBreak",
|
"PageBreak",
|
||||||
"ColumnBreak"
|
"ColumnBreak"
|
||||||
@ -1093,10 +1195,16 @@ enum class EValue
|
|||||||
TopOuter,
|
TopOuter,
|
||||||
BottomOuter,
|
BottomOuter,
|
||||||
TopInner, //110
|
TopInner, //110
|
||||||
BottomInner
|
BottomInner,
|
||||||
|
Both,
|
||||||
|
Even,
|
||||||
|
Odd,
|
||||||
|
LeftRight,
|
||||||
|
TopBottom,
|
||||||
|
Border
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_VALUES 111
|
#define MAX_VALUES 117
|
||||||
|
|
||||||
static constexpr const char* VALUE_NAMES[MAX_TYPES][MAX_VALUES] =
|
static constexpr const char* VALUE_NAMES[MAX_TYPES][MAX_VALUES] =
|
||||||
{
|
{
|
||||||
@ -1212,7 +1320,13 @@ static constexpr const char* VALUE_NAMES[MAX_TYPES][MAX_VALUES] =
|
|||||||
"TOP_OUTER",
|
"TOP_OUTER",
|
||||||
"BOTTOM_OUTER",
|
"BOTTOM_OUTER",
|
||||||
"TOP_INNER",
|
"TOP_INNER",
|
||||||
"BOTTOM_INNER"
|
"BOTTOM_INNER",
|
||||||
|
"BOTH",
|
||||||
|
"EVEN",
|
||||||
|
"ODD",
|
||||||
|
"LEFT_RIGHT",
|
||||||
|
"TOP_BOTTOM",
|
||||||
|
"BORDER"
|
||||||
},
|
},
|
||||||
//HWPML
|
//HWPML
|
||||||
{
|
{
|
||||||
@ -1326,7 +1440,13 @@ static constexpr const char* VALUE_NAMES[MAX_TYPES][MAX_VALUES] =
|
|||||||
"TopOuter",
|
"TopOuter",
|
||||||
"BottomOuter",
|
"BottomOuter",
|
||||||
"TopInner",
|
"TopInner",
|
||||||
"BottomInner"
|
"BottomInner",
|
||||||
|
"Both",
|
||||||
|
"Even",
|
||||||
|
"Odd",
|
||||||
|
"LeftRight",
|
||||||
|
"TopBottom",
|
||||||
|
"Border"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -82,12 +82,14 @@ CCtrlObjElement::CCtrlObjElement(const HWP_STRING& sCtrlID, CXMLReader& oReader,
|
|||||||
|
|
||||||
void CCtrlObjElement::ParseChildren(CXMLReader& oReader, EHanType eType)
|
void CCtrlObjElement::ParseChildren(CXMLReader& oReader, EHanType eType)
|
||||||
{
|
{
|
||||||
switch (eType)
|
const std::string sNodeName{oReader.GetName()};
|
||||||
{
|
|
||||||
case EHanType::HWPML: ParseHWPMLElement(oReader); return;
|
if (EHanType::HWPML == eType && "SHAPECOMPONENT" == sNodeName)
|
||||||
case EHanType::HWPX: ParseHWPXChildren(oReader); return;
|
ParseHWPMLElement(oReader);
|
||||||
default: break;
|
else if (EHanType::HWPX == eType)
|
||||||
}
|
ParseHWPXChildren(oReader);
|
||||||
|
else
|
||||||
|
CCtrlCommon::ParseChildren(oReader, eType);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCtrlObjElement::ParseRotationInfo(CXMLReader &oReader, EHanType eType)
|
void CCtrlObjElement::ParseRotationInfo(CXMLReader &oReader, EHanType eType)
|
||||||
|
|||||||
@ -40,60 +40,69 @@ CCtrlSectionDef::CCtrlSectionDef(const HWP_STRING& sCtrlID, int nSize, CHWPStrea
|
|||||||
m_bFullFilled = true;
|
m_bFullFilled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CCtrlSectionDef::CCtrlSectionDef(const HWP_STRING& sCtrlID, CXMLReader& oReader)
|
CCtrlSectionDef::CCtrlSectionDef(const HWP_STRING& sCtrlID, CXMLReader& oReader, EHanType eType)
|
||||||
: CCtrl(sCtrlID), m_pPage(nullptr)
|
: CCtrl(sCtrlID), m_pPage(nullptr)
|
||||||
{
|
{
|
||||||
std::string sType;
|
std::string sType;
|
||||||
|
|
||||||
START_READ_ATTRIBUTES(oReader)
|
START_READ_ATTRIBUTES(oReader)
|
||||||
{
|
{
|
||||||
if ("textDirection" == sAttributeName)
|
if (GetAttributeName(EAttribute::TextDirection, eType) == sAttributeName)
|
||||||
{
|
{
|
||||||
sType = oReader.GetTextA();
|
if (EHanType::HWPX == eType)
|
||||||
|
{
|
||||||
|
sType = oReader.GetTextA();
|
||||||
|
|
||||||
if ("HORIZONTAL" == sType)
|
if ("HORIZONTAL" == sType)
|
||||||
m_chTextDirection = 0;
|
m_chTextDirection = 0;
|
||||||
else if ("VERTICAL" == sType)
|
else if ("VERTICAL" == sType)
|
||||||
m_chTextDirection = 1;
|
m_chTextDirection = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_chTextDirection = oReader.GetInt();
|
||||||
}
|
}
|
||||||
else if ("spaceColumns" == sAttributeName)
|
else if (GetAttributeName(EAttribute::SpaceColumns, eType) == sAttributeName)
|
||||||
m_shSpaceColumns = oReader.GetInt();
|
m_shSpaceColumns = oReader.GetInt();
|
||||||
else if ("tabStop" == sAttributeName)
|
else if (GetAttributeName(EAttribute::TabStop, eType) == sAttributeName)
|
||||||
m_nTabStop = oReader.GetInt();
|
m_nTabStop = oReader.GetInt();
|
||||||
else if ("outlineShapeIDRef" == sAttributeName)
|
else if (GetAttributeName(EAttribute::OutlineShapeId, eType) == sAttributeName)
|
||||||
m_nOutlineNumberingID = oReader.GetInt();
|
m_nOutlineNumberingID = oReader.GetInt();
|
||||||
|
else if (EHanType::HWPML == eType && "LineGrid" == sAttributeName)
|
||||||
|
m_shLineGrid = oReader.GetInt();
|
||||||
|
else if (EHanType::HWPML == eType && "CharGrid" == sAttributeName)
|
||||||
|
m_shCharGrid = oReader.GetInt();
|
||||||
}
|
}
|
||||||
END_READ_ATTRIBUTES(oReader)
|
END_READ_ATTRIBUTES(oReader)
|
||||||
|
|
||||||
WHILE_READ_NEXT_NODE_WITH_NAME(oReader)
|
WHILE_READ_NEXT_NODE_WITH_NAME(oReader)
|
||||||
{
|
{
|
||||||
if ("hp:startNum" == sNodeName)
|
if (GetNodeName(ENode::StartNumber, eType) == sNodeName)
|
||||||
{
|
{
|
||||||
START_READ_ATTRIBUTES(oReader)
|
START_READ_ATTRIBUTES(oReader)
|
||||||
{
|
{
|
||||||
if ("pageStartsOn" == sAttributeName)
|
if (GetAttributeName(EAttribute::PageStartsOn, eType) == sAttributeName)
|
||||||
{
|
{
|
||||||
sType = oReader.GetTextA();
|
sType = oReader.GetTextA();
|
||||||
|
|
||||||
if ("BOTH" == sType)
|
if (GetValueName(EValue::Both, eType) == sType)
|
||||||
m_chPageStartOn = 0;
|
m_chPageStartOn = 0;
|
||||||
else if ("EVEN" == sType)
|
else if (GetValueName(EValue::Even, eType) == sType)
|
||||||
m_chPageStartOn = 1;
|
m_chPageStartOn = 1;
|
||||||
else if ("ODD" == sType)
|
else if (GetValueName(EValue::Odd, eType) == sType)
|
||||||
m_chPageStartOn = 2;
|
m_chPageStartOn = 2;
|
||||||
}
|
}
|
||||||
else if ("page" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Page, eType) == sAttributeName)
|
||||||
m_shPageNum = oReader.GetInt();
|
m_shPageNum = oReader.GetInt();
|
||||||
else if ("pic" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Figure, eType) == sAttributeName)
|
||||||
m_shFigure = oReader.GetInt();
|
m_shFigure = oReader.GetInt();
|
||||||
else if ("tbl" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Table, eType) == sAttributeName)
|
||||||
m_shTable = oReader.GetInt();
|
m_shTable = oReader.GetInt();
|
||||||
else if ("equation" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Equation, eType) == sAttributeName)
|
||||||
m_shEquation = oReader.GetInt();
|
m_shEquation = oReader.GetInt();
|
||||||
}
|
}
|
||||||
END_READ_ATTRIBUTES(oReader)
|
END_READ_ATTRIBUTES(oReader)
|
||||||
}
|
}
|
||||||
else if ("hp:grid" == sNodeName)
|
else if (EHanType::HWPX == eType && "hp:grid" == sNodeName)
|
||||||
{
|
{
|
||||||
START_READ_ATTRIBUTES(oReader)
|
START_READ_ATTRIBUTES(oReader)
|
||||||
{
|
{
|
||||||
@ -104,71 +113,87 @@ CCtrlSectionDef::CCtrlSectionDef(const HWP_STRING& sCtrlID, CXMLReader& oReader)
|
|||||||
}
|
}
|
||||||
END_READ_ATTRIBUTES(oReader)
|
END_READ_ATTRIBUTES(oReader)
|
||||||
}
|
}
|
||||||
else if ("hp:visibility" == sNodeName)
|
else if (GetNodeName(ENode::Hide, eType) == sNodeName)
|
||||||
{
|
{
|
||||||
START_READ_ATTRIBUTES(oReader)
|
START_READ_ATTRIBUTES(oReader)
|
||||||
{
|
{
|
||||||
if ("hideFirstHeader" == sAttributeName)
|
if (GetAttributeName(EAttribute::HideHeader, eType) == sAttributeName)
|
||||||
m_bHideHeader = oReader.GetBool();
|
m_bHideHeader = oReader.GetBool();
|
||||||
else if ("hideFirstFooter" == sAttributeName)
|
else if (GetAttributeName(EAttribute::HideFooter, eType) == sAttributeName)
|
||||||
m_bHideFooter = oReader.GetBool();
|
m_bHideFooter = oReader.GetBool();
|
||||||
else if ("hideFirstMasterPage" == sAttributeName)
|
else if (GetAttributeName(EAttribute::HideMasterPage, eType) == sAttributeName)
|
||||||
m_bHideMasterPage = oReader.GetBool();
|
m_bHideMasterPage = oReader.GetBool();
|
||||||
else if ("border" == sAttributeName)
|
else if (GetAttributeName(EAttribute::HideBorder, eType) == sAttributeName)
|
||||||
{
|
{
|
||||||
sType = oReader.GetTextA();
|
if (EHanType::HWPX == eType)
|
||||||
|
{
|
||||||
|
sType = oReader.GetTextA();
|
||||||
|
|
||||||
if ("HIDE_FIRST" == sType)
|
if ("HIDE_FIRST" == sType)
|
||||||
{
|
{
|
||||||
m_bHideBorder = true;
|
m_bHideBorder = true;
|
||||||
m_bShowFirstBorder = false;
|
m_bShowFirstBorder = false;
|
||||||
|
}
|
||||||
|
else if ("SHOW_FIRST" == sType)
|
||||||
|
{
|
||||||
|
m_bHideBorder = true;
|
||||||
|
m_bShowFirstBorder = true;
|
||||||
|
}
|
||||||
|
else if ("SHOW_ALL" == sType)
|
||||||
|
{
|
||||||
|
m_bHideBorder = false;
|
||||||
|
m_bShowFirstBorder = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ("SHOW_FIRST" == sType)
|
else
|
||||||
{
|
{
|
||||||
m_bHideBorder = true;
|
m_bHideBorder = oReader.GetBool();
|
||||||
m_bShowFirstBorder = true;
|
m_bShowFirstBorder = m_bHideBorder;
|
||||||
}
|
|
||||||
else if ("SHOW_ALL" == sType)
|
|
||||||
{
|
|
||||||
m_bHideBorder = false;
|
|
||||||
m_bShowFirstBorder = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ("fill" == sAttributeName)
|
else if (GetAttributeName(EAttribute::HideFill, eType) == sAttributeName)
|
||||||
{
|
{
|
||||||
sType = oReader.GetTextA();
|
if (EHanType::HWPX == eType)
|
||||||
|
{
|
||||||
|
sType = oReader.GetTextA();
|
||||||
|
|
||||||
if ("HIDE_FIRST" == sType)
|
if ("HIDE_FIRST" == sType)
|
||||||
{
|
{
|
||||||
m_bHideFill = true;
|
m_bHideFill = true;
|
||||||
m_bShowFirstFill = false;
|
m_bShowFirstFill = false;
|
||||||
|
}
|
||||||
|
else if ("SHOW_FIRST" == sType)
|
||||||
|
{
|
||||||
|
m_bHideFill = true;
|
||||||
|
m_bShowFirstFill = true;
|
||||||
|
}
|
||||||
|
else if ("SHOW_ALL" == sType)
|
||||||
|
{
|
||||||
|
m_bHideFill = false;
|
||||||
|
m_bShowFirstFill = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ("SHOW_FIRST" == sType)
|
else
|
||||||
{
|
{
|
||||||
m_bHideFill = true;
|
m_bHideFill = oReader.GetBool();
|
||||||
m_bShowFirstFill = true;
|
m_bShowFirstFill = m_bHideBorder;
|
||||||
}
|
|
||||||
else if ("SHOW_ALL" == sType)
|
|
||||||
{
|
|
||||||
m_bHideFill = false;
|
|
||||||
m_bShowFirstFill = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ("hp:visibility" == sAttributeName)
|
else if (GetAttributeName(EAttribute::HidePageNumPos, eType) == sAttributeName)
|
||||||
m_bHidePageNumPos = oReader.GetBool();
|
m_bHidePageNumPos = oReader.GetBool();
|
||||||
else if ("hideFirstEmptyLine" == sAttributeName)
|
else if (GetAttributeName(EAttribute::HideEmptyLine, eType) == sAttributeName)
|
||||||
m_bHideEmptyLine = oReader.GetBool();
|
m_bHideEmptyLine = oReader.GetBool();
|
||||||
}
|
}
|
||||||
END_READ_ATTRIBUTES(oReader)
|
END_READ_ATTRIBUTES(oReader)
|
||||||
}
|
}
|
||||||
else if ("hp:pagePr" == sNodeName)
|
else if (GetNodeName(ENode::PagePropertie, eType) == sNodeName)
|
||||||
m_pPage = new CPage(oReader);
|
m_pPage = new CPage(oReader, eType);
|
||||||
else if ("hp:footNotePr" == sNodeName ||
|
else if (GetNodeName(ENode::FootNotePropertie, eType) == sNodeName ||
|
||||||
"hp:endNotePr" == sNodeName)
|
GetNodeName(ENode::EndNotePropertie, eType) == sNodeName)
|
||||||
m_arNoteShapes.push_back(new CNoteShape(oReader));
|
m_arNoteShapes.push_back(new CNoteShape(oReader, eType));
|
||||||
else if ("hp:pageBorderFill" == sNodeName)
|
else if (GetNodeName(ENode::PageBorderFill, eType) == sNodeName)
|
||||||
m_arBorderFills.push_back(new CPageBorderFill(oReader));
|
m_arBorderFills.push_back(new CPageBorderFill(oReader, eType));
|
||||||
else if ("hp:masterPage" == sNodeName)
|
else if (GetNodeName(ENode::MasterPage, eType) == sNodeName)
|
||||||
{
|
{
|
||||||
//TODO:: добавить реализацию
|
//TODO:: добавить реализацию
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,7 +45,7 @@ class CCtrlSectionDef : public CCtrl
|
|||||||
public:
|
public:
|
||||||
CCtrlSectionDef(const HWP_STRING& sCtrlID);
|
CCtrlSectionDef(const HWP_STRING& sCtrlID);
|
||||||
CCtrlSectionDef(const HWP_STRING& sCtrlID, int nSize, CHWPStream& oBuffer, int nOff, int nVersion);
|
CCtrlSectionDef(const HWP_STRING& sCtrlID, int nSize, CHWPStream& oBuffer, int nOff, int nVersion);
|
||||||
CCtrlSectionDef(const HWP_STRING& sCtrlID, CXMLReader& oReader);
|
CCtrlSectionDef(const HWP_STRING& sCtrlID, CXMLReader& oReader, EHanType eType);
|
||||||
~CCtrlSectionDef();
|
~CCtrlSectionDef();
|
||||||
|
|
||||||
ECtrlObjectType GetCtrlType() const override;
|
ECtrlObjectType GetCtrlType() const override;
|
||||||
|
|||||||
@ -96,7 +96,7 @@ bool CHWPPargraph::ParseHWPParagraph(CXMLReader& oReader, int nCharShapeID, EHan
|
|||||||
const std::string sNodeName{oReader.GetName()};
|
const std::string sNodeName{oReader.GetName()};
|
||||||
|
|
||||||
if (GetNodeName(ENode::SectionDef, eType) == sNodeName)
|
if (GetNodeName(ENode::SectionDef, eType) == sNodeName)
|
||||||
m_arP.push_back(new CCtrlSectionDef(L"dces", oReader));
|
m_arP.push_back(new CCtrlSectionDef(L"dces", oReader, eType));
|
||||||
else if (GetNodeName(ENode::Char, eType) == sNodeName)
|
else if (GetNodeName(ENode::Char, eType) == sNodeName)
|
||||||
{
|
{
|
||||||
if (oReader.IsEmptyNode())
|
if (oReader.IsEmptyNode())
|
||||||
|
|||||||
@ -17,8 +17,10 @@ ENoteNumbering GetNoteNumbering(int nValue)
|
|||||||
CNoteShape::CNoteShape()
|
CNoteShape::CNoteShape()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CNoteShape::CNoteShape(CXMLReader& oReader)
|
CNoteShape::CNoteShape(CXMLReader& oReader, EHanType eType)
|
||||||
{}
|
{
|
||||||
|
//TODO:: реализовать
|
||||||
|
}
|
||||||
|
|
||||||
CNoteShape* CNoteShape::Parse(int nLevel, int nSize, CHWPStream& oBuffer, int nOff, int nVersion)
|
CNoteShape* CNoteShape::Parse(int nLevel, int nSize, CHWPStream& oBuffer, int nOff, int nVersion)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -47,7 +47,7 @@ class CNoteShape
|
|||||||
int m_nNoteLineColor;
|
int m_nNoteLineColor;
|
||||||
public:
|
public:
|
||||||
CNoteShape();
|
CNoteShape();
|
||||||
CNoteShape(CXMLReader& oReader);
|
CNoteShape(CXMLReader& oReader, EHanType eType);
|
||||||
|
|
||||||
static CNoteShape* Parse(int nLevel, int nSize, CHWPStream& oBuffer, int nOff, int nVersion);
|
static CNoteShape* Parse(int nLevel, int nSize, CHWPStream& oBuffer, int nOff, int nVersion);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,51 +1,57 @@
|
|||||||
#include "Page.h"
|
#include "Page.h"
|
||||||
|
#include "../Common/NodeNames.h"
|
||||||
|
|
||||||
namespace HWP
|
namespace HWP
|
||||||
{
|
{
|
||||||
HWP::CPage::CPage()
|
HWP::CPage::CPage()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CPage::CPage(CXMLReader& oReader)
|
CPage::CPage(CXMLReader& oReader, EHanType eType)
|
||||||
{
|
{
|
||||||
START_READ_ATTRIBUTES(oReader)
|
START_READ_ATTRIBUTES(oReader)
|
||||||
{
|
{
|
||||||
if ("landscape" == sAttributeName)
|
if (GetAttributeName(EAttribute::Landscape, eType) == sAttributeName)
|
||||||
m_bLandscape = "NARROWLY" == oReader.GetTextA();
|
{
|
||||||
else if ("width" == sAttributeName)
|
if (EHanType::HWPX == eType)
|
||||||
|
m_bLandscape = "NARROWLY" == oReader.GetTextA();
|
||||||
|
else
|
||||||
|
m_bLandscape = oReader.GetBool();
|
||||||
|
}
|
||||||
|
else if (GetAttributeName(EAttribute::Width, eType) == sAttributeName)
|
||||||
m_nWidth = oReader.GetInt();
|
m_nWidth = oReader.GetInt();
|
||||||
else if ("height" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Height, eType) == sAttributeName)
|
||||||
m_nHeight = oReader.GetInt();
|
m_nHeight = oReader.GetInt();
|
||||||
else if ("gutterType" == sAttributeName)
|
else if (GetAttributeName(EAttribute::GutterType, eType) == sAttributeName)
|
||||||
{
|
{
|
||||||
const std::string sType{oReader.GetTextA()};
|
const std::string sType{oReader.GetTextA()};
|
||||||
|
|
||||||
if ("LEFT_ONELY" == sType)
|
if (GetValueName(EValue::LeftOnly, eType) == sType)
|
||||||
m_chGutterType = 0;
|
m_chGutterType = 0;
|
||||||
else if ("LEFT_RIGHT" == sType)
|
else if (GetValueName(EValue::LeftRight, eType) == sType)
|
||||||
m_chGutterType = 1;
|
m_chGutterType = 1;
|
||||||
else if ("TOP_BOTTOM" == sType)
|
else if (GetValueName(EValue::TopBottom, eType) == sType)
|
||||||
m_chGutterType = 2;
|
m_chGutterType = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
END_READ_ATTRIBUTES(oReader)
|
END_READ_ATTRIBUTES(oReader)
|
||||||
|
|
||||||
WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "hp:margin")
|
WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, GetNodeName(ENode::PageMargin, eType))
|
||||||
{
|
{
|
||||||
START_READ_ATTRIBUTES(oReader)
|
START_READ_ATTRIBUTES(oReader)
|
||||||
{
|
{
|
||||||
if ("left" == sAttributeName)
|
if (GetAttributeName(EAttribute::Left, eType) == sAttributeName)
|
||||||
m_nMarginLeft = oReader.GetInt();
|
m_nMarginLeft = oReader.GetInt();
|
||||||
else if ("right" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Right, eType) == sAttributeName)
|
||||||
m_nMarginRight = oReader.GetInt();
|
m_nMarginRight = oReader.GetInt();
|
||||||
else if ("top" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Top, eType) == sAttributeName)
|
||||||
m_nMarginTop = oReader.GetInt();
|
m_nMarginTop = oReader.GetInt();
|
||||||
else if ("bottom" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Bottom, eType) == sAttributeName)
|
||||||
m_nMarginBottom = oReader.GetInt();
|
m_nMarginBottom = oReader.GetInt();
|
||||||
else if ("header" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Header, eType) == sAttributeName)
|
||||||
m_nMarginHeader = oReader.GetInt();
|
m_nMarginHeader = oReader.GetInt();
|
||||||
else if ("footer" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Footer, eType) == sAttributeName)
|
||||||
m_nMarginFooter = oReader.GetInt();
|
m_nMarginFooter = oReader.GetInt();
|
||||||
else if ("gutter" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Gutter, eType) == sAttributeName)
|
||||||
m_nMarginGutter = oReader.GetInt();
|
m_nMarginGutter = oReader.GetInt();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
#ifndef PAGE_H
|
#ifndef PAGE_H
|
||||||
#define PAGE_H
|
#define PAGE_H
|
||||||
|
|
||||||
|
#include "../HanType.h"
|
||||||
#include "../HWPStream.h"
|
#include "../HWPStream.h"
|
||||||
#include "../Common/XMLReader.h"
|
#include "../Common/XMLReader.h"
|
||||||
|
|
||||||
@ -21,7 +22,7 @@ class CPage
|
|||||||
int m_nMarginGutter;
|
int m_nMarginGutter;
|
||||||
public:
|
public:
|
||||||
CPage();
|
CPage();
|
||||||
CPage(CXMLReader& oReader);
|
CPage(CXMLReader& oReader, EHanType eType);
|
||||||
|
|
||||||
int GetWidth() const;
|
int GetWidth() const;
|
||||||
int GetHeight() const;
|
int GetHeight() const;
|
||||||
|
|||||||
@ -1,47 +1,54 @@
|
|||||||
#include "PageBorderFill.h"
|
#include "PageBorderFill.h"
|
||||||
|
|
||||||
|
#include "../Common/NodeNames.h"
|
||||||
|
|
||||||
namespace HWP
|
namespace HWP
|
||||||
{
|
{
|
||||||
CPageBorderFill::CPageBorderFill()
|
CPageBorderFill::CPageBorderFill()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CPageBorderFill::CPageBorderFill(CXMLReader& oReader)
|
CPageBorderFill::CPageBorderFill(CXMLReader& oReader, EHanType eType)
|
||||||
{
|
{
|
||||||
START_READ_ATTRIBUTES(oReader)
|
START_READ_ATTRIBUTES(oReader)
|
||||||
{
|
{
|
||||||
if ("borderFillIDRef" == sAttributeName)
|
if (GetAttributeName(EAttribute::BorderFillId, eType) == sAttributeName)
|
||||||
m_shBorderFill = oReader.GetInt();
|
m_shBorderFill = oReader.GetInt();
|
||||||
else if ("textBorder" == sAttributeName)
|
else if (GetAttributeName(EAttribute::TextBorder, eType) == sAttributeName)
|
||||||
m_bTextBorder = "PAPER" == oReader.GetTextA();
|
{
|
||||||
else if ("headerInside" == sAttributeName)
|
if (EHanType::HWPX == eType)
|
||||||
|
m_bTextBorder = "PAPER" == oReader.GetTextA();
|
||||||
|
else
|
||||||
|
m_bTextBorder = oReader.GetBool();
|
||||||
|
}
|
||||||
|
else if (GetAttributeName(EAttribute::HeaderInside, eType) == sAttributeName)
|
||||||
m_bHeaderInside = oReader.GetBool();
|
m_bHeaderInside = oReader.GetBool();
|
||||||
else if ("footerInside" == sAttributeName)
|
else if (GetAttributeName(EAttribute::FooterInside, eType) == sAttributeName)
|
||||||
m_bFooterInside = oReader.GetBool();
|
m_bFooterInside = oReader.GetBool();
|
||||||
else if ("fillArea" == sAttributeName)
|
else if (GetAttributeName(EAttribute::FillArea, eType) == sAttributeName)
|
||||||
{
|
{
|
||||||
const std::string sType{oReader.GetTextA()};
|
const std::string sType{oReader.GetTextA()};
|
||||||
|
|
||||||
if ("PAPER" == sType)
|
if (GetValueName(EValue::Paper, eType) == sType)
|
||||||
m_chFillArea = 0;
|
m_chFillArea = 0;
|
||||||
else if ("PAGE" == sType)
|
else if (GetValueName(EValue::Page, eType) == sType)
|
||||||
m_chFillArea = 1;
|
m_chFillArea = 1;
|
||||||
else if ("BORDER" == sType)
|
else if (GetValueName(EValue::Border, eType) == sType)
|
||||||
m_chFillArea = 2;
|
m_chFillArea = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
END_READ_ATTRIBUTES(oReader)
|
END_READ_ATTRIBUTES(oReader)
|
||||||
|
|
||||||
WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, "offset")
|
WHILE_READ_NEXT_NODE_WITH_ONE_NAME(oReader, GetNodeName(ENode::PageOffset, eType))
|
||||||
{
|
{
|
||||||
START_READ_ATTRIBUTES(oReader)
|
START_READ_ATTRIBUTES(oReader)
|
||||||
{
|
{
|
||||||
if ("left" == sAttributeName)
|
if (GetAttributeName(EAttribute::Left, eType) == sAttributeName)
|
||||||
m_shOffsetLeft = oReader.GetInt();
|
m_shOffsetLeft = oReader.GetInt();
|
||||||
else if ("right" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Right, eType) == sAttributeName)
|
||||||
m_shOffsetRight = oReader.GetInt();
|
m_shOffsetRight = oReader.GetInt();
|
||||||
else if ("top" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Top, eType) == sAttributeName)
|
||||||
m_shOffsetTop = oReader.GetInt();
|
m_shOffsetTop = oReader.GetInt();
|
||||||
else if ("bottom" == sAttributeName)
|
else if (GetAttributeName(EAttribute::Bottom, eType) == sAttributeName)
|
||||||
m_shOffsetBottom = oReader.GetInt();
|
m_shOffsetBottom = oReader.GetInt();
|
||||||
}
|
}
|
||||||
END_READ_ATTRIBUTES(oReader)
|
END_READ_ATTRIBUTES(oReader)
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
#ifndef PAGEBORDERFILL_H
|
#ifndef PAGEBORDERFILL_H
|
||||||
#define PAGEBORDERFILL_H
|
#define PAGEBORDERFILL_H
|
||||||
|
|
||||||
|
#include "../HanType.h"
|
||||||
#include "../HWPStream.h"
|
#include "../HWPStream.h"
|
||||||
#include "../Common/XMLReader.h"
|
#include "../Common/XMLReader.h"
|
||||||
|
|
||||||
@ -19,7 +20,7 @@ class CPageBorderFill
|
|||||||
short m_shBorderFill;
|
short m_shBorderFill;
|
||||||
public:
|
public:
|
||||||
CPageBorderFill();
|
CPageBorderFill();
|
||||||
CPageBorderFill(CXMLReader& oReader);
|
CPageBorderFill(CXMLReader& oReader, EHanType eType);
|
||||||
|
|
||||||
static CPageBorderFill* Parse(int nLevel, int nSize, CHWPStream& oBuffer, int nOff, int nVersion);
|
static CPageBorderFill* Parse(int nLevel, int nSize, CHWPStream& oBuffer, int nOff, int nVersion);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user