summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/BuffDoc.cpp
authorllornkcor <llornkcor>2002-07-01 23:24:08 (UTC)
committer llornkcor <llornkcor>2002-07-01 23:24:08 (UTC)
commit59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2 (patch) (unidiff)
treef148d4858859dac3b413e675c760acfdab24b8e6 /noncore/apps/opie-reader/BuffDoc.cpp
parentc08be8ae22dcc1bfb83cfdec807149b161d770f5 (diff)
downloadopie-59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2.zip
opie-59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2.tar.gz
opie-59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2.tar.bz2
initial
Diffstat (limited to 'noncore/apps/opie-reader/BuffDoc.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/BuffDoc.cpp126
1 files changed, 126 insertions, 0 deletions
diff --git a/noncore/apps/opie-reader/BuffDoc.cpp b/noncore/apps/opie-reader/BuffDoc.cpp
new file mode 100644
index 0000000..df2f4eb
--- a/dev/null
+++ b/noncore/apps/opie-reader/BuffDoc.cpp
@@ -0,0 +1,126 @@
1#include "BuffDoc.h"
2//#include <FL/fl_draw.h>
3#include "config.h"
4
5void BuffDoc::locate(unsigned int n)
6{
7 // qDebug("BuffDoc:locating:%u",n);
8
9 lastword[0] = '\0';
10 lastsizes[0] = laststartline = n;
11 lastispara = false;
12 // tchar linebuf[1024];
13 if (exp != NULL) exp->locate(n);
14 // qDebug("BuffDoc:Located");
15}
16
17bool BuffDoc::getline(CBuffer* buff, int w)
18{
19 if (exp == NULL)
20 {
21 (*buff)[0] = '\0';
22 return false;
23 }
24 int len = 0, ch, lastcheck = 0;
25 *buff = lastword.data();
26 lastcheck = len = buff->length();
27 // unsigned int slen = fl_widthi(buff->data(),len);
28#ifdef _UNICODE
29 unsigned int slen = m_fm->width(toQString(buff->data()),len);
30#else
31 unsigned int slen = m_fm->width(buff->data(),len);
32#endif
33 if (slen > w)
34 {
35 for ( ; len > 0; len--)
36 {
37 // if (fl_widthi(buff->data(),len) < w) break;
38#ifdef _UNICODE
39 if (m_fm->width(toQString(buff->data()),len) < w) break;
40#else
41 if (m_fm->width(buff->data(),len) < w) break;
42#endif
43 }
44 lastword = buff->data() + len - 1;
45 for (int i = 0; i < buff->length(); i++) lastsizes[i] = lastsizes[i+len-1];
46 (*buff)[len-1] = '-';
47 (*buff)[len] = '\0';
48 laststartline = lastsizes[len-1];
49 return true;
50 }
51 if (lastispara)
52 {
53 lastispara = false;
54 lastword[0] = '\0';
55 len = buff->length();
56 // while (fl_widthi(buff->data(),len) > w) len--;
57#ifdef _UNICODE
58 while (m_fm->width(toQString(buff->data()),len) > w) len--;
59#else
60 while (m_fm->width(buff->data(),len) > w) len--;
61#endif
62 (*buff)[len] = '\0';
63 laststartline = exp->locate();
64 return true;
65 }
66 lastispara = false;
67 for (int i = 0; i < len; i++) allsizes[i] = lastsizes[i];
68 while (slen < w)
69 {
70 lastcheck = len;
71 allsizes[len] = exp->locate();
72 while ((ch = getch()) != ' ' && ch != '\012' && ch != UEOF && len < 128)
73 {
74 (*buff)[len++] = ch;
75 allsizes[len] = exp->locate();
76 }
77 (*buff)[len] = 0;
78#ifdef _UNICODE
79 slen = m_fm->width(toQString(buff->data()),len);
80#else
81 slen = m_fm->width(buff->data(),len);
82#endif
83 (*buff)[len++] = ' ';
84 allsizes[len] = exp->locate();
85 if (slen < w && ch != ' ')
86 {
87 lastcheck = len;
88 break;
89 }
90 lastispara = (ch == '\012');
91 }
92 (*buff)[len] = '\0';
93 lastword = buff->data()+lastcheck;
94 for (int i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck];
95 if (lastcheck > 0)
96 {
97 laststartline = allsizes[lastcheck];
98 (*buff)[lastcheck-1] = '\0';
99 }
100 else
101 {
102 laststartline = (lastcheck == len) ? exp->locate() : allsizes[lastcheck+1];
103 (*buff)[lastcheck] = '\0';
104 }
105// laststartline = sizes[lastcheck+1];
106// (*buff)[(lastcheck > 0) ? lastcheck-1:lastcheck] = '\0';
107 return (ch != UEOF);
108}
109
110bool BuffDoc::getline(CBuffer* buff, int w, int cw)
111{
112 if (exp == NULL)
113 {
114 (*buff)[0] = '\0';
115 return false;
116 }
117 tchar ch;
118 int i = 0;
119 while ((i < w/cw) && ((ch = getch()) != '\012') && (ch != UEOF))
120 {
121 (*buff)[i++] = ch;
122 }
123 (*buff)[i] = '\0';
124 laststartline = exp->locate();
125 return (ch != UEOF);
126}