2 Internal file viewer for the Midnight Commander
3 Function for plain view
5 Copyright (C) 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003,
6 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
8 Written by: 1994, 1995, 1998 Miguel de Icaza
9 1994, 1995 Janne Kukonlehto
14 2004 Roland Illig <roland.illig@gmx.de>
15 2005 Roland Illig <roland.illig@gmx.de>
16 2009 Slava Zanko <slavazanko@google.com>
17 2009 Andrew Borodin <aborodin@vmail.ru>
18 2009 Ilia Maslakov <il.smind@gmail.com>
19 2010 Andrew Borodin <aborodin@vmail.ru>
21 This file is part of the Midnight Commander.
23 The Midnight Commander is free software; you can redistribute it
24 and/or modify it under the terms of the GNU General Public License as
25 published by the Free Software Foundation; either version 2 of the
26 License, or (at your option) any later version.
28 The Midnight Commander is distributed in the hope that it will be
29 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
30 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
31 General Public License for more details.
33 You should have received a copy of the GNU General Public License
34 along with this program; if not, write to the Free Software
35 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
41 #include "lib/global.h"
42 #include "lib/tty/tty.h"
44 #include "lib/util.h" /* is_printable() */
45 #include "lib/charsets.h"
47 #include "src/setup.h" /* option_tab_spacing */
50 #include "mcviewer.h" /* mcview_show_eof */
52 /*** global variables ****************************************************************************/
54 /*** file scope macro definitions ****************************************************************/
56 /*** file scope type declarations ****************************************************************/
58 /*** file scope variables ************************************************************************/
60 /*** file scope functions ************************************************************************/
61 /* --------------------------------------------------------------------------------------------- */
63 /* --------------------------------------------------------------------------------------------- */
64 /*** public functions ****************************************************************************/
65 /* --------------------------------------------------------------------------------------------- */
68 mcview_display_text (mcview_t
* view
)
70 const screen_dimen left
= view
->data_area
.left
;
71 const screen_dimen top
= view
->data_area
.top
;
72 const screen_dimen width
= view
->data_area
.width
;
73 const screen_dimen height
= view
->data_area
.height
;
74 screen_dimen row
= 0, col
= 0;
78 gboolean last_row
= TRUE
;
79 struct hexedit_change_node
*curr
= view
->change_list
;
81 mcview_display_clean (view
);
82 mcview_display_ruler (view
);
84 /* Find the first displayable changed byte */
85 from
= view
->dpy_start
;
86 while ((curr
!= NULL
) && (curr
->offset
< from
))
91 tty_setcolor (NORMAL_COLOR
);
99 gboolean read_res
= TRUE
;
101 c
= mcview_get_utf (view
, from
, &cw
, &read_res
);
107 if (!mcview_get_byte (view
, from
, &c
))
115 if (c
!= '\n' && prev_ch
== '\r')
121 /* tty_print_anychar ('\n'); */
135 if (col
>= width
&& view
->text_wrap_mode
)
144 col
+= (option_tab_spacing
- col
% option_tab_spacing
);
145 if (view
->text_wrap_mode
&& col
>= width
&& width
!= 0)
153 if (view
->search_start
<= from
&& from
< view
->search_end
)
154 tty_setcolor (SELECTED_COLOR
);
156 if (((off_t
) col
>= view
->dpy_text_column
)
157 && ((off_t
) col
- view
->dpy_text_column
< (off_t
) width
))
159 widget_move (view
, top
+ row
, left
+ ((off_t
) col
- view
->dpy_text_column
));
161 if (mc_global
.utf8_display
)
164 c
= convert_from_8bit_to_utf_c ((unsigned char) c
, view
->converter
);
165 if (!g_unichar_isprint (c
))
169 c
= convert_from_utf_to_current_c (c
, view
->converter
);
173 c
= convert_to_display_c (c
);
175 if (!is_printable (c
))
179 tty_print_anychar (c
);
187 if (g_unichar_iswide (c
))
189 else if (g_unichar_iszerowidth (c
))
195 view
->dpy_end
= from
;
196 if (mcview_show_eof
!= NULL
&& mcview_show_eof
[0] != '\0')
198 if (last_row
&& mcview_get_byte (view
, from
- 1, &c
))
201 while (++row
< height
)
203 widget_move (view
, top
+ row
, left
);
204 tty_print_string (mcview_show_eof
);
209 /* --------------------------------------------------------------------------------------------- */