Class DCModelThumbnail
In: dcmodel-tools/dcmodel-thum.rb
Parent: Object

DCModelThumbnail

 「dcmodel お絵描きサムネイル HTML 作成スクリプト」の作成用のクラス

Methods

Constants

COPYRIGHT = "GFD Dennou Club"   CopyRight
INFO_DELIMITER = ":"   項目の区切り文字
INFO_MULTI_START = "{"   情報ファイルにおける、複数行の開始文字
INFO_MULTI_STOP = "}"   情報ファイルにおける、複数行の終了
GATE_USER_SHOW = "/usr/local/bin/gate-user-show"   SIGEN ファイル作成時の情報を得るための gate コマンド
PUB_BIN_URL = "http://www.gfd-dennou.org/library/dcmodel/bin/dcmodel-thum.rb"   公開本体置き場
PUB_DOC_URL = "http://www.gfd-dennou.org/library/dcmodel/doc/dcmodel-tools/dcmodel-thum-rdoc"   公開ドキュメントの URL
PUB_SAMPLE_URL = "http://www.gfd-dennou.org/library/dcmodel/doc/dcmodel-tools/dcmodel-thum-sample"   公開サンプルの URL
CVS_HOST = "www.gfd-dennou.org"   CVSHOST
CVS_ROOT = "/GFD_Dennou_Club/ftp/arch/dcmodel/cvsroot"   CVSROOT
CVS_PROJECT = "dcmodel-tools"   CVS のプロジェクト名
VER = "$Revision: 1.31 $ : $Date: 2007/05/22 05:13:14 $"   バージョンナンバー (CVS により自動管理)

Attributes

blankfig  [RW]  ファイル名の非表示のフラグ
convert_cmd  [RW]  convert コマンドおよびオプション. この後ろに画像サイズが 200x150 のような形式で指定される.
convert_overwrite  [RW]  convert コマンドが実行される際, 既に出力先のファイルがある場合に 上書きするためのフラグ. これが false の場合, 出力先のファイルが 存在し, 且つ元のファイルよりも新しい場合は変換を行わない.
copyright  [RW]  copyright
css  [RW]  スタイルシートファイル
ext_list  [RW]  画像ファイルとして認識する拡張子
figdir  [RW]  絵のあるディレクトリの名前。必ず存在していなければならない。
figtable_num  [RW]  横にならべるファイル数
footer  [RW]  フッターとして書き出すメッセージ。サムネイルの部分よりも下に出力される。 この変数自体は Array オブジェクトで、その内部に String オブジェクトが 格納される。
gate_user_show  [RW]  SIGEN ファイル作成時の情報を得るための gate コマンド
headlimit  [RW]  headlimit に当てはまらないものは画像としては無視され、 当てはまるものは「情報ファイル」において、接頭部分 headlimit が 省略可能になる。
html_author  [RW]  html の作成者情報 (デフォルトはユーザアカウント名が自動取得される)
img_height  [RW]  画像ファイルサイズ (高さ)
img_width  [RW]  画像ファイルサイズ (幅)
index  [RW]  作成されるサムネイルのファイル名 (拡張子除く)
index_ext  [RW]  作成されるサムネイルの拡張子名
infofile  [RW]  「情報ファイル (infofile)」のファイル名
message  [RW]  本体に書き出すメッセージ。サムネイルの部分よりも上に出力される。 この変数自体は Array オブジェクトで、その内部に String オブジェクトが 格納される。
mksigen  [RW]  SIGEN ファイルを作らない場合は false にセットする
norobots  [RW]  HTML のロボット検索を禁止する
pub_doc_url  [R]  公開ドキュメントの URL
pub_sample_url  [R]  公開サンプルの URL
rd2_path  [RW]  rd2 コマンドへのパス
rd2htmlextlib  [RW]  rd2-ext-lib へのライブラリへのパス
self_name  [R]  実行ファイルの basename
style  [RW]  スタイルシートを直接設定するためのもの (css ファイルに書き込む情報を直接指定できる)
sub_rb_name  [R]  サンプル ruby スクリプト名
thumbnaildir  [RW]  サムネイル画像を置くディレクトリ名。カレントディレクトリから "#{@thumbaildir}" の場所に指定される.
thumbnailpage  [RW]  サムネイル画像化する元画像のページ番号
thumbnailtail  [RW]  サムネイル画像の最後部名. サムネイル画像名は元画像の拡張子と置換された名前になる.
title  [RW]  html ヘッダのタイトル
tmp  [RW]  テンポラリファイル置き場 (UNIX 系ならば変える必要なし)
version  [R]  バージョン

Public Class methods

これを呼ぶことで、最低限必要な情報が生成される。 最終的には DCModelThumbnail.create メソッドを呼ぶことで ファイルが作成される。

[Source]

     # File dcmodel-tools/dcmodel-thum.rb, line 474
