summaryrefslogtreecommitdiffstatshomepage
path: root/mdoc.h
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-03-08 11:41:22 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-03-08 11:41:22 +0000
commit6b2defb0f921c22df14e94ce0098640d4401303e (patch)
treeb4088b5d8253e5f241001d599644d414ecfd56bd /mdoc.h
parenta454003ad67073a51037d0dc5dcbf5b3cced1b8e (diff)
downloadmandoc-6b2defb0f921c22df14e94ce0098640d4401303e.tar.gz
mandoc-6b2defb0f921c22df14e94ce0098640d4401303e.tar.zst
mandoc-6b2defb0f921c22df14e94ce0098640d4401303e.zip
BROKEN CHECK-IN. Wide-ranging updates.
Removed libmdoc internal argv limit (all dynamic). Removed "data" union in mdoc_node (to be selectively re-added).
Diffstat (limited to 'mdoc.h')
-rw-r--r--mdoc.h54
1 files changed, 21 insertions, 33 deletions
diff --git a/mdoc.h b/mdoc.h
index 7c066973..39b88d47 100644
--- a/mdoc.h
+++ b/mdoc.h
@@ -1,4 +1,4 @@
-/* $Id: mdoc.h,v 1.37 2009/03/06 14:13:47 kristaps Exp $ */
+/* $Id: mdoc.h,v 1.38 2009/03/08 11:41:22 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -173,15 +173,6 @@ enum mdoc_warn {
WARN_COMPAT
};
-/* An argument to a macro (multiple values = `It -column'). */
-struct mdoc_arg {
- int arg;
- int line;
- int pos;
- size_t sz;
- char **value;
-};
-
/* Type of a syntax node. */
enum mdoc_type {
MDOC_TEXT,
@@ -229,31 +220,19 @@ struct mdoc_meta {
char *name;
};
-/* Text-only node. */
-struct mdoc_text {
- char *string;
-};
-
-/* Block (scoped) node. */
-struct mdoc_block {
- size_t argc;
- struct mdoc_arg *argv;
- struct mdoc_node *head;
- struct mdoc_node *body;
- struct mdoc_node *tail;
+/* An argument to a macro (multiple values = `It -column'). */
+struct mdoc_argv {
+ int arg;
+ int line;
+ int pos;
+ size_t sz;
+ char **value;
};
-/* In-line element node. */
-struct mdoc_elem {
+struct mdoc_arg {
size_t argc;
- struct mdoc_arg *argv;
-};
-
-/* Typed nodes of an AST node. */
-union mdoc_data {
- struct mdoc_text text;
- struct mdoc_elem elem;
- struct mdoc_block block;
+ struct mdoc_argv *argv;
+ unsigned int refcnt;
};
/* Node in AST. */
@@ -269,10 +248,16 @@ struct mdoc_node {
#define MDOC_VALID (1 << 0)
#define MDOC_ACTED (1 << 1)
enum mdoc_type type;
- union mdoc_data data;
enum mdoc_sec sec;
+ struct mdoc_arg *args; /* BLOCK/ELEM */
+ struct mdoc_node *head; /* BLOCK */
+ struct mdoc_node *body; /* BLOCK */
+ struct mdoc_node *tail; /* BLOCK */
+ char *string; /* TEXT */
};
+#define MDOC_IGN_SCOPE (1 << 0)
+
/* Call-backs for parse messages. */
struct mdoc_cb {
void (*mdoc_msg)(void *, int, int, const char *);
@@ -297,6 +282,9 @@ void mdoc_free(struct mdoc *);
/* Allocate a new parser instance. */
struct mdoc *mdoc_alloc(void *data, const struct mdoc_cb *);
+/* Set parse options. */
+void mdoc_setflags(struct mdoc *, int);
+
/* Parse a single line in a stream (boolean retval). */
int mdoc_parseln(struct mdoc *, int, char *buf);