Mercurial > vim
diff src/regexp_nfa.c @ 15709:2e2f07561f4b v8.1.0862
patch 8.1.0862: no verbose version of character classes
commit https://github.com/vim/vim/commit/221cd9f4dd866503777b2fffa721c1403716ad63
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jan 31 15:34:40 2019 +0100
patch 8.1.0862: no verbose version of character classes
Problem: No verbose version of character classes.
Solution: Add [:ident:], [:keyword:] and [:fname:]. (Ozaki Kiichi,
closes #1373)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 31 Jan 2019 15:45:06 +0100 |
parents | 639b8318472c |
children | 481452f6687c |
line wrap: on
line diff
--- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -226,7 +226,10 @@ enum NFA_CLASS_TAB, NFA_CLASS_RETURN, NFA_CLASS_BACKSPACE, - NFA_CLASS_ESCAPE + NFA_CLASS_ESCAPE, + NFA_CLASS_IDENT, + NFA_CLASS_KEYWORD, + NFA_CLASS_FNAME }; /* Keep in sync with classchars. */ @@ -1718,6 +1721,15 @@ collection: case CLASS_ESCAPE: EMIT(NFA_CLASS_ESCAPE); break; + case CLASS_IDENT: + EMIT(NFA_CLASS_IDENT); + break; + case CLASS_KEYWORD: + EMIT(NFA_CLASS_KEYWORD); + break; + case CLASS_FNAME: + EMIT(NFA_CLASS_FNAME); + break; } EMIT(NFA_CONCAT); continue; @@ -2555,6 +2567,9 @@ nfa_set_code(int c) case NFA_CLASS_RETURN: STRCPY(code, "NFA_CLASS_RETURN"); break; case NFA_CLASS_BACKSPACE: STRCPY(code, "NFA_CLASS_BACKSPACE"); break; case NFA_CLASS_ESCAPE: STRCPY(code, "NFA_CLASS_ESCAPE"); break; + case NFA_CLASS_IDENT: STRCPY(code, "NFA_CLASS_IDENT"); break; + case NFA_CLASS_KEYWORD: STRCPY(code, "NFA_CLASS_KEYWORD"); break; + case NFA_CLASS_FNAME: STRCPY(code, "NFA_CLASS_FNAME"); break; case NFA_ANY: STRCPY(code, "NFA_ANY"); break; case NFA_IDENT: STRCPY(code, "NFA_IDENT"); break; @@ -4846,6 +4861,18 @@ check_char_class(int class, int c) if (c == '\033') return OK; break; + case NFA_CLASS_IDENT: + if (vim_isIDc(c)) + return OK; + break; + case NFA_CLASS_KEYWORD: + if (reg_iswordc(c)) + return OK; + break; + case NFA_CLASS_FNAME: + if (vim_isfilec(c)) + return OK; + break; default: /* should not be here :P */