nishidayuya-rd2odt 0.0.1.20090403.01 → 0.1.1

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 (42) hide show
  1. data/NEWS +13 -0
  2. data/Rakefile +3 -1
  3. data/lib/rd2odt/compat/ruby-1.8.6.rb +86 -0
  4. data/lib/rd2odt/rdtool/NOTICE.rd2odt +8 -0
  5. data/lib/rd2odt/rdtool/README.rd +50 -0
  6. data/lib/rd2odt/rdtool/README.rd.ja +53 -0
  7. data/lib/rd2odt/rdtool/rd/block-element.rb +114 -0
  8. data/lib/rd2odt/rdtool/rd/complex-list-item.rb +65 -0
  9. data/lib/rd2odt/rdtool/rd/desclist.rb +55 -0
  10. data/lib/rd2odt/rdtool/rd/document-struct.rb +46 -0
  11. data/lib/rd2odt/rdtool/rd/element.rb +160 -0
  12. data/lib/rd2odt/rdtool/rd/filter.rb +255 -0
  13. data/lib/rd2odt/rdtool/rd/inline-element.rb +233 -0
  14. data/lib/rd2odt/rdtool/rd/labeled-element.rb +14 -0
  15. data/lib/rd2odt/rdtool/rd/list.rb +57 -0
  16. data/lib/rd2odt/rdtool/rd/loose-struct.rb +11 -0
  17. data/lib/rd2odt/rdtool/rd/methodlist.rb +57 -0
  18. data/lib/rd2odt/rdtool/rd/output-format-visitor.rb +28 -0
  19. data/lib/rd2odt/rdtool/rd/package.rb +4 -0
  20. data/lib/rd2odt/rdtool/rd/parser-util.rb +14 -0
  21. data/lib/rd2odt/rdtool/rd/rbl-file.rb +69 -0
  22. data/lib/rd2odt/rdtool/rd/rbl-suite.rb +37 -0
  23. data/lib/rd2odt/rdtool/rd/rd-struct.rb +86 -0
  24. data/lib/rd2odt/rdtool/rd/rd2html-lib.rb +490 -0
  25. data/lib/rd2odt/rdtool/rd/rd2html-opt.rb +67 -0
  26. data/lib/rd2odt/rdtool/rd/rd2man-lib.rb +241 -0
  27. data/lib/rd2odt/rdtool/rd/rd2rdo-lib.rb +19 -0
  28. data/lib/rd2odt/rdtool/rd/rd2rmi-lib.rb +32 -0
  29. data/lib/rd2odt/rdtool/rd/rdblockparser.tab.rb +1050 -0
  30. data/lib/rd2odt/rdtool/rd/rdfmt.rb +15 -0
  31. data/lib/rd2odt/rdtool/rd/rdinlineparser.tab.rb +1243 -0
  32. data/lib/rd2odt/rdtool/rd/rdvisitor.rb +214 -0
  33. data/lib/rd2odt/rdtool/rd/reference-resolver.rb +114 -0
  34. data/lib/rd2odt/rdtool/rd/search-file.rb +14 -0
  35. data/lib/rd2odt/rdtool/rd/tree.rb +103 -0
  36. data/lib/rd2odt/rdtool/rd/version.rb +39 -0
  37. data/lib/rd2odt/rdtool/rd/visitor.rb +86 -0
  38. data/lib/rd2odt.rb +12 -17
  39. data/rd2odt.gemspec +39 -4
  40. data/test/test-helper.rb +86 -1
  41. data/test/unit/rd2odt-spec.rb +13 -11
  42. metadata +39 -4
