qemacs-commit
[Top][All Lists]
Advanced

[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);
         }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]