To: vim_dev@googlegroups.com
Subject: Patch 7.3.341
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------

Patch 7.3.341
Problem:    Local help files are only listed in help.txt, not in translated
	    help files.
Solution:   Also find translated help files. (Yasuhiro Matsumoto)
Files:	    src/ex_cmds.c


*** ../vim-7.3.340/src/ex_cmds.c	2011-09-30 17:30:27.000000000 +0200
--- src/ex_cmds.c	2011-10-20 17:39:45.000000000 +0200
***************
*** 5982,5987 ****
--- 5982,5988 ----
      char_u	*line;
      int		in_example = FALSE;
      int		len;
+     char_u	*fname;
      char_u	*p;
      char_u	*rt;
      int		mustfree;
***************
*** 6028,6151 ****
      }
  
      /*
!      * In the "help.txt" file, add the locally added help files.
!      * This uses the very first line in the help file.
       */
!     if (fnamecmp(gettail(curbuf->b_fname), "help.txt") == 0)
      {
  	for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
  	{
  	    line = ml_get_buf(curbuf, lnum, FALSE);
! 	    if (strstr((char *)line, "*local-additions*") != NULL)
  	    {
! 		/* Go through all directories in 'runtimepath', skipping
! 		 * $VIMRUNTIME. */
! 		p = p_rtp;
! 		while (*p != NUL)
  		{
! 		    copy_option_part(&p, NameBuff, MAXPATHL, ",");
! 		    mustfree = FALSE;
! 		    rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
! 		    if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
! 		    {
! 			int	fcount;
! 			char_u	**fnames;
! 			FILE	*fd;
! 			char_u	*s;
! 			int	fi;
  #ifdef FEAT_MBYTE
! 			vimconv_T	vc;
! 			char_u		*cp;
  #endif
  
! 			/* Find all "doc/ *.txt" files in this directory. */
! 			add_pathsep(NameBuff);
! 			STRCAT(NameBuff, "doc/*.txt");
! 			if (gen_expand_wildcards(1, &NameBuff, &fcount,
! 					     &fnames, EW_FILE|EW_SILENT) == OK
! 				&& fcount > 0)
  			{
! 			    for (fi = 0; fi < fcount; ++fi)
  			    {
! 				fd = mch_fopen((char *)fnames[fi], "r");
! 				if (fd != NULL)
  				{
! 				    vim_fgets(IObuff, IOSIZE, fd);
! 				    if (IObuff[0] == '*'
! 					    && (s = vim_strchr(IObuff + 1, '*'))
! 								      != NULL)
! 				    {
! #ifdef FEAT_MBYTE
! 					int	this_utf = MAYBE;
  #endif
! 					/* Change tag definition to a
! 					 * reference and remove <CR>/<NL>. */
! 					IObuff[0] = '|';
! 					*s = '|';
! 					while (*s != NUL)
! 					{
! 					    if (*s == '\r' || *s == '\n')
! 						*s = NUL;
  #ifdef FEAT_MBYTE
! 					    /* The text is utf-8 when a byte
! 					     * above 127 is found and no
! 					     * illegal byte sequence is found.
! 					     */
! 					    if (*s >= 0x80 && this_utf != FALSE)
! 					    {
! 						int	l;
! 
! 						this_utf = TRUE;
! 						l = utf_ptr2len(s);
! 						if (l == 1)
! 						    this_utf = FALSE;
! 						s += l - 1;
! 					    }
  #endif
! 					    ++s;
! 					}
  #ifdef FEAT_MBYTE
! 					/* The help file is latin1 or utf-8;
! 					 * conversion to the current
! 					 * 'encoding' may be required. */
! 					vc.vc_type = CONV_NONE;
! 					convert_setup(&vc, (char_u *)(
! 						    this_utf == TRUE ? "utf-8"
! 							  : "latin1"), p_enc);
! 					if (vc.vc_type == CONV_NONE)
! 					    /* No conversion needed. */
! 					    cp = IObuff;
! 					else
  					{
! 					    /* Do the conversion.  If it fails
! 					     * use the unconverted text. */
! 					    cp = string_convert(&vc, IObuff,
! 									NULL);
! 					    if (cp == NULL)
! 						cp = IObuff;
  					}
! 					convert_setup(&vc, NULL, NULL);
  
! 					ml_append(lnum, cp, (colnr_T)0, FALSE);
! 					if (cp != IObuff)
! 					    vim_free(cp);
  #else
! 					ml_append(lnum, IObuff, (colnr_T)0,
! 								       FALSE);
  #endif
! 					++lnum;
! 				    }
! 				    fclose(fd);
  				}
  			    }
- 			    FreeWild(fcount, fnames);
  			}
  		    }
- 		    if (mustfree)
- 			vim_free(rt);
  		}
! 		break;
  	    }
  	}
      }
  }
