diff --git a/src/epsimage.cpp b/src/epsimage.cpp index c937942f..51e5bb45 100644 --- a/src/epsimage.cpp +++ b/src/epsimage.cpp @@ -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);