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

Diff for /mandoc/roff.c between version 1.154 and 1.159

version 1.154, 2011/07/27 07:09:41 version 1.159, 2011/07/27 14:19:26
Line 143  struct predef {
Line 143  struct predef {
 #define PREDEF(__name, __str) \  #define PREDEF(__name, __str) \
         { (__name), (__str) },          { (__name), (__str) },
   
   static  enum rofft       roffhash_find(const char *, size_t);
   static  void             roffhash_init(void);
   static  void             roffnode_cleanscope(struct roff *);
   static  void             roffnode_pop(struct roff *);
   static  void             roffnode_push(struct roff *, enum rofft,
                                   const char *, int, int);
 static  enum rofferr     roff_block(ROFF_ARGS);  static  enum rofferr     roff_block(ROFF_ARGS);
 static  enum rofferr     roff_block_text(ROFF_ARGS);  static  enum rofferr     roff_block_text(ROFF_ARGS);
 static  enum rofferr     roff_block_sub(ROFF_ARGS);  static  enum rofferr     roff_block_sub(ROFF_ARGS);
Line 153  static enum rofferr  roff_cond_text(ROFF_ARGS);
Line 159  static enum rofferr  roff_cond_text(ROFF_ARGS);
 static  enum rofferr     roff_cond_sub(ROFF_ARGS);  static  enum rofferr     roff_cond_sub(ROFF_ARGS);
 static  enum rofferr     roff_ds(ROFF_ARGS);  static  enum rofferr     roff_ds(ROFF_ARGS);
 static  enum roffrule    roff_evalcond(const char *, int *);  static  enum roffrule    roff_evalcond(const char *, int *);
   static  void             roff_free1(struct roff *);
 static  void             roff_freestr(struct roff *);  static  void             roff_freestr(struct roff *);
 static  char            *roff_getname(struct roff *, char **, int, int);  static  char            *roff_getname(struct roff *, char **, int, int);
 static  const char      *roff_getstrn(const struct roff *,  static  const char      *roff_getstrn(const struct roff *,
                                 const char *, size_t);                                  const char *, size_t);
 static  enum rofferr     roff_line_ignore(ROFF_ARGS);  static  enum rofferr     roff_line_ignore(ROFF_ARGS);
 static  enum rofferr     roff_nr(ROFF_ARGS);  static  enum rofferr     roff_nr(ROFF_ARGS);
   static  void             roff_openeqn(struct roff *, const char *,
                                   int, int, const char *);
   static  enum rofft       roff_parse(struct roff *, const char *, int *);
   static  enum rofferr     roff_parsetext(char *);
 static  void             roff_res(struct roff *,  static  void             roff_res(struct roff *,
                                 char **, size_t *, int, int);                                  char **, size_t *, int, int);
 static  enum rofferr     roff_rm(ROFF_ARGS);  static  enum rofferr     roff_rm(ROFF_ARGS);
Line 172  static enum rofferr  roff_EN(ROFF_ARGS);
Line 183  static enum rofferr  roff_EN(ROFF_ARGS);
 static  enum rofferr     roff_T_(ROFF_ARGS);  static  enum rofferr     roff_T_(ROFF_ARGS);
 static  enum rofferr     roff_userdef(ROFF_ARGS);  static  enum rofferr     roff_userdef(ROFF_ARGS);
   
 /* See roff_hash_find() */  /* See roffhash_find() */
   
 #define ASCII_HI         126  #define ASCII_HI         126
 #define ASCII_LO         33  #define ASCII_LO         33
Line 220  static const struct predef predefs[PREDEFS_MAX] = {
Line 231  static const struct predef predefs[PREDEFS_MAX] = {
 #include "predefs.in"  #include "predefs.in"
 };  };
   
 static  void             roff_free1(struct roff *);  /* See roffhash_find() */
 static  enum rofft       roff_hash_find(const char *, size_t);  
 static  void             roff_hash_init(void);  
 static  void             roffnode_cleanscope(struct roff *);  
 static  void             roffnode_push(struct roff *, enum rofft,  
                                 const char *, int, int);  
 static  void             roffnode_pop(struct roff *);  
 static  enum rofft       roff_parse(struct roff *, const char *, int *);  
   
 /* See roff_hash_find() */  
 #define ROFF_HASH(p)    (p[0] - ASCII_LO)  #define ROFF_HASH(p)    (p[0] - ASCII_LO)
   
 static void  static void
 roff_hash_init(void)  roffhash_init(void)
 {  {
         struct roffmac   *n;          struct roffmac   *n;
         int               buc, i;          int               buc, i;
Line 258  roff_hash_init(void)
Line 260  roff_hash_init(void)
  * the nil-terminated string name could be found.   * the nil-terminated string name could be found.
  */   */
 static enum rofft  static enum rofft
 roff_hash_find(const char *p, size_t s)  roffhash_find(const char *p, size_t s)
 {  {
         int              buc;          int              buc;
         struct roffmac  *n;          struct roffmac  *n;
Line 387  roff_alloc(struct mparse *parse)
Line 389  roff_alloc(struct mparse *parse)
         r->parse = parse;          r->parse = parse;
         r->rstackpos = -1;          r->rstackpos = -1;
   
         roff_hash_init();          roffhash_init();
   
         for (i = 0; i < PREDEFS_MAX; i++)          for (i = 0; i < PREDEFS_MAX; i++)
                 roff_setstr(r, predefs[i].name, predefs[i].str, 0);                  roff_setstr(r, predefs[i].name, predefs[i].str, 0);
Line 517  again:
Line 519  again:
 static enum rofferr  static enum rofferr
 roff_parsetext(char *p)  roff_parsetext(char *p)
 {  {
           char             l, r;
         size_t           sz;          size_t           sz;
         const char      *start;          const char      *start;
         enum mandoc_esc  esc;          enum mandoc_esc  esc;
Line 527  roff_parsetext(char *p)
Line 530  roff_parsetext(char *p)
                 sz = strcspn(p, "-\\");                  sz = strcspn(p, "-\\");
                 p += sz;                  p += sz;
   
                   if ('\0' == *p)
                           break;
   
                 if ('\\' == *p) {                  if ('\\' == *p) {
                         /* Skip over escapes. */                          /* Skip over escapes. */
                         p++;                          p++;
Line 534  roff_parsetext(char *p)
Line 540  roff_parsetext(char *p)
                                 ((const char **)&p, NULL, NULL);                                  ((const char **)&p, NULL, NULL);
                         if (ESCAPE_ERROR == esc)                          if (ESCAPE_ERROR == esc)
                                 break;                                  break;
                 } else if ('-' == *p) {                          continue;
                         if (mandoc_hyph(start, p))                  } else if (p == start) {
                                 *p = ASCII_HYPH;  
                         p++;                          p++;
                           continue;
                 }                  }
   
                   l = *(p - 1);
                   r = *(p + 1);
                   if ('\\' != l &&
                                   '\t' != r && '\t' != l &&
                                   ' ' != r && ' ' != l &&
                                   '-' != r && '-' != l &&
                                   ! isdigit((unsigned char)l) &&
                                   ! isdigit((unsigned char)r))
                           *p = ASCII_HYPH;
                   p++;
         }          }
   
         return(ROFF_CONT);          return(ROFF_CONT);
Line 668  roff_parse(struct roff *r, const char *buf, int *pos)
Line 685  roff_parse(struct roff *r, const char *buf, int *pos)
         maclen = strcspn(mac + 1, " \\\t\0") + 1;          maclen = strcspn(mac + 1, " \\\t\0") + 1;
   
         t = (r->current_string = roff_getstrn(r, mac, maclen))          t = (r->current_string = roff_getstrn(r, mac, maclen))
             ? ROFF_USERDEF : roff_hash_find(mac, maclen);              ? ROFF_USERDEF : roffhash_find(mac, maclen);
   
         *pos += (int)maclen;          *pos += (int)maclen;
   
Line 1247  roff_T_(ROFF_ARGS)
Line 1264  roff_T_(ROFF_ARGS)
         return(ROFF_IGN);          return(ROFF_IGN);
 }  }
   
 int  #if 0
   static int
 roff_closeeqn(struct roff *r)  roff_closeeqn(struct roff *r)
 {  {
   
         return(r->eqn && ROFF_EQN == eqn_end(&r->eqn) ? 1 : 0);          return(r->eqn && ROFF_EQN == eqn_end(&r->eqn) ? 1 : 0);
 }  }
   #endif
   
 void  static void
 roff_openeqn(struct roff *r, const char *name, int line,  roff_openeqn(struct roff *r, const char *name, int line,
                 int offs, const char *buf)                  int offs, const char *buf)
 {  {
Line 1504  roff_getstrn(const struct roff *r, const char *name, s
Line 1523  roff_getstrn(const struct roff *r, const char *name, s
 {  {
         const struct roffstr *n;          const struct roffstr *n;
   
         n = r->first_string;          for (n = r->first_string; n; n = n->next)
         while (n && (strncmp(name, n->name, len) || '\0' != n->name[(int)len]))                  if (0 == strncmp(name, n->name, len) &&
                 n = n->next;                                  '\0' == n->name[(int)len])
                           return(n->string);
   
         return(n ? n->string : NULL);          return(NULL);
 }  }
   
 static void  static void

Legend:
Removed from v.1.154  
changed lines
  Added in v.1.159

CVSweb