[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemacs-commit] qemacs qe.h buffer.c
From: |
Charlie Gordon |
Subject: |
[Qemacs-commit] qemacs qe.h buffer.c |
Date: |
Mon, 10 Feb 2014 21:27:54 +0000 |
CVSROOT: /sources/qemacs
Module name: qemacs
Changes by: Charlie Gordon <chqrlie> 14/02/10 21:27:54
Modified files:
. : qe.h buffer.c
Log message:
Use more general API to read buffer contents
* add eb_get_region_contents()
* add eb_get_region_content_size()
* implement eb_get_contents() and eb_get_content_size() inline
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.h?cvsroot=qemacs&r1=1.141&r2=1.142
http://cvs.savannah.gnu.org/viewcvs/qemacs/buffer.c?cvsroot=qemacs&r1=1.73&r2=1.74
Patches:
Index: qe.h
===================================================================
RCS file: /sources/qemacs/qemacs/qe.h,v
retrieving revision 1.141
retrieving revision 1.142
diff -u -b -r1.141 -r1.142
--- qe.h 10 Feb 2014 21:21:40 -0000 1.141
+++ qe.h 10 Feb 2014 21:27:53 -0000 1.142
@@ -929,8 +929,15 @@
int eb_match_istr(EditBuffer *b, int offset, const char *str, int *offsetp);
int eb_printf(EditBuffer *b, const char *fmt, ...) __attr_printf(2,3);
void eb_line_pad(EditBuffer *b, int n);
-int eb_get_content_size(EditBuffer *b);
-int eb_get_contents(EditBuffer *b, char *buf, int buf_size);
+int eb_get_region_content_size(EditBuffer *b, int start, int stop);
+static inline int eb_get_content_size(EditBuffer *b) {
+ return eb_get_region_content_size(b, 0, b->total_size);
+}
+int eb_get_region_contents(EditBuffer *b, int start, int stop,
+ char *buf, int buf_size);
+static inline int eb_get_contents(EditBuffer *b, char *buf, int buf_size) {
+ return eb_get_region_contents(b, 0, b->total_size, buf, buf_size);
+}
int eb_insert_buffer_convert(EditBuffer *dest, int dest_offset,
EditBuffer *src, int src_offset,
int size);
Index: buffer.c
===================================================================
RCS file: /sources/qemacs/qemacs/buffer.c,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -b -r1.73 -r1.74
--- buffer.c 10 Feb 2014 20:29:26 -0000 1.73
+++ buffer.c 10 Feb 2014 21:27:53 -0000 1.74
@@ -1898,22 +1898,28 @@
}
#endif
-/* Read the contents of a buffer encoded in a utf8 string */
-int eb_get_contents(EditBuffer *b, char *buf, int buf_size)
-{
+/* Read the contents of a buffer region encoded in a utf8 string */
+int eb_get_region_contents(EditBuffer *b, int start, int stop,
+ char *buf, int buf_size)
+{
+ int size;
+
+ stop = clamp(stop, 0, b->total_size);
+ start = clamp(start, 0, stop);
+ size = stop - start;
+
/* do not use eb_read if overflow to avoid partial characters */
if (b->charset == &charset_utf8 && b->eol_type == EOL_UNIX
- && b->total_size < buf_size) {
- int len = b->total_size;
- eb_read(b, 0, buf, len);
- buf[len] = '\0';
- return len;
+ && size < buf_size) {
+ eb_read(b, start, buf, size);
+ buf[size] = '\0';
+ return size;
} else {
buf_t outbuf, *out;
int c, offset;
out = buf_init(&outbuf, buf, buf_size);
- for (offset = 0; offset < b->total_size;) {
+ for (offset = start; offset < stop;) {
c = eb_nextc(b, offset, &offset);
buf_putc_utf8(out, c);
}
@@ -1921,16 +1927,19 @@
}
}
-/* Compute the size of the contents of a buffer encoded in utf8 */
-int eb_get_content_size(EditBuffer *b)
+/* Compute the size of the contents of a buffer region encoded in utf8 */
+int eb_get_region_content_size(EditBuffer *b, int start, int stop)
{
+ stop = clamp(stop, 0, b->total_size);
+ start = clamp(start, 0, stop);
+
if (b->charset == &charset_utf8 && b->eol_type == EOL_UNIX) {
- return b->total_size;
+ return stop - start;
} else {
int c, offset, size;
char buf[MAX_CHAR_BYTES];
- for (offset = size = 0; offset < b->total_size;) {
+ for (size = 0, offset = start; offset < stop;) {
c = eb_nextc(b, offset, &offset);
size += utf8_encode(buf, c);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemacs-commit] qemacs qe.h buffer.c,
Charlie Gordon <=