Hi.

In japanese, :help local-additions@ja should show *.jax instead of *.txt.
Below is a patch.

If foo.txt file is found, this check foo.abx is exists. If exists, 
local-additions@ab use titles in foo.abs.

Please check and include.

Thanks.

https://gist.github.com/1291978 

diff -r f530aef0d959 src/ex_cmds.c
--- a/src/ex_cmds.c Wed Oct 12 22:02:14 2011 +0200
+++ b/src/ex_cmds.c Mon Oct 17 14:08:47 2011 +0900
@@ -5982,6 +5982,7 @@
     char_u *line;
     int in_example = FALSE;
     int len;
+    char_u *fname;
     char_u *p;
     char_u *rt;
     int mustfree;
@@ -6029,123 +6030,187 @@
 
     /*
      * In the "help.txt" file, add the locally added help files.
-     * This uses the very first line in the help file.
+     * This uses the very first line in the help file. also: help.abx
      */
-    if (fnamecmp(gettail(curbuf->b_fname), "help.txt") == 0)
+    fname = gettail(curbuf->b_fname);
+    len = (int)STRLEN(fname);
+    if (fnamecmp(fname, "help.txt") == 0
+#ifdef FEAT_MULTI_LANG
+ || (len == 8 && STRNICMP(fname, "help.", 5) == 0
+    && ASCII_ISALPHA(fname[5])
+    && ASCII_ISALPHA(fname[6])
+    && TOLOWER_ASC(fname[7]) == 'x')
+#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;
+#ifdef FEAT_MBYTE
+    vimconv_T vc;
+    char_u *cp;
+#endif
+
+    /* Find all "doc/ *.txt" files in this directory. */
+    add_pathsep(NameBuff);
+#ifndef FEAT_MULTI_LANG
+    STRCAT(NameBuff, "doc/*.txt");
+#else
+    STRCAT(NameBuff, "doc/*");
+#endif
+    if (gen_expand_wildcards(1, &NameBuff, &fcount,
+ &fnames, EW_FILE|EW_SILENT) == OK
+    && fcount > 0)
     {
- 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)
+#ifdef FEAT_MULTI_LANG
+ int i1;
+ int i2;
+ char* f1;
+ char* f2;
+ char* t1;
+ char* t2;
+ char* e1;
+ char* e2;
+ /* if foo.txt is found, check foo.abs is exists to
+ * skip */
+ 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] == NUL || fnames[i2] == NUL)
+    continue;
+ f1 = fnames[i1];
+ f2 = fnames[i2];
+ t1 = gettail(f1);
+ t2 = gettail(f2);
+ if (fnamencmp(f1, f2, t1 - f1) != 0)
+    continue;
+ e1 = vim_strrchr(f1, '.');
+ e2 = vim_strrchr(f2, '.');
+ if (e1 == NUL || e2 == NUL)
+    continue;
+ if (fnamecmp(e1, ".txt") != 0
+    && fnamecmp(e1, fname+4) != 0)
  {
-    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);
+    /* invlid help filename */
+    fnames[i1] = 0;
+    continue;
+ }
+ if (fnamencmp(f1, f2, e1 - f1) != 0)
+    continue;
+ if (fnamecmp(e1, ".txt") == 0
+    && fnamecmp(e2, fname+4) == 0)
+ {
+    /* use .abx instead of .txt */
+    fnames[i1] = 0;
  }
     }
-    FreeWild(fcount, fnames);
  }
+#endif
+ for (fi = 0; fi < fcount; ++fi)
+ {
+    if (fnames[fi] == 0)
+    {
+ 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;
+ if (mustfree)
+    vim_free(rt);
     }
+    break;
  }
     }
 }

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui