[Libreoffice-commits] libvisio.git: src/lib

Fridrich Štrba fridrich.strba at bluewin.ch
Mon Jan 18 03:27:17 PST 2016


 src/lib/VSD5Parser.cpp          |    9 +++++----
 src/lib/VSD6Parser.cpp          |    9 +++++----
 src/lib/VSDCharacterList.cpp    |   16 ++++++++--------
 src/lib/VSDCharacterList.h      |    2 +-
 src/lib/VSDCollector.h          |    7 ++++---
 src/lib/VSDContentCollector.cpp |   21 ++++++++++++---------
 src/lib/VSDContentCollector.h   |    7 ++++---
 src/lib/VSDParser.cpp           |   11 ++++++-----
 src/lib/VSDStyles.h             |   20 ++++++++++++--------
 src/lib/VSDStylesCollector.cpp  |    6 +++---
 src/lib/VSDStylesCollector.h    |    7 ++++---
 src/lib/VSDXMLParserBase.cpp    |   11 +++++++----
 12 files changed, 71 insertions(+), 55 deletions(-)

New commits:
commit e076cd1b5a400b32a8aa49fc87feaf3b1d3ba52e
Author: Fridrich Štrba <fridrich.strba at bluewin.ch>
Date:   Mon Jan 18 12:26:52 2016 +0100

    Read and use the information about scaling of the width of font
    
    Change-Id: Ica723149a7165577323a7eb6a258cd8bd79026b3

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 31cc1c0..7900fa5 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -296,7 +296,8 @@ void libvisio::VSD5Parser::readCharIX(librevenge::RVNGInputStream *input)
   if (fontMod & 1) superscript = true;
   if (fontMod & 2) subscript = true;
 
-  input->seek(4, librevenge::RVNG_SEEK_CUR);
+  double scaleWidth = (double)(readU16(input)) / 10000.0;
+  input->seek(2, librevenge::RVNG_SEEK_CUR);
   double fontSize = readDouble(input);
 
 #if 0
@@ -309,7 +310,7 @@ void libvisio::VSD5Parser::readCharIX(librevenge::RVNGInputStream *input)
   if (m_isInStyles)
     m_collector->collectCharIXStyle(m_header.id, m_header.level, charCount, font, fontColour, fontSize,
                                     bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                    allcaps, initcaps, smallcaps, superscript, subscript);
+                                    allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth);
   else
   {
     if (m_isStencilStarted)
@@ -319,10 +320,10 @@ void libvisio::VSD5Parser::readCharIX(librevenge::RVNGInputStream *input)
 
     m_shape.m_charStyle.override(VSDOptionalCharStyle(charCount, font, fontColour, fontSize,
                                                       bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                                      allcaps, initcaps, smallcaps, superscript, subscript));
+                                                      allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth));
     m_shape.m_charList.addCharIX(m_header.id, m_header.level, charCount, font, fontColour, fontSize,
                                  bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                 allcaps, initcaps, smallcaps, superscript, subscript);
+                                 allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth);
   }
 }
 
diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index d126433..c5d8b79 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -139,7 +139,8 @@ void libvisio::VSD6Parser::readCharIX(librevenge::RVNGInputStream *input)
   if (fontMod & 1) superscript = true;
   if (fontMod & 2) subscript = true;
 
-  input->seek(4, librevenge::RVNG_SEEK_CUR);
+  double scaleWidth = (double)(readU16(input)) / 10000.0;
+  input->seek(2, librevenge::RVNG_SEEK_CUR);
   double fontSize = readDouble(input);
 
   fontMod = readU8(input);
@@ -150,7 +151,7 @@ void libvisio::VSD6Parser::readCharIX(librevenge::RVNGInputStream *input)
   if (m_isInStyles)
     m_collector->collectCharIXStyle(m_header.id, m_header.level, charCount, font, fontColour, fontSize,
                                     bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                    allcaps, initcaps, smallcaps, superscript, subscript);
