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

Diff for /mandoc/roff.c between version 1.25 and 1.26

version 1.25, 2008/11/30 23:05:57 version 1.26, 2008/12/01 09:25:18
Line 105  struct rofftree {
Line 105  struct rofftree {
 static  int               roff_Dd(ROFFCALL_ARGS);  static  int               roff_Dd(ROFFCALL_ARGS);
 static  int               roff_Dt(ROFFCALL_ARGS);  static  int               roff_Dt(ROFFCALL_ARGS);
 static  int               roff_Os(ROFFCALL_ARGS);  static  int               roff_Os(ROFFCALL_ARGS);
   #ifdef notyet
   static  int               roff_Ns(ROFFCALL_ARGS);
   #endif
   
 static  int               roff_layout(ROFFCALL_ARGS);  static  int               roff_layout(ROFFCALL_ARGS);
 static  int               roff_text(ROFFCALL_ARGS);  static  int               roff_text(ROFFCALL_ARGS);
 static  int               roff_comment(ROFFCALL_ARGS);  static  int               roff_comment(ROFFCALL_ARGS);
 static  int               roff_close(ROFFCALL_ARGS);  static  int               roff_close(ROFFCALL_ARGS);
 static  int               roff_special(ROFFCALL_ARGS);  
   
 static  struct roffnode  *roffnode_new(int, struct rofftree *);  static  struct roffnode  *roffnode_new(int, struct rofftree *);
 static  void              roffnode_free(struct rofftree *);  static  void              roffnode_free(struct rofftree *);
Line 235  static const struct rofftok tokens[ROFF_MAX] = {
Line 237  static const struct rofftok tokens[ROFF_MAX] = {
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Bq */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Bq */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Bsx */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Bsx */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Bx */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Bx */
         {roff_special, NULL, NULL, NULL, 0, ROFF_SPECIAL, 0 },  /* Db */          {        NULL, NULL, NULL, NULL, 0, ROFF_SPECIAL, 0 },  /* Db */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Dc */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Dc */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Do */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Do */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Dq */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Dq */
Line 246  static const struct rofftok tokens[ROFF_MAX] = {
Line 248  static const struct rofftok tokens[ROFF_MAX] = {
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Fx */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Fx */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Ms */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Ms */
         {   NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* No */          {   NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* No */
         {   NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ns */          {        NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ns */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Nx */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Nx */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Ox */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Ox */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Pc */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Pc */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Pf */          {        NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Pf */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_LAYOUT, ROFF_PARSED | ROFF_CALLABLE }, /* Po */          {   roff_text, NULL, NULL, NULL, 0, ROFF_LAYOUT, ROFF_PARSED | ROFF_CALLABLE }, /* Po */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Pq */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Pq */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Qc */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Qc */
Line 262  static const struct rofftok tokens[ROFF_MAX] = {
Line 264  static const struct rofftok tokens[ROFF_MAX] = {
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sc */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sc */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* So */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* So */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sq */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sq */
         {roff_special, NULL, NULL, NULL, 0, ROFF_SPECIAL, 0 }, /* Sm */          {        NULL, NULL, NULL, NULL, 0, ROFF_SPECIAL, 0 }, /* Sm */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sx */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sx */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sy */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sy */
         {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Tn */          {   roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Tn */
Line 494  roffargs(const struct rofftree *tree, 
Line 496  roffargs(const struct rofftree *tree, 
 }  }
   
   
 /* XXX */  
 static int  static int
 roffscan(int tok, const int *tokv)  roffscan(int tok, const int *tokv)
 {  {
Line 998  roff_layout(ROFFCALL_ARGS) 
Line 999  roff_layout(ROFFCALL_ARGS) 
   
         i = 0;          i = 0;
         while (*argv) {          while (*argv) {
                 if (ROFF_MAX != (c = rofffindcallable(*argv))) {                  if (ROFF_MAX == (c = rofffindcallable(*argv))) {
                         if (NULL == tokens[c].cb) {                          assert(tree->arg);
                                 roff_err(tree, *argv, "unsupported "                          if ( ! (*tree->cb.roffdata)
                                                 "macro `%s'",                                          (tree->arg, i, *argv++))
                                                 toknames[c]);  
                                 return(0);                                  return(0);
                         }                          i = 1;
                         if ( ! (*tokens[c].cb)(c, tree, argv, ROFF_ENTER))                          continue;
                                 return(0);  
                         break;  
                 }                  }
   
                 assert(tree->arg);                  if (NULL == tokens[c].cb) {
                 if ( ! (*tree->cb.roffdata)(tree->arg, i, *argv++))                          roff_err(tree, *argv, "unsupported macro `%s'",
                                           toknames[c]);
                         return(0);                          return(0);
                 i = 1;                  }
   
                   if ( ! (*tokens[c].cb)(c, tree, argv, ROFF_ENTER))
                           return(0);
   
                   break;
         }          }
   
         /*          /*
Line 1022  roff_layout(ROFFCALL_ARGS) 
Line 1026  roff_layout(ROFFCALL_ARGS) 
          * the end of line.           * the end of line.
          */           */
   
         if (ROFF_PARSED & tokens[tok].flags && *argv) {          if ( ! (ROFF_PARSED & tokens[tok].flags && *argv))
                 i = 0;                  return((*tree->cb.roffout)(tree->arg, tok));
                 while (argv[i])  
                         i++;  
   
                 assert(i > 0);          i = 0;
                 if ( ! roffispunct(argv[--i]))          while (argv[i])
                         return((*tree->cb.roffout)(tree->arg, tok));                  i++;
   
                 while (i >= 0 && roffispunct(argv[i]))          assert(i > 0);
                         i--;          if ( ! roffispunct(argv[--i]))
                   return((*tree->cb.roffout)(tree->arg, tok));
   
                 assert(0 != i);          while (i >= 0 && roffispunct(argv[i]))
                 i++;                  i--;
   
                 /* LINTED */          assert(0 != i);
                 while (argv[i])          i++;
                         if ( ! (*tree->cb.roffdata)(tree->arg, 0, argv[i++]))  
                                 return(0);  
         }  
   
           /* LINTED */
           while (argv[i])
                   if ( ! (*tree->cb.roffdata)(tree->arg, 0, argv[i++]))
                           return(0);
   
         return((*tree->cb.roffout)(tree->arg, tok));          return((*tree->cb.roffout)(tree->arg, tok));
 }  }
   
Line 1108  roff_text(ROFFCALL_ARGS) 
Line 1113  roff_text(ROFFCALL_ARGS) 
                                 i = 1;                                  i = 1;
                         }                          }
   
                         if ( ! (*tree->cb.roffdata)(tree->arg, i, *argv++))                          if ( ! (*tree->cb.roffdata)
                                           (tree->arg, i, *argv++))
                                 return(0);                                  return(0);
   
                         i = 1;                          i = 1;
Line 1141  roff_text(ROFFCALL_ARGS) 
Line 1147  roff_text(ROFFCALL_ARGS) 
          * the end of line.           * the end of line.
          */           */
   
         if (first && *argv) {          if ( ! (first && *argv))
                 i = 0;                  return(1);
                 while (argv[i])  
                         i++;  
   
                 assert(i > 0);          i = 0;
                 if ( ! roffispunct(argv[--i]))          while (argv[i])
                         return(1);                  i++;
   
                 while (i >= 0 && roffispunct(argv[i]))          assert(i > 0);
                         i--;          if ( ! roffispunct(argv[--i]))
                   return(1);
   
                 assert(0 != i);          while (i >= 0 && roffispunct(argv[i]))
                 i++;                  i--;
   
                 /* LINTED */          assert(0 != i);
                 while (argv[i])          i++;
                         if ( ! (*tree->cb.roffdata)(tree->arg, 0, argv[i++]))  
                                 return(0);  
         }  
   
           /* LINTED */
           while (argv[i])
                   if ( ! (*tree->cb.roffdata)(tree->arg, 0, argv[i++]))
                           return(0);
   
         return(1);          return(1);
 }  }
   
Line 1184  roff_close(ROFFCALL_ARGS)
Line 1191  roff_close(ROFFCALL_ARGS)
 }  }
   
   
   #if notyet
 /* ARGSUSED */  /* ARGSUSED */
 static int  static int
 roff_special(ROFFCALL_ARGS)  roff_Ns(ROFFCALL_ARGS)
 {  {
           int              c;
   
         return((*tree->cb.roffspecial)(tree->arg, tok));          argv++;
   
           if (ROFF_MAX != (c = rofffindcallable(*argv))) {
                   if (NULL == tokens[c].cb) {
                           roff_err(tree, *argv, "unsupported macro `%s'",
                                           toknames[c]);
                           return(0);
                   }
                   if ( ! (*tree->cb.roffspecial)(tree->arg, tok))
                           return(0);
                   if ( ! (*tokens[c].cb)(c, tree, argv, ROFF_ENTER))
                           return(0);
   
                   return(1);
           } else if ( ! (*tree->cb.roffdata)(tree->arg, 0, *argv++))
                   return(0);
   
           while (*argv) {
                   if (ROFF_MAX == (c = rofffindcallable(*argv))) {
                           assert(tree->arg);
                           if ( ! (*tree->cb.roffdata)
                                           (tree->arg, 1, *argv++))
                                   return(0);
                           continue;
                   }
                   if (NULL == tokens[c].cb) {
                           roff_err(tree, *argv, "unsupported macro `%s'",
                                           toknames[c]);
                           return(0);
                   }
                   if ( ! (*tokens[c].cb)(c, tree, argv, ROFF_ENTER))
                           return(0);
   
                   break;
           }
   
           return(1);
 }  }
   #endif
   
   
 static void  static void

Legend:
Removed from v.1.25  
changed lines
  Added in v.1.26

CVSweb