hikiutils 0.2.3.17 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Rakefile +76 -8
- data/exe/hiki +2 -3
- data/hikiutils.gemspec +1 -1
- data/lib/hikiutils.rb +9 -9
- data/lib/hikiutils/version.rb +1 -1
- data/lib/hikiutils_thor.rb +73 -61
- data/lib/templates/Rakefile_hiki_sync +96 -56
- data/{hikiutils_yamane/Rakefile → lib/templates/Rakefile_hiki_sync_new} +97 -57
- data/lib/templates/hiki_help.yml +48 -8
- metadata +6 -248
- data/abst/#testhiki# +0 -0
- data/abst/.DS_Store +0 -0
- data/abst/out2.pdf +0 -0
- data/abst/out3.aux +0 -15
- data/abst/out3.log +0 -193
- data/abst/out3.pdf +0 -0
- data/abst/out3.synctex.gz +0 -0
- data/abst/out3.tex +0 -106
- data/abst/out4.aux +0 -13
- data/abst/out4.log +0 -190
- data/abst/out4.pdf +0 -0
- data/abst/out4.synctex.gz +0 -0
- data/abst/out4.tex +0 -75
- data/abst/speed.png +0 -0
- data/abst/testhiki +0 -26
- data/abst/testhiki2 +0 -106
- data/abst/tmp.hiki +0 -14
- data/abst/tmp.html +0 -16
- data/abst/work.png +0 -0
- data/abst/yamane_abst.pdf +0 -0
- data/abst/yamane_abst.tex +0 -59
- data/abst/yamane_abst_new.pdf +0 -0
- data/abst/yamane_powerpoint.key +0 -0
- data/abst/yamane_powerpoint.pptx/.DS_Store +0 -0
- data/abst/yamane_powerpoint.pptx/Data/PresetImageFill0-1.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/PresetImageFill1-2.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/PresetImageFill2-3.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/PresetImageFill3-4.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/PresetImageFill4-5.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/PresetImageFill5-6.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/image1-12.png +0 -0
- data/abst/yamane_powerpoint.pptx/Data/image1-9.png +0 -0
- data/abst/yamane_powerpoint.pptx/Data/mt0@2x-13.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/mt10@2x-22.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/mt1@2x-14.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/mt2@2x-15.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/mt3@2x-16.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/mt4@2x-17.png +0 -0
- data/abst/yamane_powerpoint.pptx/Data/mt5@2x-18.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/mt6@2x-19.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/mt7@2x-20.png +0 -0
- data/abst/yamane_powerpoint.pptx/Data/mt8@2x-21.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/st0-23.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/st1-24.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/st2-25.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/st3-26.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/st4-276.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Data/st5-279.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/Index.zip +0 -0
- data/abst/yamane_powerpoint.pptx/Metadata/BuildVersionHistory.plist +0 -8
- data/abst/yamane_powerpoint.pptx/Metadata/DocumentIdentifier +0 -1
- data/abst/yamane_powerpoint.pptx/Metadata/Properties.plist +0 -0
- data/abst/yamane_powerpoint.pptx/preview-micro.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/preview-web.jpg +0 -0
- data/abst/yamane_powerpoint.pptx/preview.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/PresetImageFill0-1.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/PresetImageFill1-2.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/PresetImageFill2-3.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/PresetImageFill3-4.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/PresetImageFill4-5.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/PresetImageFill5-6.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/image1-12.png +0 -0
- data/abst/yamane_powerpoint_new.key/Data/image1-9.png +0 -0
- data/abst/yamane_powerpoint_new.key/Data/mt0@2x-13.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/mt10@2x-22.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/mt1@2x-14.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/mt2@2x-15.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/mt3@2x-16.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/mt4@2x-17.png +0 -0
- data/abst/yamane_powerpoint_new.key/Data/mt5@2x-18.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/mt6@2x-19.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/mt7@2x-20.png +0 -0
- data/abst/yamane_powerpoint_new.key/Data/mt8@2x-21.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/st0-381.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/st1-493.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/st2-495.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/st3-481.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/st4-485.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Data/st5-372.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/Index.zip +0 -0
- data/abst/yamane_powerpoint_new.key/Metadata/BuildVersionHistory.plist +0 -8
- data/abst/yamane_powerpoint_new.key/Metadata/DocumentIdentifier +0 -1
- data/abst/yamane_powerpoint_new.key/Metadata/Properties.plist +0 -0
- data/abst/yamane_powerpoint_new.key/preview-micro.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/preview-web.jpg +0 -0
- data/abst/yamane_powerpoint_new.key/preview.jpg +0 -0
- data/exe/hiki_thor +0 -5
- data/exe/hiki_thor~ +0 -8
- data/exe/hiki~ +0 -8
- data/hikis/README.hiki +0 -64
- data/hikis/README.hiki.html +0 -55
- data/hikis/README_ja.hiki +0 -67
- data/hikis/README_ja.hiki.html +0 -59
- data/hikis/yamane.hiki +0 -36
- data/hikiutils.wiki/Home.md +0 -68
- data/hikiutils.wiki/README.md +0 -65
- data/hikiutils.wiki/README_ja.md +0 -68
- data/hikiutils.wiki/yamane.md +0 -42
- data/hikiutils_bob/.gitignore +0 -1
- data/hikiutils_bob/Rakefile +0 -488
- data/hikiutils_bob/code.hiki +0 -31
- data/hikiutils_bob/figs/calphad_bob.pdf +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.001.bb +0 -5
- data/hikiutils_bob/figs/hikiutils_bob.001.jpeg +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.002.bb +0 -5
- data/hikiutils_bob/figs/hikiutils_bob.002.jpeg +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.003.jpeg +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.004.jpeg +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.005.jpeg +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.006.jpeg +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.007.jpeg +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.pdf +0 -0
- data/hikiutils_bob/figs/sync.pdf +0 -0
- data/hikiutils_bob/hiki_help.yml +0 -53
- data/hikiutils_bob/hikiutils_bob.graffle +0 -1195
- data/hikiutils_bob/hikiutils_bob.hiki +0 -6
- data/hikiutils_bob/hikiutils_bob.key +0 -0
- data/hikiutils_bob/hikiutils_bob/hikiutils_bob.001.jpeg +0 -0
- data/hikiutils_bob/hikiutils_bob/hikiutils_bob.002.jpeg +0 -0
- data/hikiutils_bob/hikiutils_bob/hikiutils_bob.003.jpeg +0 -0
- data/hikiutils_bob/hikiutils_bob/hikiutils_bob.004.jpeg +0 -0
- data/hikiutils_bob/hikiutils_bob/hikiutils_bob.005.jpeg +0 -0
- data/hikiutils_bob/hikiutils_bob/hikiutils_bob.006.jpeg +0 -0
- data/hikiutils_bob/hikiutils_bob/hikiutils_bob.007.jpeg +0 -0
- data/hikiutils_bob/latex_all.hiki +0 -230
- data/hikiutils_bob/latex_dir/code.aux +0 -26
- data/hikiutils_bob/latex_dir/code.log +0 -28
- data/hikiutils_bob/latex_dir/code.tex +0 -39
- data/hikiutils_bob/latex_dir/head.tex +0 -10
- data/hikiutils_bob/latex_dir/hikiutils_bob.aux +0 -4
- data/hikiutils_bob/latex_dir/hikiutils_bob.log +0 -345
- data/hikiutils_bob/latex_dir/hikiutils_bob.pdf +0 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.synctex.gz +0 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.tex +0 -55
- data/hikiutils_bob/latex_dir/hikiutils_bob.toc +0 -41
- data/hikiutils_bob/latex_dir/jlisting.sty +0 -216
- data/hikiutils_bob/latex_dir/jlisting.tex +0 -216
- data/hikiutils_bob/latex_dir/latex2hiki.aux +0 -28
- data/hikiutils_bob/latex_dir/latex2hiki.tex +0 -43
- data/hikiutils_bob/latex_dir/latex_all.aux +0 -37
- data/hikiutils_bob/latex_dir/latex_all.log +0 -28
- data/hikiutils_bob/latex_dir/latex_all.tex +0 -249
- data/hikiutils_bob/latex_dir/pre.tex +0 -36
- data/hikiutils_bob/latex_dir/references.tex +0 -4
- data/hikiutils_bob/latex_dir/sync.aux +0 -54
- data/hikiutils_bob/latex_dir/sync.tex +0 -262
- data/hikiutils_bob/references.hiki +0 -3
- data/hikiutils_bob/sync.hiki +0 -220
- data/hikiutils_bob/tmp1.txt +0 -32
- data/hikiutils_bob/toc.hiki +0 -32
- data/hikiutils_yamane/.gitignore +0 -1
- data/hikiutils_yamane/abstract.hiki +0 -8
- data/hikiutils_yamane/backup/hikiutils%28optparse%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%29 +0 -309
- data/hikiutils_yamane/backup/hikiutils%28thor%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%29 +0 -1
- data/hikiutils_yamane/backup/hikiutils_yamane +0 -703
- data/hikiutils_yamane/backup/hikiutils_yamane.hiki +0 -0
- data/hikiutils_yamane/backup/hikiutils_yamane_#hikiutils_yamane +0 -1
- data/hikiutils_yamane/backup/hikiutils_yamane_command_table +0 -19
- data/hikiutils_yamane/backup/hikiutils_yamane_introduction +0 -7
- data/hikiutils_yamane/discussion.hiki +0 -9
- data/hikiutils_yamane/figs/hikiutils_yamane.001.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane.002.bb +0 -5
- data/hikiutils_yamane/figs/hikiutils_yamane.002.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane.003.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane.004.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane.005.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane.006.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane.007.jpg +0 -0
- data/hikiutils_yamane/hiki_help.yml +0 -53
- data/hikiutils_yamane/hikiutils_yamane.hiki +0 -23
- data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_FamilyChineseOahu_EN_00317_2040x1360-small-12.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_FamilyChineseOahu_EN_02016_981x654-small-14.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_familychineseoahu_en_00317_2040x1360-96.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_familychineseoahu_en_02016_981x654-97.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_familychineseoahu_en_02390_2880x1921-94.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_familychineseoahu_en_02390_2880x1921-small-95.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/mt0@2x-102.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/mt10@2x-112.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/mt1@2x-103.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/mt2@2x-104.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/mt3@2x-105.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/mt4@2x-106.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/mt5@2x-107.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/mt6@2x-108.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/mt7@2x-109.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/mt8@2x-110.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/mt9@2x-111.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/pasted-image-100.tiff +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/pasted-image-98.tiff +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/pasted-image-small-101.png +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/pasted-image-small-99.png +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/st0-113.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/st1-114.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/st2-115.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/st3-116.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/st4-117.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/st5-118.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/st6-119.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Data/tile_paper_medgray-93.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Index.zip +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/Metadata/BuildVersionHistory.plist +0 -8
- data/hikiutils_yamane/hikiutils_yamane.key/Metadata/DocumentIdentifier +0 -1
- data/hikiutils_yamane/hikiutils_yamane.key/Metadata/Properties.plist +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/preview-micro.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/preview-web.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.key/preview.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.001.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.002.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.003.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.004.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.005.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.006.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.007.jpeg +0 -0
- data/hikiutils_yamane/introduction.hiki +0 -10
- data/hikiutils_yamane/latex_dir/abstract.aux +0 -22
- data/hikiutils_yamane/latex_dir/abstract.tex +0 -9
- data/hikiutils_yamane/latex_dir/discussion.aux +0 -22
- data/hikiutils_yamane/latex_dir/discussion.tex +0 -9
- data/hikiutils_yamane/latex_dir/head.tex +0 -10
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.aux +0 -10
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.log +0 -344
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.pdf +0 -0
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.synctex.gz +0 -0
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.tex +0 -62
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.toc +0 -31
- data/hikiutils_yamane/latex_dir/introduction.aux +0 -26
- data/hikiutils_yamane/latex_dir/introduction.tex +0 -12
- data/hikiutils_yamane/latex_dir/jlisting.sty +0 -216
- data/hikiutils_yamane/latex_dir/method.aux +0 -46
- data/hikiutils_yamane/latex_dir/method.tex +0 -253
- data/hikiutils_yamane/latex_dir/pre.tex +0 -36
- data/hikiutils_yamane/latex_dir/results.aux +0 -50
- data/hikiutils_yamane/latex_dir/results.tex +0 -257
- data/hikiutils_yamane/method.hiki +0 -238
- data/hikiutils_yamane/results.hiki +0 -228
- data/hikiutils_yamane/test.rb +0 -10
- data/hikiutils_yamane/toc.hiki +0 -19
- data/lib/hikiutils.rb~ +0 -389
- data/lib/hikiutils_thor.rb~ +0 -323
Binary file
|
Binary file
|
@@ -1,62 +0,0 @@
|
|
1
|
-
\documentclass[12pt,a4paper]{jsarticle}
|
2
|
-
\usepackage[dvipdfmx]{graphicx}
|
3
|
-
\usepackage[dvipdfmx]{color}
|
4
|
-
\usepackage{url}
|
5
|
-
\usepackage{listings,jlisting}
|
6
|
-
% to use japanese correctly, install jlistings.
|
7
|
-
\lstset{
|
8
|
-
basicstyle={\ttfamily},
|
9
|
-
identifierstyle={},
|
10
|
-
commentstyle={\color{red}},
|
11
|
-
keywordstyle={\bfseries\color{cyan}},
|
12
|
-
ndkeywordstyle={},
|
13
|
-
stringstyle={\color{blue}},
|
14
|
-
frame={tb},
|
15
|
-
breaklines=true,
|
16
|
-
numbers=left,
|
17
|
-
numberstyle={},
|
18
|
-
stepnumber=1,
|
19
|
-
numbersep=1zw,
|
20
|
-
xrightmargin=0zw,
|
21
|
-
xleftmargin=3zw,
|
22
|
-
lineskip=0.5ex
|
23
|
-
}
|
24
|
-
\lstdefinestyle{customCsh}{
|
25
|
-
language={csh},
|
26
|
-
numbers=none,
|
27
|
-
}
|
28
|
-
\lstdefinestyle{customRuby}{
|
29
|
-
language={ruby},
|
30
|
-
numbers=left,
|
31
|
-
}
|
32
|
-
\lstdefinestyle{customTex}{
|
33
|
-
language={tex},
|
34
|
-
numbers=none,
|
35
|
-
}
|
36
|
-
\lstdefinestyle{customJava}{
|
37
|
-
language={java},
|
38
|
-
numbers=left,
|
39
|
-
}
|
40
|
-
\begin{document}
|
41
|
-
\title{卒業論文\\
|
42
|
-
\vspace{4cm} コマンドラインツール作成ライブラリThorによる\\hikiutilsの書き換え}
|
43
|
-
\author{ 関西学院大学 理工学部 情報科学科\\\\27013554 山根亮太}
|
44
|
-
\date{\vspace{3cm} 2017年 3月\\
|
45
|
-
\vspace{3cm} 指導教員 西谷 滋人 教授}
|
46
|
-
\maketitle
|
47
|
-
\setcounter{tocdepth}{4}
|
48
|
-
|
49
|
-
\tableofcontents
|
50
|
-
|
51
|
-
\include{abstract}
|
52
|
-
\include{introduction}
|
53
|
-
\include{method}
|
54
|
-
\include{results}
|
55
|
-
\include{discussion}
|
56
|
-
\begin{thebibliography}{99}
|
57
|
-
\bibitem{1-1} hikidoc, \url{https://rubygems.org/gems/hikidoc/versions/0.1.0,} \url{https://github.com/hiki/hikidoc,} 2017/1/30 アクセス.
|
58
|
-
\bibitem{1-2} 「Thorの使い方まとめ」, \url{http://qiita.com/succi0303/items/32560103190436c9435b} 2015/01/14更新, 2017/1/30 アクセス.
|
59
|
-
\bibitem{1-3} 「15.5. optparse - コマンドラインオプション解析器」, \url{http://docs.python.jp/2/library/optparse.html,} 2017/1/30 アクセス.
|
60
|
-
\bibitem{1-4} 「library optparse」, \url{https://docs.ruby-lang.org/ja/latest/library/optparse.html,} 2017/1/30 アクセス.
|
61
|
-
\end{thebibliography}
|
62
|
-
\end{document}
|
@@ -1,31 +0,0 @@
|
|
1
|
-
\contentsline {section}{\numberline {1}概要}{4}
|
2
|
-
\contentsline {section}{\numberline {2}序論}{5}
|
3
|
-
\contentsline {section}{\numberline {3}方法}{7}
|
4
|
-
\contentsline {subsection}{\numberline {3.1}optparseとThorの比較}{7}
|
5
|
-
\contentsline {subsubsection}{\numberline {3.1.1}Thor}{7}
|
6
|
-
\contentsline {paragraph}{fizzbuzzメソッド,versionメソッド}{8}
|
7
|
-
\contentsline {subsubsection}{\numberline {3.1.2}optparse}{8}
|
8
|
-
\contentsline {paragraph}{runメソッド}{9}
|
9
|
-
\contentsline {paragraph}{initializeメソッド}{9}
|
10
|
-
\contentsline {paragraph}{executeメソッド}{9}
|
11
|
-
\contentsline {paragraph}{fizzbuzzメソッド}{9}
|
12
|
-
\contentsline {paragraph}{versionメソッド}{10}
|
13
|
-
\contentsline {subsection}{\numberline {3.2}既存のhikiutilsのコマンド解説}{10}
|
14
|
-
\contentsline {subsubsection}{\numberline {3.2.1}コマンドの登録と実行メソッド}{10}
|
15
|
-
\contentsline {subsubsection}{\numberline {3.2.2}CLIの実行プロセス}{12}
|
16
|
-
\contentsline {subsubsection}{\numberline {3.2.3}コード}{13}
|
17
|
-
\contentsline {section}{\numberline {4}結果}{15}
|
18
|
-
\contentsline {subsection}{\numberline {4.1}コマンドの命名原則}{15}
|
19
|
-
\contentsline {subsubsection}{\numberline {4.1.1}hikiutilsの想定利用形態}{15}
|
20
|
-
\contentsline {subsubsection}{\numberline {4.1.2}コメンド名と振る舞いの詳細}{16}
|
21
|
-
\contentsline {paragraph}{open FILE}{17}
|
22
|
-
\contentsline {paragraph}{ls [FILE]}{17}
|
23
|
-
\contentsline {paragraph}{rsync}{17}
|
24
|
-
\contentsline {paragraph}{touch FILE}{18}
|
25
|
-
\contentsline {paragraph}{pwd}{18}
|
26
|
-
\contentsline {paragraph}{cd VAL}{18}
|
27
|
-
\contentsline {subsection}{\numberline {4.2}Thorによる実装}{18}
|
28
|
-
\contentsline {subsubsection}{\numberline {4.2.1}クラス初期化}{18}
|
29
|
-
\contentsline {subsubsection}{\numberline {4.2.2}コマンド定義}{20}
|
30
|
-
\contentsline {subsubsection}{\numberline {4.2.3}CLIの実行プロセス}{21}
|
31
|
-
\contentsline {section}{\numberline {5}optparseからThorへの移行}{24}
|
@@ -1,26 +0,0 @@
|
|
1
|
-
\relax
|
2
|
-
\citation{1-1}
|
3
|
-
\@writefile{toc}{\contentsline {section}{\numberline {2}序論}{5}}
|
4
|
-
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces hiki web systemとhiki systemの対応関係.}}{6}}
|
5
|
-
\newlabel{fig:one}{{1}{6}}
|
6
|
-
\newlabel{default}{{1}{6}}
|
7
|
-
\@setckpt{introduction}{
|
8
|
-
\setcounter{page}{7}
|
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}{0}
|
19
|
-
\setcounter{subsubsection}{0}
|
20
|
-
\setcounter{paragraph}{0}
|
21
|
-
\setcounter{subparagraph}{0}
|
22
|
-
\setcounter{figure}{1}
|
23
|
-
\setcounter{table}{0}
|
24
|
-
\setcounter{lstnumber}{1}
|
25
|
-
\setcounter{lstlisting}{0}
|
26
|
-
}
|
@@ -1,12 +0,0 @@
|
|
1
|
-
\section{序論}
|
2
|
-
hikiは,hiki記法を用いたwiki cloneである.wikiはウォード・カニンガムが作ったwikiwikiwebを源流とするhome page制作を容易にするシステムで,hikiもwikiの基本要求仕様を満足するシステムを提供する.wikiの特徴であるweb上で編集する機能を提供する.これを便宜上hiki web systemと呼ぶ.図\ref{fig:one}にある通り,一般的な表示画面の他に,編集画面が提供されており,ユーザーはこの編集画面からコンテンツを編集することが可能である.リンクやヘッダー,リスト,引用,表,図の表示などの基本テキストフォーマットが用意されている.
|
3
|
-
|
4
|
-
hiki web systemの実際の基本動作は,hiki.cgiプログラムを介して行われている.こちらを便宜上hiki systemと呼ぶ.図\ref{fig:one}に従ってhiki systemの動作概要を説明する.hiki systemは,data/textに置かれた書かれたプレーンテキストをhtmlへ変換する.この変換はhikidoc\cite{1-1}というhikiフォーマットconverterを使っている.また,添付書類はcache/attachに,一度フォーマットしたhtmlはparserに置かれており,それらを参照してhtmlを表示する画面をhiki.cgiは作っている.さらにhiki systemでは検索機能,自動リンク作成などが提供されている
|
5
|
-
|
6
|
-
\begin{figure}[htbp]\begin{center}
|
7
|
-
\includegraphics[width=12cm,bb= 0 0 937 753]{../figs/./hikiutils_yamane.001.jpg}
|
8
|
-
\caption{hiki web systemとhiki systemの対応関係.}
|
9
|
-
\label{fig:one}
|
10
|
-
\label{default}\end{center}\end{figure}
|
11
|
-
研究室内の内部文書,あるいは外部への宣伝資料,さらにwikipediaのように重要な研究成果の発信などに西谷研ではこのhiki systemを利用している.初心者にも覚えやすい直感的な操作である.しかし,慣れてくるとテキスト編集や画面更新にいちいちweb画面へ移行せねばならず,編集の思考が停止する.そこで,テキスト編集に優れたeditorとの連携や,terminal上のshell commandと連携しやすいようにhikiutilsというCLI(Command Line Interface)を作成して運用している.しかし,そのユーザインタフェースにはコマンドが直感的でないという問題点がある.そこで,Thorというコマンドラインツール作成ライブラリを用いる.hikiutilsでは,optparseというコマンドライン解析ライブラリを使用しているが,新たなライブラリThorを使用してコマンドを書き換え,より直感的なコマンドに変更する.
|
12
|
-
|
@@ -1,216 +0,0 @@
|
|
1
|
-
\NeedsTeXFormat{LaTeX2e}
|
2
|
-
\def\filedate{2006/02/20}
|
3
|
-
\def\fileversion{0.2}
|
4
|
-
\ProvidesPackage{jlisting}[\filedate\space\fileversion\space(Thor)]
|
5
|
-
%
|
6
|
-
\newcount\lst@nextchar
|
7
|
-
\let\lst@@ProcessSpace\lst@ProcessSpace
|
8
|
-
\def\lst@ProcessSpace#1{%
|
9
|
-
\lst@check@chartype{#1}%
|
10
|
-
\lst@@ProcessSpace
|
11
|
-
\lst@whitespacetrue}
|
12
|
-
\let\lst@@ProcessLetter\lst@ProcessLetter
|
13
|
-
\def\lst@ProcessLetter#1#2{%
|
14
|
-
\lst@check@chartype{#2}%
|
15
|
-
{\lst@@ProcessLetter{#1}}%
|
16
|
-
\relax}
|
17
|
-
\let\lst@@ProcessDigit\lst@ProcessDigit
|
18
|
-
\def\lst@ProcessDigit#1#2{%
|
19
|
-
\lst@check@chartype{#2}%
|
20
|
-
{\lst@@ProcessDigit{#1}}%
|
21
|
-
\relax}
|
22
|
-
\let\lst@@ProcessOther\lst@ProcessOther
|
23
|
-
\def\lst@ProcessOther#1#2{%
|
24
|
-
\lst@check@chartype{#2}%
|
25
|
-
{\lst@@ProcessOther{#1}}%
|
26
|
-
\relax}
|
27
|
-
\let\lst@@ProcessTabulator\lst@ProcessTabulator
|
28
|
-
\def\lst@ProcessTabulator#1{%
|
29
|
-
\lst@check@chartype{#1}%
|
30
|
-
\lst@@ProcessTabulator
|
31
|
-
\relax}
|
32
|
-
\def\lst@check@chartype#1#2#3{%
|
33
|
-
\edef\@tempa{\lst@nextchar=`\string#1\relax}%
|
34
|
-
\afterassignment\remove@to@nnil
|
35
|
-
\@tempa\@nnil
|
36
|
-
#2%
|
37
|
-
\ifnum\lst@nextchar<\@cclvi
|
38
|
-
#3%
|
39
|
-
\else
|
40
|
-
\lst@ifletter \else \lst@OutputOther \fi
|
41
|
-
\lst@whitespacefalse
|
42
|
-
\expandafter\lst@AppendJchar
|
43
|
-
\fi
|
44
|
-
#1}
|
45
|
-
\def\lst@AppendJchar#1#2{%
|
46
|
-
\lst@check@chartype{#2}%
|
47
|
-
{\advance\lst@length\@ne\lst@Append{#1}}%
|
48
|
-
\relax}
|
49
|
-
\def\lst@check@chartype@BOL#1{%
|
50
|
-
\edef\@tempa{\lst@nextchar=`\string#1\relax}%
|
51
|
-
\afterassignment\remove@to@nnil
|
52
|
-
\@tempa\@nnil
|
53
|
-
\ifnum\lst@nextchar<\@cclvi\else
|
54
|
-
\lst@whitespacefalse
|
55
|
-
\expandafter\lst@AppendJchar
|
56
|
-
\fi
|
57
|
-
#1}
|
58
|
-
\def\lst@InputListing#1{%
|
59
|
-
\begingroup
|
60
|
-
\lsthk@PreSet \gdef\lst@intname{#1}%
|
61
|
-
\expandafter\lstset\expandafter{\lst@set}%
|
62
|
-
\lsthk@DisplayStyle
|
63
|
-
\catcode\active=\active
|
64
|
-
\lst@Init\relax \let\lst@gobble\z@
|
65
|
-
\lst@SkipToFirst
|
66
|
-
\lst@ifprint \def\lst@next{\lst@get@filecontents{#1}}%
|
67
|
-
\else \let\lst@next\@empty
|
68
|
-
\fi
|
69
|
-
\lst@next
|
70
|
-
\lst@DeInit
|
71
|
-
\endgroup}
|
72
|
-
\newread\lst@inputfile
|
73
|
-
\def\lst@get@filecontents#1{%
|
74
|
-
\let\lst@filecontents\@empty
|
75
|
-
\openin\lst@inputfile=#1\relax
|
76
|
-
\let\@lst@get@filecontents@prevline\relax
|
77
|
-
\lst@get@filecontents@loop
|
78
|
-
\closein\lst@inputfile
|
79
|
-
\lst@filecontents\empty}
|
80
|
-
\def\lst@get@filecontents@loop{%
|
81
|
-
\read\lst@inputfile to\@lst@get@filecontents@currline
|
82
|
-
\ifx\@lst@get@filecontents@prevline\relax\else
|
83
|
-
\expandafter\expandafter\expandafter\def
|
84
|
-
\expandafter\expandafter\expandafter\lst@filecontents
|
85
|
-
\expandafter\expandafter\expandafter{%
|
86
|
-
\expandafter\lst@filecontents\@lst@get@filecontents@prevline}%
|
87
|
-
\fi
|
88
|
-
\let\@lst@get@filecontents@prevline\@lst@get@filecontents@currline
|
89
|
-
\ifeof\lst@inputfile\else
|
90
|
-
\expandafter\lst@get@filecontents@loop
|
91
|
-
\fi}
|
92
|
-
%%% [$B$3$N=hM}$b!$AjEv6/0z$G$9!%(B]
|
93
|
-
\def\lst@BOLGobble{%
|
94
|
-
\ifnum\lst@gobble>\z@
|
95
|
-
\@tempcnta\lst@gobble\relax
|
96
|
-
\expandafter\lst@BOLGobble@
|
97
|
-
\else
|
98
|
-
\expandafter\lst@check@chartype@BOL
|
99
|
-
\fi}
|
100
|
-
\def\lst@BOLGobble@#1{%
|
101
|
-
\let\lst@next#1%
|
102
|
-
\ifx \lst@next\relax\else
|
103
|
-
\ifx \lst@next\lst@MProcessListing\else
|
104
|
-
\ifx \lst@next\lst@ProcessFormFeed\else
|
105
|
-
\ifx \lst@next\lstenv@backslash
|
106
|
-
\let\lst@next\lstenv@BOLGobble@@
|
107
|
-
\else
|
108
|
-
\let\lst@next\lst@BOLGobble@@
|
109
|
-
\ifx #1\lst@ProcessTabulator
|
110
|
-
\advance\@tempcnta-\lst@tabsize\relax
|
111
|
-
\ifnum\@tempcnta<\z@
|
112
|
-
\lst@length-\@tempcnta \lst@PreGotoTabStop
|
113
|
-
\fi
|
114
|
-
\else
|
115
|
-
\edef\@tempa{\lst@nextchar=`\string#1\relax}%
|
116
|
-
\@tempa
|
117
|
-
\ifnum\lst@nextchar<\@cclvi\else
|
118
|
-
\advance\@tempcnta\m@ne
|
119
|
-
\fi
|
120
|
-
\advance\@tempcnta\m@ne
|
121
|
-
\fi
|
122
|
-
\fi \fi \fi \fi
|
123
|
-
\lst@next}
|
124
|
-
\def\lst@BOLGobble@@{%
|
125
|
-
\ifnum\@tempcnta>\z@
|
126
|
-
\expandafter\lst@BOLGobble@
|
127
|
-
\else
|
128
|
-
\expandafter\lst@check@chartype@BOL
|
129
|
-
\fi
|
130
|
-
}
|
131
|
-
%
|
132
|
-
% \begin{$B=$@5;v9`(B}{1.3}
|
133
|
-
% $B$A$g$C$H$7$?=$@5(B
|
134
|
-
\gdef\lst@breakProcessOther#1{\lst@ProcessOther#1}
|
135
|
-
% $B%=!<%9%3!<%IL\<!$K$*$1$kJ8;z$HHV9f$N6u$-(B
|
136
|
-
\let \l@lstlisting = \l@figure
|
137
|
-
% $B%-%c%W%7%g%s$H%=!<%9%3!<%IL\<!$KBP$9$kF|K\8lBP1~(B
|
138
|
-
\def\lstlistingname{$B%=!<%9%3!<%I(B}
|
139
|
-
\def\lstlistlistingname{$B%=!<%9%3!<%IL\<!(B}
|
140
|
-
% \end{$B=$@5;v9`(B}
|
141
|
-
\endinput
|
142
|
-
%
|
143
|
-
%#!platex
|
144
|
-
\documentclass[papersize]{jsarticle}
|
145
|
-
% Macros
|
146
|
-
\IfFileExists{dvipdfmx.def}{%
|
147
|
-
\usepackage[dvipdfmx]{color,graphicx}%
|
148
|
-
}{%
|
149
|
-
\usepackage[dvipdfm]{color,graphicx}%
|
150
|
-
}
|
151
|
-
\usepackage{listings}[2004/09/07]
|
152
|
-
\usepackage{jlisting}[2006/02/20]
|
153
|
-
\usepackage{url}
|
154
|
-
\usepackage{verbatim}
|
155
|
-
|
156
|
-
\makeatletter
|
157
|
-
% Original Macros
|
158
|
-
\def\email#1{\gdef\@email{\texttt{#1}}}
|
159
|
-
\def\homepage#1{\gdef\@homepage{\texttt{#1}}}
|
160
|
-
\def\mac#1{\textsf{#1}}
|
161
|
-
\def\URL#1{\texttt{#1}}
|
162
|
-
\def\src#1{\texttt{#1}}
|
163
|
-
|
164
|
-
% Dvipdfmx.def
|
165
|
-
\def\dvipdfmxDefi{http://tex.dante.jp/ok/dvipdfmx/}
|
166
|
-
\def\dvipdfmxDefii{http://ftp.ktug.or.kr/KTUG/dvipdfmx/contrib/latex/}
|
167
|
-
|
168
|
-
\IfFileExists{dvipdfmx.def}{%
|
169
|
-
\let \IfDvipdfmxDef = \empty \relax}{%
|
170
|
-
\typeout{^^Jget dvipdfmx.def at \dvipdfmxDefi^^J
|
171
|
-
or \dvipdfmxDefii^^J}%
|
172
|
-
\def\IfDvipdfmxDef{Get \src{dvipdfmx.def} at \URL \dvipdfmxDefii \\
|
173
|
-
or \URL \dvipdfmxDefi.}%
|
174
|
-
}
|
175
|
-
|
176
|
-
% Author Info
|
177
|
-
\author {Th\'or Watanabe\thanks \@email \space \thanks \@homepage}
|
178
|
-
\title {\mac{jlisting.sty}\\
|
179
|
-
---Japanese Localized Patch File of \mac{listings}---}
|
180
|
-
\email {thor@tex.dante.jp}
|
181
|
-
\homepage {http://tex.dante.jp/typo/}
|
182
|
-
\date {2006/02/20}
|
183
|
-
|
184
|
-
\makeatother
|
185
|
-
|
186
|
-
\begin{document}
|
187
|
-
\maketitle
|
188
|
-
%\IfDvipdfmxDef
|
189
|
-
|
190
|
-
\section{$B$A$g$C$H$7$?@bL@(B}% Short Description
|
191
|
-
|
192
|
-
$B1|B<@2I';a$N7G<(HD$N!VHFMQE*$JIbF0BN!W$H$$$&0lO"$N=q$-9~$_$+$i(B
|
193
|
-
$BE>:\$7$^$7$?!#(B
|
194
|
-
|
195
|
-
\begin{quote}
|
196
|
-
\url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21172.html}\\
|
197
|
-
\url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21184.html}\\
|
198
|
-
\url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21189.html}\\
|
199
|
-
\url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21197.html}
|
200
|
-
\end{quote}
|
201
|
-
|
202
|
-
Copyright $B$O5H1JE/H~;a$K$"$k$N$@$H;W$$$^$9!%(B
|
203
|
-
|
204
|
-
\section{$B99?7MzNr(B}% ChageLogs
|
205
|
-
|
206
|
-
\begin{description}
|
207
|
-
\item[ver.~0.1 (2004/03/24)]
|
208
|
-
$B$H$j$"$($:8x3+!%(B
|
209
|
-
\item[ver.~0.2 (2006/02/20)]
|
210
|
-
\verb|\lst@breakProcessOther| $BL?Na$NDj5A$NDI2C!%(B
|
211
|
-
\end{description}
|
212
|
-
|
213
|
-
\section{$B%=!<%9%3!<%I(B}
|
214
|
-
\par\narrowbaselines
|
215
|
-
\verbatiminput{jlisting.sty}
|
216
|
-
\end{document}
|
@@ -1,46 +0,0 @@
|
|
1
|
-
\relax
|
2
|
-
\citation{1-2}
|
3
|
-
\citation{1-2}
|
4
|
-
\citation{1-2}
|
5
|
-
\@writefile{toc}{\contentsline {section}{\numberline {3}方法}{7}}
|
6
|
-
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}optparseとThorの比較}{7}}
|
7
|
-
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.1}Thor}{7}}
|
8
|
-
\citation{1-3}
|
9
|
-
\citation{1-4}
|
10
|
-
\@writefile{toc}{\contentsline {paragraph}{fizzbuzzメソッド,versionメソッド}{8}}
|
11
|
-
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.2}optparse}{8}}
|
12
|
-
\@writefile{toc}{\contentsline {paragraph}{runメソッド}{9}}
|
13
|
-
\@writefile{toc}{\contentsline {paragraph}{initializeメソッド}{9}}
|
14
|
-
\@writefile{toc}{\contentsline {paragraph}{executeメソッド}{9}}
|
15
|
-
\@writefile{toc}{\contentsline {paragraph}{fizzbuzzメソッド}{9}}
|
16
|
-
\@writefile{toc}{\contentsline {paragraph}{versionメソッド}{10}}
|
17
|
-
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}既存のhikiutilsのコマンド解説}{10}}
|
18
|
-
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.1}コマンドの登録と実行メソッド}{10}}
|
19
|
-
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces コマンドの登録と実行メソッドの対応.}}{10}}
|
20
|
-
\newlabel{fig:005}{{2}{10}}
|
21
|
-
\newlabel{default}{{2}{10}}
|
22
|
-
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.2}CLIの実行プロセス}{12}}
|
23
|
-
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces CLIの実行プロセス.}}{12}}
|
24
|
-
\newlabel{fig:007}{{3}{12}}
|
25
|
-
\newlabel{default}{{3}{12}}
|
26
|
-
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3}コード}{13}}
|
27
|
-
\@setckpt{method}{
|
28
|
-
\setcounter{page}{15}
|
29
|
-
\setcounter{equation}{0}
|
30
|
-
\setcounter{enumi}{2}
|
31
|
-
\setcounter{enumii}{0}
|
32
|
-
\setcounter{enumiii}{0}
|
33
|
-
\setcounter{enumiv}{0}
|
34
|
-
\setcounter{footnote}{0}
|
35
|
-
\setcounter{mpfootnote}{0}
|
36
|
-
\setcounter{part}{0}
|
37
|
-
\setcounter{section}{3}
|
38
|
-
\setcounter{subsection}{2}
|
39
|
-
\setcounter{subsubsection}{3}
|
40
|
-
\setcounter{paragraph}{0}
|
41
|
-
\setcounter{subparagraph}{0}
|
42
|
-
\setcounter{figure}{3}
|
43
|
-
\setcounter{table}{0}
|
44
|
-
\setcounter{lstnumber}{38}
|
45
|
-
\setcounter{lstlisting}{0}
|
46
|
-
}
|
@@ -1,253 +0,0 @@
|
|
1
|
-
|
2
|
-
\section{方法}
|
3
|
-
\subsection{optparseとThorの比較}
|
4
|
-
今回の研究対象のhikiutilsは,optparseというコマンドライン解析ライブラリで実装されている.
|
5
|
-
本研究ではこの代替ライブラリとしてThorの採用を検討した.
|
6
|
-
本章の最初では,FizzBuzzという簡単なコードを例にoptparseとThorにより作成するコマンドライン解析コードの比較を行う.FizzBuzzはThorの使い方を解説した記事\cite{1-2}で紹介されている.比較しやすくするためoptparseでFizzBuzzを新たに実装した.
|
7
|
-
|
8
|
-
\subsubsection{Thor}
|
9
|
-
Thorとは,コマンドラインツールの作成を支援するライブラリのことである.gitやbundlerのようにサブコマンドを含むコマンドラインツールを簡単に作成することができる\cite{1-2}.
|
10
|
-
|
11
|
-
Thorの基本的な流れとしては
|
12
|
-
|
13
|
-
\begin{enumerate}
|
14
|
-
\item Thorを継承したクラスのメソッドがコマンドになる
|
15
|
-
\item クラス.start(ARGV)でコマンドラインの処理をスタートする
|
16
|
-
\end{enumerate}
|
17
|
-
である\cite{1-2}.
|
18
|
-
|
19
|
-
startに渡す引数が空の場合,Thorはクラスのヘルプリストを出力する.また,Thorはサブコマンドやサブサブコマンドも容易に作ることができる.
|
20
|
-
|
21
|
-
以下に示したコードがThorで記述されたfizzbuzzである.
|
22
|
-
\begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
|
23
|
-
module Fizzbuzz
|
24
|
-
class CLI < Thor
|
25
|
-
|
26
|
-
desc 'fizzbuzz', 'Get fizzbuzz result from limit number'
|
27
|
-
def fizzbuzz(limit)
|
28
|
-
print Fizzbuzz.fizzbuzz(limit).join(',')
|
29
|
-
exit
|
30
|
-
end
|
31
|
-
|
32
|
-
desc 'version', 'version'
|
33
|
-
def version
|
34
|
-
puts Fizzbuzz::VERSION
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
\end{lstlisting}
|
39
|
-
このコードもoptparseのfizzbuzzと同様fizzbuzzとversionのコマンドを実行させる.
|
40
|
-
|
41
|
-
\paragraph{fizzbuzzメソッド,versionメソッド}
|
42
|
-
descでコマンド一覧で表示させるコマンド名と説明を書く.メソッド内ではそれぞれのコマンドの処理内容が書かれている.
|
43
|
-
|
44
|
-
\subsubsection{optparse}
|
45
|
-
optparseとは,getoptよりも簡便で,柔軟性に富み,かつ強力なコマンドライン解析ライブラリである.optparseでは,より宣言的なスタイルのコマンドライン解析手法,すなわちOptionParserのインスタンスでコマンドラインを解析するという手法をとっている.これを使うと,GNU/POSIX構文でオプションを指定できるだけでなく,使用法やヘルプメッセージの生成も行える\cite{1-3}.利用頻度はあまり高くないが古くから開発され,使用例が広く紹介されている.
|
46
|
-
|
47
|
-
optparseの基本的な流れとしては
|
48
|
-
|
49
|
-
\begin{enumerate}
|
50
|
-
\item OptionParserオブジェクトoptを生成する
|
51
|
-
\item オプションを取り扱うブロックをopt.onに登録する
|
52
|
-
\item opt.parse(ARGV)でコマンドラインを実際にparseする
|
53
|
-
\end{enumerate}
|
54
|
-
である.
|
55
|
-
|
56
|
-
OptionParserはコマンドラインのオプション取り扱うためのクラスであるためオブジェクトoptを生成されopt.onにコマンドを登録することができる.しかし,OptionParser\#onにはコマンドが登録されているだけであるため,OptionParser\#parseが呼ばれた時,コマンドラインにオプションが指定されていれば実行される.optparseにはデフォルトとして--helpと--versionオプションを認識する\cite{1-4}.
|
57
|
-
|
58
|
-
以下に示したコードがoptparseで記述したfizzbuzzである.
|
59
|
-
\begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
|
60
|
-
module Fizzbuzz
|
61
|
-
class Command
|
62
|
-
|
63
|
-
def self.run(argv)
|
64
|
-
new(argv).execute
|
65
|
-
end
|
66
|
-
|
67
|
-
def initialize(argv)
|
68
|
-
@argv = argv
|
69
|
-
end
|
70
|
-
|
71
|
-
def execute
|
72
|
-
options = Options.parse!(@argv)
|
73
|
-
sub_command = options.delete(:command)
|
74
|
-
case sub_command
|
75
|
-
when 'fizzbuzz'
|
76
|
-
fizzbuzz(options[:id])
|
77
|
-
when 'version'
|
78
|
-
version
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def fizzbuzz(limit_number)
|
83
|
-
(0..limit_number).map do |num|
|
84
|
-
if (num % 15).zero? then print 'FizzBuzz'
|
85
|
-
elsif (num % 5).zero? then print 'Buzz'
|
86
|
-
elsif (num % 3).zero? then print 'Fizz'
|
87
|
-
else print num.to_s
|
88
|
-
end
|
89
|
-
print ' '
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def version
|
94
|
-
puts Fizzbuzz::VERSION
|
95
|
-
exit
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
\end{lstlisting}
|
100
|
-
このコードはfizzbuzzとversionをコマンドとして実行できる.
|
101
|
-
|
102
|
-
\paragraph{runメソッド}
|
103
|
-
コマンド実行を行うためのメソッドであり,argv配列を代入することでexecuteメソッドを実行する.
|
104
|
-
|
105
|
-
\paragraph{initializeメソッド}
|
106
|
-
初期化を行うメソッドである.
|
107
|
-
\begin{quote}\begin{verbatim}
|
108
|
-
@argv = argv
|
109
|
-
\end{verbatim}\end{quote}
|
110
|
-
こうすることでargvをクラス内で利用できるようにする.
|
111
|
-
|
112
|
-
\paragraph{executeメソッド}
|
113
|
-
上記でoptparseではopt.onにコマンドを登録する必要があると説明したが,opt.onで登録できるものはハイフンがついたコマンドだけであり,ハイフンなしのコマンドの登録はこのようになる.
|
114
|
-
|
115
|
-
argv配列の解析を行うOptions.parse!(@argv)をoptionsに代入して解析を行いsub\_commandに代入する.sub\_commandがfizzbuzzであればfizzbuzz(options[:id])メソッドを実行,versionであればversionメソッドを実行する.
|
116
|
-
|
117
|
-
\paragraph{fizzbuzzメソッド}
|
118
|
-
引数としてlimit\_numberを受け取り,0〜limit\_numberまでの数字を繰り返す.numが15であればFizzbuzzを表示,5であればBuzzを表示,3であればFizzを表示,それ以外は数字を表示し,その後に空白を表示する.
|
119
|
-
|
120
|
-
\paragraph{versionメソッド}
|
121
|
-
fizzbuzzのバージョンを表示する.
|
122
|
-
|
123
|
-
\subsection{既存のhikiutilsのコマンド解説}
|
124
|
-
既存のhikiutilsはコマンド解析ライブラリのoptparseを用いて,コマンドの処理を行っている.
|
125
|
-
optparseの特徴は,「コマンドの登録,実行method」に分けて記述することが期待されている.
|
126
|
-
また,CLIの起動の仕方が特徴的である.この二つを取り出して,動作とコードを説明する.
|
127
|
-
|
128
|
-
\subsubsection{コマンドの登録と実行メソッド}
|
129
|
-
optparseのコマンド登録と実行メソッドの呼び出し関係は図\ref{fig:005}の通りである.
|
130
|
-
|
131
|
-
\begin{figure}[htbp]\begin{center}
|
132
|
-
\includegraphics[width=12cm,bb= 0 0 937 753]{../figs/./hikiutils_yamane.005.jpg}
|
133
|
-
\caption{コマンドの登録と実行メソッドの対応.}
|
134
|
-
\label{fig:005}
|
135
|
-
\label{default}\end{center}\end{figure}
|
136
|
-
optparseでは以下の通り,コマンドの登録と実行が行われる.
|
137
|
-
|
138
|
-
\begin{enumerate}
|
139
|
-
\item OptionParserオブジェクトoptを生成
|
140
|
-
\item optにコマンドを登録
|
141
|
-
\item 入力されたコマンドの処理のメソッドへ移動
|
142
|
-
\end{enumerate}
|
143
|
-
この実装コードは次の通りである.
|
144
|
-
\begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
|
145
|
-
def execute
|
146
|
-
@argv << '--help' if @argv.size==0
|
147
|
-
command_parser = OptionParser.new do |opt|
|
148
|
-
opt.on('-v', '--version','show program Version.') { |v|
|
149
|
-
opt.version = HikiUtils::VERSION
|
150
|
-
puts opt.ver
|
151
|
-
}
|
152
|
-
opt.on('-s', '--show','show sources') {show_sources}
|
153
|
-
opt.on('-a', '--add','add sources info') {add_sources }
|
154
|
-
opt.on('-t', '--target VAL','set target id') {|val| set_target(val)}
|
155
|
-
opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
|
156
|
-
|
157
|
-
...省略...
|
158
|
-
|
159
|
-
end
|
160
|
-
begin
|
161
|
-
command_parser.parse!(@argv)
|
162
|
-
rescue=> eval
|
163
|
-
p eval
|
164
|
-
end
|
165
|
-
dump_sources
|
166
|
-
exit
|
167
|
-
end
|
168
|
-
|
169
|
-
def show_sources()
|
170
|
-
printf("target_no:%i\n",@src[:target])
|
171
|
-
printf("editor_command:%s\n",@src[:editor_command])
|
172
|
-
|
173
|
-
...省略...
|
174
|
-
|
175
|
-
end
|
176
|
-
|
177
|
-
以下略
|
178
|
-
|
179
|
-
\end{lstlisting}
|
180
|
-
optparseではOptionParserオブジェクトoptの生成を行い,コマンドをoptに登録することでコマンドを作成することができる.しかし,これはコマンドを登録しているだけでコマンドの一覧ではこれを表示することができるが,コマンドの実行を行うためには実行を行うためのメソッドを作成する必要がある.optparseでのコマンドの実行はoptで登録されたコマンドが入力されることでそれぞれのコマンドの処理を行うメソッドに移動し処理を行う.しかし,このコマンド登録はハイフンを付けたコマンドしか登録ができず,ハイフンなしのコマンド登録はまた別の手段でやらなくてはいけない.
|
181
|
-
|
182
|
-
\subsubsection{CLIの実行プロセス}
|
183
|
-
optparseを用いた場合のCLIの実行プロセスは図\ref{fig:007}の通りとなる.
|
184
|
-
|
185
|
-
\begin{figure}[htbp]\begin{center}
|
186
|
-
\includegraphics[width=12cm,bb= 0 0 937 753]{../figs/./hikiutils_yamane.007.jpg}
|
187
|
-
\caption{CLIの実行プロセス.}
|
188
|
-
\label{fig:007}
|
189
|
-
\label{default}\end{center}\end{figure}
|
190
|
-
CLIの実行プロセスは次の通りとなる.
|
191
|
-
|
192
|
-
\begin{enumerate}
|
193
|
-
\item HikiのHikiUtils::Command.run(ARGV)でhikiutils.rbのrunメソッドを呼ぶ
|
194
|
-
\item new(argv).executeでexecuteメソッドが実行される
|
195
|
-
\end{enumerate}
|
196
|
-
optparseではHikiutils::Command.run(ARGV)で実行され,requireで呼び出されたhikiutils.rbのrunメソッドが実行される.そこでコマンドを登録しているexecuteメソッドへ移動し入力したコマンドと対応させる.そして,対応したコマンドの処理が行われるメソッドに移動することで実行される.このようにoptparseでは実行を行うためのメソッドが必要である.
|
197
|
-
|
198
|
-
\subsubsection{コード}
|
199
|
-
optparseの呼び出し側のexe/hikiのコードは次の通りである.
|
200
|
-
\begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
|
201
|
-
#!/usr/bin/env ruby
|
202
|
-
|
203
|
-
require "hikiutils"
|
204
|
-
|
205
|
-
HikiUtils::Command.run(ARGV)
|
206
|
-
\end{lstlisting}
|
207
|
-
「require "hikituils"」ではlib/hikiutils.rbを読み出してくることを期待している.
|
208
|
-
これはgemspecファイルでlibへのロードパスの記述がされているため,hikiutils.rbを参照することができる.
|
209
|
-
「Hikiuils::Command.run(ARGV)」ではlib/hikiutils.rbのHikiUtilsモジュールCommandクラスのrunメソッドを実行する記述が成されている.
|
210
|
-
|
211
|
-
また呼び出される側のlib/hikiutils.rbのrunおよびexecute部のコードは次の通りとなる.
|
212
|
-
\begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
|
213
|
-
def self.run(argv=[])
|
214
|
-
print "hikiutils: provide utilities for helping hiki editing.\n"
|
215
|
-
new(argv).execute
|
216
|
-
end
|
217
|
-
|
218
|
-
def execute
|
219
|
-
@argv << '--help' if @argv.size==0
|
220
|
-
command_parser = OptionParser.new do |opt|
|
221
|
-
opt.on('-v', '--version','show program Version.') { |v|
|
222
|
-
opt.version = HikiUtils::VERSION
|
223
|
-
puts opt.ver
|
224
|
-
}
|
225
|
-
opt.on('-s', '--show','show sources') {show_sources}
|
226
|
-
opt.on('-a', '--add','add sources info') {add_sources }
|
227
|
-
opt.on('-t', '--target VAL','set target id') {|val| set_target(val) }
|
228
|
-
opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
|
229
|
-
opt.on('-l', '--list [FILE]','list files') {|file| list_files(file) }
|
230
|
-
opt.on('-u', '--update FILE','update file') {|file| update_file(file) }
|
231
|
-
opt.on('-r', '--rsync','rsync files') {rsync_files}
|
232
|
-
opt.on('--database FILE','read database file') {|file| db_file(file)}
|
233
|
-
opt.on('--display FILE','display converted hikifile') {|file| display(f\
|
234
|
-
ile)}
|
235
|
-
opt.on('-c', '--checkdb','check database file') {check_db}
|
236
|
-
opt.on('--remove FILE','remove file') {|file| remove_file(file)}
|
237
|
-
opt.on('--move FILES','move file1,file2',Array) {|files| move_file(file\
|
238
|
-
s)}
|
239
|
-
opt.on('--euc FILE','translate file to euc') {|file| euc_file(file) }
|
240
|
-
opt.on('--initialize','initialize source directory') {dir_init() }
|
241
|
-
end
|
242
|
-
begin
|
243
|
-
command_parser.parse!(@argv)
|
244
|
-
rescue=> eval
|
245
|
-
p eval
|
246
|
-
end
|
247
|
-
dump_sources
|
248
|
-
exit
|
249
|
-
end
|
250
|
-
\end{lstlisting}
|
251
|
-
runメソッドでは「hikiutils: provide utilities for helping hiki editing.」を表示させ,executeメソッドを実行させる.
|
252
|
-
executeメソッドでは最初に「@argv << '--help' if @argv.size==0」と記述する.これはもしargv配列の中身が空であればargv配列に'--help'を代入する.「command\_parser = OptionParser.new do |opt|」ではOptionParserオブジェクトがoptを生成しコマンドを登録していき,command\_parserに代入する.そして,「command\_parser.parse!(@argv)」では@argvにある文字列をcommand\_parserでparseする.つまり,ここでは入力されたコマンドを解析し,登録されたコマンドと一致すればその処理が行われる.もし,一致しなければevalメソッドで表示する.
|
253
|
-
|