Albert Astals Cid <aa...@kde.org> writes: > The discussion about C++11 was in my opinion not concluded, i.e. noone > contacted the people that [wrongly] use core library about if they can use C+ > +11, i'd prefer if you revert the change that needs C++11.
Yes, but the patch made poppler build with C++11, without using any C++11 features in "public" header files, so it shouldn't affect libraries using internal core api. > Cheers, > Albert > > > El dissabte, 17 de setembre de 2016, a les 12:55:19 CEST, Adrian Johnson va > escriure: >> cmake/modules/PopplerMacros.cmake | 2 >> configure.ac | 1 >> utils/pdfinfo.1 | 4 + >> utils/pdfinfo.cc | 140 >> +++++++++++++++++++++++++++++++++++++- 4 files changed, 145 insertions(+), >> 2 deletions(-) >> >> New commits: >> commit 183dbf3249e8db2398b63a749eb010bc0a89dc35 >> Author: Adrian Johnson <ajohn...@redneon.com> >> Date: Sat Sep 17 22:08:23 2016 +0930 >> >> pdfinfo: add -dests option to print named destinations >> >> Bug 97262 >> >> diff --git a/cmake/modules/PopplerMacros.cmake >> b/cmake/modules/PopplerMacros.cmake index 6cadf40..e9b75b9 100644 >> --- a/cmake/modules/PopplerMacros.cmake >> +++ b/cmake/modules/PopplerMacros.cmake >> @@ -104,7 +104,7 @@ if(CMAKE_COMPILER_IS_GNUCXX) >> set(DEFAULT_COMPILE_WARNINGS_YES "-Wall -Wcast-align -fno-exceptions >> -fno-check-new -fno-common") set(DEFAULT_COMPILE_WARNINGS_KDE >> "-Wno-long-long -Wundef -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -Wcast-align >> -Wconversion -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security >> -Wmissing-format-attribute -fno-exceptions -fno-check-new -fno-common") >> >> - set(CMAKE_CXX_FLAGS "-Wnon-virtual-dtor >> -Woverloaded-virtual ${CMAKE_CXX_FLAGS}") + set(CMAKE_CXX_FLAGS >> "-std=c++11 -Wnon-virtual-dtor -Woverloaded-virtual >> ${CMAKE_CXX_FLAGS}") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") >> set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG") >> set(CMAKE_CXX_FLAGS_DEBUG "-g -O2 -fno-reorder-blocks >> -fno-schedule-insns -fno-inline") diff --git a/configure.ac b/configure.ac >> index c4cfc2c..9ce36e1 100644 >> --- a/configure.ac >> +++ b/configure.ac >> @@ -85,6 +85,7 @@ AC_ARG_ENABLE(build-type, >> enable_build_type=no) >> >> if test "x$GCC" = "xyes"; then >> + CXXFLAGS="-std=c++11 $CXXFLAGS" >> case "$enable_build_type" in >> relwithdebinfo) >> CFLAGS="-O2 -g $CFLAGS" >> diff --git a/utils/pdfinfo.1 b/utils/pdfinfo.1 >> index 741219f..b699dff 100644 >> --- a/utils/pdfinfo.1 >> +++ b/utils/pdfinfo.1 >> @@ -113,6 +113,10 @@ Prints dates in ISO-8601 format (including the time >> zone). .B \-rawdates >> Prints the raw (undecoded) date strings, directly from the PDF file. >> .TP >> +.B \-dests >> +Print a list of all named destinations. If a page range is specified using >> "\-f" and "\-l", only +destinations in the page range are listed. >> +.TP >> .BI \-enc " encoding-name" >> Sets the encoding to use for text output. This defaults to "UTF-8". >> .TP >> diff --git a/utils/pdfinfo.cc b/utils/pdfinfo.cc >> index 9cfdc0f..50e756e 100644 >> --- a/utils/pdfinfo.cc >> +++ b/utils/pdfinfo.cc >> @@ -36,6 +36,7 @@ >> #include <string.h> >> #include <time.h> >> #include <math.h> >> +#include <map> >> #include "parseargs.h" >> #include "printencodings.h" >> #include "goo/GooString.h" >> @@ -77,6 +78,7 @@ static GBool printHelp = gFalse; >> static GBool printEnc = gFalse; >> static GBool printStructure = gFalse; >> static GBool printStructureText = gFalse; >> +static GBool printDests = gFalse; >> >> static const ArgDesc argDesc[] = { >> {"-f", argInt, &firstPage, 0, >> @@ -97,6 +99,8 @@ static const ArgDesc argDesc[] = { >> "print the dates in ISO-8601 format"}, >> {"-rawdates", argFlag, &rawDates, 0, >> "print the undecoded date strings directly from the PDF file"}, >> + {"-dests", argFlag, &printDests, 0, >> + "print all named destinations in the PDF"}, >> {"-enc", argString, textEncName, sizeof(textEncName), >> "output text encoding name"}, >> {"-listenc",argFlag, &printEnc, 0, >> @@ -289,6 +293,135 @@ static void printStruct(const StructElement *element, >> unsigned indent) { } >> } >> >> +struct RefCompare { >> + bool operator() (const Ref& lhs, const Ref& rhs) const { >> + return lhs.num < rhs.num; >> + } >> +}; >> + >> +struct GooStringCompare { >> + bool operator() (GooString* lhs, GooString* rhs) const { >> + return lhs->cmp(const_cast<GooString*>(rhs)) < 0; >> + } >> +}; >> + >> +static void printLinkDest(LinkDest *dest) { >> + char buf[100]; >> + >> + switch (dest->getKind()) { >> + case destXYZ: >> + sprintf(buf, "[ XYZ "); >> + if (dest->getChangeLeft()) { >> + sprintf(buf+strlen(buf), "%4.f ", dest->getLeft()); >> + } else { >> + strcat(buf, "null "); >> + } >> + if (dest->getChangeTop()) { >> + sprintf(buf+strlen(buf), "%4.f ", dest->getTop()); >> + } else { >> + strcat(buf, "null "); >> + } >> + if (dest->getChangeZoom()) { >> + sprintf(buf+strlen(buf), "%4.2f ", dest->getZoom()); >> + } else { >> + strcat(buf, "null "); >> + } >> + break; >> + case destFit: >> + sprintf(buf, "[ Fit "); >> + break; >> + case destFitH: >> + if (dest->getChangeTop()) { >> + sprintf(buf, "[ FitH %4.f ", dest->getTop()); >> + } else { >> + sprintf(buf, "[ FitH null "); >> + } >> + break; >> + case destFitV: >> + if (dest->getChangeLeft()) { >> + sprintf(buf, "[ FitV %4.f ", dest->getLeft()); >> + } else { >> + strcat(buf, "[ FitV null "); >> + } >> + break; >> + case destFitR: >> + sprintf(buf, "[ FitR %4.f %4.f %4.f %4.f ", >> + dest->getLeft(), >> + dest->getBottom(), >> + dest->getRight(), >> + dest->getTop()); >> + break; >> + case destFitB: >> + sprintf(buf, "[ FitB "); >> + break; >> + case destFitBH: >> + if (dest->getChangeTop()) { >> + sprintf(buf, "[ FitBH %4.f ", dest->getTop()); >> + } else { >> + sprintf(buf, "[ FitBH null "); >> + } >> + break; >> + case destFitBV: >> + if (dest->getChangeLeft()) { >> + sprintf(buf, "[ FitBV %4.f ", dest->getLeft()); >> + } else { >> + strcat(buf, "[ FitBV null "); >> + } >> + break; >> + } >> + >> + strcat(buf, " "); >> + buf[26] = ']'; >> + buf[27] = 0; >> + printf(buf); >> +} >> + >> +static void printDestinations(PDFDoc *doc, UnicodeMap *uMap) { >> + std::map<Ref,std::map<GooString*,LinkDest*,GooStringCompare>, RefCompare >> > map; + >> + int numDests = doc->getCatalog()->numDestNameTree(); >> + for (int i = 0; i < numDests; i++) { >> + GooString *name = doc->getCatalog()->getDestNameTreeName(i); >> + LinkDest *dest = doc->getCatalog()->getDestNameTreeDest(i); >> + if (dest->isPageRef()) { >> + map[dest->getPageRef()].insert(std::make_pair(name, dest)); >> + } >> + } >> + >> + numDests = doc->getCatalog()->numDests(); >> + for (int i = 0; i < numDests; i++) { >> + GooString *name = new GooString(doc->getCatalog()->getDestsName(i)); >> + LinkDest *dest = doc->getCatalog()->getDestsDest(i); >> + if (dest->isPageRef()) { >> + map[dest->getPageRef()].insert(std::make_pair(name, dest)); >> + } >> + } >> + >> + printf("Page Destination Name\n"); >> + for (int i = firstPage; i <= lastPage; i++) { >> + Ref *ref = doc->getCatalog()->getPageRef(i); >> + auto pageDests = map.find(*ref); >> + if (pageDests != map.end()) { >> + for (auto& it: pageDests->second) { >> + it.first->getCString()[4] = 0; >> + printf("%4d ", i); >> + printLinkDest(it.second); >> + printf(" \""); >> + Unicode *u; >> + char buf[8]; >> + int n, len; >> + len = TextStringToUCS4(it.first, &u); >> + for (int i = 0; i < len; i++) { >> + n = uMap->mapUnicode(u[i], buf, sizeof(buf)); >> + fwrite(buf, 1, n, stdout); >> + } >> + gfree(u); >> + printf("\"\n"); >> + } >> + } >> + } >> +} >> + >> void printInfo(PDFDoc *doc, UnicodeMap *uMap, long long filesize, GBool >> multiPage) { Page *page; >> Object info; >> @@ -554,7 +687,6 @@ int main(int argc, char *argv[]) { >> } >> if (lastPage == 0) { >> multiPage = gFalse; >> - lastPage = 1; >> } else { >> multiPage = gTrue; >> } >> @@ -588,6 +720,8 @@ int main(int argc, char *argv[]) { >> printStruct(structTree->getChild(i), 0); >> } >> } >> + } else if (printDests) { >> + printDestinations(doc, uMap); >> } else { >> // print info >> long long filesize = 0; >> @@ -602,6 +736,10 @@ int main(int argc, char *argv[]) { >> filesize = Gftell(f); >> fclose(f); >> } >> + >> + if (multiPage == gFalse) >> + lastPage = 1; >> + >> printInfo(doc, uMap, filesize, multiPage); >> } >> exitCode = 0; >> _______________________________________________ >> poppler mailing list >> poppler@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/poppler > > > _______________________________________________ > poppler mailing list > poppler@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/poppler -- Carlos Garcia Campos PGP key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x523E6462
signature.asc
Description: PGP signature
_______________________________________________ poppler mailing list poppler@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/poppler