Author: arekm                        Date: Mon Sep 19 21:11:49 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- new

---- Files affected:
SOURCES:
   mc-4.6.1-utf8.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/mc-4.6.1-utf8.patch
diff -u /dev/null SOURCES/mc-4.6.1-utf8.patch:1.1
--- /dev/null   Mon Sep 19 23:11:49 2005
+++ SOURCES/mc-4.6.1-utf8.patch Mon Sep 19 23:11:44 2005
@@ -0,0 +1,5064 @@
+--- 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
+@@ -48,7 +48,7 @@
+ 
+ static void status_string (WEdit * edit, char *s, int w)
+ {
+-    char byte_str[16];
++    char byte_str[32];
+ 
+     /*
+      * 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
+ 
++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;
+ 
+     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;
+ 
+-    while (*p) {
++    while (p->ch) {
+       int style;
+-      int textchar;
++      mc_wchar_t textchar;
+       int color;
+ 
+       if (cols_to_skip) {
+@@ -212,9 +222,9 @@ print_to_widget (WEdit *edit, long row, 
+           continue;
+       }
+ 
+-      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);
+       }
+-
++#ifdef UTF8
++      SLsmg_write_char(textchar);
++#else
+       addch (textchar);
++#endif
+       p++;
+     }
+ }
+@@ -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;
+ 
+@@ -265,66 +278,96 @@ edit_draw_this_line (WEdit *edit, long b
+ 
+       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);
+ 
+                   /* 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;
+                   }
+ 
+-                  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;
+ 
+@@ -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;
+       }
+     }
+@@ -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
+ 
+     case WIDGET_KEY:
+       {
+-          int cmd, ch;
++          int cmd;
++          mc_wint_t ch;
+ 
+           /* 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 @@
+ 
+ #define tab_width option_tab_spacing
+ 
++#ifndef UTF8
+ #define NO_FORMAT_CHARS_START "-+*\\,.;:&>"
++#else /* UTF8 */
++#define NO_FORMAT_CHARS_START L"-+*\\,.;:&>"
++#endif /* UTF8 */
++
+ #define FONT_MEAN_WIDTH 1
+ 
+ static long
+@@ -41,14 +46,21 @@ line_start (WEdit *edit, long line)
+       p = edit_move_forward (edit, p, line - l, 0);
+ 
+     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;
+ }
+ 
+ static int bad_line_start (WEdit * edit, long p)
+ {
+-    int c;
++    mc_wint_t c;
++
+     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;
+     }
++    
++#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);
+     }
+-    *size = (unsigned long) s - (unsigned long) t;
++    *size = s - t;
+     t[*size] = '\n';
+     return t;
+ }
+ 
+-static void strip_newlines (unsigned char *t, int size)
++static void strip_newlines (mc_wchar_t *t, int size)
+ {
+-    unsigned char *p = t;
++    mc_wchar_t *p = t;
+     while (size--) {
+       *p = *p == '\n' ? ' ' : *p;
+       p++;
+@@ -158,7 +180,7 @@ static inline int next_tab_pos (int x)
+ {
+     return x += tab_width - x % tab_width;
+ }
+-static int line_pixel_length (unsigned char *t, long b, int l)
++static int line_pixel_length (mc_wchar_t *t, long b, int l)
+ {
+     int x = 0, c, xn = 0;
+     for (;;) {
+@@ -182,7 +204,7 @@ static int line_pixel_length (unsigned c
+ }
+ 
+ /* find the start of a word */
+-static int next_word_start (unsigned char *t, int q, int size)
++static int next_word_start (mc_wchar_t *t, int q, int size)
+ {
+     int i;
+     for (i = q;; i++) {
+@@ -203,7 +225,7 @@ static int next_word_start (unsigned cha
+ }
+ 
+ /* find the start of a word */
+-static int word_start (unsigned char *t, int q, int size)
++static int word_start (mc_wchar_t *t, int q, int size)
+ {
+     int i = q;
+     if (t[q] == ' ' || t[q] == '\t')
+@@ -222,7 +244,7 @@ static int word_start (unsigned char *t,
+ }
+ 
+ /* replaces ' ' with '\n' to properly format a paragraph */
+-static void format_this (unsigned char *t, int size, int indent)
++static void format_this (mc_wchar_t *t, int size, int indent)
+ {
+     int q = 0, ww;
+     strip_newlines (t, size);
+@@ -250,7 +272,7 @@ static void format_this (unsigned char *
+     }
+ }
+ 
+-static void replace_at (WEdit * edit, long q, int c)
++static void replace_at (WEdit * edit, long q, mc_wint_t c)
+ {
+     edit_cursor_move (edit, q - edit->curs1);
+     edit_delete (edit);
+@@ -258,18 +280,27 @@ static void replace_at (WEdit * edit, lo
+ }
+ 
+ /* replaces a block of text */
+-static void put_paragraph (WEdit * edit, unsigned char *t, long p, long q, 
int indent, int size)
++static void put_paragraph (WEdit * edit, mc_wchar_t *t, long p, long q, int 
indent, int size)
+ {
+     long cursor;
+-    int i, c = 0;
++    int i;
++    mc_wchar_t c = 0;
+     cursor = edit->curs1;
+     if (indent)
++#ifndef UTF8
+       while (strchr ("\t ", edit_get_byte (edit, p)))
++#else /* UTF8 */
++        while (wcschr (L"\t ", edit_get_byte (edit, p)))
++#endif /* UTF8 */
+           p++;
+     for (i = 0; i < size; i++, p++) {
+       if (i && indent) {
+           if (t[i - 1] == '\n' && c == '\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++;
+           } else if (t[i - 1] == '\n') {
+               long curs;
+@@ -281,7 +312,11 @@ static void put_paragraph (WEdit * edit,
+               p = edit->curs1;
+           } else if (c == '\n') {
+               edit_cursor_move (edit, p - edit->curs1);
++#ifndef UTF8
+               while (strchr ("\t ", edit_get_byte (edit, p))) {
++#else /* UTF8 */
++              while (wcschr (L"\t ", edit_get_byte (edit, p))) {
++#endif /* UTF8 */
+                   edit_delete (edit);
+                   if (cursor > edit->curs1)
+                       cursor--;
+@@ -314,7 +349,7 @@ format_paragraph (WEdit *edit, int force
+ {
+     long p, q;
+     int size;
+-    unsigned char *t;
++    mc_wchar_t *t;
+     int indent = 0;
+     if (option_word_wrap_line_length < 2)
+       return;
+@@ -324,17 +359,25 @@ format_paragraph (WEdit *edit, int force
+     q = end_paragraph (edit, force);
+     indent = test_indent (edit, p, q);
+     t = get_paragraph (edit, p, q, indent, &size);
+-    if (!t)
++    if (!t) 
+       return;
+     if (!force) {
+       int i;
++#ifndef UTF8
+       if (strchr (NO_FORMAT_CHARS_START, *t)) {
++#else /* UTF8 */
++      if (wcschr (NO_FORMAT_CHARS_START, *t)) {
++#endif /* UTF8 */
+           g_free (t);
+           return;
+       }
+       for (i = 0; i < size - 1; i++) {
+           if (t[i] == '\n') {
++#ifndef UTF8
+               if (strchr (NO_FORMAT_CHARS_START "\t ", t[i + 1])) {
++#else /* UTF8 */
++              if (wcschr (NO_FORMAT_CHARS_START "\t", t[i + 1])) {
++#endif /* UTF8 */
+                   g_free (t);
+                   return;
+               }
+--- mc-4.6.1-pre5/edit/editcmd.c.utf8  2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1-pre5/edit/editcmd.c       2005-07-08 11:22:41.897087856 +0200
+@@ -46,7 +46,7 @@
+ #define edit_get_save_file(f,h) input_expand_dialog (h, _(" Enter file name: 
"), f)
+ 
+ struct selection {
+-   unsigned char * text;
++   mc_wchar_t *text;
+    int len;
+ };
+ 
+@@ -69,12 +69,16 @@ int edit_confirm_save = 1;
+ #define MAX_REPL_LEN 1024
+ 
+ static int edit_save_cmd (WEdit *edit);
+-static unsigned char *edit_get_block (WEdit *edit, long start,
++static mc_wchar_t *edit_get_block (WEdit *edit, long start,
+                                     long finish, int *l);
+ 
+-static inline int my_lower_case (int c)
++static inline mc_wchar_t my_lower_case (mc_wchar_t c)
+ {
++#ifndef UTF8
+     return tolower(c & 0xFF);
++#else
++    return towlower(c);
++#endif    
+ }
+ 
+ static const char *strcasechr (const unsigned char *s, int c)
+@@ -108,11 +112,11 @@ static void *memmove (void *dest, const 
+ #endif /* !HAVE_MEMMOVE */
+ 
+ /* #define itoa MY_itoa  <---- this line is now in edit.h */
+-static char *
++static mc_wchar_t *
+ MY_itoa (int i)
+ {
+-    static char t[14];
+-    char *s = t + 13;
++    static mc_wchar_t t[14];
++    mc_wchar_t *s = t + 13;
+     int j = i;
+     *s-- = 0;
+     do {
+@@ -196,6 +200,48 @@ void edit_refresh_cmd (WEdit * edit)
+     doupdate();
+ }
+ 
++#ifdef UTF8
++
++static size_t
++wchar_write(int fd, mc_wchar_t *buf, size_t len)
++{
++    char *tmpbuf = g_malloc(len + MB_LEN_MAX);
++    mbstate_t mbs;
++    size_t i;
++    size_t outlen = 0;
++    size_t res;
++
++    for (i = 0; i < len; i++) {
++      if (outlen >= len) {
++          if ((res = mc_write(fd, tmpbuf, outlen)) != outlen) {
++              g_free(tmpbuf);
++              return -1;
++          }
++          outlen = 0;
++      }
++      memset (&mbs, 0, sizeof (mbs));
++#ifdef __STDC_ISO_10646__ 
++      if (buf[i] >= BINARY_CHAR_OFFSET && buf[i] < (BINARY_CHAR_OFFSET + 
256)) {
++          res = 1;
++          tmpbuf[outlen] = (char) (buf[i] - BINARY_CHAR_OFFSET);
<<Diff was trimmed, longer than 597 lines>>
_______________________________________________
pld-cvs-commit mailing list
pld-cvs-commit@lists.pld-linux.org
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to