Weblog(2003/07)

2003-07-16(Wed)

Bug 395 [Win9x] 太字/ボールド/boldの幅計算が実際より小さくなっている - 太字の文字列を選択したときに右に揺れ動く - 太字の文字列が右端で綺麗に折り返さない

Bug-org 212723が開かれていよいよ動き始めている。

AOL、Netscape従業員の10%をレイオフ

気になるニュース。 特に最後の段落が。

Mozilla Foundation設立に関する他の情報。

2003-07-17(Thu)

Bug 395 [Win9x] 太字/ボールド/boldの幅計算が実際より小さくなっている - 太字の文字列を選択したときに右に揺れ動く - 太字の文字列が右端で綺麗に折り返さない - boldで、letter-spacingが0以外の要素のテキストがその次の内容と重なる - 等幅ボールド文字が欠ける

WindowsSDK的には別問題であるBug 3214Bug 3223の二つをBug 395の重複とした。 これらの問題もBug 395のパッチに含まれているのがその理由。

Mozilla Foundation

2003-07-20(Sun)

関数へのポインタ

この例のような場合に、 func2 でも func3 でも value is LOCAL を表示して欲しいところが、 それぞれの関数が参照する value はその関数が定義されたときのスコープのものになっているから、 func1 と違う結果になる、と。

Javascriptは詳しくないんで外しているかもしれませんが、 これって関数へのポインタなのではないでしょうか? 元々のソースっぽいものをDelphi(Object Pascal)で記述してみると次のようになると思います。

宣言部分

type
    TNoParamFunc = function(): Integer of object;
    
    TClass1 = class
    private
        FFunction1Handler: TNoParamProc;
        FFunction2Handler: TNoParamProc;
        
        function func1: Integer;
    public
        constructor Create; override;
    end;
    
    TClass2 = class
    public
        function func2: Integer;
    end;
var
    class1: TClass1;
    class2: TClass2;

constructorの実装部分

constructor TClass1.Create;
begin
    inherited;
    
    FFunction1Handler := func1;
    FFunction2Handler := class2.func2;
end;

これでTClass1内でFFunction2Handlerをコールすれば、 class2のfunc2をコールしたことになります。

要はクラス外にある関数の位置を記憶しているだけで、 そのクラス内に外部の関数を取り込んだ訳ではないので変数のスコープに誤解が生じているのではないかと。

関数へのポインタ2

例のソースがC++のようなメジャーな言語じゃなくて申し訳ないですね(^-^;

もうちょっとだけ補足しておくとTClass1内でFFunction1Handler();と記述すると、 func1();と記述したのと同じことになります。 つまり、FFunction1Handlerの実行時には呼び出しもとと同じスコープを持ち、 同じメンバ変数を参照できることになります。

それに対してFFunction2Handler();と記述すると、 class2.func2();と記述したのと同じことになります。 つまり、呼び出しもとがTClass1内であっても、 FFunction2Handlerの実行時に呼び出されるのは全く異なるスコープを持つclass2のfunc2関数なわけです。

関数へのポインタは、それにセットする関数のエイリアス(別名)みたいなものだと言った方がわかりやすいのかもしれません。 決して関数そのもののコピーを作っているわけではありません。 実際にはイベントハンドラやコールバック関数として使えるのでもっと便利なものです。

2003-07-23(Wed)

Bug-org 56401 Extending text selection to the left after double-clicking loses selection

ダブルクリックで文字列を選択して、 そのまま(二回目のクリックでマウスのボタンを押したまま)左に選択範囲を広げようとすると選択範囲の左端からカーソル位置が選択範囲となっていたというバグ。

2003072204-trunkでこのバグが修正され、ダブルクリック時の右端からカーソル位置が選択範囲になるようになっている。

個人的にはどうでもいい問題だが、こういう修正は便利に感じる人は便利なのではないだろうか。

関数へのポインタ3

その関数が定義されたときのスコープのものになっているから、

この部分から勘違いがあるんじゃないかと心配になって書いただけなんで、 コピーではなく、参照だと分かっているのであればそれでいいです。

ちなみに私は関数へのポインタという概念の意味が全く理解不能でした。 メモリにあるもの、イコール、データという固定概念があったためでしょうか。 C言語 ポインタ完全制覇を読んで感覚がつかめましたけど。

Bug 1083 a要素のposition動作で中に含むimg要素のheightが変わってしまう。

:hoverで画像を相対配置で移動させると、その画像がline-heightの高さ分しか表示されなかった問題。

本当にようやくという感じが強いバグだが、 こういった古い(目立つ)バグの修正が相次いでいるというのは非常に良い状況だ。

Masayuki Nakano(問い合わせ先)