Issue #847: Add recognition of explicit and implicit BeginPageSetup

v0.27.3
vog 13 years ago
parent d8bb48438c
commit 7f0c44f802

@ -386,6 +386,7 @@ namespace {
size_t posBeginPhotoshop = posEndEps;
size_t posEndPhotoshop = posEndEps;
size_t posPage = posEndEps;
size_t posBeginPageSetup = posEndEps;
size_t posEndPageSetup = posEndEps;
size_t posPageTrailer = posEndEps;
size_t posEof = posEndEps;
@ -397,7 +398,6 @@ namespace {
bool implicitPage = false;
bool implicitPageTrailer = false;
bool inDefaultsPreviewPrologSetup = false;
bool inPageSetup = false;
bool inRemovableEmbedding = false;
std::string removableEmbeddingEndLine;
unsigned int removableEmbeddingsWithUnmarkedTrailer = 0;
@ -465,7 +465,7 @@ namespace {
#endif
throw Error(write ? 21 : 14);
} else if (line == "%%BeginPageSetup") {
inPageSetup = true;
posBeginPageSetup = startPos;
} else if (!inRemovableEmbedding && line == "%Exiv2BeginXMP: Before %%EndPageSetup") {
inRemovableEmbedding = true;
removableEmbeddings.push_back(std::make_pair(startPos, startPos));
@ -510,18 +510,34 @@ namespace {
if (posPage == posEndEps && posEndComments != posEndEps && !inDefaultsPreviewPrologSetup && !inRemovableEmbedding && !onlyWhitespaces(line)) {
posPage = startPos;
implicitPage = true;
posBeginPageSetup = startPos;
posEndPageSetup = startPos;
#ifdef DEBUG
EXV_DEBUG << "readWriteEpsMetadata: Found implicit Page and EndPageSetup at position: " << startPos << "\n";
EXV_DEBUG << "readWriteEpsMetadata: Found implicit Page, BeginPageSetup and EndPageSetup at position: " << startPos << "\n";
#endif
}
if (posEndPageSetup == posEndEps && posPage != posEndEps && !inPageSetup && !inRemovableEmbedding && line.size() >= 1 && line[0] != '%') {
if (posBeginPageSetup == posEndEps && posPage != posEndEps && !inRemovableEmbedding && line.size() >= 1 && line[0] != '%') {
posBeginPageSetup = startPos;
posEndPageSetup = startPos;
#ifdef DEBUG
EXV_DEBUG << "readWriteEpsMetadata: Found implicit EndPageSetup at position: " << startPos << "\n";
EXV_DEBUG << "readWriteEpsMetadata: Found implicit BeginPageSetup and EndPageSetup at position: " << startPos << "\n";
#endif
}
if (line.size() >= 1 && line[0] != '%') continue; // performance optimization
if (line == "%%EOF" || line == "%%Trailer" || line == "%%PageTrailer") {
if (posBeginPageSetup == posEndEps) {
posBeginPageSetup = startPos;
#ifdef DEBUG
EXV_DEBUG << "readWriteEpsMetadata: Found implicit BeginPageSetup at position: " << startPos << "\n";
#endif
}
if (posEndPageSetup == posEndEps) {
posEndPageSetup = startPos;
#ifdef DEBUG
EXV_DEBUG << "readWriteEpsMetadata: Found implicit EndPageSetup at position: " << startPos << "\n";
#endif
}
}
if (line == "%%EOF" || line == "%%Trailer") {
if (posPageTrailer == posEndEps) {
posPageTrailer = startPos;
@ -561,7 +577,6 @@ namespace {
} else if (line == "%%EndSetup") {
inDefaultsPreviewPrologSetup = false;
} else if (posEndPageSetup == posEndEps && line == "%%EndPageSetup") {
inPageSetup = false;
posEndPageSetup = startPos;
} else if (posPageTrailer == posEndEps && line == "%%PageTrailer") {
posPageTrailer = startPos;
@ -815,6 +830,7 @@ namespace {
positions.push_back(posExiv2Website);
positions.push_back(posEndComments);
positions.push_back(posPage);
positions.push_back(posBeginPageSetup);
positions.push_back(posEndPageSetup);
positions.push_back(posPageTrailer);
positions.push_back(posEof);

Loading…
Cancel
Save