917
913
} // TiffEncoder::add
919
const std::string TiffPrinter::indent_(" ");
921
void TiffPrinter::incIndent()
924
} // TiffPrinter::incIndent
926
void TiffPrinter::decIndent()
928
if (prefix_.length() >= indent_.length()) {
929
prefix_.erase(prefix_.length() - indent_.length(), indent_.length());
931
} // TiffPrinter::decIndent
933
void TiffPrinter::visitEntry(TiffEntry* object)
935
printTiffEntry(object, prefix());
936
} // TiffPrinter::visitEntry
938
void TiffPrinter::visitDataEntry(TiffDataEntry* object)
940
printTiffEntry(object, prefix());
941
if (object->pValue()) {
942
os_ << prefix() << _("Data area") << " "
943
<< object->pValue()->sizeDataArea()
944
<< " " << _("bytes.\n");
946
} // TiffPrinter::visitDataEntry
948
void TiffPrinter::visitImageEntry(TiffImageEntry* object)
950
printTiffEntry(object, prefix());
951
} // TiffPrinter::visitImageEntry
953
void TiffPrinter::visitSizeEntry(TiffSizeEntry* object)
955
printTiffEntry(object, prefix());
958
void TiffPrinter::visitDirectory(TiffDirectory* object)
961
os_ << prefix() << tiffGroupName(object->group())
962
<< " " << _("directory with") << " "
963
// cast to make MSVC happy
964
<< std::dec << static_cast<unsigned int>(object->components_.size());
965
if (object->components_.size() == 1) os_ << " " << _("entry:\n");
966
else os_ << " " << _("entries:\n");
969
} // TiffPrinter::visitDirectory
971
void TiffPrinter::visitDirectoryNext(TiffDirectory* object)
974
if (object->hasNext()) {
975
if (object->pNext_) os_ << prefix() << _("Next directory:\n");
976
else os_ << prefix() << _("No next directory\n");
978
} // TiffPrinter::visitDirectoryNext
980
void TiffPrinter::visitDirectoryEnd(TiffDirectory* /*object*/)
983
} // TiffPrinter::visitDirectoryEnd
985
void TiffPrinter::visitSubIfd(TiffSubIfd* object)
987
os_ << prefix() << _("Sub-IFD") << " ";
988
printTiffEntry(object);
989
} // TiffPrinter::visitSubIfd
991
void TiffPrinter::visitMnEntry(TiffMnEntry* object)
993
if (!object->mn_) printTiffEntry(object, prefix());
994
else os_ << prefix() << _("Makernote") << " ";
995
} // TiffPrinter::visitMnEntry
997
void TiffPrinter::visitIfdMakernote(TiffIfdMakernote* /*object*/)
1000
} // TiffPrinter::visitIfdMakernote
1002
void TiffPrinter::printTiffEntry(TiffEntryBase* object,
1003
const std::string& px) const
1005
assert(object != 0);
1007
os_ << px << tiffGroupName(object->group())
1008
<< " " << _("tag") << " 0x" << std::setw(4) << std::setfill('0')
1009
<< std::hex << std::right << object->tag()
1010
<< ", " << _("type") << " 0x" << std::hex << object->tiffType()
1011
<< ", " << std::dec << object->count() << " "<< _("component");
1012
if (object->count() > 1) os_ << "s";
1013
os_ << " in " << object->size() << " " << _("bytes");
1014
if (object->size() > 4) os_ << ", " << _("offset") << " " << object->offset();
1016
const Value* vp = object->pValue();
1017
if (vp && vp->count() < 100) os_ << prefix() << *vp;
1018
else os_ << prefix() << "...";
1021
} // TiffPrinter::printTiffEntry
1023
void TiffPrinter::visitArrayEntry(TiffArrayEntry* object)
1025
os_ << prefix() << _("Array Entry") << " " << tiffGroupName(object->group())
1026
<< " " << _("tag") << " 0x" << std::setw(4) << std::setfill('0')
1027
<< std::hex << std::right << object->tag() << " " << _("with")
1028
<< " " << std::dec << object->count() << " ";
1029
if (object->count() > 1) os_ << _("elements");
1030
else os_ << _("element");
1032
} // TiffPrinter::visitArrayEntry
1034
void TiffPrinter::visitArrayElement(TiffArrayElement* object)
1036
printTiffEntry(object, prefix());
1037
} // TiffPrinter::visitArrayElement
1039
915
TiffReader::TiffReader(const byte* pData,
1041
917
TiffComponent* pRoot,