474:   def initialize()
475:     #
476:     # version
477:     #
478:     @version = VER
479: 
480:     #
481:     # copyright
482:     #
483:     @copyright = COPYRIGHT
484: 
485:     # 公開ドキュメントの URL
486:     @pub_doc_url = PUB_DOC_URL
487: 
488:     # 公開サンプルの URL
489:     @pub_sample_url = PUB_SAMPLE_URL
490: 
491:     # dcmodel-thum.rb 自身の名前
492:     # @self_name   = File.basename($0.to_s)
493:     @self_name   = "dcmodel-thum.rb"
494: 
495:     # サンプル ruby スクリプト名
496:     @sub_rb_name = "#{File.basename($0, ".*")}" + "-make.rb"
497: 
498:     # html の置き場・ファイル名・拡張子。カレントディレクトリから
499:     #
500:     #    "#{@index}#{index_ext}" 
501:     #
502:     #に置かれる。
503:     @index     = "../sample_thum"
504:     @index_ext = ".htm"
505: 
506:     # 絵のあるディレクトリ名。カレントディレクトリから 
507:     # "#{@figdir}" の場所を探査する。
508:     @figdir = "../figdir"
509: 
510:     # サムネイル画像を置くディレクトリ名。カレントディレクトリから 
511:     # "#{@thumbaildir}" の場所に指定される.
512:     @thumbnaildir = "../thumbdir"
513: 
514:     # サムネイル画像の最後部名. 
515:     # サムネイル画像名は元画像の拡張子と置換された名前になる. 
516:     @thumbnailtail = "_thumb.png"
517: 
518:     # サムネイル画像化する元画像のページ番号
519:     @thumbnailpage = "1"
520: 
521:     # convert コマンドおよびオプション。この後ろに画像サイズが 200x150
522:     # のような形式で指定される。
523:     @convert_cmd = "convert -depth 8 -geometry"
524: 
525:     # convert コマンドが実行される際, 既に出力先のファイルがある場合に
526:     # 上書きするためのフラグ. これが false の場合, 出力先のファイルが
527:     # 存在し, 且つ元のファイルよりも新しい場合は変換を行わない.
528:     @convert_overwrite = false
529: 
530:     # 情報ファイル, $PWD/${infofile}
531:     @infofile = File.basename(@index).chomp.strip + ".txt"
532: 
533:     # 画像ファイルとして認識する拡張子
534:     @ext_list = ["gif", "png", "jpg", "jpeg"]
535: 
536:     # 接頭子制限 @headlimit = "figure_head"。
537:     # これにより、@headlimit に当てはまらないものは無視される
538:     @headlimit = ""
539: 
540:     # ファイル名の非表示のフラグ
541:     @blankfig = false
542: 
543:     # スタイルシートファイル
544: #    @css    = "../dcmodel.css"  # for morikawa (I'm sorry...)
545:     @css    = "/GFD_Dennou_Club/ftp/arch/dcmodel/htmltools/dcmodel.css"
546: 
547:     # スタイルシートを直接設定するためのもの
548:     # (css ファイルに書き込む情報を直接指定できる)
549:     @style = nil
550: 
551:     # rd2 ファイルのパス
552:     @rd2_path = "/usr/bin/rd2"
553: 
554:     # rd2-ext-lib へのライブラリのパス
555: #    @rd2htmlextlib = ".."       # for morikawa (I'm sorry...)
556:     @rd2htmlextlib = "/GFD_Dennou_Club/ftp/arch/dcmodel/lib/ruby/1.8"
557: 
558:     # SIGEN ファイル作成時の情報を得るための gate コマンド
559:     @gate_user_show = GATE_USER_SHOW
560: 
561:     # テンポラリファイル置き場 (UNIX 系ならば変える必要なし)
562:     @tmp     = "/tmp"
563: 
564:     # SIGEN ファイルを作らない場合は false にセットする
565:     @mksigen = true
566: 
567:     # HTML のロボット検索を禁止する場合には true にセットする
568:     @norobots = false
569: 
570:     # 画像ファイルサイズ
571:     @img_width  = 200
572:     @img_height = 150
573: 
574:     # 横にならべるファイル数
575:     @figtable_num = 3
576: 
577:     # NAME, HREF タグ内のラベルナンバー
578:     @label_num = 0
579: 
580:     # ラベルナンバーと対応するヘッダ文字列のハッシュ
581:     @label_num_header_hash = {}
582: 
583:     # html の作成者情報 (ユーザアカウント名)
584:     @html_author = username_from_gid
585: 
586:     # html ヘッダタイトル
587:     @title  = "dcmodel-thum : 実験結果サムネイル簡易作成スクリプト"
588: 
589:     # フッター (サムネイルの部分よりも下にメッセージ)
590:     # 指定方法は message と同様です。
591:     @footer = Array.new
592: 
593:     # 本体 (サムネイルの部分よりも上にメッセージ)
594:     @message = Array.new
595:     @message << "=begin\n[((<\303\317\265\345\316\256\302\316\305\305\307\276\266\346\263\332\311\364|URL:http://www.gfd-dennou.org>))]\n[((<dcmodel|URL:http://www.gfd-dennou.org/library/dcmodel>)) |\n((<dcmodel-tools|URL:http://www.gfd-dennou.org/library/dcmodel/doc/dcmodel-tools/SIGEN.htm>))]\n[((<\#{@self_name}|URL:\#{PUB_DOC_URL}>))]\n\n= \#{@title}\n\n* ((<\263\265\315\327\241\246\315\370\315\321\241\246\306\260\272\356\264\304\266\255\244\316\263\265\300\342>))\n* ((<\245\320\241\274\245\270\245\347\245\363 1.1 (\245\252\245\352\245\270\245\312\245\353\244\344\244\336\244\300\315\263\245\304\241\274\245\353) \244\253\244\351\244\316\273\305\315\315\312\321\271\271>))\n* ((<\315\370\315\321\244\316\274\352\260\372\244\255>))\n* ((<\262\350\301\374\244\316\315\321\260\325>))\n* ((<\#{@self_name} \244\316\315\321\260\325>))\n* ((<\244\310\244\352\244\242\244\250\244\272\274\302\271\324>))\n* ((<\273\322\245\271\245\257\245\352\245\327\245\310\244\316\274\302\271\324>))\n* ((<\244\307\244\255\244\277\244\342\244\316\244\362\270\253\244\306\244\337\244\353>))\n* ((<\245\271\245\257\245\352\245\327\245\310\244\316\312\324\275\270 (\306\376\314\347\312\324)>))\n* ((<\272\306\305\331\274\302\271\324>))\n* ((<\241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\316\312\324\275\270 (\306\376\314\347\312\324)>))\n* ((<\244\342\244\246\260\354\305\331\274\302\271\324>))\n* ((<\245\271\245\257\245\352\245\327\245\310\244\316\312\324\275\270 (\261\376\315\321\312\324)>))\n* ((<\241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\316\312\324\275\270 (\261\376\315\321\312\324)>))\n\n\n== \263\265\315\327\241\246\315\370\315\321\241\246\306\260\272\356\264\304\266\255\244\316\263\265\300\342\n\n((<\#{@self_name} \244\316 rdoc \245\336\245\313\245\345\245\242\245\353|URL:\#{PUB_DOC_URL}>))\n\nOverview \244\310 Operation Environment \244\310 Usage \244\362\244\265\244\351\244\303\244\310\306\311\244\363\244\300\244\351\314\341\244\303\244\306\244\255\244\306\244\315\241\243\n\n\244\312\244\252\241\242\260\312\262\274\244\316 URL \244\313\244\317\244\263\244\316\275\320\316\317\267\353\262\314\244\310\306\261\305\371\244\316\244\342\244\316\244\254\303\326\244\244\244\306\244\242\244\353\244\317\244\272\244\307\244\271\241\243\n\n((<\#{@self_name} \244\316 \245\265\245\363\245\327\245\353|URL:\#{PUB_SAMPLE_URL}>))\n\n== \245\320\241\274\245\270\245\347\245\363 1.1 (\245\252\245\352\245\270\245\312\245\353\244\344\244\336\244\300\315\263\245\304\241\274\245\353) \244\253\244\351\244\316\273\305\315\315\312\321\271\271\n\n\244\263\244\263\244\317\241\242\245\320\241\274\245\270\245\347\245\363 1.2 \260\312\271\337\244\253\244\351\315\370\315\321\244\267\244\306\244\244\244\353\277\315\244\313\244\317\311\324\315\327\244\307\244\271\241\243\n\245\320\241\274\245\270\245\347\245\363 1.1 \244\316\245\252\245\352\245\270\245\312\245\353\244\316\244\344\244\336\244\300\315\263\245\304\241\274\245\353\244\253\244\351\315\370\315\321\244\267\244\306\244\244\244\353\n\312\375\244\317\241\242\260\312\262\274\244\316\312\321\271\271\305\300\244\313\244\264\303\355\260\325\244\257\244\300\244\265\244\244\241\243\n\n* \241\326\276\360\312\363\245\325\245\241\245\244\245\353 (infofile)\241\327\244\316\275\361\274\260\n* \262\350\301\374\314\276\244\313\263\310\304\245\273\322\244\362\262\303\244\250\244\353\244\350\244\246\244\313\244\312\244\303\244\277\n* 1.1 \244\307\244\317 <\262\350\301\374\314\276> : <\245\263\245\341\245\363\245\310> \244\300\244\303\244\277\244\254\241\242\n\270\275\272\337\244\317 <\262\350\301\374\314\276> : <\275\244\276\376\273\322> : <\245\263\245\341\245\363\245\310> \244\313\244\312\244\303\244\306\244\244\244\353\241\243\n* pathname.rb \244\362\315\370\315\321\244\271\244\353\244\277\244\341\241\242ruby 1.8 \244\362\315\370\315\321\244\271\244\353\244\253\241\2421.6 \244\312\244\351\244\320\n\274\302\271\324\244\316\272\335\244\313 RUBYLIB \244\316\245\321\245\271\244\254\304\314\244\303\244\277\244\310\244\263\244\355\244\313 pathname.rb \244\254\311\254\315\327\n\244\307\244\242\244\353\241\243\n\n\n== \315\370\315\321\244\316\274\352\260\372\244\255\n\n=== \#{@self_name} \244\316\306\376\274\352\244\316\312\375\313\241\n\n((<\#{@self_name} \245\271\245\257\245\352\245\327\245\310\313\334\302\316|URL:\#{PUB_BIN_URL}>)) \244\362\245\300\245\246\245\363\245\355\241\274\245\311\n\244\267\244\306\244\257\244\300\244\265\244\244\241\243\244\342\244\267\244\257\244\317 cvsroot \244\362\244\342\244\303\244\306\244\244\244\353 \#{CVS_HOST} \244\313\245\355\245\260\245\244\245\363\244\254\n\262\304\307\275\244\307\244\242\244\354\244\320\241\242cvs \244\253\244\351\244\342\304\276\300\334\274\350\306\300\244\254\262\304\307\275\244\307\244\271\241\243\n\n$ CVS_RSH=ssh; export CVS_RSH\n$ cvs -d :ext:\#{CVS_HOST}:\#{CVS_ROOT} checkout \#{CVS_PROJECT}\n\n\264\373\244\313 \#{CVS_HOST} \244\313\245\355\245\260\245\244\245\363\244\267\244\277\276\365\302\326\244\307\244\242\244\354\244\320\241\242\260\312\262\274\244\316\245\263\245\336\245\363\245\311\244\316\244\337\244\307\n\274\350\306\300\262\304\307\275\244\307\244\271\241\243\n\n$ cvs -d \#{CVS_ROOT} checkout \#{CVS_PROJECT}\n\n\n== \262\350\301\374\244\316\315\321\260\325\n\n\245\265\245\340\245\315\245\244\245\353\262\275\244\267\244\350\244\246\244\310\244\271\244\353\262\350\301\374\244\362 (({\#{File.basename(@figdir)} })) \244\310\244\244\244\246\n\245\307\245\243\245\354\245\257\245\310\245\352\244\313\303\326\244\244\244\306\244\257\244\300\244\265\244\244\241\243\270\275\272\337\241\242\262\350\301\374\244\310\244\267\244\306\307\247\274\261\244\265\244\354\244\353\244\316\244\317\241\242\n(({ \#{@ext_list.join(\", \")}, \#{@ext_list.join(\", \").swapcase} }))\n\244\307\244\271\241\243\245\242\245\313\245\341\241\274\245\267\245\347\245\363 gif \244\313\244\342\260\354\261\376\302\320\261\376\244\267\244\306\244\244\244\336\244\271\244\254, \245\265\245\340\245\315\245\244\245\353\262\275\244\271\244\353\n\245\332\241\274\245\270\310\326\271\346\244\317\301\264\262\350\301\374\266\246\304\314\244\313\244\267\244\253\300\337\304\352\244\307\244\255\244\336\244\273\244\363.\n\n\302\276\244\316\267\301\274\260\244\316\262\350\301\374\244\362\307\247\274\261\244\265\244\273\244\277\244\244\276\354\271\347\244\317 ((<\245\271\245\257\245\352\245\327\245\310\244\316\312\324\275\270 (\306\376\314\347\312\324)>))\n\244\362\273\262\276\310\244\267\244\306\244\257\244\300\244\265\244\244\241\243\244\310\244\352\244\242\244\250\244\272\241\242\n\244\336\244\272\244\317 (({\#{File.basename(@figdir)} })) \244\362\272\356\300\256\244\267\244\306\262\274\244\265\244\244\241\243\n\n== \#{@self_name} \244\316\315\321\260\325\n\n((<\#{@self_name} \244\316\306\376\274\352\244\316\312\375\313\241>)) \244\307\274\350\306\300\244\267\244\277 \#{@self_name} \244\317\n(({ thum-src })) \244\310\244\244\244\246\245\307\245\243\245\354\245\257\245\310\245\352\244\362\272\356\244\303\244\306\244\275\244\263\244\313\303\326\244\244\244\306\262\274\244\265\244\244\241\243\n\267\353\262\314\305\252\244\313\241\242\260\312\262\274\244\316\244\350\244\246\244\312\271\275\300\256\244\313\244\312\244\303\244\306\244\244\244\353\244\310\316\311\244\244\244\307\244\271\241\243\n\n./\#{File.basename(@figdir)}/*****.jpg\n*****.gif\n./thum-src/dcmodel-thum.rb\n\n\n== \244\310\244\352\244\242\244\250\244\272\274\302\271\324\n\n(({ thum-src })) \244\330\260\334\306\260\244\267\241\242\#{@self_name} \244\362\274\302\271\324\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\n$ cd thum-src\n$ ruby \#{@self_name}\n\n\244\271\244\353\244\310\241\242\#{@sub_rb_name} \244\310\244\244\244\246\274\302\271\324\245\271\245\257\245\352\245\327\245\310\244\254\272\356\300\256\244\265\244\354\244\353\n\244\317\244\272\244\307\244\271\241\243\n\n== \273\322\245\271\245\257\245\352\245\327\245\310\244\316\274\302\271\324\n\n\272\243\305\331\244\317 \#{@sub_rb_name} \244\362\274\302\271\324\244\267\244\336\244\271\241\243\n\n$ ruby \#{@sub_rb_name}\n\n\244\271\244\353\244\310\241\242(({ \#{@index}\#{@index_ext} }))\244\310\244\244\244\246\245\325\245\241\245\244\245\353\244\254\272\356\300\256\244\265\244\354\244\336\244\271\241\243\n\244\263\244\354\244\254\245\265\245\340\245\315\245\244\245\353\244\316 HTML \244\307\244\271\241\243\n\n\n== \244\307\244\255\244\277\244\342\244\316\244\362\270\253\244\306\244\337\244\353\n\n(({ \#{@index}\#{@index_ext} })) \244\362\245\326\245\351\245\246\245\266\244\307\270\253\244\306\244\337\244\306\244\257\244\300\244\265\244\244\241\243\n\244\263\244\316\245\332\241\274\245\270\244\310\306\261\315\315\244\316\245\341\245\303\245\273\241\274\245\270\244\254\275\361\244\253\244\354\244\277\245\332\241\274\245\270\244\254\275\320\316\317\244\265\244\354\244\306\244\244\244\353\n\244\317\244\272\244\307\244\271\241\243\n\n\#{File.basename(@figdir)} \244\313\262\350\301\374\244\362\244\252\244\244\244\306\244\242\244\303\244\277\276\354\271\347\241\242\244\275\244\354\244\351\244\254\n\262\274\244\313\245\265\245\340\245\315\245\244\245\353\262\275\244\265\244\354\244\306\244\244\244\353\244\317\244\272\244\307\244\271\241\243\n\n\n== \245\271\245\257\245\352\245\327\245\310\244\316\312\324\275\270 (\306\376\314\347\312\324)\n\n\244\263\244\316\244\336\244\336\244\307\244\317\273\310\244\250\244\312\244\244\244\316\244\307\241\242(({ \#{@sub_rb_name} })) \244\362\312\324\275\270\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\244\336\244\272\241\242\244\263\244\263\244\313\265\255\275\322\244\265\244\354\244\353\245\263\245\341\245\363\245\310\244\362\272\357\275\374\244\267\244\336\244\267\244\347\244\246\241\243\n\n\260\312\262\274\244\316\311\364\312\254\260\312\271\337\244\362\301\264\244\306\276\303\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\nthumb.message   << <<-Message\n=begin\n[((<\303\317\265\345\316\256\302\316\305\305\307\276\266\346\263\332\311\364|URL:http://www.gfd-dennou.org>))]\n[((<dcmodel|URL:http://www.gfd-dennou.org/library/dcmodel>)) |\n:\n:\n\n\274\241\244\313\241\242\272\356\300\256\244\265\244\354\244\353 HTML \245\325\245\241\245\244\245\353\244\316\314\276\301\260\244\362\264\365\313\276\244\316\244\342\244\316\244\313\312\321\271\271\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\262\274\265\255\244\316\244\350\244\246\244\313 infofile \244\362\300\337\304\352\244\267\244\306\244\252\244\257\244\310\241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327(\270\345\275\322) \244\316\n\314\276\301\260\244\342\260\354\275\357\244\313\312\321\271\271\244\265\244\354\244\306\312\330\315\370\244\307\244\271\241\243\n\nthumb.index     = \"../result\"\nthumb.infofile  = \"\\\\\\#\\\\\\{File.basename(thumb.index)\\\\\\}.txt\"\n\n\262\350\301\374\244\310\244\267\244\306\307\247\274\261\244\267\244\277\244\244\263\310\304\245\273\322\244\362\301\375\244\344\244\267\244\277\244\244\276\354\271\347\244\317\260\312\262\274\244\316\244\350\244\246\244\313\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\nthumb.ext_list.push(\"bmp\")\n\n\262\350\301\374\245\325\245\241\245\244\245\353\314\276\244\254\304\271\244\257\241\242\245\325\245\241\245\244\245\353\314\276\244\316\306\254\244\316\311\364\312\254\244\362\274\350\244\352\275\374\244\244\244\306\311\275\274\250\244\267\244\277\244\244\241\242\n\244\336\244\277\244\317\245\325\245\241\245\244\245\353\314\276\244\316\306\254\244\307\275\320\316\317\244\271\244\353\245\325\245\241\245\244\245\353\244\316\301\252\302\362\244\362\271\324\244\244\244\277\244\244\276\354\271\347\244\317\n\260\312\262\274\244\316\244\350\244\246\244\313\300\337\304\352\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\nthumb.headlimit = \"exp_name_\"\n\n\262\350\301\374\245\325\245\241\245\244\245\353\314\276\244\362 HTML \244\313\311\275\274\250\244\267\244\277\244\257\244\312\244\244\276\354\271\347\244\317\260\312\262\274\244\316\244\350\244\246\244\313\300\337\304\352\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\270\304\312\314\305\252\244\313\245\325\245\241\245\244\245\353\314\276\244\362\310\363\311\275\274\250\244\313\244\267\244\277\244\244\276\354\271\347\244\317\n((<\241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\316\312\324\275\270 (\261\376\315\321\312\324)>)) \244\316 ((<\245\325\245\241\245\244\245\353\314\276\310\363\311\275\274\250>))\n\244\362\273\262\276\310\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\nthumb.blankfig = true\n\n\262\350\301\374\244\316\275\304\262\243\245\265\245\244\245\272\244\344\241\242\245\265\245\340\245\315\245\244\245\353\244\307\262\243\244\313\311\275\274\250\244\271\244\353\262\350\301\374\244\316\277\364\244\317\260\312\262\274\244\316\244\350\244\246\244\313\n\300\337\304\352\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\nthumb.img_width  = 200\nthumb.img_height = 150\nthumb.figtable_num = 3\n\n\274\253\306\260\300\270\300\256\244\265\244\354\244\353\245\265\245\340\245\315\245\244\245\353\262\350\301\374\244\316\303\326\244\255\276\354\244\310\262\350\301\374\244\316\314\276\301\260\244\316\272\307\270\345\311\364\244\362\n\274\241\244\316\244\350\244\246\244\313\273\330\304\352\244\267\244\306\262\274\244\265\244\244.\n\nthumb.thumbnaildir  = \"../thumb\"    # \245\265\245\340\245\315\245\244\245\353\262\350\301\374\244\362\303\326\244\257\245\307\245\243\245\354\245\257\245\310\245\352\314\276\nthumb.thumbnailtail = \"_thumb.png\"  # \245\265\245\340\245\315\245\244\245\353\262\350\301\374\244\316\263\310\304\245\273\322\314\276\n\n\245\242\245\313\245\341\241\274\245\267\245\347\245\363 gif \305\371\312\243\277\364\245\332\241\274\245\270\244\362\302\253\244\315\244\277\262\350\301\374\244\313\302\320\244\267\244\306\244\317\245\265\245\340\245\315\245\244\245\353\262\275\244\271\244\353\n\245\332\241\274\245\270\310\326\271\346\244\362 1 \244\350\244\352\302\347\244\255\244\244\303\315\244\313\300\337\304\352\244\307\244\255\244\336\244\271.\n\nthumb.thumbnailpage = \"50\"      # \245\265\245\340\245\315\245\244\245\353\262\350\301\374\262\275\244\271\244\353\270\265\262\350\301\374\244\316\245\332\241\274\245\270\310\326\271\346\n\n\245\271\245\277\245\244\245\353\245\267\241\274\245\310\244\313\275\361\244\255\271\376\244\340\300\337\304\352\244\362\303\261\302\316\244\307\244\342\273\330\304\352\262\304\307\275\244\307\244\271\241\243\n\316\343\244\250\244\320\241\242\245\352\245\363\245\257\244\313\264\330\244\271\244\353\306\260\272\356\244\362\300\337\304\352\244\271\244\353\244\313\244\317\260\312\262\274\244\316\244\350\244\246\244\313\244\267\244\336\244\271\241\243\n\nthumb.style = <<-STYLE\na:link { color:#269900; }\na:visited { color:#269900; }\na:hover { color:#99FF33; }\nSTYLE\n\n\270\265\241\271\244\316 (({ thumb.title ... })) \244\316\271\324\244\362\316\343\244\250\244\320\260\312\262\274\244\316\244\350\244\246\244\313\275\361\244\255\264\271\244\250\241\242\n\245\277\245\244\245\310\245\353\244\362\300\337\304\352\244\267\244\306\244\257\244\300\244\265\244\244\241\243(\244\263\244\354\244\317 HTML \244\316 head \245\277\245\260\306\342\244\316\ntitle \245\277\245\260\244\313\300\337\304\352\244\265\244\354\244\336\244\271 )\n\nthumb.title     = \"\274\302\270\263\267\353\262\314\"\n\n\244\301\244\347\244\246\244\311\244\263\244\316\245\301\245\345\241\274\245\310\245\352\245\242\245\353\244\254\272\356\300\256\244\265\244\354\244\353\276\354\275\352\244\313\275\361\244\255\275\320\244\271\241\242\n\245\341\245\303\245\273\241\274\245\270\244\362\300\337\304\352\244\267\244\306\244\257\244\300\244\265\244\244\241\243\244\263\244\263\244\313\275\361\244\255\271\376\244\340\306\342\315\306\244\254\244\275\244\316\244\336\244\336\nHTML \244\310\244\267\244\306\275\320\316\317\244\265\244\354\244\353\244\316\244\307\241\242HTML \245\277\245\260\244\342\275\361\244\255\271\376\244\363\244\307\244\257\244\300\244\265\244\244\241\243\n\n((* \303\355\260\325\241\252\241\252 *)) message \244\313\302\345\306\376\244\271\244\353\244\310\244\255\244\316\265\255\271\346\244\317\311\254\244\272 \241\326=\241\327\n\244\307\244\317\244\312\244\257\241\242\241\326<<\241\327\244\313\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\nthumb.message   << <<-MSG\n<h1>\274\302\270\263\267\353\262\314</h1>\n\n<p>\n\260\312\262\274\244\317\274\302\270\263\267\353\262\314\244\362\260\354\315\367\244\267\244\277\244\342\244\316\244\307\244\242\244\353\n</p>\n\n<h2>\274\302\270\263\300\337\304\352</h2>\n\n<ul>\n<li>\262\362\301\374\305\331       : T42L20\n<li>\273\376\264\326\245\271\245\306\245\303\245\327 : 30 s\n</ul>\n:\n:\nMSG\n\n\245\265\245\340\245\315\245\244\245\353\311\364\312\254\244\316\262\274\244\313\245\341\245\303\245\273\241\274\245\270\244\362\265\255\275\322\244\267\244\277\244\244\276\354\271\347\244\317\241\242\260\312\262\274\244\316\244\350\244\246\244\313\n\300\337\304\352\244\267\244\336\244\267\244\347\244\246\241\243\275\361\244\255\312\375\244\317\276\345\265\255\244\316 message \244\310\306\261\315\315\244\307\244\271\241\243\n\nthumb.footer  << <<-MSG\n=begin\n== \273\262\271\315\273\361\316\301\n\n* \303\317\265\345\316\256\302\316\305\305\307\276\266\346\263\332\311\364 dcmodel \245\327\245\355\245\270\245\247\245\257\245\310.\n((<URL:http://www.gfd-dennou.org/library/dcmodel>)),\n\303\317\265\345\316\256\302\316\305\305\307\276\266\346\263\332\311\364.\n\n=end\nMSG\n\n\n== \272\306\305\331\274\302\271\324\n\n\272\306\305\331 \#{@sub_rb_name} \244\362\274\302\271\324\244\267\244\336\244\271\241\243\n\n$ ruby \#{@sub_rb_name}\n\n\244\271\244\353\244\310\241\242\276\345\265\255\244\316\265\255\275\322\244\254\310\277\261\307\244\265\244\354\244\277 (({ \#{@index}\#{@index_ext} })) \244\254\n\272\356\300\256\244\265\244\354\244\336\244\271\241\243\245\326\245\351\245\246\245\266\244\307\263\316\307\247\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\n\244\277\244\300\244\267\241\242\244\263\244\354\244\300\244\261\244\307\244\317\241\242\245\265\245\340\245\315\245\244\245\353\306\342\244\316\245\263\245\341\245\363\245\310\244\362\312\324\275\270\244\307\244\255\244\312\244\244\244\316\244\307\241\242\n\260\312\262\274\244\316 ((<\241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\316\312\324\275\270 (\306\376\314\347\312\324)>)) \244\362\273\262\276\310\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\n\n== \241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\316\312\324\275\270 (\306\376\314\347\312\324)\n\n\#{@sub_rb_name} \244\362\274\302\271\324\244\267\244\277\245\307\245\243\245\354\245\257\245\310\245\352\244\313\244\317\276\345\265\255\244\307\300\337\304\352\244\267\244\277\ninfofile \244\313\302\320\261\376\244\267\244\277\245\325\245\241\245\244\245\353\244\254\272\356\300\256\244\265\244\354\244\353\244\317\244\272\244\307\244\271\241\243\n\nthumb.infofile  = \"\\\\\\#\\\\\\{File.basename(thumb.index)\\\\\\}.txt\"\n\n\244\263\244\316\245\325\245\241\245\244\245\353\244\362\312\324\275\270\244\271\244\353\244\263\244\310\244\307\241\242\245\265\245\340\245\315\245\244\245\353\306\342\244\313\245\263\245\341\245\363\245\310\244\362\265\255\275\322\244\307\244\255\244\336\244\271\241\243\n\n\244\336\244\272\303\346\277\310\244\362\270\253\244\306\244\337\244\306\244\257\244\300\244\265\244\244\241\243\n\nfig1.png::\nfig2.gif::\nfig3.jpg::\nfig3.png::\n\n\244\263\244\354\244\317\241\242\260\312\262\274\244\316\244\350\244\246\244\312\245\325\245\251\241\274\245\336\245\303\245\310\244\313\244\312\244\303\244\306\244\244\244\336\244\271\241\243\n\n<\262\350\301\374\314\276> : <\275\244\276\376\273\322> : <\245\263\245\341\245\363\245\310>\n\n<\275\244\276\376\273\322> \244\313\264\330\244\267\244\306\244\317 ((<\241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\316\312\324\275\270 (\261\376\315\321\312\324)>))\n\244\362\273\262\276\310\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\n\n=== \262\350\301\374\244\316\275\347\275\370\244\316\306\376\244\354\302\330\244\250\n\n\245\265\245\340\245\315\245\244\245\353\244\313\244\317\241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\313\275\361\244\255\271\376\244\336\244\354\244\277\275\347\244\313\275\361\244\255\275\320\244\265\244\354\244\336\244\271\241\243\n\306\376\244\354\302\330\244\250\244\277\244\244\273\376\244\313\244\317\271\324\244\264\244\310\244\275\244\316\260\314\303\326\244\362\306\376\244\354\302\330\244\250\244\306\244\257\244\300\244\265\244\244\241\243\n\nfig2.gif::\nfig3.jpg::\nfig3.png::\nfig1.png::\n\n=== \245\263\245\341\245\363\245\310\311\325\244\261\n\n\245\263\245\341\245\363\245\310\244\362\244\304\244\261\244\277\244\244\244\310\244\255\244\313\244\317\241\242\260\312\262\274\244\316\244\350\244\246\244\313\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\nfig1.png:: 1 \262\363\314\334\244\316\274\302\270\263\nfig2.gif:: 2 \262\363\314\334\244\316\274\302\270\263\nfig3.jpg:: 3 \262\363\314\334\244\316\274\302\270\263 (jpg \262\350\301\374)\nfig3.png:: 3 \262\363\314\334\244\316\274\302\270\263 (png \262\350\301\374)\n\nHTML \245\277\245\260\244\317\244\275\244\316\244\336\244\336\307\247\274\261\244\265\244\354\244\353\244\316\244\307\241\242\260\312\262\274\244\316\244\350\244\246\244\313\275\361\244\255\271\376\244\340\244\263\244\310\244\254\n\262\304\307\275\244\307\244\271\241\243\n\nfig1.png:: <hr> 1 \262\363\314\334\244\316\274\302\270\263 <br> \274\272\307\324 <hr>\n\n\n=== \245\263\245\341\245\363\245\310\245\242\245\246\245\310\n\n\245\263\245\341\245\363\245\310\245\242\245\246\245\310\244\267\244\277\244\244\276\354\271\347\244\317\271\324\306\254\244\313 \241\326#\241\327\244\362\275\361\244\255\271\376\244\337\244\336\244\271\241\243\n\n# fig2.gif:: 2 \262\363\314\334\244\316\274\302\270\263\n\n\n=== \245\351\245\331\245\353\n\n\262\350\301\374\244\307\244\317\244\312\244\257\241\242\245\263\245\341\245\363\245\310\244\316\244\337\244\362\275\361\244\255\271\376\244\337\244\277\244\244\244\310\244\255\244\317\241\242<\262\350\301\374\314\276> \244\313\n\241\326label\241\327\244\310\265\255\275\322\244\267\244\336\244\271\241\243\n\nlabel:: <hr><table><tr><td>\274\302\270\263\300\337\304\352 2</td><td>\245\321\245\351\245\341\241\274\245\277 3</td></tr></table>\n\n=== \245\271\245\332\241\274\245\271\n\n\260\354\244\304\312\254\310\364\244\320\244\267\244\306\311\275\274\250\244\267\244\277\244\244\273\376\244\317\260\312\262\274\244\316\244\350\244\246\244\313 <\262\350\301\374\314\276> \244\316\311\364\312\254\244\313\262\277\244\342\275\361\244\253\244\312\244\244\244\307\n\262\274\244\265\244\244\241\243\n\n\241\241::\n\n\n== \244\342\244\246\260\354\305\331\274\302\271\324\n\n\272\306\305\331 \#{@sub_rb_name} \244\362\274\302\271\324\244\267\244\336\244\271\241\243\n\n$ ruby \#{@sub_rb_name}\n\n\244\271\244\353\244\310\241\242\276\345\265\255\244\316\265\255\275\322\244\254\310\277\261\307\244\265\244\354\244\277 (({ \#{@index}\#{@index_ext} })) \244\254\n\272\356\300\256\244\265\244\354\244\336\244\271\241\243\245\326\245\351\245\246\245\266\244\307\263\316\307\247\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\n\n== \245\271\245\257\245\352\245\327\245\310\244\316\312\324\275\270 (\261\376\315\321\312\324)\n\n((<\245\271\245\257\245\352\245\327\245\310\244\316\312\324\275\270 (\306\376\314\347\312\324)>)) \244\316\261\376\315\321\310\307\244\307\244\271\241\243\n\n((<\#{@self_name} \244\316 rdoc \245\336\245\313\245\345\245\242\245\353|URL:\#{PUB_DOC_URL}>))\n\244\316 DCModelThumbnail \245\257\245\351\245\271\244\316 Attribute \244\313\300\337\304\352\244\307\244\255\244\353\301\264\244\306\244\316\303\315\n\244\316\276\360\312\363\244\254\244\242\244\353\244\316\244\307\241\242\276\334\244\267\244\257\244\317\244\275\244\301\244\351\244\362\273\262\276\310\244\257\244\300\244\265\244\244\241\243\n\n=== \305\305\307\276\245\265\241\274\245\320\260\312\263\260\244\307\273\310\244\246\244\277\244\341\244\313\n\n\305\305\307\276\245\265\241\274\245\320\260\312\263\260\244\307\244\316\315\370\315\321\244\362\271\315\244\250\244\353\276\354\271\347\244\313\244\317\241\242\262\274\265\255\244\316\300\337\304\352\244\342\312\324\275\270\244\271\244\353\n\311\254\315\327\244\254\244\242\244\353\244\253\244\342\244\267\244\354\244\336\244\273\244\363\241\243\n\n\245\263\245\324\241\274\245\351\245\244\245\310\n\nthumb.copyright = \"GFD Dennou Club\"\n\n\245\271\245\277\245\244\245\353\245\267\241\274\245\310\n\nthumb.css       = \"/GFD_Dennou_Club/ftp/arch/dcmodel/htmltools/dcmodel.css\"\n\nrd2 \245\263\245\336\245\363\245\311\244\330\244\316\245\321\245\271 (\244\263\244\354\244\317\241\242\262\274\265\255\244\307\276\322\262\360\244\271\244\353 RD \244\310\244\244\244\246\275\361\313\241\244\307\n\275\361\244\257\311\254\315\327\244\254\314\265\244\261\244\354\244\320\241\242\300\337\304\352\244\316\311\254\315\327\244\317\244\242\244\352\244\336\244\273\244\363)\n\nthumb.rd2_path  = \"/usr/bin/rd2\"\n\nrd2html-ext-lib \244\316\300\337\304\352 (\244\263\244\354\244\342\241\242\262\274\265\255\244\307\276\322\262\360\244\271\244\353 RD \244\310\244\244\244\246\275\361\313\241\244\307\n\275\361\244\257\311\254\315\327\244\254\314\265\244\261\244\354\244\320\241\242\300\337\304\352\244\316\311\254\315\327\244\317\244\242\244\352\244\336\244\273\244\363)\n\nthumb.rd2htmlextlib = \"/GFD_Dennou_Club/ftp/arch/dcmodel/lib\"\n\n\n=== RD \244\362\273\310\244\244\244\277\244\244\277\315\244\316\244\277\244\341\244\313\n\n\303\346\244\313\244\317\241\242\241\326RD\n((-\nRD (Ruby Documents) \244\344 rdtool \244\313\264\330\244\267\244\306\244\317\241\242\n((<RD\273\366\273\317\244\341|URL:http://www.rubyist.net/~rubikitch/computer/rd-intro/>))\n\244\344\n((<RAA - rdtool|URL:http://raa.ruby-lang.org/project/rdtool/>))\n\244\362\273\262\276\310\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n-))\n\244\307\275\361\244\255\244\277\244\244\241\252\241\252  HTML \244\307\244\312\244\363\244\253\275\361\244\255\244\277\244\257\244\312\244\244\241\252\241\252\241\327\244\310\244\244\244\246\n\244\357\244\254\244\336\244\336\244\317\312\375\244\342\244\244\244\353\244\253\244\342\244\267\244\354\244\336\244\273\244\363\241\243(\244\263\244\354\244\362\275\361\244\244\244\306\244\244\244\353\273\344\244\254\300\265\244\313\244\275\244\246\244\307\244\271\241\243\n\244\275\244\316\244\277\244\341\244\313\244\263\244\316\245\304\241\274\245\353\244\362\262\376\316\311\244\267\244\277\244\310\270\300\244\303\244\306\244\342\262\341\270\300\244\307\244\317\244\242\244\352\244\336\244\273\244\363\241\304)\241\243\n\n\244\275\244\246\244\244\244\246\312\375\244\317\241\242\245\341\245\303\245\273\241\274\245\270\244\316\300\337\304\352\244\316\272\335\244\313\241\242\306\254\244\313 \241\326=begin\241\327\241\242\260\354\310\326\272\307\270\345\244\313\n\241\326=end\241\327\244\310\265\255\275\322\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\nthumb.message   << <<-MSG\n=begin\n= \274\302\270\263\267\353\262\314\n\n\260\312\262\274\244\317\274\302\270\263\267\353\262\314\244\362\260\354\315\367\244\267\244\277\244\342\244\316\244\307\244\242\244\353\n\n== \274\302\270\263\300\337\304\352\n\n* \262\362\301\374\305\331       : T42L20\n* \273\376\264\326\245\271\245\306\245\303\245\327 : 30 s\n:\n:\n=end\nMSG\n\n\244\271\244\353\244\310\241\242\244\263\244\316\276\360\312\363\244\362 rdtool \244\307 HTML \262\275\244\267\244\277\244\342\244\316\244\362\245\265\245\340\245\315\245\244\245\353\244\316\245\325\245\241\245\244\245\353\244\313\n\313\344\244\341\271\376\244\337\244\336\244\271\241\243\n\n=== RT \244\362\273\310\244\244\244\277\244\244\277\315\244\316\244\277\244\341\244\313 (\314\244\274\302\301\365)\n\n((* \303\355\260\325\241\247 *)) \244\263\244\316\265\241\307\275\244\317\244\336\244\300\245\320\241\274\245\270\245\347\245\363 \#{VER} \244\307\244\317\301\310\244\337\271\376\244\336\244\354\244\306\244\244\244\336\244\273\244\363\241\243\n\n\302\276\244\313\244\342\241\242\241\326RT\n((-\n((<RT|URL:http://www.rubyist.net/~rubikitch/computer/rt/>))\n\244\362\273\262\276\310\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n-))\n\244\307\275\361\244\244\244\306\244\337\244\277\244\244\241\252\241\252\241\327\244\310\244\244\244\246\312\375\244\342\244\244\244\353\244\253\244\342\244\267\244\354\244\336\244\273\244\363\241\243\n\n\244\275\244\246\244\244\244\246\312\375\244\317\241\242\245\341\245\303\245\273\241\274\245\270\244\316\300\337\304\352\244\316\272\335\244\313\241\242\306\254\244\313 \241\326=begin RT\241\327\241\242\260\354\310\326\272\307\270\345\244\313\n\241\326=end\241\327\244\310\265\255\275\322\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\nthumb.message   << <<-MSG\n=begin RT\ncaption = \311\275\245\306\245\271\245\310\n\n, \277\315\264\326, == , \270\244 , ==\n||  , \303\313  , \275\367 ,\245\252\245\271,\245\341\245\271\n\nx  , 1.0 , 2.0, 1.1, 1.2\ny  , 0.4 , 0.5, 0.3, 0.1\n\n=end\nMSG\n\n\244\271\244\353\244\310\241\242\244\263\244\316\276\360\312\363\244\362 rttool \244\307 HTML \262\275\244\267\244\277\244\342\244\316\244\362\245\265\245\340\245\315\245\244\245\353\244\316\245\325\245\241\245\244\245\353\244\313\n\313\344\244\341\271\376\244\337\244\336\244\271\241\243\n\n\n=== SIGEN \245\325\245\241\245\244\245\353\300\270\300\256\244\316\245\263\245\363\245\310\245\355\241\274\245\353\n\n\245\307\245\325\245\251\245\353\245\310\244\307\244\317\245\265\245\340\245\315\245\244\245\353\245\325\245\241\245\244\245\353\244\316\272\356\300\256\244\310\306\261\273\376\244\313 SIGEN \245\325\245\241\245\244\245\353\n<http://www.gfd-dennou.org/library/cc-env/mksigen/desc.htm> \244\362\n\272\356\300\256\244\267\244\336\244\271\244\254\241\242\311\324\315\327\244\307\244\242\244\353\276\354\271\347\244\317 mksigen \244\362 false \244\313\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\nthumb.mksigen = false\n\n\n=== \245\355\245\334\245\303\245\310\270\241\272\367\244\316\266\330\273\337\n\n\300\270\300\256\244\271\244\353\245\265\245\340\245\315\245\244\245\353\244\362\245\355\245\334\245\303\245\310\270\241\272\367\244\267\244\306\315\337\244\267\244\257\244\312\244\244\276\354\271\347\244\313\244\317\nnorobots \244\362 true \244\313\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\nthumb.norobots = true\n\n=== \245\265\245\340\245\315\245\244\245\353\262\350\301\374\312\321\264\271\245\304\241\274\245\353\244\316\312\321\271\271\n\n\245\307\245\325\245\251\245\353\245\310\244\307\245\265\245\340\245\315\245\244\245\353\244\362\312\321\264\271\244\271\244\353\245\263\245\336\245\363\245\311\244\252\244\350\244\323\245\252\245\327\245\267\245\347\245\363\244\317\n\260\312\262\274\244\316\304\314\244\352\244\307\244\271\241\243\n\n\#{@convert_cmd}\n\n\244\263\244\354\244\362\312\321\264\271\244\267\244\277\244\244\276\354\271\347\244\313\244\317\260\312\262\274\244\316\244\350\244\246\244\313\300\337\304\352\244\362\271\324\244\303\244\306\244\257\244\300\244\265\244\244\241\243\n\244\277\244\300\244\267\241\242\266\365\307\362\244\316\276\354\271\347\244\344\245\267\245\271\245\306\245\340\244\313\302\270\272\337\244\267\244\312\244\244\245\263\245\336\245\363\245\311\244\254\300\337\304\352\244\265\244\354\244\306\244\244\244\353\n\276\354\271\347\244\313\244\317\245\250\245\351\241\274\244\362\312\326\244\267\244\336\244\271\241\243\n\nthumb.convert_cmd = \"mogrify -geometry\"\n\n\245\307\245\325\245\251\245\353\245\310\244\307\244\317\264\373\244\313\275\320\316\317\300\350\244\313\245\325\245\241\245\244\245\353\244\254\302\270\272\337\244\267\241\242\263\356\244\304\270\265\244\316\245\325\245\241\245\244\245\353\244\350\244\352\244\342\n\277\267\244\267\244\244\276\354\271\347\241\242\273\376\264\326\244\316\303\273\275\314\244\316\244\277\244\341\241\242\262\350\301\374\245\325\245\241\245\244\245\353\244\316\312\321\264\271\244\362\271\324\244\244\244\336\244\273\244\363\241\243\n\244\342\244\267\244\342\313\350\262\363\311\254\244\272\245\325\245\241\245\244\245\353\244\316\312\321\264\271\244\362\271\324\244\244\244\277\244\244\276\354\271\347\244\317\260\312\262\274\244\316\244\350\244\246\244\313\300\337\304\352\244\267\244\306\244\257\244\300\244\265\244\244\241\243\n\nthumb.convert_overwrite = true\n\n\n== \241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\316\312\324\275\270 (\261\376\315\321\312\324)\n\n((<\241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\316\312\324\275\270 (\306\376\314\347\312\324)>)) \244\316\261\376\315\321\310\307\244\307\244\271\241\243\n\n=== \261\246\264\363\244\273\241\246\272\270\264\363\244\273\n\n<\275\244\276\376\273\322>\244\313 \">\" \244\362\275\361\244\255\271\376\244\340\244\310\261\246\264\363\244\273\244\313\241\242\"<\" \244\362\275\361\244\255\271\376\244\340\244\310\272\270\264\363\244\273\244\313\244\312\244\352\244\336\244\271\241\243\n\nfig1.png:>: \261\246\264\363\244\273\244\300\244\350\nfig2.gif:<: \272\270\264\363\244\273\244\300\244\350\nfig3.jpg:: \245\307\245\325\245\251\245\353\245\310\244\317\277\277\244\363\303\346\264\363\244\273\244\300\244\350\n\n\n=== \312\243\277\364\271\324\306\376\316\317\n\n<\275\244\276\376\273\322>\244\313 \"m\" \244\362\275\361\244\255\271\376\244\340\244\263\244\310\244\307\312\243\277\364\271\324\306\376\316\317\244\254\262\304\307\275\244\307\244\271\241\243\n\244\312\244\252\241\242\276\345\265\255\244\316 ((<\261\246\264\363\244\273\241\246\272\270\264\363\244\273>)) \244\310\312\273\315\321\244\271\244\353\276\354\271\347\244\313\244\317\245\253\245\363\245\336 \",\" \244\307\n\266\350\300\332\244\352\244\336\244\271\241\243\306\342\315\306\274\253\302\316\244\317 \"{\" \244\310 \"}\" \244\307\244\257\244\257\244\352\244\336\244\271\241\243\n\nfig1.png:m:{\n<p>\n\312\243\277\364\271\324\306\376\316\317\244\362\271\324\244\246\244\350\241\243\n\244\263\244\246\244\244\244\246\244\263\244\310\244\307\244\255\244\353\244\350\241\243\n\312\330\315\370\244\300\244\315\241\274\241\243\245\306\241\274\245\326\245\353\244\342\275\361\244\255\244\344\244\271\244\244\244\315\241\243\n</p>\n}\nfig2.gif:>,m:{\n<ul>\n<li> \312\273\315\321\244\271\244\353\244\313\244\317\244\263\244\246\244\271\244\353\244\350\241\243\n</ul>\n}\n\n=== \245\325\245\241\245\244\245\353\314\276\310\363\311\275\274\250\n\n<\275\244\276\376\273\322>\244\313 \"b\" \244\362\275\361\244\255\271\376\244\340\244\263\244\310\244\307\245\325\245\241\245\244\245\353\314\276\244\316\311\275\274\250\244\362\315\336\300\251\244\267\244\336\244\271\241\243\n\nfig1.png:b: \245\325\245\241\245\244\245\353\314\276\311\275\274\250\244\254\315\336\300\251\244\265\244\354\244\336\244\271\n\n\301\264\244\306\244\316\245\325\245\241\245\244\245\353\314\276\244\362\260\354\263\347\244\307\315\336\300\251\244\271\244\353\312\375\313\241\244\317 ((<\245\271\245\257\245\352\245\327\245\310\244\316\312\324\275\270 (\306\376\314\347\312\324)>))\n\244\362\273\262\276\310\244\267\244\306\244\257\244\300\244\265\244\244\241\243(\302\260\300\255 blankfig \244\362 true \244\313\300\337\304\352\244\267\244\336\244\271)\241\243\n\n\n=== RD \244\362\273\310\244\244\244\277\244\244\277\315\244\316\244\277\244\341\244\313\n\n<\275\244\276\376\273\322>\244\313 \"rd\" \244\362\275\361\244\255\271\376\244\340\244\263\244\310\244\307\241\242\312\270\273\372\316\363\244\317 RD \244\310\244\267\244\306\262\362\274\341\244\265\244\354\241\242\nrdtool \244\307 HTML \244\313\312\321\264\271\244\265\244\354\244\336\244\271\241\243RD \244\307\245\332\241\274\245\270\306\342\245\352\245\363\245\257\244\362\272\356\300\256\244\271\244\353\n\265\255\313\241\244\342\315\370\315\321\262\304\307\275\244\307\241\242\313\334\312\270\244\344\245\325\245\303\245\277\241\242\245\265\245\340\245\315\245\244\245\353\306\342\244\316\245\330\245\303\245\300\244\313\245\352\245\363\245\257\244\362\n\305\275\244\353\244\263\244\310\244\342\244\307\244\255\244\336\244\271\241\243(\316\343 ((<\245\330\245\303\245\3001>))\241\242((<\245\330\245\303\245\3002>)) )\n\nfig1.png:m,rd:{\n((<\244\352\244\363\244\257|URL:./>)) \244\317\244\263\244\363\244\312\264\266\244\270\244\307\275\361\244\261\244\353\244\350\241\243\n* \245\352\245\271\245\310\244\342\n* \264\312\303\261\nRD \245\351\245\331\245\353\244\362\273\310\315\321\244\267\244\277\245\332\241\274\245\270\306\342\245\352\245\363\245\257\244\317\n((<RD \244\362\273\310\244\244\244\277\244\244\277\315\244\316\244\277\244\341\244\313>)) \244\316\244\350\244\246\244\313\265\255\275\322\244\271\244\354\244\320 OK \244\307\244\271\241\243\n}\n\n\n=== RT \244\362\273\310\244\244\244\277\244\244\277\315\244\316\244\277\244\341\244\313 (\314\244\274\302\301\365)\n\n((* \303\355\260\325\241\247 *)) \244\263\244\316\265\241\307\275\244\317\244\336\244\300\245\320\241\274\245\270\245\347\245\363 \#{VER} \244\307\244\317\301\310\244\337\271\376\244\336\244\354\244\306\244\244\244\336\244\273\244\363\241\243\n\n<\275\244\276\376\273\322>\244\313 \"rt\" \244\362\275\361\244\255\271\376\244\340\244\263\244\310\244\307\241\242\312\270\273\372\316\363\244\317 RT \244\310\244\267\244\306\262\362\274\341\244\265\244\354\241\242\nrttool \244\307 HTML \244\313\312\321\264\271\244\265\244\354\244\336\244\271\241\243\n\nfig1.png:m,rt:{\ncaption = \311\275\245\306\245\271\245\310\n\n, \277\315\264\326, == , \270\244 , ==\n||  , \303\313  , \275\367 ,\245\252\245\271,\245\341\245\271\n\nx  , 1.0 , 2.0, 1.1, 1.2\ny  , 0.4 , 0.5, 0.3, 0.1\n}\n\n\n=== \241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\253\244\351\245\277\245\244\245\310\245\353\244\316\300\337\304\352\n\n((<\245\271\245\257\245\352\245\327\245\310\244\316\312\324\275\270 (\306\376\314\347\312\324)>)) \244\307\245\277\245\244\245\310\245\353\244\316\300\337\304\352\244\313\264\330\244\267\244\306\n\265\255\275\322\244\267\244\336\244\267\244\277\244\254\241\242\241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\253\244\351\244\316\300\337\304\352\244\342\262\304\307\275\244\307\244\271\241\243\n<\262\350\301\374\314\276> \244\313 title \244\310\265\255\275\322\244\267 <\245\263\245\341\245\363\245\310> \244\313\245\277\245\244\245\310\245\353\244\362\275\361\244\255\271\376\244\363\244\307\244\257\244\300\244\265\244\244\241\243\n\ntitle:: \274\302\270\263\300\337\304\352 \302\266\244\316\306\365\n\n((<\245\271\245\257\245\352\245\327\245\310\244\316\312\324\275\270 (\306\376\314\347\312\324)>)) \244\317\276\345\275\361\244\255\244\265\244\354\244\336\244\271\241\243\n\n\n=== \241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\253\244\351\313\334\312\270\245\341\245\303\245\273\241\274\245\270\244\316\304\311\262\303\n\n((<\245\271\245\257\245\352\245\327\245\310\244\316\312\324\275\270 (\306\376\314\347\312\324)>)) \244\307\313\334\312\270\245\341\245\303\245\273\241\274\245\270\244\316\300\337\304\352\244\313\264\330\244\267\244\306\n\265\255\275\322\244\267\244\336\244\267\244\277\244\254\241\242\241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\253\244\351\304\311\262\303\244\342\262\304\307\275\244\307\244\271\241\243\n<\262\350\301\374\314\276> \244\313 message \244\310\265\255\275\322\244\267\241\242\313\334\312\270\245\341\245\303\245\273\241\274\245\270\244\362\275\361\244\255\271\376\244\363\244\307\244\257\244\300\244\265\244\244\241\243\n\nmessage:m,rd:{\n= \245\265\245\363\245\327\245\353\244\300\241\274\n\n== \314\334\274\241\244\307\244\271\n\n=== \244\265\244\351\244\313\314\334\274\241\244\307\244\271\n\n((<\244\333\244\262|URL:thum/sample_thum.txt>))\n}\nmessage:m:{\n<b>HTML</b> \244\307\244\271\244\254\262\277\244\253\314\344\302\352\244\307\244\342\241\251\n<ul>\n<li>\244\301\244\244\244\265\244\312\n<li>\245\306\241\274\245\326\245\353\244\362\n<li>\272\356\244\303\244\306\n<li>\244\337\244\277\244\350\242\366\n</ul>\n<hr>\n}\n\n=== \241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\253\244\351\245\325\245\303\245\277\241\274\245\341\245\303\245\273\241\274\245\270\244\316\304\311\262\303\n\n((<\245\271\245\257\245\352\245\327\245\310\244\316\312\324\275\270 (\306\376\314\347\312\324)>)) \244\307\245\325\245\303\245\277\241\274\245\341\245\303\245\273\241\274\245\270\244\316\300\337\304\352\244\313\264\330\244\267\244\306\n\265\255\275\322\244\267\244\336\244\267\244\277\244\254\241\242\241\326\276\360\312\363\245\325\245\241\245\244\245\353\241\327\244\253\244\351\304\311\262\303\244\342\262\304\307\275\244\307\244\271\241\243\n<\262\350\301\374\314\276> \244\313 footer \244\310\265\255\275\322\244\267\241\242\245\325\245\303\245\277\241\274\245\341\245\303\245\273\241\274\245\270\244\362\275\361\244\255\271\376\244\363\244\307\244\257\244\300\244\265\244\244\241\243\n\nfooter:m,rd:{\n== \245\325\245\303\245\277\241\274\244\307\244\271\n\273\262\271\315\312\270\270\245\244\310\244\253\275\361\244\255\271\376\244\340\244\316\244\313\312\330\315\370\244\253\244\342\244\267\244\354\244\336\244\273\244\363\241\243\n}\n\n=end\n"
596:     debug(@message)
597:   end

