hikiutils 0.2.3.4 → 0.2.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/exe/hiki +1 -3
  3. data/exe/hiki_thor +0 -3
  4. data/exe/hiki_thor~ +8 -0
  5. data/exe/hiki~ +8 -0
  6. data/hikiutils.gemspec +1 -0
  7. data/hikiutils_bob/Rakefile +10 -27
  8. data/hikiutils_bob/figs/hikiutils_bob.004.jpeg +0 -0
  9. data/hikiutils_bob/{private_dir.graffle → hikiutils_bob.graffle} +1 -1
  10. data/hikiutils_bob/hikiutils_bob.key +0 -0
  11. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.004.jpeg +0 -0
  12. data/hikiutils_bob/latex_all.hiki +7 -3
  13. data/hikiutils_bob/latex_dir/hikiutils_bob.log +99 -84
  14. data/hikiutils_bob/latex_dir/hikiutils_bob.pdf +0 -0
  15. data/hikiutils_bob/latex_dir/hikiutils_bob.synctex.gz +0 -0
  16. data/hikiutils_bob/latex_dir/hikiutils_bob.toc +14 -10
  17. data/hikiutils_bob/latex_dir/latex_all.aux +10 -10
  18. data/hikiutils_bob/latex_dir/latex_all.tex +14 -5
  19. data/hikiutils_bob/latex_dir/sync.aux +14 -8
  20. data/hikiutils_bob/latex_dir/sync.tex +70 -17
  21. data/hikiutils_bob/sync.hiki +44 -7
  22. data/hikiutils_yamane/Rakefile +32 -31
  23. data/hikiutils_yamane/abstract.hiki +1 -0
  24. data/hikiutils_yamane/backup/hikiutils%28optparse%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%29 +309 -0
  25. data/hikiutils_yamane/backup/hikiutils%28thor%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%29 +1 -0
  26. data/hikiutils_yamane/backup/hikiutils_yamane +703 -0
  27. data/hikiutils_yamane/backup/hikiutils_yamane.hiki +0 -0
  28. data/hikiutils_yamane/backup/hikiutils_yamane_#hikiutils_yamane +1 -0
  29. data/hikiutils_yamane/backup/hikiutils_yamane_command_table +19 -0
  30. data/hikiutils_yamane/backup/hikiutils_yamane_introduction +7 -0
  31. data/hikiutils_yamane/figs/hikiutils_yamane.001.jpeg +0 -0
  32. data/hikiutils_yamane/figs/hikiutils_yamane.001.jpg +0 -0
  33. data/hikiutils_yamane/figs/hikiutils_yamane.002.jpeg +0 -0
  34. data/hikiutils_yamane/figs/hikiutils_yamane.002.jpg +0 -0
  35. data/hikiutils_yamane/figs/hikiutils_yamane.003.jpeg +0 -0
  36. data/hikiutils_yamane/figs/hikiutils_yamane.003.jpg +0 -0
  37. data/hikiutils_yamane/figs/hikiutils_yamane.004.jpeg +0 -0
  38. data/hikiutils_yamane/figs/hikiutils_yamane.004.jpg +0 -0
  39. data/hikiutils_yamane/figs/hikiutils_yamane.005.jpeg +0 -0
  40. data/hikiutils_yamane/figs/hikiutils_yamane.005.jpg +0 -0
  41. data/hikiutils_yamane/figs/hikiutils_yamane.006.jpeg +0 -0
  42. data/hikiutils_yamane/figs/hikiutils_yamane.007.jpeg +0 -0
  43. data/hikiutils_yamane/hikiutils_yamane.hiki +37 -1
  44. data/hikiutils_yamane/hikiutils_yamane.key +0 -0
  45. data/hikiutils_yamane/hikiutils_yamane.key~11b9dba1272d2104b420497d11c6eda206ace6c2 +0 -0
  46. data/hikiutils_yamane/introduction.hiki +27 -0
  47. data/hikiutils_yamane/latex_dir/abstract.aux +22 -0
  48. data/hikiutils_yamane/latex_dir/abstract.tex +1 -0
  49. data/hikiutils_yamane/latex_dir/command_table.tex +1 -1
  50. data/hikiutils_yamane/latex_dir/head.tex +2 -2
  51. data/hikiutils_yamane/latex_dir/hikiutils_yamane.aux +3 -0
  52. data/hikiutils_yamane/latex_dir/hikiutils_yamane.log +224 -84
  53. data/hikiutils_yamane/latex_dir/hikiutils_yamane.pdf +0 -0
  54. data/hikiutils_yamane/latex_dir/hikiutils_yamane.synctex.gz +0 -0
  55. data/hikiutils_yamane/latex_dir/hikiutils_yamane.tex +16 -2
  56. data/hikiutils_yamane/latex_dir/hikiutils_yamane.toc +20 -0
  57. data/hikiutils_yamane/latex_dir/introduction.aux +26 -0
  58. data/hikiutils_yamane/latex_dir/introduction.tex +33 -0
  59. data/hikiutils_yamane/latex_dir/results.aux +45 -0
  60. data/hikiutils_yamane/latex_dir/results.tex +342 -0
  61. data/hikiutils_yamane/latex_dir/system.tex +23 -0
  62. data/hikiutils_yamane/results.hiki +376 -0
  63. data/hikiutils_yamane/system.hiki +18 -0
  64. data/lib/hikiutils.rb +7 -3
  65. data/lib/hikiutils.rb~ +387 -0
  66. data/lib/hikiutils/version.rb +1 -1
  67. data/lib/hikiutils_thor.rb +36 -20
  68. data/lib/hikiutils_thor.rb~ +324 -0
  69. data/lib/templates/Rakefile_hiki_sync +35 -31
  70. metadata +57 -3
