Safari 判定は難しい?

Safariの判定に

function isSafari() {return /a/.__proto__=='//'}

を使っていたけど、これだとAndroid1.6のChromeでTRUEを返します。
なので、ユーザエージェントを使わず、スマートにAndroid1.6のChromeを除外できないか探したけど見つからず・・・
とりあえず、navigator.appVersionで判定するロジックを追加

function isSafari() {return /a/.__proto__=='//' && !window.navigator.appVersion.match(/(Chrome|Android)/i) }

どなたかもっとスマートやり方教えてー

※元の判定ロジックのネタ元はこちら

PEAR_PackageProjector1.0.2リリース

ディレクトリーに対してのroleの設定が効いていなかったのを修正しました。
msakamoto-sfサン謝謝

ドキュメント

http://servlet.sakura.ne.jp/PEAR_PackageProjector/doc/

なにか不都合や要望があればココにコメントにお願いします。

PHPでマクロを使えるようにするライブラリ作りました。

名前はStream_Macroです。
C言語のようにマクロ機能が使えるようになります。

 http://openpear.org/package/Stream_Macro

作成理由

元々既存のPHPファイルやテンプレートファイルを雛形にしてソース生成したいと思ったけど、
既存のテンプレートエンジンやジェネレータを以下の問題があって断念しました。

  1. テンプレートファイル雛形をテンプレートエンジンで記述するとわけわかめになる。
  2. PHPで直書いても良いけど今度は、PHPコードが生成前に使うコードか、生成後に使うコードか、わけわかめになる。
  3. Zend Frameworkなどにもコードジェネレートはあって、クラス定義などする場合は、とても便利だけど

 処理部分は結局、文字列で定義しないといけない。

という理由があって、考えた結果、「マクロなら見やすくね?」と思い作りました。

利用方法

実装はストリーム関数を使っています
※ストリーム関数を知らない方は、http://itpro.nikkeibp.co.jp/article/COLUMN/20070117/258941/を参照して下さい。
なので、マクロ機能は、include, require, file_get_contents, fopenで使えるようになります。
ちなみに読込専用です。

マクロ未使用時
include "hoge.php";
マクロ使用時
$opts = array();
$opts['debug'] = true;
Stream_Macro::registByArray('macro', $opts);
include "macro://hoge.php";

サポートする構文

インクルード

#include [ファイル名]

定義

#define 変数名 値
#define マクロ関数 式

条件

#ifdef 変数名
#if 条件式
#else
#endif

ループ

#for 式
#endfor
#foreach 式
#endforeach
#while 式
#endwhile

インストール

sudo pear install openpear/Stream_Macro


のはずなんですけど、2009/08/31の時点でリリース処理を行ってもリリースされない(メールも来ない)状態なので、
すぐ使ってみたい方は、

sudo pear install http://svn.openpear.org/Stream_Macro/trunk/release/Stream_Macro-0.1.0.tgz


を実行して下さい。
*1

リリースできるようになったらまたご連絡します。

*1:2009/08/31 14時頃リリースされました

PEAR_PackageProjector1.0.1リリース、ドキュメント生成に対応しました。

ついこの前0.2.2をリリースしたばかりですが、またリリースです。
今回リリースの売りとしては、ドキュメントが生成できるようなった事です。
ドキュメントのチュートリアルはてな記法で記述できるのでいままで
敬遠しがちなマニュアル整備が楽になると思います。

主な変更点

  • コマンドオプション--project(-p)の初期値が"./"になりました。
  • コマンドオプション--config(-confg)の初期値が"build.conf"になりました。
  • コマンドオプション--updatedoc(-doc)が追加されました。これによりドキュメントが生成できるようになりました。
  • コマンドオプション--install(-i)が追加されました。これによりビルド後、自動的にPEARインストールが走るようになりました。
  • コマンドオプション--clear(-c)が削除されました。
  • コマンドオプション--tmpが削除されました。
  • メソッドPEAR_PackageProjector_Project#updatedoc()が追加されました。
  • メソッドPEAR_PackageProjector_Project#pearinstall()が追加されました。
  • メソッドPEAR_PackageProjector_Project#serialize()が追加されました。
  • メソッドPEAR_PackageProjector_Project#unserialize()が追加されました。
  • クラスPEAR_PackageProjector_MessageHandler_Callbackが追加されました。これにより出力結果を制御しやすくなりました。
  • メソッドPEAR_PackageProjector_Project#configure()にファイルパス以外に連想配列を指定することができるようになりました。これによりconfファイルを生成しなくても連想配列で設定できるようになります。

ドキュメント

http://servlet.sakura.ne.jp/PEAR_PackageProjector/doc/

なにか不都合や要望があればココにコメントにお願いします。

はい、修正しました。

修正点

  • checkcodeが使えなくなっていた問題を解決しました。
  • 自作コマンドが作成できます。

サンプルは↓に書きます。

  • 依存するパッケージにPEAR_PackageFileManager_Plugins追加しました。

以前は、PEAR_PackageFileManager_FileがPEAR_PackageFileManagerと一緒にパッケージングされていた思うんですけど、いつの間(たぶん2009年4月頃)から分離していて、
んでもってPEAR_PackageFileManagerの依存するパッケージにPEAR_PackageFileManager_Pluginsがあるからバージョンアップすればかってに入るはずなんだけど、
自分の環境だとPEAR_PackageFileManager_Pluginsがインストールされなかったので追加しました。

自作コマンドの作り方(概要)

  • 手順
    1. プロジェクト作成
    2. コマンド本体を作成
    3. windowsでも使えるようにバッチファイルを作成
    4. build.confに設定を追加
    5. ビルドする
    6. pear install する
  • サンプルの仕様
    1. コマンド名はhellopearにします。
    2. 引数はなし
    3. コマンドを実行すると「Hello PEAR!!」と表示する
    4. コマンドのスクリプト本体はsrc/scripts直下に作成

自作コマンドの作り方(詳細)

1.プロジェクト作成

pearproj --create -p hellopear

2.コマンド本体を作成
src/scripts/hellopear.shを作成

#!@php_bin@
<?php
echo 'Hello PEAR!!';
?>

3.windowsでも使えるようにバッチファイルを作成
src/scripts/hellopear.batを作成

@echo off
"@php_bin@" -d include_path="@php_dir@" "@bin_dir@\hellopear" %*

4.build.confに設定を追加

[role]
sh = script

[file://scripts/hellopear.sh]
commandscript = hellopear

[file://scripts/hellopear.bat]
commandscript = hellopear.bat

「sh = script」を追加するのは、拡張子「.sh」のファイルをパッケージング対象にする為です。

5.ビルドする
コマンドラインで実行

build

6.pear install する

pear install release/hellopear-0.1.0.tgz

7.自作コマンドを実行する

hellopear

「Hello PEAR!!」と表示されるはずです。