Public Instance methods

HTML ファイルの最終的な作成メソッド。最後にこのメソッドを呼ぶことで 作業が完了する。

overwrite に false を与えると、上書きを禁止する。

quiet を true にするとエラーを除く全てのメッセージが表示されなくなる。

verbose を true にすると作業の進捗状況がメッセージとして出力される。

err を true にした場合、意図しない動作が起きた場合にすぐに エラーを起こす。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 1196
1196:   def create(overwrite=true, quiet=nil, verbose=true, err=true)
1197: 
1198:     #
1199:     # サムネイルファイル名
1200:     #
1201:     index_file_name = @index.chomp.strip  +
1202:                       @index_ext.chomp.strip
1203: 
1204:     #
1205:     # 元ファイル削除 (overwrite が nil の場合はエラー)
1206:     #
1207:     if File.exist?(index_file_name)
1208:       if overwrite then
1209:         File.delete(index_file_name)
1210:       else
1211:         raise ArgumentError, "\n\n  Error : \"#{index_file_name}\" exist already.\n\n"
1212:       end
1213:     end
1214: 
1215: 
1216:     #
1217:     # infofile の作成 (既に存在する場合はそのまま)。
1218:     # DCModelThumbnail.info_make メソッドを呼ぶ
1219:     #
1220:     status = info_make(@figdir, @infofile, @ext_list,
1221:                        @headlimit, nil, nil,
1222:                        true, err)
1223:     if verbose then
1224:       if /create/ =~ status
1225:         $stdout.print "  Message : Infofile \"#{@infofile}\" is created.\n"
1226:       elsif /exist/ =~ status
1227:         $stdout.print "  Message : Infofile \"#{@infofile}\" is already exist.\n"
1228:       end
1229:     end
1230: 
1231:     #
1232:     # @message が Array オブジェクト以外の場合はエラーを返す。
1233:     #
1234:     if !@message.instance_of?(Array) then
1235:       warn_or_err(
1236:                   "\"message\" must be Array Object. " +
1237:                   "Please \"message = Array.new\" initially.\n", 
1238:                   true, nil, ArgumentError)
1239:     end
1240: 
1241:     #
1242:     # infofile から情報の取得。
1243:     # DCModelThumbnail.info_get メソッドを呼ぶ。
1244:     #
1245:     $stdout.print "  Message : Get information from \"#{@infofile}\".... " if verbose
1246:     info_list = info_get(@infofile, @headlimit, nil, quiet, err)
1247:     #
1248:     # infofile からの情報のうち、画像ファイル名を "title" にしている
1249:     # ものに関して @title に上書きして、info_list から除く。
1250:     #
1251:     # infofile からの情報のうち、画像ファイル名を "message" にしている
1252:     # ものに関して @message に追加して、info_list から除く。
1253:     #
1254:     info_list_buff = Array.new
1255:     info_list.each{ |info_part|
1256:       if /title/ =~ info_part['fig_name']
1257:         @title = info_part['comment']
1258:       elsif /message/ =~ info_part['fig_name']
1259:         # フォーマットの情報を受けて、"=begin" 等の補完
1260:         if /rd/ =~ info_part['format'] then
1261:           mess_body  = "=begin\n"
1262:           mess_body << info_part['comment']
1263:           mess_body << "\n=end\n"
1264:         elsif /rt/ =~ info_part['format'] then
1265:           mess_body  = "=begin RT\n"
1266:           mess_body << info_part['comment']
1267:           mess_body << "\n=end\n"
1268:         else
1269:           mess_body = info_part['comment']
1270:         end
1271: 
1272:         @message << mess_body
1273: 
1274:       elsif /footer/ =~ info_part['fig_name']
1275:         # フォーマットの情報を受けて、"=begin" 等の補完
1276:         if /rd/ =~ info_part['format'] then
1277:           foot_body  = "=begin\n"
1278:           foot_body << info_part['comment']
1279:           foot_body << "\n=end\n"
1280:         elsif /rt/ =~ info_part['format'] then
1281:           foot_body  = "=begin RT\n"
1282:           foot_body << info_part['comment']
1283:           foot_body << "\n=end\n"
1284:         else
1285:           foot_body = info_part['comment']
1286:         end
1287: 
1288:         @footer << foot_body
1289: 
1290:       # サムネイルに書き込む情報 (これが本命)
1291:       else
1292:         info_list_buff << info_part
1293:       end
1294:     }
1295:     info_list = Array.new
1296:     info_list << info_list_buff
1297:     info_list.flatten!          # 配列の平滑化 (1次元配列化)
1298: 
1299:     $stdout.print "  done.\n" if verbose
1300: 
1301: 
1302:     # @convert_cmd が存在するかどうかチェック
1303:     $stdout.print "  Message : Check converter command .... " if verbose
1304:     convert_cmd_no_opt = @convert_cmd.strip.gsub(/\s+.*/, '')
1305:     convert_cmd_check1 = convert_cmd_no_opt + " -help &> /dev/null"
1306:     convert_cmd_check2 = convert_cmd_no_opt + " --help &> /dev/null"
1307:     raise ArgumentError, "\n\n  Error : \"#{convert_cmd_no_opt}\": command not found.\n\n" \
1308:        if !system(convert_cmd_check1) && !system(convert_cmd_check2)
1309:     $stdout.print "  done.\n" if verbose
1310: 
1311:     # サムネイル画像置き場の作成
1312:     raise IOError, "\n\n  Error: Existing #{@thumbnaildir} is not a directory.\n\n" \
1313:        if File.exists?(@thumbnaildir) && ! File.stat(@thumbnaildir).directory?
1314:     Dir.mkdir(@thumbnaildir) unless File.exists?(@thumbnaildir)
1315: 
1316:     # サムネイル画像の作成
1317:     $stdout.print "  Message : Create small images for thumbnail ....\n" if verbose
1318:     info_list.each_index{ |i|
1319:       thumbnail_name = info_list[i]['fig_name'].sub(/\.\w+$/, @thumbnailtail)
1320:       fig_name = info_list[i]['fig_name']
1321:       $stdout.print "    [#{i + 1}/#{info_list.size}]: " if verbose
1322:       if info_list[i]['fig_name_nohead'].strip.chomp == "label" ||
1323:           info_list[i]['fig_name_nohead'].strip.chomp == "message" ||
1324:           info_list[i]['fig_name_nohead'].strip.chomp == "title" ||
1325:           info_list[i]['fig_name_nohead'].strip.chomp.empty?
1326:         $stdout.print "Skip: No image file.\n" if verbose
1327:       elsif !@convert_overwrite && \
1328:           File.exists?("#{@thumbnaildir}/#{thumbnail_name}") && \
1329:           File.mtime("#{@thumbnaildir}/#{thumbnail_name}") > \
1330:           File.mtime("#{@figdir}/#{fig_name}")
1331:         $stdout.print "Skip: \"#{@thumbnaildir}/#{thumbnail_name}\" is already exist, and newer than \"#{@figdir}/#{fig_name}\"\n" if verbose
1332:       else
1333:         cmd = "#{@convert_cmd} #{@img_width.to_s}x#{@img_height.to_s} '#{@figdir}/#{fig_name}[#{@thumbnailpage}]' '#{@thumbnaildir}/#{thumbnail_name}'"
1334:         $stdout.print cmd if verbose
1335:         $stdout.print "\n" if verbose
1336:         raise "\n\n  Error : \"#{cmd}\": failed.\n\n" if !system(cmd)
1337:       end
1338:       info_list[i]['thumbnail_name']=thumbnail_name
1339:     }
1340: 
1341:     #
1342:     # @message のフォーマットを解析し、HTML に変換する。
1343:     #
1344:     html_message = Array.new
1345:     @message.each{ |mess|
1346:       format = format_parser(mess)
1347: 
1348:       if /rd/ =~ format then
1349:         html_buff = rd2html(mess, true)
1350:       elsif /rt/ =~ format then
1351:         html_buff = rd2html(mess, true)
1352:       else
1353:         html_buff = mess
1354:       end
1355: 
1356:       html_message << html_buff if html_buff
1357:       debug(html_message)
1358:     }
1359:     debug(html_message)
1360: 
1361: 
1362:     #
1363:     # @footer のフォーマットを解析し、HTML に変換する。
1364:     #
1365:     footer_mess = Array.new
1366:     @footer.each{ |mess|
1367:       format = format_parser(mess)
1368: 
1369:       if /rd/ =~ format then
1370:         html_buff = rd2html(mess, true)
1371:       elsif /rt/ =~ format then
1372:         html_buff = rd2html(mess, true)
1373:       else
1374:         html_buff = mess
1375:       end
1376: 
1377:       footer_mess << html_buff if html_buff
1378:       debug(footer_mess)
1379:     }
1380:     debug(footer_mess)
1381:     if !footer_mess.empty?
1382:       footer_mess.unshift "\n<hr size=\"1\">\n"
1383:     end
1384: 
1385:     # 初期化
1386:     html_entire = ""
1387: 
1388:     # HTML ヘッダ部分
1389:     $stdout.print "  Message : Generate HTML Header...." if verbose
1390:     html_entire << html_header 
1391:     $stdout.print "  done.\n" if verbose
1392: 
1393:     # 本文
1394:     $stdout.print "  Message : Insert body messages...." if verbose
1395:     html_message.each { |message|
1396:       html_entire << message
1397:     }
1398:     $stdout.print "  done.\n" if verbose
1399: 
1400:     # サムネイル部分
1401:     $stdout.print "  Message : Generate Thumbnail Lists...." if verbose
1402:     html_entire << html_thum(info_list, quiet, true)
1403:     $stdout.print "  done.\n" if verbose
1404: 
1405:     # フッタメッセージ部分
1406:     $stdout.print "  Message : Insert footer messages...." if verbose
1407:     footer_mess.each { |message|
1408:       html_entire << message
1409:     }
1410:     $stdout.print "  done.\n" if verbose
1411: 
1412:     # HTML フッタ部分
1413:     $stdout.print "  Message : Generate HTML Footer...." if verbose
1414:     html_entire << html_footer
1415:     $stdout.print "  done.\n" if verbose
1416: 
1417:     # ヘッダ, サムネイル, フッタ間のハイパーリンクを有効にする.
1418:     $stdout.print "  Message : Cross hyperlinks between header and thumbnail and footer .... " if verbose
1419:     html_entire = relabel(html_entire)
1420:     $stdout.print "  done.\n" if verbose
1421: 
1422:     # ファイルの書きだし
1423:     $stdout.print "  Message : Output to \"#{index_file_name}\"...." if verbose
1424:     ifile = open(index_file_name, "w")
1425:     ifile.print html_entire
1426:     ifile.close
1427:     $stdout.print "  Successfull. \n" if verbose
1428: 
1429:     # 最後までうまくいったら、SIGEN ファイルも作成する。
1430:     if @mksigen then
1431:       mksigen_file = index_file_name.chomp.strip + ".SIGEN"
1432:       mksigen_thumbdir = @thumbnaildir + ".SIGEN"
1433:       mksigen_thumbdir_title = @title || ""
1434:       mksigen_thumbdir_title << " サムネイル画像置き場ディレクトリ"
1435:       mksigen_src  = relative_str("#{$0}"  , mksigen_file)
1436:       mksigen_info = relative_str(@infofile, mksigen_file)
1437: 
1438:       mksigen_desc = "relative:\#{mksigen_src} \244\310\nrelative:\#{mksigen_info}\n\244\313\244\350\244\352\274\253\306\260\300\270\300\256\n"
1439: 
1440:       mksigen_note = "\244\263\244\316 SIGEN \245\325\245\241\245\244\245\353\274\253\302\316\244\342\nrelative:\#{mksigen_src}\n\244\253\244\351\244\316\274\253\306\260\300\270\300\256\244\307\244\242\244\353\n"
1441: 
1442:       $stdout.print "  Message : Create \"#{mksigen_file}\"...." if verbose
1443:       mksigen_write(mksigen_file, @title, nil,
1444:                     nil, "自動生成",
1445:                     mksigen_desc, mksigen_note)
1446:       mksigen_write(mksigen_thumbdir, mksigen_thumbdir_title, nil,
1447:                     nil, "自動生成",
1448:                     mksigen_desc, mksigen_note) if File.exists?(@thumbnaildir) 
1449:       $stdout.print "  Successfull. \n" if verbose
1450:     end
1451: 
1452:   end

