move xplustabs(), actual_x(), strnlenpt(), and strlenpt() from winio.c
to utils.c, as they're really utility functions git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3064 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Этот коммит содержится в:
родитель
67d1951e4d
Коммит
81c4e187f5
@ -15,6 +15,8 @@ CVS code -
|
|||||||
that make use of a smaller number. Changes to window_init(),
|
that make use of a smaller number. Changes to window_init(),
|
||||||
nanoget_repaint(), titlebar(), statusbar(), and
|
nanoget_repaint(), titlebar(), statusbar(), and
|
||||||
get_page_start(). (DLR)
|
get_page_start(). (DLR)
|
||||||
|
- Move xplustabs(), actual_x(), strnlenpt(), and strlenpt() from
|
||||||
|
winio.c to utils.c, as they're really utility functions. (DLR)
|
||||||
- nano.h:
|
- nano.h:
|
||||||
- Readd MIN_EDITOR_COLS #define. (DLR)
|
- Readd MIN_EDITOR_COLS #define. (DLR)
|
||||||
- winio.c:
|
- winio.c:
|
||||||
|
@ -565,6 +565,10 @@ void *nrealloc(void *ptr, size_t howmuch);
|
|||||||
char *mallocstrncpy(char *dest, const char *src, size_t n);
|
char *mallocstrncpy(char *dest, const char *src, size_t n);
|
||||||
char *mallocstrcpy(char *dest, const char *src);
|
char *mallocstrcpy(char *dest, const char *src);
|
||||||
char *mallocstrassn(char *dest, char *src);
|
char *mallocstrassn(char *dest, char *src);
|
||||||
|
size_t xplustabs(void);
|
||||||
|
size_t actual_x(const char *s, size_t column);
|
||||||
|
size_t strnlenpt(const char *s, size_t maxlen);
|
||||||
|
size_t strlenpt(const char *s);
|
||||||
void new_magicline(void);
|
void new_magicline(void);
|
||||||
#ifndef NANO_SMALL
|
#ifndef NANO_SMALL
|
||||||
void remove_magicline(void);
|
void remove_magicline(void);
|
||||||
@ -634,10 +638,6 @@ bool do_statusbar_prev_word(bool allow_punct);
|
|||||||
void do_statusbar_verbatim_input(bool *got_enter);
|
void do_statusbar_verbatim_input(bool *got_enter);
|
||||||
size_t statusbar_xplustabs(void);
|
size_t statusbar_xplustabs(void);
|
||||||
size_t get_statusbar_page_start(size_t start_col, size_t column);
|
size_t get_statusbar_page_start(size_t start_col, size_t column);
|
||||||
size_t xplustabs(void);
|
|
||||||
size_t actual_x(const char *str, size_t xplus);
|
|
||||||
size_t strnlenpt(const char *buf, size_t size);
|
|
||||||
size_t strlenpt(const char *buf);
|
|
||||||
void blank_line(WINDOW *win, int y, int x, int n);
|
void blank_line(WINDOW *win, int y, int x, int n);
|
||||||
void blank_titlebar(void);
|
void blank_titlebar(void);
|
||||||
void blank_topbar(void);
|
void blank_topbar(void);
|
||||||
|
67
src/utils.c
67
src/utils.c
@ -395,6 +395,73 @@ char *mallocstrassn(char *dest, char *src)
|
|||||||
return src;
|
return src;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the placewewant associated with current_x, i.e, the zero-based
|
||||||
|
* column position of the cursor. The value will be no smaller than
|
||||||
|
* current_x. */
|
||||||
|
size_t xplustabs(void)
|
||||||
|
{
|
||||||
|
return strnlenpt(openfile->current->data, openfile->current_x);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* actual_x() gives the index in s of the character displayed at the
|
||||||
|
* given column. That is, actual_x() is the largest value such that
|
||||||
|
* strnlenpt(s, actual_x(s, column)) <= column. */
|
||||||
|
size_t actual_x(const char *s, size_t column)
|
||||||
|
{
|
||||||
|
size_t i = 0;
|
||||||
|
/* The position in s, returned. */
|
||||||
|
size_t len = 0;
|
||||||
|
/* The screen display width to s[i]. */
|
||||||
|
|
||||||
|
assert(s != NULL);
|
||||||
|
|
||||||
|
while (*s != '\0') {
|
||||||
|
int s_len = parse_mbchar(s, NULL, &len);
|
||||||
|
|
||||||
|
if (len > column)
|
||||||
|
break;
|
||||||
|
|
||||||
|
i += s_len;
|
||||||
|
s += s_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* A strnlen() with tabs and multicolumn characters factored in, similar
|
||||||
|
* to xplustabs(). How many columns wide are the first maxlen characters
|
||||||
|
* of s? */
|
||||||
|
size_t strnlenpt(const char *s, size_t maxlen)
|
||||||
|
{
|
||||||
|
size_t len = 0;
|
||||||
|
/* The screen display width to s[i]. */
|
||||||
|
|
||||||
|
if (maxlen == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
assert(s != NULL);
|
||||||
|
|
||||||
|
while (*s != '\0') {
|
||||||
|
int s_len = parse_mbchar(s, NULL, &len);
|
||||||
|
|
||||||
|
s += s_len;
|
||||||
|
|
||||||
|
if (maxlen <= s_len)
|
||||||
|
break;
|
||||||
|
|
||||||
|
maxlen -= s_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* A strlen() with tabs and multicolumn characters factored in, similar
|
||||||
|
* to xplustabs(). How many columns wide is s? */
|
||||||
|
size_t strlenpt(const char *s)
|
||||||
|
{
|
||||||
|
return strnlenpt(s, (size_t)-1);
|
||||||
|
}
|
||||||
|
|
||||||
/* Append a new magicline to filebot. */
|
/* Append a new magicline to filebot. */
|
||||||
void new_magicline(void)
|
void new_magicline(void)
|
||||||
{
|
{
|
||||||
|
65
src/winio.c
65
src/winio.c
@ -2220,71 +2220,6 @@ size_t get_statusbar_page_start(size_t start_col, size_t column)
|
|||||||
start_col - 1);
|
start_col - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the placewewant associated with current_x, i.e, the zero-based
|
|
||||||
* column position of the cursor. The value will be no smaller than
|
|
||||||
* current_x. */
|
|
||||||
size_t xplustabs(void)
|
|
||||||
{
|
|
||||||
return strnlenpt(openfile->current->data, openfile->current_x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* actual_x() gives the index in str of the character displayed at
|
|
||||||
* column xplus. That is, actual_x() is the largest value such that
|
|
||||||
* strnlenpt(str, actual_x(str, xplus)) <= xplus. */
|
|
||||||
size_t actual_x(const char *str, size_t xplus)
|
|
||||||
{
|
|
||||||
size_t i = 0;
|
|
||||||
/* The position in str, returned. */
|
|
||||||
size_t length = 0;
|
|
||||||
/* The screen display width to str[i]. */
|
|
||||||
|
|
||||||
assert(str != NULL);
|
|
||||||
|
|
||||||
while (*str != '\0') {
|
|
||||||
int str_len = parse_mbchar(str, NULL, &length);
|
|
||||||
|
|
||||||
if (length > xplus)
|
|
||||||
break;
|
|
||||||
|
|
||||||
i += str_len;
|
|
||||||
str += str_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* A strlen() with tabs factored in, similar to xplustabs(). How many
|
|
||||||
* columns wide are the first size characters of str? */
|
|
||||||
size_t strnlenpt(const char *str, size_t size)
|
|
||||||
{
|
|
||||||
size_t length = 0;
|
|
||||||
/* The screen display width to str[i]. */
|
|
||||||
|
|
||||||
if (size == 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
assert(str != NULL);
|
|
||||||
|
|
||||||
while (*str != '\0') {
|
|
||||||
int str_len = parse_mbchar(str, NULL, &length);
|
|
||||||
|
|
||||||
str += str_len;
|
|
||||||
|
|
||||||
if (size <= str_len)
|
|
||||||
break;
|
|
||||||
|
|
||||||
size -= str_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
return length;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* How many columns wide is buf? */
|
|
||||||
size_t strlenpt(const char *buf)
|
|
||||||
{
|
|
||||||
return strnlenpt(buf, (size_t)-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Move to (x, y) in win, and display a line of n spaces with the
|
/* Move to (x, y) in win, and display a line of n spaces with the
|
||||||
* current attributes. */
|
* current attributes. */
|
||||||
void blank_line(WINDOW *win, int y, int x, int n)
|
void blank_line(WINDOW *win, int y, int x, int n)
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user