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

Diff for /mandoc/mandocdb.c between version 1.188 and 1.196

version 1.188, 2015/04/02 21:36:50 version 1.196, 2015/09/16 09:50:29
Line 130  enum stmt {
Line 130  enum stmt {
         STMT__MAX          STMT__MAX
 };  };
   
 typedef int (*mdoc_fp)(struct mpage *, const struct mdoc_meta *,  typedef int (*mdoc_fp)(struct mpage *, const struct roff_meta *,
                         const struct mdoc_node *);                          const struct roff_node *);
   
 struct  mdoc_handler {  struct  mdoc_handler {
         mdoc_fp          fp; /* optional handler */          mdoc_fp          fp; /* optional handler */
Line 156  static void  mpages_free(void);
Line 156  static void  mpages_free(void);
 static  void     mpages_merge(struct mparse *);  static  void     mpages_merge(struct mparse *);
 static  void     names_check(void);  static  void     names_check(void);
 static  void     parse_cat(struct mpage *, int);  static  void     parse_cat(struct mpage *, int);
 static  void     parse_man(struct mpage *, const struct man_meta *,  static  void     parse_man(struct mpage *, const struct roff_meta *,
                         const struct man_node *);                          const struct roff_node *);
 static  void     parse_mdoc(struct mpage *, const struct mdoc_meta *,  static  void     parse_mdoc(struct mpage *, const struct roff_meta *,
                         const struct mdoc_node *);                          const struct roff_node *);
 static  int      parse_mdoc_body(struct mpage *, const struct mdoc_meta *,  static  int      parse_mdoc_body(struct mpage *, const struct roff_meta *,
                         const struct mdoc_node *);                          const struct roff_node *);
 static  int      parse_mdoc_head(struct mpage *, const struct mdoc_meta *,  static  int      parse_mdoc_head(struct mpage *, const struct roff_meta *,
                         const struct mdoc_node *);                          const struct roff_node *);
 static  int      parse_mdoc_Fd(struct mpage *, const struct mdoc_meta *,  static  int      parse_mdoc_Fd(struct mpage *, const struct roff_meta *,
                         const struct mdoc_node *);                          const struct roff_node *);
 static  void     parse_mdoc_fname(struct mpage *, const struct mdoc_node *);  static  void     parse_mdoc_fname(struct mpage *, const struct roff_node *);
 static  int      parse_mdoc_Fn(struct mpage *, const struct mdoc_meta *,  static  int      parse_mdoc_Fn(struct mpage *, const struct roff_meta *,
                         const struct mdoc_node *);                          const struct roff_node *);
 static  int      parse_mdoc_Fo(struct mpage *, const struct mdoc_meta *,  static  int      parse_mdoc_Fo(struct mpage *, const struct roff_meta *,
                         const struct mdoc_node *);                          const struct roff_node *);
 static  int      parse_mdoc_Nd(struct mpage *, const struct mdoc_meta *,  static  int      parse_mdoc_Nd(struct mpage *, const struct roff_meta *,
                         const struct mdoc_node *);                          const struct roff_node *);
 static  int      parse_mdoc_Nm(struct mpage *, const struct mdoc_meta *,  static  int      parse_mdoc_Nm(struct mpage *, const struct roff_meta *,
                         const struct mdoc_node *);                          const struct roff_node *);
 static  int      parse_mdoc_Sh(struct mpage *, const struct mdoc_meta *,  static  int      parse_mdoc_Sh(struct mpage *, const struct roff_meta *,
                         const struct mdoc_node *);                          const struct roff_node *);
 static  int      parse_mdoc_Xr(struct mpage *, const struct mdoc_meta *,  static  int      parse_mdoc_Xr(struct mpage *, const struct roff_meta *,
                         const struct mdoc_node *);                          const struct roff_node *);
 static  void     putkey(const struct mpage *, char *, uint64_t);  static  void     putkey(const struct mpage *, char *, uint64_t);
 static  void     putkeys(const struct mpage *, char *, size_t, uint64_t);  static  void     putkeys(const struct mpage *, char *, size_t, uint64_t);
 static  void     putmdockey(const struct mpage *,  static  void     putmdockey(const struct mpage *,
                         const struct mdoc_node *, uint64_t);                          const struct roff_node *, uint64_t);
 static  int      render_string(char **, size_t *);  static  int      render_string(char **, size_t *);
 static  void     say(const char *, const char *, ...);  static  void     say(const char *, const char *, ...);
 static  int      set_basedir(const char *, int);  static  int      set_basedir(const char *, int);
Line 1107  mpages_merge(struct mparse *mp)
Line 1107  mpages_merge(struct mparse *mp)
         struct ohash_info        str_info;          struct ohash_info        str_info;
         struct mpage            *mpage, *mpage_dest;          struct mpage            *mpage, *mpage_dest;
         struct mlink            *mlink, *mlink_dest;          struct mlink            *mlink, *mlink_dest;
         struct mdoc             *mdoc;          struct roff_man         *man;
         struct man              *man;  
         char                    *sodest;          char                    *sodest;
         char                    *cp;          char                    *cp;
         int                      fd;          int                      fd;
Line 1135  mpages_merge(struct mparse *mp)
Line 1134  mpages_merge(struct mparse *mp)
                 ohash_init(&names, 4, &str_info);                  ohash_init(&names, 4, &str_info);
                 ohash_init(&strings, 6, &str_info);                  ohash_init(&strings, 6, &str_info);
                 mparse_reset(mp);                  mparse_reset(mp);
                 mdoc = NULL;  
                 man = NULL;                  man = NULL;
                 sodest = NULL;                  sodest = NULL;
   
Line 1151  mpages_merge(struct mparse *mp)
Line 1149  mpages_merge(struct mparse *mp)
                  */                   */
                 if (mlink->dform != FORM_CAT || mlink->fform != FORM_CAT) {                  if (mlink->dform != FORM_CAT || mlink->fform != FORM_CAT) {
                         mparse_readfd(mp, fd, mlink->file);                          mparse_readfd(mp, fd, mlink->file);
                         mparse_result(mp, &mdoc, &man, &sodest);                          mparse_result(mp, &man, &sodest);
                 }                  }
   
                 if (sodest != NULL) {                  if (sodest != NULL) {
Line 1195  mpages_merge(struct mparse *mp)
Line 1193  mpages_merge(struct mparse *mp)
                                 mpage->mlinks = NULL;                                  mpage->mlinks = NULL;
                         }                          }
                         goto nextpage;                          goto nextpage;
                 } else if (mdoc != NULL) {                  } else if (man != NULL && man->macroset == MACROSET_MDOC) {
                         mpage->form = FORM_SRC;                          mpage->form = FORM_SRC;
                         mpage->sec = mdoc_meta(mdoc)->msec;                          mpage->sec = man->meta.msec;
                         mpage->sec = mandoc_strdup(                          mpage->sec = mandoc_strdup(
                             mpage->sec == NULL ? "" : mpage->sec);                              mpage->sec == NULL ? "" : mpage->sec);
                         mpage->arch = mdoc_meta(mdoc)->arch;                          mpage->arch = man->meta.arch;
                         mpage->arch = mandoc_strdup(                          mpage->arch = mandoc_strdup(
                             mpage->arch == NULL ? "" : mpage->arch);                              mpage->arch == NULL ? "" : mpage->arch);
                         mpage->title =                          mpage->title = mandoc_strdup(man->meta.title);
                             mandoc_strdup(mdoc_meta(mdoc)->title);                  } else if (man != NULL && man->macroset == MACROSET_MAN) {
                 } else if (man != NULL) {  
                         mpage->form = FORM_SRC;                          mpage->form = FORM_SRC;
                         mpage->sec = mandoc_strdup(man_meta(man)->msec);                          mpage->sec = mandoc_strdup(man->meta.msec);
                         mpage->arch = mandoc_strdup(mlink->arch);                          mpage->arch = mandoc_strdup(mlink->arch);
                         mpage->title = mandoc_strdup(man_meta(man)->title);                          mpage->title = mandoc_strdup(man->meta.title);
                 } else {                  } else {
                         mpage->form = FORM_CAT;                          mpage->form = FORM_CAT;
                         mpage->sec = mandoc_strdup(mlink->dsec);                          mpage->sec = mandoc_strdup(mlink->dsec);
Line 1231  mpages_merge(struct mparse *mp)
Line 1228  mpages_merge(struct mparse *mp)
                 }                  }
   
                 assert(mpage->desc == NULL);                  assert(mpage->desc == NULL);
                 if (mdoc != NULL)                  if (man != NULL && man->macroset == MACROSET_MDOC)
                         parse_mdoc(mpage, mdoc_meta(mdoc), mdoc_node(mdoc));                          parse_mdoc(mpage, &man->meta, man->first);
                 else if (man != NULL)                  else if (man != NULL)
                         parse_man(mpage, man_meta(man), man_node(man));                          parse_man(mpage, &man->meta, man->first);
                 else                  else
                         parse_cat(mpage, fd);                          parse_cat(mpage, fd);
                 if (mpage->desc == NULL)                  if (mpage->desc == NULL)
