hikiutils 0.2.3.8 → 0.2.3.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/hikiutils_bob/Rakefile +16 -4
  3. data/hikiutils_bob/figs/hikiutils_bob.002.bb +5 -0
  4. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.002.bb +5 -0
  5. data/hikiutils_bob/latex_all.hiki +3 -3
  6. data/hikiutils_bob/latex_dir/hikiutils_bob.log +59 -24
  7. data/hikiutils_bob/latex_dir/hikiutils_bob.pdf +0 -0
  8. data/hikiutils_bob/latex_dir/hikiutils_bob.synctex.gz +0 -0
  9. data/hikiutils_bob/latex_dir/latex_all.tex +3 -3
  10. data/hikiutils_bob/latex_dir/sync.aux +1 -1
  11. data/hikiutils_bob/latex_dir/sync.tex +17 -13
  12. data/hikiutils_bob/sync.hiki +9 -6
  13. data/hikiutils_bob/toc.hiki +19 -15
  14. data/hikiutils_yamane/{results.hiki → command.hiki} +11 -13
  15. data/hikiutils_yamane/compare.hiki +13 -297
  16. data/hikiutils_yamane/figs/hikiutils_yamane.001.jpg +0 -0
  17. data/hikiutils_yamane/figs/hikiutils_yamane.002.bb +5 -0
  18. data/hikiutils_yamane/figs/hikiutils_yamane.002.jpg +0 -0
  19. data/hikiutils_yamane/figs/hikiutils_yamane.003.jpg +0 -0
  20. data/hikiutils_yamane/figs/hikiutils_yamane.004.jpg +0 -0
  21. data/hikiutils_yamane/figs/hikiutils_yamane.005.jpg +0 -0
  22. data/hikiutils_yamane/hikiutils_yamane.hiki +8 -7
  23. data/hikiutils_yamane/introduction.hiki +9 -26
  24. data/hikiutils_yamane/latex_dir/command.aux +34 -0
  25. data/hikiutils_yamane/latex_dir/{results.tex → command.tex} +10 -22
  26. data/hikiutils_yamane/latex_dir/compare.aux +24 -0
  27. data/hikiutils_yamane/latex_dir/compare.tex +13 -333
  28. data/hikiutils_yamane/latex_dir/hikiutils_yamane.aux +8 -7
  29. data/hikiutils_yamane/latex_dir/hikiutils_yamane.log +126 -87
  30. data/hikiutils_yamane/latex_dir/hikiutils_yamane.pdf +0 -0
  31. data/hikiutils_yamane/latex_dir/hikiutils_yamane.synctex.gz +0 -0
  32. data/hikiutils_yamane/latex_dir/hikiutils_yamane.tex +6 -5
  33. data/hikiutils_yamane/latex_dir/hikiutils_yamane.toc +25 -21
  34. data/hikiutils_yamane/latex_dir/{purpose.aux → introduction.aux} +6 -4
  35. data/hikiutils_yamane/latex_dir/introduction.tex +7 -29
  36. data/hikiutils_yamane/latex_dir/optparse.aux +29 -0
  37. data/hikiutils_yamane/latex_dir/optparse.tex +116 -0
  38. data/hikiutils_yamane/latex_dir/thor.aux +32 -0
  39. data/hikiutils_yamane/latex_dir/thor.tex +112 -0
  40. data/hikiutils_yamane/optparse.hiki +113 -0
  41. data/hikiutils_yamane/thor.hiki +108 -0
  42. data/hikiutils_yamane/toc.hiki +15 -17
  43. data/lib/hikiutils/version.rb +1 -1
  44. data/lib/templates/Rakefile_hiki_sync +16 -4
  45. data/lib/templates/hiki_help.yml +2 -2
  46. metadata +61 -80
  47. data/hikiutils_yamane/clidescription.hiki +0 -35
  48. data/hikiutils_yamane/code.hiki +0 -285
  49. data/hikiutils_yamane/command_table.hiki +0 -19
  50. data/hikiutils_yamane/figs/hikiutils_yamane.001.jpeg +0 -0
  51. data/hikiutils_yamane/figs/hikiutils_yamane.002.jpeg +0 -0
  52. data/hikiutils_yamane/figs/hikiutils_yamane.003.jpeg +0 -0
  53. data/hikiutils_yamane/figs/hikiutils_yamane.004.jpeg +0 -0
  54. data/hikiutils_yamane/figs/hikiutils_yamane.005.jpeg +0 -0
  55. data/hikiutils_yamane/figs/hikiutils_yamane.006.jpeg +0 -0
  56. data/hikiutils_yamane/figs/hikiutils_yamane.007.jpeg +0 -0
  57. data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.001.jpg +0 -0
  58. data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.002.jpg +0 -0
  59. data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.003.jpg +0 -0
  60. data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.004.jpg +0 -0
  61. data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.005.jpg +0 -0
  62. data/hikiutils_yamane/hikiutils_yamane.key +0 -0
  63. data/hikiutils_yamane/latex_dir/clidescription.aux +0 -24
  64. data/hikiutils_yamane/latex_dir/clidescription.tex +0 -41
  65. data/hikiutils_yamane/latex_dir/code.aux +0 -41
  66. data/hikiutils_yamane/latex_dir/code.tex +0 -319
  67. data/hikiutils_yamane/latex_dir/command_table.tex +0 -29
  68. data/hikiutils_yamane/latex_dir/method.aux +0 -25
  69. data/hikiutils_yamane/latex_dir/method.tex +0 -14
  70. data/hikiutils_yamane/latex_dir/purpose.tex +0 -8
  71. data/hikiutils_yamane/latex_dir/results.aux +0 -28
  72. data/hikiutils_yamane/latex_dir/system.tex +0 -23
  73. data/hikiutils_yamane/method.hiki +0 -12
  74. data/hikiutils_yamane/mi +0 -0
  75. data/hikiutils_yamane/purpose.hiki +0 -7
  76. data/hikiutils_yamane/system.hiki +0 -18
  77. /data/hikiutils_yamane/figs/{hikiutils_yamane_09_copy.006.jpg → hikiutils_yamane.006.jpg} +0 -0
  78. /data/hikiutils_yamane/figs/{hikiutils_yamane_09_copy.007.jpg → hikiutils_yamane.007.jpg} +0 -0
  79. /data/hikiutils_yamane/{hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.001.jpg → hikiutils_yamane/hikiutils_yamane.001.jpg} +0 -0
  80. /data/hikiutils_yamane/{hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.002.jpg → hikiutils_yamane/hikiutils_yamane.002.jpg} +0 -0
  81. /data/hikiutils_yamane/{hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.003.jpg → hikiutils_yamane/hikiutils_yamane.003.jpg} +0 -0
  82. /data/hikiutils_yamane/{hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.004.jpg → hikiutils_yamane/hikiutils_yamane.004.jpg} +0 -0
  83. /data/hikiutils_yamane/{hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.005.jpg → hikiutils_yamane/hikiutils_yamane.005.jpg} +0 -0
  84. /data/hikiutils_yamane/{hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.006.jpg → hikiutils_yamane/hikiutils_yamane.006.jpg} +0 -0
  85. /data/hikiutils_yamane/{hikiutils_yamane_09_copy/hikiutils_yamane_09_copy.007.jpg → hikiutils_yamane/hikiutils_yamane.007.jpg} +0 -0
  86. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/110809_FamilyChineseOahu_EN_00317_2040x1360-small-12.jpg +0 -0
  87. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/110809_FamilyChineseOahu_EN_02016_981x654-small-14.jpg +0 -0
  88. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/110809_familychineseoahu_en_00317_2040x1360-96.jpeg +0 -0
  89. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/110809_familychineseoahu_en_02016_981x654-97.jpeg +0 -0
  90. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/110809_familychineseoahu_en_02390_2880x1921-94.jpeg +0 -0
  91. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/110809_familychineseoahu_en_02390_2880x1921-small-95.jpg +0 -0
  92. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/mt0@2x-102.jpg +0 -0
  93. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/mt10@2x-112.jpg +0 -0
  94. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/mt1@2x-103.jpg +0 -0
  95. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/mt2@2x-104.jpg +0 -0
  96. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/mt3@2x-105.jpg +0 -0
  97. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/mt4@2x-106.jpg +0 -0
  98. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/mt5@2x-107.jpg +0 -0
  99. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/mt6@2x-108.jpg +0 -0
  100. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/mt7@2x-109.jpg +0 -0
  101. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/mt8@2x-110.jpg +0 -0
  102. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/mt9@2x-111.jpg +0 -0
  103. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/pasted-image-100.tiff +0 -0
  104. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/pasted-image-98.tiff +0 -0
  105. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/pasted-image-small-101.png +0 -0
  106. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/pasted-image-small-99.png +0 -0
  107. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/st0-113.jpg +0 -0
  108. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/st1-114.jpg +0 -0
  109. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/st2-115.jpg +0 -0
  110. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/st3-116.jpg +0 -0
  111. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/st4-117.jpg +0 -0
  112. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/st5-118.jpg +0 -0
  113. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/st6-119.jpg +0 -0
  114. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Data/tile_paper_medgray-93.jpg +0 -0
  115. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Index.zip +0 -0
  116. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Metadata/BuildVersionHistory.plist +0 -0
  117. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Metadata/DocumentIdentifier +0 -0
  118. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/Metadata/Properties.plist +0 -0
  119. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/preview-micro.jpg +0 -0
  120. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/preview-web.jpg +0 -0
  121. /data/hikiutils_yamane/{hikiutils_yamane_09_copy.key → hikiutils_yamane.key}/preview.jpg +0 -0