@@ -0,0 +1,67 @@
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
+
@@ -0,0 +1,241 @@
1
+ =begin
2
+ = rd/rd2man-lib.rb
3
+ =end
4
+
5
+ require "rd/rdvisitor"
6
+
7
+ unless [].respond_to? :collect!
8
+ class Array
9
+ alias collect! filter
10
+ end
11
+ end
12
+
13
+ module RD
14
+ class RD2MANVisitor < RDVisitor
15
+ include AutoLabel
16
+ include MethodParse
17
+
18
+ SYSTEM_NAME = "RDtool -- RD2ManVisitor"
19
+ SYSTEM_VERSION = "$Version: 0.6.21$" #"
20
+ VERSION = Version.new_from_version_string(SYSTEM_NAME, SYSTEM_VERSION)
21
+
22
+ def self.version
23
+ VERSION
24
+ end
25
+
26
+ # must-have constants
27
+ OUTPUT_SUFFIX = "1"
28
+ INCLUDE_SUFFIX = ["1"]
29
+
30
+ def initialize
31
+ @enumcounter = 0
32
+ @index = {}
33
+ @filename = nil
34
+ end
35
+
36
+ def visit(tree)
37
+ prepare_labels(tree, "")
38
+ super(tree)
39
+ end
40
+
41
+ def apply_to_DocumentElement(element, content)
42
+ content = content.join
43
+ title = @filename || ARGF.filename || "Untitled"
44
+ title = File.basename title
45
+ title = title.sub(/\.rd$/i, '')
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
+ element.level <= 1 ? ".SH #{title}\n" : ".SS #{title}\n"
55
+ end
56
+
57
+ # RDVisitor#apply_to_Include
58
+
59
+ def apply_to_TextBlock(element, content)
60
+ if RD::DescListItem === element.parent ||
61
+ RD::ItemListItem === element.parent ||
62
+ RD::EnumListItem === element.parent
63
+ return content.join
64
+ else
65
+ return ".PP\n" + content.join
66
+ end
67
+ end
68
+
69
+ def apply_to_Verbatim(element)
70
+ content = []
71
+ element.each_line do |i|
72
+ content.push(apply_to_String(i))
73
+ end
74
+ # Can we use BLOCKQUOTE such like?
75
+ %Q[.nf\n\\& #{content.join("\\& ")}.fi\n]
76
+ end
77
+
78
+ def apply_to_ItemList(element, items)
79
+ items.collect! do |x| x.sub(/\n\n/, "\n") end
80
+ items = items.join(".IP\n.B\n\\(bu\n") # "\\(bu" -> "" ?
81
+ ".IP\n.B\n\\(bu\n" + items
82
+ end
83
+
84
+ def apply_to_EnumList(element, items)
85
+ @enumcounter = 0
86
+ items.join
87
+ end
88
+
89
+ def apply_to_DescList(element, items)
90
+ items.map{ |i| i =~ /\n$/ ? i : i + "\n" }.join("")
91
+ end
92
+
93
+ def apply_to_MethodList(element, items)
94
+ items.map{ |i| i =~ /\n$/ ? i : i + "\n" }.join("")
95
+ end
96
+
97
+ def apply_to_ItemListItem(element, content)
98
+ content.map{ |c| c =~ /\n$/ ? c : c + "\n" }.join("")
99
+ end
100
+
101
+ def apply_to_EnumListItem(element, content)
102
+ @enumcounter += 1
103
+ %Q[.TP\n#{@enumcounter}.\n#{content.join("\n")}]
104
+ end
105
+
106
+ def apply_to_DescListItem(element, term, description)
107
+ anchor = refer(element)
108
+ if description.empty?
109
+ ".TP\n.fi\n.B\n#{term}"
110
+ else
111
+ %[.TP\n.fi\n.B\n#{term}\n#{description.join("\n")}].chomp
112
+ end
113
+ end
114
+
115
+ def apply_to_MethodListItem(element, term, description)
116
+ term = parse_method(term) # maybe: term -> element.term
117
+ anchor = refer(element)
118
+ if description.empty?
119
+ ".TP\n.fi\n.B\n#{term}"
120
+ else
121
+ %[.TP\n.fi\n.B\n#{term}\n#{description.join("\n")}]
122
+ end
123
+ end
124
+
125
+ def parse_method(method)
126
+ klass, kind, method, args = MethodParse.analize_method(method)
127
+
128
+ if kind == :function
129
+ klass = kind = nil
130
+ else
131
+ kind = MethodParse.kind2str(kind)
132
+ end
133
+
134
+ case method
135
+ when "[]"
136
+ args.strip!
137
+ args.sub!(/^\((.*)\)$/, '\\1')
138
+ "#{klass}#{kind}[#{args}]"
139
+ when "[]="
140
+ args.strip!
141
+ args.sub!(/^\((.*)\)$/, '\\1')
142
+ args, val = /^(.*),([^,]*)$/.match(args)[1,2]
143
+ args.strip!
144
+ val.strip!
145
+
146
+ "#{klass}#{kind}[#{args}] = #{val}"
147
+ else
148
+ "#{klass}#{kind}#{method}#{args}"
149
+ end
150
+ end
151
+ private :parse_method
152
+
153
+ def apply_to_StringElement(element)
154
+ apply_to_String(element.content)
155
+ end
156
+
157
+ def apply_to_Emphasis(element, content)
158
+ %Q[\\fI#{content.join}\\fP]
159
+ end
160
+
161
+ def apply_to_Code(element, content)
162
+ %{\\&\\fB#{content.join.sub(/\./, '\\.')}\\fP}
163
+ end
164
+
165
+ def apply_to_Var(element, content)
166
+ content.join
167
+ end
168
+
169
+ def apply_to_Keyboard(element, content)
170
+ content.join
171
+ end
172
+
173
+ def apply_to_Index(element, content)
174
+ tmp = []
175
+ element.each do |i|
176
+ tmp.push(i) if i.is_a?(String)
177
+ end
178
+ key = meta_char_escape(tmp.join)
179
+ if @index.has_key?(key)
180
+ # warning?
181
+ ""
182
+ else
183
+ num = @index[key] = @index.size
184
+ %{\\&\\fB#{content.join.sub(/\./, '\\.')}\\fP}
185
+ end
186
+ end
187
+
188
+ def apply_to_Reference(element, content)
189
+ case element.label
190
+ when Reference::URL
191
+ apply_to_RefToURL(element, content)
192
+ when Reference::RDLabel
193
+ if element.label.filename
194
+ apply_to_RefToOtherFile(element, content)
195
+ else
196
+ apply_to_RefToElement(element, content)
197
+ end
198
+ end
199
+ end
200
+
201
+ def apply_to_RefToElement(element, content)
202
+ content = content.join
203
+ content.sub(/^function#/, "")
204
+ end
205
+
206
+ def apply_to_RefToOtherFile(element, content)
207
+ content.join
208
+ end
209
+
210
+ def apply_to_RefToURL(element, content)
211
+ content.join
212
+ end
213
+
214
+ def apply_to_Footnote(element, content)
215
+ ""
216
+ end
217
+
218
+ def apply_to_Verb(element)
219
+ apply_to_String(element.content)
220
+ end
221
+
222
+ def apply_to_String(element)
223
+ meta_char_escape(element)
224
+ end
225
+
226
+ def meta_char_escape(str)
227
+ str.gsub(/[-\\]/, '\\\\\\&').gsub(/^[.']/, '\\&') # '
228
+ end
229
+ private :meta_char_escape
230
+
231
+ end # RD2MANVisitor
232
+ end # RD
233
+
234
+ $Visitor_Class = RD::RD2MANVisitor
235
+
236
+ =begin
237
+ == script info.
238
+ RD to MAN translate library for rdfmt.rb
239
+ $Id: rd2man-lib.rb,v 1.9 2003/08/02 15:45:49 tosh Exp $
240
+ copyright WATANABE Hirofumi <eban@os.rim.or.jp>, 2000
241
+ =end
@@ -0,0 +1,19 @@
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
@@ -0,0 +1,32 @@
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