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,67 +0,0 @@
1
- =begin
2
- = rd2html-opt.rb
3
- sub-OptionParser for rd2html-lib.rb.
4
- =end
5
- require "optparse"
6
-
7
- q = ARGV.options
8
-
9
- q.on_tail("rd2html-lib options:")
10
-
11
-
12
- #q.on_tail("--use-numbering-anchor",
13
- # "use number for anchor name (old style)") do
14
- # $Visitor.use_old_anchor = true
15
- #end
16
-
17
- q.on_tail("--output-rbl",
18
- "output external Label file") do
19
- $Visitor.output_rbl = true
20
- end
21
-
22
- q.on_tail("--with-css=FILE",
23
- String,
24
- "use FILE as CSS of output HTML") do |i|
25
- $Visitor.css = i
26
- end
27
-
28
- q.on_tail("--html-charset=CHARSET",
29
- String,
30
- "indicate CHARSET as charset(char encoding)") do |i|
31
- $Visitor.charset = i
32
- end
33
-
34
- q.on_tail("--html-lang=LANG",
35
- String,
36
- "indicate LANG as lang attribute of html") do |i|
37
- $Visitor.lang = i
38
- end
39
-
40
- q.on_tail("--html-title=TITLE",
41
- String,
42
- "content of TITLE element of HTML") do |i|
43
- $Visitor.title = i
44
- end
45
-
46
- q.on_tail("--html-link-rel=REL",
47
- String,
48
- "add forward LINK element.(\"<rel>:<href>\")") do |i|
49
- if /(\w+):(.+)/ =~ i
50
- $Visitor.html_link_rel[$1] = $2
51
- else
52
- # warning
53
- end
54
- end
55
-
56
- q.on_tail("--html-link-rev=REV",
57
- String,
58
- "add reverse LINK element.(\"<rev>:<href>\")") do |i|
59
- if /(\w+):(.+)/ =~ i
60
- $Visitor.html_link_rev[$1] = $2
61
- else
62
- # warning
63
- end
64
- end
65
-
66
-
67
-
@@ -1,251 +0,0 @@
1
- =begin
2
- = rd/rd2man-lib.rb
3
- =end
4
-
5
- require "rd/rdvisitor"
6
- require "rd/version"
7
-
8
- unless [].respond_to? :collect!
9
- class Array
10
- alias collect! filter
11
- end
12
- end
13
-
14
- module RD
15
- class RD2MANVisitor < RDVisitor
16
- include AutoLabel
17
- include MethodParse
18
-
19
- SYSTEM_NAME = "RDtool -- RD2ManVisitor"
20
- SYSTEM_VERSION = "$Version: "+RD::VERSION+"$"
21
- VERSION = Version.new_from_version_string(SYSTEM_NAME, SYSTEM_VERSION)
22
-
23
- def self.version
24
- VERSION
25
- end
26
-
27
- # must-have constants
28
- OUTPUT_SUFFIX = "1"
29
- INCLUDE_SUFFIX = ["1"]
30
-
31
- def initialize
32
- @enumcounter = 0
33
- @index = {}
34
- @filename = nil
35
- end
36
-
37
- def visit(tree)
38
- prepare_labels(tree, "")
39
- super(tree)
40
- end
41
-
42
- def apply_to_DocumentElement(element, content)
43
- content = content.join
44
- title = guess_title
45
- title = title.sub(/\.rd$/i, '').upcase
46
- <<"EOT"
47
- .\\" DO NOT MODIFY THIS FILE! it was generated by rd2
48
- .TH #{title} 1 "#{Time.now.strftime '%B %Y'}"
49
- #{content}
50
- EOT
51
- end # "
52
-
53
- def apply_to_Headline(element, title)
54
- title = title.join(" ")
55
- element.level <= 1 ? ".SH #{title}\n" : ".SS #{title}\n"
56
- end
57
-
58
- # RDVisitor#apply_to_Include
59
-
60
- def apply_to_TextBlock(element, content)
61
- if RD::DescListItem === element.parent ||
62
- RD::ItemListItem === element.parent ||
63
- RD::EnumListItem === element.parent
64
- return content.join
65
- else
66
- return ".PP\n" + content.join
67
- end
68
- end
69
-
70
- def apply_to_Verbatim(element)
71
- content = []
72
- element.each_line do |i|
73
- content.push(apply_to_String(i))
74
- end
75
- # Can we use BLOCKQUOTE such like?
76
- %Q[.nf\n\\& #{content.join("\\& ")}.fi\n]
77
- end
78
-
79
- def apply_to_ItemList(element, items)
80
- items.collect! do |x| x.sub(/\n\n/, "\n") end
81
- items = items.join(".IP\n.B\n\\(bu\n") # "\\(bu" -> "" ?
82
- ".IP\n.B\n\\(bu\n" + items
83
- end
84
-
85
- def apply_to_EnumList(element, items)
86
- @enumcounter = 0
87
- items.join
88
- end
89
-
90
- def apply_to_DescList(element, items)
91
- items.map{ |i| i =~ /\n$/ ? i : i + "\n" }.join("")
92
- end
93
-
94
- def apply_to_MethodList(element, items)
95
- items.map{ |i| i =~ /\n$/ ? i : i + "\n" }.join("")
96
- end
97
-
98
- def apply_to_ItemListItem(element, content)
99
- content.map{ |c| c =~ /\n$/ ? c : c + "\n" }.join("")
100
- end
101
-
102
- def apply_to_EnumListItem(element, content)
103
- @enumcounter += 1
104
- %Q[.TP\n#{@enumcounter}.\n#{content.join("\n")}]
105
- end
106
-
107
- def apply_to_DescListItem(element, term, description)
108
- anchor = refer(element)
109
- if description.empty?
110
- ".TP\n.fi\n.B\n#{term.join(" ")}"
111
- else
112
- %[.TP\n.fi\n.B\n#{term.join(" ")}\n#{description.join("\n")}].chomp
113
- end
114
- end
115
-
116
- def apply_to_MethodListItem(element, term, description)
117
- term = parse_method(term) # maybe: term -> element.term
118
- anchor = refer(element)
119
- if description.empty?
120
- ".TP\n.fi\n.B\n#{term.join(" ")}"
121
- else
122
- %[.TP\n.fi\n.B\n#{term.join(" ")}\n#{description.join("\n")}]
123
- end
124
- end
125
-
126
- def parse_method(method)
127
- klass, kind, method, args = MethodParse.analize_method(method)
128
-
129
- if kind == :function
130
- klass = kind = nil
131
- else
132
- kind = MethodParse.kind2str(kind)
133
- end
134
-
135
- case method
136
- when "[]"
137
- args.strip!
138
- args.sub!(/^\((.*)\)$/, '\\1')
139
- "#{klass}#{kind}[#{args}]"
140
- when "[]="
141
- args.strip!
142
- args.sub!(/^\((.*)\)$/, '\\1')
143
- args, val = /^(.*),([^,]*)$/.match(args)[1,2]
144
- args.strip!
145
- val.strip!
146
-
147
- "#{klass}#{kind}[#{args}] = #{val}"
148
- else
149
- "#{klass}#{kind}#{method}#{args}"
150
- end
151
- end
152
- private :parse_method
153
-
154
- def apply_to_StringElement(element)
155
- apply_to_String(element.content)
156
- end
157
-
158
- def apply_to_Emphasis(element, content)
159
- %Q[\\fI#{content.join}\\fP]
160
- end
161
-
162
- def apply_to_Code(element, content)
163
- %{\\&\\fB#{content.join.sub(/\./, '\\.')}\\fP}
164
- end
165
-
166
- def apply_to_Var(element, content)
167
- content.join
168
- end
169
-
170
- def apply_to_Keyboard(element, content)
171
- content.join
172
- end
173
-
174
- def apply_to_Index(element, content)
175
- tmp = []
176
- element.each do |i|
177
- tmp.push(i) if i.is_a?(String)
178
- end
179
- key = meta_char_escape(tmp.join)
180
- if @index.has_key?(key)
181
- # warning?
182
- ""
183
- else
184
- num = @index[key] = @index.size
185
- %{\\&\\fB#{content.join.sub(/\./, '\\.')}\\fP}
186
- end
187
- end
188
-
189
- def apply_to_Reference(element, content)
190
- case element.label
191
- when Reference::URL
192
- apply_to_RefToURL(element, content)
193
- when Reference::RDLabel
194
- if element.label.filename
195
- apply_to_RefToOtherFile(element, content)
196
- else
197
- apply_to_RefToElement(element, content)
198
- end
199
- end
200
- end
201
-
202
- def apply_to_RefToElement(element, content)
203
- content = content.join
204
- content.sub(/^function#/, "")
205
- end
206
-
207
- def apply_to_RefToOtherFile(element, content)
208
- content.join
209
- end
210
-
211
- def apply_to_RefToURL(element, content)
212
- content.join
213
- end
214
-
215
- def apply_to_Footnote(element, content)
216
- ""
217
- end
218
-
219
- def apply_to_Verb(element)
220
- apply_to_String(element.content)
221
- end
222
-
223
- def apply_to_String(element)
224
- meta_char_escape(element)
225
- end
226
-
227
- def meta_char_escape(str)
228
- str.gsub(/[-\\]/, '\\\\\\&').gsub(/^[.']/, '\\&') # '
229
- end
230
- private :meta_char_escape
231
-
232
- def guess_title
233
- return @input_filename unless @input_filename == "-"
234
- return @filename if @filename
235
- "Untitled"
236
- end
237
- private :guess_title
238
-
239
-
240
- end # RD2MANVisitor
241
- end # RD
242
-
243
- $Visitor_Class = RD::RD2MANVisitor
244
-
245
- =begin
246
- == script info.
247
- RD to MAN translate library for rdfmt.rb
248
- $Id: rd2man-lib.rb,v 1.9 2003/08/02 15:45:49 tosh Exp $
249
- Copyright 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
250
- 2012 Youhei SASAKI <uwabami@gfd-dennou.org>
251
- =end
@@ -1,19 +0,0 @@
1
- =begin
2
- = rd2rdo-lib.rb
3
- Format lib to dump tree objects.
4
- =end
5
-
6
- require "rd/rdvisitor"
7
-
8
- module RD
9
- class RD2RDOVisitor < RDVisitor
10
- OUTPUT_SUFFIX = "rdo"
11
- INCLUDE_SUFFIX = []
12
-
13
- def visit(tree)
14
- Marshal.dump(tree)
15
- end
16
- end
17
- end
18
-
19
- $Visitor_Class = RD::RD2RDOVisitor
@@ -1,32 +0,0 @@
1
- =begin
2
- = rd2rmi-lib.rb
3
- library to output RMI.
4
- =end
5
- require "rd/rdvisitor"
6
-
7
- module RD
8
- class RD2RMIVisitor < RDVisitor
9
- include AutoLabel
10
- include MethodParse
11
-
12
- OUTPUT_SUFFIX = "rmi"
13
- INCLUDE_SUFFIX = ["rmi"]
14
-
15
- def visit(tree)
16
- ret = ""
17
-
18
- prepare_labels(tree)
19
-
20
- index = make_method_index(tree)
21
- index.each do |i|
22
- i[1] = kind2str(i[1])
23
- i[3] = @filename
24
- i[4] = refer(i[0]+i[1]+i[2])
25
- ret << "$method_index.push(#{i.inspect})\n"
26
- end
27
- ret
28
- end
29
- end # class RD2RMIVisitor
30
- end # module RD
31
-
32
- $Visitor_Class = RD::RD2RMIVisitor
@@ -1,518 +0,0 @@
1
-
2
- class RDParser
3
-
4
- preclow
5
- nonassoc DUMMY
6
- left ITEMLISTLINE ENUMLISTLINE DESCLISTLINE METHODLISTLINE STRINGLINE
7
- prechigh
8
-
9
- token STRINGLINE ITEMLISTLINE ENUMLISTLINE DESCLISTLINE METHODLISTLINE
10
- WHITELINE SUBTREE HEADLINE INCLUDE INDENT DEDENT DUMMY
11
-
12
- rule
13
- document : blocks { result = DocumentElement.new
14
- add_children_to_element(result, *val[0])
15
- }
16
- | {
17
- raise ParseError,
18
- "Error: file empty."
19
- }
20
- ;
21
- blocks : blocks block { result.concat(val[1]) }
22
- | block
23
- ;
24
- block : textblock { result = val }
25
- | verbatim { result = val }
26
- | lists
27
- | headline { result = val }
28
- | include { result = val }
29
- | WHITELINE { result = [] }
30
- | SUBTREE { result = val[0].blocks }
31
- ;
32
-
33
- headline : HEADLINE { # val[0] is like [level, title]
34
- title = @inline_parser.parse(val[0][1])
35
- result = Headline.new(val[0][0])
36
- add_children_to_element(result, *title)
37
- }
38
- ;
39
- include : INCLUDE { result = Include.new(val[0]) }
40
- ;
41
-
42
- textblock : textblockcontent = DUMMY
43
- { # val[0] is Array of String
44
- content = cut_off(val[0]).join("")
45
- contents = @inline_parser.parse(content)
46
- result = TextBlock.new()
47
- add_children_to_element(result, *contents)
48
- }
49
- ;
50
- textblockcontent : textblockcontent STRINGLINE
51
- { result.push(val[1]) }
52
- | STRINGLINE { result = val }
53
- ;
54
-
55
- verbatim : INDENT verbatimcontent DEDENT
56
- { # val[1] is Array of String
57
- content = cut_off(val[1])
58
- result = Verbatim.new(content)
59
- # imform to lexer.
60
- @in_verbatim = false }
61
- ;
62
- verbatim_after_lists : verbatimcontent
63
- { # val[0] is Array of String
64
- content = cut_off(val[0])
65
- result = Verbatim.new(content)
66
- # imform to lexer.
67
- @in_verbatim = false }
68
- ;
69
- verbatimcontent : verbatimcontent STRINGLINE
70
- { result.push(val[1]) }
71
- | verbatimcontent INDENT verbatimcontent DEDENT
72
- { result.concat(val[2]) }
73
- | verbatimcontent WHITELINE
74
- { result.push("\n") }
75
- | STRINGLINE { result = val
76
- # imform to lexer.
77
- @in_verbatim = true }
78
- ;
79
-
80
- list : itemlist
81
- | enumlist
82
- | desclist
83
- | methodlist
84
- ;
85
- lists : lists2 = DUMMY
86
- | INDENT lists2 DEDENT { result = val[1] }
87
- | INDENT lists2 verbatim_after_lists DEDENT
88
- { result = val[1].push(val[2]) }
89
- ;
90
-
91
- lists2 : lists2 list { result.push(val[1]) }
92
- | list { result = val }
93
- ;
94
-
95
- itemlist : itemlistitems = DUMMY {
96
- result = ItemList.new
97
- add_children_to_element(result, *val[0])
98
- }
99
- ;
100
- itemlistitems : itemlistitems itemlistitem
101
- { result.push(val[1]) }
102
- | itemlistitem { result = val }
103
- ;
104
- itemlistitem : first_textblock_in_itemlist other_blocks_in_list DEDENT
105
- {
106
- result = ItemListItem.new
107
- add_children_to_element(result, val[0], *val[1])
108
- }
109
- ;
110
-
111
- enumlist : enumlistitems = DUMMY {
112
- result = EnumList.new
113
- add_children_to_element(result, *val[0])
114
- }
115
- ;
116
- enumlistitems : enumlistitems enumlistitem
117
- { result.push(val[1]) }
118
- | enumlistitem { result = val }
119
- ;
120
- enumlistitem : first_textblock_in_enumlist other_blocks_in_list DEDENT
121
- {
122
- result = EnumListItem.new
123
- add_children_to_element(result, val[0], *val[1])
124
- }
125
- ;
126
-
127
- desclist : desclistitems = DUMMY {
128
- result = DescList.new
129
- add_children_to_element(result, *val[0])
130
- }
131
- ;
132
- desclistitems : desclistitems desclistitem {
133
- result.push(val[1]) }
134
- | desclistitem { result = val }
135
- ;
136
- desclistitem : DESCLISTLINE description_part DEDENT
137
- {
138
- term = DescListItem::Term.new
139
- term_contents = @inline_parser.parse(val[0].strip)
140
- add_children_to_element(term, *term_contents)
141
-
142
- result = DescListItem.new
143
- set_term_to_element(result, term)
144
- add_children_to_element(result, *val[1])
145
- }
146
- ;
147
-
148
- methodlist : methodlistitems = DUMMY {
149
- result = MethodList.new
150
- add_children_to_element(result, *val[0])
151
- }
152
- ;
153
- methodlistitems : methodlistitems methodlistitem
154
- { result.push(val[1]) }
155
- | methodlistitem { result = val }
156
- ;
157
- methodlistitem : METHODLISTLINE description_part DEDENT
158
- {
159
- term = MethodListItem::Term.new(val[0].strip)
160
- result = MethodListItem.new
161
- set_term_to_element(result, term)
162
- add_children_to_element(result, *val[1])
163
- }
164
- ;
165
-
166
- description_part : whitelines textblock blocks_in_list
167
- { result = [val[1]].concat(val[2]) }
168
- | whitelines textblock { result = [val[1]] }
169
- | whitelines INDENT blocks_in_list DEDENT
170
- { result = val[2] }
171
- | whitelines { result = [] }
172
- ;
173
-
174
- blocks_in_list : blocks_in_list block_in_list { result.concat(val[1]) }
175
- | block_in_list
176
- ;
177
- block_in_list : textblock { result = val }
178
- | verbatim { result = val }
179
- | lists
180
- | WHITELINE { result = [] }
181
- ;
182
- whitelines : whitelines2
183
- |
184
- ;
185
- whitelines2 : WHITELINE whitelines2
186
- | WHITELINE
187
- ;
188
-
189
- first_textblock_in_itemlist : ITEMLISTLINE textblockcontent
190
-
191
- { content = cut_off([val[0]].concat(val[1])).join("")
192
- contents = @inline_parser.parse(content)
193
- result = TextBlock.new()
194
- add_children_to_element(result, *contents)
195
- }
196
- | ITEMLISTLINE
197
-
198
- { content = cut_off([val[0]]).join("")
199
- contents = @inline_parser.parse(content)
200
- result = TextBlock.new()
201
- add_children_to_element(result, *contents)
202
- }
203
- ;
204
- first_textblock_in_enumlist : ENUMLISTLINE textblockcontent
205
-
206
- { content = cut_off([val[0]].concat(val[1])).join("")
207
- contents = @inline_parser.parse(content)
208
- result = TextBlock.new()
209
- add_children_to_element(result, *contents)
210
- }
211
- | ENUMLISTLINE
212
-
213
- { content = cut_off([val[0]]).join("")
214
- contents = @inline_parser.parse(content)
215
- result = TextBlock.new()
216
- add_children_to_element(result, *contents)
217
- }
218
- ;
219
- other_blocks_in_list : verbatim blocks_in_list
220
- { result = [val[0]].concat(val[1]) }
221
- | lists blocks_in_list { result.concat(val[1]) }
222
- | WHITELINE blocks_in_list { result = val[1] }
223
- | verbatim { result = val }
224
- | lists
225
- | WHITELINE { result = [] }
226
- | { result = [] }
227
- ;
228
- end
229
-
230
- ---- inner
231
- include ParserUtility
232
-
233
- TMPFILE = ["rdtmp", $$, 0]
234
-
235
- attr_reader :tree
236
-
237
- def initialize
238
- @inline_parser = RDInlineParser.new(self)
239
- end
240
-
241
- def parse(src, tree)
242
- @src = src
243
- @src.push(false)
244
- # RDtree
245
- @tree = tree
246
-
247
- # @i: index(line no.) of src
248
- @i = 0
249
- # stack for current indentation
250
- @indent_stack = []
251
- # how indented.
252
- @current_indent = @indent_stack.join("")
253
- # RDParser for tmp src
254
- @subparser = nil
255
- # which part is in now
256
- @in_part = nil
257
- @part_content = []
258
-
259
- @in_verbatim = false
260
-
261
- @yydebug = true
262
- do_parse
263
- end
264
-
265
- def next_token
266
- # preprocessing
267
- # if it is not in RD part
268
- # => method
269
- while @in_part != "rd"
270
- line = @src[@i]
271
- @i += 1 # next line
272
-
273
- case line
274
- # src end
275
- when false
276
- return [false, false]
277
- # RD part begin
278
- when /^=begin\s*(?:\bRD\b.*)?\s*$/
279
- if @in_part # if in non-RD part
280
- @part_content.push(line)
281
- else
282
- @in_part = "rd"
283
- return [:WHITELINE, "=begin\n"] # <= for textblockand
284
- end
285
- # non-RD part begin
286
- when /^=begin\s+(\w+)/
287
- part = $1
288
- if @in_part # if in non-RD part
289
- @part_content.push(line)
290
- else
291
- @in_part = part if @tree.filter[part] # if filter exists
292
- # p "BEGIN_PART: #{@in_part}" # DEBUG
293
- end
294
- # non-RD part end
295
- when /^=end/
296
- if @in_part # if in non-RD part
297
- # p "END_PART: #{@in_part}" # DEBUG
298
- # make Part-in object
299
- part = RD::Part.new(@part_content.join(""), @tree, "r")
300
- @part_content.clear
301
- # call filter, part_out is output(Part object)
302
- part_out = @tree.filter[@in_part].call(part)
303
-
304
- if @tree.filter[@in_part].mode == :rd # if output is RD formated
305
- subtree = parse_subtree( (RUBY_VERSION >= '1.9.0' ? part_out.lines.to_a : part_out.to_a ) )
306
- else # if output is target formated
307
- basename = TMPFILE.join('.')
308
- TMPFILE[-1] += 1
309
- tmpfile = open(@tree.tmp_dir + "/" + basename + ".#{@in_part}", "w")
310
- tmpfile.print(part_out)
311
- tmpfile.close
312
- subtree = parse_subtree(["=begin\n", "<<< #{basename}\n", "=end\n"])
313
- end
314
- @in_part = nil
315
- return [:SUBTREE, subtree]
316
- end
317
- else
318
- if @in_part # if in non-RD part
319
- @part_content.push(line)
320
- end
321
- end
322
- end
323
-
324
- @current_indent = @indent_stack.join("")
325
- line = @src[@i]
326
- case line
327
- when false
328
- if_current_indent_equal("") do
329
- [false, false]
330
- end
331
- when /^=end/
332
- if_current_indent_equal("") do
333
- @in_part = nil
334
- [:WHITELINE, "=end"] # MUST CHANGE??
335
- end
336
- when /^\s*$/
337
- @i += 1 # next line
338
- return [:WHITELINE, ':WHITELINE']
339
- when /^\#/ # comment line
340
- @i += 1 # next line
341
- self.next_token()
342
- when /^(={1,4})(?!=)\s*(?=\S)/, /^(\+{1,2})(?!\+)\s*(?=\S)/
343
- rest = $' # '
344
- rest.strip!
345
- mark = $1
346
- if_current_indent_equal("") do
347
- return [:HEADLINE, [Headline.mark_to_level(mark), rest]]
348
- end
349
- when /^<<<\s*(\S+)/
350
- file = $1
351
- if_current_indent_equal("") do
352
- suffix = file[-3 .. -1]
353
- if suffix == ".rd" or suffix == ".rb"
354
- subtree = parse_subtree(get_included(file))
355
- [:SUBTREE, subtree]
356
- else
357
- [:INCLUDE, file]
358
- end
359
- end
360
- when /^(\s*)\*(\s*)/
361
- rest = $' # '
362
- newIndent = $2
363
- if_current_indent_equal($1) do
364
- if @in_verbatim
365
- [:STRINGLINE, line]
366
- else
367
- @indent_stack.push("\s" << newIndent)
368
- [:ITEMLISTLINE, rest]
369
- end
370
- end
371
- when /^(\s*)(\(\d+\))(\s*)/
372
- rest = $' # '
373
- mark = $2
374
- newIndent = $3
375
- if_current_indent_equal($1) do
376
- if @in_verbatim
377
- [:STRINGLINE, line]
378
- else
379
- @indent_stack.push("\s" * mark.size << newIndent)
380
- [:ENUMLISTLINE, rest]
381
- end
382
- end
383
- when /^(\s*):(\s*)/
384
- rest = $' # '
385
- newIndent = $2
386
- if_current_indent_equal($1) do
387
- if @in_verbatim
388
- [:STRINGLINE, line]
389
- else
390
- @indent_stack.push("\s" << $2)
391
- [:DESCLISTLINE, rest]
392
- end
393
- end
394
- when /^(\s*)---(?!-|\s*$)/
395
- indent = $1
396
- rest = $'
397
- /\s*/ === rest
398
- term = $'
399
- new_indent = $&
400
- if_current_indent_equal(indent) do
401
- if @in_verbatim
402
- [:STRINGLINE, line]
403
- else
404
- @indent_stack.push("\s\s\s" + new_indent)
405
- [:METHODLISTLINE, term]
406
- end
407
- end
408
- when /^(\s*)/
409
- if_current_indent_equal($1) do
410
- [:STRINGLINE, line]
411
- end
412
- else
413
- raise "[BUG] parsing error may occured."
414
- end
415
- end
416
-
417
- =begin private
418
- --- RDParser#if_current_indent_equal(indent)
419
- if (({@current_indent == ((|indent|))})) then yield block, otherwise
420
- process indentation.
421
- =end
422
- # always @current_indent = @indent_stack.join("")
423
- def if_current_indent_equal(indent)
424
- indent = indent.sub(/\t/, "\s" * 8)
425
- if @current_indent == indent
426
- @i += 1 # next line
427
- yield
428
- elsif indent.index(@current_indent) == 0
429
- @indent_stack.push(indent[@current_indent.size .. -1])
430
- [:INDENT, ":INDENT"]
431
- else
432
- @indent_stack.pop
433
- [:DEDENT, ":DEDENT"]
434
- end
435
- end
436
- private :if_current_indent_equal
437
-
438
- def cut_off(src)
439
- ret = []
440
- whiteline_buf = []
441
- line = src.shift
442
- /^\s*/ =~ line
443
- indent = Regexp.quote($&)
444
- ret.push($') # '
445
- while line = src.shift
446
- if /^(\s*)$/ =~ line
447
- whiteline_buf.push(line)
448
- elsif /^#{indent}/ =~ line
449
- unless whiteline_buf.empty?
450
- ret.concat(whiteline_buf)
451
- whiteline_buf.clear
452
- end
453
- ret.push($') # '
454
- else
455
- raise "[BUG]: probably Parser Error while cutting off.\n"
456
- end
457
- end
458
- ret
459
- end
460
- private :cut_off
461
-
462
- def set_term_to_element(parent, term)
463
- # parent.set_term_under_document_struct(term, @tree.document_struct)
464
- parent.set_term_without_document_struct(term)
465
- end
466
- private :set_term_to_element
467
-
468
- def on_error( et, ev, _values )
469
- line = @src[@i]
470
- prv, cur, nxt = format_line_num(@i, @i+1, @i+2)
471
-
472
- raise ParseError, <<Msg
473
-
474
- RD syntax error: line #{@i+1}:
475
- #{prv} |#{@src[@i-1].chomp}
476
- #{cur}=>|#{@src[@i].chomp}
477
- #{nxt} |#{@src[@i+1].chomp}
478
-
479
- Msg
480
- end
481
-
482
- def line_index
483
- @i
484
- end
485
-
486
- def parse_subtree(src)
487
- @subparser = RD::RDParser.new() unless @subparser
488
-
489
- @subparser.parse(src, @tree)
490
- end
491
- private :parse_subtree
492
-
493
- def get_included(file)
494
- included = ""
495
- @tree.include_path.each do |dir|
496
- file_name = dir + "/" + file
497
- if test(?e, file_name)
498
- included = IO.readlines(file_name)
499
- break
500
- end
501
- end
502
- included
503
- end
504
- private :get_included
505
-
506
- def format_line_num(*args)
507
- width = args.collect{|i| i.to_s.length }.max
508
- args.collect{|i| sprintf("%#{width}d", i) }
509
- end
510
- private :format_line_num
511
-
512
- ---- header
513
- require "rd/rdinlineparser.tab.rb"
514
- require "rd/parser-util"
515
-
516
- module RD
517
- ---- footer
518
- end # end of module RD