+                                    allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth);
   else
   {
     if (m_isStencilStarted)
@@ -160,10 +161,10 @@ void libvisio::VSD6Parser::readCharIX(librevenge::RVNGInputStream *input)
 
     m_shape.m_charStyle.override(VSDOptionalCharStyle(charCount, font, fontColour, fontSize,
                                                       bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                                      allcaps, initcaps, smallcaps, superscript, subscript));
+                                                      allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth));
     m_shape.m_charList.addCharIX(m_header.id, m_header.level, charCount, font, fontColour, fontSize,
                                  bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                 allcaps, initcaps, smallcaps, superscript, subscript);
+                                 allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth);
   }
 }
 
diff --git a/src/lib/VSDCharacterList.cpp b/src/lib/VSDCharacterList.cpp
index 74b1049..49b8678 100644
--- a/src/lib/VSDCharacterList.cpp
+++ b/src/lib/VSDCharacterList.cpp
@@ -34,9 +34,9 @@ public:
             const boost::optional<bool> &italic, const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline,
             const boost::optional<bool> &strikeout, const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps,
             const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript,
-            const boost::optional<bool> &subscript) : VSDCharacterListElement(id, level),
+            const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth) : VSDCharacterListElement(id, level),
     m_style(charCount, font, fontColour, fontSize, bold, italic, underline, doubleunderline, strikeout,
-            doublestrikeout, allcaps, initcaps,  smallcaps,  superscript,  subscript) {}
+            doublestrikeout, allcaps, initcaps,  smallcaps,  superscript,  subscript, scaleWidth) {}
   VSDCharIX(unsigned id, unsigned level, const VSDOptionalCharStyle &style) : VSDCharacterListElement(id, level), m_style(style) {}
   ~VSDCharIX() {}
   void handle(VSDCollector *collector) const;
@@ -60,7 +60,7 @@ void libvisio::VSDCharIX::handle(VSDCollector *collector) const
   collector->collectCharIX(m_id, m_level, m_style.charCount, m_style.font, m_style.colour, m_style.size,
                            m_style.bold, m_style.italic, m_style.underline, m_style.doubleunderline, m_style.strikeout,
                            m_style.doublestrikeout, m_style.allcaps, m_style.initcaps, m_style.smallcaps,
-                           m_style.superscript, m_style.subscript);
+                           m_style.superscript, m_style.subscript, m_style.scaleWidth);
 }
 
 libvisio::VSDCharacterListElement *libvisio::VSDCharIX::clone()
@@ -68,7 +68,7 @@ libvisio::VSDCharacterListElement *libvisio::VSDCharIX::clone()
   return new VSDCharIX(m_id, m_level, m_style.charCount, m_style.font, m_style.colour, m_style.size,
                        m_style.bold, m_style.italic, m_style.underline, m_style.doubleunderline, m_style.strikeout,
                        m_style.doublestrikeout, m_style.allcaps, m_style.initcaps, m_style.smallcaps,
-                       m_style.superscript, m_style.subscript);
+                       m_style.superscript, m_style.subscript, m_style.scaleWidth);
 }
 
 
@@ -107,7 +107,7 @@ void libvisio::VSDCharacterList::addCharIX(unsigned id, unsigned level, unsigned
                                            const boost::optional<bool> &bold, const boost::optional<bool> &italic, const boost::optional<bool> &underline,
                                            const boost::optional<bool> &doubleunderline, const boost::optional<bool> &strikeout, const boost::optional<bool> &doublestrikeout,
                                            const boost::optional<bool> &allcaps, const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps,
-                                           const boost::optional<bool> &superscript, const boost::optional<bool> &subscript)
+                                           const boost::optional<bool> &superscript, const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth)
 {
   VSDCharIX *tmpElement = dynamic_cast<VSDCharIX *>(m_elements[id]);
   if (!tmpElement)
@@ -116,18 +116,18 @@ void libvisio::VSDCharacterList::addCharIX(unsigned id, unsigned level, unsigned
       delete m_elements[id];
 
     m_elements[id] = new VSDCharIX(id, level, charCount, font, fontColour, fontSize, bold, italic, underline, doubleunderline,
-                                   strikeout, doublestrikeout, allcaps, initcaps, smallcaps, superscript, subscript);
+                                   strikeout, doublestrikeout, allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth);
   }
   else
     tmpElement->m_style.override(VSDOptionalCharStyle(charCount, font, fontColour, fontSize, bold, italic, underline,
-                                                      doubleunderline, strikeout, doublestrikeout, allcaps, initcaps, smallcaps, superscript, subscript));
+                                                      doubleunderline, strikeout, doublestrikeout, allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth));
 }
 
 void libvisio::VSDCharacterList::addCharIX(unsigned id, unsigned level, const VSDOptionalCharStyle &style)
 {
   addCharIX(id, level, style.charCount, style.font, style.colour, style.size, style.bold, style.italic, style.underline,
             style.doubleunderline, style.strikeout, style.doublestrikeout, style.allcaps, style.initcaps, style.smallcaps,
-            style.superscript, style.subscript);
+            style.superscript, style.subscript, style.scaleWidth);
 }
 
 unsigned libvisio::VSDCharacterList::getCharCount(unsigned id) const
