mirror of https://github.com/MidnightCommander/mc
Optimization of str_msg_term_size().
Use single function to calculate of text lines and columns because algorithm is the same for all encodings. Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
parent
f24dd62dc2
commit
f70e06b37a
|
@ -115,7 +115,6 @@ struct str_class
|
|||
/*I*/ const char *(*term_form) (const char *);
|
||||
/*I*/ const char *(*fit_to_term) (const char *, int, align_crt_t);
|
||||
/*I*/ const char *(*term_trim) (const char *text, int width);
|
||||
/*I*/ void (*msg_term_size) (const char *, int *, int *);
|
||||
/*I*/ const char *(*term_substring) (const char *, int, int);
|
||||
/*I*/ int (*term_width1) (const char *);
|
||||
/*I*/ int (*term_width2) (const char *, size_t);
|
||||
|
@ -395,10 +394,6 @@ const char *str_fit_to_term (const char *text, int width, align_crt_t just_mode)
|
|||
*/
|
||||
const char *str_term_trim (const char *text, int width);
|
||||
|
||||
/* return how many lines and columns will text occupy on terminal
|
||||
* I
|
||||
*/
|
||||
void str_msg_term_size (const char *text, int *lines, int *columns);
|
||||
|
||||
/* like str_term_form, but return only specified substring
|
||||
* start - column (position) on terminal, where substring begin
|
||||
|
@ -525,6 +520,10 @@ const char *str_detect_termencoding (void);
|
|||
|
||||
int str_verscmp (const char *s1, const char *s2);
|
||||
|
||||
/* return how many lines and columns will text occupy on terminal
|
||||
*/
|
||||
void str_msg_term_size (const char *text, int *lines, int *columns);
|
||||
|
||||
/*** inline functions ****************************************************************************/
|
||||
|
||||
static inline void
|
||||
|
|
|
@ -420,12 +420,6 @@ str_term_trim (const char *text, int width)
|
|||
return used_class.term_trim (text, width);
|
||||
}
|
||||
|
||||
void
|
||||
str_msg_term_size (const char *text, int *lines, int *columns)
|
||||
{
|
||||
used_class.msg_term_size (text, lines, columns);
|
||||
}
|
||||
|
||||
const char *
|
||||
str_term_substring (const char *text, int start, int width)
|
||||
{
|
||||
|
@ -771,3 +765,41 @@ str_release_key (char *key, int case_sen)
|
|||
{
|
||||
used_class.release_key (key, case_sen);
|
||||
}
|
||||
|
||||
void
|
||||
str_msg_term_size (const char *text, int *lines, int *columns)
|
||||
{
|
||||
char *p, *tmp;
|
||||
char *q;
|
||||
char c = '\0';
|
||||
int width;
|
||||
|
||||
*lines = 1;
|
||||
*columns = 0;
|
||||
|
||||
tmp = g_strdup (text);
|
||||
p = tmp;
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
q = strchr (p, '\n');
|
||||
if (q != NULL)
|
||||
{
|
||||
c = q[0];
|
||||
q[0] = '\0';
|
||||
}
|
||||
|
||||
width = str_term_width1 (p);
|
||||
if (width > *columns)
|
||||
*columns = width;
|
||||
|
||||
if (q == NULL)
|
||||
break;
|
||||
|
||||
q[0] = c;
|
||||
p = q + 1;
|
||||
(*lines)++;
|
||||
}
|
||||
|
||||
g_free (tmp);
|
||||
}
|
||||
|
|
|
@ -429,41 +429,6 @@ str_8bit_term_char_width (const char *text)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
str_8bit_msg_term_size (const char *text, int *lines, int *columns)
|
||||
{
|
||||
|
||||
char *p, *tmp;
|
||||
char *q;
|
||||
char c = '\0';
|
||||
int width;
|
||||
|
||||
(*lines) = 1;
|
||||
(*columns) = 0;
|
||||
tmp = g_strdup ((char *) text);
|
||||
p = tmp;
|
||||
for (;;)
|
||||
{
|
||||
q = strchr (p, '\n');
|
||||
if (q != NULL)
|
||||
{
|
||||
c = q[0];
|
||||
q[0] = '\0';
|
||||
}
|
||||
|
||||
width = str_8bit_term_width1 (p);
|
||||
if (width > (*columns))
|
||||
(*columns) = width;
|
||||
|
||||
if (q == NULL)
|
||||
break;
|
||||
q[0] = c;
|
||||
p = q + 1;
|
||||
(*lines)++;
|
||||
}
|
||||
g_free (tmp);
|
||||
}
|
||||
|
||||
static const char *
|
||||
str_8bit_term_substring (const char *text, int start, int width)
|
||||
{
|
||||
|
@ -805,7 +770,6 @@ str_8bit_init (void)
|
|||
result.term_width2 = str_8bit_term_width2;
|
||||
result.term_width1 = str_8bit_term_width1;
|
||||
result.term_char_width = str_8bit_term_char_width;
|
||||
result.msg_term_size = str_8bit_msg_term_size;
|
||||
result.term_substring = str_8bit_term_substring;
|
||||
result.trunc = str_8bit_trunc;
|
||||
result.offset_to_pos = str_8bit_offset_to_pos;
|
||||
|
|
|
@ -384,42 +384,6 @@ str_ascii_term_char_width (const char *text)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
str_ascii_msg_term_size (const char *text, int *lines, int *columns)
|
||||
{
|
||||
char *p, *tmp;
|
||||
char *q;
|
||||
char c = '\0';
|
||||
int width;
|
||||
|
||||
(*lines) = 1;
|
||||
(*columns) = 0;
|
||||
|
||||
tmp = g_strdup (text);
|
||||
p = tmp;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
q = strchr (p, '\n');
|
||||
if (q != NULL)
|
||||
{
|
||||
c = q[0];
|
||||
q[0] = '\0';
|
||||
}
|
||||
|
||||
width = str_ascii_term_width1 (p);
|
||||
if (width > (*columns))
|
||||
(*columns) = width;
|
||||
|
||||
if (q == NULL)
|
||||
break;
|
||||
q[0] = c;
|
||||
p = q + 1;
|
||||
(*lines)++;
|
||||
}
|
||||
g_free (tmp);
|
||||
}
|
||||
|
||||
static const char *
|
||||
str_ascii_term_substring (const char *text, int start, int width)
|
||||
{
|
||||
|
@ -696,7 +660,6 @@ str_ascii_init (void)
|
|||
result.term_width2 = str_ascii_term_width2;
|
||||
result.term_width1 = str_ascii_term_width1;
|
||||
result.term_char_width = str_ascii_term_char_width;
|
||||
result.msg_term_size = str_ascii_msg_term_size;
|
||||
result.term_substring = str_ascii_term_substring;
|
||||
result.trunc = str_ascii_trunc;
|
||||
result.offset_to_pos = str_ascii_offset_to_pos;
|
||||
|
|
|
@ -728,41 +728,6 @@ str_utf8_term_char_width (const char *text)
|
|||
return (str_unichar_iscombiningmark (uni)) ? 0 : ((g_unichar_iswide (uni)) ? 2 : 1);
|
||||
}
|
||||
|
||||
static void
|
||||
str_utf8_msg_term_size (const char *text, int *lines, int *columns)
|
||||
{
|
||||
char *p, *tmp;
|
||||
char *q;
|
||||
char c = '\0';
|
||||
int width;
|
||||
|
||||
(*lines) = 1;
|
||||
(*columns) = 0;
|
||||
|
||||
tmp = g_strdup (text);
|
||||
p = tmp;
|
||||
for (;;)
|
||||
{
|
||||
q = strchr (p, '\n');
|
||||
if (q != NULL)
|
||||
{
|
||||
c = q[0];
|
||||
q[0] = '\0';
|
||||
}
|
||||
|
||||
width = str_utf8_term_width1 (p);
|
||||
if (width > (*columns))
|
||||
(*columns) = width;
|
||||
|
||||
if (q == NULL)
|
||||
break;
|
||||
q[0] = c;
|
||||
p = q + 1;
|
||||
(*lines)++;
|
||||
}
|
||||
g_free (tmp);
|
||||
}
|
||||
|
||||
static const char *
|
||||
str_utf8_term_substring (const char *text, int start, int width)
|
||||
{
|
||||
|
@ -1360,7 +1325,6 @@ str_utf8_init (void)
|
|||
result.term_width2 = str_utf8_term_width2;
|
||||
result.term_width1 = str_utf8_term_width1;
|
||||
result.term_char_width = str_utf8_term_char_width;
|
||||
result.msg_term_size = str_utf8_msg_term_size;
|
||||
result.term_substring = str_utf8_term_substring;
|
||||
result.trunc = str_utf8_trunc;
|
||||
result.offset_to_pos = str_utf8_offset_to_pos;
|
||||
|
|
Loading…
Reference in New Issue