| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.1019 |
| 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.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 |
| |
| |
| |
| |
| |
| *** 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. |
| |
| |
| |
| *** 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 /// |