Author: craig
Date: Sun Sep 18 16:18:50 2016
New Revision: 21448

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=21448
Log:
Bring in some non intrusive changes from CTL

Modified:
    trunk/Scribus/AUTHORS
    trunk/Scribus/scribus/numeration.cpp
    trunk/Scribus/scribus/numeration.h
    trunk/Scribus/scribus/undostate.h
    trunk/Scribus/scribus/util.cpp
    trunk/Scribus/scribus/util.h

Modified: trunk/Scribus/AUTHORS
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=21448&path=/trunk/Scribus/AUTHORS
==============================================================================
--- trunk/Scribus/AUTHORS       (original)
+++ trunk/Scribus/AUTHORS       Sun Sep 18 16:18:50 2016
@@ -71,7 +71,7 @@
 Giovanni Mugnai musical...@gmail.com
 
 
-Refactoring text layout code and the new boxes model, Oman House of Open 
Source Technology team:
+Refactoring text layout code, the new boxes model & CTL text layout, Oman 
House of Open Source Technology team:
 
 Anood Almuharbi anood.almuha...@gmail.com
 Asma ALbahanta as.baha...@gmail.com

Modified: trunk/Scribus/scribus/numeration.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=21448&path=/trunk/Scribus/scribus/numeration.cpp
==============================================================================
--- trunk/Scribus/scribus/numeration.cpp        (original)
+++ trunk/Scribus/scribus/numeration.cpp        Sun Sep 18 16:18:50 2016
@@ -17,38 +17,20 @@
        return str;
 }
 
-QString getFormatName(int format)
-{
-       QString name;
-       if (format == Type_1_2_3)
-               name = "1_2_3";
-       else if (format == Type_i_ii_iii)
-               name = "i_ii_iii";
-       else if (format == Type_I_II_III)
-               name = "I_II_III";
-       else if (format == Type_a_b_c)
-               name = "a_b_c";
-       else if (format == Type_A_B_C)
-               name = "A_B_C";
-       else if (format == Type_asterix)
-               name = "*";
-       else if (format == Type_CJK)
-               name = "CJK";
-       Q_ASSERT(!name.isEmpty());
-       return name;
-}
-
-QStringList getFormatList()
-{
-       QStringList list;
-       list << "1_2_3" << "i_ii_iii" << "I_II_III" << "a_b_c" << "A_B_C" << 
"*" << "CJK";
-       return list;
-}
-
 QStringList getFormatListTr()
 {
        QStringList list;
-       list << QObject::tr("1, 2, 3, ...") << QObject::tr("i, ii, iii, ...") 
<< QObject::tr("I, II, III, ...") << QObject::tr("a, b, c, ...") << 
QObject::tr("A, B, C, ...") << QObject::tr("*") << QObject::tr("CJK");
+       list << QObject::tr("1, 2, 3, ...")
+            // U+202D...U+202C to force the string to be displayed LTR
+            << QObject::trUtf8("\u202dÙ¡, Ù¢, Ù£, ...\u202c")
+            << QObject::tr("i, ii, iii, ...")
+            << QObject::tr("I, II, III, ...")
+            << QObject::tr("a, b, c, ...")
+            << QObject::tr("A, B, C, ...")
+            << QObject::trUtf8("\u202dأ, ب, ت, ...\u202c")
+            << QObject::trUtf8("\u202dأ, ب, ج, ...\u202c")
+            << QObject::tr("*")
+            << QObject::tr("CJK");
        return list;
 }
 

