wwwlngで空白を表示できるようにするには

[上に] [前に] [次に]
ららら [HomePage] 2000/04/04(火) 14:06:42
らららです。

wwwlngで、空白、タブ等を入れて
質問しても表示ではなくなってしまいます。
改造でかまわないのですが、空白を表示
できるようにするにはどうすればよいでしょう。
ソースの表示などが字下げが
ないとわかりにくくなってしまうもので。
↓の
http://www6.freeweb.ne.jp/computer/t-soga/cgi-bin/wwwlng.cgi
VCの掲示板でwwwlngは使用させて頂いています。

H&A 2000/04/04(火) 15:14:23
簡単には、トピック内容の表示部分 (904〜913 行目) あたりを

        } elsif (/^========================================[\r\n]*$/) {
            $hflag = 1;
            print "</PRE>\n";
        } elsif ($hflag && ($_ eq "")) {
            $hflag = 0;
            print "<PRE>";
        } else {
            s/(http:\/\/[a-zA-Z0-9\.\/\-+#_?~&%=^\@:;]+)/<A HREF="$1">$1<\/A>/g;
            s/^((&gt;|>).*$)/<FONT COLOR="#CC8000">$1<\/FONT>/;
            print "$_\n";
        }
    }
    print "</PRE>\n";

と <PRE></PRE> で囲むようにすれば空白文字等は入力どおりに表示されます。
…が、長い文章を wrap してくれなくなりますので使い勝手は落ちてしまうかもしれませんね。

一番いいのはプログラムコードなどの部分を自動認識して <PRE> などを挿入することですが…難しそうですねぇ。

H&A 2000/04/04(火) 15:35:35
上記改造では、[戻る] [最下行にジャンプ] の後に意図しない </PRE> が入ってしまいますね。
現状の多くの環境ではエラーリカバリ機能によりこの </PRE> は無視されるのですが、削除したほうがいいかもしれません。

…ところで、現在の wwwlng.cgi (このラウンジで使用しているもの) って半角空白が &nbsp; に置き換わっていますね。
とほほさんがリアルタイムに改良しておられるのでしょうか…?

ららら [HomePage] 2000/04/04(火) 15:56:38
H&Aさん、ありがとうございます。
さっそく家に帰ってテストしてみます
といいたいところですが
長い文章をwrapしないというのは
どういうことでしょうか。
やらないほうがいいということなのでしょうか。
詳細を教えて頂けますでしょうか。

H&A 2000/04/04(火) 16:08:02
> 長い文章をwrapしないというのは
> どういうことでしょうか。

改行を含まない長い文章が入力されたときに、横スクロールバーが出てしまう…ということです。
「通常の文章は XX 文字程度で改行してください」という注釈をつけるのもアリといえばアリですが、利用者に負担を強いるようなものはあまり好ましくありませんよねぇ。

…と、ここまで書いて別の改造法を思いつきました。
発言中に <PRE> があったらそのまま <PRE> を有効にするというのもアリですね。
そうすれば、

以下はソースコードです。
<PRE>
if (indent.isAvailable())
  myself.status = HAPPY;
</PRE>

…などという風に発言してもらえればソースコード部のみ空白やタブが入力どおりに展開されます。
これでも利用者に手間がかかりますが、妥協案ということで。

ららら [HomePage] 2000/04/04(火) 16:25:53
H&Aさん、度々ありがとうございます。
>改行を含まない長い文章が入力されたときに、横スクロールバーが出てしまう
ということですね。
うちのwwwlngは少し書き込みスペースの横幅を
大きくとってあるのでおそらく、最初に教えて頂いた
ほうで、十分実用的と思われます。
さっそく家に帰ってテストしてみます。

echo 2000/04/05(水) 03:21:30
>うちのwwwlngは少し書き込みスペースの横幅を大きくとってあるのでおそらく、最初に教えて頂いたほうで、十分実用的と思われます。

そんな物は関係無いのでは?
いろんな解像度の人がいるわけだし。

ららら 2000/04/05(水) 09:37:06
echoさん、助言ありがとうございます。
でも解像度が高くても低くても、この書き込むスペースの横幅は
大きくなりますよね。
だから長い文章を入力したときに、書き込む人が
自分で読みにくくて、改行を入れてくれるかな
と思ったのです。

また、H&Aさんに教えていただいた<PRE>ですが、
試してみたのですがスペース、タブは表示される
ようになったのですが行間が空いて妙に縦長に
なってしまいました。
<BR>が入っているからと思われます。
これをなくす方法はありますでしょうか。

H&A 2000/04/05(水) 10:08:06
> <BR>が入っているからと思われます。
> これをなくす方法はありますでしょうか。

<BR> が…というのは、本文中に入っているということでしょうか?
むむ、それは変ですねぇ。911 行目で

>            print "$_\n";

と、<BR> を削除したはずですが…
調べてみます。

ららら 2000/04/05(水) 11:03:26
もうしわけありません。
こちらで、<BR>を削除する処理を見落としていました。
テストしてご報告致します。

ららら 2000/04/05(水) 12:51:13
[[解決]]
H&Aさんに教えていただいたとおりで
できました。
ありがとうございました。
解決しました。
しかし、タブが、4タブではなく、8タブ(8文字分)に
表示されるのは直せますでしょうか。

H&A 2000/04/05(水) 13:01:09
> しかし、タブが、4タブではなく、8タブ(8文字分)に
> 表示されるのは直せますでしょうか。

<PRE> 中のタブスペース量を変更するのは、難しいかもしれません(スタイルシートを使えばできるかも?)。
タブを指定数の半角空白に変更するのであれば、本文出力部を

            s/\t/        /g;
            print "$_\n";

とするだけですね。

ららら 2000/04/05(水) 22:29:36
無事、タブも上記方法で変換できました。
わたしが、4タブ派なので、4タブ変換にしました。
(管理者権限(^-^))
直接な解決にはなっていませんが
自己満足できました。
H&Aさん、ありがとうございました。
Perlを自由に扱えてうらやましいです。

[上に] [前に] [次に]