Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
2111 cbradney 1
/***************************************************************************
2
        begin                : 2005
3
        copyright            : (C) 2005 by Franz Schmid
4
        email                : Franz.Schmid@altmuehlnet.de
5
        copyright            : (C) 2005 by Craig Bradney
6
        email                : cbradney@zip.com.au
7
***************************************************************************/
8
 
9
/***************************************************************************
10
*                                                                         *
11
*   ScApp program is free software; you can redistribute it and/or modify  *
12
*   it under the terms of the GNU General Public License as published by  *
13
*   the Free Software Foundation; either version 2 of the License, or     *
14
*   (at your option) any later version.                                   *
15
*                                                                         *
16
***************************************************************************/
17
 
18
#include "documentchecker.h"
19
#include "pageitem.h"
20
#include "scribusstructs.h"
21
#include "scribusdoc.h"
2714 craig 22
#include "page.h"
2111 cbradney 23
 
24
void DocumentChecker::checkDocument(ScribusDoc *currDoc)
25
{
26
        PageItem* currItem;
27
        QString chx;
28
        struct checkerPrefs checkerSettings;
29
        checkerSettings.ignoreErrors = currDoc->checkerProfiles[currDoc->curCheckProfile].ignoreErrors;
30
        checkerSettings.autoCheck = currDoc->checkerProfiles[currDoc->curCheckProfile].autoCheck;
31
        checkerSettings.checkGlyphs = currDoc->checkerProfiles[currDoc->curCheckProfile].checkGlyphs;
32
        checkerSettings.checkOrphans = currDoc->checkerProfiles[currDoc->curCheckProfile].checkOrphans;
33
        checkerSettings.checkOverflow = currDoc->checkerProfiles[currDoc->curCheckProfile].checkOverflow;
34
        checkerSettings.checkPictures = currDoc->checkerProfiles[currDoc->curCheckProfile].checkPictures;
35
        checkerSettings.checkResolution = currDoc->checkerProfiles[currDoc->curCheckProfile].checkResolution;
36
        checkerSettings.checkTransparency = currDoc->checkerProfiles[currDoc->curCheckProfile].checkTransparency;
37
        checkerSettings.minResolution = currDoc->checkerProfiles[currDoc->curCheckProfile].minResolution;
38
        checkerSettings.checkAnnotations = currDoc->checkerProfiles[currDoc->curCheckProfile].checkAnnotations;
39
        checkerSettings.checkRasterPDF = currDoc->checkerProfiles[currDoc->curCheckProfile].checkRasterPDF;
40
        currDoc->docItemErrors.clear();
41
        currDoc->masterItemErrors.clear();
42
        errorCodes itemError;
43
        for (uint d = 0; d < currDoc->MasterItems.count(); ++d)
44
        {
45
                currItem = currDoc->MasterItems.at(d);
46
                itemError.clear();
47
                if (((currItem->isAnnotation) || (currItem->isBookmark)) && (checkerSettings.checkAnnotations))
48
                        itemError.insert(7, 0);
49
                if (((currItem->fillTransparency() != 0.0) || (currItem->lineTransparency() != 0.0)) && (checkerSettings.checkTransparency))
50
                        itemError.insert(6, 0);
3866 fschmid 51
                if ((currItem->GrType != 0) && (checkerSettings.checkTransparency))
52
                {
53
                        QPtrVector<VColorStop> colorStops = currItem->fill_gradient.colorStops();
54
                        for( uint offset = 0 ; offset < colorStops.count() ; offset++ )
55
                        {
56
                                if (colorStops[offset]->opacity != 1.0)
57
                                {
58
                                        itemError.insert(6, 0);
59
                                        break;
60
                                }
61
                        }
62
                }
2111 cbradney 63
                if ((currItem->OwnPage == -1) && (checkerSettings.checkOrphans))
64
                        itemError.insert(3, 0);
3625 avox 65
                if (currItem->asImageFrame())
2111 cbradney 66
                {
67
                        if ((!currItem->PicAvail) && (checkerSettings.checkPictures))
68
                                itemError.insert(4, 0);
69
                        else
70
                        {
3985 cbradney 71
                                if  (((qRound(72.0 / currItem->imageXScale()) < checkerSettings.minResolution) || (qRound(72.0 / currItem->imageYScale()) < checkerSettings.minResolution))
2111 cbradney 72
                                          && (currItem->isRaster) && (checkerSettings.checkResolution))
73
                                        itemError.insert(5, 0);
74
                                QFileInfo fi = QFileInfo(currItem->Pfile);
75
                                QString ext = fi.extension(false).lower();
76
                                if ((ext == "pdf") && (checkerSettings.checkRasterPDF))
77
                                        itemError.insert(8, 0);
78
                        }
79
                }
3625 avox 80
                if ((currItem->asTextFrame()) || (currItem->asPathText()))
2111 cbradney 81
                {
82
                        if ((currItem->itemText.count() > currItem->MaxChars) && (checkerSettings.checkOverflow))
83
                                itemError.insert(2, 0);
84
                        for (uint e = 0; e < currItem->itemText.count(); ++e)
85
                        {
86
                                uint chr = currItem->itemText.at(e)->ch[0].unicode();
2447 fschmid 87
                                if ((chr == 13) || (chr == 32) || (chr == 29) || (chr == 28) || (chr == 27) || (chr == 26) || (chr == 25))
2111 cbradney 88
                                        continue;
2285 fschmid 89
                                if ((currItem->itemText.at(e)->cstyle & 64) || (currItem->itemText.at(e)->cstyle & 32))
2111 cbradney 90
                                {
91
                                        chx = currItem->itemText.at(e)->ch;
92
                                        if (chx.upper() != currItem->itemText.at(e)->ch)
93
                                                chx = chx.upper();
94
                                        chr = chx[0].unicode();
95
                                }
2285 fschmid 96
                                if (chr == 9)
97
                                {
98
                                        for (uint t1 = 0; t1 < currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues.count(); t1++)
99
                                        {
100
                                                if (currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues[t1].tabFillChar.isNull())
101
                                                        continue;
102
                                                chx = QString(currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues[t1].tabFillChar);
103
                                                if ((currItem->itemText.at(e)->cstyle & 64) || (currItem->itemText.at(e)->cstyle & 32))
104
                                                {
105
                                                        if (chx.upper() != QString(currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues[t1].tabFillChar))
106
                                                                chx = chx.upper();
107
                                                }
108
                                                chr = chx[0].unicode();
109
                                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(chr)) && (checkerSettings.checkGlyphs))
110
                                                        itemError.insert(1, 0);
111
                                        }
112
                                        for (uint t1 = 0; t1 < currItem->TabValues.count(); t1++)
113
                                        {
114
                                                if (currItem->TabValues[t1].tabFillChar.isNull())
115
                                                        continue;
116
                                                chx = QString(currItem->TabValues[t1].tabFillChar);
117
                                                if ((currItem->itemText.at(e)->cstyle & 64) || (currItem->itemText.at(e)->cstyle & 32))
118
                                                {
119
                                                        if (chx.upper() != QString(currItem->TabValues[t1].tabFillChar))
120
                                                                chx = chx.upper();
121
                                                }
122
                                                chr = chx[0].unicode();
123
                                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(chr)) && (checkerSettings.checkGlyphs))
124
                                                        itemError.insert(1, 0);
125
                                        }
126
                                        continue;
127
                                }
