]> git.pld-linux.org Git - packages/dml.git/commitdiff
- added support for UTF-8 input in text fields
authorwitekfl <witekfl@pld-linux.org>
Fri, 5 Oct 2007 09:58:46 +0000 (09:58 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
- I didn't touch textareas

Changed files:
    dml-input_utf8.patch -> 1.1

dml-input_utf8.patch [new file with mode: 0644]

diff --git a/dml-input_utf8.patch b/dml-input_utf8.patch
new file mode 100644 (file)
index 0000000..8a10686
--- /dev/null
@@ -0,0 +1,231 @@
+--- dml-0.1.6/src/pi.h.old     2007-10-05 09:37:17.000000000 +0200
++++ dml-0.1.6/src/pi.h 2007-10-05 10:12:18.000000000 +0200
+@@ -139,7 +139,7 @@
+       PI_COMMON_DATA(pi_input);
+       char *buf;
+-      int top, cur, blen;
++      int top, cur, cur_utf8, blen;
+       int deadly, pass, res;
+ };
+@@ -230,6 +230,9 @@
+ void pi_frame(int x, int y, int w, int h);
+ void pi_putch(int c);
+ unsigned char *pi_putch_utf8(unsigned char *c);
++int pi_strlen(char *c);
++char *pi_bskip_char(char *begin, char *c);
++char *pi_skip_char(char *c,  char *end);
+ void pi_addstr(const char *c);
+ void pi_addstrn(const char *c, int n);
+ void pi_addstrn_fill(const char *c, int n);
+--- dml-0.1.6/src/input.c.old  2007-10-05 09:26:45.000000000 +0200
++++ dml-0.1.6/src/input.c      2007-10-05 11:36:12.000000000 +0200
+@@ -11,8 +11,8 @@
+ void pi_input_draw(struct pi_input *self)
+ {
+-      int i, n, w, a = 0, x, y;
+-      
++      int i, n, n2, w, a = 0, x, y;
++
+       pi_locate((struct pi_object*)self, &x, &y);
+       
+       if ((self->buf[0] == 0) || (self->pass==1)) {
+@@ -20,7 +20,7 @@
+                           pi_is_active((struct pi_object*)self) ? 
+                             pi_color_input_hl : pi_color_input);
+               if (self->buf[0] == 0) 
+-                      self->top = self->cur = 0;
++                      self->top = self->cur = self->cur_utf8 = 0;
+                       
+               n = self->pos.w;
+               
+@@ -35,20 +35,25 @@
+               pi_goto(x, y);
+               return;
+       } 
+-      
++
+       n = strlen(self->buf);
++      n2 = pi_strlen(self->buf);
+       if (self->top > n)
+               self->top = 0;
+       if (self->cur > n)
+               self->cur = n;
++      if (self->cur_utf8 > n2)
++              self->cur_utf8 = n2;
++
+       n -= self->top;
++      n2 -= self->top;
+       w = self->pos.w;
+       if (self->top) {
+               w--;
+               pi_color(pi_color_input_arrow);
+               pi_putch('<');
+       }
+-      if (n > w) {
++      if (n2 > w) {
+               w--;    /* for '>' */
+               a = 1;
+       }
+@@ -58,10 +63,10 @@
+                  self->deadly ? 
+                    pi_color_input_deadly : 
+                      pi_color_input_hl : pi_color_input);
+-      if (n >= w) {
++      if (n2 >= w) {
+               if (self->pass)
+               {
+-                for(n=w;n>0;n--)
++                for(n2=w;n2>0;n2--)
+                   pi_putch('*');
+               }
+               else
+@@ -74,7 +79,7 @@
+       } else {
+               if (self->pass)
+               {
+-                for (i=n;i>0;i--)
++                for (i=n2;i>0;i--)
+                       pi_putch('*');
+               }
+               else
+@@ -83,11 +88,11 @@
+               pi_color(self->ghosted ? pi_color_input_ghosted :
+                           pi_is_active((struct pi_object*)self) ? 
+                             pi_color_input_hl : pi_color_input);
+-              n = w - n;
+-              while (n--)
++              n2 = w - n2;
++              while (n2--)
+                       pi_putch(' ');
+       }
+-      pi_goto(x + self->cur - self->top + (self->top != 0), y);
++      pi_goto(x + self->cur_utf8 - self->top + (self->top != 0), y);
+ }
+ void pi_input_kill(struct pi_input *self)
+@@ -105,36 +110,48 @@
+ void pi_input_key(struct pi_input *self, int key)
+ {
+-      char *p;
++      char *p, *p2;
+       int n;
+-      
++
+       /* p is char under cursor */
+       p = self->buf + self->cur;
+               
+       switch (key) {
+       case pi_key_left:
+-              if (self->cur)
+-                      self->cur--;
++              if (self->cur_utf8 > 0) {
++                      self->cur_utf8--;
++                      p = pi_bskip_char(self->buf, p);
++                      self->cur = p - self->buf;
++              }
+               break;
+       case pi_key_right:
+-              if (*p)
+-                      self->cur++;
++              if (*p) {
++                      self->cur_utf8++;
++                      p = pi_skip_char(p, p + 7);
++                      self->cur = p - self->buf;
++              }
+               break;
+       case '\b':
+               if (self->cur == 0)
+                       break;
+-              self->cur--;
+-              p--;
++              p2 = pi_bskip_char(self->buf, p);
++              self->cur = p2 - self->buf;
++              self->cur_utf8--;
++              memmove(p2, p, strlen(p2));
++              break;
+       case pi_key_del:
+-              if (p && *p) 
+-                      memmove(p, p + 1, strlen(p));
++              if (p && *p) {
++                      p2 = pi_skip_char(p, p + 7); 
++                      memmove(p, p2, strlen(p));
++              }
+               dead(self);
+               break;
+       case pi_key_home:
+-              self->cur = 0;
++              self->cur = self->cur_utf8 = 0;
+               break;
+       case pi_key_end:
+               self->cur = strlen(self->buf);
++              self->cur_utf8 = pi_strlen(self->buf);
+               break;
+       default:
+               if ((key == '\n') && (self->res != 0))
+@@ -152,24 +169,31 @@
+                       p = self->buf + self->cur;
+                       memmove(p + 1, p, strlen(p) + 1);
+                       *p = key;
++
+                       self->cur++;
++                      self->cur_utf8++;
+               } else {
+                       pi_object_key((struct pi_object*)self, key);
+                       return;
+               }
+       }
+-      
+       if (self->cur > (int)strlen(self->buf))
+-              self->cur = strlen(self->buf);
+-              
++              self->cur = strlen(self->buf);  
++      if (self->cur_utf8 > (int)pi_strlen(self->buf))
++              self->cur_utf8 = pi_strlen(self->buf);
+       if (self->cur < 0)
+               self->cur = 0;
+       if (self->top > self->cur)
+               self->top = self->cur;
+-      
+-      if (self->cur - self->top > self->pos.w - 2)
+-              self->top = self->cur - self->pos.w + 2;
+-      else if (self->cur - self->top == self->pos.w - 2 && 
++
++      if (self->cur_utf8 < 0)
++              self->cur_utf8 = 0;
++      if (self->top > self->cur_utf8)
++              self->top = self->cur_utf8;
++      
++      if (self->cur_utf8 - self->top > self->pos.w - 2)
++              self->top = self->cur_utf8 - self->pos.w + 2;
++      else if (self->cur_utf8 - self->top == self->pos.w - 2 && 
+                self->buf[self->cur])
+               self->top++;
+       self->deadly = 0;
+--- dml-0.1.6/src/slang.c.old  2007-10-05 09:38:02.000000000 +0200
++++ dml-0.1.6/src/slang.c      2007-10-05 11:35:38.000000000 +0200
+@@ -263,6 +263,21 @@
+       }
+ }
++int pi_strlen(char *c)
++{
++      return pi_utf8 ? SLutf8_strlen(c, 0) : strlen(c);
++}
++
++char *pi_bskip_char(char *begin, char *c)
++{
++      return pi_utf8 ? SLutf8_bskip_char(begin, c) : --c;
++}
++
++char *pi_skip_char(char *c, char *end)
++{
++      return pi_utf8 ? SLutf8_skip_char(c, end) : ++c;
++}
++
+ void pi_addstr(const char *c)
+ {
+       SLsmg_write_string((char*)c);
This page took 0.078075 seconds and 4 git commands to generate.