Author: fschmid
Date: Sun Jun 30 08:51:51 2013
New Revision: 18348

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=18348
Log:
Fixed Bug #11599: IDML importer doesn't detect fonts in the source directory of 
an IDML file

Modified:
    trunk/Scribus/scribus/plugins/import/idml/importidml.cpp
    trunk/Scribus/scribus/plugins/import/idml/importidml.h

Modified: trunk/Scribus/scribus/plugins/import/idml/importidml.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=18348&path=/trunk/Scribus/scribus/plugins/import/idml/importidml.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/import/idml/importidml.cpp (original)
+++ trunk/Scribus/scribus/plugins/import/idml/importidml.cpp Sun Jun 30 
08:51:51 2013
@@ -553,6 +553,7 @@
                                                firstLayer = false;
                                        }
                                }
+                               parseFontsXMLNode(docElem);
                                parseGraphicsXMLNode(docElem);
                                parseStylesXMLNode(docElem);
                                parsePreferencesXMLNode(docElem);
@@ -583,6 +584,14 @@
                                                
layerTranslate.insert(layerSelf, layerName);
                                                firstLayer = false;
                                        }
+                                       if (dpg.tagName() == "idPkg:Fonts")
+                                       {
+                                               if (!parseFontsXML(dpg))
+                                               {
+                                                       retVal = false;
+                                                       break;
+                                               }
+                                       }
                                        if (dpg.tagName() == "idPkg:Graphic")
                                        {
                                                if (!parseGraphicsXML(dpg))
@@ -672,7 +681,7 @@
        return retVal;
 }
 
-bool IdmlPlug::parseGraphicsXML(const QDomElement& grElem)
+bool IdmlPlug::parseFontsXML(const QDomElement& grElem)
 {
        QDomElement grNode;
        QDomDocument grMapDom;
@@ -692,12 +701,60 @@
                else
                        return false;
        }
+       parseFontsXMLNode(grNode);
+       return true;
+}
+
+void IdmlPlug::parseFontsXMLNode(const QDomElement& grNode)
+{
+       for (QDomNode n = grNode.firstChild(); !n.isNull(); n = n.nextSibling() 
)
+       {
+               QDomElement e = n.toElement();
+               if (e.tagName() == "FontFamily")
+               {
+                       QString family = e.attribute("Name");
+                       QMap<QString, QString> styleMap;
+                       for(QDomNode gr = e.firstChild(); !gr.isNull(); gr = 
gr.nextSibling() )
+                       {
+                               QDomElement grs = gr.toElement();
+                               if (grs.tagName() == "Font")
+                               {
+                                       QString styleName = 
grs.attribute("FontStyleName").remove("$ID/");
+                                       QString postName = 
grs.attribute("PostScriptName").remove("$ID/");
+                                       styleMap.insert(styleName, postName);
+                               }
+                       }
+                       fontTranslateMap.insert(family, styleMap);
+               }
+       }
+}
+
+bool IdmlPlug::parseGraphicsXML(const QDomElement& grElem)
+{
+       QDomElement grNode;
+       QDomDocument grMapDom;
+       if (grElem.hasAttribute("src"))
+       {
+               QByteArray f2;
+               loadRawText(fun->getFile(grElem.attribute("src")), f2);
+               if(grMapDom.setContent(f2))
+                       grNode = grMapDom.documentElement();
+               else
+                       return false;
+       }
+       else
+       {
+               if (grElem.hasChildNodes())
+                       grNode = grElem;
+               else
+                       return false;
+       }
        parseGraphicsXMLNode(grNode);
        return true;
 }
 
 void IdmlPlug::parseGraphicsXMLNode(const QDomElement& grNode)