サンプルスクリプト出力用のメソッド。 この DCModelThumbnail クラスに依存するサンプルスクリプトを 引数 filename という名前で出力する。実際には、このファイル を編集・実行することでサムネイルが作成される寸法である。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 1470
1470:   def create_sample_rb(filename)
1471:     if !(str_and_notspace?(filename)) then
1472:       return warn_or_err("filename is invalid.\n",
1473:                          true, nil, ArgumentError)
1474:     end
1475:     
1476:     rb_file_body = "#!/usr/bin/env ruby1.8\n#\n#= dcmodel thumbnail generate ruby script\n#\n#  Editor :: \#{username_from_uid}\n#  Version:: \#{Time.now.strftime(\"%Y/%m/%d %H:%M:%S\")}\n#\n#== Overview\n#\n#This file is generate by following ruby script automatically.\n#\n#      \#{File.expand_path($0.to_s)}\n#      version \"\#{VER}\"\n#\n#Please edit this file according to your purpose.\n#\n#== Usage\n#\n#Please check following sample page and reference manual.\n#\n#  \#{PUB_SAMPLE_URL}\n#  \#{PUB_DOC_URL}\n#\n##################################################\n\nrequire \"\#{File.expand_path($0.to_s)}\"\n\n######################################################\n# DCModelThumbnail \244\316\245\244\245\363\245\271\245\277\245\363\245\271\244\362\272\356\300\256 (\311\254\277\334)\nthumb = DCModelThumbnail.new\n\n# \245\265\245\340\245\315\245\244\245\353\274\302\271\324\245\263\245\336\245\363\245\311 (\311\254\277\334)\241\243\272\307\270\345\244\313\274\302\271\324\244\271\244\353\244\263\244\310\nEND{\nthumb.create\n}\n\n#thumb.copyright = \"\#{@copyright}\"\n# \245\263\245\324\241\274\245\351\245\244\245\310\n\nthumb.index     = \"\#{@index}\"\n# \272\356\300\256\244\265\244\354\244\353\245\265\245\340\245\315\245\244\245\353\244\316\245\325\245\241\245\244\245\353\314\276 (\263\310\304\245\273\322\275\374\244\257)\n\n#thumb.index_ext = \"\#{@index_ext}\"\n# \272\356\300\256\244\265\244\354\244\353\245\265\245\340\245\315\245\244\245\353\244\316\263\310\304\245\273\322\314\276\n\nthumb.infofile  = \"\\#\\{File.basename(thumb.index)\\}.txt\"\n# \241\326\276\360\312\363\245\325\245\241\245\244\245\353 (infofile)\241\327\244\316\245\325\245\241\245\244\245\353\314\276\n\n#thumb.ext_list.push(\"bmp\")\n# \262\350\301\374\245\325\245\241\245\244\245\353\244\310\244\267\244\306\307\247\274\261\244\265\244\273\244\277\244\244\263\310\304\245\273\322\244\316\n# \304\311\262\303\241\243\245\307\245\325\245\251\245\353\245\310\244\307\244\317\n# \#{@ext_list.join(\", \")},\n# \#{@ext_list.join(\", \").swapcase}\n# \244\254\307\247\274\261\244\265\244\354\244\353\241\243\n\n#thumb.headlimit = \"headlimit_\"\n# headlimit \244\313\305\366\244\306\244\317\244\336\244\351\244\312\244\244\244\342\244\316\244\317\262\350\301\374\244\310\n# \244\267\244\306\244\317\314\265\273\353\244\265\244\354\241\242\305\366\244\306\244\317\244\336\244\353\244\342\244\316\244\317\241\326\276\360\312\363\n# \245\325\245\241\245\244\245\353\241\327\244\313\244\252\244\244\244\306\241\242\300\334\306\254\311\364\312\254 headlimit\n# \244\362\276\312\316\254\244\267\244\306\273\330\304\352\244\271\244\353\244\263\244\310\244\254\262\304\307\275\244\310\244\312\244\353\241\243\n\n#thumb.blankfig = true\n# \262\350\301\374\245\325\245\241\245\244\245\353\314\276\244\362\311\275\274\250\244\267\244\312\244\244\n\n#thumb.figdir    = \"\#{@figdir}\"\n# \263\250\244\316\244\242\244\353\245\307\245\243\245\354\245\257\245\310\245\352\244\316\314\276\301\260\241\243\n# \311\254\244\272\302\270\272\337\244\267\244\306\244\244\244\312\244\261\244\354\244\320\244\312\244\351\244\312\244\244\241\243\n\n#thumb.thumbnaildir    = \"\#{@thumbnaildir}\"\n# \245\265\245\340\245\315\245\244\245\353\262\350\301\374\244\362\303\326\244\257\245\307\245\243\245\354\245\257\245\310\245\352\244\316\314\276\301\260\n\n#thumb.thumbnailtail    = \"\#{@thumbnailtail}\"\n# \245\265\245\340\245\315\245\244\245\353\262\350\301\374\244\316\263\310\304\245\273\322\314\276\n\n#thumb.thumbnailpage = \"1\"\n# \245\265\245\340\245\315\245\244\245\353\262\350\301\374\262\275\244\271\244\353\270\265\262\350\301\374\244\316\245\332\241\274\245\270\310\326\271\346\n\n#thumb.convert_cmd = \"\#{@convert_cmd}\"\n# convert \245\263\245\336\245\363\245\311\244\252\244\350\244\323\245\252\245\327\245\267\245\347\245\363\241\243\244\263\244\316\n# \270\345\244\355\244\313\262\350\301\374\245\265\245\244\245\272\244\254 200x150 \244\316\244\350\244\246\244\312\267\301\n# \274\260\244\307\273\330\304\352\244\265\244\354\244\353\241\243\n\n#thumb.convert_overwrite = \#{@convert_overwrite}\n# convert \245\263\245\336\245\363\245\311\244\254\274\302\271\324\244\265\244\354\244\353\272\335\241\242\264\373\244\313\275\320\n# \316\317\300\350\244\316\245\325\245\241\245\244\245\353\244\254\244\242\244\353\276\354\271\347\244\313\276\345\275\361\244\255\244\271\244\353\244\277\n# \244\341\244\316\245\325\245\351\245\260\241\243\244\263\244\354\244\254 false \244\316\276\354\271\347\241\242\275\320\316\317\n# \300\350\244\316\245\325\245\241\245\244\245\353\244\254\302\270\272\337\244\267\241\242\263\356\244\304\270\265\244\316\245\325\245\241\245\244\245\353\n# \244\350\244\352\244\342\277\267\244\267\244\244\276\354\271\347\244\317\312\321\264\271\244\362\271\324\244\357\244\312\244\244\241\243\n\n#thumb.css       = \"\#{@css}\"\n# \245\271\245\277\245\244\245\353\245\267\241\274\245\310\245\325\245\241\245\244\245\353\n\n#thumb.rd2_path  = \"\#{@rd2_path}\"\n# rd2 \245\263\245\336\245\363\245\311\244\330\244\316\245\321\245\271\n\n#thumb.rd2htmlextlib = \"\#{@rd2htmlextlib}\"\n# rd2-ext-lib \244\330\244\316\245\351\245\244\245\326\245\351\245\352\244\330\244\316\245\321\245\271\n\n#thumb.mksigen = false\n# SIGEN \245\325\245\241\245\244\245\353\244\362\272\356\244\351\244\312\244\244\276\354\271\347\244\317 false\n# \244\313\245\273\245\303\245\310\244\271\244\353\n\n#thumb.norobots = true\n# HTML \244\316\245\355\245\334\245\303\245\310\270\241\272\367\244\362\266\330\273\337\244\271\244\353\276\354\271\347\244\313\244\317\n# true \244\313\245\273\245\303\245\310\244\271\244\353\n\n#thumb.img_width  = \#{@img_width}\n# \262\350\301\374\245\325\245\241\245\244\245\353\245\265\245\244\245\272 (\311\375)\n\n#thumb.img_height = \#{@img_height}\n# \262\350\301\374\245\325\245\241\245\244\245\353\245\265\245\244\245\272 (\271\342\244\265)\n\n#thumb.figtable_num = \#{@figtable_num}\n# \262\243\244\313\244\312\244\351\244\331\244\353\245\325\245\241\245\244\245\353\277\364\n\n#thumb.style = <<-STYLE\n#  a:link { color:#269900; }\n#  a:visited { color:#269900; }\n#  a:hover { color:#99FF33; }\n#STYLE\n# \245\271\245\277\245\244\245\353\245\267\241\274\245\310\244\362\304\276\300\334\300\337\304\352\244\271\244\353\244\277\244\341\244\316\244\342\244\316\n# (css \245\325\245\241\245\244\245\353\244\313\275\361\244\255\271\376\244\340\276\360\312\363\244\362\304\276\300\334\273\330\304\352\n# \244\307\244\255\244\353)\n\n#thumb.html_author  = \"\#{@html_author}\"\n# html \244\316\272\356\300\256\274\324\276\360\312\363 (\245\307\245\325\245\251\245\353\245\310\244\317\245\346\241\274\245\266\n# \245\242\245\253\245\246\245\363\245\310\314\276\244\254\274\253\306\260\274\350\306\300\244\265\244\354\244\353)\n\nthumb.title     = \"\#{@title}\"\n# html \245\330\245\303\245\300\244\316\245\277\245\244\245\310\245\353\n\n# \313\334\302\316\244\313\275\361\244\255\275\320\244\271\245\341\245\303\245\273\241\274\245\270\241\243\245\265\245\340\245\315\245\244\245\353\244\316\n# \311\364\312\254\244\350\244\352\244\342\276\345\244\313\275\320\316\317\244\265\244\354\244\353\241\243\244\263\244\316\312\321\277\364\274\253\302\316\n# \244\317 Array \245\252\245\326\245\270\245\247\245\257\245\310\244\307\241\242\244\275\244\316\306\342\311\364\244\313\n# String \245\252\245\326\245\270\245\247\245\257\245\310\244\254\263\312\307\274\244\265\244\354\244\353\241\243\n\n# \245\325\245\303\245\277\241\274\245\341\245\303\245\273\241\274\245\270\241\243\n# \"=\" \244\307\244\317\244\312\244\257\241\242\"<<\" \244\307\302\345\306\376\244\271\244\353\244\263\244\310\244\313\303\355\260\325\241\252\241\252\nthumb.footer    = Array.new\n#thumb.footer    << <<-Footer\n# \#{@footer.join(\"\\n\\n\")}\n#Footer\n\n# \245\341\245\303\245\273\241\274\245\270\241\243\n# \"=\" \244\307\244\317\244\312\244\257\241\242\"<<\" \244\307\302\345\306\376\244\271\244\353\244\263\244\310\244\313\303\355\260\325\241\252\241\252\nthumb.message   = Array.new\nthumb.message   << <<-Message\n\#{@message.join(\"\\n\\n\")}\nMessage\n\n"
1477: 
1478:     #
1479:     # ファイルの作成
1480:     #
1481:     ifile = open(filename, "w")
1482:     ifile.print "#{rb_file_body}"
1483:     ifile.close
1484: 
1485:     #
1486:     # パーミッションの設定
1487:     #
1488:     File.chmod(0755, filename)
1489: 
1490:   end

