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

Diff for /src/usr.bin/mandoc/mdoc_macro.c between version 1.40 and 1.41

version 1.40, 2010/05/15 12:30:59 version 1.41, 2010/05/15 13:12:55
Line 45 
Line 45 
 static  enum mdoct      lookup(enum mdoct, const char *);  static  enum mdoct      lookup(enum mdoct, const char *);
 static  enum mdoct      lookup_raw(const char *);  static  enum mdoct      lookup_raw(const char *);
 static  int             phrase(struct mdoc *, int, int,  static  int             phrase(struct mdoc *, int, int,
                                 char *, enum margserr, int);                                  char *, enum margserr);
 static  enum mdoct      rew_alt(enum mdoct);  static  enum mdoct      rew_alt(enum mdoct);
 static  int             rew_dobreak(enum mdoct,  static  int             rew_dobreak(enum mdoct,
                                 const struct mdoc_node *);                                  const struct mdoc_node *);
Line 883 
Line 883 
 static int  static int
 blk_full(MACRO_PROT_ARGS)  blk_full(MACRO_PROT_ARGS)
 {  {
         int               la, pcnt;          int               la;
         struct mdoc_arg  *arg;          struct mdoc_arg  *arg;
         struct mdoc_node *head; /* save of head macro */          struct mdoc_node *head; /* save of head macro */
         struct mdoc_node *body; /* save of body macro */          struct mdoc_node *body; /* save of body macro */
Line 952 
Line 952 
   
         ac = ARGS_ERROR;          ac = ARGS_ERROR;
   
         for (pcnt = 0; ; ) {          for ( ; ; ) {
                 la = *pos;                  la = *pos;
                 lac = ac;                  lac = ac;
                 ac = mdoc_args(m, line, pos, buf, tok, &p);                  ac = mdoc_args(m, line, pos, buf, tok, &p);
Line 962 
Line 962 
                 if (ARGS_EOLN == ac)                  if (ARGS_EOLN == ac)
                         break;                          break;
   
                   if (ARGS_PEND == ac) {
                           if (ARGS_PPHRASE == lac)
                                   ac = ARGS_PPHRASE;
                           else
                                   ac = ARGS_PHRASE;
                   }
   
                 /* Don't emit leading punct. for phrases. */                  /* Don't emit leading punct. for phrases. */
   
                 if (NULL == head &&                  if (NULL == head &&
                                 ARGS_PHRASE != ac &&                                  ARGS_PHRASE != ac &&
                                 ARGS_PPHRASE != ac &&                                  ARGS_PPHRASE != ac &&
                                 ARGS_PEND != ac &&  
                                 ARGS_QWORD != ac &&                                  ARGS_QWORD != ac &&
                                 DELIM_OPEN == mdoc_isdelim(p)) {                                  DELIM_OPEN == mdoc_isdelim(p)) {
                         if ( ! mdoc_word_alloc(m, line, la, p))                          if ( ! mdoc_word_alloc(m, line, la, p))
Line 979 
Line 985 
   
                 if (NULL == head ||                  if (NULL == head ||
                                 ARGS_PHRASE == ac ||                                  ARGS_PHRASE == ac ||
                                 ARGS_PEND == ac ||  
                                 ARGS_PPHRASE == ac) {                                  ARGS_PPHRASE == ac) {
                         if ( ! mdoc_head_alloc(m, line, ppos, tok))                          if ( ! mdoc_head_alloc(m, line, ppos, tok))
                                 return(0);                                  return(0);
                         head = m->last;                          head = m->last;
                 }                  }
   
                 if (ARGS_PHRASE == ac ||                  if (ARGS_PHRASE == ac || ARGS_PPHRASE == ac) {
                                 ARGS_PEND == ac ||                          if (ARGS_PPHRASE == ac)
                                 ARGS_PPHRASE == ac) {                                  m->flags |= MDOC_PPHRASE;
                         /*                          if ( ! phrase(m, line, la, buf, ac))
                          * Special treatment for the last phrase.  A  
                          * prior ARGS_PHRASE gets is handled as a  
                          * regular ARGS_PHRASE, but a prior ARGS_PPHRASE  
                          * has special handling.  
                          */  
                         if (ARGS_PEND == ac && ARGS_ERROR == lac)  
                                 ac = ARGS_PHRASE;  
                         else if (ARGS_PEND == ac && ARGS_PHRASE == lac)  
                                 ac = ARGS_PHRASE;  
   
                         if ( ! phrase(m, line, la, buf, ac, pcnt++))  
                                 return(0);                                  return(0);
                           m->flags &= ~MDOC_PPHRASE;
                         if ( ! rew_sub(MDOC_HEAD, m, tok, line, ppos))                          if ( ! rew_sub(MDOC_HEAD, m, tok, line, ppos))
                                 return(0);                                  return(0);
                         continue;                          continue;
Line 1543 
Line 1538 
  * macro is encountered.   * macro is encountered.
  */   */
 static int  static int
 phrase(struct mdoc *m, int line, int ppos, char *buf,  phrase(struct mdoc *m, int line, int ppos, char *buf, enum margserr ac)
                 enum margserr ac, int count)  
 {  {
         int              la, pos;          int              la, pos;
         enum margserr    aac;          enum margserr    aac;
         enum mdoct       ntok;          enum mdoct       ntok;
         char            *p;          char            *p;
   
         assert(ARGS_PHRASE == ac ||          assert(ARGS_PHRASE == ac || ARGS_PPHRASE == ac);
                         ARGS_PEND == ac ||  
                         ARGS_PPHRASE == ac);  
   
         if (count && ARGS_PPHRASE == ac)  
                 return(mdoc_word_alloc(m, line, ppos, &buf[ppos]));  
   
         for (pos = ppos; ; ) {          for (pos = ppos; ; ) {
                 la = pos;                  la = pos;
   
                 /* Note: no calling context! */  
                 aac = mdoc_zargs(m, line, &pos, buf, 0, &p);                  aac = mdoc_zargs(m, line, &pos, buf, 0, &p);
   
                 if (ARGS_ERROR == aac)                  if (ARGS_ERROR == aac)
Line 1569 
Line 1557 
                 if (ARGS_EOLN == aac)                  if (ARGS_EOLN == aac)
                         break;                          break;
   
                 ntok = ARGS_QWORD == aac || ARGS_PEND == ac ?                  ntok = ARGS_QWORD == aac ? MDOC_MAX : lookup_raw(p);
                         MDOC_MAX : lookup_raw(p);  
   
                 if (MDOC_MAX == ntok) {                  if (MDOC_MAX == ntok) {
                         if ( ! mdoc_word_alloc(m, line, la, p))                          if ( ! mdoc_word_alloc(m, line, la, p))

Legend:
Removed from v.1.40  
changed lines
  Added in v.1.41