summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/BuffDoc.cpp
Side-by-side diff
Diffstat (limited to 'noncore/apps/opie-reader/BuffDoc.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/BuffDoc.cpp55
1 files changed, 53 insertions, 2 deletions
diff --git a/noncore/apps/opie-reader/BuffDoc.cpp b/noncore/apps/opie-reader/BuffDoc.cpp
index 1f0a524..355d14d 100644
--- a/noncore/apps/opie-reader/BuffDoc.cpp
+++ b/noncore/apps/opie-reader/BuffDoc.cpp
@@ -1,86 +1,98 @@
#include "names.h"
#define NEWLINEBREAK
#define INCREMENTALWIDTH
-#include "usenef.h"
#include "BuffDoc.h"
#include "config.h"
#include "CDrawBuffer.h"
#include "ZText.h"
#include "ebookcodec.h"
#ifdef __STATIC
#include "Aportis.h"
#include "CHM.h"
#include "ppm_expander.h"
#include "ztxt.h"
#include "plucker.h"
#ifdef USENEF
#include "nef.h"
#include "arrierego.h"
#endif
#include "iSilo.h"
+#include "Reb.h"
#endif
linkType BuffDoc::hyperlink(unsigned int n, unsigned int noff, QString& wrd, QString& nm)
{
linkType bRet = eNone;
if (exp != NULL)
{
bRet = filt->hyperlink(n, noff, wrd, nm);
if ((bRet & eLink) != 0)
{
lastword.empty();
lastsizes[0] = laststartline = n;
#ifdef NEWLINEBREAK
lastispara = false;
#else
lastispara = false;
#endif
lastsizes[0] = laststartline = exp->locate();
}
}
return bRet;
}
void BuffDoc::locate(unsigned int n)
{
// //qDebug("BuffDoc:locating:%u",n);
lastword.empty();
lastsizes[0] = laststartline = n;
#ifdef NEWLINEBREAK
lastispara = false;
#else
lastispara = false;
#endif
// tchar linebuf[1024];
if (exp != NULL) filt->locate(n);
// //qDebug("BuffDoc:Located");
}
+void BuffDoc::resetPos()
+{
+ // //qDebug("BuffDoc:locating:%u",n);
+ lastword.empty();
+ lastsizes[0] = laststartline = exp->locate();
+#ifdef NEWLINEBREAK
+ lastispara = false;
+#else
+ lastispara = false;
+#endif
+}
+
static bool isletter(unsigned short c)
{
if ('a' <= c && c <= 'z') return true;
if ('A' <= c && c <= 'Z') return true;
// Cyrillic letters
if (0x400 <= c && c <= 0x52F) return true;
return false;
}
static bool isvowel(unsigned short c) // Only want lower case vowels
{
switch (c)
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
// Cyrillic vowels
case 0x430:
case 0x435:
case 0x438:
case 0x43E:
case 0x443:
@@ -614,69 +626,86 @@ int BuffDoc::openfile(QWidget* _parent, const char *src)
{
delete exp;
exp = new CPlucker;
ret = exp->openfile(src);
}
if (ret != 0)
{
delete exp;
exp = new CHM;
ret = exp->openfile(src);
}
if (ret != 0)
{
delete exp;
exp = new iSilo;
ret = exp->openfile(src);
}
if (ret != 0)
{
delete exp;
//qDebug("Trying ppms");
+ exp = new CReb;
+ ret = exp->openfile(src);
+ }
+ if (ret != 0)
+ {
+ delete exp;
+ //qDebug("Trying ppms");
exp = new ppm_expander;
ret = exp->openfile(src);
}
if (ret != 0)
{
delete exp;
exp = new Text;
// //qDebug("Trying text");
ret = exp->openfile(src);
if (ret == 0) qDebug("Text format");
}
if (ret != 0)
{
delete exp;
QMessageBox::information(_parent, PROGNAME, "Unknown file compression type","Try another file");
return ret;
}
// //qDebug("Doing final open:%x:%x",exp,filt);
#else
- QString codecpath(QTReaderUtil::getPluginPath());
+#ifdef USEQPE
+#ifdef OPIE
+ QString codecpath(getenv("OPIEDIR"));
+#else
+ QString codecpath(getenv("QTDIR"));
+#endif
+ codecpath += "/plugins/reader/codecs";
+#else
+ QString codecpath(getenv("READERDIR"));
+ codecpath += "/codecs";
+#endif
QDir d(codecpath, "*.so");
if (d.exists())
{
const QFileInfoList *list = d.entryInfoList();
QFileInfoListIterator it( *list ); // create list iterator
QFileInfo *fi; // pointer for traversing
int ret = -1;
while ( ret != 0 && (fi=it.current()) )
{ // for each file...
if (exp != NULL) delete exp;
qDebug("Trying %s", (const char*)fi->fileName());
exp = new ebookcodec(fi->fileName());
ret = exp->openfile(src);
++it;
}
qDebug("Buffdoc:Finished opening");
if (ret != 0)
{
if (exp != NULL) delete exp;
exp = new Text;
ret = exp->openfile(src);
@@ -685,24 +714,46 @@ int BuffDoc::openfile(QWidget* _parent, const char *src)
else
{
if (exp != NULL) delete exp;
exp = new Text;
exp->openfile(src);
}
#endif
lastword.empty();
lastsizes[0] = laststartline = 0;
#ifdef NEWLINEBREAK
lastispara = false;
#else
lastispara = false;
#endif
exp->locate(exp->getHome());
filt->setsource(exp);
qDebug("BuffDoc:file opened");
return 0;
}
QString BuffDoc::about()
{
return QString("Buffered Decompressor (c) Tim Wentford\nHyphenation algorithm (c) Tim Wentford\n (Cyrillic support by Konstantin Isakov\n")+filt->about();
}
+
+int BuffDoc::getsentence(CBuffer& buff)
+{
+ tchar ch;
+ int i = 0;
+ bool intext = false;
+ while ((ch = getch()) != 10 && ch != UEOF)
+ {
+ buff[i++] = ch;
+ if (ch == '"' || ch == '\'' || ch == 0x2018 || ch == 0x2019 ||
+ ch == 0x201a || ch == 0x201b || ch == 0x201c || ch == 0x201d)
+ {
+ intext = !intext;
+ }
+ if (!intext && (ch == '.' || ch == '!' || ch == '?')) break;
+ }
+
+ buff[i] = '\0';
+ if (i == 0 && ch == UEOF) i = -1;
+ laststartline = exp->locate();
+ return i;
+}