リンク表示が途中で切れないようにするにNo.16409
たタヌキ さん 04/01/29 10:14
 
鶴亀メールでも秀丸でも同じかもしれませんが、
以下のような表示が文中にあり、リンクが自動につけられる場合、縦棒の箇所で切れ
てしまうことが多いと思います。(この場合、このリンクをクリックしてブラウザで
見ようとすると、当該ファイルはありません等のエラーとなる)
これは仕様なのだと思いますが、もし縦棒の箇所で切れないようにすると何か不具合
(副作用)がないのならば、改善できないでしょうか。あるいは、何かのオプション
で回避できるのでしょうか。

http://europa.eu.int/rapid/start/cgi/guesten.ksh?p_action.gettxt=gt&doc=IP/0
4/118|0|RAPID&lg=EN&display=

[ ]
RE:16409 リンク表示が途中で切れないようNo.16410
たけのこ さん 04/01/29 10:35
 
一般ユーザのたけのこです。

> 以下のような表示が文中にあり、リンクが自動につけられる場合、縦棒の箇所で切れ
> てしまうことが多いと思います。(この場合、このリンクをクリックしてブラウザで
> 見ようとすると、当該ファイルはありません等のエラーとなる)

> http://europa.eu.int/rapid/start/cgi/guesten.ksh?p_action.gettxt=gt&doc=IP/0
> 4/118|0|RAPID&lg=EN&display=


問題点が二点あります。
・URLが長い(ご指摘の通り)。
・URLとして利用出来ない文字が含まれる。

前者の問題点は次のようにして回避出来ます。
1.長いURLを含む行を選択する。
2.右クリックメニューから『現在行の自動折り返し禁止』を選択する。

後者の問題点は、以下のいずれかを施す必要があります。
・文字列を正しいx-www-form-url符号化し、前者の問題点の回避手順を行う。
・長く不正な文字列を含むURLを引用行(行頭に'>'など)としてしまう。但し、
  設定メニューの全般的な設定→メール表示で、引用行の折り返し桁数をそれな
  りに多くしておく必要がある(デフォルトでいくつになっているんだろう…
  …?)。また、鶴亀を含めクライアントによっては、やはりURLとして不正な
  文字列は、そこでURLと一般文字列の区切りとしてしまう可能性がある(ので、
  上の“文字列を正しいx-www-form-url符号化”を行っておくべき)

(^^)/”

[ ]
RE:16410 リンク表示が途中で切れないようNo.16411
たけのこ さん 04/01/29 10:40
 
一般ユーザのたけのこです。

> 問題点が二点あります。
> ・URLが長い(ご指摘の通り)。
> ・URLとして利用出来ない文字が含まれる。

失礼!
ご指摘してあったのは後者の方でした。

(^^)/”

[ ]
RE:16410 リンク表示が途中で切れないようNo.16412
たタヌキ さん 04/01/29 12:46
 
>後者の問題点は、以下のいずれかを施す必要があります。
>・文字列を正しいx-www-form-url符号化し、前者の問題点の回避手順を行う。
>・長く不正な文字列を含むURLを引用行(行頭に'>'など)としてしまう。但し、
>  設定メニューの全般的な設定→メール表示で、引用行の折り返し桁数をそれな
>  りに多くしておく必要がある(デフォルトでいくつになっているんだろう…
>  …?)。また、鶴亀を含めクライアントによっては、やはりURLとして不正な
>  文字列は、そこでURLと一般文字列の区切りとしてしまう可能性がある(ので、
>  上の“文字列を正しいx-www-form-url符号化”を行っておくべき)

詳しくはないのですが、おそらく「|」はRFC等で排除あるいは非推奨とされてい
るのですね。
自分がアンカーを使って、手で埋め込む際に問題がないことは確認していましたが、
先の例はメイリングリストから送られてきたものです。
このような場合の対処をお尋ねしたかったのです。
なお、このような場合を考慮して、自動折り返しは日頃デフォールトoffにしてあり
ます。