diff --git a/src/lib/VSDCharacterList.h b/src/lib/VSDCharacterList.h
index 970df93..5211384 100644
--- a/src/lib/VSDCharacterList.h
+++ b/src/lib/VSDCharacterList.h
@@ -33,7 +33,7 @@ public:
                  const boost::optional<bool> &italic, const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline,
                  const boost::optional<bool> &strikeout, const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps,
                  const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript,
-                 const boost::optional<bool> &subscript);
+                 const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth);
   void addCharIX(unsigned id, unsigned level, const VSDOptionalCharStyle &style);
   unsigned getCharCount(unsigned id) const;
   void setCharCount(unsigned id, unsigned charCount);
diff --git a/src/lib/VSDCollector.h b/src/lib/VSDCollector.h
index 201a759..6e16bc2 100644
--- a/src/lib/VSDCollector.h
+++ b/src/lib/VSDCollector.h
@@ -80,12 +80,13 @@ public:
                              const boost::optional<bool> &italic, const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline,
                              const boost::optional<bool> &strikeout, const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps,
                              const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript,
-                             const boost::optional<bool> &subscript) = 0;
+                             const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth) = 0;
   virtual void collectDefaultCharStyle(unsigned charCount, const boost::optional<VSDName> &font, const boost::optional<Colour> &fontColour,
                                        const boost::optional<double> &fontSize, const boost::optional<bool> &bold, const boost::optional<bool> &italic,
                                        const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline, const boost::optional<bool> &strikeout,
                                        const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps, const boost::optional<bool> &initcaps,
-                                       const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript, const boost::optional<bool> &subscript) = 0;
+                                       const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript, const boost::optional<bool> &subscript,
+                                       const boost::optional<double> &scaleWidth) = 0;
   virtual void collectParaIX(unsigned id, unsigned level, unsigned charCount, const boost::optional<double> &indFirst,
                              const boost::optional<double> &indLeft, const boost::optional<double> &indRight, const boost::optional<double> &spLine,
                              const boost::optional<double> &spBefore, const boost::optional<double> &spAfter, const boost::optional<unsigned char> &align,
@@ -129,7 +130,7 @@ public:
                                   const boost::optional<bool> &italic, const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline,
                                   const boost::optional<bool> &strikeout, const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps,
                                   const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript,
-                                  const boost::optional<bool> &subscript) = 0;
+                                  const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth) = 0;
   virtual void collectParaIXStyle(unsigned id, unsigned level, unsigned charCount, const boost::optional<double> &indFirst,
                                   const boost::optional<double> &indLeft, const boost::optional<double> &indRight, const boost::optional<double> &spLine,
                                   const boost::optional<double> &spBefore, const boost::optional<double> &spAfter, const boost::optional<unsigned char> &align,
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index e65359d..16c7a34 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -824,6 +824,7 @@ void libvisio::VSDContentCollector::_fillCharProperties(librevenge::RVNGProperty
   if (style.smallcaps) propList.insert("fo:font-variant", "small-caps");
   if (style.superscript) propList.insert("style:text-position", "super");
   if (style.subscript) propList.insert("style:text-position", "sub");
+  if (style.scaleWidth != 1.0) propList.insert("style:text-scale", style.scaleWidth, librevenge::RVNG_PERCENT);
   propList.insert("fo:font-size", style.size*72.0, librevenge::RVNG_POINT);
   Colour colour = style.colour;
   const Colour *pColour = m_currentLayerList.getColour(m_currentLayerMem);
@@ -2397,12 +2398,12 @@ void libvisio::VSDContentCollector::collectCharIX(unsigned /* id */ , unsigned l
                                                   const boost::optional<VSDName> &font, const boost::optional<Colour> &fontColour, const boost::optional<double> &fontSize, const boost::optional<bool> &bold,
                                                   const boost::optional<bool> &italic, const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline, const boost::optional<bool> &strikeout,
                                                   const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps, const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps,
-                                                  const boost::optional<bool> &superscript, const boost::optional<bool> &subscript)
+                                                  const boost::optional<bool> &superscript, const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth)
 {
   _handleLevelChange(level);
   VSDCharStyle format(m_defaultCharStyle);
   format.override(VSDOptionalCharStyle(charCount, font, fontColour, fontSize, bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                       allcaps, initcaps, smallcaps, superscript, subscript));
+                                       allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth));
   format.charCount = charCount;
   m_charFormats.push_back(format);
 }
