Author: jghali
Date: Fri Apr 26 23:44:03 2019
New Revision: 22969

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22969
Log:
#15629: When calling createCharStyle(), inherit any attribute not explicitly 
defined from default character style

Modified:
    trunk/Scribus/doc/de/scripterapi-styles.html
    trunk/Scribus/doc/en/scripterapi-styles.html
    trunk/Scribus/doc/fr/scripterapi-styles.html
    trunk/Scribus/doc/it/scripterapi-styles.html
    trunk/Scribus/scribus/plugins/scriptplugin/cmdstyle.cpp

Modified: trunk/Scribus/doc/de/scripterapi-styles.html
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22969&path=/trunk/Scribus/doc/de/scripterapi-styles.html
==============================================================================
--- trunk/Scribus/doc/de/scripterapi-styles.html        (original)
+++ trunk/Scribus/doc/de/scripterapi-styles.html        Fri Apr 26 23:44:03 2019
@@ -105,7 +105,17 @@
 </li>
 </ul>
 </p>
-<p>On a practical level, this is a challenging command to fully understand if 
you wish to assign a number of settings, since keeping track of where you are, 
and which kind of entry is needed (string vs number) is not easy. For some 
guidance on this showing in particular how to set tracking, see the wiki page 
<a href="https://wiki.scribus.net/canvas/Text_and_Text_Manipulation";>Text and 
Text Manipulation</a>.</p>
+<p>Any style attribute not explicitly defined will have its value inherited 
from default character style.</p>
+<p>Due to the important number of arguments of this function, it is strongly 
advised to use Python keyword syntax when calling this function. For example if 
a style needs to alter only font size, do not use this syntax:
+<ul style="list-style-type:none">
+    <li><code>newStyle = createCharStyle("New Style", "Arial Regular", 
12)</code></li>
+</ul></p>
+<p>but use this syntax instead:
+<ul style="list-style-type:none">
+    <li><code>newStyle = createCharStyle("New Style", fontsize=12)</code></li>
+</ul>
+</p>
+<p>For some guidance on this showing in particular how to set tracking, see 
the wiki page <a 
href="https://wiki.scribus.net/canvas/Text_and_Text_Manipulation";>Text and Text 
Manipulation</a>.</p>
 </dd>
 
 <dt><a 
name="-createCustomLineStyle"><strong>createCustomLineStyle</strong></a>(...)</dt>

Modified: trunk/Scribus/doc/en/scripterapi-styles.html
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22969&path=/trunk/Scribus/doc/en/scripterapi-styles.html
==============================================================================
--- trunk/Scribus/doc/en/scripterapi-styles.html        (original)
+++ trunk/Scribus/doc/en/scripterapi-styles.html        Fri Apr 26 23:44:03 2019
@@ -105,7 +105,17 @@
 </li>
 </ul>
 </p>
-<p>On a practical level, this is a challenging command to fully understand if 
you wish to assign a number of settings, since keeping track of where you are, 
and which kind of entry is needed (string vs number) is not easy. For some 
guidance on this showing in particular how to set tracking, see the wiki page 
<a href="https://wiki.scribus.net/canvas/Text_and_Text_Manipulation";>Text and 
Text Manipulation</a>.</p>
+<p>Any style attribute not explicitly defined will have its value inherited 
from default character style.</p>
+<p>Due to the important number of arguments of this function, it is strongly 
advised to use Python keyword syntax when calling this function. For example if 
a style needs to alter only font size, do not use this syntax:
+<ul style="list-style-type:none">
+    <li><code>newStyle = createCharStyle("New Style", "Arial Regular", 
12)</code></li>
+</ul></p>
+<p>but use this syntax instead:
+<ul style="list-style-type:none">
+    <li><code>newStyle = createCharStyle("New Style", fontsize=12)</code></li>
+</ul>
+</p>
+<p>For some guidance on this showing in particular how to set tracking, see 
the wiki page <a 
href="https://wiki.scribus.net/canvas/Text_and_Text_Manipulation";>Text and Text 
Manipulation</a>.</p>
 </dd>
 
 <dt><a 
name="-createCustomLineStyle"><strong>createCustomLineStyle</strong></a>(...)</dt>

