Subversion Repositories Scribus

Rev

Rev 4689 | Rev 5184 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4430 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
3 paul 7
/***************************************************************************
8
                          serializer.cpp  -  description
9
                             -------------------
10
    begin                : Sat May 5 2001
11
    copyright            : (C) 2001 by Franz Schmid
12
    email                : Franz.Schmid@altmuehlnet.de
13
 ***************************************************************************/
14
 
15
/***************************************************************************
16
 *                                                                         *
17
 *   This program is free software; you can redistribute it and/or modify  *
18
 *   it under the terms of the GNU General Public License as published by  *
19
 *   the Free Software Foundation; either version 2 of the License, or     *
20
 *   (at your option) any later version.                                   *
21
 *                                                                         *
22
 ***************************************************************************/
23
 
24
#include "serializer.h"
217 Franz 25
#include "scribusdoc.h"
456 fschmid 26
#include "pageitem.h"
3 paul 27
#include <qfile.h>
28
#include <qtextstream.h>
29
#include <qtextcodec.h>
5064 cbradney 30
#include "util.h"
2534 craig 31
 
3 paul 32
Serializer::Serializer(QString name)
33
{
34
        Filename = name;
35
        Objekt = "";
36
}
37
 
38
QString Serializer::GetObjekt()
39
{
40
        return Objekt;
41
}
42
 
43
void Serializer::PutText(PageItem *Item)
44
{
167 Franz 45
        uint a;
46
        QString Dat = "";
1065 cbradney 47
        QPtrList<ScText> y = Item->itemText;
167 Franz 48
        for (a=0; a<y.count(); ++a)
217 Franz 49
        {
3 paul 50
                QString b = y.at(a)->ch;
51
                if (b == QChar(13))
52
                        b = "\n";
217 Franz 53
                Dat += b;
54
        }
19 Franz 55
        Objekt = Dat;
3 paul 56
}
57
 
