vim-patch:8.2.3992: wrong local-additions in the help with language mix

Problem:    Wrong local-additions in the help with language mix.
Solution:   Adjust how the local additions list is generated. (Hirohito
            Higashi, closes vim/vim#9464)

0e2508d9e6

Co-authored-by: h-east <h.east.727@gmail.com>
This commit is contained in:
zeertzjq
2022-12-03 19:09:19 +08:00
parent e7a2ae829a
commit b69c581761
2 changed files with 47 additions and 23 deletions

View File

@@ -743,28 +743,26 @@ void fix_help_buffer(void)
// If foo.abx is found use it instead of foo.txt in // If foo.abx is found use it instead of foo.txt in
// the same directory. // the same directory.
for (int i1 = 0; i1 < fcount; i1++) { for (int i1 = 0; i1 < fcount; i1++) {
for (int i2 = 0; i2 < fcount; i2++) { const char *const f1 = fnames[i1];
if (i1 == i2) { const char *const t1 = path_tail(f1);
continue; const char *const e1 = strrchr(t1, '.');
} if (path_fnamecmp(e1, ".txt") != 0
if (fnames[i1] == NULL || fnames[i2] == NULL) { && path_fnamecmp(e1, fname + 4) != 0) {
continue; // Not .txt and not .abx, remove it.
} XFREE_CLEAR(fnames[i1]);
const char *const f1 = fnames[i1]; continue;
}
for (int i2 = i1 + 1; i2 < fcount; i2++) {
const char *const f2 = fnames[i2]; const char *const f2 = fnames[i2];
const char *const t1 = path_tail(f1); if (f2 == NULL) {
continue;
}
const char *const t2 = path_tail(f2); const char *const t2 = path_tail(f2);
const char *const e1 = strrchr(t1, '.');
const char *const e2 = strrchr(t2, '.'); const char *const e2 = strrchr(t2, '.');
if (e1 == NULL || e2 == NULL) { if (e1 == NULL || e2 == NULL) {
continue; continue;
} }
if (path_fnamecmp(e1, ".txt") != 0
&& path_fnamecmp(e1, fname + 4) != 0) {
// Not .txt and not .abx, remove it.
XFREE_CLEAR(fnames[i1]);
continue;
}
if (e1 - f1 != e2 - f2 if (e1 - f1 != e2 - f2
|| path_fnamencmp(f1, f2, (size_t)(e1 - f1)) != 0) { || path_fnamencmp(f1, f2, (size_t)(e1 - f1)) != 0) {
continue; continue;

View File

@@ -96,16 +96,42 @@ func Test_help_local_additions()
call writefile(['*mydoc-ext.txt* my extended awesome doc'], 'Xruntime/doc/mydoc-ext.txt') call writefile(['*mydoc-ext.txt* my extended awesome doc'], 'Xruntime/doc/mydoc-ext.txt')
let rtp_save = &rtp let rtp_save = &rtp
set rtp+=./Xruntime set rtp+=./Xruntime
help help local-additions
1 let lines = getline(line(".") + 1, search("^$") - 1)
call search('mydoc.txt') call assert_equal([
call assert_equal('|mydoc.txt| my awesome doc', getline('.')) \ '|mydoc-ext.txt| my extended awesome doc',
1 \ '|mydoc.txt| my awesome doc'
call search('mydoc-ext.txt') \ ], lines)
call assert_equal('|mydoc-ext.txt| my extended awesome doc', getline('.')) call delete('Xruntime/doc/mydoc-ext.txt')
close
call mkdir('Xruntime-ja/doc', 'p')
call writefile(["local-additions\thelp.jax\t/*local-additions*"], 'Xruntime-ja/doc/tags-ja')
call writefile(['*help.txt* This is jax file', '',
\ 'LOCAL ADDITIONS: *local-additions*', ''], 'Xruntime-ja/doc/help.jax')
call writefile(['*work.txt* This is jax file'], 'Xruntime-ja/doc/work.jax')
call writefile(['*work2.txt* This is jax file'], 'Xruntime-ja/doc/work2.jax')
set rtp+=./Xruntime-ja
help local-additions@en
let lines = getline(line(".") + 1, search("^$") - 1)
call assert_equal([
\ '|mydoc.txt| my awesome doc'
\ ], lines)
close
help local-additions@ja
let lines = getline(line(".") + 1, search("^$") - 1)
call assert_equal([
\ '|mydoc.txt| my awesome doc',
\ '|help.txt| This is jax file',
\ '|work.txt| This is jax file',
\ '|work2.txt| This is jax file',
\ ], lines)
close close
call delete('Xruntime', 'rf') call delete('Xruntime', 'rf')
call delete('Xruntime-ja', 'rf')
let &rtp = rtp_save let &rtp = rtp_save
endfunc endfunc