Line 1249  mpages_merge(struct mparse *mp)
Line 1246  mpages_merge(struct mparse *mp)
                 mlink = mpage->mlinks;                  mlink = mpage->mlinks;
   
 nextpage:  nextpage:
                 if (mparse_wait(mp) != MANDOCLEVEL_OK) {  
                         exitcode = (int)MANDOCLEVEL_SYSERR;  
                         say(mlink->file, "&wait gunzip");  
                 }  
                 ohash_delete(&strings);                  ohash_delete(&strings);
                 ohash_delete(&names);                  ohash_delete(&names);
                 mpage = ohash_next(&mpages, &pslot);                  mpage = ohash_next(&mpages, &pslot);
Line 1431  putkey(const struct mpage *mpage, char *value, uint64_
Line 1424  putkey(const struct mpage *mpage, char *value, uint64_
  */   */
 static void  static void
 putmdockey(const struct mpage *mpage,  putmdockey(const struct mpage *mpage,
         const struct mdoc_node *n, uint64_t m)          const struct roff_node *n, uint64_t m)
 {  {
   
         for ( ; NULL != n; n = n->next) {          for ( ; NULL != n; n = n->next) {
Line 1443  putmdockey(const struct mpage *mpage,
Line 1436  putmdockey(const struct mpage *mpage,
 }  }
   
 static void  static void
 parse_man(struct mpage *mpage, const struct man_meta *meta,  parse_man(struct mpage *mpage, const struct roff_meta *meta,
         const struct man_node *n)          const struct roff_node *n)
 {  {
         const struct man_node *head, *body;          const struct roff_node *head, *body;
         char            *start, *title;          char            *start, *title;
         char             byte;          char             byte;
         size_t           sz;          size_t           sz;
Line 1479  parse_man(struct mpage *mpage, const struct man_meta *
Line 1472  parse_man(struct mpage *mpage, const struct man_meta *
                          */                           */
   
                         title = NULL;                          title = NULL;
                         man_deroff(&title, body);                          deroff(&title, body);
                         if (NULL == title)                          if (NULL == title)
                                 return;                                  return;
   
Line 1569  parse_man(struct mpage *mpage, const struct man_meta *
Line 1562  parse_man(struct mpage *mpage, const struct man_meta *
 }  }
   
 static void  static void
 parse_mdoc(struct mpage *mpage, const struct mdoc_meta *meta,  parse_mdoc(struct mpage *mpage, const struct roff_meta *meta,
         const struct mdoc_node *n)          const struct roff_node *n)
 {  {
   
         assert(NULL != n);          assert(NULL != n);
Line 1602  parse_mdoc(struct mpage *mpage, const struct mdoc_meta
Line 1595  parse_mdoc(struct mpage *mpage, const struct mdoc_meta
 }  }
   
 static int  static int
 parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_meta *meta,  parse_mdoc_Fd(struct mpage *mpage, const struct roff_meta *meta,
         const struct mdoc_node *n)          const struct roff_node *n)
 {  {
         char            *start, *end;          char            *start, *end;
         size_t           sz;          size_t           sz;
Line 1646  parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_m
Line 1639  parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_m
 }  }
   
 static void  static void
 parse_mdoc_fname(struct mpage *mpage, const struct mdoc_node *n)  parse_mdoc_fname(struct mpage *mpage, const struct roff_node *n)
 {  {
         char    *cp;          char    *cp;
         size_t   sz;          size_t   sz;
Line 1667  parse_mdoc_fname(struct mpage *mpage, const struct mdo
Line 1660  parse_mdoc_fname(struct mpage *mpage, const struct mdo
 }  }
   
 static int  static int
 parse_mdoc_Fn(struct mpage *mpage, const struct mdoc_meta *meta,  parse_mdoc_Fn(struct mpage *mpage, const struct roff_meta *meta,
         const struct mdoc_node *n)          const struct roff_node *n)
 {  {
   
         if (n->child == NULL)          if (n->child == NULL)
Line 1684  parse_mdoc_Fn(struct mpage *mpage, const struct mdoc_m
Line 1677  parse_mdoc_Fn(struct mpage *mpage, const struct mdoc_m
 }  }
   
 static int  static int
 parse_mdoc_Fo(struct mpage *mpage, const struct mdoc_meta *meta,  parse_mdoc_Fo(struct mpage *mpage, const struct roff_meta *meta,
         const struct mdoc_node *n)          const struct roff_node *n)
 {  {
   
         if (n->type != ROFFT_HEAD)          if (n->type != ROFFT_HEAD)
Line 1698  parse_mdoc_Fo(struct mpage *mpage, const struct mdoc_m
Line 1691  parse_mdoc_Fo(struct mpage *mpage, const struct mdoc_m
 }  }
   
 static int  static int
 parse_mdoc_Xr(struct mpage *mpage, const struct mdoc_meta *meta,  parse_mdoc_Xr(struct mpage *mpage, const struct roff_meta *meta,
         const struct mdoc_node *n)          const struct roff_node *n)
 {  {
         char    *cp;          char    *cp;
   
Line 1718  parse_mdoc_Xr(struct mpage *mpage, const struct mdoc_m
Line 1711  parse_mdoc_Xr(struct mpage *mpage, const struct mdoc_m
 }  }
   
 static int  static int
 parse_mdoc_Nd(struct mpage *mpage, const struct mdoc_meta *meta,  parse_mdoc_Nd(struct mpage *mpage, const struct roff_meta *meta,
         const struct mdoc_node *n)          const struct roff_node *n)
 {  {
   
         if (n->type == ROFFT_BODY)          if (n->type == ROFFT_BODY)
                 mdoc_deroff(&mpage->desc, n);                  deroff(&mpage->desc, n);
         return(0);          return(0);
 }  }
   
 static int  static int
 parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_meta *meta,  parse_mdoc_Nm(struct mpage *mpage, const struct roff_meta *meta,
         const struct mdoc_node *n)          const struct roff_node *n)
 {  {
   
         if (SEC_NAME == n->sec)          if (SEC_NAME == n->sec)
Line 1750  parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_m
Line 1743  parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_m
 }  }
   
 static int  static int
 parse_mdoc_Sh(struct mpage *mpage, const struct mdoc_meta *meta,  parse_mdoc_Sh(struct mpage *mpage, const struct roff_meta *meta,
         const struct mdoc_node *n)          const struct roff_node *n)
 {  {
   
         return(n->sec == SEC_CUSTOM && n->type == ROFFT_HEAD);          return(n->sec == SEC_CUSTOM && n->type == ROFFT_HEAD);
 }  }
   
 static int  static int
 parse_mdoc_head(struct mpage *mpage, const struct mdoc_meta *meta,  parse_mdoc_head(struct mpage *mpage, const struct roff_meta *meta,
         const struct mdoc_node *n)          const struct roff_node *n)
 {  {
   
         return(n->type == ROFFT_HEAD);          return(n->type == ROFFT_HEAD);
 }  }
   
 static int  static int
 parse_mdoc_body(struct mpage *mpage, const struct mdoc_meta *meta,  parse_mdoc_body(struct mpage *mpage, const struct roff_meta *meta,
         const struct mdoc_node *n)          const struct roff_node *n)
 {  {
   
         return(n->type == ROFFT_BODY);          return(n->type == ROFFT_BODY);
Line 2215  dbclose(int real)
Line 2208  dbclose(int real)
                 return;                  return;
         case 0:          case 0:
                 execlp("cmp", "cmp", "-s",                  execlp("cmp", "cmp", "-s",
                     tempfilename, MANDOC_DB, NULL);                      tempfilename, MANDOC_DB, (char *)NULL);
                 say("", "&exec cmp");                  say("", "&exec cmp");
                 exit(0);                  exit(0);
         default:          default:
Line 2240  dbclose(int real)
Line 2233  dbclose(int real)
                 say("", "&fork rm");                  say("", "&fork rm");
                 return;                  return;
         case 0:          case 0:
                 execlp("rm", "rm", "-rf", tempfilename, NULL);                  execlp("rm", "rm", "-rf", tempfilename, (char *)NULL);
                 say("", "&exec rm");                  say("", "&exec rm");
                 exit((int)MANDOCLEVEL_SYSERR);                  exit((int)MANDOCLEVEL_SYSERR);
         default:          default:

Legend:
Removed from v.1.188  
changed lines
  Added in v.1.196

CVSweb