~ubuntu-branches/ubuntu/oneiric/koffice/oneiric-updates

« back to all changes in this revision

Viewing changes to libs/odf/KoOdfNumberStyles.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Alessandro Ghersi
  • Date: 2010-10-27 17:52:57 UTC
  • mfrom: (0.12.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20101027175257-s04zqqk5bs8ckm9o
Tags: 1:2.2.83-0ubuntu1
* Merge with Debian git remaining changes:
 - Add build-deps on librcps-dev, opengtl-dev, libqtgtl-dev, freetds-dev,
   create-resources, libspnav-dev
 - Remove needless build-dep on libwv2-dev
 - koffice-libs recommends create-resources
 - krita recommends pstoedit
 - Keep our patches
* New upstream release 2.3 beta 3
  - Remove debian/patches fixed by upstream
  - Update install files

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
#include <KoXmlReader.h>
31
31
#include <KoXmlWriter.h>
32
32
 
 
33
namespace KoOdfNumberStyles
 
34
{
 
35
 
 
36
    static bool saveOdfTimeFormat(KoXmlWriter &elementWriter, QString &format, QString &text, bool &antislash);
 
37
    static void parseOdfDateKlocale(KoXmlWriter &elementWriter, QString &format, QString &text);
 
38
    static bool saveOdfKlocaleTimeFormat(KoXmlWriter &elementWriter, QString &format, QString &text);
 
39
    static void parseOdfTimeKlocale(KoXmlWriter &elementWriter, QString &format, QString &text);
 
40
    static void addKofficeNumericStyleExtension(KoXmlWriter &elementWriter, const QString &_suffix, const QString &_prefix);
 
41
 
 
42
 
33
43
// OO spec 2.5.4. p68. Conversion to Qt format: see qdate.html
34
44
// OpenCalcImport::loadFormat has similar code, but slower, intermixed with other stuff,
35
45
// lacking long-textual forms.
36
 
QPair<QString, KoOdfNumberStyles::NumericStyleFormat> KoOdfNumberStyles::loadOdfNumberStyle(const KoXmlElement& parent)
 
46
QPair<QString, NumericStyleFormat> loadOdfNumberStyle(const KoXmlElement &parent)
37
47
{
38
48
    NumericStyleFormat dataStyle;
39
49
 
83
93
            }
84
94
            // TODO the spec has a strange mention of number:format-source
85
95
            else if (e.attributeNS(KoXmlNS::number, "textual", QString()) == "true") {
86
 
                format += shortForm ? "MMM" : "MMMM";
 
96
                bool isExtraShort = false;      // find out if we have to use the extra-short month name (just 1st letter)
 
97
                if (e.attributeNS(KoXmlNS::koffice, "number-length", QString()) == "extra-short") {
 
98
                    isExtraShort = true;
 
99
                }
 
100
 
 
101
                if (!isExtraShort) {            // for normal month format (first 3 letters or complete name)
 
102
                    format += shortForm ? "MMM" : "MMMM";
 
103
                } else {                        // for the extra-short month name use 'X' as a special mark
 
104
                    format += "X";
 
105
                }
87
106
            } else { // month number
88
107
                format += shortForm ? "M" : "MM";
89
108
            }
259
278
    }
260
279
 
261
280
    const QString styleName = parent.attributeNS(KoXmlNS::style, "name", QString());
262
 
    
 
281
 
263
282
kDebug()<<"99 *****************************************************************************";
264
 
//Q_ASSERT(false);    
 
283
//Q_ASSERT(false);
265
284
    kDebug(30003) << "data style:" << styleName << " qt format=" << format;
266
285
    if (!prefix.isEmpty()) {
267
286
        kDebug(30003) << " format.left( prefix.length() ) :" << format.left(prefix.length()) << " prefix :" << prefix;
296
315
        } \
297
316
    }
298
317
 
299
 
void KoOdfNumberStyles::parseOdfTimeKlocale(KoXmlWriter &elementWriter, QString & format, QString & text)
 
