]> git.pld-linux.org Git - packages/dml.git/blob - dml-input_utf8.patch
- added the input_utf8.patch
[packages/dml.git] / dml-input_utf8.patch
1 --- dml-0.1.6/src/pi.h.old      2007-10-05 09:37:17.000000000 +0200
2 +++ dml-0.1.6/src/pi.h  2007-10-05 10:12:18.000000000 +0200
3 @@ -139,7 +139,7 @@
4         PI_COMMON_DATA(pi_input);
5  
6         char *buf;
7 -       int top, cur, blen;
8 +       int top, cur, cur_utf8, blen;
9         int deadly, pass, res;
10  };
11  
12 @@ -230,6 +230,9 @@
13  void pi_frame(int x, int y, int w, int h);
14  void pi_putch(int c);
15  unsigned char *pi_putch_utf8(unsigned char *c);
16 +int pi_strlen(char *c);
17 +char *pi_bskip_char(char *begin, char *c);
18 +char *pi_skip_char(char *c,  char *end);
19  void pi_addstr(const char *c);
20  void pi_addstrn(const char *c, int n);
21  void pi_addstrn_fill(const char *c, int n);
22 --- dml-0.1.6/src/input.c.old   2007-10-05 09:26:45.000000000 +0200
23 +++ dml-0.1.6/src/input.c       2007-10-05 11:36:12.000000000 +0200
24 @@ -11,8 +11,8 @@
25  
26  void pi_input_draw(struct pi_input *self)
27  {
28 -       int i, n, w, a = 0, x, y;
29 -       
30 +       int i, n, n2, w, a = 0, x, y;
31 +
32         pi_locate((struct pi_object*)self, &x, &y);
33         
34         if ((self->buf[0] == 0) || (self->pass==1)) {
35 @@ -20,7 +20,7 @@
36                             pi_is_active((struct pi_object*)self) ? 
37                               pi_color_input_hl : pi_color_input);
38                 if (self->buf[0] == 0) 
39 -                       self->top = self->cur = 0;
40 +                       self->top = self->cur = self->cur_utf8 = 0;
41                         
42                 n = self->pos.w;
43                 
44 @@ -35,20 +35,25 @@
45                 pi_goto(x, y);
46                 return;
47         } 
48 -       
49 +
50         n = strlen(self->buf);
51 +       n2 = pi_strlen(self->buf);
52         if (self->top > n)
53                 self->top = 0;
54         if (self->cur > n)
55                 self->cur = n;
56 +       if (self->cur_utf8 > n2)
57 +               self->cur_utf8 = n2;
58 +
59         n -= self->top;
60 +       n2 -= self->top;
61         w = self->pos.w;
62         if (self->top) {
63                 w--;
64                 pi_color(pi_color_input_arrow);
65                 pi_putch('<');
66         }
67 -       if (n > w) {
68 +       if (n2 > w) {
69                 w--;    /* for '>' */
70                 a = 1;
71         }
72 @@ -58,10 +63,10 @@
73                    self->deadly ? 
74                      pi_color_input_deadly : 
75                        pi_color_input_hl : pi_color_input);
76 -       if (n >= w) {
77 +       if (n2 >= w) {
78                 if (self->pass)
79                 {
80 -                 for(n=w;n>0;n--)
81 +                 for(n2=w;n2>0;n2--)
82                     pi_putch('*');
83                 }
84                 else
85 @@ -74,7 +79,7 @@
86         } else {
87                 if (self->pass)
88                 {
89 -                 for (i=n;i>0;i--)
90 +                 for (i=n2;i>0;i--)
91                         pi_putch('*');
92                 }
93                 else
94 @@ -83,11 +88,11 @@
95                 pi_color(self->ghosted ? pi_color_input_ghosted :
96                             pi_is_active((struct pi_object*)self) ? 
97                               pi_color_input_hl : pi_color_input);
98 -               n = w - n;
99 -               while (n--)
100 +               n2 = w - n2;
101 +               while (n2--)
102                         pi_putch(' ');
103         }
104 -       pi_goto(x + self->cur - self->top + (self->top != 0), y);
105 +       pi_goto(x + self->cur_utf8 - self->top + (self->top != 0), y);
106  }
107  
108  void pi_input_kill(struct pi_input *self)
109 @@ -105,36 +110,48 @@
110  
111  void pi_input_key(struct pi_input *self, int key)
112  {
113 -       char *p;
114 +       char *p, *p2;
115         int n;
116 -       
117 +
118         /* p is char under cursor */
119         p = self->buf + self->cur;
120                 
121         switch (key) {
122         case pi_key_left:
123 -               if (self->cur)
124 -                       self->cur--;
125 +               if (self->cur_utf8 > 0) {
126 +                       self->cur_utf8--;
127 +                       p = pi_bskip_char(self->buf, p);
128 +                       self->cur = p - self->buf;
129 +               }
130                 break;
131         case pi_key_right:
132 -               if (*p)
133 -                       self->cur++;
134 +               if (*p) {
135 +                       self->cur_utf8++;
136 +                       p = pi_skip_char(p, p + 7);
137 +                       self->cur = p - self->buf;
138 +               }
139                 break;
140         case '\b':
141                 if (self->cur == 0)
142                         break;
143 -               self->cur--;
144 -               p--;
145 +               p2 = pi_bskip_char(self->buf, p);
146 +               self->cur = p2 - self->buf;
147 +               self->cur_utf8--;
148 +               memmove(p2, p, strlen(p2));
149 +               break;
150         case pi_key_del:
151 -               if (p && *p) 
152 -                       memmove(p, p + 1, strlen(p));
153 +               if (p && *p) {
154 +                       p2 = pi_skip_char(p, p + 7); 
155 +                       memmove(p, p2, strlen(p));
156 +               }
157                 dead(self);
158                 break;
159         case pi_key_home:
160 -               self->cur = 0;
161 +               self->cur = self->cur_utf8 = 0;
162                 break;
163         case pi_key_end:
164                 self->cur = strlen(self->buf);
165 +               self->cur_utf8 = pi_strlen(self->buf);
166                 break;
167         default:
168                 if ((key == '\n') && (self->res != 0))
169 @@ -152,24 +169,31 @@
170                         p = self->buf + self->cur;
171                         memmove(p + 1, p, strlen(p) + 1);
172                         *p = key;
173 +
174                         self->cur++;
175 +                       self->cur_utf8++;
176                 } else {
177                         pi_object_key((struct pi_object*)self, key);
178                         return;
179                 }
180         }
181 -       
182         if (self->cur > (int)strlen(self->buf))
183 -               self->cur = strlen(self->buf);
184 -               
185 +               self->cur = strlen(self->buf);  
186 +       if (self->cur_utf8 > (int)pi_strlen(self->buf))
187 +               self->cur_utf8 = pi_strlen(self->buf);
188         if (self->cur < 0)
189                 self->cur = 0;
190         if (self->top > self->cur)
191                 self->top = self->cur;
192 -       
193 -       if (self->cur - self->top > self->pos.w - 2)
194 -               self->top = self->cur - self->pos.w + 2;
195 -       else if (self->cur - self->top == self->pos.w - 2 && 
196 +
197 +       if (self->cur_utf8 < 0)
198 +               self->cur_utf8 = 0;
199 +       if (self->top > self->cur_utf8)
200 +               self->top = self->cur_utf8;
201 +       
202 +       if (self->cur_utf8 - self->top > self->pos.w - 2)
203 +               self->top = self->cur_utf8 - self->pos.w + 2;
204 +       else if (self->cur_utf8 - self->top == self->pos.w - 2 && 
205                  self->buf[self->cur])
206                 self->top++;
207         self->deadly = 0;
208 --- dml-0.1.6/src/slang.c.old   2007-10-05 09:38:02.000000000 +0200
209 +++ dml-0.1.6/src/slang.c       2007-10-05 11:35:38.000000000 +0200
210 @@ -263,6 +263,21 @@
211         }
212  }
213  
214 +int pi_strlen(char *c)
215 +{
216 +       return pi_utf8 ? SLutf8_strlen(c, 0) : strlen(c);
217 +}
218 +
219 +char *pi_bskip_char(char *begin, char *c)
220 +{
221 +       return pi_utf8 ? SLutf8_bskip_char(begin, c) : --c;
222 +}
223 +
224 +char *pi_skip_char(char *c, char *end)
225 +{
226 +       return pi_utf8 ? SLutf8_skip_char(c, end) : ++c;
227 +}
228 +
229  void pi_addstr(const char *c)
230  {
231         SLsmg_write_string((char*)c);
This page took 0.040506 seconds and 3 git commands to generate.