Modified: trunk/Scribus/doc/fr/scripterapi-styles.html
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22969&path=/trunk/Scribus/doc/fr/scripterapi-styles.html
==============================================================================
--- trunk/Scribus/doc/fr/scripterapi-styles.html        (original)
+++ trunk/Scribus/doc/fr/scripterapi-styles.html        Fri Apr 26 23:44:03 2019
@@ -102,7 +102,17 @@
 </li>
 </ul>
 </p>
-<p>On a practical level, this is a challenging command to fully understand if 
you wish to assign a number of settings, since keeping track of where you are, 
and which kind of entry is needed (string vs number) is not easy. For some 
guidance on this showing in particular how to set tracking, see the wiki page 
<a href="https://wiki.scribus.net/canvas/Text_and_Text_Manipulation";>Text and 
Text Manipulation</a>.</p>
+<p>Tout atttribut de style non explicitement définie verra sa valeur 
héritée du style de caractère par défaut.</p>
+<p>Du fait du nombre important d'arguments de cette fonction, il est fortement 
conseillé d'utiliser la syntaxe par mots clés lors de son appel. Par example 
si vous souhaitez modifier uniquement la taille de police, n'appelez pas la 
fonction de la façon suivante:
+<ul style="list-style-type:none">
+    <li><code>newStyle = createCharStyle("Nouveau Style", "Arial Regular", 
12)</code></li>
+</ul></p>
+<p>mais utilisez plutôt cette syntaxe à la place:
+<ul style="list-style-type:none">
+    <li><code>newStyle = createCharStyle("Nouveau Style", 
fontsize=12)</code></li>
+</ul>
+</p>
+<p>Pour plus de détails à ce sujet et notamment sur la façon de définir 
l'approche, veuillez consulter la page wiki <a 
href="https://wiki.scribus.net/canvas/Text_and_Text_Manipulation";>Text and Text 
Manipulation</a>.</p>
 </dd>
 
 <dt><a 
name="-createCustomLineStyle"><strong>createCustomLineStyle</strong></a>(...)</dt>

Modified: trunk/Scribus/doc/it/scripterapi-styles.html
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22969&path=/trunk/Scribus/doc/it/scripterapi-styles.html
==============================================================================
--- trunk/Scribus/doc/it/scripterapi-styles.html        (original)
+++ trunk/Scribus/doc/it/scripterapi-styles.html        Fri Apr 26 23:44:03 2019
@@ -105,7 +105,17 @@
 </li>
 </ul>
 </p>
-<p>On a practical level, this is a challenging command to fully understand if 
you wish to assign a number of settings, since keeping track of where you are, 
and which kind of entry is needed (string vs number) is not easy. For some 
guidance on this showing in particular how to set tracking, see the wiki page 
<a href="https://wiki.scribus.net/canvas/Text_and_Text_Manipulation";>Text and 
Text Manipulation</a>.</p>
+<p>Any style attribute not explicitly defined will have its value inherited 
from default character style.</p>
+<p>Due to the important number of arguments of this function, it is strongly 
advised to use Python keyword syntax when calling this function. For example if 
a style needs to alter only font size, do not use this syntax:
+<ul style="list-style-type:none">
+    <li><code>newStyle = createCharStyle("New Style", "Arial Regular", 
12)</code></li>
+</ul></p>
+<p>but use this syntax instead:
+<ul style="list-style-type:none">
+    <li><code>newStyle = createCharStyle("New Style", fontsize=12)</code></li>
+</ul>
+</p>
+<p>For some guidance on this showing in particular how to set tracking, see 
the wiki page <a 
href="https://wiki.scribus.net/canvas/Text_and_Text_Manipulation";>Text and Text 
Manipulation</a>.</p>
 </dd>
 
 <dt><a 
name="-createCustomLineStyle"><strong>createCustomLineStyle</strong></a>(...)</dt>

Modified: trunk/Scribus/scribus/plugins/scriptplugin/cmdstyle.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22969&path=/trunk/Scribus/scribus/plugins/scriptplugin/cmdstyle.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/scriptplugin/cmdstyle.cpp     (original)
+++ trunk/Scribus/scribus/plugins/scriptplugin/cmdstyle.cpp     Fri Apr 26 
23:44:03 2019
@@ -8,10 +8,11 @@
 #include "cmdstyle.h"
 #include "cmdutil.h"
 
-#include "qbuffer.h"
-#include "qpixmap.h"
-//Added by qt3to4:
+#include <limits>
+
+#include <QBuffer>
 #include <QList>
+#include <QPixmap>
 
 #include "scribuscore.h"
 #include "styles/paragraphstyle.h"
