summaryrefslogtreecommitdiff
path: root/src/regexp_nfa.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-01-31 15:34:40 +0100
committerBram Moolenaar <Bram@vim.org>2019-01-31 15:34:40 +0100
commit221cd9f4dd866503777b2fffa721c1403716ad63 (patch)
treee852c86a815d0f8667655a6a9c1ac920b2925620 /src/regexp_nfa.c
parent60f807b3f71a92881e2b3bf48bd016294957130e (diff)
downloadvim-git-221cd9f4dd866503777b2fffa721c1403716ad63.tar.gz
patch 8.1.0862: no verbose version of character classesv8.1.0862
Problem: No verbose version of character classes. Solution: Add [:ident:], [:keyword:] and [:fname:]. (Ozaki Kiichi, closes #1373)
Diffstat (limited to 'src/regexp_nfa.c')
-rw-r--r--src/regexp_nfa.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index 863ad6cac..031a6cf20 100644
--- 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 */