Namazu-users-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: mknmz のメタタグの扱い
古川です。
From: knok@xxxxxxxxxxxxx (NOKUBI Takatsugu)
Subject: [namazu-users-ja] Re: mknmz のメタタグの扱い
Date: Tue, 5 Dec 2000 17:44:48 JST
knok> pl/codeconv.pl の
knok> my $nkf_opt = "-emXZ1";
knok> から Z1 を消せば一応変換はしなくなりそうですが、副作用もありそうです...
knok>
knok> >> # そういうフィルタを書いて、mknmz から呼び出させる方法があるはずだと
knok> >> # 思いますが、具体的な方法は、私は分かりません。
knok>
knok> 元の encoding も考慮しないといけないので難しそうな気がします。
よく考えてみましたが、その処理は nkf にやってもらうのが、一番いい
と思います。
というわけで、パッチを作ってみました。興味のあるかたはどうぞ。
パッチを当てたら、-Z3 オプションで
> >
< <
“” "
& &
の変換をします。pl/codeconv.pl は
my $nkf_opt = "-emXZ1Z3";
とするとよいでしょう。
1.71 用と 1.92 用のパッチを作りましたが、1.92 用は、-Z1 オプション
のバグ (空白が文字化けする) の修正もしています。
--
Rei FURUKAWA
furukawa@xxxxxxxxxxxx
--- nkf.c.orig Wed Dec 6 09:50:49 2000
+++ nkf.c Wed Dec 6 16:56:15 2000
@@ -216,6 +216,7 @@
/* X0208 -> ASCII converter */
static int c1_return;
+static char *c1_entity;
/* fold parameter */
static int line = 0; /* chars in line */
@@ -516,6 +517,7 @@
/* bit:0 Convert X0208
bit:1 Convert Kankaku to one space
bit:2 Convert Kankaku to two spaces
+ bit:3 Convert HTML Entities
*/
if('9'>= *cp && *cp>='0')
alpha_f |= 1<<(*cp++ -'0');
@@ -1110,7 +1112,9 @@
} else if(c2 == 0) {
if(c1 == '\n' && add_cr == TRUE)
putchar('\r');
- if(c1 != '\r')
+ if (c1_entity)
+ while (*c1_entity) putchar(*c1_entity++);
+ else if(c1 != '\r')
putchar(c1);
else if(del_cr == FALSE)
putchar(c1);
@@ -1162,7 +1166,9 @@
else if(c2 == 0) {
if(c1 == '\n' && add_cr == TRUE)
putchar('\r');
- if(c1 != '\r')
+ if (c1_entity)
+ while (*c1_entity) putchar(*c1_entity++);
+ else if(c1 != '\r')
putchar(c1);
else if(del_cr == FALSE)
putchar(c1);
@@ -1238,7 +1244,9 @@
}
if(c1 == '\n' && add_cr == TRUE)
putchar('\r');
- if(c1 != '\r')
+ if (c1_entity)
+ while (*c1_entity) putchar(*c1_entity++);
+ else if(c1 != '\r')
putchar(c1);
else if(del_cr == FALSE)
putchar(c1);
@@ -1447,6 +1455,7 @@
{
if(c2) c1 &= 0x7f;
c1_return = c1;
+ c1_entity = 0;
if(c2==EOF) return c2;
c2 &= 0x7f;
if(rot_f) {
@@ -1475,6 +1484,14 @@
}
} else if(0x20<c1 && c1<0x7f && fv[c1-0x20]) {
c1_return = fv[c1-0x20];
+ if (alpha_f & 0x08){
+ switch (c1_return){
+ case '>': c1_entity = ">"; break;
+ case '<': c1_entity = "<"; break;
+ case '"': c1_entity = """; break;
+ case '&': c1_entity = "&"; break;
+ }
+ }
return 0;
}
}
@@ -1851,7 +1868,8 @@
fprintf(stderr,"m[BQ0] MIME decode [B:base64,Q:quoted,0:no decode]\n");
fprintf(stderr,"l ISO8859-1 (Latin-1) support\n");
fprintf(stderr,"f Folding: -f60 or -f\n");
- fprintf(stderr,"Z[0-2] Convert X0208 alphabet to ASCII 1: Kankaku to space,2: 2 spaces\n");
+ fprintf(stderr,"Z[0-3] Convert X0208 alphabet to ASCII 1: Kankaku to space,2: 2 spaces,\n");
+ fprintf(stderr," 3: Convert HTML Entity\n");
fprintf(stderr,"X,x Assume X0201 kana in MS-Kanji, -x preserves X0201 \n");
fprintf(stderr,"B[0-2] Broken input 0: missing ESC,1: any X on ESC-[($]-X,2: ASCII on NL\n");
#ifdef MSDOS
--- nkf.c.orig Wed Dec 6 10:09:59 2000
+++ nkf.c Wed Dec 6 14:23:23 2000
@@ -649,6 +649,7 @@
/* bit:0 Convert X0208
bit:1 Convert Kankaku to one space
bit:2 Convert Kankaku to two spaces
+ bit:3 Convert HTML Entity
*/
if ('9'>= *cp && *cp>='0')
alpha_f |= 1<<(*cp++ -'0');
@@ -1670,6 +1671,7 @@
if (0x21==c1) {
if (alpha_f&0x2) {
c1 = ' ';
+ c2 = 0;
} else if (alpha_f&0x4) {
(*o_zconv)(0,' ');
(*o_zconv)(0,' ');
@@ -1678,6 +1680,19 @@
} else if (0x20<c1 && c1<0x7f && fv[c1-0x20]) {
c1 = fv[c1-0x20];
c2 = 0;
+ if (alpha_f&0x8) {
+ char *entity = 0;
+ switch (c1){
+ case '>': entity = ">"; break;
+ case '<': entity = "<"; break;
+ case '"': entity = """; break;
+ case '&': entity = "&"; break;
+ }
+ if (entity){
+ while (*entity) (*o_zconv)(0, *entity++);
+ return;
+ }
+ }
}
}
(*o_zconv)(c2,c1);
@@ -2297,7 +2312,8 @@
fprintf(stderr,"M[BQ] MIME encode [B:base64 Q:quoted]\n");
fprintf(stderr,"l ISO8859-1 (Latin-1) support\n");
fprintf(stderr,"f Folding: -f60 or -f\n");
- fprintf(stderr,"Z[0-2] Convert X0208 alphabet to ASCII 1: Kankaku to space,2: 2 spaces\n");
+ fprintf(stderr,"Z[0-3] Convert X0208 alphabet to ASCII 1: Kankaku to space,2: 2 spaces\n");
+ fprintf(stderr," 3: Convert HTML Entities\n");
fprintf(stderr,"X,x Assume X0201 kana in MS-Kanji, -x preserves X0201\n");
fprintf(stderr,"B[0-2] Broken input 0: missing ESC,1: any X on ESC-[($]-X,2: ASCII on NL\n");
#ifdef MSDOS