summaryrefslogtreecommitdiff
path: root/src/regexp.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.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.c')
-rw-r--r--src/regexp.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/regexp.c b/src/regexp.c
index 20894ea72..9e6cf702d 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -484,6 +484,12 @@ get_char_class(char_u **pp)
#define CLASS_BACKSPACE 14
"escape:]",
#define CLASS_ESCAPE 15
+ "ident:]",
+#define CLASS_IDENT 16
+ "keyword:]",
+#define CLASS_KEYWORD 17
+ "fname:]",
+#define CLASS_FNAME 18
};
#define CLASS_NONE 99
int i;
@@ -698,6 +704,7 @@ static char_u *re_put_long(char_u *pr, long_u val);
static int read_limits(long *, long *);
static void regtail(char_u *, char_u *);
static void regoptail(char_u *, char_u *);
+static int reg_iswordc(int);
static regengine_T bt_regengine;
static regengine_T nfa_regengine;
@@ -2545,6 +2552,21 @@ collection:
case CLASS_ESCAPE:
regc('\033');
break;
+ case CLASS_IDENT:
+ for (cu = 1; cu <= 255; cu++)
+ if (vim_isIDc(cu))
+ regmbc(cu);
+ break;
+ case CLASS_KEYWORD:
+ for (cu = 1; cu <= 255; cu++)
+ if (reg_iswordc(cu))
+ regmbc(cu);
+ break;
+ case CLASS_FNAME:
+ for (cu = 1; cu <= 255; cu++)
+ if (vim_isfilec(cu))
+ regmbc(cu);
+ break;
}
}
else
@@ -3590,6 +3612,16 @@ free_regexp_stuff(void)
#endif
/*
+ * Return TRUE if character 'c' is included in 'iskeyword' option for
+ * "reg_buf" buffer.
+ */
+ static int
+reg_iswordc(int c)
+{
+ return vim_iswordc_buf(c, rex.reg_buf);
+}
+
+/*
* Get pointer to the line "lnum", which is relative to "reg_firstlnum".
*/
static char_u *