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 const int len = g_unichar_to_utf8 (def, value_utf8);
114 value_utf8[len] = '\0';
115 c = def;
116 }
117
118
119 if (mc_global.utf8_display)
120 {
121 g_free (value_utf8);
122 *result = c;
123 return TRUE;
124 }
125
126
127 const mc_tty_char_t mc_acs = unicode_to_mc_acs (c);
128 if (mc_acs != 0)
129 {
130 g_free (value_utf8);
131 *result = mc_acs;
132 return TRUE;
133 }
134
135
136
137 #ifdef HAVE_NCURSES
138
139
140
141 if (ncurses_koi8r_double_line_bug && c >= 128)
142 {
143 g_free (value_utf8);
144 return FALSE;
145 }
146 #endif
147
148 conv = str_crt_conv_from ("UTF-8");
149 if (conv == INVALID_CONV)
150 {
151 g_free (value_utf8);
152 return FALSE;
153 }
154
155 buffer = g_string_new ("");
156 conv_res = str_convert (conv, value_utf8, buffer);
157 if (conv_res == ESTR_SUCCESS)
158 *result = (unsigned char) buffer->str[0];
159 str_close_conv (conv);
160 g_string_free (buffer, TRUE);
161 g_free (value_utf8);
162 return conv_res == ESTR_SUCCESS;
163 }
164
165
166
167
168
169 void
170 mc_skin_lines_parse_ini_file (mc_skin_t *mc_skin)
171 {
172 gboolean success;
173
174 if (mc_global.tty.slow_terminal)
175 mc_skin_hardcoded_space_lines (mc_skin);
176 else if (mc_global.tty.ugly_line_drawing)
177 mc_skin_hardcoded_ugly_lines (mc_skin);
178
179
180 success = TRUE
181 && skin_get_char (mc_skin, "horiz", 0x2500, &mc_tty_frm[MC_TTY_FRM_HORIZ])
182 && skin_get_char (mc_skin, "vert", 0x2502, &mc_tty_frm[MC_TTY_FRM_VERT])
183 && skin_get_char (mc_skin, "lefttop", 0x250C, &mc_tty_frm[MC_TTY_FRM_LEFTTOP])
184 && skin_get_char (mc_skin, "righttop", 0x2510, &mc_tty_frm[MC_TTY_FRM_RIGHTTOP])
185 && skin_get_char (mc_skin, "leftbottom", 0x2514, &mc_tty_frm[MC_TTY_FRM_LEFTBOTTOM])
186 && skin_get_char (mc_skin, "rightbottom", 0x2518, &mc_tty_frm[MC_TTY_FRM_RIGHTBOTTOM])
187 && skin_get_char (mc_skin, "topmiddle", 0x252C, &mc_tty_frm[MC_TTY_FRM_TOPMIDDLE])
188 && skin_get_char (mc_skin, "bottommiddle", 0x2534, &mc_tty_frm[MC_TTY_FRM_BOTTOMMIDDLE])
189 && skin_get_char (mc_skin, "leftmiddle", 0x251C, &mc_tty_frm[MC_TTY_FRM_LEFTMIDDLE])
190 && skin_get_char (mc_skin, "rightmiddle", 0x2524, &mc_tty_frm[MC_TTY_FRM_RIGHTMIDDLE])
191 && skin_get_char (mc_skin, "cross", 0x253C, &mc_tty_frm[MC_TTY_FRM_CROSS]);
192
193
194 if (!success)
195 {
196 mc_tty_frm[MC_TTY_FRM_HORIZ] = MC_ACS_HLINE;
197 mc_tty_frm[MC_TTY_FRM_VERT] = MC_ACS_VLINE;
198 mc_tty_frm[MC_TTY_FRM_LEFTTOP] = MC_ACS_ULCORNER;
199 mc_tty_frm[MC_TTY_FRM_RIGHTTOP] = MC_ACS_URCORNER;
200 mc_tty_frm[MC_TTY_FRM_LEFTBOTTOM] = MC_ACS_LLCORNER;
201 mc_tty_frm[MC_TTY_FRM_RIGHTBOTTOM] = MC_ACS_LRCORNER;
202 mc_tty_frm[MC_TTY_FRM_TOPMIDDLE] = MC_ACS_TTEE;
203 mc_tty_frm[MC_TTY_FRM_BOTTOMMIDDLE] = MC_ACS_BTEE;
204 mc_tty_frm[MC_TTY_FRM_LEFTMIDDLE] = MC_ACS_LTEE;
205 mc_tty_frm[MC_TTY_FRM_RIGHTMIDDLE] = MC_ACS_RTEE;
206 mc_tty_frm[MC_TTY_FRM_CROSS] = MC_ACS_PLUS;
207 }
208
209
210 success = TRUE
211 && skin_get_char (mc_skin, "dhoriz", 0x2550, &mc_tty_frm[MC_TTY_FRM_DHORIZ])
212 && skin_get_char (mc_skin, "dvert", 0x2551, &mc_tty_frm[MC_TTY_FRM_DVERT])
213 && skin_get_char (mc_skin, "dlefttop", 0x2554, &mc_tty_frm[MC_TTY_FRM_DLEFTTOP])
214 && skin_get_char (mc_skin, "drighttop", 0x2557, &mc_tty_frm[MC_TTY_FRM_DRIGHTTOP])
215 && skin_get_char (mc_skin, "dleftbottom", 0x255A, &mc_tty_frm[MC_TTY_FRM_DLEFTBOTTOM])
216 && skin_get_char (mc_skin, "drightbottom", 0x255D, &mc_tty_frm[MC_TTY_FRM_DRIGHTBOTTOM])
217 && skin_get_char (mc_skin, "dtopmiddle", 0x2564, &mc_tty_frm[MC_TTY_FRM_DTOPMIDDLE])
218 && skin_get_char (mc_skin, "dbottommiddle", 0x2567, &mc_tty_frm[MC_TTY_FRM_DBOTTOMMIDDLE])
219 && skin_get_char (mc_skin, "dleftmiddle", 0x255F, &mc_tty_frm[MC_TTY_FRM_DLEFTMIDDLE])
220 && skin_get_char (mc_skin, "drightmiddle", 0x2562, &mc_tty_frm[MC_TTY_FRM_DRIGHTMIDDLE]);
221
222
223 if (!success)
224 {
225 mc_tty_frm[MC_TTY_FRM_DHORIZ] = mc_tty_frm[MC_TTY_FRM_HORIZ];
226 mc_tty_frm[MC_TTY_FRM_DVERT] = mc_tty_frm[MC_TTY_FRM_VERT];
227 mc_tty_frm[MC_TTY_FRM_DLEFTTOP] = mc_tty_frm[MC_TTY_FRM_LEFTTOP];
228 mc_tty_frm[MC_TTY_FRM_DRIGHTTOP] = mc_tty_frm[MC_TTY_FRM_RIGHTTOP];
229 mc_tty_frm[MC_TTY_FRM_DLEFTBOTTOM] = mc_tty_frm[MC_TTY_FRM_LEFTBOTTOM];
230 mc_tty_frm[MC_TTY_FRM_DRIGHTBOTTOM] = mc_tty_frm[MC_TTY_FRM_RIGHTBOTTOM];
231 mc_tty_frm[MC_TTY_FRM_DTOPMIDDLE] = mc_tty_frm[MC_TTY_FRM_TOPMIDDLE];
232 mc_tty_frm[MC_TTY_FRM_DBOTTOMMIDDLE] = mc_tty_frm[MC_TTY_FRM_BOTTOMMIDDLE];
233 mc_tty_frm[MC_TTY_FRM_DLEFTMIDDLE] = mc_tty_frm[MC_TTY_FRM_LEFTMIDDLE];
234 mc_tty_frm[MC_TTY_FRM_DRIGHTMIDDLE] = mc_tty_frm[MC_TTY_FRM_RIGHTMIDDLE];
235 }
236 }
237
238