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

Diff for /src/usr.bin/mandoc/Attic/mdoc_action.c between version 1.22 and 1.23

version 1.22, 2009/10/19 15:44:01 version 1.23, 2009/10/19 16:27:52
Line 32 
Line 32 
         int     (*post)(POST_ARGS);          int     (*post)(POST_ARGS);
 };  };
   
   static  int       concat(struct mdoc *,
                           const struct mdoc_node *,
                           char *, size_t);
   static  inline int order_rs(int);
   
 static  int       post_ar(POST_ARGS);  static  int       post_ar(POST_ARGS);
 static  int       post_at(POST_ARGS);  static  int       post_at(POST_ARGS);
 static  int       post_bl(POST_ARGS);  static  int       post_bl(POST_ARGS);
Line 45 
Line 50 
 static  int       post_nm(POST_ARGS);  static  int       post_nm(POST_ARGS);
 static  int       post_os(POST_ARGS);  static  int       post_os(POST_ARGS);
 static  int       post_prol(POST_ARGS);  static  int       post_prol(POST_ARGS);
   static  int       post_rs(POST_ARGS);
 static  int       post_sh(POST_ARGS);  static  int       post_sh(POST_ARGS);
 static  int       post_st(POST_ARGS);  static  int       post_st(POST_ARGS);
 static  int       post_std(POST_ARGS);  static  int       post_std(POST_ARGS);
Line 141 
Line 147 
         { NULL, NULL }, /* Qo */          { NULL, NULL }, /* Qo */
         { NULL, NULL }, /* Qq */          { NULL, NULL }, /* Qq */
         { NULL, NULL }, /* Re */          { NULL, NULL }, /* Re */
         { NULL, NULL }, /* Rs */          { NULL, post_rs }, /* Rs */
         { NULL, NULL }, /* Sc */          { NULL, NULL }, /* Sc */
         { NULL, NULL }, /* So */          { NULL, NULL }, /* So */
         { NULL, NULL }, /* Sq */          { NULL, NULL }, /* Sq */
Line 178 
Line 184 
         { NULL, NULL }, /* sp */          { NULL, NULL }, /* sp */
 };  };
   
 static  int       concat(struct mdoc *, const struct mdoc_node *,  #define RSORD_MAX 13
                         char *, size_t);  
   
   static  const int rsord[RSORD_MAX] = {
           MDOC__A,
           MDOC__T,
           MDOC__B,
           MDOC__I,
           MDOC__J,
           MDOC__R,
           MDOC__N,
           MDOC__V,
           MDOC__P,
           MDOC__Q,
           MDOC__D,
           MDOC__O,
           MDOC__C
   };
   
   
 int  int
 mdoc_action_pre(struct mdoc *m, const struct mdoc_node *n)  mdoc_action_pre(struct mdoc *m, const struct mdoc_node *n)
 {  {
Line 895 
Line 916 
 }  }
   
   
   static inline int
   order_rs(int t)
   {
           int             i;
   
           for (i = 0; i < RSORD_MAX; i++)
                   if (rsord[i] == t)
                           return(i);
   
           abort();
           /* NOTREACHED */
   }
   
   
   /* ARGSUSED */
   static int
   post_rs(POST_ARGS)
   {
           struct mdoc_node        *nn, *next, *prev;
           int                      o;
   
           if (MDOC_BLOCK != n->type)
                   return(1);
   
           assert(n->body->child);
           for (next = NULL, nn = n->body->child->next; nn; nn = next) {
                   o = order_rs(nn->tok);
   
                   /* Remove `nn' from the chain. */
                   next = nn->next;
                   if (next)
                           next->prev = nn->prev;
   
                   prev = nn->prev;
                   if (prev)
                           prev->next = nn->next;
   
                   nn->prev = nn->next = NULL;
   
                   /*
                    * Scan back until we reach a node that's ordered before
                    * us, then set ourselves as being the next.
                    */
                   for ( ; prev; prev = prev->prev)
                           if (order_rs(prev->tok) <= o)
                                   break;
   
                   nn->prev = prev;
                   if (prev) {
                           if (prev->next)
                                   prev->next->prev = nn;
                           nn->next = prev->next;
                           prev->next = nn;
                           continue;
                   }
   
                   n->body->child->prev = nn;
                   nn->next = n->body->child;
                   n->body->child = nn;
           }
           return(1);
   }

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.23