Current Path : /usr/local/share/namazu/etc/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/local/share/namazu/etc/HACKING-ja |
CVSへのアクセス Anonymous CVS で最新のソースコードを誰でも入手できます。 方法は次の通りです。 % cvs -d :pserver:anonymous@cvs.namazu.org:/storage/cvsroot co -P namazu また、2001-06-25から安定版 (2.0.x) と開発版 (2.1.x) に分岐 しました。安定版のソースを入手したい場合には % cvs -d :pserver:anonymous@cvs.namazu.org:/storage/cvsroot co -r stable-2-0 namazu としてください。 ============================================================== GNU Build Tools CVS から入手した Namazu を make するには、あらかじめ以下の パッケージがインストールされている必要があります。 - GNU m4 1.4 - GNU autoconf 2.50 (もしくはそれ以上) - GNU automake 1.6 (もしくはそれ以上) - GNU libtool 1.4 (もしくはそれ以上) - GNU gettext 0.13 (もしくはそれ以上) いずれも GNU のミラー(e.g. ftp://ftp.ring.gr.jp/pub/GNU) から手に入れることができます。 CVS からソースを取得したら、まずautogen.sh スクリプトを実行 してください。 =============================================================== メッセージカタログ翻訳の手順 1. 各poファイルの未翻訳部分を翻訳する 2. ja_JP.SJIS.po に関しては、ja.po の翻訳後に make_sjis_po を 必ず実行する。これで ja.po における変更が ja_JP.SJIS.po にも 反映される。 3. po 以下で、make update-po を実行することによって、全 po を namazu.pot に同期させることができる。 基本的にはこれの繰り返しです。:) なお、GNU gettext 0.10.37 以降では Big5 や Shift_JIS な文字列を '\' でエスケープする必要はなくなりましたが、'\' でエスケープ された文字列を含むカタログを処理するためには、環境変数 OLD_PO_FILE_INPUT および OLD_PO_FILE_OUTPUT を設定する必要が あります。具体的には % env OLD_PO_FILE_INPUT=yes OLD_PO_FILE_OUTPUT=yes make update-po などとしてください。 ただし、Namazu 2.0.18 以降は、'\' でエスケープしないようにし ましたので、環境変数を定義せずに make update-po を実行してく ださい。 % make update-po ================================================================ Namazu のコーディング規則 - Perl編 mknmz固有の事情 * ハッシュのキーを文字列で指定するときは必ず '' で括る。例: × $NMZ{log} ○ $NMZ{'log'} => log という関数があるため perl 5.004 では warning が出る * debugメッセージを出力するときは必ず util::dprint() を使う * verboseメッセージを出力するときは必ず util::vprint() を使う * エラーなどの理由で die するときは必ず util::cdie() を使う * ファイルを開くときには必ず util::efopen() (エラーの時に util::cdie() する)または util::fopen() を使う * ファイルを閉じるときには必ず util::fclose() を使う * while (<>) {} や while (<$fh>) {} を禁止する。$_ はグロー バル変数であるため、危険。代わりに while (defined(my $line = <$fh>)) {} とする。 * 一時ファイルを作るときは必ず my $tmpfile = util::tmpnam("NMZ.foobar"); として一時ファイルの名前を取得する。 * ファイルの中身をまるごと読み込むときは util::readfile() を使う。 join '' <$fh> より速いはず。 * ファイルを rename するときは必ず util::Rename() を使う。 OS/2 対策。 * プログラム全体に影響をおよぼすグローバル変数は lib/var.pl.in に定義する。 * mknmz 内だけに影響をおよぼすグローバル変数は src/mknmz.pl.in に定義する。 $SYSTEM のみ例外。 * ユーザが mknmz.conf, ~/.mknmzrc にて変更したいであろう変 数は lib/conf.pl.in に定義する。 書法 * 必ず -w オプションを用いる #! /usr/bin/perl -w * 必ず use strict する * local() は使わない * 変数は使う位置で宣言する - C言語のようにブロックの最初で宣言する必要はない * 変数の宣言時にはできる限り初期化を行う * for は for my $tmp (@foo) { ... } のように用いる - my $tmp の部分が要 ($tmpのスコープをループ内に限定する) * 戻り値は陽に return する - サブルーチン最後の式が return される、というルールに頼らない * built-in関数呼び出しの際は省略できる丸括弧はできるだけ省く - ○ substr $str, $offset, $len; × substr($str, $offset, $len) * 正規表現では $&, $', $` を使わない - プログラム全体が遅くなるため * サブルーチンの呼び出しは foobar() とする - &foobar は不可 ("&" は不要) * サブルーチンの定義ではプロトタイプ宣言を行う - sub foobar($$$) { ... } のように * $_ はできる限り使わない - $_ はグローバル変数なので危険 * open() は使わない。 use IO::File を用いて my $fh = new IO::File; $fh->open() とする * ファイルは destructor にまかせず、陽に閉じる - util::fclose() を用いる (2.0.13 以降改定) * リファレンスは大いに活用する * 既存の perl module を活用する - 車輪の再発明をしない * $| といった特殊変数はできるだけ用いない - $| は STDOUT->autoflush(1) で代用できる * グローバル変数はできるだけ使わない * コードはできる限りモジュール化する - APIを定めて拡張を容易にする * 必要に応じて Object Oriented Programming を取り入れる - すべてを OOP で書くことはない * 長い正規表現には適宜 /x モディファイアを適用する * 変数を使った正規表現には安全なら /o モディファイアを適用 する * コメントは英語で書く 名前規則 * テンポラリな変数は型を問わず tmp という名前にする * for 文のカウンタには $i, $j, $k を用いる - 3段より深くしないように気をつける * サブルーチン名は動詞 (+目的語)、変数名は名詞 - e.g. update_registry() * 語の連結にはアンダースコア ('_') を用いる - e.g. get_os_name(), $os_name * 局所変数の名前は小文字 * グローバル変数の名前は capitalize し、アンダースコアを省 略する (要検討) - $IndexType * 配列、ハッシュの変数名は複数形にする (要検討) - @files * 変数名の極端な省略はしない - $on (OS name) などは不可 * が、必要に応じて省略する (要検討) * 省略のルールは明確化する - file handle -> fh - pointer -> ptr - index -> idx - current -> cur - protocol -> proto - length -> len - string -> str - argument -> arg - source -> src - destination -> dest - control -> ctrl - module -> mod - language -> lang - initialize -> init - variable -> var - 他にもあれば追加する * package が異なれば同じサブルーチン名を用いて良い インデント * インデントは 4文字単位 $foo = 1 + 2 + 3; $bar = ((1 + 2) + 3) * 4; if ($foo == $bar) { print foobar($foo, $bar), "\n"; } else { die "error"; } sub foobar ($$) { my ($foo, $bar) = @_; return $foo + $bar; } Perl関連リンク * CPAN <ftp://ring.asahi-net.or.jp/archives/lang/perl/CPAN/> * Perl Style <ftp://ftp.dti.ad.jp/pub/lang/CPAN/doc/FMTEYEWTK/style/slide-index.html> * perl5.005_02のドキュメント <http://www.kt.rim.or.jp/%7ekbk/perl5.005/index.html> * perl5.004_04のドキュメント <http://www.kt.rim.or.jp/%7ekbk/perl5.doc/index.html> * Perl information memo <http://www.st.rim.or.jp/~cond/perlinfo/index.html> * /pub/IIJ/dist/utashiro/perl directory <ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl> * /pub/lang/CPAN/authors/Hirofumi_Watanabe directory <ftp://ftp.dti.ad.jp/pub/lang/CPAN/authors/Hirofumi_Watanabe> * FMTEYEWTK <ftp://ftp.dti.ad.jp/pub/lang/CPAN/doc/FMTEYEWTK/index.html> * Yahoo! - Computers and Internet:Programming Languages:Perl <http://www.yahoo.co.jp/Computers_and_Internet/Programming_Languages/Perl/> * JPerl for Win32 <http://www.yk.rim.or.jp/~hizumi/perl/index.html> * Index of /archives/lang/perl/CPAN/modules/by-authors/Gurusamy_Sarathy <http://ring.nacsis.ac.jp/archives/lang/perl/CPAN/modules/by-authors/Gurusamy_Sarathy/> * Learning Perl/Tk <http://tanaka-www.cs.titech.ac.jp/~ueki/PerlTk/index.html> * ActiveState Tool Corp. - Professional tools for Perl developers <http://www.activestate.com/> * Index of /archives/lang/perl/CPAN/modules/by-module/Tk <http://ring.nacsis.ac.jp/archives/lang/perl/CPAN/modules/by-module/Tk/> * What's wrong with Perl <http://www.stud.ifi.uio.no/~larsga/download/artikler/perl.html>