From 3e6f1041f61d6b4841237f1c762c0aa139de61a7 Mon Sep 17 00:00:00 2001 From: Andrew Borodin Date: Tue, 4 Sep 2012 10:18:38 +0400 Subject: [PATCH] Ticket #2877: code cleanup before 4.8.1.6 release. Better support of --disable-charset. Signed-off-by: Ilia Maslakov Signed-off-by: Andrew Borodin --- src/diffviewer/internal.h | 1 - src/diffviewer/ydiff.c | 21 +++++++++--------- src/editor/edit.c | 52 ++++++++++++++++++++++++++++++++----------- src/editor/editdraw.c | 56 +++++++++++++++++++++++------------------------ src/editor/editwidget.h | 11 +++++----- 5 files changed, 82 insertions(+), 59 deletions(-) diff --git a/src/diffviewer/internal.h b/src/diffviewer/internal.h index bdd2c2961..324b928b6 100644 --- a/src/diffviewer/internal.h +++ b/src/diffviewer/internal.h @@ -129,7 +129,6 @@ typedef struct WDiff ssize_t last_found_line; ssize_t last_accessed_num_line; } search; - } WDiff; /*** global variables defined in .c file *********************************************************/ diff --git a/src/diffviewer/ydiff.c b/src/diffviewer/ydiff.c index b913b8ea4..444972026 100644 --- a/src/diffviewer/ydiff.c +++ b/src/diffviewer/ydiff.c @@ -117,10 +117,10 @@ TAB_SKIP (int ts, int pos) /* --------------------------------------------------------------------------------------------- */ +#ifdef HAVE_CHARSET static void dview_set_codeset (WDiff * dview) { -#ifdef HAVE_CHARSET const char *encoding_id = NULL; dview->utf8 = TRUE; @@ -130,6 +130,7 @@ dview_set_codeset (WDiff * dview) if (encoding_id != NULL) { GIConv conv; + conv = str_crt_conv_from (encoding_id); if (conv != INVALID_CONV) { @@ -139,19 +140,18 @@ dview_set_codeset (WDiff * dview) } dview->utf8 = (gboolean) str_isutf8 (encoding_id); } -#else - (void) dview; -#endif } /* --------------------------------------------------------------------------------------------- */ -#ifdef HAVE_CHARSET static void dview_select_encoding (WDiff * dview) { if (do_select_codepage ()) dview_set_codeset (dview); + dview_reread (dview); + tty_touch_screen (); + repaint_screen (); } #endif /* HAVE_CHARSET */ @@ -590,6 +590,7 @@ p_close (FBUF * fs) return rv; } +/* --------------------------------------------------------------------------------------------- */ /** * Get one char (byte) from string * @@ -610,7 +611,7 @@ dview_get_byte (char *str, gboolean * result) return (unsigned char) *str; } - +/* --------------------------------------------------------------------------------------------- */ /** * Get utf multibyte char from string * @@ -653,6 +654,8 @@ dview_get_utf (char *str, int *char_width, gboolean * result) return ch; } +/* --------------------------------------------------------------------------------------------- */ + static int dview_str_utf8_offset_to_pos (const char *text, size_t length) { @@ -688,7 +691,6 @@ dview_str_utf8_offset_to_pos (const char *text, size_t length) return max (length, (size_t) result); } - /* --------------------------------------------------------------------------------------------- */ /* diff parse *************************************************************** */ @@ -2319,7 +2321,9 @@ dview_init (WDiff * dview, const char *args, const char *file1, const char *file dview->hdiff = NULL; dview->dsrc = dsrc; dview->converter = str_cnv_from_term; +#ifdef HAVE_CHARSET dview_set_codeset (dview); +#endif dview->a[0] = g_array_new (FALSE, FALSE, sizeof (DIFFLN)); dview->a[1] = g_array_new (FALSE, FALSE, sizeof (DIFFLN)); @@ -3132,9 +3136,6 @@ dview_execute_cmd (WDiff * dview, unsigned long command) #ifdef HAVE_CHARSET case CK_SelectCodepage: dview_select_encoding (dview); - dview_reread (dview); - tty_touch_screen (); - repaint_screen (); break; #endif case CK_Cancel: diff --git a/src/editor/edit.c b/src/editor/edit.c index 307d7c5a3..71bea3302 100644 --- a/src/editor/edit.c +++ b/src/editor/edit.c @@ -697,6 +697,7 @@ edit_modification (WEdit * edit) /* --------------------------------------------------------------------------------------------- */ +#ifdef HAVE_CHARSET static char * edit_get_byte_ptr (WEdit * edit, off_t byte_index) { @@ -715,9 +716,11 @@ edit_get_byte_ptr (WEdit * edit, off_t byte_index) return (char *) (edit->buffers1[byte_index >> S_EDIT_BUF_SIZE] + (byte_index & M_EDIT_BUF_SIZE)); } +#endif /* --------------------------------------------------------------------------------------------- */ +#ifdef HAVE_CHARSET static int edit_get_prev_utf (WEdit * edit, off_t byte_index, int *char_width) { @@ -760,6 +763,7 @@ edit_get_prev_utf (WEdit * edit, off_t byte_index, int *char_width) } } } +#endif /* --------------------------------------------------------------------------------------------- */ @@ -773,17 +777,20 @@ edit_backspace (WEdit * edit, const int byte_delete) if (!edit->curs1) return 0; - cw = 1; - if (edit->mark2 != edit->mark1) edit_push_markers (edit); +#ifdef HAVE_CHARSET if (edit->utf8 && byte_delete == 0) { edit_get_prev_utf (edit, edit->curs1, &cw); if (cw < 1) cw = 1; } +#else + (void) byte_delete; +#endif + for (i = 1; i <= cw; i++) { if (edit->mark1 >= edit->curs1) @@ -1210,6 +1217,8 @@ edit_right_char_move_cmd (WEdit * edit) { int cw = 1; int c = 0; + +#ifdef HAVE_CHARSET if (edit->utf8) { c = edit_get_utf (edit, edit->curs1, &cw); @@ -1217,6 +1226,7 @@ edit_right_char_move_cmd (WEdit * edit) cw = 1; } else +#endif { c = edit_get_byte (edit, edit->curs1); } @@ -1236,17 +1246,21 @@ static void edit_left_char_move_cmd (WEdit * edit) { int cw = 1; + if (edit->column_highlight && option_cursor_beyond_eol && edit->mark1 != edit->mark2 && edit->over_col == 0 && edit->curs1 == edit_bol (edit, edit->curs1)) return; + +#ifdef HAVE_CHARSET if (edit->utf8) { edit_get_prev_utf (edit, edit->curs1, &cw); if (cw < 1) cw = 1; } +#endif if (option_cursor_beyond_eol && edit->over_col > 0) { edit->over_col--; @@ -1954,6 +1968,7 @@ edit_get_byte (WEdit * edit, off_t byte_index) /* --------------------------------------------------------------------------------------------- */ +#ifdef HAVE_CHARSET int edit_get_utf (WEdit * edit, off_t byte_index, int *char_width) { @@ -2014,6 +2029,7 @@ edit_get_utf (WEdit * edit, off_t byte_index, int *char_width) *char_width = width; return ch; } +#endif /* --------------------------------------------------------------------------------------------- */ @@ -2325,9 +2341,11 @@ edit_init (WEdit * edit, int y, int x, int lines, int cols, const vfs_path_t * f edit->redo_stack_size_mask = START_STACK_SIZE - 1; edit->redo_stack = g_malloc0 ((edit->redo_stack_size + 10) * sizeof (long)); - edit->utf8 = 0; +#ifdef HAVE_CHARSET + edit->utf8 = FALSE; edit->converter = str_cnv_from_term; edit_set_codeset (edit); +#endif if (!edit_load_file (edit)) { @@ -2401,8 +2419,10 @@ edit_clean (WEdit * edit) mc_search_free (edit->search); edit->search = NULL; +#ifdef HAVE_CHARSET if (edit->converter != str_cnv_from_term) str_close_conv (edit->converter); +#endif edit_purge_widget (edit); @@ -2460,10 +2480,10 @@ edit_reload_line (WEdit * edit, const vfs_path_t * filename_vpath, long line) /* --------------------------------------------------------------------------------------------- */ +#ifdef HAVE_CHARSET void edit_set_codeset (WEdit * edit) { -#ifdef HAVE_CHARSET const char *cp_id; cp_id = @@ -2484,11 +2504,8 @@ edit_set_codeset (WEdit * edit) if (cp_id != NULL) edit->utf8 = str_isutf8 (cp_id); -#else - (void) edit; -#endif } - +#endif /* --------------------------------------------------------------------------------------------- */ /** @@ -2826,7 +2843,7 @@ edit_delete (WEdit * edit, const int byte_delete) if (!edit->curs2) return 0; - cw = 1; +#ifdef HAVE_CHARSET /* if byte_delete = 1 then delete only one byte not multibyte char */ if (edit->utf8 && byte_delete == 0) { @@ -2834,6 +2851,9 @@ edit_delete (WEdit * edit, const int byte_delete) if (cw < 1) cw = 1; } +#else + (void) byte_delete; +#endif if (edit->mark2 != edit->mark1) edit_push_markers (edit); @@ -3106,7 +3126,11 @@ edit_move_forward3 (WEdit * edit, off_t current, long cols, off_t upto) else return p; } - else if ((c < 32 || c == 127) && (orig_c == c || (!mc_global.utf8_display && !edit->utf8))) + else if ((c < 32 || c == 127) && (orig_c == c +#ifdef HAVE_CHARSET + || (!mc_global.utf8_display && !edit->utf8) +#endif + )) /* '\r' is shown as ^M, so we must advance 2 characters */ /* Caret notation for control characters */ col += 2; @@ -3658,9 +3682,11 @@ edit_execute_cmd (WEdit * edit, unsigned long command, int char_for_insertion) if (edit->overwrite) { /* remove char only one time, after input first byte, multibyte chars */ - if ((!mc_global.utf8_display || edit->charpoint == 0) - && edit_get_byte (edit, edit->curs1) != '\n') - edit_delete (edit, 0); +#ifdef HAVE_CHARSET + if (!mc_global.utf8_display || edit->charpoint == 0) +#endif + if (edit_get_byte (edit, edit->curs1) != '\n') + edit_delete (edit, 0); } if (option_cursor_beyond_eol && edit->over_col > 0) edit_insert_over (edit); diff --git a/src/editor/editdraw.c b/src/editor/editdraw.c index 468045a5b..ea2813221 100644 --- a/src/editor/editdraw.c +++ b/src/editor/editdraw.c @@ -99,9 +99,6 @@ static inline void status_string (WEdit * edit, char *s, int w) { char byte_str[16]; - unsigned char cur_byte = 0; - unsigned int cur_utf = 0; - int cw = 1; /* * If we are at the end of file, print , @@ -110,6 +107,11 @@ status_string (WEdit * edit, char *s, int w) */ if (edit->curs1 < edit->last_byte) { + unsigned char cur_byte = 0; + +#ifdef HAVE_CHARSET + int cw = 1; + if (!edit->utf8) { cur_byte = edit_get_byte (edit, edit->curs1); @@ -119,6 +121,8 @@ status_string (WEdit * edit, char *s, int w) } else { + unsigned int cur_utf = 0; + cur_utf = edit_get_utf (edit, edit->curs1, &cw); if (cw > 0) { @@ -126,12 +130,12 @@ status_string (WEdit * edit, char *s, int w) (unsigned) cur_utf, (unsigned) cur_utf); } else +#endif { - cur_utf = edit_get_byte (edit, edit->curs1); + cur_byte = edit_get_byte (edit, edit->curs1); g_snprintf (byte_str, sizeof (byte_str), "%04d 0x%03X", - (int) cur_utf, (unsigned) cur_utf); + (int) cur_byte, (unsigned) cur_utf); } - } } else @@ -152,10 +156,9 @@ status_string (WEdit * edit, char *s, int w) edit->total_lines + 1, (long) edit->curs1, (long) edit->last_byte, byte_str, #ifdef HAVE_CHARSET mc_global.source_codepage >= - 0 ? get_codepage_id (mc_global.source_codepage) : "" -#else - "" + 0 ? get_codepage_id (mc_global.source_codepage) : #endif + "" ); else g_snprintf (s, w, @@ -171,10 +174,9 @@ status_string (WEdit * edit, char *s, int w) edit->total_lines + 1, (long) edit->curs1, (long) edit->last_byte, byte_str, #ifdef HAVE_CHARSET mc_global.source_codepage >= - 0 ? get_codepage_id (mc_global.source_codepage) : "" -#else - "" + 0 ? get_codepage_id (mc_global.source_codepage) : #endif + "" ); } @@ -313,7 +315,6 @@ edit_draw_this_line (WEdit * edit, off_t b, long row, long start_col, long end_c int color; int abn_style; int i; - int utf8lag = 0; unsigned int cur_line = 0; int book_mark = 0; char line_stat[LINE_STATE_WIDTH + 1] = "\0"; @@ -400,14 +401,12 @@ edit_draw_this_line (WEdit * edit, off_t b, long row, long start_col, long end_c if (q >= edit->found_start && q < (off_t) (edit->found_start + edit->found_len)) p->style |= MOD_BOLD; - if (!edit->utf8) - { - c = edit_get_byte (edit, q); - } - else - { +#ifdef HAVE_CHARSET + if (edit->utf8) c = edit_get_utf (edit, q, &cw); - } + else +#endif + c = edit_get_byte (edit, q); /* we don't use bg for mc - fg contains both */ if (book_mark) { @@ -421,7 +420,7 @@ edit_draw_this_line (WEdit * edit, off_t b, long row, long start_col, long end_c switch (c) { case '\n': - col = (end_col + utf8lag) - edit->start_col + 1; /* quit */ + col = end_col - edit->start_col + 1; /* quit */ break; case '\t': i = TAB_SIZE - ((int) col % TAB_SIZE); @@ -553,24 +552,23 @@ edit_draw_this_line (WEdit * edit, off_t b, long row, long start_col, long end_c control_char = TRUE; break; } - if (!edit->utf8) +#ifdef HAVE_CHARSET + if (edit->utf8) { - if ((mc_global.utf8_display && g_unichar_isprint (c)) || - (!mc_global.utf8_display && is_printable (c))) - { + if (g_unichar_isprint (c)) p->ch = c; - p++; - } else { p->ch = '.'; p->style = abn_style; - p++; } + p++; } else +#endif { - if (g_unichar_isprint (c)) + if ((mc_global.utf8_display && g_unichar_isprint (c)) || + (!mc_global.utf8_display && is_printable (c))) { p->ch = c; p++; diff --git a/src/editor/editwidget.h b/src/editor/editwidget.h index 6a779cd12..15758914e 100644 --- a/src/editor/editwidget.h +++ b/src/editor/editwidget.h @@ -58,9 +58,13 @@ struct WEdit unsigned char *buffers1[MAXBUFF + 1]; /* all data up to curs1 */ unsigned char *buffers2[MAXBUFF + 1]; /* all data from end of file down to curs2 */ - /* UTF8 */ +#ifdef HAVE_CHARSET + /* multibyte support */ + gboolean utf8; /* It's multibyte file codeset */ + GIConv converter; char charbuf[4 + 1]; int charpoint; +#endif /* search handler */ mc_search_t *search; @@ -89,7 +93,6 @@ struct WEdit unsigned int delete_file:1; /* New file, needs to be deleted unless modified */ unsigned int highlight:1; /* There is a selected block */ unsigned int column_highlight:1; - unsigned int utf8:1; /* It's multibyte file codeset */ long prev_col; /* recent column position of the cursor - used when moving up or down past lines that are shorter than the current line */ long curs_line; /* line number of the cursor. */ @@ -139,15 +142,11 @@ struct WEdit GTree *defines; /* List of defines */ gboolean is_case_insensitive; /* selects language case sensitivity */ - /* user map stuff */ - GIConv converter; - /* line break */ LineBreaks lb; gboolean extmod; char *labels[10]; - }; /*** global variables defined in .c file *********************************************************/ -- 2.11.4.GIT