Archive for 2009 年 4月

[WordPress]WordPressとSyntaxHighlighter 2.0とAS用定義

ブログのSyntaxHighlighterとWordPressのアップデートをさぼってたので、やってみたらつまずいたさ。
SyntaxHighlighter( ? → 2.0 )
WordPress( 2.7 → 2.7.1 )

 

まずは、SyntaxHighlighterのアップデートから。

ActionScript 3.0のシンタックスを入れてあるので、念のため「shBrushAS3.js」と「syntaxhighlighter.php」をバックアップしといて、プラグインの自動アップデート。

結果、SyntaxHighlighterが2.0となって、プラグインの名前が「SyntaxHighlighter Evolved」に変わった?

Viper007Bond.com » My WordPress Plugins » SyntaxHighlighter Evolved
http://www.viper007bond.com/wordpress-plugins/syntaxhighlighter/

 

で、syntaxhighlighter.phpにActionScriptの設定を書き加えようとしたら、中身が全然変わってる。

他の言語を参考にAS用の設定を書き加えてみたけど、なんか[code language="actionscript"]〜[/code]としてるところで、actionscriptって定義がないよってJavaScriptのアラートがでるようになってしまった。

原因は古いままのAS用のシンタックス定義「shBrushAS3.js」では駄目。で、SyntaxHighlighter 2.0用にアップデートされた「shBrushAS3.js」をダウンロードして入れ直し。

AS3 Syntax Highlighting (with SyntaxHighlighter 2.0)
http://yourpalmark.com/2009/02/17/as3-syntax-highlighting-with-syntaxhighlighter-20/

 

ということで、syntaxhighlighter.phpはこんな感じ。

syntaxhighlighter.phpの60行目あたりに付け足し。「shBrushAS3.js」の適用。

wp_register_script( 'syntaxhighlighter-brush-xml',        plugins_url('/syntaxhighlighter/syntaxhighlighter/scripts/shBrushXml.js'),        array('syntaxhighlighter-core'), $this->agshver );

wp_register_script( 'syntaxhighlighter-brush-xml',        plugins_url('/syntaxhighlighter/syntaxhighlighter/scripts/shBrushXml.js'),        array('syntaxhighlighter-core'), $this->agshver );
wp_register_script( 'syntaxhighlighter-brush-as3',        plugins_url('/syntaxhighlighter/syntaxhighlighter/scripts/shBrushAS3.js'),        array('syntaxhighlighter-core'), $this->agshver );

 

syntaxhighlighter.phpの120行目あたりに付け足し。[code language="actionscript"]なところ。

'html' => 'xml',
'xhtml' => 'xml',

'html' => 'xml',
'xhtml' => 'xml',
'actionscript' => 'as3',
'as' => 'as3',

 

これでAS用を適用した部分はちゃんと表示されるようになったんだけど、[code language="actionscript"]を使ってる過去記事の編集画面で「htmlspecialchars_decode()なんたらかんたら」の警告がでて、まったくテキストの編集が全くできなくなってしまった。

 

じゃあ、WordPressをアップデートしたら直るんかなと2.7.1にしてみた。

そしたら、「htmlspecialchars_decode()なんたらかんたら」の警告は相変わらずでるけど、テキスト編集部分は表示されるようになって、まぁ良いかと思ったけど、調べてみたらmodoki.orgさんとこで解決法を発見。

[WordPress]htmlspecialchars_decode()エラーで投稿できない | modoki.org
http://modoki.org/blog/archives/42

 

WordPressのバグらしく「wp-includes/compat.php」の104行目を