Modified: trunk/Scribus/scribus/numeration.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=21448&path=/trunk/Scribus/scribus/numeration.h
==============================================================================
--- trunk/Scribus/scribus/numeration.h  (original)
+++ trunk/Scribus/scribus/numeration.h  Sun Sep 18 16:18:50 2016
@@ -8,10 +8,13 @@
 typedef enum 
 {
        Type_1_2_3,
+       Type_1_2_3_ar,
        Type_i_ii_iii,
        Type_I_II_III,
        Type_a_b_c,
        Type_A_B_C,
+       Type_Alphabet_ar,
+       Type_Abjad_ar,
        Type_asterix,
        Type_CJK,
        Type_None=99

Modified: trunk/Scribus/scribus/undostate.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=21448&path=/trunk/Scribus/scribus/undostate.h
==============================================================================
--- trunk/Scribus/scribus/undostate.h   (original)
+++ trunk/Scribus/scribus/undostate.h   Sun Sep 18 16:18:50 2016
@@ -316,7 +316,7 @@
        : SimpleState(name, description, pixmap) {}
        ~ScItemsState() {}
        void insertItem(QString itemname, void * item) { 
pointerMap.insert(itemname, item); }
-       void* getItem(QString itemname) const { if 
(pointerMap.contains(itemname)) return pointerMap.value(itemname); else return 
NULL;}
+       void* getItem(QString itemname) const { if 
(pointerMap.contains(itemname)) return pointerMap.value(itemname, NULL); else 
return NULL;}
        QList< QPair<void*, int> > insertItemPos;
 private:
        QMap<QString,void*> pointerMap;

Modified: trunk/Scribus/scribus/util.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=21448&path=/trunk/Scribus/scribus/util.cpp
==============================================================================
--- trunk/Scribus/scribus/util.cpp      (original)
+++ trunk/Scribus/scribus/util.cpp      Sun Sep 18 16:18:50 2016
@@ -390,6 +390,8 @@
                        {
                                ww++;
                        }
+                       if (b.isSurrogate())
+                               ++a;
                        cc++;
                        Dat = b;
                        first = false;
@@ -410,6 +412,8 @@
                        {
                                wwN++;
                        }
+                       if (b.isSurrogate())
+                               ++a;
                        ccN++;
                        Dat = b;
                        first = false;
@@ -529,31 +533,45 @@
 const QString getStringFromSequence(NumFormat type, uint position, QString 
asterix)
 {
        QString retVal("");
+
+       const QString english("abcdefghijklmnopqrstuvwxyz");
+       const QString arabic("أبتثجحخدذرزسشصضطظعغفقكلم
نهوي");
+       const QString abjad("أبجدهوزحطيكلم
نسعفصقرشتثخذضظغ");
+
        switch( type )
        {
                case Type_1_2_3:
                        retVal=QString::number(position);
                        break;
+               case Type_1_2_3_ar:
+                       retVal=QLocale("ar").toString(position);
+                       break;
                case Type_A_B_C:
-                       retVal=numberToLetterSequence(position).toUpper();
+                       retVal = numberToLetterSequence(english, 
position).toUpper();
                        break;
                case Type_a_b_c:
-                       retVal=numberToLetterSequence(position);
+                       retVal = numberToLetterSequence(english, position);
+                       break;
+               case Type_Alphabet_ar:
+                       retVal = numberToLetterSequence(arabic, position);
+                       break;
+               case Type_Abjad_ar:
+                       retVal = numberToLetterSequence(abjad, position);
                        break;
                case Type_I_II_III:
-                       retVal=arabicToRoman(position);
+                       retVal = numberToRoman(position);
                        break;
                case Type_i_ii_iii:
                        //well, for lower case people will want that, even if 
its "wrong"
                        //ie, X=10, x=10000
-                       retVal=arabicToRoman(position).toLower();
+                       retVal = numberToRoman(position).toLower();
                        break;
                case Type_asterix:
                        for (uint a=1; a <= position; ++a)
                                retVal.append(asterix);
                        break;
                case Type_CJK:
-                       retVal=arabicToCJK(position);
+                       retVal = numberToCJK(position);
                case Type_None:
                        break;
                default:
@@ -562,24 +580,32 @@
        return retVal;
 }
 
-const QString numberToLetterSequence(uint i)
+const QString numberToLetterSequence(const QString& letters, uint num)
 {
        QString retVal("");
        unsigned digits = 1;
        unsigned offset = 0;
-       uint column=i-1;
-
-       if( column > 4058115285U ) return  QString("@");
-
-       for( unsigned limit = 26; column >= limit+offset; limit *= 26, digits++ 
)
+       uint column = num - 1;
+
+       // FIXME: what is the heck is this?
+       if (column > 4058115285U)
+               return  QString("@");
+
+       for (unsigned limit = 28; column >= limit+offset; limit *= 
letters.length(), digits++)
                offset += limit;
 
-       for( unsigned c = column - offset; digits; --digits, c/=26 )
-               retVal.prepend( QChar( 'a' + (c%26) ) );
+       for (unsigned c = column - offset; digits; --digits, c /= 
letters.length())
+       {
+               uint i = c % letters.length();
+               if (i < static_cast<uint>(letters.length()))
+                       retVal.prepend(letters.at(i));
+               else
+                       retVal.prepend(QChar::Null);
+       }
        return retVal;
 }
 
-const QString arabicToRoman(uint i)
+const QString numberToRoman(uint i)
 {
        QString roman("");
        int arabic = i;
@@ -772,6 +798,15 @@
        int ind = box->findText(text);
        if (ind > -1)
                box->setCurrentIndex(ind);
+       box->blockSignals(sigBlocked);
+}
+
+void removeComboItem(QComboBox *box, QString text)
+{
+       bool sigBlocked = box->blockSignals(true);
+       int ind = box->findText(text);
+       if (ind > -1)
+               box->removeItem(ind);
        box->blockSignals(sigBlocked);
 }
 
@@ -1133,7 +1168,7 @@
 }
 
 
-const QString arabicToCJK(uint i)
+const QString numberToCJK(uint i)
 {
        QString result;
        if (i<10)

Modified: trunk/Scribus/scribus/util.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=21448&path=/trunk/Scribus/scribus/util.h
==============================================================================
--- trunk/Scribus/scribus/util.h        (original)
+++ trunk/Scribus/scribus/util.h        Sun Sep 18 16:18:50 2016
@@ -22,6 +22,7 @@
 #include <QString>
 #include <QStringList>
 #include <QVector>
+#include <QTransform>
 
 #include "pagestructs.h"
 #include "scribusapi.h"
@@ -124,14 +125,15 @@
 //asterix is QString used in numeration when number is presented as few chars, 
like *, **, *** etc
 //default is '*' but can be used any string
 const QString SCRIBUS_API getStringFromSequence(NumFormat type, uint position, 
QString asterix="*");
-const QString SCRIBUS_API arabicToRoman(uint i);
-const QString SCRIBUS_API arabicToCJK(uint i);
+const QString SCRIBUS_API numberToRoman(uint i);
+const QString SCRIBUS_API numberToCJK(uint i);
 QChar SCRIBUS_API cjkDigit(uint i);
-const QString SCRIBUS_API numberToLetterSequence(uint i);
+const QString SCRIBUS_API numberToLetterSequence(const QString& letters, uint 
num);
 void SCRIBUS_API parsePagesString(QString pages, std::vector<int>* pageNs, int 
sourcePageCount);
 
 QString SCRIBUS_API readLinefromDataStream(QDataStream &s);
 void SCRIBUS_API setCurrentComboItem(QComboBox *box, QString text);
+void SCRIBUS_API removeComboItem(QComboBox *box, QString text);
 
 QString SCRIBUS_API readAdobeUniCodeString(QDataStream &s);
 QString SCRIBUS_API readAdobeUniCodeString16(QDataStream &s);
@@ -153,4 +155,5 @@
  * if exist then seprator and numbers are pre/append to name while it will be 
unique
 */
 void SCRIBUS_API getUniqueName(QString &name, QStringList list, QString 
separator = "", bool prepend = false);
+
 #endif


_______________________________________________
scribus-commit mailing list
scribus-commit@lists.scribus.net
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to