From e3f508ee0cf322a54afe1c84ffea619eafb59cd9 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Sat, 20 Aug 2011 15:36:15 +0000 Subject: [PATCH] Text-based Browser 23.67 aka HTML Viewer v0.67 git-svn-id: svn://kolibrios.org@2085 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/network/htmlv/browser/HTMLv.c-- | 6 +- programs/network/htmlv/browser/History.txt | 13 +++ programs/network/htmlv/browser/TWB.h-- | 110 ++++++++---------- .../htmlv/browser/include/some_code.h-- | 28 ++--- programs/network/htmlv/lib/kolibri.h-- | 36 ++++-- 5 files changed, 105 insertions(+), 88 deletions(-) diff --git a/programs/network/htmlv/browser/HTMLv.c-- b/programs/network/htmlv/browser/HTMLv.c-- index d9bd41441a..0fd456b716 100644 --- a/programs/network/htmlv/browser/HTMLv.c-- +++ b/programs/network/htmlv/browser/HTMLv.c-- @@ -16,7 +16,7 @@ #include "../lib/dll.h--" //переменные -byte URL[4096]="/sys/html/index.htm", +byte URL[4096]="/sys/index.htm", editURL[4096], page_links[12000], header[512]; @@ -75,7 +75,9 @@ void main() } } //IF (kolichestvo=WB1.width-14) && (m.x<=WB1.width+6) && (kolichestvo>max_kolvo_strok) while (m.lkm) + if (m.x>=WB1.width-14) && (m.x<=WB1.width+6) + && (m.y>WB1.top+16) && (m.ymax_kolvo_strok) while (m.lkm) { IF (razm_scrl/2+WB1.top>m.y) || (m.y<0) || (m.y>4000) m.y=razm_scrl/2+WB1.top; //если курсор над окном btn=za_kadrom; //сохраняем старое количество diff --git a/programs/network/htmlv/browser/History.txt b/programs/network/htmlv/browser/History.txt index 9fd67fb627..cc6258e1a8 100644 --- a/programs/network/htmlv/browser/History.txt +++ b/programs/network/htmlv/browser/History.txt @@ -1,3 +1,16 @@ +20.08.11 -- v0.67 -- 11.1 Кб +- более адекватная прокрутка изображений; +- корректная обработка табов в тексте и с тегом
 (спасибо Nazarus и Jaeger);