-       {
+{
        for (QDomNode n = grNode.firstChild(); !n.isNull(); n = n.nextSibling() 
)
        {
                QDomElement e = n.toElement();
@@ -3000,38 +3057,44 @@
 
 QString IdmlPlug::constructFontName(QString fontBaseName, QString fontStyle)
 {
-       QString fontName;
-       if ((!fontBaseName.isEmpty()) && (!fontStyle.isEmpty()))
-       {
-               fontName = fontBaseName + " " + fontStyle;
-               bool found = false;
-               QString family = fontName;
-               SCFontsIterator 
it(PrefsManager::instance()->appPrefs.fontPrefs.AvailFonts);
-               for ( ; it.hasNext(); it.next())
-               {
-                       if ((fontBaseName == it.current().family()) && 
(fontStyle == it.current().style()))
-                               found = true;
-               }
-               if (found)
-                       fontName = family;
-               else
-               {
-                       if (importerFlags & LoadSavePlugin::lfCreateThumbnail)
-                               fontName = 
PrefsManager::instance()->appPrefs.itemToolPrefs.textFont;
-                       else
-                       {
-                               if 
(!PrefsManager::instance()->appPrefs.fontPrefs.GFontSub.contains(family))
-                               {
-                                       
qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
-                                       MissingFont *dia = new MissingFont(0, 
family, m_Doc);
-                                       dia->exec();
-                                       fontName = dia->getReplacementFont();
-                                       delete dia;
-                                       
qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
-                                       
PrefsManager::instance()->appPrefs.fontPrefs.GFontSub[family] = fontName;
-                               }
+       QString fontName = 
PrefsManager::instance()->appPrefs.itemToolPrefs.textFont;
+       if (fontTranslateMap.contains(fontBaseName))
+       {
+               QMap<QString, QString> styleMap = 
fontTranslateMap[fontBaseName];
+               if (styleMap.contains(fontStyle))
+               {
+                       QString postName = styleMap[fontStyle];
+                       bool found = false;
+                       SCFontsIterator 
it(PrefsManager::instance()->appPrefs.fontPrefs.AvailFonts);
+                       for ( ; it.hasNext(); it.next())
+                       {
+                               if (it.current().psName() == postName)
+                               {
+                                       fontName = it.current().scName();
+                                       found = true;
+                                       break;
+                               }
+                       }
+                       if (!found)
+                       {
+                               if (importerFlags & 
LoadSavePlugin::lfCreateThumbnail)
+                                       fontName = 
PrefsManager::instance()->appPrefs.itemToolPrefs.textFont;
                                else
-                                       fontName = 
PrefsManager::instance()->appPrefs.fontPrefs.GFontSub[family];
+                               {
+                                       QString family = fontBaseName + " " + 
fontStyle;
+                                       if 
(!PrefsManager::instance()->appPrefs.fontPrefs.GFontSub.contains(family))
+                                       {
+                                               
qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+                                               MissingFont *dia = new 
MissingFont(0, family, m_Doc);
+                                               dia->exec();
+                                               fontName = 
dia->getReplacementFont();
+                                               delete dia;
+                                               
qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
+                                               
PrefsManager::instance()->appPrefs.fontPrefs.GFontSub[family] = fontName;
+                                       }
+                                       else
+                                               fontName = 
PrefsManager::instance()->appPrefs.fontPrefs.GFontSub[family];
+                               }
                        }
                }
        }

Modified: trunk/Scribus/scribus/plugins/import/idml/importidml.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=18348&path=/trunk/Scribus/scribus/plugins/import/idml/importidml.h
==============================================================================
--- trunk/Scribus/scribus/plugins/import/idml/importidml.h (original)
+++ trunk/Scribus/scribus/plugins/import/idml/importidml.h Sun Jun 30 08:51:51 
2013
@@ -94,6 +94,8 @@
        };
        QString getNodeValue(QDomNode &baseNode, QString path);
        bool convert(QString fn);
+       bool parseFontsXML(const QDomElement& grElem);
+       void parseFontsXMLNode(const QDomElement& grNode);
        bool parseGraphicsXML(const QDomElement& grElem);
        void parseGraphicsXMLNode(const QDomElement& grNode);
        bool parseStylesXML(const QDomElement& sElem);
@@ -145,6 +147,7 @@
        QMap<QString, QString> styleTranslate;
        QMap<QString, QStringList> styleParents;
        QMap<QString, QString> charStyleTranslate;
+       QMap<QString, QMap<QString, QString> > fontTranslateMap;
        QString def_fillColor;
        QString def_fillGradient;
        QString def_strokeColor;


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to