@@ -1,31 +1,9 @@
1
1
 
2
- \subsubsection{thor と optparse のコードの比較}
3
- hikiutilsのコマンドライン解析ツールをoptparseからthorに換えることでコマンドの書き換えを行うことができた.
4
- また,thorで書かれたhikiutilsはoptparseで書かれたものよりもコードが短くなり,コマンドの解析も簡単に行えることができた.
5
- ここではthorとoptparseのコードを比較しthorの良さを確認する.
2
+ \subsection{optparseとthorの比較}
3
+ ここでは,FizzBuzzという単純なコードを例にoptparseとCLIのコードの比較を行う.
6
4
 
7
- \paragraph{Thorとoptparseとは}
8
- \paragraph{Thorとは}
9
- Thorとは,コマンドラインツールの作成を支援するライブラリのことである.
10
- gitやbundlerのようにサブコマンドを含むコマンドラインツールを簡単に作成することができる[4].
11
-
12
- Thorの基本的な流れとしては
13
-
14
- \begin{enumerate}
15
- \item Thorを継承したクラスのパブリックメソッドがコマンドになる
16
- \item クラス.start(ARGV)でコマンドラインの処理をスタートする
17
- \end{enumerate}
18
- という流れである[4].
19
-
20
- startに渡す引数が空の場合,Thorはクラスのヘルプリストを出力する.
21
- また,Thorはサブコマンドやサブサブコマンドも作ることができる.
22
-
23
- \paragraph{optparseとは}
24
- optparseモジュールとは,getoptよりも簡便で,柔軟性に富み,かつ強力なコマンドライン解析ライブラリである.
25
- optparseでは,より宣言的なスタイルのコマンドライン解析手法,すなわちOptionParserのインスタンスでコマンドラインを解析するという手法をとっている.
26
- これを使うと,GNU/POSIX構文でオプションを指定できるだけでなく,使用法やヘルプメッセージの生成も行える[5].
27
-
28
- 利用頻度はあまり高くないが古くから開発され,使用例が広く紹介されている.
5
+ \subsubsection{optparse}
6
+ optparseとは,getoptよりも簡便で,柔軟性に富み,かつ強力なコマンドライン解析ライブラリである.optparseでは,より宣言的なスタイルのコマンドライン解析手法,すなわちOptionParserのインスタンスでコマンドラインを解析するという手法をとっている.これを使うと,GNU/POSIX構文でオプションを指定できるだけでなく,使用法やヘルプメッセージの生成も行える[1-3].利用頻度はあまり高くないが古くから開発され,使用例が広く紹介されている.
29
7
 