mes で与えられる本文の行頭を解析し、その本文が HTML であるか、 RD であるか、RT であるのかを判別する。現在、以下のように判定している。

  • 行頭文字が「=begin」、「=begin RD」、「=begin rd」
    • RD のフォーマットであると判別
  • 行頭文字が「=begin RT」、「=begin rt」
    • RT のフォーマットであると判別
  • 上記以外
    • HTML フォーマットであると判別

返り値は "html", "rd", "rt" のいづれかである。なお、body に String オブジェクト以外、もしくは完全に空白のみが入っている場合、 nil を返す。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2392
2392:   def format_parser(body=nil)
2393:     debug(body)
2394:     if !(str_and_notspace?(body)) then
2395:       return warn_or_err("\"body\" is not String Object.\n")
2396:     end
2397: 
2398:     Kconv::toeuc(body)
2399:     body_parts = body.split("\n")
2400: 
2401:     body_parts.each{ |line|
2402:       next unless /\w+/e =~ line.chomp.strip
2403:       if /=begin\s+(rt)/ie =~ line.chomp.strip
2404:         return "rt"
2405:       elsif /=begin/ie =~ line.chomp.strip
2406:         return "rd"
2407:       elsif /=begin\s+(rd)/ie =~ line.chomp.strip
2408:         return "rd"
2409:       else
2410:         return "html"
2411:       end
2412:     }
2413:     return nil
2414:   end

