From 5eb9aefc67ab58f79d500f22ee4f26b1b57c2f7b Mon Sep 17 00:00:00 2001 From: vog Date: Fri, 8 Jul 2011 05:05:00 +0000 Subject: [PATCH] Improved XMP embedding/replace mechanism for EPS files, achieved more flexibility with less code, added and adjusted test cases --- src/epsimage.cpp | 215 ++++++++---------- ...mal_irremovable-xmp-after-endpagesetup.eps | 40 ++++ ...movable-xmp-after-endpagesetup.eps.newxmp} | 94 ++++---- ...mal_irremovable-xmp-after-endpagesetup.xmp | 8 + ...p-after-endpagesetup_no-adocontainsxmp.eps | 39 ++++ ...-endpagesetup_no-adocontainsxmp.eps.newxmp | 98 ++++++++ ...p-after-endpagesetup_no-adocontainsxmp.xmp | 1 + ...inimal_irremovable-xmp-at-endpagesetup.eps | 38 ++++ ...irremovable-xmp-at-endpagesetup.eps.newxmp | 98 ++++++++ ...inimal_irremovable-xmp-at-endpagesetup.xmp | 8 + ...-xmp-at-endpagesetup_no-adocontainsxmp.eps | 37 +++ ...-endpagesetup_no-adocontainsxmp.eps.newxmp | 98 ++++++++ ...-xmp-at-endpagesetup_no-adocontainsxmp.xmp | 1 + ...al_irremovable-xmp-before-endpagesetup.eps | 40 ++++ ...al_irremovable-xmp-before-endpagesetup.xmp | 8 + ...-before-endpagesetup_no-adocontainsxmp.eps | 39 ++++ ...-before-endpagesetup_no-adocontainsxmp.xmp | 1 + ...s-flat_minimal_irremovable-xmp-in-page.eps | 40 ++++ ...minimal_irremovable-xmp-in-page.eps.newxmp | 98 ++++++++ ...s-flat_minimal_irremovable-xmp-in-page.xmp | 8 + ...emovable-xmp-in-page_no-adocontainsxmp.eps | 39 ++++ ...e-xmp-in-page_no-adocontainsxmp.eps.newxmp | 98 ++++++++ ...emovable-xmp-in-page_no-adocontainsxmp.xmp | 1 + ..._minimal_missing-xmp-embedding-trailer.eps | 38 ++++ ..._minimal_missing-xmp-embedding-trailer.xmp | 8 + .../eps-flat_minimal_xmp_exiftool-8.56.eps | 2 +- ...=> eps-flat_minimal_xmp_exiftool-8.56.xmp} | 0 ...photoshop-cs5-binary_no-adocontainsxmp.eps | 214 +++++++++++++++++ ...op-cs5-binary_no-adocontainsxmp.eps.newxmp | 30 +++ ...photoshop-cs5-binary_no-adocontainsxmp.xmp | 1 + test/data/eps/eps-test.out | 194 ++++++++++++++-- test/data/preview/preview-test.out | 8 + test/preview-test.sh | 1 + 33 files changed, 1450 insertions(+), 193 deletions(-) create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps rename test/data/eps/{eps-flat_minimal_xmp_exiftool-8.56_fixed.eps => eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps.newxmp} (66%) create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup.xmp create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps.newxmp create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.xmp create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps.newxmp create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup.xmp create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps.newxmp create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.xmp create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup.eps create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup.xmp create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.eps create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.xmp create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-in-page.eps create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-in-page.eps.newxmp create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-in-page.xmp create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps.newxmp create mode 100644 test/data/eps/eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.xmp create mode 100644 test/data/eps/eps-flat_minimal_missing-xmp-embedding-trailer.eps create mode 100644 test/data/eps/eps-flat_minimal_missing-xmp-embedding-trailer.xmp rename test/data/eps/{eps-flat_minimal_xmp_exiftool-8.56_fixed.xmp => eps-flat_minimal_xmp_exiftool-8.56.xmp} (100%) create mode 100644 test/data/eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps create mode 100644 test/data/eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps.newxmp create mode 100644 test/data/eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.xmp diff --git a/src/epsimage.cpp b/src/epsimage.cpp index 9e455aa2..3135790a 100644 --- a/src/epsimage.cpp +++ b/src/epsimage.cpp @@ -302,106 +302,6 @@ namespace { } } - //! Find removable XMP embeddings - static std::vector > findRemovableEmbeddings(const byte* data, size_t posStart, size_t posEof, size_t posEndPageSetup, - size_t xmpPos, size_t xmpSize, bool write) - { - std::vector > removableEmbeddings; - std::string line; - size_t pos; - - // check after XMP - pos = xmpPos + xmpSize; - pos = readLine(line, data, pos, posEof); - if (line != "") return removableEmbeddings; - #ifdef DEBUG - EXV_DEBUG << "findRemovableEmbeddings: Found empty line after XMP\n"; - #endif - pos = readLine(line, data, pos, posEof); - if (line != "%end_xml_packet") return removableEmbeddings; - #ifdef DEBUG - EXV_DEBUG << "findRemovableEmbeddings: Found %end_xml_packet\n"; - #endif - size_t posEmbeddingEnd = 0; - for (int i = 0; i < 32; i++) { - pos = readLine(line, data, pos, posEof); - if (line == "%end_xml_code") { - posEmbeddingEnd = pos; - break; - } - } - if (posEmbeddingEnd == 0) return removableEmbeddings; - #ifdef DEBUG - EXV_DEBUG << "findRemovableEmbeddings: Found %end_xml_code\n"; - #endif - - // check before XMP - pos = xmpPos; - pos = readPrevLine(line, data, pos, posEof); - if (!startsWith(line, "%begin_xml_packet: ")) return removableEmbeddings; - #ifdef DEBUG - EXV_DEBUG << "findRemovableEmbeddings: Found %begin_xml_packet: ...\n"; - #endif - size_t posEmbeddingStart = posEof; - for (int i = 0; i < 32; i++) { - pos = readPrevLine(line, data, pos, posEof); - if (line == "%begin_xml_code") { - posEmbeddingStart = pos; - break; - } - } - if (posEmbeddingStart == posEof) return removableEmbeddings; - #ifdef DEBUG - EXV_DEBUG << "findRemovableEmbeddings: Found %begin_xml_code\n"; - #endif - - // check at EOF - pos = posEof; - pos = readPrevLine(line, data, pos, posEof); - if (line == "[/EMC pdfmark") { - // Exiftool style - #ifdef DEBUG - EXV_DEBUG << "findRemovableEmbeddings: Found [/EMC pdfmark\n"; - #endif - } else if (line == "[/NamespacePop pdfmark") { - // Photoshop style - #ifdef DEBUG - EXV_DEBUG << "findRemovableEmbeddings: Found /NamespacePop pdfmark\n"; - #endif - pos = readPrevLine(line, data, pos, posEof); - if (line != "[{nextImage} 1 dict begin /Metadata {photoshop_metadata_stream} def currentdict end /PUT pdfmark") return removableEmbeddings; - #ifdef DEBUG - EXV_DEBUG << "findRemovableEmbeddings: Found /PUT pdfmark\n"; - #endif - } else { - return removableEmbeddings; - } - - // check whether another XMP metadata block would take precedence if this one was removed - { - size_t xmpPos, xmpSize; - findXmp(xmpPos, xmpSize, data, posStart, posEndPageSetup, write); - if (xmpSize != 0) { - #ifndef SUPPRESS_WARNINGS - EXV_WARNING << "Second XMP metadata block interferes at position: " << xmpPos << "\n"; - #endif - if (write) throw Error(21); - } - } - - removableEmbeddings.push_back(std::make_pair(posEmbeddingStart, posEmbeddingEnd)); - removableEmbeddings.push_back(std::make_pair(pos, posEof)); - #ifdef DEBUG - const size_t n = removableEmbeddings.size(); - EXV_DEBUG << "findRemovableEmbeddings: Recognized Photoshop-style XMP embedding at " - "[" << removableEmbeddings[n-2].first << "," << removableEmbeddings[n-2].second << ")" - " with trailer " - "[" << removableEmbeddings[n-1].first << "," << removableEmbeddings[n-1].second << ")" - "\n"; - #endif - return removableEmbeddings; - } - //! Unified implementation of reading and writing EPS metadata static void readWriteEpsMetadata(BasicIo& io, std::string& xmpPacket, NativePreviewList& nativePreviews, bool write) { @@ -529,10 +429,13 @@ namespace { size_t posEndPageSetup = posEndEps; size_t posPageTrailer = posEndEps; size_t posEof = posEndEps; + std::vector > removableEmbeddings; bool implicitPage = false; bool photoshop = false; bool inDefaultsOrPrologOrSetup = false; bool inPageSetup = false; + bool inPhotoshopXmp = false; + bool inExiv2Xmp = false; for (size_t pos = posEps; pos < posEof;) { const size_t startPos = pos; std::string line; @@ -546,15 +449,15 @@ namespace { #endif } } - if (line == "%%EOF" || line == "%begin_xml_code" || (line.size() >= 1 && line[0] != '%')) { - if (posPage == posEndEps && posEndComments != posEndEps && !inDefaultsOrPrologOrSetup && !onlyWhitespaces(line)) { + if (line == "%%EOF" || (line.size() >= 1 && line[0] != '%')) { + if (posPage == posEndEps && posEndComments != posEndEps && !inDefaultsOrPrologOrSetup && !inPhotoshopXmp && !onlyWhitespaces(line)) { posPage = startPos; implicitPage = true; #ifdef DEBUG EXV_DEBUG << "readWriteEpsMetadata: Found implicit Page at position: " << startPos << "\n"; #endif } - if (posEndPageSetup == posEndEps && posPage != posEndEps && !inPageSetup) { + if (posEndPageSetup == posEndEps && posPage != posEndEps && !inPageSetup && !inPhotoshopXmp) { posEndPageSetup = startPos; #ifdef DEBUG EXV_DEBUG << "readWriteEpsMetadata: Found implicit EndPageSetup at position: " << startPos << "\n"; @@ -607,6 +510,22 @@ namespace { posPageTrailer = startPos; } else if (startsWith(line, "%BeginPhotoshop:")) { photoshop = true; + } else if (posEndPageSetup == posEndEps && line == "%Exiv2BeginXMP: Before %%EndPageSetup") { + inExiv2Xmp = true; + } else if (posEndPageSetup == posEndEps && line == "%Exiv2EndXMP") { + inExiv2Xmp = false; + } else if (posEndPageSetup == posEndEps && !inExiv2Xmp && line == "%begin_xml_code") { + inPhotoshopXmp = true; + removableEmbeddings.push_back(std::make_pair(startPos, startPos)); + } else if (posEndPageSetup == posEndEps && !inExiv2Xmp && line == "%end_xml_code") { + if (!inPhotoshopXmp) { + #ifndef SUPPRESS_WARNINGS + EXV_WARNING << "Unexpected Photoshop end_xml_code at position: " << startPos << "\n"; + #endif + throw Error(write ? 21 : 14); + } + inPhotoshopXmp = false; + removableEmbeddings.back().second = pos; } else if (line == "%%EOF") { posEof = startPos; } else if (startsWith(line, "%%BeginDocument:")) { @@ -650,6 +569,38 @@ namespace { #endif } + // look for the trailers of the removable XMP embeddings + const size_t numRemovableEmbeddings = removableEmbeddings.size(); + size_t posXmpTrailerEnd = posEof; + for (size_t i = 0; i < numRemovableEmbeddings; i++) { + std::string line1; + const size_t posLine1 = readPrevLine(line1, data, posXmpTrailerEnd, posEndEps); + std::string line2; + const size_t posLine2 = readPrevLine(line2, data, posLine1, posEndEps); + size_t posXmpTrailer; + if (line1 == "[/EMC pdfmark") { // Exiftool style + posXmpTrailer = posLine1; + } else if (line1 == "[/NamespacePop pdfmark" && + line2 == "[{nextImage} 1 dict begin /Metadata {photoshop_metadata_stream} def currentdict end /PUT pdfmark") { // Photoshop style + posXmpTrailer = posLine2; + } else { + #ifndef SUPPRESS_WARNINGS + EXV_WARNING << "Unable to find XMP embedding trailer ending at position: " << posXmpTrailerEnd << "\n"; + #endif + if (write) throw Error(21); + break; + } + removableEmbeddings.push_back(std::make_pair(posXmpTrailer, posXmpTrailerEnd)); + #ifdef DEBUG + EXV_DEBUG << "readWriteEpsMetadata: Recognized removable XMP embedding at " + "[" << removableEmbeddings[i].first << "," << removableEmbeddings[i].second << ")" + " with trailer " + "[" << removableEmbeddings.back().first << "," << removableEmbeddings.back().second << ")" + "\n"; + #endif + posXmpTrailerEnd = posXmpTrailer; + } + // interpret comment "%ADO_ContainsXMP:" std::string line; readLine(line, data, posContainsXmp, posEndEps); @@ -665,8 +616,8 @@ namespace { throw Error(write ? 21 : 14); } - std::vector > removableEmbeddings; bool fixBeginXmlPacket = false; + bool flexibleEmbedding = false; size_t xmpPos = posEndEps; size_t xmpSize = 0; if (containsXmp) { @@ -687,14 +638,15 @@ namespace { if (write) throw Error(21); } readLine(line, data, posLineAfterXmp, posEndEps); - if (line == "% &&end XMP packet marker&&" || line == "% &&end XMP packet marker&&") { + flexibleEmbedding = (line == "% &&end XMP packet marker&&" || line == "% &&end XMP packet marker&&"); + if (flexibleEmbedding) { #ifdef DEBUG - EXV_DEBUG << "readWriteEpsMetadata: Recognized flexible XMP embedding\n"; + EXV_DEBUG << "readWriteEpsMetadata: XMP embedding is flexible\n"; #endif const size_t posBeginXmlPacket = readPrevLine(line, data, xmpPos, posEndEps); if (startsWith(line, "%begin_xml_packet:")) { #ifdef DEBUG - EXV_DEBUG << "readWriteEpsMetadata: Found %begin_xml_packet before flexible XMP embedding\n"; + EXV_DEBUG << "readWriteEpsMetadata: XMP embedding contains %begin_xml_packet\n"; #endif if (write) { fixBeginXmlPacket = true; @@ -708,12 +660,31 @@ namespace { if (write) throw Error(21); } } else { - removableEmbeddings = findRemovableEmbeddings(data, posEps, posEof, posEndPageSetup, xmpPos, xmpSize, write); - if (removableEmbeddings.empty()) { + #ifdef DEBUG + EXV_DEBUG << "readWriteEpsMetadata: XMP embedding is inflexible\n"; + #endif + } + } + if (!flexibleEmbedding) { + // check if there are irremovable XMP metadata blocks before EndPageSetup + size_t posOtherXmp = containsXmp ? xmpPos : posEps; + size_t sizeOtherXmp = 0; + for (;;) { + findXmp(posOtherXmp, sizeOtherXmp, data, posOtherXmp + sizeOtherXmp, posEndPageSetup, write); + if (posOtherXmp >= posEndPageSetup) break; + bool isRemovableEmbedding = false; + for (std::vector >::const_iterator e = removableEmbeddings.begin(); e != removableEmbeddings.end(); e++) { + if (e->first <= posOtherXmp && posOtherXmp < e->second) { + isRemovableEmbedding = true; + break; + } + } + if (!isRemovableEmbedding) { #ifndef SUPPRESS_WARNINGS - EXV_WARNING << "Unknown XMP embedding at position: " << xmpPos << "\n"; + EXV_WARNING << "Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: " << posOtherXmp << "\n"; #endif if (write) throw Error(21); + break; } } } @@ -743,8 +714,6 @@ namespace { nativePreviews.push_back(nativePreview); } } else { - const bool useExistingEmbedding = (xmpPos != posEndEps && removableEmbeddings.empty()); - // TODO: Add support for deleting XMP metadata. Note that this is not // as simple as it may seem, and requires special attention! if (xmpPacket.size() == 0) { @@ -780,7 +749,7 @@ namespace { positions.push_back(posPageTrailer); positions.push_back(posEof); positions.push_back(posEndEps); - if (useExistingEmbedding) { + if (flexibleEmbedding) { positions.push_back(xmpPos); } for (std::vector >::const_iterator e = removableEmbeddings.begin(); e != removableEmbeddings.end(); e++) { @@ -817,7 +786,7 @@ namespace { #endif } // update and complement DSC comments - if (pos == posLanguageLevel && posLanguageLevel != posEndEps && !useExistingEmbedding) { + if (pos == posLanguageLevel && posLanguageLevel != posEndEps && !flexibleEmbedding) { if (line == "%%LanguageLevel:1" || line == "%%LanguageLevel: 1") { writeTemp(*tempIo, "%%LanguageLevel: 2" + lineEnding); skipPos = posLineEnd; @@ -838,7 +807,7 @@ namespace { skipPos = posLineEnd; } if (pos == posEndComments) { - if (posLanguageLevel == posEndEps && !useExistingEmbedding) { + if (posLanguageLevel == posEndEps && !flexibleEmbedding) { writeTemp(*tempIo, "%%LanguageLevel: 2" + lineEnding); } if (posContainsXmp == posEndEps) { @@ -864,14 +833,7 @@ namespace { writeTemp(*tempIo, "%%EndPageComments" + lineEnding); } } - // remove unflexible embeddings - for (std::vector >::const_iterator e = removableEmbeddings.begin(); e != removableEmbeddings.end(); e++) { - if (pos == e->first) { - skipPos = e->second; - break; - } - } - if (useExistingEmbedding) { + if (flexibleEmbedding) { // insert XMP metadata into existing flexible embedding if (pos == xmpPos) { if (fixBeginXmlPacket) { @@ -881,6 +843,13 @@ namespace { skipPos += xmpSize; } } else { + // remove preceding embedding(s) + for (std::vector >::const_iterator e = removableEmbeddings.begin(); e != removableEmbeddings.end(); e++) { + if (pos == e->first) { + skipPos = e->second; + break; + } + } // insert XMP metadata with new flexible embedding if (pos == posEndPageSetup) { if (line != "%%EndPageSetup") { diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps b/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps new file mode 100644 index 00000000..98459f8d --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps @@ -0,0 +1,40 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%ADO_ContainsXMP: MainFirst +%%EndComments +%%Page: 1 1 +%%BeginPageSetup +%%EndPageSetup +% begin of XMP embedding with non-standard comment +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +10 setlinewidth +10 10 moveto +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment diff --git a/test/data/eps/eps-flat_minimal_xmp_exiftool-8.56_fixed.eps b/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps.newxmp similarity index 66% rename from test/data/eps/eps-flat_minimal_xmp_exiftool-8.56_fixed.eps rename to test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps.newxmp index 8e5779d2..2bbc3e39 100644 --- a/test/data/eps/eps-flat_minimal_xmp_exiftool-8.56_fixed.eps +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps.newxmp @@ -1,42 +1,34 @@ %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 5 5 105 105 -%%LanguageLevel: 2 %ADO_ContainsXMP: MainFirst +%%LanguageLevel: 2 %%Pages: 1 -%Exiv2Version: 0.21.1 +%Exiv2Version: _Exiv2Version_ %Exiv2Website: http://www.exiv2.org/ %%EndComments -%%BeginSetup -%begin_xml_code -/pdfmark where {pop true} {false} ifelse -/currentdistillerparams where {pop currentdistillerparams -/CoreDistVersion get 5000 ge } {false} ifelse -and not {userdict /pdfmark /cleartomark load put} if -[/NamespacePush pdfmark -[/_objdef {exiftool_metadata_stream} /type /stream /OBJ pdfmark -[{exiftool_metadata_stream} 2 dict begin /Type /Metadata def - /Subtype /XML def currentdict end /PUT pdfmark -/MetadataString 2864 string def % exact length of metadata -/TempString 100 string def -/ConsumeMetadata { -currentfile TempString readline pop pop -currentfile MetadataString readstring pop pop -} bind def -ConsumeMetadata -%begin_xml_packet: 2864 - - - - - - - - TEST-Exiftool - - - - +%%Page: 1 1 +%%BeginPageSetup +%Exiv2BeginXMP: Before %%EndPageSetup +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% &&end XMP packet marker&&) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + @@ -58,22 +50,14 @@ ConsumeMetadata - - - - - -%end_xml_packet -[{exiftool_metadata_stream} MetadataString /PUT pdfmark + + +% &&end XMP packet marker&& [/Document 1 dict begin - /Metadata {exiftool_metadata_stream} def currentdict end /BDC pdfmark -[/NamespacePop pdfmark -%end_xml_code -%%EndSetup -%%Page: 1 1 -%%EndPageComments -%%BeginPageSetup -%Exiv2BeginXMP: Before %%EndPageSetup + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +%Exiv2EndXMP +%%EndPageSetup +% begin of XMP embedding with non-standard comment /currentdistillerparams where {pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse {userdict /Exiv2_pdfmark /cleartomark load put @@ -85,28 +69,30 @@ ConsumeMetadata [{Exiv2_metadata_stream} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark [{Exiv2_metadata_stream} - currentfile 0 (% &&end XMP packet marker&&) + currentfile 0 (% non-standard end marker) /SubFileDecode filter Exiv2_metafile_pdfmark - + -% &&end XMP packet marker&& +% non-standard end marker [/Document 1 dict begin /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark -%Exiv2EndXMP -%%EndPageSetup +% end of XMP embedding with non-standard comment 10 setlinewidth 10 10 moveto 0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment %%PageTrailer %Exiv2BeginXMP: After %%PageTrailer [/EMC Exiv2_pdfmark [/NamespacePop Exiv2_pdfmark %Exiv2EndXMP -[/EMC pdfmark %%EOF diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup.xmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup.xmp new file mode 100644 index 00000000..0a63ab4c --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup.xmp @@ -0,0 +1,8 @@ + + + + + + diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps b/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps new file mode 100644 index 00000000..c5a74a77 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps @@ -0,0 +1,39 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%%EndComments +%%Page: 1 1 +%%BeginPageSetup +%%EndPageSetup +% begin of XMP embedding with non-standard comment +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +10 setlinewidth +10 10 moveto +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps.newxmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps.newxmp new file mode 100644 index 00000000..4b602411 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps.newxmp @@ -0,0 +1,98 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%%LanguageLevel: 2 +%ADO_ContainsXMP: MainFirst +%%Pages: 1 +%Exiv2Version: _Exiv2Version_ +%Exiv2Website: http://www.exiv2.org/ +%%EndComments +%%Page: 1 1 +%%BeginPageSetup +%Exiv2BeginXMP: Before %%EndPageSetup +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% &&end XMP packet marker&&) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + + + + + + + + + + + + + + + + + + + + + + +% &&end XMP packet marker&& +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +%Exiv2EndXMP +%%EndPageSetup +% begin of XMP embedding with non-standard comment +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +10 setlinewidth +10 10 moveto +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment +%%PageTrailer +%Exiv2BeginXMP: After %%PageTrailer +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +%Exiv2EndXMP +%%EOF diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.xmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.xmp new file mode 100644 index 00000000..12bbf745 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.xmp @@ -0,0 +1 @@ + diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps b/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps new file mode 100644 index 00000000..4660fa5b --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps @@ -0,0 +1,38 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%ADO_ContainsXMP: MainFirst +%%EndComments +%%Page: 1 1 +% begin of XMP embedding with non-standard comment +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +10 setlinewidth +10 10 moveto +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps.newxmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps.newxmp new file mode 100644 index 00000000..5458b668 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps.newxmp @@ -0,0 +1,98 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%ADO_ContainsXMP: MainFirst +%%LanguageLevel: 2 +%%Pages: 1 +%Exiv2Version: _Exiv2Version_ +%Exiv2Website: http://www.exiv2.org/ +%%EndComments +%%Page: 1 1 +% begin of XMP embedding with non-standard comment +%%BeginPageSetup +%Exiv2BeginXMP: Before %%EndPageSetup +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% &&end XMP packet marker&&) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + + + + + + + + + + + + + + + + + + + + + + +% &&end XMP packet marker&& +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +%Exiv2EndXMP +%%EndPageSetup +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +10 setlinewidth +10 10 moveto +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment +%%PageTrailer +%Exiv2BeginXMP: After %%PageTrailer +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +%Exiv2EndXMP +%%EOF diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup.xmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup.xmp new file mode 100644 index 00000000..0a63ab4c --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup.xmp @@ -0,0 +1,8 @@ + + + + + + diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps b/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps new file mode 100644 index 00000000..06df2241 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps @@ -0,0 +1,37 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%%EndComments +%%Page: 1 1 +% begin of XMP embedding with non-standard comment +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +10 setlinewidth +10 10 moveto +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps.newxmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps.newxmp new file mode 100644 index 00000000..698ae9d7 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps.newxmp @@ -0,0 +1,98 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%%LanguageLevel: 2 +%ADO_ContainsXMP: MainFirst +%%Pages: 1 +%Exiv2Version: _Exiv2Version_ +%Exiv2Website: http://www.exiv2.org/ +%%EndComments +%%Page: 1 1 +% begin of XMP embedding with non-standard comment +%%BeginPageSetup +%Exiv2BeginXMP: Before %%EndPageSetup +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% &&end XMP packet marker&&) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + + + + + + + + + + + + + + + + + + + + + + +% &&end XMP packet marker&& +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +%Exiv2EndXMP +%%EndPageSetup +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +10 setlinewidth +10 10 moveto +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment +%%PageTrailer +%Exiv2BeginXMP: After %%PageTrailer +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +%Exiv2EndXMP +%%EOF diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.xmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.xmp new file mode 100644 index 00000000..12bbf745 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.xmp @@ -0,0 +1 @@ + diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup.eps b/test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup.eps new file mode 100644 index 00000000..72b3ea2e --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup.eps @@ -0,0 +1,40 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%ADO_ContainsXMP: MainFirst +%%EndComments +%%Page: 1 1 +%%BeginPageSetup +% begin of XMP embedding with non-standard comment +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +%%EndPageSetup +10 setlinewidth +10 10 moveto +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup.xmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup.xmp new file mode 100644 index 00000000..0a63ab4c --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup.xmp @@ -0,0 +1,8 @@ + + + + + + diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.eps b/test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.eps new file mode 100644 index 00000000..a7ee42db --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.eps @@ -0,0 +1,39 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%%EndComments +%%Page: 1 1 +%%BeginPageSetup +% begin of XMP embedding with non-standard comment +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +%%EndPageSetup +10 setlinewidth +10 10 moveto +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.xmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.xmp new file mode 100644 index 00000000..12bbf745 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.xmp @@ -0,0 +1 @@ + diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page.eps b/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page.eps new file mode 100644 index 00000000..f4d37638 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page.eps @@ -0,0 +1,40 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%ADO_ContainsXMP: MainFirst +%%EndComments +%%Page: 1 1 +%%BeginPageSetup +%%EndPageSetup +10 setlinewidth +10 10 moveto +% begin of XMP embedding with non-standard comment +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page.eps.newxmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page.eps.newxmp new file mode 100644 index 00000000..9fc6e91a --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page.eps.newxmp @@ -0,0 +1,98 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%ADO_ContainsXMP: MainFirst +%%LanguageLevel: 2 +%%Pages: 1 +%Exiv2Version: _Exiv2Version_ +%Exiv2Website: http://www.exiv2.org/ +%%EndComments +%%Page: 1 1 +%%BeginPageSetup +%Exiv2BeginXMP: Before %%EndPageSetup +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% &&end XMP packet marker&&) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + + + + + + + + + + + + + + + + + + + + + + +% &&end XMP packet marker&& +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +%Exiv2EndXMP +%%EndPageSetup +10 setlinewidth +10 10 moveto +% begin of XMP embedding with non-standard comment +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment +%%PageTrailer +%Exiv2BeginXMP: After %%PageTrailer +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +%Exiv2EndXMP +%%EOF diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page.xmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page.xmp new file mode 100644 index 00000000..0a63ab4c --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page.xmp @@ -0,0 +1,8 @@ + + + + + + diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps b/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps new file mode 100644 index 00000000..21240f0c --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps @@ -0,0 +1,39 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%%EndComments +%%Page: 1 1 +%%BeginPageSetup +%%EndPageSetup +10 setlinewidth +10 10 moveto +% begin of XMP embedding with non-standard comment +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps.newxmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps.newxmp new file mode 100644 index 00000000..63a00fb9 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps.newxmp @@ -0,0 +1,98 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%%LanguageLevel: 2 +%ADO_ContainsXMP: MainFirst +%%Pages: 1 +%Exiv2Version: _Exiv2Version_ +%Exiv2Website: http://www.exiv2.org/ +%%EndComments +%%Page: 1 1 +%%BeginPageSetup +%Exiv2BeginXMP: Before %%EndPageSetup +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% &&end XMP packet marker&&) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + + + + + + + + + + + + + + + + + + + + + + +% &&end XMP packet marker&& +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +%Exiv2EndXMP +%%EndPageSetup +10 setlinewidth +10 10 moveto +% begin of XMP embedding with non-standard comment +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +% end of XMP embedding with non-standard comment +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% begin of XMP embedding trailer with non-standard comment +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +% end of XMP embedding trailer with non-standard comment +%%PageTrailer +%Exiv2BeginXMP: After %%PageTrailer +[/EMC Exiv2_pdfmark +[/NamespacePop Exiv2_pdfmark +%Exiv2EndXMP +%%EOF diff --git a/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.xmp b/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.xmp new file mode 100644 index 00000000..12bbf745 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.xmp @@ -0,0 +1 @@ + diff --git a/test/data/eps/eps-flat_minimal_missing-xmp-embedding-trailer.eps b/test/data/eps/eps-flat_minimal_missing-xmp-embedding-trailer.eps new file mode 100644 index 00000000..5197ba00 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_missing-xmp-embedding-trailer.eps @@ -0,0 +1,38 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 5 5 105 105 +%ADO_ContainsXMP: MainFirst +%%EndComments +%%Page: 1 1 +%%BeginPageSetup +%begin_xml_code +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{userdict /Exiv2_pdfmark /cleartomark load put + userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} +{userdict /Exiv2_pdfmark /pdfmark load put + userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse +[/NamespacePush Exiv2_pdfmark +[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark +[{Exiv2_metadata_stream} 2 dict begin + /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark +[{Exiv2_metadata_stream} + currentfile 0 (% non-standard end marker) + /SubFileDecode filter Exiv2_metafile_pdfmark + + + + + + + +% non-standard end marker +[/Document 1 dict begin + /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark +%end_xml_code +%%EndPageSetup +10 setlinewidth +10 10 moveto +0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath +stroke +% missing XMP embedding trailer +%%EOF diff --git a/test/data/eps/eps-flat_minimal_missing-xmp-embedding-trailer.xmp b/test/data/eps/eps-flat_minimal_missing-xmp-embedding-trailer.xmp new file mode 100644 index 00000000..2e61f753 --- /dev/null +++ b/test/data/eps/eps-flat_minimal_missing-xmp-embedding-trailer.xmp @@ -0,0 +1,8 @@ + + + + + + diff --git a/test/data/eps/eps-flat_minimal_xmp_exiftool-8.56.eps b/test/data/eps/eps-flat_minimal_xmp_exiftool-8.56.eps index cf3f4545..d4ae7641 100644 --- a/test/data/eps/eps-flat_minimal_xmp_exiftool-8.56.eps +++ b/test/data/eps/eps-flat_minimal_xmp_exiftool-8.56.eps @@ -88,7 +88,7 @@ ConsumeMetadata - + diff --git a/test/data/eps/eps-flat_minimal_xmp_exiftool-8.56_fixed.xmp b/test/data/eps/eps-flat_minimal_xmp_exiftool-8.56.xmp similarity index 100% rename from test/data/eps/eps-flat_minimal_xmp_exiftool-8.56_fixed.xmp rename to test/data/eps/eps-flat_minimal_xmp_exiftool-8.56.xmp diff --git a/test/data/eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps b/test/data/eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps new file mode 100644 index 00000000..e24fb53a --- /dev/null +++ b/test/data/eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps @@ -0,0 +1,214 @@ +%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Photoshop Version 12.0.2x20101122 [20101122.r.1204 2010/11/22:02:00:00 cutoff; r branch] %%Title: zs_photoshop-cs5-binary.eps %%CreationDate: 3/25/11 5:26 PM %%BoundingBox: 0 0 11 14 %%HiResBoundingBox: 0 0 11.1 14.1 %%SuppressDotGainCompensation %%EndComments %%BeginProlog %%EndProlog %%BeginSetup %%EndSetup %ImageData: 37 47 8 3 1 37 1 "beginimage" %BeginPhotoshop: 3384 % 3842494D0425000000000010000000000000000000000000000000003842494D % 043A0000000000F1000000100000000100000000000B7072696E744F75747075 % 740000000600000000436C7253656E756D00000000436C72530000000045434D % 59000000004E6D2020544558540000001900500068006F0074006F0073006800 % 6F007000200034002000440065006600610075006C007400200043004D005900 % 4B000000000000496E7465656E756D00000000496E746500000000436C726D00 % 0000004D70426C626F6F6C010000000F7072696E745369787465656E42697462 % 6F6F6C000000000B7072696E7465724E616D65544558540000000F0031003700 % 32002E00320038002E003100370036002E0031003000310000003842494D043B % 0000000001B200000010000000010000000000127072696E744F75747075744F % 7074696F6E7300000012000000004370746E626F6F6C0000000000436C627262 % 6F6F6C00000000005267734D626F6F6C000000000043726E43626F6F6C000000 % 0000436E7443626F6F6C00000000004C626C73626F6F6C00000000004E677476 % 626F6F6C0000000000456D6C44626F6F6C0000000000496E7472626F6F6C0000 % 00000042636B674F626A63000000010000000000005247424300000003000000 % 0052642020646F7562406FE000000000000000000047726E20646F7562406FE0 % 000000000000000000426C2020646F7562406FE0000000000000000000427264 % 54556E744623526C74000000000000000000000000426C6420556E744623526C % 7400000000000000000000000052736C74556E74462350786C406E0000000000 % 000000000A766563746F7244617461626F6F6C010000000050675073656E756D % 00000000506750730000000050675043000000004C656674556E744623526C74 % 000000000000000000000000546F7020556E744623526C740000000000000000 % 0000000053636C20556E74462350726340590000000000003842494D03ED0000 % 0000001000F000000001000200F00000000100023842494D042600000000000E % 000000000000000000003F8000003842494D040D000000000004000000783842 % 494D04190000000000040000001E3842494D03F3000000000009000000000000 % 000001003842494D271000000000000A000100000000000000023842494D03F5 % 000000000048002F66660001006C66660006000000000001002F6666000100A1 % 999A0006000000000001003200000001005A0000000600000000000100350000 % 0001002D000000060000000000013842494D03F80000000000700000FFFFFFFF % FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFF % FFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFF % FFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF % FFFFFFFFFFFF03E800003842494D040800000000001000000001000002400000 % 0240000000003842494D041E000000000004000000003842494D041A00000000 % 03710000000600000000000000000000002F000000250000001E007A0073005F % 00700068006F0074006F00730068006F0070002D006300730035002D00610073 % 006300690069002D007000720065007600690065007700000001000000000000 % 00000000000000000000000000010000000000000000000000250000002F0000 % 0000000000000000000000000000010000000000000000000000000000000000 % 000010000000010000000000006E756C6C0000000200000006626F756E64734F % 626A6300000001000000000000526374310000000400000000546F70206C6F6E % 6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E % 670000002F00000000526768746C6F6E670000002500000006736C6963657356 % 6C4C73000000014F626A6300000001000000000005736C696365000000120000 % 0007736C69636549446C6F6E67000000000000000767726F757049446C6F6E67 % 00000000000000066F726967696E656E756D0000000C45536C6963654F726967 % 696E0000000D6175746F47656E6572617465640000000054797065656E756D00 % 00000A45536C6963655479706500000000496D672000000006626F756E64734F % 626A6300000001000000000000526374310000000400000000546F70206C6F6E % 6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E % 670000002F00000000526768746C6F6E67000000250000000375726C54455854 % 000000010000000000006E756C6C54455854000000010000000000004D736765 % 5445585400000001000000000006616C74546167544558540000000100000000 % 000E63656C6C54657874497348544D4C626F6F6C010000000863656C6C546578 % 745445585400000001000000000009686F727A416C69676E656E756D0000000F % 45536C696365486F727A416C69676E0000000764656661756C74000000097665 % 7274416C69676E656E756D0000000F45536C69636556657274416C69676E0000 % 000764656661756C740000000B6267436F6C6F7254797065656E756D00000011 % 45536C6963654247436F6C6F7254797065000000004E6F6E6500000009746F70 % 4F75747365746C6F6E67000000000000000A6C6566744F75747365746C6F6E67 % 000000000000000C626F74746F6D4F75747365746C6F6E67000000000000000B % 72696768744F75747365746C6F6E6700000000003842494D042800000000000C % 000000023FF00000000000003842494D041100000000000101003842494D0414 % 000000000004000000013842494D040C00000000037200000001000000250000 % 002F00000070000014900000035600180001FFD8FFED000C41646F62655F434D % 0001FFEE000E41646F626500648000000001FFDB0084000C08080809080C0909 % 0C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C % 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E % 0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C % 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108002F00 % 2503012200021101031101FFDD00040003FFC4013F0000010501010101010100 % 000000000000030001020405060708090A0B0100010501010101010100000000 % 000000010002030405060708090A0B1000010401030204020507060805030C33 % 010002110304211231054151611322718132061491A1B14223241552C1623334 % 7282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E2 % 65F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6 % B6C6D6E6F637475767778797A7B7C7D7E7F71100020201020404030405060707 % 0605350100021103213112044151617122130532819114A1B14223C152D1F033 % 2462E1728292435315637334F1250616A2B283072635C2D2449354A317644555 % 367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F556667686 % 96A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00 % F5549729D6BEB6BB033863B5B22752B7FA6E7D79D8CDB987909A2712481B867C % 9CAE5C78E39243D33D8B71242C9C8AF1AA36D861A166E07D63C2CEBCD353A5C1 % 13200D13BB1C7164944CA312631DCBAE92649158FF00FFD0D9FAEFD21CD7FDB1 % 834EE81F53BAEFD9EDFB2DCEF6BB895DD750C3AF3319D4BC4C85E57D6302DE97 % 9EE68900196955728309F18D8BBBC8E48735CB9E5B27CD11E92F4FF5CFAE37D3 % 18D43BE9730A97D47C0B2CCA3927E885818D4E4F54CB6D725CE71E7C97A5F42C % 1A3A6E2B6991BC8D5285E4C9C47609E6B8394E53D886B927BBAD1A4249488949 % 5A705FFFD1F555CF7D64FAB6DEA8D0E67B6C1DD74292128890A2C98734F14C4E % 06A41E67EAFF00D566F4D9B6C3BADEC553CBC4EB47AD35F5B8FD9E750BB25022 % B9D62533DA1400D299C73D93DC964981394C70FABA7923DB67D9A3F3A1246D12 % 4FA6B717E76FFFD93842494D042100000000005500000001010000000F004100 % 64006F00620065002000500068006F0074006F00730068006F00700000001300 % 410064006F00620065002000500068006F0074006F00730068006F0070002000 % 430053003500000001003842494D042200000000012E4D4D002A000000080007 % 011200030000000100010000011A00050000000100000062011B000500000001 % 0000006A012800030000000100020000013100020000001E0000007201320002 % 00000014000000908769000400000001000000A4000000D000249F0000002710 % 00249F000000271041646F62652050686F746F73686F7020435335204D616369 % 6E746F736800323031313A30333A32352031373A32353A3537000003A0010003 % 00000001FFFF0000A00200040000000100000025A0030004000000010000002F % 0000000000000006010300030000000100060000011A0005000000010000011E % 011B000500000001000001260128000300000001000200000201000400000001 % 0000012E02020004000000010000000000000000000000480000000100000048 % 000000013842494D03FD0000000000080000000000000000 %EndPhotoshop %begin_xml_code /pdfmark where {pop true} {false} ifelse /currentdistillerparams where {pop currentdistillerparams /CoreDistVersion get 5000 ge } {false} ifelse and not {userdict /pdfmark /cleartomark load put} if [/NamespacePush pdfmark [/_objdef {photoshop_metadata_stream} /type /stream /OBJ pdfmark /MetadataString 17491 string def % exact length of metadata /TempString 100 string def /ConsumeMetadata { currentfile TempString readline pop pop currentfile MetadataString readstring pop pop } bind def ConsumeMetadata %begin_xml_packet: 17491 + + + + Adobe Photoshop CS5 Macintosh + 2011-03-25T17:23:38+01:00 + 2011-03-25T17:25:57+01:00 + 2011-03-25T17:25:57+01:00 + + + image/epsf + + + xmp.iid:0A801174072068119109FFD81EEC41EF + xmp.did:02801174072068119109FFD81EEC41EF + xmp.did:02801174072068119109FFD81EEC41EF + + + + created + xmp.iid:02801174072068119109FFD81EEC41EF + 2011-03-25T17:23:38+01:00 + Adobe Photoshop CS5 Macintosh + + + saved + xmp.iid:03801174072068119109FFD81EEC41EF + 2011-03-25T17:24:28+01:00 + Adobe Photoshop CS5 Macintosh + / + + + saved + xmp.iid:04801174072068119109FFD81EEC41EF + 2011-03-25T17:24:28+01:00 + Adobe Photoshop CS5 Macintosh + / + + + saved + xmp.iid:05801174072068119109FFD81EEC41EF + 2011-03-25T17:25:06+01:00 + Adobe Photoshop CS5 Macintosh + / + + + saved + xmp.iid:06801174072068119109FFD81EEC41EF + 2011-03-25T17:25:06+01:00 + Adobe Photoshop CS5 Macintosh + / + + + saved + xmp.iid:07801174072068119109FFD81EEC41EF + 2011-03-25T17:25:23+01:00 + Adobe Photoshop CS5 Macintosh + / + + + saved + xmp.iid:08801174072068119109FFD81EEC41EF + 2011-03-25T17:25:23+01:00 + Adobe Photoshop CS5 Macintosh + / + + + saved + xmp.iid:09801174072068119109FFD81EEC41EF + 2011-03-25T17:25:57+01:00 + Adobe Photoshop CS5 Macintosh + / + + + saved + xmp.iid:0A801174072068119109FFD81EEC41EF + 2011-03-25T17:25:57+01:00 + Adobe Photoshop CS5 Macintosh + / + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %end_xml_packet [{photoshop_metadata_stream} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT pdfmark [{photoshop_metadata_stream} MetadataString /PUT pdfmark [/_objdef {nextImage} /NI pdfmark %end_xml_code gsave % EPS gsave /hascolor /deviceinfo where {pop deviceinfo /Colors known {deviceinfo /Colors get exec 1 gt} {false} ifelse} {/statusdict where {pop statusdict /processcolors known {statusdict /processcolors get exec 1 gt} {false} ifelse} {false} ifelse} ifelse def 40 dict begin /_image systemdict /image get def /_setgray systemdict /setgray get def /_currentgray systemdict /currentgray get def /_settransfer systemdict /settransfer get def /_currenttransfer systemdict /currenttransfer get def /blank 0 _currenttransfer exec 1 _currenttransfer exec eq def /negative blank {0 _currenttransfer exec 0.5 lt} {0 _currenttransfer exec 1 _currenttransfer exec gt} ifelse def /inverted? negative def /level2 systemdict /languagelevel known {languagelevel 2 ge} {false} ifelse def /level3 systemdict /languagelevel known {languagelevel 3 ge} {false} ifelse def /foureq {4 index eq 8 1 roll 4 index eq 8 1 roll 4 index eq 8 1 roll 4 index eq 8 1 roll pop pop pop pop and and and} def hascolor {/band 0 def} {/band 5 def} ifelse /setcmykcolor where {pop 1 0 0 0 setcmykcolor _currentgray 1 exch sub 0 1 0 0 setcmykcolor _currentgray 1 exch sub 0 0 1 0 setcmykcolor _currentgray 1 exch sub 0 0 0 1 setcmykcolor _currentgray 1 exch sub 4 {4 copy} repeat 1 0 0 0 foureq {/band 1 store} if 0 1 0 0 foureq {/band 2 store} if 0 0 1 0 foureq {/band 3 store} if 0 0 0 1 foureq {/band 4 store} if 0 0 0 0 foureq {/band 6 store} if} if blank {/band 6 store} if gsave % Image Header gsave /rows 47 def /cols 37 def 11.1 14.1 scale level2 { band 0 eq { /DeviceRGB } {/DeviceGray} ifelse setcolorspace currentdict /PhotoshopDuotoneColorSpace undef currentdict /PhotoshopDuotoneAltColorSpace undef } if /picstr1 37 string def /picstr2 37 string def /picstr3 37 string def /picstr4 37 string def /_rowpadstr 37 string def /rawreaddata {currentfile exch readstring pop} def /padreaddata { _topPad 0 gt { /_topPad _topPad 1 sub def pop _rowpadstr } { _subImageRows 0 gt { /_subImageRows _subImageRows 1 sub def dup _leftPad _picsubstr rawreaddata putinterval } { pop _rowpadstr } ifelse } ifelse } def /image2 level2 {/image load def} {{begin Width Height BitsPerComponent ImageMatrix Decode length 2 eq {/DataSource load image} if Decode length 6 eq {DataSource 0 get DataSource 1 get DataSource 2 get true 3 colorimage} if Decode length 8 eq {DataSource 0 get DataSource 1 get DataSource 2 get DataSource 3 get true 4 colorimage} if end} def} ifelse /_image2 level2 {/_image load def} {{begin Width Height BitsPerComponent ImageMatrix /DataSource load _image end} def} ifelse /beginimage { band 0 eq band 4 eq or band 5 eq or {image2} {negative {{pop 0}} {{pop 1}} ifelse _settransfer _image2} ifelse } def /readdata /rawreaddata load bind def 12 dict begin /ImageType 1 def /Width cols def /Height rows def /ImageMatrix [cols 0 0 rows neg 0 rows] def /BitsPerComponent 8 def band 0 eq {/Decode [0 1 0 1 0 1] def /MultipleDataSources true def /DataSource [ {picstr1 readdata} {picstr2 readdata} {picstr3 readdata picstr4 readdata pop} ] def} {/Decode [0 1] def /DataSource { picstr1 readdata pop picstr2 readdata pop picstr3 readdata pop picstr4 readdata } def} ifelse currentdict end %%BeginBinary: 6967 beginimage ееǶհfYbհfYbåŔ`;-8UɯŔ`;-8UɯӮkaiõẁL+"(?bǡ|b[kẁL+"(?bǡ|b[kˠx_Y]nո{F,%%2LxϧxQ80>g{F,%%2LxϧxQ80>gȜt`[[ex۽|icnḀL,%%+9ZݷX7(#,SḀL,%%+9ZݷX7(#,Sɟx`[[_jɤh]Y`~Y3&%%,Bmțg?,%%/RY3&%%,Bmțg?,%%/Rѩe\[[`qմn`[[b}ӢmB,%"%2Sڲ}M2%"%5[ӢmB,%"%2Sڲ}M2%"%5[޹q`[Y[e~ŝye[Y[g߻X7(#%+=bŕa;*%$*?l߻X7(#%+=bŕa;*%$*?l̥h]Y[_mӯk^[Z^nҦrG.%#%.GrծyK/%#%2PҦrG.%#%.GrծyK/%#%2Pݼub[Y[bušwb[Y[e{⿏\7'##&4T߽\9'$$)`ƕe:)#"#$$#%,>`ԯk^YYYZZY[`nݴO.%#####&4TݴO.%#####&4TǞzb[YYYYY\f~Οf>)#"""$+FrΟf>)#"""$+Frڷn^YYYYZ_tṁM/$"##%6YԻṁM/$"##%6YԻʠybZYYY[h̽Νh=)"#&.KzٻsfsΝh=)"#&.Kzٻsfsڵm^YY\bw̮߻W7**3HpϧsG5Fs߻W7**3HpϧsG5Fșh^^eu۽ugtծ`JLYv̞f5"5fծ`JLYv̞f5"5f¢wxٶgYgϴЦsF5GsϴЦsF5Gsǯܼtguۻsfsۻsfs̯ջջ̼ %%EndBinary grestore end % Image Trailer grestore grestore % EPS grestore [{nextImage} 1 dict begin /Metadata {photoshop_metadata_stream} def currentdict end /PUT pdfmark [/NamespacePop pdfmark \ No newline at end of file diff --git a/test/data/eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps.newxmp b/test/data/eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps.newxmp new file mode 100644 index 00000000..97136676 --- /dev/null +++ b/test/data/eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps.newxmp @@ -0,0 +1,30 @@ +%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Photoshop Version 12.0.2x20101122 [20101122.r.1204 2010/11/22:02:00:00 cutoff; r branch] %%Title: zs_photoshop-cs5-binary.eps %%CreationDate: 3/25/11 5:26 PM %%BoundingBox: 0 0 11 14 %%HiResBoundingBox: 0 0 11.1 14.1 %%SuppressDotGainCompensation %%LanguageLevel: 2 %ADO_ContainsXMP: MainFirst %%Pages: 1 %Exiv2Version: _Exiv2Version_ %Exiv2Website: http://www.exiv2.org/ %%EndComments %%BeginProlog %%EndProlog %%BeginSetup %%EndSetup %ImageData: 37 47 8 3 1 37 1 "beginimage" %BeginPhotoshop: 3384 % 3842494D0425000000000010000000000000000000000000000000003842494D % 043A0000000000F1000000100000000100000000000B7072696E744F75747075 % 740000000600000000436C7253656E756D00000000436C72530000000045434D % 59000000004E6D2020544558540000001900500068006F0074006F0073006800 % 6F007000200034002000440065006600610075006C007400200043004D005900 % 4B000000000000496E7465656E756D00000000496E746500000000436C726D00 % 0000004D70426C626F6F6C010000000F7072696E745369787465656E42697462 % 6F6F6C000000000B7072696E7465724E616D65544558540000000F0031003700 % 32002E00320038002E003100370036002E0031003000310000003842494D043B % 0000000001B200000010000000010000000000127072696E744F75747075744F % 7074696F6E7300000012000000004370746E626F6F6C0000000000436C627262 % 6F6F6C00000000005267734D626F6F6C000000000043726E43626F6F6C000000 % 0000436E7443626F6F6C00000000004C626C73626F6F6C00000000004E677476 % 626F6F6C0000000000456D6C44626F6F6C0000000000496E7472626F6F6C0000 % 00000042636B674F626A63000000010000000000005247424300000003000000 % 0052642020646F7562406FE000000000000000000047726E20646F7562406FE0 % 000000000000000000426C2020646F7562406FE0000000000000000000427264 % 54556E744623526C74000000000000000000000000426C6420556E744623526C % 7400000000000000000000000052736C74556E74462350786C406E0000000000 % 000000000A766563746F7244617461626F6F6C010000000050675073656E756D % 00000000506750730000000050675043000000004C656674556E744623526C74 % 000000000000000000000000546F7020556E744623526C740000000000000000 % 0000000053636C20556E74462350726340590000000000003842494D03ED0000 % 0000001000F000000001000200F00000000100023842494D042600000000000E % 000000000000000000003F8000003842494D040D000000000004000000783842 % 494D04190000000000040000001E3842494D03F3000000000009000000000000 % 000001003842494D271000000000000A000100000000000000023842494D03F5 % 000000000048002F66660001006C66660006000000000001002F6666000100A1 % 999A0006000000000001003200000001005A0000000600000000000100350000 % 0001002D000000060000000000013842494D03F80000000000700000FFFFFFFF % FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFF % FFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFF % FFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF % FFFFFFFFFFFF03E800003842494D040800000000001000000001000002400000 % 0240000000003842494D041E000000000004000000003842494D041A00000000 % 03710000000600000000000000000000002F000000250000001E007A0073005F % 00700068006F0074006F00730068006F0070002D006300730035002D00610073 % 006300690069002D007000720065007600690065007700000001000000000000 % 00000000000000000000000000010000000000000000000000250000002F0000 % 0000000000000000000000000000010000000000000000000000000000000000 % 000010000000010000000000006E756C6C0000000200000006626F756E64734F % 626A6300000001000000000000526374310000000400000000546F70206C6F6E % 6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E % 670000002F00000000526768746C6F6E670000002500000006736C6963657356 % 6C4C73000000014F626A6300000001000000000005736C696365000000120000 % 0007736C69636549446C6F6E67000000000000000767726F757049446C6F6E67 % 00000000000000066F726967696E656E756D0000000C45536C6963654F726967 % 696E0000000D6175746F47656E6572617465640000000054797065656E756D00 % 00000A45536C6963655479706500000000496D672000000006626F756E64734F % 626A6300000001000000000000526374310000000400000000546F70206C6F6E % 6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E % 670000002F00000000526768746C6F6E67000000250000000375726C54455854 % 000000010000000000006E756C6C54455854000000010000000000004D736765 % 5445585400000001000000000006616C74546167544558540000000100000000 % 000E63656C6C54657874497348544D4C626F6F6C010000000863656C6C546578 % 745445585400000001000000000009686F727A416C69676E656E756D0000000F % 45536C696365486F727A416C69676E0000000764656661756C74000000097665 % 7274416C69676E656E756D0000000F45536C69636556657274416C69676E0000 % 000764656661756C740000000B6267436F6C6F7254797065656E756D00000011 % 45536C6963654247436F6C6F7254797065000000004E6F6E6500000009746F70 % 4F75747365746C6F6E67000000000000000A6C6566744F75747365746C6F6E67 % 000000000000000C626F74746F6D4F75747365746C6F6E67000000000000000B % 72696768744F75747365746C6F6E6700000000003842494D042800000000000C % 000000023FF00000000000003842494D041100000000000101003842494D0414 % 000000000004000000013842494D040C00000000037200000001000000250000 % 002F00000070000014900000035600180001FFD8FFED000C41646F62655F434D % 0001FFEE000E41646F626500648000000001FFDB0084000C08080809080C0909 % 0C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C % 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E % 0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C % 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108002F00 % 2503012200021101031101FFDD00040003FFC4013F0000010501010101010100 % 000000000000030001020405060708090A0B0100010501010101010100000000 % 000000010002030405060708090A0B1000010401030204020507060805030C33 % 010002110304211231054151611322718132061491A1B14223241552C1623334 % 7282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E2 % 65F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6 % B6C6D6E6F637475767778797A7B7C7D7E7F71100020201020404030405060707 % 0605350100021103213112044151617122130532819114A1B14223C152D1F033 % 2462E1728292435315637334F1250616A2B283072635C2D2449354A317644555 % 367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F556667686 % 96A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00 % F5549729D6BEB6BB033863B5B22752B7FA6E7D79D8CDB987909A2712481B867C % 9CAE5C78E39243D33D8B71242C9C8AF1AA36D861A166E07D63C2CEBCD353A5C1 % 13200D13BB1C7164944CA312631DCBAE92649158FF00FFD0D9FAEFD21CD7FDB1 % 834EE81F53BAEFD9EDFB2DCEF6BB895DD750C3AF3319D4BC4C85E57D6302DE97 % 9EE68900196955728309F18D8BBBC8E48735CB9E5B27CD11E92F4FF5CFAE37D3 % 18D43BE9730A97D47C0B2CCA3927E885818D4E4F54CB6D725CE71E7C97A5F42C % 1A3A6E2B6991BC8D5285E4C9C47609E6B8394E53D886B927BBAD1A4249488949 % 5A705FFFD1F555CF7D64FAB6DEA8D0E67B6C1DD74292128890A2C98734F14C4E % 06A41E67EAFF00D566F4D9B6C3BADEC553CBC4EB47AD35F5B8FD9E750BB25022 % B9D62533DA1400D299C73D93DC964981394C70FABA7923DB67D9A3F3A1246D12 % 4FA6B717E76FFFD93842494D042100000000005500000001010000000F004100 % 64006F00620065002000500068006F0074006F00730068006F00700000001300 % 410064006F00620065002000500068006F0074006F00730068006F0070002000 % 430053003500000001003842494D042200000000012E4D4D002A000000080007 % 011200030000000100010000011A00050000000100000062011B000500000001 % 0000006A012800030000000100020000013100020000001E0000007201320002 % 00000014000000908769000400000001000000A4000000D000249F0000002710 % 00249F000000271041646F62652050686F746F73686F7020435335204D616369 % 6E746F736800323031313A30333A32352031373A32353A3537000003A0010003 % 00000001FFFF0000A00200040000000100000025A0030004000000010000002F % 0000000000000006010300030000000100060000011A0005000000010000011E % 011B000500000001000001260128000300000001000200000201000400000001 % 0000012E02020004000000010000000000000000000000480000000100000048 % 000000013842494D03FD0000000000080000000000000000 %EndPhotoshop %%Page: 1 1 %%EndPageComments %%BeginPageSetup %Exiv2BeginXMP: Before %%EndPageSetup %Exiv2Notice: The following line is needed by Photoshop. %begin_xml_code /currentdistillerparams where {pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse {userdict /Exiv2_pdfmark /cleartomark load put userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put} {userdict /Exiv2_pdfmark /pdfmark load put userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse [/NamespacePush Exiv2_pdfmark [/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark [{Exiv2_metadata_stream} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark [{Exiv2_metadata_stream} currentfile 0 (% &&end XMP packet marker&&) /SubFileDecode filter Exiv2_metafile_pdfmark %Exiv2Notice: The following line is needed by Photoshop. Parameter must be exact size of XMP metadata. %begin_xml_packet: 2376 + + + + + + + + + + + + + + + + + + + + + + + + + + + % &&end XMP packet marker&& [/Document 1 dict begin /Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark %Exiv2Notice: The following line is needed by Photoshop. %end_xml_code %Exiv2EndXMP %%EndPageSetup gsave % EPS gsave /hascolor /deviceinfo where {pop deviceinfo /Colors known {deviceinfo /Colors get exec 1 gt} {false} ifelse} {/statusdict where {pop statusdict /processcolors known {statusdict /processcolors get exec 1 gt} {false} ifelse} {false} ifelse} ifelse def 40 dict begin /_image systemdict /image get def /_setgray systemdict /setgray get def /_currentgray systemdict /currentgray get def /_settransfer systemdict /settransfer get def /_currenttransfer systemdict /currenttransfer get def /blank 0 _currenttransfer exec 1 _currenttransfer exec eq def /negative blank {0 _currenttransfer exec 0.5 lt} {0 _currenttransfer exec 1 _currenttransfer exec gt} ifelse def /inverted? negative def /level2 systemdict /languagelevel known {languagelevel 2 ge} {false} ifelse def /level3 systemdict /languagelevel known {languagelevel 3 ge} {false} ifelse def /foureq {4 index eq 8 1 roll 4 index eq 8 1 roll 4 index eq 8 1 roll 4 index eq 8 1 roll pop pop pop pop and and and} def hascolor {/band 0 def} {/band 5 def} ifelse /setcmykcolor where {pop 1 0 0 0 setcmykcolor _currentgray 1 exch sub 0 1 0 0 setcmykcolor _currentgray 1 exch sub 0 0 1 0 setcmykcolor _currentgray 1 exch sub 0 0 0 1 setcmykcolor _currentgray 1 exch sub 4 {4 copy} repeat 1 0 0 0 foureq {/band 1 store} if 0 1 0 0 foureq {/band 2 store} if 0 0 1 0 foureq {/band 3 store} if 0 0 0 1 foureq {/band 4 store} if 0 0 0 0 foureq {/band 6 store} if} if blank {/band 6 store} if gsave % Image Header gsave /rows 47 def /cols 37 def 11.1 14.1 scale level2 { band 0 eq { /DeviceRGB } {/DeviceGray} ifelse setcolorspace currentdict /PhotoshopDuotoneColorSpace undef currentdict /PhotoshopDuotoneAltColorSpace undef } if /picstr1 37 string def /picstr2 37 string def /picstr3 37 string def /picstr4 37 string def /_rowpadstr 37 string def /rawreaddata {currentfile exch readstring pop} def /padreaddata { _topPad 0 gt { /_topPad _topPad 1 sub def pop _rowpadstr } { _subImageRows 0 gt { /_subImageRows _subImageRows 1 sub def dup _leftPad _picsubstr rawreaddata putinterval } { pop _rowpadstr } ifelse } ifelse } def /image2 level2 {/image load def} {{begin Width Height BitsPerComponent ImageMatrix Decode length 2 eq {/DataSource load image} if Decode length 6 eq {DataSource 0 get DataSource 1 get DataSource 2 get true 3 colorimage} if Decode length 8 eq {DataSource 0 get DataSource 1 get DataSource 2 get DataSource 3 get true 4 colorimage} if end} def} ifelse /_image2 level2 {/_image load def} {{begin Width Height BitsPerComponent ImageMatrix /DataSource load _image end} def} ifelse /beginimage { band 0 eq band 4 eq or band 5 eq or {image2} {negative {{pop 0}} {{pop 1}} ifelse _settransfer _image2} ifelse } def /readdata /rawreaddata load bind def 12 dict begin /ImageType 1 def /Width cols def /Height rows def /ImageMatrix [cols 0 0 rows neg 0 rows] def /BitsPerComponent 8 def band 0 eq {/Decode [0 1 0 1 0 1] def /MultipleDataSources true def /DataSource [ {picstr1 readdata} {picstr2 readdata} {picstr3 readdata picstr4 readdata pop} ] def} {/Decode [0 1] def /DataSource { picstr1 readdata pop picstr2 readdata pop picstr3 readdata pop picstr4 readdata } def} ifelse currentdict end %%BeginBinary: 6967 beginimage ееǶհfYbհfYbåŔ`;-8UɯŔ`;-8UɯӮkaiõẁL+"(?bǡ|b[kẁL+"(?bǡ|b[kˠx_Y]nո{F,%%2LxϧxQ80>g{F,%%2LxϧxQ80>gȜt`[[ex۽|icnḀL,%%+9ZݷX7(#,SḀL,%%+9ZݷX7(#,Sɟx`[[_jɤh]Y`~Y3&%%,Bmțg?,%%/RY3&%%,Bmțg?,%%/Rѩe\[[`qմn`[[b}ӢmB,%"%2Sڲ}M2%"%5[ӢmB,%"%2Sڲ}M2%"%5[޹q`[Y[e~ŝye[Y[g߻X7(#%+=bŕa;*%$*?l߻X7(#%+=bŕa;*%$*?l̥h]Y[_mӯk^[Z^nҦrG.%#%.GrծyK/%#%2PҦrG.%#%.GrծyK/%#%2Pݼub[Y[bušwb[Y[e{⿏\7'##&4T߽\9'$$)`ƕe:)#"#$$#%,>`ԯk^YYYZZY[`nݴO.%#####&4TݴO.%#####&4TǞzb[YYYYY\f~Οf>)#"""$+FrΟf>)#"""$+Frڷn^YYYYZ_tṁM/$"##%6YԻṁM/$"##%6YԻʠybZYYY[h̽Νh=)"#&.KzٻsfsΝh=)"#&.Kzٻsfsڵm^YY\bw̮߻W7**3HpϧsG5Fs߻W7**3HpϧsG5Fșh^^eu۽ugtծ`JLYv̞f5"5fծ`JLYv̞f5"5f¢wxٶgYgϴЦsF5GsϴЦsF5Gsǯܼtguۻsfsۻsfs̯ջջ̼ %%EndBinary grestore end % Image Trailer grestore grestore % EPS grestore %%PageTrailer %Exiv2BeginXMP: After %%PageTrailer [/EMC Exiv2_pdfmark [/NamespacePop Exiv2_pdfmark %Exiv2EndXMP %%EOF \ No newline at end of file diff --git a/test/data/eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.xmp b/test/data/eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.xmp new file mode 100644 index 00000000..12bbf745 --- /dev/null +++ b/test/data/eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.xmp @@ -0,0 +1 @@ + diff --git a/test/data/eps/eps-test.out b/test/data/eps/eps-test.out index c9d98bff..f937c94f 100644 --- a/test/data/eps/eps-test.out +++ b/test/data/eps/eps-test.out @@ -186,6 +186,161 @@ Exit code: 0 Command: exiv2 -f -ex eps-flat_minimal_exiftool-8.56.eps Exit code: 0 +-----> eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps <----- + +Command: exiv2 -u -pa eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps +Xmp.test.test XmpText 20 TEST-irremovable-xmp +Exit code: 253 + +Command: exiv2 -f -eX eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps +Exit code: 0 + +Command: exiv2 -ix eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps +Exit code: 0 + +Command: (2) exiv2 -ix eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps +Exit code: 0 + +Command: exiv2 -f -ex eps-flat_minimal_irremovable-xmp-after-endpagesetup.eps +Exit code: 0 + +-----> eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps <----- + +Command: exiv2 -u -pa eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps +Exit code: 253 + +Command: exiv2 -f -eX eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps +Exit code: 0 + +Command: exiv2 -ix eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps +Exit code: 0 + +Command: (2) exiv2 -ix eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps +Exit code: 0 + +Command: exiv2 -f -ex eps-flat_minimal_irremovable-xmp-after-endpagesetup_no-adocontainsxmp.eps +Exit code: 0 + +-----> eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps <----- + +Command: exiv2 -u -pa eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps +Xmp.test.test XmpText 20 TEST-irremovable-xmp +Exit code: 253 + +Command: exiv2 -f -eX eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps +Exit code: 0 + +Command: exiv2 -ix eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps +Exit code: 0 + +Command: (2) exiv2 -ix eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps +Exit code: 0 + +Command: exiv2 -f -ex eps-flat_minimal_irremovable-xmp-at-endpagesetup.eps +Exit code: 0 + +-----> eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps <----- + +Command: exiv2 -u -pa eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps +Exit code: 253 + +Command: exiv2 -f -eX eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps +Exit code: 0 + +Command: exiv2 -ix eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps +Exit code: 0 + +Command: (2) exiv2 -ix eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps +Exit code: 0 + +Command: exiv2 -f -ex eps-flat_minimal_irremovable-xmp-at-endpagesetup_no-adocontainsxmp.eps +Exit code: 0 + +-----> eps-flat_minimal_irremovable-xmp-before-endpagesetup.eps <----- + +Command: exiv2 -u -pa eps-flat_minimal_irremovable-xmp-before-endpagesetup.eps +Warning: Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: 837 +Xmp.test.test XmpText 20 TEST-irremovable-xmp +Exit code: 253 + +Command: exiv2 -f -eX eps-flat_minimal_irremovable-xmp-before-endpagesetup.eps +Warning: Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: 837 +Exit code: 0 + +Command: exiv2 -ix eps-flat_minimal_irremovable-xmp-before-endpagesetup.eps +Warning: Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: 837 +Warning: Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: 837 +eps-flat_minimal_irremovable-xmp-before-endpagesetup.eps: Could not write metadata to file: Failed to write image +Exit code: 1 + +-----> eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.eps <----- + +Command: exiv2 -u -pa eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.eps +Warning: Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: 809 +Exit code: 253 + +Command: exiv2 -f -eX eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.eps +Warning: Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: 809 +Exit code: 0 + +Command: exiv2 -ix eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.eps +Warning: Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: 809 +Warning: Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: 809 +eps-flat_minimal_irremovable-xmp-before-endpagesetup_no-adocontainsxmp.eps: Could not write metadata to file: Failed to write image +Exit code: 1 + +-----> eps-flat_minimal_irremovable-xmp-in-page.eps <----- + +Command: exiv2 -u -pa eps-flat_minimal_irremovable-xmp-in-page.eps +Xmp.test.test XmpText 20 TEST-irremovable-xmp +Exit code: 253 + +Command: exiv2 -f -eX eps-flat_minimal_irremovable-xmp-in-page.eps +Exit code: 0 + +Command: exiv2 -ix eps-flat_minimal_irremovable-xmp-in-page.eps +Exit code: 0 + +Command: (2) exiv2 -ix eps-flat_minimal_irremovable-xmp-in-page.eps +Exit code: 0 + +Command: exiv2 -f -ex eps-flat_minimal_irremovable-xmp-in-page.eps +Exit code: 0 + +-----> eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps <----- + +Command: exiv2 -u -pa eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps +Exit code: 253 + +Command: exiv2 -f -eX eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps +Exit code: 0 + +Command: exiv2 -ix eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps +Exit code: 0 + +Command: (2) exiv2 -ix eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps +Exit code: 0 + +Command: exiv2 -f -ex eps-flat_minimal_irremovable-xmp-in-page_no-adocontainsxmp.eps +Exit code: 0 + +-----> eps-flat_minimal_missing-xmp-embedding-trailer.eps <----- + +Command: exiv2 -u -pa eps-flat_minimal_missing-xmp-embedding-trailer.eps +Warning: Unable to find XMP embedding trailer ending at position: 1424 +Xmp.test.test XmpText 34 TEST-missing-xmp-embedding-trailer +Exit code: 253 + +Command: exiv2 -f -eX eps-flat_minimal_missing-xmp-embedding-trailer.eps +Warning: Unable to find XMP embedding trailer ending at position: 1424 +Exit code: 0 + +Command: exiv2 -ix eps-flat_minimal_missing-xmp-embedding-trailer.eps +Warning: Unable to find XMP embedding trailer ending at position: 1424 +Warning: Unable to find XMP embedding trailer ending at position: 1424 +eps-flat_minimal_missing-xmp-embedding-trailer.eps: Could not write metadata to file: Failed to write image +Exit code: 1 + -----> eps-flat_minimal_xmp-readonly.eps <----- Command: exiv2 -u -pa eps-flat_minimal_xmp-readonly.eps @@ -269,26 +424,18 @@ Exit code: 0 -----> eps-flat_minimal_xmp_exiftool-8.56.eps <----- Command: exiv2 -u -pa eps-flat_minimal_xmp_exiftool-8.56.eps -Warning: Page at position 3906 conflicts with implicit page at position: 182 -Exiv2 exception in print action for file eps-flat_minimal_xmp_exiftool-8.56.eps: -Failed to read image data -Exit code: 1 - ------> eps-flat_minimal_xmp_exiftool-8.56_fixed.eps <----- - -Command: exiv2 -u -pa eps-flat_minimal_xmp_exiftool-8.56_fixed.eps -Warning: Second XMP metadata block interferes at position: 849 +Warning: Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: 4657 Xmp.dc.title LangAlt 1 lang="x-default" TEST-Exiftool Exit code: 253 -Command: exiv2 -f -eX eps-flat_minimal_xmp_exiftool-8.56_fixed.eps -Warning: Second XMP metadata block interferes at position: 849 +Command: exiv2 -f -eX eps-flat_minimal_xmp_exiftool-8.56.eps +Warning: Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: 4657 Exit code: 0 -Command: exiv2 -ix eps-flat_minimal_xmp_exiftool-8.56_fixed.eps -Warning: Second XMP metadata block interferes at position: 849 -Warning: Second XMP metadata block interferes at position: 849 -eps-flat_minimal_xmp_exiftool-8.56_fixed.eps: Could not write metadata to file: Failed to write image +Command: exiv2 -ix eps-flat_minimal_xmp_exiftool-8.56.eps +Warning: Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: 4657 +Warning: Inflexible XMP embedding is not replaceable because XMP metadata block is not removable at position: 4657 +eps-flat_minimal_xmp_exiftool-8.56.eps: Could not write metadata to file: Failed to write image Exit code: 1 -----> eps-flat_oodraw-lev1.eps <----- @@ -2571,6 +2718,23 @@ Warning: Missing %begin_xml_packet in Photoshop EPS at position: 8560 eps-flat_photoshop-cs5-binary_exiv2_missing-begin-xml-packet.eps: Could not write metadata to file: Failed to write image Exit code: 1 +-----> eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps <----- + +Command: exiv2 -u -pa eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps +Exit code: 253 + +Command: exiv2 -f -eX eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps +Exit code: 0 + +Command: exiv2 -ix eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps +Exit code: 0 + +Command: (2) exiv2 -ix eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps +Exit code: 0 + +Command: exiv2 -f -ex eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps +Exit code: 0 + -----> eps-flat_photoshop-e9-win-doseps.eps <----- Command: exiv2 -u -pa eps-flat_photoshop-e9-win-doseps.eps diff --git a/test/data/preview/preview-test.out b/test/data/preview/preview-test.out index 31a3a112..b541e229 100644 --- a/test/data/preview/preview-test.out +++ b/test/data/preview/preview-test.out @@ -224,6 +224,14 @@ Command: exiv2 -f -ep eps-flat_photoshop-cs5-binary_exiv2_missing-begin-xml-pack Warning: Missing %begin_xml_packet in Photoshop EPS at position: 8560 Exit code: 0 +-----> eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps <----- + +Command: exiv2 -pp eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps +Exit code: 0 + +Command: exiv2 -f -ep eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps +Exit code: 0 + -----> eps-flat_photoshop-e9-win-doseps.eps <----- Command: exiv2 -pp eps-flat_photoshop-e9-win-doseps.eps diff --git a/test/preview-test.sh b/test/preview-test.sh index 409eebd9..476b6650 100755 --- a/test/preview-test.sh +++ b/test/preview-test.sh @@ -44,6 +44,7 @@ images="eps/eps-flat_inkscape-epsi.eps \ eps/eps-flat_photoshop-cs5-binary_exiv2-bigxmp.eps \ eps/eps-flat_photoshop-cs5-binary_exiv2.eps \ eps/eps-flat_photoshop-cs5-binary_exiv2_missing-begin-xml-packet.eps \ + eps/eps-flat_photoshop-cs5-binary_no-adocontainsxmp.eps \ eps/eps-flat_photoshop-e9-win-doseps.eps \ eps/eps-flat_photoshop-e9-win.eps \ eps/eps-flat_photoshop-e9-win_exiv2.eps \