30
8
  optparseの基本的な流れとしては
31
9
 
@@ -34,318 +12,20 @@ optparseの基本的な流れとしては
34
12
  \item オプションを取り扱うブロックをopt.onに登録する
35
13
  \item opt.parse(ARGV)でコマンドラインを実際にparseする
36
14
  \end{enumerate}
37
- という流れである.
38
-
39
- OptionParserはコマンドラインのオプション取り扱うためのクラスであるためオブジェクトoptを生成されopt.onにコマンドを登録することができる.
40
- しかし,OptionParser\#onにはコマンドが登録されているだけであるため,OptionParser\#parseが呼ばれた時,コマンドラインにオプションが指定されていれば実行される.
41
- optparseにはデフォルトとして--helpと--versionオプションを認識する[6].
42
-
43
- \paragraph{コードの解説}
44
- \paragraph{Thorの定義}
45
- \verb|{{attach_view(hikiutils_yamane.003.jpg)}}|
46
- Thorのinitializeの定義のされ方
47
-
48
- \begin{enumerate}
49
- \item Hikithor::CLI.start(ARGV)が呼ばれる
50
- \item initializeメソッドが呼ばれる
51
- \item これではThorのinitializeメソッドが呼ばれない
52
- \item superを書くことでThorのinitializeメソッドが呼ばれる
53
- \end{enumerate}
54
- optparseではrequireでoptparseを呼ばれoptparseのinitializeを定義する必要はないが,Thorはinitializeを定義する必要がある.
55
- Thorの定義方法はrequireでThorを呼びCLIクラスで継承し,initializeメソッドにsuperを書くことでThorのinitializeが呼ばれる.
56
- initializeメソッド内ではThorの初期設定がされていないため,スーパークラスのメソッドを読み出してくれるsuperを書き加えることで図のようにinitializeメソッドでThorのinitilalizeメソッドが
57
- 呼ばれて定義される.
58
-
59
- \paragraph{実際のコード}\begin{lstlisting}[style=customRuby]
60
- # -*- coding: utf-8 -*-
61
- require 'thor'
62
- require 'kconv'
63
- require 'hikidoc'
64
- require 'erb'
65
- require "hikiutils/version"
66
- require "hikiutils/tmarshal"
67
- require "hikiutils/infodb"
68
- require 'systemu'
69
- require 'fileutils'
70
- require 'yaml'
71
- require 'pp'
72
-
73
- module Hikithor
74
-
75
- DATA_FILE=File.join(ENV['HOME'],'.hikirc')
76
- attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
77
-
78
- class CLI < Thor
79
- def initialize(*args)
80
- super
81
- @data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
82
- data_path = File.join(ENV['HOME'], '.hikirc')
83
- DataFiles.prepare(data_path)
84
-
85
- file = File.open(DATA_FILE,'r')
86
- @src = YAML.load(file.read)
87
- file.close
88
- @target = @src[:target]
89
- @l_dir=@src[:srcs][@target][:local_dir]
90
- browser = @src[:browser]
91
- @browser = (browser==nil) ? 'firefox' : browser
92
- p editor_command = @src[:editor_command]
93
- @editor_command = (editor_command==nil) ? 'open -a mi' : editor_command
94
- end
95
- \end{lstlisting}
96
- \paragraph{hikiutilsの実行}
97
- \begin{itemize}
98
- \item Thor
99
- \end{itemize}
100
- \begin{figure}[htbp]\begin{center}
101
- \includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane.004.jpg}
102
- \caption{}
103
- \label{default}\end{center}\end{figure}
104
- \begin{enumerate}
105
- \item hiki\_thorのHikithor::CLI.start(ARGV)でhikiutils\_thor.rbのCLIクラスを呼ぶ
106
- \end{enumerate}
107
- \begin{enumerate}
108
- \item hikiutils\_thor.rbのCLIクラスのメソッドを順に実行していく
109
- \end{enumerate}
110
- \begin{itemize}
111
- \item optparse
112
- \end{itemize}
113
- \begin{figure}[htbp]\begin{center}
114
- \includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane.001.jpg}
115
- \caption{}
116
- \label{default}\end{center}\end{figure}
117
- \begin{enumerate}
118
- \item HikiのHikiUtils::Command.run(ARGV)でhikiutils.rbのrunメソッドを呼ぶ
119
- \item new(argv).executeでexecuteメソッドが実行される
120
- \end{enumerate}
121
- このようにoptparseでは実行を行うためのメソッドが必要であるが,Thorではクラスのメソッドを順に実行していくため
122
- runメソッドとexecuteメソッドは必要ない.
123
-
124
- \paragraph{実際のコード}
125
- \begin{itemize}
126
- \item Thor
127
- \end{itemize}\begin{lstlisting}[style=customRuby]
128
- #!/usr/bin/env ruby
129
-
130
- require "hikiutils_thor"
131
-
132
- Hikithor::CLI.start(ARGV)
133
- \end{lstlisting}\begin{lstlisting}[style=customRuby]
134
- # -*- coding: utf-8 -*-
135
- require 'thor'
136
- require 'kconv'
137
- require 'hikidoc'
138
- require 'erb'
139
- require "hikiutils/version"
140
- require "hikiutils/tmarshal"
141
- require "hikiutils/infodb"
142
- require 'systemu'
143
- require 'fileutils'
144
- require 'yaml'
145
- require 'pp'
146
-
147
- module Hikithor
148
-
149
- DATA_FILE=File.join(ENV['HOME'],'.hikirc')
150
- attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
151
-
152
- class CLI < Thor
153
- def initialize(*args)
154
- super
155
- @data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
156
- data_path = File.join(ENV['HOME'], '.hikirc')
157
- DataFiles.prepare(data_path)
158
-
159
- file = File.open(DATA_FILE,'r')
160
- @src = YAML.load(file.read)
161
- file.close
162
- @target = @src[:target]
163
- @l_dir=@src[:srcs][@target][:local_dir]
164
- browser = @src[:browser]
165
- @browser = (browser==nil) ? 'firefox' : browser
15
+ である.
166
16
 
