This source file includes following definitions.
- unicode_to_mc_acs
- skin_get_char
- mc_skin_lines_parse_ini_file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #include <config.h>
28 #include <stdlib.h>
29
30 #include "internal.h"
31 #include "lib/tty/tty.h"
32 #include "lib/strutil.h"
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 static mc_tty_char_t
49 unicode_to_mc_acs (gunichar c)
50 {
51 switch (c)
52 {
53 case 0x2500:
54 return MC_ACS_HLINE;
55 case 0x2502:
56 return MC_ACS_VLINE;
57 case 0x250C:
58 return MC_ACS_ULCORNER;
59 case 0x2510:
60 return MC_ACS_URCORNER;
61 case 0x2514:
62 return MC_ACS_LLCORNER;
63 case 0x2518:
64 return MC_ACS_LRCORNER;
65 case 0x251C:
66 return MC_ACS_LTEE;
67 case 0x2524:
68 return MC_ACS_RTEE;
69 case 0x252C:
70 return MC_ACS_TTEE;
71 case 0x2534:
72 return MC_ACS_BTEE;
73 case 0x253C:
74 return MC_ACS_PLUS;
75
76 default:
77 return 0;
78 }
79 }
80
81
82
83
84
85 static gboolean
86 skin_get_char (mc_skin_t *mc_skin, const char *name, gunichar def, mc_tty_char_t *result)
87 {
88 gunichar c;
89 GIConv conv;
90 GString *buffer;
91 estr_t conv_res;
92 char *value_utf8;
93
94 value_utf8 = mc_config_get_string_raw (mc_skin->config, "lines", name, NULL);
95 if (value_utf8 == NULL)
96 {
97
98 value_utf8 = mc_config_get_string_raw (mc_skin->config, "Lines", name, NULL);
99 }
100 if (value_utf8 != NULL)
101 {
102 c = g_utf8_get_char_validated (value_utf8, -1);
103 if (c == (gunichar) (-1) || c == (gunichar) (-2))
104 {
105 g_free (value_utf8);
106 return FALSE;
107 }
108 }
109 else
110 {
111
112 value_utf8 = g_malloc (7);
113
114 const int len = g_unichar_to_utf8 (def, value_utf8);
115
116 value_utf8[len] = '\0';
117 c = def;
118 }
119
120
121 if (mc_global.utf8_display)
122 {
123 g_free (value_utf8);
124 *result = c;
125 return TRUE;
126 }
127
128
129 const mc_tty_char_t mc_acs = unicode_to_mc_acs (c);
130 if (mc_acs != 0)
131 {
132 g_free (value_utf8);
133 *result = mc_acs;
134 return TRUE;
135 }
136
137
138
139 #ifdef HAVE_NCURSES
140
141
142
143 if (ncurses_koi8r_double_line_bug && c >= 128)
144 {
145 g_free (value_utf8);
146 return FALSE;
147 }
148 #endif
149
150 conv = str_crt_conv_from ("UTF-8");
151 if (conv == INVALID_CONV)
152 {
153 g_free (value_utf8);
154 return FALSE;
155 }
156
157 buffer = g_string_new ("");
158 conv_res = str_convert (conv, value_utf8, buffer);
159 if (conv_res == ESTR_SUCCESS)
160 *result = (unsigned char) buffer->str[0];
161 str_close_conv (conv);
162 g_string_free (buffer, TRUE);
163 g_free (value_utf8);
164
165 return conv_res == ESTR_SUCCESS;
166 }
167
168
169
170
171
172 void
173 mc_skin_lines_parse_ini_file (mc_skin_t *mc_skin)
174 {
175 gboolean success;
176
177 if (mc_global.tty.slow_terminal)
178 mc_skin_hardcoded_space_lines (mc_skin);
179 else if (mc_global.tty.ugly_line_drawing)
180 mc_skin_hardcoded_ugly_lines (mc_skin);
181
182
183 success = TRUE
184 && skin_get_char (mc_skin, "horiz", 0x2500, &mc_tty_frm[MC_TTY_FRM_HORIZ])
185 && skin_get_char (mc_skin, "vert", 0x2502, &mc_tty_frm[MC_TTY_FRM_VERT])
186 && skin_get_char (mc_skin, "lefttop", 0x250C, &mc_tty_frm[MC_TTY_FRM_LEFTTOP])
187 && skin_get_char (mc_skin, "righttop", 0x2510, &mc_tty_frm[MC_TTY_FRM_RIGHTTOP])
188 && skin_get_char (mc_skin, "leftbottom", 0x2514, &mc_tty_frm[MC_TTY_FRM_LEFTBOTTOM])
189 && skin_get_char (mc_skin, "rightbottom", 0x2518, &mc_tty_frm[MC_TTY_FRM_RIGHTBOTTOM])
190 && skin_get_char (mc_skin, "topmiddle", 0x252C, &mc_tty_frm[MC_TTY_FRM_TOPMIDDLE])
191 && skin_get_char (mc_skin, "bottommiddle", 0x2534, &mc_tty_frm[MC_TTY_FRM_BOTTOMMIDDLE])
192 && skin_get_char (mc_skin, "leftmiddle", 0x251C, &mc_tty_frm[MC_TTY_FRM_LEFTMIDDLE])
193 && skin_get_char (mc_skin, "rightmiddle", 0x2524, &mc_tty_frm[MC_TTY_FRM_RIGHTMIDDLE])
194 && skin_get_char (mc_skin, "cross", 0x253C, &mc_tty_frm[MC_TTY_FRM_CROSS]);
195
196
197 if (!success)
198 {
199 mc_tty_frm[MC_TTY_FRM_HORIZ] = MC_ACS_HLINE;
200 mc_tty_frm[MC_TTY_FRM_VERT] = MC_ACS_VLINE;
201 mc_tty_frm[MC_TTY_FRM_LEFTTOP] = MC_ACS_ULCORNER;
202 mc_tty_frm[MC_TTY_FRM_RIGHTTOP] = MC_ACS_URCORNER;
203 mc_tty_frm[MC_TTY_FRM_LEFTBOTTOM] = MC_ACS_LLCORNER;
204 mc_tty_frm[MC_TTY_FRM_RIGHTBOTTOM] = MC_ACS_LRCORNER;
205 mc_tty_frm[MC_TTY_FRM_TOPMIDDLE] = MC_ACS_TTEE;
206 mc_tty_frm[MC_TTY_FRM_BOTTOMMIDDLE] = MC_ACS_BTEE;
207 mc_tty_frm[MC_TTY_FRM_LEFTMIDDLE] = MC_ACS_LTEE;
208 mc_tty_frm[MC_TTY_FRM_RIGHTMIDDLE] = MC_ACS_RTEE;
209 mc_tty_frm[MC_TTY_FRM_CROSS] = MC_ACS_PLUS;
210 }
211
212
213 success = TRUE
214 && skin_get_char (mc_skin, "dhoriz", 0x2550, &mc_tty_frm[MC_TTY_FRM_DHORIZ])
215 && skin_get_char (mc_skin, "dvert", 0x2551, &mc_tty_frm[MC_TTY_FRM_DVERT])
216 && skin_get_char (mc_skin, "dlefttop", 0x2554, &mc_tty_frm[MC_TTY_FRM_DLEFTTOP])
217 && skin_get_char (mc_skin, "drighttop", 0x2557, &mc_tty_frm[MC_TTY_FRM_DRIGHTTOP])
218 && skin_get_char (mc_skin, "dleftbottom", 0x255A, &mc_tty_frm[MC_TTY_FRM_DLEFTBOTTOM])
219 && skin_get_char (mc_skin, "drightbottom", 0x255D, &mc_tty_frm[MC_TTY_FRM_DRIGHTBOTTOM])
220 && skin_get_char (mc_skin, "dtopmiddle", 0x2564, &mc_tty_frm[MC_TTY_FRM_DTOPMIDDLE])
221 && skin_get_char (mc_skin, "dbottommiddle", 0x2567, &mc_tty_frm[MC_TTY_FRM_DBOTTOMMIDDLE])
222 && skin_get_char (mc_skin, "dleftmiddle", 0x255F, &mc_tty_frm[MC_TTY_FRM_DLEFTMIDDLE])
223 && skin_get_char (mc_skin, "drightmiddle", 0x2562, &mc_tty_frm[MC_TTY_FRM_DRIGHTMIDDLE]);
224
225
226 if (!success)
227 {
228 mc_tty_frm[MC_TTY_FRM_DHORIZ] = mc_tty_frm[MC_TTY_FRM_HORIZ];
229 mc_tty_frm[MC_TTY_FRM_DVERT] = mc_tty_frm[MC_TTY_FRM_VERT];
230 mc_tty_frm[MC_TTY_FRM_DLEFTTOP] = mc_tty_frm[MC_TTY_FRM_LEFTTOP];
231 mc_tty_frm[MC_TTY_FRM_DRIGHTTOP] = mc_tty_frm[MC_TTY_FRM_RIGHTTOP];
232 mc_tty_frm[MC_TTY_FRM_DLEFTBOTTOM] = mc_tty_frm[MC_TTY_FRM_LEFTBOTTOM];
233 mc_tty_frm[MC_TTY_FRM_DRIGHTBOTTOM] = mc_tty_frm[MC_TTY_FRM_RIGHTBOTTOM];
234 mc_tty_frm[MC_TTY_FRM_DTOPMIDDLE] = mc_tty_frm[MC_TTY_FRM_TOPMIDDLE];
235 mc_tty_frm[MC_TTY_FRM_DBOTTOMMIDDLE] = mc_tty_frm[MC_TTY_FRM_BOTTOMMIDDLE];
236 mc_tty_frm[MC_TTY_FRM_DLEFTMIDDLE] = mc_tty_frm[MC_TTY_FRM_LEFTMIDDLE];
237 mc_tty_frm[MC_TTY_FRM_DRIGHTMIDDLE] = mc_tty_frm[MC_TTY_FRM_RIGHTMIDDLE];
238 }
239 }
240
241