summaryrefslogtreecommitdiffstats
path: root/man_action.c
diff options
context:
space:
mode:
authorJoerg Sonnenberger <joerg@netbsd.org>2010-05-17 10:50:32 +0000
committerJoerg Sonnenberger <joerg@netbsd.org>2010-05-17 10:50:32 +0000
commitcd208154160c314b92ccdae3cea9a52982cd7c65 (patch)
treeee80635d271cdff276deb89dbf4eb8f40e9b7b30 /man_action.c
parent2d627d830fbf25aceab34e2105f73213f8294fd2 (diff)
downloadmandoc-cd208154160c314b92ccdae3cea9a52982cd7c65.tar.gz
Add support for .AT. Properly implement .UC. Add regress tests.
Diffstat (limited to 'man_action.c')
-rw-r--r--man_action.c84
1 files changed, 83 insertions, 1 deletions
diff --git a/man_action.c b/man_action.c
index cf3e0e1b..ffa2b943 100644
--- a/man_action.c
+++ b/man_action.c
@@ -32,6 +32,8 @@ struct actions {
static int post_TH(struct man *);
static int post_fi(struct man *);
static int post_nf(struct man *);
+static int post_AT(struct man *);
+static int post_UC(struct man *);
const struct actions man_actions[MAN_MAX] = {
{ NULL }, /* br */
@@ -64,11 +66,12 @@ const struct actions man_actions[MAN_MAX] = {
{ NULL }, /* RE */
{ NULL }, /* RS */
{ NULL }, /* DT */
- { NULL }, /* UC */
+ { post_UC }, /* UC */
{ NULL }, /* PD */
{ NULL }, /* Sp */
{ post_nf }, /* Vb */
{ post_fi }, /* Ve */
+ { post_AT }, /* AT */
};
@@ -180,3 +183,82 @@ post_TH(struct man *m)
man_node_delete(m, m->last);
return(1);
}
+
+
+static int
+post_AT(struct man *m)
+{
+ static const char * const unix_versions[] = {
+ "7th Edition",
+ "System III",
+ "System V",
+ "System V Release 2",
+ };
+
+ const char *p, *s;
+ struct man_node *n, *nn;
+
+ n = m->last->child;
+
+ if (NULL == n || MAN_TEXT != n->type)
+ p = unix_versions[0];
+ else {
+ s = n->string;
+ if (0 == strcmp(s, "3"))
+ p = unix_versions[0];
+ else if (0 == strcmp(s, "4"))
+ p = unix_versions[1];
+ else if (0 == strcmp(s, "5")) {
+ nn = n->next;
+ if (nn && MAN_TEXT == nn->type && nn->string[0])
+ p = unix_versions[3];
+ else
+ p = unix_versions[2];
+ } else
+ p = unix_versions[0];
+ }
+
+ m->meta.source = mandoc_strdup(p);
+
+ return(1);
+}
+
+
+static int
+post_UC(struct man *m)
+{
+ static const char * const bsd_versions[] = {
+ "3rd Berkeley Distribution",
+ "4th Berkeley Distribution",
+ "4.2 Berkeley Distribution",
+ "4.3 Berkeley Distribution",
+ "4.4 Berkeley Distribution",
+ };
+
+ const char *p, *s;
+ struct man_node *n;
+
+ n = m->last->child;
+
+ if (NULL == n || MAN_TEXT != n->type)
+ p = bsd_versions[0];
+ else {
+ s = n->string;
+ if (0 == strcmp(s, "3"))
+ p = bsd_versions[0];
+ else if (0 == strcmp(s, "4"))
+ p = bsd_versions[1];
+ else if (0 == strcmp(s, "5"))
+ p = bsd_versions[2];
+ else if (0 == strcmp(s, "6"))
+ p = bsd_versions[3];
+ else if (0 == strcmp(s, "7"))
+ p = bsd_versions[4];
+ else
+ p = bsd_versions[0];
+ }
+
+ m->meta.source = mandoc_strdup(p);
+
+ return(1);
+}