From 5625aa32a7011e20289ada22bc5924810dc97ce0 Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Wed, 11 Mar 2009 00:39:58 +0000 Subject: Expanded perfect htab to use 27 * 26 * 3 space. Added Brq, Bro and Brc macros. Added lbrace and rbrace to special characters. Fixed spacing in braces. --- action.c | 5 ++++- argv.c | 5 ++++- hash.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++---------------- macro.c | 13 ++++++++++++- mdoc.c | 5 +++-- mdoc.h | 7 +++++-- mdocterm.1 | 8 ++++++-- mdocterm.c | 6 +++++- term.c | 38 +++++++++++++++++++++++++++++++++--- term.h | 6 ++++-- validate.c | 5 ++++- 11 files changed, 131 insertions(+), 32 deletions(-) diff --git a/action.c b/action.c index b776d9e1..9fc1d2d0 100644 --- a/action.c +++ b/action.c @@ -1,4 +1,4 @@ -/* $Id: action.c,v 1.39 2009/03/09 14:19:59 kristaps Exp $ */ +/* $Id: action.c,v 1.40 2009/03/11 00:39:58 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -174,6 +174,9 @@ const struct actions mdoc_actions[MDOC_MAX] = { { NULL }, /* Lp */ { NULL }, /* Lk */ { NULL }, /* Mt */ + { NULL }, /* Brq */ + { NULL }, /* Bro */ + { NULL }, /* Brc */ }; diff --git a/argv.c b/argv.c index 8c283029..e617e143 100644 --- a/argv.c +++ b/argv.c @@ -1,4 +1,4 @@ -/* $Id: argv.c,v 1.47 2009/03/10 21:27:39 kristaps Exp $ */ +/* $Id: argv.c,v 1.48 2009/03/11 00:39:58 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -213,6 +213,9 @@ static int mdoc_argflags[MDOC_MAX] = { ARGS_DELIM, /* Lp */ ARGS_DELIM | ARGS_QUOTED, /* Lk */ ARGS_DELIM | ARGS_QUOTED, /* Mt */ + ARGS_DELIM, /* Brq */ + 0, /* Bro */ + ARGS_DELIM, /* Brc */ }; diff --git a/hash.c b/hash.c index 2814755b..fe6ce6c7 100644 --- a/hash.c +++ b/hash.c @@ -1,4 +1,4 @@ -/* $Id: hash.c,v 1.9 2009/03/10 10:20:03 kristaps Exp $ */ +/* $Id: hash.c,v 1.10 2009/03/11 00:39:58 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -45,7 +45,7 @@ mdoc_tokhash_alloc(void) int i, major, minor, ind; const void **htab; - htab = calloc(27 * 26, sizeof(struct mdoc_macro *)); + htab = calloc(27 * 26 * 3, sizeof(struct mdoc_macro *)); if (NULL == htab) err(1, "calloc"); @@ -74,9 +74,19 @@ mdoc_tokhash_alloc(void) assert(major >= 0 && major < 27); assert(minor >= 0 && minor < 26); - ind = (major * 27) + minor; + ind = (major * 27 * 3) + (minor * 3); - assert(NULL == htab[ind]); + if (NULL == htab[ind]) { + htab[ind] = &mdoc_macros[i]; + continue; + } + + if (NULL == htab[++ind]) { + htab[ind] = &mdoc_macros[i]; + continue; + } + + assert(NULL == htab[++ind]); htab[ind] = &mdoc_macros[i]; } @@ -118,25 +128,48 @@ mdoc_tokhash_find(const void *arg, const char *tmp) else minor = tmp[1] - 97; - ind = (major * 27) + minor; - if (ind < 0 || ind >= (27 * 26)) + ind = (major * 27 * 3) + (minor * 3); + if (ind < 0 || ind >= (27 * 26 * 3)) return(MDOC_MAX); - if (NULL == htab[ind]) - return(MDOC_MAX); + if (htab[ind]) { + slot = htab[ind] - /* LINTED */ + (void *)mdoc_macros; + assert(0 == (size_t)slot % sizeof(struct mdoc_macro)); + slot /= sizeof(struct mdoc_macro); + if (mdoc_macronames[slot][0] == tmp[0] && + mdoc_macronames[slot][1] == tmp[1] && + (0 == tmp[2] || + mdoc_macronames[slot][2] == tmp[2])) + return(slot); + ind++; + } + + if (htab[ind]) { + slot = htab[ind] - /* LINTED */ + (void *)mdoc_macros; + assert(0 == (size_t)slot % sizeof(struct mdoc_macro)); + slot /= sizeof(struct mdoc_macro); + if (mdoc_macronames[slot][0] == tmp[0] && + mdoc_macronames[slot][1] == tmp[1] && + (0 == tmp[2] || + mdoc_macronames[slot][2] == tmp[2])) + return(slot); + ind++; + } + if (NULL == htab[ind]) + return(MDOC_MAX); slot = htab[ind] - /* LINTED */ (void *)mdoc_macros; assert(0 == (size_t)slot % sizeof(struct mdoc_macro)); slot /= sizeof(struct mdoc_macro); + if (mdoc_macronames[slot][0] == tmp[0] && + mdoc_macronames[slot][1] == tmp[1] && + (0 == tmp[2] || + mdoc_macronames[slot][2] == tmp[2])) + return(slot); - if (mdoc_macronames[slot][0] != tmp[0]) - return(MDOC_MAX); - if (mdoc_macronames[slot][1] != tmp[1]) - return(MDOC_MAX); - if (tmp[2] && mdoc_macronames[slot][2] != tmp[2]) - return(MDOC_MAX); - - return(slot); + return(MDOC_MAX); } diff --git a/macro.c b/macro.c index becad97b..1c3200d2 100644 --- a/macro.c +++ b/macro.c @@ -1,4 +1,4 @@ -/* $Id: macro.c,v 1.65 2009/03/10 15:01:54 kristaps Exp $ */ +/* $Id: macro.c,v 1.66 2009/03/11 00:39:58 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -184,6 +184,9 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { { macro_text, 0 }, /* Lp */ { macro_text, MDOC_PARSED }, /* Lk */ { macro_text, MDOC_PARSED }, /* Mt */ + { macro_scoped_line, MDOC_CALLABLE | MDOC_PARSED }, /* Brq */ + { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Bro */ + { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Brc */ }; const struct mdoc_macro * const mdoc_macros = __mdoc_macros; @@ -326,6 +329,8 @@ rewind_alt(int tok) return(MDOC_Ao); case (MDOC_Bc): return(MDOC_Bo); + case (MDOC_Brc): + return(MDOC_Bro); case (MDOC_Dc): return(MDOC_Do); case (MDOC_Ec): @@ -375,6 +380,8 @@ rewind_dohalt(int tok, enum mdoc_type type, const struct mdoc_node *p) /* FALLTHROUGH */ case (MDOC_Bq): /* FALLTHROUGH */ + case (MDOC_Brq): + /* FALLTHROUGH */ case (MDOC_D1): /* FALLTHROUGH */ case (MDOC_Dl): @@ -429,6 +436,8 @@ rewind_dohalt(int tok, enum mdoc_type type, const struct mdoc_node *p) /* FALLTHROUGH */ case (MDOC_Bo): /* FALLTHROUGH */ + case (MDOC_Bro): + /* FALLTHROUGH */ case (MDOC_Do): /* FALLTHROUGH */ case (MDOC_Eo): @@ -455,6 +464,8 @@ rewind_dohalt(int tok, enum mdoc_type type, const struct mdoc_node *p) /* FALLTHROUGH */ case (MDOC_Bc): /* FALLTHROUGH */ + case (MDOC_Brc): + /* FALLTHROUGH */ case (MDOC_Dc): /* FALLTHROUGH */ case (MDOC_Ec): diff --git a/mdoc.c b/mdoc.c index b45f7802..89a0f691 100644 --- a/mdoc.c +++ b/mdoc.c @@ -1,4 +1,4 @@ -/* $Id: mdoc.c,v 1.60 2009/03/09 14:19:59 kristaps Exp $ */ +/* $Id: mdoc.c,v 1.61 2009/03/11 00:39:58 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -72,7 +72,8 @@ const char *const __mdoc_macronames[MDOC_MAX] = { "Fo", "Fc", "Oo", "Oc", "Bk", "Ek", "Bt", "Hf", "Fr", "Ud", "Lb", "Ap", - "Lp", "Lk", "Mt" + "Lp", "Lk", "Mt", "Brq", + "Bro", "Brc" }; const char *const __mdoc_argnames[MDOC_ARG_MAX] = { diff --git a/mdoc.h b/mdoc.h index 069d9e3a..73d6b284 100644 --- a/mdoc.h +++ b/mdoc.h @@ -1,4 +1,4 @@ -/* $Id: mdoc.h,v 1.45 2009/03/09 14:19:59 kristaps Exp $ */ +/* $Id: mdoc.h,v 1.46 2009/03/11 00:39:58 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -144,7 +144,10 @@ #define MDOC_Lp 108 #define MDOC_Lk 109 #define MDOC_Mt 110 -#define MDOC_MAX 111 +#define MDOC_Brq 111 +#define MDOC_Bro 112 +#define MDOC_Brc 113 +#define MDOC_MAX 114 /* What follows is a list of ALL possible macro arguments. */ diff --git a/mdocterm.1 b/mdocterm.1 index d0c82113..131a69ac 100644 --- a/mdocterm.1 +++ b/mdocterm.1 @@ -1,4 +1,4 @@ -.\" $Id: mdocterm.1,v 1.16 2009/03/09 13:04:01 kristaps Exp $ +.\" $Id: mdocterm.1,v 1.17 2009/03/11 00:39:58 kristaps Exp $ .\" .\" Copyright (c) 2009 Kristaps Dzonsons .\" @@ -16,7 +16,7 @@ .\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR .\" PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: March 9 2009 $ +.Dd $Mdocdate: March 11 2009 $ .Dt mdocterm 1 .Os .\" SECTION @@ -171,6 +171,10 @@ Enclosures: .Bl -tag -width "OutputXXXX" -offset "XXXX" -compact .It Em Output .Em Input (Name) +.It \(rC +\\(rC (right brace) +.It \(lC +\\(lC (left brace) .It \(ra \\(ra (right angle) .It \(la diff --git a/mdocterm.c b/mdocterm.c index de9de30a..c54441e3 100644 --- a/mdocterm.c +++ b/mdocterm.c @@ -1,4 +1,4 @@ -/* $Id: mdocterm.c,v 1.38 2009/03/10 11:16:43 kristaps Exp $ */ +/* $Id: mdocterm.c,v 1.39 2009/03/11 00:39:58 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -74,6 +74,8 @@ static struct termenc termenc1[] = { }; static struct termenc termenc2[] = { + { "rC", TERMSYM_RBRACE }, + { "lC", TERMSYM_LBRACE }, { "rB", TERMSYM_RBRACK }, { "lB", TERMSYM_LBRACK }, { "ra", TERMSYM_RANGLE }, @@ -163,6 +165,8 @@ static struct termsym termsym_ansi[] = { { "", 0 }, /* TERMSYM_BREAK */ { "<", 1 }, /* TERMSYM_LANGLE */ { ">", 1 }, /* TERMSYM_RANGLE */ + { "{", 1 }, /* TERMSYM_LBRACE */ + { "}", 1 }, /* TERMSYM_RBRACE */ }; static const char ansi_clear[] = { 27, '[', '0', 'm' }; diff --git a/term.c b/term.c index 7f506cd4..181864c4 100644 --- a/term.c +++ b/term.c @@ -1,4 +1,4 @@ -/* $Id: term.c,v 1.52 2009/03/10 11:16:43 kristaps Exp $ */ +/* $Id: term.c,v 1.53 2009/03/11 00:39:58 kristaps Exp $ */ /* * Copyright (c) 2009 Kristaps Dzonsons * @@ -118,6 +118,7 @@ DECL_PREPOST(termp__t); DECL_PREPOST(termp_aq); DECL_PREPOST(termp_bd); DECL_PREPOST(termp_bq); +DECL_PREPOST(termp_brq); DECL_PREPOST(termp_d1); DECL_PREPOST(termp_dq); DECL_PREPOST(termp_fd); @@ -287,6 +288,9 @@ const struct termact __termacts[MDOC_MAX] = { { termp_pp_pre, NULL }, /* Pp */ { termp_lk_pre, NULL }, /* Lk */ { termp_mt_pre, NULL }, /* Mt */ + { termp_brq_pre, termp_brq_post }, /* Brq */ + { termp_brq_pre, termp_brq_post }, /* Bro */ + { NULL, NULL }, /* Brc */ }; const struct termact *termacts = __termacts; @@ -1522,6 +1526,31 @@ termp_at_pre(DECL_ARGS) } +/* ARGSUSED */ +static int +termp_brq_pre(DECL_ARGS) +{ + + if (MDOC_BODY != node->type) + return(1); + word(p, "\\(lC"); + p->flags |= TERMP_NOSPACE; + return(1); +} + + +/* ARGSUSED */ +static void +termp_brq_post(DECL_ARGS) +{ + + if (MDOC_BODY != node->type) + return; + p->flags |= TERMP_NOSPACE; + word(p, "\\(rC"); +} + + /* ARGSUSED */ static int termp_bq_pre(DECL_ARGS) @@ -1529,7 +1558,7 @@ termp_bq_pre(DECL_ARGS) if (MDOC_BODY != node->type) return(1); - word(p, "["); + word(p, "\\(lB"); p->flags |= TERMP_NOSPACE; return(1); } @@ -1542,7 +1571,8 @@ termp_bq_post(DECL_ARGS) if (MDOC_BODY != node->type) return; - word(p, "]"); + p->flags |= TERMP_NOSPACE; + word(p, "\\(rB"); } @@ -1604,7 +1634,9 @@ termp_fo_post(DECL_ARGS) if (MDOC_BODY != node->type) return; + p->flags |= TERMP_NOSPACE; word(p, ")"); + p->flags |= TERMP_NOSPACE; word(p, ";"); newln(p); } diff --git a/term.h b/term.h index 29cd9ca7..91202195 100644 --- a/term.h +++ b/term.h @@ -1,4 +1,4 @@ -/* $Id: term.h,v 1.19 2009/03/04 14:41:40 kristaps Exp $ */ +/* $Id: term.h,v 1.20 2009/03/11 00:39:58 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -64,7 +64,9 @@ enum tsym { TERMSYM_PERIOD = 35, TERMSYM_BREAK = 36, TERMSYM_LANGLE = 37, - TERMSYM_RANGLE = 38 + TERMSYM_RANGLE = 38, + TERMSYM_LBRACE = 39, + TERMSYM_RBRACE = 40 }; diff --git a/validate.c b/validate.c index 9e36cb0f..1eed7f29 100644 --- a/validate.c +++ b/validate.c @@ -1,4 +1,4 @@ -/* $Id: validate.c,v 1.78 2009/03/09 14:19:59 kristaps Exp $ */ +/* $Id: validate.c,v 1.79 2009/03/11 00:39:58 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -307,6 +307,9 @@ const struct valids mdoc_valids[MDOC_MAX] = { { NULL, posts_pp }, /* Pp */ { NULL, posts_lk }, /* Lk */ { NULL, posts_mt }, /* Mt */ + { NULL, posts_wline }, /* Brq */ + { NULL, NULL }, /* Bro */ + { NULL, NULL }, /* Brc */ }; -- cgit v1.2.3-56-ge451