[前][次][番号順一覧][スレッド一覧]

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...         ]