2111 cbradney 128
                                if (chr == 30)
129
                                {
130
                                        for (uint numco = 0x30; numco < 0x3A; ++numco)
131
                                        {
132
                                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(numco)) && (checkerSettings.checkGlyphs))
133
                                                        itemError.insert(1, 0);
134
                                        }
135
                                        continue;
136
                                }
137
                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(chr)) && (checkerSettings.checkGlyphs))
138
                                        itemError.insert(1, 0);
139
                        }
140
                }
141
                if (itemError.count() != 0)
142
                        currDoc->masterItemErrors.insert(currItem->ItemNr, itemError);
143
        }
144
        for (uint d = 0; d < currDoc->DocItems.count(); ++d)
145
        {
146
                currItem = currDoc->DocItems.at(d);
147
                itemError.clear();
148
                if (((currItem->fillTransparency() != 0.0) || (currItem->lineTransparency() != 0.0)) && (checkerSettings.checkTransparency))
149
                        itemError.insert(6, 0);
3866 fschmid 150
                if ((currItem->GrType != 0) && (checkerSettings.checkTransparency))
151
                {
152
                        QPtrVector<VColorStop> colorStops = currItem->fill_gradient.colorStops();
153
                        for( uint offset = 0 ; offset < colorStops.count() ; offset++ )
154
                        {
155
                                if (colorStops[offset]->opacity != 1.0)
156
                                {
157
                                        itemError.insert(6, 0);
158
                                        break;
159
                                }
160
                        }
161
                }
2111 cbradney 162
                if (((currItem->isAnnotation) || (currItem->isBookmark)) && (checkerSettings.checkAnnotations))
163
                        itemError.insert(7, 0);
164
                if ((currItem->OwnPage == -1) && (checkerSettings.checkOrphans))
165
                        itemError.insert(3, 0);
3625 avox 166
                if (currItem->asImageFrame())
2111 cbradney 167
                {
168
                        if ((!currItem->PicAvail) && (checkerSettings.checkPictures))
169
                                itemError.insert(4, 0);
170
                        else
171
                        {
3985 cbradney 172
                                if  (((qRound(72.0 / currItem->imageYScale()) < checkerSettings.minResolution) || (qRound(72.0 / currItem->imageYScale()) < checkerSettings.minResolution))
2111 cbradney 173
                                           && (currItem->isRaster) && (checkerSettings.checkResolution))
174
                                        itemError.insert(5, 0);
175
                                QFileInfo fi = QFileInfo(currItem->Pfile);
176
                                QString ext = fi.extension(false).lower();
177
                                if ((ext == "pdf") && (checkerSettings.checkRasterPDF))
178
                                        itemError.insert(8, 0);
179
                        }
180
                }
3625 avox 181
                if ((currItem->asTextFrame()) || (currItem->asPathText()))
2111 cbradney 182
                {
183
                        if ((currItem->itemText.count() > currItem->MaxChars) && (checkerSettings.checkOverflow))
184
                                itemError.insert(2, 0);
185
                        for (uint e = 0; e < currItem->itemText.count(); ++e)
186
                        {
187
                                uint chr = currItem->itemText.at(e)->ch[0].unicode();
2447 fschmid 188
                                if ((chr == 13) || (chr == 32) || (chr == 29) || (chr == 28) || (chr == 27) || (chr == 26) || (chr == 25))
2111 cbradney 189
                                        continue;
2285 fschmid 190
                                if ((currItem->itemText.at(e)->cstyle & 64) || (currItem->itemText.at(e)->cstyle & 32))
2111 cbradney 191
                                {
192
                                        chx = currItem->itemText.at(e)->ch;
193
                                        if (chx.upper() != currItem->itemText.at(e)->ch)
194
                                                chx = chx.upper();
195
                                        chr = chx[0].unicode();
196
                                }
2285 fschmid 197
                                if (chr == 9)
198
                                {
199
                                        for (uint t1 = 0; t1 < currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues.count(); t1++)
200
                                        {
201
                                                if (currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues[t1].tabFillChar.isNull())
202
                                                        continue;
203
                                                chx = QString(currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues[t1].tabFillChar);
204
                                                if ((currItem->itemText.at(e)->cstyle & 64) || (currItem->itemText.at(e)->cstyle & 32))
205
                                                {
206
                                                        if (chx.upper() != QString(currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues[t1].tabFillChar))
207
                                                                chx = chx.upper();
208
                                                }
209
                                                chr = chx[0].unicode();
210
                                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(chr)) && (checkerSettings.checkGlyphs))
211
                                                        itemError.insert(1, 0);
212
                                        }
213
                                        for (uint t1 = 0; t1 < currItem->TabValues.count(); t1++)
214
                                        {
215
                                                if (currItem->TabValues[t1].tabFillChar.isNull())
216
                                                        continue;
217
                                                chx = QString(currItem->TabValues[t1].tabFillChar);
218
                                                if ((currItem->itemText.at(e)->cstyle & 64) || (currItem->itemText.at(e)->cstyle & 32))
219
                                                {
220
                                                        if (chx.upper() != QString(currItem->TabValues[t1].tabFillChar))
221
                                                                chx = chx.upper();
222
                                                }
223
                                                chr = chx[0].unicode();
224
                                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(chr)) && (checkerSettings.checkGlyphs))
225
                                                        itemError.insert(1, 0);
226
                                        }
227
                                        continue;
228
                                }
2111 cbradney 229
                                if (chr == 30)
230
                                {
231
                                        for (uint numco = 0x30; numco < 0x3A; ++numco)
232
                                        {
233
                                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(numco)) && (checkerSettings.checkGlyphs))
234
                                                        itemError.insert(1, 0);
235
                                        }
236
                                        continue;
237
                                }
238
                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(chr)) && (checkerSettings.checkGlyphs))
239
                                        itemError.insert(1, 0);
240
                        }
241
                }
242
                if (itemError.count() != 0)
243
                        currDoc->docItemErrors.insert(currItem->ItemNr, itemError);
244
        }
245
}