]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.341 v7.3.341
authorBram Moolenaar <Bram@vim.org>
Thu, 20 Oct 2011 16:17:42 +0000 (18:17 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 20 Oct 2011 16:17:42 +0000 (18:17 +0200)
Problem:    Local help files are only listed in help.txt, not in translated
            help files.
Solution:   Also find translated help files. (Yasuhiro Matsumoto)

src/ex_cmds.c
src/version.c

index b433bca406dde4c0fa09bf0b0cc96437bf25ca62..33021d295acb6a5591575c47d036f903f915159e 100644 (file)
@@ -5982,6 +5982,7 @@ fix_help_buffer()
     char_u     *line;
     int                in_example = FALSE;
     int                len;
+    char_u     *fname;
     char_u     *p;
     char_u     *rt;
     int                mustfree;
@@ -6028,124 +6029,187 @@ fix_help_buffer()
     }
 
     /*
-     * In the "help.txt" file, add the locally added help files.
-     * This uses the very first line in the help file.
+     * In the "help.txt" and "help.abx" 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)
+    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)
+           if (strstr((char *)line, "*local-additions*") == NULL)
+               continue;
+
+           /* Go through all directories in 'runtimepath', skipping
+            * $VIMRUNTIME. */
+           p = p_rtp;
+           while (*p != NUL)
            {
-               /* 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)
                {
-                   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;
+                   int         fcount;
+                   char_u      **fnames;
+                   FILE        *fd;
+                   char_u      *s;
+                   int         fi;
 #ifdef FEAT_MBYTE
-                       vimconv_T       vc;
-                       char_u          *cp;
+                   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)
+                   /* 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 (fi = 0; fi < fcount; ++fi)
+                           for (i2 = 0; i2 < fcount; ++i2)
                            {
-                               fd = mch_fopen((char *)fnames[fi], "r");
-                               if (fd != NULL)
+                               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)
                                {
-                                   vim_fgets(IObuff, IOSIZE, fd);
-                                   if (IObuff[0] == '*'
-                                           && (s = vim_strchr(IObuff + 1, '*'))
-                                                                     != NULL)
-                                   {
 #ifdef FEAT_MBYTE
-                                       int     this_utf = MAYBE;
+                                   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;
+                                   /* 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;
+                                       /* 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. */
+                                   /* 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;
-                                       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);
+                                   }
+                                   convert_setup(&vc, NULL, NULL);
 
-                                       ml_append(lnum, cp, (colnr_T)0, FALSE);
-                                       if (cp != IObuff)
-                                           vim_free(cp);
+                                   ml_append(lnum, cp, (colnr_T)0, FALSE);
+                                   if (cp != IObuff)
+                                       vim_free(cp);
 #else
-                                       ml_append(lnum, IObuff, (colnr_T)0,
-                                                                      FALSE);
+                                   ml_append(lnum, IObuff, (colnr_T)0,
+                                                                  FALSE);
 #endif
-                                       ++lnum;
-                                   }
-                                   fclose(fd);
+                                   ++lnum;
                                }
+                               fclose(fd);
                            }
-                           FreeWild(fcount, fnames);
                        }
+                       FreeWild(fcount, fnames);
                    }
-                   if (mustfree)
-                       vim_free(rt);
                }
-               break;
+               if (mustfree)
+                   vim_free(rt);
            }
+           break;
        }
     }
 }
index 69e29b26516b3551e510034e3a50e4fbe1289909..3c4dc11c436bbafe72cf710064963f1fc9830e92 100644 (file)
@@ -709,6 +709,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    341,
 /**/
     340,
 /**/