フッター作成用メソッド。相当する文字列を返す。 DCModelThumbnail.html_header で得られる文字列で始まる HTML を 閉じることを想定している。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2341
2341:   def html_footer()
2342:     # @index のディレクトリから見た、生成スクリプトの相対的な位置
2343:     generator = relative_str("#{$0}", @index)
2344: 
2345:     # @index のディレクトリから見た、情報ファイルの相対的な位置
2346:     infofile  = relative_str(@infofile, @index)
2347: 
2348:     #
2349:     # フッターとして書き出し
2350:     #
2351:     html_footer = "<hr size=\"1\">\n<center>\n<small>\nThis page is generated by <a href=\\\"\#{generator}\\\">\#{generator}</a>\nand <a href=\\\"\#{infofile}\\\">\#{infofile}</a>\n(\#{Time.now.strftime(\"%Y/%m/%d %H:%M:%S\")} \#{username_from_uid})<br>\n\#{@self_name}\n[<a href=\"\#{PUB_BIN_URL}\">Script</a> |\n<a href=\"\#{PUB_DOC_URL}\">Doc</a> | <a href=\"\#{PUB_SAMPLE_URL}\">Sample</a>]\nis provided by\n<a href=\"http://www.gfd-dennou.org/library/dcmodel\">dcmodel project</a>\nin\n<a href=\"http://www.gfd-dennou.org\">GFD Dennou Club</a> <br>\nCopyright &copy; \#{@copyright} \#{Time.now.strftime(\"%Y\")}\n</small>\n</center>\n</body>\n</html>\n"
2352:     return html_footer
2353:   end

HTML のヘッダ部分の作成メソッド。相当する文字列を返す。 作成した HTML は DCModelThumbnail.html_footer で得られる文字列で 閉じられることを想定している。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2074
2074:   def html_header()
2075:     # @index のディレクトリから見た、生成スクリプトの相対的な位置
2076:     generator = relative_str("#{$0}", @index)
2077: 
2078:     # @index のディレクトリから見た、css の相対的な位置
2079:     css       = relative_str(@css, @index)
2080: 
2081:     # @norobots が ture であれば、meta タグに書き込み。
2082:     if @norobots then
2083:       robots = "<meta name=\"robots\" content=\"noindex,nofollow\" />\n<meta name=\"robots\" content=\"noarchive\" />\n"
2084:     end
2085: 
2086:     # @style で指定されているものがあれば、それも書き込み。
2087:     if str_and_notspace?(@style) then
2088:       style = "<style type=\"text/css\">\n<!--\n\#{@style}\n-->\n</style>\n"
2089:     else
2090:       style = ""
2091:     end
2092: 
2093:     #
2094:     # ヘッダ全体の生成
2095:     #
2096:     header = "<?xml version=\"1.0\" encoding=\"euc-jp\" ?>\n<!DOCTYPE html\nPUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html lang=\"ja\" xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<title>\#{@title}</title>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-euc-jp\" />\n<meta name=\"Author\" content=\"\#{@html_author}\" />\n\#{robots}\n<meta name=\"generator\" content=\"\#{generator}\" />\n<link href=\"\#{css}\" type=\"text/css\" rel=\"stylesheet\" />\n\#{style}\n</head>\n<body>\n"
2097:     return header
2098:   end

HTML のサムネイル部分 (画像の数に応じて繰り返す部分) を作成するメソッド。 相当する文字列を返す。info_list には DCModelThumbnail.info_get で 取得される形式の情報ファイルが与えられる。

それ以外の形のデータが与えられる場合には警告を発して nil を返す。 ただし、err に true を与えると、エラーが生じる。 quiet が true の場合には警告メッセージも表示しない。

内部で DCModelThumbnail.html_thum_parts を呼び、各要素はそちらで 作成する。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2140
2140:   def html_thum(info_list=nil, quiet=nil, err=nil)
2141: 
2142:     #
2143:     # 引数に与えられたデータの検証
2144:     #
2145:     if !array_and_notzero?(info_list) then
2146:       return warn_or_err(
2147:                          "\"info_list\" is invalid.\n",
2148:                          err, quiet, ArgumentError)
2149:     end
2150: 
2151:     #
2152:     # table タグを作成
2153:     #
2154:     html_table = ""
2155: 
2156:     html_table = "<table border=\"0\" cellspacing=\"10\" align=\"center\">\n"
2157: 
2158:     #
2159:     # 中身を作成
2160:     #
2161:     info_list.size.times{ |num|
2162:       html_table << html_thum_parts(info_list, num, quiet, err)
2163:     }
2164: 
2165:     #
2166:     # もしも、info_list.size が @figtable_num で割り切れない場合、
2167:     # 残り分の空白 td を作成する
2168:     #
2169:     remain = @figtable_num - (info_list.size % @figtable_num)
2170:     td_width   = (100 / @figtable_num).truncate.to_s + "%"  # 一つの td の幅
2171: 
2172:     if !(remain == 0) then
2173:       remain.times{ |time|
2174:         html_table << "<td width=\"\#{td_width}\" valign=\"top\">\n&nbsp;\n</td>\n"
2175:       }
2176:       html_table << "</tr>\n"
2177:     end
2178: 
2179:     #
2180:     # /table タグを作成
2181:     #
2182:     html_table << "</table>\n"
2183: 
2184:     return html_table
2185:   end

HTML のサムネイル部分の内部 (テーブルの1要素毎) を作成するメソッド。 相当する文字列を返す。info_list には DCModelThumbnail.info_get で 取得される形式の情報ファイルを、num には何番目のデータなのかを 示す Numerical オブジェクトを与える。

それ以外の形のデータが与えられる場合には警告を発して nil を返す。 ただし、err に true を与えると、エラーが生じる。 quiet が true の場合には警告メッセージも表示しない。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2212
2212:   def html_thum_parts(info_list=nil, num=nil, quiet=nil, err=nil)
2213:     #
2214:     # 引数に与えられたデータの検証
2215:     #
2216:     if !array_and_notzero?(info_list) then
2217:       return warn_or_err(
2218:                          "\"info_list\" is invalid.\n",
2219:                          err, quiet, ArgumentError)
2220:     end
2221: 
2222:     if !num.kind_of?(Integer)
2223:       return warn_or_err(
2224:                          "\"num\" is not integer.\n",
2225:                          err, quiet, ArgumentError)
2226:     end
2227: 
2228:     #
2229:     # info_list からデータの取得
2230:     #
2231:     fig_name        = info_list[num]['fig_name'] # 画像ファイル名
2232:     thumbnail_name  = info_list[num]['thumbnail_name'] # サムネイル画像名
2233:     comment         = info_list[num]['comment']  # コメント
2234:     align           = info_list[num]['align']    # 文字寄せ
2235:     fig_name_nohead = info_list[num]['fig_name_nohead'] # 省略画像ファイル名
2236:     format          = info_list[num]['format']   # comment のフォーマット
2237:     blankfig        = info_list[num]['blankfig'] # 画像名非表示
2238:     debug(fig_name, comment, align, fig_name_nohead)
2239: 
2240:     #
2241:     # format から、comment の変換処理
2242:     #
2243:     if /rd/ =~ format then
2244:       comment_buff = rd2html(comment)
2245:     elsif /rt/ =~ format then
2246:       comment_buff = rd2html(comment)
2247:     else
2248:       comment_buff = "#{comment}"
2249:     end
2250:     comment = "#{comment_buff}"
2251: 
2252:     #
2253:     # @index からの相対的な @figdir の設定
2254:     #
2255:     rel_figdir = relative_str(@figdir, @index)
2256: 
2257:     #
2258:     # @index からの相対的な @thumbaildir の設定
2259:     #
2260:     rel_thumbnaildir = relative_str(@thumbnaildir, @index)
2261: 
2262:     #
2263:     # テーブルの配置によって <tr> のつけたしをおこなう。
2264:     # (num はゼロからスタートすることに注意)
2265:     # 左端 : @figtable_num * n       (remainder == 0)
2266:     # 右端 : @figtable_num * n - 1   (remainder == @figtable - 1)
2267:     #
2268:     remainder  = num % @figtable_num    # 余り
2269:     figtable_1 = @figtable_num - 1      # 列数 - 1
2270:     td_width   = (100 / @figtable_num).truncate.to_s + "%"  # 一つの td の幅
2271:     debug(num, remainder, figtable_1, @figtable_num, td_width)
2272: 
2273:     html_table_part  = ""
2274: 
2275:     # 左端用の <tr> タグ
2276:     if remainder == 0 then
2277:       html_table_part = "<tr valign=\"center\">\n"
2278:     end
2279: 
2280:     # 画像ファイル名が "label" の場合には comment をそのまま書き出す。
2281:     if /^label$/ =~ fig_name_nohead.chomp.strip then
2282:       html_table_part << "<td align=\"\#{align}\" width=\"\#{td_width}\" valign=\"center\">\n<small>\n\#{comment}\n</small>\n</td>\n"
2283: 
2284:     # 画像ファイル名が存在しない場合は空白を書き出す。
2285:     elsif !(str_and_notspace?(fig_name_nohead)) then
2286:       html_table_part << "<td align=\"\#{align}\" width=\"\#{td_width}\" valign=\"top\">\n&nbsp;\n</td>\n"
2287: 
2288:     # 上記以外の場合には、絵の縮小版とそのリンクを張り込む
2289:     else
2290:       if blankfig || @blankfig
2291:         fig_name_show = ""
2292:       else
2293:         fig_name_show = "\n             #{fig_name_nohead}<br>\n"
2294:       end
2295:       html_table_part << "<td align=\"center\" width=\"\#{td_width}\" valign=\"top\">\n<a href=\"\#{rel_figdir}/\#{fig_name}\">\n<img src=\"\#{rel_thumbnaildir}/\#{thumbnail_name}\" border=\"1\" width=\"\#{@img_width.to_s}\" height=\"\#{@img_height.to_s}\">\n</a>\n<div align=\"\#{align}\">\n<small>\#{fig_name_show}\n\#{comment}<br><br>\n</small>\n</div>\n</td>\n"
2296:     end
2297: 
2298:     # 右端用の </tr> タグ
2299:     if remainder == figtable_1 then
2300:       html_table_part << "</tr>\n"
2301:     end
2302: 
2303:     return html_table_part
2304:   end

