ruby-reference-manual:53
From: Minero Aoki <aamine@l...>
Date: Wed, 13 Sep 2006 03:50:50 +0900 (JST)
Subject: [ruby-reference-manual:53] 作業マニュアル #1 (フォーマット変換)
青木です。
遅くなってすみません。
新リファレンスマニュアルの作業概要を書きます。
作業はファイルフォーマットの変換から始めます。
組み込みライブラリ → 標準添付ライブラリの順番でやりましょう。
変換作業では、ファイルごとに担当を決めて進めます。レポジトリに
refm/api/ASSIGN というファイルが作ってあります。この表の該当
エントリに自分の SVN アカウント名を書いて、コミットした時点で
ファイルの担当が決まったものとします。忙しくて作業ができなくなっ
た場合は、また ASSIGN ファイルを書き換えてコミットしてもらえ
れば結構です。
現在、フォーマット変換が済んでいないファイル (ほぼすべて) には
*.off という拡張子がついてます。変換が終わったら svn mv で
「.off」のない名前に移動することで作業が完了したことを示します。
例えば _builtin/Dir.rd.off の変換が済んだら _builtin/Dir.rd
に移動します。
で、肝心のフォーマットですが、まず実例を見てもらうのがよいと思
います。例として _builtin/String.rd を変換してあるので、これ
を真似しながらやってください。参考のため、マニュアルも最後に
付けておきます。また、レポジトリの refm/api/FORMAT にも同じ
ものが入ってます。
また、ツール (bitclust) の bin/bc-convert.rb を使うと、簡単
な変換はすべて済ませられます。一度これを使って変換したあと、ざっ
と見て残りを手でいじるとよいでしょう。
実行例
% ruby -I./lib bin/bc-convert.rb String.rd.off > tmp
% diff String.rd.off tmp
それ以外に、手で変換が必要になりそうなのは以下のところです。
* 「= class String」などのレベル 1 ヘッダを新しい形式に変える
* 「== Singleton Methods」「== Instance Methods」
などのレベル 2 ヘッダを新しい形式に変える
* 「メソッド一覧」は自動生成するので、すべて消す。
* include と require を新しい文法に沿って書く
* テキストがインデントしてたら全部下げる。
* メソッドのシグネチャは Ruby の def と同じにする。
* ハイパーリンクは文法がまだ決まってないのでいじらなくてよいです。
* ((<ruby 1.x.x feature>)) はプリプロセッサの #@if に変換
* 注釈 ((- ... -)) は消すか、プリプロセッサコメント #@# に変換
一通り変換が済んだら bitclust の bin/bc-list.rb でパースの
テストをしてみてください。
実行例
% ruby -I./lib bin/bc-list.rb String.rd.off
#<BitClust::LibraryDescription:0x00002a96076618
@classes=[#<class String>],
@methods=
[#<smethod String.new>,
#<imethod String#+>,
#<imethod String#*>,
#<imethod String#%>,
#<imethod String#==,>,>,<,<=>,
#<imethod String#<<,concat>,
#<imethod String#=~>,
これでちゃんと全部のエントリが表示されていれば OK です。
String.rd.off を String.rd に svn mv して作業を終えます。
どうせあとでまたちゃんとチェックするので、いまのところはだい
たい通っていればよいことにします。とにかく全部を変換するのが
先決です。
手順のまとめ
1. 変換するファイルを決める (仮に _builtin/Hash とする)。
2. refm/api/ASSIGN の _builtin/Hash の行に
自分のアカウント名を書いてコミットする。
3. bitclust の bin/bc-convert.rb で変換してみる。
4. diff をとったりして変な変換をしていないか確認する。
5. エディタでざっと見て残りを潰す。
変な文章が目についたらついでに直してもよい。
6. bitclust の bin/bc-list.rb にかけてチェックする。
7. 大丈夫そうならコミット。
8. Hash.rd.off を Hash.rd に svn mv して再度コミットする。
わからないことがあったらこの ML で聞いてください。ツールが
バグってる場合や、新しい機能が欲しいときも ML で聞いてください。
あと、コミットメールを早急に用意します。
--
青木峰郎
= リファレンスマニュアル記述フォーマット
ファイルのフォーマットは RD ベースです。
ただし、厳密にパースできるように制限を増やしてあります。
== ファイルの構造
新リファレンスではライブラリごとにファイルを分割します。
各ファイル (== ライブラリの記述) は以下のような構造をしています。
require ライブラリ名
require ライブラリ名
:
:
<ライブラリのドキュメント>
<レベル1ブロック>
<レベル1ブロック>
:
:
ファイル冒頭では、そのライブラリが require しているライブラリ
を「require ライブラリ名」記述します。require はいくつ書いても
構いません。
続いてライブラリ自体のドキュメントを書きます。これは省略可能です。
最後に、以下に述べる「レベル 1 ブロック」を任意の回数記述します。
「レベル 1 ブロック」はクラスやモジュールの記述です。
== レベル 1 ブロック
レベル 1 ブロックはクラスやモジュールを記述します。
レベル 1 ブロックは以下のような構造をしています。
= class クラス名 < スーパークラス名
include モジュール名
include モジュール名
:
:
<クラスのドキュメント>
<レベル2ブロック>
<レベル2ブロック>
:
:
レベル 1 ヘッダ (「=」) には以下の種類があります。
* class クラス
* module モジュール
* object オブジェクト (ほぼ ARGF と ENV 専用)
* reopen 既存クラスへのメソッドの追加
* redefine 既存メソッドの再定義 (jcode, mathn など)
ヘッダの直後には、そのクラスやモジュールが include している
モジュールを「include モジュール名」で記述します。include は
いくつ書いても構いません。
続いてクラス自身のドキュメントを書きます。省略可能です。
最後に「レベル 2 ブロック」を任意の回数だけ書きます。
「レベル 2 ブロック」はメソッドのグループです。
== レベル 2 ブロック
レベル 2 ブロックは特定の種類のメソッドのグループを表現します。
レベル 2 ブロックは以下のような構造をしています。
== Singleton Methods
<メソッドエントリ>
<メソッドエントリ>
:
:
レベル 2 ヘッダ (「==」) には以下の種類があります。
* Singleton Methods
* Private Singleton Methods
* Instance Methods
* Private Instance Methods
* Module Functions
* Constants
* Special Variables
== メソッドエントリの文法
メソッドエントリは以下のような構造です。
---- メソッド名
---- メソッド名(引数)
---- メソッド名(引数) { .... }
<メソッドのドキュメント>
引数の形式がいくつもある場合や、alias があるときは、上記の
ように「--- メソッド名」の行を連続して書いてください。
メソッドシグネチャは Ruby での def と同じように記述します。
旧リファレンスマニュアルでは「self + other」や
「self[key] = value」のような書きかたも許容されていましたが、
新マニュアルでは認められません。
== 通常のテキストの文法
ライブラリのドキュメント、クラスのドキュメント、メソッドの
ドキュメントでは以下に述べる共通の文法を使います。
=== 段落
通常の段落はインデントなしで書きます。
=== リスト
インデントするとリストになります。
[例]
テキスト〜
p Object.new
p [1, 2, 3]
特殊な事情があってインデントが使えない場合は
以下の記法を使ってください。
//emlist{
リスト
//}
※ 「//emlist{」と「//}」はインデントしない
=== 箇条書き
箇条書きはインデント + '*' です。インデントなしは不可。
[例]
テキスト〜
* 項目 1
* 項目 2
* 項目 3
=== 番号付きの箇条書き
番号付きの箇条書きはインデント + (1), (2), ... です。
インデントなしは不可。
[例]
テキスト〜
(1) 項目 1
(2) 項目 2
(3) 項目 3
=== ハイパーリンク
以下のようなハイパーリンク記法が使えます。
* [[c:String]] クラス String にリンク
* [[m:String.new]] メソッド String.new にリンク
* [[m:String#dump]] メソッド String#dump にリンク
* [[m:String#[] ]] メソッド String#[] にリンク
* [[m:$~]] 特殊変数 $~ にリンク
* [[lib:jcode]] ライブラリ jcode にリンク
* [[man:tr(1)]] man ページ tr(1) にリンク
* [[url:http://i.loveruby.net]] URL http://i.loveruby.net にリンク
=== 削除された項目
RD の (({...})), ((|...|)) はサポートしません。
bc-convert.rb を使うと自動的にすべて削除されます。
脚注とコメントも廃止されました。コメントを書きたい場合は
プリプロセッサコメント「#@# ...」を使ってください。
== プリプロセッサ
各ファイルは事前に専用プリプロセッサで処理されます。プリプロセッサ
の命令はすべて行単位で、すべて「#@」で始まります。
=== #@#
「#@#」の行はコメントです。
=== #@include
「#@include(ファイル名)」で他のファイルをテキスト的に結合できます。
「ファイル名」は #@include の書かれているファイルからの相対パスを
探します。
[例]
#@include(HTTP)
#@include(HTTPHeader)
#@include(HTTPRequest)
#@include(HTTPResponse)
=== #@if
「#@if(条件) 〜 #@else 〜 #@end 」でバージョン依存コンパイルが
できます。例えば Ruby 1.8.0 以降にのみ適用される文章は以下
のように記述します。
[例]
#@if (version >= "1.8.0")
Ruby 1.8 以降では 〜〜
#@end
いまのところ条件式の評価はテキトーなので、比較式 (>= とか == とか)
しか使えません。他の式が使いたいときは ML で相談してください。
--
ML: ruby-reference-manual@m...
使い方: http://QuickML.com/
-> 53 2006-09-12 20:50 [aamine@l... ] 作業マニュアル #1 (フォーマット変換) 54 2006-09-13 10:13 ┣[kazuhiko@f... ] 56 2006-09-13 10:35 ┃┗[aamine@l... ] 55 2006-09-13 10:31 ┣[ko1@a... ] 57 2006-09-13 10:59 ┃┗[aamine@l... ] 73 2006-09-15 01:21 ┃ ┗[ko1@a... ] 77 2006-09-15 18:01 ┃ ┗[aamine@l... ] 58 2006-09-13 15:50 ┣[aamine@l... ] 59 2006-09-13 16:19 ┣[itacchi@g... ] 60 2006-09-13 16:56 ┃┗[aamine@l... ] 61 2006-09-13 17:53 ┃ ┗[itacchi@g... ] 62 2006-09-13 18:02 ┃ ┗[aamine@l... ] 63 2006-09-14 10:36 ┣[sheepman@s... ] ネストしたクラスと定数へのリンクの記法 64 2006-09-14 11:21 ┃┗[aamine@l... ] 66 2006-09-14 16:53 ┣[zn@m... ] 69 2006-09-14 19:25 ┃┗[aamine@l... ] 74 2006-09-15 14:35 ┃ ┗[zn@m... ] 76 2006-09-15 17:59 ┃ ┗[aamine@l... ] 67 2006-09-14 17:30 ┣[itacchi@g... ] 78 2006-09-16 04:11 ┣[sheepman@s... ] レベル 2 ブロック付きのドキュメント 79 2006-09-16 06:32 ┃┗[aamine@l... ] 81 2006-09-16 10:06 ┃ ┗[sheepman@s... ] 82 2006-09-16 16:25 ┃ ┗[aamine@l... ] 80 2006-09-16 10:00 ┣[sheepman@s... ] メソッドで使う定数の場所 83 2006-09-16 16:10 ┃┗[aamine@l... ] 89 2006-09-17 13:48 ┗[sheepman@s... ] レベル 2 ヘッダ 90 2006-09-17 14:19 ┗[aamine@l... ]