@@ -38,11 +38,25 @@
38
38
  }
39
39
  \begin{document}
40
40
  \title{卒業論文\\
41
- \vspace{4cm} hikiutilsを用いた\\卒業論文作成}
42
- \author{ 関西学院大学 理工学部 情報科学科\\\\1234 西谷滋人}
41
+ \vspace{4cm} コマンドラインツール作成ライブラリThorによる\\hikiutilsの書き換え}
42
+ \author{ 関西学院大学 理工学部 情報科学科\\\\27013554 山根亮太}
43
43
  \date{\vspace{3cm} 2017年 3月\\
44
44
  \vspace{3cm} 指導教員  西谷 滋人 教授}
45
45
  \maketitle
46
46
  \tableofcontents
47
47
 
48
+ \title{コマンドラインツール作成ライブラリThorによるhikiutilsの書き換え}
49
+ \author{関西学院大学理工学部情報科学科 27013554 山根亮太}
50
+ \date{}
51
+ \maketitle
52
+ \tableofcontents
53
+ \include{abstract}
54
+ \include{introduction}
55
+ \include{results}
56
+ [1] 「hiki」,hikiwiki.org/ja/about.html ,2017/1/30 アクセス.\verb|{{br}}|
57
+ [2] 「hikiutils」,\verb|https://rubygems.org/gems/hikiutils| ,2017/1/30 アクセス.\verb|{{br}}|
58
+ [3] 「The Ruby Toolbox」, CLI Option Parsers,\verb|https://www.ruby-toolbox.com/categories/CLI_Option_Parsers| ,2017/1/30 アクセス.\verb|{{br}}|
59
+ [4] 「Thorの使い方まとめ」, \verb|http://qiita.com/succi0303/items/32560103190436c9435b| ,2017/1/30 アクセス.\verb|{{br}}|
60
+ [5] 「15.5. optparse - コマンドラインオプション解析器」, \verb|http://docs.python.jp/2/library/optparse.html| ,2017/1/30 アクセス.\verb|{{br}}|
61
+ [6] 「library optparse」, \verb|https://docs.ruby-lang.org/ja/latest/library/optparse.html| ,2017/1/30 アクセス.\verb|{{br}}|
48
62
  \end{document}