@@ -2418,13 +2419,15 @@ void libvisio::VSDContentCollector::collectTabsDataList(unsigned level, const st
 }
 
 void libvisio::VSDContentCollector::collectDefaultCharStyle(unsigned charCount,
-                                                            const boost::optional<VSDName> &font, const boost::optional<Colour> &fontColour, const boost::optional<double> &fontSize, const boost::optional<bool> &bold,
-                                                            const boost::optional<bool> &italic, const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline, const boost::optional<bool> &strikeout,
-                                                            const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps, const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps,
-                                                            const boost::optional<bool> &superscript, const boost::optional<bool> &subscript)
+                                                            const boost::optional<VSDName> &font, const boost::optional<Colour> &fontColour, const boost::optional<double> &fontSize,
+                                                            const boost::optional<bool> &bold, const boost::optional<bool> &italic, const boost::optional<bool> &underline,
+                                                            const boost::optional<bool> &doubleunderline, const boost::optional<bool> &strikeout,
+                                                            const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps, const boost::optional<bool> &initcaps,
+                                                            const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript, const boost::optional<bool> &subscript,
+                                                            const boost::optional<double> &scaleWidth)
 {
   m_defaultCharStyle.override(VSDOptionalCharStyle(charCount, font, fontColour, fontSize, bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                                   allcaps, initcaps, smallcaps, superscript, subscript));
+                                                   allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth));
 }
 
 void libvisio::VSDContentCollector::collectTextBlock(unsigned level, const boost::optional<double> &leftMargin, const boost::optional<double> &rightMargin,
@@ -2527,10 +2530,10 @@ void libvisio::VSDContentCollector::collectCharIXStyle(unsigned /* id */, unsign
                                                        const boost::optional<bool> &bold, const boost::optional<bool> &italic, const boost::optional<bool> &underline,
                                                        const boost::optional<bool> &doubleunderline, const boost::optional<bool> &strikeout, const boost::optional<bool> &doublestrikeout,
                                                        const boost::optional<bool> &allcaps, const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps,
-                                                       const boost::optional<bool> &superscript, const boost::optional<bool> &subscript)
+                                                       const boost::optional<bool> &superscript, const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth)
 {
   VSDOptionalCharStyle charStyle(charCount, font, fontColour, fontSize, bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                 allcaps, initcaps, smallcaps, superscript, subscript);
+                                 allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth);
   m_styles.addCharStyle(m_currentStyleSheet, charStyle);
 }
 
diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h
index ca7a73e..3e2fb38 100644
--- a/src/lib/VSDContentCollector.h
+++ b/src/lib/VSDContentCollector.h
@@ -100,12 +100,13 @@ public:
                      const boost::optional<bool> &italic, const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline,
                      const boost::optional<bool> &strikeout, const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps,
                      const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript,
