Fossil

Check-in [c5a2832eeb]
Login

Check-in [c5a2832eeb]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Highlight matching works on a search using <mark> rather than <b> and add appropriate CSS to make "mark" look like "b" by default.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | indexed-fts
Files: files | file ages | folders
SHA1: c5a2832eebd62b50de331e576c2d4f8f3651058b
User & Date: drh 2015-02-03 04:39:00.097
Context
2015-02-03
04:45
Put the search snippets inside of <span class='snippet'>. ... (check-in: 1b08cfe215 user: drh tags: indexed-fts)
04:39
Highlight matching works on a search using <mark> rather than <b> and add appropriate CSS to make "mark" look like "b" by default. ... (check-in: c5a2832eeb user: drh tags: indexed-fts)
04:10
Restrict indexed search according to the search flags. Fix the generation of the index for wiki pages. Fix db_multi_exec() so that it aborts with a sensible message following a syntax error. ... (check-in: 780117d223 user: drh tags: indexed-fts)
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/search.c.
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
*/
static void search_init_sqlfunc(
  sqlite3_context *context,
  int argc,
  sqlite3_value **argv
){
  const char *zPattern = 0;
  const char *zBegin = "<b>";
  const char *zEnd = "</b>";
  const char *zGap = " ... ";
  unsigned int flg = SRCHFLG_HTML;
  switch( argc ){
    default:
      flg = (unsigned int)sqlite3_value_int(argv[4]);
    case 4:
      zGap = (const char*)sqlite3_value_text(argv[3]);







|
|







361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
*/
static void search_init_sqlfunc(
  sqlite3_context *context,
  int argc,
  sqlite3_value **argv
){
  const char *zPattern = 0;
  const char *zBegin = "<mark>";
  const char *zEnd = "</mark>";
  const char *zGap = " ... ";
  unsigned int flg = SRCHFLG_HTML;
  switch( argc ){
    default:
      flg = (unsigned int)sqlite3_value_int(argv[4]);
    case 4:
      zGap = (const char*)sqlite3_value_text(argv[3]);
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
  blob_init(&sql, 0, 0);
  blob_appendf(&sql,
    "INSERT INTO x(label,url,score,date,snip) "
    " SELECT ftsdocs.label,"
    "        ftsdocs.url,"
    "        rank(matchinfo(ftsidx,'pcsx')),"
    "        datetime(ftsdocs.mtime),"
    "        snippet(ftsidx)"
    "   FROM ftsidx, ftsdocs"
    "  WHERE ftsidx MATCH %Q"
    "    AND ftsdocs.rowid=ftsidx.docid",
    zPattern
  );
  if( srchFlags!=SRCH_ALL ){
    const char *zSep = " AND (";







|







743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
  blob_init(&sql, 0, 0);
  blob_appendf(&sql,
    "INSERT INTO x(label,url,score,date,snip) "
    " SELECT ftsdocs.label,"
    "        ftsdocs.url,"
    "        rank(matchinfo(ftsidx,'pcsx')),"
    "        datetime(ftsdocs.mtime),"
    "        snippet(ftsidx,'<mark>','</mark>')"
    "   FROM ftsidx, ftsdocs"
    "  WHERE ftsidx MATCH %Q"
    "    AND ftsdocs.rowid=ftsidx.docid",
    zPattern
  );
  if( srchFlags!=SRCH_ALL ){
    const char *zSep = " AND (";
Changes to src/style.c.
1123
1124
1125
1126
1127
1128
1129





1130
1131
1132
1133
1134
1135
1136
    "Ascending sort column marker",
    @ content: '\2193';
  },
  { "th.sort.desc:after",
    "Descending sort column marker",
    @ content: '\2191';
  },





  { 0,
    0,
    0
  }
};

/*







>
>
>
>
>







1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
    "Ascending sort column marker",
    @ content: '\2193';
  },
  { "th.sort.desc:after",
    "Descending sort column marker",
    @ content: '\2191';
  },
  { "mark",
    "Search markup",
    @ background-color: inherit;
    @ font-weight: bold;
  },
  { 0,
    0,
    0
  }
};

/*
1147
1148
1149
1150
1151
1152
1153























1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165

1166
1167
1168
1169
1170
1171
1172
1173
                 cssDefaultList[i].elementClass,
                 cssDefaultList[i].value
                );
    }
  }
}
























/*
** WEBPAGE: style.css
*/
void page_style_css(void){
  Blob css;
  int i;

  cgi_set_content_type("text/css");
  blob_init(&css, db_get("css",(char*)builtin_text("skins/default/css.txt")), -1);

  /* add special missing definitions */
  for(i=1; cssDefaultList[i].elementClass; i++){

    if( strstr(blob_str(&css), cssDefaultList[i].elementClass)==0 ){
      blob_appendf(&css, "/* %s */\n%s {\n%s}\n",
          cssDefaultList[i].comment,
          cssDefaultList[i].elementClass,
          cssDefaultList[i].value);
    }
  }








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>








|



>
|







1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
                 cssDefaultList[i].elementClass,
                 cssDefaultList[i].value
                );
    }
  }
}

/*
** Search string zHaystack for zNeedle.  zNeedle must be an isolated
** word with space or punctuation on either size.
**
** Return true if found.  Return false if not found
*/
static int containsString(const char *zHaystack, const char *zNeedle){
  char *z;
  int n;

  while( zHaystack[0] ){
    z = strstr(zHaystack, zNeedle);
    if( z==0 ) return 0;
    n = (int)strlen(zNeedle);
    if( (z==zHaystack || !fossil_isalnum(z[-1])) && !fossil_isalnum(z[n]) ){
      return 1;
    }
    zHaystack = z + n;
  }
  return 0;
}
   

/*
** WEBPAGE: style.css
*/
void page_style_css(void){
  Blob css;
  int i;

  cgi_set_content_type("text/css");
  blob_init(&css,db_get("css",(char*)builtin_text("skins/default/css.txt")),-1);

  /* add special missing definitions */
  for(i=1; cssDefaultList[i].elementClass; i++){
    char *z = blob_str(&css);
    if( !containsString(z, cssDefaultList[i].elementClass) ){
      blob_appendf(&css, "/* %s */\n%s {\n%s}\n",
          cssDefaultList[i].comment,
          cssDefaultList[i].elementClass,
          cssDefaultList[i].value);
    }
  }