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

Diff for /mandoc/mdoc.c between version 1.248 and 1.252

version 1.248, 2015/04/19 14:00:19 version 1.252, 2015/04/23 16:17:44
Line 89  static int    mdoc_ptext(struct roff_man *, int, char 
Line 89  static int    mdoc_ptext(struct roff_man *, int, char 
 static  int               mdoc_pmacro(struct roff_man *, int, char *, int);  static  int               mdoc_pmacro(struct roff_man *, int, char *, int);
   
   
 void  
 mdoc_endparse(struct roff_man *mdoc)  
 {  
   
         mdoc_macroend(mdoc);  
 }  
   
 void  
 mdoc_addeqn(struct roff_man *mdoc, const struct eqn *ep)  
 {  
         struct roff_node *n;  
   
         n = roff_node_alloc(mdoc, ep->ln, ep->pos, ROFFT_EQN, TOKEN_NONE);  
         n->eqn = ep;  
         if (ep->ln > mdoc->last->line)  
                 n->flags |= MDOC_LINE;  
         roff_node_append(mdoc, n);  
         mdoc->next = ROFF_NEXT_SIBLING;  
 }  
   
 void  
 mdoc_addspan(struct roff_man *mdoc, const struct tbl_span *sp)  
 {  
         struct roff_node *n;  
   
         n = roff_node_alloc(mdoc, sp->line, 0, ROFFT_TBL, TOKEN_NONE);  
         n->span = sp;  
         roff_node_append(mdoc, n);  
         mdoc_valid_post(mdoc);  
         mdoc->next = ROFF_NEXT_SIBLING;  
 }  
   
 /*  /*
  * Main parse routine.  Parses a single line -- really just hands off to   * Main parse routine.  Parses a single line -- really just hands off to
  * the macro (mdoc_pmacro()) or text parser (mdoc_ptext()).   * the macro (mdoc_pmacro()) or text parser (mdoc_ptext()).
Line 255  mdoc_elem_alloc(struct roff_man *mdoc, int line, int p
Line 223  mdoc_elem_alloc(struct roff_man *mdoc, int line, int p
 }  }
   
 void  void
 mdoc_word_alloc(struct roff_man *mdoc, int line, int pos, const char *p)  
 {  
         struct roff_node *n;  
   
         n = roff_node_alloc(mdoc, line, pos, ROFFT_TEXT, TOKEN_NONE);  
         n->string = roff_strdup(mdoc->roff, p);  
         roff_node_append(mdoc, n);  
         mdoc_valid_post(mdoc);  
         mdoc->next = ROFF_NEXT_SIBLING;  
 }  
   
 void  
 mdoc_word_append(struct roff_man *mdoc, const char *p)  
 {  
         struct roff_node        *n;  
         char                    *addstr, *newstr;  
   
         n = mdoc->last;  
         addstr = roff_strdup(mdoc->roff, p);  
         mandoc_asprintf(&newstr, "%s %s", n->string, addstr);  
         free(addstr);  
         free(n->string);  
         n->string = newstr;  
         mdoc->next = ROFF_NEXT_SIBLING;  
 }  
   
 void  
 mdoc_node_relink(struct roff_man *mdoc, struct roff_node *p)  mdoc_node_relink(struct roff_man *mdoc, struct roff_node *p)
 {  {
   
Line 381  mdoc_ptext(struct roff_man *mdoc, int line, char *buf,
Line 322  mdoc_ptext(struct roff_man *mdoc, int line, char *buf,
                  * blank lines aren't allowed, but enough manuals assume this                   * blank lines aren't allowed, but enough manuals assume this
                  * behaviour that we want to work around it.                   * behaviour that we want to work around it.
                  */                   */
                 mdoc_elem_alloc(mdoc, line, offs, MDOC_sp, NULL);                  roff_elem_alloc(mdoc, line, offs, MDOC_sp);
                 mdoc->next = ROFF_NEXT_SIBLING;                  mdoc->next = ROFF_NEXT_SIBLING;
                 mdoc_valid_post(mdoc);                  mdoc_valid_post(mdoc);
                 return(1);                  return(1);
         }          }
   
         mdoc_word_alloc(mdoc, line, offs, buf+offs);          roff_word_alloc(mdoc, line, offs, buf+offs);
   
         if (mdoc->flags & MDOC_LITERAL)          if (mdoc->flags & MDOC_LITERAL)
                 return(1);                  return(1);
Line 565  mdoc_isdelim(const char *p)
Line 506  mdoc_isdelim(const char *p)
                 return(DELIM_MIDDLE);                  return(DELIM_MIDDLE);
   
         return(DELIM_NONE);          return(DELIM_NONE);
 }  
   
 void  
 mdoc_deroff(char **dest, const struct roff_node *n)  
 {  
         char    *cp;  
         size_t   sz;  
   
         if (n->type != ROFFT_TEXT) {  
                 for (n = n->child; n; n = n->next)  
                         mdoc_deroff(dest, n);  
                 return;  
         }  
   
         /* Skip leading whitespace. */  
   
         for (cp = n->string; '\0' != *cp; cp++)  
                 if (0 == isspace((unsigned char)*cp))  
                         break;  
   
         /* Skip trailing whitespace. */  
   
         for (sz = strlen(cp); sz; sz--)  
                 if (0 == isspace((unsigned char)cp[sz-1]))  
                         break;  
   
         /* Skip empty strings. */  
   
         if (0 == sz)  
                 return;  
   
         if (NULL == *dest) {  
                 *dest = mandoc_strndup(cp, sz);  
                 return;  
         }  
   
         mandoc_asprintf(&cp, "%s %*s", *dest, (int)sz, cp);  
         free(*dest);  
         *dest = cp;  
 }  }

Legend:
Removed from v.1.248  
changed lines
  Added in v.1.252

CVSweb