-                     const boost::optional<bool> &subscript);
+                     const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth);
   void collectDefaultCharStyle(unsigned charCount, const boost::optional<VSDName> &font, const boost::optional<Colour> &fontColour,
                                const boost::optional<double> &fontSize, const boost::optional<bool> &bold, const boost::optional<bool> &italic,
                                const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline, const boost::optional<bool> &strikeout,
                                const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps, const boost::optional<bool> &initcaps,
-                               const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript, const boost::optional<bool> &subscript);
+                               const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript, const boost::optional<bool> &subscript,
+                               const boost::optional<double> &scaleWidth);
   void collectParaIX(unsigned id, unsigned level, unsigned charCount, const boost::optional<double> &indFirst,
                      const boost::optional<double> &indLeft, const boost::optional<double> &indRight, const boost::optional<double> &spLine,
                      const boost::optional<double> &spBefore, const boost::optional<double> &spAfter, const boost::optional<unsigned char> &align,
@@ -149,7 +150,7 @@ public:
                           const boost::optional<bool> &italic, const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline,
                           const boost::optional<bool> &strikeout, const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps,
                           const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript,
-                          const boost::optional<bool> &subscript);
+                          const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth);
   void collectParaIXStyle(unsigned id, unsigned level, unsigned charCount, const boost::optional<double> &indFirst,
                           const boost::optional<double> &indLeft, const boost::optional<double> &indRight, const boost::optional<double> &spLine,
                           const boost::optional<double> &spBefore, const boost::optional<double> &spAfter, const boost::optional<unsigned char> &align,
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index fd85a2c..22b356e 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -676,7 +676,7 @@ void libvisio::VSDParser::_flushShape()
                                        m_shape.m_charStyle.size, m_shape.m_charStyle.bold, m_shape.m_charStyle.italic, m_shape.m_charStyle.underline,
                                        m_shape.m_charStyle.doubleunderline, m_shape.m_charStyle.strikeout, m_shape.m_charStyle.doublestrikeout,
                                        m_shape.m_charStyle.allcaps, m_shape.m_charStyle.initcaps, m_shape.m_charStyle.smallcaps,
-                                       m_shape.m_charStyle.superscript, m_shape.m_charStyle.subscript);
+                                       m_shape.m_charStyle.superscript, m_shape.m_charStyle.subscript, m_shape.m_charStyle.scaleWidth);
 
   m_shape.m_charList.handle(m_collector);
 
@@ -1877,7 +1877,8 @@ void libvisio::VSDParser::readCharIX(librevenge::RVNGInputStream *input)
   if (fontMod & 1) superscript = true;
   if (fontMod & 2) subscript = true;
 
-  input->seek(4, librevenge::RVNG_SEEK_CUR);
+  double scaleWidth = (double)(readU16(input)) / 10000.0;
+  input->seek(2, librevenge::RVNG_SEEK_CUR);
   double fontSize = readDouble(input);
 
   fontMod = readU8(input);
@@ -1888,7 +1889,7 @@ void libvisio::VSDParser::readCharIX(librevenge::RVNGInputStream *input)
   if (m_isInStyles)
     m_collector->collectCharIXStyle(m_header.id, m_header.level, charCount, font, fontColour, fontSize,
                                     bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                    allcaps, initcaps, smallcaps, superscript, subscript);
+                                    allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth);
   else
   {
     if (m_isStencilStarted)
@@ -1898,10 +1899,10 @@ void libvisio::VSDParser::readCharIX(librevenge::RVNGInputStream *input)
 
     m_shape.m_charStyle.override(VSDOptionalCharStyle(charCount, font, fontColour, fontSize,
                                                       bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                                      allcaps, initcaps, smallcaps, superscript, subscript));
+                                                      allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth));
     m_shape.m_charList.addCharIX(m_header.id, m_header.level, charCount, font, fontColour, fontSize,
                                  bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                 allcaps, initcaps, smallcaps, superscript, subscript);
+                                 allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth);
   }
 }
 
