Fixed advanced search feature
This commit is contained in:
parent
93f931255e
commit
ebd238ef7d
@ -10,6 +10,12 @@ ______________________________________________________________________
|
|||||||
Notes for GoldED+ 1.1.5, /snapshot/
|
Notes for GoldED+ 1.1.5, /snapshot/
|
||||||
______________________________________________________________________
|
______________________________________________________________________
|
||||||
|
|
||||||
|
+ ')' and '(' chars can be used for advanced search.
|
||||||
|
')' - shortcut for "<>:" (from, to, subject), and
|
||||||
|
'(' - for "#._*@%" (body, tagline, tearline, origin, signature, kludges)
|
||||||
|
|
||||||
|
- Fixed advanced search feature.
|
||||||
|
|
||||||
+ READGoToReplyNext work on non JAM message bases
|
+ READGoToReplyNext work on non JAM message bases
|
||||||
|
|
||||||
+ Win32: Mapped APPS key to Shift+F10
|
+ Win32: Mapped APPS key to Shift+F10
|
||||||
|
@ -57,21 +57,38 @@ inline void search_item_option(bool& a, const char* s) {
|
|||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
const char* search_item_set(search_item& item, const char* s) {
|
const char* search_item_set(search_item& item, const char* s, int what)
|
||||||
|
{
|
||||||
|
bool flag = false;
|
||||||
|
|
||||||
while(*s) {
|
while(*s) {
|
||||||
switch(*s) {
|
switch(*s) {
|
||||||
|
case ')':
|
||||||
|
search_item_option(item.where.from, s);
|
||||||
|
search_item_option(item.where.to, s);
|
||||||
|
search_item_option(item.where.subject, s);
|
||||||
|
flag = true;
|
||||||
|
break;
|
||||||
|
case '(':
|
||||||
|
search_item_option(item.where.body, s);
|
||||||
|
search_item_option(item.where.tagline, s);
|
||||||
|
search_item_option(item.where.tearline, s);
|
||||||
|
search_item_option(item.where.origin, s);
|
||||||
|
search_item_option(item.where.signature, s);
|
||||||
|
search_item_option(item.where.kludges, s);
|
||||||
|
flag = true;
|
||||||
|
break;
|
||||||
case '!': search_item_option(item.reverse, s); break;
|
case '!': search_item_option(item.reverse, s); break;
|
||||||
case '<': search_item_option(item.where.from, s); break;
|
case '<': search_item_option(item.where.from, s); flag = true; break;
|
||||||
case '>': search_item_option(item.where.to, s); break;
|
case '>': search_item_option(item.where.to, s); flag = true; break;
|
||||||
case ':': search_item_option(item.where.subject, s); break;
|
case ':': search_item_option(item.where.subject, s); flag = true; break;
|
||||||
case '#': search_item_option(item.where.body, s); break;
|
case '#': search_item_option(item.where.body, s); flag = true; break;
|
||||||
case '.': search_item_option(item.where.tagline, s); break;
|
case '.': search_item_option(item.where.tagline, s); flag = true; break;
|
||||||
case '_': search_item_option(item.where.tearline, s); break;
|
case '_': search_item_option(item.where.tearline, s); flag = true; break;
|
||||||
case '*': search_item_option(item.where.origin, s); break;
|
case '*': search_item_option(item.where.origin, s); flag = true; break;
|
||||||
case '@': search_item_option(item.where.signature, s); break;
|
case '@': search_item_option(item.where.signature, s); flag = true; break;
|
||||||
case '%': search_item_option(item.where.kludges, s); break;
|
case '%': search_item_option(item.where.kludges, s); flag = true; break;
|
||||||
case '=': search_item_option(item.case_sensitive, s); break;
|
case '=': search_item_option(item.case_sensitive, s); flag = true; break;
|
||||||
case '?':
|
case '?':
|
||||||
s++;
|
s++;
|
||||||
switch(g_tolower(*s)) {
|
switch(g_tolower(*s)) {
|
||||||
@ -92,51 +109,66 @@ const char* search_item_set(search_item& item, const char* s) {
|
|||||||
case '\'':
|
case '\'':
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return s;
|
if (isspace(*s)) break;
|
||||||
|
else
|
||||||
|
goto lblLoopExit;
|
||||||
}
|
}
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lblLoopExit:
|
||||||
|
if (what && !flag)
|
||||||
|
{
|
||||||
|
if (what & GFIND_FROM) item.where.from = true;
|
||||||
|
if (what & GFIND_TO) item.where.to = true;
|
||||||
|
if (what & GFIND_SUBJECT) item.where.subject = true;
|
||||||
|
if (what & GFIND_BODY) item.where.body = true;
|
||||||
|
if (what & GFIND_TAGLINE) item.where.tagline = true;
|
||||||
|
if (what & GFIND_TEARLINE) item.where.tearline = true;
|
||||||
|
if (what & GFIND_ORIGIN) item.where.origin = true;
|
||||||
|
if (what & GFIND_KLUDGES) item.where.kludges = true;
|
||||||
|
if (what & GFIND_SIGNATURE) item.where.signature = true;
|
||||||
|
}
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
void golded_search_manager::prepare_from_string(const char* prompt, int what) {
|
void golded_search_manager::prepare_from_string(const char* prompt, int what)
|
||||||
|
{
|
||||||
// Get defaults
|
// Get defaults
|
||||||
reverse = false;
|
reverse = false;
|
||||||
direction = DIR_NEXT;
|
direction = DIR_NEXT;
|
||||||
search_item default_item;
|
|
||||||
const char* p = prompt;
|
const char* p = prompt;
|
||||||
|
|
||||||
if(*p == '-' or *p == '+') {
|
if (*p == '-' or *p == '+')
|
||||||
|
{
|
||||||
direction = (*p == '-') ? DIR_PREV : DIR_NEXT;
|
direction = (*p == '-') ? DIR_PREV : DIR_NEXT;
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
p = search_item_set(default_item, p);
|
|
||||||
if(default_item.reverse) {
|
|
||||||
default_item.reverse = false;
|
|
||||||
reverse = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(what == GFIND_HDR or what == GFIND_HDRTXT) {
|
search_item default_item;
|
||||||
if(not (default_item.where.from or default_item.where.to or default_item.where.subject)) {
|
p = search_item_set(default_item, p, what);
|
||||||
default_item.where.from = true;
|
|
||||||
default_item.where.to = true;
|
search_item item = default_item;
|
||||||
default_item.where.subject = true;
|
|
||||||
}
|
default_item.reverse = false;
|
||||||
if(what == GFIND_HDRTXT)
|
default_item.where.from = false;
|
||||||
default_item.where.body = true;
|
default_item.where.to = false;
|
||||||
}
|
default_item.where.subject = false;
|
||||||
|
default_item.where.body = false;
|
||||||
|
default_item.where.tagline = false;
|
||||||
|
default_item.where.tearline = false;
|
||||||
|
default_item.where.origin = false;
|
||||||
|
default_item.where.kludges = false;
|
||||||
|
default_item.where.signature = false;
|
||||||
|
|
||||||
char buf[256];
|
char buf[256];
|
||||||
char* b = buf;
|
char* b = buf;
|
||||||
bool item_complete = false;
|
bool item_complete = false;
|
||||||
search_item item = default_item;
|
|
||||||
|
|
||||||
p = search_item_set(item, strskip_wht(p));
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
@ -204,8 +236,9 @@ void golded_search_manager::prepare_from_string(const char* prompt, int what) {
|
|||||||
}
|
}
|
||||||
if(*p == NUL)
|
if(*p == NUL)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
item = default_item;
|
item = default_item;
|
||||||
p = search_item_set(item, strskip_wht(p));
|
p = search_item_set(item, strskip_wht(p), what);
|
||||||
b = buf;
|
b = buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user