@@ -0,0 +1,20 @@
1
+ \contentsline {section}{\numberline {1}概要}{3}
2
+ \contentsline {section}{\numberline {2}序論}{4}
3
+ \contentsline {subsection}{\numberline {2.1}目的}{4}
4
+ \contentsline {subsection}{\numberline {2.2}既存システムの背景}{4}
5
+ \contentsline {subsubsection}{\numberline {2.2.1}hiki}{4}
6
+ \contentsline {subsubsection}{\numberline {2.2.2}hikiutils}{4}
7
+ \contentsline {section}{\numberline {3}結果}{6}
8
+ \contentsline {subsection}{\numberline {3.1}開発の結果}{6}
9
+ \contentsline {subsection}{\numberline {3.2}thorとoptparseのコードの比較}{7}
10
+ \contentsline {subsubsection}{\numberline {3.2.1}Thorとは}{7}
11
+ \contentsline {paragraph}{Thorの基本的な流れ}{7}
12
+ \contentsline {subsubsection}{\numberline {3.2.2}optparseとは}{7}
13
+ \contentsline {paragraph}{optparseの基本的な流れ}{7}
14
+ \contentsline {subsubsection}{\numberline {3.2.3}コードの解説}{7}
15
+ \contentsline {paragraph}{Thorの定義}{7}
16
+ \contentsline {paragraph}{実際のコード}{8}
17
+ \contentsline {paragraph}{hikiutilsの実行}{9}
18
+ \contentsline {paragraph}{実際のコード}{10}
19
+ \contentsline {paragraph}{コマンドの表示と実行}{13}
20
+ \contentsline {paragraph}{実際のコード}{14}
@@ -0,0 +1,26 @@
1
+ \relax
2
+ \@writefile{toc}{\contentsline {section}{\numberline {2}序論}{4}}
3
+ \@writefile{toc}{\contentsline {subsection}{\numberline {2.1}目的}{4}}
4
+ \@writefile{toc}{\contentsline {subsection}{\numberline {2.2}既存システムの背景}{4}}
5
+ \@writefile{toc}{\contentsline {subsubsection}{\numberline {2.2.1}hiki}{4}}
6
+ \@writefile{toc}{\contentsline {subsubsection}{\numberline {2.2.2}hikiutils}{4}}
7
+ \@setckpt{introduction}{
8
+ \setcounter{page}{6}
9
+ \setcounter{equation}{0}
10
+ \setcounter{enumi}{0}
11
+ \setcounter{enumii}{0}
12
+ \setcounter{enumiii}{0}
13
+ \setcounter{enumiv}{0}
14
+ \setcounter{footnote}{0}
15
+ \setcounter{mpfootnote}{0}
16
+ \setcounter{part}{0}
17
+ \setcounter{section}{2}
18
+ \setcounter{subsection}{2}
19
+ \setcounter{subsubsection}{2}
20
+ \setcounter{paragraph}{0}
21
+ \setcounter{subparagraph}{0}
22
+ \setcounter{figure}{0}
23
+ \setcounter{table}{0}
24
+ \setcounter{lstnumber}{1}
25
+ \setcounter{lstlisting}{0}
26
+ }
@@ -0,0 +1,33 @@
1
+ \section{序論}
2
+ \subsection{目的}
3
+ 本研究ではhikiの編集作業をより容易にするためのツールの開発を行った.
4
+ hikiは通常web上で編集を行っているが,GUIとCUIが混在しており,操作に不便な点がある.
5
+ そこで,編集操作が CUI で完結するために開発をされたのが hikiutils である.
6
+ しかし,そのユーザインタフェースにはコマンドが直感的でないという問題点がある.
7
+ そこで,Thorというコマンドラインツール作成ライブラリを用いる.
8
+ optparseというコマンドライン解析ライブラリを使用しているhikiutilsを新たなコマンドライン解析ライブラリを使用することコマンドを書き換え,より直感的なコマンドにすることが可能である.
9
+
10
+ \subsection{既存システムの背景}
11
+ \subsubsection{hiki}
12
+ hikiとはプログラミング言語Rubyを用いられることで作られたwikiクローンの1つである.
13
+ hikiの主な特徴として
14
+
15
+ \begin{itemize}
16
+ \item オリジナルwikiに似たシンプルな書式
17
+ \item プラグインによる機能拡張
18
+ \item 出力するHTMLを柔軟に変更可能
19
+ \item ページにカテゴリ付けできる
20
+ \item CSSを使ったテーマ機能
21
+ \item 携帯端末可能
22
+ \item InterWikiのサポート
23
+ \item HikiFarmに対応
24
+ \item ページの追加,編集がしやすい
25
+ \end{itemize}
26
+ 等がある[1].
27
+
28
+ \subsubsection{hikiutils}
29
+ hikiutils は hiki の編集作業を容易に行うことができるよう にするツール群であり,プログラミング言語 Ruby のライブ ラリである gem フォーマットに従って提供されている[2].
30
+ hikiutils は CLI(Command Line Interface) で操作するため, オプション解析をおこなう必要がある.
31
+ gem には,この用途 に適合したライブラリがいくつも提供されている[3].
32
+ この中 で,あまり利用頻度は高くないが古くから開発され,使用例 が広く紹介されている optparse を利用している.
33
+
@@ -0,0 +1,45 @@
1
+ \relax
2
+ \@writefile{toc}{\contentsline {section}{\numberline {3}結果}{6}}
3
+ \@writefile{toc}{\contentsline {subsection}{\numberline {3.1}開発の結果}{6}}
4
+ \@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces }}{6}}
5
+ \newlabel{default}{{1}{6}}
6
+ \@writefile{toc}{\contentsline {subsection}{\numberline {3.2}thorとoptparseのコードの比較}{7}}
7
+ \@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.1}Thorとは}{7}}
8
+ \@writefile{toc}{\contentsline {paragraph}{Thorの基本的な流れ}{7}}
9
+ \@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.2}optparseとは}{7}}
10
+ \@writefile{toc}{\contentsline {paragraph}{optparseの基本的な流れ}{7}}
11
+ \@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3}コードの解説}{7}}
12
+ \@writefile{toc}{\contentsline {paragraph}{Thorの定義}{7}}
13
+ \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces }}{8}}
14
+ \newlabel{default}{{1}{8}}
15
+ \@writefile{toc}{\contentsline {paragraph}{実際のコード}{8}}
16
+ \@writefile{toc}{\contentsline {paragraph}{hikiutilsの実行}{9}}
17
+ \@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces }}{9}}
18
+ \newlabel{default}{{2}{9}}
19
+ \@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces }}{10}}
20
+ \newlabel{default}{{3}{10}}
21
+ \@writefile{toc}{\contentsline {paragraph}{実際のコード}{10}}
22
+ \@writefile{toc}{\contentsline {paragraph}{コマンドの表示と実行}{13}}
23
+ \@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces }}{13}}
24
+ \newlabel{default}{{4}{13}}
25
+ \@writefile{toc}{\contentsline {paragraph}{実際のコード}{14}}
26
+ \@setckpt{results}{
27
+ \setcounter{page}{17}
28
+ \setcounter{equation}{0}
29
+ \setcounter{enumi}{3}
30
+ \setcounter{enumii}{0}
31
+ \setcounter{enumiii}{0}
32
+ \setcounter{enumiv}{0}
33
+ \setcounter{footnote}{0}
34
+ \setcounter{mpfootnote}{0}
35
+ \setcounter{part}{0}
36
+ \setcounter{section}{3}
37
+ \setcounter{subsection}{2}
38
+ \setcounter{subsubsection}{3}
39
+ \setcounter{paragraph}{0}
40
+ \setcounter{subparagraph}{0}
41
+ \setcounter{figure}{4}
42
+ \setcounter{table}{1}
43
+ \setcounter{lstnumber}{61}
44
+ \setcounter{lstlisting}{0}
45
+ }
@@ -0,0 +1,342 @@
1
+ \section{結果}
2
+ \subsection{開発の結果}
3
+ 開発の結果コマンドを以下のように書き換えることができた
4
+
5
+ \begin{table}[htbp]\begin{center}
6
+ \caption{}
7
+ \begin{tabular}{llll}
8
+ \hline
9
+ 変更前 &変更後 &コマンド一覧 \\ \hline
10
+ add & &add sources info \\
11
+ checkdb & &check database file \\
12
+ datebase FILE & &read datebase file \\
13
+ display FILE &  &display converted hikifile \\
14
+ edit FILE &open &open file \\
15
+ euc FILE & &translate file to euc \\
16
+ help [COMMAND] & &Describe available commands or one specific command \\
17
+ list [FILE] &ls &list files \\
18
+ move [FILE] &mv| move file \\
19
+ remove [FILE] &rm &remove files \\
20
+ rsync & &rsync files \\
21
+ show & &lsとかぶる. \\
22
+ target VAL &cd &set target id \\
23
+ update FILE &touch &update file \\
24
+ version & &show program version \\
25
+ \hline
26
+ \end{tabular}
27
+ \label{default}
28
+ \end{center}\end{table}
29
+ %for inserting separate lines, use \hline, \cline{2-3} etc.
30
+
31
+ hikiutilsのコマンドライン解析ツールをoptparseからthorに換えることでコマンドの書き換えを行うことができた.
32
+ また,プログラムのコードもoptparseよりthorのほうが短く書け,簡単にコマンドを作成することができた.
33
+
34
+ \subsection{thorとoptparseのコードの比較}
35
+ \subsubsection{Thorとは}
36
+ Thorとは,コマンドラインツールの作成を支援するライブラリのことである.
37
+ gitやbundlerのようにサブコマンドを含むコマンドラインツールを簡単に作成することができる[4].
38
+
39
+ \paragraph{Thorの基本的な流れ}
40
+ \begin{enumerate}
41
+ \item Thorを継承したクラスのパブリックメソッドがコマンドになる
42
+ \item クラス.start(ARGV)でコマンドラインの処理をスタートする
43
+ \end{enumerate}
44
+ という流れである[4].
45
+
46
+ \subsubsection{optparseとは}
47
+ optparseモジュールとは,getoptよりも簡便で,柔軟性に富み,かつ強力なコマンドライン解析ライブラリである.
48
+ optparseでは,より宣言的なスタイルのコマンドライン解析手法,すなわちOptionParserのインスタンスでコマンドラインを解析するという手法をとっている.
49
+ これを使うと,GNU/POSIX構文でオプションを指定できるだけでなく,使用法やヘルプメッセージの生成も行える[5].
50
+
51
+ \paragraph{optparseの基本的な流れ}
52
+ \begin{enumerate}
53
+ \item OptionParserオブジェクトoptを生成する
54
+ \item オプションを取り扱うブロックをoptに登録する
55
+ \item opt.parse(ARGV)でコマンドラインを実際にparseする
56
+ \end{enumerate}
57
+ という流れである[6].
58
+
59
+ \subsubsection{コードの解説}
60
+ \paragraph{Thorの定義}
61
+ \begin{figure}[htbp]\begin{center}
62
+ \includegraphics[width=6cm,bb=0 0 442 500]{../figs/./hikiutils_yamane.003.jpg}
63
+ \caption{}
64
+ \label{default}\end{center}\end{figure}
65
+ \begin{enumerate}
66
+ \item Hikithor::CLI.start(ARGV)が呼ばれる
67
+ \item initializeメソッドが呼ばれる
68
+ \item これではThorのinitializeメソッドが呼ばれない
69
+ \item superを書くことでThorのinitializeメソッドが呼ばれる
70
+ \end{enumerate}
71
+ optparseではrequireでoptparseを呼ぶだけでいいが,ThorではrequireでThorを呼びCLIクラスで継承しinitializeメソッドにsuperを書くことでThorのinitializeを呼ぶ必要がある.
72
+
73
+ \paragraph{実際のコード}\begin{lstlisting}[style=customRuby]
74
+ # -*- coding: utf-8 -*-
75
+ require 'thor'
76
+ require 'kconv'
77
+ require 'hikidoc'
78
+ require 'erb'
79
+ require "hikiutils/version"
80
+ require "hikiutils/tmarshal"
81
+ require "hikiutils/infodb"
82
+ require 'systemu'
83
+ require 'fileutils'
84
+ require 'yaml'
85
+ require 'pp'
86
+
87
+ module Hikithor
88
+
89
+ DATA_FILE=File.join(ENV['HOME'],'.hikirc')
90
+ attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
91
+
92
+ class CLI < Thor
93
+ def initialize(*args)
94
+ super
95
+ @data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
96
+ data_path = File.join(ENV['HOME'], '.hikirc')
97
+ DataFiles.prepare(data_path)
98
+
99
+ file = File.open(DATA_FILE,'r')
100
+ @src = YAML.load(file.read)
101
+ file.close
102
+ @target = @src[:target]
103
+ @l_dir=@src[:srcs][@target][:local_dir]
104
+ browser = @src[:browser]
105
+ @browser = (browser==nil) ? 'firefox' : browser
106
+ p editor_command = @src[:editor_command]
107
+ @editor_command = (editor_command==nil) ? 'open -a mi' : editor_command
108
+ end
109
+ \end{lstlisting}
110
+ \paragraph{hikiutilsの実行}
111
+ \begin{itemize}
112
+ \item Thor
113
+ \end{itemize}
114
+ \begin{figure}[htbp]\begin{center}
115
+ \includegraphics[width=6cm,bb=0 0 442 500]{../figs/./hikiutils_yamane.004.jpg}
116
+ \caption{}
117
+ \label{default}\end{center}\end{figure}
118
+ \begin{enumerate}
119
+ \item hiki\_thorのHikithor::CLI.start(ARGV)でhikiutils\_thor.rbのCLIクラスを呼ぶ\verb|{{br}}|
120
+ \item hikiutils\_thor.rbのCLIクラスのメソッドを順に実行していく\verb|{{br}}|
121
+ \end{enumerate}
122
+ \begin{itemize}
123
+ \item optparse
124
+ \end{itemize}
125
+ \begin{figure}[htbp]\begin{center}
126
+ \includegraphics[width=6cm,bb=0 0 442 500]{../figs/./hikiutils_yamane.001.jpg}
127
+ \caption{}
128
+ \label{default}\end{center}\end{figure}
129
+ \begin{enumerate}
130
+ \item HikiのHikiUtils::Command.run(ARGV)でhikiutils.rbのrunメソッドを呼ぶ
131
+ \item new(argv).executeでexecuteメソッドが実行される
132
+ \end{enumerate}
133
+ このようにoptparseでは実行を行うためのメソッドが必要であるが,Thorではクラスのメソッドを順に実行していくため
134
+ runメソッドとexecuteメソッドは必要ない.
135
+
136
+ \paragraph{実際のコード}
137
+ \begin{itemize}
138
+ \item Thor
139
+ \end{itemize}\begin{lstlisting}[style=customRuby]
140
+ #!/usr/bin/env ruby
141
+
142
+ require "hikiutils_thor"
143
+
144
+ Hikithor::CLI.start(ARGV)
145
+ \end{lstlisting}\begin{lstlisting}[style=customRuby]
146
+ # -*- coding: utf-8 -*-
147
+ require 'thor'
148
+ require 'kconv'
149
+ require 'hikidoc'
150
+ require 'erb'
151
+ require "hikiutils/version"
152
+ require "hikiutils/tmarshal"
153
+ require "hikiutils/infodb"
154
+ require 'systemu'
155
+ require 'fileutils'
156
+ require 'yaml'
157
+ require 'pp'
158
+
159
+ module Hikithor
160
+
161
+ DATA_FILE=File.join(ENV['HOME'],'.hikirc')
162
+ attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
163
+
164
+ class CLI < Thor
165
+ def initialize(*args)
166
+ super
167
+ @data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
168
+ data_path = File.join(ENV['HOME'], '.hikirc')
169
+ DataFiles.prepare(data_path)
170
+
171
+ file = File.open(DATA_FILE,'r')
172
+ @src = YAML.load(file.read)
173
+ file.close
174
+ @target = @src[:target]
175
+ @l_dir=@src[:srcs][@target][:local_dir]
176
+ browser = @src[:browser]
177
+ @browser = (browser==nil) ? 'firefox' : browser
178
+
179
+ \end{lstlisting}
180
+ \begin{itemize}
181
+ \item optparse
182
+ \end{itemize}\begin{lstlisting}[style=customRuby]
183
+ #!/usr/bin/env ruby
184
+
185
+ require "hikiutils"
186
+
187
+ HikiUtils::Command.run(ARGV)
188
+ \end{lstlisting}\begin{lstlisting}[style=customRuby]
189
+ def self.run(argv=[])
190
+ print "hikiutils: provide utilities for helping hiki editing.\n"
191
+ new(argv).execute
192
+ end
193
+
194
+ def execute
195
+ @argv << '--help' if @argv.size==0
196
+ command_parser = OptionParser.new do |opt|
197
+ opt.on('-v', '--version','show program Version.') { |v|
198
+ opt.version = HikiUtils::VERSION
199
+ puts opt.ver
200
+ }
201
+ opt.on('-s', '--show','show sources') {show_sources}
202
+ opt.on('-a', '--add','add sources info') {add_sources }
203
+ opt.on('-t', '--target VAL','set target id') {|val| set_target(val) }
204
+ opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
205
+ opt.on('-l', '--list [FILE]','list files') {|file| list_files(file) }
206
+ opt.on('-u', '--update FILE','update file') {|file| update_file(file) }
207
+ opt.on('-r', '--rsync','rsync files') {rsync_files}
208
+ opt.on('--database FILE','read database file') {|file| db_file(file)}
209
+ opt.on('--display FILE','display converted hikifile') {|file| display(f\
210
+ ile)}
211
+ opt.on('-c', '--checkdb','check database file') {check_db}
212
+ opt.on('--remove FILE','remove file') {|file| remove_file(file)}
213
+ opt.on('--move FILES','move file1,file2',Array) {|files| move_file(file\
214
+ s)}
215
+ opt.on('--euc FILE','translate file to euc') {|file| euc_file(file) }
216
+ opt.on('--initialize','initialize source directory') {dir_init() }
217
+ end
218
+ begin
219
+ command_parser.parse!(@argv)
220
+ rescue=> eval
221
+ p eval
222
+ end
223
+ dump_sources
224
+ exit
225
+ end
226
+ \end{lstlisting}
227
+ \paragraph{コマンドの表示と実行}
228
+ \begin{itemize}
229
+ \item Thor
230
+ \end{itemize}
231
+ \begin{figure}[htbp]\begin{center}
232
+ \includegraphics[width=6cm,bb=0 0 442 500]{../figs/./hikiutils_yamane.002.jpg}
233
+ \caption{}
234
+ \label{default}\end{center}\end{figure}
235
+ \begin{enumerate}
236
+ \item コマンド名,コマンドの説明を一覧に表示させる
237
+ \item パブリックメソッドのコマンドを別のコマンド名でも実行できるようにする
238
+ \item コマンドの命令の実行コード
239
+ \end{enumerate}
240
+ \begin{itemize}
241
+ \item optparse
242
+ \end{itemize}
243
+ \verb|{{attach_view(hikiutils_yamane.005.jpg)}}|
244
+ よって,optparseではOptionParserオブジェクトoptを生成を行い,コマンドをoptに登録して一覧に表示するメソッドとそれぞれコマンドの実行処理が書かれたメソッドがあるが,
245
+ thorではそれぞれのdescで一覧を表示しmapとパブリックメソッドでコマンドの実行処理を行うためコードが短くなる.
246
+
247
+ \paragraph{実際のコード}
248
+ \begin{itemize}
249
+ \item Thor
250
+ \end{itemize}\begin{lstlisting}[style=customRuby]
251
+ desc 'show,--show', 'show sources'
252
+ map "--show" => "show"
253
+ def show
254
+ printf("target_no:%i\n",@src[:target])
255
+ printf("editor_command:%s\n",@src[:editor_command])
256
+ @i_size,@n_size,@l_size,@g_size=3,5,30,15 #i,g_size are fixed
257
+ n_l,l_l=0,0
258
+ @src[:srcs].each_with_index{|src,i|
259
+ n_l =(n_l= src[:nick_name].length)>@n_size? n_l:@n_size
260
+ l_l =(l_l= src[:local_dir].length)>@l_size? l_l:@l_size
261
+ }
262
+ @n_size,@l_size=n_l,l_l
263
+ command = Command.new
264
+ header = command.display_format('id','name','local directory','global uri',@i_size,@n_size,@l_size,@g_size)
265
+
266
+ puts header
267
+ puts '-' * header.size
268
+
269
+ @src[:srcs].each_with_index{|src,i|
270
+ target = i==@src[:target] ? '*':' '
271
+ id = target+i.to_s
272
+ name=src[:nick_name]
273
+ local=src[:local_dir]
274
+ global=src[:global_uri]
275
+ puts command.display_format(id,name,local,global,@i_size,@n_size,@l_size,@g_size)
276
+ }
277
+ end
278
+ \end{lstlisting}
279
+ \begin{itemize}
280
+ \item optparse
281
+ \end{itemize}\begin{lstlisting}[style=customRuby]
282
+ def execute
283
+ @argv << '--help' if @argv.size==0
284
+ command_parser = OptionParser.new do |opt|
285
+ opt.on('-v', '--version','show program Version.') { |v|
286
+ opt.version = HikiUtils::VERSION
287
+ puts opt.ver
288
+ }
289
+ opt.on('-s', '--show','show sources') {show_sources}
290
+ opt.on('-a', '--add','add sources info') {add_sources }
291
+ opt.on('-t', '--target VAL','set target id') {|val| set_target(val)}
292
+ opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
293
+ opt.on('-l', '--list [FILE]','list files') {|file| list_files(file)}
294
+ opt.on('-u', '--update FILE','update file') {|file| update_file(file) }
295
+ opt.on('-r', '--rsync','rsync files') {rsync_files}
296
+ opt.on('--database FILE','read database file') {|file| db_file(file)}
297
+ opt.on('--display FILE','display converted hikifile') {|file| display(file)}
298
+ opt.on('-c', '--checkdb','check database file') {check_db}
299
+ opt.on('--remove FILE','remove file') {|file| remove_file(file)}
300
+ opt.on('--move FILES','move file1,file2',Array) {|files| move_file(files)}
301
+ opt.on('--euc FILE','translate file to euc') {|file| euc_file(file)}
302
+ opt.on('--initialize','initialize source directory') {dir_init() }
303
+ end
304
+ begin
305
+ command_parser.parse!(@argv)
306
+ rescue=> eval
307
+ p eval
308
+ end
309
+ dump_sources
310
+ exit
311
+ end
312
+
313
+ def show_sources()
314
+ printf("target_no:%i\n",@src[:target])
315
+ printf("editor_command:%s\n",@src[:editor_command])
316
+ check_display_size()
317
+ header = display_format('id','name','local directory','global uri')
318
+
319
+ puts header
320
+ puts '-' * header.size
321
+
322
+ @src[:srcs].each_with_index{|src,i|
323
+ target = i==@src[:target] ? '*':' '
324
+ id = target+i.to_s
325
+ name=src[:nick_name]
326
+ local=src[:local_dir]
327
+ global=src[:global_uri]
328
+ puts display_format(id,name,local,global)
329
+ }
330
+ end
331
+
332
+ def add_sources
333
+ cont = {}
334
+ @data_name.each{|name|
335
+ printf("%s ? ", name)
336
+ tmp = gets.chomp
337
+ cont[name.to_sym] = tmp
338
+ }
339
+ @src[:srcs] << cont
340
+ show_sources
341
+ end
342
+ \end{lstlisting}