tdiary 3.2.2.20130518 → 3.2.2.20130527

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +17 -11
  4. data/Rakefile +2 -0
  5. data/config.ru +2 -1
  6. data/tdiary.gemspec +7 -0
  7. data/tdiary.rb +6 -2
  8. data/tdiary/cli.rb +27 -1
  9. data/tdiary/environment.rb +0 -1
  10. data/tdiary/tasks/release.rake +7 -1
  11. data/tdiary/version.rb +1 -1
  12. metadata +87 -132
  13. data/vendor/hikidoc-0.0.6/COPYING +0 -28
  14. data/vendor/hikidoc-0.0.6/NEWS +0 -30
  15. data/vendor/hikidoc-0.0.6/NEWS.ja +0 -30
  16. data/vendor/hikidoc-0.0.6/README +0 -86
  17. data/vendor/hikidoc-0.0.6/README.ja +0 -83
  18. data/vendor/hikidoc-0.0.6/Rakefile +0 -68
  19. data/vendor/hikidoc-0.0.6/TextFormattingRules +0 -320
  20. data/vendor/hikidoc-0.0.6/TextFormattingRules.ja +0 -318
  21. data/vendor/hikidoc-0.0.6/bin/hikidoc +0 -66
  22. data/vendor/hikidoc-0.0.6/lib/hikidoc.rb +0 -914
  23. data/vendor/hikidoc-0.0.6/setup.rb +0 -1360
  24. data/vendor/hikidoc-0.0.6/test/run-test.rb +0 -13
  25. data/vendor/hikidoc-0.0.6/test/test_hikidoc.rb +0 -506
  26. data/vendor/imagesize-0.1.1/Manifest.txt +0 -19
  27. data/vendor/imagesize-0.1.1/README.txt +0 -49
  28. data/vendor/imagesize-0.1.1/lib/image_size.rb +0 -305
  29. data/vendor/imagesize-0.1.1/lib/image_size/version.rb +0 -9
  30. data/vendor/imagesize-0.1.1/setup.rb +0 -1585
  31. data/vendor/imagesize-0.1.1/test/2-4-7.png +0 -0
  32. data/vendor/imagesize-0.1.1/test/4_1_2.gif +0 -0
  33. data/vendor/imagesize-0.1.1/test/bmp.bmp +0 -0
  34. data/vendor/imagesize-0.1.1/test/cursor.xbm +0 -6
  35. data/vendor/imagesize-0.1.1/test/detect.swf +0 -0
  36. data/vendor/imagesize-0.1.1/test/pbm.pbm +0 -0
  37. data/vendor/imagesize-0.1.1/test/pcx.pcx +0 -0
  38. data/vendor/imagesize-0.1.1/test/pgm.pgm +0 -5
  39. data/vendor/imagesize-0.1.1/test/test.xpm +0 -38
  40. data/vendor/imagesize-0.1.1/test/test_helper.rb +0 -2
  41. data/vendor/imagesize-0.1.1/test/test_image_size.rb +0 -71
  42. data/vendor/imagesize-0.1.1/test/tiff.tiff +0 -0
  43. data/vendor/imagesize-0.1.1/test/tokyo_tower.jpg +0 -0
  44. data/vendor/imagesize-0.1.1/test/tower_e.gif.psd +0 -0
  45. data/vendor/rdtool-0.6.38/COPYING.txt +0 -339
  46. data/vendor/rdtool-0.6.38/Gemfile +0 -3
  47. data/vendor/rdtool-0.6.38/HISTORY +0 -318
  48. data/vendor/rdtool-0.6.38/LGPL-2.1 +0 -502
  49. data/vendor/rdtool-0.6.38/LICENSE.txt +0 -58
  50. data/vendor/rdtool-0.6.38/README.html +0 -66
  51. data/vendor/rdtool-0.6.38/README.ja.html +0 -73
  52. data/vendor/rdtool-0.6.38/README.rd +0 -76
  53. data/vendor/rdtool-0.6.38/README.rd.ja +0 -85
  54. data/vendor/rdtool-0.6.38/Rakefile +0 -152
  55. data/vendor/rdtool-0.6.38/TODO +0 -22
  56. data/vendor/rdtool-0.6.38/bin/rd2 +0 -283
  57. data/vendor/rdtool-0.6.38/bin/rdswap.rb +0 -207
  58. data/vendor/rdtool-0.6.38/doc/rd-draft.html +0 -456
  59. data/vendor/rdtool-0.6.38/doc/rd-draft.ja.html +0 -466
  60. data/vendor/rdtool-0.6.38/doc/rd-draft.rd +0 -479
  61. data/vendor/rdtool-0.6.38/doc/rd-draft.rd.ja +0 -487
  62. data/vendor/rdtool-0.6.38/lib/rd/block-element.rb +0 -114
  63. data/vendor/rdtool-0.6.38/lib/rd/complex-list-item.rb +0 -65
  64. data/vendor/rdtool-0.6.38/lib/rd/desclist.rb +0 -55
  65. data/vendor/rdtool-0.6.38/lib/rd/document-struct.rb +0 -46
  66. data/vendor/rdtool-0.6.38/lib/rd/dot.rd2rc +0 -18
  67. data/vendor/rdtool-0.6.38/lib/rd/element.rb +0 -160
  68. data/vendor/rdtool-0.6.38/lib/rd/filter.rb +0 -255
  69. data/vendor/rdtool-0.6.38/lib/rd/head-filter.rb +0 -14
  70. data/vendor/rdtool-0.6.38/lib/rd/inline-element.rb +0 -233
  71. data/vendor/rdtool-0.6.38/lib/rd/labeled-element.rb +0 -14
  72. data/vendor/rdtool-0.6.38/lib/rd/list.rb +0 -57
  73. data/vendor/rdtool-0.6.38/lib/rd/loose-struct.rb +0 -11
  74. data/vendor/rdtool-0.6.38/lib/rd/methodlist.rb +0 -57
  75. data/vendor/rdtool-0.6.38/lib/rd/output-format-visitor.rb +0 -30
  76. data/vendor/rdtool-0.6.38/lib/rd/package.rb +0 -4
  77. data/vendor/rdtool-0.6.38/lib/rd/parser-util.rb +0 -14
  78. data/vendor/rdtool-0.6.38/lib/rd/post-install +0 -1
  79. data/vendor/rdtool-0.6.38/lib/rd/pre-setup.rb +0 -18
  80. data/vendor/rdtool-0.6.38/lib/rd/rbl-file.rb +0 -69
  81. data/vendor/rdtool-0.6.38/lib/rd/rbl-suite.rb +0 -37
  82. data/vendor/rdtool-0.6.38/lib/rd/rd-struct.rb +0 -86
  83. data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-lib.rb +0 -266
  84. data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-opt.rb +0 -34
  85. data/vendor/rdtool-0.6.38/lib/rd/rd2html-lib.rb +0 -490
  86. data/vendor/rdtool-0.6.38/lib/rd/rd2html-opt.rb +0 -67
  87. data/vendor/rdtool-0.6.38/lib/rd/rd2man-lib.rb +0 -251
  88. data/vendor/rdtool-0.6.38/lib/rd/rd2rdo-lib.rb +0 -19
  89. data/vendor/rdtool-0.6.38/lib/rd/rd2rmi-lib.rb +0 -32
  90. data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.ry +0 -518
  91. data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.tab.rb +0 -1061
  92. data/vendor/rdtool-0.6.38/lib/rd/rdfmt.rb +0 -15
  93. data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.ry +0 -503
  94. data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.tab.rb +0 -1243
  95. data/vendor/rdtool-0.6.38/lib/rd/rdvisitor.rb +0 -214
  96. data/vendor/rdtool-0.6.38/lib/rd/reference-resolver.rb +0 -114
  97. data/vendor/rdtool-0.6.38/lib/rd/search-file.rb +0 -14
  98. data/vendor/rdtool-0.6.38/lib/rd/tree.rb +0 -103
  99. data/vendor/rdtool-0.6.38/lib/rd/version.rb +0 -41
  100. data/vendor/rdtool-0.6.38/lib/rd/visitor.rb +0 -86
  101. data/vendor/rdtool-0.6.38/rdtool.gemspec +0 -125
  102. data/vendor/rdtool-0.6.38/setup.rb +0 -1596
  103. data/vendor/rdtool-0.6.38/test/data/includee1.html +0 -1
  104. data/vendor/rdtool-0.6.38/test/data/includee2.html +0 -1
  105. data/vendor/rdtool-0.6.38/test/data/includee3.nothtml +0 -1
  106. data/vendor/rdtool-0.6.38/test/data/includee4.xhtml +0 -0
  107. data/vendor/rdtool-0.6.38/test/data/label.rbl +0 -2
  108. data/vendor/rdtool-0.6.38/test/data/label2.rbl +0 -2
  109. data/vendor/rdtool-0.6.38/test/data/sub/includee2.html +0 -1
  110. data/vendor/rdtool-0.6.38/test/data/sub/includee4.html +0 -0
  111. data/vendor/rdtool-0.6.38/test/dummy-observer.rb +0 -6
  112. data/vendor/rdtool-0.6.38/test/dummy.rb +0 -33
  113. data/vendor/rdtool-0.6.38/test/temp-dir.rb +0 -19
  114. data/vendor/rdtool-0.6.38/test/test-block-parser.rb +0 -46
  115. data/vendor/rdtool-0.6.38/test/test-desclist-item.rb +0 -219
  116. data/vendor/rdtool-0.6.38/test/test-document-element.rb +0 -46
  117. data/vendor/rdtool-0.6.38/test/test-document-struct.rb +0 -66
  118. data/vendor/rdtool-0.6.38/test/test-element.rb +0 -46
  119. data/vendor/rdtool-0.6.38/test/test-headline.rb +0 -80
  120. data/vendor/rdtool-0.6.38/test/test-inline-parser.rb +0 -46
  121. data/vendor/rdtool-0.6.38/test/test-list-item.rb +0 -54
  122. data/vendor/rdtool-0.6.38/test/test-list.rb +0 -53
  123. data/vendor/rdtool-0.6.38/test/test-methodlist-item.rb +0 -73
  124. data/vendor/rdtool-0.6.38/test/test-nonterminal-element.rb +0 -170
  125. data/vendor/rdtool-0.6.38/test/test-nonterminal-inline.rb +0 -33
  126. data/vendor/rdtool-0.6.38/test/test-output-format-visitor.rb +0 -48
  127. data/vendor/rdtool-0.6.38/test/test-parser-util.rb +0 -41
  128. data/vendor/rdtool-0.6.38/test/test-rbl-file.rb +0 -156
  129. data/vendor/rdtool-0.6.38/test/test-rbl-suite.rb +0 -43
  130. data/vendor/rdtool-0.6.38/test/test-rd2html-lib.rb +0 -496
  131. data/vendor/rdtool-0.6.38/test/test-rdtree.rb +0 -17
  132. data/vendor/rdtool-0.6.38/test/test-rdvisitor.rb +0 -29
  133. data/vendor/rdtool-0.6.38/test/test-reference-resolver.rb +0 -202
  134. data/vendor/rdtool-0.6.38/test/test-reference.rb +0 -132
  135. data/vendor/rdtool-0.6.38/test/test-search-file.rb +0 -22
  136. data/vendor/rdtool-0.6.38/test/test-terminal-inline.rb +0 -41
  137. data/vendor/rdtool-0.6.38/test/test-textblock.rb +0 -44
  138. data/vendor/rdtool-0.6.38/test/test-tree.rb +0 -82
  139. data/vendor/rdtool-0.6.38/test/test-version.rb +0 -57
  140. data/vendor/rdtool-0.6.38/test/test-visitor.rb +0 -230
  141. 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(/&/, "&amp;").gsub(/</, "&lt;").gsub(/>/, "&gt;")
754
- end
755
-
756
- def unescape_html(text)
757
- text.gsub(/&gt;/, ">").gsub(/&lt;/, "<").gsub(/&amp;/, "&")
758
- end
759
-
760
- def escape_quote(text)
761
- text.gsub(/"/, "&quot;")
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