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.
- data/NEWS +13 -0
- data/Rakefile +3 -1
- data/lib/rd2odt/compat/ruby-1.8.6.rb +86 -0
- data/lib/rd2odt/rdtool/NOTICE.rd2odt +8 -0
- data/lib/rd2odt/rdtool/README.rd +50 -0
- data/lib/rd2odt/rdtool/README.rd.ja +53 -0
- data/lib/rd2odt/rdtool/rd/block-element.rb +114 -0
- data/lib/rd2odt/rdtool/rd/complex-list-item.rb +65 -0
- data/lib/rd2odt/rdtool/rd/desclist.rb +55 -0
- data/lib/rd2odt/rdtool/rd/document-struct.rb +46 -0
- data/lib/rd2odt/rdtool/rd/element.rb +160 -0
- data/lib/rd2odt/rdtool/rd/filter.rb +255 -0
- data/lib/rd2odt/rdtool/rd/inline-element.rb +233 -0
- data/lib/rd2odt/rdtool/rd/labeled-element.rb +14 -0
- data/lib/rd2odt/rdtool/rd/list.rb +57 -0
- data/lib/rd2odt/rdtool/rd/loose-struct.rb +11 -0
- data/lib/rd2odt/rdtool/rd/methodlist.rb +57 -0
- data/lib/rd2odt/rdtool/rd/output-format-visitor.rb +28 -0
- data/lib/rd2odt/rdtool/rd/package.rb +4 -0
- data/lib/rd2odt/rdtool/rd/parser-util.rb +14 -0
- data/lib/rd2odt/rdtool/rd/rbl-file.rb +69 -0
- data/lib/rd2odt/rdtool/rd/rbl-suite.rb +37 -0
- data/lib/rd2odt/rdtool/rd/rd-struct.rb +86 -0
- data/lib/rd2odt/rdtool/rd/rd2html-lib.rb +490 -0
- data/lib/rd2odt/rdtool/rd/rd2html-opt.rb +67 -0
- data/lib/rd2odt/rdtool/rd/rd2man-lib.rb +241 -0
- data/lib/rd2odt/rdtool/rd/rd2rdo-lib.rb +19 -0
- data/lib/rd2odt/rdtool/rd/rd2rmi-lib.rb +32 -0
- data/lib/rd2odt/rdtool/rd/rdblockparser.tab.rb +1050 -0
- data/lib/rd2odt/rdtool/rd/rdfmt.rb +15 -0
- data/lib/rd2odt/rdtool/rd/rdinlineparser.tab.rb +1243 -0
- data/lib/rd2odt/rdtool/rd/rdvisitor.rb +214 -0
- data/lib/rd2odt/rdtool/rd/reference-resolver.rb +114 -0
- data/lib/rd2odt/rdtool/rd/search-file.rb +14 -0
- data/lib/rd2odt/rdtool/rd/tree.rb +103 -0
- data/lib/rd2odt/rdtool/rd/version.rb +39 -0
- data/lib/rd2odt/rdtool/rd/visitor.rb +86 -0
- data/lib/rd2odt.rb +12 -17
- data/rd2odt.gemspec +39 -4
- data/test/test-helper.rb +86 -1
- data/test/unit/rd2odt-spec.rb +13 -11
- 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
|