summaryrefslogtreecommitdiff
path: root/Src/Zle/comp.h
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2008-06-08 17:53:53 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2008-06-08 17:53:53 +0000
commitbb68ee8db7971b683fba7dd7bf404186872ba7cf (patch)
treece1f5ebe661c12386675eb3ca98521280d521a0b /Src/Zle/comp.h
parent2dcc8627c9f4be547e6e49c76d45bea70c714a71 (diff)
downloadzsh-bb68ee8db7971b683fba7dd7bf404186872ba7cf.tar.gz
zsh-bb68ee8db7971b683fba7dd7bf404186872ba7cf.zip
25138(? mailing list stuck): rewrite of completion matching.
Will one day use multibyte/wide characters, doesn't yet.
Diffstat (limited to 'Src/Zle/comp.h')
-rw-r--r--Src/Zle/comp.h41
1 files changed, 39 insertions, 2 deletions
diff --git a/Src/Zle/comp.h b/Src/Zle/comp.h
index bcad3df05..7ac051c25 100644
--- a/Src/Zle/comp.h
+++ b/Src/Zle/comp.h
@@ -162,12 +162,49 @@ struct cmatcher {
#define CMF_RIGHT 4
#define CMF_INTER 8
+/*
+ * Types of cpattern structure.
+ * Note freecpattern() assumes any <= CPAT_EQUIV have string.
+ */
+enum {
+ CPAT_CCLASS, /* [...]: ordinary character class */
+ CPAT_NCLASS, /* [!...]: ordinary character class, negated */
+ CPAT_EQUIV, /* {...}: equivalence class */
+ CPAT_ANY, /* ?: any character */
+ CPAT_CHAR /* Single character given explicitly */
+};
+
+/*
+ * A pattern element in a matcher specification.
+ * Unlike normal patterns this only presents one character in
+ * either the test completion or the word on the command line.
+ */
struct cpattern {
Cpattern next; /* next sub-pattern */
- unsigned char tab[256]; /* table of matched characters */
- int equiv; /* if this is a {...} class */
+ int tp; /* type of object as above */
+ union {
+ char *str; /* if a character class, the objects
+ * in it in a similar form to normal
+ * pattern matching (a metafied string
+ * with tokens).
+ * Note the allocated length may be longer
+ * than the null-terminated string.
+ */
+ int chr; /* if a single character, it
+ * TODO: eventually should be a
+ * convchar_t.
+ */
+ } u;
};
+/*
+ * For now this just handles single-byte characters.
+ * TODO: this will change.
+ */
+#define PATMATCHRANGE(r, c, ip, mtp) patmatchrange(r, c, ip, mtp)
+#define PATMATCHINDEX(r, i, cp, mtp) patmatchindex(r, i, cp, mtp)
+#define CONVCAST(c) (c)
+
/* This is a special return value for parse_cmatcher(), *
* signalling an error. */