summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/BuffDoc.cpp
authorllornkcor <llornkcor>2002-12-20 01:35:01 (UTC)
committer llornkcor <llornkcor>2002-12-20 01:35:01 (UTC)
commit876e1a4724a7bd75dc642e295de354241096e028 (patch) (side-by-side diff)
treea37c5dcc9d78e04bb6b859ab89d8cf81e6745087 /noncore/apps/opie-reader/BuffDoc.cpp
parent5fd6636ba3d94b48dd543887316c47c5388a43c2 (diff)
downloadopie-876e1a4724a7bd75dc642e295de354241096e028.zip
opie-876e1a4724a7bd75dc642e295de354241096e028.tar.gz
opie-876e1a4724a7bd75dc642e295de354241096e028.tar.bz2
update - sorry it took so long. hope this works correctly
Diffstat (limited to 'noncore/apps/opie-reader/BuffDoc.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/BuffDoc.cpp248
1 files changed, 190 insertions, 58 deletions
diff --git a/noncore/apps/opie-reader/BuffDoc.cpp b/noncore/apps/opie-reader/BuffDoc.cpp
index d4541ea..1123960 100644
--- a/noncore/apps/opie-reader/BuffDoc.cpp
+++ b/noncore/apps/opie-reader/BuffDoc.cpp
@@ -1,3 +1,5 @@
+#include "name.h"
+
#include "BuffDoc.h"
//#include <FL/fl_draw.h>
#include "config.h"
@@ -13,8 +15,8 @@ bool BuffDoc::hyperlink(unsigned int n)
lastispara = false;
if (exp != NULL)
{
- bRet = exp->hyperlink(n);
- lastsizes[0] = laststartline = exp->locate();
+ bRet = exp->hyperlink(n);
+ lastsizes[0] = laststartline = exp->locate();
}
return bRet;
}
@@ -30,22 +32,128 @@ void BuffDoc::locate(unsigned int n)
// qDebug("BuffDoc:Located");
}
-bool BuffDoc::getline(CDrawBuffer* buff, int w)
+#define NEWLINEBREAK
+#ifdef NEWLINEBREAK
+bool BuffDoc::getline(CDrawBuffer* buff, int wth)
{
+ bool moreleft = true;
+ bool margindone = false;
+ int w = wth-2*BORDER;
tchar ch = 32;
CStyle cs;
buff->empty();
if (exp == NULL)
{
-// (*buff)[0] = '\0';
- buff->empty();
- return false;
+ buff->empty();
+ buff->setEof();
+ return false;
+ }
+ int len = 0;
+ if (lastword.length() > 0)
+ {
+ *buff = lastword;
+ cs = lastword.laststyle();
+ w -= buff->leftMargin() + buff->rightMargin();
+ margindone = true;
+ len = lastword.length();
+ }
+ else buff->empty();
+ lastword.empty();
+ unsigned int slen = buff->width(len);
+ lastispara = false;
+ while (1)
+ {
+ lastsizes[len] = exp->locate();
+ getch(ch, cs);
+ if (ch == UEOF)
+ {
+ lastword.empty();
+ if (len == 0)
+ {
+ buff->setEof();
+ moreleft = false;
+ }
+ laststartline = exp->locate();
+ break;
+ }
+ if (ch == 10)
+ {
+ lastword.empty();
+ lastispara = true;
+ laststartline = exp->locate();
+ break;
+ }
+ buff->addch(ch, cs);
+ len++;
+ if (!margindone)
+ {
+ w -= buff->leftMargin() + buff->rightMargin();
+ margindone = true;
+ }
+ if ((slen = buff->width(len)) > w)
+ {
+ if (ch == ' ' || len == 1)
+ {
+ lastword.empty();
+ laststartline = exp->locate();
+ break;
+ }
+ else // should do a backward search for spaces, first.
+ {
+ for (int i = len-1; i > 0; i--)
+ {
+ if ((*buff)[i] == ' ')
+ {
+ (*buff)[len] = 0;
+ lastword.setright(*buff, i+1);
+ buff->truncate(i);
+ (*buff)[i] = '\0';
+ laststartline = lastsizes[i+1];
+ buff->resize();
+ for (int j = 0; j < lastword.length(); j++)
+ {
+ lastsizes[j] = lastsizes[j+i+1];
+ }
+ return true;
+ }
+ }
+ laststartline = lastsizes[len-1];
+ lastword.setright(*buff, len - 1);
+ buff->truncate(len-1);
+ buff->addch('-', cs);
+ for (int j = 0; j < lastword.length(); j++)
+ {
+ lastsizes[j] = lastsizes[j+len];
+ }
+ break;
+ }
+ }
+ }
+ (*buff)[len] = '\0';
+ buff->resize();
+ return moreleft;
+}
+#else
+bool BuffDoc::getline(CDrawBuffer* buff, int wth)
+{
+ bool margindone = false;
+ int w = wth-2*BORDER;
+ tchar ch = 32;
+ CStyle cs;
+ buff->empty();
+ if (exp == NULL)
+ {
+// (*buff)[0] = '\0';
+ buff->empty();
+ return false;
}
int len = 0, lastcheck = 0;
if (lastword.length() > 0)
{
*buff = lastword;
cs = lastword.laststyle();
+ w -= buff->leftMargin() + buff->rightMargin();
+ margindone = true;
}
else buff->empty();
// qDebug("Buff:%s Lastword:%s", (const char*)toQString(buff->data()), (const char*)toQString(lastword.data()));
@@ -53,18 +161,28 @@ bool BuffDoc::getline(CDrawBuffer* buff, int w)
unsigned int slen = buff->width(len);
if (slen > w)
{
- for ( ; len > 0; len--)
- {
- if (buff->width(len) < w) break;
- }
+ for ( ; len > 1; len--)
+ {
+ if (buff->width(len) < w) break;
+ }
// lastword = buff->data() + len - 1;
laststartline = lastsizes[len-1];
- lastword.setright(*buff, len - 1);
for (int i = 0; i < buff->length(); i++) lastsizes[i] = lastsizes[i+len-1];
// (*buff)[len-1] = '-';
- buff->truncate(len-1);
- buff->addch('-', cs);
- (*buff)[len] = '\0';
+ if (len > 2)
+ {
+ lastword.setright(*buff, len - 1);
+ buff->truncate(len-1);
+ buff->addch('-', cs);
+ (*buff)[len] = '\0';
+ }
+
+ else
+ {
+ lastword.empty();
+ (*buff)[len] = '\0';
+ }
+ buff->resize();
return true;
}
if (lastispara)
@@ -77,6 +195,7 @@ bool BuffDoc::getline(CDrawBuffer* buff, int w)
// (*buff)[len] = '\0';
buff->truncate(len);
laststartline = exp->locate();
+ buff->resize();
return true;
}
lastispara = false;
@@ -88,27 +207,40 @@ bool BuffDoc::getline(CDrawBuffer* buff, int w)
getch(ch, cs);
while (ch != ' ' && ch != '\012' && ch != UEOF && len < 128)
{
- len++;
- buff->addch(ch,cs);
- allsizes[len] = exp->locate();
- getch(ch, cs);
+ len++;
+ buff->addch(ch,cs);
+ allsizes[len] = exp->locate();
+ getch(ch, cs);
}
(*buff)[len] = 0;
slen = buff->width(len);
len++;
buff->addch(' ', cs);
+ if (!margindone)
+ {
+ w -= buff->leftMargin() + buff->rightMargin();
+ margindone = true;
+ }
allsizes[len] = exp->locate();
if (slen < w && ch != ' ')
{
- lastcheck = len;
- break;
+ lastcheck = len;
+ break;
}
lastispara = (ch == '\012');
}
(*buff)[len] = '\0';
// lastword = buff->data()+lastcheck;
- lastword.setright(*buff, lastcheck);
+#ifdef WINDOWS
+ lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1);
+ {
+ int i;
+ for (i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck];
+ }
+#else
+ lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1);
for (int i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck];
+#endif
if (lastcheck > 0)
{
laststartline = allsizes[lastcheck];
@@ -122,28 +254,37 @@ bool BuffDoc::getline(CDrawBuffer* buff, int w)
buff->truncate(lastcheck);
}
// buff->frig();
- return (ch != UEOF);
+ buff->resize();
+ if (ch == UEOF && buff->length() == 0)
+ {
+ buff->setEof();
+ return false;
+ }
+ return true;
}
+#endif
-bool BuffDoc::getline(CDrawBuffer* buff, int w, int cw)
+bool BuffDoc::getline(CDrawBuffer* buff, int wth, int cw)
{
+ int w = wth-2*BORDER;
buff->empty();
if (exp == NULL)
{
- return false;
+ return false;
}
tchar ch;
CStyle cs;
int i = 0;
while (i*cw < w)
{
- getch(ch, cs);
- if (ch == '\12' || ch == UEOF) break;
- buff->addch(ch,cs);
- i++;
+ getch(ch, cs);
+ if (ch == '\12' || ch == UEOF) break;
+ buff->addch(ch,cs);
+ i++;
}
buff->truncate(i);
laststartline = exp->locate();
+ buff->resize();
return (ch != UEOF);
}
@@ -164,53 +305,44 @@ int BuffDoc::openfile(QWidget* _parent, const char *src)
int ret = exp->openfile(src);
if (ret == -1)
{
- delete exp;
- exp = NULL;
- return ret;
+ delete exp;
+ exp = NULL;
+ return ret;
}
if (ret == -2)
{
- delete exp;
- exp = new ztxt;
- ret = exp->openfile(src);
+ delete exp;
+ exp = new ztxt;
+ ret = exp->openfile(src);
}
if (ret != 0)
{
- delete exp;
- exp = new CPlucker;
- ret = exp->openfile(src);
+ delete exp;
+ exp = new CPlucker;
+ ret = exp->openfile(src);
}
-#ifndef SMALL
if (ret != 0)
{
- delete exp;
- qDebug("Trying ppms");
- exp = new ppm_expander;
- ret = exp->openfile(src);
+ 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);
+ delete exp;
+ exp = new Text;
+// qDebug("Trying text");
+ ret = exp->openfile(src);
}
-#else
- if (ret != 0)
- {
- delete exp;
- exp = new Text;
- ret = exp->openfile(src);
- }
-#endif
+
if (ret != 0)
{
- delete exp;
- QMessageBox::information(_parent, "OpieReader", "Unknown file compression type","Try another file");
- return ret;
+ delete exp;
+ QMessageBox::information(_parent, PROGNAME, "Unknown file compression type","Try another file");
+ return ret;
}
// qDebug("Doing final open:%x:%x",exp,filt);