qemacs-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemacs-commit] qemacs buffer.c orgmode.c qe.c qe.h


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs buffer.c orgmode.c qe.c qe.h
Date: Wed, 08 Jan 2014 16:27:15 +0000

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        14/01/08 16:27:15

Modified files:
        .              : buffer.c orgmode.c qe.c qe.h 

Log message:
        new character based APIs for buffers
        
        * add eb_skip_chars
        * rename eb_delete_nextc to eb_delete_uchar
        * deprecate eb_line_pad
        * use char based buffer API in orgmode

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/buffer.c?cvsroot=qemacs&r1=1.52&r2=1.53
http://cvs.savannah.gnu.org/viewcvs/qemacs/orgmode.c?cvsroot=qemacs&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.c?cvsroot=qemacs&r1=1.114&r2=1.115
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.h?cvsroot=qemacs&r1=1.111&r2=1.112

Patches:
Index: buffer.c
===================================================================
RCS file: /sources/qemacs/qemacs/buffer.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -b -r1.52 -r1.53
--- buffer.c    7 Jan 2014 00:49:14 -0000       1.52
+++ buffer.c    8 Jan 2014 16:26:44 -0000       1.53
@@ -935,8 +935,15 @@
     return ch;
 }
 
+int eb_skip_chars(EditBuffer *b, int offset, int n)
+{
+    while (n-- > 0)
+        eb_nextc(b, offset, &offset);
+    return offset;
+}
+
 /* delete one character at offset 'offset', return number of bytes removed */
-int eb_delete_nextc(EditBuffer *b, int offset)
+int eb_delete_uchar(EditBuffer *b, int offset)
 {
     int offset1, size = 0;
     
@@ -948,6 +955,13 @@
     return size;
 }
 
+int eb_delete_chars(EditBuffer *b, int offset, int n)
+{
+    int offset1 = eb_skip_chars(b, offset, n);
+    eb_delete(b, offset, offset1);
+    return offset1 - offset;
+}
+
 /* XXX: only stateless charsets are supported */
 /* XXX: suppress that */
 int eb_prevc(EditBuffer *b, int offset, int *prev_ptr)
@@ -1510,6 +1524,7 @@
     return len;
 }
 
+#if 0
 /* pad current line with spaces so that it reaches column n */
 void eb_line_pad(EditBuffer *b, int n)
 {
@@ -1527,6 +1542,7 @@
         i++;
     }
 }
+#endif
 
 int eb_get_contents(EditBuffer *b, char *buf, int buf_size)
 {

Index: orgmode.c
===================================================================
RCS file: /sources/qemacs/qemacs/orgmode.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- orgmode.c   7 Jan 2014 18:26:07 -0000       1.1
+++ orgmode.c   8 Jan 2014 16:27:06 -0000       1.2
@@ -137,34 +137,33 @@
     /* find start of line */
     eb_get_pos(s->b, &line_num, &col_num, s->offset);
     offset = eb_goto_bol(s->b, s->offset);
-    do {
+    for (;;) {
         offsetl = offset;
         len = eb_get_line(s->b, buf, countof(buf), &offsetl);
         bullets = org_bullet_depth(buf, len);
         if (bullets > -1) {
             break;
         }
-        offsetl = offset;
+        if (offset == 0)
+            return;
+
         offset = eb_prev_line(s->b, offset);
-    } while (offsetl > 0);
+    }
 
-    if (bullets < 0)
-        return;
+    offset += eb_skip_chars(s->b, offset, bullets + 2);
 
-    offset = eb_goto_bol(s->b, offset);
     kw = org_todo_keyword(buf + bullets + 2, len - bullets);
-
     if (kw > -1) {
         int kwlen = strlen(OrgTodoKeywords[kw].keyword);
-        eb_delete(s->b, offset + bullets + 2, kwlen + 1);
+        eb_delete_chars(s->b, offset, kwlen + 1);
     }
 
     kw++;
 
     if (kw < countof(OrgTodoKeywords)) {
         int kwlen = strlen(OrgTodoKeywords[kw].keyword);
-        eb_insert(s->b, offset + bullets + 2, " ", 1);
-        eb_insert(s->b, offset + bullets + 2, OrgTodoKeywords[kw].keyword, 
kwlen);
+        eb_insert_uchar(s->b, offset, ' ');
+        eb_insert_utf8_buf(s->b, offset, OrgTodoKeywords[kw].keyword, kwlen);
     }
 }
 
