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

Diff for /mandoc/mdoc_macro.c between version 1.188 and 1.190

version 1.188, 2015/04/05 23:04:41 version 1.190, 2015/04/19 13:50:26
Line 30 
Line 30 
 #include "roff.h"  #include "roff.h"
 #include "mdoc.h"  #include "mdoc.h"
 #include "libmandoc.h"  #include "libmandoc.h"
   #include "roff_int.h"
 #include "libmdoc.h"  #include "libmdoc.h"
   
 static  void            blk_full(MACRO_PROT_ARGS);  static  void            blk_full(MACRO_PROT_ARGS);
Line 42  static void  in_line_argn(MACRO_PROT_ARGS);
Line 43  static void  in_line_argn(MACRO_PROT_ARGS);
 static  void            in_line(MACRO_PROT_ARGS);  static  void            in_line(MACRO_PROT_ARGS);
 static  void            phrase_ta(MACRO_PROT_ARGS);  static  void            phrase_ta(MACRO_PROT_ARGS);
   
 static  void            append_delims(struct mdoc *, int, int *, char *);  static  void            append_delims(struct roff_man *, int, int *, char *);
 static  void            dword(struct mdoc *, int, int, const char *,  static  void            dword(struct roff_man *, int, int, const char *,
                                 enum mdelim, int);                                  enum mdelim, int);
 static  int             find_pending(struct mdoc *, int, int, int,  static  int             find_pending(struct roff_man *, int, int, int,
                                 struct roff_node *);                                  struct roff_node *);
 static  int             lookup(struct mdoc *, int, int, int, const char *);  static  int             lookup(struct roff_man *, int, int, int, const char *);
 static  int             macro_or_word(MACRO_PROT_ARGS, int);  static  int             macro_or_word(MACRO_PROT_ARGS, int);
 static  int             parse_rest(struct mdoc *, int, int, int *, char *);  static  int             parse_rest(struct roff_man *, int, int, int *, char *);
 static  int             rew_alt(int);  static  int             rew_alt(int);
 static  void            rew_elem(struct mdoc *, int);  static  void            rew_elem(struct roff_man *, int);
 static  void            rew_last(struct mdoc *, const struct roff_node *);  static  void            rew_last(struct roff_man *, const struct roff_node *);
 static  void            rew_pending(struct mdoc *, const struct roff_node *);  static  void            rew_pending(struct roff_man *,
                                   const struct roff_node *);
   
 const   struct mdoc_macro __mdoc_macros[MDOC_MAX] = {  const   struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
         { in_line_argn, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ap */          { in_line_argn, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ap */
Line 208  const struct mdoc_macro * const mdoc_macros = __mdoc_m
Line 210  const struct mdoc_macro * const mdoc_macros = __mdoc_m
  * are errors.   * are errors.
  */   */
 void  void
 mdoc_macroend(struct mdoc *mdoc)  mdoc_macroend(struct roff_man *mdoc)
 {  {
         struct roff_node *n;          struct roff_node *n;
   
Line 233  mdoc_macroend(struct mdoc *mdoc)
Line 235  mdoc_macroend(struct mdoc *mdoc)
  * or as a line macro if from == MDOC_MAX.   * or as a line macro if from == MDOC_MAX.
  */   */
 static int  static int
 lookup(struct mdoc *mdoc, int from, int line, int ppos, const char *p)  lookup(struct roff_man *mdoc, int from, int line, int ppos, const char *p)
 {  {
         int      res;          int      res;
   
Line 254  lookup(struct mdoc *mdoc, int from, int line, int ppos
Line 256  lookup(struct mdoc *mdoc, int from, int line, int ppos
  * Rewind up to and including a specific node.   * Rewind up to and including a specific node.
  */   */
 static void  static void
 rew_last(struct mdoc *mdoc, const struct roff_node *to)  rew_last(struct roff_man *mdoc, const struct roff_node *to)
 {  {
         struct roff_node *n, *np;          struct roff_node *n, *np;
   
         if (to->flags & MDOC_VALID)          if (to->flags & MDOC_VALID)
                 return;                  return;
   
         mdoc->next = MDOC_NEXT_SIBLING;          mdoc->next = ROFF_NEXT_SIBLING;
         while (mdoc->last != to) {          while (mdoc->last != to) {
                 /*                  /*
                  * Save the parent here, because we may delete the                   * Save the parent here, because we may delete the
Line 283  rew_last(struct mdoc *mdoc, const struct roff_node *to
Line 285  rew_last(struct mdoc *mdoc, const struct roff_node *to
  * Rewind up to a specific block, including all blocks that broke it.   * Rewind up to a specific block, including all blocks that broke it.
  */   */
 static void  static void
 rew_pending(struct mdoc *mdoc, const struct roff_node *n)  rew_pending(struct roff_man *mdoc, const struct roff_node *n)
 {  {
   
         for (;;) {          for (;;) {
Line 291  rew_pending(struct mdoc *mdoc, const struct roff_node 
Line 293  rew_pending(struct mdoc *mdoc, const struct roff_node 
   
                 switch (n->type) {                  switch (n->type) {
                 case ROFFT_HEAD:                  case ROFFT_HEAD:
                         mdoc_body_alloc(mdoc, n->line, n->pos, n->tok);                          roff_body_alloc(mdoc, n->line, n->pos, n->tok);
                         return;                          return;
                 case ROFFT_BLOCK:                  case ROFFT_BLOCK:
                         break;                          break;
Line 364  rew_alt(int tok)
Line 366  rew_alt(int tok)
 }  }
   
 static void  static void
 rew_elem(struct mdoc *mdoc, int tok)  rew_elem(struct roff_man *mdoc, int tok)
 {  {
         struct roff_node *n;          struct roff_node *n;
   
Line 382  rew_elem(struct mdoc *mdoc, int tok)
Line 384  rew_elem(struct mdoc *mdoc, int tok)
  * the rew_pending() call closing out the sub-block.   * the rew_pending() call closing out the sub-block.
  */   */
 static int  static int
 find_pending(struct mdoc *mdoc, int tok, int line, int ppos,  find_pending(struct roff_man *mdoc, int tok, int line, int ppos,
         struct roff_node *target)          struct roff_node *target)
 {  {
         struct roff_node        *n;          struct roff_node        *n;
Line 419  find_pending(struct mdoc *mdoc, int tok, int line, int
Line 421  find_pending(struct mdoc *mdoc, int tok, int line, int
  * Punctuation consists of those tokens found in mdoc_isdelim().   * Punctuation consists of those tokens found in mdoc_isdelim().
  */   */
 static void  static void
 dword(struct mdoc *mdoc, int line, int col, const char *p,  dword(struct roff_man *mdoc, int line, int col, const char *p,
                 enum mdelim d, int may_append)                  enum mdelim d, int may_append)
 {  {
   
Line 453  dword(struct mdoc *mdoc, int line, int col, const char
Line 455  dword(struct mdoc *mdoc, int line, int col, const char
 }  }
   
 static void  static void
 append_delims(struct mdoc *mdoc, int line, int *pos, char *buf)  append_delims(struct roff_man *mdoc, int line, int *pos, char *buf)
 {  {
         char            *p;          char            *p;
         int              la;          int              la;
Line 617  blk_exp_close(MACRO_PROT_ARGS)
Line 619  blk_exp_close(MACRO_PROT_ARGS)
                          */                           */
   
                         if (maxargs)                          if (maxargs)
                                 mdoc->next = MDOC_NEXT_CHILD;                                  mdoc->next = ROFF_NEXT_CHILD;
                         break;                          break;
                 }                  }
   
Line 1021  blk_full(MACRO_PROT_ARGS)
Line 1023  blk_full(MACRO_PROT_ARGS)
          */           */
   
         if (tok == MDOC_Nd) {          if (tok == MDOC_Nd) {
                 head = mdoc_head_alloc(mdoc, line, ppos, tok);                  head = roff_head_alloc(mdoc, line, ppos, tok);
                 rew_last(mdoc, head);                  rew_last(mdoc, head);
                 body = mdoc_body_alloc(mdoc, line, ppos, tok);                  body = roff_body_alloc(mdoc, line, ppos, tok);
         }          }
   
         if (tok == MDOC_Bk)          if (tok == MDOC_Bk)
Line 1046  blk_full(MACRO_PROT_ARGS)
Line 1048  blk_full(MACRO_PROT_ARGS)
                          */                           */
                         if (body != NULL)                          if (body != NULL)
                                 rew_last(mdoc, body);                                  rew_last(mdoc, body);
                         body = mdoc_body_alloc(mdoc, line, ppos, tok);                          body = roff_body_alloc(mdoc, line, ppos, tok);
                         break;                          break;
                 }                  }
                 if (tok == MDOC_Bd || tok == MDOC_Bk) {                  if (tok == MDOC_Bd || tok == MDOC_Bk) {
Line 1081  blk_full(MACRO_PROT_ARGS)
Line 1083  blk_full(MACRO_PROT_ARGS)
                 /* Open a head if one hasn't been opened. */                  /* Open a head if one hasn't been opened. */
   
                 if (head == NULL)                  if (head == NULL)
                         head = mdoc_head_alloc(mdoc, line, ppos, tok);                          head = roff_head_alloc(mdoc, line, ppos, tok);
   
                 if (ac == ARGS_PHRASE ||                  if (ac == ARGS_PHRASE ||
                     ac == ARGS_PEND ||                      ac == ARGS_PEND ||
Line 1093  blk_full(MACRO_PROT_ARGS)
Line 1095  blk_full(MACRO_PROT_ARGS)
                          */                           */
   
                         rew_last(mdoc, body == NULL ? head : body);                          rew_last(mdoc, body == NULL ? head : body);
                         body = mdoc_body_alloc(mdoc, line, ppos, tok);                          body = roff_body_alloc(mdoc, line, ppos, tok);
   
                         /*                          /*
                          * Process phrases: set whether we're in a                           * Process phrases: set whether we're in a
Line 1117  blk_full(MACRO_PROT_ARGS)
Line 1119  blk_full(MACRO_PROT_ARGS)
         if (blk->flags & MDOC_VALID)          if (blk->flags & MDOC_VALID)
                 return;                  return;
         if (head == NULL)          if (head == NULL)
                 head = mdoc_head_alloc(mdoc, line, ppos, tok);                  head = roff_head_alloc(mdoc, line, ppos, tok);
         if (nl && tok != MDOC_Bd && tok != MDOC_Bl && tok != MDOC_Rs)          if (nl && tok != MDOC_Bd && tok != MDOC_Bl && tok != MDOC_Rs)
                 append_delims(mdoc, line, pos, buf);                  append_delims(mdoc, line, pos, buf);
         if (body != NULL)          if (body != NULL)
Line 1128  blk_full(MACRO_PROT_ARGS)
Line 1130  blk_full(MACRO_PROT_ARGS)
         /* Close out scopes to remain in a consistent state. */          /* Close out scopes to remain in a consistent state. */
   
         rew_last(mdoc, head);          rew_last(mdoc, head);
         body = mdoc_body_alloc(mdoc, line, ppos, tok);          body = roff_body_alloc(mdoc, line, ppos, tok);
 out:  out:
         if (mdoc->flags & MDOC_FREECOL) {          if (mdoc->flags & MDOC_FREECOL) {
                 rew_last(mdoc, body);                  rew_last(mdoc, body);
Line 1159  blk_part_imp(MACRO_PROT_ARGS)
Line 1161  blk_part_imp(MACRO_PROT_ARGS)
          */           */
   
         blk = mdoc_block_alloc(mdoc, line, ppos, tok, NULL);          blk = mdoc_block_alloc(mdoc, line, ppos, tok, NULL);
         rew_last(mdoc, mdoc_head_alloc(mdoc, line, ppos, tok));          rew_last(mdoc, roff_head_alloc(mdoc, line, ppos, tok));
   
         /*          /*
          * Open the body scope "on-demand", that is, after we've           * Open the body scope "on-demand", that is, after we've
Line 1180  blk_part_imp(MACRO_PROT_ARGS)
Line 1182  blk_part_imp(MACRO_PROT_ARGS)
                 }                  }
   
                 if (body == NULL)                  if (body == NULL)
                         body = mdoc_body_alloc(mdoc, line, ppos, tok);                          body = roff_body_alloc(mdoc, line, ppos, tok);
   
                 if (macro_or_word(mdoc, tok, line, la, pos, buf, 1))                  if (macro_or_word(mdoc, tok, line, la, pos, buf, 1))
                         break;                          break;
         }          }
         if (body == NULL)          if (body == NULL)
                 body = mdoc_body_alloc(mdoc, line, ppos, tok);                  body = roff_body_alloc(mdoc, line, ppos, tok);
   
         if (find_pending(mdoc, tok, line, ppos, body))          if (find_pending(mdoc, tok, line, ppos, body))
                 return;                  return;
Line 1237  blk_part_exp(MACRO_PROT_ARGS)
Line 1239  blk_part_exp(MACRO_PROT_ARGS)
                 }                  }
   
                 if (head == NULL) {                  if (head == NULL) {
                         head = mdoc_head_alloc(mdoc, line, ppos, tok);                          head = roff_head_alloc(mdoc, line, ppos, tok);
                         if (tok == MDOC_Eo)  /* Not parsed. */                          if (tok == MDOC_Eo)  /* Not parsed. */
                                 dword(mdoc, line, la, p, DELIM_MAX, 0);                                  dword(mdoc, line, la, p, DELIM_MAX, 0);
                         rew_last(mdoc, head);                          rew_last(mdoc, head);
                         mdoc_body_alloc(mdoc, line, ppos, tok);                          roff_body_alloc(mdoc, line, ppos, tok);
                         if (tok == MDOC_Eo)                          if (tok == MDOC_Eo)
                                 continue;                                  continue;
                 }                  }
Line 1253  blk_part_exp(MACRO_PROT_ARGS)
Line 1255  blk_part_exp(MACRO_PROT_ARGS)
         /* Clean-up to leave in a consistent state. */          /* Clean-up to leave in a consistent state. */
   
         if (head == NULL) {          if (head == NULL) {
                 rew_last(mdoc, mdoc_head_alloc(mdoc, line, ppos, tok));                  rew_last(mdoc, roff_head_alloc(mdoc, line, ppos, tok));
                 mdoc_body_alloc(mdoc, line, ppos, tok);                  roff_body_alloc(mdoc, line, ppos, tok);
         }          }
         if (nl)          if (nl)
                 append_delims(mdoc, line, pos, buf);                  append_delims(mdoc, line, pos, buf);
Line 1386  in_line_eoln(MACRO_PROT_ARGS)
Line 1388  in_line_eoln(MACRO_PROT_ARGS)
         if ((tok == MDOC_Pp || tok == MDOC_Lp) &&          if ((tok == MDOC_Pp || tok == MDOC_Lp) &&
             ! (mdoc->flags & MDOC_SYNOPSIS)) {              ! (mdoc->flags & MDOC_SYNOPSIS)) {
                 n = mdoc->last;                  n = mdoc->last;
                 if (mdoc->next == MDOC_NEXT_SIBLING)                  if (mdoc->next == ROFF_NEXT_SIBLING)
                         n = n->parent;                          n = n->parent;
                 if (n->tok == MDOC_Nm)                  if (n->tok == MDOC_Nm)
                         rew_last(mdoc, mdoc->last->parent);                          rew_last(mdoc, mdoc->last->parent);
Line 1412  in_line_eoln(MACRO_PROT_ARGS)
Line 1414  in_line_eoln(MACRO_PROT_ARGS)
  * or until the next macro, call that macro, and return 1.   * or until the next macro, call that macro, and return 1.
  */   */
 static int  static int
 parse_rest(struct mdoc *mdoc, int tok, int line, int *pos, char *buf)  parse_rest(struct roff_man *mdoc, int tok, int line, int *pos, char *buf)
 {  {
         int              la;          int              la;
   
Line 1470  phrase_ta(MACRO_PROT_ARGS)
Line 1472  phrase_ta(MACRO_PROT_ARGS)
         /* Advance to the next column. */          /* Advance to the next column. */
   
         rew_last(mdoc, body);          rew_last(mdoc, body);
         mdoc_body_alloc(mdoc, line, ppos, MDOC_It);          roff_body_alloc(mdoc, line, ppos, MDOC_It);
         parse_rest(mdoc, MDOC_MAX, line, pos, buf);          parse_rest(mdoc, MDOC_MAX, line, pos, buf);
 }  }

Legend:
Removed from v.1.188  
changed lines
  Added in v.1.190

CVSweb