]> git.cameronkatri.com Git - mandoc.git/commitdiff
Expanded perfect htab to use 27 * 26 * 3 space.
authorKristaps Dzonsons <kristaps@bsd.lv>
Wed, 11 Mar 2009 00:39:58 +0000 (00:39 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Wed, 11 Mar 2009 00:39:58 +0000 (00:39 +0000)
Added Brq, Bro and Brc macros.
Added lbrace and rbrace to special characters.
Fixed spacing in braces.

action.c
argv.c
hash.c
macro.c
mdoc.c
mdoc.h
mdocterm.1
mdocterm.c
term.c
term.h
validate.c

index b776d9e17ac6bb0632faaf4cbd2a7fb3a0ab96e3..9fc1d2d0069b88cf3b6ff6740d52a778e7c3d61c 100644 (file)
--- 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 <kristaps@kth.se>
  *
@@ -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 8c2830298fa9d207f09a4b231e913c64843ee0d7..e617e143e79ed3939eaf41efe35d0f496a825834 100644 (file)
--- 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 <kristaps@kth.se>
  *
@@ -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 2814755b33dd730b254cc75198cd377ecc0e14c7..fe6ce6c7e547b8051eada999041e365e2d8b6423 100644 (file)
--- 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 <kristaps@kth.se>
  *
@@ -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 becad97b0fefda78a1b5345c2d47ab0cba24b7b5..1c3200d2475c5f6dedf12b2217c74e4af5fee494 100644 (file)
--- 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 <kristaps@kth.se>
  *
@@ -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 b45f780245b29675c3fa93bdf3b9a60cfc616d17..89a0f6913eb1c78e6e5ed63816663ccb1daefd09 100644 (file)
--- 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 <kristaps@kth.se>
  *
@@ -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 069d9e3a67d61586e3f970fc84da47216d0010c3..73d6b284170f7363e6cd4f8d1caacf8a8dcd06db 100644 (file)
--- 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 <kristaps@kth.se>
  *
 #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. */
 
index d0c821131b7d3eb7de7fc5492a34e04169498607..131a69ac6e6e36068fb067174f0128a4d9653a76 100644 (file)
@@ -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 <kristaps@kth.se>
 .\"
@@ -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
index de9de30a22bae015b4c83c20dd6716c0a5447a12..c54441e35146f3bac7f140be685bc2dda14990e8 100644 (file)
@@ -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 <kristaps@kth.se>
  *
@@ -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 7f506cd4ff60fd001a80662e14e794cdb2b5b136..181864c493b7798e66079f34ce7974497f61c254 100644 (file)
--- 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 <kristaps@kth.se>
  *
@@ -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 29cd9ca76144297ee66611edf69f98db76a28cea..91202195bd2ca54411c11d494a8ed8231f17808c 100644 (file)
--- 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 <kristaps@kth.se>
  *
@@ -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
 };
 
 
index 9e36cb0fc5fe572540bd60206a4259a9354ace95..1eed7f29686c9d75a1e256157655379f065e911b 100644 (file)
@@ -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 <kristaps@kth.se>
  *
@@ -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 */ 
 };