No Such Blog or Diary
そういや Same Origin Policy とかってあったけなぁ
結局 javascript 単体で他のホストの Web Servide を REST アクセスで利用するのも無理と.ブラウザ側の設定かえてすべてアクセス許可とかやればいいけどそんな作業をやらせたくない.しゃーないからメインのページを php で書いて通信をリダイレクトさせるか… だいぶ面倒になってきた.
- Comments: 0
- TrackBack (Close): -
Emacs Lisp をいじるの覚書 - プロパティというか face というか
- 2007-03-17 (Sat)
- ソフトウェア ( Meadow/Emacs )
テキストのプロパティは get-text-property で手に入る.face もプロパティなので (get-text-property (point) 'face) でカーソル位置の face がわかる.カーソル位置の face が適当な face だったら処理をするとかを次のように書ける.
(if (let ((prop (get-text-property (point) 'face))) (or (eq 'line-number-face prop) (eq 'over-under-full-face prop))) (しょり~))
これの場合 'line-number-face か 'over-under-full-face だったらなにかすると.
face の指定時に mouse-face を付けてあげるとマウスに反応して face を変えられる.font-lock-defaults に渡す font-lock-keywords のなかで,
(cons "\\(.*full ..box.*\\)\\(line.*\\)" '((1 over-under-full-face) (2 line-number-face)))
とか書くところを
(cons "\\(.*full ..box.*\\)\\(line.*\\)" '((1 (progn (set-text-properties (match-beginning 1) (match-end 1) '(mouse-face highlight)) 'over-under-full-face)) (2 (progn (set-text-properties (match-beginning 2) (match-end 2) '(mouse-face highlight)) 'line-number-face))))
のようにプロパティを設定する関数 set-text-properties を呼ぶようにする.よくわからんが 1 とか 2 とかの数字はマッチした subexpression の番号らしい.あとは,マウスが押されたときに関数を呼ぶように mode の設定のとこで
(local-set-key [mouse-1] 'hogehoge-suru-function)
とか設定しとけばいいみたい.
- Comments: 0
- TrackBack (Close): -
PEAR & Text_Highlighterをインストール
- 2007-03-16 (Fri)
- ソフトウェア ( Linux/coLinux )
http://faq.sakura.ne.jp/wiki/wiki.cgi?cgi%a4%c8php#i16 を参考にしつつ PEAR のローカルコピーを作る.最大の難点は download_dir の設定が抜けていたためダウンロードできずに嵌ったことだった.つーわけで,ここらを考慮しつつ以下のようなコマンド列を発行してどうにか成功.
pear config-create /home/user/pear .pearrc pear install -o PEAR pear config-set download_dir $HOME/pear/temp pear install -o channel://pear.php.net/Text_Highlighter-0.6.9
ついでに,php.ini にパスを通す記述をしておく.
include_path=".:/home/user/pear/pear/php"
ちょっとディレクトリ名があれかもしれない…
なにはともあれ,これで C++ や Java も使えるようになった.あとは elisp とか sed とかのための設定を作ればよいのかな.
- Comments: 0
- TrackBack (Close): -
NP_SyntaxHighlighter を試す
http://wakka.xiffy.nl/syntaxhighlighter より入手.
PEAR の Text_Highlighter を使っているらしい.とりあえず pre タグでソースを書いてしまうので div でなく pre にクラスを書いて動くように修正.このプラグイン無しでも普通に表示できるようにHTMLエスケープされた文字列を食うように変更.ついでに,<?php と ?> で囲まれてない php もハイライトするうにあほな修正を入れてみた.
function parseString(&$content) { $chk = ' class="highlight'; if (strpos($content['body'],$chk) > 0 || strpos($content['more'],$chk) > 0) { if ($this->_setupPEAR()) { $supportedRules = $this->getOption('highlight_rules'); $supported_highlighter = explode(',',$supportedRules); if (is_array($supported_highlighter)) { foreach ($supported_highlighter AS $key=>$syntax) { $supported_highlighter[$key] = trim(strtolower($syntax)); } } else { // fallback with default settings $supported_highlighter = $this->supported_highlighter; } $this->counter = 1; $highlight_str = ''; $content_part = array('body','more'); foreach ($content_part as $key) { // now check for all allowed syntax highlighter foreach ($supported_highlighter AS $syntax) { $pattern = "/<pre class=\"highlight_".$syntax."\">(.*?)<\/pre>/esi"; $replacement = "\$this->highlight_code('\\1','".$syntax."')"; $content[$key] = preg_replace($pattern,$replacement,$content[$key]); } } // end content_part } else { doError('Check your settings - can not include PEAR::Text_Highlighter'); } // some cleanup code ini_restore('include_path'); unset($this->hl); } } function highlight_code($string, $mode) { // remove possible br tags from nucleus automatic linebreak convertion $string = preg_replace('/<br \/>[\n|\r| ]/', '', $string); $string = stripslashes($string); $string = str_replace ( array ( '&' , '"', ''' , '<' , '>', ''' ), array ( '&', '"', "'", '<', '>', '?' ), $string ); $normflag=false; $va = strpos($string, "<?"); if(strcmp($mode, 'php')==0 && ($va==FALSE || $va > 5)) { $normflag = true; $string = "<?php ".$string."?>"; } // check is there a cached object if (!isset($this->hl[$mode])) { // create new highlighter object $options = array('tag' => $this->tag_mode,'numbers'=>$this->line_numbers); $this->hl[$mode] = & Text_Highlighter::factory($mode,$options); } // retrieve highlighted string $highlight_str = $this->hl[$mode]->highlight($string); // if higlight_mode == save add a dummy id to exclude from further parsing $checkid = ''; if ($this->rendermode == 'save') { $checkid = 'id="np_hl_'.$this->counter.'" '; } // enclose with div container //$highlight_str = '<div '.$checkid.'class="highlight_'.$mode.'">'.$highlight_str.'</div>'; $highlight_str = $highlight_str; $this->counter++; if($normflag){ $highlight_str = str_replace("<span class=\"hl-inlinetags\">?></span>", "", $highlight_str); $highlight_str = preg_replace("/(<span class=\"hl-inlinetags\">)?<\\?php *\n(<\\/span>)?/", "", $highlight_str); } return $highlight_str; }
追記:
Text_highlighter を新しくしたら <?php の後の空白とかの扱いが変わったらしい.なので最後のほうをちょっと書き換え.
$highlight_str = preg_replace("/(<span class=\"hl-inlinetags\">)?<\\?php *(<\\/span>)?(<.*?>) *\n/", "\\3", $highlight_str);
- Comments: 0
- TrackBack (Close): -
Nucleus の改行をちょっと頭よくする
編集画面での改行位置に自動で改行(<br />)を入れるようにしているのだけど Nucleus は <pre> タグの内部にまで改行を入れてくれる.結果として二重の改行となってしまいひじゃうに見栄えが悪い.
ということで,ソースをいじって <pre> タグの内部に改行入れないようにしてみた.nucleus/libs/globalfunctions.php にある addBreaks というのが編集後の保存時に改行を挿入している関数らしい.
function addBreaks($var) { return nl2br($var); }
php のnl2br という関数を使って一律に改行の挿入を行っているので,これを pre タグの内部と外部で挙動が変わるように変更.
function addBreaks($var) { $i=0; $v2=""; $n=mb_strlen($var); while($i<$n){ $p=mb_strpos($var,"<pre",$i); if($p==FALSE){ $v2.=nl2br(mb_substr($var, $i)); break; } $v2.=nl2br(mb_substr($var, $i,$p-$i)); $i=$p; $p=mb_strpos($var,"</pre>",$i); if($p==FALSE){ $v2.=mb_substr($var, $i); break; } $v2.=mb_substr($var, $i,$p-$i); $i=$p; } return $v2; }
もっときれいに書けるだろうけど必要十分なので汚さはむし.
- Comments: 0
- TrackBack (Close): -
Windowsのコンボボックスのカスタム化
聞かれて調べたのでメモ.
なにやらウィンドウプロシージャを乗っ取るらしい.ただ,コンボボックス内のエディットコントロールは独立したウィンドウプロシージャを持つらしいので,
HWND hwndEdit = GetTopWindow( hwndComboBox );
とかしてエディットコントロールのハンドラを取っとかないとはまる.あとは,GetWindowLong で元のプロシージャを取得して,SetWindowLong で新しいプロシージャを登録して,新しいプロシージャ内で CallWindowProc を使って元のプロシージャを呼べばいいらしい.
参考:
- Comments: 0
- TrackBack (Close): -