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));