Kaydet (Commit) 47e24bfe authored tarafından Zolnai Tamás's avatar Zolnai Tamás

CharBrd 8.1: ODF filters

Change-Id: Ib1a79678ffce7764638378b4002f5e87ae749d00
üst 54d13384
......@@ -177,6 +177,24 @@
#define CTF_MARGINRIGHT (XML_TEXT_CTF_START + 150)
#define CTF_MARGINTOP (XML_TEXT_CTF_START + 151)
#define CTF_MARGINBOTTOM (XML_TEXT_CTF_START + 152)
/* CTF ids for character border to avoid interference between
paragraph and character attributes */
#define CTF_CHARALLBORDERWIDTH (XML_TEXT_CTF_START + 153)
#define CTF_CHARLEFTBORDERWIDTH (XML_TEXT_CTF_START + 154)
#define CTF_CHARRIGHTBORDERWIDTH (XML_TEXT_CTF_START + 155)
#define CTF_CHARTOPBORDERWIDTH (XML_TEXT_CTF_START + 156)
#define CTF_CHARBOTTOMBORDERWIDTH (XML_TEXT_CTF_START + 157)
#define CTF_CHARALLBORDERDISTANCE (XML_TEXT_CTF_START + 158)
#define CTF_CHARLEFTBORDERDISTANCE (XML_TEXT_CTF_START + 159)
#define CTF_CHARRIGHTBORDERDISTANCE (XML_TEXT_CTF_START + 160)
#define CTF_CHARTOPBORDERDISTANCE (XML_TEXT_CTF_START + 161)
#define CTF_CHARBOTTOMBORDERDISTANCE (XML_TEXT_CTF_START + 162)
#define CTF_CHARALLBORDER (XML_TEXT_CTF_START + 163)
#define CTF_CHARLEFTBORDER (XML_TEXT_CTF_START + 164)
#define CTF_CHARRIGHTBORDER (XML_TEXT_CTF_START + 165)
#define CTF_CHARTOPBORDER (XML_TEXT_CTF_START + 166)
#define CTF_CHARBOTTOMBORDER (XML_TEXT_CTF_START + 167)
#define TEXT_PROP_MAP_TEXT 0
#define TEXT_PROP_MAP_PARA 1
......
This diff is collapsed.
......@@ -247,6 +247,7 @@ void XMLTextImportPropertyMapper::FontDefaultsCheck(
}
}
namespace {
//fdo#58730 The [UL|LR]Space class has a deficiency where "100%" also serves as
//a flag that the value is an absolute value so we can't truly handle an
//up/lower space property which wants to specify its 200% upper but 100% lower
......@@ -267,6 +268,67 @@ isNotDefaultRelSize(const XMLPropertyState* pRelState, const UniReference<XMLPro
return true;
}
static void lcl_SeparateBorder(
sal_uInt16 nIndex, XMLPropertyState* pAllBorderDistance,
XMLPropertyState* pBorderDistances[4], XMLPropertyState* pNewBorderDistances[4],
XMLPropertyState* pAllBorder, XMLPropertyState* pBorders[4],
XMLPropertyState* pNewBorders[4], XMLPropertyState* pAllBorderWidth,
XMLPropertyState* pBorderWidths[4]
#ifdef DBG_UTIL
, const UniReference< XMLPropertySetMapper >& rMapper
#endif
)
{
if( pAllBorderDistance && !pBorderDistances[nIndex] )
{
#ifdef DBG_UTIL
sal_Int16 nTmp = rMapper->GetEntryContextId(
pAllBorderDistance->mnIndex + nIndex + 1 );
DBG_ASSERT( nTmp >= CTF_LEFTBORDERDISTANCE &&
nTmp <= CTF_BOTTOMBORDERDISTANCE,
"wrong property context id" );
#endif
pNewBorderDistances[nIndex] =
new XMLPropertyState( pAllBorderDistance->mnIndex + nIndex + 1,
pAllBorderDistance->maValue );
pBorderDistances[nIndex] = pNewBorderDistances[nIndex];
}
if( pAllBorder && !pBorders[nIndex] )
{
#ifdef DBG_UTIL
sal_Int16 nTmp = rMapper->GetEntryContextId(
pAllBorder->mnIndex + nIndex + 1 );
DBG_ASSERT( nTmp >= CTF_LEFTBORDER && nTmp <= CTF_BOTTOMBORDER,
"wrong property context id" );
#endif
pNewBorders[nIndex] = new XMLPropertyState( pAllBorder->mnIndex + nIndex + 1,
pAllBorder->maValue );
pBorders[nIndex] = pNewBorders[nIndex];
}
if( !pBorderWidths[nIndex] )
pBorderWidths[nIndex] = pAllBorderWidth;
else
pBorderWidths[nIndex]->mnIndex = -1;
if( pBorders[nIndex] && pBorderWidths[nIndex] )
{
table::BorderLine2 aBorderLine;
pBorders[nIndex]->maValue >>= aBorderLine;
table::BorderLine2 aBorderLineWidth;
pBorderWidths[nIndex]->maValue >>= aBorderLineWidth;
aBorderLine.OuterLineWidth = aBorderLineWidth.OuterLineWidth;
aBorderLine.InnerLineWidth = aBorderLineWidth.InnerLineWidth;
aBorderLine.LineDistance = aBorderLineWidth.LineDistance;
aBorderLine.LineWidth = aBorderLineWidth.LineWidth;
pBorders[nIndex]->maValue <<= aBorderLine;
}
}
}
void XMLTextImportPropertyMapper::finished(
::std::vector< XMLPropertyState >& rProperties,
sal_Int32 /*nStartIndex*/, sal_Int32 /*nEndIndex*/ ) const
......@@ -311,6 +373,14 @@ void XMLTextImportPropertyMapper::finished(
XMLPropertyState* pNewBorders[4] = { 0, 0, 0, 0 };
XMLPropertyState* pAllBorderWidth = 0;
XMLPropertyState* pBorderWidths[4] = { 0, 0, 0, 0 };
XMLPropertyState* pCharAllBorderDistance = 0;
XMLPropertyState* pCharBorderDistances[4] = { 0, 0, 0, 0 };
XMLPropertyState* pCharNewBorderDistances[4] = { 0, 0, 0, 0 };
XMLPropertyState* pCharAllBorder = 0;
XMLPropertyState* pCharBorders[4] = { 0, 0, 0, 0 };
XMLPropertyState* pCharNewBorders[4] = { 0, 0, 0, 0 };
XMLPropertyState* pCharAllBorderWidth = 0;
XMLPropertyState* pCharBorderWidths[4] = { 0, 0, 0, 0 };
XMLPropertyState* pVertOrient = 0;
XMLPropertyState* pVertOrientRelAsChar = 0;
XMLPropertyState* pBackTransparency = NULL; // transparency in %
......@@ -364,12 +434,28 @@ void XMLTextImportPropertyMapper::finished(
case CTF_RIGHTBORDER: pBorders[XML_LINE_RIGHT] = property; break;
case CTF_TOPBORDER: pBorders[XML_LINE_TOP] = property; break;
case CTF_BOTTOMBORDER: pBorders[XML_LINE_BOTTOM] = property; break;
case CTF_ALLBORDERWIDTH: pAllBorderWidth = property; break;
case CTF_LEFTBORDERWIDTH: pBorderWidths[XML_LINE_LEFT] = property; break;
case CTF_RIGHTBORDERWIDTH: pBorderWidths[XML_LINE_RIGHT] = property; break;
case CTF_TOPBORDERWIDTH: pBorderWidths[XML_LINE_TOP] = property; break;
case CTF_BOTTOMBORDERWIDTH: pBorderWidths[XML_LINE_BOTTOM] = property; break;
case CTF_CHARALLBORDERDISTANCE: pCharAllBorderDistance = property; break;
case CTF_CHARLEFTBORDERDISTANCE: pCharBorderDistances[XML_LINE_LEFT] = property; break;
case CTF_CHARRIGHTBORDERDISTANCE: pCharBorderDistances[XML_LINE_RIGHT] = property; break;
case CTF_CHARTOPBORDERDISTANCE: pCharBorderDistances[XML_LINE_TOP] = property; break;
case CTF_CHARBOTTOMBORDERDISTANCE: pCharBorderDistances[XML_LINE_BOTTOM] = property; break;
case CTF_CHARALLBORDER: pCharAllBorder = property; break;
case CTF_CHARLEFTBORDER: pCharBorders[XML_LINE_LEFT] = property; break;
case CTF_CHARRIGHTBORDER: pCharBorders[XML_LINE_RIGHT] = property; break;
case CTF_CHARTOPBORDER: pCharBorders[XML_LINE_TOP] = property; break;
case CTF_CHARBOTTOMBORDER: pCharBorders[XML_LINE_BOTTOM] = property; break;
case CTF_CHARALLBORDERWIDTH: pCharAllBorderWidth = property; break;
case CTF_CHARLEFTBORDERWIDTH: pCharBorderWidths[XML_LINE_LEFT] = property; break;
case CTF_CHARRIGHTBORDERWIDTH: pCharBorderWidths[XML_LINE_RIGHT] = property; break;
case CTF_CHARTOPBORDERWIDTH: pCharBorderWidths[XML_LINE_TOP] = property; break;
case CTF_CHARBOTTOMBORDERWIDTH: pCharBorderWidths[XML_LINE_BOTTOM] = property; break;
case CTF_ANCHORTYPE: break;
case CTF_VERTICALPOS: pVertOrient = property; break;
case CTF_VERTICALREL_ASCHAR: pVertOrientRelAsChar = property; break;
......@@ -459,52 +545,24 @@ void XMLTextImportPropertyMapper::finished(
pNewMargins[i].reset(new XMLPropertyState(
pAllMargin->mnIndex + i + 1, pAllMargin->maValue));
}
if( pAllBorderDistance && !pBorderDistances[i] )
{
lcl_SeparateBorder(
i, pAllBorderDistance, pBorderDistances, pNewBorderDistances,
pAllBorder, pBorders, pNewBorders,
pAllBorderWidth, pBorderWidths
#ifdef DBG_UTIL
sal_Int16 nTmp = getPropertySetMapper()->GetEntryContextId(
pAllBorderDistance->mnIndex + i + 1 );
DBG_ASSERT( nTmp >= CTF_LEFTBORDERDISTANCE &&
nTmp <= CTF_BOTTOMBORDERDISTANCE,
"wrong property context id" );
, getPropertySetMapper()
#endif
pNewBorderDistances[i] =
new XMLPropertyState( pAllBorderDistance->mnIndex + i + 1,
pAllBorderDistance->maValue );
pBorderDistances[i] = pNewBorderDistances[i];
}
if( pAllBorder && !pBorders[i] )
{
);
lcl_SeparateBorder(
i, pCharAllBorderDistance, pCharBorderDistances,
pCharNewBorderDistances, pCharAllBorder, pCharBorders,
pCharNewBorders, pCharAllBorderWidth, pCharBorderWidths
#ifdef DBG_UTIL
sal_Int16 nTmp = getPropertySetMapper()->GetEntryContextId(
pAllBorder->mnIndex + i + 1 );
DBG_ASSERT( nTmp >= CTF_LEFTBORDER && nTmp <= CTF_BOTTOMBORDER,
"wrong property context id" );
, getPropertySetMapper()
#endif
pNewBorders[i] = new XMLPropertyState( pAllBorder->mnIndex + i + 1,
pAllBorder->maValue );
pBorders[i] = pNewBorders[i];
}
if( !pBorderWidths[i] )
pBorderWidths[i] = pAllBorderWidth;
else
pBorderWidths[i]->mnIndex = -1;
if( pBorders[i] && pBorderWidths[i] )
{
table::BorderLine2 aBorderLine;
pBorders[i]->maValue >>= aBorderLine;
table::BorderLine2 aBorderLineWidth;
pBorderWidths[i]->maValue >>= aBorderLineWidth;
aBorderLine.OuterLineWidth = aBorderLineWidth.OuterLineWidth;
aBorderLine.InnerLineWidth = aBorderLineWidth.InnerLineWidth;
aBorderLine.LineDistance = aBorderLineWidth.LineDistance;
aBorderLine.LineWidth = aBorderLineWidth.LineWidth;
pBorders[i]->maValue <<= aBorderLine;
}
);
}
if (pAllParaMargin)
......@@ -525,6 +583,15 @@ void XMLTextImportPropertyMapper::finished(
if( pAllBorderWidth )
pAllBorderWidth->mnIndex = -1;
if( pCharAllBorderDistance )
pCharAllBorderDistance->mnIndex = -1;
if( pCharAllBorder )
pCharAllBorder->mnIndex = -1;
if( pCharAllBorderWidth )
pCharAllBorderWidth->mnIndex = -1;
if( pVertOrient && pVertOrientRelAsChar )
{
sal_Int16 nVertOrient;
......@@ -679,6 +746,16 @@ void XMLTextImportPropertyMapper::finished(
rProperties.push_back( *pNewBorders[i] );
delete pNewBorders[i];
}
if( pCharNewBorderDistances[i] )
{
rProperties.push_back( *pCharNewBorderDistances[i] );
delete pCharNewBorderDistances[i];
}
if( pCharNewBorders[i] )
{
rProperties.push_back( *pCharNewBorders[i] );
delete pCharNewBorders[i];
}
}
if( bHasAnyHeight )
......
......@@ -44,6 +44,8 @@ using namespace ::xmloff::token;
_M_E( a, p, l, (t|XML_TYPE_PROP_TEXT), c )
#define MT_ED( a, p, l, t, c ) \
_M_ED( a, p, l, (t|XML_TYPE_PROP_TEXT), c )
#define MT_EV( a, p, l, t, c, v ) \
_M_EV( a, p, l, (t|XML_TYPE_PROP_TEXT), c, v )
// paragraph properties
#define MP_E( a, p, l, t, c ) \
......@@ -218,7 +220,24 @@ XMLPropertyMapEntry aXMLParaPropMap[] =
MT_E( "CharOverline", STYLE, TEXT_OVERLINE_WIDTH, XML_TYPE_TEXT_OVERLINE_WIDTH|MID_FLAG_MERGE_PROPERTY, 0 ),
MT_E( "CharOverlineColor", STYLE, TEXT_OVERLINE_COLOR, XML_TYPE_TEXT_OVERLINE_COLOR|MID_FLAG_MULTI_PROPERTY, 0 ),
MT_E( "CharOverlineHasColor", STYLE, TEXT_OVERLINE_COLOR, XML_TYPE_TEXT_OVERLINE_HASCOLOR|MID_FLAG_MERGE_ATTRIBUTE, 0 ),
// RES_CHRATR_BOX
MT_EV( "CharLeftBorder", STYLE, BORDER_LINE_WIDTH, XML_TYPE_BORDER_WIDTH, CTF_CHARALLBORDERWIDTH, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharLeftBorder", STYLE, BORDER_LINE_WIDTH_LEFT, XML_TYPE_BORDER_WIDTH, CTF_CHARLEFTBORDERWIDTH, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharRightBorder", STYLE, BORDER_LINE_WIDTH_RIGHT, XML_TYPE_BORDER_WIDTH, CTF_CHARRIGHTBORDERWIDTH, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharTopBorder", STYLE, BORDER_LINE_WIDTH_TOP, XML_TYPE_BORDER_WIDTH, CTF_CHARTOPBORDERWIDTH, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharBottomBorder", STYLE, BORDER_LINE_WIDTH_BOTTOM, XML_TYPE_BORDER_WIDTH, CTF_CHARBOTTOMBORDERWIDTH, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharLeftBorderDistance", FO, PADDING, XML_TYPE_MEASURE, CTF_CHARALLBORDERDISTANCE, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharLeftBorderDistance", FO, PADDING_LEFT, XML_TYPE_MEASURE, CTF_CHARLEFTBORDERDISTANCE, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharRightBorderDistance", FO, PADDING_RIGHT, XML_TYPE_MEASURE, CTF_CHARRIGHTBORDERDISTANCE, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharTopBorderDistance", FO, PADDING_TOP, XML_TYPE_MEASURE, CTF_CHARTOPBORDERDISTANCE, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharBottomBorderDistance",FO, PADDING_BOTTOM, XML_TYPE_MEASURE, CTF_CHARBOTTOMBORDERDISTANCE, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharLeftBorder", FO, BORDER, XML_TYPE_BORDER, CTF_CHARALLBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharLeftBorder", FO, BORDER_LEFT, XML_TYPE_BORDER, CTF_CHARLEFTBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharRightBorder", FO, BORDER_RIGHT, XML_TYPE_BORDER, CTF_CHARRIGHTBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharTopBorder", FO, BORDER_TOP, XML_TYPE_BORDER, CTF_CHARTOPBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharBottomBorder", FO, BORDER_BOTTOM, XML_TYPE_BORDER, CTF_CHARBOTTOMBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
// RES_TXTATR_INETFMT
// TODO
// RES_TXTATR_REFMARK
......@@ -525,7 +544,24 @@ XMLPropertyMapEntry aXMLTextPropMap[] =
MT_E( "CharOverline", STYLE, TEXT_OVERLINE_WIDTH, XML_TYPE_TEXT_OVERLINE_WIDTH|MID_FLAG_MERGE_PROPERTY, 0 ),
MT_E( "CharOverlineColor", STYLE, TEXT_OVERLINE_COLOR, XML_TYPE_TEXT_OVERLINE_COLOR|MID_FLAG_MULTI_PROPERTY, 0 ),
MT_E( "CharOverlineHasColor", STYLE, TEXT_OVERLINE_COLOR, XML_TYPE_TEXT_OVERLINE_HASCOLOR|MID_FLAG_MERGE_ATTRIBUTE, 0 ),
// RES_CHRATR_BOX
MT_EV( "CharLeftBorder", STYLE, BORDER_LINE_WIDTH, XML_TYPE_BORDER_WIDTH, CTF_CHARALLBORDERWIDTH, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharLeftBorder", STYLE, BORDER_LINE_WIDTH_LEFT, XML_TYPE_BORDER_WIDTH, CTF_CHARLEFTBORDERWIDTH, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharRightBorder", STYLE, BORDER_LINE_WIDTH_RIGHT, XML_TYPE_BORDER_WIDTH, CTF_CHARRIGHTBORDERWIDTH, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharTopBorder", STYLE, BORDER_LINE_WIDTH_TOP, XML_TYPE_BORDER_WIDTH, CTF_CHARTOPBORDERWIDTH, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharBottomBorder", STYLE, BORDER_LINE_WIDTH_BOTTOM, XML_TYPE_BORDER_WIDTH, CTF_CHARBOTTOMBORDERWIDTH, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharLeftBorderDistance", FO, PADDING, XML_TYPE_MEASURE, CTF_CHARALLBORDERDISTANCE, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharLeftBorderDistance", FO, PADDING_LEFT, XML_TYPE_MEASURE, CTF_CHARLEFTBORDERDISTANCE, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharRightBorderDistance", FO, PADDING_RIGHT, XML_TYPE_MEASURE, CTF_CHARRIGHTBORDERDISTANCE, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharTopBorderDistance", FO, PADDING_TOP, XML_TYPE_MEASURE, CTF_CHARTOPBORDERDISTANCE, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharBottomBorderDistance",FO, PADDING_BOTTOM, XML_TYPE_MEASURE, CTF_CHARBOTTOMBORDERDISTANCE, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharLeftBorder", FO, BORDER, XML_TYPE_BORDER, CTF_CHARALLBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharLeftBorder", FO, BORDER_LEFT, XML_TYPE_BORDER, CTF_CHARLEFTBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharRightBorder", FO, BORDER_RIGHT, XML_TYPE_BORDER, CTF_CHARRIGHTBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharTopBorder", FO, BORDER_TOP, XML_TYPE_BORDER, CTF_CHARTOPBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharBottomBorder", FO, BORDER_BOTTOM, XML_TYPE_BORDER, CTF_CHARBOTTOMBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
// RES_TXTATR_INETFMT
MT_E( "HyperLinkURL", TEXT, XMLNS, XML_TYPE_STRING|MID_FLAG_NO_PROPERTY_IMPORT, CTF_HYPERLINK_URL ),
// RES_TXTATR_REFMARK
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment