Diffstat (limited to 'noncore/apps/opie-reader/BuffDoc.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/apps/opie-reader/BuffDoc.cpp | 126 |
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 | |||
5 | void 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 | |||
17 | bool 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 | |||
110 | bool 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 | } | ||