1 To: vim_dev@googlegroups.com
4 From: Bram Moolenaar <Bram@moolenaar.net>
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
11 Problem: When a tags file specifies an encoding different from 'enc' it
12 may hang and using a pattern doesn't work.
13 Solution: Convert the whole line. Continue reading the header after the
14 SORT tag. Add test83. (Yukihiro Nakadaira)
15 Files: src/tag.c, src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
16 src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
17 src/testdir/Make_vms.mms, src/testdir/Makefile,
18 src/testdir/test83-tags2, src/testdir/test83-tags3,
19 src/testdir/test83.in, src/testdir/test83.ok
22 *** ../vim-7.3.335/src/tag.c 2011-04-11 21:35:03.000000000 +0200
23 --- src/tag.c 2011-10-12 19:51:04.000000000 +0200
29 char_u *lbuf; /* line buffer */
30 + int lbuf_size = LSIZE; /* length of lbuf */
31 char_u *tag_fname; /* name of tag file */
32 tagname_T tn; /* info for get_tagfname() */
33 int first_file; /* trying first tag file */
40 + int tag_file_sorted = NUL; /* !_TAG_FILE_SORTED value */
41 struct tag_search_info /* Binary search file offsets */
43 off_t low_offset; /* offset for first char of first line that
46 char_u *saved_pat = NULL; /* copy of pat[] */
49 - /* Use two sets of variables for the pattern: "orgpat" holds the values
50 - * for the original pattern and "convpat" converted from 'encoding' to
51 - * encoding of the tags file. "pats" point to either one of these. */
53 pat_T orgpat; /* holds unconverted pattern info */
55 - pat_T convpat; /* holds converted pattern info */
63 help_save = curbuf->b_help;
67 vimconv.vc_type = CONV_NONE;
73 * Allocate memory for the buffers that are used
75 ! lbuf = alloc(LSIZE);
76 tag_fname = alloc(MAXPATHL + 1);
77 #ifdef FEAT_EMACS_TAGS
81 * Allocate memory for the buffers that are used
83 ! lbuf = alloc(lbuf_size);
84 tag_fname = alloc(MAXPATHL + 1);
85 #ifdef FEAT_EMACS_TAGS
89 if (help_only) /* want tags from help file */
90 curbuf->b_help = TRUE; /* will be restored later */
92 ! pats->len = (int)STRLEN(pat);
93 #ifdef FEAT_MULTI_LANG
96 /* When "@ab" is specified use only the "ab" language, otherwise
97 * search all languages. */
98 ! if (pats->len > 3 && pat[pats->len - 3] == '@'
99 ! && ASCII_ISALPHA(pat[pats->len - 2])
100 ! && ASCII_ISALPHA(pat[pats->len - 1]))
102 ! saved_pat = vim_strnsave(pat, pats->len - 3);
103 if (saved_pat != NULL)
105 ! help_lang_find = &pat[pats->len - 2];
106 ! pats->pat = saved_pat;
112 ! if (p_tl != 0 && pats->len > p_tl) /* adjust for 'taglength' */
115 ! prepare_pats(pats, has_re);
118 /* This is only to avoid a compiler warning for using search_info
120 if (help_only) /* want tags from help file */
121 curbuf->b_help = TRUE; /* will be restored later */
123 ! orgpat.len = (int)STRLEN(pat);
124 #ifdef FEAT_MULTI_LANG
127 /* When "@ab" is specified use only the "ab" language, otherwise
128 * search all languages. */
129 ! if (orgpat.len > 3 && pat[orgpat.len - 3] == '@'
130 ! && ASCII_ISALPHA(pat[orgpat.len - 2])
131 ! && ASCII_ISALPHA(pat[orgpat.len - 1]))
133 ! saved_pat = vim_strnsave(pat, orgpat.len - 3);
134 if (saved_pat != NULL)
136 ! help_lang_find = &pat[orgpat.len - 2];
137 ! orgpat.pat = saved_pat;
143 ! if (p_tl != 0 && orgpat.len > p_tl) /* adjust for 'taglength' */
146 ! prepare_pats(&orgpat, has_re);
149 /* This is only to avoid a compiler warning for using search_info
152 * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
155 ! pats->regmatch.rm_ic = ((p_ic || !noic)
156 ! && (findall || pats->headlen == 0 || !p_tbs));
157 for (round = 1; round <= 2; ++round)
159 ! linear = (pats->headlen == 0 || !p_tbs || round == 2);
161 ! pats->regmatch.rm_ic = (p_ic || !noic);
166 * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
169 ! orgpat.regmatch.rm_ic = ((p_ic || !noic)
170 ! && (findall || orgpat.headlen == 0 || !p_tbs));
171 for (round = 1; round <= 2; ++round)
173 ! linear = (orgpat.headlen == 0 || !p_tbs || round == 2);
175 ! orgpat.regmatch.rm_ic = (p_ic || !noic);
186 + if (vimconv.vc_type != CONV_NONE)
191 + /* Convert every line. Converting the pattern from 'enc' to
192 + * the tags file encoding doesn't work, because characters are
193 + * not recognized. */
194 + conv_line = string_convert(&vimconv, lbuf, NULL);
195 + if (conv_line != NULL)
197 + /* Copy or swap lbuf and conv_line. */
198 + len = (int)STRLEN(conv_line) + 1;
199 + if (len > lbuf_size)
207 + STRCPY(lbuf, conv_line);
208 + vim_free(conv_line);
215 #ifdef FEAT_EMACS_TAGS
217 * Emacs tags line with CTRL-L: New file name on next line.
222 if (state == TS_START)
224 + if (STRNCMP(lbuf, "!_TAG_", 6) <= 0)
227 + * Read header line.
229 + #ifdef FEAT_TAG_BINS
230 + if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
231 + tag_file_sorted = lbuf[18];
234 + if (STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
236 + /* Prepare to convert every line from the specified
237 + * encoding to 'encoding'. */
238 + for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
241 + convert_setup(&vimconv, lbuf + 20, p_enc);
245 + /* Read the next line. Unrecognized flags are ignored. */
249 + /* Headers ends. */
253 * When there is no tag head, or ignoring case, need to do a
259 ! else if (STRNCMP(lbuf, "!_TAG_", 6) > 0)
261 ! else if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
263 ! /* Check sorted flag */
264 ! if (lbuf[18] == '1')
266 ! else if (lbuf[18] == '2')
270 ! pats->regmatch.rm_ic = (p_ic || !noic);
276 ! if (state == TS_BINARY && pats->regmatch.rm_ic && !sortic)
278 /* binary search won't work for ignoring case, use linear
284 ! else if (tag_file_sorted == NUL)
286 ! else if (tag_file_sorted == '1')
288 ! else if (tag_file_sorted == '2')
292 ! orgpat.regmatch.rm_ic = (p_ic || !noic);
297 ! if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
299 /* binary search won't work for ignoring case, use linear
307 - if (lbuf[0] == '!' && pats == &orgpat
308 - && STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
310 - /* Convert the search pattern from 'encoding' to the
311 - * specified encoding. */
312 - for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
315 - convert_setup(&vimconv, p_enc, lbuf + 20);
316 - if (vimconv.vc_type != CONV_NONE)
318 - convpat.pat = string_convert(&vimconv, pats->pat, NULL);
319 - if (convpat.pat != NULL)
322 - pats->len = (int)STRLEN(pats->pat);
323 - prepare_pats(pats, has_re);
324 - pats->regmatch.rm_ic = orgpat.regmatch.rm_ic;
328 - /* Prepare for converting a match the other way around. */
329 - convert_setup(&vimconv, lbuf + 20, p_enc);
335 * Figure out where the different strings are in this line.
336 * For "normal" tags: Do a quick check if the tag matches.
337 * This speeds up tag searching a lot!
340 #ifdef FEAT_EMACS_TAGS
348 * Figure out where the different strings are in this line.
349 * For "normal" tags: Do a quick check if the tag matches.
350 * This speeds up tag searching a lot!
353 #ifdef FEAT_EMACS_TAGS
358 cmplen = (int)(tagp.tagname_end - tagp.tagname);
359 if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
361 ! if (has_re && pats->headlen < cmplen)
362 ! cmplen = pats->headlen;
363 ! else if (state == TS_LINEAR && pats->headlen != cmplen)
368 cmplen = (int)(tagp.tagname_end - tagp.tagname);
369 if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
371 ! if (has_re && orgpat.headlen < cmplen)
372 ! cmplen = orgpat.headlen;
373 ! else if (state == TS_LINEAR && orgpat.headlen != cmplen)
379 * Compare the current tag with the searched tag.
382 ! tagcmp = tag_strnicmp(tagp.tagname, pats->head,
385 ! tagcmp = STRNCMP(tagp.tagname, pats->head, cmplen);
388 * A match with a shorter tag means to search forward.
390 * Compare the current tag with the searched tag.
393 ! tagcmp = tag_strnicmp(tagp.tagname, orgpat.head,
396 ! tagcmp = STRNCMP(tagp.tagname, orgpat.head, cmplen);
399 * A match with a shorter tag means to search forward.
405 ! if (cmplen < pats->headlen)
407 ! else if (cmplen > pats->headlen)
415 ! if (cmplen < orgpat.headlen)
417 ! else if (cmplen > orgpat.headlen)
424 else if (state == TS_SKIP_BACK)
426 ! if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
427 state = TS_STEP_FORWARD;
429 /* Have to skip back more. Restore the curr_offset
432 else if (state == TS_SKIP_BACK)
434 ! if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
435 state = TS_STEP_FORWARD;
437 /* Have to skip back more. Restore the curr_offset
441 else if (state == TS_STEP_FORWARD)
443 ! if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
445 if ((off_t)ftell(fp) > search_info.match_offset)
446 break; /* past last match */
449 else if (state == TS_STEP_FORWARD)
451 ! if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
453 if ((off_t)ftell(fp) > search_info.match_offset)
454 break; /* past last match */
459 /* skip this match if it can't match */
460 ! if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
467 /* skip this match if it can't match */
468 ! if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
474 if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
476 /* if tag length does not match, don't try comparing */
477 ! if (pats->len != cmplen)
481 ! if (pats->regmatch.rm_ic)
483 ! match = (MB_STRNICMP(tagp.tagname, pats->pat, cmplen) == 0);
485 ! match_no_ic = (STRNCMP(tagp.tagname, pats->pat,
489 ! match = (STRNCMP(tagp.tagname, pats->pat, cmplen) == 0);
493 * Has a regexp: Also find tags matching regexp.
496 ! if (!match && pats->regmatch.regprog != NULL)
500 cc = *tagp.tagname_end;
501 *tagp.tagname_end = NUL;
502 ! match = vim_regexec(&pats->regmatch, tagp.tagname, (colnr_T)0);
505 ! matchoff = (int)(pats->regmatch.startp[0] - tagp.tagname);
506 ! if (pats->regmatch.rm_ic)
508 ! pats->regmatch.rm_ic = FALSE;
509 ! match_no_ic = vim_regexec(&pats->regmatch, tagp.tagname,
511 ! pats->regmatch.rm_ic = TRUE;
514 *tagp.tagname_end = cc;
516 if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
518 /* if tag length does not match, don't try comparing */
519 ! if (orgpat.len != cmplen)
523 ! if (orgpat.regmatch.rm_ic)
525 ! match = (MB_STRNICMP(tagp.tagname, orgpat.pat, cmplen) == 0);
527 ! match_no_ic = (STRNCMP(tagp.tagname, orgpat.pat,
531 ! match = (STRNCMP(tagp.tagname, orgpat.pat, cmplen) == 0);
535 * Has a regexp: Also find tags matching regexp.
538 ! if (!match && orgpat.regmatch.regprog != NULL)
542 cc = *tagp.tagname_end;
543 *tagp.tagname_end = NUL;
544 ! match = vim_regexec(&orgpat.regmatch, tagp.tagname, (colnr_T)0);
547 ! matchoff = (int)(orgpat.regmatch.startp[0] - tagp.tagname);
548 ! if (orgpat.regmatch.rm_ic)
550 ! orgpat.regmatch.rm_ic = FALSE;
551 ! match_no_ic = vim_regexec(&orgpat.regmatch, tagp.tagname,
553 ! orgpat.regmatch.rm_ic = TRUE;
556 *tagp.tagname_end = cc;
562 ! if (pats->regmatch.rm_ic && !match_no_ic)
570 ! if (orgpat.regmatch.rm_ic && !match_no_ic)
577 if (ga_grow(&ga_match[mtt], 1) == OK)
580 - char_u *conv_line = NULL;
581 - char_u *lbuf_line = lbuf;
583 - if (vimconv.vc_type != CONV_NONE)
585 - /* Convert the tag line from the encoding of the tags
586 - * file to 'encoding'. Then parse the line again. */
587 - conv_line = string_convert(&vimconv, lbuf, NULL);
588 - if (conv_line != NULL)
590 - if (parse_tag_line(conv_line,
591 - #ifdef FEAT_EMACS_TAGS
595 - lbuf_line = conv_line;
597 - /* doesn't work, go back to unconverted line. */
598 - (void)parse_tag_line(lbuf,
599 - #ifdef FEAT_EMACS_TAGS
606 - # define lbuf_line lbuf
610 #ifdef FEAT_MULTI_LANG
614 * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
616 len = (int)STRLEN(tag_fname)
617 ! + (int)STRLEN(lbuf_line) + 3;
618 #ifdef FEAT_EMACS_TAGS
620 len += (int)STRLEN(ebuf) + 1;
622 * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
624 len = (int)STRLEN(tag_fname)
625 ! + (int)STRLEN(lbuf) + 3;
626 #ifdef FEAT_EMACS_TAGS
628 len += (int)STRLEN(ebuf) + 1;
634 ! STRCPY(s, lbuf_line);
652 - /* Note: this makes the values in "tagp" invalid! */
653 - vim_free(conv_line);
656 else /* Out of memory! Just forget about the rest. */
664 - if (pats == &convpat)
666 - /* Go back from converted pattern to original pattern. */
667 - vim_free(pats->pat);
668 - vim_free(pats->regmatch.regprog);
669 - orgpat.regmatch.rm_ic = pats->regmatch.rm_ic;
672 if (vimconv.vc_type != CONV_NONE)
673 convert_setup(&vimconv, NULL, NULL);
679 EMSG2(_("E432: Tags file not sorted: %s"), tag_fname);
684 if (vimconv.vc_type != CONV_NONE)
685 convert_setup(&vimconv, NULL, NULL);
689 + tag_file_sorted = NUL;
692 EMSG2(_("E432: Tags file not sorted: %s"), tag_fname);
696 /* stop searching when already did a linear search, or when TAG_NOIC
697 * used, and 'ignorecase' not set or already did case-ignore search */
698 ! if (stop_searching || linear || (!p_ic && noic) || pats->regmatch.rm_ic)
704 ! pats->regmatch.rm_ic = TRUE; /* try another time while ignoring case */
710 /* stop searching when already did a linear search, or when TAG_NOIC
711 * used, and 'ignorecase' not set or already did case-ignore search */
712 ! if (stop_searching || linear || (!p_ic && noic) || orgpat.regmatch.rm_ic)
718 ! orgpat.regmatch.rm_ic = TRUE; /* try another time while ignoring case */
727 ! vim_free(pats->regmatch.regprog);
729 #ifdef FEAT_EMACS_TAGS
735 ! vim_free(orgpat.regmatch.regprog);
737 #ifdef FEAT_EMACS_TAGS
739 *** ../vim-7.3.335/src/testdir/Make_amiga.mak 2011-07-15 21:16:54.000000000 +0200
740 --- src/testdir/Make_amiga.mak 2011-10-12 19:21:00.000000000 +0200
743 test66.out test67.out test68.out test69.out test70.out \
744 test71.out test72.out test73.out test74.out test75.out \
745 test76.out test77.out test78.out test79.out test80.out \
746 ! test81.out test82.out
751 test66.out test67.out test68.out test69.out test70.out \
752 test71.out test72.out test73.out test74.out test75.out \
753 test76.out test77.out test78.out test79.out test80.out \
754 ! test81.out test82.out test83.out
761 test80.out: test80.in
762 test81.out: test81.in
763 test82.out: test82.in
764 + test83.out: test83.in
765 *** ../vim-7.3.335/src/testdir/Make_dos.mak 2011-07-15 21:16:54.000000000 +0200
766 --- src/testdir/Make_dos.mak 2011-10-12 17:39:03.000000000 +0200
769 test42.out test52.out test65.out test66.out test67.out \
770 test68.out test69.out test71.out test72.out test73.out \
771 test74.out test75.out test76.out test77.out test78.out \
772 ! test79.out test80.out test81.out test82.out
774 SCRIPTS32 = test50.out test70.out
777 test42.out test52.out test65.out test66.out test67.out \
778 test68.out test69.out test71.out test72.out test73.out \
779 test74.out test75.out test76.out test77.out test78.out \
780 ! test79.out test80.out test81.out test82.out test83.out
782 SCRIPTS32 = test50.out test70.out
784 *** ../vim-7.3.335/src/testdir/Make_ming.mak 2011-07-15 21:16:54.000000000 +0200
785 --- src/testdir/Make_ming.mak 2011-10-12 17:39:03.000000000 +0200
788 test42.out test52.out test65.out test66.out test67.out \
789 test68.out test69.out test71.out test72.out test73.out \
790 test74.out test75.out test76.out test77.out test78.out \
791 ! test79.out test80.out test81.out test82.out
793 SCRIPTS32 = test50.out test70.out
796 test42.out test52.out test65.out test66.out test67.out \
797 test68.out test69.out test71.out test72.out test73.out \
798 test74.out test75.out test76.out test77.out test78.out \
799 ! test79.out test80.out test81.out test82.out test83.out
801 SCRIPTS32 = test50.out test70.out
803 *** ../vim-7.3.335/src/testdir/Make_os2.mak 2011-07-15 21:16:54.000000000 +0200
804 --- src/testdir/Make_os2.mak 2011-10-12 17:39:03.000000000 +0200
807 test66.out test67.out test68.out test69.out test70.out \
808 test71.out test72.out test73.out test74.out test75.out \
809 test76.out test77.out test78.out test79.out test80.out \
810 ! test81.out test82.out
815 test66.out test67.out test68.out test69.out test70.out \
816 test71.out test72.out test73.out test74.out test75.out \
817 test76.out test77.out test78.out test79.out test80.out \
818 ! test81.out test82.out test83.out
822 *** ../vim-7.3.335/src/testdir/Make_vms.mms 2011-07-15 21:16:54.000000000 +0200
823 --- src/testdir/Make_vms.mms 2011-10-12 17:39:03.000000000 +0200
826 test66.out test67.out test68.out test69.out \
827 test71.out test72.out test74.out test75.out test76.out \
828 test77.out test78.out test79.out test80.out test81.out \
832 # Test 30: a problem around mac format - unknown reason
834 test66.out test67.out test68.out test69.out \
835 test71.out test72.out test74.out test75.out test76.out \
836 test77.out test78.out test79.out test80.out test81.out \
837 ! test82.out test83.out
840 # Test 30: a problem around mac format - unknown reason
841 *** ../vim-7.3.335/src/testdir/Makefile 2011-07-15 21:16:54.000000000 +0200
842 --- src/testdir/Makefile 2011-10-12 17:39:03.000000000 +0200
845 test64.out test65.out test66.out test67.out test68.out \
846 test69.out test70.out test71.out test72.out test73.out \
847 test74.out test75.out test76.out test77.out test78.out \
848 ! test79.out test80.out test81.out test82.out
850 SCRIPTS_GUI = test16.out
853 test64.out test65.out test66.out test67.out test68.out \
854 test69.out test70.out test71.out test72.out test73.out \
855 test74.out test75.out test76.out test77.out test78.out \
856 ! test79.out test80.out test81.out test82.out test83.out
858 SCRIPTS_GUI = test16.out
863 else echo $* NO OUTPUT >>test.log; \
865 ! -rm -rf X* test.ok viminfo
867 test49.out: test49.vim
871 else echo $* NO OUTPUT >>test.log; \
873 ! # -rm -rf X* test.ok viminfo
875 test49.out: test49.vim
877 *** ../vim-7.3.335/src/testdir/test83-tags2 2011-10-12 19:49:38.000000000 +0200
878 --- src/testdir/test83-tags2 2011-10-12 19:34:15.000000000 +0200
882 + !_TAG_FILE_ENCODING cp932 //
883 +
\82`
\82a
\82b Xtags2.txt /
\82`
\82a
\82b
884 *** ../vim-7.3.335/src/testdir/test83-tags3 2011-10-12 19:49:38.000000000 +0200
885 --- src/testdir/test83-tags3 2011-10-12 19:35:42.000000000 +0200
889 + !_TAG_FILE_SORTED 1 //
890 + !_TAG_FILE_ENCODING cp932 //
891 + abc1 Xtags3.txt /
\82`
\82a
\82b
892 + abc2 Xtags3.txt /
\82`
\82a
\82b
893 + abc3 Xtags3.txt /
\82`
\82a
\82b
894 + abc4 Xtags3.txt /
\82`
\82a
\82b
895 + abc5 Xtags3.txt /
\82`
\82a
\82b
896 + abc6 Xtags3.txt /
\82`
\82a
\82b
897 + abc7 Xtags3.txt /
\82`
\82a
\82b
898 + abc8 Xtags3.txt /
\82`
\82a
\82b
899 + abc9 Xtags3.txt /
\82`
\82a
\82b
900 + abc10 Xtags3.txt /
\82`
\82a
\82b
901 + abc11 Xtags3.txt /
\82`
\82a
\82b
902 + abc12 Xtags3.txt /
\82`
\82a
\82b
903 + abc13 Xtags3.txt /
\82`
\82a
\82b
904 + abc14 Xtags3.txt /
\82`
\82a
\82b
905 + abc15 Xtags3.txt /
\82`
\82a
\82b
906 + abc16 Xtags3.txt /
\82`
\82a
\82b
907 + abc17 Xtags3.txt /
\82`
\82a
\82b
908 + abc18 Xtags3.txt /
\82`
\82a
\82b
909 + abc19 Xtags3.txt /
\82`
\82a
\82b
910 + abc20 Xtags3.txt /
\82`
\82a
\82b
911 + abc21 Xtags3.txt /
\82`
\82a
\82b
912 + abc22 Xtags3.txt /
\82`
\82a
\82b
913 + abc23 Xtags3.txt /
\82`
\82a
\82b
914 + abc24 Xtags3.txt /
\82`
\82a
\82b
915 + abc25 Xtags3.txt /
\82`
\82a
\82b
916 + abc26 Xtags3.txt /
\82`
\82a
\82b
917 + abc27 Xtags3.txt /
\82`
\82a
\82b
918 + abc28 Xtags3.txt /
\82`
\82a
\82b
919 + abc29 Xtags3.txt /
\82`
\82a
\82b
920 + abc30 Xtags3.txt /
\82`
\82a
\82b
921 + abc31 Xtags3.txt /
\82`
\82a
\82b
922 + abc32 Xtags3.txt /
\82`
\82a
\82b
923 + abc33 Xtags3.txt /
\82`
\82a
\82b
924 + abc34 Xtags3.txt /
\82`
\82a
\82b
925 + abc35 Xtags3.txt /
\82`
\82a
\82b
926 + abc36 Xtags3.txt /
\82`
\82a
\82b
927 + abc37 Xtags3.txt /
\82`
\82a
\82b
928 + abc38 Xtags3.txt /
\82`
\82a
\82b
929 + abc39 Xtags3.txt /
\82`
\82a
\82b
930 + abc40 Xtags3.txt /
\82`
\82a
\82b
931 + abc41 Xtags3.txt /
\82`
\82a
\82b
932 + abc42 Xtags3.txt /
\82`
\82a
\82b
933 + abc43 Xtags3.txt /
\82`
\82a
\82b
934 + abc44 Xtags3.txt /
\82`
\82a
\82b
935 + abc45 Xtags3.txt /
\82`
\82a
\82b
936 + abc46 Xtags3.txt /
\82`
\82a
\82b
937 + abc47 Xtags3.txt /
\82`
\82a
\82b
938 + abc48 Xtags3.txt /
\82`
\82a
\82b
939 + abc49 Xtags3.txt /
\82`
\82a
\82b
940 + abc50 Xtags3.txt /
\82`
\82a
\82b
941 + abc51 Xtags3.txt /
\82`
\82a
\82b
942 + abc52 Xtags3.txt /
\82`
\82a
\82b
943 + abc53 Xtags3.txt /
\82`
\82a
\82b
944 + abc54 Xtags3.txt /
\82`
\82a
\82b
945 + abc55 Xtags3.txt /
\82`
\82a
\82b
946 + abc56 Xtags3.txt /
\82`
\82a
\82b
947 + abc57 Xtags3.txt /
\82`
\82a
\82b
948 + abc58 Xtags3.txt /
\82`
\82a
\82b
949 + abc59 Xtags3.txt /
\82`
\82a
\82b
950 + abc60 Xtags3.txt /
\82`
\82a
\82b
951 + abc61 Xtags3.txt /
\82`
\82a
\82b
952 + abc62 Xtags3.txt /
\82`
\82a
\82b
953 + abc63 Xtags3.txt /
\82`
\82a
\82b
954 + abc64 Xtags3.txt /
\82`
\82a
\82b
955 + abc65 Xtags3.txt /
\82`
\82a
\82b
956 + abc66 Xtags3.txt /
\82`
\82a
\82b
957 + abc67 Xtags3.txt /
\82`
\82a
\82b
958 + abc68 Xtags3.txt /
\82`
\82a
\82b
959 + abc69 Xtags3.txt /
\82`
\82a
\82b
960 + abc70 Xtags3.txt /
\82`
\82a
\82b
961 + abc71 Xtags3.txt /
\82`
\82a
\82b
962 + abc72 Xtags3.txt /
\82`
\82a
\82b
963 + abc73 Xtags3.txt /
\82`
\82a
\82b
964 + abc74 Xtags3.txt /
\82`
\82a
\82b
965 + abc75 Xtags3.txt /
\82`
\82a
\82b
966 + abc76 Xtags3.txt /
\82`
\82a
\82b
967 + abc77 Xtags3.txt /
\82`
\82a
\82b
968 + abc78 Xtags3.txt /
\82`
\82a
\82b
969 + abc79 Xtags3.txt /
\82`
\82a
\82b
970 + abc80 Xtags3.txt /
\82`
\82a
\82b
971 + abc81 Xtags3.txt /
\82`
\82a
\82b
972 + abc82 Xtags3.txt /
\82`
\82a
\82b
973 + abc83 Xtags3.txt /
\82`
\82a
\82b
974 + abc84 Xtags3.txt /
\82`
\82a
\82b
975 + abc85 Xtags3.txt /
\82`
\82a
\82b
976 + abc86 Xtags3.txt /
\82`
\82a
\82b
977 + abc87 Xtags3.txt /
\82`
\82a
\82b
978 + abc88 Xtags3.txt /
\82`
\82a
\82b
979 + abc89 Xtags3.txt /
\82`
\82a
\82b
980 + abc90 Xtags3.txt /
\82`
\82a
\82b
981 + abc91 Xtags3.txt /
\82`
\82a
\82b
982 + abc92 Xtags3.txt /
\82`
\82a
\82b
983 + abc93 Xtags3.txt /
\82`
\82a
\82b
984 + abc94 Xtags3.txt /
\82`
\82a
\82b
985 + abc95 Xtags3.txt /
\82`
\82a
\82b
986 + abc96 Xtags3.txt /
\82`
\82a
\82b
987 + abc97 Xtags3.txt /
\82`
\82a
\82b
988 + abc98 Xtags3.txt /
\82`
\82a
\82b
989 + abc99 Xtags3.txt /
\82`
\82a
\82b
990 + abc100 Xtags3.txt /
\82`
\82a
\82b
991 *** ../vim-7.3.335/src/testdir/test83.in 2011-10-12 19:49:38.000000000 +0200
992 --- src/testdir/test83.in 2011-10-12 19:40:47.000000000 +0200
996 + Tests for tag search with !_TAG_FILE_ENCODING.
1007 + :/^text for tags1$/,/^text for tags1$/+1w! Xtags1.txt
1008 + :/^text for tags2$/,/^text for tags2$/+1w! Xtags2.txt
1009 + :/^text for tags3$/,/^text for tags3$/+1w! Xtags3.txt
1010 + :/^tags1$/+1,/^tags1-end$/-1w! Xtags1
1014 + :call setline('.', 'Results of test83')
1019 + :let v:errmsg = ''
1020 + :tag abcdefghijklmnopqrs
1021 + :if v:errmsg =~ 'E426:' || getline('.') != 'abcdefghijklmnopqrs'
1023 + : put ='case1: failed'
1026 + : put ='case1: ok'
1031 + :set tags=test83-tags2
1032 + :let v:errmsg = ''
1034 + :if v:errmsg =~ 'E426:' || getline('.') != 'ABC'
1036 + : put ='case2: failed'
1039 + : put ='case2: ok'
1044 + :set tags=test83-tags3
1045 + :let v:errmsg = ''
1047 + :if v:errmsg =~ 'E426:' || getline('.') != 'ABC'
1049 + : put ='case3: failed'
1052 + : put ='case3: ok'
1060 + abcdefghijklmnopqrs
1069 + !_TAG_FILE_ENCODING utf-8 //
1070 + abcdefghijklmnopqrs Xtags1.txt /abcdefghijklmnopqrs
1072 *** ../vim-7.3.335/src/testdir/test83.ok 2011-10-12 19:49:38.000000000 +0200
1073 --- src/testdir/test83.ok 2011-10-12 17:39:03.000000000 +0200
1081 *** ../vim-7.3.335/src/version.c 2011-10-12 16:57:07.000000000 +0200
1082 --- src/version.c 2011-10-12 19:45:46.000000000 +0200
1086 { /* Add new patch number below this line */
1093 hundred-and-one symptoms of being an internet addict:
1094 62. If your doorbell rings, you think that new mail has arrived. And then
1095 you're disappointed that it's only someone at the door.
1097 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
1098 /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
1099 \\\ an exciting new programming language -- http://www.Zimbu.org ///
1100 \\\ help me help AIDS victims -- http://ICCF-Holland.org ///