167
- \end{lstlisting}
168
- \begin{itemize}
169
- \item optparse
170
- \end{itemize}\begin{lstlisting}[style=customRuby]
171
- #!/usr/bin/env ruby
17
+ OptionParserはコマンドラインのオプション取り扱うためのクラスであるためオブジェクトoptを生成されopt.onにコマンドを登録することができる.しかし,OptionParser\#onにはコマンドが登録されているだけであるため,OptionParser\#parseが呼ばれた時,コマンドラインにオプションが指定されていれば実行される.optparseにはデフォルトとして--helpと--versionオプションを認識する[1-4].
172
18
 
173
- require "hikiutils"
19
+ \subsubsection{Thor}
20
+ Thorとは,コマンドラインツールの作成を支援するライブラリのことである.gitやbundlerのようにサブコマンドを含むコマンドラインツールを簡単に作成することができる[1-2].
174
21
 
175
- HikiUtils::Command.run(ARGV)
176
- \end{lstlisting}\begin{lstlisting}[style=customRuby]
177
- def self.run(argv=[])
178
- print "hikiutils: provide utilities for helping hiki editing.\n"
179
- new(argv).execute
180
- end
181
-
182
- def execute
183
- @argv << '--help' if @argv.size==0
184
- command_parser = OptionParser.new do |opt|
185
- opt.on('-v', '--version','show program Version.') { |v|
186
- opt.version = HikiUtils::VERSION
187
- puts opt.ver
188
- }
189
- opt.on('-s', '--show','show sources') {show_sources}
190
- opt.on('-a', '--add','add sources info') {add_sources }
191
- opt.on('-t', '--target VAL','set target id') {|val| set_target(val) }
192
- opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
193
- opt.on('-l', '--list [FILE]','list files') {|file| list_files(file) }
194
- opt.on('-u', '--update FILE','update file') {|file| update_file(file) }
195
- opt.on('-r', '--rsync','rsync files') {rsync_files}
196
- opt.on('--database FILE','read database file') {|file| db_file(file)}
197
- opt.on('--display FILE','display converted hikifile') {|file| display(f\
198
- ile)}
199
- opt.on('-c', '--checkdb','check database file') {check_db}
200
- opt.on('--remove FILE','remove file') {|file| remove_file(file)}
201
- opt.on('--move FILES','move file1,file2',Array) {|files| move_file(file\
202
- s)}
203
- opt.on('--euc FILE','translate file to euc') {|file| euc_file(file) }
204
- opt.on('--initialize','initialize source directory') {dir_init() }
205
- end
206
- begin
207
- command_parser.parse!(@argv)
208
- rescue=> eval
209
- p eval
210
- end
211
- dump_sources
212
- exit
213
- end
214
- \end{lstlisting}
215
- \paragraph{コマンドの表示と処理}
216
- \begin{itemize}
217
- \item Thor
218
- \end{itemize}
219
- \begin{figure}[htbp]\begin{center}
220
- \includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane.002.jpg}
221
- \caption{}
222
- \label{default}\end{center}\end{figure}
223
- \begin{enumerate}
224
- \item コマンド名,コマンドの説明を一覧に表示させる
225
- \item パブリックメソッドのコマンドを別のコマンド名でも実行できるようにする
226
- \item コマンドの命令の実行コード
227
- \end{enumerate}
228
- Thorではdescで一覧を表示させるコマンド名,コマンドの説明を登録する.しかし,ここで記述したコマンドは一覧で表示させるものであり,実行されることはないので実際のコマンドと対応させる必要がある.
229
- Thorでは処理実行を行うメソッドがコマンドとなる.しかし,それではコマンド名は1つしか使うことができない.
230
- ここで用いるものがmapである.mapを使うことで別のコマンドを指定することができる.
22
+ Thorの基本的な流れとしては
231
23
 