[ ]
RE:16412 リンク表示が途中で切れないようNo.16414
秀まるお2 さん 04/01/29 13:18
 
 URLとして有効な文字かどうかの判断は、けっこう適当でして、ユーザーさん
から要望があって文字を追加するケースは多いです。

 今回の「|」については、次のV3.20βからURL対象として認識するようにしま
す。秀丸の方についても、たぶん将来そのように対応します。

[ ]
RE:16414 リンク表示が途中で切れないようNo.16416
たタヌキ さん 04/01/29 13:26
 
> URLとして有効な文字かどうかの判断は、けっこう適当でして、ユーザーさん
>から要望があって文字を追加するケースは多いです。
>
> 今回の「|」については、次のV3.20βからURL対象として認識するようにしま
>す。秀丸の方についても、たぶん将来そのように対応します。

ありがとうございます。
先の例は、欧州連合(EU)のメイリングリストから頻繁に来るもので、対応していた
だけると助かります。

[ ]
RE:16412 リンク表示が途中で切れないようNo.16417
アルビレオ さん 04/01/29 13:34
 
鶴亀ユーザーのアルビレオです。

>自分がアンカーを使って、手で埋め込む際に問題がないことは確認していましたが、
>先の例はメイリングリストから送られてきたものです。
>このような場合の対処をお尋ねしたかったのです。
>なお、このような場合を考慮して、自動折り返しは日頃デフォールトoffにしてあり
>ます。

今後は対応するようなので蛇足になりますが、URLとして認識して欲しい文字列
を範囲選択して右クリックメニューの「...を開く」で開くことができます。
#16409のURLも(途中の改行を削除すれば)ブラウザで正しく開くことを確認し
ました。

[ ]
RE:16412 リンク表示が途中で切れないようNo.16418
たけのこ さん 04/01/29 13:41
 
一般ユーザのたけのこです。

> 詳しくはないのですが、おそらく「|」はRFC等で排除あるいは非推奨とされてい
> るのですね。

ってことです。

秀まるお2さんが前向きな解答をなさっていますが、とりあえずは下記のような
マクロで、選択範囲をまともなキャラでエンコードします。

/* unicode→utf-8はかなり怪しいですが(^^; 本体の関数として実装……して
くれないかなとお願いしてみたり。 */

秀丸で使うときはそのまま使えます。鶴亀で使うときは、受信済みメールの場合
は編集を許可してから使ってください。つーか、受信済みなら、範囲選択後右ク
リック→...を開く、の方が簡単です。このマクロは送信する場合に使用して、
相手がどんなクライアントだろうとokちゅうのが親切な使い方かもしれません。


