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

Diff for /mandoc/mandocdb.c between version 1.173 and 1.175

version 1.173, 2014/12/04 18:31:20 version 1.175, 2014/12/04 21:48:48
Line 104  struct mpage {
Line 104  struct mpage {
         char            *desc;    /* description from file content */          char            *desc;    /* description from file content */
         struct mlink    *mlinks;  /* singly linked list */          struct mlink    *mlinks;  /* singly linked list */
         int              form;    /* format from file content */          int              form;    /* format from file content */
           int              name_head_done;
 };  };
   
 struct  mlink {  struct  mlink {
Line 124  enum stmt {
Line 125  enum stmt {
         STMT_INSERT_PAGE,       /* insert mpage */          STMT_INSERT_PAGE,       /* insert mpage */
         STMT_INSERT_LINK,       /* insert mlink */          STMT_INSERT_LINK,       /* insert mlink */
         STMT_INSERT_NAME,       /* insert name */          STMT_INSERT_NAME,       /* insert name */
           STMT_SELECT_NAME,       /* retrieve existing name flags */
         STMT_INSERT_KEY,        /* insert parsed key */          STMT_INSERT_KEY,        /* insert parsed key */
         STMT__MAX          STMT__MAX
 };  };
Line 154  static void  mpages_free(void);
Line 156  static void  mpages_free(void);
 static  void     mpages_merge(struct mchars *, struct mparse *);  static  void     mpages_merge(struct mchars *, 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_node *);  static  void     parse_man(struct mpage *, const struct man_meta *,
                           const struct man_node *);
 static  void     parse_mdoc(struct mpage *, const struct mdoc_meta *,  static  void     parse_mdoc(struct mpage *, const struct mdoc_meta *,
                         const struct mdoc_node *);                          const struct mdoc_node *);
 static  int      parse_mdoc_body(struct mpage *, const struct mdoc_meta *,  static  int      parse_mdoc_body(struct mpage *, const struct mdoc_meta *,
Line 1225  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1228  mpages_merge(struct mchars *mc, struct mparse *mp)
                         putkey(mpage, mlink->name, NAME_FILE);                          putkey(mpage, mlink->name, NAME_FILE);
                 }                  }
   
                 assert(NULL == mpage->desc);                  assert(mpage->desc == NULL);
                 if (NULL != mdoc) {                  if (mdoc != NULL)
                         if (NULL != (cp = mdoc_meta(mdoc)->name))  
                                 putkey(mpage, cp, NAME_HEAD);  
                         parse_mdoc(mpage, mdoc_meta(mdoc), mdoc_node(mdoc));                          parse_mdoc(mpage, mdoc_meta(mdoc), mdoc_node(mdoc));
                 } else if (NULL != man)                  else if (man != NULL)
                         parse_man(mpage, man_node(man));                          parse_man(mpage, man_meta(man), man_node(man));
                 else                  else
                         parse_cat(mpage, fd);                          parse_cat(mpage, fd);
                 if (NULL == mpage->desc)                  if (mpage->desc == NULL)
                         mpage->desc = mandoc_strdup(mpage->mlinks->name);                          mpage->desc = mandoc_strdup(mpage->mlinks->name);
   
                 if (warnings && !use_all)                  if (warnings && !use_all)
Line 1439  putmdockey(const struct mpage *mpage,
Line 1440  putmdockey(const struct mpage *mpage,
 }  }
   
 static void  static void
 parse_man(struct mpage *mpage, const struct man_node *n)  parse_man(struct mpage *mpage, const struct man_meta *meta,
           const struct man_node *n)
 {  {
         const struct man_node *head, *body;          const struct man_node *head, *body;
         char            *start, *title;          char            *start, *title;
Line 1505  parse_man(struct mpage *mpage, const struct man_node *
Line 1507  parse_man(struct mpage *mpage, const struct man_node *
                                         break;                                          break;
   
                                 putkey(mpage, start, NAME_TITLE);                                  putkey(mpage, start, NAME_TITLE);
                                   if ( ! (mpage->name_head_done ||
                                       strcasecmp(start, meta->title))) {
                                           putkey(mpage, start, NAME_HEAD);
                                           mpage->name_head_done = 1;
                                   }
   
                                 if (' ' == byte) {                                  if (' ' == byte) {
                                         start += sz + 1;                                          start += sz + 1;
Line 1519  parse_man(struct mpage *mpage, const struct man_node *
Line 1526  parse_man(struct mpage *mpage, const struct man_node *
   
                         if (start == title) {                          if (start == title) {
                                 putkey(mpage, start, NAME_TITLE);                                  putkey(mpage, start, NAME_TITLE);
                                   if ( ! (mpage->name_head_done ||
                                       strcasecmp(start, meta->title))) {
                                           putkey(mpage, start, NAME_HEAD);
                                           mpage->name_head_done = 1;
                                   }
                                 free(title);                                  free(title);
                                 return;                                  return;
                         }                          }
Line 1549  parse_man(struct mpage *mpage, const struct man_node *
Line 1561  parse_man(struct mpage *mpage, const struct man_node *
         for (n = n->child; n; n = n->next) {          for (n = n->child; n; n = n->next) {
                 if (NULL != mpage->desc)                  if (NULL != mpage->desc)
                         break;                          break;
                 parse_man(mpage, n);                  parse_man(mpage, meta, n);
         }          }
 }  }
   
Line 1720  parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_m
Line 1732  parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_m
                 else                  else
                         putmdockey(mpage, n->child, NAME_SYN);                          putmdockey(mpage, n->child, NAME_SYN);
         }          }
           if ( ! (mpage->name_head_done ||
               n->child == NULL || n->child->string == NULL ||
               strcasecmp(n->child->string, meta->title))) {
                   putkey(mpage, n->child->string, NAME_HEAD);
                   mpage->name_head_done = 1;
           }
         return(0);          return(0);
 }  }
   
Line 1772  putkeys(const struct mpage *mpage,
Line 1790  putkeys(const struct mpage *mpage,
                         name_mask &= ~NAME_FIRST;                          name_mask &= ~NAME_FIRST;
                 if (debug > 1)                  if (debug > 1)
                         say(mpage->mlinks->file,                          say(mpage->mlinks->file,
                             "Adding name %*s", sz, cp);                              "Adding name %*s, bits=%d", sz, cp, v);
         } else {          } else {
                 htab = &strings;                  htab = &strings;
                 if (debug > 1)                  if (debug > 1)
Line 1989  dbadd_mlink(const struct mlink *mlink)
Line 2007  dbadd_mlink(const struct mlink *mlink)
 static void  static void
 dbadd_mlink_name(const struct mlink *mlink)  dbadd_mlink_name(const struct mlink *mlink)
 {  {
           uint64_t         bits;
         size_t           i;          size_t           i;
   
         dbadd_mlink(mlink);          dbadd_mlink(mlink);
   
         i = 1;          i = 1;
         SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, NAME_FILE & NAME_MASK);          SQL_BIND_INT64(stmts[STMT_SELECT_NAME], i, mlink->mpage->pageid);
           bits = NAME_FILE & NAME_MASK;
           if (sqlite3_step(stmts[STMT_SELECT_NAME]) == SQLITE_ROW) {
                   bits |= sqlite3_column_int64(stmts[STMT_SELECT_NAME], 0);
                   sqlite3_reset(stmts[STMT_SELECT_NAME]);
           }
   
           i = 1;
           SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, bits);
         SQL_BIND_TEXT(stmts[STMT_INSERT_NAME], i, mlink->name);          SQL_BIND_TEXT(stmts[STMT_INSERT_NAME], i, mlink->name);
         SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, mlink->mpage->pageid);          SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, mlink->mpage->pageid);
         SQL_STEP(stmts[STMT_INSERT_NAME]);          SQL_STEP(stmts[STMT_INSERT_NAME]);
Line 2307  create_tables:
Line 2334  create_tables:
               " \"bits\" INTEGER NOT NULL,\n"                " \"bits\" INTEGER NOT NULL,\n"
               " \"name\" TEXT NOT NULL,\n"                " \"name\" TEXT NOT NULL,\n"
               " \"pageid\" INTEGER NOT NULL REFERENCES mpages(pageid) "                " \"pageid\" INTEGER NOT NULL REFERENCES mpages(pageid) "
                 "ON DELETE CASCADE\n"                  "ON DELETE CASCADE,\n"
                 " UNIQUE (\"name\", \"pageid\") ON CONFLICT REPLACE\n"
               ");\n"                ");\n"
               "\n"                "\n"
               "CREATE TABLE \"keys\" (\n"                "CREATE TABLE \"keys\" (\n"
Line 2345  prepare_statements:
Line 2373  prepare_statements:
         sql = "INSERT INTO mlinks "          sql = "INSERT INTO mlinks "
                 "(sec,arch,name,pageid) VALUES (?,?,?,?)";                  "(sec,arch,name,pageid) VALUES (?,?,?,?)";
         sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_LINK], NULL);          sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_LINK], NULL);
           sql = "SELECT bits FROM names where pageid = ?";
           sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_SELECT_NAME], NULL);
         sql = "INSERT INTO names "          sql = "INSERT INTO names "
                 "(bits,name,pageid) VALUES (?,?,?)";                  "(bits,name,pageid) VALUES (?,?,?)";
         sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_NAME], NULL);          sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_NAME], NULL);

Legend:
Removed from v.1.173  
changed lines
  Added in v.1.175

CVSweb