232
- \begin{itemize}
233
- \item optparse
234
- \end{itemize}
235
- \begin{figure}[htbp]\begin{center}
236
- \includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane.005.jpg}
237
- \caption{}
238
- \label{default}\end{center}\end{figure}
239
24
  \begin{enumerate}
240
- \item OptionParserオブジェクトoptを生成
241
- \item optにコマンドを登録
242
- \item 入力されたコマンドの処理のメソッドへ移動
25
+ \item Thorを継承したクラスのパブリックメソッドがコマンドになる
26
+ \item クラス.start(ARGV)でコマンドラインの処理をスタートする
243
27
  \end{enumerate}
244
- optparseではOptionParserオブジェクトoptの生成を行い,コマンドをoptに登録することでコマンドを作成することができる.しかし,これはコマンドを登録しているだけで
245
- コマンドの一覧ではこれを表示することができるがコマンドの実行を行うためには実行を行うためのメソッドを作成する必要がある.optparseでのコマンドの実行はoptで登録された
246
- コマンドが入力されることでそれぞれのコマンドの処理を行うメソッドに移動し処理を行う.しかし,このコマンド登録は-を付けたコマンドした登録ができなく,-なしのコマンド登録は
247
- また別のやり方でやらなくてはいけない.
248
- 以上より,Thorではコマンドの指定と処理にはdesc,map,処理メソッドだけで済むが,optparseではコマンドを登録するためのメソッドと処理メソッドが必要になってくる.
249
- また,コマンドはThorでは処理メソッドがコマンド名になるが,optparseではコマンドを登録するための処理も必要となってくる.
250
-
251
- \paragraph{実際のコード}
252
- \begin{itemize}
253
- \item Thor
254
- \end{itemize}\begin{lstlisting}[style=customRuby]
255
- desc 'show,--show', 'show sources'
256
- map "--show" => "show"
257
- def show
258
- printf("target_no:%i\n",@src[:target])
259
- printf("editor_command:%s\n",@src[:editor_command])
260
- @i_size,@n_size,@l_size,@g_size=3,5,30,15 #i,g_size are fixed
261
- n_l,l_l=0,0
262
- @src[:srcs].each_with_index{|src,i|
263
- n_l =(n_l= src[:nick_name].length)>@n_size? n_l:@n_size
264
- l_l =(l_l= src[:local_dir].length)>@l_size? l_l:@l_size
265
- }
266
- @n_size,@l_size=n_l,l_l
267
- command = Command.new
268
- header = command.display_format('id','name','local directory','global uri',@i_size,@n_size,@l_size,@g_size)
269
-
270
- puts header
271
- puts '-' * header.size
272
-
273
- @src[:srcs].each_with_index{|src,i|
274
- target = i==@src[:target] ? '*':' '
275
- id = target+i.to_s
276
- name=src[:nick_name]
277
- local=src[:local_dir]
278
- global=src[:global_uri]
279
- puts command.display_format(id,name,local,global,@i_size,@n_size,@l_size,@g_size)
280
- }
281
- end
282
- \end{lstlisting}
283
- \begin{itemize}
284
- \item optparse
285
- \end{itemize}\begin{lstlisting}[style=customRuby]
286
- def execute
287
- @argv << '--help' if @argv.size==0
288
- command_parser = OptionParser.new do |opt|
289
- opt.on('-v', '--version','show program Version.') { |v|
290
- opt.version = HikiUtils::VERSION
291
- puts opt.ver
292
- }
293
- opt.on('-s', '--show','show sources') {show_sources}
294
- opt.on('-a', '--add','add sources info') {add_sources }
295
- opt.on('-t', '--target VAL','set target id') {|val| set_target(val)}
296
- opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
297
- opt.on('-l', '--list [FILE]','list files') {|file| list_files(file)}
298
- opt.on('-u', '--update FILE','update file') {|file| update_file(file) }
299
- opt.on('-r', '--rsync','rsync files') {rsync_files}
300
- opt.on('--database FILE','read database file') {|file| db_file(file)}
301
- opt.on('--display FILE','display converted hikifile') {|file| display(file)}
302
- opt.on('-c', '--checkdb','check database file') {check_db}
303
- opt.on('--remove FILE','remove file') {|file| remove_file(file)}
304
- opt.on('--move FILES','move file1,file2',Array) {|files| move_file(files)}
305
- opt.on('--euc FILE','translate file to euc') {|file| euc_file(file)}
306
- opt.on('--initialize','initialize source directory') {dir_init() }
307
- end
308
- begin
309
- command_parser.parse!(@argv)
310
- rescue=> eval
311
- p eval
312
- end
313
- dump_sources
314
- exit
315
- end
316
-
317
- def show_sources()
318
- printf("target_no:%i\n",@src[:target])
319
- printf("editor_command:%s\n",@src[:editor_command])
320
- check_display_size()
321
- header = display_format('id','name','local directory','global uri')
322
-
323
- puts header
324
- puts '-' * header.size
325
-
326
- @src[:srcs].each_with_index{|src,i|
327
- target = i==@src[:target] ? '*':' '
328
- id = target+i.to_s
329
- name=src[:nick_name]
330
- local=src[:local_dir]
331
- global=src[:global_uri]
332
- puts display_format(id,name,local,global)
333
- }
334
- end
28
+ である[1-2].
335
29
 
