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.
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