23
#ifndef TEXTDOCUMENT_H
24
#define TEXTDOCUMENT_H
26
#include "codepages.h"
35
friend class TextIterator;
36
friend class TextView;
42
bool init(HANDLE hFile);
43
bool init(TCHAR *filename);
48
bool Undo(t_u32 *offset_start, t_u32 *offset_end);
49
bool Redo(t_u32 *offset_start, t_u32 *offset_end);
51
// UTF-16 text-editing interface
52
t_u32 insert_text(t_u32 offset_chars, TCHAR *text, t_u32 length);
53
t_u32 replace_text(t_u32 offset_chars, TCHAR *text, t_u32 length, t_u32 erase_len);
54
t_u32 erase_text(t_u32 offset_chars, t_u32 length);
56
t_u32 lineno_from_offset(t_u32 offset);
57
t_u32 offset_from_lineno(t_u32 lineno);
59
bool lineinfo_from_offset(t_u32 offset_chars, t_u32 *lineno, t_u32 *lineoff_chars, t_u32 *linelen_chars, t_u32 *lineoff_bytes, t_u32 *linelen_bytes);
60
bool lineinfo_from_lineno(t_u32 lineno, t_u32 *lineoff_chars, t_u32 *linelen_chars, t_u32 *lineoff_bytes, t_u32 *linelen_bytes);
62
TextIterator iterate(t_u32 offset);
63
TextIterator iterate_line(t_u32 lineno, t_u32 *linestart = 0, t_u32 *linelen = 0);
64
TextIterator iterate_line_offset(t_u32 offset_chars, t_u32 *lineno, t_u32 *linestart = 0);
66
t_u32 getdata(t_u32 offset, BYTE *buf, size_t len);
67
t_size getline(t_size nLineNo, TCHAR *buf, t_size buflen, t_size *off_chars);
71
t_u32 longestline(int tabwidth);
76
bool init_linebuffer();
78
t_u32 charoffset_to_byteoffset(t_u32 offset_chars);
79
t_u32 byteoffset_to_charoffset(t_u32 offset_bytes);
81
t_u32 count_chars(t_u32 offset_bytes, t_u32 length_chars);
83
size_t utf16_to_rawdata(TCHAR *utf16str, size_t utf16len, BYTE *rawdata, size_t *rawlen);
84
size_t rawdata_to_utf16(BYTE *rawdata, size_t rawlen, TCHAR *utf16str, size_t *utf16len);
85
size_t rawdata_to_utf8(BYTE *rawdata, size_t rawlen, BYTE *utf8str, size_t *utf8len);
87
int detect_file_format(int *headersize);
88
t_size gettext(t_u32 offset, t_u32 lenbytes, TCHAR *buf, t_size *len);
89
int getchar(t_u32 offset, t_u32 lenbytes, t_u32 *pch32);
91
// UTF-16 text-editing interface
92
t_u32 insert_raw(t_u32 offset_bytes, TCHAR *text, t_u32 length);
93
t_u32 replace_raw(t_u32 offset_bytes, TCHAR *text, t_u32 length, t_u32 erase_len);
94
t_u32 erase_raw(t_u32 offset_bytes, t_u32 length);
99
t_u32 m_nDocLength_chars;
100
t_u32 m_nDocLength_bytes;
102
t_u32 *m_pLineBuf_byte;
103
t_u32 *m_pLineBuf_char;
113
// default constructor sets all members to zero
115
: text_doc(0), off_bytes(0), len_bytes(0)
119
TextIterator(t_u32 off, t_u32 len, TextDocument *td)
120
: text_doc(td), off_bytes(off), len_bytes(len)
125
// default copy-constructor
126
TextIterator(const TextIterator &ti)
127
: text_doc(ti.text_doc), off_bytes(ti.off_bytes), len_bytes(ti.len_bytes)
131
// assignment operator
132
TextIterator & operator= (TextIterator &ti)
134
text_doc = ti.text_doc;
135
off_bytes = ti.off_bytes;
136
len_bytes = ti.len_bytes;
140
t_size gettext(TCHAR *buf, t_size buflen)
144
// get text from the TextDocument at the specified byte-offset
145
t_u32 len = text_doc->gettext(off_bytes, len_bytes, buf, &buflen);
147
// adjust the iterator's internal position
159
/*int insert_text(TCHAR *buf, int buflen)
163
// get text from the TextDocument at the specified byte-offset
164
int len = text_doc->insert(off_bytes, buf, buflen);
166
// adjust the iterator's internal position
176
int replace_text(TCHAR *buf, int buflen)
180
// get text from the TextDocument at the specified byte-offset
181
int len = text_doc->replace(off_bytes, buf, buflen);
183
// adjust the iterator's internal position
193
int erase_text(int length)
197
// get text from the TextDocument at the specified byte-offset
198
int len = text_doc->erase(off_bytes, length);
200
// adjust the iterator's internal position
213
return text_doc ? true : false;
218
TextDocument *text_doc;
230
TextDocument *m_pTextDoc;
242
#endif // TEXTDOCUMENT_H
23
#ifndef TEXTDOCUMENT_H
24
#define TEXTDOCUMENT_H
26
#include "codepages.h"
35
friend class TextIterator;
36
friend class TextView;
42
bool init(HANDLE hFile);
43
bool init(TCHAR *filename);
48
bool Undo(t_u32 *offset_start, t_u32 *offset_end);
49
bool Redo(t_u32 *offset_start, t_u32 *offset_end);
51
// UTF-16 text-editing interface
52
t_u32 insert_text(t_u32 offset_chars, TCHAR *text, t_u32 length);
53
t_u32 replace_text(t_u32 offset_chars, TCHAR *text, t_u32 length, t_u32 erase_len);
54
t_u32 erase_text(t_u32 offset_chars, t_u32 length);
56
t_u32 lineno_from_offset(t_u32 offset);
57
t_u32 offset_from_lineno(t_u32 lineno);
59
bool lineinfo_from_offset(t_u32 offset_chars, t_u32 *lineno, t_u32 *lineoff_chars, t_u32 *linelen_chars, t_u32 *lineoff_bytes, t_u32 *linelen_bytes);
60
bool lineinfo_from_lineno(t_u32 lineno, t_u32 *lineoff_chars, t_u32 *linelen_chars, t_u32 *lineoff_bytes, t_u32 *linelen_bytes);
62
TextIterator iterate(t_u32 offset);
63
TextIterator iterate_line(t_u32 lineno, t_u32 *linestart = 0, t_u32 *linelen = 0);
64
TextIterator iterate_line_offset(t_u32 offset_chars, t_u32 *lineno, t_u32 *linestart = 0);
66
t_u32 getdata(t_u32 offset, BYTE *buf, size_t len);
67
t_size getline(t_size nLineNo, TCHAR *buf, t_size buflen, t_size *off_chars);
71
t_u32 longestline(int tabwidth);
76
bool init_linebuffer();
78
t_u32 charoffset_to_byteoffset(t_u32 offset_chars);
79
t_u32 byteoffset_to_charoffset(t_u32 offset_bytes);
81
t_u32 count_chars(t_u32 offset_bytes, t_u32 length_chars);
83
size_t utf16_to_rawdata(TCHAR *utf16str, size_t utf16len, BYTE *rawdata, size_t *rawlen);
84
size_t rawdata_to_utf16(BYTE *rawdata, size_t rawlen, TCHAR *utf16str, size_t *utf16len);
85
size_t rawdata_to_utf8(BYTE *rawdata, size_t rawlen, BYTE *utf8str, size_t *utf8len);
87
int detect_file_format(int *headersize);
88
t_size gettext(t_u32 offset, t_u32 lenbytes, TCHAR *buf, t_size *len);
89
int getchar(t_u32 offset, t_u32 lenbytes, t_u32 *pch32);
91
// UTF-16 text-editing interface
92
t_u32 insert_raw(t_u32 offset_bytes, TCHAR *text, t_u32 length);
93
t_u32 replace_raw(t_u32 offset_bytes, TCHAR *text, t_u32 length, t_u32 erase_len);
94
t_u32 erase_raw(t_u32 offset_bytes, t_u32 length);
99
t_u32 m_nDocLength_chars;
100
t_u32 m_nDocLength_bytes;
102
t_u32 *m_pLineBuf_byte;
103
t_u32 *m_pLineBuf_char;
113
// default constructor sets all members to zero
115
: text_doc(0), off_bytes(0), len_bytes(0)
119
TextIterator(t_u32 off, t_u32 len, TextDocument *td)
120
: text_doc(td), off_bytes(off), len_bytes(len)
125
// default copy-constructor
126
TextIterator(const TextIterator &ti)
127
: text_doc(ti.text_doc), off_bytes(ti.off_bytes), len_bytes(ti.len_bytes)
131
// assignment operator
132
TextIterator & operator= (TextIterator &ti)
134
text_doc = ti.text_doc;
135
off_bytes = ti.off_bytes;
136
len_bytes = ti.len_bytes;
140
t_size gettext(TCHAR *buf, t_size buflen)
144
// get text from the TextDocument at the specified byte-offset
145
t_u32 len = text_doc->gettext(off_bytes, len_bytes, buf, &buflen);
147
// adjust the iterator's internal position
159
/*int insert_text(TCHAR *buf, int buflen)
163
// get text from the TextDocument at the specified byte-offset
164
int len = text_doc->insert(off_bytes, buf, buflen);
166
// adjust the iterator's internal position
176
int replace_text(TCHAR *buf, int buflen)
180
// get text from the TextDocument at the specified byte-offset
181
int len = text_doc->replace(off_bytes, buf, buflen);
183
// adjust the iterator's internal position
193
int erase_text(int length)
197
// get text from the TextDocument at the specified byte-offset
198
int len = text_doc->erase(off_bytes, length);
200
// adjust the iterator's internal position
213
return text_doc ? true : false;
218
TextDocument *text_doc;
230
TextDocument *m_pTextDoc;
242
#endif // TEXTDOCUMENT_H