[poppler] 2 commits - qt4/src
Albert Astals Cid
aacid at kemper.freedesktop.org
Sat Jun 30 05:53:11 PDT 2012
qt4/src/poppler-page-private.h | 7 +++
qt4/src/poppler-page.cc | 72 ++++++++++++++++++++++++++++++-----------
qt4/src/poppler-qt4.h | 14 +++++++
3 files changed, 73 insertions(+), 20 deletions(-)
New commits:
commit 262203bd86403e43034fbfbbeef5a5894a62ecb2
Author: Albert Astals Cid <aacid at kde.org>
Date: Sat Jun 30 14:36:28 2012 +0200
[qt4] Refactor part of ::search() functions
diff --git a/qt4/src/poppler-page-private.h b/qt4/src/poppler-page-private.h
index ecdca17..91955e0 100644
--- a/qt4/src/poppler-page-private.h
+++ b/qt4/src/poppler-page-private.h
@@ -1,6 +1,6 @@
/* poppler-page.cc: qt interface to poppler
* Copyright (C) 2005, Net Integration Technologies, Inc.
- * Copyright (C) 2007, Albert Astals Cid <aacid at kde.org>
+ * Copyright (C) 2007, 2012, Albert Astals Cid <aacid at kde.org>
* Copyright (C) 2008, Pino Toscano <pino at kde.org>
*
* This program is free software; you can redistribute it and/or modify
@@ -21,10 +21,13 @@
#ifndef _POPPLER_PAGE_PRIVATE_H_
#define _POPPLER_PAGE_PRIVATE_H_
+#include "CharTypes.h"
+
class QRectF;
class LinkAction;
class Page;
+class TextPage;
namespace Poppler
{
@@ -42,6 +45,8 @@ public:
PageTransition *transition;
static Link* convertLinkActionToLink(::LinkAction * a, DocumentData *parentDoc, const QRectF &linkArea);
+
+ TextPage *prepareTextSearch(const QString &text, Page::SearchMode caseSensitive, Page::Rotation rotate, GBool *sCase, QVector<Unicode> *u);
};
}
diff --git a/qt4/src/poppler-page.cc b/qt4/src/poppler-page.cc
index ca6744e..349a1bb 100644
--- a/qt4/src/poppler-page.cc
+++ b/qt4/src/poppler-page.cc
@@ -1,7 +1,7 @@
/* poppler-page.cc: qt interface to poppler
* Copyright (C) 2005, Net Integration Technologies, Inc.
* Copyright (C) 2005, Brad Hards <bradh at frogmouth.net>
- * Copyright (C) 2005-2011, Albert Astals Cid <aacid at kde.org>
+ * Copyright (C) 2005-2012, Albert Astals Cid <aacid at kde.org>
* Copyright (C) 2005, Stefan Kebekus <stefan.kebekus at math.uni-koeln.de>
* Copyright (C) 2006-2011, Pino Toscano <pino at kde.org>
* Copyright (C) 2008 Carlos Garcia Campos <carlosgc at gnome.org>
@@ -208,6 +208,25 @@ Link* PageData::convertLinkActionToLink(::LinkAction * a, DocumentData *parentDo
return popplerLink;
}
+TextPage *PageData::prepareTextSearch(const QString &text, Page::SearchMode caseSensitive, Page::Rotation rotate, GBool *sCase, QVector<Unicode> *u)
+{
+ const QChar * str = text.unicode();
+ const int len = text.length();
+ u->resize(len);
+ for (int i = 0; i < len; ++i) (*u)[i] = str[i].unicode();
+
+ if (caseSensitive == Page::CaseSensitive) *sCase = gTrue;
+ else *sCase = gFalse;
+
+ const int rotation = (int)rotate * 90;
+
+ // fetch ourselves a textpage
+ TextOutputDev td(NULL, gTrue, 0, gFalse, gFalse);
+ parentDoc->doc->displayPage( &td, index + 1, 72, 72, rotation, false, true, false );
+ TextPage *textPage=td.takeText();
+
+ return textPage;
+}
Page::Page(DocumentData *doc, int index) {
m_page = new PageData();
@@ -377,32 +396,19 @@ QString Page::text(const QRectF &r) const
bool Page::search(const QString &text, double &sLeft, double &sTop, double &sRight, double &sBottom, SearchDirection direction, SearchMode caseSensitive, Rotation rotate) const
{
- const QChar * str = text.unicode();
- int len = text.length();
- QVector<Unicode> u(len);
- for (int i = 0; i < len; ++i) u[i] = str[i].unicode();
-
GBool sCase;
- if (caseSensitive == CaseSensitive) sCase = gTrue;
- else sCase = gFalse;
+ QVector<Unicode> u;
+ TextPage *textPage = m_page->prepareTextSearch(text, caseSensitive, rotate, &sCase, &u);
bool found = false;
-
- int rotation = (int)rotate * 90;
-
- // fetch ourselves a textpage
- TextOutputDev td(NULL, gTrue, 0, gFalse, gFalse);
- m_page->parentDoc->doc->displayPage( &td, m_page->index + 1, 72, 72, rotation, false, true, false );
- TextPage *textPage=td.takeText();
-
if (direction == FromTop)
- found = textPage->findText( u.data(), len,
+ found = textPage->findText( u.data(), u.size(),
gTrue, gTrue, gFalse, gFalse, sCase, gFalse, gFalse, &sLeft, &sTop, &sRight, &sBottom );
else if ( direction == NextResult )
- found = textPage->findText( u.data(), len,
+ found = textPage->findText( u.data(), u.size(),
gFalse, gTrue, gTrue, gFalse, sCase, gFalse, gFalse, &sLeft, &sTop, &sRight, &sBottom );
else if ( direction == PreviousResult )
- found = textPage->findText( u.data(), len,
+ found = textPage->findText( u.data(), u.size(),
gFalse, gTrue, gTrue, gFalse, sCase, gTrue, gFalse, &sLeft, &sTop, &sRight, &sBottom );
textPage->decRefCnt();
@@ -430,25 +436,14 @@ bool Page::search(const QString &text, QRectF &rect, SearchDirection direction,
QList<QRectF> Page::search(const QString &text, SearchMode caseSensitive, Rotation rotate) const
{
- const QChar * str = text.unicode();
- int len = text.length();
- QVector<Unicode> u(len);
- for (int i = 0; i < len; ++i) u[i] = str[i].unicode();
-
GBool sCase;
- if (caseSensitive == CaseSensitive) sCase = gTrue;
- else sCase = gFalse;
+ QVector<Unicode> u;
+ TextPage *textPage = m_page->prepareTextSearch(text, caseSensitive, rotate, &sCase, &u);
- int rotation = (int)rotate * 90;
-
QList<QRectF> results;
double sLeft = 0.0, sTop = 0.0, sRight = 0.0, sBottom = 0.0;
- TextOutputDev td(NULL, gTrue, 0, gFalse, gFalse);
- m_page->parentDoc->doc->displayPage( &td, m_page->index + 1, 72, 72, rotation, false, true, false );
- TextPage *textPage=td.takeText();
-
- while(textPage->findText( u.data(), len,
+ while(textPage->findText( u.data(), u.size(),
gFalse, gTrue, gTrue, gFalse, sCase, gFalse, gFalse, &sLeft, &sTop, &sRight, &sBottom ))
{
QRectF result;
commit bd71f80c409dbb47231088c3c6661946ccde6e67
Author: Adam Reichold <adamreichold at myopera.com>
Date: Thu Jun 28 17:42:17 2012 +0200
[qt4] add whole-page search method to Poppler::Page
diff --git a/qt4/src/poppler-page.cc b/qt4/src/poppler-page.cc
index 6a16d03..ca6744e 100644
--- a/qt4/src/poppler-page.cc
+++ b/qt4/src/poppler-page.cc
@@ -12,6 +12,7 @@
* Copyright (C) 2010 Hib Eris <hib at hiberis.nl>
* Copyright (C) 2012 Tobias Koenig <tokoe at kdab.com>
* Copyright (C) 2012 Fabio D'Urso <fabiodurso at hotmail.it>
+ * Copyright (C) 2012 Adam Reichold <adamreichold at myopera.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -427,6 +428,44 @@ bool Page::search(const QString &text, QRectF &rect, SearchDirection direction,
return found;
}
+QList<QRectF> Page::search(const QString &text, SearchMode caseSensitive, Rotation rotate) const
+{
+ const QChar * str = text.unicode();
+ int len = text.length();
+ QVector<Unicode> u(len);
+ for (int i = 0; i < len; ++i) u[i] = str[i].unicode();
+
+ GBool sCase;
+ if (caseSensitive == CaseSensitive) sCase = gTrue;
+ else sCase = gFalse;
+
+ int rotation = (int)rotate * 90;
+
+ QList<QRectF> results;
+ double sLeft = 0.0, sTop = 0.0, sRight = 0.0, sBottom = 0.0;
+
+ TextOutputDev td(NULL, gTrue, 0, gFalse, gFalse);
+ m_page->parentDoc->doc->displayPage( &td, m_page->index + 1, 72, 72, rotation, false, true, false );
+ TextPage *textPage=td.takeText();
+
+ while(textPage->findText( u.data(), len,
+ gFalse, gTrue, gTrue, gFalse, sCase, gFalse, gFalse, &sLeft, &sTop, &sRight, &sBottom ))
+ {
+ QRectF result;
+
+ result.setLeft(sLeft);
+ result.setTop(sTop);
+ result.setRight(sRight);
+ result.setBottom(sBottom);
+
+ results.append(result);
+ }
+
+ textPage->decRefCnt();
+
+ return results;
+}
+
QList<TextBox*> Page::textList(Rotation rotate) const
{
TextOutputDev *output_dev;
diff --git a/qt4/src/poppler-qt4.h b/qt4/src/poppler-qt4.h
index 827ea53..425b1e0 100644
--- a/qt4/src/poppler-qt4.h
+++ b/qt4/src/poppler-qt4.h
@@ -12,6 +12,7 @@
* Copyright (C) 2012, Guillermo A. Amaral B. <gamaral at kde.org>
* Copyright (C) 2012, Fabio D'Urso <fabiodurso at hotmail.it>
* Copyright (C) 2012, Tobias Koenig <tobias.koenig at kdab.com>
+ * Copyright (C) 2012 Adam Reichold <adamreichold at myopera.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -602,6 +603,19 @@ delete it;
\since 0.14
**/
bool search(const QString &text, double &rectLeft, double &rectTop, double &rectRight, double &rectBottom, SearchDirection direction, SearchMode caseSensitive, Rotation rotate = Rotate0) const;
+
+ /**
+ Returns a list of all occurrences of the specified text on the page.
+
+ \param text the text to search
+ \param caseSensitive whether to be case sensitive
+ \param rotate the rotation to apply for the search order
+
+ \warning Do not use the returned QRectF as arguments of another search call because of truncation issues if qreal is defined as float.
+
+ \since 0.22
+ **/
+ QList<QRectF> search(const QString &text, SearchMode caseSensitive, Rotation rotate = Rotate0) const;
/**
Returns a list of text of the page
More information about the poppler
mailing list