[BACK]Return to mdoc.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mandoc

Diff for /src/usr.bin/mandoc/mdoc.c between version 1.74 and 1.75

version 1.74, 2010/12/26 21:04:19 version 1.75, 2010/12/29 00:47:30
Line 241 
Line 241 
         if (n && MDOC_TS == n->tok && MDOC_BODY == n->type &&          if (n && MDOC_TS == n->tok && MDOC_BODY == n->type &&
             strncmp(buf+offs, ".TE", 3)) {              strncmp(buf+offs, ".TE", 3)) {
                 n = n->parent;                  n = n->parent;
                 if ( ! tbl_read(n->data.TS, "mdoc tbl parser",                  if ( ! tbl_read(n->norm->TS, "mdoc tbl parser",
                     ln, buf+offs, strlen(buf+offs)))                      ln, buf+offs, strlen(buf+offs)))
                         mdoc_nmsg(m, n, MANDOCERR_TBL);                          mdoc_nmsg(m, n, MANDOCERR_TBL);
                 return(1);                  return(1);
Line 340 
Line 340 
   
         p->parent->nchild++;          p->parent->nchild++;
   
           /*
            * Copy over the normalised-data pointer of our parent.  Not
            * everybody has one, but copying a null pointer is fine.
            */
   
           switch (p->type) {
           case (MDOC_BODY):
                   /* FALLTHROUGH */
           case (MDOC_TAIL):
                   /* FALLTHROUGH */
           case (MDOC_HEAD):
                   p->norm = p->parent->norm;
                   break;
           default:
                   break;
           }
   
         if ( ! mdoc_valid_pre(mdoc, p))          if ( ! mdoc_valid_pre(mdoc, p))
                 return(0);                  return(0);
   
Line 472 
Line 489 
         p->args = args;          p->args = args;
         if (p->args)          if (p->args)
                 (args->refcnt)++;                  (args->refcnt)++;
   
           switch (tok) {
           case (MDOC_Bd):
                   /* FALLTHROUGH */
           case (MDOC_Bf):
                   /* FALLTHROUGH */
           case (MDOC_Bl):
                   /* FALLTHROUGH */
           case (MDOC_Rs):
                   /* FALLTHROUGH */
           case (MDOC_TS):
                   p->norm = mandoc_calloc(1, sizeof(union mdoc_data));
                   break;
           default:
                   break;
           }
   
         if ( ! node_append(m, p))          if ( ! node_append(m, p))
                 return(0);                  return(0);
         m->next = MDOC_NEXT_CHILD;          m->next = MDOC_NEXT_CHILD;
Line 489 
Line 523 
         p->args = args;          p->args = args;
         if (p->args)          if (p->args)
                 (args->refcnt)++;                  (args->refcnt)++;
   
           switch (tok) {
           case (MDOC_An):
                   p->norm = mandoc_calloc(1, sizeof(union mdoc_data));
                   break;
           default:
                   break;
           }
   
         if ( ! node_append(m, p))          if ( ! node_append(m, p))
                 return(0);                  return(0);
         m->next = MDOC_NEXT_CHILD;          m->next = MDOC_NEXT_CHILD;
Line 523 
Line 566 
 mdoc_node_free(struct mdoc_node *p)  mdoc_node_free(struct mdoc_node *p)
 {  {
   
         /*  
          * XXX: if these end up being problematic in terms of memory  
          * management and dereferencing freed blocks, then make them  
          * into reference-counted double-pointers.  
          */  
   
         if (MDOC_Bd == p->tok && MDOC_BLOCK == p->type)  
                 if (p->data.Bd)  
                         free(p->data.Bd);  
         if (MDOC_Bl == p->tok && MDOC_BLOCK == p->type)  
                 if (p->data.Bl)  
                         free(p->data.Bl);  
         if (MDOC_Bf == p->tok && MDOC_HEAD == p->type)  
                 if (p->data.Bf)  
                         free(p->data.Bf);  
         if (MDOC_An == p->tok)  
                 if (p->data.An)  
                         free(p->data.An);  
         if (MDOC_Rs == p->tok && MDOC_BLOCK == p->type)  
                 if (p->data.Rs)  
                         free(p->data.Rs);  
         if (MDOC_TS == p->tok && MDOC_BLOCK == p->type)          if (MDOC_TS == p->tok && MDOC_BLOCK == p->type)
                 if (p->data.TS)                  if (p->norm->TS)
                         tbl_free(p->data.TS);                          tbl_free(p->norm->TS);
   
           if (MDOC_BLOCK == p->type || MDOC_ELEM == p->type)
                   free(p->norm);
         if (p->string)          if (p->string)
                 free(p->string);                  free(p->string);
         if (p->args)          if (p->args)
Line 642 
Line 666 
          */           */
   
         if (MDOC_Bl == n->tok && MDOC_BODY == n->type &&          if (MDOC_Bl == n->tok && MDOC_BODY == n->type &&
                         LIST_column == n->data.Bl->type) {                          LIST_column == n->norm->Bl.type) {
                 /* `Bl' is open without any children. */                  /* `Bl' is open without any children. */
                 m->flags |= MDOC_FREECOL;                  m->flags |= MDOC_FREECOL;
                 return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf));                  return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf));
Line 651 
Line 675 
         if (MDOC_It == n->tok && MDOC_BLOCK == n->type &&          if (MDOC_It == n->tok && MDOC_BLOCK == n->type &&
                         NULL != n->parent &&                          NULL != n->parent &&
                         MDOC_Bl == n->parent->tok &&                          MDOC_Bl == n->parent->tok &&
                         LIST_column == n->parent->data.Bl->type) {                          LIST_column == n->parent->norm->Bl.type) {
                 /* `Bl' has block-level `It' children. */                  /* `Bl' has block-level `It' children. */
                 m->flags |= MDOC_FREECOL;                  m->flags |= MDOC_FREECOL;
                 return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf));                  return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf));
Line 832 
Line 856 
          */           */
   
         if (MDOC_Bl == n->tok && MDOC_BODY == n->type &&          if (MDOC_Bl == n->tok && MDOC_BODY == n->type &&
                         LIST_column == n->data.Bl->type) {                          LIST_column == n->norm->Bl.type) {
                 m->flags |= MDOC_FREECOL;                  m->flags |= MDOC_FREECOL;
                 if ( ! mdoc_macro(m, MDOC_It, ln, sv, &sv, buf))                  if ( ! mdoc_macro(m, MDOC_It, ln, sv, &sv, buf))
                         goto err;                          goto err;
Line 848 
Line 872 
         if (MDOC_It == n->tok && MDOC_BLOCK == n->type &&          if (MDOC_It == n->tok && MDOC_BLOCK == n->type &&
                         NULL != n->parent &&                          NULL != n->parent &&
                         MDOC_Bl == n->parent->tok &&                          MDOC_Bl == n->parent->tok &&
                         LIST_column == n->parent->data.Bl->type) {                          LIST_column == n->parent->norm->Bl.type) {
                 m->flags |= MDOC_FREECOL;                  m->flags |= MDOC_FREECOL;
                 if ( ! mdoc_macro(m, MDOC_It, ln, sv, &sv, buf))                  if ( ! mdoc_macro(m, MDOC_It, ln, sv, &sv, buf))
                         goto err;                          goto err;

Legend:
Removed from v.1.74  
changed lines
  Added in v.1.75