+- улучшена отзывчивость программы при прокрутке больших страниц (фикс изначально
+   был написан Gluk'ом для игры Косилка по моей просьба, сюда перенесен мной);
+- небольшие исправления в реакции ползунка прокрутки;
+- исправлено залезание текста в наклонном шрифте на левый ободок окна;
+- кнопка "Новая вкладка" и комбинации Ctrl+N, Ctrl+T банально создают новое окно;
+- правильное распознание украинской буквы ґ;
+- поддержка кодировки "UTF8" для универсальности (идея фичи Joaquin).
+
+
+
 20.06.11 -- v0.63 -- 11.32 Кб
 lev
 - наклонный шрифт
diff --git a/programs/network/htmlv/browser/TWB.h-- b/programs/network/htmlv/browser/TWB.h--
index 75cf228977..f4fd86484a 100644
--- a/programs/network/htmlv/browser/TWB.h--
+++ b/programs/network/htmlv/browser/TWB.h--
@@ -1,14 +1,12 @@
 //http://jsbeautifier.org/
 //Web-component, Leency & Veliant 2007-2009
 //lev
+
+
 //идея - левые файлы открывать соответствующими прогами
-
-//	wintodos(buf); -> в парсе хтмл как и все кодировки
-
+//wintodos(buf); -> в парсе хтмл как и все кодировки
 //ol - циферки
 
-//ускорена загрузка страницы, содержащей изображения
-//уменьшено количество перерисовок заголовка окна при загрузке страницы
 
 dword j,
 	buf,
@@ -19,11 +17,11 @@ dword j,
  char download_path[]="/rd/1/.download";
 //char search_path[]="http://nova.rambler.ru/search?words=";
  char search_path[]="http://nigma.ru/index.php?s=";
- char version[]=" HTML Viewer v0.63";
+ char version[]=" Text-based Browser 23.67";
 
 
 struct TWebBrowser {
-	dword left,
+	int left,
 	top,
 	width,
 	height;
@@ -64,15 +62,21 @@ void TWebBrowser::Scan(dword id) {
 	case BACK:
 		BrowserHistory.GoBack();
 		return;
-	/*case FORWARD:
-		WriteDebug(#UrlHistory);
-		return;*/
+	case FORWARD:
+		//RunProgram("@notify", "Forward button is not realized yet");
+		return;
 	case 054: //F5
 		IF(edit1.flags == 66) break;
   case REFRESH:
 		copystr(#URL, #editURL);
 		Draw_Window();
 		return;
+	case 014: //Ctrl+N новое окно
+	case 020: //Ctrl+T новая вкладка
+	case NEWTAB:
+		MoveSize(190,80,OLD,OLD);
+		RunProgram(#program_path, #URL);
+		return;
 	case HOME:
 		copystr("/sys/index.htm", #editURL);
 	case GOTOURL:
@@ -235,7 +239,8 @@ dword text_colors[10],
 	text_color_index = 0,
 	link_color;
 int stroka,
-	stolbec;
+	stolbec,
+	tab_len;
 	byte line[330],
 	tag[100],
 	tagparam[10000],
@@ -271,11 +276,18 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
 				goto NEXT_MARK;
 			}
 		CASE '\9':
-		CASE 0x0d:
-			//IF(pre_text == 1) {copystr("   ", #line + strlen(#line)); break;} ELSE
+			if (pre_text == 1) //иначе идём на 0x0d	
+			{
+				tab_len=strlen(#line)/8;
+				tab_len=tab_len*8;
+				tab_len=8+tab_len-strlen(#line);
+				for (i=0; i, дерзко
 			{
@@ -325,37 +337,6 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
 			bukva=Hex2Symb(#temp);
 			IF (bukva) goto DEFAULT_MARK;
 			break; 
-		/*case '\\': //поддержка RTF, http://dev.rembish.ru/rtf.phps
-			IF(strcmp(#URL + strlen(#URL) - 4, ".rtf")<>0) goto DEFAULT_MARK;
-			rtf_text='';
-			
-			//
-               bword++;
-			j = 0;
-
-			IF (ESBYTE[bword]=='\'')
-			{
-				bword++;
-				bukva=ESBYTE[bword];
-				copystr(#bukva, #rtf_text);
-	
-				bword++;
-				bukva=ESBYTE[bword];
-				copystr(#bukva, #rtf_text + strlen(#rtf_text));
-
-				bukva=Hex2Symb(#rtf_text);
-				IF (bukva) goto DEFAULT_MARK;
-			}
-
-			WHILE ((ESBYTE[bword] <>' ') && (j < 25) && (ESBYTE[bword] <>'\\') && (ESBYTE[bword] <>0x0d)) {
-				bukva = ESBYTE[bword];
-				copystr(#bukva, #rtf_text + strlen(#rtf_text));
-				bword++;
-				j++;
-			}
-			
-			IF (strcmp(#rtf_text,"par")==0) goto NEXT_MARK;
-			break;*/						
 		case '&':
 			IF(ignor_text) break;
 			bword++;
@@ -457,7 +438,7 @@ void GetNextParam() {
 
 
 char oldtag[100];
-void TWebBrowser::WhatTextStyle(word left1, top1, width1) {
+void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
 	dword hr_color;
 
     dword image=0;
@@ -636,13 +617,28 @@ void TWebBrowser::WhatTextStyle(word left1, top1, width1) {
 
         if (image)
         {
-			IF (width1WB1.top+WB1.height-10) //если ВСЁ изображение ушло ВЕРХ или ВНИЗ
+				return;
+			
+			if (top1WB1.top+WB1.height-h-10) //если часть изображения снизу     IF (stroka - 2 < max_kolvo_strok)
+			{
+				//WriteDebug(IntToStr(top1));
+				//WriteDebug(IntToStr(WB1.top));
+				//WriteDebug(IntToStr(h));
+				h=WB1.top+WB1.height-top1-10;
+			}			 
+			
+			img_draw stdcall (image,left1-5,top1+10,w, h,0,0);
+			DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, 0xFFFFFF);
         }
-        //else WriteDebug(#options);
 	}
 
 	if (!chTag("meta")) {
@@ -651,7 +647,7 @@ void TWebBrowser::WhatTextStyle(word left1, top1, width1) {
 		{
 			copystr(#options[find_symbol(#options, '=')],#options); //поиск в content=
 
-      IF (!strcmp(#options,"utf-8"))
+      IF (!strcmp(#options,"utf-8")) || (!strcmp(#options,"utf8"))
 			{
 				ReadHtml(DONT_LOAD);
    	    utf8rutodos(buf);
@@ -680,12 +676,4 @@ void TextGoDown(int left1, top1, width1) {
 	ELSE stolbec = 0;
 	IF(li_text == 1) stolbec = li_tab * 5;
 	IF(stroka >= 0) && (stroka - 2 < max_kolvo_strok) DrawBar(left1 - 5, top1 + 10, width1 + 5, 10, 0xFFFFFF);
-}
-
-void TextGoDown2(int left1,top1,width1,height1)//ASPER: Надо заменить эту функцию более правильной.
-{
-  stroka+=height1/10;
-  IF (blq_text==1) stolbec=8; ELSE stolbec=0;
-  IF (li_text==1) stolbec=5;
-  IF (stroka>=0) && (stroka-2> 8;
+
+inline fastcall word GetKey(){ //Gluk fix
+		$push edx
+@getkey:
+		$mov  eax,2
+		$int  0x40
+		$cmp eax,1
+		$jne getkeyi
+		$mov ah,dh
+		$jmp getkeyii //jz?
+@getkeyi:
+		$mov dh,ah
+		$jmp getkey
+@getkeyii:
+		$pop edx
+		EAX = EAX >> 8;		 
 }
 
 inline fastcall word GetButtonID(){
@@ -356,13 +369,14 @@ inline fastcall wintodos (dword ESI)
 	IF (BL==178) ESBYTE[ESI] = 73;  //I
 	IF (BL==179) ESBYTE[ESI] = 105; //i
 	IF (BL==175) ESBYTE[ESI] = 244; //J
-          IF (BL==191) ESBYTE[ESI] = 245; //j
+    IF (BL==191) ESBYTE[ESI] = 245; //j
 	IF (BL==170) ESBYTE[ESI] = 242; //E
 	IF (BL==186) ESBYTE[ESI] = 243; //e
-          IF (BL==168) ESBYTE[ESI] = 240; //р
-          IF (BL==184) ESBYTE[ESI] = 'e'; //e
-          IF ((BL==147) || (BL==148) || (BL==171) || (BL==187)) ESBYTE[ESI] = 34;
-          IF ((BL==150) || (BL==151)) ESBYTE[ESI] = 45;
+    IF (BL==168) ESBYTE[ESI] = 240; //р
+    IF (BL==184) ESBYTE[ESI] = 'e'; //e
+	IF (BL==180) ESBYTE[ESI] = 254; //г
+    IF ((BL==147) || (BL==148) || (BL==171) || (BL==187)) ESBYTE[ESI] = 34;
+    IF ((BL==150) || (BL==151)) ESBYTE[ESI] = 45;
         }
         ESI++;
    }