Author: arekm                        Date: Sat Oct 15 12:32:25 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- updated

---- Files affected:
SOURCES:
   mc-utf8.patch (1.1 -> 1.2) 

---- Diffs:

================================================================
Index: SOURCES/mc-utf8.patch
diff -u SOURCES/mc-utf8.patch:1.1 SOURCES/mc-utf8.patch:1.2
--- SOURCES/mc-utf8.patch:1.1   Mon Sep 19 23:55:29 2005
+++ SOURCES/mc-utf8.patch       Sat Oct 15 14:32:20 2005
@@ -1,2439 +1,1972 @@
---- mc-4.6.1-pre5/edit/editdraw.c.utf8 2005-05-27 16:19:18.000000000 +0200
-+++ mc-4.6.1-pre5/edit/editdraw.c      2005-07-08 11:22:41.891088768 +0200
+--- mc-4.6.1/acinclude.m4.utf8 2005-05-11 20:53:22.000000000 +0200
++++ mc-4.6.1/acinclude.m4      2005-09-29 19:13:29.000000000 +0200
+@@ -769,14 +769,14 @@ AC_DEFUN([MC_WITH_SLANG], [
+     fi
  
- static void status_string (WEdit * edit, char *s, int w)
- {
--    char byte_str[16];
-+    char byte_str[32];
+     dnl Unless external S-Lang was requested, reject S-Lang with UTF-8 hacks
+-    if test x$with_screen = xslang; then
+-      :
+-      m4_if([$1], strict, ,
+-            [AC_CHECK_LIB([slang], [SLsmg_write_nwchars],
+-                          [AC_MSG_WARN([Rejecting S-Lang with UTF-8 support, \
+-it's not fully supported yet])
+-            with_screen=mcslang])])
+-    fi
++dnl    if test x$with_screen = xslang; then
++dnl   :
++dnl   m4_if([$1], strict, ,
++dnl         [AC_CHECK_LIB([slang], [SLsmg_write_nwchars],
++dnl                       [AC_MSG_WARN([Rejecting S-Lang with UTF-8 support, \
++dnl it's not fully supported yet])
++dnl         with_screen=mcslang])])
++dnl    fi
  
-     /*
-      * If we are at the end of file, print <EOF>,
-@@ -56,11 +56,16 @@ static void status_string (WEdit * edit,
-      * as decimal and as hex.
-      */
-     if (edit->curs1 < edit->last_byte) {
--      unsigned char cur_byte = edit_get_byte (edit, edit->curs1);
-+        mc_wchar_t cur_byte = edit_get_byte (edit, edit->curs1);
-+#ifndef UTF8
-       g_snprintf (byte_str, sizeof (byte_str), "%c %3d 0x%02X",
-                   is_printable (cur_byte) ? cur_byte : '.',
--                  (int) cur_byte,
--                  (unsigned) cur_byte);
-+#else /* UTF8 */
-+        g_snprintf (byte_str, sizeof(byte_str), "%lc %3d 0x%02X",
-+                    iswprint(cur_byte) ? cur_byte : '.',
-+#endif /* UTF8 */
-+                    (int) cur_byte,
-+                    (unsigned) cur_byte);
-     } else {
-       strcpy (byte_str, "<EOF>");
-     }
-@@ -183,11 +188,16 @@ void edit_scroll_screen_over_cursor (WEd
- #define lowlevel_set_color(x) attrset(MY_COLOR_PAIR(color))
- #endif
+     if test x$with_screen = xslang; then
+       AC_DEFINE(HAVE_SYSTEM_SLANG, 1,
+--- mc-4.6.1/src/layout.c.utf8 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/layout.c      2005-09-29 19:13:29.000000000 +0200
+@@ -362,36 +362,36 @@ init_layout (void)
  
-+struct line_s {
-+    mc_wchar_t ch;
-+    unsigned int style;
-+};
-+
- static void
- print_to_widget (WEdit *edit, long row, int start_col, int start_col_real,
--               long end_col, unsigned int line[])
-+               long end_col, struct line_s line[])
- {
--    unsigned int *p;
-+    struct line_s *p;
+       while (i--) {
+           s_split_direction[i] = _(s_split_direction[i]);
+-          l1 = strlen (s_split_direction[i]) + 7;
++          l1 = mbstrlen (s_split_direction[i]) + 7;
+           if (l1 > first_width)
+               first_width = l1;
+       }
  
-     int x = start_col_real + EDIT_TEXT_HORIZONTAL_OFFSET;
-     int x1 = start_col + EDIT_TEXT_HORIZONTAL_OFFSET;
-@@ -201,9 +211,9 @@ print_to_widget (WEdit *edit, long row, 
-     edit_move (x1 + FONT_OFFSET_X, y + FONT_OFFSET_Y);
-     p = line;
+       for (i = 0; i <= 8; i++) {
+           check_options[i].text = _(check_options[i].text);
+-          l1 = strlen (check_options[i].text) + 7;
++          l1 = mbstrlen (check_options[i].text) + 7;
+           if (l1 > first_width)
+               first_width = l1;
+       }
  
--    while (*p) {
-+    while (p->ch) {
-       int style;
--      int textchar;
-+      mc_wchar_t textchar;
-       int color;
+-      l1 = strlen (title1) + 1;
++      l1 = mbstrlen (title1) + 1;
+       if (l1 > first_width)
+           first_width = l1;
  
-       if (cols_to_skip) {
-@@ -212,9 +222,9 @@ print_to_widget (WEdit *edit, long row, 
-           continue;
-       }
+-      l1 = strlen (title2) + 1;
++      l1 = mbstrlen (title2) + 1;
+       if (l1 > first_width)
+           first_width = l1;
  
--      style = *p & 0xFF00;
--      textchar = *p & 0xFF;
--      color = *p >> 16;
-+      style = p->style & 0xFF00;
-+      textchar = p->ch;
-+      color = p->style >> 16;
  
-       if (style & MOD_ABNORMAL) {
-           /* Non-printable - use black background */
-@@ -228,8 +238,11 @@ print_to_widget (WEdit *edit, long row, 
-       } else {
-           lowlevel_set_color (color);
+-      second_width = strlen (title3) + 1;
++      second_width = mbstrlen (title3) + 1;
+       for (i = 0; i < 6; i++) {
+           check_options[i].text = _(check_options[i].text);
+-          l1 = strlen (check_options[i].text) + 7;
++          l1 = mbstrlen (check_options[i].text) + 7;
+           if (l1 > second_width)
+               second_width = l1;
        }
--
-+#ifdef UTF8
-+      SLsmg_write_char(textchar);
-+#else
-       addch (textchar);
-+#endif
-       p++;
+       if (console_flag) {
+-          l1 = strlen (output_lines_label) + 13;
++          l1 = mbstrlen (output_lines_label) + 13;
+           if (l1 > second_width)
+               second_width = l1;
+       }
+@@ -405,14 +405,14 @@ init_layout (void)
+        *
+        * Now the last thing to do - properly space buttons...
+        */
+-      l1 = 11 + strlen (ok_button)    /* 14 - all brackets and inner space */
+-          +strlen (save_button)       /* notice: it is 3 char less because */
+-          +strlen (cancel_button);    /* of '&' char in button text */
++      l1 = 11 + mbstrlen (ok_button)  /* 14 - all brackets and inner space */
++          +mbstrlen (save_button)     /* notice: it is 3 char less because */
++          +mbstrlen (cancel_button);  /* of '&' char in button text */
+ 
+       i = (first_width + second_width - l1) / 4;
+       b1 = 5 + i;
+-      b2 = b1 + strlen (ok_button) + i + 6;
+-      b3 = b2 + strlen (save_button) + i + 4;
++      b2 = b1 + mbstrlen (ok_button) + i + 6;
++      b3 = b2 + mbstrlen (save_button) + i + 4;
+ 
+       i18n_layt_flag = 1;
      }
- }
-@@ -239,11 +252,11 @@ static void
- edit_draw_this_line (WEdit *edit, long b, long row, long start_col,
-                    long end_col)
- {
--    static unsigned int line[MAX_LINE_LEN];
--    unsigned int *p = line;
-+    struct line_s line[MAX_LINE_LEN];
-+    struct line_s *p = line;
-     long m1 = 0, m2 = 0, q, c1, c2;
-     int col, start_col_real;
--    unsigned int c;
-+    mc_wint_t c;
-     int color;
-     int i, book_mark = -1;
+@@ -684,7 +684,7 @@ setup_panels (void)
+     panel_do_cols (0);
+     panel_do_cols (1);
  
-@@ -265,66 +278,96 @@ edit_draw_this_line (WEdit *edit, long b
+-    promptl = strlen (prompt);
++    promptl = mbstrlen (prompt);
  
-       if (row <= edit->total_lines - edit->start_line) {
-           while (col <= end_col - edit->start_col) {
--              *p = 0;
-+              p->ch = 0;
-+              p->style = 0;
-               if (q == edit->curs1)
--                  *p |= MOD_CURSOR;
-+                  p->style |= MOD_CURSOR;
-               if (q >= m1 && q < m2) {
-                   if (column_highlighting) {
-                       int x;
-                       x = edit_move_forward3 (edit, b, 0, q);
-                       if (x >= c1 && x < c2)
--                          *p |= MOD_MARKED;
-+                          p->style |= MOD_MARKED;
-                   } else
--                      *p |= MOD_MARKED;
-+                      p->style |= MOD_MARKED;
-               }
-               if (q == edit->bracket)
--                  *p |= MOD_BOLD;
-+                  p->style |= MOD_BOLD;
-               if (q >= edit->found_start
-                   && q < edit->found_start + edit->found_len)
--                  *p |= MOD_BOLD;
-+                  p->style |= MOD_BOLD;
-               c = edit_get_byte (edit, q);
- /* we don't use bg for mc - fg contains both */
-               if (book_mark == -1) {
-                   edit_get_syntax_color (edit, q, &color);
--                  *p |= color << 16;
-+                  p->style |= color << 16;
-               } else {
--                  *p |= book_mark << 16;
-+                  p->style |= book_mark << 16;
-               }
-               q++;
-               switch (c) {
-               case '\n':
-                   col = end_col - edit->start_col + 1;        /* quit */
--                  *(p++) |= ' ';
-+                  p->ch = ' ';
-+                  p++;
-                   break;
-               case '\t':
-                   i = TAB_SIZE - ((int) col % TAB_SIZE);
--                  *p |= ' ';
--                  c = *(p++) & ~MOD_CURSOR;
-+                  p->ch = ' ';
-+                  c = p->style & ~MOD_CURSOR;
-+                  p++;
-                   col += i;
--                  while (--i)
--                      *(p++) = c;
-+                  while (--i) {
-+                      p->ch = ' '; p->style = c;
-+                      p++;
-+                  }
-                   break;
-               default:
-                   c = convert_to_display_c (c);
+     widget_set_size (&the_menubar->widget, 0, 0, 1, COLS);
  
-                   /* Caret notation for control characters */
-                   if (c < 32) {
--                      *(p++) = '^' | MOD_ABNORMAL;
--                      *(p++) = (c + 0x40) | MOD_ABNORMAL;
-+                      p->ch = '^';
-+                      p->style = MOD_ABNORMAL;
-+                      p++;
-+                      p->ch = c + 0x40;
-+                      p->style = MOD_ABNORMAL;
-                       col += 2;
-                       break;
-                   }
-                   if (c == 127) {
--                      *(p++) = '^' | MOD_ABNORMAL;
--                      *(p++) = '?' | MOD_ABNORMAL;
-+                      p->ch = '^';
-+                      p->style = MOD_ABNORMAL;
-+                      p++;
-+                      p->ch = '?';
-+                      p->style = MOD_ABNORMAL;
-+                      p++;
-                       col += 2;
-                       break;
-                   }
+--- mc-4.6.1/src/option.c.utf8 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/option.c      2005-09-29 19:13:29.000000000 +0200
+@@ -124,12 +124,12 @@ init_configure (void)
+       title2 = _(" Pause after run... ");
+       title3 = _(" Other options ");
  
--                  if (is_printable (c)) {
--                      *(p++) |= c;
-+#ifndef UTF8
-+                  if (is_printable (c)
-+#else /* UTF8 */
-+                  if (iswprint (c)
-+#ifdef __STDC_ISO_10646__ 
-+                      && (c < BINARY_CHAR_OFFSET || c >= (BINARY_CHAR_OFFSET 
+ 256))
-+#endif
-+#endif /* UTF8 */
-+                      ) {
-+                      p->ch = c;
-+                      p++;
-+                      
-+#ifdef UTF8
-+                      i = wcwidth(c);
-+                      if (i > 1) {
-+                          col += i - 1;
-+                      }
-+#endif /* UTF8 */
-                   } else {
--                      *(p++) = '.' | MOD_ABNORMAL;
-+                      p->ch = '.';
-+                      p->style = MOD_ABNORMAL;
-+                      p++;
-                   }
-                   col++;
-                   break;
-@@ -334,7 +377,7 @@ edit_draw_this_line (WEdit *edit, long b
-     } else {
-       start_col_real = start_col = 0;
-     }
--    *p = 0;
-+    p->ch = 0;
- 
-     print_to_widget (edit, row, start_col, start_col_real, end_col, line);
- }
---- mc-4.6.1-pre5/edit/editkeys.c.utf8 2005-05-27 16:19:18.000000000 +0200
-+++ mc-4.6.1-pre5/edit/editkeys.c      2005-07-08 11:22:41.892088616 +0200
-@@ -162,10 +162,10 @@ static long const common_key_map[] = {
-  * 'command' is one of the editor commands from editcmddef.h.
-  */
- int
--edit_translate_key (WEdit *edit, long x_key, int *cmd, int *ch)
-+edit_translate_key (WEdit *edit, long x_key, int *cmd, mc_wint_t *ch)
- {
-     int command = CK_Insert_Char;
--    int char_for_insertion = -1;
-+    mc_wint_t char_for_insertion = -1;
-     int i = 0;
-     static const long *key_map;
+-      first_width = strlen (title1) + 1;
+-      second_width = strlen (title3) + 1;
++      first_width = mbstrlen (title1) + 1;
++      second_width = mbstrlen (title3) + 1;
  
-@@ -242,9 +242,30 @@ edit_translate_key (WEdit *edit, long x_
-     /* an ordinary insertable character */
-     if (x_key < 256) {
-       int c = convert_from_input_c (x_key);
--
-+#ifdef UTF8
-+      mbstate_t mbs;
-+      int res;
-+      mc_wchar_t wc;
-+    
-+      memset (&mbs, 0, sizeof (mbs));
-+
-+      if (edit->charpoint >= MB_CUR_MAX) edit->charpoint = 0;
-+
-+      edit->charbuf[edit->charpoint++] = c;
-+
-+      res = mbrtowc(&wc, (char *)edit->charbuf, edit->charpoint, &mbs);
-+      if (res < 0) {
-+          if (res != -2) edit->charpoint = 0; /* broken multibyte char, skip 
*/
-+          return 0;
-+        }
-+      edit->charpoint = 0;
-+
-+      if (iswprint (wc)) {
-+          char_for_insertion = wc;
-+#else 
-       if (is_printable (c)) {
-           char_for_insertion = c;
-+#endif /* UTF8 */
-           goto fin;
+       for (i = 0; check_options[i].text; i++) {
+           check_options[i].text = _(check_options[i].text);
+-          l1 = strlen (check_options[i].text) + 7;
++          l1 = mbstrlen (check_options[i].text) + 7;
+           if (i >= OTHER_OPTIONS) {
+               if (l1 > first_width)
+                   first_width = l1;
+@@ -142,23 +142,23 @@ init_configure (void)
+       i = PAUSE_OPTIONS;
+       while (i--) {
+           pause_options[i] = _(pause_options[i]);
+-          l1 = strlen (pause_options[i]) + 7;
++          l1 = mbstrlen (pause_options[i]) + 7;
+           if (l1 > first_width)
+               first_width = l1;
        }
-     }
-@@ -285,7 +306,7 @@ edit_translate_key (WEdit *edit, long x_
-     *cmd = command;
-     *ch = char_for_insertion;
  
--    if (command == CK_Insert_Char && char_for_insertion == -1) {
-+    if (command == CK_Insert_Char && char_for_insertion == (mc_wint_t)-1) {
-       /* unchanged, key has no function here */
-       return 0;
-     }
---- mc-4.6.1-pre5/edit/editwidget.c.utf8       2005-05-27 16:19:18.000000000 
+0200
-+++ mc-4.6.1-pre5/edit/editwidget.c    2005-07-08 11:22:41.893088464 +0200
-@@ -337,7 +337,8 @@ edit_callback (WEdit *e, widget_msg_t ms
+-      l1 = strlen (title2) + 1;
++      l1 = mbstrlen (title2) + 1;
+       if (l1 > first_width)
+           first_width = l1;
  
-     case WIDGET_KEY:
-       {
--          int cmd, ch;
-+          int cmd;
-+          mc_wint_t ch;
+-      l1 = 11 + strlen (ok_button)
+-          + strlen (save_button)
+-          + strlen (cancel_button);
++      l1 = 11 + mbstrlen (ok_button)
++          + mbstrlen (save_button)
++          + mbstrlen (cancel_button);
  
-           /* first check alt-f, alt-e, alt-s, etc for drop menus */
-           if (edit_drop_hotkey_menu (e, parm))
---- mc-4.6.1-pre5/edit/wordproc.c.utf8 2005-05-27 16:19:18.000000000 +0200
-+++ mc-4.6.1-pre5/edit/wordproc.c      2005-07-08 11:22:41.894088312 +0200
-@@ -24,7 +24,12 @@
+       i = (first_width + second_width - l1) / 4;
+       b1 = 5 + i;
+-      b2 = b1 + strlen (ok_button) + i + 6;
+-      b3 = b2 + strlen (save_button) + i + 4;
++      b2 = b1 + mbstrlen (ok_button) + i + 6;
++      b3 = b2 + mbstrlen (save_button) + i + 4;
  
- #define tab_width option_tab_spacing
+       i18n_config_flag = 1;
+     }
+--- mc-4.6.1/src/menu.h.utf8   2004-09-18 16:30:59.000000000 +0200
++++ mc-4.6.1/src/menu.h        2005-09-29 19:13:29.000000000 +0200
+@@ -21,6 +21,8 @@ typedef struct Menu {
+     menu_entry *entries;
+     int    start_x;           /* position relative to menubar start */
+     char   *help_node;
++    wchar_t **wentries;
++    wchar_t *wname;
+ } Menu;
  
-+#ifndef UTF8
- #define NO_FORMAT_CHARS_START "-+*\\,.;:&>"
-+#else /* UTF8 */
-+#define NO_FORMAT_CHARS_START L"-+*\\,.;:&>"
-+#endif /* UTF8 */
+ extern int menubar_visible;
+--- mc-4.6.1/src/menu.c.utf8   2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/menu.c        2005-09-29 19:32:14.000000000 +0200
+@@ -20,6 +20,8 @@
+ #include <stdarg.h>
+ #include <sys/types.h>
+ #include <ctype.h>
++#include <wchar.h>
 +
- #define FONT_MEAN_WIDTH 1
+ #include "global.h"
+ #include "tty.h"
+ #include "menu.h"
+@@ -50,34 +52,96 @@ create_menu (const char *name, menu_entr
+ {
+     Menu *menu;
+     const char *cp;
++    int wlen = 0;
++    mbstate_t s;
  
- static long
-@@ -41,14 +46,21 @@ line_start (WEdit *edit, long line)
-       p = edit_move_forward (edit, p, line - l, 0);
+     menu = (Menu *) g_malloc (sizeof (*menu));
+     menu->count = count;
+     menu->max_entry_len = 20;
+     menu->entries = entries;
++    menu->name = g_strdup (name);
++    menu_scan_hotkey (menu);
++#ifdef UTF8
++    menu->wentries = NULL;
++    menu->wname = NULL;
++    if (SLsmg_Is_Unicode) {
++      const char *str = menu->name;
++      memset (&s, 0, sizeof (s));
++      wlen = mbsrtowcs (NULL, &str, -1, &s);
++      if (wlen > 0)
++        ++wlen;
++      else {
++        wlen = 0;
++        memset (&s, 0, sizeof (s));
++      }
++    }
++#endif
  
-     p = edit_bol (edit, p);
-+
-+#ifndef UTF8
-     while (strchr ("\t ", edit_get_byte (edit, p)))
-+#else /* UTF8 */
-+    while (wcschr (L"\t ", edit_get_byte (edit, p)))
-+#endif /* UTF8 */
-+
-       p++;
-     return p;
- }
+     if (entries != (menu_entry*) NULL) {
+       register menu_entry* mp;
+       for (mp = entries; count--; mp++) {
+           if (mp->text[0] != '\0') {
++              int len;
+ #ifdef ENABLE_NLS
+               mp->text = _(mp->text);
+ #endif /* ENABLE_NLS */
+               cp = strchr (mp->text,'&');
  
- static int bad_line_start (WEdit * edit, long p)
- {
--    int c;
-+    mc_wint_t c;
++#ifdef UTF8
++              if (SLsmg_Is_Unicode) {
++                    len = mbstrlen(mp->text) + 1;
++                    wlen += len;
++                    menu->max_entry_len = max (len - 1, menu->max_entry_len);
++                } else
++#endif
++                    len = strlen (mp->text);
 +
-     c = edit_get_byte (edit, p);
-     if (c == '.') {           /* `...' is acceptable */
-       if (edit_get_byte (edit, p + 1) == '.')
-@@ -62,7 +74,13 @@ static int bad_line_start (WEdit * edit,
-               return 0;       /* `---' is acceptable */
-       return 1;
+               if (cp != NULL && *(cp+1) != '\0') {
+                   mp->hot_key = tolower (*(cp+1));
+-                  menu->max_entry_len = max ((int) (strlen (mp->text) - 1),
+-                      menu->max_entry_len);
++                  menu->max_entry_len = max (len - 1, menu->max_entry_len);
+               } else {
+-                  menu->max_entry_len = max ((int) strlen (mp->text),
+-                      menu->max_entry_len);
++                  menu->max_entry_len = max (len, menu->max_entry_len);
+               }
+           }
+       }
      }
-+    
-+#ifndef UTF8
-     if (strchr (NO_FORMAT_CHARS_START, c))
-+#else /* UTF8 */
-+    if (wcschr (NO_FORMAT_CHARS_START, c))
-+#endif /* UTF8 */
-+
-       return 1;
-     return 0;
- }
-@@ -115,33 +133,37 @@ end_paragraph (WEdit *edit, int force)
-                                       i - edit->curs_line, 0));
- }
  
--static unsigned char *
-+static mc_wchar_t *
- get_paragraph (WEdit *edit, long p, long q, int indent, int *size)
- {
--    unsigned char *s, *t;
-+    mc_wchar_t *s, *t;
- #if 0
--    t = g_malloc ((q - p) + 2 * (q - p) / option_word_wrap_line_length +
--                10);
-+    t = g_malloc (((q - p) + 2 * (q - p) / option_word_wrap_line_length +
-+                10) * sizeof(mc_wchar_t));
- #else
--    t = g_malloc (2 * (q - p) + 100);
-+    t = g_malloc ((2 * (q - p) + 100) * sizeof(mc_wchar_t));
- #endif
-     if (!t)
-       return 0;
-     for (s = t; p < q; p++, s++) {
-       if (indent)
-           if (edit_get_byte (edit, p - 1) == '\n')
-+#ifndef UTF8
-               while (strchr ("\t ", edit_get_byte (edit, p)))
-+#else /* UTF8 */
-+              while (wcschr (L"\t ", edit_get_byte (edit, p)))
-+#endif /* UTF8 */
-                   p++;
-       *s = edit_get_byte (edit, p);
+-    menu->name = g_strdup (name);
++#ifdef UTF8
++    if (wlen) {
++      wchar_t *wp;
++      const char *str;
++      int len;
++
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    http://cvs.pld-linux.org/SOURCES/mc-utf8.patch?r1=1.1&r2=1.2&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to