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
