summaryrefslogtreecommitdiffstats
path: root/hwpfilter/source/hwpreader.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'hwpfilter/source/hwpreader.cxx')
-rw-r--r--hwpfilter/source/hwpreader.cxx3366
1 files changed, 1646 insertions, 1720 deletions
diff --git a/hwpfilter/source/hwpreader.cxx b/hwpfilter/source/hwpreader.cxx
index e26cbb26143a..2400192bb959 100644
--- a/hwpfilter/source/hwpreader.cxx
+++ b/hwpfilter/source/hwpreader.cxx
@@ -25,9 +25,12 @@
#include <cmath>
#include <o3tl/safeint.hxx>
+#include <o3tl/sprintf.hxx>
#include <osl/diagnose.h>
#include <tools/stream.hxx>
#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <comphelper/configuration.hxx>
#include "fontmap.hxx"
#include "formula.h"
@@ -37,55 +40,23 @@
#include <iostream>
#include <locale.h>
#include <sal/types.h>
+#include <rtl/character.hxx>
#include <rtl/ustrbuf.hxx>
-
-// To be shorten source code by realking
-#define hconv(x) hstr2ucsstr(x).c_str()
-#define ascii(x) OUString::createFromAscii(x)
-#define rstartEl(x,y) do { if (m_rxDocumentHandler.is()) m_rxDocumentHandler->startElement(x,y); } while(false)
-#define rendEl(x) do { if (m_rxDocumentHandler.is()) m_rxDocumentHandler->endElement(x); } while(false)
-#define rchars(x) do { if (m_rxDocumentHandler.is()) m_rxDocumentHandler->characters(x); } while(false)
-#define padd(x,y,z) mxList->addAttribute(x,y,z)
-#define Double2Str(x) OUString::number(x)
-#define WTI(x) (static_cast<double>(x) / 1800.) // unit => inch
-#define WTMM(x) (static_cast<double>(x) / 1800. * 25.4) // unit => mm
-#define WTSM(x) (static_cast<int>((x) / 1800. * 2540)) // unit ==> 1/100 mm
+#include <sal/log.hxx>
// xmloff/xmlkyd.hxx
-constexpr OUStringLiteral sXML_CDATA = u"CDATA";
-
-#define STARTP padd( "text:style-name", "CDATA", ascii(getPStyleName((para->GetParaShape()).index,buf))); \
- rstartEl( "text:p",mxList ); \
- mxList->clear(); \
- pstart = true
-#define STARTT \
- curr = para->GetCharShape(n > 0 ? n-1 : 0)->index; \
- padd( "text:style-name", "CDATA" , ascii( getTStyleName(curr, buf) ) ); \
- rstartEl( "text:span",mxList ); \
- mxList->clear(); \
- tstart = true
-#define ENDP \
- rendEl("text:p"); \
- pstart = false
-#define ENDT \
- rendEl("text:span"); \
- tstart = false
-
-static hchar *field = nullptr;
-static char buf[1024];
+constexpr OUString sXML_CDATA = u"CDATA"_ustr;
namespace
{
-
-template<typename T>
-struct Free
-{
- void operator()(T* const ptr)
- {
- free(ptr);
- }
-};
-
+double WTI(double x) { return x / 1800.; } // unit => inch
+double WTMM(double x) { return x / 1800. * 25.4; } // unit => mm
+int WTSM(double x) { return x / 1800. * 2540; } // unit ==> 1/100 mm
+
+constexpr OUString sBeginOfDoc(u"[\uBB38\uC11C\uC758 \uCC98\uC74C]"_ustr);
+ // U+BB38 HANGUL SYLLABLE MUN, U+C11C HANGUL SYLLABLE SEO,
+ // U+C758 HANGUL SYLLABLE YI, U+CC98 HANGUL SYLLABLE CEO,
+ // U+C74C HANGUL SYLLABLE EUM: "Begin of Document"
}
struct HwpReaderPrivate
@@ -97,13 +68,15 @@ struct HwpReaderPrivate
bInHeader = false;
nPnPos = 0;
pPn = nullptr;
-
+ pField = nullptr;
}
bool bFirstPara;
bool bInBody;
bool bInHeader;
ShowPageNum *pPn;
+ hchar *pField;
int nPnPos;
+ char buf[1024];
};
HwpReader::HwpReader() : mxList(new AttributeListImpl), d(new HwpReaderPrivate)
@@ -130,14 +103,56 @@ extern "C" SAL_DLLPUBLIC_EXPORT bool TestImportHWP(SvStream &rStream)
stream->addData(aData, static_cast<int>(nRead));
}
- HWPFile hwpfile;
- if (hwpfile.ReadHwpFile(std::move(stream)))
- return false;
+ rtl::Reference<HwpReader> hwpreader(new HwpReader);
+ return hwpreader->importHStream(std::move(stream));
}
catch (...)
{
- return false;
}
+ return false;
+}
+
+bool HwpReader::importHStream(std::unique_ptr<HStream> stream)
+{
+ if (hwpfile.ReadHwpFile(std::move(stream)))
+ return false;
+
+ if (m_rxDocumentHandler.is())
+ m_rxDocumentHandler->startDocument();
+
+ mxList->addAttribute("office:class", sXML_CDATA, "text");
+ mxList->addAttribute("office:version", sXML_CDATA, "0.9");
+
+ mxList->addAttribute("xmlns:office", "CDATA", "http://openoffice.org/2000/office");
+ mxList->addAttribute("xmlns:style", "CDATA", "http://openoffice.org/2000/style");
+ mxList->addAttribute("xmlns:text", "CDATA", "http://openoffice.org/2000/text");
+ mxList->addAttribute("xmlns:table", "CDATA", "http://openoffice.org/2000/table");
+ mxList->addAttribute("xmlns:draw", "CDATA", "http://openoffice.org/2000/drawing");
+ mxList->addAttribute("xmlns:fo", "CDATA", "http://www.w3.org/1999/XSL/Format");
+ mxList->addAttribute("xmlns:xlink", "CDATA", "http://www.w3.org/1999/xlink");
+ mxList->addAttribute("xmlns:dc", "CDATA", "http://purl.org/dc/elements/1.1/");
+ mxList->addAttribute("xmlns:meta", "CDATA", "http://openoffice.org/2000/meta");
+ mxList->addAttribute("xmlns:number", "CDATA", "http://openoffice.org/2000/datastyle");
+ mxList->addAttribute("xmlns:svg", "CDATA", "http://www.w3.org/2000/svg");
+ mxList->addAttribute("xmlns:chart", "CDATA", "http://openoffice.org/2000/chart");
+ mxList->addAttribute("xmlns:dr3d", "CDATA", "http://openoffice.org/2000/dr3d");
+ mxList->addAttribute("xmlns:math", "CDATA", "http://www.w3.org/1998/Math/MathML");
+ mxList->addAttribute("xmlns:form", "CDATA", "http://openoffice.org/2000/form");
+ mxList->addAttribute("xmlns:script", "CDATA", "http://openoffice.org/2000/script");
+
+ startEl("office:document");
+ mxList->clear();
+
+ makeMeta();
+ makeStyles();
+ makeAutoStyles();
+ makeMasterStyles();
+ makeBody();
+
+ endEl("office:document");
+
+ if (m_rxDocumentHandler.is())
+ m_rxDocumentHandler->endDocument();
return true;
}
@@ -163,60 +178,20 @@ sal_Bool HwpReader::filter(const Sequence< PropertyValue >& rDescriptor)
if( nTotal == 0 ) return false;
- if (hwpfile.ReadHwpFile(std::move(stream)))
- return false;
-
- if (m_rxDocumentHandler.is())
- m_rxDocumentHandler->startDocument();
-
- padd("office:class", sXML_CDATA, "text");
- padd("office:version", sXML_CDATA, "0.9");
-
- padd("xmlns:office", "CDATA", "http://openoffice.org/2000/office");
- padd("xmlns:style", "CDATA", "http://openoffice.org/2000/style");
- padd("xmlns:text", "CDATA", "http://openoffice.org/2000/text");
- padd("xmlns:table", "CDATA", "http://openoffice.org/2000/table");
- padd("xmlns:draw", "CDATA", "http://openoffice.org/2000/drawing");
- padd("xmlns:fo", "CDATA", "http://www.w3.org/1999/XSL/Format");
- padd("xmlns:xlink", "CDATA", "http://www.w3.org/1999/xlink");
- padd("xmlns:dc", "CDATA", "http://purl.org/dc/elements/1.1/");
- padd("xmlns:meta", "CDATA", "http://openoffice.org/2000/meta");
- padd("xmlns:number", "CDATA", "http://openoffice.org/2000/datastyle");
- padd("xmlns:svg", "CDATA", "http://www.w3.org/2000/svg");
- padd("xmlns:chart", "CDATA", "http://openoffice.org/2000/chart");
- padd("xmlns:dr3d", "CDATA", "http://openoffice.org/2000/dr3d");
- padd("xmlns:math", "CDATA", "http://www.w3.org/1998/Math/MathML");
- padd("xmlns:form", "CDATA", "http://openoffice.org/2000/form");
- padd("xmlns:script", "CDATA", "http://openoffice.org/2000/script");
-
- rstartEl("office:document", mxList);
- mxList->clear();
-
- makeMeta();
- makeStyles();
- makeAutoStyles();
- makeMasterStyles();
- makeBody();
-
- rendEl("office:document");
-
- if (m_rxDocumentHandler.is())
- m_rxDocumentHandler->endDocument();
- return true;
+ return importHStream(std::move(stream));
}
-
/**
* make office:body
*/
void HwpReader::makeBody()
{
- rstartEl("office:body", mxList);
+ startEl("office:body");
makeTextDecls();
HWPPara *hwppara = hwpfile.GetFirstPara();
d->bInBody = true;
parsePara(hwppara);
- rendEl("office:body");
+ endEl("office:body");
d->bInBody = false;
}
@@ -226,32 +201,31 @@ void HwpReader::makeBody()
*/
void HwpReader::makeTextDecls()
{
- rstartEl("text:sequence-decls", mxList);
- padd("text:display-outline-level", sXML_CDATA, "0");
- padd("text:name", sXML_CDATA, "Illustration");
- rstartEl("text:sequence-decl", mxList);
+ startEl("text:sequence-decls");
+ mxList->addAttribute("text:display-outline-level", sXML_CDATA, "0");
+ mxList->addAttribute("text:name", sXML_CDATA, "Illustration");
+ startEl("text:sequence-decl");
mxList->clear();
- rendEl("text:sequence-decl");
- padd("text:display-outline-level", sXML_CDATA, "0");
- padd("text:name", sXML_CDATA, "Table");
- rstartEl("text:sequence-decl", mxList);
+ endEl("text:sequence-decl");
+ mxList->addAttribute("text:display-outline-level", sXML_CDATA, "0");
+ mxList->addAttribute("text:name", sXML_CDATA, "Table");
+ startEl("text:sequence-decl");
mxList->clear();
- rendEl("text:sequence-decl");
- padd("text:display-outline-level", sXML_CDATA, "0");
- padd("text:name", sXML_CDATA, "Text");
- rstartEl("text:sequence-decl", mxList);
+ endEl("text:sequence-decl");
+ mxList->addAttribute("text:display-outline-level", sXML_CDATA, "0");
+ mxList->addAttribute("text:name", sXML_CDATA, "Text");
+ startEl("text:sequence-decl");
mxList->clear();
- rendEl("text:sequence-decl");
- padd("text:display-outline-level", sXML_CDATA, "0");
- padd("text:name", sXML_CDATA, "Drawing");
- rstartEl("text:sequence-decl", mxList);
+ endEl("text:sequence-decl");
+ mxList->addAttribute("text:display-outline-level", sXML_CDATA, "0");
+ mxList->addAttribute("text:name", sXML_CDATA, "Drawing");
+ startEl("text:sequence-decl");
mxList->clear();
- rendEl("text:sequence-decl");
- rendEl("text:sequence-decls");
+ endEl("text:sequence-decl");
+ endEl("text:sequence-decls");
}
-#define ISNUMBER(x) ( (x) <= 0x39 && (x) >= 0x30 )
/**
* make office:meta
* Completed
@@ -260,27 +234,27 @@ void HwpReader::makeMeta()
{
HWPInfo& hwpinfo = hwpfile.GetHWPInfo();
- rstartEl("office:meta", mxList);
+ startEl("office:meta");
if (hwpinfo.summary.title[0])
{
- rstartEl("dc:title", mxList);
- rchars(fromHcharStringToOUString(hstr2ucsstr(hwpinfo.summary.title)));
- rendEl("dc:title");
+ startEl("dc:title");
+ chars(hstr2OUString(reinterpret_cast<hchar *>(hwpinfo.summary.title)));
+ endEl("dc:title");
}
if (hwpinfo.summary.subject[0])
{
- rstartEl("dc:subject", mxList);
- rchars(fromHcharStringToOUString(hstr2ucsstr(hwpinfo.summary.subject)));
- rendEl("dc:subject");
+ startEl("dc:subject");
+ chars(hstr2OUString(reinterpret_cast<hchar *>(hwpinfo.summary.subject)));
+ endEl("dc:subject");
}
if (hwpinfo.summary.author[0])
{
- rstartEl("meta:initial-creator", mxList);
- rchars(fromHcharStringToOUString(hstr2ucsstr(hwpinfo.summary.author)));
- rendEl("meta:initial-creator");
+ startEl("meta:initial-creator");
+ chars(hstr2OUString(reinterpret_cast<hchar *>(hwpinfo.summary.author)));
+ endEl("meta:initial-creator");
}
if (hwpinfo.summary.date[0])
@@ -288,8 +262,8 @@ void HwpReader::makeMeta()
unsigned short *pDate = hwpinfo.summary.date;
int year,month,day,hour,minute;
int gab = 0;
- if( ISNUMBER( pDate[0] ) && ISNUMBER( pDate[1] ) &&
- ISNUMBER( pDate[2] ) && ISNUMBER( pDate[3] ))
+ if( rtl::isAsciiDigit( pDate[0] ) && rtl::isAsciiDigit( pDate[1] ) &&
+ rtl::isAsciiDigit( pDate[2] ) && rtl::isAsciiDigit( pDate[3] ))
{
year = (pDate[0]-0x30) * 1000 + (pDate[1]-0x30) * 100 +
(pDate[2]-0x30) * 10 + (pDate[3]-0x30);
@@ -297,9 +271,9 @@ void HwpReader::makeMeta()
else {
year = 0;
}
- if( ISNUMBER( pDate[6] ))
+ if( rtl::isAsciiDigit( pDate[6] ))
{
- if( ISNUMBER( pDate[7] ) )
+ if( rtl::isAsciiDigit( pDate[7] ) )
month = (pDate[6] - 0x30) * 10 + (pDate[6+ ++gab]-0x30);
else
month = (pDate[6] - 0x30);
@@ -307,9 +281,9 @@ void HwpReader::makeMeta()
else {
month = 0;
}
- if( ISNUMBER( pDate[9 + gab] ) )
+ if( rtl::isAsciiDigit( pDate[9 + gab] ) )
{
- if( ISNUMBER( pDate[10 + gab])) {
+ if( rtl::isAsciiDigit( pDate[10 + gab])) {
day = ( pDate[9 + gab] - 0x30 ) * 10 + (pDate[9+ gab + 1]-0x30);
++gab;
} else
@@ -318,9 +292,9 @@ void HwpReader::makeMeta()
else {
day = 0;
}
- if( ISNUMBER( pDate[17 + gab] ) )
+ if( rtl::isAsciiDigit( pDate[17 + gab] ) )
{
- if( ISNUMBER( pDate[18 + gab])) {
+ if( rtl::isAsciiDigit( pDate[18 + gab])) {
hour = ( pDate[17 + gab] - 0x30 ) * 10 + (pDate[17+ gab + 1]-0x30);
++gab;
} else
@@ -329,9 +303,9 @@ void HwpReader::makeMeta()
else {
hour = 0;
}
- if( ISNUMBER( pDate[20 + gab] ) )
+ if( rtl::isAsciiDigit( pDate[20 + gab] ) )
{
- if( ISNUMBER( pDate[21 + gab])) {
+ if( rtl::isAsciiDigit( pDate[21 + gab])) {
minute = ( pDate[20 + gab] - 0x30 ) * 10 + (pDate[20+ gab + 1]-0x30);
++gab;
} else
@@ -340,49 +314,49 @@ void HwpReader::makeMeta()
else {
minute = 0;
}
- sprintf(buf,"%d-%02d-%02dT%02d:%02d:00",year,month,day,hour,minute);
+ o3tl::sprintf(d->buf,"%d-%02d-%02dT%02d:%02d:00",year,month,day,hour,minute);
- rstartEl( "meta:creation-date", mxList );
- rchars( ascii(buf));
- rendEl( "meta:creation-date" );
+ startEl("meta:creation-date");
+ chars( OUString::createFromAscii(d->buf));
+ endEl("meta:creation-date");
}
if (hwpinfo.summary.keyword[0][0] || hwpinfo.summary.etc[0][0])
{
- rstartEl("meta:keywords", mxList);
+ startEl("meta:keywords");
if (hwpinfo.summary.keyword[0][0])
{
- rstartEl("meta:keyword", mxList);
- rchars(fromHcharStringToOUString(hstr2ucsstr(hwpinfo.summary.keyword[0])));
- rendEl("meta:keyword");
+ startEl("meta:keyword");
+ chars(hstr2OUString(reinterpret_cast<hchar *>(hwpinfo.summary.keyword[0])));
+ endEl("meta:keyword");
}
if (hwpinfo.summary.keyword[1][0])
{
- rstartEl("meta:keyword", mxList);
- rchars(fromHcharStringToOUString(hstr2ucsstr(hwpinfo.summary.keyword[1])));
- rendEl("meta:keyword");
+ startEl("meta:keyword");
+ chars(hstr2OUString(reinterpret_cast<hchar *>(hwpinfo.summary.keyword[1])));
+ endEl("meta:keyword");
}
if (hwpinfo.summary.etc[0][0])
{
- rstartEl("meta:keyword", mxList);
- rchars(fromHcharStringToOUString(hstr2ucsstr(hwpinfo.summary.etc[0])));
- rendEl("meta:keyword");
+ startEl("meta:keyword");
+ chars(hstr2OUString(reinterpret_cast<hchar *>(hwpinfo.summary.etc[0])));
+ endEl("meta:keyword");
}
if (hwpinfo.summary.etc[1][0])
{
- rstartEl("meta:keyword", mxList);
- rchars(fromHcharStringToOUString(hstr2ucsstr(hwpinfo.summary.etc[1])));
- rendEl("meta:keyword");
+ startEl("meta:keyword");
+ chars(hstr2OUString(reinterpret_cast<hchar *>(hwpinfo.summary.etc[1])));
+ endEl("meta:keyword");
}
if (hwpinfo.summary.etc[2][0])
{
- rstartEl("meta:keyword", mxList);
- rchars(fromHcharStringToOUString(hstr2ucsstr(hwpinfo.summary.etc[2])));
- rendEl("meta:keyword");
+ startEl("meta:keyword");
+ chars(hstr2OUString(reinterpret_cast<hchar *>(hwpinfo.summary.etc[2])));
+ endEl("meta:keyword");
}
- rendEl("meta:keywords");
+ endEl("meta:keywords");
}
- rendEl("office:meta");
+ endEl("office:meta");
}
@@ -436,76 +410,80 @@ void HwpReader::makeDrawMiscStyle( HWPDrawingObject *hdo )
if( prop->line_pstyle > 0 && prop->line_pstyle < 5 && prop->line_color <= 0xffffff)
{
- padd( "draw:name", sXML_CDATA, ascii(Int2Str(hdo->index, "LineType%d", buf)));
- padd( "draw:style", sXML_CDATA, "round");
- padd( "draw:dots1", sXML_CDATA, "1");
- padd( "draw:dots1-length", sXML_CDATA, Double2Str( LineStyle[prop->line_pstyle].dots1 * WTMM(prop->line_width) ) + "cm");
+ mxList->addAttribute( "draw:name", sXML_CDATA, "LineType" + OUString::number(hdo->index));
+ mxList->addAttribute( "draw:style", sXML_CDATA, "round");
+ mxList->addAttribute( "draw:dots1", sXML_CDATA, "1");
+ mxList->addAttribute( "draw:dots1-length", sXML_CDATA, OUString::number( LineStyle[prop->line_pstyle].dots1 * WTMM(prop->line_width) ) + "cm");
if( prop->line_pstyle == 3 )
{
- padd( "draw:dots2", sXML_CDATA, "1");
- padd( "draw:dots2-length", sXML_CDATA, Double2Str( LineStyle[prop->line_pstyle].dots2 * WTMM(prop->line_width) ) + "cm");
+ mxList->addAttribute( "draw:dots2", sXML_CDATA, "1");
+ mxList->addAttribute( "draw:dots2-length", sXML_CDATA, OUString::number( LineStyle[prop->line_pstyle].dots2 * WTMM(prop->line_width) ) + "cm");
}
else if( prop->line_pstyle == 4 )
{
- padd( "draw:dots2", sXML_CDATA, "2");
- padd( "draw:dots2-length", sXML_CDATA, Double2Str( LineStyle[prop->line_pstyle].dots2 * WTMM(prop->line_width)) + "cm");
+ mxList->addAttribute( "draw:dots2", sXML_CDATA, "2");
+ mxList->addAttribute( "draw:dots2-length", sXML_CDATA, OUString::number( LineStyle[prop->line_pstyle].dots2 * WTMM(prop->line_width)) + "cm");
}
- padd( "draw:distance", sXML_CDATA, Double2Str( LineStyle[prop->line_pstyle].distance * WTMM(prop->line_width)) + "cm");
- rstartEl( "draw:stroke-dash", mxList);
+ mxList->addAttribute( "draw:distance", sXML_CDATA, OUString::number( LineStyle[prop->line_pstyle].distance * WTMM(prop->line_width)) + "cm");
+ startEl("draw:stroke-dash");
mxList->clear();
- rendEl( "draw:stroke-dash" );
+ endEl("draw:stroke-dash");
}
if( hdo->type == HWPDO_LINE || hdo->type == HWPDO_ARC || hdo->type == HWPDO_FREEFORM ||
hdo->type == HWPDO_ADVANCED_ARC )
{
- if( prop->line_tstyle && !ArrowShape[prop->line_tstyle].bMade )
+ if( prop->line_tstyle > 0 &&
+ o3tl::make_unsigned(prop->line_tstyle) < std::size(ArrowShape) &&
+ !ArrowShape[prop->line_tstyle].bMade )
{
ArrowShape[prop->line_tstyle].bMade = true;
- padd("draw:name", sXML_CDATA,
- ascii(ArrowShape[prop->line_tstyle].name));
+ mxList->addAttribute("draw:name", sXML_CDATA,
+ OUString::createFromAscii(ArrowShape[prop->line_tstyle].name));
if( prop->line_tstyle == 1 )
{
- padd("svg:viewBox", sXML_CDATA, "0 0 20 30");
- padd("svg:d", sXML_CDATA, "m10 0-10 30h20z");
+ mxList->addAttribute("svg:viewBox", sXML_CDATA, "0 0 20 30");
+ mxList->addAttribute("svg:d", sXML_CDATA, "m10 0-10 30h20z");
}
else if( prop->line_tstyle == 2 )
{
- padd("svg:viewBox", sXML_CDATA, "0 0 1122 2243");
- padd("svg:d", sXML_CDATA, "m0 2108v17 17l12 42 30 34 38 21 43 4 29-8 30-21 25-26 13-34 343-1532 339 1520 13 42 29 34 39 21 42 4 42-12 34-30 21-42v-39-12l-4 4-440-1998-9-42-25-39-38-25-43-8-42 8-38 25-26 39-8 42z");
+ mxList->addAttribute("svg:viewBox", sXML_CDATA, "0 0 1122 2243");
+ mxList->addAttribute("svg:d", sXML_CDATA, "m0 2108v17 17l12 42 30 34 38 21 43 4 29-8 30-21 25-26 13-34 343-1532 339 1520 13 42 29 34 39 21 42 4 42-12 34-30 21-42v-39-12l-4 4-440-1998-9-42-25-39-38-25-43-8-42 8-38 25-26 39-8 42z");
}
else if( prop->line_tstyle == 3 )
{
- padd("svg:viewBox", sXML_CDATA, "0 0 30 30");
- padd("svg:d", sXML_CDATA, "m0 0h30v30h-30z");
+ mxList->addAttribute("svg:viewBox", sXML_CDATA, "0 0 30 30");
+ mxList->addAttribute("svg:d", sXML_CDATA, "m0 0h30v30h-30z");
}
- rstartEl("draw:marker", mxList);
+ startEl("draw:marker");
mxList->clear();
- rendEl("draw:marker");
+ endEl("draw:marker");
}
- if( prop->line_hstyle && !ArrowShape[prop->line_hstyle].bMade)
+ if (prop->line_hstyle > 0 &&
+ o3tl::make_unsigned(prop->line_hstyle) < std::size(ArrowShape) &&
+ !ArrowShape[prop->line_hstyle].bMade)
{
ArrowShape[prop->line_hstyle].bMade = true;
- padd("draw:name", sXML_CDATA,
- ascii(ArrowShape[prop->line_hstyle].name));
+ mxList->addAttribute("draw:name", sXML_CDATA,
+ OUString::createFromAscii(ArrowShape[prop->line_hstyle].name));
if( prop->line_hstyle == 1 )
{
- padd("svg:viewBox", sXML_CDATA, "0 0 20 30");
- padd("svg:d", sXML_CDATA, "m10 0-10 30h20z");
+ mxList->addAttribute("svg:viewBox", sXML_CDATA, "0 0 20 30");
+ mxList->addAttribute("svg:d", sXML_CDATA, "m10 0-10 30h20z");
}
else if( prop->line_hstyle == 2 )
{
- padd("svg:viewBox", sXML_CDATA, "0 0 1122 2243");
- padd("svg:d", sXML_CDATA, "m0 2108v17 17l12 42 30 34 38 21 43 4 29-8 30-21 25-26 13-34 343-1532 339 1520 13 42 29 34 39 21 42 4 42-12 34-30 21-42v-39-12l-4 4-440-1998-9-42-25-39-38-25-43-8-42 8-38 25-26 39-8 42z");
+ mxList->addAttribute("svg:viewBox", sXML_CDATA, "0 0 1122 2243");
+ mxList->addAttribute("svg:d", sXML_CDATA, "m0 2108v17 17l12 42 30 34 38 21 43 4 29-8 30-21 25-26 13-34 343-1532 339 1520 13 42 29 34 39 21 42 4 42-12 34-30 21-42v-39-12l-4 4-440-1998-9-42-25-39-38-25-43-8-42 8-38 25-26 39-8 42z");
}
else if( prop->line_hstyle == 3 )
{
- padd("svg:viewBox", sXML_CDATA, "0 0 20 20");
- padd("svg:d", sXML_CDATA, "m0 0h20v20h-20z");
+ mxList->addAttribute("svg:viewBox", sXML_CDATA, "0 0 20 20");
+ mxList->addAttribute("svg:d", sXML_CDATA, "m0 0h20v20h-20z");
}
- rstartEl("draw:marker", mxList);
+ startEl("draw:marker");
mxList->clear();
- rendEl("draw:marker");
+ endEl("draw:marker");
}
}
@@ -513,90 +491,55 @@ void HwpReader::makeDrawMiscStyle( HWPDrawingObject *hdo )
{
if( prop->flag >> 18 & 0x01 )
{
- padd( "draw:name", sXML_CDATA, ascii(Int2Str(hdo->index, "fillimage%d", buf)));
- if( !prop->pictype )
- {
- padd( "xlink:href", sXML_CDATA,
- fromHcharStringToOUString(hstr2ucsstr(kstr2hstr( reinterpret_cast<uchar const *>(urltounix(prop->szPatternFile).c_str())).c_str())));
- }
- else
- {
- EmPicture *emp = nullptr;
- if ( strlen( prop->szPatternFile ) > 3)
- emp = hwpfile.GetEmPictureByName(prop->szPatternFile);
- if( emp )
- {
- char filename[128+17+9];
- char dirname[128];
- int fd;
-#ifdef _WIN32
- GetTempPathA(sizeof(dirname), dirname);
- sprintf(filename, "%s%s",dirname, emp->name);
- if( (fd = open( filename , _O_CREAT | _O_WRONLY | _O_BINARY , 0666)) >= 0 )
-#else
- strcpy(dirname, "/tmp/");
- sprintf(filename, "%s%s", dirname, emp->name);
- if( (fd = open( filename , O_CREAT | O_WRONLY , 0666)) >= 0 )
-#endif
- {
- size_t nWritten = write(fd, emp->data.get(), emp->size);
- OSL_VERIFY(nWritten == emp->size);
- close(fd);
- }
-#ifdef _WIN32
- int j;
- for(j = 0 ; j < static_cast<int>(strlen( dirname )) ; j++)
- {
- if( dirname[j] == '\\' ) buf[j] = '/';
- else buf[j] = dirname[j];
- }
- buf[j] = '\0';
- sprintf(filename, "file:///%s%s",buf, emp->name );
-#else
- sprintf(filename, "file://%s%s",dirname, emp->name );
-#endif
- padd( "xlink:href", sXML_CDATA, ascii(filename));
- }
- else
- {
- padd( "xlink:href", sXML_CDATA,
- fromHcharStringToOUString(hstr2ucsstr(kstr2hstr( reinterpret_cast<uchar const *>(urltounix(prop->szPatternFile).c_str())).c_str())));
- }
+ mxList->addAttribute( "draw:name", sXML_CDATA, "fillimage" + OUString::number(hdo->index));
+ EmPicture *emp = nullptr;
+ if (prop->pictype && strlen(prop->szPatternFile) > 3)
+ emp = hwpfile.GetEmPictureByName(prop->szPatternFile);
+ if (!emp)
+ {
+ mxList->addAttribute( "xlink:href", sXML_CDATA,
+ hstr2OUString(kstr2hstr( reinterpret_cast<uchar const *>(urltounix(prop->szPatternFile).c_str())).c_str()));
+ mxList->addAttribute( "xlink:type", sXML_CDATA, "simple");
+ mxList->addAttribute( "xlink:show", sXML_CDATA, "embed");
+ mxList->addAttribute( "xlink:actuate", sXML_CDATA, "onLoad");
}
- padd( "xlink:type", sXML_CDATA, "simple");
- padd( "xlink:show", sXML_CDATA, "embed");
- padd( "xlink:actuate", sXML_CDATA, "onLoad");
- rstartEl( "draw:fill-image", mxList);
+ startEl("draw:fill-image");
mxList->clear();
- rendEl( "draw:fill-image");
+ if (emp)
+ {
+ startEl("office:binary-data");
+ chars(base64_encode_string(emp->data.data(), emp->size));
+ endEl("office:binary-data");
+ }
+ endEl("draw:fill-image");
}
/* If there is a gradient, when a bitmap file is present, this is the first. */
else if( prop->flag >> 16 & 0x01 ) /* existence gradient */
{
- padd( "draw:name", sXML_CDATA, ascii(Int2Str(hdo->index, "Grad%d", buf)));
+ mxList->addAttribute( "draw:name", sXML_CDATA, "Grad" + OUString::number(hdo->index));
switch( prop->gstyle )
{
case 1 :
if( prop->center_y == 50 )
- padd( "draw:style", sXML_CDATA, "axial");
+ mxList->addAttribute( "draw:style", sXML_CDATA, "axial");
else
- padd( "draw:style", sXML_CDATA, "linear");
+ mxList->addAttribute( "draw:style", sXML_CDATA, "linear");
break;
case 2:
case 3:
- padd( "draw:style", sXML_CDATA, "radial");
+ mxList->addAttribute( "draw:style", sXML_CDATA, "radial");
break;
case 4:
- padd( "draw:style", sXML_CDATA, "square");
+ mxList->addAttribute( "draw:style", sXML_CDATA, "square");
break;
default:
- padd( "draw:style", sXML_CDATA, "linear");
+ mxList->addAttribute( "draw:style", sXML_CDATA, "linear");
break;
}
- padd( "draw:cx", sXML_CDATA,ascii(Int2Str(prop->center_x, "%d%%", buf)));
- padd( "draw:cy", sXML_CDATA,ascii(Int2Str(prop->center_y, "%d%%", buf)));
+ mxList->addAttribute( "draw:cx", sXML_CDATA, OUString::number(prop->center_x) + "%");
+ mxList->addAttribute( "draw:cy", sXML_CDATA, OUString::number(prop->center_y) + "%");
HWPInfo& hwpinfo = hwpfile.GetHWPInfo();
int default_color = 0xffffff;
@@ -617,79 +560,61 @@ void HwpReader::makeDrawMiscStyle( HWPDrawingObject *hdo )
{
if( prop->center_y == 100 )
{
- sprintf( buf, "#%02x%02x%02x", prop->tocolor & 0xff,
- (prop->tocolor >> 8) & 0xff, (prop->tocolor >>16) & 0xff );
- padd( "draw:start-color", sXML_CDATA, ascii( buf ));
- sprintf( buf, "#%02x%02x%02x", prop->fromcolor & 0xff,
- (prop->fromcolor >> 8) & 0xff, (prop->fromcolor >>16) & 0xff );
- padd( "draw:end-color", sXML_CDATA, ascii( buf ));
+ mxList->addAttribute( "draw:start-color", sXML_CDATA, rgb2str( prop->tocolor ));
+ mxList->addAttribute( "draw:end-color", sXML_CDATA, rgb2str( prop->fromcolor ));
}
else
{
- sprintf( buf, "#%02x%02x%02x", prop->fromcolor & 0xff,
- (prop->fromcolor >> 8) & 0xff, (prop->fromcolor >>16) & 0xff );
- padd( "draw:start-color", sXML_CDATA, ascii( buf ));
- sprintf( buf, "#%02x%02x%02x", prop->tocolor & 0xff,
- (prop->tocolor >> 8) & 0xff, (prop->tocolor >>16) & 0xff );
- padd( "draw:end-color", sXML_CDATA, ascii( buf ));
+ mxList->addAttribute( "draw:start-color", sXML_CDATA, rgb2str( prop->fromcolor ));
+ mxList->addAttribute( "draw:end-color", sXML_CDATA, rgb2str( prop->tocolor ));
}
}
else
{
- sprintf( buf, "#%02x%02x%02x", prop->tocolor & 0xff,
- (prop->tocolor >> 8) & 0xff, (prop->tocolor >>16) & 0xff );
- padd( "draw:start-color", sXML_CDATA,ascii( buf ));
-
- sprintf( buf, "#%02x%02x%02x", prop->fromcolor & 0xff,
- (prop->fromcolor >> 8) & 0xff, (prop->fromcolor >>16) & 0xff );
- padd( "draw:end-color", sXML_CDATA,ascii( buf ));
+ mxList->addAttribute( "draw:start-color", sXML_CDATA,rgb2str( prop->tocolor ));
+ mxList->addAttribute( "draw:end-color", sXML_CDATA,rgb2str( prop->fromcolor ));
}
if( prop->angle > 0 && ( prop->gstyle == 1 || prop->gstyle == 4))
{
- int angle = 1800 - prop->angle * 10;
- padd( "draw:angle", sXML_CDATA,
- ascii(Int2Str( angle, "%d", buf)));
+ auto normangle = prop->angle % 360;
+ int angle = 1800 - normangle * 10;
+ mxList->addAttribute( "draw:angle", sXML_CDATA, OUString::number(angle));
}
- rstartEl( "draw:gradient", mxList );
+ startEl("draw:gradient");
mxList->clear();
- rendEl( "draw:gradient");
+ endEl("draw:gradient");
}
/* hatch */
else if( prop->pattern_type >> 24 & 0x01 )
{
int type = prop->pattern_type & 0xffffff;
- padd( "draw:name", sXML_CDATA,
- ascii(Int2Str(hdo->index, "Hatch%d", buf)));
+ mxList->addAttribute( "draw:name", sXML_CDATA, "Hatch" + OUString::number(hdo->index));
if( type < 4 )
- padd( "draw:style", sXML_CDATA, "single" );
+ mxList->addAttribute( "draw:style", sXML_CDATA, "single" );
else
- padd( "draw:style", sXML_CDATA, "double" );
- sprintf( buf, "#%02x%02x%02x",
- sal_uInt16(prop->pattern_color & 0xff),
- sal_uInt16((prop->pattern_color >> 8) & 0xff),
- sal_uInt16((prop->pattern_color >>16) & 0xff) );
- padd( "draw:color", sXML_CDATA, ascii( buf ));
- padd( "draw:distance", sXML_CDATA, "0.12cm");
+ mxList->addAttribute( "draw:style", sXML_CDATA, "double" );
+ mxList->addAttribute( "draw:color", sXML_CDATA, rgb2str( static_cast<int32_t>(prop->pattern_color) ));
+ mxList->addAttribute( "draw:distance", sXML_CDATA, "0.12cm");
switch( type )
{
case 0 :
case 4 :
- padd( "draw:rotation", sXML_CDATA, "0");
+ mxList->addAttribute( "draw:rotation", sXML_CDATA, "0");
break;
case 1 :
- padd( "draw:rotation", sXML_CDATA, "900");
+ mxList->addAttribute( "draw:rotation", sXML_CDATA, "900");
break;
case 2 :
- padd( "draw:rotation", sXML_CDATA, "1350");
+ mxList->addAttribute( "draw:rotation", sXML_CDATA, "1350");
break;
case 3 :
case 5 :
- padd( "draw:rotation", sXML_CDATA, "450");
+ mxList->addAttribute( "draw:rotation", sXML_CDATA, "450");
break;
}
- rstartEl( "draw:hatch", mxList);
+ startEl("draw:hatch");
mxList->clear();
- rendEl( "draw:hatch");
+ endEl("draw:hatch");
}
}
hdo = hdo->next.get();
@@ -701,7 +626,7 @@ void HwpReader::makeStyles()
{
HWPStyle& hwpstyle = hwpfile.GetHWPStyle();
- rstartEl("office:styles", mxList);
+ startEl("office:styles");
int i;
for (i = 0; i < hwpfile.getFBoxStyleCount(); i++)
@@ -712,107 +637,107 @@ void HwpReader::makeStyles()
}
}
- padd("style:name", sXML_CDATA, "Standard");
- padd("style:family", sXML_CDATA, "paragraph");
- padd("style:class", sXML_CDATA, "text");
- rstartEl("style:style", mxList);
+ mxList->addAttribute("style:name", sXML_CDATA, "Standard");
+ mxList->addAttribute("style:family", sXML_CDATA, "paragraph");
+ mxList->addAttribute("style:class", sXML_CDATA, "text");
+ startEl("style:style");
mxList->clear();
- padd("fo:line-height", sXML_CDATA, "160%");
- padd("fo:text-align", sXML_CDATA, "justify");
- rstartEl("style:properties", mxList);
+ mxList->addAttribute("fo:line-height", sXML_CDATA, "160%");
+ mxList->addAttribute("fo:text-align", sXML_CDATA, "justify");
+ startEl("style:properties");
mxList->clear();
- rstartEl("style:tab-stops", mxList);
+ startEl("style:tab-stops");
for( i = 1 ; i < 40 ; i++)
{
- padd("style:position", sXML_CDATA,
- Double2Str( WTI(1000 * i)) + "inch");
- rstartEl("style:tab-stop", mxList);
+ mxList->addAttribute("style:position", sXML_CDATA,
+ OUString::number( WTI(1000 * i)) + "inch");
+ startEl("style:tab-stop");
mxList->clear();
- rendEl("style:tab-stop");
+ endEl("style:tab-stop");
}
- rendEl("style:tab-stops");
- rendEl("style:properties");
+ endEl("style:tab-stops");
+ endEl("style:properties");
- rendEl("style:style");
+ endEl("style:style");
for (int ii = 0; ii < hwpstyle.Num(); ii++)
{
unsigned char *stylename = reinterpret_cast<unsigned char *>(hwpstyle.GetName(ii));
- padd("style:name", sXML_CDATA, fromHcharStringToOUString(hstr2ucsstr(kstr2hstr(stylename).c_str())));
- padd("style:family", sXML_CDATA, "paragraph");
- padd("style:parent-style-name", sXML_CDATA, "Standard");
+ mxList->addAttribute("style:name", sXML_CDATA, hstr2OUString(kstr2hstr(stylename).c_str()));
+ mxList->addAttribute("style:family", sXML_CDATA, "paragraph");
+ mxList->addAttribute("style:parent-style-name", sXML_CDATA, "Standard");
- rstartEl("style:style", mxList);
+ startEl("style:style");
mxList->clear();
parseCharShape(hwpstyle.GetCharShape(ii));
parseParaShape(hwpstyle.GetParaShape(ii));
- rstartEl("style:properties", mxList);
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
+ endEl("style:properties");
- rendEl("style:style");
+ endEl("style:style");
}
{
- padd( "style:name", sXML_CDATA, "Header");
- padd( "style:family", sXML_CDATA, "paragraph");
- padd( "style:parent-style-name", sXML_CDATA, "Standard");
- padd( "style:class", sXML_CDATA, "extra");
- rstartEl("style:style", mxList);
+ mxList->addAttribute( "style:name", sXML_CDATA, "Header");
+ mxList->addAttribute( "style:family", sXML_CDATA, "paragraph");
+ mxList->addAttribute( "style:parent-style-name", sXML_CDATA, "Standard");
+ mxList->addAttribute( "style:class", sXML_CDATA, "extra");
+ startEl("style:style");
mxList->clear();
- rendEl("style:style");
+ endEl("style:style");
}
{
- padd( "style:name", sXML_CDATA, "Footer");
- padd( "style:family", sXML_CDATA, "paragraph");
- padd( "style:parent-style-name", sXML_CDATA, "Standard");
- padd( "style:class", sXML_CDATA, "extra");
- rstartEl("style:style", mxList);
+ mxList->addAttribute( "style:name", sXML_CDATA, "Footer");
+ mxList->addAttribute( "style:family", sXML_CDATA, "paragraph");
+ mxList->addAttribute( "style:parent-style-name", sXML_CDATA, "Standard");
+ mxList->addAttribute( "style:class", sXML_CDATA, "extra");
+ startEl("style:style");
mxList->clear();
- rendEl("style:style");
+ endEl("style:style");
}
if( hwpfile.linenumber > 0)
{
- padd( "style:name", sXML_CDATA, "Horizontal Line");
- padd( "style:family", sXML_CDATA, "paragraph");
- padd( "style:parent-style-name", sXML_CDATA, "Standard");
- padd( "style:class", sXML_CDATA, "html");
- rstartEl( "style:style", mxList);
+ mxList->addAttribute( "style:name", sXML_CDATA, "Horizontal Line");
+ mxList->addAttribute( "style:family", sXML_CDATA, "paragraph");
+ mxList->addAttribute( "style:parent-style-name", sXML_CDATA, "Standard");
+ mxList->addAttribute( "style:class", sXML_CDATA, "html");
+ startEl("style:style");
mxList->clear();
- padd( "fo:font-size", sXML_CDATA, "6pt");
- padd( "fo:margin-top", sXML_CDATA, "0cm");
- padd( "fo:margin-bottom", sXML_CDATA, "0cm");
- padd( "style:border-line-width-bottom", sXML_CDATA, "0.02cm 0.035cm 0.002cm");
- padd( "fo:padding", sXML_CDATA, "0cm");
- padd( "fo:border-bottom", sXML_CDATA, "0.039cm double #808080");
- padd( "text:number-lines", sXML_CDATA, "false");
- padd( "text:line-number", sXML_CDATA, "0");
- padd("fo:line-height", sXML_CDATA, "100%");
- rstartEl( "style:properties", mxList);
+ mxList->addAttribute( "fo:font-size", sXML_CDATA, "6pt");
+ mxList->addAttribute( "fo:margin-top", sXML_CDATA, "0cm");
+ mxList->addAttribute( "fo:margin-bottom", sXML_CDATA, "0cm");
+ mxList->addAttribute( "style:border-line-width-bottom", sXML_CDATA, "0.02cm 0.035cm 0.002cm");
+ mxList->addAttribute( "fo:padding", sXML_CDATA, "0cm");
+ mxList->addAttribute( "fo:border-bottom", sXML_CDATA, "0.039cm double #808080");
+ mxList->addAttribute( "text:number-lines", sXML_CDATA, "false");
+ mxList->addAttribute( "text:line-number", sXML_CDATA, "0");
+ mxList->addAttribute("fo:line-height", sXML_CDATA, "100%");
+ startEl("style:properties");
mxList->clear();
- rendEl( "style:properties");
- rendEl( "style:style");
+ endEl("style:properties");
+ endEl("style:style");
}
HWPInfo& hwpinfo = hwpfile.GetHWPInfo();
- padd("text:num-suffix", sXML_CDATA, ")");
- padd("text:num-format", sXML_CDATA, "1");
+ mxList->addAttribute("text:num-suffix", sXML_CDATA, ")");
+ mxList->addAttribute("text:num-format", sXML_CDATA, "1");
if( hwpinfo.beginfnnum != 1)
- padd("text:offset", sXML_CDATA, ascii(Int2Str(hwpinfo.beginfnnum -1, "%d", buf)));
- rstartEl("text:footnotes-configuration", mxList);
+ mxList->addAttribute("text:offset", sXML_CDATA, OUString::number(hwpinfo.beginfnnum - 1));
+ startEl("text:footnotes-configuration");
mxList->clear();
- rendEl("text:footnotes-configuration");
+ endEl("text:footnotes-configuration");
- rendEl("office:styles");
+ endEl("office:styles");
}
@@ -825,7 +750,7 @@ void HwpReader::makeAutoStyles()
{
int i;
- rstartEl("office:automatic-styles", mxList);
+ startEl("office:automatic-styles");
for (i = 0; i < hwpfile.getParaShapeCount(); i++)
makePStyle(hwpfile.getParaShape(i));
@@ -875,47 +800,46 @@ void HwpReader::makeAutoStyles()
continue;
if( i == 3 && !bIsRight )
continue;
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(i,"PNPara%d", buf)));
- padd("style:family", sXML_CDATA, "paragraph");
- padd("style:parent-style-name", sXML_CDATA, "Standard");
- rstartEl("style:style", mxList);
+ mxList->addAttribute("style:name", sXML_CDATA, "PNPara" + OUString::number(i));
+ mxList->addAttribute("style:family", sXML_CDATA, "paragraph");
+ mxList->addAttribute("style:parent-style-name", sXML_CDATA, "Standard");
+ startEl("style:style");
mxList->clear();
if( i == 1 )
- padd("fo:text-align", sXML_CDATA, "start");
+ mxList->addAttribute("fo:text-align", sXML_CDATA, "start");
else if ( i == 2 )
- padd("fo:text-align", sXML_CDATA, "center");
+ mxList->addAttribute("fo:text-align", sXML_CDATA, "center");
else if ( i == 3 )
- padd("fo:text-align", sXML_CDATA, "end");
- rstartEl("style:properties", mxList);
+ mxList->addAttribute("fo:text-align", sXML_CDATA, "end");
+ startEl("style:properties");
mxList->clear();
- rendEl( "style:properties");
- rendEl( "style:style");
+ endEl("style:properties");
+ endEl("style:style");
- padd("style:name", sXML_CDATA, ascii(Int2Str(i,"PNBox%d",buf)));
- padd("style:family", sXML_CDATA, "graphics");
- rstartEl("style:style", mxList);
+ mxList->addAttribute("style:name", sXML_CDATA, "PNBox" + OUString::number(i));
+ mxList->addAttribute("style:family", sXML_CDATA, "graphics");
+ startEl("style:style");
mxList->clear();
- padd("fo:margin-top", sXML_CDATA, "0cm");
- padd("fo:margin-bottom", sXML_CDATA, "0cm");
- padd("style:wrap", sXML_CDATA, "run-through");
- padd("style:vertical-pos", sXML_CDATA, "from-top");
- padd("style:vertical-rel", sXML_CDATA, "paragraph");
+ mxList->addAttribute("fo:margin-top", sXML_CDATA, "0cm");
+ mxList->addAttribute("fo:margin-bottom", sXML_CDATA, "0cm");
+ mxList->addAttribute("style:wrap", sXML_CDATA, "run-through");
+ mxList->addAttribute("style:vertical-pos", sXML_CDATA, "from-top");
+ mxList->addAttribute("style:vertical-rel", sXML_CDATA, "paragraph");
if( i == 1 )
- padd("style:horizontal-pos", sXML_CDATA, "left");
+ mxList->addAttribute("style:horizontal-pos", sXML_CDATA, "left");
else if ( i == 2 )
- padd("style:horizontal-pos", sXML_CDATA, "center");
+ mxList->addAttribute("style:horizontal-pos", sXML_CDATA, "center");
else if ( i == 3 )
- padd("style:horizontal-pos", sXML_CDATA, "right");
- padd("style:horizontal-rel", sXML_CDATA, "paragraph");
- padd("fo:padding", sXML_CDATA, "0cm");
- padd("stylefamily", sXML_CDATA, "graphics");
- rstartEl("style:properties", mxList);
+ mxList->addAttribute("style:horizontal-pos", sXML_CDATA, "right");
+ mxList->addAttribute("style:horizontal-rel", sXML_CDATA, "paragraph");
+ mxList->addAttribute("fo:padding", sXML_CDATA, "0cm");
+ mxList->addAttribute("stylefamily", sXML_CDATA, "graphics");
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
- rendEl("style:style");
+ endEl("style:properties");
+ endEl("style:style");
}
for (i = 0; i < hwpfile.getDateFormatCount(); i++)
@@ -923,7 +847,7 @@ void HwpReader::makeAutoStyles()
makePageStyle();
- rendEl("office:automatic-styles");
+ endEl("office:automatic-styles");
}
namespace {
@@ -955,11 +879,11 @@ struct PageSetting
void HwpReader::makeMasterStyles()
{
- rstartEl("office:master-styles", mxList);
+ startEl("office:master-styles");
int i;
int nMax = hwpfile.getMaxSettedPage();
- std::deque<PageSetting> aSet(nMax + 1);
+ std::vector<PageSetting> aSet(nMax + 1);
for( i = 0 ; i < hwpfile.getPageNumberCount() ; i++ )
{
@@ -1034,21 +958,24 @@ void HwpReader::makeMasterStyles()
PageSetting *pPrevSet = nullptr;
PageSetting *pPage = nullptr;
+ if (nMax > 512 && comphelper::IsFuzzing())
+ {
+ SAL_WARN("filter.hwp", "too many pages: " << nMax << " clip to " << 512);
+ nMax = 512;
+ }
+
for( i = 1; i <= nMax ; i++ )
{
if( i == 1 )
- padd("style:name", sXML_CDATA, "Standard");
+ mxList->addAttribute("style:name", sXML_CDATA, "Standard");
else
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(i, "p%d", buf)));
- padd("style:page-master-name", sXML_CDATA,
- ascii(Int2Str(hwpfile.GetPageMasterNum(i), "pm%d", buf)));
+ mxList->addAttribute("style:name", sXML_CDATA, "p" + OUString::number(i));
+ mxList->addAttribute("style:page-master-name", sXML_CDATA,
+ "pm" + OUString::number(hwpfile.GetPageMasterNum(i)));
if( i < nMax )
- padd("style:next-style-name", sXML_CDATA,
- ascii(Int2Str(i+1, "p%d", buf)));
- padd("draw:style-name", sXML_CDATA,
- ascii(Int2Str(i, "master%d", buf)));
- rstartEl("style:master-page", mxList);
+ mxList->addAttribute("style:next-style-name", sXML_CDATA, "p" + OUString::number(i + 1));
+ mxList->addAttribute("draw:style-name", sXML_CDATA, "master" + OUString::number(i));
+ startEl("style:master-page");
mxList->clear();
if( aSet[i].bIsSet ) /* If you've changed the current setting */
@@ -1099,41 +1026,42 @@ void HwpReader::makeMasterStyles()
}
else /* If the previous settings doesn't exist, set to the default settings */
{
- rstartEl("style:header", mxList);
- padd("text:style-name", sXML_CDATA, "Standard");
- rstartEl("text:p", mxList);
+ startEl("style:header");
+ mxList->addAttribute("text:style-name", sXML_CDATA, "Standard");
+ startEl("text:p");
mxList->clear();
- rendEl("text:p");
- rendEl("style:header");
+ endEl("text:p");
+ endEl("style:header");
- rstartEl("style:footer", mxList);
- padd("text:style-name", sXML_CDATA, "Standard");
- rstartEl("text:p", mxList);
+ startEl("style:footer");
+ mxList->addAttribute("text:style-name", sXML_CDATA, "Standard");
+ startEl("text:p");
mxList->clear();
- rendEl("text:p");
- rendEl("style:footer");
+ endEl("text:p");
+ endEl("style:footer");
- rendEl("style:master-page");
+ endEl("style:master-page");
continue;
}
// header
if( pPage->header )
{
- rstartEl("style:header", mxList);
+ startEl("style:header");
if( pPage->pagenumber && pPage->pagenumber->where < 4 )
{
d->bInHeader = true;
d->pPn = pPage->pagenumber;
}
- parsePara(pPage->header->plist.front().get());
+ if (!pPage->header->plist.empty())
+ parsePara(pPage->header->plist.front().get());
d->bInHeader = false;
d->pPn = nullptr;
- rendEl("style:header");
+ endEl("style:header");
}
if( pPage->header_even )
{
- rstartEl("style:header", mxList);
+ startEl("style:header");
if( pPage->pagenumber && ( pPage->pagenumber->where < 4
|| pPage->pagenumber->where == 7 ) )
{
@@ -1141,18 +1069,19 @@ void HwpReader::makeMasterStyles()
d->pPn = pPage->pagenumber;
d->nPnPos = 3;
}
- parsePara(pPage->header_even->plist.front().get());
+ if (!pPage->header_even->plist.empty())
+ parsePara(pPage->header_even->plist.front().get());
d->bInHeader = false;
d->pPn = nullptr;
d->nPnPos = 0;
- rendEl("style:header");
+ endEl("style:header");
}
/* Will be the default. */
else if (pPage->header_odd)
{
- rstartEl("style:header", mxList);
- padd("text:style-name", sXML_CDATA, "Standard");
- rstartEl("text:p", mxList);
+ startEl("style:header");
+ mxList->addAttribute("text:style-name", sXML_CDATA, "Standard");
+ startEl("text:p");
mxList->clear();
if( pPage->pagenumber && ( pPage->pagenumber->where < 4 ||
pPage->pagenumber->where == 7 ) )
@@ -1163,12 +1092,12 @@ void HwpReader::makeMasterStyles()
d->pPn = nullptr;
d->nPnPos = 0;
}
- rendEl("text:p");
- rendEl("style:header");
+ endEl("text:p");
+ endEl("style:header");
}
if( pPage->header_odd )
{
- rstartEl("style:header-left", mxList);
+ startEl("style:header-left");
if( pPage->pagenumber && ( pPage->pagenumber->where < 4
|| pPage->pagenumber->where == 7 ) )
{
@@ -1176,18 +1105,19 @@ void HwpReader::makeMasterStyles()
d->nPnPos = 1;
d->pPn = pPage->pagenumber;
}
- parsePara(pPage->header_odd->plist.front().get());
+ if (!pPage->header_odd->plist.empty())
+ parsePara(pPage->header_odd->plist.front().get());
d->bInHeader = false;
d->pPn = nullptr;
d->nPnPos = 0;
- rendEl("style:header-left");
+ endEl("style:header-left");
}
/* Will be the default. */
else if (pPage->header_even)
{
- rstartEl("style:header-left", mxList);
- padd("text:style-name", sXML_CDATA, "Standard");
- rstartEl("text:p", mxList);
+ startEl("style:header-left");
+ mxList->addAttribute("text:style-name", sXML_CDATA, "Standard");
+ startEl("text:p");
mxList->clear();
if( pPage->pagenumber && ( pPage->pagenumber->where < 4 ||
pPage->pagenumber->where == 7 ) )
@@ -1198,14 +1128,14 @@ void HwpReader::makeMasterStyles()
d->pPn = nullptr;
d->nPnPos = 0;
}
- rendEl("text:p");
- rendEl("style:header-left");
+ endEl("text:p");
+ endEl("style:header-left");
}
if( !pPage->header && !pPage->header_even && !pPage->header_odd )
{
- rstartEl("style:header", mxList);
- padd("text:style-name", sXML_CDATA, "Standard");
- rstartEl("text:p", mxList);
+ startEl("style:header");
+ mxList->addAttribute("text:style-name", sXML_CDATA, "Standard");
+ startEl("text:p");
mxList->clear();
if( pPage->pagenumber && (pPage->pagenumber->where < 4 ||
pPage->pagenumber->where == 7 ) )
@@ -1214,27 +1144,28 @@ void HwpReader::makeMasterStyles()
makeShowPageNum();
d->pPn = nullptr;
}
- rendEl("text:p");
- rendEl("style:header");
+ endEl("text:p");
+ endEl("style:header");
}
// footer
if( pPage->footer )
{
- rstartEl("style:footer", mxList);
+ startEl("style:footer");
if( pPage->pagenumber && pPage->pagenumber->where >= 4
&& pPage->pagenumber->where != 7 )
{
d->bInHeader = true;
d->pPn = pPage->pagenumber;
}
- parsePara(pPage->footer->plist.front().get());
+ if (!pPage->footer->plist.empty())
+ parsePara(pPage->footer->plist.front().get());
d->bInHeader = false;
d->pPn = nullptr;
- rendEl("style:footer");
+ endEl("style:footer");
}
if( pPage->footer_even )
{
- rstartEl("style:footer", mxList);
+ startEl("style:footer");
if( pPage->pagenumber && pPage->pagenumber->where >= 4
&& pPage->pagenumber->where != 7 )
{
@@ -1242,18 +1173,19 @@ void HwpReader::makeMasterStyles()
d->pPn = pPage->pagenumber;
d->nPnPos = 3;
}
- parsePara(pPage->footer_even->plist.front().get());
+ if (!pPage->footer_even->plist.empty())
+ parsePara(pPage->footer_even->plist.front().get());
d->bInHeader = false;
d->pPn = nullptr;
d->nPnPos = 0;
- rendEl("style:footer");
+ endEl("style:footer");
}
/* Will be the default. */
else if (pPage->footer_odd)
{
- rstartEl("style:footer", mxList);
- padd("text:style-name", sXML_CDATA, "Standard");
- rstartEl("text:p", mxList);
+ startEl("style:footer");
+ mxList->addAttribute("text:style-name", sXML_CDATA, "Standard");
+ startEl("text:p");
mxList->clear();
if( pPage->pagenumber && pPage->pagenumber->where >= 4
&& pPage->pagenumber->where != 7 )
@@ -1264,12 +1196,12 @@ void HwpReader::makeMasterStyles()
d->pPn = nullptr;
d->nPnPos = 0;
}
- rendEl("text:p");
- rendEl("style:footer");
+ endEl("text:p");
+ endEl("style:footer");
}
if( pPage->footer_odd )
{
- rstartEl("style:footer-left", mxList);
+ startEl("style:footer-left");
if( pPage->pagenumber && pPage->pagenumber->where >= 4
&& pPage->pagenumber->where != 7 )
{
@@ -1277,18 +1209,19 @@ void HwpReader::makeMasterStyles()
d->pPn = pPage->pagenumber;
d->nPnPos = 1;
}
- parsePara(pPage->footer_odd->plist.front().get());
+ if (!pPage->footer_odd->plist.empty())
+ parsePara(pPage->footer_odd->plist.front().get());
d->bInHeader = false;
d->pPn = nullptr;
d->nPnPos = 0;
- rendEl("style:footer-left");
+ endEl("style:footer-left");
}
/* Will be the default. */
else if (pPage->footer_even)
{
- rstartEl("style:footer-left", mxList);
- padd("text:style-name", sXML_CDATA, "Standard");
- rstartEl("text:p", mxList);
+ startEl("style:footer-left");
+ mxList->addAttribute("text:style-name", sXML_CDATA, "Standard");
+ startEl("text:p");
mxList->clear();
if( pPage->pagenumber && pPage->pagenumber->where >= 4
&& pPage->pagenumber->where != 7 )
@@ -1299,14 +1232,14 @@ void HwpReader::makeMasterStyles()
d->pPn = nullptr;
d->nPnPos = 0;
}
- rendEl("text:p");
- rendEl("style:footer-left");
+ endEl("text:p");
+ endEl("style:footer-left");
}
if( !pPage->footer && !pPage->footer_even && !pPage->footer_odd )
{
- rstartEl("style:footer", mxList);
- padd("text:style-name", sXML_CDATA, "Standard");
- rstartEl("text:p", mxList);
+ startEl("style:footer");
+ mxList->addAttribute("text:style-name", sXML_CDATA, "Standard");
+ startEl("text:p");
mxList->clear();
if( pPage->pagenumber && pPage->pagenumber->where >= 4
&& pPage->pagenumber->where != 7 )
@@ -1315,13 +1248,13 @@ void HwpReader::makeMasterStyles()
makeShowPageNum();
d->pPn = nullptr;
}
- rendEl("text:p");
- rendEl("style:footer");
+ endEl("text:p");
+ endEl("style:footer");
}
- rendEl("style:master-page");
+ endEl("style:master-page");
}
- rendEl("office:master-styles");
+ endEl("office:master-styles");
}
@@ -1336,65 +1269,63 @@ void HwpReader::parseCharShape(CharShape const * cshape)
{
HWPFont& hwpfont = hwpfile.GetHWPFont();
- padd("fo:font-size", sXML_CDATA,
- ascii(Int2Str(cshape->size / 25, "%dpt", buf)));
- padd("style:font-size-asian", sXML_CDATA,
- ascii(Int2Str(cshape->size / 25, "%dpt", buf)));
+ mxList->addAttribute("fo:font-size", sXML_CDATA, OUString::number(cshape->size / 25) + "pt");
+ mxList->addAttribute("style:font-size-asian", sXML_CDATA, OUString::number(cshape->size / 25) + "pt");
::std::string const tmp = hstr2ksstr(kstr2hstr(
- reinterpret_cast<unsigned char const *>(hwpfont.GetFontName(0, cshape->font[0]))).c_str());
+ reinterpret_cast<unsigned char const *>(hwpfont.GetFontName(0, cshape->font))).c_str());
double fRatio = 1.0;
- int size = getRepFamilyName(tmp.c_str(), buf, fRatio);
+ int size = getRepFamilyName(tmp.c_str(), d->buf, fRatio);
- padd("fo:font-family", sXML_CDATA,
- OUString(buf, size, RTL_TEXTENCODING_EUC_KR));
- padd("style:font-family-asian", sXML_CDATA,
- OUString(buf, size, RTL_TEXTENCODING_EUC_KR));
+ mxList->addAttribute("fo:font-family", sXML_CDATA,
+ OUString(d->buf, size, RTL_TEXTENCODING_EUC_KR));
+ mxList->addAttribute("style:font-family-asian", sXML_CDATA,
+ OUString(d->buf, size, RTL_TEXTENCODING_EUC_KR));
- padd("style:text-scale", sXML_CDATA,
- ascii(Int2Str(static_cast<int>(cshape->ratio[0] * fRatio), "%d%%", buf)));
+ mxList->addAttribute("style:text-scale", sXML_CDATA,
+ OUString::number(static_cast<int>(cshape->ratio * fRatio)) + "%");
- double sspace = (cshape->size / 25) * cshape->space[0] / 100.;
+ double sspace = (cshape->size / 25) * cshape->space / 100.;
if (sspace != 0.)
{
- padd("fo:letter-spacing", sXML_CDATA,
- Double2Str(sspace) + "pt");
+ mxList->addAttribute("fo:letter-spacing", sXML_CDATA,
+ OUString::number(sspace) + "pt");
}
if (cshape->color[1] != 0)
- padd("fo:color", sXML_CDATA,
- ascii(hcolor2str(cshape->color[1], 100, buf, true)));
+ mxList->addAttribute("fo:color", sXML_CDATA,
+ hcolor2str(cshape->color[1], 100, true));
if (cshape->shade != 0)
- padd("style:text-background-color", sXML_CDATA,
- ascii(hcolor2str(cshape->color[0], cshape->shade, buf)));
+ mxList->addAttribute("style:text-background-color", sXML_CDATA,
+ hcolor2str(cshape->color[0], cshape->shade));
if (cshape->attr & 0x01)
{
- padd("fo:font-style", sXML_CDATA, "italic");
- padd("style:font-style-asian", sXML_CDATA, "italic");
+ mxList->addAttribute("fo:font-style", sXML_CDATA, "italic");
+ mxList->addAttribute("style:font-style-asian", sXML_CDATA, "italic");
}
else{
- padd("fo:font-style", sXML_CDATA, "normal");
- padd("style:font-style-asian", sXML_CDATA, "normal");
+ mxList->addAttribute("fo:font-style", sXML_CDATA, "normal");
+ mxList->addAttribute("style:font-style-asian", sXML_CDATA, "normal");
}
if (cshape->attr >> 1 & 0x01)
{
- padd("fo:font-weight", sXML_CDATA, "bold");
- padd("style:font-weight-asian", sXML_CDATA, "bold");
+ mxList->addAttribute("fo:font-weight", sXML_CDATA, "bold");
+ mxList->addAttribute("style:font-weight-asian", sXML_CDATA, "bold");
}
else{
- padd("fo:font-weight", sXML_CDATA, "normal");
- padd("style:font-weight-asian", sXML_CDATA, "normal");
+ mxList->addAttribute("fo:font-weight", sXML_CDATA, "normal");
+ mxList->addAttribute("style:font-weight-asian", sXML_CDATA, "normal");
}
if (cshape->attr >> 2 & 0x01)
- padd("style:text-underline", sXML_CDATA, "single");
+ mxList->addAttribute("style:text-underline", sXML_CDATA, "single");
if (cshape->attr >> 3 & 0x01)
- padd("style:text-outline", sXML_CDATA, "true");
+ mxList->addAttribute("style:text-outline", sXML_CDATA, "true");
if (cshape->attr >> 4 & 0x01)
- padd("fo:text-shadow", sXML_CDATA, "1pt 1pt");
+ mxList->addAttribute("fo:text-shadow", sXML_CDATA, "1pt 1pt");
if (cshape->attr >> 5 & 0x01)
- padd("style:text-position", sXML_CDATA, "super 58%");
+ mxList->addAttribute("style:text-position", sXML_CDATA, "super 58%");
if (cshape->attr >> 6 & 0x01)
- padd("style:text-position", sXML_CDATA, "sub 58%");
+ mxList->addAttribute("style:text-position", sXML_CDATA, "sub 58%");
}
@@ -1410,63 +1341,58 @@ void HwpReader::parseParaShape(ParaShape const * pshape)
{
if (pshape->left_margin != 0)
- padd("fo:margin-left", sXML_CDATA, Double2Str
+ mxList->addAttribute("fo:margin-left", sXML_CDATA, OUString::number
(WTI(pshape->left_margin )) + "inch");
if (pshape->right_margin != 0)
- padd("fo:margin-right", sXML_CDATA, Double2Str
+ mxList->addAttribute("fo:margin-right", sXML_CDATA, OUString::number
(WTI(pshape->right_margin)) + "inch");
if (pshape->pspacing_prev != 0)
- padd("fo:margin-top", sXML_CDATA, Double2Str
+ mxList->addAttribute("fo:margin-top", sXML_CDATA, OUString::number
(WTI(pshape->pspacing_prev)) + "inch");
if (pshape->pspacing_next != 0)
- padd("fo:margin-bottom", sXML_CDATA, Double2Str
+ mxList->addAttribute("fo:margin-bottom", sXML_CDATA, OUString::number
(WTI(pshape->pspacing_next)) + "inch");
if (pshape->indent != 0)
- padd("fo:text-indent", sXML_CDATA, Double2Str
+ mxList->addAttribute("fo:text-indent", sXML_CDATA, OUString::number
(WTI(pshape->indent)) + "inch");
if (pshape->lspacing != 0)
- padd("fo:line-height", sXML_CDATA,
- ascii(Int2Str (pshape->lspacing, "%d%%", buf)));
+ mxList->addAttribute("fo:line-height", sXML_CDATA, OUString::number(pshape->lspacing) + "%");
- unsigned char set_align = 0;
+ const char* align = nullptr;
switch (static_cast<int>(pshape->arrange_type))
{
case 1:
- strcpy(buf, "start");
- set_align = 1;
+ align = "start";
break;
case 2:
- strcpy(buf, "end");
- set_align = 1;
+ align = "end";
break;
case 3:
- strcpy(buf, "center");
- set_align = 1;
+ align = "center";
break;
case 4:
case 5:
case 6:
- strcpy(buf, "justify");
- set_align = 1;
+ align = "justify";
break;
}
- if (set_align)
- padd("fo:text-align", sXML_CDATA, ascii(buf));
+ if (align)
+ mxList->addAttribute("fo:text-align", sXML_CDATA, OUString::createFromAscii(align));
if (pshape->outline)
- padd("fo:border", sXML_CDATA, "0.002cm solid #000000");
+ mxList->addAttribute("fo:border", sXML_CDATA, "0.002cm solid #000000");
if( pshape->shade > 0 )
{
- padd("fo:background-color", sXML_CDATA,
- ascii(hcolor2str(0, pshape->shade, buf)));
+ mxList->addAttribute("fo:background-color", sXML_CDATA,
+ hcolor2str(0, pshape->shade));
}
if( pshape->pagebreak & 0x02 || pshape->pagebreak & 0x04)
- padd("fo:break-before", sXML_CDATA, "page");
+ mxList->addAttribute("fo:break-before", sXML_CDATA, "page");
else if( pshape->pagebreak & 0x01 )
- padd("fo:break-before", sXML_CDATA, "column");
+ mxList->addAttribute("fo:break-before", sXML_CDATA, "column");
}
@@ -1477,20 +1403,20 @@ void HwpReader::parseParaShape(ParaShape const * pshape)
void HwpReader::makePStyle(ParaShape const * pshape)
{
int nscount = pshape->tabs[MAXTABS -1].type;
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(pshape->index, "P%d", buf)));
- padd("style:family", sXML_CDATA, "paragraph");
- rstartEl("style:style", mxList);
+ mxList->addAttribute("style:name", sXML_CDATA, "P" + OUString::number(pshape->index));
+ mxList->addAttribute("style:family", sXML_CDATA, "paragraph");
+ startEl("style:style");
mxList->clear();
parseParaShape(pshape);
- parseCharShape(pshape->cshape.get());
- rstartEl("style:properties", mxList);
+ if (pshape->cshape)
+ parseCharShape(pshape->cshape.get());
+ startEl("style:properties");
mxList->clear();
if( nscount )
{
unsigned char tf = 0;
- rstartEl("style:tab-stops",mxList);
+ startEl("style:tab-stops");
int tab_margin = pshape->left_margin + pshape->indent;
if( tab_margin < 0 )
@@ -1501,43 +1427,43 @@ void HwpReader::makePStyle(ParaShape const * pshape)
break;
if( pshape->tabs[i].position <= tab_margin )
continue;
- padd("style:position", sXML_CDATA,
- Double2Str(WTMM(pshape->tabs[i].position - tab_margin )) + "mm");
+ mxList->addAttribute("style:position", sXML_CDATA,
+ OUString::number(WTMM(pshape->tabs[i].position - tab_margin )) + "mm");
if( pshape->tabs[i].type )
{
tf = 1;
switch(pshape->tabs[i].type)
{
case 1 :
- padd("style:type", sXML_CDATA, "right");
+ mxList->addAttribute("style:type", sXML_CDATA, "right");
break;
case 2:
- padd("style:type", sXML_CDATA, "center");
+ mxList->addAttribute("style:type", sXML_CDATA, "center");
break;
case 3:
- padd("style:type", sXML_CDATA, "char");
- padd("style:char", sXML_CDATA, ".");
+ mxList->addAttribute("style:type", sXML_CDATA, "char");
+ mxList->addAttribute("style:char", sXML_CDATA, ".");
break;
}
}
if( pshape->tabs[i].dot_continue )
{
tf = 1;
- padd("style:leader-char", sXML_CDATA, ".");
+ mxList->addAttribute("style:leader-char", sXML_CDATA, ".");
}
- rstartEl( "style:tab-stop", mxList);
+ startEl("style:tab-stop");
mxList->clear();
- rendEl( "style:tab-stop" );
+ endEl("style:tab-stop");
if( (pshape->tabs[i].position != 1000 * i ) || tf )
{
if( !--nscount ) break;
}
}
- rendEl( "style:tab-stops");
+ endEl("style:tab-stops");
}
- rendEl("style:properties");
- rendEl("style:style");
+ endEl("style:properties");
+ endEl("style:style");
}
@@ -1550,9 +1476,15 @@ void HwpReader::makePageStyle()
HWPInfo& hwpinfo = hwpfile.GetHWPInfo();
int pmCount = hwpfile.getColumnCount();
+ if (pmCount > 512 && comphelper::IsFuzzing())
+ {
+ SAL_WARN("filter.hwp", "too many pages: " << pmCount << " clip to " << 512);
+ pmCount = 512;
+ }
+
for( int i = 0 ; i < pmCount ; i++ ){
- padd("style:name", sXML_CDATA, ascii(Int2Str(i + 1, "pm%d", buf)));
- rstartEl("style:page-master",mxList);
+ mxList->addAttribute("style:name", sXML_CDATA, "pm" + OUString::number(i + 1));
+ startEl("style:page-master");
mxList->clear();
@@ -1561,73 +1493,73 @@ void HwpReader::makePageStyle()
case 3: // A4
if( hwpinfo.paper.paper_direction )
{
- padd("fo:page-height",sXML_CDATA, "210mm");
- padd("fo:page-width",sXML_CDATA, "297mm");
+ mxList->addAttribute("fo:page-height",sXML_CDATA, "210mm");
+ mxList->addAttribute("fo:page-width",sXML_CDATA, "297mm");
}
else
{
- padd("fo:page-width",sXML_CDATA, "210mm");
- padd("fo:page-height",sXML_CDATA, "297mm");
+ mxList->addAttribute("fo:page-width",sXML_CDATA, "210mm");
+ mxList->addAttribute("fo:page-height",sXML_CDATA, "297mm");
}
break;
case 4: // 80 column
if( hwpinfo.paper.paper_direction )
{
- padd("fo:page-height",sXML_CDATA, "8.5inch");
- padd("fo:page-width",sXML_CDATA, "11inch");
+ mxList->addAttribute("fo:page-height",sXML_CDATA, "8.5inch");
+ mxList->addAttribute("fo:page-width",sXML_CDATA, "11inch");
}
else
{
- padd("fo:page-width",sXML_CDATA, "8.5inch");
- padd("fo:page-height",sXML_CDATA, "11inch");
+ mxList->addAttribute("fo:page-width",sXML_CDATA, "8.5inch");
+ mxList->addAttribute("fo:page-height",sXML_CDATA, "11inch");
}
break;
case 5: // B5
if( hwpinfo.paper.paper_direction )
{
- padd("fo:page-height",sXML_CDATA, "176mm");
- padd("fo:page-width",sXML_CDATA, "250mm");
+ mxList->addAttribute("fo:page-height",sXML_CDATA, "176mm");
+ mxList->addAttribute("fo:page-width",sXML_CDATA, "250mm");
}
else
{
- padd("fo:page-width",sXML_CDATA, "176mm");
- padd("fo:page-height",sXML_CDATA, "250mm");
+ mxList->addAttribute("fo:page-width",sXML_CDATA, "176mm");
+ mxList->addAttribute("fo:page-height",sXML_CDATA, "250mm");
}
break;
case 6: // B4
if( hwpinfo.paper.paper_direction )
{
- padd("fo:page-height",sXML_CDATA, "250mm");
- padd("fo:page-width",sXML_CDATA, "353mm");
+ mxList->addAttribute("fo:page-height",sXML_CDATA, "250mm");
+ mxList->addAttribute("fo:page-width",sXML_CDATA, "353mm");
}
else
{
- padd("fo:page-width",sXML_CDATA, "250mm");
- padd("fo:page-height",sXML_CDATA, "353mm");
+ mxList->addAttribute("fo:page-width",sXML_CDATA, "250mm");
+ mxList->addAttribute("fo:page-height",sXML_CDATA, "353mm");
}
break;
case 7:
if( hwpinfo.paper.paper_direction )
{
- padd("fo:page-height",sXML_CDATA, "8.5inch");
- padd("fo:page-width",sXML_CDATA, "14inch");
+ mxList->addAttribute("fo:page-height",sXML_CDATA, "8.5inch");
+ mxList->addAttribute("fo:page-width",sXML_CDATA, "14inch");
}
else
{
- padd("fo:page-width",sXML_CDATA, "8.5inch");
- padd("fo:page-height",sXML_CDATA, "14inch");
+ mxList->addAttribute("fo:page-width",sXML_CDATA, "8.5inch");
+ mxList->addAttribute("fo:page-height",sXML_CDATA, "14inch");
}
break;
case 8:
if( hwpinfo.paper.paper_direction )
{
- padd("fo:page-height",sXML_CDATA, "297mm");
- padd("fo:page-width",sXML_CDATA, "420mm");
+ mxList->addAttribute("fo:page-height",sXML_CDATA, "297mm");
+ mxList->addAttribute("fo:page-width",sXML_CDATA, "420mm");
}
else
{
- padd("fo:page-width",sXML_CDATA, "297mm");
- padd("fo:page-height",sXML_CDATA, "420mm");
+ mxList->addAttribute("fo:page-width",sXML_CDATA, "297mm");
+ mxList->addAttribute("fo:page-height",sXML_CDATA, "420mm");
}
break;
case 0:
@@ -1636,87 +1568,87 @@ void HwpReader::makePageStyle()
default:
if( hwpinfo.paper.paper_direction )
{
- padd("fo:page-width",sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.paper_height)) + "inch");
- padd("fo:page-height",sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.paper_width)) + "inch");
+ mxList->addAttribute("fo:page-width",sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.paper_height)) + "inch");
+ mxList->addAttribute("fo:page-height",sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.paper_width)) + "inch");
}
else
{
- padd("fo:page-width",sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.paper_width)) + "inch");
- padd("fo:page-height",sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.paper_height)) + "inch");
+ mxList->addAttribute("fo:page-width",sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.paper_width)) + "inch");
+ mxList->addAttribute("fo:page-height",sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.paper_height)) + "inch");
}
break;
}
- padd("style:print-orientation",sXML_CDATA,
- ascii(hwpinfo.paper.paper_direction ? "landscape" : "portrait"));
+ mxList->addAttribute("style:print-orientation",sXML_CDATA,
+ OUString::createFromAscii(hwpinfo.paper.paper_direction ? "landscape" : "portrait"));
if( hwpinfo.beginpagenum != 1)
- padd("style:first-page-number",sXML_CDATA,
- ascii(Int2Str(hwpinfo.beginpagenum, "%d", buf)));
+ mxList->addAttribute("style:first-page-number",sXML_CDATA, OUString::number(hwpinfo.beginpagenum));
if( hwpinfo.borderline ){
- padd("fo:margin-left",sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.left_margin - hwpinfo.bordermargin[0] + hwpinfo.paper.gutter_length)) + "inch");
- padd("fo:margin-right",sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.right_margin - hwpinfo.bordermargin[1])) + "inch");
- padd("fo:margin-top",sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.top_margin - hwpinfo.bordermargin[2])) + "inch");
- padd("fo:margin-bottom",sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.bottom_margin - hwpinfo.bordermargin[3])) + "inch");
+ mxList->addAttribute("fo:margin-left",sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.left_margin - hwpinfo.bordermargin[0] + hwpinfo.paper.gutter_length)) + "inch");
+ mxList->addAttribute("fo:margin-right",sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.right_margin - hwpinfo.bordermargin[1])) + "inch");
+ mxList->addAttribute("fo:margin-top",sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.top_margin - hwpinfo.bordermargin[2])) + "inch");
+ mxList->addAttribute("fo:margin-bottom",sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.bottom_margin - hwpinfo.bordermargin[3])) + "inch");
}
else{
- padd("fo:margin-left",sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.left_margin + hwpinfo.paper.gutter_length)) + "inch");
- padd("fo:margin-right",sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.right_margin)) + "inch");
- padd("fo:margin-top",sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.top_margin)) + "inch");
- padd("fo:margin-bottom",sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.bottom_margin)) + "inch");
+ mxList->addAttribute("fo:margin-left",sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.left_margin + hwpinfo.paper.gutter_length)) + "inch");
+ mxList->addAttribute("fo:margin-right",sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.right_margin)) + "inch");
+ mxList->addAttribute("fo:margin-top",sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.top_margin)) + "inch");
+ mxList->addAttribute("fo:margin-bottom",sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.bottom_margin)) + "inch");
}
switch( hwpinfo.borderline )
{
case 1:
- padd("fo:border", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.002cm solid #000000");
break;
case 3:
- padd("fo:border", sXML_CDATA,"0.002cm dotted #000000");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.002cm dotted #000000");
break;
case 2:
- padd("fo:border", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.035cm solid #000000");
break;
case 4:
- padd("style:border-line-width", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.039cm double #000000");
break;
}
- padd("fo:padding-left", sXML_CDATA,
- Double2Str(WTI(hwpinfo.bordermargin[0])) + "inch");
- padd("fo:padding-right", sXML_CDATA,
- Double2Str(WTI(hwpinfo.bordermargin[1])) + "inch");
- padd("fo:padding-top", sXML_CDATA,
- Double2Str(WTI(hwpinfo.bordermargin[2])) + "inch");
- padd("fo:padding-bottom", sXML_CDATA,
- Double2Str(WTI(hwpinfo.bordermargin[3])) + "inch");
+ mxList->addAttribute("fo:padding-left", sXML_CDATA,
+ OUString::number(WTI(hwpinfo.bordermargin[0])) + "inch");
+ mxList->addAttribute("fo:padding-right", sXML_CDATA,
+ OUString::number(WTI(hwpinfo.bordermargin[1])) + "inch");
+ mxList->addAttribute("fo:padding-top", sXML_CDATA,
+ OUString::number(WTI(hwpinfo.bordermargin[2])) + "inch");
+ mxList->addAttribute("fo:padding-bottom", sXML_CDATA,
+ OUString::number(WTI(hwpinfo.bordermargin[3])) + "inch");
/* background color */
if( hwpinfo.back_info.isset )
{
if( hwpinfo.back_info.color[0] > 0 || hwpinfo.back_info.color[1] > 0
|| hwpinfo.back_info.color[2] > 0 ){
- sprintf(buf,"#%02x%02x%02x",hwpinfo.back_info.color[0],
- hwpinfo.back_info.color[1],hwpinfo.back_info.color[2] );
- padd("fo:background-color", sXML_CDATA, ascii(buf));
+ mxList->addAttribute("fo:background-color", sXML_CDATA,
+ rgb2str(hwpinfo.back_info.color[0],
+ hwpinfo.back_info.color[1],
+ hwpinfo.back_info.color[2]));
}
}
- rstartEl("style:properties",mxList);
+ startEl("style:properties");
mxList->clear();
/* background image */
@@ -1724,149 +1656,147 @@ void HwpReader::makePageStyle()
{
if( hwpinfo.back_info.type == 1 ){
#ifdef _WIN32
- padd("xlink:href", sXML_CDATA,
- fromHcharStringToOUString(hstr2ucsstr(kstr2hstr(reinterpret_cast<uchar const *>(urltowin(hwpinfo.back_info.filename).c_str())).c_str())));
+ mxList->addAttribute("xlink:href", sXML_CDATA,
+ hstr2OUString(kstr2hstr(reinterpret_cast<uchar const *>(urltowin(hwpinfo.back_info.filename).c_str())).c_str()));
#else
- padd("xlink:href", sXML_CDATA,
- fromHcharStringToOUString(hstr2ucsstr(kstr2hstr( reinterpret_cast<uchar const *>(urltounix(hwpinfo.back_info.filename).c_str())).c_str())));
+ mxList->addAttribute("xlink:href", sXML_CDATA,
+ hstr2OUString(kstr2hstr( reinterpret_cast<uchar const *>(urltounix(hwpinfo.back_info.filename).c_str())).c_str()));
#endif
- padd("xlink:type", sXML_CDATA, "simple");
- padd("xlink:actuate", sXML_CDATA, "onLoad");
+ mxList->addAttribute("xlink:type", sXML_CDATA, "simple");
+ mxList->addAttribute("xlink:actuate", sXML_CDATA, "onLoad");
}
if( hwpinfo.back_info.flag >= 2)
- padd("style:repeat", sXML_CDATA, "stretch");
+ mxList->addAttribute("style:repeat", sXML_CDATA, "stretch");
else if( hwpinfo.back_info.flag == 1 ){
- padd("style:repeat", sXML_CDATA, "no-repeat");
- padd("style:position", sXML_CDATA, "center");
+ mxList->addAttribute("style:repeat", sXML_CDATA, "no-repeat");
+ mxList->addAttribute("style:position", sXML_CDATA, "center");
}
- rstartEl("style:background-image",mxList);
+ startEl("style:background-image");
if( hwpinfo.back_info.type == 2 ){
- rstartEl("office:binary-data", mxList);
+ startEl("office:binary-data");
mxList->clear();
- std::shared_ptr<char> pStr(base64_encode_string(reinterpret_cast<unsigned char *>(hwpinfo.back_info.data.data()), hwpinfo.back_info.size ), Free<char>());
- rchars(ascii(pStr.get()));
- rendEl("office:binary-data");
+ chars(base64_encode_string(reinterpret_cast<unsigned char*>(hwpinfo.back_info.data.data()), hwpinfo.back_info.size));
+ endEl("office:binary-data");
}
- rendEl("style:background-image");
+ endEl("style:background-image");
}
makeColumns( hwpfile.GetColumnDef(i) );
- rendEl("style:properties");
+ endEl("style:properties");
/* header style */
- rstartEl("style:header-style", mxList);
- padd("svg:height", sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.header_length)) + "inch");
- padd("fo:margin-bottom", sXML_CDATA, "0mm");
+ startEl("style:header-style");
+ mxList->addAttribute("svg:height", sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.header_length)) + "inch");
+ mxList->addAttribute("fo:margin-bottom", sXML_CDATA, "0mm");
- rstartEl("style:properties",mxList);
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
- rendEl("style:header-style");
+ endEl("style:properties");
+ endEl("style:header-style");
/* footer style */
- rstartEl("style:footer-style", mxList);
- padd("svg:height", sXML_CDATA,
- Double2Str(WTI(hwpinfo.paper.footer_length)) + "inch");
- padd("fo:margin-top", sXML_CDATA, "0mm");
- rstartEl("style:properties",mxList);
+ startEl("style:footer-style");
+ mxList->addAttribute("svg:height", sXML_CDATA,
+ OUString::number(WTI(hwpinfo.paper.footer_length)) + "inch");
+ mxList->addAttribute("fo:margin-top", sXML_CDATA, "0mm");
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
- rendEl("style:footer-style");
+ endEl("style:properties");
+ endEl("style:footer-style");
/* Footnote style */
- rstartEl("style:page-layout-properties", mxList);
+ startEl("style:page-layout-properties");
- padd("style:distance-before-sep", sXML_CDATA,
- Double2Str(WTI(hwpinfo.splinetext)) + "inch");
- padd("style:distance-after-sep", sXML_CDATA,
- Double2Str(WTI(hwpinfo.splinefn)) + "inch");
- rstartEl("style:properties",mxList);
+ mxList->addAttribute("style:distance-before-sep", sXML_CDATA,
+ OUString::number(WTI(hwpinfo.splinetext)) + "inch");
+ mxList->addAttribute("style:distance-after-sep", sXML_CDATA,
+ OUString::number(WTI(hwpinfo.splinefn)) + "inch");
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
+ endEl("style:properties");
if ( hwpinfo.fnlinetype == 2 )
- padd("style:width", sXML_CDATA, "15cm");
+ mxList->addAttribute("style:width", sXML_CDATA, "15cm");
else if ( hwpinfo.fnlinetype == 1)
- padd("style:width", sXML_CDATA, "2cm");
+ mxList->addAttribute("style:width", sXML_CDATA, "2cm");
else if ( hwpinfo.fnlinetype == 3)
- padd("style:width", sXML_CDATA, "0cm");
+ mxList->addAttribute("style:width", sXML_CDATA, "0cm");
else
- padd("style:width", sXML_CDATA, "5cm");
+ mxList->addAttribute("style:width", sXML_CDATA, "5cm");
- rstartEl("style:footnote-sep",mxList);
+ startEl("style:footnote-sep");
mxList->clear();
- rendEl("style:footnote-sep");
+ endEl("style:footnote-sep");
- rendEl("style:page-layout-properties");
+ endEl("style:page-layout-properties");
- rendEl("style:page-master");
+ endEl("style:page-master");
}
}
void HwpReader::makeColumns(ColumnDef const *coldef)
{
if( !coldef ) return;
- padd("fo:column-count", sXML_CDATA, ascii(Int2Str(coldef->ncols, "%d", buf)));
- rstartEl("style:columns",mxList);
+ mxList->addAttribute("fo:column-count", sXML_CDATA, OUString::number(coldef->ncols));
+ startEl("style:columns");
mxList->clear();
if( coldef->separator != 0 )
{
switch( coldef->separator )
{
case 1: /* thin line */
- padd("style:width", sXML_CDATA, "0.02mm");
+ mxList->addAttribute("style:width", sXML_CDATA, "0.02mm");
[[fallthrough]];
case 3: /* dotted line */
- padd("style:style", sXML_CDATA, "dotted");
- padd("style:width", sXML_CDATA, "0.02mm");
+ mxList->addAttribute("style:style", sXML_CDATA, "dotted");
+ mxList->addAttribute("style:width", sXML_CDATA, "0.02mm");
break;
case 2: /* thick line */
case 4: /* double line */
- padd("style:width", sXML_CDATA, "0.35mm");
+ mxList->addAttribute("style:width", sXML_CDATA, "0.35mm");
break;
case 0: /* None */
default:
- padd("style:style", sXML_CDATA, "none");
+ mxList->addAttribute("style:style", sXML_CDATA, "none");
break;
}
- rstartEl("style:column-sep",mxList);
+ startEl("style:column-sep");
mxList->clear();
- rendEl("style:column-sep");
+ endEl("style:column-sep");
}
double spacing = WTI(coldef->spacing)/ 2. ;
for(int ii = 0 ; ii < coldef->ncols ; ii++)
{
if( ii == 0 )
- padd("fo:margin-left", sXML_CDATA, "0mm");
+ mxList->addAttribute("fo:margin-left", sXML_CDATA, "0mm");
else
- padd("fo:margin-left", sXML_CDATA,
- Double2Str( spacing) + "inch");
+ mxList->addAttribute("fo:margin-left", sXML_CDATA,
+ OUString::number( spacing) + "inch");
if( ii == ( coldef->ncols -1) )
- padd("fo:margin-right", sXML_CDATA,"0mm");
+ mxList->addAttribute("fo:margin-right", sXML_CDATA,"0mm");
else
- padd("fo:margin-right", sXML_CDATA,
- Double2Str( spacing) + "inch");
- rstartEl("style:column",mxList);
+ mxList->addAttribute("fo:margin-right", sXML_CDATA,
+ OUString::number( spacing) + "inch");
+ startEl("style:column");
mxList->clear();
- rendEl("style:column");
+ endEl("style:column");
}
- rendEl("style:columns");
+ endEl("style:columns");
}
void HwpReader::makeTStyle(CharShape const * cshape)
{
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(cshape->index, "T%d", buf)));
- padd("style:family", sXML_CDATA, "text");
- rstartEl("style:style", mxList);
+ mxList->addAttribute("style:name", sXML_CDATA, "T" + OUString::number(cshape->index));
+ mxList->addAttribute("style:family", sXML_CDATA, "text");
+ startEl("style:style");
mxList->clear();
parseCharShape(cshape);
- rstartEl("style:properties", mxList);
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
- rendEl("style:style");
+ endEl("style:properties");
+ endEl("style:style");
}
@@ -1875,63 +1805,68 @@ void HwpReader::makeTableStyle(Table *tbl)
// table
TxtBox *hbox = tbl->box;
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(hbox->style.boxnum, "Table%d", buf)));
- padd("style:family", sXML_CDATA,"table");
- rstartEl("style:style", mxList);
+ mxList->addAttribute("style:name", sXML_CDATA, "Table" + OUString::number(hbox->style.boxnum));
+ mxList->addAttribute("style:family", sXML_CDATA,"table");
+ startEl("style:style");
mxList->clear();
- padd("style:width", sXML_CDATA,
- Double2Str(WTMM(hbox->box_xs)) + "mm");
- padd("table:align", sXML_CDATA,"left");
- padd("fo:keep-with-next", sXML_CDATA,"false");
- rstartEl("style:properties", mxList);
+ mxList->addAttribute("style:width", sXML_CDATA,
+ OUString::number(WTMM(hbox->box_xs)) + "mm");
+ mxList->addAttribute("table:align", sXML_CDATA,"left");
+ mxList->addAttribute("fo:keep-with-next", sXML_CDATA,"false");
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
- rendEl("style:style");
+ endEl("style:properties");
+ endEl("style:style");
// column
for (size_t i = 0 ; i < tbl->columns.nCount -1 ; i++)
{
- sprintf(buf,"Table%d.%c",hbox->style.boxnum, static_cast<char>('A'+i));
- padd("style:name", sXML_CDATA, ascii( buf ));
- padd("style:family", sXML_CDATA,"table-column");
- rstartEl("style:style", mxList);
+ mxList->addAttribute(
+ "style:name", sXML_CDATA,
+ "Table" + OUString::number(hbox->style.boxnum) + "."
+ + OUStringChar(static_cast<char>('A'+i)));
+ mxList->addAttribute("style:family", sXML_CDATA,"table-column");
+ startEl("style:style");
mxList->clear();
- padd("style:column-width", sXML_CDATA,
- Double2Str(WTMM(tbl->columns.data[i+1] - tbl->columns.data[i])) + "mm");
- rstartEl("style:properties", mxList);
+ mxList->addAttribute("style:column-width", sXML_CDATA,
+ OUString::number(WTMM(tbl->columns.data[i+1] - tbl->columns.data[i])) + "mm");
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
- rendEl("style:style");
+ endEl("style:properties");
+ endEl("style:style");
}
// row
for (size_t i = 0 ; i < tbl->rows.nCount -1 ; i++)
{
- sprintf(buf,"Table%d.row%" SAL_PRI_SIZET "u",hbox->style.boxnum, i + 1);
- padd("style:name", sXML_CDATA, ascii( buf ));
- padd("style:family", sXML_CDATA,"table-row");
- rstartEl("style:style", mxList);
+ mxList->addAttribute(
+ "style:name", sXML_CDATA,
+ "Table" + OUString::number(hbox->style.boxnum) + ".row" + OUString::number(i + 1));
+ mxList->addAttribute("style:family", sXML_CDATA,"table-row");
+ startEl("style:style");
mxList->clear();
- padd("style:row-height", sXML_CDATA,
- Double2Str(WTMM(tbl->rows.data[i+1] - tbl->rows.data[i])) + "mm");
- rstartEl("style:properties", mxList);
+ mxList->addAttribute("style:row-height", sXML_CDATA,
+ OUString::number(WTMM(tbl->rows.data[i+1] - tbl->rows.data[i])) + "mm");
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
- rendEl("style:style");
+ endEl("style:properties");
+ endEl("style:style");
}
// cell
for (auto const& tcell : tbl->cells)
{
- sprintf(buf,"Table%d.%c%d",hbox->style.boxnum, 'A'+ tcell->nColumnIndex, tcell->nRowIndex +1);
- padd("style:name", sXML_CDATA, ascii( buf ));
- padd("style:family", sXML_CDATA,"table-cell");
- rstartEl("style:style", mxList);
+ mxList->addAttribute(
+ "style:name", sXML_CDATA,
+ "Table" + OUString::number(hbox->style.boxnum) + "."
+ + OUStringChar(char('A'+ tcell->nColumnIndex))
+ + OUString::number(tcell->nRowIndex +1));
+ mxList->addAttribute("style:family", sXML_CDATA,"table-cell");
+ startEl("style:style");
mxList->clear();
Cell *cl = tcell->pCell;
if( cl->ver_align == 1 )
- padd("fo:vertical-align", sXML_CDATA,"middle");
+ mxList->addAttribute("fo:vertical-align", sXML_CDATA,"middle");
if(cl->linetype[2] == cl->linetype[3] && cl->linetype[2] == cl->linetype[0]
&& cl->linetype[2] == cl->linetype[1])
@@ -1940,14 +1875,14 @@ void HwpReader::makeTableStyle(Table *tbl)
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.039cm double #000000");
break;
}
}
@@ -1957,69 +1892,69 @@ void HwpReader::makeTableStyle(Table *tbl)
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border-left", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border-left", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border-left", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border-left", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width-left", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border-left", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width-left", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border-left", sXML_CDATA,"0.039cm double #000000");
break;
}
switch( cl->linetype[1] )
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border-right", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border-right", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border-right", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border-right", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width-right", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border-right", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width-right", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border-right", sXML_CDATA,"0.039cm double #000000");
break;
}
switch( cl->linetype[2] )
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border-top", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border-top", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border-top", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border-top", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width-top", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border-top", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width-top", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border-top", sXML_CDATA,"0.039cm double #000000");
break;
}
switch( cl->linetype[3] )
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border-bottom", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border-bottom", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border-bottom", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border-bottom", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width-bottom", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border-bottom", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width-bottom", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border-bottom", sXML_CDATA,"0.039cm double #000000");
break;
}
}
if(cl->shade != 0)
- padd("fo:background-color", sXML_CDATA,
- ascii(hcolor2str(sal::static_int_cast<uchar>(cl->color),
- sal::static_int_cast<uchar>(cl->shade), buf)));
+ mxList->addAttribute("fo:background-color", sXML_CDATA,
+ hcolor2str(sal::static_int_cast<uchar>(cl->color),
+ sal::static_int_cast<uchar>(cl->shade)));
- rstartEl("style:properties", mxList);
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
+ endEl("style:properties");
- rendEl("style:style");
+ endEl("style:style");
}
}
@@ -2028,11 +1963,10 @@ void HwpReader::makeDrawStyle( HWPDrawingObject * hdo, FBoxStyle * fstyle)
{
while( hdo )
{
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(hdo->index, "Draw%d", buf)));
- padd("style:family", sXML_CDATA, "graphics");
+ mxList->addAttribute("style:name", sXML_CDATA, "Draw" + OUString::number(hdo->index));
+ mxList->addAttribute("style:family", sXML_CDATA, "graphics");
- rstartEl("style:style", mxList);
+ startEl("style:style");
mxList->clear();
switch (fstyle->txtflow)
@@ -2040,83 +1974,80 @@ void HwpReader::makeDrawStyle( HWPDrawingObject * hdo, FBoxStyle * fstyle)
case 0:
break;
case 1:
- padd("style:wrap", sXML_CDATA, "run-through");
+ mxList->addAttribute("style:wrap", sXML_CDATA, "run-through");
break;
case 2:
- padd("style:wrap", sXML_CDATA, "dynamic");
+ mxList->addAttribute("style:wrap", sXML_CDATA, "dynamic");
break;
}
tools::Long color;
// invisible line
if( hdo->property.line_color > 0xffffff )
{
- padd("draw:stroke", sXML_CDATA, "none" );
+ mxList->addAttribute("draw:stroke", sXML_CDATA, "none" );
}
else
{
if( hdo->property.line_pstyle == 0 )
- padd("draw:stroke", sXML_CDATA, "solid" );
+ mxList->addAttribute("draw:stroke", sXML_CDATA, "solid" );
else if( hdo->property.line_pstyle < 5 )
{
- padd("draw:stroke", sXML_CDATA, "dash" );
- padd("draw:stroke-dash", sXML_CDATA,
- ascii(Int2Str(hdo->index, "LineType%d", buf)));
+ mxList->addAttribute("draw:stroke", sXML_CDATA, "dash" );
+ mxList->addAttribute("draw:stroke-dash", sXML_CDATA, "LineType" + OUString::number(hdo->index));
}
- padd("svg:stroke-width", sXML_CDATA,
- Double2Str( WTMM(hdo->property.line_width)) + "mm");
- color = hdo->property.line_color;
- sprintf( buf, "#%02x%02x%02x",
- sal_uInt16(color & 0xff),
- sal_uInt16((color >> 8) & 0xff),
- sal_uInt16((color >>16) & 0xff) );
- padd("svg:stroke-color", sXML_CDATA, ascii( buf) );
+ mxList->addAttribute("svg:stroke-width", sXML_CDATA,
+ OUString::number( WTMM(hdo->property.line_width)) + "mm");
+ mxList->addAttribute("svg:stroke-color", sXML_CDATA,
+ rgb2str(static_cast<int32_t>(hdo->property.line_color)));
}
if( hdo->type == HWPDO_LINE || hdo->type == HWPDO_ARC ||
hdo->type == HWPDO_FREEFORM || hdo->type == HWPDO_ADVANCED_ARC )
{
- if( hdo->property.line_tstyle > 0 )
+ if( hdo->property.line_tstyle > 0 &&
+ o3tl::make_unsigned(hdo->property.line_tstyle) < std::size(ArrowShape) )
{
- padd("draw:marker-start", sXML_CDATA,
- ascii(ArrowShape[hdo->property.line_tstyle].name) );
+ mxList->addAttribute("draw:marker-start", sXML_CDATA,
+ OUString::createFromAscii(ArrowShape[hdo->property.line_tstyle].name) );
if( hdo->property.line_width > 100 )
- padd("draw:marker-start-width", sXML_CDATA,
- Double2Str( WTMM(hdo->property.line_width * 3)) + "mm");
+ mxList->addAttribute("draw:marker-start-width", sXML_CDATA,
+ OUString::number( WTMM(hdo->property.line_width * 3)) + "mm");
else if( hdo->property.line_width > 80 )
- padd("draw:marker-start-width", sXML_CDATA,
- Double2Str( WTMM(hdo->property.line_width * 4)) + "mm");
+ mxList->addAttribute("draw:marker-start-width", sXML_CDATA,
+ OUString::number( WTMM(hdo->property.line_width * 4)) + "mm");
else if( hdo->property.line_width > 60 )
- padd("draw:marker-start-width", sXML_CDATA,
- Double2Str( WTMM(hdo->property.line_width * 5)) + "mm");
+ mxList->addAttribute("draw:marker-start-width", sXML_CDATA,
+ OUString::number( WTMM(hdo->property.line_width * 5)) + "mm");
else if( hdo->property.line_width > 40 )
- padd("draw:marker-start-width", sXML_CDATA,
- Double2Str( WTMM(hdo->property.line_width * 6)) + "mm");
+ mxList->addAttribute("draw:marker-start-width", sXML_CDATA,
+ OUString::number( WTMM(hdo->property.line_width * 6)) + "mm");
else
- padd("draw:marker-start-width", sXML_CDATA,
- Double2Str( WTMM(hdo->property.line_width * 7)) + "mm");
+ mxList->addAttribute("draw:marker-start-width", sXML_CDATA,
+ OUString::number( WTMM(hdo->property.line_width * 7)) + "mm");
}
- if( hdo->property.line_hstyle > 0 )
+ if( hdo->property.line_hstyle > 0 &&
+ o3tl::make_unsigned(hdo->property.line_hstyle) < std::size(ArrowShape) )
{
- padd("draw:marker-end", sXML_CDATA,
- ascii(ArrowShape[hdo->property.line_hstyle].name) );
+ mxList->addAttribute("draw:marker-end", sXML_CDATA,
+ OUString::createFromAscii(ArrowShape[hdo->property.line_hstyle].name) );
if( hdo->property.line_width > 100 )
- padd("draw:marker-end-width", sXML_CDATA,
- Double2Str( WTMM(hdo->property.line_width * 3)) + "mm");
+ mxList->addAttribute("draw:marker-end-width", sXML_CDATA,
+ OUString::number( WTMM(hdo->property.line_width * 3)) + "mm");
else if( hdo->property.line_width > 80 )
- padd("draw:marker-end-width", sXML_CDATA,
- Double2Str( WTMM(hdo->property.line_width * 4)) + "mm");
+ mxList->addAttribute("draw:marker-end-width", sXML_CDATA,
+ OUString::number( WTMM(hdo->property.line_width * 4)) + "mm");
else if( hdo->property.line_width > 60 )
- padd("draw:marker-end-width", sXML_CDATA,
- Double2Str( WTMM(hdo->property.line_width * 5)) + "mm");
+ mxList->addAttribute("draw:marker-end-width", sXML_CDATA,
+ OUString::number( WTMM(hdo->property.line_width * 5)) + "mm");
else if( hdo->property.line_width > 40 )
- padd("draw:marker-end-width", sXML_CDATA,
- Double2Str( WTMM(hdo->property.line_width * 6)) + "mm");
+ mxList->addAttribute("draw:marker-end-width", sXML_CDATA,
+ OUString::number( WTMM(hdo->property.line_width * 6)) + "mm");
else
- padd("draw:marker-end-width", sXML_CDATA,
- Double2Str( WTMM(hdo->property.line_width * 7)) + "mm");
+ mxList->addAttribute("draw:marker-end-width", sXML_CDATA,
+ OUString::number( WTMM(hdo->property.line_width * 7)) + "mm");
}
}
@@ -2124,32 +2055,32 @@ void HwpReader::makeDrawStyle( HWPDrawingObject * hdo, FBoxStyle * fstyle)
{
if( hdo->property.flag >> 19 & 0x01 )
{
- padd( "draw:textarea-horizontal-align", sXML_CDATA, "center");
+ mxList->addAttribute( "draw:textarea-horizontal-align", sXML_CDATA, "center");
}
color = hdo->property.fill_color;
if( hdo->property.flag >> 18 & 0x01 ) // bitmap pattern
{
- padd("draw:fill", sXML_CDATA, "bitmap");
- padd("draw:fill-image-name", sXML_CDATA,
- ascii(Int2Str(hdo->index, "fillimage%d", buf)));
+ mxList->addAttribute("draw:fill", sXML_CDATA, "bitmap");
+ mxList->addAttribute("draw:fill-image-name", sXML_CDATA,
+ "fillimage" + OUString::number(hdo->index));
// bitmap resizing
if( hdo->property.flag >> 3 & 0x01 )
{
- padd("style:repeat", sXML_CDATA, "stretch");
+ mxList->addAttribute("style:repeat", sXML_CDATA, "stretch");
}
else
{
- padd("style:repeat", sXML_CDATA, "repeat");
- padd("draw:fill-image-ref-point", sXML_CDATA, "top-left");
+ mxList->addAttribute("style:repeat", sXML_CDATA, "repeat");
+ mxList->addAttribute("draw:fill-image-ref-point", sXML_CDATA, "top-left");
}
if( hdo->property.flag >> 20 & 0x01 )
{
if( hdo->property.luminance > 0 )
{
- padd("draw:transparency", sXML_CDATA,
- ascii(Int2Str(hdo->property.luminance, "%d%%", buf)));
+ mxList->addAttribute("draw:transparency", sXML_CDATA,
+ OUString::number(hdo->property.luminance) + "%");
}
}
@@ -2157,52 +2088,43 @@ void HwpReader::makeDrawStyle( HWPDrawingObject * hdo, FBoxStyle * fstyle)
// Gradation
else if( hdo->property.flag >> 16 & 0x01 )
{
- padd("draw:fill", sXML_CDATA, "gradient");
- padd("draw:fill-gradient-name", sXML_CDATA,
- ascii(Int2Str(hdo->index, "Grad%d", buf)));
- padd("draw:gradient-step-count", sXML_CDATA,
- ascii(Int2Str(hdo->property.nstep, "%d", buf)));
+ mxList->addAttribute("draw:fill", sXML_CDATA, "gradient");
+ mxList->addAttribute("draw:fill-gradient-name", sXML_CDATA, "Grad" + OUString::number(hdo->index));
+ mxList->addAttribute("draw:gradient-step-count", sXML_CDATA, OUString::number(hdo->property.nstep));
}
// Hatching
else if( hdo->property.pattern_type >> 24 & 0x01 )
{
- padd("draw:fill", sXML_CDATA, "hatch");
- padd("draw:fill-hatch-name", sXML_CDATA,
- ascii(Int2Str(hdo->index, "Hatch%d", buf)));
+ mxList->addAttribute("draw:fill", sXML_CDATA, "hatch");
+ mxList->addAttribute("draw:fill-hatch-name", sXML_CDATA, "Hatch" + OUString::number(hdo->index));
if( color < 0xffffff )
{
- sprintf( buf, "#%02x%02x%02x",
- sal_uInt16(color & 0xff),
- sal_uInt16((color >> 8) & 0xff),
- sal_uInt16((color >>16) & 0xff) );
- padd("draw:fill-color", sXML_CDATA, ascii( buf) );
- padd("draw:fill-hatch-solid", sXML_CDATA, "true");
+ mxList->addAttribute("draw:fill-color", sXML_CDATA,
+ rgb2str(static_cast<int32_t>(color)));
+ mxList->addAttribute("draw:fill-hatch-solid", sXML_CDATA, "true");
}
}
else if( color <= 0xffffff )
{
- padd("draw:fill", sXML_CDATA, "solid");
- sprintf( buf, "#%02x%02x%02x",
- sal_uInt16(color & 0xff),
- sal_uInt16((color >> 8) & 0xff),
- sal_uInt16((color >>16) & 0xff) );
- padd("draw:fill-color", sXML_CDATA, ascii( buf) );
+ mxList->addAttribute("draw:fill", sXML_CDATA, "solid");
+ mxList->addAttribute("draw:fill-color", sXML_CDATA,
+ rgb2str(static_cast<int32_t>(color)));
}
else
- padd("draw:fill", sXML_CDATA, "none");
+ mxList->addAttribute("draw:fill", sXML_CDATA, "none");
}
if( fstyle->anchor_type == CHAR_ANCHOR )
{
- padd("style:vertical-pos", sXML_CDATA, "top");
- padd("style:vertical-rel", sXML_CDATA, "baseline");
+ mxList->addAttribute("style:vertical-pos", sXML_CDATA, "top");
+ mxList->addAttribute("style:vertical-rel", sXML_CDATA, "baseline");
}
- rstartEl("style:properties", mxList);
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
- rendEl("style:style");
+ endEl("style:properties");
+ endEl("style:style");
if( hdo->type == 0 )
{
@@ -2215,36 +2137,35 @@ void HwpReader::makeDrawStyle( HWPDrawingObject * hdo, FBoxStyle * fstyle)
void HwpReader::makeCaptionStyle(FBoxStyle * fstyle)
{
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(fstyle->boxnum, "CapBox%d", buf)));
- padd("style:family", sXML_CDATA, "graphics");
- rstartEl("style:style", mxList);
+ mxList->addAttribute("style:name", sXML_CDATA, "CapBox" + OUString::number(fstyle->boxnum));
+ mxList->addAttribute("style:family", sXML_CDATA, "graphics");
+ startEl("style:style");
mxList->clear();
- padd("fo:margin-left", sXML_CDATA, "0cm");
- padd("fo:margin-right", sXML_CDATA, "0cm");
- padd("fo:margin-top", sXML_CDATA, "0cm");
- padd("fo:margin-bottom", sXML_CDATA, "0cm");
- padd("fo:padding", sXML_CDATA, "0cm");
+ mxList->addAttribute("fo:margin-left", sXML_CDATA, "0cm");
+ mxList->addAttribute("fo:margin-right", sXML_CDATA, "0cm");
+ mxList->addAttribute("fo:margin-top", sXML_CDATA, "0cm");
+ mxList->addAttribute("fo:margin-bottom", sXML_CDATA, "0cm");
+ mxList->addAttribute("fo:padding", sXML_CDATA, "0cm");
switch (fstyle->txtflow)
{
case 0:
- padd("style:wrap", sXML_CDATA, "none");
+ mxList->addAttribute("style:wrap", sXML_CDATA, "none");
break;
case 1:
if( fstyle->boxtype == 'G' )
- padd("style:run-through", sXML_CDATA, "background");
- padd("style:wrap", sXML_CDATA, "run-through");
+ mxList->addAttribute("style:run-through", sXML_CDATA, "background");
+ mxList->addAttribute("style:wrap", sXML_CDATA, "run-through");
break;
case 2:
- padd("style:wrap", sXML_CDATA, "dynamic");
+ mxList->addAttribute("style:wrap", sXML_CDATA, "dynamic");
break;
}
if (fstyle->anchor_type == CHAR_ANCHOR)
{
- padd("style:vertical-pos", sXML_CDATA, "top");
- padd("style:vertical-rel", sXML_CDATA, "baseline");
- padd("style:horizontal-pos", sXML_CDATA, "center");
- padd("style:horizontal-rel", sXML_CDATA, "paragraph");
+ mxList->addAttribute("style:vertical-pos", sXML_CDATA, "top");
+ mxList->addAttribute("style:vertical-rel", sXML_CDATA, "baseline");
+ mxList->addAttribute("style:horizontal-pos", sXML_CDATA, "center");
+ mxList->addAttribute("style:horizontal-rel", sXML_CDATA, "paragraph");
}
else
{
@@ -2252,84 +2173,80 @@ void HwpReader::makeCaptionStyle(FBoxStyle * fstyle)
switch (-(fstyle->xpos))
{
case 2:
- padd("style:horizontal-pos", sXML_CDATA, "right");
+ mxList->addAttribute("style:horizontal-pos", sXML_CDATA, "right");
break;
case 3:
- padd("style:horizontal-pos", sXML_CDATA, "center");
+ mxList->addAttribute("style:horizontal-pos", sXML_CDATA, "center");
break;
case 1:
default:
- padd("style:horizontal-pos", sXML_CDATA, "from-left");
+ mxList->addAttribute("style:horizontal-pos", sXML_CDATA, "from-left");
break;
}
switch (-(fstyle->ypos))
{
case 2:
- padd("style:vertical-pos", sXML_CDATA, "bottom");
+ mxList->addAttribute("style:vertical-pos", sXML_CDATA, "bottom");
break;
case 3:
- padd("style:vertical-pos", sXML_CDATA, "middle");
+ mxList->addAttribute("style:vertical-pos", sXML_CDATA, "middle");
break;
case 1:
default:
- padd("style:vertical-pos", sXML_CDATA, "from-top");
+ mxList->addAttribute("style:vertical-pos", sXML_CDATA, "from-top");
break;
}
if ( fstyle->anchor_type == PARA_ANCHOR )
{
- padd("style:vertical-rel", sXML_CDATA, "paragraph");
- padd("style:horizontal-rel", sXML_CDATA, "paragraph");
+ mxList->addAttribute("style:vertical-rel", sXML_CDATA, "paragraph");
+ mxList->addAttribute("style:horizontal-rel", sXML_CDATA, "paragraph");
}
else
{
- padd("style:vertical-rel", sXML_CDATA, "page-content");
- padd("style:horizontal-rel", sXML_CDATA, "page-content");
+ mxList->addAttribute("style:vertical-rel", sXML_CDATA, "page-content");
+ mxList->addAttribute("style:horizontal-rel", sXML_CDATA, "page-content");
}
}
- rstartEl("style:properties", mxList);
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
- rendEl("style:style");
+ endEl("style:properties");
+ endEl("style:style");
if( fstyle->boxtype == 'G' )
{
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(fstyle->boxnum, "G%d", buf)));
+ mxList->addAttribute("style:name", sXML_CDATA, "G" + OUString::number(fstyle->boxnum));
}
else
{
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(fstyle->boxnum, "Txtbox%d", buf)));
+ mxList->addAttribute("style:name", sXML_CDATA, "Txtbox" + OUString::number(fstyle->boxnum));
}
- padd("style:family", sXML_CDATA, "graphics");
- rstartEl("style:style", mxList);
+ mxList->addAttribute("style:family", sXML_CDATA, "graphics");
+ startEl("style:style");
mxList->clear();
- padd("fo:margin-left", sXML_CDATA, "0cm");
- padd("fo:margin-right", sXML_CDATA, "0cm");
- padd("fo:margin-top", sXML_CDATA, "0cm");
- padd("fo:margin-bottom", sXML_CDATA, "0cm");
- padd("fo:padding", sXML_CDATA, "0cm");
- padd("style:wrap", sXML_CDATA, "none");
- padd("style:vertical-pos", sXML_CDATA, "from-top");
- padd("style:vertical-rel", sXML_CDATA, "paragraph");
- padd("style:horizontal-pos", sXML_CDATA, "from-left");
- padd("style:horizontal-rel", sXML_CDATA, "paragraph");
- if( fstyle->boxtype == 'G' )
+ mxList->addAttribute("fo:margin-left", sXML_CDATA, "0cm");
+ mxList->addAttribute("fo:margin-right", sXML_CDATA, "0cm");
+ mxList->addAttribute("fo:margin-top", sXML_CDATA, "0cm");
+ mxList->addAttribute("fo:margin-bottom", sXML_CDATA, "0cm");
+ mxList->addAttribute("fo:padding", sXML_CDATA, "0cm");
+ mxList->addAttribute("style:wrap", sXML_CDATA, "none");
+ mxList->addAttribute("style:vertical-pos", sXML_CDATA, "from-top");
+ mxList->addAttribute("style:vertical-rel", sXML_CDATA, "paragraph");
+ mxList->addAttribute("style:horizontal-pos", sXML_CDATA, "from-left");
+ mxList->addAttribute("style:horizontal-rel", sXML_CDATA, "paragraph");
+ if (fstyle->boxtype == 'G' && fstyle->cell)
{
char *cell = static_cast<char *>(fstyle->cell);
- padd("draw:luminance", sXML_CDATA,
- ascii(Int2Str(cell[0], "%d%%", buf)));
- padd("draw:contrast", sXML_CDATA,
- ascii(Int2Str(cell[1], "%d%%", buf)));
+ mxList->addAttribute("draw:luminance", sXML_CDATA, OUString::number(cell[0]) + "%");
+ mxList->addAttribute("draw:contrast", sXML_CDATA, OUString::number(cell[1]) + "%");
if( cell[2] == 0 )
- padd("draw:color-mode", sXML_CDATA, "standard");
+ mxList->addAttribute("draw:color-mode", sXML_CDATA, "standard");
else if( cell[2] == 1 )
- padd("draw:color-mode", sXML_CDATA, "greyscale");
+ mxList->addAttribute("draw:color-mode", sXML_CDATA, "greyscale");
else if( cell[2] == 2 )
- padd("draw:color-mode", sXML_CDATA, "mono");
+ mxList->addAttribute("draw:color-mode", sXML_CDATA, "mono");
}
- else
+ else if (fstyle->cell)
{
Cell *cell = static_cast<Cell *>(fstyle->cell);
if(cell->linetype[0] == cell->linetype[1] &&
@@ -2339,18 +2256,18 @@ void HwpReader::makeCaptionStyle(FBoxStyle * fstyle)
switch( cell->linetype[0] )
{
case 0:
- padd("fo:padding", sXML_CDATA,"0mm");
+ mxList->addAttribute("fo:padding", sXML_CDATA,"0mm");
break;
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.039cm double #000000");
break;
}
}
@@ -2360,68 +2277,68 @@ void HwpReader::makeCaptionStyle(FBoxStyle * fstyle)
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border-left", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border-left", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border-left", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border-left", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width-left", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border-left", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width-left", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border-left", sXML_CDATA,"0.039cm double #000000");
break;
}
switch( cell->linetype[1] )
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border-right", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border-right", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border-right", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border-right", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width-right", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border-right", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width-right", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border-right", sXML_CDATA,"0.039cm double #000000");
break;
}
switch( cell->linetype[2] )
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border-top", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border-top", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border-top", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border-top", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width-top", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border-top", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width-top", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border-top", sXML_CDATA,"0.039cm double #000000");
break;
}
switch( cell->linetype[3] )
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border-bottom", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border-bottom", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border-bottom", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border-bottom", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width-bottom", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border-bottom", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width-bottom", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border-bottom", sXML_CDATA,"0.039cm double #000000");
break;
}
}
if(cell->shade != 0)
- padd("fo:background-color", sXML_CDATA, ascii(hcolor2str(
+ mxList->addAttribute("fo:background-color", sXML_CDATA, hcolor2str(
sal::static_int_cast<uchar>(cell->color),
- sal::static_int_cast<uchar>(cell->shade), buf)));
+ sal::static_int_cast<uchar>(cell->shade)));
}
- rstartEl("style:properties", mxList);
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
- rendEl("style:style");
+ endEl("style:properties");
+ endEl("style:style");
}
@@ -2443,62 +2360,59 @@ void HwpReader::makeFStyle(FBoxStyle * fstyle)
case 'B' : // button
case 'O' : // other
case 'T' : // table
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(fstyle->boxnum, "Txtbox%d", buf)));
- padd("style:family", sXML_CDATA, "graphics");
+ mxList->addAttribute("style:name", sXML_CDATA, "Txtbox" + OUString::number(fstyle->boxnum));
+ mxList->addAttribute("style:family", sXML_CDATA, "graphics");
break;
case 'G' : // graphics
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(fstyle->boxnum, "G%d", buf)));
- padd("style:family", sXML_CDATA, "graphics");
+ mxList->addAttribute("style:name", sXML_CDATA, "G" + OUString::number(fstyle->boxnum));
+ mxList->addAttribute("style:family", sXML_CDATA, "graphics");
break;
case 'L' : // line TODO : all
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(fstyle->boxnum, "L%d", buf)));
- padd( "style:family" , sXML_CDATA , "paragraph" );
+ mxList->addAttribute("style:name", sXML_CDATA, "L" + OUString::number(fstyle->boxnum));
+ mxList->addAttribute( "style:family" , sXML_CDATA , "paragraph" );
break;
}
- rstartEl("style:style", mxList);
+ startEl("style:style");
mxList->clear();
if ( fstyle->boxtype == 'T')
{
- padd("fo:padding", sXML_CDATA, "0cm");
+ mxList->addAttribute("fo:padding", sXML_CDATA, "0cm");
}
if( fstyle->boxtype != 'G' || fstyle->cap_len <= 0 )
{
- padd("fo:margin-left", sXML_CDATA,
- Double2Str(WTMM(fstyle->margin[0][0]) ) + "mm");
- padd("fo:margin-right", sXML_CDATA,
- Double2Str(WTMM(fstyle->margin[0][1])) + "mm");
- padd("fo:margin-top", sXML_CDATA,
- Double2Str(WTMM(fstyle->margin[0][2])) + "mm");
- padd("fo:margin-bottom", sXML_CDATA,
- Double2Str(WTMM(fstyle->margin[0][3])) + "mm");
+ mxList->addAttribute("fo:margin-left", sXML_CDATA,
+ OUString::number(WTMM(fstyle->margin[0][0]) ) + "mm");
+ mxList->addAttribute("fo:margin-right", sXML_CDATA,
+ OUString::number(WTMM(fstyle->margin[0][1])) + "mm");
+ mxList->addAttribute("fo:margin-top", sXML_CDATA,
+ OUString::number(WTMM(fstyle->margin[0][2])) + "mm");
+ mxList->addAttribute("fo:margin-bottom", sXML_CDATA,
+ OUString::number(WTMM(fstyle->margin[0][3])) + "mm");
}
switch (fstyle->txtflow)
{
case 0:
- padd("style:wrap", sXML_CDATA, "none");
+ mxList->addAttribute("style:wrap", sXML_CDATA, "none");
break;
case 1:
if( fstyle->boxtype == 'G' || fstyle->boxtype == 'B' || fstyle->boxtype == 'O')
- padd("style:run-through", sXML_CDATA, "background");
- padd("style:wrap", sXML_CDATA, "run-through");
+ mxList->addAttribute("style:run-through", sXML_CDATA, "background");
+ mxList->addAttribute("style:wrap", sXML_CDATA, "run-through");
break;
case 2:
- padd("style:wrap", sXML_CDATA, "dynamic");
+ mxList->addAttribute("style:wrap", sXML_CDATA, "dynamic");
break;
}
if (fstyle->anchor_type == CHAR_ANCHOR)
{
- padd("style:vertical-pos", sXML_CDATA, "top");
- padd("style:vertical-rel", sXML_CDATA, "baseline");
- padd("style:horizontal-pos", sXML_CDATA, "center");
- padd("style:horizontal-rel", sXML_CDATA, "paragraph");
+ mxList->addAttribute("style:vertical-pos", sXML_CDATA, "top");
+ mxList->addAttribute("style:vertical-rel", sXML_CDATA, "baseline");
+ mxList->addAttribute("style:horizontal-pos", sXML_CDATA, "center");
+ mxList->addAttribute("style:horizontal-rel", sXML_CDATA, "paragraph");
}
else
{
@@ -2506,41 +2420,41 @@ void HwpReader::makeFStyle(FBoxStyle * fstyle)
switch (-(fstyle->xpos))
{
case 2:
- padd("style:horizontal-pos", sXML_CDATA, "right");
+ mxList->addAttribute("style:horizontal-pos", sXML_CDATA, "right");
break;
case 3:
- padd("style:horizontal-pos", sXML_CDATA, "center");
+ mxList->addAttribute("style:horizontal-pos", sXML_CDATA, "center");
break;
case 1:
default:
- padd("style:horizontal-pos", sXML_CDATA, "from-left");
+ mxList->addAttribute("style:horizontal-pos", sXML_CDATA, "from-left");
break;
}
switch (-(fstyle->ypos))
{
case 2:
- padd("style:vertical-pos", sXML_CDATA, "bottom");
+ mxList->addAttribute("style:vertical-pos", sXML_CDATA, "bottom");
break;
case 3:
- padd("style:vertical-pos", sXML_CDATA, "middle");
+ mxList->addAttribute("style:vertical-pos", sXML_CDATA, "middle");
break;
case 1:
default:
- padd("style:vertical-pos", sXML_CDATA, "from-top");
+ mxList->addAttribute("style:vertical-pos", sXML_CDATA, "from-top");
break;
}
if ( fstyle->anchor_type == PARA_ANCHOR )
{
- padd("style:vertical-rel", sXML_CDATA, "paragraph");
- padd("style:horizontal-rel", sXML_CDATA, "paragraph");
+ mxList->addAttribute("style:vertical-rel", sXML_CDATA, "paragraph");
+ mxList->addAttribute("style:horizontal-rel", sXML_CDATA, "paragraph");
}
else
{
- padd("style:vertical-rel", sXML_CDATA, "page-content");
- padd("style:horizontal-rel", sXML_CDATA, "page-content");
+ mxList->addAttribute("style:vertical-rel", sXML_CDATA, "page-content");
+ mxList->addAttribute("style:horizontal-rel", sXML_CDATA, "page-content");
}
}
- if( fstyle->boxtype == 'X' || fstyle->boxtype == 'B' )
+ if (fstyle->cell && (fstyle->boxtype == 'X' || fstyle->boxtype == 'B'))
{
Cell *cell = static_cast<Cell *>(fstyle->cell);
if(cell->linetype[0] == cell->linetype[1] &&
@@ -2550,18 +2464,18 @@ void HwpReader::makeFStyle(FBoxStyle * fstyle)
switch( cell->linetype[0] )
{
case 0:
- padd("fo:border", sXML_CDATA, "none");
+ mxList->addAttribute("fo:border", sXML_CDATA, "none");
break;
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border", sXML_CDATA,"0.039cm double #000000");
break;
}
}
@@ -2571,136 +2485,133 @@ void HwpReader::makeFStyle(FBoxStyle * fstyle)
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border-left", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border-left", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border-left", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border-left", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width-left", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border-left", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width-left", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border-left", sXML_CDATA,"0.039cm double #000000");
break;
}
switch( cell->linetype[1] )
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border-right", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border-right", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border-right", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border-right", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width-right", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border-right", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width-right", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border-right", sXML_CDATA,"0.039cm double #000000");
break;
}
switch( cell->linetype[2] )
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border-top", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border-top", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border-top", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border-top", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width-top", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border-top", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width-top", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border-top", sXML_CDATA,"0.039cm double #000000");
break;
}
switch( cell->linetype[3] )
{
case 1: /* A thin solid line */
case 3: /* Dotted line -> LibreOffice, there is no dotted line */
- padd("fo:border-bottom", sXML_CDATA,"0.002cm solid #000000");
+ mxList->addAttribute("fo:border-bottom", sXML_CDATA,"0.002cm solid #000000");
break;
case 2: /* Bold lines */
- padd("fo:border-bottom", sXML_CDATA,"0.035cm solid #000000");
+ mxList->addAttribute("fo:border-bottom", sXML_CDATA,"0.035cm solid #000000");
break;
case 4: /* Double line */
- padd("style:border-line-width-bottom", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
- padd("fo:border-bottom", sXML_CDATA,"0.039cm double #000000");
+ mxList->addAttribute("style:border-line-width-bottom", sXML_CDATA,"0.002cm 0.035cm 0.002cm");
+ mxList->addAttribute("fo:border-bottom", sXML_CDATA,"0.039cm double #000000");
break;
}
}
if( cell->linetype[0] == 0 && cell->linetype[1] == 0 &&
cell->linetype[2] == 0 && cell->linetype[3] == 0 ){
- padd("fo:padding", sXML_CDATA,"0mm");
+ mxList->addAttribute("fo:padding", sXML_CDATA,"0mm");
}
else{
- padd("fo:padding-left", sXML_CDATA,
- Double2Str(WTMM(fstyle->margin[1][0])) + "mm");
- padd("fo:padding-right", sXML_CDATA,
- Double2Str(WTMM(fstyle->margin[1][1])) + "mm");
- padd("fo:padding-top", sXML_CDATA,
- Double2Str(WTMM(fstyle->margin[1][2])) + "mm");
- padd("fo:padding-bottom", sXML_CDATA,
- Double2Str(WTMM(fstyle->margin[1][3])) + "mm");
+ mxList->addAttribute("fo:padding-left", sXML_CDATA,
+ OUString::number(WTMM(fstyle->margin[1][0])) + "mm");
+ mxList->addAttribute("fo:padding-right", sXML_CDATA,
+ OUString::number(WTMM(fstyle->margin[1][1])) + "mm");
+ mxList->addAttribute("fo:padding-top", sXML_CDATA,
+ OUString::number(WTMM(fstyle->margin[1][2])) + "mm");
+ mxList->addAttribute("fo:padding-bottom", sXML_CDATA,
+ OUString::number(WTMM(fstyle->margin[1][3])) + "mm");
}
if(cell->shade != 0)
- padd("fo:background-color", sXML_CDATA,
- ascii(hcolor2str(
+ mxList->addAttribute("fo:background-color", sXML_CDATA,
+ hcolor2str(
sal::static_int_cast<uchar>(cell->color),
- sal::static_int_cast<uchar>(cell->shade),
- buf)));
+ sal::static_int_cast<uchar>(cell->shade)));
}
else if( fstyle->boxtype == 'E' )
{
- padd("fo:padding", sXML_CDATA,"0mm");
+ mxList->addAttribute("fo:padding", sXML_CDATA,"0mm");
}
else if( fstyle->boxtype == 'L' )
{
- padd( "style:border-line-width-bottom", sXML_CDATA, "0.02mm 0.35mm 0.02mm");
- padd("fo:border-bottom", sXML_CDATA,"0.039cm double #808080");
+ mxList->addAttribute( "style:border-line-width-bottom", sXML_CDATA, "0.02mm 0.35mm 0.02mm");
+ mxList->addAttribute("fo:border-bottom", sXML_CDATA,"0.039cm double #808080");
}
- else if( fstyle->boxtype == 'G' )
+ else if( fstyle->boxtype == 'G' && fstyle->cell )
{
if( fstyle->margin[1][0] || fstyle->margin[1][1] || fstyle->margin[1][2] || fstyle->margin[1][3] ){
OUString clip = "rect(" +
- Double2Str(WTMM(-fstyle->margin[1][0]) ) + "mm " +
- Double2Str(WTMM(-fstyle->margin[1][1]) ) + "mm " +
- Double2Str(WTMM(-fstyle->margin[1][2]) ) + "mm " +
- Double2Str(WTMM(-fstyle->margin[1][3]) ) + "mm)";
- padd("style:mirror", sXML_CDATA, "none");
- padd("fo:clip", sXML_CDATA, clip);
+ OUString::number(WTMM(-fstyle->margin[1][0]) ) + "mm " +
+ OUString::number(WTMM(-fstyle->margin[1][1]) ) + "mm " +
+ OUString::number(WTMM(-fstyle->margin[1][2]) ) + "mm " +
+ OUString::number(WTMM(-fstyle->margin[1][3]) ) + "mm)";
+ mxList->addAttribute("style:mirror", sXML_CDATA, "none");
+ mxList->addAttribute("fo:clip", sXML_CDATA, clip);
}
char *cell = static_cast<char *>(fstyle->cell);
- padd("draw:luminance", sXML_CDATA,
- ascii(Int2Str(cell[0], "%d%%", buf)));
- padd("draw:contrast", sXML_CDATA,
- ascii(Int2Str(cell[1], "%d%%", buf)));
+ mxList->addAttribute("draw:luminance", sXML_CDATA, OUString::number(cell[0]) + "%");
+ mxList->addAttribute("draw:contrast", sXML_CDATA, OUString::number(cell[1]) + "%");
if( cell[2] == 0 )
- padd("draw:color-mode", sXML_CDATA, "standard");
+ mxList->addAttribute("draw:color-mode", sXML_CDATA, "standard");
else if( cell[2] == 1 )
- padd("draw:color-mode", sXML_CDATA, "greyscale");
+ mxList->addAttribute("draw:color-mode", sXML_CDATA, "greyscale");
else if( cell[2] == 2 )
- padd("draw:color-mode", sXML_CDATA, "mono");
+ mxList->addAttribute("draw:color-mode", sXML_CDATA, "mono");
}
- rstartEl("style:properties", mxList);
+ startEl("style:properties");
mxList->clear();
- rendEl("style:properties");
- rendEl("style:style");
+ endEl("style:properties");
+ endEl("style:style");
}
-char *HwpReader::getTStyleName(int index, char *_buf)
+OUString HwpReader::getTStyleName(int index)
{
- return Int2Str(index, "T%d", _buf);
+ return "T" + OUString::number(index);
}
-char *HwpReader::getPStyleName(int index, char *_buf)
+OUString HwpReader::getPStyleName(int index)
{
- return Int2Str(index, "P%d", _buf);
+ return "P" + OUString::number(index);
}
void HwpReader::makeChars(hchar_string & rStr)
{
- rchars(fromHcharStringToOUString(rStr));
+ chars(fromHcharStringToOUString(rStr));
rStr.clear();
}
@@ -2711,29 +2622,22 @@ void HwpReader::makeChars(hchar_string & rStr)
void HwpReader::make_text_p0(HWPPara * para, bool bParaStart)
{
hchar_string str;
- int n;
int res;
hchar dest[3];
unsigned char firstspace = 0;
if( !bParaStart)
{
- padd("text:style-name", sXML_CDATA,
- ascii(getPStyleName(para->GetParaShape().index, buf)));
- rstartEl("text:p", mxList);
+ mxList->addAttribute("text:style-name", sXML_CDATA,
+ getPStyleName(para->GetParaShape().index));
+ startEl("text:p");
mxList->clear();
}
if( d->bFirstPara && d->bInBody )
{
- strcpy(
- buf,
- "[\xEB\xAC\xB8\xEC\x84\x9C\xEC\x9D\x98 \xEC\xB2\x98\xEC\x9D\x8C]");
- // U+BB38 HANGUL SYLLABLE MUN, U+C11C HANGUL SYLLABLE SEO,
- // U+C758 HANGUL SYLLABLE YI, U+CC98 HANGUL SYLLABLE CEO,
- // U+C74C HANGUL SYLLABLE EUM: "Begin of Document"
- padd("text:name", sXML_CDATA, OUString(buf, strlen(buf), RTL_TEXTENCODING_UTF8));
- rstartEl("text:bookmark", mxList);
+ mxList->addAttribute("text:name", sXML_CDATA, sBeginOfDoc);
+ startEl("text:bookmark");
mxList->clear();
- rendEl("text:bookmark");
+ endEl("text:bookmark");
d->bFirstPara = false;
}
if( d->bInHeader )
@@ -2741,34 +2645,36 @@ void HwpReader::make_text_p0(HWPPara * para, bool bParaStart)
makeShowPageNum();
d->bInHeader = false;
}
- padd("text:style-name", sXML_CDATA,
- ascii(getTStyleName(para->cshape->index, buf)));
- rstartEl("text:span", mxList);
+ mxList->addAttribute("text:style-name", sXML_CDATA,
+ getTStyleName(para->cshape->index));
+ startEl("text:span");
mxList->clear();
- for (n = 0; n < para->nch && para->hhstr[n]->hh;
- n += para->hhstr[n]->WSize())
+ for (const auto& box : para->hhstr)
{
- if (para->hhstr[n]->hh == CH_SPACE && !firstspace)
+ if (!box->hh)
+ break;
+
+ if (box->hh == CH_SPACE && !firstspace)
{
makeChars(str);
- rstartEl("text:s", mxList);
- rendEl("text:s");
+ startEl("text:s");
+ endEl("text:s");
}
- else if (para->hhstr[n]->hh == CH_END_PARA)
+ else if (box->hh == CH_END_PARA)
{
makeChars(str);
- rendEl("text:span");
- rendEl("text:p");
+ endEl("text:span");
+ endEl("text:p");
break;
}
else
{
- if (para->hhstr[n]->hh == CH_SPACE)
+ if (box->hh == CH_SPACE)
firstspace = 0;
else
firstspace = 1;
- res = hcharconv(para->hhstr[n]->hh, dest, UNICODE);
+ res = hcharconv(box->hh, dest, UNICODE);
for( int j = 0 ; j < res; j++ )
{
str.push_back(dest[j]);
@@ -2784,7 +2690,6 @@ void HwpReader::make_text_p0(HWPPara * para, bool bParaStart)
void HwpReader::make_text_p1(HWPPara * para,bool bParaStart)
{
hchar_string str;
- int n;
int res;
hchar dest[3];
int curr = para->cshape->index;
@@ -2792,24 +2697,18 @@ void HwpReader::make_text_p1(HWPPara * para,bool bParaStart)
if( !bParaStart )
{
- padd("text:style-name", sXML_CDATA,
- ascii(getPStyleName(para->GetParaShape().index, buf)));
- rstartEl("text:p", mxList);
+ mxList->addAttribute("text:style-name", sXML_CDATA,
+ getPStyleName(para->GetParaShape().index));
+ startEl("text:p");
mxList->clear();
}
if( d->bFirstPara && d->bInBody )
{
/* for HWP's Bookmark */
- strcpy(
- buf,
- "[\xEB\xAC\xB8\xEC\x84\x9C\xEC\x9D\x98 \xEC\xB2\x98\xEC\x9D\x8C]");
- // U+BB38 HANGUL SYLLABLE MUN, U+C11C HANGUL SYLLABLE SEO,
- // U+C758 HANGUL SYLLABLE YI, U+CC98 HANGUL SYLLABLE CEO,
- // U+C74C HANGUL SYLLABLE EUM: "Begin of Document"
- padd("text:name", sXML_CDATA, OUString(buf, strlen(buf), RTL_TEXTENCODING_UTF8));
- rstartEl("text:bookmark", mxList);
+ mxList->addAttribute("text:name", sXML_CDATA, sBeginOfDoc);
+ startEl("text:bookmark");
mxList->clear();
- rendEl("text:bookmark");
+ endEl("text:bookmark");
d->bFirstPara = false;
}
if( d->bInHeader )
@@ -2817,51 +2716,55 @@ void HwpReader::make_text_p1(HWPPara * para,bool bParaStart)
makeShowPageNum();
d->bInHeader = false;
}
- padd("text:style-name", sXML_CDATA,
- ascii(getTStyleName(curr, buf)));
- rstartEl("text:span", mxList);
+ mxList->addAttribute("text:style-name", sXML_CDATA,
+ getTStyleName(curr));
+ startEl("text:span");
mxList->clear();
- for (n = 0; n < para->nch && para->hhstr[n]->hh;
- n += para->hhstr[n]->WSize())
+ int n = 0;
+ for (const auto& box : para->hhstr)
{
+ if (!box->hh)
+ break;
+
if (para->GetCharShape(n)->index != curr)
{
makeChars(str);
- rendEl("text:span");
+ endEl("text:span");
curr = para->GetCharShape(n)->index;
- padd("text:style-name", sXML_CDATA,
- ascii(getTStyleName(curr, buf)));
- rstartEl("text:span", mxList);
+ mxList->addAttribute("text:style-name", sXML_CDATA,
+ getTStyleName(curr));
+ startEl("text:span");
mxList->clear();
}
- if (para->hhstr[n]->hh == CH_SPACE && !firstspace)
+ if (box->hh == CH_SPACE && !firstspace)
{
makeChars(str);
- rstartEl("text:s", mxList);
- rendEl("text:s");
+ startEl("text:s");
+ endEl("text:s");
}
- else if (para->hhstr[n]->hh == CH_END_PARA)
+ else if (box->hh == CH_END_PARA)
{
makeChars(str);
- rendEl("text:span");
- rendEl("text:p");
+ endEl("text:span");
+ endEl("text:p");
break;
}
else
{
- if( para->hhstr[n]->hh < CH_SPACE )
+ if( box->hh < CH_SPACE )
continue;
- if (para->hhstr[n]->hh == CH_SPACE)
+ if (box->hh == CH_SPACE)
firstspace = 0;
else
firstspace = 1;
- res = hcharconv(para->hhstr[n]->hh, dest, UNICODE);
+ res = hcharconv(box->hh, dest, UNICODE);
for( int j = 0 ; j < res; j++ )
{
str.push_back(dest[j]);
}
}
+ n += box->WSize();
}
}
@@ -2872,96 +2775,120 @@ void HwpReader::make_text_p1(HWPPara * para,bool bParaStart)
void HwpReader::make_text_p3(HWPPara * para,bool bParaStart)
{
hchar_string str;
- int n, res;
+ int res;
hchar dest[3];
unsigned char firstspace = 0;
bool pstart = bParaStart;
bool tstart = false;
bool infield = false;
- int curr;
+
+ const auto STARTP = [this, para, &pstart]()
+ {
+ mxList->addAttribute("text:style-name", "CDATA",
+ getPStyleName(para->GetParaShape().index));
+ startEl("text:p");
+ mxList->clear();
+ pstart = true;
+ };
+ const auto STARTT = [this, para, &tstart](int pos)
+ {
+ auto curr = para->GetCharShape(pos > 0 ? pos - 1 : 0)->index;
+ mxList->addAttribute("text:style-name", "CDATA", getTStyleName(curr));
+ startEl("text:span");
+ mxList->clear();
+ tstart = true;
+ };
+ const auto ENDP = [this, &pstart]()
+ {
+ endEl("text:p");
+ pstart = false;
+ };
+ const auto ENDT = [this, &tstart]()
+ {
+ endEl("text:span");
+ tstart = false;
+ };
+
if( d->bFirstPara && d->bInBody )
{
if ( !pstart ) {
- STARTP;
+ STARTP();
}
- strcpy(
- buf,
- "[\xEB\xAC\xB8\xEC\x84\x9C\xEC\x9D\x98 \xEC\xB2\x98\xEC\x9D\x8C]");
- // U+BB38 HANGUL SYLLABLE MUN, U+C11C HANGUL SYLLABLE SEO,
- // U+C758 HANGUL SYLLABLE YI, U+CC98 HANGUL SYLLABLE CEO,
- // U+C74C HANGUL SYLLABLE EUM: "Begin of Document"
- padd("text:name", sXML_CDATA, OUString(buf, strlen(buf), RTL_TEXTENCODING_UTF8));
- rstartEl("text:bookmark", mxList);
+ mxList->addAttribute("text:name", sXML_CDATA, sBeginOfDoc);
+ startEl("text:bookmark");
mxList->clear();
- rendEl("text:bookmark");
+ endEl("text:bookmark");
d->bFirstPara = false;
}
if( d->bInHeader )
{
if ( !pstart ) {
- STARTP;
+ STARTP();
}
makeShowPageNum();
d->bInHeader = false;
}
- for (n = 0; n < para->nch && para->hhstr[n]->hh;
- n += para->hhstr[n]->WSize())
+ int n = 0;
+ for (const auto& box : para->hhstr)
{
- if( para->hhstr[n]->hh == CH_END_PARA )
+ if (!box->hh)
+ break;
+
+ if (box->hh == CH_END_PARA)
{
if (!str.empty())
{
- if( !pstart ){ STARTP;}
- if( !tstart ){ STARTT;}
+ if( !pstart ){ STARTP(); }
+ if( !tstart ){ STARTT(n);}
makeChars(str);
}
- if( tstart ){ ENDT;}
- if( !pstart ){ STARTP;}
- if( pstart ){ ENDP;}
+ if( tstart ){ ENDT();}
+ if( !pstart ){ STARTP(); }
+ if( pstart ){ ENDP(); }
break;
}
- else if( para->hhstr[n]->hh == CH_SPACE && !firstspace)
+ else if (box->hh == CH_SPACE && !firstspace)
{
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP(); }
+ if( !tstart ) {STARTT(n);}
makeChars(str);
- rstartEl("text:s", mxList);
+ startEl("text:s");
mxList->clear();
- rendEl("text:s");
+ endEl("text:s");
}
- else if ( para->hhstr[n]->hh >= CH_SPACE )
+ else if (box->hh >= CH_SPACE)
{
if( n > 0 )
if( para->GetCharShape(n)->index != para->GetCharShape(n-1)->index && !infield )
{
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP(); }
+ if( !tstart ) {STARTT(n);}
makeChars(str);
- ENDT;
+ ENDT();
}
- if( para->hhstr[n]->hh == CH_SPACE )
+ if (box->hh == CH_SPACE)
firstspace = 0;
else
firstspace = 1;
- res = hcharconv(para->hhstr[n]->hh, dest, UNICODE);
+ res = hcharconv(box->hh, dest, UNICODE);
for( int j = 0 ; j < res; j++ )
{
str.push_back(dest[j]);
}
}
- else if (para->hhstr[n]->hh == CH_FIELD)
+ else if (box->hh == CH_FIELD)
{
- FieldCode *hbox = static_cast<FieldCode*>(para->hhstr[n].get());
+ FieldCode *hbox = static_cast<FieldCode*>(box.get());
if( hbox->location_info == 1)
{
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP(); }
+ if( !tstart ) {STARTT(n);}
makeChars(str);
firstspace = 1;
if( hbox->type[0] == 4 && hbox->type[1] == 0 )
{
- field = hbox->str3.get();
+ d->pField = hbox->str3.get();
}
else{
makeFieldCode(str, hbox);
@@ -2974,7 +2901,7 @@ void HwpReader::make_text_p3(HWPPara * para,bool bParaStart)
if( hbox->type[0] == 4 && hbox->type[1] == 0 )
{
makeFieldCode(str, hbox);
- field = nullptr;
+ d->pField = nullptr;
}
infield = false;
str.clear();
@@ -2982,27 +2909,27 @@ void HwpReader::make_text_p3(HWPPara * para,bool bParaStart)
}
else
{
- switch (para->hhstr[n]->hh)
+ switch (box->hh)
{
case CH_BOOKMARK:
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP(); }
+ if( !tstart ) {STARTT(n);}
makeChars(str);
- makeBookmark(static_cast<Bookmark*>(para->hhstr[n].get()));
+ makeBookmark(static_cast<Bookmark*>(box.get()));
break;
case CH_DATE_FORM: // 7
break;
case CH_DATE_CODE: // 8
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP(); }
+ if( !tstart ) {STARTT(n);}
makeChars(str);
- makeDateCode(static_cast<DateCode*>(para->hhstr[n].get()));
+ makeDateCode(static_cast<DateCode*>(box.get()));
break;
case CH_TAB: // 9
- if( !pstart ) {STARTP;}
+ if( !pstart ) {STARTP(); }
if (!str.empty())
{
- if( !tstart ) {STARTT;}
+ if( !tstart ) {STARTT(n);}
makeChars(str);
}
makeTab();
@@ -3010,23 +2937,23 @@ void HwpReader::make_text_p3(HWPPara * para,bool bParaStart)
case CH_TEXT_BOX: /* 10 - ordered by Table/text box/formula/button/hypertext */
{
/* produce tables first, and treat formula as being in text:p. */
- TxtBox *hbox = static_cast<TxtBox*>(para->hhstr[n].get());
+ TxtBox *hbox = static_cast<TxtBox*>(box.get());
if( hbox->style.anchor_type == 0 )
{
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP(); }
+ if( !tstart ) {STARTT(n);}
makeChars(str);
}
else
{
- if( !pstart ) {STARTP;}
+ if( !pstart ) {STARTP(); }
if (!str.empty())
{
- if( !tstart ) {STARTT;}
+ if( !tstart ) {STARTT(n);}
makeChars(str);
}
- if( tstart ) {ENDT;}
+ if( tstart ) {ENDT();}
}
switch (hbox->type)
{
@@ -3044,22 +2971,22 @@ void HwpReader::make_text_p3(HWPPara * para,bool bParaStart)
}
case CH_PICTURE: // 11
{
- Picture *hbox = static_cast<Picture*>(para->hhstr[n].get());
+ Picture *hbox = static_cast<Picture*>(box.get());
if( hbox->style.anchor_type == 0 )
{
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP(); }
+ if( !tstart ) {STARTT(n);}
makeChars(str);
}
else
{
- if( !pstart ) {STARTP;}
+ if( !pstart ) {STARTP(); }
if (!str.empty())
{
- if( !tstart ) {STARTT;}
+ if( !tstart ) {STARTT(n);}
makeChars(str);
}
- if( tstart ) {ENDT;}
+ if( tstart ) {ENDT();}
}
makePicture(hbox);
break;
@@ -3068,63 +2995,63 @@ void HwpReader::make_text_p3(HWPPara * para,bool bParaStart)
{
if (!str.empty())
{
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP();}
+ if( !tstart ) {STARTT(n);}
makeChars(str);
}
- if( tstart ) {ENDT;}
- if( pstart ) {ENDP;}
+ if( tstart ) {ENDT();}
+ if( pstart ) {ENDP();}
makeLine();
pstart = true;
break;
}
case CH_HIDDEN: // 15
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP();}
+ if( !tstart ) {STARTT(n);}
makeChars(str);
- makeHidden(static_cast<Hidden*>(para->hhstr[n].get()));
+ makeHidden(static_cast<Hidden*>(box.get()));
break;
case CH_FOOTNOTE: // 17
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP();}
+ if( !tstart ) {STARTT(n);}
makeChars(str);
- makeFootnote(static_cast<Footnote*>(para->hhstr[n].get()));
+ makeFootnote(static_cast<Footnote*>(box.get()));
break;
case CH_AUTO_NUM: // 18
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP();}
+ if( !tstart ) {STARTT(n);}
makeChars(str);
- makeAutoNum(static_cast<AutoNum*>(para->hhstr[n].get()));
+ makeAutoNum(static_cast<AutoNum*>(box.get()));
break;
case CH_NEW_NUM: // 19 -skip
break;
case CH_PAGE_NUM_CTRL: // 21
break;
case CH_MAIL_MERGE: // 22
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP();}
+ if( !tstart ) {STARTT(n);}
makeChars(str);
- makeMailMerge(static_cast<MailMerge*>(para->hhstr[n].get()));
+ makeMailMerge(static_cast<MailMerge*>(box.get()));
break;
case CH_COMPOSE: /* 23 - overlapping letters */
break;
case CH_HYPHEN: // 24
break;
case CH_TOC_MARK: /* 25 Need to fix below 3 */
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP();}
+ if( !tstart ) {STARTT(n);}
makeChars(str);
break;
case CH_INDEX_MARK: // 26
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP();}
+ if( !tstart ) {STARTT(n);}
makeChars(str);
break;
case CH_OUTLINE: // 28
- if( !pstart ) {STARTP;}
- if( !tstart ) {STARTT;}
+ if( !pstart ) {STARTP();}
+ if( !tstart ) {STARTT(n);}
makeChars(str);
- makeOutline(static_cast<Outline *>(para->hhstr[n].get()));
+ makeOutline(static_cast<Outline *>(box.get()));
break;
case CH_FIXED_SPACE:
case CH_KEEP_SPACE:
@@ -3132,6 +3059,7 @@ void HwpReader::make_text_p3(HWPPara * para,bool bParaStart)
break;
}
}
+ n += box->WSize();
}
}
@@ -3141,119 +3069,117 @@ void HwpReader::makeFieldCode(hchar_string const & rStr, FieldCode const *hbox)
/* Push frame */
if( hbox->type[0] == 4 && hbox->type[1] == 0 )
{
- padd("text:placeholder-type", sXML_CDATA, "text");
- if( field )
- padd("text:description", sXML_CDATA, fromHcharStringToOUString(hstr2ucsstr(field)));
- rstartEl( "text:placeholder", mxList);
+ mxList->addAttribute("text:placeholder-type", sXML_CDATA, "text");
+ if (d->pField)
+ mxList->addAttribute("text:description", sXML_CDATA, hstr2OUString(d->pField));
+ startEl("text:placeholder");
mxList->clear();
- rchars( fromHcharStringToOUString(rStr) );
- rendEl( "text:placeholder" );
+ chars( fromHcharStringToOUString(rStr) );
+ endEl("text:placeholder");
}
/* Document Summary */
else if( hbox->type[0] == 3 && hbox->type[1] == 0 )
{
- if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get()))
- == std::u16string_view(u"title"))
+ const OUString uStr3 = hstr2OUString(hbox->str3.get());
+ if (uStr3 == "title")
{
- rstartEl( "text:title", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:title" );
+ startEl("text:title");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:title");
}
- else if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get())) == std::u16string_view(u"subject"))
+ else if (uStr3 == "subject")
{
- rstartEl( "text:subject", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:subject" );
+ startEl("text:subject");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:subject");
}
- else if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get())) == std::u16string_view(u"author"))
+ else if (uStr3 == "author")
{
- rstartEl( "text:author-name", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:author-name" );
+ startEl("text:author-name");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:author-name");
}
- else if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get())) == std::u16string_view(u"keywords"))
+ else if (uStr3 == "keywords")
{
- rstartEl( "text:keywords", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:keywords" );
+ startEl("text:keywords");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:keywords");
}
}
/* Personal Information */
else if( hbox->type[0] == 3 && hbox->type[1] == 1 )
{
- if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get()))
- == std::u16string_view(u"User"))
+ const OUString uStr3 = hstr2OUString(hbox->str3.get());
+ if (uStr3 == "User")
{
- rstartEl( "text:sender-lastname", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:sender-lastname" );
+ startEl("text:sender-lastname");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:sender-lastname");
}
- else if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get())) == std::u16string_view(u"Company"))
+ else if (uStr3 == "Company")
{
- rstartEl( "text:sender-company", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:sender-company" );
+ startEl("text:sender-company");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:sender-company");
}
- else if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get())) == std::u16string_view(u"Position"))
+ else if (uStr3 == "Position")
{
- rstartEl( "text:sender-title", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:sender-title" );
+ startEl("text:sender-title");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:sender-title");
}
- else if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get())) == std::u16string_view(u"Division"))
+ else if (uStr3 == "Division")
{
- rstartEl( "text:sender-position", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:sender-position" );
+ startEl("text:sender-position");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:sender-position");
}
- else if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get()))
- == std::u16string_view(u"Fax"))
+ else if (uStr3 == "Fax")
{
- rstartEl( "text:sender-fax", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:sender-fax" );
+ startEl("text:sender-fax");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:sender-fax");
}
- else if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get())) == std::u16string_view(u"Pager"))
+ else if (uStr3 == "Pager")
{
- rstartEl( "text:phone-private", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:phone-private" );
+ startEl("text:phone-private");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:phone-private");
}
- else if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get())) == std::u16string_view(u"E-mail"))
+ else if (uStr3 == "E-mail")
{
- rstartEl( "text:sender-email", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:sender-email" );
+ startEl("text:sender-email");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:sender-email");
}
- else if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get())) == std::u16string_view(u"Zipcode(office)"))
+ else if (uStr3 == "Zipcode(office)")
{
- rstartEl( "text:sender-postal-code", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:sender-postal-code" );
+ startEl("text:sender-postal-code");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:sender-postal-code");
}
- else if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get())) == std::u16string_view(u"Phone(office)"))
+ else if (uStr3 == "Phone(office)")
{
- rstartEl( "text:sender-phone-work", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:sender-phone-work" );
+ startEl("text:sender-phone-work");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:sender-phone-work");
}
- else if (reinterpret_cast<sal_Unicode const *>(hconv(hbox->str3.get())) == std::u16string_view(u"Address(office)"))
+ else if (uStr3 == "Address(office)")
{
- rstartEl( "text:sender-street", mxList );
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:sender-street" );
+ startEl("text:sender-street");
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:sender-street");
}
}
else if( hbox->type[0] == 3 && hbox->type[1] == 2 ) /* creation date */
{
if( hbox->m_pDate )
- padd("style:data-style-name", sXML_CDATA,
- ascii(Int2Str(hbox->m_pDate->key, "N%d", buf)));
- rstartEl( "text:creation-date", mxList );
+ mxList->addAttribute("style:data-style-name", sXML_CDATA, "N" + OUString::number(hbox->m_pDate->key));
+ startEl("text:creation-date");
mxList->clear();
- rchars( fromHcharStringToOUString(hstr2ucsstr(hbox->str2.get())) );
- rendEl( "text:creation-date" );
+ chars( hstr2OUString(hbox->str2.get()) );
+ endEl("text:creation-date");
}
}
@@ -3266,37 +3192,36 @@ void HwpReader::makeBookmark(Bookmark const * hbox)
{
if (hbox->type == 0)
{
- padd("text:name", sXML_CDATA, fromHcharStringToOUString(hstr2ucsstr(hbox->id)));
- rstartEl("text:bookmark", mxList);
+ mxList->addAttribute("text:name", sXML_CDATA, hstr2OUString(hbox->id));
+ startEl("text:bookmark");
mxList->clear();
- rendEl("text:bookmark");
+ endEl("text:bookmark");
}
else if (hbox->type == 1) /* Block bookmarks days begin and end there if */
{
- padd("text:name", sXML_CDATA, fromHcharStringToOUString(hstr2ucsstr(hbox->id)));
- rstartEl("text:bookmark-start", mxList);
+ mxList->addAttribute("text:name", sXML_CDATA, hstr2OUString(hbox->id));
+ startEl("text:bookmark-start");
mxList->clear();
- rendEl("text:bookmark-start");
+ endEl("text:bookmark-start");
}
else if (hbox->type == 2)
{
- padd("text:name", sXML_CDATA, fromHcharStringToOUString(hstr2ucsstr(hbox->id)));
- rstartEl("text:bookmark-end", mxList);
+ mxList->addAttribute("text:name", sXML_CDATA, hstr2OUString(hbox->id));
+ startEl("text:bookmark-end");
mxList->clear();
- rendEl("text:bookmark-end");
+ endEl("text:bookmark-end");
}
}
void HwpReader::makeDateFormat(DateCode * hbox)
{
- padd("style:name", sXML_CDATA,
- ascii(Int2Str(hbox->key, "N%d", buf)));
- padd("style:family", sXML_CDATA,"data-style");
- padd("number:language", sXML_CDATA,"ko");
- padd("number:country", sXML_CDATA,"KR");
+ mxList->addAttribute("style:name", sXML_CDATA, "N" + OUString::number(hbox->key));
+ mxList->addAttribute("style:family", sXML_CDATA,"data-style");
+ mxList->addAttribute("number:language", sXML_CDATA,"ko");
+ mxList->addAttribute("number:country", sXML_CDATA,"KR");
- rstartEl("number:date-style", mxList);
+ startEl("number:date-style");
mxList->clear();
bool add_zero = false;
@@ -3321,104 +3246,104 @@ void HwpReader::makeDateFormat(DateCode * hbox)
add_zero = true;
break;
case '1':
- padd("number:style", sXML_CDATA, "long");
- rstartEl("number:year", mxList);
+ mxList->addAttribute("number:style", sXML_CDATA, "long");
+ startEl("number:year");
mxList->clear();
- rendEl("number:year");
+ endEl("number:year");
break;
case '!':
- rstartEl("number:year", mxList);
+ startEl("number:year");
mxList->clear();
- rendEl("number:year");
+ endEl("number:year");
break;
case '2':
if( add_zero )
- padd("number:style", sXML_CDATA, "long");
- rstartEl("number:month", mxList);
+ mxList->addAttribute("number:style", sXML_CDATA, "long");
+ startEl("number:month");
mxList->clear();
- rendEl("number:month");
+ endEl("number:month");
break;
case '@':
- padd("number:textual", sXML_CDATA, "true");
- rstartEl("number:month", mxList);
+ mxList->addAttribute("number:textual", sXML_CDATA, "true");
+ startEl("number:month");
mxList->clear();
- rendEl("number:month");
+ endEl("number:month");
break;
case '*':
- padd("number:textual", sXML_CDATA, "true");
- padd("number:style", sXML_CDATA, "long");
- rstartEl("number:month", mxList);
+ mxList->addAttribute("number:textual", sXML_CDATA, "true");
+ mxList->addAttribute("number:style", sXML_CDATA, "long");
+ startEl("number:month");
mxList->clear();
- rendEl("number:month");
+ endEl("number:month");
break;
case '3':
if( add_zero )
- padd("number:style", sXML_CDATA, "long");
- rstartEl("number:day", mxList);
+ mxList->addAttribute("number:style", sXML_CDATA, "long");
+ startEl("number:day");
mxList->clear();
- rendEl("number:day");
+ endEl("number:day");
break;
case '#':
if( add_zero )
- padd("number:style", sXML_CDATA, "long");
- rstartEl("number:day", mxList);
+ mxList->addAttribute("number:style", sXML_CDATA, "long");
+ startEl("number:day");
mxList->clear();
- rendEl("number:day");
+ endEl("number:day");
switch( hbox->date[DateCode::DAY] % 10)
{
case 1:
- rstartEl("number:text", mxList);
- rchars("st");
- rendEl("number:text");
+ startEl("number:text");
+ chars("st");
+ endEl("number:text");
break;
case 2:
- rstartEl("number:text", mxList);
- rchars("nd");
- rendEl("number:text");
+ startEl("number:text");
+ chars("nd");
+ endEl("number:text");
break;
case 3:
- rstartEl("number:text", mxList);
- rchars("rd");
- rendEl("number:text");
+ startEl("number:text");
+ chars("rd");
+ endEl("number:text");
break;
default:
- rstartEl("number:text", mxList);
- rchars("th");
- rendEl("number:text");
+ startEl("number:text");
+ chars("th");
+ endEl("number:text");
break;
}
break;
case '4':
case '$':
if( add_zero )
- padd("number:style", sXML_CDATA, "long");
- rstartEl("number:hours", mxList);
+ mxList->addAttribute("number:style", sXML_CDATA, "long");
+ startEl("number:hours");
mxList->clear();
- rendEl("number:hours");
+ endEl("number:hours");
break;
case '5':
case '%':
if( add_zero )
- padd("number:style", sXML_CDATA, "long");
- rstartEl("number:minutes", mxList);
+ mxList->addAttribute("number:style", sXML_CDATA, "long");
+ startEl("number:minutes");
mxList->clear();
- rendEl("number:minutes");
+ endEl("number:minutes");
break;
case '_':
- padd("number:style", sXML_CDATA, "long");
+ mxList->addAttribute("number:style", sXML_CDATA, "long");
[[fallthrough]];
case '6':
case '^':
- rstartEl("number:day-of-week", mxList);
+ startEl("number:day-of-week");
mxList->clear();
- rendEl("number:day-of-week");
+ endEl("number:day-of-week");
break;
case '7':
case '&':
case '+':
- rstartEl("number:am-pm", mxList);
+ startEl("number:am-pm");
mxList->clear();
- rendEl("number:am-pm");
+ endEl("number:am-pm");
break;
case '~': // Chinese Locale
break;
@@ -3426,54 +3351,53 @@ void HwpReader::makeDateFormat(DateCode * hbox)
hchar sbuf[2];
sbuf[0] = *fmt;
sbuf[1] = 0;
- rstartEl("number:text", mxList);
- rchars(fromHcharStringToOUString(hstr2ucsstr(sbuf)));
- rendEl("number:text");
+ startEl("number:text");
+ chars(hstr2OUString(sbuf));
+ endEl("number:text");
break;
}
}
mxList->clear();
- rendEl("number:date-style");
+ endEl("number:date-style");
}
void HwpReader::makeDateCode(DateCode * hbox)
{
- padd("style:data-style-name", sXML_CDATA,
- ascii(Int2Str(hbox->key, "N%d", buf)));
- rstartEl( "text:date", mxList );
+ mxList->addAttribute("style:data-style-name", sXML_CDATA, "N" + OUString::number(hbox->key));
+ startEl("text:date");
mxList->clear();
hchar_string const boxstr = hbox->GetString();
- rchars(fromHcharStringToOUString(hstr2ucsstr(boxstr.c_str())));
- rendEl( "text:date" );
+ chars(hstr2OUString(boxstr.c_str()));
+ endEl("text:date");
}
void HwpReader::makeTab()
{
- rstartEl("text:tab-stop", mxList);
- rendEl("text:tab-stop");
+ startEl("text:tab-stop");
+ endEl("text:tab-stop");
}
void HwpReader::makeTable(TxtBox * hbox)
{
- padd("table:name", sXML_CDATA,
- ascii(Int2Str(hbox->style.boxnum, "Table%d", buf)));
- padd("table:style-name", sXML_CDATA,
- ascii(Int2Str(hbox->style.boxnum, "Table%d", buf)));
- rstartEl("table:table", mxList);
+ mxList->addAttribute("table:name", sXML_CDATA, "Table" + OUString::number(hbox->style.boxnum));
+ mxList->addAttribute("table:style-name", sXML_CDATA, "Table" + OUString::number(hbox->style.boxnum));
+ startEl("table:table");
mxList->clear();
Table *tbl = hbox->m_pTable;
// column
for (size_t i = 0 ; i < tbl->columns.nCount -1 ; i++)
{
- sprintf(buf,"Table%d.%c",hbox->style.boxnum, static_cast<char>('A'+i));
- padd("table:style-name", sXML_CDATA, ascii( buf ));
- rstartEl("table:table-column", mxList);
+ mxList->addAttribute(
+ "table:style-name", sXML_CDATA,
+ "Table" + OUString::number(hbox->style.boxnum) + "."
+ + OUStringChar(static_cast<char>('A'+i)));
+ startEl("table:table-column");
mxList->clear();
- rendEl("table:table-column");
+ endEl("table:table-column");
}
// cell
@@ -3484,35 +3408,40 @@ void HwpReader::makeTable(TxtBox * hbox)
{
if( j > k )
{
- rendEl("table:table-row");
+ endEl("table:table-row");
k = j;
}
// row
- sprintf(buf,"Table%d.row%d",hbox->style.boxnum, tcell->nRowIndex + 1);
- padd("table:style-name", sXML_CDATA, ascii( buf ));
- rstartEl("table:table-row", mxList);
+ mxList->addAttribute(
+ "table:style-name", sXML_CDATA,
+ "Table" + OUString::number(hbox->style.boxnum) + ".row"
+ + OUString::number(tcell->nRowIndex + 1));
+ startEl("table:table-row");
mxList->clear();
j = tcell->nRowIndex;
}
- sprintf(buf,"Table%d.%c%d",hbox->style.boxnum, 'A'+ tcell->nColumnIndex, tcell->nRowIndex +1);
- padd("table:style-name", sXML_CDATA, ascii( buf ));
+ mxList->addAttribute(
+ "table:style-name", sXML_CDATA,
+ "Table" + OUString::number(hbox->style.boxnum) + "."
+ + OUStringChar(char('A'+ tcell->nColumnIndex))
+ + OUString::number(tcell->nRowIndex +1));
if( tcell->nColumnSpan > 1 )
- padd("table:number-columns-spanned", sXML_CDATA,
- ascii(Int2Str(tcell->nColumnSpan, "%d", buf)));
+ mxList->addAttribute("table:number-columns-spanned", sXML_CDATA, OUString::number(tcell->nColumnSpan));
if( tcell->nRowSpan > 1 )
- padd("table:number-rows-spanned", sXML_CDATA,
- ascii(Int2Str(tcell->nRowSpan, "%d", buf)));
- padd("table:value-type", sXML_CDATA,"string");
+ mxList->addAttribute("table:number-rows-spanned", sXML_CDATA, OUString::number(tcell->nRowSpan));
+ mxList->addAttribute("table:value-type", sXML_CDATA,"string");
if( tcell->pCell->protect )
- padd("table:protected", sXML_CDATA,"true");
- rstartEl("table:table-cell", mxList);
+ mxList->addAttribute("table:protected", sXML_CDATA,"true");
+ startEl("table:table-cell");
mxList->clear();
- parsePara(hbox->plists[tcell->pCell->key].front().get());
- rendEl("table:table-cell");
+ TxtBox::plist_t& rVec = hbox->plists[tcell->pCell->key];
+ if (!rVec.empty())
+ parsePara(rVec.front().get());
+ endEl("table:table-cell");
}
- rendEl("table:table-row");
- rendEl("table:table");
+ endEl("table:table-row");
+ endEl("table:table");
}
@@ -3526,59 +3455,52 @@ void HwpReader::makeTextBox(TxtBox * hbox)
{
if( hbox->style.cap_len > 0 && hbox->type == TXT_TYPE)
{
- padd("draw:style-name", sXML_CDATA,
- ascii(Int2Str(hbox->style.boxnum, "CapBox%d", buf)));
- padd("draw:name", sXML_CDATA,
- ascii(Int2Str(hbox->style.boxnum, "CaptionBox%d", buf)));
- padd("draw:z-index", sXML_CDATA,
- ascii(Int2Str(hbox->zorder, "%d", buf)));
+ mxList->addAttribute("draw:style-name", sXML_CDATA, "CapBox" + OUString::number(hbox->style.boxnum));
+ mxList->addAttribute("draw:name", sXML_CDATA, "CaptionBox" + OUString::number(hbox->style.boxnum));
+ mxList->addAttribute("draw:z-index", sXML_CDATA, OUString::number(hbox->zorder));
switch (hbox->style.anchor_type)
{
case CHAR_ANCHOR:
- padd("text:anchor-type", sXML_CDATA, "as-char");
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "as-char");
break;
case PARA_ANCHOR:
- padd("text:anchor-type", sXML_CDATA, "paragraph");
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "paragraph");
break;
case PAGE_ANCHOR:
case PAPER_ANCHOR:
{
- padd("text:anchor-type", sXML_CDATA, "page");
- padd("text:anchor-page-number", sXML_CDATA,
- ascii(Int2Str(hbox->pgno +1, "%d", buf)));
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "page");
+ mxList->addAttribute("text:anchor-page-number", sXML_CDATA, OUString::number(hbox->pgno + 1));
break;
}
}
if (hbox->style.anchor_type != CHAR_ANCHOR)
{
- padd("svg:x", sXML_CDATA,
- Double2Str(WTMM( ( hbox->pgx + hbox->style.margin[0][0] ) )) + "mm");
- padd("svg:y", sXML_CDATA,
- Double2Str(WTMM( ( hbox->pgy + hbox->style.margin[0][2] ) )) + "mm");
+ mxList->addAttribute("svg:x", sXML_CDATA,
+ OUString::number(WTMM( hbox->pgx + hbox->style.margin[0][0] )) + "mm");
+ mxList->addAttribute("svg:y", sXML_CDATA,
+ OUString::number(WTMM( hbox->pgy + hbox->style.margin[0][2] )) + "mm");
}
- padd("svg:width", sXML_CDATA,
- Double2Str(WTMM(( hbox->box_xs + hbox->cap_xs) )) + "mm");
- padd("fo:min-height", sXML_CDATA,
- Double2Str(WTMM(( hbox->box_ys + hbox->cap_ys) )) + "mm");
- rstartEl("draw:text-box", mxList);
+ mxList->addAttribute("svg:width", sXML_CDATA,
+ OUString::number(WTMM( hbox->box_xs + hbox->cap_xs )) + "mm");
+ mxList->addAttribute("fo:min-height", sXML_CDATA,
+ OUString::number(WTMM( hbox->box_ys + hbox->cap_ys )) + "mm");
+ startEl("draw:text-box");
mxList->clear();
- if( hbox->cap_pos % 2 ) /* The caption is on the top */
+ if (!hbox->caption.empty() && hbox->cap_pos % 2) /* The caption is on the top */
{
parsePara(hbox->caption.front().get());
}
- padd( "text:style-name", sXML_CDATA, "Standard");
- rstartEl("text:p", mxList);
+ mxList->addAttribute( "text:style-name", sXML_CDATA, "Standard");
+ startEl("text:p");
mxList->clear();
}
else{
- padd("draw:z-index", sXML_CDATA,
- ascii(Int2Str(hbox->zorder, "%d", buf)));
+ mxList->addAttribute("draw:z-index", sXML_CDATA, OUString::number(hbox->zorder));
}
- padd("draw:style-name", sXML_CDATA,
- ascii(Int2Str(hbox->style.boxnum, "Txtbox%d", buf)));
- padd("draw:name", sXML_CDATA,
- ascii(Int2Str(hbox->style.boxnum, "Frame%d", buf)));
+ mxList->addAttribute("draw:style-name", sXML_CDATA, "Txtbox" + OUString::number(hbox->style.boxnum));
+ mxList->addAttribute("draw:name", sXML_CDATA, "Frame" + OUString::number(hbox->style.boxnum));
if( hbox->style.cap_len <= 0 || hbox->type != TXT_TYPE )
{
@@ -3587,17 +3509,16 @@ void HwpReader::makeTextBox(TxtBox * hbox)
switch (hbox->style.anchor_type)
{
case CHAR_ANCHOR:
- padd("text:anchor-type", sXML_CDATA, "as-char");
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "as-char");
break;
case PARA_ANCHOR:
- padd("text:anchor-type", sXML_CDATA, "paragraph");
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "paragraph");
break;
case PAGE_ANCHOR:
case PAPER_ANCHOR:
{
- padd("text:anchor-type", sXML_CDATA, "page");
- padd("text:anchor-page-number", sXML_CDATA,
- ascii(Int2Str(hbox->pgno +1, "%d", buf)));
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "page");
+ mxList->addAttribute("text:anchor-page-number", sXML_CDATA, OUString::number(hbox->pgno + 1));
break;
}
}
@@ -3606,31 +3527,31 @@ void HwpReader::makeTextBox(TxtBox * hbox)
x += hbox->style.margin[0][0];
y += hbox->style.margin[0][2];
}
- padd("svg:x", sXML_CDATA,
- Double2Str(WTMM( hbox->pgx + x )) + "mm");
- padd("svg:y", sXML_CDATA,
- Double2Str(WTMM( hbox->pgy + y )) + "mm");
+ mxList->addAttribute("svg:x", sXML_CDATA,
+ OUString::number(WTMM( hbox->pgx + x )) + "mm");
+ mxList->addAttribute("svg:y", sXML_CDATA,
+ OUString::number(WTMM( hbox->pgy + y )) + "mm");
}
else
{
- padd("text:anchor-type", sXML_CDATA, "as-char");
- padd("svg:y", sXML_CDATA, "0cm");
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "as-char");
+ mxList->addAttribute("svg:y", sXML_CDATA, "0cm");
}
- padd("svg:width", sXML_CDATA,
- Double2Str(WTMM( hbox->box_xs )) + "mm");
+ mxList->addAttribute("svg:width", sXML_CDATA,
+ OUString::number(WTMM( hbox->box_xs )) + "mm");
if( hbox->style.cap_len > 0 && hbox->type != TXT_TYPE)
- padd("fo:min-height", sXML_CDATA,
- Double2Str(WTMM( hbox->box_ys + hbox->cap_ys)) + "mm");
+ mxList->addAttribute("fo:min-height", sXML_CDATA,
+ OUString::number(WTMM( hbox->box_ys + hbox->cap_ys)) + "mm");
else
- padd("svg:height", sXML_CDATA,
- Double2Str(WTMM(hbox->box_ys )) + "mm");
+ mxList->addAttribute("svg:height", sXML_CDATA,
+ OUString::number(WTMM(hbox->box_ys )) + "mm");
if( hbox->type != EQU_TYPE )
{
- rstartEl("draw:text-box", mxList);
+ startEl("draw:text-box");
mxList->clear();
/* If captions are present and it is on the top */
- if( hbox->style.cap_len > 0 && (hbox->cap_pos % 2) && hbox->type == TBL_TYPE )
+ if (hbox->style.cap_len > 0 && (hbox->cap_pos % 2) && hbox->type == TBL_TYPE && !hbox->caption.empty())
{
parsePara(hbox->caption.front().get());
}
@@ -3638,33 +3559,33 @@ void HwpReader::makeTextBox(TxtBox * hbox)
{
makeTable(hbox);
}
- else // Is TextBox
+ else if (!hbox->plists[0].empty()) // Is TextBox
{
parsePara(hbox->plists[0].front().get());
}
/* If captions are present and it is on the bottom */
- if( hbox->style.cap_len > 0 && !(hbox->cap_pos % 2) && hbox->type == TBL_TYPE)
+ if (hbox->style.cap_len > 0 && !(hbox->cap_pos % 2) && hbox->type == TBL_TYPE && !hbox->caption.empty())
{
parsePara(hbox->caption.front().get());
}
- rendEl("draw:text-box");
+ endEl("draw:text-box");
// Caption exist and it is text-box
if( hbox->style.cap_len > 0 && hbox->type == TXT_TYPE)
{
- rendEl( "text:p");
- if( !(hbox->cap_pos % 2))
+ endEl("text:p");
+ if (!(hbox->cap_pos % 2) && !hbox->caption.empty())
{
parsePara(hbox->caption.front().get());
}
- rendEl( "draw:text-box");
+ endEl("draw:text-box");
}
}
else // is Formula
{
- rstartEl("draw:object", mxList);
+ startEl("draw:object");
mxList->clear();
makeFormula(hbox);
- rendEl("draw:object");
+ endEl("draw:object");
}
}
@@ -3678,21 +3599,22 @@ void HwpReader::makeFormula(TxtBox * hbox)
char mybuf[3000];
HWPPara* pPar;
- int n, c, res;
hchar dest[3];
size_t l = 0;
- pPar = hbox->plists[0].front().get();
+ pPar = hbox->plists[0].empty() ? nullptr : hbox->plists[0].front().get();
while( pPar )
{
- for( n = 0; n < pPar->nch && pPar->hhstr[n]->hh;
- n += pPar->hhstr[n]->WSize() )
+ for (const auto& box : pPar->hhstr)
{
+ if (!box->hh)
+ break;
+
if (l >= sizeof(mybuf)-7)
break;
- res = hcharconv(pPar->hhstr[n]->hh, dest, UNICODE);
+ int res = hcharconv(box->hh, dest, UNICODE);
for( int j = 0 ; j < res; j++ ){
- c = dest[j];
+ int c = dest[j];
if( c < 32 )
c = ' ';
if( c < 256 )
@@ -3735,33 +3657,33 @@ void HwpReader::makeHyperText(TxtBox * hbox)
#else
reinterpret_cast<uchar const *>(urltounix(reinterpret_cast<char *>(hypert->filename)).c_str())).c_str());
#endif
- padd("xlink:type", sXML_CDATA, "simple");
+ mxList->addAttribute("xlink:type", sXML_CDATA, "simple");
if (!tmp.empty() && strcmp(tmp.c_str(), "[HTML]")) {
::std::string tmp3(tmp2);
tmp3.push_back('#');
tmp3.append(tmp);
- padd("xlink:href", sXML_CDATA,
+ mxList->addAttribute("xlink:href", sXML_CDATA,
OUString(tmp3.c_str(), tmp3.size()+1, RTL_TEXTENCODING_EUC_KR));
}
else{
- padd("xlink:href", sXML_CDATA,
+ mxList->addAttribute("xlink:href", sXML_CDATA,
OUString(tmp2.c_str(), tmp2.size()+1, RTL_TEXTENCODING_EUC_KR));
}
}
else
{
- padd("xlink:type", sXML_CDATA, "simple");
+ mxList->addAttribute("xlink:type", sXML_CDATA, "simple");
::std::string tmp;
tmp.push_back('#');
tmp.append(hstr2ksstr(hypert->bookmark));
- padd("xlink:href", sXML_CDATA,
+ mxList->addAttribute("xlink:href", sXML_CDATA,
OUString(tmp.c_str(), tmp.size()+1, RTL_TEXTENCODING_EUC_KR));
}
- rstartEl("draw:a", mxList);
+ startEl("draw:a");
mxList->clear();
makeTextBox(hbox);
- rendEl("draw:a");
+ endEl("draw:a");
}
@@ -3780,141 +3702,135 @@ void HwpReader::makePicture(Picture * hbox)
{
if( hbox->style.cap_len > 0 )
{
- padd("draw:style-name", sXML_CDATA,
- ascii(Int2Str(hbox->style.boxnum, "CapBox%d", buf)));
- padd("draw:name", sXML_CDATA,
- ascii(Int2Str(hbox->style.boxnum, "CaptionBox%d", buf)));
- padd("draw:z-index", sXML_CDATA,
- ascii(Int2Str(hbox->zorder, "%d", buf)));
+ mxList->addAttribute("draw:style-name", sXML_CDATA,
+ "CapBox" + OUString::number(hbox->style.boxnum));
+ mxList->addAttribute("draw:name", sXML_CDATA, "CaptionBox" + OUString::number(hbox->style.boxnum));
+ mxList->addAttribute("draw:z-index", sXML_CDATA, OUString::number(hbox->zorder));
switch (hbox->style.anchor_type)
{
case CHAR_ANCHOR:
- padd("text:anchor-type", sXML_CDATA, "as-char");
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "as-char");
break;
case PARA_ANCHOR:
- padd("text:anchor-type", sXML_CDATA, "paragraph");
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "paragraph");
break;
case PAGE_ANCHOR:
case PAPER_ANCHOR:
{
- padd("text:anchor-type", sXML_CDATA, "page");
- padd("text:anchor-page-number", sXML_CDATA,
- ascii(Int2Str(hbox->pgno +1, "%d", buf)));
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "page");
+ mxList->addAttribute("text:anchor-page-number", sXML_CDATA,
+ OUString::number(hbox->pgno + 1));
break;
}
}
if (hbox->style.anchor_type != CHAR_ANCHOR)
{
- padd("svg:x", sXML_CDATA,
- Double2Str(WTMM( hbox->pgx + hbox->style.margin[0][0] )) + "mm");
- padd("svg:y", sXML_CDATA,
- Double2Str(WTMM( hbox->pgy + hbox->style.margin[0][2] )) + "mm");
+ mxList->addAttribute("svg:x", sXML_CDATA,
+ OUString::number(WTMM( hbox->pgx + hbox->style.margin[0][0] )) + "mm");
+ mxList->addAttribute("svg:y", sXML_CDATA,
+ OUString::number(WTMM( hbox->pgy + hbox->style.margin[0][2] )) + "mm");
}
- padd("svg:width", sXML_CDATA,
- Double2Str(WTMM( hbox->box_xs + hbox->style.margin[1][0] + hbox->style.margin[1][1] )) + "mm");
- padd("fo:min-height", sXML_CDATA,
- Double2Str(WTMM( hbox->box_ys + hbox->style.margin[1][2] + hbox->style.margin[1][3] + hbox->cap_ys )) + "mm");
- rstartEl("draw:text-box", mxList);
+ mxList->addAttribute("svg:width", sXML_CDATA,
+ OUString::number(WTMM( hbox->box_xs + hbox->style.margin[1][0] + hbox->style.margin[1][1] )) + "mm");
+ mxList->addAttribute("fo:min-height", sXML_CDATA,
+ OUString::number(WTMM( hbox->box_ys + hbox->style.margin[1][2] + hbox->style.margin[1][3] + hbox->cap_ys )) + "mm");
+ startEl("draw:text-box");
mxList->clear();
- if( hbox->cap_pos % 2 ) /* Caption is on the top */
+ if (!hbox->caption.empty() && hbox->cap_pos % 2) /* Caption is on the top */
{
parsePara(hbox->caption.front().get());
}
- padd( "text:style-name", sXML_CDATA, "Standard");
- rstartEl("text:p", mxList);
+ mxList->addAttribute( "text:style-name", sXML_CDATA, "Standard");
+ startEl("text:p");
mxList->clear();
}
if( hbox->ishyper )
{
- padd("xlink:type", sXML_CDATA, "simple");
+ mxList->addAttribute("xlink:type", sXML_CDATA, "simple");
#ifdef _WIN32
if( hbox->follow[4] != 0 )
- padd("xlink:href", sXML_CDATA, fromHcharStringToOUString(hstr2ucsstr(kstr2hstr(hbox->follow.data() + 4).c_str())));
+ mxList->addAttribute("xlink:href", sXML_CDATA, hstr2OUString(kstr2hstr(hbox->follow.data() + 4).c_str()));
else
- padd("xlink:href", sXML_CDATA, fromHcharStringToOUString(hstr2ucsstr(kstr2hstr(hbox->follow.data() + 5).c_str())));
+ mxList->addAttribute("xlink:href", sXML_CDATA, hstr2OUString(kstr2hstr(hbox->follow.data() + 5).c_str()));
#else
if( hbox->follow[4] != 0 )
- padd("xlink:href", sXML_CDATA,
- fromHcharStringToOUString(hstr2ucsstr(kstr2hstr(reinterpret_cast<uchar const *>(urltounix(reinterpret_cast<char *>(hbox->follow.data() + 4)).c_str())).c_str())));
+ mxList->addAttribute("xlink:href", sXML_CDATA,
+ hstr2OUString(kstr2hstr(reinterpret_cast<uchar const *>(urltounix(reinterpret_cast<char *>(hbox->follow.data() + 4)).c_str())).c_str()));
else
- padd("xlink:href", sXML_CDATA,
- fromHcharStringToOUString(hstr2ucsstr(kstr2hstr(reinterpret_cast<uchar const *>(urltounix(reinterpret_cast<char *>(hbox->follow.data() + 5)).c_str())).c_str())));
+ mxList->addAttribute("xlink:href", sXML_CDATA,
+ hstr2OUString(kstr2hstr(reinterpret_cast<uchar const *>(urltounix(reinterpret_cast<char *>(hbox->follow.data() + 5)).c_str())).c_str()));
#endif
- rstartEl("draw:a", mxList);
+ startEl("draw:a");
mxList->clear();
}
- padd("draw:style-name", sXML_CDATA,
- ascii(Int2Str(hbox->style.boxnum, "G%d", buf)));
- padd("draw:name", sXML_CDATA,
- ascii(Int2Str(hbox->style.boxnum, "Image%d", buf)));
+ mxList->addAttribute("draw:style-name", sXML_CDATA, "G" + OUString::number(hbox->style.boxnum));
+ mxList->addAttribute("draw:name", sXML_CDATA, "Image" + OUString::number(hbox->style.boxnum));
if( hbox->style.cap_len <= 0 )
{
- padd("draw:z-index", sXML_CDATA,
- ascii(Int2Str(hbox->zorder, "%d", buf)));
+ mxList->addAttribute("draw:z-index", sXML_CDATA, OUString::number(hbox->zorder));
switch (hbox->style.anchor_type)
{
case CHAR_ANCHOR:
- padd("text:anchor-type", sXML_CDATA, "as-char");
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "as-char");
break;
case PARA_ANCHOR:
- padd("text:anchor-type", sXML_CDATA, "paragraph");
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "paragraph");
break;
case PAGE_ANCHOR:
case PAPER_ANCHOR:
{
- padd("text:anchor-type", sXML_CDATA, "page");
- padd("text:anchor-page-number", sXML_CDATA,
- ascii(Int2Str(hbox->pgno +1, "%d", buf)));
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "page");
+ mxList->addAttribute("text:anchor-page-number", sXML_CDATA,
+ OUString::number(hbox->pgno + 1));
break;
}
}
if (hbox->style.anchor_type != CHAR_ANCHOR)
{
- padd("svg:x", sXML_CDATA,
- Double2Str(WTMM( hbox->pgx + hbox->style.margin[0][0] )) + "mm");
- padd("svg:y", sXML_CDATA,
- Double2Str(WTMM( hbox->pgy + hbox->style.margin[0][2] )) + "mm");
+ mxList->addAttribute("svg:x", sXML_CDATA,
+ OUString::number(WTMM( hbox->pgx + hbox->style.margin[0][0] )) + "mm");
+ mxList->addAttribute("svg:y", sXML_CDATA,
+ OUString::number(WTMM( hbox->pgy + hbox->style.margin[0][2] )) + "mm");
}
}
else
{
- padd("text:anchor-type", sXML_CDATA, "as-char");
- padd("svg:y", sXML_CDATA, "0cm");
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "as-char");
+ mxList->addAttribute("svg:y", sXML_CDATA, "0cm");
}
- padd("svg:width", sXML_CDATA,
- Double2Str(WTMM( hbox->box_xs + hbox->style.margin[1][0] + hbox->style.margin[1][1])) + "mm");
- padd("svg:height", sXML_CDATA,
- Double2Str(WTMM( hbox->box_ys + hbox->style.margin[1][2] + hbox->style.margin[1][3])) + "mm");
+ mxList->addAttribute("svg:width", sXML_CDATA,
+ OUString::number(WTMM( hbox->box_xs + hbox->style.margin[1][0] + hbox->style.margin[1][1])) + "mm");
+ mxList->addAttribute("svg:height", sXML_CDATA,
+ OUString::number(WTMM( hbox->box_ys + hbox->style.margin[1][2] + hbox->style.margin[1][3])) + "mm");
if ( hbox->pictype == PICTYPE_FILE ){
#ifdef _WIN32
- sprintf(buf, "file:///%s", hbox->picinfo.picun.path );
- padd("xlink:href", sXML_CDATA, fromHcharStringToOUString(hstr2ucsstr(kstr2hstr(reinterpret_cast<uchar *>(buf)).c_str())));
+ sprintf(d->buf, "file:///%s", hbox->picinfo.picun.path );
+ mxList->addAttribute("xlink:href", sXML_CDATA, hstr2OUString(kstr2hstr(reinterpret_cast<uchar *>(d->buf)).c_str()));
#else
- padd("xlink:href", sXML_CDATA,
- fromHcharStringToOUString(hstr2ucsstr(kstr2hstr(reinterpret_cast<uchar const *>(urltounix(hbox->picinfo.picun.path).c_str())).c_str())));
+ mxList->addAttribute("xlink:href", sXML_CDATA,
+ hstr2OUString(kstr2hstr(reinterpret_cast<uchar const *>(urltounix(hbox->picinfo.picun.path).c_str())).c_str()));
#endif
- padd("xlink:type", sXML_CDATA, "simple");
- padd("xlink:show", sXML_CDATA, "embed");
- padd("xlink:actuate", sXML_CDATA, "onLoad");
+ mxList->addAttribute("xlink:type", sXML_CDATA, "simple");
+ mxList->addAttribute("xlink:show", sXML_CDATA, "embed");
+ mxList->addAttribute("xlink:actuate", sXML_CDATA, "onLoad");
}
if( hbox->pictype == PICTYPE_OLE )
- rstartEl("draw:object-ole", mxList);
+ startEl("draw:object-ole");
else
- rstartEl("draw:image", mxList);
+ startEl("draw:image");
mxList->clear();
if (hbox->pictype == PICTYPE_EMBED || hbox->pictype == PICTYPE_OLE)
{
- rstartEl("office:binary-data", mxList);
+ startEl("office:binary-data");
mxList->clear();
if( hbox->pictype == PICTYPE_EMBED ){
EmPicture *emp = hwpfile.GetEmPicture(hbox);
if( emp )
{
- std::shared_ptr<char> pStr(base64_encode_string( emp->data.get(), emp->size ), Free<char>());
- rchars(ascii(pStr.get()));
+ chars(base64_encode_string(emp->data.data(), emp->size));
}
}
else{
@@ -3924,55 +3840,54 @@ void HwpReader::makePicture(Picture * hbox)
LPUNKNOWN pObj;
wchar_t pathname[200];
- MultiByteToWideChar(CP_ACP, 0, hbox->picinfo.picole.embname, -1, pathname, 200);
+ MultiByteToWideChar(CP_ACP, 0, hbox->picinfo.picembed.embname, -1, pathname, 200);
int rc = hwpfile.oledata->pis->OpenStorage(pathname, nullptr,
STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_TRANSACTED, nullptr, 0, &srcsto);
if (rc != S_OK) {
- rchars("");
+ chars("");
}
else{
rc = OleLoad(srcsto, IID_IUnknown, nullptr, reinterpret_cast<LPVOID*>(&pObj));
if( rc != S_OK ){
srcsto->Release();
- rchars("");
+ chars("");
}
else{
- std::shared_ptr<char> pStr(base64_encode_string( reinterpret_cast<uchar *>(pObj), strlen(reinterpret_cast<char *>(pObj))), Free<char>());
- rchars(ascii(pStr.get()));
+ chars(base64_encode_string(reinterpret_cast<uchar*>(pObj), strlen(reinterpret_cast<char*>(pObj))));
pObj->Release();
srcsto->Release();
}
}
#else
- rchars("");
+ chars("");
#endif
}
}
- rendEl("office:binary-data");
+ endEl("office:binary-data");
}
if( hbox->pictype == PICTYPE_OLE )
- rendEl("draw:object-ole");
+ endEl("draw:object-ole");
else
- rendEl("draw:image");
+ endEl("draw:image");
if( hbox->ishyper )
{
- rendEl("draw:a");
+ endEl("draw:a");
}
if( hbox->style.cap_len > 0 )
{
- rendEl( "text:p");
- if( !(hbox->cap_pos % 2)) /* Caption is at the bottom, */
+ endEl("text:p");
+ if (!hbox->caption.empty() && !(hbox->cap_pos % 2)) /* Caption is at the bottom, */
{
parsePara(hbox->caption.front().get());
}
- rendEl( "draw:text-box");
+ endEl("draw:text-box");
}
break;
}
case PICTYPE_DRAW:
if( hbox->picinfo.picdraw.zorder > 0 )
- padd("draw:z-index", sXML_CDATA,
- ascii(Int2Str( hbox->picinfo.picdraw.zorder + 10000, "%d", buf)));
+ mxList->addAttribute("draw:z-index", sXML_CDATA,
+ OUString::number(hbox->picinfo.picdraw.zorder + 10000));
makePictureDRAW(hbox->picinfo.picdraw.hdo, hbox);
break;
case PICTYPE_UNKNOWN:
@@ -3980,36 +3895,30 @@ void HwpReader::makePicture(Picture * hbox)
}
}
-
-#define DBL(x) ((x) * (x))
-void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
+void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, const Picture* hbox)
{
- int x = hbox->pgx;
- int y = hbox->pgy;
bool bIsRotate = false;
while (drawobj)
{
- padd("draw:style-name", sXML_CDATA,
- ascii(Int2Str(drawobj->index, "Draw%d", buf)));
+ mxList->addAttribute("draw:style-name", sXML_CDATA, "Draw" + OUString::number(drawobj->index));
int a = 0;
int b = 0;
switch (hbox->style.anchor_type)
{
case CHAR_ANCHOR:
- padd("text:anchor-type", sXML_CDATA, "as-char");
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "as-char");
break;
case PARA_ANCHOR:
- padd("text:anchor-type", sXML_CDATA, "paragraph");
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "paragraph");
break;
case PAGE_ANCHOR:
case PAPER_ANCHOR:
{
HWPInfo& hwpinfo = hwpfile.GetHWPInfo();
- padd("text:anchor-type", sXML_CDATA, "page");
- padd("text:anchor-page-number", sXML_CDATA,
- ascii(Int2Str(hbox->pgno +1, "%d", buf)));
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "page");
+ mxList->addAttribute("text:anchor-page-number", sXML_CDATA, OUString::number(hbox->pgno + 1));
a = hwpinfo.paper.left_margin;
b = hwpinfo.paper.top_margin + hwpinfo.paper.header_length;
break;
@@ -4018,13 +3927,16 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
if (drawobj->type == HWPDO_CONTAINER)
{
- rstartEl("draw:g", mxList);
+ startEl("draw:g");
mxList->clear();
makePictureDRAW(drawobj->child.get(), hbox);
- rendEl("draw:g");
+ endEl("draw:g");
}
else
{
+ double x = hbox->pgx;
+ double y = hbox->pgy;
+
bIsRotate = false;
if( (drawobj->property.flag & HWPDO_FLAG_ROTATION) &&
(drawobj->property.parall.pt[0].y != drawobj->property.parall.pt[1].y) &&
@@ -4034,30 +3946,31 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
{
int i;
- ZZParall *pal = &drawobj->property.parall;
+ ZZParall& pal = drawobj->property.parall;
- ZZPoint pt[3], r_pt[3];
+ basegfx::B2DPoint pt[3], r_pt[3];
for(i = 0 ; i < 3 ; i++ ){
- pt[i].x = pal->pt[i].x - drawobj->property.rot_originx;
+ basegfx::B2DPoint rot_origin(drawobj->property.rot_originx, drawobj->property.rot_originy);
+ pt[i].setX(pal.pt[i].x - rot_origin.getX());
/* Convert to a physical coordinate */
- pt[i].y = -(pal->pt[i].y - drawobj->property.rot_originy);
+ pt[i].setY(-(pal.pt[i].y - rot_origin.getY()));
}
- double rotate, skewX ;
+ double skewX;
/* 2 - rotation angle calculation */
- rotate = atan2( pt[1].y - pt[0].y, pt[1].x - pt[0].x );
+ double rotate = atan2(pt[1].getY() - pt[0].getY(), pt[1].getX() - pt[0].getX());
for( i = 0 ; i < 3 ; i++){
- r_pt[i].x = static_cast<int>(pt[i].x * cos(-rotate) - pt[i].y * sin(-rotate));
- r_pt[i].y = static_cast<int>(pt[i].y * cos(-rotate) + pt[i].x * sin(-rotate));
+ r_pt[i].setX(pt[i].getX() * cos(-rotate) - pt[i].getY() * sin(-rotate));
+ r_pt[i].setY(pt[i].getY() * cos(-rotate) + pt[i].getX() * sin(-rotate));
}
/* 4 - Calculation of reflex angle */
- if( r_pt[2].y == r_pt[1].y )
+ if (r_pt[2].getY() == r_pt[1].getY())
skewX = 0;
else
- skewX = atan(static_cast<double>(r_pt[2].x - r_pt[1].x )/( r_pt[2].y - r_pt[1].y ));
+ skewX = atan((r_pt[2].getX() - r_pt[1].getX()) / (r_pt[2].getY() - r_pt[1].getY()));
if( skewX >= M_PI_2 )
skewX -= M_PI;
if( skewX <= -M_PI_2 )
@@ -4065,28 +3978,28 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
OUString trans;
if( skewX != 0.0 && rotate != 0.0 ){
- trans = "skewX (" + Double2Str(skewX)
- + ") rotate (" + Double2Str(rotate)
- + ") translate (" + Double2Str(WTMM(x + a + drawobj->offset2.x + pal->pt[0].x)) + "mm "
- + Double2Str(WTMM(y + b + drawobj->offset2.y + pal->pt[0].y)) + "mm)";
+ trans = "skewX (" + OUString::number(skewX)
+ + ") rotate (" + OUString::number(rotate)
+ + ") translate (" + OUString::number(WTMM(x + a + drawobj->offset2.x + pal.pt[0].x)) + "mm "
+ + OUString::number(WTMM(y + b + drawobj->offset2.y + pal.pt[0].y)) + "mm)";
bIsRotate = true;
}
else if( skewX != 0.0 ){
- trans = "skewX (" + Double2Str(skewX)
- + ") translate (" + Double2Str(WTMM(x + a + drawobj->offset2.x + pal->pt[0].x)) + "mm "
- + Double2Str(WTMM(y + b + drawobj->offset2.y + pal->pt[0].y)) + "mm)";
+ trans = "skewX (" + OUString::number(skewX)
+ + ") translate (" + OUString::number(WTMM(x + a + drawobj->offset2.x + pal.pt[0].x)) + "mm "
+ + OUString::number(WTMM(y + b + drawobj->offset2.y + pal.pt[0].y)) + "mm)";
bIsRotate = true;
}
else if( rotate != 0.0 ){
- trans = "rotate (" + Double2Str(rotate)
- + ") translate (" + Double2Str(WTMM(x + a + drawobj->offset2.x + pal->pt[0].x)) + "mm "
- + Double2Str(WTMM(y + b + drawobj->offset2.y + pal->pt[0].y)) + "mm)";
+ trans = "rotate (" + OUString::number(rotate)
+ + ") translate (" + OUString::number(WTMM(x + a + drawobj->offset2.x + pal.pt[0].x)) + "mm "
+ + OUString::number(WTMM(y + b + drawobj->offset2.y + pal.pt[0].y)) + "mm)";
bIsRotate = true;
}
if( bIsRotate ){
- drawobj->extent.w = static_cast<int>(sqrt(double(DBL(pt[1].x-pt[0].x)+DBL(pt[1].y-pt[0].y))));
- drawobj->extent.h = static_cast<int>(sqrt(double(DBL(pt[2].x-pt[1].x)+DBL(pt[2].y-pt[1].y))));
- padd("draw:transform", sXML_CDATA, trans);
+ drawobj->extent.w = static_cast<int>(std::hypot(pt[1].getX() - pt[0].getX(), pt[1].getY() - pt[0].getY()));
+ drawobj->extent.h = static_cast<int>(std::hypot(pt[2].getX() - pt[1].getX(), pt[2].getY() - pt[1].getY()));
+ mxList->addAttribute("draw:transform", sXML_CDATA, trans);
}
}
switch (drawobj->type)
@@ -4094,65 +4007,65 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
case HWPDO_LINE: /* Line-starting coordinates, ending coordinates. */
if( drawobj->u.line_arc.flip & 0x01 )
{
- padd("svg:x1", sXML_CDATA,
- Double2Str (WTMM(x + a + drawobj->offset2.x + drawobj->extent.w)) + "mm");
- padd("svg:x2", sXML_CDATA,
- Double2Str (WTMM( x + a + drawobj->offset2.x )) + "mm");
+ mxList->addAttribute("svg:x1", sXML_CDATA,
+ OUString::number (WTMM(x + a + drawobj->offset2.x + drawobj->extent.w)) + "mm");
+ mxList->addAttribute("svg:x2", sXML_CDATA,
+ OUString::number (WTMM( x + a + drawobj->offset2.x )) + "mm");
}
else
{
- padd("svg:x1", sXML_CDATA,
- Double2Str (WTMM( x + a + drawobj->offset2.x )) + "mm");
- padd("svg:x2", sXML_CDATA,
- Double2Str (WTMM(x + a + drawobj->offset2.x + drawobj->extent.w)) + "mm");
+ mxList->addAttribute("svg:x1", sXML_CDATA,
+ OUString::number (WTMM( x + a + drawobj->offset2.x )) + "mm");
+ mxList->addAttribute("svg:x2", sXML_CDATA,
+ OUString::number (WTMM(x + a + drawobj->offset2.x + drawobj->extent.w)) + "mm");
}
if( drawobj->u.line_arc.flip & 0x02 )
{
- padd("svg:y1", sXML_CDATA,
- Double2Str (WTMM( y + b + drawobj->offset2.y + drawobj->extent.h ) ) + "mm");
- padd("svg:y2", sXML_CDATA,
- Double2Str (WTMM( y + b + drawobj->offset2.y )) + "mm");
+ mxList->addAttribute("svg:y1", sXML_CDATA,
+ OUString::number (WTMM( y + b + drawobj->offset2.y + drawobj->extent.h ) ) + "mm");
+ mxList->addAttribute("svg:y2", sXML_CDATA,
+ OUString::number (WTMM( y + b + drawobj->offset2.y )) + "mm");
}
else
{
- padd("svg:y1", sXML_CDATA,
- Double2Str (WTMM( y + b + drawobj->offset2.y)) + "mm");
- padd("svg:y2", sXML_CDATA,
- Double2Str (WTMM(y + b + drawobj->offset2.y + drawobj->extent.h)) + "mm");
+ mxList->addAttribute("svg:y1", sXML_CDATA,
+ OUString::number (WTMM( y + b + drawobj->offset2.y)) + "mm");
+ mxList->addAttribute("svg:y2", sXML_CDATA,
+ OUString::number (WTMM(y + b + drawobj->offset2.y + drawobj->extent.h)) + "mm");
}
- rstartEl("draw:line", mxList);
+ startEl("draw:line");
mxList->clear();
- rendEl("draw:line");
+ endEl("draw:line");
break;
case HWPDO_RECT: /* rectangle - the starting position, vertical/horizontal */
if( !bIsRotate )
{
- padd("svg:x", sXML_CDATA,
- Double2Str (WTMM( x + a + drawobj->offset2.x)) + "mm");
- padd("svg:y", sXML_CDATA,
- Double2Str (WTMM( y + b + drawobj->offset2.y)) + "mm");
+ mxList->addAttribute("svg:x", sXML_CDATA,
+ OUString::number (WTMM( x + a + drawobj->offset2.x)) + "mm");
+ mxList->addAttribute("svg:y", sXML_CDATA,
+ OUString::number (WTMM( y + b + drawobj->offset2.y)) + "mm");
}
- padd("svg:width", sXML_CDATA,
- Double2Str (WTMM( drawobj->extent.w )) + "mm");
- padd("svg:height", sXML_CDATA,
- Double2Str (WTMM( drawobj->extent.h )) + "mm");
+ mxList->addAttribute("svg:width", sXML_CDATA,
+ OUString::number (WTMM( drawobj->extent.w )) + "mm");
+ mxList->addAttribute("svg:height", sXML_CDATA,
+ OUString::number (WTMM( drawobj->extent.h )) + "mm");
if( drawobj->property.flag & 0x01 )
{
int value = drawobj->extent.w < drawobj->extent.h ?
drawobj->extent.w : drawobj->extent.h ;
- padd("draw:corner-radius", sXML_CDATA,
- Double2Str (WTMM( value/10 )) + "mm");
+ mxList->addAttribute("draw:corner-radius", sXML_CDATA,
+ OUString::number (WTMM( value/10 )) + "mm");
}
else if( drawobj->property.flag & 0x04 )
{
int value = drawobj->extent.w < drawobj->extent.h ?
drawobj->extent.w : drawobj->extent.h ;
- padd("draw:corner-radius", sXML_CDATA,
- Double2Str (WTMM( value / 2)) + "mm");
+ mxList->addAttribute("draw:corner-radius", sXML_CDATA,
+ OUString::number (WTMM( value / 2)) + "mm");
}
- rstartEl("draw:rect", mxList);
+ startEl("draw:rect");
mxList->clear();
if( (drawobj->property.flag & HWPDO_FLAG_AS_TEXTBOX) &&
drawobj->property.pPara ) // As Textbox
@@ -4165,42 +4078,46 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
pPara = pPara->Next();
}
}
- rendEl("draw:rect");
+ endEl("draw:rect");
break;
case HWPDO_ELLIPSE: /* Ellipse - the starting position, vertical/horizontal */
case HWPDO_ADVANCED_ELLIPSE: /* modified ellipse */
{
if( !bIsRotate )
{
- padd("svg:x", sXML_CDATA,
- Double2Str (WTMM( x + a + drawobj->offset2.x)) + "mm");
- padd("svg:y", sXML_CDATA,
- Double2Str (WTMM( y + b + drawobj->offset2.y)) + "mm");
+ mxList->addAttribute("svg:x", sXML_CDATA,
+ OUString::number (WTMM( x + a + drawobj->offset2.x)) + "mm");
+ mxList->addAttribute("svg:y", sXML_CDATA,
+ OUString::number (WTMM( y + b + drawobj->offset2.y)) + "mm");
}
- padd("svg:width", sXML_CDATA,
- Double2Str (WTMM( drawobj->extent.w )) + "mm");
- padd("svg:height", sXML_CDATA,
- Double2Str (WTMM( drawobj->extent.h )) + "mm");
+ mxList->addAttribute("svg:width", sXML_CDATA,
+ OUString::number (WTMM( drawobj->extent.w )) + "mm");
+ mxList->addAttribute("svg:height", sXML_CDATA,
+ OUString::number (WTMM( drawobj->extent.h )) + "mm");
if( drawobj->type == HWPDO_ADVANCED_ELLIPSE ){
- if( drawobj->u.arc.radial[0].x != drawobj->u.arc.radial[1].x
- || drawobj->u.arc.radial[0].y != drawobj->u.arc.radial[1].y ){
- int Cx,Cy;
- Cx = ( drawobj->offset2.x + drawobj->extent.w ) / 2;
- Cy = ( drawobj->offset2.y + drawobj->extent.h ) / 2;
-
- double start_angle, end_angle;
- start_angle = calcAngle( Cx, Cy, drawobj->u.arc.radial[0].x, drawobj->u.arc.radial[0].y );
- end_angle = calcAngle( Cx, Cy, drawobj->u.arc.radial[1].x, drawobj->u.arc.radial[1].y );
- if( drawobj->property.fill_color < 0xffffff )
- padd("draw:kind", sXML_CDATA, "section");
- else
- padd("draw:kind", sXML_CDATA, "arc");
- padd("draw:start-angle", sXML_CDATA, Double2Str(start_angle ));
- padd("draw:end-angle", sXML_CDATA, Double2Str(end_angle));
- }
+ if (drawobj->u.arc.radial[0].x != drawobj->u.arc.radial[1].x ||
+ drawobj->u.arc.radial[0].y != drawobj->u.arc.radial[1].y) {
+
+ int Cx, Cy;
+ if (!o3tl::checked_add(drawobj->offset2.x, drawobj->extent.w, Cx) &&
+ !o3tl::checked_add(drawobj->offset2.y, drawobj->extent.h, Cy))
+ {
+ Cx /= 2;
+ Cy /= 2;
+
+ double start_angle = calcAngle( Cx, Cy, drawobj->u.arc.radial[0].x, drawobj->u.arc.radial[0].y );
+ double end_angle = calcAngle( Cx, Cy, drawobj->u.arc.radial[1].x, drawobj->u.arc.radial[1].y );
+ if( drawobj->property.fill_color < 0xffffff )
+ mxList->addAttribute("draw:kind", sXML_CDATA, "section");
+ else
+ mxList->addAttribute("draw:kind", sXML_CDATA, "arc");
+ mxList->addAttribute("draw:start-angle", sXML_CDATA, OUString::number(start_angle ));
+ mxList->addAttribute("draw:end-angle", sXML_CDATA, OUString::number(end_angle));
+ }
+ }
}
- rstartEl("draw:ellipse", mxList);
+ startEl("draw:ellipse");
mxList->clear();
if( drawobj->property.flag >> 19 & 0x01 &&
drawobj->property.pPara ) // As Textbox
@@ -4213,7 +4130,7 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
pPara = pPara->Next();
}
}
- rendEl("draw:ellipse");
+ endEl("draw:ellipse");
break;
}
@@ -4225,69 +4142,66 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
if( !bIsRotate )
{
if( ( flip == 0 || flip == 2 ) && drawobj->type == HWPDO_ARC)
- padd("svg:x", sXML_CDATA,
- Double2Str (WTMM( x + a + drawobj->offset2.x - drawobj->extent.w)) + "mm");
+ mxList->addAttribute("svg:x", sXML_CDATA,
+ OUString::number (WTMM( x + a + drawobj->offset2.x - drawobj->extent.w)) + "mm");
else
- padd("svg:x", sXML_CDATA,
- Double2Str (WTMM( x + a + drawobj->offset2.x)) + "mm");
+ mxList->addAttribute("svg:x", sXML_CDATA,
+ OUString::number (WTMM( x + a + drawobj->offset2.x)) + "mm");
if( ( flip == 0 || flip == 1 ) && drawobj->type == HWPDO_ARC)
- padd("svg:y", sXML_CDATA,
- Double2Str (WTMM( y + b + drawobj->offset2.y - drawobj->extent.h)) + "mm");
+ mxList->addAttribute("svg:y", sXML_CDATA,
+ OUString::number (WTMM( y + b + drawobj->offset2.y - drawobj->extent.h)) + "mm");
else
- padd("svg:y", sXML_CDATA,
- Double2Str (WTMM( y + b + drawobj->offset2.y)) + "mm");
+ mxList->addAttribute("svg:y", sXML_CDATA,
+ OUString::number (WTMM( y + b + drawobj->offset2.y)) + "mm");
}
- padd("svg:width", sXML_CDATA,
- Double2Str (WTMM( drawobj->extent.w * 2)) + "mm");
- padd("svg:height", sXML_CDATA,
- Double2Str (WTMM( drawobj->extent.h * 2)) + "mm");
+ mxList->addAttribute("svg:width", sXML_CDATA,
+ OUString::number (WTMM( drawobj->extent.w * 2)) + "mm");
+ mxList->addAttribute("svg:height", sXML_CDATA,
+ OUString::number (WTMM( drawobj->extent.h * 2)) + "mm");
if( drawobj->property.flag & HWPDO_FLAG_DRAW_PIE ||
drawobj->property.fill_color < 0xffffff )
- padd("draw:kind", sXML_CDATA, "section");
+ mxList->addAttribute("draw:kind", sXML_CDATA, "section");
else
- padd("draw:kind", sXML_CDATA, "arc");
+ mxList->addAttribute("draw:kind", sXML_CDATA, "arc");
if( drawobj->type == HWPDO_ADVANCED_ARC ){
double start_angle, end_angle;
- ZZParall *pal = &drawobj->property.parall;
+ ZZParall& pal = drawobj->property.parall;
- start_angle = atan2(pal->pt[0].y - pal->pt[1].y,pal->pt[1].x - pal->pt[0].x );
- end_angle = atan2(pal->pt[2].y - pal->pt[1].y, pal->pt[1].x - pal->pt[2].x);
+ start_angle = atan2(pal.pt[0].y - pal.pt[1].y,pal.pt[1].x - pal.pt[0].x );
+ end_angle = atan2(pal.pt[2].y - pal.pt[1].y, pal.pt[1].x - pal.pt[2].x);
- if( ( start_angle > end_angle ) && (start_angle - end_angle < M_PI )){
- double tmp_angle = start_angle;
- start_angle = end_angle;
- end_angle = tmp_angle;
- }
- padd("draw:start-angle", sXML_CDATA, Double2Str(basegfx::rad2deg(start_angle)));
- padd("draw:end-angle", sXML_CDATA, Double2Str(basegfx::rad2deg(end_angle)));
+ if( ( start_angle > end_angle ) && (start_angle - end_angle < M_PI ))
+ std::swap( start_angle, end_angle );
+ mxList->addAttribute("draw:start-angle", sXML_CDATA, OUString::number(basegfx::rad2deg(start_angle)));
+ mxList->addAttribute("draw:end-angle", sXML_CDATA, OUString::number(basegfx::rad2deg(end_angle)));
}
else
{
if( drawobj->u.line_arc.flip == 0 )
{
- padd("draw:start-angle", sXML_CDATA, "270");
- padd("draw:end-angle", sXML_CDATA, "0");
+ mxList->addAttribute("draw:start-angle", sXML_CDATA, "270");
+ mxList->addAttribute("draw:end-angle", sXML_CDATA, "0");
}
else if( drawobj->u.line_arc.flip == 1 )
{
- padd("draw:start-angle", sXML_CDATA, "180");
- padd("draw:end-angle", sXML_CDATA, "270");
+ mxList->addAttribute("draw:start-angle", sXML_CDATA, "180");
+ mxList->addAttribute("draw:end-angle", sXML_CDATA, "270");
}
else if( drawobj->u.line_arc.flip == 2 )
{
- padd("draw:start-angle", sXML_CDATA, "0");
- padd("draw:end-angle", sXML_CDATA, "90");
+ mxList->addAttribute("draw:start-angle", sXML_CDATA, "0");
+ mxList->addAttribute("draw:end-angle", sXML_CDATA, "90");
}
else
{
- padd("draw:start-angle", sXML_CDATA, "90");
- padd("draw:end-angle", sXML_CDATA, "180");
+ mxList->addAttribute("draw:start-angle", sXML_CDATA, "90");
+ mxList->addAttribute("draw:end-angle", sXML_CDATA, "180");
}
}
- rstartEl("draw:ellipse", mxList);
+ startEl("draw:ellipse");
mxList->clear();
if( drawobj->property.flag >> 19 & 0x01 &&
drawobj->property.pPara ) // As Textbox
@@ -4300,7 +4214,7 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
pPara = pPara->Next();
}
}
- rendEl("draw:ellipse");
+ endEl("draw:ellipse");
break;
}
@@ -4312,17 +4226,19 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
}
if( !bIsRotate )
{
- padd("svg:x", sXML_CDATA,
- Double2Str (WTMM( x + a + drawobj->offset2.x)) + "mm");
- padd("svg:y", sXML_CDATA,
- Double2Str (WTMM( y + b + drawobj->offset2.y)) + "mm");
+ mxList->addAttribute("svg:x", sXML_CDATA,
+ OUString::number (WTMM( x + a + drawobj->offset2.x)) + "mm");
+ mxList->addAttribute("svg:y", sXML_CDATA,
+ OUString::number (WTMM( y + b + drawobj->offset2.y)) + "mm");
}
- padd("svg:width", sXML_CDATA,
- Double2Str (WTMM( drawobj->extent.w )) + "mm");
- padd("svg:height", sXML_CDATA,
- Double2Str (WTMM( drawobj->extent.h )) + "mm");
- sprintf(buf, "0 0 %d %d", WTSM(drawobj->extent.w) , WTSM(drawobj->extent.h) );
- padd("svg:viewBox", sXML_CDATA, ascii(buf) );
+ mxList->addAttribute("svg:width", sXML_CDATA,
+ OUString::number (WTMM( drawobj->extent.w )) + "mm");
+ mxList->addAttribute("svg:height", sXML_CDATA,
+ OUString::number (WTMM( drawobj->extent.h )) + "mm");
+ mxList->addAttribute(
+ "svg:viewBox", sXML_CDATA,
+ "0 0 " + OUString::number(WTSM(drawobj->extent.w)) + " "
+ + OUString::number(WTSM(drawobj->extent.h)));
OUStringBuffer oustr;
@@ -4368,30 +4284,35 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
NaturalSpline(n, tarr.get(), yarr.get(), yb, carr, darr);
}
- sprintf(buf, "M%d %dC%d %d", WTSM(xarr[0]), WTSM(yarr[0]),
- WTSM(xarr[0] + xb[0]/3), WTSM(yarr[0] + yb[0]/3) );
- oustr.append(ascii(buf));
+ oustr.append(
+ "M" + OUString::number(WTSM(xarr[0])) + " "
+ + OUString::number(WTSM(yarr[0])) + "C"
+ + OUString::number(WTSM(xarr[0] + xb[0]/3)) + " "
+ + OUString::number(WTSM(yarr[0] + yb[0]/3)));
for( i = 1 ; i < n ; i++ ){
if( i == n -1 ){
- sprintf(buf, " %d %d %d %dz",
- WTSM(xarr[i] - xb[i]/3), WTSM(yarr[i] - yb[i]/3),
- WTSM(xarr[i]), WTSM(yarr[i]) );
+ oustr.append(
+ " " + OUString::number(WTSM(xarr[i] - xb[i]/3)) + " "
+ + OUString::number(WTSM(yarr[i] - yb[i]/3)) + " "
+ + OUString::number(WTSM(xarr[i])) + " "
+ + OUString::number(WTSM(yarr[i])) + "z");
}
else{
- sprintf(buf, " %d %d %d %d %d %d",
- WTSM(xarr[i] - xb[i]/3), WTSM(yarr[i] - yb[i]/3),
- WTSM(xarr[i]), WTSM(yarr[i]),
- WTSM(xarr[i] + xb[i]/3), WTSM(yarr[i] + yb[i]/3) );
+ oustr.append(
+ " " + OUString::number(WTSM(xarr[i] - xb[i]/3)) + " "
+ + OUString::number(WTSM(yarr[i] - yb[i]/3)) + " "
+ + OUString::number(WTSM(xarr[i])) + " "
+ + OUString::number(WTSM(yarr[i])) + " "
+ + OUString::number(WTSM(xarr[i] + xb[i]/3)) + " "
+ + OUString::number(WTSM(yarr[i] + yb[i]/3)));
}
-
- oustr.append(ascii(buf));
}
}
- padd("svg:d", sXML_CDATA, oustr.makeStringAndClear());
+ mxList->addAttribute("svg:d", sXML_CDATA, oustr.makeStringAndClear());
- rstartEl("draw:path", mxList);
+ startEl("draw:path");
mxList->clear();
// As Textbox
if( drawobj->property.flag >> 19 & 0x01 && drawobj->property.pPara )
@@ -4403,7 +4324,7 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
pPara = pPara->Next();
}
}
- rendEl("draw:path");
+ endEl("draw:path");
break;
}
case HWPDO_CLOSED_FREEFORM:
@@ -4411,32 +4332,31 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
{
bool bIsPolygon = false;
- padd("svg:x", sXML_CDATA,
- Double2Str (WTMM( x + a + drawobj->offset2.x)) + "mm");
- padd("svg:y", sXML_CDATA,
- Double2Str (WTMM( y + b + drawobj->offset2.y)) + "mm");
+ mxList->addAttribute("svg:x", sXML_CDATA,
+ OUString::number (WTMM( x + a + drawobj->offset2.x)) + "mm");
+ mxList->addAttribute("svg:y", sXML_CDATA,
+ OUString::number (WTMM( y + b + drawobj->offset2.y)) + "mm");
- padd("svg:width", sXML_CDATA,
- Double2Str (WTMM( drawobj->extent.w )) + "mm");
- padd("svg:height", sXML_CDATA,
- Double2Str (WTMM( drawobj->extent.h )) + "mm");
+ mxList->addAttribute("svg:width", sXML_CDATA,
+ OUString::number (WTMM( drawobj->extent.w )) + "mm");
+ mxList->addAttribute("svg:height", sXML_CDATA,
+ OUString::number (WTMM( drawobj->extent.h )) + "mm");
- sprintf(buf, "0 0 %d %d", WTSM(drawobj->extent.w), WTSM(drawobj->extent.h));
- padd("svg:viewBox", sXML_CDATA, ascii(buf) );
+ mxList->addAttribute("svg:viewBox", sXML_CDATA, "0 0 " + OUString::number(WTSM(drawobj->extent.w)) + " " + OUString::number(WTSM(drawobj->extent.h)));
OUStringBuffer oustr;
if (drawobj->u.freeform.npt > 0)
{
- sprintf(buf, "%d,%d", WTSM(drawobj->u.freeform.pt[0].x), WTSM(drawobj->u.freeform.pt[0].y));
- oustr.append(ascii(buf));
+ oustr.append(
+ OUString::number(WTSM(drawobj->u.freeform.pt[0].x)) + ","
+ + OUString::number(WTSM(drawobj->u.freeform.pt[0].y)));
int i;
for (i = 1; i < drawobj->u.freeform.npt ; i++)
{
- sprintf(buf, " %d,%d",
- WTSM(drawobj->u.freeform.pt[i].x),
- WTSM(drawobj->u.freeform.pt[i].y));
- oustr.append(ascii(buf));
+ oustr.append(
+ " " + OUString::number(WTSM(drawobj->u.freeform.pt[i].x)) + ","
+ + OUString::number(WTSM(drawobj->u.freeform.pt[i].y)));
}
if( drawobj->u.freeform.pt[0].x == drawobj->u.freeform.pt[i-1].x &&
drawobj->u.freeform.pt[0].y == drawobj->u.freeform.pt[i-1].y )
@@ -4444,7 +4364,7 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
bIsPolygon = true;
}
}
- padd("draw:points", sXML_CDATA, oustr.makeStringAndClear());
+ mxList->addAttribute("draw:points", sXML_CDATA, oustr.makeStringAndClear());
if( drawobj->property.fill_color <= 0xffffff ||
drawobj->property.pattern_type != 0)
@@ -4454,7 +4374,7 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
if(bIsPolygon)
{
- rstartEl("draw:polygon", mxList);
+ startEl("draw:polygon");
mxList->clear();
if( drawobj->property.flag >> 19 & 0x01 &&
// As Textbox
@@ -4468,11 +4388,11 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
pPara = pPara->Next();
}
}
- rendEl("draw:polygon");
+ endEl("draw:polygon");
}
else
{
- rstartEl("draw:polyline", mxList);
+ startEl("draw:polyline");
mxList->clear();
if( drawobj->property.flag >> 19 & 0x01 &&
// As Textbox
@@ -4486,38 +4406,38 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
pPara = pPara->Next();
}
}
- rendEl("draw:polyline");
+ endEl("draw:polyline");
}
break;
}
case HWPDO_TEXTBOX:
if( !bIsRotate )
{
- padd("svg:x", sXML_CDATA,
- Double2Str (WTMM( x + a + drawobj->offset2.x)) + "mm");
- padd("svg:y", sXML_CDATA,
- Double2Str (WTMM( y + b + drawobj->offset2.y)) + "mm");
+ mxList->addAttribute("svg:x", sXML_CDATA,
+ OUString::number (WTMM( x + a + drawobj->offset2.x)) + "mm");
+ mxList->addAttribute("svg:y", sXML_CDATA,
+ OUString::number (WTMM( y + b + drawobj->offset2.y)) + "mm");
}
- padd("svg:width", sXML_CDATA,
- Double2Str (WTMM( drawobj->extent.w )) + "mm");
- padd("svg:height", sXML_CDATA,
- Double2Str (WTMM( drawobj->extent.h )) + "mm");
+ mxList->addAttribute("svg:width", sXML_CDATA,
+ OUString::number (WTMM( drawobj->extent.w )) + "mm");
+ mxList->addAttribute("svg:height", sXML_CDATA,
+ OUString::number (WTMM( drawobj->extent.h )) + "mm");
if( drawobj->property.flag & 0x01 )
{
int value = drawobj->extent.w < drawobj->extent.h ?
drawobj->extent.w : drawobj->extent.h ;
- padd("draw:corner-radius", sXML_CDATA,
- Double2Str (WTMM( value/10 )) + "mm");
+ mxList->addAttribute("draw:corner-radius", sXML_CDATA,
+ OUString::number (WTMM( value/10 )) + "mm");
}
else if( drawobj->property.flag & 0x04 )
{
int value = drawobj->extent.w < drawobj->extent.h ?
drawobj->extent.w : drawobj->extent.h ;
- padd("draw:corner-radius", sXML_CDATA,
- Double2Str (WTMM( value / 2)) + "mm");
+ mxList->addAttribute("draw:corner-radius", sXML_CDATA,
+ OUString::number (WTMM( value / 2)) + "mm");
}
- rstartEl("draw:text-box", mxList);
+ startEl("draw:text-box");
mxList->clear();
HWPPara *pPara = drawobj->u.textbox.h;
@@ -4528,7 +4448,7 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
pPara = pPara->Next();
}
- rendEl("draw:text-box");
+ endEl("draw:text-box");
break;
}
}
@@ -4537,15 +4457,13 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox)
}
}
-
void HwpReader::makeLine()
{
- padd("text:style-name", sXML_CDATA, "Horizontal Line");
- rstartEl( "text:p", mxList);
+ mxList->addAttribute("text:style-name", sXML_CDATA, "Horizontal Line");
+ startEl("text:p");
mxList->clear();
}
-
/**
* Input-comment-hidden description: shows a hidden explanation to the users.
* Parse out only strings, but it may contain paragraphs.
@@ -4556,18 +4474,20 @@ void HwpReader::makeHidden(Hidden * hbox)
int res;
hchar dest[3];
- padd("text:condition", sXML_CDATA, "");
- padd("text:string-value", sXML_CDATA, "");
- rstartEl("text:hidden-text", mxList);
+ mxList->addAttribute("text:condition", sXML_CDATA, "");
+ mxList->addAttribute("text:string-value", sXML_CDATA, "");
+ startEl("text:hidden-text");
mxList->clear();
- HWPPara *para = hbox->plist.front().get();
+ HWPPara *para = !hbox->plist.empty() ? hbox->plist.front().get() : nullptr;
while (para)
{
- for (int n = 0; n < para->nch && para->hhstr[n]->hh;
- n += para->hhstr[n]->WSize())
+ for (const auto& box : para->hhstr)
{
- res = hcharconv(para->hhstr[n]->hh, dest, UNICODE);
+ if (!box->hh)
+ break;
+
+ res = hcharconv(box->hh, dest, UNICODE);
for( int j = 0 ; j < res ; j++ )
{
str.push_back(dest[j]);
@@ -4576,7 +4496,7 @@ void HwpReader::makeHidden(Hidden * hbox)
para = para->Next();
}
makeChars(str);
- rendEl("text:hidden-text");
+ endEl("text:hidden-text");
}
@@ -4587,37 +4507,35 @@ void HwpReader::makeFootnote(Footnote * hbox)
{
if (hbox->type)
{
- padd("text:id", sXML_CDATA,
- ascii(Int2Str(hbox->number, "edn%d", buf)));
- rstartEl("text:endnote", mxList);
+ mxList->addAttribute("text:id", sXML_CDATA, "edn" + OUString::number(hbox->number));
+ startEl("text:endnote");
mxList->clear();
- padd("text:label", sXML_CDATA,
- ascii(Int2Str(hbox->number, "%d", buf)));
- rstartEl("text:endnote-citation", mxList);
+ mxList->addAttribute("text:label", sXML_CDATA, OUString::number(hbox->number));
+ startEl("text:endnote-citation");
mxList->clear();
- rchars(ascii(Int2Str(hbox->number, "%d", buf)));
- rendEl("text:endnote-citation");
- rstartEl("text:endnote-body", mxList);
- parsePara(hbox->plist.front().get());
- rendEl("text:endnote-body");
- rendEl("text:endnote");
+ chars(OUString::number(hbox->number));
+ endEl("text:endnote-citation");
+ startEl("text:endnote-body");
+ if (!hbox->plist.empty())
+ parsePara(hbox->plist.front().get());
+ endEl("text:endnote-body");
+ endEl("text:endnote");
}
else
{
- padd("text:id", sXML_CDATA,
- ascii(Int2Str(hbox->number, "ftn%d", buf)));
- rstartEl("text:footnote", mxList);
+ mxList->addAttribute("text:id", sXML_CDATA, "ftn" + OUString::number(hbox->number));
+ startEl("text:footnote");
mxList->clear();
- padd("text:label", sXML_CDATA,
- ascii(Int2Str(hbox->number, "%d", buf)));
- rstartEl("text:footnote-citation", mxList);
+ mxList->addAttribute("text:label", sXML_CDATA, OUString::number(hbox->number));
+ startEl("text:footnote-citation");
mxList->clear();
- rchars(ascii(Int2Str(hbox->number, "%d", buf)));
- rendEl("text:footnote-citation");
- rstartEl("text:footnote-body", mxList);
- parsePara(hbox->plist.front().get());
- rendEl("text:footnote-body");
- rendEl("text:footnote");
+ chars(OUString::number(hbox->number));
+ endEl("text:footnote-citation");
+ startEl("text:footnote-body");
+ if (!hbox->plist.empty())
+ parsePara(hbox->plist.front().get());
+ endEl("text:footnote-body");
+ endEl("text:footnote");
}
}
@@ -4630,9 +4548,9 @@ void HwpReader::makeAutoNum(AutoNum const * hbox)
switch (hbox->type)
{
case PGNUM_AUTO:
- rstartEl("text:page-number", mxList);
- rchars(ascii(Int2Str(hbox->number, "%d", buf)));
- rendEl("text:page-number");
+ startEl("text:page-number");
+ chars(OUString::number(hbox->number));
+ endEl("text:page-number");
break;
case FNNUM_AUTO:
break;
@@ -4640,22 +4558,20 @@ void HwpReader::makeAutoNum(AutoNum const * hbox)
break;
case EQUNUM_AUTO:
case PICNUM_AUTO:
- padd("text:ref-name",sXML_CDATA,
- ascii(Int2Str(hbox->number, "refIllustration%d", buf)));
- padd("text:name",sXML_CDATA, "Illustration");
- padd("style:num-format",sXML_CDATA, "1");
- rstartEl("text:sequence", mxList);
- rchars(ascii(Int2Str(hbox->number, "%d", buf)));
- rendEl("text:sequence");
+ mxList->addAttribute("text:ref-name",sXML_CDATA, "refIllustration" + OUString::number(hbox->number));
+ mxList->addAttribute("text:name",sXML_CDATA, "Illustration");
+ mxList->addAttribute("style:num-format",sXML_CDATA, "1");
+ startEl("text:sequence");
+ chars(OUString::number(hbox->number));
+ endEl("text:sequence");
break;
case TBLNUM_AUTO:
- padd("text:ref-name",sXML_CDATA,
- ascii(Int2Str(hbox->number, "refTable%d", buf)));
- padd("text:name",sXML_CDATA, "Table");
- padd("style:num-format",sXML_CDATA, "1");
- rstartEl("text:sequence", mxList);
- rchars(ascii(Int2Str(hbox->number, "%d", buf)));
- rendEl("text:sequence");
+ mxList->addAttribute("text:ref-name",sXML_CDATA, "refTable" + OUString::number(hbox->number));
+ mxList->addAttribute("text:name",sXML_CDATA, "Table");
+ mxList->addAttribute("style:num-format",sXML_CDATA, "1");
+ startEl("text:sequence");
+ chars(OUString::number(hbox->number));
+ endEl("text:sequence");
break;
}
}
@@ -4679,38 +4595,35 @@ void HwpReader::makeShowPageNum()
nPos = 3;
}
- padd("draw:style-name", sXML_CDATA,
- ascii(Int2Str(nPos, "PNBox%d", buf)));
- padd("draw:name", sXML_CDATA,
- ascii(Int2Str(nPos, "PageNumber%d", buf)));
- padd("text:anchor-type", sXML_CDATA, "paragraph");
- padd("svg:y", sXML_CDATA, "0cm");
- padd("svg:width", sXML_CDATA, "2.0cm");
- padd("fo:min-height", sXML_CDATA, "0.5cm");
- rstartEl("draw:text-box", mxList);
+ mxList->addAttribute("draw:style-name", sXML_CDATA, "PNBox" + OUString::number(nPos));
+ mxList->addAttribute("draw:name", sXML_CDATA, "PageNumber" + OUString::number(nPos));
+ mxList->addAttribute("text:anchor-type", sXML_CDATA, "paragraph");
+ mxList->addAttribute("svg:y", sXML_CDATA, "0cm");
+ mxList->addAttribute("svg:width", sXML_CDATA, "2.0cm");
+ mxList->addAttribute("fo:min-height", sXML_CDATA, "0.5cm");
+ startEl("draw:text-box");
mxList->clear();
- padd("text:style-name", sXML_CDATA,
- ascii(Int2Str(nPos, "PNPara%d", buf)));
- rstartEl("text:p", mxList);
+ mxList->addAttribute("text:style-name", sXML_CDATA, "PNPara" + OUString::number(nPos));
+ startEl("text:p");
mxList->clear();
if( hbox->shape > 2 )
- rchars("- ");
+ chars("- ");
if( hbox->shape % 3 == 0 )
- padd("style:num-format", sXML_CDATA, "1");
+ mxList->addAttribute("style:num-format", sXML_CDATA, "1");
else if( hbox->shape % 3 == 1 )
- padd("style:num-format", sXML_CDATA, "I");
+ mxList->addAttribute("style:num-format", sXML_CDATA, "I");
else
- padd("style:num-format", sXML_CDATA, "i");
- padd("text:select-page", sXML_CDATA, "current");
- rstartEl("text:page-number", mxList);
+ mxList->addAttribute("style:num-format", sXML_CDATA, "i");
+ mxList->addAttribute("text:select-page", sXML_CDATA, "current");
+ startEl("text:page-number");
mxList->clear();
- rchars("2");
- rendEl("text:page-number");
+ chars("2");
+ endEl("text:page-number");
if( hbox->shape > 2 )
- rchars(" -");
- rendEl("text:p");
- rendEl("draw:text-box");
+ chars(" -");
+ endEl("text:p");
+ endEl("draw:text-box");
}
@@ -4721,14 +4634,14 @@ void HwpReader::makeShowPageNum()
void HwpReader::makeMailMerge(MailMerge *)
{
hchar_string const boxstr = MailMerge::GetString();
- rchars(fromHcharStringToOUString(hstr2ucsstr(boxstr.c_str())));
+ chars(hstr2OUString(boxstr.c_str()));
}
void HwpReader::makeOutline(Outline const * hbox)
{
if( hbox->kind == 1 )
- rchars( fromHcharStringToOUString(hbox->GetUnicode()) );
+ chars( hbox->GetUnicode() );
}
@@ -4741,25 +4654,18 @@ void HwpReader::parsePara(HWPPara * para)
{
if( !bParaStart )
{
- padd("text:style-name", sXML_CDATA,
- ascii(getPStyleName(para->GetParaShape().index, buf)));
- rstartEl( "text:p",mxList);
+ mxList->addAttribute("text:style-name", sXML_CDATA,
+ getPStyleName(para->GetParaShape().index));
+ startEl("text:p");
mxList->clear();
}
if( d->bFirstPara && d->bInBody )
{
/* for HWP's Bookmark */
- strcpy(
- buf,
- "[\xEB\xAC\xB8\xEC\x84\x9C\xEC\x9D\x98"
- " \xEC\xB2\x98\xEC\x9D\x8C]");
- // U+BB38 HANGUL SYLLABLE MUN, U+C11C HANGUL SYLLABLE SEO,
- // U+C758 HANGUL SYLLABLE YI, U+CC98 HANGUL SYLLABLE CEO,
- // U+C74C HANGUL SYLLABLE EUM: "Begin of Document"
- padd("text:name", sXML_CDATA, OUString(buf, strlen(buf), RTL_TEXTENCODING_UTF8));
- rstartEl("text:bookmark", mxList);
+ mxList->addAttribute("text:name", sXML_CDATA, sBeginOfDoc);
+ startEl("text:bookmark");
mxList->clear();
- rendEl("text:bookmark");
+ endEl("text:bookmark");
d->bFirstPara = false;
}
if( d->bInHeader )
@@ -4768,7 +4674,7 @@ void HwpReader::parsePara(HWPPara * para)
d->bInHeader = false;
}
- rendEl( "text:p" );
+ endEl("text:p");
}
else
{
@@ -4788,12 +4694,33 @@ void HwpReader::parsePara(HWPPara * para)
}
+void HwpReader::startEl(const OUString& el)
+{
+ if (m_rxDocumentHandler)
+ m_rxDocumentHandler->startElement(el, mxList);
+}
+
+
+void HwpReader::endEl(const OUString& el)
+{
+ if (m_rxDocumentHandler)
+ m_rxDocumentHandler->endElement(el);
+}
+
+
+void HwpReader::chars(const OUString& s)
+{
+ if (m_rxDocumentHandler)
+ m_rxDocumentHandler->characters(s);
+}
+
+
namespace
{
constexpr OUStringLiteral IMPLEMENTATION_NAME = u"com.sun.comp.hwpimport.HwpImportFilter";
-constexpr OUStringLiteral SERVICE_NAME1 = u"com.sun.star.document.ImportFilter";
-constexpr OUStringLiteral SERVICE_NAME2 = u"com.sun.star.document.ExtendedTypeDetection";
+constexpr OUString SERVICE_NAME1 = u"com.sun.star.document.ImportFilter"_ustr;
+constexpr OUString SERVICE_NAME2 = u"com.sun.star.document.ExtendedTypeDetection"_ustr;
class HwpImportFilter : public WeakImplHelper< XFilter, XImporter, XServiceInfo, XExtendedFilterDetection >
{
@@ -4830,13 +4757,12 @@ HwpImportFilter::HwpImportFilter(const Reference< XComponentContext >& rxContext
rtl::Reference<HwpReader> p = new HwpReader;
p->setDocumentHandler( xHandler );
- Reference< XImporter > xImporter( xHandler, UNO_QUERY );
- rImporter = xImporter;
+ rImporter.set(xHandler, UNO_QUERY);
rFilter = p;
}
catch( Exception & )
{
- printf(" fail to instantiate %s\n", OUString(WRITER_IMPORTER_NAME).toUtf8().getStr() );
+ printf(" fail to instantiate %s\n", WRITER_IMPORTER_NAME.toUtf8().getStr() );
exit( 1 );
}
}