diff --git a/src/lib/VSDStyles.h b/src/lib/VSDStyles.h
index 2a592fa..9c518d5 100644
--- a/src/lib/VSDStyles.h
+++ b/src/lib/VSDStyles.h
@@ -214,21 +214,21 @@ struct VSDOptionalCharStyle
 {
   VSDOptionalCharStyle()
     : charCount(0), font(), colour(), size(), bold(), italic(), underline(), doubleunderline(), strikeout(),
-      doublestrikeout(), allcaps(), initcaps(), smallcaps(), superscript(), subscript() {}
+      doublestrikeout(), allcaps(), initcaps(), smallcaps(), superscript(), subscript(), scaleWidth() {}
   VSDOptionalCharStyle(unsigned cc, const boost::optional<VSDName> &ft,
                        const boost::optional<Colour> &c, const boost::optional<double> &s, const boost::optional<bool> &b,
                        const boost::optional<bool> &i, const boost::optional<bool> &u, const boost::optional<bool> &du,
                        const boost::optional<bool> &so, const boost::optional<bool> &dso, const boost::optional<bool> &ac,
                        const boost::optional<bool> &ic, const boost::optional<bool> &sc, const boost::optional<bool> &super,
-                       const boost::optional<bool> &sub) :
+                       const boost::optional<bool> &sub, const boost::optional<double> &sw) :
     charCount(cc), font(ft), colour(c), size(s), bold(b), italic(i), underline(u), doubleunderline(du),
     strikeout(so), doublestrikeout(dso), allcaps(ac), initcaps(ic), smallcaps(sc), superscript(super),
-    subscript(sub) {}
+    subscript(sub), scaleWidth(sw) {}
   VSDOptionalCharStyle(const VSDOptionalCharStyle &style) :
     charCount(style.charCount), font(style.font), colour(style.colour), size(style.size), bold(style.bold),
     italic(style.italic), underline(style.underline), doubleunderline(style.doubleunderline), strikeout(style.strikeout),
     doublestrikeout(style.doublestrikeout), allcaps(style.allcaps), initcaps(style.initcaps), smallcaps(style.smallcaps),
-    superscript(style.superscript), subscript(style.subscript) {}
+    superscript(style.superscript), subscript(style.subscript), scaleWidth(style.scaleWidth) {}
   ~VSDOptionalCharStyle() {}
   void override(const VSDOptionalCharStyle &style)
   {
@@ -246,6 +246,7 @@ struct VSDOptionalCharStyle
     ASSIGN_OPTIONAL(style.smallcaps, smallcaps);
     ASSIGN_OPTIONAL(style.superscript, superscript);
     ASSIGN_OPTIONAL(style.subscript, subscript);
+    ASSIGN_OPTIONAL(style.scaleWidth, scaleWidth);
   }
 
   unsigned charCount;
@@ -263,6 +264,7 @@ struct VSDOptionalCharStyle
   boost::optional<bool> smallcaps;
   boost::optional<bool> superscript;
   boost::optional<bool> subscript;
+  boost::optional<double> scaleWidth;
 };
 
 struct VSDCharStyle
@@ -270,17 +272,17 @@ struct VSDCharStyle
   VSDCharStyle()
     : charCount(0), font(), colour(), size(12.0/72.0), bold(false), italic(false), underline(false),
       doubleunderline(false), strikeout(false), doublestrikeout(false), allcaps(false), initcaps(false),
-      smallcaps(false), superscript(false), subscript(false) {}
+      smallcaps(false), superscript(false), subscript(false), scaleWidth(1.0) {}
   VSDCharStyle(unsigned cc, const VSDName &ft, const Colour &c, double s, bool b, bool i, bool u, bool du,
-               bool so, bool dso, bool ac, bool ic, bool sc, bool super, bool sub) :
+               bool so, bool dso, bool ac, bool ic, bool sc, bool super, bool sub, double sw) :
     charCount(cc), font(ft), colour(c), size(s), bold(b), italic(i), underline(u), doubleunderline(du),
     strikeout(so), doublestrikeout(dso), allcaps(ac), initcaps(ic), smallcaps(sc), superscript(super),
-    subscript(sub) {}
+    subscript(sub), scaleWidth(sw) {}
   VSDCharStyle(const VSDCharStyle &style) :
     charCount(style.charCount), font(style.font), colour(style.colour), size(style.size), bold(style.bold),
     italic(style.italic), underline(style.underline), doubleunderline(style.doubleunderline), strikeout(style.strikeout),
     doublestrikeout(style.doublestrikeout), allcaps(style.allcaps), initcaps(style.initcaps), smallcaps(style.smallcaps),
