/*
node == NULL + empty children list means "no match"
+ XXX still valid?
*/
struct ec_parsed {
TAILQ_ENTRY(ec_parsed) next;
struct ec_parsed *parent;
const struct ec_node *node;
struct ec_strvec *strvec;
+ struct ec_keyval *attrs;
};
struct ec_parsed *ec_parsed(void);
/* XXX we could use a cache to store possible completions or match: the
* cache would be per-node, and would be reset for each call to parse()
- * or complete() ? */
+ * or complete() ? ... not sure, since parse result can depend on state
+ */
/* a NULL return value is an error, with errno set
ENOTSUP: no ->parse() operation
*/
* EC_PARSED_NOMATCH (negative) if it does not match
* any other negative value (-errno) for other errors
* the number of matched strings in strvec
+ * XXX state is not freed on error ?
*/
int ec_node_parse_child(struct ec_node *node,
struct ec_parsed *state,
struct ec_parsed *child);
void ec_parsed_del_child(struct ec_parsed *parsed,
struct ec_parsed *child);
+
struct ec_parsed *ec_parsed_get_root(struct ec_parsed *parsed);
+struct ec_parsed *ec_parsed_get_parent(struct ec_parsed *parsed);
struct ec_parsed *ec_parsed_get_last_child(struct ec_parsed *parsed);
void ec_parsed_del_last_child(struct ec_parsed *parsed);
+int ec_parsed_get_path(struct ec_parsed *parsed, struct ec_node **path);
void ec_parsed_dump(FILE *out, const struct ec_parsed *parsed);