--- 6029,6215 ----
      }
  
      /*
!      * In the "help.txt" and "help.abx" file, add the locally added help
!      * files.  This uses the very first line in the help file.
       */
!     fname = gettail(curbuf->b_fname);
!     if (fnamecmp(fname, "help.txt") == 0
! #ifdef FEAT_MULTI_LANG
! 	|| (fnamencmp(fname, "help.", 5) == 0
! 	    && ASCII_ISALPHA(fname[5])
! 	    && ASCII_ISALPHA(fname[6])
! 	    && TOLOWER_ASC(fname[7]) == 'x'
! 	    && fname[8] == NUL)
! #endif
! 	)
      {
  	for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
  	{
  	    line = ml_get_buf(curbuf, lnum, FALSE);
! 	    if (strstr((char *)line, "*local-additions*") == NULL)
! 		continue;
! 
! 	    /* Go through all directories in 'runtimepath', skipping
! 	     * $VIMRUNTIME. */
! 	    p = p_rtp;
! 	    while (*p != NUL)
  	    {
! 		copy_option_part(&p, NameBuff, MAXPATHL, ",");
! 		mustfree = FALSE;
! 		rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
! 		if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
  		{
! 		    int		fcount;
! 		    char_u	**fnames;
! 		    FILE	*fd;
! 		    char_u	*s;
! 		    int		fi;
  #ifdef FEAT_MBYTE
! 		    vimconv_T	vc;
! 		    char_u	*cp;
  #endif
  
! 		    /* Find all "doc/ *.txt" files in this directory. */
! 		    add_pathsep(NameBuff);
! #ifdef FEAT_MULTI_LANG
! 		    STRCAT(NameBuff, "doc/*.??[tx]");
! #else
! 		    STRCAT(NameBuff, "doc/*.txt");
! #endif
! 		    if (gen_expand_wildcards(1, &NameBuff, &fcount,
! 					 &fnames, EW_FILE|EW_SILENT) == OK
! 			    && fcount > 0)
! 		    {
! #ifdef FEAT_MULTI_LANG
! 			int	i1;
! 			int	i2;
! 			char_u	*f1;
! 			char_u	*f2;
! 			char_u	*t1;
! 			char_u	*e1;
! 			char_u	*e2;
! 
! 			/* If foo.abx is found use it instead of foo.txt in
! 			 * the same directory. */
! 			for (i1 = 0; i1 < fcount; ++i1)
  			{
! 			    for (i2 = 0; i2 < fcount; ++i2)
  			    {
! 				if (i1 == i2)
! 				    continue;
! 				if (fnames[i1] == NULL || fnames[i2] == NULL)
! 				    continue;
! 				f1 = fnames[i1];
! 				f2 = fnames[i2];
! 				t1 = gettail(f1);
! 				if (fnamencmp(f1, f2, t1 - f1) != 0)
! 				    continue;
! 				e1 = vim_strrchr(t1, '.');
! 				e2 = vim_strrchr(gettail(f2), '.');
! 				if (e1 == NUL || e2 == NUL)
! 				    continue;
! 				if (fnamecmp(e1, ".txt") != 0
! 				    && fnamecmp(e1, fname + 4) != 0)
  				{
! 				    /* Not .txt and not .abx, remove it. */
! 				    vim_free(fnames[i1]);
! 				    fnames[i1] = NULL;
! 				    continue;
! 				}
! 				if (fnamencmp(f1, f2, e1 - f1) != 0)
! 				    continue;
! 				if (fnamecmp(e1, ".txt") == 0
! 				    && fnamecmp(e2, fname + 4) == 0)
! 				{
! 				    /* use .abx instead of .txt */
! 				    vim_free(fnames[i1]);
! 				    fnames[i1] = NULL;
! 				}
! 			    }
! 			}
  #endif
! 			for (fi = 0; fi < fcount; ++fi)
! 			{
! 			    if (fnames[fi] == NULL)
! 				continue;
! 			    fd = mch_fopen((char *)fnames[fi], "r");
! 			    if (fd != NULL)
! 			    {
! 				vim_fgets(IObuff, IOSIZE, fd);
! 				if (IObuff[0] == '*'
! 					&& (s = vim_strchr(IObuff + 1, '*'))
! 								  != NULL)
! 				{
  #ifdef FEAT_MBYTE
! 				    int	this_utf = MAYBE;
  #endif
! 				    /* Change tag definition to a
! 				     * reference and remove <CR>/<NL>. */
! 				    IObuff[0] = '|';
! 				    *s = '|';
! 				    while (*s != NUL)
! 				    {
! 					if (*s == '\r' || *s == '\n')
! 					    *s = NUL;
  #ifdef FEAT_MBYTE
! 					/* The text is utf-8 when a byte
! 					 * above 127 is found and no
! 					 * illegal byte sequence is found.
! 					 */
! 					if (*s >= 0x80 && this_utf != FALSE)
  					{
! 					    int	l;
! 
! 					    this_utf = TRUE;
! 					    l = utf_ptr2len(s);
! 					    if (l == 1)
! 						this_utf = FALSE;
! 					    s += l - 1;
  					}
! #endif
! 					++s;
! 				    }
! #ifdef FEAT_MBYTE
! 				    /* The help file is latin1 or utf-8;
! 				     * conversion to the current
! 				     * 'encoding' may be required. */
! 				    vc.vc_type = CONV_NONE;
! 				    convert_setup(&vc, (char_u *)(
! 						this_utf == TRUE ? "utf-8"
! 						      : "latin1"), p_enc);
! 				    if (vc.vc_type == CONV_NONE)
! 					/* No conversion needed. */
! 					cp = IObuff;
! 				    else
! 				    {
! 					/* Do the conversion.  If it fails
! 					 * use the unconverted text. */
! 					cp = string_convert(&vc, IObuff,
! 								    NULL);
! 					if (cp == NULL)
! 					    cp = IObuff;
! 				    }
! 				    convert_setup(&vc, NULL, NULL);
  
! 				    ml_append(lnum, cp, (colnr_T)0, FALSE);
! 				    if (cp != IObuff)
! 					vim_free(cp);
  #else
! 				    ml_append(lnum, IObuff, (colnr_T)0,
! 								   FALSE);
  #endif
! 				    ++lnum;
  				}
+ 				fclose(fd);
  			    }
  			}
+ 			FreeWild(fcount, fnames);
  		    }
  		}
! 		if (mustfree)
! 		    vim_free(rt);
  	    }
+ 	    break;
  	}
      }
  }
*** ../vim-7.3.340/src/version.c	2011-10-20 18:12:27.000000000 +0200
--- src/version.c	2011-10-20 18:13:46.000000000 +0200
***************
*** 711,712 ****
--- 711,714 ----
  {   /* Add new patch number below this line */
+ /**/
+     341,
  /**/

-- 
From "know your smileys":
 :-)-O	Smiling doctor with stethoscope

 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