if ( !is_scalar( $string ) ) {

 if ( !is_scalar( $str ) ) {

に書き直せってさ。

 

そしたら、「htmlspecialchars_decode()なんたらかんたら」でなくなったー!。
万事解決。すっきり満足。

 

Related posts

[Silverlight]Silverlight 3 betaだとローカルでうんたら

「Silverlight 3 betaだとブラウザで表示しているSilverlightのコンテンツをローカル(OutOfBrowser)でも使えるよ」の仕組みを適当に調べてみた。

 

もろもろの環境作って、以下のSilverlightのサイトにある「#11: Out-of-browser Experiences」ソースをダウンロードし、 サンプルを ビルドして試した。

Videos : The Official Microsoft Silverlight Site
http://silverlight.net/learn/videocat.aspx?cat=12#sl3

 

実行してみると、「MyTasks」というSilverlightコンテンツがlocalhostで立ち上がって、Silverlight上で右クリックしたらこんな感じ。「Install MyTasks onto this computer…」を選んでみた。

outofbowse01

次に、ダイアログがでてきて、「OK」するとローカルにアプリとして展開、自動でローカルアプリになったSilverlightのコンテンツが普通のEXEウィンドウで立ち上がった。
outofbowse02

 

んで、ウィンドウのタイトルバーに「MyTasks」ってあって、右クリックしてみると、今度は「Remove this application…」のメニューになってる。
outofbowse03_0

 

ブラウザのSilverlightもまだ生きてて、こっちも「Remove this application…」になってた。かしこい。
outofbowse04

 

どこにローカルに関連するファイルとかあるんかなーと見てみたら
Windows XPで「C:\Documents and Settings\[ユーザー]\Local Settings\Application Data\Microsoft」に「Silverlight」てのができてて、そん中に「Offline」ってフォルダがあった。(たぶんVistaだとRomingの中とか)

そのなかの「localhost.0」ってのが今回できたローカル用ファイルみたい。(localhost実行だからこんな名前なのかな?)
outofbowse05_0

Windows XP
C:\Documents and Settings\[ユーザー]\Local Settings\Application Data\Microsoft\Silverlight\Offline\localhost.0

 

.xapとかある。なんかhtmlもあるんです。

htmlのobject タグのsourceが「value=”offline://localhost.0″」となってて、さっきの「localhost.0」を指してるっぽい。

<html xmlns="http://www.w3.org/1999/xhtml" >
  <!-- saved from url=(0014)about:internet -->
<head>
  <style type='text/css'>
    html, body { height: 100%; overflow: auto; }
    body { padding: 0; margin: 0; }
    #silverlightControlHost { height: 100%; }
  </style>
</head>
<body scroll=no>
    <div id="silverlightControlHost">
      <object data="data:application/x-silverlight," type="application/x-silverlight" width="100%" height="100%">
          <param name="source" value="offline://localhost.0"/>
          <param name="background" value="white" />

          <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
              <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
          </a>
      </object>
      <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>
    </div>
</body>
</html>

 

で次。
outofbowse06

デスクトップのショートカットのプロパティを見たら
「”C:\Program Files\Microsoft Silverlight\3.0.40307.0\sllauncher.exe” localhost.0」だってさ。「sllauncher.exe」ってので動かしてるっぽい。
ここでもさっきの「localhost.0」がでてきた。

 

ふーん、だいたい分かったから、いたずらする。

そのSilverlightの内容が表示されてるローカルのEXEウィンドウにURLショートカットをD&Dします。

 

結果コレ。
outofbowse07_0
タイトルバーは「MyTasks」のまま。

 

ローカル?でSilverlightを動かす「sllauncher.exe」ってやつは、ウィンドウ全体にIEコンポーネント(WebBrowserコンポーネント的なやつ?)を敷いてるのただのEXEってことですか?

結局IEだったとしたら、そりゃIEにFlash Playerが入っていれば、SWFがあるサイトだって動くよね。GoogleのURLショートカットからGmailへのログインだってOKだったよ。普通にWebのネットワークと繋がって、UIが全然ないIEってことだからそうなるよね。

 

んー、Out of Browserと、確かにWeb上のブラウザ外ではあると思います。

しかしながら、IEのセキュリティ設定をそのまま持ってるってことなの?

でも、なんつーかウェブ上でしてることと同じことではないの?。まだbetaだからってこと?。もっと劇的なローカルだからできることとか用意されてんのか?

Web上からだってローカルのストレージ(IsolatedStorage)は使えるんだし、よくわかんね。

 

Webから右クリックで・・・というのは良いアイディアだと思うのだけど、なんか拍子抜け。

なんというか、もっと直接.xapファイルをローカルEXEとして起動するみたいな仕組みに成ってるのかと思ってたけど、本当にこの適当に確認した仕組みのとおりだったら見せかけだけのギミックみたいでなんかつまんない。

あーでも、Macではどうやるんだろう?とかあるけど、このへんでおしまい。

 

ちなみにローカルデータの使用はC#のソースで以下になってた。

if (NetworkInterface.GetIsNetworkAvailable())
{
 // save online using web service
}
{
// use IsolatedStorage because we're offline
}

ってネットワーク上かどうかのフラグ判定して、Webかローカルのストレージ(IsolatedStorage)のどっちを使うか振り分ける感じだね。

なんだか、いろいろまだ不明点は残るけど、いちばんの収穫はif文でelseって省略できるのかな?って発見したこと。
知らなかったな、そんな書き方しないけど一度試してみよ。

 

Related posts