/ 最近 .rdf 追記 編集 設定 本棚

脳log[20090526] >大人には聞こえない音/聴力検査FLASH (Mosquito Sound) | サクラのレンタルサーバーで OSのバージョンアップがあって、エラー。 | 正規表現キーワードの色分けがおかしい。



2009年05月26日 (火) レンタルサーバーに /usr/local/bin/ruby18 というリンクがある。/usr/local/bin/rubyが 1.9になるのはいつになるだろう。

最終更新: 2009-09-02T23:17+0900

>大人には聞こえない音/聴力検査FLASH (Mosquito Sound)

可聴域の変化を知るために書いておこう。15kHzまで聞こえた。16kHz、17kHzは見事にきれいさっぱり聞こえない。小さい頃は聞こえたのかなあ。スピーカーが出力していないという可能性は……ないない。あきらめなさい。

最終更新: 2009-09-02T23:17+0900

[Ruby] サクラのレンタルサーバーで OSのバージョンアップがあって、エラー。

/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

[SakuraEditor] 正規表現キーワードの色分けがおかしい。

  • クォーテーション文字列の色分けを正規表現キーワードで行っている。
  • 正規表現キーワードの色指定を「ダブル(シングル)クォーテーション」にしている。
  • 組み込みの色分けを無効にするために、クォーテーション文字列の色指定のチェックを外している。

おかしい。チェックが外れていると正規表現キーワードによる色分けも無効になる。

まずはこちら

242 //色指定でチェックが入ってなければ検索しなくてもよい
……
249 //正規表現では色指定のチェックを見る。
……
255 //正規表現以外では、色指定チェックは見ない。
256 //例えば、半角数値は正規表現を使い、基本機能を使わないという指定もあり得るため

このコメントを読めばまさしく現在の状況が考慮されていることがわかる。

  1. 正規表現キーワードに正規表現キーワード1などという色指定がされている場合、チェックがついていなければ色分けをするためにマッチを検索する必要がない。
  2. 正規表現キーワードに半角数値などの色指定がなされている場合、チェックの有無は基本機能による色分けの使用・不使用を表すのみで、正規表現キーワードの有効無効には影響を与えない。

仕様がねじれている気もするが、正規表現キーワードに「正規表現キーワード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 で直りました。