Subversion Repositories Scribus

Rev

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