@@ -185,11 +184,11 @@
     if (col_num > 0)
         offset = offsetl;
 
-    eb_insert(s->b, offset, " \n", 2);
-    do {
-        eb_insert(s->b, offset, "*", 1);
-    } while (bullets--);
-    eb_goto_eol(s->b, offset);
+    eb_insert_utf8_buf(s->b, offset, " \n", 2);
+    while (bullets-- >= 0) {
+        eb_insert_uchar(s->b, offset, '*');
+    }
+    //eb_goto_eol(s->b, offset);
     if (col_num > 0)
         text_move_up_down(s, 1);
     text_move_eol(s);
@@ -219,9 +218,9 @@
         return;
 
     if (dir > 0)
-        eb_insert(s->b, offset, "*", 1);
+        eb_insert_uchar(s->b, offset, '*');
     if (dir < 0 && bullets > 0)
-        eb_delete(s->b, offset, 1);
+        eb_delete_uchar(s->b, offset);
 }
 
 static void do_org_promote_subtree(EditState *s, int dir)
@@ -240,9 +239,9 @@
         return;
 
     if (dir > 0)
-        eb_insert(s->b, offset, "*", 1);
+        eb_insert_uchar(s->b, offset, '*');
     else if (dir < 0 && bullets > 0)
-        eb_delete(s->b, offset, 1);
+        eb_delete_uchar(s->b, offset);
     else
         return;
 
@@ -261,9 +260,9 @@
             break;
 
         if (dir > 0)
-            eb_insert(s->b, offset, "*", 1);
+            eb_insert_uchar(s->b, offset, '*');
         if (dir < 0 && bullets > 0)
-            eb_delete(s->b, offset, 1);
+            eb_delete_uchar(s->b, offset);
     }
 }
 

Index: qe.c
===================================================================
RCS file: /sources/qemacs/qemacs/qe.c,v
retrieving revision 1.114
retrieving revision 1.115
diff -u -b -r1.114 -r1.115
--- qe.c        7 Jan 2014 14:44:23 -0000       1.114
+++ qe.c        8 Jan 2014 16:27:09 -0000       1.115
@@ -611,7 +611,7 @@
             /* insert space single space then word */
             if (offset == par_end ||
                 (col + 1 + word_size > PARAGRAPH_WIDTH)) {
-                eb_delete_nextc(s->b, chunk_start);
+                eb_delete_uchar(s->b, chunk_start);
                 chunk_start += eb_insert_uchar(s->b, chunk_start, '\n');
                 if (offset < par_end) {
                     /* indent */

Index: qe.h
===================================================================
RCS file: /sources/qemacs/qemacs/qe.h,v
retrieving revision 1.111
retrieving revision 1.112
diff -u -b -r1.111 -r1.112
--- qe.h        7 Jan 2014 14:44:23 -0000       1.111
+++ qe.h        8 Jan 2014 16:27:12 -0000       1.112
@@ -820,6 +820,8 @@
 int eb_nextc(EditBuffer *b, int offset, int *next_ptr);
 __attr_nonnull((3))
 int eb_prevc(EditBuffer *b, int offset, int *prev_ptr);
+int eb_skip_chars(EditBuffer *b, int offset, int n);
+int eb_delete_chars(EditBuffer *b, int offset, int n);
 int eb_goto_pos(EditBuffer *b, int line1, int col1);
 int eb_get_pos(EditBuffer *b, int *line_ptr, int *col_ptr, int offset);
 int eb_goto_char(EditBuffer *b, int pos);
@@ -844,7 +846,7 @@
                         enum LogOperation op,
                         int offset,
                         int size);
-int eb_delete_nextc(EditBuffer *b, int offset);
+int eb_delete_uchar(EditBuffer *b, int offset);
 int eb_insert_uchar(EditBuffer *b, int offset, int c);
 int eb_insert_utf8_buf(EditBuffer *b, int offset, const char *buf, int len);
 int eb_printf(EditBuffer *b, const char *fmt, ...) __attr_printf(2,3);



reply via email to

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