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

Loading…
Cancel
Save