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

Diff for /mandoc/eqn.c between version 1.16 and 1.17

version 1.16, 2011/07/21 13:18:24 version 1.17, 2011/07/21 13:37:04
Line 31 
Line 31 
 #define EQN_NEST_MAX     128 /* maximum nesting of defines */  #define EQN_NEST_MAX     128 /* maximum nesting of defines */
 #define EQN_MSG(t, x)    mandoc_msg((t), (x)->parse, (x)->eqn.ln, (x)->eqn.pos, NULL)  #define EQN_MSG(t, x)    mandoc_msg((t), (x)->parse, (x)->eqn.ln, (x)->eqn.pos, NULL)
   
 struct  eqnpart {  struct  eqnstr {
         const char      *name;          const char      *name;
         size_t           sz;          size_t           sz;
         int             (*fp)(struct eqn_node *);  
 };  };
   
 struct  eqnmark {  struct  eqnpart {
         const char      *name;          struct eqnstr    str;
         size_t           sz;          int             (*fp)(struct eqn_node *);
 };  };
   
 enum    eqnpartt {  enum    eqnpartt {
Line 63  static int   eqn_box(struct eqn_node *, 
Line 62  static int   eqn_box(struct eqn_node *, 
                                 struct eqn_box *, struct eqn_box **);                                  struct eqn_box *, struct eqn_box **);
   
 static  const struct eqnpart eqnparts[EQN__MAX] = {  static  const struct eqnpart eqnparts[EQN__MAX] = {
         { "define", 6, eqn_do_define }, /* EQN_DEFINE */          { { "define", 6 }, eqn_do_define }, /* EQN_DEFINE */
         { "set", 3, eqn_do_set }, /* EQN_SET */          { { "set", 3 }, eqn_do_set }, /* EQN_SET */
         { "undef", 5, eqn_do_undef }, /* EQN_UNDEF */          { { "undef", 5 }, eqn_do_undef }, /* EQN_UNDEF */
 };  };
   
 static  const struct eqnmark eqnmarks[EQNMARK__MAX] = {  static  const struct eqnstr eqnmarks[EQNMARK__MAX] = {
         { "", 0 }, /* EQNMARK_NONE */          { "", 0 }, /* EQNMARK_NONE */
         { "dot", 3 }, /* EQNMARK_DOT */          { "dot", 3 }, /* EQNMARK_DOT */
         { "dotdot", 6 }, /* EQNMARK_DOTDOT */          { "dotdot", 6 }, /* EQNMARK_DOTDOT */
Line 80  static const struct eqnmark eqnmarks[EQNMARK__MAX] = {
Line 79  static const struct eqnmark eqnmarks[EQNMARK__MAX] = {
         { "under", 5 }, /* EQNMARK_UNDER */          { "under", 5 }, /* EQNMARK_UNDER */
 };  };
   
   static  const struct eqnstr eqnfonts[EQNFONT__MAX] = {
           { "roman", 5 },
           { "bold", 4 },
           { "italic", 6 },
   };
   
 /* ARGSUSED */  /* ARGSUSED */
 enum rofferr  enum rofferr
 eqn_read(struct eqn_node **epp, int ln,  eqn_read(struct eqn_node **epp, int ln,
Line 173  eqn_box(struct eqn_node *ep, struct eqn_box *last, str
Line 178  eqn_box(struct eqn_node *ep, struct eqn_box *last, str
         size_t           sz;          size_t           sz;
         const char      *start;          const char      *start;
         int              c, i, nextc;          int              c, i, nextc;
           enum eqn_fontt   font;
         struct eqn_box  *bp;          struct eqn_box  *bp;
   
         /*          /*
Line 183  eqn_box(struct eqn_node *ep, struct eqn_box *last, str
Line 189  eqn_box(struct eqn_node *ep, struct eqn_box *last, str
   
         *sv = last;          *sv = last;
         nextc = 1;          nextc = 1;
           font = EQNFONT_NONE;
   
 again:  again:
         if (NULL == (start = eqn_nexttok(ep, &sz)))          if (NULL == (start = eqn_nexttok(ep, &sz)))
                 return(0);                  return(0);
   
           for (i = 0; i < (int)EQNFONT__MAX; i++) {
                   if (eqnfonts[i].sz != sz)
                           continue;
                   if (strncmp(eqnfonts[i].name, start, sz))
                           continue;
                   font = (enum eqn_fontt)i;
                   goto again;
           }
   
         for (i = 0; i < (int)EQN__MAX; i++) {          for (i = 0; i < (int)EQN__MAX; i++) {
                 if (eqnparts[i].sz != sz)                  if (eqnparts[i].str.sz != sz)
                         continue;                          continue;
                 if (strncmp(eqnparts[i].name, start, sz))                  if (strncmp(eqnparts[i].str.name, start, sz))
                         continue;                          continue;
                 if ( ! (*eqnparts[i].fp)(ep))                  if ( ! (*eqnparts[i].fp)(ep))
                         return(-1);                          return(-1);
   
                 goto again;                  goto again;
         }          }
   
Line 213  again:
Line 229  again:
                 return(1);                  return(1);
   
         bp = mandoc_calloc(1, sizeof(struct eqn_box));          bp = mandoc_calloc(1, sizeof(struct eqn_box));
           bp->font = font;
           font = EQNFONT_NONE;
   
         if (nextc)          if (nextc)
                 last->child = bp;                  last->child = bp;
         else          else

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

CVSweb