Subversion Repositories Scribus

Rev

Rev 2285 | Rev 2714 | 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"
22
 
23
void DocumentChecker::checkDocument(ScribusDoc *currDoc)
24
{
25
        PageItem* currItem;
26
        QString chx;
27
        struct checkerPrefs checkerSettings;
28
        checkerSettings.ignoreErrors = currDoc->checkerProfiles[currDoc->curCheckProfile].ignoreErrors;
29
        checkerSettings.autoCheck = currDoc->checkerProfiles[currDoc->curCheckProfile].autoCheck;
30
        checkerSettings.checkGlyphs = currDoc->checkerProfiles[currDoc->curCheckProfile].checkGlyphs;
31
        checkerSettings.checkOrphans = currDoc->checkerProfiles[currDoc->curCheckProfile].checkOrphans;
32
        checkerSettings.checkOverflow = currDoc->checkerProfiles[currDoc->curCheckProfile].checkOverflow;
33
        checkerSettings.checkPictures = currDoc->checkerProfiles[currDoc->curCheckProfile].checkPictures;
34
        checkerSettings.checkResolution = currDoc->checkerProfiles[currDoc->curCheckProfile].checkResolution;
35
        checkerSettings.checkTransparency = currDoc->checkerProfiles[currDoc->curCheckProfile].checkTransparency;
36
        checkerSettings.minResolution = currDoc->checkerProfiles[currDoc->curCheckProfile].minResolution;
37
        checkerSettings.checkAnnotations = currDoc->checkerProfiles[currDoc->curCheckProfile].checkAnnotations;
38
        checkerSettings.checkRasterPDF = currDoc->checkerProfiles[currDoc->curCheckProfile].checkRasterPDF;
39
        currDoc->docItemErrors.clear();
40
        currDoc->masterItemErrors.clear();
41
        errorCodes itemError;
42
        for (uint d = 0; d < currDoc->MasterItems.count(); ++d)
43
        {
44
                currItem = currDoc->MasterItems.at(d);
45
                itemError.clear();
46
                if (((currItem->isAnnotation) || (currItem->isBookmark)) && (checkerSettings.checkAnnotations))
47
                        itemError.insert(7, 0);
48
                if (((currItem->fillTransparency() != 0.0) || (currItem->lineTransparency() != 0.0)) && (checkerSettings.checkTransparency))
49
                        itemError.insert(6, 0);
50
                if ((currItem->OwnPage == -1) && (checkerSettings.checkOrphans))
51
                        itemError.insert(3, 0);
52
                if (currItem->itemType() == PageItem::ImageFrame)
53
                {
54
                        if ((!currItem->PicAvail) && (checkerSettings.checkPictures))
55
                                itemError.insert(4, 0);
56
                        else
57
                        {
58
                                if  (((qRound(72.0 / currItem->LocalScX) < checkerSettings.minResolution) || (qRound(72.0 / currItem->LocalScY) < checkerSettings.minResolution))
59
                                          && (currItem->isRaster) && (checkerSettings.checkResolution))
60
                                        itemError.insert(5, 0);
61
                                QFileInfo fi = QFileInfo(currItem->Pfile);
62
                                QString ext = fi.extension(false).lower();
63
                                if ((ext == "pdf") && (checkerSettings.checkRasterPDF))
64
                                        itemError.insert(8, 0);
65
                        }
66
                }
67
                if ((currItem->itemType() == PageItem::TextFrame) || (currItem->itemType() == PageItem::PathText))
68
                {
69
                        if ((currItem->itemText.count() > currItem->MaxChars) && (checkerSettings.checkOverflow))
70
                                itemError.insert(2, 0);
71
                        for (uint e = 0; e < currItem->itemText.count(); ++e)
72
                        {
73
                                uint chr = currItem->itemText.at(e)->ch[0].unicode();
2447 fschmid 74
                                if ((chr == 13) || (chr == 32) || (chr == 29) || (chr == 28) || (chr == 27) || (chr == 26) || (chr == 25))
2111 cbradney 75
                                        continue;
2285 fschmid 76
                                if ((currItem->itemText.at(e)->cstyle & 64) || (currItem->itemText.at(e)->cstyle & 32))
2111 cbradney 77
                                {
78
                                        chx = currItem->itemText.at(e)->ch;
79
                                        if (chx.upper() != currItem->itemText.at(e)->ch)
80
                                                chx = chx.upper();
81
                                        chr = chx[0].unicode();
82
                                }
2285 fschmid 83
                                if (chr == 9)
84
                                {
85
                                        for (uint t1 = 0; t1 < currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues.count(); t1++)
86
                                        {
87
                                                if (currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues[t1].tabFillChar.isNull())
88
                                                        continue;
89
                                                chx = QString(currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues[t1].tabFillChar);
90
                                                if ((currItem->itemText.at(e)->cstyle & 64) || (currItem->itemText.at(e)->cstyle & 32))
91
                                                {
92
                                                        if (chx.upper() != QString(currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues[t1].tabFillChar))
93
                                                                chx = chx.upper();
94
                                                }
95
                                                chr = chx[0].unicode();
96
                                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(chr)) && (checkerSettings.checkGlyphs))
97
                                                        itemError.insert(1, 0);
98
                                        }
99
                                        for (uint t1 = 0; t1 < currItem->TabValues.count(); t1++)
100
                                        {
101
                                                if (currItem->TabValues[t1].tabFillChar.isNull())
102
                                                        continue;
103
                                                chx = QString(currItem->TabValues[t1].tabFillChar);
104
                                                if ((currItem->itemText.at(e)->cstyle & 64) || (currItem->itemText.at(e)->cstyle & 32))
105
                                                {
106
                                                        if (chx.upper() != QString(currItem->TabValues[t1].tabFillChar))
107
                                                                chx = chx.upper();
108
                                                }
109
                                                chr = chx[0].unicode();
110
                                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(chr)) && (checkerSettings.checkGlyphs))
111
                                                        itemError.insert(1, 0);
112
                                        }
113
                                        continue;
114
                                }