-    superscript(style.superscript), subscript(style.subscript) {}
+    superscript(style.superscript), subscript(style.subscript), scaleWidth(style.scaleWidth) {}
   ~VSDCharStyle() {}
   void override(const VSDOptionalCharStyle &style)
   {
@@ -298,6 +300,7 @@ struct VSDCharStyle
     ASSIGN_OPTIONAL(style.smallcaps, smallcaps);
     ASSIGN_OPTIONAL(style.superscript, superscript);
     ASSIGN_OPTIONAL(style.subscript, subscript);
+    ASSIGN_OPTIONAL(style.scaleWidth, scaleWidth);
   }
 
   unsigned charCount;
@@ -315,6 +318,7 @@ struct VSDCharStyle
   bool smallcaps;
   bool superscript;
   bool subscript;
+  double scaleWidth;
 };
 
 struct VSDOptionalParaStyle
diff --git a/src/lib/VSDStylesCollector.cpp b/src/lib/VSDStylesCollector.cpp
index 934b7c3..aaddc09 100644
--- a/src/lib/VSDStylesCollector.cpp
+++ b/src/lib/VSDStylesCollector.cpp
@@ -296,7 +296,7 @@ void libvisio::VSDStylesCollector::collectCharIX(unsigned /* id */, unsigned lev
                                                  const boost::optional<bool> & /* bold */, const boost::optional<bool> & /* italic */, const boost::optional<bool> & /* underline */,
                                                  const boost::optional<bool> & /* doubleunderline */, const boost::optional<bool> & /* strikeout */, const boost::optional<bool> & /* doublestrikeout */,
                                                  const boost::optional<bool> & /* allcaps */, const boost::optional<bool> & /* initcaps */, const boost::optional<bool> & /* smallcaps */,
-                                                 const boost::optional<bool> & /* superscript */, const boost::optional<bool> & /* subscript */)
+                                                 const boost::optional<bool> & /* superscript */, const boost::optional<bool> & /* subscript */, const boost::optional<double> & /* scaleWidth */)
 {
   _handleLevelChange(level);
 }
@@ -311,7 +311,7 @@ void libvisio::VSDStylesCollector::collectDefaultCharStyle(unsigned /* charCount
                                                            const boost::optional<bool> & /* bold */, const boost::optional<bool> & /* italic */, const boost::optional<bool> & /* underline */,
                                                            const boost::optional<bool> & /* doubleunderline */, const boost::optional<bool> & /* strikeout */, const boost::optional<bool> & /* doublestrikeout */,
                                                            const boost::optional<bool> & /* allcaps */, const boost::optional<bool> & /* initcaps */, const boost::optional<bool> & /* smallcaps */,
-                                                           const boost::optional<bool> & /* superscript */, const boost::optional<bool> & /* subscript */)
+                                                           const boost::optional<bool> & /* superscript */, const boost::optional<bool> & /* subscript */, const boost::optional<double> & /* scaleWidth */)
 {
 }
 
@@ -371,7 +371,7 @@ void libvisio::VSDStylesCollector::collectCharIXStyle(unsigned /* id */, unsigne
                                                       const boost::optional<bool> & /* strikeout */, const boost::optional<bool> & /* doublestrikeout */,
                                                       const boost::optional<bool> & /* allcaps */, const boost::optional<bool> & /* initcaps */,
                                                       const boost::optional<bool> & /* smallcaps */, const boost::optional<bool> & /* superscript */,
-                                                      const boost::optional<bool> & /* subscript */)
+                                                      const boost::optional<bool> & /* subscript */, const boost::optional<double> & /* scaleWidth */)
 {
   _handleLevelChange(level);
 }
diff --git a/src/lib/VSDStylesCollector.h b/src/lib/VSDStylesCollector.h
index a619ad4..9e4534e 100644
--- a/src/lib/VSDStylesCollector.h
+++ b/src/lib/VSDStylesCollector.h
@@ -90,12 +90,13 @@ public:
                      const boost::optional<bool> &italic, const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline,
                      const boost::optional<bool> &strikeout, const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps,
                      const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript,
