[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: [w3m-dev 01852] Re: backend and emacs-w3m



坂本です。

 >> From: TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp>
 >> 坂本> * -halfdump の出力の形式を変更することは譲れない。
 >> 取り急ぎ一点だけ。私が考えているのは w3m の内部表現を固定化することで
 >> はありません。
了解。

 >> そうではなく、内部表現を上位層(ユーザーインターフェースプログラム)の処
 >> 理しやすい形式に変換して出力するモードをつくりませんか、という提案です。

『処理しやすい形式』というのがくせ者で、いまのままでも
上位層である w3m の HTMLlineporc2body は『処理しやすい』わけです。:-(

halfdump に version を付けて出力することで対応していただけませんんか。

もちろん、[emacs-w3m:00375], [w3m-dev 01849] で書いた様に
* header や form 情報の出力
* 文字コード変換
はやるべきと思います。

文字コード変換に絡んで、
<rule>内部コード</rule> (w3m-m17n なら <symbol>) は同等のタグにします。
visited_anchor のために(急いで)実装してから、いろいろ考えていたのです
が元の様な ASCII で表現したタグの方がいいでしょう。
内部コード化は HTMLlineproc2body の仕事にします。
この patch は添付します。(最初からこうすれば簡単だったのに。)

PS.
あんまりサーバとか上位層とか言わないで…
----------------------------------- 
坂本 浩則 <hsaka@mth.biglobe.ne.jp> 
 http://www2u.biglobe.ne.jp/~hsaka/

--- html.c.orig	Fri Mar 23 10:49:54 2001
+++ html.c	Tue Mar 27 15:43:12 2001
@@ -67,6 +67,8 @@
 
 unsigned char ALST_TABLE_ALT[] = {ATTR_TID};
 #define MAXA_TABLE_ALT	1
+unsigned char ALST_RULE[] = {ATTR_TYPE};
+#define MAXA_RULE	1
 unsigned char ALST_TITLE_ALT[] = {ATTR_TITLE};
 #define MAXA_TITLE_ALT	1
 unsigned char ALST_INPUT_ALT[] =
@@ -196,7 +198,7 @@
 
     /* pseudo tag */
     {ALST_TABLE_ALT,MAXA_TABLE_ALT,TFLG_INT},    /* 113 HTML_TABLE_ALT   */
-    {NULL,          0,             TFLG_INT},    /* 114 HTML_RULE        */
+    {ALST_RULE,     MAXA_RULE,     TFLG_INT},    /* 114 HTML_RULE        */
     {NULL,          0,    TFLG_INT|TFLG_END},    /* 115 HTML_N_RULE      */
     {NULL,          0,             TFLG_INT},    /* 116 HTML_PRE_INT     */
     {NULL,          0,    TFLG_INT|TFLG_END},    /* 117 HTML_N_PRE_INT   */
--- file.c.orig	Fri Mar 23 11:19:54 2001
+++ file.c	Tue Mar 27 15:43:12 2001
@@ -131,7 +131,7 @@
     NBSP "*", NBSP "+", NBSP "o", NBSP "#", NBSP "@", NBSP "-",
     NBSP "=", "**", "--"
 };
-#define HR_RULE "\212"
+#define HR_RULE "-"
 #define HR_RULE_WIDTH 1
 #endif				/* not KANJI_SYMBOLS */
 
@@ -2125,7 +2125,7 @@
 	if (w > 200 && i < 13) {
 	    /* must be a horizontal line */
 #ifndef KANJI_SYMBOLS
-	    Strcat_charp(tmp, "<_RULE>");
+	    Strcat_charp(tmp, "<_RULE TYPE=10>");
 #endif				/* not KANJI_SYMBOLS */
 	    w /= pixel_per_char;
 	    for (i = 0; i < w - (HR_RULE_WIDTH - 1); i += HR_RULE_WIDTH)
@@ -2629,7 +2629,7 @@
 	break;
     }
 #ifndef KANJI_SYMBOLS
-    Strcat_charp(tmp, "<_RULE>");
+    Strcat_charp(tmp, "<_RULE TYPE=10>");
 #endif				/* not KANJI_SYMBOLS */
     w -= HR_RULE_WIDTH - 1;
     if (w <= 0)
@@ -3594,6 +3594,9 @@
     int hseq;
     Str line;
     char *endp;
+#ifndef KANJI_SYMBOLS
+    char rule;
+#endif
 
     if (w3m_debug)
 	debug = fopen("zzzerr", "a");
@@ -3626,8 +3629,8 @@
 	while (str < endp && pos < LINELEN) {
 	    mode = get_mctype(str);
 #ifndef KANJI_SYMBOLS
-	    if (effect & PC_RULE && IS_INTSPACE(*str)) {
-		PPUSH(PC_ASCII | effect, *str);
+	    if (effect & PC_RULE && *str != '<') {
+		PPUSH(PC_ASCII | effect, rule | 0x80);
 		str++;
 	    } else
 #endif
@@ -3897,6 +3900,8 @@
 #ifndef KANJI_SYMBOLS
 		case HTML_RULE:
 		    effect |= PC_RULE;
+		    if (parsedtag_get_value(tag, ATTR_TYPE, &p))
+			rule = (char)atoi(p);
 		    break;
 		case HTML_N_RULE:
 		    effect &= ~PC_RULE;
--- table.c.orig	Fri Mar 23 10:49:53 2001
+++ table.c	Tue Mar 27 15:43:12 2001
@@ -35,22 +35,22 @@
 static char    *rule[] =
 #endif
 {
-    "<_RULE>\200</_RULE>",
-    "<_RULE>\201</_RULE>",
-    "<_RULE>\202</_RULE>",
-    "<_RULE>\203</_RULE>",
-    "<_RULE>\204</_RULE>",
-    "<_RULE>\205</_RULE>",
-    "<_RULE>\206</_RULE>",
-    "<_RULE>\207</_RULE>",
-    "<_RULE>\210</_RULE>",
-    "<_RULE>\211</_RULE>",
-    "<_RULE>\212</_RULE>",
-    "<_RULE>\213</_RULE>",
-    "<_RULE>\214</_RULE>",
-    "<_RULE>\215</_RULE>",
-    "<_RULE>\216</_RULE>",
-    "<_RULE>\217</_RULE>"
+    "<_RULE TYPE=0>+</_RULE>",
+    "<_RULE TYPE=1>|</_RULE>",
+    "<_RULE TYPE=2>-</_RULE>",
+    "<_RULE TYPE=3>+</_RULE>",
+    "<_RULE TYPE=4>|</_RULE>",
+    "<_RULE TYPE=5>|</_RULE>",
+    "<_RULE TYPE=6>+</_RULE>",
+    "<_RULE TYPE=7> </_RULE>",
+    "<_RULE TYPE=8>-</_RULE>",
+    "<_RULE TYPE=9>+</_RULE>",
+    "<_RULE TYPE=10>-</_RULE>",
+    "<_RULE TYPE=11> </_RULE>",
+    "<_RULE TYPE=12>+</_RULE>",
+    "<_RULE TYPE=13> </_RULE>",
+    "<_RULE TYPE=14> </_RULE>",
+    "<_RULE TYPE=15> </_RULE>"
 };
 #if defined(__EMX__)&&!defined(JP_CHARSET)
 static char   **ruleB = _rule, **rule = _rule;
@@ -64,7 +64,7 @@
 static char   **ruleB = rule;
 #endif				/* not __EMX__ or JP_CHARSET */
 
-#define TN_VERTICALBAR "<_RULE>\205</_RULE>"
+#define TN_VERTICALBAR "<_RULE TYPE=5>|</_RULE>"
 #define RULE_WIDTH 1
 #endif				/* not KANJI_SYMBOLS */