@@ -121,12 +122,22 @@
        if (!checkHaveDocument())
                return nullptr;
 
+       const double dbl_min = -std::numeric_limits<double>::max();
+
        ScribusDoc* currentDoc = ScCore->primaryMainWindow()->doc;
        const StyleSet<CharStyle>& charStyles = 
ScCore->primaryMainWindow()->doc->charStyles();
        const CharStyle* defaultStyle = charStyles.getDefault();
 
-       char *name = const_cast<char*>(""), *font = const_cast<char*>(""), 
*features = const_cast<char*>("inherit"), *fillColor = 
const_cast<char*>("Black"), *fontFeatures = const_cast<char*>(""), *strokeColor 
= const_cast<char*>("Black"), *language = const_cast<char*>("");
-       double fontSize = defaultStyle->fontSize() / 10.0, fillShade = 1, 
strokeShade = 1, scaleH = 1, scaleV = 1, baselineOffset = 0, shadowXOffset = 0, 
shadowYOffset = 0, outlineWidth = 0, underlineOffset = 0, underlineWidth = 0, 
strikethruOffset = 0, strikethruWidth = 0, tracking = 0;
+       char *name = const_cast<char*>(""), *font = const_cast<char*>(""), 
*features = const_cast<char*>("inherit"), *fillColor = const_cast<char*>(""), 
*fontFeatures = const_cast<char*>(""), *strokeColor = 
const_cast<char*>("Black"), *language = const_cast<char*>("");
+       double fontSize = -1;
+       double fillShade = -1, strokeShade = -1;
+       double scaleH = -1, scaleV = -1;
+       double baselineOffset = dbl_min;
+       double shadowXOffset  = dbl_min, shadowYOffset = dbl_min;
+       double outlineWidth = dbl_min, underlineOffset = dbl_min, 
underlineWidth = dbl_min;
+       double strikethruOffset = dbl_min, strikethruWidth = dbl_min;
+       double tracking = dbl_min;
+       
        if (!PyArg_ParseTupleAndKeywords(args, keywords, 
"es|esdesesdesddddddddddddes", keywordargs,
                                                                        
"utf-8", &name, "utf-8", &font, &fontSize, "utf-8", &features,
                                                                        
"utf-8", &fillColor, &fillShade, "utf-8", &strokeColor, &strokeShade, 
&baselineOffset, &shadowXOffset,
@@ -141,53 +152,84 @@
        }
 
        QString realFont = QString(font);
-       if (realFont.isEmpty())
-               realFont = defaultStyle->font().scName();
-
-       if (!currentDoc->AllFonts->contains(realFont))
-       {
-               PyErr_SetString(PyExc_ValueError, QObject::tr("Specified font 
is not available.", "python error").toLocal8Bit().constData());
-               return nullptr;
+       if (!realFont.isEmpty())
+       {
+               if (!currentDoc->AllFonts->contains(realFont))
+               {
+                       PyErr_SetString(PyExc_ValueError, 
QObject::tr("Specified font is not available.", "python 
error").toLocal8Bit().constData());
+                       return nullptr;
+               }
        }
 
        const ColorList& docColors = currentDoc->PageColors;
        QString qFillColor = QString(fillColor);
        QString qStrokeColor = QString(strokeColor);
-       if ((qFillColor != CommonStrings::None) && 
(!docColors.contains(qFillColor)))
-       {
-               PyErr_SetString(PyExc_ValueError, QObject::tr("Specified fill 
color is not available in document.", "python 
error").toLocal8Bit().constData());
-               return nullptr;
-       }
-       if ((qStrokeColor != CommonStrings::None) && 
(!docColors.contains(qStrokeColor)))
-       {
-               PyErr_SetString(PyExc_ValueError, QObject::tr("Specified stroke 
color is not available in document.", "python 
error").toLocal8Bit().constData());
-               return nullptr;
-       }
-
+       if (!qFillColor.isEmpty())
+       {
+               if ((qFillColor != CommonStrings::None) && 
(!docColors.contains(qFillColor)))
+               {
+                       PyErr_SetString(PyExc_ValueError, 
QObject::tr("Specified fill color is not available in document.", "python 
error").toLocal8Bit().constData());
+                       return nullptr;
+               }
+       }
+       if (!qStrokeColor.isEmpty())
+       {
+               if ((qStrokeColor != CommonStrings::None) && 
(!docColors.contains(qStrokeColor)))
+               {
+                       PyErr_SetString(PyExc_ValueError, 
QObject::tr("Specified stroke color is not available in document.", "python 
error").toLocal8Bit().constData());
+                       return nullptr;
+               }
+       }
+
+       if (fillShade >= 0)
+               fillShade = qMax(0.0, qMin(fillShade, 1.0));
+       if (strokeShade >= 0)
+               strokeShade = qMax(0.0, qMin(strokeShade, 1.0));
        QStringList featuresList = QString(features).split(',', 
QString::SkipEmptyParts);
+       QString qLanguage = QString(language);
 
        CharStyle tmpCharStyle;
        tmpCharStyle.setName(name);
-       tmpCharStyle.setFont((*currentDoc->AllFonts)[realFont]);
-       tmpCharStyle.setFontSize(fontSize * 10);
-       tmpCharStyle.setFontFeatures(fontFeatures);
-       tmpCharStyle.setFeatures(featuresList);
-       tmpCharStyle.setFillColor(qFillColor);
-       tmpCharStyle.setFillShade(fillShade * 100);
-       tmpCharStyle.setStrokeColor(qStrokeColor);
-       tmpCharStyle.setStrokeShade(strokeShade * 100);
-       tmpCharStyle.setBaselineOffset(baselineOffset);
-       tmpCharStyle.setShadowXOffset(shadowXOffset);
-       tmpCharStyle.setShadowYOffset(shadowYOffset);
-       tmpCharStyle.setOutlineWidth(outlineWidth);
-       tmpCharStyle.setUnderlineOffset(underlineOffset);
-       tmpCharStyle.setUnderlineWidth(underlineWidth);
-       tmpCharStyle.setStrikethruOffset(strikethruOffset);
-       tmpCharStyle.setStrikethruWidth(strikethruWidth);
-       tmpCharStyle.setScaleH(scaleH * 1000);
-       tmpCharStyle.setScaleV(scaleV * 1000);
-       tmpCharStyle.setTracking(tracking);
-       tmpCharStyle.setLanguage(QString(language));
+       if (!realFont.isEmpty())
+               tmpCharStyle.setFont((*currentDoc->AllFonts)[realFont]);
+       if (fontSize > 0)
+               tmpCharStyle.setFontSize(fontSize * 10);
+       if (fontFeatures != defaultStyle->fontFeatures())
+               tmpCharStyle.setFontFeatures(fontFeatures);
+       if (featuresList != defaultStyle->features())
+               tmpCharStyle.setFeatures(featuresList);
+       if (!qFillColor.isEmpty())
+               tmpCharStyle.setFillColor(qFillColor);
+       if (fillShade >= 0)
+               tmpCharStyle.setFillShade(fillShade * 100);
+       if (!qStrokeColor.isEmpty())
+               tmpCharStyle.setStrokeColor(qStrokeColor);
+       if (strokeShade >= 0)
+               tmpCharStyle.setStrokeShade(strokeShade * 100);
+       if (baselineOffset >= 0)
+               tmpCharStyle.setBaselineOffset(baselineOffset);
+       if (shadowXOffset != dbl_min)
+               tmpCharStyle.setShadowXOffset(shadowXOffset);
+       if (shadowYOffset != dbl_min)
+               tmpCharStyle.setShadowYOffset(shadowYOffset);
+       if (outlineWidth >= 0)
+               tmpCharStyle.setOutlineWidth(outlineWidth);
+       if (underlineOffset >= 0)
+               tmpCharStyle.setUnderlineOffset(underlineOffset);
+       if (underlineWidth >= 0)
+               tmpCharStyle.setUnderlineWidth(underlineWidth);
+       if (strikethruOffset >= 0)
+               tmpCharStyle.setStrikethruOffset(strikethruOffset);
+       if (strikethruWidth >= 0)
+               tmpCharStyle.setStrikethruWidth(strikethruWidth);
+       if (scaleH > 0)
+               tmpCharStyle.setScaleH(scaleH * 1000);
+       if (scaleV > 0)
+               tmpCharStyle.setScaleV(scaleV * 1000);
+       if (tracking != dbl_min)
+               tmpCharStyle.setTracking(tracking);
+       if (!qLanguage.isEmpty())
+               tmpCharStyle.setLanguage(qLanguage);
 
        StyleSet<CharStyle> tmpStyleSet;
        tmpStyleSet.create(tmpCharStyle);


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

Reply via email to