//-----ここから
if(selecting){
  // 元の文字列を取得
  $srcStr = gettext(seltopx, seltopy, selendx, selendy);
  #sx = seltopx;
  #sy = seltopy;
  moveto #sx, #sy;
  // encoding開始
  $destStr = "";
  // クエリ文字列まで読み飛ばし
  while($srcStr != $destStr){
    call getter;
    $now = $$return;
    $destStr = $destStr + $now;
    right;
    if($now == "?"){
      break;
    }
  }
  // クエリ文字列を符号化
  while($srcStr != $destStr){
    #cc = unicode;
    call getter;
    $now = $$return;
    if(((#cc >= 'a')&&(#cc <= 'z'))
     ||((#cc >= 'A')&&(#cc <= 'Z'))
     ||((#cc >= '0')&&(#cc <= '9'))){
      // 英数字はそのまま
      right;
    }else if((#cc == '=')||(#cc == '&')
           ||(#cc == '.')||(#cc == '-')
           ||(#cc == '*')||(#cc == '_')){
      // 一部の記号もそのまま
      // しかし、本来ならば等号とアンパサンドは、
      // デリミタ以外の場合はエンコードしなければならない。
      // やろうとするならば、結構まともなパーサが必要
      right;
    }else if(#cc == ' '){
      // 空白は'+'にする
      delete;
      insert "+";
    }else{
      // その他はエンコード対象
      delete;
      call unicode2utf #cc;
      $utf = $$return;
      #utflen = strlen($utf);
      #i = 0;
      while(#i < #utflen){
        insert "%" + midstr($utf, #i, 2);
        #i = #i + 2;
      }
    }
    $destStr = $destStr + $now;
  }
}else{
  message "符号化範囲を選択して実行してください。";
}
endmacro;


getter:
##sx = x;
##sy = y;
right;
$$text = gettext(##sx, ##sy, x, y);
left;
return $$text;


unicode2utf:
##uni = ##1;
if(##uni < 0x7f){
  // 1バイト表現
  $$hexa = rightstr("00" + hex(##uni), 2);
}else if(##uni < 0x7ff){
  // 2バイト表現
  ##hex1 = (##uni & 0x7c0) / 64;
  ##hex2 = ##uni & 0x3f;
  $$hexa = rightstr("00" + hex(##hex1 + 0xc0), 2) +
          rightstr("00" + hex(##hex2 + 0x80), 2);
}else if(##uni < 0xffff){
  // 3バイト表現
  ##hex1 = (##uni & 0xf000) / 4096;
  ##hex2 = (##uni & 0xfc0) / 64;
  ##hex3 = ##uni & 0x3f;
  $$hexa = rightstr("00" + hex(##hex1 + 0xe0), 2) +
          rightstr("00" + hex(##hex2 + 0x80), 2) +
          rightstr("00" + hex(##hex3 + 0x80), 2);
}else if(##uni < 0x1fffff){
  // 4バイト表現
  ##hex1 = (##uni & 0x1c0000) / 262144;
  ##hex2 = (##uni & 0x3f000) / 4096;
  ##hex3 = (##uni & 0xfc0) / 64;
  ##hex4 = ##uni & 0x3f;
  $$hexa = rightstr("00" + hex(##hex1 + 0xf0), 2) +
          rightstr("00" + hex(##hex2 + 0x80), 2) +
          rightstr("00" + hex(##hex3 + 0x80), 2) +
          rightstr("00" + hex(##hex4 + 0x80), 2);
}else if(##uni < 0x3ffffff){
  // 5バイト表現
  ##hex1 = (##uni & 0x2000000) / 16777216;
  ##hex2 = (##uni & 0xfc0000) / 262144;
  ##hex3 = (##uni & 0x3f000) / 4096;
  ##hex4 = (##uni & 0xfc0) / 64;
  ##hex5 = ##uni & 0x3f;
  $$hexa = rightstr("00" + hex(##hex1 + 0xf8), 2) +
          rightstr("00" + hex(##hex2 + 0x80), 2) +
          rightstr("00" + hex(##hex3 + 0x80), 2) +
          rightstr("00" + hex(##hex4 + 0x80), 2) +
          rightstr("00" + hex(##hex5 + 0x80), 2);
}else{
  // 6バイト表現
  ##hex1 = (##uni & 0x40000000) / 1073741824;
  ##hex2 = (##uni & 0x2f000000) / 16777216;
  ##hex3 = (##uni & 0xfc0000) / 262144;
  ##hex4 = (##uni & 0x3f000) / 4096;
  ##hex5 = (##uni & 0xfc0) / 64;
  ##hex6 = ##uni & 0x3f;
  $$hexa = rightstr("00" + hex(##hex1 + 0xfc), 2) +
          rightstr("00" + hex(##hex2 + 0x80), 2) +
          rightstr("00" + hex(##hex3 + 0x80), 2) +
          rightstr("00" + hex(##hex4 + 0x80), 2) +
          rightstr("00" + hex(##hex5 + 0x80), 2) +
          rightstr("00" + hex(##hex6 + 0x80), 2);
}
return $$hexa;
//-----ここまで

(^^)/”

[ ]
RE:16414 リンク表示が途中で切れないようNo.16451
たタヌキ さん 04/01/30 18:33
 
http://europa.eu.int/information_society/newsroom/library/theme/ecowor/index
_en.htm

上の例ですと、自動折り返しoffの状態で受信しても、アンダーバーの手前で改行さ
れ、同時にリンクも切れています。
前の例は、改行はされていなかったのですが、同様に対応をお願いできますでしょう
か。

[ ]
RE:16451 リンク表示が途中で切れないようNo.16453
アルビレオ さん 04/01/30 19:29
 
鶴亀ユーザーのアルビレオです。

>http://europa.eu.int/information_society/newsroom/library/theme/ecowor/index
>_en.htm
>
>上の例ですと、自動折り返しoffの状態で受信しても、アンダーバーの手前で改行さ
>れ、同時にリンクも切れています。
>前の例は、改行はされていなかったのですが、同様に対応をお願いできますでしょう
>か。

この改行はメールサーバーが自動的に入れる改行です。
鶴亀に届いた時点ですでに改行されているので、対処は困難です。

「URLの最後が改行で終わっていて、次の行頭にもURLで使用される文字が続いた
ら連結」というルールだと、URLが書かれたすぐ次の行に英文が続いたりすると
勝手にULRの続きと解釈して連結してしまう状況が出てくるでしょう。

[ ]
RE:16451 リンク表示が途中で切れないようNo.16456
秀まるお2 さん 04/01/30 21:35
 
 折り返し表示されたURLが、受信した先でリンク切りになるのは、一応仕様っ
てことになります。

 URLの行にて、「編集・現在行の折り返し禁止」を実行していただければ大丈
夫なので、それで対処して欲しいです。

[ ]
RE:16453 リンク表示が途中で切れないようNo.16459
秀まるお2 さん 04/01/30 21:39
 
 もしかしてここの会議室へ投稿した場合の話ですかね?

 ここの会議室へメールで投稿した場合には、勝手ながらうちのサーバー側で78
桁付近に改行が入ってしまいます。

 そうでないなら、メールサーバー側で改行が入ることは無いと思いますけど?

[ ]
RE:16451 リンク表示が途中で切れないようNo.16462
Iranoan さん 04/01/30 23:18
 
 たタヌキさん今日は、Iranoan です。
 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです。
> http://europa.eu.int/information_society/newsroom/library/theme/ecowor/index
> _en.htm
>
> 上の例ですと、自動折り返しoffの状態で受信しても、アンダーバーの手前で改行さ
> れ、同時にリンクも切れています。
 これは送信時に改行が挿入されているのでは? 少なくとも、鶴亀で「自動折
り返し」を OFF にして送ったら改行は入りませんでした。

 もし相手が送信時に挿入された改行なら、上記の例まで URL として認識し
てしまうと、行頭に英数字のある文 (特に英文) で反っておかしな事になりま
す。そんなわけで、この様な場合も対処させるには、末尾の様なマクロを使っ
た方が良いと思います。改行などで URL やファイル名として認識されていな
いときは、範囲選択して実行してください。
//-------------------- 「...を開く」を拡張 ---------------------------
disableerrormsg;
if(selecting){
  $$return = gettext(seltopx,seltopy,selendx,selendy);
  if( strstr($$return,"\x0D") != -1 && strstr($$return,"\x0A") != -1){
    call ChangeCharacter $$return,"\x0D","";
    call ChangeCharacter $$return,"\x0A","";
    call ChangeCharacter $$return,"\t","";
    run  "rundll32.exe url.dll,FileProtocolHandler \"" + $$return + "\"";
  }
  else{
    moveto seltopx, seltopy;
    openbyshell;
  }
  if( !result )message "失敗";
}
else openbyshell;
if( !result )message "失敗";
endmacro;

ChangeCharacter://buff 中の文字列を置換
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;

[ ]
RE:16456 リンク表示が途中で切れないようNo.16463
たタヌキ さん 04/01/30 23:27
 
> URLの行にて、「編集・現在行の折り返し禁止」を実行していただければ大丈夫な
>ので、それで対処して欲しいです。

すみません。
鶴亀メールの編集メニューで、「現在行の折り返し禁止」という項目は、
どこにあるのでしょうか。

[ ]
RE:16462 リンク表示が途中で切れないようNo.16464
たタヌキ さん 04/01/30 23:30
 

> これは送信時に改行が挿入されているのでは? 少なくとも、鶴亀で「自動折
>り返し」を OFF にして送ったら改行は入りませんでした。

そうかもしれません。今までの経験では、url行が短くても、改行されている場合も
ありましたので。

>す。そんなわけで、この様な場合も対処させるには、末尾の様なマクロを使っ
>た方が良いと思います。改行などで URL やファイル名として認識されていな
>いときは、範囲選択して実行してください。

ありがとうございます。
秀丸、鶴亀メールのユーザーですが、ちょっとマクロは苦手で、
つい、本体のオプション設定で何とかならないかと考えてしまいます。

[ ]
RE:16463 リンク表示が途中で切れないようNo.16466
たタヌキ さん 04/01/31 00:19
 
>すみません。
>鶴亀メールの編集メニューで、「現在行の折り返し禁止」という項目は、
>どこにあるのでしょうか。

わかりました。受信メールを新規メールウィンドウにコピーして編集するということ
ですね。

[ ]
RE:16466 リンク表示が途中で切れないようNo.16467
CXYZ さん 04/01/31 00:46
 
たタヌキさん今晩は、1ユーザのCXYZです。
> わかりました。受信メールを新規メールウィンドウにコピーして編集するということ
> ですね。
 設定によってはそれでも結果が同じになるとは思いますが、とりあえずこちら
の環境では(鶴亀3.17、WinXP)編集メニュー内に「現在行の自動折り返し禁
止(Z)」というコマンドがあります。もう一度編集メニュー内をご確認くださ
い。あるいは「Alt+e、続けてz」キーでも同様の操作が可能なはずです。
よろしければお試しください。

[ ]
RE:16464 リンク表示が途中で切れないようNo.16475
Iranoan さん 04/01/31 09:25
 
 たタヌキさん今日は、Iranoan です。
> 鶴亀メールの編集メニューで、「現在行の折り返し禁止」という項目は、
> どこにあるのでしょうか。
 エディタ・ウィンドウの「編集」にあります。

> 秀丸、鶴亀メールのユーザーですが、ちょっとマクロは苦手で、
> つい、本体のオプション設定で何とかならないかと考えてしまいます。
 使うのは兎も角、書くことは慣れるまでなかなか出来無いと思います。自分
で書けなければ、こちらや http://www.maruo.co.jp/turukame/2/ 等で要望を
して、外の方に書いてもらうのも一つの手です(^^)。

[ ]
RE:16467 リンク表示が途中で切れないようNo.16482
秀まるお2 さん 04/01/31 22:34
 
 話が混乱してるのでなんですが、もしかして、相手が送ってきたメール中の
URLが途中で改行されてるって話なら、それはそれで、「編集・現在行の折り返
し禁止」は意味が無いです。これはつまり、自分が相手に送るメールにURLを入
れる時に、そのURLが折り返し表示されないようにするコマンドです。

 相手から送られてきたメール中のURLに改行が入っている場合は、一般的な対
処方法としては、

 1.メールをエディタで開く。
 2.「設定・編集を許可する」を実行する。
 3.URLの所の余計な改行を削除する。
 4.「ファイル・保存」を実行する。

 という形で整形しなおす形になろうかと思います。

[ ]