File 6.3.002 of Package kvim

To: vim-dev@vim.org
Subject: Patch 6.3.002
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 6.3.002
Problem:    When using translated help files with non-ASCII latin1 characters
	    in the first line the utf-8 detection is wrong.
Solution:   Properly detect utf-8 characters.  When a mix of encodings is
	    detected continue with the next language and avoid a "no matches"
	    error because of "got_int" being set.  Add the directory name to
	    the error message for a duplicate tag.
Files:	    src/ex_cmds.c


*** ../vim-6.3.001/src/ex_cmds.c	Wed Jun  9 14:56:26 2004
--- src/ex_cmds.c	Thu Jun 10 21:08:05 2004
***************
*** 5300,5305 ****
--- 5300,5306 ----
      int		utf8 = MAYBE;
      int		this_utf8;
      int		firstline;
+     int		mix = FALSE;	/* detected mixed encodings */
  # endif
  
      /*
***************
*** 5313,5319 ****
  						    EW_FILE|EW_SILENT) == FAIL
  	    || filecount == 0)
      {
! 	EMSG2("E151: No match: %s", NameBuff);
  	return;
      }
  
--- 5314,5321 ----
  						    EW_FILE|EW_SILENT) == FAIL
  	    || filecount == 0)
      {
! 	if (!got_int)
! 	    EMSG2("E151: No match: %s", NameBuff);
  	return;
      }
  
***************
*** 5377,5391 ****
  	    if (firstline)
  	    {
  		/* Detect utf-8 file by a non-ASCII char in the first line. */
! 		this_utf8 = FALSE;
  		for (s = IObuff; *s != NUL; ++s)
  		    if (*s >= 0x80)
  			this_utf8 = TRUE;
! 		if (utf8 == MAYBE)
  		    utf8 = this_utf8;
  		else if (utf8 != this_utf8)
  		{
  		    EMSG2(_("E670: Mix of help file encodings within a language: %s"), files[fi]);
  		    got_int = TRUE;
  		}
  		firstline = FALSE;
--- 5379,5408 ----
  	    if (firstline)
  	    {
  		/* Detect utf-8 file by a non-ASCII char in the first line. */
! 		this_utf8 = MAYBE;
  		for (s = IObuff; *s != NUL; ++s)
  		    if (*s >= 0x80)
+ 		    {
+ 			int l;
+ 
  			this_utf8 = TRUE;
! 			l = utf_ptr2len_check(s);
! 			if (l == 1)
! 			{
! 			    /* Illegal UTF-8 byte sequence. */
! 			    this_utf8 = FALSE;
! 			    break;
! 			}
! 			s += l - 1;
! 		    }
! 		if (this_utf8 == MAYBE)	    /* only ASCII characters found */
! 		    this_utf8 = FALSE;
! 		if (utf8 == MAYBE)	    /* first file */
  		    utf8 = this_utf8;
  		else if (utf8 != this_utf8)
  		{
  		    EMSG2(_("E670: Mix of help file encodings within a language: %s"), files[fi]);
+ 		    mix = !got_int;
  		    got_int = TRUE;
  		}
  		firstline = FALSE;
***************
*** 5463,5470 ****
  		{
  		    *p2 = NUL;
  		    sprintf((char *)NameBuff,
! 			    _("E154: Duplicate tag \"%s\" in file %s"),
! 			    ((char_u **)ga.ga_data)[i], p2 + 1);
  		    EMSG(NameBuff);
  		    *p2 = '\t';
  		    break;
--- 5480,5487 ----
  		{
  		    *p2 = NUL;
  		    sprintf((char *)NameBuff,
! 			    _("E154: Duplicate tag \"%s\" in file %s/%s"),
! 				     ((char_u **)ga.ga_data)[i], dir, p2 + 1);
  		    EMSG(NameBuff);
  		    *p2 = '\t';
  		    break;
***************
*** 5502,5507 ****
--- 5519,5528 ----
  	    }
  	}
      }
+ #ifdef FEAT_MBYTE
+     if (mix)
+ 	got_int = FALSE;    /* continue with other languages */
+ #endif
  
      for (i = 0; i < ga.ga_len; ++i)
  	vim_free(((char_u **)ga.ga_data)[i]);
*** ../vim-6.3.001/src/version.c	Wed Jun  9 14:59:11 2004
--- src/version.c	Thu Jun 10 20:53:19 2004
***************
*** 643,644 ****
--- 643,646 ----
  {   /* Add new patch number below this line */
+ /**/
+     2,
  /**/

-- 
From "know your smileys":
 %	Bike accident (a bit far-fetched, I suppose)

 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
 \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
openSUSE Build Service is sponsored by