318
void parseOdfTimeKlocale(KoXmlWriter &elementWriter, QString &format, QString &text)
300
319
{
301
320
    kDebug(30003) << "parseOdfTimeKlocale(KoXmlWriter &elementWriter, QString & format, QString & text ) :" << format;
302
321
    do {
308
327
    addTextNumber(text, elementWriter);
309
328
}
310
329
 
311
 
bool KoOdfNumberStyles::saveOdfKlocaleTimeFormat(KoXmlWriter &elementWriter, QString & format, QString & text)
 
330
bool saveOdfKlocaleTimeFormat(KoXmlWriter &elementWriter, QString &format, QString &text)
312
331
{
313
332
    bool changed = false;
314
333
    if (format.startsWith("%H")) {   //hh
364
383
}
365
384
 
366
385
 
367
 
bool KoOdfNumberStyles::saveOdfTimeFormat(KoXmlWriter &elementWriter, QString & format, QString & text, bool &antislash)
 
386
bool saveOdfTimeFormat(KoXmlWriter &elementWriter, QString &format, QString &text, bool &antislash)
368
387
{
369
388
    bool changed = false;
370
389
    //we can also add time to date.
432
451
    return changed;
433
452
}
434
453
 
435
 
QString KoOdfNumberStyles::saveOdfTimeStyle(KoGenStyles &mainStyles, const QString & _format, bool klocaleFormat,
436
 
        const QString & _prefix, const QString & _suffix)
 
454
QString saveOdfTimeStyle(KoGenStyles &mainStyles, const QString &_format, bool klocaleFormat,
 
455
        const QString &_prefix, const QString &_suffix)
437
456
{
438
457
    Q_UNUSED(_prefix);
439
458
    Q_UNUSED(_suffix);
440
 
    kDebug(30003) << "QString KoOdfNumberStyles::saveOdfTimeStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
 
459
    //kDebug(30003) << "QString KoOdfNumberStyles::saveOdfTimeStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
441
460
    QString format(_format);
442
461
    KoGenStyle currentStyle(KoGenStyle::NumericTimeStyle);
443
462
    QBuffer buffer;
468
487
}
469
488
 
470
489
//convert klocale string to good format
471
 
void KoOdfNumberStyles::parseOdfDateKlocale(KoXmlWriter &elementWriter, QString & format, QString & text)
 
490
void parseOdfDateKlocale(KoXmlWriter &elementWriter, QString &format, QString &text)
472
491
{
473
 
    kDebug(30003) << "KoOdfNumberStyles::parseOdfDateKlocale(KoXmlWriter &elementWriter, QString & format, QString & text ) :" << format;
 
492
    kDebug(30003) << format;
474
493
    do {
475
494
        if (format.startsWith("%Y")) {
476
495
            addTextNumber(text, elementWriter);
551
570
    addTextNumber(text, elementWriter);
552
571
}
553
572
 
554
 
QString KoOdfNumberStyles::saveOdfDateStyle(KoGenStyles &mainStyles, const QString & _format, bool klocaleFormat,
555
 
        const QString & _prefix, const QString & _suffix)
 
573
QString saveOdfDateStyle(KoGenStyles &mainStyles, const QString &_format, bool klocaleFormat,
 
574
        const QString &_prefix, const QString &_suffix)
556
575
{
557
576
    Q_UNUSED(_prefix);
558
577
    Q_UNUSED(_suffix);
559
 
    kDebug(30003) << "QString KoOdfNumberStyles::saveOdfDateStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
 
578
    //kDebug(30003) << _format;
560
579
    QString format(_format);
561
580
 
562
581
    // Not supported into Qt: "era" "week-of-year" "quarter"
576
595
                format = format.remove(0, 1);
577
596
            }
578
597
            //TODO implement loading ! What is it ?
579
 
            else if (format.startsWith("MMMMM")) {
 
598
            else if (format.startsWith("MMMMM")) {        // MMMMM is extra-short month name (only 1st character)
580
599
                addTextNumber(text, elementWriter);
581
600
                elementWriter.startElement("number:month");
582
601
                elementWriter.addAttribute("number:textual", "true");
 
602
                elementWriter.addAttribute("koffice:number-length", "extra-short");
583
603
                elementWriter.endElement();
584
604
                format = format.remove(0, 5);
585
605
            } else if (format.startsWith("MMMM")) {
693
713
}
694
714
 
695
715
 
696
 
QString KoOdfNumberStyles::saveOdfFractionStyle(KoGenStyles &mainStyles, const QString & _format,
 
716
QString saveOdfFractionStyle(KoGenStyles &mainStyles, const QString &_format,
697
717
        const QString &_prefix, const QString &_suffix)
698
718
{
699
 
    kDebug(30003) << "QString saveOdfFractionStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
 
719
    //kDebug(30003) << "QString saveOdfFractionStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
700
720
    QString format(_format);
701
721
 
702
722
    KoGenStyle currentStyle(KoGenStyle::NumericFractionStyle);
752
772
}
753
773
 
754
774
 
755
 
QString KoOdfNumberStyles::saveOdfNumberStyle(KoGenStyles &mainStyles, const QString & _format,
 
775
QString saveOdfNumberStyle(KoGenStyles &mainStyles, const QString &_format,
756
776
        const QString &_prefix, const QString &_suffix)
757
777
{
758
 
    kDebug(30003) << "QString saveOdfNumberStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
 
778
    //kDebug(30003) << "QString saveOdfNumberStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
759
779
    QString format(_format);
760
780
 
761
781
    KoGenStyle currentStyle(KoGenStyle::NumericNumberStyle);
780
800
    text = _prefix ;
781
801
    addTextNumber(text, elementWriter);
782
802
    elementWriter.startElement("number:number");
783
 
    kDebug(30003) << " decimalplaces :" << decimalplaces << " integerdigits :" << integerdigits;
 
803
    //kDebug(30003) << " decimalplaces :" << decimalplaces << " integerdigits :" << integerdigits;
784
804
    if (!beforeSeparator)
785
805
        elementWriter.addAttribute("number:decimal-places", decimalplaces);
786
806
    elementWriter.addAttribute("number:min-integer-digits", integerdigits);
795
815
    return mainStyles.insert(currentStyle, "N");
796
816
}
797
817
 
798
 
QString KoOdfNumberStyles::saveOdfPercentageStyle(KoGenStyles &mainStyles, const QString & _format,
 
818
QString saveOdfPercentageStyle(KoGenStyles &mainStyles, const QString &_format,
799
819
        const QString &_prefix, const QString &_suffix)
800
820
{
801
821
    //<number:percentage-style style:name="N11">
803
823
    //<number:text>%</number:text>
804
824
    //</number:percentage-style>
805
825
 
806
 
    kDebug(30003) << "QString saveOdfPercentageStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
 
826
    //kDebug(30003) << "QString saveOdfPercentageStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
807
827
    QString format(_format);
808
828
 
809
829
    KoGenStyle currentStyle(KoGenStyle::NumericPercentageStyle);
845
865
 
846
866
}
847
867
 
848
 
QString KoOdfNumberStyles::saveOdfScientificStyle(KoGenStyles &mainStyles, const QString & _format,
 
868
QString saveOdfScientificStyle(KoGenStyles &mainStyles, const QString &_format,
849
869
        const QString &_prefix, const QString &_suffix)
850
870
{
851
871
    //<number:number-style style:name="N60">
853
873
    //</number:number-style>
854
874
 
855
875
    //example 000,000e+0000
856
 
    kDebug(30003) << "QString saveOdfScientificStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
 
876
    //kDebug(30003) << "QString saveOdfScientificStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
857
877
    QString format(_format);
858
878
 
859
879
    KoGenStyle currentStyle(KoGenStyle::NumericScientificStyle);
899
919
    addTextNumber(text, elementWriter);
900
920
 
901
921
    elementWriter.startElement("number:scientific-number");
902
 
    kDebug(30003) << " decimalplace :" << decimalplace << " integerdigits :" << integerdigits << " exponentdigits :" << exponentdigits;
 
922
    //kDebug(30003) << " decimalplace :" << decimalplace << " integerdigits :" << integerdigits << " exponentdigits :" << exponentdigits;
903
923
    if (!beforeSeparator)
904
924
        elementWriter.addAttribute("number:decimal-places", decimalplace);
905
925
    elementWriter.addAttribute("number:min-integer-digits", integerdigits);
915
935
    return mainStyles.insert(currentStyle, "N");
916
936
}
917
937
 
918
 
QString KoOdfNumberStyles::saveOdfCurrencyStyle(KoGenStyles &mainStyles,
919
 
        const QString & _format, const QString &symbol,
 
938
QString saveOdfCurrencyStyle(KoGenStyles &mainStyles,
 
939
        const QString &_format, const QString &symbol,
920
940
        const QString &_prefix, const QString &_suffix)
921
941
{
922
942
 
926
946
    //<number:currency-symbol>VEB</number:currency-symbol>
927
947
    //</number:currency-style>
928
948
 
929
 
    kDebug(30003) << "QString saveOdfCurrencyStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
 
949
    //kDebug(30003) << "QString saveOdfCurrencyStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
930
950
    QString format(_format);
931
951
 
932
952
    KoGenStyle currentStyle(KoGenStyle::NumericCurrencyStyle);
953
973
    addTextNumber(text, elementWriter);
954
974
 
955
975
    elementWriter.startElement("number:number");
956
 
    kDebug(30003) << " decimalplaces :" << decimalplaces << " integerdigits :" << integerdigits;
 
976
    //kDebug(30003) << " decimalplaces :" << decimalplaces << " integerdigits :" << integerdigits;
957
977
    if (!beforeSeparator)
958
978
        elementWriter.addAttribute("number:decimal-places", decimalplaces);
959
979
    elementWriter.addAttribute("number:min-integer-digits", integerdigits);
964
984
    addKofficeNumericStyleExtension(elementWriter, _suffix, _prefix);
965
985
 
966
986
    elementWriter.startElement("number:currency-symbol");
967
 
    kDebug(30003) << " currency-symbol:" << symbol;
 
987
    //kDebug(30003) << " currency-symbol:" << symbol;
968
988
    elementWriter.addTextNode(symbol.toUtf8());
969
989
    elementWriter.endElement();
970
990
 
973
993
    return mainStyles.insert(currentStyle, "N");
974
994
}
975
995
 
976
 
QString KoOdfNumberStyles::saveOdfTextStyle(KoGenStyles &mainStyles, const QString & _format, const QString &_prefix, const QString &_suffix)
 
996
QString saveOdfTextStyle(KoGenStyles &mainStyles, const QString &_format, const QString &_prefix, const QString &_suffix)
977
997
{
978
998
 
979
999
    //<number:text-style style:name="N100">
980
1000
    //<number:text-content/>
981
1001
    ///</number:text-style>
982
1002
 
983
 
    kDebug(30003) << "QString saveOdfTextStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
 
1003
    //kDebug(30003) << "QString saveOdfTextStyle( KoGenStyles &mainStyles, const QString & _format ) :" << _format;
984
1004
    QString format(_format);
985
1005
 
986
1006
    KoGenStyle currentStyle(KoGenStyle::NumericTextStyle);
1008
1028
 
1009
1029
//This is an extension of numeric style. For the moment we used namespace of
1010
1030
//oasis format for specific koffice extension. Change it for the future.
1011
 
void KoOdfNumberStyles::addKofficeNumericStyleExtension(KoXmlWriter & elementWriter, const QString &_suffix, const QString &_prefix)
 
1031
void addKofficeNumericStyleExtension(KoXmlWriter &elementWriter, const QString &_suffix, const QString &_prefix)
1012
1032
{
1013
1033
    if (!_suffix.isEmpty()) {
1014
1034
        elementWriter.startElement("number:suffix");
1021
1041
        elementWriter.endElement();
1022
1042
    }
1023
1043
}
 
1044
}