tdiary 3.2.2.20130518 → 3.2.2.20130527
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +17 -11
- data/Rakefile +2 -0
- data/config.ru +2 -1
- data/tdiary.gemspec +7 -0
- data/tdiary.rb +6 -2
- data/tdiary/cli.rb +27 -1
- data/tdiary/environment.rb +0 -1
- data/tdiary/tasks/release.rake +7 -1
- data/tdiary/version.rb +1 -1
- metadata +87 -132
- data/vendor/hikidoc-0.0.6/COPYING +0 -28
- data/vendor/hikidoc-0.0.6/NEWS +0 -30
- data/vendor/hikidoc-0.0.6/NEWS.ja +0 -30
- data/vendor/hikidoc-0.0.6/README +0 -86
- data/vendor/hikidoc-0.0.6/README.ja +0 -83
- data/vendor/hikidoc-0.0.6/Rakefile +0 -68
- data/vendor/hikidoc-0.0.6/TextFormattingRules +0 -320
- data/vendor/hikidoc-0.0.6/TextFormattingRules.ja +0 -318
- data/vendor/hikidoc-0.0.6/bin/hikidoc +0 -66
- data/vendor/hikidoc-0.0.6/lib/hikidoc.rb +0 -914
- data/vendor/hikidoc-0.0.6/setup.rb +0 -1360
- data/vendor/hikidoc-0.0.6/test/run-test.rb +0 -13
- data/vendor/hikidoc-0.0.6/test/test_hikidoc.rb +0 -506
- data/vendor/imagesize-0.1.1/Manifest.txt +0 -19
- data/vendor/imagesize-0.1.1/README.txt +0 -49
- data/vendor/imagesize-0.1.1/lib/image_size.rb +0 -305
- data/vendor/imagesize-0.1.1/lib/image_size/version.rb +0 -9
- data/vendor/imagesize-0.1.1/setup.rb +0 -1585
- data/vendor/imagesize-0.1.1/test/2-4-7.png +0 -0
- data/vendor/imagesize-0.1.1/test/4_1_2.gif +0 -0
- data/vendor/imagesize-0.1.1/test/bmp.bmp +0 -0
- data/vendor/imagesize-0.1.1/test/cursor.xbm +0 -6
- data/vendor/imagesize-0.1.1/test/detect.swf +0 -0
- data/vendor/imagesize-0.1.1/test/pbm.pbm +0 -0
- data/vendor/imagesize-0.1.1/test/pcx.pcx +0 -0
- data/vendor/imagesize-0.1.1/test/pgm.pgm +0 -5
- data/vendor/imagesize-0.1.1/test/test.xpm +0 -38
- data/vendor/imagesize-0.1.1/test/test_helper.rb +0 -2
- data/vendor/imagesize-0.1.1/test/test_image_size.rb +0 -71
- data/vendor/imagesize-0.1.1/test/tiff.tiff +0 -0
- data/vendor/imagesize-0.1.1/test/tokyo_tower.jpg +0 -0
- data/vendor/imagesize-0.1.1/test/tower_e.gif.psd +0 -0
- data/vendor/rdtool-0.6.38/COPYING.txt +0 -339
- data/vendor/rdtool-0.6.38/Gemfile +0 -3
- data/vendor/rdtool-0.6.38/HISTORY +0 -318
- data/vendor/rdtool-0.6.38/LGPL-2.1 +0 -502
- data/vendor/rdtool-0.6.38/LICENSE.txt +0 -58
- data/vendor/rdtool-0.6.38/README.html +0 -66
- data/vendor/rdtool-0.6.38/README.ja.html +0 -73
- data/vendor/rdtool-0.6.38/README.rd +0 -76
- data/vendor/rdtool-0.6.38/README.rd.ja +0 -85
- data/vendor/rdtool-0.6.38/Rakefile +0 -152
- data/vendor/rdtool-0.6.38/TODO +0 -22
- data/vendor/rdtool-0.6.38/bin/rd2 +0 -283
- data/vendor/rdtool-0.6.38/bin/rdswap.rb +0 -207
- data/vendor/rdtool-0.6.38/doc/rd-draft.html +0 -456
- data/vendor/rdtool-0.6.38/doc/rd-draft.ja.html +0 -466
- data/vendor/rdtool-0.6.38/doc/rd-draft.rd +0 -479
- data/vendor/rdtool-0.6.38/doc/rd-draft.rd.ja +0 -487
- data/vendor/rdtool-0.6.38/lib/rd/block-element.rb +0 -114
- data/vendor/rdtool-0.6.38/lib/rd/complex-list-item.rb +0 -65
- data/vendor/rdtool-0.6.38/lib/rd/desclist.rb +0 -55
- data/vendor/rdtool-0.6.38/lib/rd/document-struct.rb +0 -46
- data/vendor/rdtool-0.6.38/lib/rd/dot.rd2rc +0 -18
- data/vendor/rdtool-0.6.38/lib/rd/element.rb +0 -160
- data/vendor/rdtool-0.6.38/lib/rd/filter.rb +0 -255
- data/vendor/rdtool-0.6.38/lib/rd/head-filter.rb +0 -14
- data/vendor/rdtool-0.6.38/lib/rd/inline-element.rb +0 -233
- data/vendor/rdtool-0.6.38/lib/rd/labeled-element.rb +0 -14
- data/vendor/rdtool-0.6.38/lib/rd/list.rb +0 -57
- data/vendor/rdtool-0.6.38/lib/rd/loose-struct.rb +0 -11
- data/vendor/rdtool-0.6.38/lib/rd/methodlist.rb +0 -57
- data/vendor/rdtool-0.6.38/lib/rd/output-format-visitor.rb +0 -30
- data/vendor/rdtool-0.6.38/lib/rd/package.rb +0 -4
- data/vendor/rdtool-0.6.38/lib/rd/parser-util.rb +0 -14
- data/vendor/rdtool-0.6.38/lib/rd/post-install +0 -1
- data/vendor/rdtool-0.6.38/lib/rd/pre-setup.rb +0 -18
- data/vendor/rdtool-0.6.38/lib/rd/rbl-file.rb +0 -69
- data/vendor/rdtool-0.6.38/lib/rd/rbl-suite.rb +0 -37
- data/vendor/rdtool-0.6.38/lib/rd/rd-struct.rb +0 -86
- data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-lib.rb +0 -266
- data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-opt.rb +0 -34
- data/vendor/rdtool-0.6.38/lib/rd/rd2html-lib.rb +0 -490
- data/vendor/rdtool-0.6.38/lib/rd/rd2html-opt.rb +0 -67
- data/vendor/rdtool-0.6.38/lib/rd/rd2man-lib.rb +0 -251
- data/vendor/rdtool-0.6.38/lib/rd/rd2rdo-lib.rb +0 -19
- data/vendor/rdtool-0.6.38/lib/rd/rd2rmi-lib.rb +0 -32
- data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.ry +0 -518
- data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.tab.rb +0 -1061
- data/vendor/rdtool-0.6.38/lib/rd/rdfmt.rb +0 -15
- data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.ry +0 -503
- data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.tab.rb +0 -1243
- data/vendor/rdtool-0.6.38/lib/rd/rdvisitor.rb +0 -214
- data/vendor/rdtool-0.6.38/lib/rd/reference-resolver.rb +0 -114
- data/vendor/rdtool-0.6.38/lib/rd/search-file.rb +0 -14
- data/vendor/rdtool-0.6.38/lib/rd/tree.rb +0 -103
- data/vendor/rdtool-0.6.38/lib/rd/version.rb +0 -41
- data/vendor/rdtool-0.6.38/lib/rd/visitor.rb +0 -86
- data/vendor/rdtool-0.6.38/rdtool.gemspec +0 -125
- data/vendor/rdtool-0.6.38/setup.rb +0 -1596
- data/vendor/rdtool-0.6.38/test/data/includee1.html +0 -1
- data/vendor/rdtool-0.6.38/test/data/includee2.html +0 -1
- data/vendor/rdtool-0.6.38/test/data/includee3.nothtml +0 -1
- data/vendor/rdtool-0.6.38/test/data/includee4.xhtml +0 -0
- data/vendor/rdtool-0.6.38/test/data/label.rbl +0 -2
- data/vendor/rdtool-0.6.38/test/data/label2.rbl +0 -2
- data/vendor/rdtool-0.6.38/test/data/sub/includee2.html +0 -1
- data/vendor/rdtool-0.6.38/test/data/sub/includee4.html +0 -0
- data/vendor/rdtool-0.6.38/test/dummy-observer.rb +0 -6
- data/vendor/rdtool-0.6.38/test/dummy.rb +0 -33
- data/vendor/rdtool-0.6.38/test/temp-dir.rb +0 -19
- data/vendor/rdtool-0.6.38/test/test-block-parser.rb +0 -46
- data/vendor/rdtool-0.6.38/test/test-desclist-item.rb +0 -219
- data/vendor/rdtool-0.6.38/test/test-document-element.rb +0 -46
- data/vendor/rdtool-0.6.38/test/test-document-struct.rb +0 -66
- data/vendor/rdtool-0.6.38/test/test-element.rb +0 -46
- data/vendor/rdtool-0.6.38/test/test-headline.rb +0 -80
- data/vendor/rdtool-0.6.38/test/test-inline-parser.rb +0 -46
- data/vendor/rdtool-0.6.38/test/test-list-item.rb +0 -54
- data/vendor/rdtool-0.6.38/test/test-list.rb +0 -53
- data/vendor/rdtool-0.6.38/test/test-methodlist-item.rb +0 -73
- data/vendor/rdtool-0.6.38/test/test-nonterminal-element.rb +0 -170
- data/vendor/rdtool-0.6.38/test/test-nonterminal-inline.rb +0 -33
- data/vendor/rdtool-0.6.38/test/test-output-format-visitor.rb +0 -48
- data/vendor/rdtool-0.6.38/test/test-parser-util.rb +0 -41
- data/vendor/rdtool-0.6.38/test/test-rbl-file.rb +0 -156
- data/vendor/rdtool-0.6.38/test/test-rbl-suite.rb +0 -43
- data/vendor/rdtool-0.6.38/test/test-rd2html-lib.rb +0 -496
- data/vendor/rdtool-0.6.38/test/test-rdtree.rb +0 -17
- data/vendor/rdtool-0.6.38/test/test-rdvisitor.rb +0 -29
- data/vendor/rdtool-0.6.38/test/test-reference-resolver.rb +0 -202
- data/vendor/rdtool-0.6.38/test/test-reference.rb +0 -132
- data/vendor/rdtool-0.6.38/test/test-search-file.rb +0 -22
- data/vendor/rdtool-0.6.38/test/test-terminal-inline.rb +0 -41
- data/vendor/rdtool-0.6.38/test/test-textblock.rb +0 -44
- data/vendor/rdtool-0.6.38/test/test-tree.rb +0 -82
- data/vendor/rdtool-0.6.38/test/test-version.rb +0 -57
- data/vendor/rdtool-0.6.38/test/test-visitor.rb +0 -230
- data/vendor/rdtool-0.6.38/utils/rd-mode.el +0 -464
@@ -1,318 +0,0 @@
|
|
1
|
-
!�ѥ饰���
|
2
|
-
|
3
|
-
Ϣ³����ʣ���Ԥ�Ϣ�뤵��ư�ĤΥѥ饰��դˤʤ�ޤ���
|
4
|
-
|
5
|
-
���� (���ԤΤߡ��ޤ��ϥ��ڡ��������֤����ι�) �ϥѥ饰��դζ��ڤ�ˤʤ�ޤ���
|
6
|
-
|
7
|
-
*������
|
8
|
-
|
9
|
-
�㤨�С�
|
10
|
-
�����������˵��Ҥ���ȡ������ιԤ�
|
11
|
-
��ĤΥѥ饰��դȤ�����������ޤ���
|
12
|
-
|
13
|
-
*������
|
14
|
-
|
15
|
-
�㤨�С�
|
16
|
-
�����������˵��Ҥ���ȡ������ιԤ�
|
17
|
-
��ĤΥѥ饰��դȤ�����������ޤ���
|
18
|
-
|
19
|
-
!���
|
20
|
-
|
21
|
-
!!WikiName
|
22
|
-
|
23
|
-
��ʸ���αѻ��ǻϤޤꡢ��ʸ���αѻ��ޤ��Ͽ�����1ʸ���ʾ�³��
|
24
|
-
|
25
|
-
���ξ�郎2��ʾ巫���֤����ñ���WikiName�ˤʤ꼫ưŪ�˥���Ϥ��ޤ���
|
26
|
-
|
27
|
-
*������
|
28
|
-
|
29
|
-
WikiName - WikiName
|
30
|
-
HogeRule1 - WikiName
|
31
|
-
NOTWIKINAME - ������ʸ���ʤΤ�WikiName�ǤϤʤ�
|
32
|
-
WikiNAME - NAME��������ʸ���ʤΤ�WikiName�ǤϤʤ�
|
33
|
-
fooWikiName - ��Ƭ�����ƾ�ʸ���αѻ�foo�����뤿��WikiName�ǤϤʤ�
|
34
|
-
|
35
|
-
*������
|
36
|
-
|
37
|
-
**WikiName - WikiName
|
38
|
-
**HogeRule1 - WikiName
|
39
|
-
**NOTWIKINAME - ������ʸ���ʤΤ�WikiName�ǤϤʤ�
|
40
|
-
**WikiNAME - NAME��������ʸ���ʤΤ�WikiName�ǤϤʤ�
|
41
|
-
**fooWikiName - ��Ƭ�����ƾ�ʸ���αѻ�foo�����뤿��WikiName�ǤϤʤ�
|
42
|
-
|
43
|
-
WikiName������''^''��Ĥ����WikiName�ؤΥ���������뤳�Ȥ��Ǥ��ޤ���
|
44
|
-
|
45
|
-
*������
|
46
|
-
|
47
|
-
WikiName - WikiName
|
48
|
-
^WikiName - WikiName�ؤΥ������
|
49
|
-
|
50
|
-
*������
|
51
|
-
|
52
|
-
**WikiName - WikiName
|
53
|
-
**^WikiName - WikiName�ؤΥ������
|
54
|
-
|
55
|
-
!!�ڡ����ؤΥ��
|
56
|
-
|
57
|
-
�ڡ���̾����ĤΥ������å��ǰϤ�ȡ����Υڡ����ؤΥ�ˤʤ�ޤ���
|
58
|
-
|
59
|
-
*������
|
60
|
-
|
61
|
-
�㤨��[[�հ���Ruby]]�Ȥ���ȡ����Υڡ����ؤΥ�ˤʤ�ޤ���
|
62
|
-
|
63
|
-
*������
|
64
|
-
|
65
|
-
�㤨��[[�հ���Ruby]]�Ȥ���ȡ����Υڡ����ؤΥ�ˤʤ�ޤ���
|
66
|
-
|
67
|
-
!!Ǥ�դ�URL�ؤΥ��
|
68
|
-
|
69
|
-
ñ��|URL����ĤΥ������å��ǰϤ�Ȥ�Ǥ�դ�URL�ؤΥ�ˤʤ�ޤ���
|
70
|
-
|
71
|
-
*������
|
72
|
-
|
73
|
-
[[Yahoo!|http://www.yahoo.co.jp/]]�Ȥ���Ǥ��ޤ���
|
74
|
-
|
75
|
-
*������
|
76
|
-
|
77
|
-
[[Yahoo!|http://www.yahoo.co.jp/]]�Ȥ���Ǥ��ޤ���
|
78
|
-
|
79
|
-
�ѥ饰������URL�äݤ���Τ�����Ⱦ���˥���Ϥ��ޤ���
|
80
|
-
|
81
|
-
*������
|
82
|
-
|
83
|
-
Hiki�Υڡ�����http://hikiwiki.org/ja/�Ǥ���
|
84
|
-
|
85
|
-
*������
|
86
|
-
|
87
|
-
Hiki�Υڡ�����http://hikiwiki.org/ja/�Ǥ���
|
88
|
-
|
89
|
-
���ΤȤ�URL��������jpg,jpeg,png,gif����IMG������Ÿ������ޤ���
|
90
|
-
|
91
|
-
*������
|
92
|
-
|
93
|
-
http://jp.rubyist.net/theme/clover/clover_h1.png
|
94
|
-
|
95
|
-
*������
|
96
|
-
|
97
|
-
http://jp.rubyist.net/theme/clover/clover_h1.png
|
98
|
-
|
99
|
-
!�����Ѥߥƥ�����
|
100
|
-
|
101
|
-
�Ԥ���Ƭ�����ڡ����ޤ��ϥ��֤ǻϤޤäƤ���ȡ����ιԤ������ѤߤȤ��ư����ޤ���
|
102
|
-
|
103
|
-
*������
|
104
|
-
|
105
|
-
require 'cgi'
|
106
|
-
|
107
|
-
cgi = CGI::new
|
108
|
-
cgi.header
|
109
|
-
|
110
|
-
puts <<EOS
|
111
|
-
<html>
|
112
|
-
<head>
|
113
|
-
<title>Hello!</title>
|
114
|
-
</head>
|
115
|
-
<body>
|
116
|
-
<p>Hello!</p>
|
117
|
-
</body>
|
118
|
-
</html>
|
119
|
-
EOS
|
120
|
-
|
121
|
-
!ʸ���ν���
|
122
|
-
|
123
|
-
��'��2�ĤǤϤ������ʬ�϶�Ĵ����ޤ���
|
124
|
-
|
125
|
-
��'��3�ĤǤϤ������ʬ�Ϥ���˶�Ĵ����ޤ���
|
126
|
-
|
127
|
-
��=��2�ĤǤϤ������ʬ�ϼ�����ˤʤ�ޤ���
|
128
|
-
|
129
|
-
��`��2�ĤǤϤ������ʬ������ɽ���ˤʤ�ޤ���
|
130
|
-
|
131
|
-
*������
|
132
|
-
|
133
|
-
���Τ褦�ˤ����''��Ĵ''�ˤʤ�ޤ���
|
134
|
-
�����ơ����Τ褦�ˤ����'''����˶�Ĵ'''����ޤ���
|
135
|
-
==���뤤����==����ˡ����ä����⥵�ݡ��Ȥ��Ƥ��ޤ���
|
136
|
-
�ޤ��ޤ������Τ褦�ˤ����''����ɽ��''�ˤʤ�ޤ���
|
137
|
-
|
138
|
-
*������
|
139
|
-
|
140
|
-
���Τ褦�ˤ����''��Ĵ''�ˤʤ�ޤ���
|
141
|
-
�����ơ����Τ褦�ˤ����'''����˶�Ĵ'''����ޤ���
|
142
|
-
==���뤤����==����ˡ����ä����⥵�ݡ��Ȥ��Ƥ��ޤ���
|
143
|
-
�ޤ��ޤ������Τ褦�ˤ����''����ɽ��''�ˤʤ�ޤ���
|
144
|
-
|
145
|
-
!����
|
146
|
-
|
147
|
-
��!�פ�Ԥ���Ƭ�˽ȸ��Ф��ˤʤ�ޤ���
|
148
|
-
|
149
|
-
��!�פϰ�Ĥ���ϻ�Ĥޤǵ��Ҥ��뤳�Ȥ���ǽ�ǡ����줾��<H1>��<H6>���Ѵ�����ޤ���
|
150
|
-
|
151
|
-
*������
|
152
|
-
|
153
|
-
!����1
|
154
|
-
!!����2
|
155
|
-
!!!����3
|
156
|
-
!!!!����4
|
157
|
-
!!!!!����5
|
158
|
-
|
159
|
-
*������
|
160
|
-
|
161
|
-
!����1
|
162
|
-
!!����2
|
163
|
-
!!!����3
|
164
|
-
!!!!����4
|
165
|
-
!!!!!����5
|
166
|
-
|
167
|
-
!��ʿ��
|
168
|
-
|
169
|
-
�ޥ��ʥ������-�פ�Ԥ���Ƭ����4�Ľȿ�ʿ���ˤʤ�ޤ���
|
170
|
-
|
171
|
-
*������
|
172
|
-
|
173
|
-
������������
|
174
|
-
----
|
175
|
-
������������
|
176
|
-
|
177
|
-
*������
|
178
|
-
|
179
|
-
������������
|
180
|
-
----
|
181
|
-
������������
|
182
|
-
|
183
|
-
!�վ��
|
184
|
-
|
185
|
-
��*�פ�Ԥ���Ƭ�˽Ȳվ�ˤʤ�ޤ���
|
186
|
-
|
187
|
-
��*�פϰ�Ĥ��黰�Ĥޤǵ��Ҥ��뤳�Ȥ���ǽ������Ҥˤ��뤳�Ȥ�Ǥ��ޤ���
|
188
|
-
|
189
|
-
��#�פ�Ԥ���Ƭ�˽��ֹ��դ��βվ�ˤʤ�ޤ���
|
190
|
-
|
191
|
-
*������
|
192
|
-
|
193
|
-
*�����ƥ�1
|
194
|
-
**�����ƥ�1.1
|
195
|
-
**�����ƥ�1.2
|
196
|
-
***�����ƥ�1.2.1
|
197
|
-
***�����ƥ�1.2.2
|
198
|
-
***�����ƥ�1.2.3
|
199
|
-
**�����ƥ�1.3
|
200
|
-
**�����ƥ�1.4
|
201
|
-
*�����ƥ�2
|
202
|
-
|
203
|
-
#����1
|
204
|
-
#����2
|
205
|
-
##����2.1
|
206
|
-
##����2.2
|
207
|
-
##����2.3
|
208
|
-
#����3
|
209
|
-
##����3.1
|
210
|
-
###����3.1.1
|
211
|
-
###����3.1.2
|
212
|
-
|
213
|
-
*������
|
214
|
-
|
215
|
-
*�����ƥ�1
|
216
|
-
**�����ƥ�1.1
|
217
|
-
**�����ƥ�1.2
|
218
|
-
***�����ƥ�1.2.1
|
219
|
-
***�����ƥ�1.2.2
|
220
|
-
***�����ƥ�1.2.3
|
221
|
-
**�����ƥ�1.3
|
222
|
-
**�����ƥ�1.4
|
223
|
-
*�����ƥ�2
|
224
|
-
|
225
|
-
#����1
|
226
|
-
#����2
|
227
|
-
##����2.1
|
228
|
-
##����2.2
|
229
|
-
##����2.3
|
230
|
-
#����3
|
231
|
-
##����3.1
|
232
|
-
###����3.1.1
|
233
|
-
###����3.1.2
|
234
|
-
|
235
|
-
!����
|
236
|
-
|
237
|
-
��"�פ�Ԥ���Ƭ������ĽȰ��Ѥˤʤ�ޤ���
|
238
|
-
|
239
|
-
*������
|
240
|
-
|
241
|
-
""����ϰ��ѤǤ���
|
242
|
-
""����˰��Ѥ��ޤ���
|
243
|
-
""³���ư��Ѥ��ޤ������Ѥ�Ϣ³�����硢
|
244
|
-
""���Τ褦�˰�Ĥΰ��ѤȤ���
|
245
|
-
""Ÿ������ޤ���
|
246
|
-
|
247
|
-
*������
|
248
|
-
|
249
|
-
""����ϰ��ѤǤ���
|
250
|
-
""����˰��Ѥ��ޤ���
|
251
|
-
""³���ư��Ѥ��ޤ������Ѥ�Ϣ³�����硢
|
252
|
-
""���Τ褦�˰�Ĥΰ��ѤȤ���
|
253
|
-
""Ÿ������ޤ���
|
254
|
-
|
255
|
-
!�Ѹ����
|
256
|
-
|
257
|
-
�������:�פ�Ԥ���Ƭ�˽�³�����Ѹ�:����ʸ�Ȥ�����Ѹ����ˤʤ�ޤ���
|
258
|
-
|
259
|
-
*������
|
260
|
-
|
261
|
-
:���:apple
|
262
|
-
:�����:gorilla
|
263
|
-
:�饯��:camel
|
264
|
-
|
265
|
-
*������
|
266
|
-
|
267
|
-
:���:apple
|
268
|
-
:�����:gorilla
|
269
|
-
:�饯��:camel
|
270
|
-
|
271
|
-
!ɽ
|
272
|
-
|
273
|
-
ɽ(�ơ��֥�)�ϡ�||�פǻϤ�ޤ���
|
274
|
-
����ι��ܤ�Ƭ�ˡ�!�פ�Ĥ��뤳�Ȥˤ�긫�Ф�����ˤʤ�ޤ���
|
275
|
-
�Ԥ�Ϣ��ˤϡ�^�פ����Ϣ��ˤϡ�>�פ�Ϣ�뤷��������������ι���Ƭ�ˤĤ��Ƥ���������
|
276
|
-
|
277
|
-
*������
|
278
|
-
|
279
|
-
||!�Ը��Ф����Ф�||!��-A||!��-B||!��-C||!>��-D-E�ʲ�Ϣ���
|
280
|
-
||!��-1||A1||B1||^C1-C2�ʽ�Ϣ���||D1||E1
|
281
|
-
||!��-2||A2||B2||^>D2-E2-D3-E3�ʽIJ�Ϣ���
|
282
|
-
||!��-3||>>A3-C3�ʲ���Ϣ���
|
283
|
-
|
284
|
-
*������
|
285
|
-
|
286
|
-
||!�Ը��Ф����Ф�||!��-A||!��-B||!��-C||!>��-D-E�ʲ�Ϣ���
|
287
|
-
||!��-1||A1||B1||^C1-C2�ʽ�Ϣ���||D1||E1
|
288
|
-
||!��-2||A2||B2||^>D2-E2-D3-E3�ʽIJ�Ϣ���
|
289
|
-
||!��-3||>>A3-C3�ʲ���Ϣ���
|
290
|
-
|
291
|
-
!�����ȹ�
|
292
|
-
|
293
|
-
��//�פ���Ƭ�ˤ���Ԥϥ����ȹԤˤʤꡢ���Ϥ���ʤ��ʤ�ޤ���
|
294
|
-
|
295
|
-
*������
|
296
|
-
|
297
|
-
// �����ϥ����ȤǤ���
|
298
|
-
|
299
|
-
*�������ɽ������ޤ����
|
300
|
-
// �����ϥ����ȤǤ���
|
301
|
-
|
302
|
-
!�ץ饰����
|
303
|
-
|
304
|
-
��{����Ĥȡ�}����ĤǰϤ�ȥץ饰�����ƤӽФ����Ȥ��Ǥ��ޤ���
|
305
|
-
�ѥ�����ʣ���Ԥ�ʬ���ƽ��Ȥ��ǽ�Ǥ���
|
306
|
-
�ץ饰����Τߤ�ñ�ȹԤ˽����ϥ֥��å��ץ饰����ˤʤꡢ�����<p>��</p>���դ��ʤ��ʤ�ޤ���
|
307
|
-
|
308
|
-
*������
|
309
|
-
|
310
|
-
{{recent(3)}}
|
311
|
-
|
312
|
-
*ʣ���Ե�����
|
313
|
-
|
314
|
-
{{pre(
|
315
|
-
�ѥ�����
|
316
|
-
�ѥ�����
|
317
|
-
�ѥ�����
|
318
|
-
)}}
|
@@ -1,66 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'hikidoc'
|
4
|
-
require 'optparse'
|
5
|
-
require 'erb'
|
6
|
-
|
7
|
-
HTML_TEMPLATE = <<EOS
|
8
|
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
9
|
-
<html>
|
10
|
-
<head>
|
11
|
-
<title><%= title %></title>
|
12
|
-
</head>
|
13
|
-
<body>
|
14
|
-
<%= body %>
|
15
|
-
</body>
|
16
|
-
</html>
|
17
|
-
EOS
|
18
|
-
|
19
|
-
options = {}
|
20
|
-
format_options = {}
|
21
|
-
ARGV.options do |opts|
|
22
|
-
opts.banner = "Usage: #$0 [OPTIONS] FILE"
|
23
|
-
|
24
|
-
opts.on('-f', '--fragment',
|
25
|
-
'Output HTML fragments only') do
|
26
|
-
options[:fragment] = true
|
27
|
-
end
|
28
|
-
opts.on('-t', '--template=TEMPLATE',
|
29
|
-
'Specify a HTML template file') do |template|
|
30
|
-
options[:template] = template
|
31
|
-
end
|
32
|
-
opts.on('--no-wikiname', 'Disable WikiName link') do
|
33
|
-
format_options[:use_wiki_name] = false
|
34
|
-
end
|
35
|
-
|
36
|
-
opts.parse!
|
37
|
-
end
|
38
|
-
|
39
|
-
case ARGV.size
|
40
|
-
when 0
|
41
|
-
title, text = '-', $stdin.read
|
42
|
-
when 1
|
43
|
-
title, text = ARGV[0], File.read(ARGV[0])
|
44
|
-
else
|
45
|
-
usage
|
46
|
-
end
|
47
|
-
|
48
|
-
body = HikiDoc.to_html(text, format_options)
|
49
|
-
|
50
|
-
def result(erb, title, body, text)
|
51
|
-
erb.result(binding)
|
52
|
-
end
|
53
|
-
|
54
|
-
if options[:fragment]
|
55
|
-
puts(body)
|
56
|
-
else
|
57
|
-
template = options[:template]
|
58
|
-
if template
|
59
|
-
source = File.read(template)
|
60
|
-
else
|
61
|
-
source = HTML_TEMPLATE
|
62
|
-
end
|
63
|
-
erb = ERB.new(source)
|
64
|
-
erb.filename = template
|
65
|
-
puts(result(erb, title, body, text))
|
66
|
-
end
|
@@ -1,914 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
# Copyright (c) 2005, Kazuhiko <kazuhiko@fdiary.net>
|
3
|
-
# Copyright (c) 2007 Minero Aoki
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# Redistribution and use in source and binary forms, with or without
|
7
|
-
# modification, are permitted provided that the following conditions are
|
8
|
-
# met:
|
9
|
-
#
|
10
|
-
# * Redistributions of source code must retain the above copyright
|
11
|
-
# notice, this list of conditions and the following disclaimer.
|
12
|
-
# * Redistributions in binary form must reproduce the above
|
13
|
-
# copyright notice, this list of conditions and the following
|
14
|
-
# disclaimer in the documentation and/or other materials provided
|
15
|
-
# with the distribution.
|
16
|
-
# * Neither the name of the HikiDoc nor the names of its
|
17
|
-
# contributors may be used to endorse or promote products derived
|
18
|
-
# from this software without specific prior written permission.
|
19
|
-
#
|
20
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
-
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
-
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
-
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
-
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
-
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
-
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
-
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
-
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
-
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
-
|
32
|
-
require "stringio"
|
33
|
-
require "strscan"
|
34
|
-
require "uri"
|
35
|
-
begin
|
36
|
-
require "syntax/convertors/html"
|
37
|
-
rescue LoadError
|
38
|
-
end
|
39
|
-
|
40
|
-
class HikiDoc
|
41
|
-
VERSION = "0.0.6" # FIXME
|
42
|
-
|
43
|
-
class Error < StandardError
|
44
|
-
end
|
45
|
-
|
46
|
-
class UnexpectedError < Error
|
47
|
-
end
|
48
|
-
|
49
|
-
def HikiDoc.to_html(src, options = {})
|
50
|
-
new(HTMLOutput.new(">"), options).compile(src)
|
51
|
-
end
|
52
|
-
|
53
|
-
def HikiDoc.to_xhtml(src, options = {})
|
54
|
-
new(HTMLOutput.new(" />"), options).compile(src)
|
55
|
-
end
|
56
|
-
|
57
|
-
def initialize(output, options = {})
|
58
|
-
@output = output
|
59
|
-
@options = default_options.merge(options)
|
60
|
-
@header_re = nil
|
61
|
-
@level = options[:level] || 1
|
62
|
-
@plugin_syntax = options[:plugin_syntax] || method(:valid_plugin_syntax?)
|
63
|
-
end
|
64
|
-
|
65
|
-
def compile(src)
|
66
|
-
@output.reset
|
67
|
-
escape_plugin_blocks(src) {|escaped|
|
68
|
-
compile_blocks escaped
|
69
|
-
@output.finish
|
70
|
-
}
|
71
|
-
end
|
72
|
-
|
73
|
-
# for backward compatibility
|
74
|
-
def to_html
|
75
|
-
$stderr.puts("warning: HikiDoc#to_html is deprecated. Please use HikiDoc.to_html or HikiDoc.to_xhtml instead.")
|
76
|
-
self.class.to_html(@output, @options)
|
77
|
-
end
|
78
|
-
|
79
|
-
private
|
80
|
-
|
81
|
-
def default_options
|
82
|
-
{
|
83
|
-
:allow_bracket_inline_image => true,
|
84
|
-
:use_wiki_name => true,
|
85
|
-
:use_not_wiki_name => true,
|
86
|
-
}
|
87
|
-
end
|
88
|
-
|
89
|
-
#
|
90
|
-
# Plugin
|
91
|
-
#
|
92
|
-
|
93
|
-
def valid_plugin_syntax?(code)
|
94
|
-
/['"]/ !~ code.gsub(/\\\\/, "").gsub(/\\['"]/,"").gsub(/'[^']*'|"[^"]*"/m, "")
|
95
|
-
end
|
96
|
-
|
97
|
-
def escape_plugin_blocks(text)
|
98
|
-
s = StringScanner.new(text)
|
99
|
-
buf = ""
|
100
|
-
@plugin_blocks = []
|
101
|
-
while chunk = s.scan_until(/\{\{/)
|
102
|
-
tail = chunk[-2, 2]
|
103
|
-
chunk[-2, 2] = ""
|
104
|
-
buf << chunk
|
105
|
-
# plugin
|
106
|
-
if block = extract_plugin_block(s)
|
107
|
-
@plugin_blocks.push block
|
108
|
-
buf << "\0#{@plugin_blocks.size - 1}\0"
|
109
|
-
else
|
110
|
-
buf << "{{"
|
111
|
-
end
|
112
|
-
end
|
113
|
-
buf << s.rest
|
114
|
-
yield(buf)
|
115
|
-
end
|
116
|
-
|
117
|
-
def restore_plugin_block(str)
|
118
|
-
str.gsub(/\0(\d+)\0/) {
|
119
|
-
"{{" + plugin_block($1.to_i) + "}}"
|
120
|
-
}
|
121
|
-
end
|
122
|
-
|
123
|
-
def evaluate_plugin_block(str, buf = nil)
|
124
|
-
buf ||= @output.container
|
125
|
-
str.split(/(\0\d+\0)/).each do |s|
|
126
|
-
if s[0, 1] == "\0" and s[-1, 1] == "\0"
|
127
|
-
buf << @output.inline_plugin(plugin_block(s[1..-2].to_i))
|
128
|
-
else
|
129
|
-
buf << @output.text(s)
|
130
|
-
end
|
131
|
-
end
|
132
|
-
buf
|
133
|
-
end
|
134
|
-
|
135
|
-
def plugin_block(id)
|
136
|
-
@plugin_blocks[id] or raise UnexpectedError, "must not happen: #{id.inspect}"
|
137
|
-
end
|
138
|
-
|
139
|
-
def extract_plugin_block(s)
|
140
|
-
pos = s.pos
|
141
|
-
buf = ""
|
142
|
-
while chunk = s.scan_until(/\}\}/)
|
143
|
-
buf << chunk
|
144
|
-
buf.chomp!("}}")
|
145
|
-
if @plugin_syntax.call(buf)
|
146
|
-
return buf
|
147
|
-
end
|
148
|
-
buf << "}}"
|
149
|
-
end
|
150
|
-
s.pos = pos
|
151
|
-
nil
|
152
|
-
end
|
153
|
-
|
154
|
-
#
|
155
|
-
# Block Level
|
156
|
-
#
|
157
|
-
|
158
|
-
def compile_blocks(src)
|
159
|
-
f = LineInput.new(StringIO.new(src))
|
160
|
-
while line = f.peek
|
161
|
-
case line
|
162
|
-
when COMMENT_RE
|
163
|
-
f.gets
|
164
|
-
when HEADER_RE
|
165
|
-
compile_header f.gets
|
166
|
-
when HRULE_RE
|
167
|
-
f.gets
|
168
|
-
compile_hrule
|
169
|
-
when LIST_RE
|
170
|
-
compile_list f
|
171
|
-
when DLIST_RE
|
172
|
-
compile_dlist f
|
173
|
-
when TABLE_RE
|
174
|
-
compile_table f
|
175
|
-
when BLOCKQUOTE_RE
|
176
|
-
compile_blockquote f
|
177
|
-
when INDENTED_PRE_RE
|
178
|
-
compile_indented_pre f
|
179
|
-
when BLOCK_PRE_OPEN_RE
|
180
|
-
compile_block_pre f
|
181
|
-
else
|
182
|
-
if /^$/ =~ line
|
183
|
-
f.gets
|
184
|
-
next
|
185
|
-
end
|
186
|
-
compile_paragraph f
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
COMMENT_RE = %r<\A//>
|
192
|
-
|
193
|
-
def skip_comments(f)
|
194
|
-
f.while_match(COMMENT_RE) do |line|
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
HEADER_RE = /\A!+/
|
199
|
-
|
200
|
-
def compile_header(line)
|
201
|
-
@header_re ||= /\A!{1,#{7 - @level}}/
|
202
|
-
level = @level + (line.slice!(@header_re).size - 1)
|
203
|
-
title = strip(line)
|
204
|
-
@output.headline level, compile_inline(title)
|
205
|
-
end
|
206
|
-
|
207
|
-
HRULE_RE = /\A----$/
|
208
|
-
|
209
|
-
def compile_hrule
|
210
|
-
@output.hrule
|
211
|
-
end
|
212
|
-
|
213
|
-
ULIST = "*"
|
214
|
-
OLIST = "#"
|
215
|
-
LIST_RE = /\A#{Regexp.union(ULIST, OLIST)}+/
|
216
|
-
|
217
|
-
def compile_list(f)
|
218
|
-
typestack = []
|
219
|
-
level = 0
|
220
|
-
@output.list_begin
|
221
|
-
f.while_match(LIST_RE) do |line|
|
222
|
-
list_type = (line[0,1] == ULIST ? "ul" : "ol")
|
223
|
-
new_level = line.slice(LIST_RE).size
|
224
|
-
item = strip(line.sub(LIST_RE, ""))
|
225
|
-
if new_level > level
|
226
|
-
(new_level - level).times do
|
227
|
-
typestack.push list_type
|
228
|
-
@output.list_open list_type
|
229
|
-
@output.listitem_open
|
230
|
-
end
|
231
|
-
@output.listitem compile_inline(item)
|
232
|
-
elsif new_level < level
|
233
|
-
(level - new_level).times do
|
234
|
-
@output.listitem_close
|
235
|
-
@output.list_close typestack.pop
|
236
|
-
end
|
237
|
-
@output.listitem_close
|
238
|
-
@output.listitem_open
|
239
|
-
@output.listitem compile_inline(item)
|
240
|
-
elsif list_type == typestack.last
|
241
|
-
@output.listitem_close
|
242
|
-
@output.listitem_open
|
243
|
-
@output.listitem compile_inline(item)
|
244
|
-
else
|
245
|
-
@output.listitem_close
|
246
|
-
@output.list_close typestack.pop
|
247
|
-
@output.list_open list_type
|
248
|
-
@output.listitem_open
|
249
|
-
@output.listitem compile_inline(item)
|
250
|
-
typestack.push list_type
|
251
|
-
end
|
252
|
-
level = new_level
|
253
|
-
skip_comments f
|
254
|
-
end
|
255
|
-
level.times do
|
256
|
-
@output.listitem_close
|
257
|
-
@output.list_close typestack.pop
|
258
|
-
end
|
259
|
-
@output.list_end
|
260
|
-
end
|
261
|
-
|
262
|
-
DLIST_RE = /\A:/
|
263
|
-
|
264
|
-
def compile_dlist(f)
|
265
|
-
@output.dlist_open
|
266
|
-
f.while_match(DLIST_RE) do |line|
|
267
|
-
dt, dd = split_dlitem(line.sub(DLIST_RE, ""))
|
268
|
-
@output.dlist_item compile_inline(dt), compile_inline(dd)
|
269
|
-
skip_comments f
|
270
|
-
end
|
271
|
-
@output.dlist_close
|
272
|
-
end
|
273
|
-
|
274
|
-
def split_dlitem(line)
|
275
|
-
re = /\A((?:#{BRACKET_LINK_RE}|.)*?):/o
|
276
|
-
if m = re.match(line)
|
277
|
-
return m[1], m.post_match
|
278
|
-
else
|
279
|
-
return line, ""
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
TABLE_RE = /\A\|\|/
|
284
|
-
|
285
|
-
def compile_table(f)
|
286
|
-
lines = []
|
287
|
-
f.while_match(TABLE_RE) do |line|
|
288
|
-
lines.push line
|
289
|
-
skip_comments f
|
290
|
-
end
|
291
|
-
@output.table_open
|
292
|
-
lines.each do |line|
|
293
|
-
@output.table_record_open
|
294
|
-
split_columns(line.sub(TABLE_RE, "")).each do |col|
|
295
|
-
mid = col.sub!(/\A!/, "") ? "table_head" : "table_data"
|
296
|
-
span = col.slice!(/\A[\^>]*/)
|
297
|
-
rs = span_count(span, "^")
|
298
|
-
cs = span_count(span, ">")
|
299
|
-
@output.__send__(mid, compile_inline(col), rs, cs)
|
300
|
-
end
|
301
|
-
@output.table_record_close
|
302
|
-
end
|
303
|
-
@output.table_close
|
304
|
-
end
|
305
|
-
|
306
|
-
def split_columns(str)
|
307
|
-
cols = str.split(/\|\|/)
|
308
|
-
cols.pop if cols.last.chomp.empty?
|
309
|
-
cols
|
310
|
-
end
|
311
|
-
|
312
|
-
def span_count(str, ch)
|
313
|
-
c = str.count(ch)
|
314
|
-
c == 0 ? nil : c + 1
|
315
|
-
end
|
316
|
-
|
317
|
-
BLOCKQUOTE_RE = /\A""[ \t]?/
|
318
|
-
|
319
|
-
def compile_blockquote(f)
|
320
|
-
@output.blockquote_open
|
321
|
-
lines = []
|
322
|
-
f.while_match(BLOCKQUOTE_RE) do |line|
|
323
|
-
lines.push line.sub(BLOCKQUOTE_RE, "")
|
324
|
-
skip_comments f
|
325
|
-
end
|
326
|
-
compile_blocks lines.join("")
|
327
|
-
@output.blockquote_close
|
328
|
-
end
|
329
|
-
|
330
|
-
INDENTED_PRE_RE = /\A[ \t]/
|
331
|
-
|
332
|
-
def compile_indented_pre(f)
|
333
|
-
lines = f.span(INDENTED_PRE_RE)\
|
334
|
-
.map {|line| rstrip(line.sub(INDENTED_PRE_RE, "")) }
|
335
|
-
text = restore_plugin_block(lines.join("\n"))
|
336
|
-
@output.preformatted(@output.text(text))
|
337
|
-
end
|
338
|
-
|
339
|
-
BLOCK_PRE_OPEN_RE = /\A<<<\s*(\w+)?/
|
340
|
-
BLOCK_PRE_CLOSE_RE = /\A>>>/
|
341
|
-
|
342
|
-
def compile_block_pre(f)
|
343
|
-
m = BLOCK_PRE_OPEN_RE.match(f.gets) or raise UnexpectedError, "must not happen"
|
344
|
-
str = restore_plugin_block(f.break(BLOCK_PRE_CLOSE_RE).join.chomp)
|
345
|
-
f.gets
|
346
|
-
@output.block_preformatted(str, m[1])
|
347
|
-
end
|
348
|
-
|
349
|
-
BLANK = /\A$/
|
350
|
-
PARAGRAPH_END_RE = Regexp.union(BLANK,
|
351
|
-
HEADER_RE, HRULE_RE, LIST_RE, DLIST_RE,
|
352
|
-
BLOCKQUOTE_RE, TABLE_RE,
|
353
|
-
INDENTED_PRE_RE, BLOCK_PRE_OPEN_RE)
|
354
|
-
|
355
|
-
def compile_paragraph(f)
|
356
|
-
lines = f.break(PARAGRAPH_END_RE)\
|
357
|
-
.reject {|line| COMMENT_RE =~ line }
|
358
|
-
if lines.size == 1 and /\A\0(\d+)\0\z/ =~ strip(lines[0])
|
359
|
-
@output.block_plugin plugin_block($1.to_i)
|
360
|
-
else
|
361
|
-
line_buffer = @output.container(:paragraph)
|
362
|
-
lines.each_with_index do |line, i|
|
363
|
-
buffer = @output.container
|
364
|
-
line_buffer << buffer
|
365
|
-
compile_inline(lstrip(line).chomp, buffer)
|
366
|
-
end
|
367
|
-
@output.paragraph(line_buffer)
|
368
|
-
end
|
369
|
-
end
|
370
|
-
|
371
|
-
#
|
372
|
-
# Inline Level
|
373
|
-
#
|
374
|
-
|
375
|
-
BRACKET_LINK_RE = /\[\[.+?\]\]/
|
376
|
-
URI_RE = /(?:https?|ftp|file|mailto):[A-Za-z0-9;\/?:@&=+$,\-_.!~*\'()#%]+/
|
377
|
-
WIKI_NAME_RE = /\b(?:[A-Z]+[a-z\d]+){2,}\b/
|
378
|
-
|
379
|
-
def inline_syntax_re
|
380
|
-
if @options[:use_wiki_name]
|
381
|
-
if @options[:use_not_wiki_name]
|
382
|
-
/ (#{BRACKET_LINK_RE})
|
383
|
-
| (#{URI_RE})
|
384
|
-
| (#{MODIFIER_RE})
|
385
|
-
| (\^?#{WIKI_NAME_RE})
|
386
|
-
/xo
|
387
|
-
else
|
388
|
-
/ (#{BRACKET_LINK_RE})
|
389
|
-
| (#{URI_RE})
|
390
|
-
| (#{MODIFIER_RE})
|
391
|
-
| (#{WIKI_NAME_RE})
|
392
|
-
/xo
|
393
|
-
end
|
394
|
-
else
|
395
|
-
/ (#{BRACKET_LINK_RE})
|
396
|
-
| (#{URI_RE})
|
397
|
-
| (#{MODIFIER_RE})
|
398
|
-
/xo
|
399
|
-
end
|
400
|
-
end
|
401
|
-
|
402
|
-
def compile_inline(str, buf = nil)
|
403
|
-
buf ||= @output.container
|
404
|
-
re = inline_syntax_re
|
405
|
-
pending_str = nil
|
406
|
-
while m = re.match(str)
|
407
|
-
str = m.post_match
|
408
|
-
|
409
|
-
link, uri, mod, wiki_name = m[1, 4]
|
410
|
-
if wiki_name and wiki_name[0, 1] == "^"
|
411
|
-
pending_str = m.pre_match + wiki_name[1..-1] + str
|
412
|
-
next
|
413
|
-
end
|
414
|
-
|
415
|
-
pre_str = "#{pending_str}#{m.pre_match}"
|
416
|
-
pending_str = nil
|
417
|
-
evaluate_plugin_block(pre_str, buf)
|
418
|
-
compile_inline_markup(buf, link, uri, mod, wiki_name)
|
419
|
-
end
|
420
|
-
evaluate_plugin_block(pending_str || str, buf)
|
421
|
-
buf
|
422
|
-
end
|
423
|
-
|
424
|
-
def compile_inline_markup(buf, link, uri, mod, wiki_name)
|
425
|
-
case
|
426
|
-
when link
|
427
|
-
buf << compile_bracket_link(link[2...-2])
|
428
|
-
when uri
|
429
|
-
buf << compile_uri_autolink(uri)
|
430
|
-
when mod
|
431
|
-
buf << compile_modifier(mod)
|
432
|
-
when wiki_name
|
433
|
-
buf << @output.wiki_name(wiki_name)
|
434
|
-
else
|
435
|
-
raise UnexpectedError, "must not happen"
|
436
|
-
end
|
437
|
-
end
|
438
|
-
|
439
|
-
def compile_bracket_link(link)
|
440
|
-
if m = /\A(.*)\|/.match(link)
|
441
|
-
title = m[0].chop
|
442
|
-
uri = m.post_match
|
443
|
-
fixed_uri = fix_uri(uri)
|
444
|
-
if can_image_link?(uri)
|
445
|
-
@output.image_hyperlink(fixed_uri, title)
|
446
|
-
else
|
447
|
-
@output.hyperlink(fixed_uri, compile_modifier(title))
|
448
|
-
end
|
449
|
-
else
|
450
|
-
fixed_link = fix_uri(link)
|
451
|
-
if can_image_link?(link)
|
452
|
-
@output.image_hyperlink(fixed_link)
|
453
|
-
else
|
454
|
-
@output.hyperlink(fixed_link, @output.text(link))
|
455
|
-
end
|
456
|
-
end
|
457
|
-
end
|
458
|
-
|
459
|
-
def can_image_link?(uri)
|
460
|
-
image?(uri) and @options[:allow_bracket_inline_image]
|
461
|
-
end
|
462
|
-
|
463
|
-
def compile_uri_autolink(uri)
|
464
|
-
if image?(uri)
|
465
|
-
@output.image_hyperlink(fix_uri(uri))
|
466
|
-
else
|
467
|
-
@output.hyperlink(fix_uri(uri), @output.text(uri))
|
468
|
-
end
|
469
|
-
end
|
470
|
-
|
471
|
-
def fix_uri(uri)
|
472
|
-
if /\A(?:https?|ftp|file):(?!\/\/)/ =~ uri
|
473
|
-
uri.sub(/\A\w+:/, "")
|
474
|
-
else
|
475
|
-
uri
|
476
|
-
end
|
477
|
-
end
|
478
|
-
|
479
|
-
IMAGE_EXTS = %w(.jpg .jpeg .gif .png)
|
480
|
-
|
481
|
-
def image?(uri)
|
482
|
-
IMAGE_EXTS.include?(uri[/\.[^.]+\z/].to_s.downcase)
|
483
|
-
end
|
484
|
-
|
485
|
-
STRONG = "'''"
|
486
|
-
EM = "''"
|
487
|
-
DEL = "=="
|
488
|
-
TT = "``"
|
489
|
-
|
490
|
-
STRONG_RE = /'''.+?'''/
|
491
|
-
EM_RE = /''.+?''/
|
492
|
-
DEL_RE = /==.+?==/
|
493
|
-
TT_RE = /``.+?``/
|
494
|
-
|
495
|
-
MODIFIER_RE = Regexp.union(STRONG_RE, EM_RE, DEL_RE, TT_RE)
|
496
|
-
|
497
|
-
MODTAG = {
|
498
|
-
STRONG => "strong",
|
499
|
-
EM => "em",
|
500
|
-
DEL => "del",
|
501
|
-
TT => 'tt'
|
502
|
-
}
|
503
|
-
|
504
|
-
def compile_modifier(str)
|
505
|
-
buf = @output.container
|
506
|
-
while m = / (#{MODIFIER_RE})
|
507
|
-
/xo.match(str)
|
508
|
-
evaluate_plugin_block(m.pre_match, buf)
|
509
|
-
case
|
510
|
-
when chunk = m[1]
|
511
|
-
mod, s = split_mod(chunk)
|
512
|
-
mid = MODTAG[mod]
|
513
|
-
buf << @output.__send__(mid, compile_inline(s))
|
514
|
-
else
|
515
|
-
raise UnexpectedError, "must not happen"
|
516
|
-
end
|
517
|
-
str = m.post_match
|
518
|
-
end
|
519
|
-
evaluate_plugin_block(str, buf)
|
520
|
-
buf
|
521
|
-
end
|
522
|
-
|
523
|
-
def split_mod(str)
|
524
|
-
case str
|
525
|
-
when /\A'''/
|
526
|
-
return str[0, 3], str[3...-3]
|
527
|
-
when /\A''/
|
528
|
-
return str[0, 2], str[2...-2]
|
529
|
-
when /\A==/
|
530
|
-
return str[0, 2], str[2...-2]
|
531
|
-
when /\A``/
|
532
|
-
return str[0, 2], str[2...-2]
|
533
|
-
else
|
534
|
-
raise UnexpectedError, "must not happen: #{str.inspect}"
|
535
|
-
end
|
536
|
-
end
|
537
|
-
|
538
|
-
def strip(str)
|
539
|
-
rstrip(lstrip(str))
|
540
|
-
end
|
541
|
-
|
542
|
-
def rstrip(str)
|
543
|
-
str.sub(/[ \t\r\n\v\f]+\z/, "")
|
544
|
-
end
|
545
|
-
|
546
|
-
def lstrip(str)
|
547
|
-
str.sub(/\A[ \t\r\n\v\f]+/, "")
|
548
|
-
end
|
549
|
-
|
550
|
-
|
551
|
-
class HTMLOutput
|
552
|
-
def initialize(suffix = " />")
|
553
|
-
@suffix = suffix
|
554
|
-
@f = nil
|
555
|
-
end
|
556
|
-
|
557
|
-
def reset
|
558
|
-
@f = StringIO.new
|
559
|
-
end
|
560
|
-
|
561
|
-
def finish
|
562
|
-
@f.string
|
563
|
-
end
|
564
|
-
|
565
|
-
def container(_for=nil)
|
566
|
-
case _for
|
567
|
-
when :paragraph
|
568
|
-
[]
|
569
|
-
else
|
570
|
-
""
|
571
|
-
end
|
572
|
-
end
|
573
|
-
|
574
|
-
#
|
575
|
-
# Procedures
|
576
|
-
#
|
577
|
-
|
578
|
-
def headline(level, title)
|
579
|
-
@f.puts "<h#{level}>#{title}</h#{level}>"
|
580
|
-
end
|
581
|
-
|
582
|
-
def hrule
|
583
|
-
@f.puts "<hr#{@suffix}"
|
584
|
-
end
|
585
|
-
|
586
|
-
def list_begin
|
587
|
-
end
|
588
|
-
|
589
|
-
def list_end
|
590
|
-
@f.puts
|
591
|
-
end
|
592
|
-
|
593
|
-
def list_open(type)
|
594
|
-
@f.puts "<#{type}>"
|
595
|
-
end
|
596
|
-
|
597
|
-
def list_close(type)
|
598
|
-
@f.print "</#{type}>"
|
599
|
-
end
|
600
|
-
|
601
|
-
def listitem_open
|
602
|
-
@f.print "<li>"
|
603
|
-
end
|
604
|
-
|
605
|
-
def listitem_close
|
606
|
-
@f.puts "</li>"
|
607
|
-
end
|
608
|
-
|
609
|
-
def listitem(item)
|
610
|
-
@f.print item
|
611
|
-
end
|
612
|
-
|
613
|
-
def dlist_open
|
614
|
-
@f.puts "<dl>"
|
615
|
-
end
|
616
|
-
|
617
|
-
def dlist_close
|
618
|
-
@f.puts "</dl>"
|
619
|
-
end
|
620
|
-
|
621
|
-
def dlist_item(dt, dd)
|
622
|
-
case
|
623
|
-
when dd.empty?
|
624
|
-
@f.puts "<dt>#{dt}</dt>"
|
625
|
-
when dt.empty?
|
626
|
-
@f.puts "<dd>#{dd}</dd>"
|
627
|
-
else
|
628
|
-
@f.puts "<dt>#{dt}</dt>"
|
629
|
-
@f.puts "<dd>#{dd}</dd>"
|
630
|
-
end
|
631
|
-
end
|
632
|
-
|
633
|
-
def table_open
|
634
|
-
@f.puts %Q(<table border="1">)
|
635
|
-
end
|
636
|
-
|
637
|
-
def table_close
|
638
|
-
@f.puts "</table>"
|
639
|
-
end
|
640
|
-
|
641
|
-
def table_record_open
|
642
|
-
@f.print "<tr>"
|
643
|
-
end
|
644
|
-
|
645
|
-
def table_record_close
|
646
|
-
@f.puts "</tr>"
|
647
|
-
end
|
648
|
-
|
649
|
-
def table_head(item, rs, cs)
|
650
|
-
@f.print "<th#{tdattr(rs, cs)}>#{item}</th>"
|
651
|
-
end
|
652
|
-
|
653
|
-
def table_data(item, rs, cs)
|
654
|
-
@f.print "<td#{tdattr(rs, cs)}>#{item}</td>"
|
655
|
-
end
|
656
|
-
|
657
|
-
def tdattr(rs, cs)
|
658
|
-
buf = ""
|
659
|
-
buf << %Q( rowspan="#{rs}") if rs
|
660
|
-
buf << %Q( colspan="#{cs}") if cs
|
661
|
-
buf
|
662
|
-
end
|
663
|
-
private :tdattr
|
664
|
-
|
665
|
-
def blockquote_open
|
666
|
-
@f.print "<blockquote>"
|
667
|
-
end
|
668
|
-
|
669
|
-
def blockquote_close
|
670
|
-
@f.puts "</blockquote>"
|
671
|
-
end
|
672
|
-
|
673
|
-
def block_preformatted(str, info)
|
674
|
-
syntax = info ? info.downcase : nil
|
675
|
-
if syntax
|
676
|
-
begin
|
677
|
-
convertor = Syntax::Convertors::HTML.for_syntax(syntax)
|
678
|
-
@f.puts convertor.convert(str)
|
679
|
-
return
|
680
|
-
rescue NameError, RuntimeError
|
681
|
-
@f.puts %Q|<pre class="prettyprint">#{text(str)}</pre>|
|
682
|
-
return
|
683
|
-
end
|
684
|
-
end
|
685
|
-
preformatted(text(str))
|
686
|
-
end
|
687
|
-
|
688
|
-
def preformatted(str)
|
689
|
-
@f.print "<pre>"
|
690
|
-
@f.print str
|
691
|
-
@f.puts "</pre>"
|
692
|
-
end
|
693
|
-
|
694
|
-
def paragraph(lines)
|
695
|
-
@f.puts "<p>#{lines.join("\n")}</p>"
|
696
|
-
end
|
697
|
-
|
698
|
-
def block_plugin(str)
|
699
|
-
@f.puts %Q(<div class="plugin">{{#{escape_html(str)}}}</div>)
|
700
|
-
end
|
701
|
-
|
702
|
-
#
|
703
|
-
# Functions
|
704
|
-
#
|
705
|
-
|
706
|
-
def hyperlink(uri, title)
|
707
|
-
%Q(<a href="#{escape_html_param(uri)}">#{title}</a>)
|
708
|
-
end
|
709
|
-
|
710
|
-
def wiki_name(name)
|
711
|
-
hyperlink(name, text(name))
|
712
|
-
end
|
713
|
-
|
714
|
-
def image_hyperlink(uri, alt = nil)
|
715
|
-
alt ||= uri.split(/\//).last
|
716
|
-
alt = escape_html(alt)
|
717
|
-
%Q(<img src="#{escape_html_param(uri)}" alt="#{alt}"#{@suffix})
|
718
|
-
end
|
719
|
-
|
720
|
-
def strong(item)
|
721
|
-
"<strong>#{item}</strong>"
|
722
|
-
end
|
723
|
-
|
724
|
-
def em(item)
|
725
|
-
"<em>#{item}</em>"
|
726
|
-
end
|
727
|
-
|
728
|
-
def del(item)
|
729
|
-
"<del>#{item}</del>"
|
730
|
-
end
|
731
|
-
|
732
|
-
def tt(item)
|
733
|
-
"<tt>#{item}</tt>"
|
734
|
-
end
|
735
|
-
|
736
|
-
def text(str)
|
737
|
-
escape_html(str)
|
738
|
-
end
|
739
|
-
|
740
|
-
def inline_plugin(src)
|
741
|
-
%Q(<span class="plugin">{{#{escape_html(src)}}}</span>)
|
742
|
-
end
|
743
|
-
|
744
|
-
#
|
745
|
-
# Utilities
|
746
|
-
#
|
747
|
-
|
748
|
-
def escape_html_param(str)
|
749
|
-
escape_quote(escape_html(str))
|
750
|
-
end
|
751
|
-
|
752
|
-
def escape_html(text)
|
753
|
-
text.gsub(/&/, "&").gsub(/</, "<").gsub(/>/, ">")
|
754
|
-
end
|
755
|
-
|
756
|
-
def unescape_html(text)
|
757
|
-
text.gsub(/>/, ">").gsub(/</, "<").gsub(/&/, "&")
|
758
|
-
end
|
759
|
-
|
760
|
-
def escape_quote(text)
|
761
|
-
text.gsub(/"/, """)
|
762
|
-
end
|
763
|
-
end
|
764
|
-
|
765
|
-
|
766
|
-
class LineInput
|
767
|
-
def initialize(f)
|
768
|
-
@input = f
|
769
|
-
@buf = []
|
770
|
-
@lineno = 0
|
771
|
-
@eof_p = false
|
772
|
-
end
|
773
|
-
|
774
|
-
def inspect
|
775
|
-
"\#<#{self.class} file=#{@input.inspect} line=#{lineno()}>"
|
776
|
-
end
|
777
|
-
|
778
|
-
def eof?
|
779
|
-
@eof_p
|
780
|
-
end
|
781
|
-
|
782
|
-
def lineno
|
783
|
-
@lineno
|
784
|
-
end
|
785
|
-
|
786
|
-
def gets
|
787
|
-
unless @buf.empty?
|
788
|
-
@lineno += 1
|
789
|
-
return @buf.pop
|
790
|
-
end
|
791
|
-
return nil if @eof_p # to avoid ARGF blocking.
|
792
|
-
line = @input.gets
|
793
|
-
line = line.sub(/\r\n/, "\n") if line
|
794
|
-
@eof_p = line.nil?
|
795
|
-
@lineno += 1
|
796
|
-
line
|
797
|
-
end
|
798
|
-
|
799
|
-
def ungets(line)
|
800
|
-
return unless line
|
801
|
-
@lineno -= 1
|
802
|
-
@buf.push line
|
803
|
-
line
|
804
|
-
end
|
805
|
-
|
806
|
-
def peek
|
807
|
-
line = gets()
|
808
|
-
ungets line if line
|
809
|
-
line
|
810
|
-
end
|
811
|
-
|
812
|
-
def next?
|
813
|
-
peek() ? true : false
|
814
|
-
end
|
815
|
-
|
816
|
-
def skip_blank_lines
|
817
|
-
n = 0
|
818
|
-
while line = gets()
|
819
|
-
unless line.strip.empty?
|
820
|
-
ungets line
|
821
|
-
return n
|
822
|
-
end
|
823
|
-
n += 1
|
824
|
-
end
|
825
|
-
n
|
826
|
-
end
|
827
|
-
|
828
|
-
def gets_if(re)
|
829
|
-
line = gets()
|
830
|
-
if not line or not (re =~ line)
|
831
|
-
ungets line
|
832
|
-
return nil
|
833
|
-
end
|
834
|
-
line
|
835
|
-
end
|
836
|
-
|
837
|
-
def gets_unless(re)
|
838
|
-
line = gets()
|
839
|
-
if not line or re =~ line
|
840
|
-
ungets line
|
841
|
-
return nil
|
842
|
-
end
|
843
|
-
line
|
844
|
-
end
|
845
|
-
|
846
|
-
def each
|
847
|
-
while line = gets()
|
848
|
-
yield line
|
849
|
-
end
|
850
|
-
end
|
851
|
-
|
852
|
-
def while_match(re)
|
853
|
-
while line = gets()
|
854
|
-
unless re =~ line
|
855
|
-
ungets line
|
856
|
-
return
|
857
|
-
end
|
858
|
-
yield line
|
859
|
-
end
|
860
|
-
nil
|
861
|
-
end
|
862
|
-
|
863
|
-
def getlines_while(re)
|
864
|
-
buf = []
|
865
|
-
while_match(re) do |line|
|
866
|
-
buf.push line
|
867
|
-
end
|
868
|
-
buf
|
869
|
-
end
|
870
|
-
|
871
|
-
alias span getlines_while # from Haskell
|
872
|
-
|
873
|
-
def until_match(re)
|
874
|
-
while line = gets()
|
875
|
-
if re =~ line
|
876
|
-
ungets line
|
877
|
-
return
|
878
|
-
end
|
879
|
-
yield line
|
880
|
-
end
|
881
|
-
nil
|
882
|
-
end
|
883
|
-
|
884
|
-
def getlines_until(re)
|
885
|
-
buf = []
|
886
|
-
until_match(re) do |line|
|
887
|
-
buf.push line
|
888
|
-
end
|
889
|
-
buf
|
890
|
-
end
|
891
|
-
|
892
|
-
alias break getlines_until # from Haskell
|
893
|
-
|
894
|
-
def until_terminator(re)
|
895
|
-
while line = gets()
|
896
|
-
return if re =~ line # discard terminal line
|
897
|
-
yield line
|
898
|
-
end
|
899
|
-
nil
|
900
|
-
end
|
901
|
-
|
902
|
-
def getblock(term_re)
|
903
|
-
buf = []
|
904
|
-
until_terminator(term_re) do |line|
|
905
|
-
buf.push line
|
906
|
-
end
|
907
|
-
buf
|
908
|
-
end
|
909
|
-
end
|
910
|
-
end
|
911
|
-
|
912
|
-
if __FILE__ == $0
|
913
|
-
puts HikiDoc.to_html(ARGF.read(nil))
|
914
|
-
end
|