-                     const boost::optional<bool> &subscript);
+                     const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth);
   void collectDefaultCharStyle(unsigned charCount, const boost::optional<VSDName> &font, const boost::optional<Colour> &fontColour,
                                const boost::optional<double> &fontSize, const boost::optional<bool> &bold, const boost::optional<bool> &italic,
                                const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline, const boost::optional<bool> &strikeout,
                                const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps, const boost::optional<bool> &initcaps,
-                               const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript, const boost::optional<bool> &subscript);
+                               const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript, const boost::optional<bool> &subscript,
+                               const boost::optional<double> &scaleWidth);
   void collectParaIX(unsigned id, unsigned level, unsigned charCount, const boost::optional<double> &indFirst,
                      const boost::optional<double> &indLeft, const boost::optional<double> &indRight, const boost::optional<double> &spLine,
                      const boost::optional<double> &spBefore, const boost::optional<double> &spAfter, const boost::optional<unsigned char> &align,
@@ -142,7 +143,7 @@ public:
                           const boost::optional<bool> &italic, const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline,
                           const boost::optional<bool> &strikeout, const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps,
                           const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript,
-                          const boost::optional<bool> &subscript);
+                          const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth);
   void collectParaIXStyle(unsigned id, unsigned level, unsigned charCount, const boost::optional<double> &indFirst,
                           const boost::optional<double> &indLeft, const boost::optional<double> &indRight, const boost::optional<double> &spLine,
                           const boost::optional<double> &spBefore, const boost::optional<double> &spAfter, const boost::optional<unsigned char> &align,
diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index 96b4a8e..7b9dbcb 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -1198,6 +1198,7 @@ void libvisio::VSDXMLParserBase::readCharIX(xmlTextReaderPtr reader)
   boost::optional<bool> superscript;
   boost::optional<bool> subscript;
   boost::optional<double> fontSize;
+  boost::optional<double> scaleWidth;
 
   do
   {
@@ -1304,6 +1305,8 @@ void libvisio::VSDXMLParserBase::readCharIX(xmlTextReaderPtr reader)
       }
       break;
     case XML_FONTSCALE:
+      if (XML_READER_TYPE_ELEMENT == tokenType)
+        ret = readDoubleData(scaleWidth, reader);
       break;
     case XML_SIZE:
       if (XML_READER_TYPE_ELEMENT == tokenType)
@@ -1335,17 +1338,17 @@ void libvisio::VSDXMLParserBase::readCharIX(xmlTextReaderPtr reader)
   if (m_isInStyles)
     m_collector->collectCharIXStyle(ix, level, charCount, font, fontColour, fontSize, bold, italic,
                                     underline, doubleunderline, strikeout, doublestrikeout, allcaps,
-                                    initcaps, smallcaps, superscript, subscript);
+                                    initcaps, smallcaps, superscript, subscript, scaleWidth);
   else
   {
     if (!ix || m_shape.m_charList.empty()) // character style 0 is the default character style
       m_shape.m_charStyle.override(VSDOptionalCharStyle(charCount, font, fontColour, fontSize, bold,
                                                         italic, underline, doubleunderline, strikeout, doublestrikeout,
-                                                        allcaps, initcaps, smallcaps, superscript, subscript));
+                                                        allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth));
 
     m_shape.m_charList.addCharIX(ix, level, charCount, font, fontColour, fontSize, bold, italic,
                                  underline, doubleunderline, strikeout, doublestrikeout, allcaps,
-                                 initcaps, smallcaps, superscript, subscript);
+                                 initcaps, smallcaps, superscript, subscript, scaleWidth);
   }
 }
 
@@ -1821,7 +1824,7 @@ void libvisio::VSDXMLParserBase::_flushShape()
                                        m_shape.m_charStyle.size, m_shape.m_charStyle.bold, m_shape.m_charStyle.italic, m_shape.m_charStyle.underline,
                                        m_shape.m_charStyle.doubleunderline, m_shape.m_charStyle.strikeout, m_shape.m_charStyle.doublestrikeout,
                                        m_shape.m_charStyle.allcaps, m_shape.m_charStyle.initcaps, m_shape.m_charStyle.smallcaps,
-                                       m_shape.m_charStyle.superscript, m_shape.m_charStyle.subscript);
+                                       m_shape.m_charStyle.superscript, m_shape.m_charStyle.subscript, m_shape.m_charStyle.scaleWidth);
 
   m_shape.m_charList.handle(m_collector);
 


More information about the Libreoffice-commits mailing list