summaryrefslogtreecommitdiffstats
path: root/action.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-03-05 12:08:52 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-03-05 12:08:52 +0000
commit6936c4e5a0bd4bddcfd7c9d08d801aba0415dbad (patch)
treee85d890b346e499d7bd9aab58c9c512adfbdae36 /action.c
parent9e132a57b087be87cd731dd96397d9cc75b7bfa3 (diff)
downloadmandoc-6936c4e5a0bd4bddcfd7c9d08d801aba0415dbad.tar.gz
Added argv regression tests.
Table-ised argument flags in argv.c.
Diffstat (limited to 'action.c')
-rw-r--r--action.c39
1 files changed, 35 insertions, 4 deletions
diff --git a/action.c b/action.c
index 90a75c46..06b93509 100644
--- a/action.c
+++ b/action.c
@@ -39,11 +39,12 @@ struct actions {
static int post_bl(struct mdoc *);
static int post_bl_width(struct mdoc *);
static int post_bl_tagwidth(struct mdoc *);
-static int post_sh(struct mdoc *);
-static int post_os(struct mdoc *);
-static int post_dt(struct mdoc *);
static int post_dd(struct mdoc *);
+static int post_dt(struct mdoc *);
+static int post_ex(struct mdoc *);
static int post_nm(struct mdoc *);
+static int post_os(struct mdoc *);
+static int post_sh(struct mdoc *);
static int post_prologue(struct mdoc *);
@@ -72,7 +73,7 @@ const struct actions mdoc_actions[MDOC_MAX] = {
{ NULL }, /* Dv */
{ NULL }, /* Er */
{ NULL }, /* Ev */
- { NULL }, /* Ex */
+ { post_ex }, /* Ex */
{ NULL }, /* Fa */
{ NULL }, /* Fd */
{ NULL }, /* Fl */
@@ -160,6 +161,36 @@ const struct actions mdoc_actions[MDOC_MAX] = {
static int
+post_ex(struct mdoc *mdoc)
+{
+
+ /*
+ * If `.Ex -std' is invoked without an argument, fill it in with
+ * our name (if it's been set).
+ */
+
+ if (0 == mdoc->last->data.elem.argc)
+ return(1);
+
+ assert(1 == mdoc->last->data.elem.argc);
+ if (1 == mdoc->last->data.elem.argv[0].sz)
+ return(1);
+ assert(0 == mdoc->last->data.elem.argv[0].sz);
+
+ if (NULL == mdoc->meta.name)
+ return(mdoc_err(mdoc, "default name not yet set"));
+
+ mdoc_msg(mdoc, "writing %s argument: %s",
+ mdoc_argnames[MDOC_Std], mdoc->meta.name);
+
+ mdoc->last->data.elem.argv[0].sz = 1;
+ mdoc->last->data.elem.argv[0].value = xcalloc(1, sizeof(char *));
+ mdoc->last->data.elem.argv[0].value[0] = xstrdup(mdoc->meta.name);
+ return(1);
+}
+
+
+static int
post_nm(struct mdoc *mdoc)
{
char buf[64];