24 Franz 58
void Serializer::GetText(PageItem *Item, int Absatz, QString font, int size, bool Append)
3 paul 59
{
4689 mrdocs 60
        ScText *hg;
1957 cbradney 61
        PageItem *nextItem;
105 Franz 62
        PageItem *it = Item;
4084 cbradney 63
        ScribusDoc* doku = it->document();
3 paul 64
        uint a;
65
        if (!Append)
167 Franz 66
        {
1957 cbradney 67
                nextItem = Item;
68
                while (nextItem != 0)
167 Franz 69
                {
1957 cbradney 70
                        if (nextItem->BackBox != 0)
71
                                nextItem = nextItem->BackBox;
105 Franz 72
                        else
73
                                break;
167 Franz 74
                }
1957 cbradney 75
                it = nextItem;
76
                while (nextItem != 0)
167 Franz 77
                {
2443 fschmid 78
                        for (ScText *it = nextItem->itemText.first(); it != 0; it = nextItem->itemText.next())
79
                        {
80
                                if ((it->ch == QChar(25)) && (it->cembedded != 0))
2499 fschmid 81
                                {
2447 fschmid 82
                                        doku->FrameItems.remove(it->cembedded);
2499 fschmid 83
                                        delete it->cembedded;
84
                                }
2443 fschmid 85
                        }
1957 cbradney 86
                        nextItem->itemText.clear();
87
                        nextItem->CPos = 0;
88
                        nextItem = nextItem->NextBox;
3 paul 89
                }
3628 cbradney 90
                doku->updateFrameItems();
167 Franz 91
        }
3 paul 92
        for (a=0; a<Objekt.length(); ++a)
167 Franz 93
        {
105 Franz 94
                if ((Objekt.at(a) == QChar(0)) || (Objekt.at(a) == QChar(13)))
95
                        continue;
1065 cbradney 96
                hg = new ScText;
105 Franz 97
                hg->ch = Objekt.at(a);
98
                if ((hg->ch == QChar(10)) || (hg->ch == QChar(5)))
99
                        hg->ch = QChar(13);
2877 cbradney 100
                if (!doku->docParagraphStyles[Absatz].Font.isEmpty())
217 Franz 101
                {
1789 fschmid 102
                        hg->cfont = (*doku->AllFonts)[doku->docParagraphStyles[Absatz].Font];
1065 cbradney 103
                        hg->csize = doku->docParagraphStyles[Absatz].FontSize;
104
                        hg->cstyle = doku->docParagraphStyles[Absatz].FontEffect;
105
                        hg->ccolor = doku->docParagraphStyles[Absatz].FColor;
106
                        hg->cshade = doku->docParagraphStyles[Absatz].FShade;
107
                        hg->cstroke = doku->docParagraphStyles[Absatz].SColor;
108
                        hg->cshade2 = doku->docParagraphStyles[Absatz].SShade;
2273 fschmid 109
                        hg->cshadowx = doku->docParagraphStyles[Absatz].txtShadowX;
110
                        hg->cshadowy = doku->docParagraphStyles[Absatz].txtShadowY;
111
                        hg->coutline = doku->docParagraphStyles[Absatz].txtOutline;
112
                        hg->cunderpos = doku->docParagraphStyles[Absatz].txtUnderPos;
113
                        hg->cunderwidth = doku->docParagraphStyles[Absatz].txtUnderWidth;
114
                        hg->cstrikepos = doku->docParagraphStyles[Absatz].txtStrikePos;
115
                        hg->cstrikewidth = doku->docParagraphStyles[Absatz].txtStrikeWidth;
2379 fschmid 116
                        hg->cscale = doku->docParagraphStyles[Absatz].scaleH;
117
                        hg->cscalev = doku->docParagraphStyles[Absatz].scaleV;
118
                        hg->cbase = doku->docParagraphStyles[Absatz].baseOff;
2382 fschmid 119
                        hg->cextra = doku->docParagraphStyles[Absatz].kernVal;
217 Franz 120
                }
121
                else
122
                {
1789 fschmid 123
                        hg->cfont = (*doku->AllFonts)[font];
217 Franz 124
                        hg->ccolor = it->TxtFill;
125
                        hg->cshade = it->ShTxtFill;
126
                        hg->cstroke = it->TxtStroke;
127
                        hg->cshade2 = it->ShTxtStroke;
633 fschmid 128
                        hg->csize = size;
217 Franz 129
                        hg->cstyle = it->TxTStyle;
2273 fschmid 130
                        hg->cshadowx = it->TxtShadowX;
131
                        hg->cshadowy = it->TxtShadowY;
132
                        hg->coutline = it->TxtOutline;
133
                        hg->cunderpos = it->TxtUnderPos;
134
                        hg->cunderwidth = it->TxtUnderWidth;
135
                        hg->cstrikepos = it->TxtStrikePos;
136
                        hg->cstrikewidth = it->TxtStrikeWidth;
2379 fschmid 137
                        hg->cscale = it->TxtScale;
138
                        hg->cscalev = it->TxtScaleV;
139
                        hg->cbase = it->TxtBase;
2382 fschmid 140
                        hg->cextra = 0;
217 Franz 141
                }
3 paul 142
                hg->cselect = false;
217 Franz 143
                hg->cab = Absatz;
3 paul 144
                hg->xp = 0;
145
                hg->yp = 0;
146
                hg->PRot = 0;
147
                hg->PtransX = 0;
148
                hg->PtransY = 0;
2434 fschmid 149
                hg->cembedded = 0;
3 paul 150
                if (Append)
1065 cbradney 151
                        it->itemText.insert(it->CPos, hg);
3 paul 152
                else
1065 cbradney 153
                        it->itemText.append(hg);
217 Franz 154
                it->CPos += 1;
155
        }
3 paul 156
}
157
 
19 Franz 158
bool Serializer::Write(QString Cod)
3 paul 159
{
19 Franz 160
        QTextCodec *codec;
2877 cbradney 161
        if (Cod.isEmpty())
19 Franz 162
                codec = QTextCodec::codecForLocale();
163
        else
164
                codec = QTextCodec::codecForName(Cod);
167 Franz 165
        QCString dec = codec->fromUnicode( Objekt );
3 paul 166
        QFile f(Filename);
167
        bool ret = false;
168
        if (f.open(IO_WriteOnly))
167 Franz 169
        {
19 Franz 170
                f.writeBlock(dec, dec.length());
3 paul 171
                f.close();
172
                ret = true;
167 Franz 173
        }
3 paul 174
        return ret;
175
}
176
 
15 Franz 177
bool Serializer::Read(QString Cod)
3 paul 178
{
15 Franz 179
        QTextCodec *codec;
3 paul 180
        bool tmp = loadText(Filename, &Objekt);
2877 cbradney 181
        if (Cod.isEmpty())
15 Franz 182
                codec = QTextCodec::codecForLocale();
183
        else
184
                codec = QTextCodec::codecForName(Cod);
167 Franz 185
        QString dec = codec->toUnicode( Objekt );
15 Franz 186
        Objekt = dec;
3 paul 187
        return tmp;
188
}