[prev in list] [next in list] [prev in thread] [next in thread]
List: vim-dev
Subject: Patch 6.1.001
From: Bram Moolenaar <Bram () moolenaar ! net>
Date: 2002-03-30 16:00:05
[Download RAW message or body]
Patch 6.1.001
Problem: When formatting UTF-8 text it might be wrapped at a space that is
followed by a composing character. (Raphael Finkel)
Also correct a display error for removing a composing char on top
of a space.
Solution: Check for a composing character on a space.
Files: src/edit.c, src/misc1.c, src/screen.c
*** ../vim-6.1/src/edit.c Sun Mar 24 19:23:31 2002
--- src/edit.c Wed Mar 27 19:25:13 2002
***************
*** 3669,3674 ****
--- 3669,3680 ----
# define ISSPECIAL(c) ((c) < ' ' || (c) >= DEL || (c) == '0' || (c) == '^')
#endif
+ #ifdef FEAT_MBYTE
+ # define WHITECHAR(cc) (vim_iswhite(cc) && (!enc_utf8 || \
!utf_iscomposing(utf_ptr2char(ml_get_cursor() + 1)))) + #else
+ # define WHITECHAR(cc) vim_iswhite(cc)
+ #endif
+
void
insertchar(c, flags, second_indent)
int c; /* character to insert or NUL */
***************
*** 3814,3831 ****
|| curwin->w_cursor.col >= Insstart.col)
{
cc = gchar_cursor();
! if (vim_iswhite(cc))
{
/* remember position of blank just before text */
end_foundcol = curwin->w_cursor.col;
/* find start of sequence of blanks */
! while (curwin->w_cursor.col > 0 && vim_iswhite(cc))
{
dec_cursor();
cc = gchar_cursor();
}
! if (curwin->w_cursor.col == 0 && vim_iswhite(cc))
break; /* only spaces in front of text */
#ifdef FEAT_COMMENTS
/* Don't break until after the comment leader */
--- 3820,3837 ----
|| curwin->w_cursor.col >= Insstart.col)
{
cc = gchar_cursor();
! if (WHITECHAR(cc))
{
/* remember position of blank just before text */
end_foundcol = curwin->w_cursor.col;
/* find start of sequence of blanks */
! while (curwin->w_cursor.col > 0 && WHITECHAR(cc))
{
dec_cursor();
cc = gchar_cursor();
}
! if (curwin->w_cursor.col == 0 && WHITECHAR(cc))
break; /* only spaces in front of text */
#ifdef FEAT_COMMENTS
/* Don't break until after the comment leader */
***************
*** 3842,3848 ****
dec_cursor();
cc = gchar_cursor();
! if (vim_iswhite(cc))
continue; /* one-letter, continue */
curwin->w_cursor.col = col;
}
--- 3848,3854 ----
dec_cursor();
cc = gchar_cursor();
! if (WHITECHAR(cc))
continue; /* one-letter, continue */
curwin->w_cursor.col = col;
}
***************
*** 3899,3905 ****
* characters that will remain on top line
*/
curwin->w_cursor.col = foundcol;
! while (cc = gchar_cursor(), vim_iswhite(cc))
inc_cursor();
startcol -= curwin->w_cursor.col;
if (startcol < 0)
--- 3905,3911 ----
* characters that will remain on top line
*/
curwin->w_cursor.col = foundcol;
! while (cc = gchar_cursor(), WHITECHAR(cc))
inc_cursor();
startcol -= curwin->w_cursor.col;
if (startcol < 0)
*** ../vim-6.1/src/misc1.c Sun Mar 24 19:23:31 2002
--- src/misc1.c Wed Mar 27 19:31:45 2002
***************
*** 931,937 ****
replace_push(NUL); /* end of extra blanks */
if (curbuf->b_p_ai || (flags & OPENLINE_DELSPACES))
{
! while (*p_extra == ' ' || *p_extra == '\t')
{
if (REPLACE_NORMAL(State))
replace_push(*p_extra);
--- 931,942 ----
replace_push(NUL); /* end of extra blanks */
if (curbuf->b_p_ai || (flags & OPENLINE_DELSPACES))
{
! while ((*p_extra == ' ' || *p_extra == '\t')
! #ifdef FEAT_MBYTE
! && (!enc_utf8
! || !utf_iscomposing(utf_ptr2char(p_extra + 1)))
! #endif
! )
{
if (REPLACE_NORMAL(State))
replace_push(*p_extra);
*** ../vim-6.1/src/screen.c Sun Mar 24 19:23:32 2002
--- src/screen.c Thu Mar 28 20:19:23 2002
***************
*** 3991,3997 ****
if (clear_width > 0)
{
while (col <= endcol && ScreenLines[off_to] == ' '
! && ScreenAttrs[off_to] == 0)
{
++off_to;
++col;
--- 3991,4001 ----
if (clear_width > 0)
{
while (col <= endcol && ScreenLines[off_to] == ' '
! && ScreenAttrs[off_to] == 0
! #ifdef FEAT_MBYTE
! && (!enc_utf8 || ScreenLinesUC[off_to] == 0)
! #endif
! )
{
++off_to;
++col;
***************
*** 4220,4226 ****
/* blank out the rest of the line */
while (col < clear_width && ScreenLines[off_to] == ' '
! && ScreenAttrs[off_to] == 0)
{
++off_to;
++col;
--- 4224,4234 ----
/* blank out the rest of the line */
while (col < clear_width && ScreenLines[off_to] == ' '
! && ScreenAttrs[off_to] == 0
! #ifdef FEAT_MBYTE
! && (!enc_utf8 || ScreenLinesUC[off_to] == 0)
! #endif
! )
{
++off_to;
++col;
***************
*** 5841,5849 ****
end_off = LineOffset[row] + end_col;
/* skip blanks (used often, keep it fast!) */
! while (off < end_off && ScreenLines[off] == ' '
&& ScreenAttrs[off] == 0)
! ++off;
if (off < end_off) /* something to be cleared */
{
col = off - LineOffset[row];
--- 5849,5864 ----
end_off = LineOffset[row] + end_col;
/* skip blanks (used often, keep it fast!) */
! #ifdef FEAT_MBYTE
! if (enc_utf8)
! while (off < end_off && ScreenLines[off] == ' '
! && ScreenAttrs[off] == 0 && ScreenLinesUC[off] == 0)
! ++off;
! else
! #endif
! while (off < end_off && ScreenLines[off] == ' '
&& ScreenAttrs[off] == 0)
! ++off;
if (off < end_off) /* something to be cleared */
{
col = off - LineOffset[row];
*** ../vim-6.1/src/version.c Sun Mar 24 19:23:35 2002
--- src/version.c Sat Mar 30 16:51:28 2002
***************
*** 608,609 ****
--- 608,611 ----
{ /* Add new patch number below this line */
+ /**/
+ 1,
/**/
--
Time is an illusion. Lunchtime doubly so.
-- Ford Prefect, in Douglas Adams'
"The Hitchhiker's Guide to the Galaxy"
/// Bram Moolenaar -- Bram@moolenaar.net -- http://www.moolenaar.net \\\
/// Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim \\\
\\\ Project leader for A-A-P -- http://www.a-a-p.org ///
\\\ Help me helping AIDS orphans in Uganda - http://iccf-holland.org ///
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic