To: vim_dev@googlegroups.com Subject: Patch 7.3.341 Fcc: outbox From: Bram Moolenaar 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 *** ../vim-7.3.340/src/ex_cmds.c 2011-09-30 17:30:27.000000000 +0200 --- src/ex_cmds.c 2011-10-20 17:39:45.000000000 +0200 *************** *** 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 /. */ ! 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 /. */ ! 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; } } } *** ../vim-7.3.340/src/version.c 2011-10-20 18:12:27.000000000 +0200 --- src/version.c 2011-10-20 18:13:46.000000000 +0200 *************** *** 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 ///