最終更新: 2009-09-02T23:17+0900
可聴域の変化を知るために書いておこう。15kHzまで聞こえた。16kHz、17kHzは見事にきれいさっぱり聞こえない。小さい頃は聞こえたのかなあ。スピーカーが出力していないという可能性は……ないない。あきらめなさい。
最終更新: 2009-09-02T23:17+0900
/usr/local/lib/compat/libpthread.so.2: Undefined symbol "__malloc_lock" (RuntimeError) /usr/local/lib/ruby/1.8/dl/import.rb:29:in `initialize'
Rubyは 1.8.6 p287だから新しくなってないのだけど。OSが今日の早くに FreeBSDの 6.1から 7.1へ。そしてエラー。
DLを使ってるのは sqlite3-rubyだろうなあ。
Undefined symbol "__malloc_lock"で検索したら Tracが動かなくなった人が見つかった。この人は万事解決といかなかったみたいだけど、自分は libsqlite.soをコンパイルし直したらうまくいった。Rubyや DLの問題ではなく sqliteライブラリの依存関係が原因だったよう。再コンパイルは UNIX系OSのバージョンアップにはつきものの作業なんだろうか。
最終更新: 2009-09-02T23:17+0900
おかしい。チェックが外れていると正規表現キーワードによる色分けも無効になる。
まずはこちら
242 //色指定でチェックが入ってなければ検索しなくてもよい …… 249 //正規表現では色指定のチェックを見る。 …… 255 //正規表現以外では、色指定チェックは見ない。 256 //例えば、半角数値は正規表現を使い、基本機能を使わないという指定もあり得るため
このコメントを読めばまさしく現在の状況が考慮されていることがわかる。
仕様がねじれている気もするが、正規表現キーワードに「正規表現キーワード3」という色指定より「ダブルクォーテーション文字列」という色指定をしたいのだよね。基本機能を無効にして正規表現キーワードだけを使いたい場合もあるし(今回のように)、基本機能を使いつつ正規表現キーワードを使って、標準的でない文字列形式(Rubyの %!string! など)を補いたい場合もあり、そのときに複数の色指定を同じに保つより「ダブルクォーテーション文字列」という一つの色指定で色を管理したい、という要求がある。この両方を満たすのが以前の仕様。
待ってても直らないかもしれないので*他人の修正を待てないので調べた。
17 if( TypeDataPtr->m_bUseRegexKeyword 18 && pcView->m_cRegexKeyword->RegexIsKeyword( cStr, nPos, &nMatchLen, &nMatchColor ) 19 ){ 20 this->m_nCOMMENTEND = nPos + nMatchLen; /* �L�[���[�h������̏I�[��Z�b�g���� */ 21 this->m_nCOMMENTMODE = ToColorIndexType_RegularExpression(nMatchColor); 22 return true; 23 } 24 return false;
21行目の ToColorIndexType_RegularExpression(nMatchColor); とは実質的に
(EColorIndexType)(COLORIDX_REGEX_FIRST + nMatchColor);
こういうことだ。nMatchColorとはそのまま色指定なのだから COLORIDX_REGEX_FIRSTという下駄をはかせる必要はなくて
(EColorIndexType)nMatchColor;
これで十分のはずだ。正規表現キーワードだからって正規表現キーワードNという配色とは限らないのだよ。
[訂正] これはわざとだった。どんな色指定をされていても正規表現キーワードを他と識別するために行っている。同じファイル(sakura_core\view\colors\CColorStrategy.h)内に下駄を外す処理もある。
デバッガで nMatchColorの値を見てみたら 29であって、これはシングルクォーテーション文字列に対応した色インデックスだから期待通り。でも色分けはなされない。
なんでだろー。
223 /* 現在の色を指定 */ 224 void CEditView::SetCurrentColor( CGraphics& gr, EColorIndexType eColorIndex ) 225 { 226 //インデックス決定 227 int nColorIdx = ToColorInfoArrIndex(eColorIndex); 228 229 //実際に色を設定 230 if( -1 != nColorIdx ){ 231 const ColorInfo& info = m_pcEditDoc->m_cDocType.GetDocumentAttribute().m_ColorInfoArr[nColorIdx]; 232 if( info.m_bDisp ){ 233 gr.SetForegroundColor(info.m_colTEXT); 234 gr.SetBackgroundColor(info.m_colBACK); 235 gr.SetMyFont( 236 GetFontset().ChooseFontHandle( 237 info.m_bFatFont, 238 info.m_bUnderLine 239 ) 240 ); 241 } 242 } 243 }
232行目。色指定のチェックの有無のチェックを無効にしたらとりあえず色分けはされた。正規表現キーワードが正規表現キーワードN以外の色指定をしている場合、チェックの有無をみてはいけない。ここでのチェックを期待しているコードがある場合、悪影響がある。
* r1576@2009-05-27 21:15 で直りました。