DCModelThumbnail.info_make によって作成される「情報ファイル」 infofile から画像ファイル名とコメント、および修飾情報を取り出し、 Array[Hash, …] にして返す。 各要素の Hash にはキーに値の種類の文字列を格納してある。 以下は現在 Hash のキーとして取得されるものである。

  • fig_name
    • ファイル名である。1 つ目の区切り文字 (DCModelThumbnail.info_make の INFO_DELIMITER 参照) よりも前の文字列をこのキーの値として取得する。なお、 引数 headlimit が与えられる場合、情報ファイルの文字列の 頭に headlimit を付加する。
  • fig_name_nohead
    • fig_name と同様にファイル名である。ただし、こちらは 引数 headlimit が与えられる場合でも、情報ファイルから得られる 文字列のみを格納する。
  • comment
    • サムネイルの個々の画像の下に付加されるコメントである。 2 つ目の区切り文字以降の文字列がこのキーの値として取得される。 なお、デフォルトでは改行文字までをコメントとして読み込むが、 修飾子に "m" が入る場合、その後の"{" から "}" までの間の文字 を読み込む。(改行文字も含める)。
  • align
    • コメントの文字寄せ情報である。1つ目と2つ目の区切り文字の間に 下記の文字列を入れることで、下記のそれに対応する値が格納される。 なお、デフォルトでは "center" が格納される。
      • "<" : 左寄せを示し、値に "left" を格納する。
      • ">" : 右寄せを示し、値に "right" を格納する。
  • format
    • フォーマットの情報である。 下記の文字列を入れることで、下記のそれに対応する値が格納される。 なお、デフォルトでは "html" が格納される。
      • "rd" : RD フォーマットであることを示す。
      • "rt" : RT フォーマットであることを示す。
  • blankfig
    • HTML へファイル名を表示しない。
  • line
    • 情報ファイルの該当情報の「行数」が格納される。 複数行が指定される場合は "4-10" というように格納される。

delimiter (String オブジェクト) は情報ファイルの 画像ファイル名・修飾情報・コメントの区切り文字を設定する ものであり、デフォルトは定数 INFO_DELIMITER にて設定されている。 一応変更できるようになっているが、原則的に変更しない 事を薦める。

quiet を真にすると、ファイルがない際にもメッセージを表示しない。

