int mcview__get_nroff_real_len (WView * view, off_t start, off_t length) { mcview_nroff_t *nroff; int ret = 0; off_t i = 0; if (!view->text_nroff_mode) return 0; nroff = mcview_nroff_seq_new_num (view, start); if (nroff == NULL) return 0; while (i < length) { switch (nroff->type) { case NROFF_TYPE_BOLD: ret += 1 + nroff->char_length; /* real char length and 0x8 */ break; case NROFF_TYPE_UNDERLINE: ret += 2; /* underline symbol and ox8 */ break; default: break; } i += nroff->char_length; mcview_nroff_seq_next (nroff); } mcview_nroff_seq_free (&nroff); return ret; }
int mcview_search_cmd_callback (const void *user_data, gsize char_offset) { int lc_byte; mcview_t *view = (mcview_t *) user_data; /* view_read_continue (view, &view->search_onechar_info); *//* AB:FIXME */ if (!view->text_nroff_mode) { if (!mcview_get_byte (view, char_offset, &lc_byte)) return MC_SEARCH_CB_OK; return lc_byte; } if (view->search_numNeedSkipChar != 0) { view->search_numNeedSkipChar--; return MC_SEARCH_CB_SKIP; } if (search_cb_char_curr_index == -1 || search_cb_char_curr_index >= view->search_nroff_seq->char_width) { if (search_cb_char_curr_index != -1) mcview_nroff_seq_next (view->search_nroff_seq); search_cb_char_curr_index = 0; if (view->search_nroff_seq->char_width > 1) g_unichar_to_utf8 (view->search_nroff_seq->current_char, search_cb_char_buffer); else search_cb_char_buffer[0] = (char) view->search_nroff_seq->current_char; if (view->search_nroff_seq->type != NROFF_TYPE_NONE) { switch (view->search_nroff_seq->type) { case NROFF_TYPE_BOLD: view->search_numNeedSkipChar = 1 + view->search_nroff_seq->char_width; /* real char width and 0x8 */ break; case NROFF_TYPE_UNDERLINE: view->search_numNeedSkipChar = 2; /* underline symbol and ox8 */ break; default: break; } } return MC_SEARCH_CB_INVALID; } lc_byte = search_cb_char_buffer[search_cb_char_curr_index]; search_cb_char_curr_index++; return (lc_byte != -1) ? (unsigned char) lc_byte : MC_SEARCH_CB_INVALID; }
mc_search_cbret_t mcview_search_cmd_callback (const void *user_data, gsize char_offset, int *current_char) { WView *view = ((const mcview_search_status_msg_t *) user_data)->view; /* view_read_continue (view, &view->search_onechar_info); *//* AB:FIXME */ if (!view->text_nroff_mode) { mcview_get_byte (view, char_offset, current_char); return MC_SEARCH_CB_OK; } if (view->search_numNeedSkipChar != 0) { view->search_numNeedSkipChar--; return MC_SEARCH_CB_SKIP; } if (search_cb_char_curr_index == -1 || search_cb_char_curr_index >= view->search_nroff_seq->char_length) { if (search_cb_char_curr_index != -1) mcview_nroff_seq_next (view->search_nroff_seq); search_cb_char_curr_index = 0; if (view->search_nroff_seq->char_length > 1) g_unichar_to_utf8 (view->search_nroff_seq->current_char, search_cb_char_buffer); else search_cb_char_buffer[0] = (char) view->search_nroff_seq->current_char; if (view->search_nroff_seq->type != NROFF_TYPE_NONE) { switch (view->search_nroff_seq->type) { case NROFF_TYPE_BOLD: view->search_numNeedSkipChar = 1 + view->search_nroff_seq->char_length; /* real char length and 0x8 */ break; case NROFF_TYPE_UNDERLINE: view->search_numNeedSkipChar = 2; /* underline symbol and ox8 */ break; default: break; } } return MC_SEARCH_CB_INVALID; } *current_char = search_cb_char_buffer[search_cb_char_curr_index]; search_cb_char_curr_index++; return (*current_char != -1) ? MC_SEARCH_CB_OK : MC_SEARCH_CB_INVALID; }