diff options
author | Joerg Sonnenberger <joerg@netbsd.org> | 2010-05-17 10:50:32 +0000 |
---|---|---|
committer | Joerg Sonnenberger <joerg@netbsd.org> | 2010-05-17 10:50:32 +0000 |
commit | cd208154160c314b92ccdae3cea9a52982cd7c65 (patch) | |
tree | ee80635d271cdff276deb89dbf4eb8f40e9b7b30 /man_action.c | |
parent | 2d627d830fbf25aceab34e2105f73213f8294fd2 (diff) | |
download | mandoc-cd208154160c314b92ccdae3cea9a52982cd7c65.tar.gz |
Add support for .AT. Properly implement .UC. Add regress tests.
Diffstat (limited to 'man_action.c')
-rw-r--r-- | man_action.c | 84 |
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); +} |