2724
|
1 This file is part of MXE. |
|
2 See index.html for further information. |
|
3 |
|
4 These patches have been taken from: |
|
5 http://dev.exiv2.org/issues/847 |
|
6 |
|
7 From ffb5b66c5b1aeb77c1f95ef69a573030c6370e0c Mon Sep 17 00:00:00 2001 |
|
8 From: vog <vog@b7c8b350-86e7-0310-a4b4-de8f6a8f16a3> |
|
9 Date: Fri, 14 Sep 2012 16:06:23 +0000 |
|
10 Subject: [PATCH 1/4] Issue #847: Add recognition of explicit and implicit |
|
11 BeginPageSetup |
|
12 |
|
13 git-svn-id: svn://dev.exiv2.org/svn/trunk@2869 b7c8b350-86e7-0310-a4b4-de8f6a8f16a3 |
|
14 --- |
|
15 src/epsimage.cpp | 28 ++++++++++++++++++++++------ |
|
16 1 file changed, 22 insertions(+), 6 deletions(-) |
|
17 |
|
18 diff --git a/src/epsimage.cpp b/src/epsimage.cpp |
|
19 index c937942..51e5bb4 100644 |
|
20 --- a/src/epsimage.cpp |
|
21 +++ b/src/epsimage.cpp |
|
22 @@ -386,6 +386,7 @@ namespace { |
|
23 size_t posBeginPhotoshop = posEndEps; |
|
24 size_t posEndPhotoshop = posEndEps; |
|
25 size_t posPage = posEndEps; |
|
26 + size_t posBeginPageSetup = posEndEps; |
|
27 size_t posEndPageSetup = posEndEps; |
|
28 size_t posPageTrailer = posEndEps; |
|
29 size_t posEof = posEndEps; |
|
30 @@ -397,7 +398,6 @@ namespace { |
|
31 bool implicitPage = false; |
|
32 bool implicitPageTrailer = false; |
|
33 bool inDefaultsPreviewPrologSetup = false; |
|
34 - bool inPageSetup = false; |
|
35 bool inRemovableEmbedding = false; |
|
36 std::string removableEmbeddingEndLine; |
|
37 unsigned int removableEmbeddingsWithUnmarkedTrailer = 0; |
|
38 @@ -465,7 +465,7 @@ namespace { |
|
39 #endif |
|
40 throw Error(write ? 21 : 14); |
|
41 } else if (line == "%%BeginPageSetup") { |
|
42 - inPageSetup = true; |
|
43 + posBeginPageSetup = startPos; |
|
44 } else if (!inRemovableEmbedding && line == "%Exiv2BeginXMP: Before %%EndPageSetup") { |
|
45 inRemovableEmbedding = true; |
|
46 removableEmbeddings.push_back(std::make_pair(startPos, startPos)); |
|
47 @@ -510,18 +510,34 @@ namespace { |
|
48 if (posPage == posEndEps && posEndComments != posEndEps && !inDefaultsPreviewPrologSetup && !inRemovableEmbedding && !onlyWhitespaces(line)) { |
|
49 posPage = startPos; |
|
50 implicitPage = true; |
|
51 + posBeginPageSetup = startPos; |
|
52 posEndPageSetup = startPos; |
|
53 #ifdef DEBUG |
|
54 - EXV_DEBUG << "readWriteEpsMetadata: Found implicit Page and EndPageSetup at position: " << startPos << "\n"; |
|
55 + EXV_DEBUG << "readWriteEpsMetadata: Found implicit Page, BeginPageSetup and EndPageSetup at position: " << startPos << "\n"; |
|
56 #endif |
|
57 } |
|
58 - if (posEndPageSetup == posEndEps && posPage != posEndEps && !inPageSetup && !inRemovableEmbedding && line.size() >= 1 && line[0] != '%') { |
|
59 + if (posBeginPageSetup == posEndEps && posPage != posEndEps && !inRemovableEmbedding && line.size() >= 1 && line[0] != '%') { |
|
60 + posBeginPageSetup = startPos; |
|
61 posEndPageSetup = startPos; |
|
62 #ifdef DEBUG |
|
63 - EXV_DEBUG << "readWriteEpsMetadata: Found implicit EndPageSetup at position: " << startPos << "\n"; |
|
64 + EXV_DEBUG << "readWriteEpsMetadata: Found implicit BeginPageSetup and EndPageSetup at position: " << startPos << "\n"; |
|
65 #endif |
|
66 } |
|
67 if (line.size() >= 1 && line[0] != '%') continue; // performance optimization |
|
68 + if (line == "%%EOF" || line == "%%Trailer" || line == "%%PageTrailer") { |
|
69 + if (posBeginPageSetup == posEndEps) { |
|
70 + posBeginPageSetup = startPos; |
|
71 + #ifdef DEBUG |
|
72 + EXV_DEBUG << "readWriteEpsMetadata: Found implicit BeginPageSetup at position: " << startPos << "\n"; |
|
73 + #endif |
|
74 + } |
|
75 + if (posEndPageSetup == posEndEps) { |
|
76 + posEndPageSetup = startPos; |
|
77 + #ifdef DEBUG |
|
78 + EXV_DEBUG << "readWriteEpsMetadata: Found implicit EndPageSetup at position: " << startPos << "\n"; |
|
79 + #endif |
|
80 + } |
|
81 + } |
|
82 if (line == "%%EOF" || line == "%%Trailer") { |
|
83 if (posPageTrailer == posEndEps) { |
|
84 posPageTrailer = startPos; |
|
85 @@ -561,7 +577,6 @@ namespace { |
|
86 } else if (line == "%%EndSetup") { |
|
87 inDefaultsPreviewPrologSetup = false; |
|
88 } else if (posEndPageSetup == posEndEps && line == "%%EndPageSetup") { |
|
89 - inPageSetup = false; |
|
90 posEndPageSetup = startPos; |
|
91 } else if (posPageTrailer == posEndEps && line == "%%PageTrailer") { |
|
92 posPageTrailer = startPos; |
|
93 @@ -815,6 +830,7 @@ namespace { |
|
94 positions.push_back(posExiv2Website); |
|
95 positions.push_back(posEndComments); |
|
96 positions.push_back(posPage); |
|
97 + positions.push_back(posBeginPageSetup); |
|
98 positions.push_back(posEndPageSetup); |
|
99 positions.push_back(posPageTrailer); |
|
100 positions.push_back(posEof); |
|
101 -- |
|
102 1.7.10.4 |
|
103 |
|
104 From f8c9c6114bf7631bb0dba67582c2666b05b2ff9f Mon Sep 17 00:00:00 2001 |
|
105 From: vog <vog@b7c8b350-86e7-0310-a4b4-de8f6a8f16a3> |
|
106 Date: Fri, 14 Sep 2012 16:06:26 +0000 |
|
107 Subject: [PATCH 2/4] Issue #847: Always insert BeginPageSetup/EndPageSetup |
|
108 when missing |
|
109 |
|
110 git-svn-id: svn://dev.exiv2.org/svn/trunk@2870 b7c8b350-86e7-0310-a4b4-de8f6a8f16a3 |
|
111 --- |
|
112 src/epsimage.cpp | 21 ++++++++++++++------- |
|
113 1 file changed, 14 insertions(+), 7 deletions(-) |
|
114 |
|
115 diff --git a/src/epsimage.cpp b/src/epsimage.cpp |
|
116 index 51e5bb4..9276eb5 100644 |
|
117 --- a/src/epsimage.cpp |
|
118 +++ b/src/epsimage.cpp |
|
119 @@ -935,6 +935,11 @@ namespace { |
|
120 writeTemp(*tempIo, "%%EndPageComments" + lineEnding); |
|
121 } |
|
122 } |
|
123 + if (pos == posBeginPageSetup) { |
|
124 + if (line != "%%BeginPageSetup") { |
|
125 + writeTemp(*tempIo, "%%BeginPageSetup" + lineEnding); |
|
126 + } |
|
127 + } |
|
128 if (useFlexibleEmbedding) { |
|
129 // insert XMP metadata into existing flexible embedding |
|
130 if (pos == xmpPos) { |
|
131 @@ -947,7 +952,8 @@ namespace { |
|
132 EXV_DEBUG << "readWriteEpsMetadata: Skipping to " << skipPos << " at " << __FILE__ << ":" << __LINE__ << "\n"; |
|
133 #endif |
|
134 } |
|
135 - } else { |
|
136 + } |
|
137 + if (!useFlexibleEmbedding) { |
|
138 // remove preceding embedding(s) |
|
139 for (std::vector<std::pair<size_t, size_t> >::const_iterator e = removableEmbeddings.begin(); e != removableEmbeddings.end(); e++) { |
|
140 if (pos == e->first) { |
|
141 @@ -960,9 +966,6 @@ namespace { |
|
142 } |
|
143 // insert XMP metadata with new flexible embedding, if necessary |
|
144 if (pos == posEndPageSetup && !deleteXmp) { |
|
145 - if (line != "%%EndPageSetup") { |
|
146 - writeTemp(*tempIo, "%%BeginPageSetup" + lineEnding); |
|
147 - } |
|
148 writeTemp(*tempIo, "%Exiv2BeginXMP: Before %%EndPageSetup" + lineEnding); |
|
149 if (corelDraw) { |
|
150 writeTemp(*tempIo, "%Exiv2Notice: The following line is needed by CorelDRAW." + lineEnding); |
|
151 @@ -1004,10 +1007,14 @@ namespace { |
|
152 writeTemp(*tempIo, "@sv" + lineEnding); |
|
153 } |
|
154 writeTemp(*tempIo, "%Exiv2EndXMP" + lineEnding); |
|
155 - if (line != "%%EndPageSetup") { |
|
156 - writeTemp(*tempIo, "%%EndPageSetup" + lineEnding); |
|
157 - } |
|
158 } |
|
159 + } |
|
160 + if (pos == posEndPageSetup) { |
|
161 + if (line != "%%EndPageSetup") { |
|
162 + writeTemp(*tempIo, "%%EndPageSetup" + lineEnding); |
|
163 + } |
|
164 + } |
|
165 + if (!useFlexibleEmbedding) { |
|
166 if (pos == posPageTrailer && !deleteXmp) { |
|
167 if (!implicitPageTrailer) { |
|
168 skipPos = posLineEnd; |
|
169 -- |
|
170 1.7.10.4 |
|
171 |
|
172 From b22ff432f0205d77d1b9e0ad2cd314ab6cdf20b0 Mon Sep 17 00:00:00 2001 |
|
173 From: vog <vog@b7c8b350-86e7-0310-a4b4-de8f6a8f16a3> |
|
174 Date: Fri, 14 Sep 2012 16:06:29 +0000 |
|
175 Subject: [PATCH 3/4] Issue #847: Split recognition of implicit Page, |
|
176 BeginPageSetup and EndPageSetup |
|
177 |
|
178 git-svn-id: svn://dev.exiv2.org/svn/trunk@2871 b7c8b350-86e7-0310-a4b4-de8f6a8f16a3 |
|
179 --- |
|
180 src/epsimage.cpp | 17 ++++++++++++----- |
|
181 1 file changed, 12 insertions(+), 5 deletions(-) |
|
182 |
|
183 diff --git a/src/epsimage.cpp b/src/epsimage.cpp |
|
184 index 9276eb5..57051a1 100644 |
|
185 --- a/src/epsimage.cpp |
|
186 +++ b/src/epsimage.cpp |
|
187 @@ -396,6 +396,7 @@ namespace { |
|
188 bool illustrator8 = false; |
|
189 bool corelDraw = false; |
|
190 bool implicitPage = false; |
|
191 + bool implicitPageSetup = false; |
|
192 bool implicitPageTrailer = false; |
|
193 bool inDefaultsPreviewPrologSetup = false; |
|
194 bool inRemovableEmbedding = false; |
|
195 @@ -510,29 +511,35 @@ namespace { |
|
196 if (posPage == posEndEps && posEndComments != posEndEps && !inDefaultsPreviewPrologSetup && !inRemovableEmbedding && !onlyWhitespaces(line)) { |
|
197 posPage = startPos; |
|
198 implicitPage = true; |
|
199 - posBeginPageSetup = startPos; |
|
200 - posEndPageSetup = startPos; |
|
201 #ifdef DEBUG |
|
202 - EXV_DEBUG << "readWriteEpsMetadata: Found implicit Page, BeginPageSetup and EndPageSetup at position: " << startPos << "\n"; |
|
203 + EXV_DEBUG << "readWriteEpsMetadata: Found implicit Page at position: " << startPos << "\n"; |
|
204 #endif |
|
205 } |
|
206 - if (posBeginPageSetup == posEndEps && posPage != posEndEps && !inRemovableEmbedding && line.size() >= 1 && line[0] != '%') { |
|
207 + if (posBeginPageSetup == posEndEps && (implicitPage || (posPage != posEndEps && !inRemovableEmbedding && line.size() >= 1 && line[0] != '%'))) { |
|
208 posBeginPageSetup = startPos; |
|
209 + implicitPageSetup = true; |
|
210 + #ifdef DEBUG |
|
211 + EXV_DEBUG << "readWriteEpsMetadata: Found implicit BeginPageSetup at position: " << startPos << "\n"; |
|
212 + #endif |
|
213 + } |
|
214 + if (posEndPageSetup == posEndEps && implicitPageSetup) { |
|
215 posEndPageSetup = startPos; |
|
216 #ifdef DEBUG |
|
217 - EXV_DEBUG << "readWriteEpsMetadata: Found implicit BeginPageSetup and EndPageSetup at position: " << startPos << "\n"; |
|
218 + EXV_DEBUG << "readWriteEpsMetadata: Found implicit EndPageSetup at position: " << startPos << "\n"; |
|
219 #endif |
|
220 } |
|
221 if (line.size() >= 1 && line[0] != '%') continue; // performance optimization |
|
222 if (line == "%%EOF" || line == "%%Trailer" || line == "%%PageTrailer") { |
|
223 if (posBeginPageSetup == posEndEps) { |
|
224 posBeginPageSetup = startPos; |
|
225 + implicitPageSetup = true; |
|
226 #ifdef DEBUG |
|
227 EXV_DEBUG << "readWriteEpsMetadata: Found implicit BeginPageSetup at position: " << startPos << "\n"; |
|
228 #endif |
|
229 } |
|
230 if (posEndPageSetup == posEndEps) { |
|
231 posEndPageSetup = startPos; |
|
232 + implicitPageSetup = true; |
|
233 #ifdef DEBUG |
|
234 EXV_DEBUG << "readWriteEpsMetadata: Found implicit EndPageSetup at position: " << startPos << "\n"; |
|
235 #endif |
|
236 -- |
|
237 1.7.10.4 |
|
238 |
|
239 From 41fb1a2ff54a9377763e4a66544c2234f9b055c8 Mon Sep 17 00:00:00 2001 |
|
240 From: vog <vog@b7c8b350-86e7-0310-a4b4-de8f6a8f16a3> |
|
241 Date: Fri, 14 Sep 2012 17:01:36 +0000 |
|
242 Subject: [PATCH 4/4] Issue #847: Ensure that Photoshop will always recognize |
|
243 modified Photoshop EPS files |
|
244 |
|
245 For a full description of this issue, see: |
|
246 http://dev.exiv2.org/issues/847 |
|
247 |
|
248 git-svn-id: svn://dev.exiv2.org/svn/trunk@2873 b7c8b350-86e7-0310-a4b4-de8f6a8f16a3 |
|
249 --- |
|
250 src/epsimage.cpp | 2 +- |
|
251 1 file changed, 1 insertion(+), 1 deletion(-) |
|
252 |
|
253 diff --git a/src/epsimage.cpp b/src/epsimage.cpp |
|
254 index 57051a1..4a0ca3a 100644 |
|
255 --- a/src/epsimage.cpp |
|
256 +++ b/src/epsimage.cpp |
|
257 @@ -522,7 +522,7 @@ namespace { |
|
258 EXV_DEBUG << "readWriteEpsMetadata: Found implicit BeginPageSetup at position: " << startPos << "\n"; |
|
259 #endif |
|
260 } |
|
261 - if (posEndPageSetup == posEndEps && implicitPageSetup) { |
|
262 + if (posEndPageSetup == posEndEps && implicitPageSetup && !inRemovableEmbedding && line.size() >= 1 && line[0] != '%') { |
|
263 posEndPageSetup = startPos; |
|
264 #ifdef DEBUG |
|
265 EXV_DEBUG << "readWriteEpsMetadata: Found implicit EndPageSetup at position: " << startPos << "\n"; |
|
266 -- |
|
267 1.7.10.4 |
|
268 |