version 1.173, 2014/12/04 18:31:20 |
version 1.175, 2014/12/04 21:48:48 |
|
|
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 { |
|
|
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]); |
|
|
" \"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); |