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

Diff for /mandoc/tbl_opts.c between version 1.4 and 1.11

version 1.4, 2010/12/29 14:38:14 version 1.11, 2011/04/04 23:04:38
Line 14 
Line 14 
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */   */
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
   
 #include <ctype.h>  #include <ctype.h>
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
   
 #include "mandoc.h"  #include "mandoc.h"
   #include "libmandoc.h"
 #include "libroff.h"  #include "libroff.h"
   
 enum    tbl_ident {  enum    tbl_ident {
Line 71  static const struct tbl_phrase keys[KEY_MAXKEYS] = {
Line 76  static const struct tbl_phrase keys[KEY_MAXKEYS] = {
         { "nospaces",    TBL_OPT_NOSPACE,       KEY_NOSPACE},          { "nospaces",    TBL_OPT_NOSPACE,       KEY_NOSPACE},
 };  };
   
 static  int              arg(struct tbl *, int, const char *, int *, int);  static  int              arg(struct tbl_node *, int,
 static  void             opt(struct tbl *, int, const char *, int *);                                  const char *, int *, enum tbl_ident);
   static  void             opt(struct tbl_node *, int,
                                   const char *, int *);
   
 static int  static int
 arg(struct tbl *tbl, int ln, const char *p, int *pos, int key)  arg(struct tbl_node *tbl, int ln, const char *p, int *pos, enum tbl_ident key)
 {  {
         int              i;          int              i;
         char             buf[KEY_MAXNUMSZ];          char             buf[KEY_MAXNUMSZ];
Line 86  arg(struct tbl *tbl, int ln, const char *p, int *pos, 
Line 93  arg(struct tbl *tbl, int ln, const char *p, int *pos, 
         /* Arguments always begin with a parenthesis. */          /* Arguments always begin with a parenthesis. */
   
         if ('(' != p[*pos]) {          if ('(' != p[*pos]) {
                 TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos);                  mandoc_msg(MANDOCERR_TBL, tbl->parse,
                                   ln, *pos, NULL);
                 return(0);                  return(0);
         }          }
   
Line 100  arg(struct tbl *tbl, int ln, const char *p, int *pos, 
Line 108  arg(struct tbl *tbl, int ln, const char *p, int *pos, 
   
         switch (key) {          switch (key) {
         case (KEY_DELIM):          case (KEY_DELIM):
                 if ('\0' == (tbl->delims[0] = p[(*pos)++])) {                  if ('\0' == p[(*pos)++]) {
                         TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1);                          mandoc_msg(MANDOCERR_TBL, tbl->parse,
                                           ln, *pos - 1, NULL);
                         return(0);                          return(0);
                 }                  }
   
                 if ('\0' == (tbl->delims[1] = p[(*pos)++])) {                  if ('\0' == p[(*pos)++]) {
                         TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1);                          mandoc_msg(MANDOCERR_TBL, tbl->parse,
                                           ln, *pos - 1, NULL);
                         return(0);                          return(0);
                 }                  }
                 break;                  break;
         case (KEY_TAB):          case (KEY_TAB):
                 if ('\0' != (tbl->tab = p[(*pos)++]))                  if ('\0' != (tbl->opts.tab = p[(*pos)++]))
                         break;                          break;
   
                 TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1);                  mandoc_msg(MANDOCERR_TBL, tbl->parse,
                                   ln, *pos - 1, NULL);
                 return(0);                  return(0);
         case (KEY_LINESIZE):          case (KEY_LINESIZE):
                 for (i = 0; i < KEY_MAXNUMSZ && p[*pos]; i++, (*pos)++) {                  for (i = 0; i < KEY_MAXNUMSZ && p[*pos]; i++, (*pos)++) {
Line 125  arg(struct tbl *tbl, int ln, const char *p, int *pos, 
Line 136  arg(struct tbl *tbl, int ln, const char *p, int *pos, 
   
                 if (i < KEY_MAXNUMSZ) {                  if (i < KEY_MAXNUMSZ) {
                         buf[i] = '\0';                          buf[i] = '\0';
                         tbl->linesize = atoi(buf);                          tbl->opts.linesize = atoi(buf);
                         break;                          break;
                 }                  }
   
                 (*tbl->msg)(MANDOCERR_TBL, tbl->data, ln, *pos, NULL);                  mandoc_msg(MANDOCERR_TBL, tbl->parse, ln, *pos, NULL);
                 return(0);                  return(0);
         case (KEY_DPOINT):          case (KEY_DPOINT):
                 if ('\0' != (tbl->decimal = p[(*pos)++]))                  if ('\0' != (tbl->opts.decimal = p[(*pos)++]))
                         break;                          break;
   
                 TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1);                  mandoc_msg(MANDOCERR_TBL, tbl->parse,
                                   ln, *pos - 1, NULL);
                 return(0);                  return(0);
         default:          default:
                 abort();                  abort();
Line 147  arg(struct tbl *tbl, int ln, const char *p, int *pos, 
Line 159  arg(struct tbl *tbl, int ln, const char *p, int *pos, 
         if (')' == p[(*pos)++])          if (')' == p[(*pos)++])
                 return(1);                  return(1);
   
         TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1);          mandoc_msg(MANDOCERR_TBL, tbl->parse, ln, *pos - 1, NULL);
         return(0);          return(0);
 }  }
   
 static void  static void
 opt(struct tbl *tbl, int ln, const char *p, int *pos)  opt(struct tbl_node *tbl, int ln, const char *p, int *pos)
 {  {
         int              i, sv;          int              i, sv;
         char             buf[KEY_MAXNAME];          char             buf[KEY_MAXNAME];
Line 186  again: /*
Line 198  again: /*
         /* Copy up to first non-alpha character. */          /* Copy up to first non-alpha character. */
   
         for (sv = *pos, i = 0; i < KEY_MAXNAME; i++, (*pos)++) {          for (sv = *pos, i = 0; i < KEY_MAXNAME; i++, (*pos)++) {
                 buf[i] = tolower(p[*pos]);                  buf[i] = (char)tolower((unsigned char)p[*pos]);
                 if ( ! isalpha((unsigned char)buf[i]))                  if ( ! isalpha((unsigned char)buf[i]))
                         break;                          break;
         }          }
Line 194  again: /*
Line 206  again: /*
         /* Exit if buffer is empty (or overrun). */          /* Exit if buffer is empty (or overrun). */
   
         if (KEY_MAXNAME == i || 0 == i) {          if (KEY_MAXNAME == i || 0 == i) {
                 TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos);                  mandoc_msg(MANDOCERR_TBL, tbl->parse, ln, *pos, NULL);
                 return;                  return;
         }          }
   
Line 220  again: /*
Line 232  again: /*
                  */                   */
   
                 if (keys[i].key)                  if (keys[i].key)
                         tbl->opts |= keys[i].key;                          tbl->opts.opts |= keys[i].key;
                 else if ( ! arg(tbl, ln, p, pos, keys[i].ident))                  else if ( ! arg(tbl, ln, p, pos, keys[i].ident))
                         return;                          return;
   
Line 233  again: /*
Line 245  again: /*
          */           */
   
         if (KEY_MAXKEYS == i)          if (KEY_MAXKEYS == i)
                 TBL_MSG(tbl, MANDOCERR_TBLOPT, ln, sv);                  mandoc_msg(MANDOCERR_TBLOPT, tbl->parse, ln, sv, NULL);
   
         goto again;          goto again;
         /* NOTREACHED */          /* NOTREACHED */
 }  }
   
 int  int
 tbl_option(struct tbl *tbl, int ln, const char *p)  tbl_option(struct tbl_node *tbl, int ln, const char *p)
 {  {
         int              pos;          int              pos;
   

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.11

CVSweb