You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2013/06/18 11:44:13 UTC
svn commit: r1494084 - in /openoffice/trunk/main/svgio: inc/svgio/svgreader/
source/svgreader/
Author: alg
Date: Tue Jun 18 09:44:12 2013
New Revision: 1494084
URL: http://svn.apache.org/r1494084
Log:
i122524 fixed/added some text import aspects for super/sub-baseline
Modified:
openoffice/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx
openoffice/trunk/main/svgio/inc/svgio/svgreader/svgtoken.hxx
openoffice/trunk/main/svgio/source/svgreader/svgcharacternode.cxx
openoffice/trunk/main/svgio/source/svgreader/svgdocumenthandler.cxx
openoffice/trunk/main/svgio/source/svgreader/svgnode.cxx
openoffice/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx
openoffice/trunk/main/svgio/source/svgreader/svgtoken.cxx
Modified: openoffice/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx?rev=1494084&r1=1494083&r2=1494084&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx (original)
+++ openoffice/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx Tue Jun 18 09:44:12 2013
@@ -146,6 +146,15 @@ namespace svgio
FillRule_evenodd
};
+ enum BaselineShift
+ {
+ BaselineShift_Baseline,
+ BaselineShift_Sub,
+ BaselineShift_Super,
+ BaselineShift_Percentage,
+ BaselineShift_Length
+ };
+
class SvgStyleAttributes
{
private:
@@ -199,6 +208,10 @@ namespace svgio
// ClipRule setting (only valid wne mbIsClipPathContent == true, default is FillRule_nonzero)
FillRule maClipRule;
+ // BaselineShift: Type and number (in case of BaselineShift_Percentage or BaselineShift_Length)
+ BaselineShift maBaselineShift;
+ SvgNumber maBaselineShiftNumber;
+
/// bitfield
// defines if this attributes are part of a ClipPath. If yes,
@@ -425,6 +438,11 @@ namespace svgio
const SvgMarkerNode* accessMarkerEndXLink() const;
void setMarkerEndXLink(const rtl::OUString& rNew) { maMarkerEndXLink = rNew; }
+ // BaselineShift
+ void setBaselineShift(const BaselineShift aBaselineShift = BaselineShift_Baseline) { maBaselineShift = aBaselineShift; }
+ BaselineShift getBaselineShift() const { return maBaselineShift; }
+ void setBaselineShiftNumber(const SvgNumber& rBaselineShift = SvgNumber()) { maBaselineShiftNumber = rBaselineShift; }
+ SvgNumber getBaselineShiftNumber() const;
};
} // end of namespace svgreader
} // end of namespace svgio
Modified: openoffice/trunk/main/svgio/inc/svgio/svgreader/svgtoken.hxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/inc/svgio/svgreader/svgtoken.hxx?rev=1494084&r1=1494083&r2=1494084&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/inc/svgio/svgreader/svgtoken.hxx (original)
+++ openoffice/trunk/main/svgio/inc/svgio/svgreader/svgtoken.hxx Tue Jun 18 09:44:12 2013
@@ -181,6 +181,7 @@ namespace svgio
// text tokens
SVGTokenText,
+ SVGTokenBaselineShift,
SVGTokenLast
};
Modified: openoffice/trunk/main/svgio/source/svgreader/svgcharacternode.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/source/svgreader/svgcharacternode.cxx?rev=1494084&r1=1494083&r2=1494084&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/source/svgreader/svgcharacternode.cxx (original)
+++ openoffice/trunk/main/svgio/source/svgreader/svgcharacternode.cxx Tue Jun 18 09:44:12 2013
@@ -408,6 +408,38 @@ namespace svgio
}
}
+ // get BaselineShift
+ const BaselineShift aBaselineShift(rSvgStyleAttributes.getBaselineShift());
+
+ // apply BaselineShift
+ switch(aBaselineShift)
+ {
+ case BaselineShift_Sub:
+ {
+ aPosition.setY(aPosition.getY() + aTextLayouterDevice.getUnderlineOffset());
+ break;
+ }
+ case BaselineShift_Super:
+ {
+ aPosition.setY(aPosition.getY() + aTextLayouterDevice.getOverlineOffset());
+ break;
+ }
+ case BaselineShift_Percentage:
+ case BaselineShift_Length:
+ {
+ const SvgNumber aNumber(rSvgStyleAttributes.getBaselineShiftNumber());
+ const double mfBaselineShift(aNumber.solve(*this, length));
+
+ aPosition.setY(aPosition.getY() + mfBaselineShift);
+ break;
+ }
+ default: // BaselineShift_Baseline
+ {
+ // nothing to do
+ break;
+ }
+ }
+
// get fill color
const basegfx::BColor aFill(rSvgStyleAttributes.getFill()
? *rSvgStyleAttributes.getFill()
Modified: openoffice/trunk/main/svgio/source/svgreader/svgdocumenthandler.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/source/svgreader/svgdocumenthandler.cxx?rev=1494084&r1=1494083&r2=1494084&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/source/svgreader/svgdocumenthandler.cxx (original)
+++ openoffice/trunk/main/svgio/source/svgreader/svgdocumenthandler.cxx Tue Jun 18 09:44:12 2013
@@ -86,9 +86,29 @@ namespace
{
if(pLast)
{
+ bool bAddGap(true);
+ static bool bNoGapsForBaselineShift(true);
+
+ if(bNoGapsForBaselineShift)
+ {
+ // With this option a baseline shift between two char parts ('words')
+ // will not add a space 'gap' to the end of the (non-last) word. This
+ // seems to be the standard behaviour, see last bugdoc attached #122524#
+ const svgio::svgreader::SvgStyleAttributes* pStyleLast = pLast->getSvgStyleAttributes();
+ const svgio::svgreader::SvgStyleAttributes* pStyleCurrent = pCandidate->getSvgStyleAttributes();
+
+ if(pStyleLast && pStyleCurrent && pStyleLast->getBaselineShift() != pStyleCurrent->getBaselineShift())
+ {
+ bAddGap = false;
+ }
+ }
+
// add in-between whitespace (single space) to last
// known character node
- pLast->addGap();
+ if(bAddGap)
+ {
+ pLast->addGap();
+ }
}
// remember new last corected character node
Modified: openoffice/trunk/main/svgio/source/svgreader/svgnode.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/source/svgreader/svgnode.cxx?rev=1494084&r1=1494083&r2=1494084&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/source/svgreader/svgnode.cxx (original)
+++ openoffice/trunk/main/svgio/source/svgreader/svgnode.cxx Tue Jun 18 09:44:12 2013
@@ -210,7 +210,7 @@ namespace svgio
}
else
{
- parseAttribute(aTokenName, StrToSVGToken(aTokenName), xAttribs->getValueByIndex(a));
+ parseAttribute(aTokenName, aSVGToken, xAttribs->getValueByIndex(a));
}
}
Modified: openoffice/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx?rev=1494084&r1=1494083&r2=1494084&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx (original)
+++ openoffice/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx Tue Jun 18 09:44:12 2013
@@ -1169,6 +1169,8 @@ namespace svgio
mpMarkerEndXLink(0),
maFillRule(FillRule_notset),
maClipRule(FillRule_nonzero),
+ maBaselineShift(BaselineShift_Baseline),
+ maBaselineShiftNumber(0),
mbIsClipPathContent(SVGTokenClipPathNode == mrOwner.getType()),
mbStrokeDasharraySet(false)
{
@@ -1803,6 +1805,43 @@ namespace svgio
}
break;
}
+ case SVGTokenBaselineShift:
+ {
+ if(aContent.getLength())
+ {
+ static rtl::OUString aStrSub(rtl::OUString::createFromAscii("sub"));
+ static rtl::OUString aStrSuper(rtl::OUString::createFromAscii("super"));
+ SvgNumber aNum;
+
+ if(aContent.match(aStrSub))
+ {
+ setBaselineShift(BaselineShift_Sub);
+ }
+ else if(aContent.match(aStrSuper))
+ {
+ setBaselineShift(BaselineShift_Super);
+ }
+ else if(readSingleNumber(aContent, aNum))
+ {
+ setBaselineShiftNumber(aNum);
+
+ if(Unit_percent == aNum.getUnit())
+ {
+ setBaselineShift(BaselineShift_Percentage);
+ }
+ else
+ {
+ setBaselineShift(BaselineShift_Length);
+ }
+ }
+ else
+ {
+ // no BaselineShift or inherit (which is automatically)
+ setBaselineShift(BaselineShift_Baseline);
+ }
+ }
+ break;
+ }
default:
{
break;
@@ -2184,6 +2223,24 @@ namespace svgio
{
if(maFontSize.isSet())
{
+ // #122524# Handle Unit_percent realtive to parent FontSize (see SVG1.1
+ // spec 10.10 Font selection properties font-size, lastline (klick 'normative
+ // definition of the property')
+ if(Unit_percent == maFontSize.getUnit())
+ {
+ const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
+
+ if(pSvgStyleAttributes)
+ {
+ const SvgNumber aParentNumber = pSvgStyleAttributes->getFontSize();
+
+ return SvgNumber(
+ aParentNumber.getNumber() * maFontSize.getNumber() * 0.01,
+ aParentNumber.getUnit(),
+ true);
+ }
+ }
+
return maFontSize;
}
@@ -2472,6 +2529,26 @@ namespace svgio
return mpMarkerEndXLink;
}
+ SvgNumber SvgStyleAttributes::getBaselineShiftNumber() const
+ {
+ // #122524# Handle Unit_percent realtive to parent BaselineShift
+ if(Unit_percent == maBaselineShiftNumber.getUnit())
+ {
+ const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
+
+ if(pSvgStyleAttributes)
+ {
+ const SvgNumber aParentNumber = pSvgStyleAttributes->getBaselineShiftNumber();
+
+ return SvgNumber(
+ aParentNumber.getNumber() * maBaselineShiftNumber.getNumber() * 0.01,
+ aParentNumber.getUnit(),
+ true);
+ }
+ }
+
+ return maBaselineShiftNumber;
+ }
} // end of namespace svgreader
} // end of namespace svgio
Modified: openoffice/trunk/main/svgio/source/svgreader/svgtoken.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/source/svgreader/svgtoken.cxx?rev=1494084&r1=1494083&r2=1494084&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/source/svgreader/svgtoken.cxx (original)
+++ openoffice/trunk/main/svgio/source/svgreader/svgtoken.cxx Tue Jun 18 09:44:12 2013
@@ -165,6 +165,7 @@ namespace svgio
static rtl::OUString aSVGStrStrokeWidth(rtl::OUString::createFromAscii("stroke-width"));
static rtl::OUString aSVGStrText(rtl::OUString::createFromAscii("text"));
+ static rtl::OUString aSVGStrBaselineShift(rtl::OUString::createFromAscii("baseline-shift"));
SVGToken StrToSVGToken(const rtl::OUString& rStr)
{
@@ -307,6 +308,7 @@ namespace svgio
aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrStrokeWidth, SVGTokenStrokeWidth));
aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrText, SVGTokenText));
+ aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrBaselineShift, SVGTokenBaselineShift));
}
const SVGTokenMapper::const_iterator aResult(aSVGTokenMapperList.find(rStr));