diff --git a/7.3.1019 b/7.3.1019 new file mode 100644 index 0000000..481bce0 --- /dev/null +++ b/7.3.1019 @@ -0,0 +1,152 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.1019 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.1019 +Problem: These do not work with the new regexp engine: \%o123, \%x123, + \%d123, \%u123 and \%U123. +Solution: Implement these items. +Files: src/regexp_nfa.c + + +*** ../vim-7.3.1018/src/regexp_nfa.c 2013-05-25 21:18:30.000000000 +0200 +--- src/regexp_nfa.c 2013-05-25 21:56:16.000000000 +0200 +*************** +*** 604,610 **** + char_u *endp; + #ifdef FEAT_MBYTE + char_u *old_regparse = regparse; +- int clen; + int i; + #endif + int extra = 0; +--- 604,609 ---- +*************** +*** 623,637 **** + cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL; + + c = getchr(); +- +- #ifdef FEAT_MBYTE +- /* clen has the length of the current char, without composing chars */ +- clen = (*mb_char2len)(c); +- if (has_mbyte && clen > 1) +- goto nfa_do_multibyte; +- #endif + switch (c) + { + case Magic('^'): + EMIT(NFA_BOL); + break; +--- 622,633 ---- + cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL; + + c = getchr(); + switch (c) + { ++ case NUL: ++ syntax_error = TRUE; ++ EMSG_RET_FAIL(_("E865: (NFA) Regexp end encountered prematurely")); ++ + case Magic('^'): + EMIT(NFA_BOL); + break; +*************** +*** 747,756 **** + return FAIL; /* cascaded error */ + break; + +- case NUL: +- syntax_error = TRUE; +- EMSG_RET_FAIL(_("E865: (NFA) Regexp end encountered prematurely")); +- + case Magic('|'): + case Magic('&'): + case Magic(')'): +--- 743,748 ---- +*************** +*** 834,844 **** + case 'x': /* %xab hex 2 */ + case 'u': /* %uabcd hex 4 */ + case 'U': /* %U1234abcd hex 8 */ +! /* Not yet supported */ +! return FAIL; + +! c = coll_get_char(); +! EMIT(c); + break; + + /* Catch \%^ and \%$ regardless of where they appear in the +--- 826,851 ---- + case 'x': /* %xab hex 2 */ + case 'u': /* %uabcd hex 4 */ + case 'U': /* %U1234abcd hex 8 */ +! { +! int i; + +! switch (c) +! { +! case 'd': i = getdecchrs(); break; +! case 'o': i = getoctchrs(); break; +! case 'x': i = gethexchrs(2); break; +! case 'u': i = gethexchrs(4); break; +! case 'U': i = gethexchrs(8); break; +! default: i = -1; break; +! } +! +! if (i < 0) +! EMSG2_RET_FAIL( +! _("E678: Invalid character after %s%%[dxouU]"), +! reg_magic == MAGIC_ALL); +! /* TODO: what if a composing character follows? */ +! EMIT(i); +! } + break; + + /* Catch \%^ and \%$ regardless of where they appear in the +*************** +*** 1217,1225 **** + int plen; + + nfa_do_multibyte: +! /* Length of current char with composing chars. */ +! if (enc_utf8 && (clen != (plen = (*mb_ptr2len)(old_regparse)) +! || utf_iscomposing(c))) + { + /* A base character plus composing characters, or just one + * or more composing characters. +--- 1224,1233 ---- + int plen; + + nfa_do_multibyte: +! /* plen is length of current char with composing chars */ +! if (enc_utf8 && ((*mb_char2len)(c) +! != (plen = (*mb_ptr2len)(old_regparse)) +! || utf_iscomposing(c))) + { + /* A base character plus composing characters, or just one + * or more composing characters. +*** ../vim-7.3.1018/src/version.c 2013-05-25 21:18:30.000000000 +0200 +--- src/version.c 2013-05-25 22:00:51.000000000 +0200 +*************** +*** 730,731 **** +--- 730,733 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1019, + /**/ + +-- +The budget process was invented by an alien race of sadistic beings who +resemble large cats. + (Scott Adams - The Dilbert principle) + + /// 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 ///