Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Unfinished comment in search.c, and some more end-of-line spacing removals. No change in functionality. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
5260fbf632874b61c491e5cf95a13434 |
User & Date: | jan.nijtmans 2015-02-05 09:01:31 |
Context
2015-02-05
| ||
14:42 | Fix a broken hyperlink on the permutedindex.html page. check-in: 0d1d7f6481 user: drh tags: trunk | |
11:58 | Merge trunk fixes into the form-submenu branch. check-in: d539f65cc2 user: drh tags: form-submenu | |
09:10 | merge trunk check-in: 9e7ea6a20f user: jan.nijtmans tags: svn-import | |
09:01 | Unfinished comment in search.c, and some more end-of-line spacing removals. No change in functionality. check-in: 5260fbf632 user: jan.nijtmans tags: trunk | |
02:51 | Fix the "Tickets" menu option on "San Francisco Modern" so that it points to /ticket instead of /reportlist. check-in: b2f2f0ce2f user: drh tags: trunk | |
Changes
Changes to src/doc.c.
︙ | ︙ | |||
401 402 403 404 405 406 407 | int doc_is_embedded_html(Blob *pContent, Blob *pTitle){ const char *zIn = blob_str(pContent); const char *zAttr; const char *zValue; int nAttr, nValue; int seenClass = 0; int seenTitle = 0; | | | 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 | int doc_is_embedded_html(Blob *pContent, Blob *pTitle){ const char *zIn = blob_str(pContent); const char *zAttr; const char *zValue; int nAttr, nValue; int seenClass = 0; int seenTitle = 0; while( fossil_isspace(zIn[0]) ) zIn++; if( fossil_strnicmp(zIn,"<div",4)!=0 ) return 0; zIn += 4; while( zIn[0] ){ if( fossil_isspace(zIn[0]) ) zIn++; if( zIn[0]=='>' ) return 0; zAttr = zIn; |
︙ | ︙ | |||
442 443 444 445 446 447 448 | if( nAttr==10 && fossil_strnicmp(zAttr,"data-title",10)==0 ){ blob_append(pTitle, zValue, nValue); seenTitle = 1; if( seenClass ) return 1; } } return seenClass; | | | 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 | if( nAttr==10 && fossil_strnicmp(zAttr,"data-title",10)==0 ){ blob_append(pTitle, zValue, nValue); seenTitle = 1; if( seenClass ) return 1; } } return seenClass; } /* ** Look for a file named zName in the checkin with RID=vid. Load the content ** of that file into pContent and return the RID for the file. Or return 0 ** if the file is not found or could not be loaded. */ int doc_load_content(int vid, const char *zName, Blob *pContent){ |
︙ | ︙ |
Changes to src/rebuild.c.
︙ | ︙ | |||
584 585 586 587 588 589 590 | } db_close(1); db_open_repository(g.zRepositoryName); } runReindex = search_index_exists(); if( find_option("index",0,0)!=0 ) runReindex = 1; if( find_option("no-index",0,0)!=0 ) runReindex = 0; | | | 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 | } db_close(1); db_open_repository(g.zRepositoryName); } runReindex = search_index_exists(); if( find_option("index",0,0)!=0 ) runReindex = 1; if( find_option("no-index",0,0)!=0 ) runReindex = 0; /* We should be done with options.. */ verify_all_options(); db_begin_transaction(); search_drop_index(); ttyOutput = 1; errCnt = rebuild_db(randomizeFlag, 1, doClustering); |
︙ | ︙ | |||
805 806 807 808 809 810 811 | int bVerily = find_option("verily",0,0)!=0; int bForce = find_option("force", "f", 0)!=0; int privateOnly = find_option("private",0,0)!=0; int bNeedRebuild = 0; db_find_and_open_repository(OPEN_ANY_SCHEMA, 2); db_close(1); db_open_repository(g.zRepositoryName); | | | 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 | int bVerily = find_option("verily",0,0)!=0; int bForce = find_option("force", "f", 0)!=0; int privateOnly = find_option("private",0,0)!=0; int bNeedRebuild = 0; db_find_and_open_repository(OPEN_ANY_SCHEMA, 2); db_close(1); db_open_repository(g.zRepositoryName); /* We should be done with options.. */ verify_all_options(); if( !bForce ){ Blob ans; char cReply; prompt_user( |
︙ | ︙ | |||
935 936 937 938 939 940 941 | } if( file_isdir(g.argv[3])!=1 ){ fossil_print("\"%s\" is not a directory\n\n", g.argv[3]); usage("FILENAME DIRECTORY"); } db_create_repository(g.argv[2]); db_open_repository(g.argv[2]); | | | 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 | } if( file_isdir(g.argv[3])!=1 ){ fossil_print("\"%s\" is not a directory\n\n", g.argv[3]); usage("FILENAME DIRECTORY"); } db_create_repository(g.argv[2]); db_open_repository(g.argv[2]); /* We should be done with options.. */ verify_all_options(); db_open_config(0); db_begin_transaction(); db_initial_setup(0, 0, 0, 1); |
︙ | ︙ |
Changes to src/rss.c.
︙ | ︙ | |||
63 64 65 66 67 68 69 | @ (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim), @ (SELECT count(*) FROM plink WHERE cid=blob.rid) @ FROM event, blob @ WHERE blob.rid=event.objid ; login_check_credentials(); | | | | 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | @ (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim), @ (SELECT count(*) FROM plink WHERE cid=blob.rid) @ FROM event, blob @ WHERE blob.rid=event.objid ; login_check_credentials(); if( !g.perm.Read && !g.perm.RdTkt && !g.perm.RdWiki ){ return; } blob_zero(&bSQL); blob_append( &bSQL, zSQL1, -1 ); if( zType[0]!='a' ){ if( zType[0]=='c' && !g.perm.Read ) zType = "x"; if( zType[0]=='w' && !g.perm.RdWiki ) zType = "x"; if( zType[0]=='t' && !g.perm.RdTkt ) zType = "x"; blob_append_sql(&bSQL, " AND event.type=%Q", zType); }else{ if( !g.perm.Read ){ if( g.perm.RdTkt && g.perm.RdWiki ){ blob_append(&bSQL, " AND event.type!='ci'", -1); }else if( g.perm.RdTkt ){ blob_append(&bSQL, " AND event.type=='t'", -1); }else{ blob_append(&bSQL, " AND event.type=='w'", -1); } }else if( !g.perm.RdWiki ){ if( g.perm.RdTkt ){ blob_append(&bSQL, " AND event.type!='w'", -1); }else{ |
︙ | ︙ |
Changes to src/schema.c.
︙ | ︙ | |||
228 229 230 231 232 233 234 | @ CREATE TABLE filename( @ fnid INTEGER PRIMARY KEY, -- Filename ID @ name TEXT UNIQUE -- Name of file page @ ); @ @ -- Linkages between checkins, files created by each checkin, and @ -- the names of those files. | | | 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 | @ CREATE TABLE filename( @ fnid INTEGER PRIMARY KEY, -- Filename ID @ name TEXT UNIQUE -- Name of file page @ ); @ @ -- Linkages between checkins, files created by each checkin, and @ -- the names of those files. @ -- @ -- Each entry represents a file that changed content from pid to fid @ -- due to the check-in that goes from pmid to mid. fnid is the name @ -- of the file in the mid check-in. If the file was renamed as part @ -- of the mid check-in, then pfnid is the previous filename. @ @ -- There can be multiple entries for (mid,fid) if the mid checkin was @ -- a merge. Entries with isaux==0 are from the primary parent. Merge |
︙ | ︙ |
Changes to src/search.c.
︙ | ︙ | |||
39 40 41 42 43 44 45 | int nTerm; /* Number of search terms */ struct srchTerm { /* For each search term */ char *z; /* Text */ int n; /* length */ } a[SEARCH_MAX_TERM]; /* Snippet controls */ char *zPattern; /* The search pattern */ | | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | int nTerm; /* Number of search terms */ struct srchTerm { /* For each search term */ char *z; /* Text */ int n; /* length */ } a[SEARCH_MAX_TERM]; /* Snippet controls */ char *zPattern; /* The search pattern */ char *zMarkBegin; /* Start of a match */ char *zMarkEnd; /* End of a match */ char *zMarkGap; /* A gap between two matches */ unsigned fSrchFlg; /* Flags */ int iScore; /* Score of the last match attempt */ Blob snip; /* Snippet for the most recent match */ }; |
︙ | ︙ | |||
102 103 104 105 106 107 108 | } /* ** Compile a search pattern */ Search *search_init( const char *zPattern, /* The search pattern */ | | | 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | } /* ** Compile a search pattern */ Search *search_init( const char *zPattern, /* The search pattern */ const char *zMarkBegin, /* Start of a match */ const char *zMarkEnd, /* End of a match */ const char *zMarkGap, /* A gap between two matches */ unsigned fSrchFlg /* Flags */ ){ Search *p; char *z; int i; |
︙ | ︙ | |||
225 226 227 228 229 230 231 | } while( ISALNUM(zDoc[i]) ){ i++; } if( zDoc[i]==0 ) break; } } /* Finished search all documents. | | | 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | } while( ISALNUM(zDoc[i]) ){ i++; } if( zDoc[i]==0 ) break; } } /* Finished search all documents. ** Every term must be seen or else the score is zero */ score = 1; for(j=0; j<p->nTerm; j++) score *= anMatch[j]; blob_reset(&p->snip); p->iScore = score; if( score==0 ) return score; |
︙ | ︙ | |||
315 316 317 318 319 320 321 | if( wantGap ) blob_append(&p->snip, p->zMarkGap, -1); return score; } /* ** COMMAND: test-match ** | | | 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 | if( wantGap ) blob_append(&p->snip, p->zMarkGap, -1); return score; } /* ** COMMAND: test-match ** ** Usage: fossil test-match SEARCHSTRING FILE1 FILE2 ... */ void test_match_cmd(void){ Search *p; int i; Blob x; int score; char *zDoc; |
︙ | ︙ | |||
425 426 427 428 429 430 431 | sqlite3_result_text(context, blob_str(&gSearch.snip), -1, fossil_free); blob_init(&gSearch.snip, 0, 0); } } /* ** This is an SQLite function that computes the searchable text. | | | 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 | sqlite3_result_text(context, blob_str(&gSearch.snip), -1, fossil_free); blob_init(&gSearch.snip, 0, 0); } } /* ** This is an SQLite function that computes the searchable text. ** It is a wrapper around the search_stext() routine. See the ** search_stext() routine for further detail. */ static void search_stext_sqlfunc( sqlite3_context *context, int argc, sqlite3_value **argv ){ |
︙ | ︙ | |||
774 775 776 777 778 779 780 | db_multi_exec("UPDATE x SET label=printf('%%s (score=%%s)',label,score)"); #endif } /* ** If z[] is of the form "<mark>TEXT</mark>" where TEXT contains ** no white-space or punctuation, then return the length of the mark. | < | | 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 | db_multi_exec("UPDATE x SET label=printf('%%s (score=%%s)',label,score)"); #endif } /* ** If z[] is of the form "<mark>TEXT</mark>" where TEXT contains ** no white-space or punctuation, then return the length of the mark. */ static int isSnippetMark(const char *z){ int n; if( strncmp(z,"<mark>",6)!=0 ) return 0; n = 6; while( fossil_isalnum(z[n]) ) n++; if( strncmp(&z[n],"</mark>",7)!=0 ) return 0; return n+7; } /* ** Return a copy of zSnip (in memory obtained from fossil_malloc()) that ** has all "<" characters, other than those on <mark> and </mark>, ** converted into "<". This is similar to htmlize() except that ** <mark> and </mark> are preserved. */ static char *cleanSnippet(const char *zSnip){ int i; int n = 0; char *z; |
︙ | ︙ | |||
1106 1107 1108 1109 1110 1111 1112 | search_stext(g.argv[2][0], atoi(g.argv[3]), g.argv[4], &out); fossil_print("%s\n",blob_str(&out)); blob_reset(&out); } /* The schema for the full-text index */ | | | 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 | search_stext(g.argv[2][0], atoi(g.argv[3]), g.argv[4], &out); fossil_print("%s\n",blob_str(&out)); blob_reset(&out); } /* The schema for the full-text index */ static const char zFtsSchema[] = @ -- One entry for each possible search result @ CREATE TABLE IF NOT EXISTS "%w".ftsdocs( @ rowid INTEGER PRIMARY KEY, -- Maps to the ftsidx.docid @ type CHAR(1), -- Type of document @ rid INTEGER, -- BLOB.RID or TAG.TAGID for the document @ name TEXT, -- Additional document description @ idxed BOOLEAN, -- True if currently in the index |
︙ | ︙ | |||
1228 1229 1230 1231 1232 1233 1234 | ); } } } /* ** If the doc-glob and doc-br settings are valid for document search | | | 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 | ); } } } /* ** If the doc-glob and doc-br settings are valid for document search ** and if the latest check-in on doc-br is in the unindexed set of ** check-ins, then update all 'd' entries in FTSDOCS that have ** changed. */ static void search_update_doc_index(void){ const char *zDocBr = db_get("doc-branch","trunk"); int ckid = zDocBr ? symbolic_name_to_rid(zDocBr,"ci") : 0; double rTime; |
︙ | ︙ | |||
1282 1283 1284 1285 1286 1287 1288 | ); db_multi_exec( "UPDATE ftsdocs SET idxed=1 WHERE type='d' AND NOT idxed" ); } /* | | | 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 | ); db_multi_exec( "UPDATE ftsdocs SET idxed=1 WHERE type='d' AND NOT idxed" ); } /* ** Deal with all of the unindexed 'c' terms in FTSDOCS */ static void search_update_checkin_index(void){ db_multi_exec( "INSERT INTO ftsidx(docid,stext)" " SELECT rowid, stext('c',rid,NULL) FROM ftsdocs" " WHERE type='c' AND NOT idxed;" ); |
︙ | ︙ | |||
1304 1305 1306 1307 1308 1309 1310 | " WHERE ftsdocs.type='c' AND NOT ftsdocs.idxed" " AND event.objid=ftsdocs.rid" " AND blob.rid=ftsdocs.rid" ); } /* | | | 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 | " WHERE ftsdocs.type='c' AND NOT ftsdocs.idxed" " AND event.objid=ftsdocs.rid" " AND blob.rid=ftsdocs.rid" ); } /* ** Deal with all of the unindexed 't' terms in FTSDOCS */ static void search_update_ticket_index(void){ db_multi_exec( "INSERT INTO ftsidx(docid,stext)" " SELECT rowid, stext('t',rid,NULL) FROM ftsdocs" " WHERE type='t' AND NOT idxed;" ); |
︙ | ︙ | |||
1326 1327 1328 1329 1330 1331 1332 | " FROM ftsdocs, ticket" " WHERE ftsdocs.type='t' AND NOT ftsdocs.idxed" " AND ticket.tkt_id=ftsdocs.rid" ); } /* | | | 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 | " FROM ftsdocs, ticket" " WHERE ftsdocs.type='t' AND NOT ftsdocs.idxed" " AND ticket.tkt_id=ftsdocs.rid" ); } /* ** Deal with all of the unindexed 'w' terms in FTSDOCS */ static void search_update_wiki_index(void){ db_multi_exec( "INSERT INTO ftsidx(docid,stext)" " SELECT rowid, stext('w',rid,NULL) FROM ftsdocs" " WHERE type='w' AND NOT idxed;" ); |
︙ | ︙ | |||
1466 1467 1468 1469 1470 1471 1472 | } if( iAction>=2 ){ search_rebuild_index(); } /* Always show the status before ending */ for(i=0; i<ArraySize(aSetng); i++){ | | | 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 | } if( iAction>=2 ){ search_rebuild_index(); } /* Always show the status before ending */ for(i=0; i<ArraySize(aSetng); i++){ fossil_print("%-16s %s\n", aSetng[i].zName, db_get_boolean(aSetng[i].zSetting,0) ? "on" : "off"); } if( search_index_exists() ){ fossil_print("%-16s enabled\n", "full-text index:"); fossil_print("%-16s %d\n", "documents:", db_int(0, "SELECT count(*) FROM ftsdocs")); }else{ fossil_print("%-16s disabled\n", "full-text index:"); } db_end_transaction(0); } |
Changes to src/setup.c.
︙ | ︙ | |||
2170 2171 2172 2173 2174 2175 2176 | if( !g.perm.Setup && !g.perm.Admin ){ login_needed(); } style_header("Search Configuration"); @ <form action="%s(g.zTop)/srchsetup" method="post"><div> login_insert_csrf_secret(); @ <div style="text-align:center;font-weight:bold;"> | | | | 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 | if( !g.perm.Setup && !g.perm.Admin ){ login_needed(); } style_header("Search Configuration"); @ <form action="%s(g.zTop)/srchsetup" method="post"><div> login_insert_csrf_secret(); @ <div style="text-align:center;font-weight:bold;"> @ Server-specific settings that affect the @ <a href="%R/search">/search</a> webpage. @ </div> @ <hr /> textarea_attribute("Document Glob List", 3, 35, "doc-glob", "dg", "", 0); @ <p>The "Document Glob List" is a comma- or newline-separated list @ of GLOB expressions that identify all documents within the source @ tree that are to be searched when "Document Search" is enabled. @ Some examples: @ <table border=0 cellpadding=2 align=center> @ <tr><td>*.wiki,*.html,*.md,*.txt<td style="width: 4x;"> @ <td>Search all wiki, HTML, Markdown, and Text files</tr> @ <tr><td>doc/*.md,*/README.txt,README.txt<td> |
︙ | ︙ |
Changes to src/skins.c.
︙ | ︙ | |||
24 25 26 27 28 29 30 | /* ** An array of available built-in skins. ** ** To add new built-in skins: ** ** 1. Pick a name for the new skin. (Here we use "xyzzy"). ** | | | | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | /* ** An array of available built-in skins. ** ** To add new built-in skins: ** ** 1. Pick a name for the new skin. (Here we use "xyzzy"). ** ** 2. Install files skins/xyzzy/css.txt, skins/xyzzy/header.txt, ** and skins/xyzzy/footer.txt into the source tree. ** ** 3. Rerun "tclsh makemake.tcl" in the src/ folder in order to ** rebuild the makefiles to reference the new CSS, headers, and footers. ** ** 4. Make an entry in the following array for the new skin. */ static struct BuiltinSkin { const char *zDesc; /* Description of this skin */ const char *zLabel; /* The directory under skins/ holding this skin */ char *zSQL; /* Filled in at run-time with SQL to insert this skin */ } aBuiltinSkin[] = { { "Default", "default", 0 }, { "Plain Gray, No Logo", "plain_gray", 0 }, { "Khaki, No Logo", "khaki", 0 }, { "Black & White, Menu on Left", "black_and_white", 0 }, { "Shadow boxes & Rounded Corners", "rounded1", 0 }, { "Enhanced Default", "enhanced1", 0 }, { "San Francisco Modern", "etienne1", 0 }, { "Eagle", "eagle", 0 }, }; /* |
︙ | ︙ |
Changes to src/tkt.c.
︙ | ︙ | |||
1410 1411 1412 1413 1414 1415 1416 | } } /* ** WEBPAGE: ticket ** ** This is intended to be the primary "Ticket" page. Render as | | | 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 | } } /* ** WEBPAGE: ticket ** ** This is intended to be the primary "Ticket" page. Render as ** either ticket-search (if search is enabled) or as the ** /reportlist page (if ticket search is disabled). */ void tkt_home_page(void){ login_check_credentials(); if( search_restrict(SRCH_TKT)!=0 ){ tkt_srchpage(); }else{ |
︙ | ︙ |