336
- def add_sources
337
- cont = {}
338
- @data_name.each{|name|
339
- printf("%s ? ", name)
340
- tmp = gets.chomp
341
- cont[name.to_sym] = tmp
342
- }
343
- @src[:srcs] << cont
344
- show_sources
345
- end
346
- \end{lstlisting}
347
- コードからもThorのほうが短くなっていることが分かる.
348
- よって,Thorとoptparseでのコードの違いは以上の部分になるが全体的にもThorのほうがコードが短くなり,
349
- コマンドの定義も簡単に行うことができる.また,コマンドを簡単に定義できることで書き換えもすぐ行うことが
350
- できるので,より直感的なコマンドに実装することも可能となった.
30
+ startに渡す引数が空の場合,Thorはクラスのヘルプリストを出力する.また,Thorはサブコマンドやサブサブコマンドも容易に作ることができる.
351
31
 
@@ -1,9 +1,10 @@
1
1
  \relax
2
2
  \@input{abstract.aux}
3
- \@input{purpose.aux}
4
- \@input{method.aux}
5
- \@writefile{toc}{\contentsline {section}{\numberline {4}結果}{7}}
6
- \@input{results.aux}
7
- \@input{clidescription.aux}
8
- \@input{code.aux}
9
- \@writefile{toc}{\contentsline {section}{\numberline {5}参考文献}{25}}
3
+ \@input{introduction.aux}
4
+ \@writefile{toc}{\contentsline {section}{\numberline {3}方法}{6}}
5
+ \@input{compare.aux}
6
+ \@input{optparse.aux}
7
+ \@writefile{toc}{\contentsline {section}{\numberline {4}結果}{13}}
8
+ \@input{command.aux}
9
+ \@input{thor.aux}
10
+ \@writefile{toc}{\contentsline {section}{\numberline {5}参考文献}{23}}