[Libreoffice-commits] core.git: svgio/inc svgio/source

Xisco Fauli anistenis at gmail.com
Wed Jan 20 05:11:11 PST 2016


 svgio/inc/svgio/svgreader/svgstyleattributes.hxx |   23 +++-
 svgio/source/svgreader/svgcharacternode.cxx      |    4 
 svgio/source/svgreader/svgnode.cxx               |    4 
 svgio/source/svgreader/svgstyleattributes.cxx    |  129 ++++++++++++++++++++---
 4 files changed, 140 insertions(+), 20 deletions(-)

New commits:
commit 406cdc29039e5e65bacfcd635de8022642d63547
Author: Xisco Fauli <anistenis at gmail.com>
Date:   Sun Jan 17 19:17:46 2016 +0100

    SVGIO: Add support to font-size keywords
    
    Similar to 0cae9c32ce9884a9809e220ba80b7c4cb4059565
    
    Change-Id: Iac7a6bb30b36e51ea67a6c4f7b3421f480eeea57
    Reviewed-on: https://gerrit.libreoffice.org/21542
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Armin Le Grand <Armin.Le.Grand at cib.de>

diff --git a/svgio/inc/svgio/svgreader/svgstyleattributes.hxx b/svgio/inc/svgio/svgreader/svgstyleattributes.hxx
index c227986..02cf55d 100644
--- a/svgio/inc/svgio/svgreader/svgstyleattributes.hxx
+++ b/svgio/inc/svgio/svgreader/svgstyleattributes.hxx
@@ -56,6 +56,21 @@ namespace svgio
             StrokeLinejoin_bevel
         };
 
+        enum FontSize
+        {
+            FontSize_notset,
+            FontSize_xx_small,
+            FontSize_x_small,
+            FontSize_small,
+            FontSize_smaller,
+            FontSize_medium,
+            FontSize_large,
+            FontSize_larger,
+            FontSize_x_large,
+            FontSize_xx_large,
+            FontSize_initial
+        };
+
         enum FontStretch
         {
             FontStretch_notset,
@@ -183,7 +198,8 @@ namespace svgio
             SvgNumber                   maStrokeMiterLimit;
             SvgNumber                   maStrokeOpacity;
             SvgStringVector             maFontFamily;
-            SvgNumber                   maFontSize;
+            FontSize                    maFontSize;
+            SvgNumber                   maFontSizeNumber;
             FontStretch                 maFontStretch;
             FontStyle                   maFontStyle;
             FontVariant                 maFontVariant;
@@ -369,8 +385,9 @@ namespace svgio
             void setFontFamily(const SvgStringVector& rSvgStringVector = SvgStringVector()) { maFontFamily = rSvgStringVector; }
 
             /// FontSize content
-            SvgNumber getFontSize() const;
-            void setFontSize(const SvgNumber& rFontSize = SvgNumber()) { maFontSize = rFontSize; }
+            void setFontSize(const FontSize aFontSize = FontSize_notset) { maFontSize = aFontSize; }
+            void setFontSizeNumber(const SvgNumber& rFontSize = SvgNumber()) { maFontSizeNumber = rFontSize; }
+            SvgNumber getFontSizeNumber() const;
 
             /// FontStretch content
             FontStretch getFontStretch() const;
diff --git a/svgio/source/svgreader/svgcharacternode.cxx b/svgio/source/svgreader/svgcharacternode.cxx
index 9cc4c23..e5bc0a5 100644
--- a/svgio/source/svgreader/svgcharacternode.cxx
+++ b/svgio/source/svgreader/svgcharacternode.cxx
@@ -272,8 +272,8 @@ namespace svgio
                     bRTL,
                     bBiDiStrong);
 
-                // prepare FontSize
-                double fFontWidth(rSvgStyleAttributes.getFontSize().solve(*this));
+                // prepare FontSizeNumber
+                double fFontWidth(rSvgStyleAttributes.getFontSizeNumber().solve(*this));
                 double fFontHeight(fFontWidth);
 
                 // prepare locale
diff --git a/svgio/source/svgreader/svgnode.cxx b/svgio/source/svgreader/svgnode.cxx
index 4e90d51..b1de51d 100644
--- a/svgio/source/svgreader/svgnode.cxx
+++ b/svgio/source/svgreader/svgnode.cxx
@@ -624,7 +624,7 @@ namespace svgio
         double SvgNode::getCurrentFontSize() const
         {
             if(getSvgStyleAttributes())
-                return getSvgStyleAttributes()->getFontSize().solve(*this, xcoordinate);
+                return getSvgStyleAttributes()->getFontSizeNumber().solve(*this, xcoordinate);
 
             return getCurrentFontSizeInherited();
         }
@@ -645,7 +645,7 @@ namespace svgio
         {
             if(getSvgStyleAttributes())
                 // for XHeight, use FontSize currently
-                return getSvgStyleAttributes()->getFontSize().solve(*this, ycoordinate);
+                return getSvgStyleAttributes()->getFontSizeNumber().solve(*this, ycoordinate);
 
             return getCurrentXHeightInherited();
         }
diff --git a/svgio/source/svgreader/svgstyleattributes.cxx b/svgio/source/svgreader/svgstyleattributes.cxx
index 1c93bd9..171545d 100644
--- a/svgio/source/svgreader/svgstyleattributes.cxx
+++ b/svgio/source/svgreader/svgstyleattributes.cxx
@@ -1201,6 +1201,7 @@ namespace svgio
             maStrokeOpacity(),
             maFontFamily(),
             maFontSize(),
