[BACK]Return to mdoc.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/mdoc.c between version 1.231 and 1.238

version 1.231, 2014/11/28 03:14:18 version 1.238, 2015/02/12 13:00:52
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 190  mdoc_alloc(struct roff *roff, struct mparse *parse,
Line 190  mdoc_alloc(struct roff *roff, struct mparse *parse,
         return(p);          return(p);
 }  }
   
 int  void
 mdoc_endparse(struct mdoc *mdoc)  mdoc_endparse(struct mdoc *mdoc)
 {  {
   
         return(mdoc_macroend(mdoc));          mdoc_macroend(mdoc);
 }  }
   
 int  void
 mdoc_addeqn(struct mdoc *mdoc, const struct eqn *ep)  mdoc_addeqn(struct mdoc *mdoc, const struct eqn *ep)
 {  {
         struct mdoc_node *n;          struct mdoc_node *n;
Line 208  mdoc_addeqn(struct mdoc *mdoc, const struct eqn *ep)
Line 208  mdoc_addeqn(struct mdoc *mdoc, const struct eqn *ep)
                 n->flags |= MDOC_LINE;                  n->flags |= MDOC_LINE;
         node_append(mdoc, n);          node_append(mdoc, n);
         mdoc->next = MDOC_NEXT_SIBLING;          mdoc->next = MDOC_NEXT_SIBLING;
         return(1);  
 }  }
   
 int  void
 mdoc_addspan(struct mdoc *mdoc, const struct tbl_span *sp)  mdoc_addspan(struct mdoc *mdoc, const struct tbl_span *sp)
 {  {
         struct mdoc_node *n;          struct mdoc_node *n;
Line 220  mdoc_addspan(struct mdoc *mdoc, const struct tbl_span 
Line 219  mdoc_addspan(struct mdoc *mdoc, const struct tbl_span 
         n->span = sp;          n->span = sp;
         node_append(mdoc, n);          node_append(mdoc, n);
         mdoc->next = MDOC_NEXT_SIBLING;          mdoc->next = MDOC_NEXT_SIBLING;
         return(1);  
 }  }
   
 /*  /*
Line 250  mdoc_parseln(struct mdoc *mdoc, int ln, char *buf, int
Line 248  mdoc_parseln(struct mdoc *mdoc, int ln, char *buf, int
             mdoc_ptext(mdoc, ln, buf, offs));              mdoc_ptext(mdoc, ln, buf, offs));
 }  }
   
 int  void
 mdoc_macro(MACRO_PROT_ARGS)  mdoc_macro(MACRO_PROT_ARGS)
 {  {
         assert(tok < MDOC_MAX);          assert(tok < MDOC_MAX);
Line 260  mdoc_macro(MACRO_PROT_ARGS)
Line 258  mdoc_macro(MACRO_PROT_ARGS)
                         mandoc_vmsg(MANDOCERR_DT_LATE,                          mandoc_vmsg(MANDOCERR_DT_LATE,
                             mdoc->parse, line, ppos,                              mdoc->parse, line, ppos,
                             "Dt %s", buf + *pos);                              "Dt %s", buf + *pos);
                         return(1);                          return;
                 }                  }
         } else if ( ! (mdoc_macros[tok].flags & MDOC_PROLOGUE)) {          } else if ( ! (mdoc_macros[tok].flags & MDOC_PROLOGUE)) {
                 if (mdoc->meta.title == NULL) {                  if (mdoc->meta.title == NULL) {
Line 273  mdoc_macro(MACRO_PROT_ARGS)
Line 271  mdoc_macro(MACRO_PROT_ARGS)
                         mdoc->meta.vol = mandoc_strdup("LOCAL");                          mdoc->meta.vol = mandoc_strdup("LOCAL");
                 mdoc->flags |= MDOC_PBODY;                  mdoc->flags |= MDOC_PBODY;
         }          }
           (*mdoc_macros[tok].fp)(mdoc, tok, line, ppos, pos, buf);
         return((*mdoc_macros[tok].fp)(mdoc, tok, line, ppos, pos, buf));  
 }  }
   
   
Line 366  node_alloc(struct mdoc *mdoc, int line, int pos,
Line 363  node_alloc(struct mdoc *mdoc, int line, int pos,
         p->sec = mdoc->lastsec;          p->sec = mdoc->lastsec;
         p->line = line;          p->line = line;
         p->pos = pos;          p->pos = pos;
         p->lastline = line;  
         p->tok = tok;          p->tok = tok;
         p->type = type;          p->type = type;
   
Line 417  mdoc_body_alloc(struct mdoc *mdoc, int line, int pos, 
Line 413  mdoc_body_alloc(struct mdoc *mdoc, int line, int pos, 
         return(p);          return(p);
 }  }
   
 void  struct mdoc_node *
 mdoc_endbody_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok,  mdoc_endbody_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok,
                 struct mdoc_node *body, enum mdoc_endbody end)                  struct mdoc_node *body, enum mdoc_endbody end)
 {  {
         struct mdoc_node *p;          struct mdoc_node *p;
   
           body->flags |= MDOC_ENDED;
           body->parent->flags |= MDOC_ENDED;
         p = node_alloc(mdoc, line, pos, tok, MDOC_BODY);          p = node_alloc(mdoc, line, pos, tok, MDOC_BODY);
         p->pending = body;          p->body = body;
         p->norm = body->norm;          p->norm = body->norm;
         p->end = end;          p->end = end;
         node_append(mdoc, p);          node_append(mdoc, p);
         mdoc->next = MDOC_NEXT_SIBLING;          mdoc->next = MDOC_NEXT_SIBLING;
           return(p);
 }  }
   
 struct mdoc_node *  struct mdoc_node *
Line 602  mdoc_ptext(struct mdoc *mdoc, int line, char *buf, int
Line 601  mdoc_ptext(struct mdoc *mdoc, int line, char *buf, int
          * process within its context in the normal way).           * process within its context in the normal way).
          */           */
   
         if (MDOC_Bl == n->tok && MDOC_BODY == n->type &&          if (n->tok == MDOC_Bl && n->type == MDOC_BODY &&
             LIST_column == n->norm->Bl.type) {              n->end == ENDBODY_NOT && n->norm->Bl.type == LIST_column) {
                 /* `Bl' is open without any children. */                  /* `Bl' is open without any children. */
                 mdoc->flags |= MDOC_FREECOL;                  mdoc->flags |= MDOC_FREECOL;
                 return(mdoc_macro(mdoc, MDOC_It, line, offs, &offs, buf));                  mdoc_macro(mdoc, MDOC_It, line, offs, &offs, buf);
                   return(1);
         }          }
   
         if (MDOC_It == n->tok && MDOC_BLOCK == n->type &&          if (MDOC_It == n->tok && MDOC_BLOCK == n->type &&
Line 615  mdoc_ptext(struct mdoc *mdoc, int line, char *buf, int
Line 615  mdoc_ptext(struct mdoc *mdoc, int line, char *buf, int
             LIST_column == n->parent->norm->Bl.type) {              LIST_column == n->parent->norm->Bl.type) {
                 /* `Bl' has block-level `It' children. */                  /* `Bl' has block-level `It' children. */
                 mdoc->flags |= MDOC_FREECOL;                  mdoc->flags |= MDOC_FREECOL;
                 return(mdoc_macro(mdoc, MDOC_It, line, offs, &offs, buf));                  mdoc_macro(mdoc, MDOC_It, line, offs, &offs, buf);
                   return(1);
         }          }
   
         /*          /*
Line 693  mdoc_ptext(struct mdoc *mdoc, int line, char *buf, int
Line 694  mdoc_ptext(struct mdoc *mdoc, int line, char *buf, int
   
         if (mandoc_eos(buf+offs, (size_t)(end-buf-offs)))          if (mandoc_eos(buf+offs, (size_t)(end-buf-offs)))
                 mdoc->last->flags |= MDOC_EOS;                  mdoc->last->flags |= MDOC_EOS;
   
         return(1);          return(1);
 }  }
   
Line 765  mdoc_pmacro(struct mdoc *mdoc, int ln, char *buf, int 
Line 765  mdoc_pmacro(struct mdoc *mdoc, int ln, char *buf, int 
          * into macro processing.           * into macro processing.
          */           */
   
         if (NULL == mdoc->last || MDOC_It == tok || MDOC_El == tok)          if (NULL == mdoc->last || MDOC_It == tok || MDOC_El == tok) {
                 return(mdoc_macro(mdoc, tok, ln, sv, &offs, buf));                  mdoc_macro(mdoc, tok, ln, sv, &offs, buf);
                   return(1);
           }
   
         n = mdoc->last;          n = mdoc->last;
         assert(mdoc->last);          assert(mdoc->last);
Line 776  mdoc_pmacro(struct mdoc *mdoc, int ln, char *buf, int 
Line 778  mdoc_pmacro(struct mdoc *mdoc, int ln, char *buf, int 
          * context around the parsed macro.           * context around the parsed macro.
          */           */
   
         if (MDOC_Bl == n->tok && MDOC_BODY == n->type &&          if (n->tok == MDOC_Bl && n->type == MDOC_BODY &&
             LIST_column == n->norm->Bl.type) {              n->end == ENDBODY_NOT && n->norm->Bl.type == LIST_column) {
                 mdoc->flags |= MDOC_FREECOL;                  mdoc->flags |= MDOC_FREECOL;
                 return(mdoc_macro(mdoc, MDOC_It, ln, sv, &sv, buf));                  mdoc_macro(mdoc, MDOC_It, ln, sv, &sv, buf);
                   return(1);
         }          }
   
         /*          /*
Line 793  mdoc_pmacro(struct mdoc *mdoc, int ln, char *buf, int 
Line 796  mdoc_pmacro(struct mdoc *mdoc, int ln, char *buf, int 
             MDOC_Bl == n->parent->tok &&              MDOC_Bl == n->parent->tok &&
             LIST_column == n->parent->norm->Bl.type) {              LIST_column == n->parent->norm->Bl.type) {
                 mdoc->flags |= MDOC_FREECOL;                  mdoc->flags |= MDOC_FREECOL;
                 return(mdoc_macro(mdoc, MDOC_It, ln, sv, &sv, buf));                  mdoc_macro(mdoc, MDOC_It, ln, sv, &sv, buf);
                   return(1);
         }          }
   
         /* Normal processing of a macro. */          /* Normal processing of a macro. */
   
         if ( ! mdoc_macro(mdoc, tok, ln, sv, &offs, buf))          mdoc_macro(mdoc, tok, ln, sv, &offs, buf);
                 return(0);  
   
         /* In quick mode (for mandocdb), abort after the NAME section. */          /* In quick mode (for mandocdb), abort after the NAME section. */
   

Legend:
Removed from v.1.231  
changed lines
  Added in v.1.238

CVSweb