2111 cbradney 115
                                if (chr == 30)
116
                                {
117
                                        for (uint numco = 0x30; numco < 0x3A; ++numco)
118
                                        {
119
                                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(numco)) && (checkerSettings.checkGlyphs))
120
                                                        itemError.insert(1, 0);
121
                                        }
122
                                        continue;
123
                                }
124
                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(chr)) && (checkerSettings.checkGlyphs))
125
                                        itemError.insert(1, 0);
126
                        }
127
                }
128
                if (itemError.count() != 0)
129
                        currDoc->masterItemErrors.insert(currItem->ItemNr, itemError);
130
        }
131
        for (uint d = 0; d < currDoc->DocItems.count(); ++d)
132
        {
133
                currItem = currDoc->DocItems.at(d);
134
                itemError.clear();
135
                if (((currItem->fillTransparency() != 0.0) || (currItem->lineTransparency() != 0.0)) && (checkerSettings.checkTransparency))
136
                        itemError.insert(6, 0);
137
                if (((currItem->isAnnotation) || (currItem->isBookmark)) && (checkerSettings.checkAnnotations))
138
                        itemError.insert(7, 0);
139
                if ((currItem->OwnPage == -1) && (checkerSettings.checkOrphans))
140
                        itemError.insert(3, 0);
141
                if (currItem->itemType() == PageItem::ImageFrame)
142
                {
143
                        if ((!currItem->PicAvail) && (checkerSettings.checkPictures))
144
                                itemError.insert(4, 0);
145
                        else
146
                        {
147
                                if  (((qRound(72.0 / currItem->LocalScX) < checkerSettings.minResolution) || (qRound(72.0 / currItem->LocalScY) < checkerSettings.minResolution))
148
                                           && (currItem->isRaster) && (checkerSettings.checkResolution))
149
                                        itemError.insert(5, 0);
150
                                QFileInfo fi = QFileInfo(currItem->Pfile);
151
                                QString ext = fi.extension(false).lower();
152
                                if ((ext == "pdf") && (checkerSettings.checkRasterPDF))
153
                                        itemError.insert(8, 0);
154
                        }
155
                }
156
                if ((currItem->itemType() == PageItem::TextFrame) || (currItem->itemType() == PageItem::PathText))
157
                {
158
                        if ((currItem->itemText.count() > currItem->MaxChars) && (checkerSettings.checkOverflow))
159
                                itemError.insert(2, 0);
160
                        for (uint e = 0; e < currItem->itemText.count(); ++e)
161
                        {
162
                                uint chr = currItem->itemText.at(e)->ch[0].unicode();
2447 fschmid 163
                                if ((chr == 13) || (chr == 32) || (chr == 29) || (chr == 28) || (chr == 27) || (chr == 26) || (chr == 25))
2111 cbradney 164
                                        continue;
2285 fschmid 165
                                if ((currItem->itemText.at(e)->cstyle & 64) || (currItem->itemText.at(e)->cstyle & 32))
2111 cbradney 166
                                {
167
                                        chx = currItem->itemText.at(e)->ch;
168
                                        if (chx.upper() != currItem->itemText.at(e)->ch)
169
                                                chx = chx.upper();
170
                                        chr = chx[0].unicode();
171
                                }
2285 fschmid 172
                                if (chr == 9)
173
                                {
174
                                        for (uint t1 = 0; t1 < currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues.count(); t1++)
175
                                        {
176
                                                if (currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues[t1].tabFillChar.isNull())
177
                                                        continue;
178
                                                chx = QString(currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues[t1].tabFillChar);
179
                                                if ((currItem->itemText.at(e)->cstyle & 64) || (currItem->itemText.at(e)->cstyle & 32))
180
                                                {
181
                                                        if (chx.upper() != QString(currDoc->docParagraphStyles[currItem->itemText.at(e)->cab].TabValues[t1].tabFillChar))
182
                                                                chx = chx.upper();
183
                                                }
184
                                                chr = chx[0].unicode();
185
                                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(chr)) && (checkerSettings.checkGlyphs))
186
                                                        itemError.insert(1, 0);
187
                                        }
188
                                        for (uint t1 = 0; t1 < currItem->TabValues.count(); t1++)
189
                                        {
190
                                                if (currItem->TabValues[t1].tabFillChar.isNull())
191
                                                        continue;
192
                                                chx = QString(currItem->TabValues[t1].tabFillChar);
193
                                                if ((currItem->itemText.at(e)->cstyle & 64) || (currItem->itemText.at(e)->cstyle & 32))
194
                                                {
195
                                                        if (chx.upper() != QString(currItem->TabValues[t1].tabFillChar))
196
                                                                chx = chx.upper();
197
                                                }
198
                                                chr = chx[0].unicode();
199
                                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(chr)) && (checkerSettings.checkGlyphs))
200
                                                        itemError.insert(1, 0);
201
                                        }
202
                                        continue;
203
                                }
2111 cbradney 204
                                if (chr == 30)
205
                                {
206
                                        for (uint numco = 0x30; numco < 0x3A; ++numco)
207
                                        {
208
                                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(numco)) && (checkerSettings.checkGlyphs))
209
                                                        itemError.insert(1, 0);
210
                                        }
211
                                        continue;
212
                                }
213
                                if ((!currItem->itemText.at(e)->cfont->CharWidth.contains(chr)) && (checkerSettings.checkGlyphs))
214
                                        itemError.insert(1, 0);
215
                        }
216
                }
217
                if (itemError.count() != 0)
218
                        currDoc->docItemErrors.insert(currItem->ItemNr, itemError);
219
        }
220
}