| 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 |
| |
| |
| |
| |
| |
| *** 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; |
| } |
| } |
| } |
| |
| |
| |
| *** 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 /// |