+            maFontSizeNumber(),
             maFontStretch(FontStretch_notset),
             maFontStyle(FontStyle_notset),
             maFontVariant(FontVariant_notset),
@@ -1484,11 +1485,57 @@ namespace svgio
                 }
                 case SVGTokenFontSize:
                 {
-                    SvgNumber aNum;
-
-                    if(readSingleNumber(aContent, aNum))
+                    if(!aContent.isEmpty())
                     {
-                        setFontSize(aNum);
+                        if(aContent.startsWith("xx-small"))
+                        {
+                            setFontSize(FontSize_xx_small);
+                        }
+                        else if(aContent.startsWith("x-small"))
+                        {
+                            setFontSize(FontSize_x_small);
+                        }
+                        else if(aContent.startsWith("small"))
+                        {
+                            setFontSize(FontSize_small);
+                        }
+                        else if(aContent.startsWith("smaller"))
+                        {
+                            setFontSize(FontSize_smaller);
+                        }
+                        else if(aContent.startsWith("medium"))
+                        {
+                            setFontSize(FontSize_medium);
+                        }
+                        else if(aContent.startsWith("larger"))
+                        {
+                            setFontSize(FontSize_larger);
+                        }
+                        else if(aContent.startsWith("large"))
+                        {
+                            setFontSize(FontSize_large);
+                        }
+                        else if(aContent.startsWith("x-large"))
+                        {
+                            setFontSize(FontSize_x_large);
+                        }
+                        else if(aContent.startsWith("xx-large"))
+                        {
+                            setFontSize(FontSize_xx_large);
+                        }
+                        else if(aContent.startsWith("initial"))
+                        {
+                            setFontSize(FontSize_initial);
+                        }
+                        else
+                        {
+                            SvgNumber aNum;
+
+                            if(readSingleNumber(aContent, aNum))
+                            {
+                                setFontSizeNumber(aNum);
+                            }
+                        }
                     }
                     break;
                 }
@@ -2265,40 +2312,96 @@ namespace svgio
             return maFontFamily;
         }
 
-        SvgNumber SvgStyleAttributes::getFontSize() const
+        SvgNumber SvgStyleAttributes::getFontSizeNumber() const
         {
-            if(maFontSize.isSet())
+            if(maFontSizeNumber.isSet())
             {
                 // #122524# Handle Unit_percent realtive to parent FontSize (see SVG1.1
                 // spec 10.10 Font selection properties \91font-size\92, lastline (click 'normative
                 // definition of the property')
-                if(Unit_percent == maFontSize.getUnit())
+                if(Unit_percent == maFontSizeNumber.getUnit())
                 {
                     const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
 
                     if(pSvgStyleAttributes)
                     {
-                        const SvgNumber aParentNumber = pSvgStyleAttributes->getFontSize();
+                        const SvgNumber aParentNumber = pSvgStyleAttributes->getFontSizeNumber();
 
                         return SvgNumber(
-                            aParentNumber.getNumber() * maFontSize.getNumber() * 0.01,
+                            aParentNumber.getNumber() * maFontSizeNumber.getNumber() * 0.01,
                             aParentNumber.getUnit(),
                             true);
                     }
                 }
 
-                return maFontSize;
+                return maFontSizeNumber;
+            }
+
+            // default is 'medium'
+            const double aDefaultSize = 12.0;
+
+            //In CSS2, the suggested scaling factor between adjacent indexes is 1.2
+            switch(maFontSize)
+            {
+                case FontSize_notset:
+                    break;
+                case FontSize_xx_small:
+                {
+                    return SvgNumber(aDefaultSize / 1.728);
+                }
+                case FontSize_x_small:
+                {
+                    return SvgNumber(aDefaultSize / 1.44);
+                }
+                case FontSize_small:
+                {
+                    return SvgNumber(aDefaultSize / 1.2);
+                }
+                case FontSize_smaller:
+                {
+                    const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
+                    if(pSvgStyleAttributes)
+                    {
+                        const SvgNumber aParentNumber = pSvgStyleAttributes->getFontSizeNumber();
+                        return SvgNumber(aParentNumber.getNumber() / 1.2, aParentNumber.getUnit());
+                    }
+                }
+                case FontSize_medium:
+                case FontSize_initial:
+                {
+                    return SvgNumber(aDefaultSize);
+                }
+                case FontSize_large:
+                {
+                    return SvgNumber(aDefaultSize * 1.2);
+                }
+                case FontSize_larger:
+                {
+                    const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
+                    if(pSvgStyleAttributes)
+                    {
+                        const SvgNumber aParentNumber = pSvgStyleAttributes->getFontSizeNumber();
+                        return SvgNumber(aParentNumber.getNumber() * 1.2, aParentNumber.getUnit());
+                    }
+                }
+                case FontSize_x_large:
+                {
+                    return SvgNumber(aDefaultSize * 1.44);
+                }
+                case FontSize_xx_large:
+                {
+                    return SvgNumber(aDefaultSize * 1.728);
+                }
             }
 
             const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
 
             if(pSvgStyleAttributes)
             {
-                return pSvgStyleAttributes->getFontSize();
+                return pSvgStyleAttributes->getFontSizeNumber();
             }
 
-            // default is 'medium'
-            return SvgNumber(12.0);
+            return SvgNumber(aDefaultSize);
         }
 
         FontStretch SvgStyleAttributes::getFontStretch() const


More information about the Libreoffice-commits mailing list