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

Diff for /mandoc/Attic/mlg.c between version 1.4 and 1.5

version 1.4, 2008/12/04 11:25:29 version 1.5, 2008/12/04 16:19:52
Line 68  static int   mlg_roffhead(void *, const struct tm *, 
Line 68  static int   mlg_roffhead(void *, const struct tm *, 
                                 const char *, const char *);                                  const char *, const char *);
 static  int              mlg_rofftail(void *);  static  int              mlg_rofftail(void *);
 static  int              mlg_roffin(void *, int, int *, char **);  static  int              mlg_roffin(void *, int, int *, char **);
 static  int              mlg_roffdata(void *, int, char *);  static  int              mlg_roffdata(void *, int,
                                   const char *, char *);
   static  int              mlg_rofftoken(void *, int, int);
 static  int              mlg_roffout(void *, int);  static  int              mlg_roffout(void *, int);
 static  int              mlg_roffblkin(void *, int, int *, char **);  static  int              mlg_roffblkin(void *, int, int *, char **);
 static  int              mlg_roffblkout(void *, int);  static  int              mlg_roffblkout(void *, int);
 static  int              mlg_roffspecial(void *, int, int *,  static  int              mlg_roffspecial(void *, int, int *,
                                 char **, char **);                                  char **, char **);
 static  int              mlg_roffblkheadin(void *, int, int *, char **);  static  int              mlg_roffblkheadin(void *, int,
                                   int *, char **);
 static  int              mlg_roffblkheadout(void *, int);  static  int              mlg_roffblkheadout(void *, int);
 static  int              mlg_roffblkbodyin(void *, int, int *, char **);  static  int              mlg_roffblkbodyin(void *, int,
                                   int *, char **);
 static  int              mlg_roffblkbodyout(void *, int);  static  int              mlg_roffblkbodyout(void *, int);
   
 static  int              mlg_beginblk(struct md_mlg *, enum md_ns, int,  static  int              mlg_beginblk(struct md_mlg *, enum md_ns, int,
Line 88  static int   mlg_endtag(struct md_mlg *, enum md_ns, i
Line 92  static int   mlg_endtag(struct md_mlg *, enum md_ns, i
 static  int              mlg_indent(struct md_mlg *);  static  int              mlg_indent(struct md_mlg *);
 static  int              mlg_newline(struct md_mlg *);  static  int              mlg_newline(struct md_mlg *);
 static  void             mlg_mode(struct md_mlg *, enum md_tok);  static  void             mlg_mode(struct md_mlg *, enum md_tok);
 static  int              mlg_data(struct md_mlg *, int, char *);  static  int              mlg_data(struct md_mlg *, int,
                                   const char *, char *);
   static  void             mlg_err(struct md_mlg *, const char *,
                                   const char *, char *);
   static  void             mlg_warn(struct md_mlg *, const char *,
                                   const char *, char *);
   static  void             mlg_msg(struct md_mlg *, enum roffmsg,
                                   const char *, const char *, char *);
   
 #ifdef __linux__  #ifdef __linux__
 extern  size_t           strlcat(char *, const char *, size_t);  extern  size_t           strlcat(char *, const char *, size_t);
Line 221  mlg_mode(struct md_mlg *p, enum md_tok ns)
Line 232  mlg_mode(struct md_mlg *p, enum md_tok ns)
   
   
 static int  static int
 mlg_data(struct md_mlg *p, int space, char *buf)  mlg_data(struct md_mlg *p, int space, const char *start, char *buf)
 {  {
         size_t           sz;          size_t           sz;
         char            *bufp;          char            *bufp;
           int              c;
   
         assert(p->mbuf);          assert(p->mbuf);
         assert(0 != p->indent);          assert(0 != p->indent);
Line 252  mlg_data(struct md_mlg *p, int space, char *buf)
Line 264  mlg_data(struct md_mlg *p, int space, char *buf)
                 if (0 == p->pos) {                  if (0 == p->pos) {
                         if ( ! mlg_indent(p))                          if ( ! mlg_indent(p))
                                 return(0);                                  return(0);
                         if ( ! ml_nputstring(p->mbuf, bufp,  
                                                 sz, &p->pos))                          c = ml_nputstring(p->mbuf, bufp, sz, &p->pos);
                           if (0 == c) {
                                   mlg_err(p, start, bufp, "invalid "
                                                   "character sequence");
                                 return(0);                                  return(0);
                           } else if (c > 1) {
                                   mlg_warn(p, start, bufp, "bogus "
                                                   "character sequence");
                                   return(0);
                           } else if (-1 == c)
                                   return(0);
   
                         if (p->indent * INDENT + sz >= COLUMNS)                          if (p->indent * INDENT + sz >= COLUMNS)
                                 if ( ! mlg_newline(p))                                  if ( ! mlg_newline(p))
                                         return(0);                                          return(0);
Line 273  mlg_data(struct md_mlg *p, int space, char *buf)
Line 295  mlg_data(struct md_mlg *p, int space, char *buf)
                                 return(0);                                  return(0);
                 }                  }
   
                 if ( ! ml_nputstring(p->mbuf, bufp, sz, &p->pos))                  c = ml_nputstring(p->mbuf, bufp, sz, &p->pos);
                   if (0 == c) {
                           mlg_err(p, start, bufp, "invalid "
                                           "character sequence");
                         return(0);                          return(0);
                   } else if (c > 1) {
                           mlg_warn(p, start, bufp, "bogus "
                                           "character sequence");
                           return(0);
                   } else if (-1 == c)
                           return(0);
   
                 if ( ! (ML_OVERRIDE_ALL & p->flags))                  if ( ! (ML_OVERRIDE_ALL & p->flags))
                         space = 1;                          space = 1;
Line 326  mlg_alloc(const struct md_args *args, 
Line 357  mlg_alloc(const struct md_args *args, 
         cb.roffspecial = mlg_roffspecial;          cb.roffspecial = mlg_roffspecial;
         cb.roffmsg = mlg_roffmsg;          cb.roffmsg = mlg_roffmsg;
         cb.roffdata = mlg_roffdata;          cb.roffdata = mlg_roffdata;
           cb.rofftoken = mlg_rofftoken;
   
         if (NULL == (p = calloc(1, sizeof(struct md_mlg))))          if (NULL == (p = calloc(1, sizeof(struct md_mlg))))
                 err(1, "calloc");                  err(1, "calloc");
Line 514  static void
Line 546  static void
 mlg_roffmsg(void *arg, enum roffmsg lvl,  mlg_roffmsg(void *arg, enum roffmsg lvl,
                 const char *buf, const char *pos, char *msg)                  const char *buf, const char *pos, char *msg)
 {  {
         char            *level;  
           mlg_msg((struct md_mlg *)arg, lvl, buf, pos, msg);
   }
   
   
   static int
   mlg_rofftoken(void *arg, int space, int value)
   {
         struct md_mlg   *p;          struct md_mlg   *p;
           const char      *seq;
           size_t           sz, res;
   
         assert(arg);          assert(arg);
         p = (struct md_mlg *)arg;          p = (struct md_mlg *)arg;
   
           switch (value) {
           case (ROFFTok_Sp_A):
                   seq = "\\a";
                   sz = 2;
                   break;
           case (ROFFTok_Sp_B):
                   seq = "\\b";
                   sz = 2;
                   break;
           case (ROFFTok_Sp_F):
                   seq = "\\f";
                   sz = 2;
                   break;
           case (ROFFTok_Sp_N):
                   seq = "\\n";
                   sz = 2;
                   break;
           case (ROFFTok_Sp_R):
                   seq = "\\r";
                   sz = 2;
                   break;
           case (ROFFTok_Sp_T):
                   seq = "\\t";
                   sz = 2;
                   break;
           case (ROFFTok_Sp_V):
                   seq = "\\v";
                   sz = 2;
                   break;
           case (ROFFTok_Space):
                   seq = " ";
                   sz = 6;
                   break;
           case (ROFFTok_Null):
                   seq = "";
                   sz = 0;
                   break;
           case (ROFFTok_Hyphen):
                   seq = "‐";
                   sz = 7;
                   break;
           case (ROFFTok_Em):
                   seq = "—";
                   sz = 7;
                   break;
           case (ROFFTok_En):
                   seq = "–";
                   sz = 7;
                   break;
           case (ROFFTok_Ge):
                   seq = "≥";
                   sz = 7;
                   break;
           case (ROFFTok_Le):
                   seq = "≤";
                   sz = 7;
                   break;
           case (ROFFTok_Rquote):
                   seq = "”";
                   sz = 7;
                   break;
           case (ROFFTok_Lquote):
                   seq = "“";
                   sz = 7;
                   break;
           case (ROFFTok_Uparrow):
                   seq = "↑";
                   sz = 7;
                   break;
           case (ROFFTok_Acute):
                   seq = "´";
                   sz = 6;
                   break;
           case (ROFFTok_Grave):
                   seq = "`";
                   sz = 5;
                   break;
           case (ROFFTok_Pi):
                   seq = "π";
                   sz = 6;
                   break;
           case (ROFFTok_Ne):
                   seq = "≠";
                   sz = 7;
                   break;
           case (ROFFTok_Lt):
                   seq = "<";
                   sz = 4;
                   break;
           case (ROFFTok_Gt):
                   seq = ">";
                   sz = 4;
                   break;
           case (ROFFTok_Plusmin):
                   seq = "±";
                   sz = 6;
                   break;
           case (ROFFTok_Infty):
                   seq = "∞";
                   sz = 7;
                   break;
           case (ROFFTok_Bar):
                   seq = "|";
                   sz = 6;
                   break;
           case (ROFFTok_Nan):
                   seq = "Nan";
                   sz = 3;
                   break;
           }
   
           if (space && ! ml_nputs(p->mbuf, " ", 1, &res))
                   return(0);
           p->pos += res;
   
           if (0 != sz && ! ml_nputs(p->mbuf, seq, sz, &res))
                   return(0);
           p->pos += res;
   
           return(1);
   }
   
   
   static int
   mlg_roffdata(void *arg, int space, const char *start, char *buf)
   {
           struct md_mlg   *p;
   
           assert(arg);
           p = (struct md_mlg *)arg;
   
           if ( ! mlg_data(p, space, start, buf))
                   return(0);
   
           mlg_mode(p, MD_TEXT);
           return(1);
   }
   
   
   static void
   mlg_err(struct md_mlg *p, const char *buf, const char *pos, char *msg)
   {
   
           mlg_msg(p, ROFF_ERROR, buf, pos, msg);
   }
   
   
   static void
   mlg_warn(struct md_mlg *p, const char *buf, const char *pos, char *msg)
   {
   
           mlg_msg(p, ROFF_WARN, buf, pos, msg);
   }
   
   
   static void
   mlg_msg(struct md_mlg *p, enum roffmsg lvl,
                   const char *buf, const char *pos, char *msg)
   {
           char            *level;
   
         switch (lvl) {          switch (lvl) {
         case (ROFF_WARN):          case (ROFF_WARN):
                 if ( ! (MD_WARN_ALL & p->args->warnings))                  if ( ! (MD_WARN_ALL & p->args->warnings))
Line 542  mlg_roffmsg(void *arg, enum roffmsg lvl, 
Line 744  mlg_roffmsg(void *arg, enum roffmsg lvl, 
                                 p->rbuf->name, level, msg);                                  p->rbuf->name, level, msg);
   
 }  }
   
   
 static int  
 mlg_roffdata(void *arg, int space, char *buf)  
 {  
         struct md_mlg   *p;  
   
         assert(arg);  
         p = (struct md_mlg *)arg;  
   
         if ( ! mlg_data(p, space, buf))  
                 return(0);  
   
         mlg_mode(p, MD_TEXT);  
         return(1);  
 }  
   

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

CVSweb