err を真にすると、ファイルが見つからない際にエラー処理をする。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 1851
1851:   def info_get(infofile=nil, headlimit=nil, delimiter=nil, 
1852:                quiet=nil, err=nil)
1853: 
1854:     # delimiter のセット
1855:     if !(str_and_notspace?(delimiter)) then
1856:       delimiter = INFO_DELIMITER
1857:     end
1858: 
1859:     info_list = Array.new
1860: 
1861:     # ファイルが読み取れるかチェック
1862:     if !(File.readable?(infofile)) then
1863:         return warn_or_err("\"#{infofile}\" is not readable. \n",
1864:                            err, quiet, ArgumentError)
1865:     end
1866: 
1867:     # 実際にファイルを開く
1868:     ifile = open(infofile, "r")
1869: 
1870:     line_num = 0
1871:     multi_valid = false  # 複数行取得用のフラグ
1872:     multi_first = true  # 複数行取得用のフラグ
1873: 
1874:     start_char = Regexp.quote(INFO_MULTI_START) # 複数行開始 "{"
1875:     stop_char  = Regexp.quote(INFO_MULTI_STOP)  # 複数行停止 "}"
1876: 
1877:     info_hash_tmp = Hash.new
1878: 
1879:     ifile.each { |line|
1880: 
1881:       # 探索したデータの格納用配列とハッシュ
1882:       info_part = Array.new
1883:       info_hash = Hash.new
1884: 
1885:       # 行数を数える
1886:       line_num += 1
1887: 
1888:       debug("line=", line_num, ":", "multi=", multi_valid)
1889: 
1890:       info_part = line.chomp.split(/#{delimiter}/, 3)
1891:       info_hash['fig_name_nohead'] = info_part[0]  ||  ""
1892:       info_hash['comment']         = info_part[2]  ||  ""
1893:       info_hash['line']            = line_num.to_s
1894: 
1895:       # 行頭が "#", または完全に空行の場合はコメントアウトと考えて無視。
1896:       if /^\s*#/ =~ info_part[0] then
1897:         next
1898:       elsif !(str_and_notspace?(line)) then
1899:         next
1900:       end
1901: 
1902:       # info_hash['fig_name'] の設定
1903:       if str_and_notspace?(headlimit) then
1904:         info_hash['fig_name'] = 
1905:            headlimit.chomp.strip + info_hash['fig_name_nohead'].chomp.strip
1906:       else
1907:         info_hash['fig_name'] = info_hash['fig_name_nohead']
1908:       end
1909: 
1910:       #
1911:       # 修飾子の解析 (万が一のことを考え、日本語も処理)。
1912:       #
1913:       if !(str_and_notspace?(info_part[1])) then
1914:         modifier = ""
1915:       else
1916:         modifier = Kconv::toeuc(info_part[1].chomp.strip)
1917:         #
1918:         # 日本語らしきものが入っていたら警告またはエラー
1919:         # ただし、複数行処理の場合は気にしない。(文中に「:」が
1920:         # 入っていることも考えられるので
1921:         #
1922:         if !(modifier == Kconv::toeuc(modifier)) ||
1923:            !(modifier == Kconv::tojis(modifier)) ||
1924:            !(modifier == Kconv::tosjis(modifier)) then
1925: 
1926:           if !(multi_valid) then
1927:             warn_or_err(
1928:                         "\"#{modifier}\" include 2 bite code, " +
1929:                         "so this may not be parsed correctly.\n",
1930:                         err, quiet, ArgumentError)
1931:           end
1932:         end
1933:       end
1934: 
1935:       #
1936:       # 修飾子の分割
1937:       #
1938:       modifier_parts = modifier.split(",")
1939: 
1940:       # 文字寄せ情報の解析
1941:       info_hash['align'] = "center"  # デフォルト値
1942:       modifier_parts.each{ |char|
1943:         if />/ =~ char.chomp.strip then
1944:           info_hash['align'] = "right"
1945:           break
1946:         elsif /</ =~ char.chomp.strip then
1947:           info_hash['align'] = "left"
1948:           break
1949:         end
1950:       }
1951: 
1952:       # フォーマット情報の解析
1953:       info_hash['format'] = "html" # デフォルト値
1954:       modifier_parts.each{ |char|
1955:         if /rd/ =~ char.chomp.strip then
1956:           info_hash['format'] = "rd"
1957:           break
1958:         elsif /rt/ =~ char.chomp.strip then
1959:           info_hash['format'] = "rt"
1960:           break
1961:         end
1962:       }
1963: 
1964:       # ファイル名の非表示フラグ
1965:       info_hash['blankfig'] = false # デフォルト値
1966:       modifier_parts.each{ |char|
1967:         if /b/ =~ char.chomp.strip then
1968:           info_hash['blankfig'] = true
1969:           break
1970:         end
1971:       }
1972: 
1973:       # 複数行を取得するかどうかの解析
1974:       modifier_parts.each{ |char|
1975:         if /m/ =~ char.chomp.strip then
1976:           debug(info_hash['comment'])
1977:           debug(str_and_notspace?(info_hash['comment']))
1978:           if str_and_notspace?(info_hash['comment']) &&
1979:               /#{start_char}/e =~ Kconv::toeuc(info_hash['comment']) then
1980:             multi_valid = true
1981:             break
1982:           end
1983:         end
1984:       }
1985: 
1986:       # 複数行取得が有効になっている場合は、値を一時
1987:       # ここで止め、次のループへ回す。
1988:       if multi_valid then
1989: 
1990:         # 文字コード変換等をまともに行うため、line および
1991:         # info_hash['comment'] を別の文字列に置き換え
1992:         if !(str_and_notspace?(line)) then
1993:           line_tmp = "\n"
1994:         else
1995:           line_tmp = line
1996:         end
1997:         if !(str_and_notspace?(info_hash['comment']))  then
1998:           comment_tmp = "\n"
1999:         else
2000:           comment_tmp = info_hash['comment']
2001:         end
2002: 
2003:         # 初回の場合は、各値を保持しておく。
2004:         if multi_first then
2005:           info_hash_tmp = info_hash.dup
2006: 
2007:           # "{" 以降のみを comment として保持
2008:           if !(line_tmp.split(INFO_MULTI_START)[1])
2009:             info_hash_tmp['comment'] = "\n"
2010:           else
2011:             info_hash_tmp['comment'] = 
2012:                          line_tmp.split(INFO_MULTI_START)[1]
2013:           end
2014: 
2015:           multi_first = false
2016: 
2017:           # もしも同じ行に "}" もある場合にはそこで終了
2018:           if /#{stop_char}/e =~ Kconv::toeuc(info_hash_tmp['comment']) then
2019:             info_hash_tmp['comment'] = 
2020:                  info_hash_tmp['comment'].split(INFO_MULTI_STOP)[0]
2021: 
2022:             # フラグの初期化
2023:             multi_valid = false
2024:             multi_first = true
2025: 
2026:             # 値を info_hash に戻す。
2027:             info_hash = info_hash_tmp.dup
2028: 
2029:             # 脱出して info_hash を info_list へ (next で脱出しない)
2030: 
2031:           # 同じ行に "}" が無い場合は info_list へ格納せずに次の行へ
2032:           else
2033:             next
2034:           end
2035: 
2036:         # 初回以降、まだ "}" がコメントに無い場合
2037:         elsif !(/#{stop_char}/e =~ Kconv::toeuc(line_tmp)) then
2038:           info_hash_tmp['comment'] << line_tmp
2039: 
2040:           # info_list に渡さずにループを回す
2041:           next
2042: 
2043:         # コメントに "}" が現れ、終了する際
2044:         else
2045:           if !(line_tmp.split(INFO_MULTI_STOP)[0])
2046:             last_comment = ""
2047:           else
2048:             last_comment = line_tmp.split(INFO_MULTI_STOP)[0]
2049:           end
2050:           info_hash_tmp['comment'] << last_comment
2051: 
2052:           # フラグの初期化
2053:           multi_valid = false
2054:           multi_first = true
2055: 
2056:           # 値を info_hash に戻す。
2057:           info_hash = info_hash_tmp.dup
2058:         end
2059:       end
2060: 
2061:       # 値を info_list に格納。
2062:       info_list.push(info_hash)
2063:     }
2064:     ifile.close
2065: 
2066:     return info_list
2067:   end

画像ファイル名・修飾情報・コメントを含む「情報ファイル」を作成するための メソッド。

figdir (String オブジェクト) 内の拡張子 ext_list (Array オブジェクト) にヒットするファイル名 をリストにし、infofile (String オブジェクト) に書き出す。

headlimit (String オブジェクト) を渡すと、ファイル名の頭が headlimit にヒットするものだけを拾い、リストからはその部分を 取り除くようにする。

overwrite を true にすると、infofile が存在する場合でも 上書きする。また、quiet を true にすると警告メッセージを表示しない。

delimiter (String オブジェクト) は情報ファイルの 画像ファイル名・修飾情報・コメントの区切り文字を設定する ものであり、デフォルトは定数 INFO_DELIMITER にて設定されている。 一応変更できるようになっているが、原則的に変更しない 事を薦める。

ファイルを作成したときは "create"、既存のものがすでに存在する 場合には "exist" を返す。画像ファイルが一つも読み込めない、 すなわち空のファイルを作成してしまった時や、既存のものが無く、 なおかつ作成に失敗した場合はエラーを起こす。(引数 err を false にした場合には警告を表示するだけである)

ここで作成されるファイルは DCModelThumbnail.info_get で取得される ファイルの雛形である。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 1707
1707:   def info_make(figdir=nil, infofile=nil, ext_list=nil,
1708:                 headlimit=nil, overwrite=nil, delimiter=nil,
1709:                 quiet=nil, err=true)
1710: 
1711:     # infofile があり、overwrite が false の場合は終了。
1712:     if File.exist?(infofile) && !overwrite then
1713:       warn_or_err("Infofile \"#{infofile}\" already exist. " +
1714:                   "So not generate infofile once again.\n",
1715:                   nil, quiet)
1716:       return "exist"
1717:     end
1718: 
1719:     # 引数の有効性の検証
1720:     if !(str_and_notspace?(figdir)) then
1721:       return warn_or_err("\"figdir\" is not specified. " + 
1722:                          "So \"infofile\" is not generated. \n",
1723:                          err, quiet, ArgumentError)
1724: 
1725:     elsif !(str_and_notspace?(infofile)) then
1726:       return warn_or_err("\"infofile\" is not specified. " + 
1727:                          "So \"infofile\" is not generated. \n",
1728:                          err, quiet, ArgumentError)
1729: 
1730:     elsif !(array_and_notzero?(ext_list)) then
1731:       return warn_or_err("\"ext_list\" is not specified. " + 
1732:                          "So \"infofile\" is not generated. \n",
1733:                          err, quiet, ArgumentError)
1734:     end
1735: 
1736:     # delimiter のセット
1737:     if !(str_and_notspace?(delimiter)) then
1738:       delimiter = INFO_DELIMITER
1739:     end
1740: 
1741:     # headlimit の整形
1742:     if !(str_and_notspace?(headlimit)) then
1743:       headlimit = ""
1744:     end
1745: 
1746:     # figdir から画像ファイル名一覧をとりだし, 配列 imgfiles へ代入
1747:     imgfiles = Array.new
1748:     Dir.foreach("#{figdir}") { |item|
1749:       ext_list.each{ |ext|
1750:         next if !(str_and_notspace?(ext))
1751: 
1752:         # ドットが付いていない場合はドットをつける
1753:         if !(/^\.(.*)/ =~ ext) then
1754:           ext = "." + ext.chomp.strip
1755:         end
1756: 
1757:         # 拡張から有効か判定
1758:         next unless /#{ext}$/i =~ item
1759: 
1760:         # headlimit から有効か判定
1761:         if str_and_notspace?(headlimit) then
1762:           if /^#{headlimit}(.+)$/ =~ item
1763:             bodyname = $1
1764:           else
1765:             next
1766:           end
1767:         else
1768:           bodyname = item
1769:         end
1770: 
1771:         # imgfiles への格納
1772:         #imgfiles.push( (File.basename(bodyname, ext) )  )
1773:         imgfiles.push( bodyname )
1774:       }
1775:     }
1776: 
1777:     # もしも画像情報が取り出せていなかったら警告 or エラー
1778:     if !(imgfiles.size > 0) then
1779:       if str_and_notspace?(headlimit)
1780:         errmsg = "Image files \"#{headlimit}...\" are not found in \"#{figdir}\".\n"
1781:       else
1782:         errmsg = "Image files are not found in \"#{figdir}\".\n"
1783:       end
1784:       return warn_or_err(errmsg, err, quiet, ArgumentError)
1785:     end
1786: 
1787:     imgfiles = imgfiles.sort
1788: 
1789:     # infofile に書き込み
1790:     ifile = open(infofile, "w")
1791:     imgfiles.each{ |filename|
1792:       ifile.print "#{filename}#{delimiter}#{delimiter}\n"
1793:     }
1794:     ifile.close
1795: 
1796:     return "create"
1797:   end

SIGEN ファイル作成メソッド。 書式等詳しいことは <www.gfd-dennou.org/library/cc-env/mksigen/desc.htm> を参照のこと

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2622
2622:   def mksigen_write(file=nil  , subject=nil    , maintainer=nil, 
2623:                     update=nil, update_info=nil,
2624:                     desc=nil  , note=nil       , prune=nil     , 
2625:                     quiet=nil , err=true)
2626:     # 引数の検査
2627:     if !(str_and_notspace?(file)) then
2628:       return warn_or_err("\"file\" is not specified.",
2629:                          err, quiet, ArgumentError)
2630:     end
2631:     if !(str_and_notspace?(subject)) then
2632:       return warn_or_err("\"subject\" is not specified.",
2633:                          err, quiet, ArgumentError)
2634:     end
2635: 
2636:     # 引数が無効でも補完するもの
2637:     if !(str_and_notspace?(maintainer)) then
2638:       maintainer = jpname_from_uid || username_from_uid || "Unknown"
2639:     end
2640:     if !(str_and_notspace?(update)) then
2641:       update = Time.now.strftime("%Y/%m/%d")
2642:     end
2643:     if !(str_and_notspace?(update_info)) then
2644:       update_info  = ""
2645:     end
2646:     if !(str_and_notspace?(desc)) then
2647:       desc   = ""
2648:     end
2649:     if !(str_and_notspace?(note)) then
2650:       note   = ""
2651:     end
2652:     if prune then
2653:       prune  = "Prune: 1"
2654:     else
2655:       prune  = ""
2656:     end
2657: 
2658:     #
2659:     # 出力内容の格納
2660:     #
2661:     sigen = "Subject:        \#{subject.chomp}\nMaintainer:     \#{maintainer.chomp}\nDescription:    \#{desc.chomp}\nNote:           \#{note.chomp}\nUpdate:         \#{update.chomp}  \#{update_info.chomp}\n\#{prune}\n"
2662: 
2663:     #
2664:     # 文字コード設定
2665:     #
2666:     Kconv::toeuc(sigen)
2667: 
2668:     #
2669:     # ファイルの作成
2670:     #
2671:     ifile = open(file, "w")
2672:     ifile.print "#{sigen}"
2673:     ifile.close
2674: 
2675:   end

引数 rd に与えられた文字列を rd2html を掛けた文字列として 返す。デフォルトでは "=begin" や "=end" が存在しない文字列を 想定している。この場合、rd 文字列を "=begin" と "=end" ではさまれたものとして自動的に解釈する。もしも "=begin" や "=end" が書き込まれた文字列を rd として与えたい場合は 引数 beginend を true にすること。返される html は <body> 以上と </body> 以下は省かれた本文部分のみである。

err が nil や false の場合、mes に与えられたメッセージを 警告として表示する。err が真の場合はそのメッセージの出力 と同時にエラーを発生させ、プログラムを終了させる。

もしも rd2 コマンドが存在しない場合には nil を返す。

なお、現在は rd2html-ext-lib を必ず利用するようになっているので インスタンス変数 rd2htmlextlib を適宜設定しないとまともに 動かないので注意すること。

返される文字列を探査し、A タグの NAME, HREF 属性に用いられる "label-XX" のナンバーを保持しておき、再度このメソッドが呼ばれた場合には、 文字列内の "label-XX" のナンバーを自動的に繰り上げる。

relabel メソッドを呼ぶことで、別々の rd2html で HTML に変換された 文字列内のラベルのリンクを作成する。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2442
2442:   def rd2html(rd=nil, beginend=true, quiet=nil, err=nil)
2443:     debug(rd)
2444: 
2445:     if !(FileTest.executable?(@rd2_path)) then
2446:       return warn_or_err(
2447:                          "\"#{@rd2_path}\" is not excutable.\n",
2448:                          err, quiet, ArgumentError)
2449:     elsif !rd
2450:       return warn_or_err(
2451:                          "\"rd\" is invalid.\n",
2452:                          err, quiet, ArgumentError)
2453:     end
2454: 
2455:     debug(@rd2_path)
2456: 
2457:     # "=begin" や "=end" を消去するための処理 (行頭のものしか消さない)
2458:     rd_body = ""
2459:     if beginend then
2460:       rd_parts = rd.split("\n")
2461:       debug(rd_parts)
2462:       rd_parts.each { |line|
2463:         if /^=begin\s+.*/ =~ line then
2464:           next
2465:         elsif /^=begin$/ =~ line then
2466:           next
2467:         elsif /^=end\s+.*/ =~ line then
2468:           next
2469:         elsif /^=end$/ =~ line then
2470:           next
2471:         else
2472:           rd_body << line + "\n"
2473:         end
2474:       }
2475:     else
2476:       rd_body = "#{rd}"
2477:     end
2478:     debug(rd_body)
2479: 
2480: 
2481:     # rd で得られた文字列を /tmp/dcmodel-thum-$$.rd に一時的に格納
2482:     rdfile_tmp = @tmp + "/" + File.basename($0.to_s) + "-" + $$.to_s
2483:     debug(rdfile_tmp)
2484: 
2485:     tmpfile = open(rdfile_tmp, "w")
2486:     tmpfile.print "=begin\n"
2487:     tmpfile.print rd_body
2488:     tmpfile.print "\n=end\n"
2489:     tmpfile.close
2490: 
2491:     debug(open(rdfile_tmp){|io| io.read})
2492: #    print "#{open(rdfile_tmp){|io| io.read}}"
2493: 
2494: #    # ライブラリパスを $: に追加
2495: #    @rd2lib.each{ |path|
2496: #      next if !(str_and_notspace?(path))
2497: ##      $:.push(path)
2498: #      $:.unshift(path)
2499: #    }
2500: #    debug($:)
2501: 
2502:     #
2503:     # コマンドの文字列を整形
2504:     #
2505:     cmd  = "#{@rd2_path}"
2506:     cmd << " -r rd/rd2html-ext-lib"
2507:     cmd << " --with-css=#{@css}"
2508:     cmd << " --with-part=\'RT:rt\'"
2509:     cmd << " --with-part=\'HTML:html\'"
2510:     cmd << " --out-code=euc"
2511:     cmd << " --ref-extension"
2512:     cmd << " --native-inline"
2513:     cmd << " --head-element"
2514: #    cmd << " --headline-secno"
2515: #    cmd << " --enable-br"
2516: 
2517:     debug(cmd)
2518:     html_org = IO.popen("export RUBYLIB=#{@rd2htmlextlib} ; #{cmd} #{rdfile_tmp}").read
2519:     debug(html_org)
2520: 
2521:     html_body_each_line = html_org.split(/\n/)
2522:     debug(html_body_each_line)
2523: 
2524:     html_body = ""
2525:     bodyflag = false
2526:     html_body_each_line.each{ |line|
2527:       if /^.*<body.*$/ =~ line then
2528:         bodyflag  = true
2529:         next
2530:       elsif /^.*<\/body.*$/ =~ line
2531:         bodyflag  = false
2532:       else
2533:         html_body << line + "\n" if bodyflag
2534:       end
2535:     }
2536: 
2537:     # ラベルの張り替え
2538:     html_body_relabeled = "#{html_body}"
2539: 
2540:     last_label_num = -1
2541:     while html_body =~ /\<a\s+name\=\"label\-(\d+)\"\s+id\=\"label\-\d+\"\>(.*?)\<\/a\>/i
2542:       last_label_num = $1.to_i
2543:       html_body = $~.post_match
2544:       labeled_str = $2
2545:       @label_num_header_hash.store(last_label_num + @label_num, labeled_str)
2546:     end
2547: 
2548:     if last_label_num >= 0
2549:       if @label_num < 1
2550:         @label_num = last_label_num + 1
2551:       else
2552:         last_label_num.downto(0){|i|
2553:           html_body_relabeled.gsub!(/(\<a\s+name\=\"label\-)#{i.to_s}(\"\s+id\=\"label\-)#{i.to_s}(\"\>.*?\<\/a\>)/i, "\\1#{(i + @label_num).to_s}\\2#{(i + @label_num).to_s}\\3")
2554:           html_body_relabeled.gsub!(/(\<a\s+href\=\"\#label\-)#{i.to_s}(\"\>)/i, "\\1#{(i + @label_num).to_s}\\2")
2555:         }
2556:         @label_num = @label_num + last_label_num + 1
2557:       end
2558:     end
2559: 
2560:     # テンポラリファイルを削除
2561:     File.delete(rdfile_tmp)
2562: 
2563:     debug(html_body_relabeled)
2564:     return html_body_relabeled
2565:   end

rd2html メソッドで呼ばれた別々の HTML 同士のラベル間に関して ハイパーリンクを貼る. rd2html を一通り呼び終わった後に, その rd2html から返る HTML をまとめたものを引数 html として与える.

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2572
2572:   def relabel(html=nil, quiet=nil, err=nil)
2573:     debug(html)
2574: 
2575:     if !html
2576:       return warn_or_err(
2577:                          "\"html\" is invalid.\n",
2578:                          err, quiet, ArgumentError)
2579:     end
2580: 
2581:     html_relabeled = "#{html}"
2582:     @label_num_header_hash.each{|num, word|
2583:       html_relabeled.gsub!(
2584:                            /\<\!\-\-\s+Reference\,\s+RDLabel\s+\"#{word}\"\s+doesn\'t\s+exist\s+\-\-\>\<em\s+class\=\"label\-not\-found\"\>#{word}\<\/em\>\<\!\-\-\s+Reference\s+end\s+\-\-\>/im, 
2585:                            "<a href=\"#label-#{num.to_s}\">#{word}</a>")
2586:     }
2587: 
2588:     debug(html_relabeled)
2589:     return html_relabeled
2590:   end

target で与えられたパス (String オブジェクト) を from (String オブジェクト) から見た相対パスとして String オブジェクトで返す。 内部で Pathname クラスを利用している。 与えられるパスは絶対パスでも相対パスでもかまわない。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2598
2598:   def relative_str(target=nil, from=nil)
2599:     return nil    unless str_and_notspace?(target)
2600:     return target unless str_and_notspace?(from)
2601: 
2602:     from_dir     = File.dirname(from)
2603:     target_dir   = File.dirname(target)
2604:     target_base  = File.basename(target)
2605: 
2606:     from_ab_path   = Pathname.new(File.expand_path(from_dir))
2607:     target_ab_path = Pathname.new(File.expand_path(target_dir))
2608: 
2609:     target_re_path = target_ab_path.relative_path_from(from_ab_path)
2610: 
2611:     result = target_re_path.to_s + "/" + target_base
2612: 
2613:     return result
2614:   end

Private Instance methods

代入された変数が、配列で、且つゼロ配列ではないことを 調べるメソッド

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2795
2795:   def array_and_notzero?(obj)
2796:     debug(obj)
2797: 
2798:     if obj.instance_of?(Array) && obj.size > 0 then
2799:       return true
2800:     else
2801:       return false
2802:     end
2803: 
2804:   end

デバッグ出力用メソッド。組み込み関数 $DEBUG が真の場合 (つまり、 プログラムを $ ruby -d ./xxxxxx.rb として呼び出した場合) に debug メソッドに代入された変数を出力する。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 1650
1650:   def debug(*args)
1651:     p [caller.first, *args] if $DEBUG
1652:   end

引数 uid に対応するユーザ名 (日本語) を返す。 uid に nil を与えた場合はプロセスの uid に対応するユーザ名 (日本語) を返す。

日本語名は gate-toroku-system <www.ep.sci.hokudai.ac.jp/~gate> によるデータベースから取得するため、このシステムがインストールされて いない場合には nil を返す。

引数 family_name に true を与えた場合、姓のみを返そうと試みる。 データベースの和名が半角空白または全角空白で区切られる場合、 姓のみを返すことが可能である。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2737
2737:   def jpname_from_uid(uid=nil, family_name=nil)
2738:     if FileTest.executable?(@gate_user_show)
2739:       gate_user_database = IO.popen("#{@gate_user_show} #{username_from_uid(uid)}")
2740: 
2741:       #
2742:       # 以下は、完全に gate-toroku-system のデータベース依存である。
2743:       # 詳しくは <http://www.ep.sci.hokudai.ac.jp/~gate/doc/gate-user-db.htm>
2744:       # を参照せよ。
2745:       #
2746:       while gate_user_data = gate_user_database.gets do
2747:         gate_user_data.chomp!
2748:         if /^kname/ =~ gate_user_data
2749:           jpname_key, jpname_value = gate_user_data.split(/: /, 2)
2750:           Kconv::toeuc(jpname_value)
2751:         end
2752:         # 名字だけ取り出そうと試みる。
2753:         #   (姓名の間に半角空白または全角空白が無い時は無理)
2754:         if family_name && /(.+)[\s| ]+.+/e =~ jpname_value then
2755:           jpname = $1
2756:         else
2757:           jpname = jpname_value
2758:         end
2759:       end
2760:     else
2761:       jpname = nil
2762:     end
2763: 
2764:     return jpname
2765:   end

代入された変数が、文字列で、且つ空白文字のみではないことを 調べるメソッド。日本語であっても、文字列が入っていれば true を返す。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2773
2773:   def str_and_notspace?(obj)
2774:     debug(obj)
2775: 
2776:     if !obj.instance_of?(String) then
2777:       return false
2778:     end
2779: 
2780:     # 日本語の文字列も対応できるように
2781:     Kconv::toeuc(obj)
2782: 
2783:     if /\S+/e =~ obj.chomp.strip then
2784:       return true
2785:     else
2786:       return false
2787:     end
2788:   end

引数 gid に対応するユーザ名 (ログイン名) を返す。 gid に nil を与えた場合はプロセスの gid に対応するユーザ名 (ログイン名) を返す。gid が無効なものである場合、エラーを返す。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2712
2712:   def username_from_gid(gid=nil)
2713:     unless gid
2714:       pw = Etc.getpwuid(Process.gid) or return nil
2715:     else
2716:       pw = Etc.getpwuid(gid) or return nil
2717:     end
2718: 
2719:     user_name = pw.name
2720:     return user_name
2721:   end

引数 uid に対応するユーザ名 (ログイン名) を返す。 uid に nil を与えた場合はプロセスの uid に対応するユーザ名 (ログイン名) を返す。uid が無効なものである場合、エラーを返す。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 2695
2695:   def username_from_uid(uid=nil)
2696:     unless uid
2697:       pw = Etc.getpwuid(Process.uid) or return nil
2698:     else
2699:       pw = Etc.getpwuid(uid) or return nil
2700:     end
2701: 
2702:     user_name = pw.name
2703:     return user_name
2704:   end

警告またはエラー。 err が nil や false の場合、mes に与えられたメッセージを 警告として表示する。err が真の場合はそのメッセージの出力 と同時にエラーを発生させ、プログラムを終了させる。 errvar に変数を与えると、エラーの種類を指定できる。 quiet を true にすると、err が nil の場合、何も動作しなくなる。

[Source]

      # File dcmodel-tools/dcmodel-thum.rb, line 1663
1663:   def warn_or_err(mes=nil, err=nil, quiet=nil, errvar=nil)
1664:     return nil if !mes
1665: 
1666:     errvar = RuntimeError if !errvar
1667: 
1668:     if err then
1669:       raise errvar, "Error: #{mes}"
1670:     elsif !quiet
1671:       $stdout.print "[#{caller.first}] \n     Warning: #{mes}"
1672:       return nil
1673:     end
1674:   end

[Validate]