cmm: fix strstri

webview: fix <> in non-html files
quark: search updates

git-svn-id: svn://kolibrios.org@7945 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2020-05-18 10:03:45 +00:00
parent e43264a49a
commit 4f8e6dce11
8 changed files with 72 additions and 64 deletions

View File

@ -38,6 +38,7 @@ struct TWebBrowser {
dword link_bg;
dword bufpointer;
dword bufsize;
dword is_html;
void Paint();
void SetPageDefaults();
@ -173,9 +174,13 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
custom_encoding = CH_CP866;
}
SetPageDefaults();
if (strstri(bufpointer, "<body")==-1) {
is_html = true;
if (!strstri(bufpointer, "<body")) {
t_body = true;
if (strstri(bufpointer, "<html")==-1) style.pre = true; //show linebreaks for a plaint text
if (!strstri(bufpointer, "<html")) {
style.pre = true; //show linebreaks for a plaint text
is_html = false;
}
}
for (bufpos=bufpointer ; (bufpos < bufpointer+bufsize) && (ESBYTE[bufpos]!=0) ; bufpos++;)
{
@ -213,6 +218,7 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
}
break;
case '<':
if (!is_html) goto _default;
bufpos++;
if (!strncmp(bufpos,"!--",3))
{
@ -252,8 +258,7 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
// ignore text inside the next tags
if (tag.is("script")) || (tag.is("style")) || (tag.is("binary")) || (tag.is("select")) {
sprintf(#tag.params, "</%s>", #tag.name);
j = strstri(bufpos, #tag.params);
if (j!=-1) bufpos = j-1;
if (j = strstri(bufpos, #tag.params)) bufpos = j-1;
break;
}
@ -267,6 +272,7 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
}
break;
default:
_default:
AddCharToTheLine(ESBYTE[bufpos]);
}
}

View File

@ -461,22 +461,14 @@ void ProcessEvent(dword id__)
return;
case COPY_LINK_URL:
strncpy(#new_clip_url, PageLinks.GetURL(PageLinks.active), URL_SIZE);
if ( strcmp(#new_clip_url, "./", 2) )
{
Clipboard__CopyText( GetAbsoluteURL(#new_clip_url, history.current()) );
}
else {
Clipboard__CopyText( PageLinks.GetURL(PageLinks.active) );
}
GetAbsoluteURL(#new_clip_url, history.current());
Clipboard__CopyText(#new_clip_url);
notify("'URL copied to clipboard'O");
return;
case DOWNLOAD_LINK_CONTENTS:
if (!downloader_opened) {
strcpy(#downloader_edit, PageLinks.GetURL(PageLinks.active));
if ( strcmp(#downloader_edit, "./", 2) )
{
GetAbsoluteURL(#downloader_edit, history.current());
}
CreateThread(#Downloader,#downloader_stak+4092);
}
return;
@ -548,10 +540,10 @@ bool HandleUrlFiles(dword _path, _data)
{
dword url_from_file;
if (!UrlExtIs(_path, "url")) return false;
url_from_file = strstri(_data, "URL=");
if (url_from_file == -1) return false;
if (! url_from_file = strstri(_data, "URL=")) return false;
replace_char(url_from_file, '\n', '\0', strlen(url_from_file));
OpenPage(url_from_file);
return true;
}
bool GetLocalFileData(dword _path)

View File

@ -1,4 +1,4 @@
char version[]="WebView 2.5c";
char version[]="WebView 2.5e";
#ifdef LANG_RUS
char page_not_found[] = FROM "html\\page_not_found_ru.htm""\0";
@ -9,7 +9,7 @@ char rmb_menu[] =
"<EFBFBD>®á¬®âà¥âì ¨á室­¨ª|Ctrl+U
<EFBFBD>¥¤ ªâ¨à®¢ âì ¨á室­¨ª";
char main_menu[] =
"Žâªàëâì ä ©«|Ctrl+O
"Žâªàëâì ä ©«...|Ctrl+O
<EFBFBD>®¢®¥ ®ª­®|Ctrl+N
-
ˆáâ®à¨ï|Ctrl+H
@ -39,7 +39,7 @@ char rmb_menu[] =
"View source|Ctrl+U
Edit source";
char main_menu[] =
"Open local file|Ctrl+O
"Open local file...|Ctrl+O
New window|Ctrl+N
-
History|Ctrl+H

View File

@ -503,6 +503,18 @@ inline int strnum(dword haystack, needle)
return count;
}
inline int strinum(dword haystack, needle)
{
int count = 0;
int needle_len = strlen(needle);
loop() {
if (! haystack = strstri(haystack, needle)) break;
haystack+=needle_len;
count++;
}
return count;
}
inline signed int strcmpi(dword cmp1, cmp2)
{
char si, ue;
@ -537,7 +549,7 @@ inline dword strstri(dword searchin, usestr_s)
searchin++;
if (DSBYTE[usestr_e]=='\0') return searchin;
}
return -1;
return 0;
}
@ -546,8 +558,7 @@ inline unsigned int strcpyb(dword search_in, copyin, startstr, endstr)
dword startp, endp;
dword copyin_start_off = copyin;
if (startstr==0) startp = search_in; else startp = strstr(search_in, startstr) + strlen(startstr);
endp = strstri(startp, endstr);
if (endp==0) endp = startp+strlen(search_in);
if (! endp = strstri(startp, endstr)) endp = startp+strlen(search_in);
//if (startp==endp) return 0;
do
{

View File

@ -13,7 +13,7 @@ char intro[] = "
char copied_chars[] = "‘ª®¯¨à®¢ ­® ᨢ®«®¢: %i";
char about[] = "Quark Text v0.7
char about[] = "Quark Text v0.72
¢â®à: Š¨à¨«« ¨¯ â®¢ aka Leency
 ©â: http://aspero.pro
@ -52,7 +52,7 @@ Try to open some text file.";
char copied_chars[] = "Copied %i chars";
char about[] = "Quark Text v0.7
char about[] = "Quark Text v0.72
Author: Kiril Lipatov aka Leency
Website: http://aspero.pro
@ -129,7 +129,7 @@ void LoadIniSettings()
Form.left = ini.GetInt("WinX", 150);
Form.top = ini.GetInt("WinY", 50);
Form.width = ini.GetInt("WinW", 640);
Form.height = ini.GetInt("WinH", 560);
Form.height = ini.GetInt("WinH", 563);
}
void SaveIniSettings()

View File

@ -55,6 +55,8 @@ int real_encoding = CH_CP866;
int curcol_scheme;
int font_size;
bool enable_edit = false;
#include "data.h"
#include "search.h"
@ -255,8 +257,9 @@ void HandleKeyEvent()
if (list.ProcessKey(key_scancode)) {
if (key_modifier & KEY_LSHIFT) || (key_modifier & KEY_RSHIFT) selection.set_end();
DrawPage();
return;
}
//EventInsertCharIntoText();
if(enable_edit) EventInsertCharIntoText();
}
void HandleMouseEvent()
@ -314,7 +317,7 @@ bool EventSearchNext()
{
int new_y = search.find_next(list.first);
if (new_y) {
list.first = new_y / list.item_h;
list.first = new_y;
list.CheckDoesValuesOkey();
DrawPage();
}
@ -576,6 +579,13 @@ void EventCopyFilePath()
DrawStatusBar(#copy_status_text);
}
void EventEnableEdit()
{
enable_edit ^= 1;
if (enable_edit) notify("'Edit mode is enabled.\nNow you can only replace text, not insert, nor delete.'I");
draw_window();
}
//===================================================//
// //
// DRAWS AND OTHER FUNCS //
@ -638,19 +648,21 @@ void DrawToolbar()
DrawBar(0, 0, Form.cwidth, TOOLBAR_H - 1, sc.work);
DrawBar(0, TOOLBAR_H - 1, Form.cwidth, 1, sc.work_graph);
//AddTopBarButton(#EventNewFile, ECTRL+SCAN_CODE_KEY_N, 2, x.set(8), false);
AddTopBarButton(#EventOpenDialog, ECTRL+SCAN_CODE_KEY_O, 0, x.set(8), false);
//AddTopBarButton(#EventSave, ECTRL+SCAN_CODE_KEY_S, 5, x.inc(SMALL_GAP), false);
x.set(-SMALL_GAP+8);
if(enable_edit) AddTopBarButton(#EventNewFile, ECTRL+SCAN_CODE_KEY_N, 2, x.inc(SMALL_GAP), false);
AddTopBarButton(#EventOpenDialog, ECTRL+SCAN_CODE_KEY_O, 0, x.inc(SMALL_GAP), false);
if(enable_edit) && (param[0]) AddTopBarButton(#EventSave, ECTRL+SCAN_CODE_KEY_S, 5, x.inc(SMALL_GAP), false);
AddTopBarButton(#EventShowFileInfo, ECTRL+SCAN_CODE_KEY_I, 10, x.inc(SMALL_GAP), false);
AddTopBarButton(#EventMagnifyMinus, ECTRL+SCAN_CODE_MINUS, 33, x.inc(BIG_GAP), false);
AddTopBarButton(#EventMagnifyPlus, ECTRL+SCAN_CODE_PLUS, 32, x.inc(SMALL_GAP), false);
AddTopBarButton(#EventClickSearch, ECTRL+SCAN_CODE_KEY_F, 49, x.inc(BIG_GAP), serha); search_mx = EAX;
x.set(Form.cwidth-4);
//AddTopBarButton(#EventShowInfo, NULL, -1, x.inc(-SMALL_GAP), false); burger_mx = EAX;
AddTopBarButton(#EventShowThemesList, NULL, 40, x.inc(-SMALL_GAP), thema); theme_mx = EAX;
AddTopBarButton(#EventEnableEdit, NULL, 38, x.inc(-SMALL_GAP), enable_edit);
//if(enable_edit) AddTopBarButton(#EventShowInfo, NULL, -1, x.inc(-SMALL_GAP), false); burger_mx = EAX;
AddTopBarButton(#EventShowThemesList, NULL, 40, x.inc(-BIG_GAP), thema); theme_mx = EAX;
AddTopBarButton(#EventShowReopenMenu, ECTRL+SCAN_CODE_KEY_E, 16, x.inc(-SMALL_GAP), reopa); reopenin_mx = EAX;
//AddTopBarButton(#EventOpenSysfuncs, NULL, 18, x.inc(-SMALL_GAP), false);
//AddTopBarButton(#EventOpenPipet, NULL, 39, x.inc(-SMALL_GAP), false);
if(enable_edit) AddTopBarButton(#EventOpenSysfuncs, NULL, 18, x.inc(-SMALL_GAP), false);
if(enable_edit) AddTopBarButton(#EventOpenPipet, NULL, 39, x.inc(-SMALL_GAP), false);
}
void DrawStatusBar(dword _in_text)
@ -719,6 +731,6 @@ void SetSizes(char _size)
list.item_w = list.font_w;
list.horisontal_selelection = true;
list.SetSizes(0, TOOLBAR_H, Form.cwidth-scroll.size_x-1,
Form.cheight - TOOLBAR_H - search.height() - STATUSBAR_H /*- TAB_H*/,
Form.cheight - TOOLBAR_H - calc(search.visible * SEARCH_H) - STATUSBAR_H /*- TAB_H*/,
math.round(list.font_h * 1.4));
}

View File

@ -9,8 +9,6 @@ struct SEARCH
void show();
void hide();
bool draw();
void draw_found();
int height();
bool edit_key();
bool edit_mouse();
void clear();
@ -37,11 +35,6 @@ void SEARCH::hide()
draw_window();
}
int SEARCH::height()
{
return visible * SEARCH_H;
}
bool SEARCH::edit_key()
{
if (visible) && (search_box.flags & ed_focus) {
@ -61,16 +54,9 @@ bool SEARCH::edit_mouse()
return false;
}
void SEARCH::draw_found()
{
char matches[30];
sprintf(#matches, T_MATCHES, found_count);
WriteTextWithBg(search_box.left+search_box.width+14+110,
search_box.top+3, 0xD0, sc.work_text, #matches, sc.work);
}
bool SEARCH::draw(dword _btn_find, _btn_hide, _y)
{
char matches[30];
if (!visible) return false;
DrawBar(0, _y, Form.cwidth, 1, sc.work_graph);
DrawBar(0, _y+1, Form.cwidth, SEARCH_H-1, sc.work);
@ -85,7 +71,9 @@ bool SEARCH::draw(dword _btn_find, _btn_hide, _y)
DrawCaptButton(search_box.left+search_box.width+14, search_box.top-1, 90,
TOOLBAR_ICON_HEIGHT+1, _btn_find, sc.work_light, sc.work_text, T_FIND_NEXT);
draw_found();
sprintf(#matches, T_MATCHES, found_count);
WriteTextWithBg(search_box.left+search_box.width+14+110,
search_box.top+3, 0xD0, sc.work_text, #matches, sc.work);
DefineHiddenButton(Form.cwidth-26, search_box.top-1, TOOLBAR_ICON_HEIGHT+1,
TOOLBAR_ICON_HEIGHT+1, _btn_hide);
@ -106,12 +94,11 @@ int SEARCH::find_next(int _cur_pos)
if (!search_text[0]) return false;
strcpy(#found_text, #search_text);
//highlight(0xFF0000, _bg_color);
found_count = strnum(io.buffer_data, #found_text);
draw_found();
found_count = strinum(io.buffer_data, #found_text);
draw_window();
for (i=_cur_pos+1; i<list.count; i++) {
if (strstri(lines.get(i),#search_text)!=-1) return atoi(lines.get(i));
if (strstri(lines.get(i),#search_text)) return i;
}
return false;
}

View File

@ -124,7 +124,7 @@ int SEARCH::find_next(int _cur_pos, _bg_color)
draw_found();
for (i=_cur_pos+1; i<pos.count; i++) {
if (strstri(lines.get(i),#search_text)!=-1) return atoi(pos.get(i));
if (strstri(lines.get(i),#search_text)) return atoi(pos.get(i));
}
return false;
}
@ -135,7 +135,7 @@ int SEARCH::highlight(dword _color, _bg_color)
dword col;
found_count = 0;
for (i=0; i<pos.count; i++) {
if (strstri(lines.get(i),#search_text)==-1) {
if (!strstri(lines.get(i),#search_text)) {
col=_bg_color;
} else {
col=_color;