langhelp 0.9.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,25 @@
1
+ #
2
+ # lh_lua.rb - Create langhelp index of Lua language
3
+ # Copyright (C) 2005 rubikitch <rubikitch@ruby-lang.org>
4
+ # Version: $Id: lh_lua.rb 1364 2006-09-04 01:31:11Z rubikitch $
5
+
6
+ # This program is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+ require 'langhelp/langhelp-base'
19
+ class LuaHelp < AbstractIndex
20
+ def to_e(out)
21
+ `luahelp index`.split.sort.each do |idx|
22
+ out << format(%Q[# (lh-luahelp "%s")\n], idx)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,112 @@
1
+ #
2
+ # lh_perl.rb - Create langhelp index of Perl language
3
+ # Copyright (C) 2005 rubikitch <rubikitch@ruby-lang.org>
4
+ # Version: $Id: lh_perl.rb 1190 2006-02-08 09:32:55Z rubikitch $
5
+
6
+ # This program is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+
19
+ require 'langhelp/langhelp-base'
20
+
21
+ class PodSections < AbstractIndex
22
+ def init(x={})
23
+ @perl_pod = x[:perl_pod]
24
+ normalize_filename! @perl_pod
25
+ end
26
+
27
+ def process_pod(pod_source)
28
+ @sections = []
29
+
30
+ heads = {}
31
+ head_order = []
32
+ head = nil
33
+ pod_source.split(/\n/).each do |line|
34
+ case line
35
+ when /^=head\d (.+)$/
36
+ head = $1
37
+ heads[head] = []
38
+ head_order << head
39
+ when /^\s+(perl\w+)\t+(.+)$/
40
+ heads[head] << [$1, $2]
41
+ end
42
+ end
43
+
44
+ head_order.each do |head|
45
+ heads[head].each do |pod, desc|
46
+ #printf "%-20s %s\n", pod, desc
47
+ @sections << [head, pod, desc]
48
+ end
49
+ end
50
+ end
51
+
52
+ def to_e(out)
53
+ process_pod(File.read(@perl_pod))
54
+ @sections.each do |head, pod, desc|
55
+ out << format("# %-15s : %s / %-40s#{SPACES}(lh-podsections %s)\n",
56
+ pod, head, desc, lisp_dump_string(pod))
57
+ end
58
+ end
59
+ end
60
+
61
+ class PerlFunc < AbstractIndex
62
+ def init(x={})
63
+ @perlfunc_pod = x[:perlfunc_pod]
64
+ normalize_filename! @perlfunc_pod
65
+ end
66
+
67
+ FUNCLIST_BEGINS_FROM = /Alphabetical Listing of Perl Functions/
68
+ REJECT_REGEXP = /^\*$/
69
+ def extract_funcs(pod_source)
70
+ _, text = pod_source.split(FUNCLIST_BEGINS_FROM, 2)
71
+ @funcs = text.scan(/^=item (.+)$/).flatten.reject{|func| func =~ REJECT_REGEXP }.map {|usage|
72
+ name = usage.split(/[\s\(]/)[0]
73
+ name.sub!(/\/.+$/,'')
74
+ [ name, usage ]
75
+ }
76
+ end
77
+
78
+ def to_e(out)
79
+ extract_funcs File.read(@perlfunc_pod)
80
+ @funcs.each do |name, usage|
81
+ out << format("# %-30s#{SPACES}(lh-perlfunc %s)\n", usage, lisp_dump_string(name))
82
+ end
83
+ end
84
+
85
+ end
86
+
87
+ class PerlDoc < AbstractIndex
88
+ def init(x={})
89
+ @perl_path = x[:perl_path]
90
+ normalize_filename! *@perl_path
91
+ end
92
+
93
+ def collect_files
94
+ @modules = @perl_path.map {|dir|
95
+ modules = []
96
+ Dir.chdir(dir) do
97
+ [ Dir["**/*.pod"]+Dir["**/*.pm"]+Dir["**/*.pl"] ].flatten.each do |pod|
98
+ next if pod =~ /^pod\//
99
+ modules << pod.gsub(/\//, '::').gsub(/\.[^\.]+$/,'')
100
+ end
101
+ end
102
+ modules
103
+ }.flatten.sort.uniq
104
+ end
105
+
106
+ def to_e(out)
107
+ collect_files
108
+ @modules.each do |mod|
109
+ out << format("# %-30s#{SPACES}(lh-perldoc %s)\n", mod, lisp_dump_string(mod))
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,34 @@
1
+ #
2
+ # lh_php.rb - Create langhelp index of PHP language
3
+ # Copyright (C) 2005 rubikitch <rubikitch@ruby-lang.org>
4
+ # Version: $Id: lh_php.rb 1190 2006-02-08 09:32:55Z rubikitch $
5
+
6
+ # This program is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+ class PHPManual < AbstractIndex
19
+ def init(x={})
20
+ @dir = arg1
21
+ @glob = x[:glob]
22
+ normalize_filename! @dir
23
+ end
24
+
25
+ def to_e(out)
26
+ Dir[File.join(@dir, @glob)].each do |fullpath|
27
+ basename = File.basename fullpath
28
+ node = basename.sub(/\.html$/, '')
29
+ section, function = node.split(/\./,2)
30
+ function.gsub!(/-/, '_')
31
+ out << %Q!# #{function}#{SPACES}(lh-w3m "" #{lisp_dump_string(fullpath)})\n!
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,31 @@
1
+ #
2
+ # lh_python.rb - Create langhelp index of Python language
3
+ # Copyright (C) 2005 rubikitch <rubikitch@ruby-lang.org>
4
+ # Version: $Id: lh_python.rb 1190 2006-02-08 09:32:55Z rubikitch $
5
+
6
+ # This program is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+ require 'langhelp/langhelp-base'
18
+ require 'langhelp/langhelp-sub'
19
+
20
+ class PythonLib < HTMLIndex
21
+ def untable_html(src=File.read(@index_page))
22
+ ut = UnTable.new
23
+ ut.untable(src)
24
+ end
25
+
26
+ def pre_process(src)
27
+ untable_html(src).gsub( %r!<dt><a href="(.+?)">(.+)</a>! ) {
28
+ %Q!<dt>#{$2}#{space}(lh-w3m nil "file://#{@dir}/#{$1}")\n!
29
+ }
30
+ end
31
+ end
@@ -0,0 +1,400 @@
1
+ #
2
+ # lh_ruby.rb - Create langhelp index of Ruby language
3
+ # Copyright (C) 2005 rubikitch <rubikitch@ruby-lang.org>
4
+ # Version: $Id: lh_ruby.rb 1347 2006-08-20 15:26:37Z rubikitch $
5
+
6
+ # This program is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+ require 'kconv'
18
+ require 'langhelp/langhelp-base'
19
+ List = Struct.new(:source, :methods, :arg)
20
+
21
+ class << List
22
+ include LocalVariables
23
+ def methods_list_file(source, filename)
24
+ methods = File.read(filename).split(/\n/) rescue []
25
+ new(source, methods)
26
+ end
27
+
28
+ def methods_from_anchor(source, filename)
29
+ methods = File.read(filename).scan(/#{ANCHOR_BEGIN}(.+)#{ANCHOR_END}/).flatten
30
+ new(source, methods, filename)
31
+ end
32
+ end
33
+
34
+
35
+ # Abstract class representing Index
36
+ class RubyIndex < AbstractIndex
37
+
38
+ # for debug purpose
39
+ def init(x={})
40
+ @x = x
41
+ end
42
+
43
+ # To adjust sort order.
44
+ # . -> \001, :: -> \002, # -> \003
45
+ def pack_method(name)
46
+ name.gsub(/\./){"\001"}.gsub(/::/){"\002"}.gsub(/#/){"\003"}
47
+ end
48
+
49
+ def unpack_method(name)
50
+ name.gsub(/\001/){"."}.gsub(/\002/){"::"}.gsub(/\003/){"#"}
51
+ end
52
+
53
+ #
54
+ def prepare
55
+ @lists = @x[:lists]
56
+ if @x[:sources]
57
+ @lists = @x[:sources].map{|source|
58
+ [ List.methods_list_file(source, "#{source}_methods.lst"),
59
+ List.methods_list_file(source, "#{source}_classes.lst"),
60
+ ]
61
+ }.flatten
62
+ end
63
+ end
64
+
65
+ # Contents of Index by Array
66
+ def contents
67
+ prepare
68
+ _contents
69
+ end
70
+
71
+ def _contents
72
+ find_func = {}
73
+ args = {}
74
+ @lists.each do |list|
75
+ list.methods.each do |m|
76
+ m = pack_method(m) # To sort class_method -> instance_method order.
77
+ find_func[m]="lh-#{list.source}"
78
+ args[m] = list.arg
79
+ end
80
+ end
81
+
82
+ packed_methods = find_func.keys
83
+ packed_methods.sort.map{|packed|
84
+ m = unpack_method(packed)
85
+ # m = m.sub(/\./, '::') if find_func[packed] == 'lh-ri'
86
+ [find_func[packed], m, args[packed]].compact
87
+ }
88
+
89
+ end
90
+
91
+ # Output into e-script form
92
+ def to_e(out)
93
+ contents.each do |func, meth, arg|
94
+ out << format(%Q[# (%s "%s"], func, meth)
95
+ if arg
96
+ abbreviate_filename! arg
97
+ out << format(%Q[#{SPACES}"%s"], arg)
98
+ end
99
+ out << ")\n"
100
+ end
101
+ end
102
+ end
103
+
104
+ module RefeCommon
105
+ def set_refe_root_dir(rootdir)
106
+ require 'refe/config'
107
+ if rootdir
108
+ @rootdir = rootdir
109
+ elsif ENV['REFE_DATA_DIR']
110
+ @rootdir = ENV['REFE_DATA_DIR']
111
+ elsif defined?(ReFe::REFE_DATA_DIR)
112
+ @rootdir = ReFe::REFE_DATA_DIR
113
+ else
114
+ raise ArgumentError, 'ReFe database directory not given'
115
+ end
116
+ end
117
+ end
118
+ # Index by lh-refe
119
+ class Refe < RubyIndex
120
+ include RefeCommon
121
+
122
+ def init(x={})
123
+ @classes_lst = "refe_classes.lst"
124
+ @methods_lst = "refe_methods.lst"
125
+ set_refe_root_dir x[:root_dir]
126
+ normalize_filename! @rootdir
127
+ @class_document_comp = x[:class_document_comp] ||
128
+ "#{@rootdir}/class_document_comp"
129
+ @method_document_comp = x[:method_document_comp] ||
130
+ "#{@rootdir}/method_document_comp"
131
+ end
132
+
133
+ def prepare
134
+ generate_methods_and_classes
135
+ @lists = [
136
+ List.methods_list_file("refe", @classes_lst),
137
+ List.methods_list_file("refe", @methods_lst)
138
+ ]
139
+ end
140
+
141
+ def generate_methods_and_classes(methods=@methods_lst, classes=@classes_lst, class_document_comp=@class_document_comp, method_document_comp=@method_document_comp)
142
+ File.readlines(method_document_comp).select{|line|
143
+ line !~ /^man.pack$|^man.sprintf$/ and line !~ /^@/
144
+ }.writef(methods)
145
+
146
+ File.readlines(class_document_comp).select{|line|
147
+ line !~ /^fatal$|^man$/
148
+ }.writef(classes)
149
+
150
+ end
151
+
152
+ end
153
+
154
+ class RefeC < AbstractIndex
155
+ include RefeCommon
156
+ def init(x={})
157
+ set_refe_root_dir x[:root_dir]
158
+ normalize_filename! @rootdir
159
+ @function_document_comp = "#{@rootdir}/function_document_comp"
160
+ end
161
+
162
+ def to_e(out)
163
+ File.read(@function_document_comp).split(/\n/).sort.each do |func|
164
+ out << format(%Q[# (lh-refec "%s")\n], func)
165
+ end
166
+ end
167
+ end
168
+
169
+ # Index by lh-ri
170
+ require 'rdoc/ri/ri_paths'
171
+ class Ri < RubyIndex
172
+ def init(x={})
173
+ @ri_all = x[:ri_all] || "ri_all.lst"
174
+ @classes_lst = x[:classes_lst] || "ri_classes.lst"
175
+ @methods_lst = x[:methods_lst] || "ri_methods.lst"
176
+ @ri_path = x[:ri_path] || RI::Paths::PATH
177
+ normalize_filename! *@ri_path
178
+ end
179
+
180
+ def prepare
181
+ generate_ri_all
182
+ generate_methods_and_classes
183
+ @lists = [
184
+ List.methods_list_file("ri", @classes_lst),
185
+ List.methods_list_file("ri", @methods_lst)
186
+ ]
187
+ end
188
+
189
+ def generate_ri_all(filename=@ri_all)
190
+ files = @ri_path.map{|dir| Dir["#{dir}/**/*"]}.flatten.select{|f|
191
+ File.file?(f)
192
+ }
193
+ methods = files.collect!{|f|
194
+ File.read(f).grep(/^full_name:/).map{|line|
195
+ pack_method(line.split(/:/,2)[1].to_s[1..-1].gsub(/\"/,""))
196
+ }
197
+ }
198
+ methods.flatten!
199
+ methods.compact!
200
+ methods.sort!
201
+ methods.uniq!
202
+ methods.collect!{|m| convert_colons2dot(unpack_method(m))}
203
+ methods.writef(filename)
204
+ end
205
+
206
+ =begin
207
+ FNAME : OPERATION
208
+ | `|' | `^' | `&' | `<=>' | `==' | `===' | `=~'
209
+ | `>' | `>=' | `<' | `<='
210
+ | `+' | `-' | `*' | `/' | `%' | `**'
211
+ | `<<' | `>>' | `~' | ``'
212
+ | `+@' | `-@' | `[]' | `[]='
213
+ =end
214
+ METHOD_NAME_FIRST_CHARS = 'a-z|^&<=>+*/%*~`\\-\\[\\]_'
215
+ def convert_colons2dot(method_name)
216
+ method_name.sub(/::([#{METHOD_NAME_FIRST_CHARS}][^:#]+)$/,'.\1')
217
+ end
218
+
219
+
220
+ def generate_methods_and_classes(methods=@methods_lst, classes=@classes_lst, ri_all=@ri_all)
221
+ open(methods, "w") do |meth|
222
+ open(classes, "w") do |klass|
223
+ File.read(ri_all).each do |line|
224
+ case line
225
+ when /[\.#]/
226
+ meth.puts line
227
+ else
228
+ klass.puts line
229
+ end
230
+ end
231
+ end
232
+ end
233
+ end
234
+ end
235
+
236
+ class AnchorIndex < RubyIndex
237
+ def init(x={})
238
+ init_converter # initialize by subclass
239
+ input_filename = arg1.dup
240
+ @body_e = x[:body] || generate_output_filename(input_filename)
241
+ normalize_filename! arg1, @body_e
242
+ end
243
+
244
+ def generate_output_filename(input_filename)
245
+ input_filename.sub(/~\//,'').gsub(/[\/\\\.]/,'_')+".txt"
246
+ end
247
+
248
+ def prepare
249
+ @conv = @Converter.new(File.read(arg1))
250
+ @conv.conf = conf
251
+ @conv.to_e(@body_e)
252
+ @lists = [List.methods_from_anchor("anchor", @body_e)]
253
+ end
254
+
255
+ def contents
256
+ prepare
257
+
258
+ list = @lists[0]
259
+ find_func = "lh-#{list.source}"
260
+ list.methods.map do |m|
261
+ [find_func, m, list.arg].compact
262
+ end
263
+
264
+ end
265
+
266
+ end
267
+
268
+ class MoonWolfRubyDoc < AnchorIndex
269
+ def init_converter() @Converter = MoonWolfRubyDocConverter end
270
+ end
271
+
272
+ # class RD < AnchorIndex
273
+ # def init_converter() @Converter = RDConverter end
274
+ # end
275
+
276
+ class RD < Grep
277
+ def init(x={})
278
+ @regexp = /^(=+|\s*:|\s*---)/
279
+ @src = arg1
280
+ @exclude = ["=begin", "=end"] + mkarray(x[:exclude])
281
+ normalize_filename! @src
282
+ end
283
+ end
284
+
285
+
286
+ class MoonWolfRubyDocConverter
287
+ def initialize(htmlsrc)
288
+ @input = htmlsrc.toeuc
289
+ end
290
+ attr_accessor :conf
291
+
292
+ def create_anchor
293
+ klass = nil
294
+ method_type = ""
295
+ output = ""
296
+ @input.each do |line|
297
+ case line
298
+ when /^#([A-Z].*)$/
299
+ klass = $1
300
+ line = "#" + "{{" + klass + "}}\n"
301
+ when /<h3>���饹�᥽�å�/
302
+ method_type = "."
303
+ when /<h3>�᥽�å�/
304
+ method_type = "#"
305
+ when /^(.*)(<dt[^>]*>)(self\[(.+)\]=(.+))$/ # self[]=
306
+ line = "#{$1}#{$2}{{#{klass}#{method_type}[]=}} #{$3}\n"
307
+ when /^(.*)(<dt[^>]*>)(self\[(.+)\])$/ # self[]
308
+ line = "#{$1}#{$2}{{#{klass}#{method_type}[]}} #{$3}\n"
309
+ when /^(.*)(<dt[^>]*>)(\w+)(.*)$/
310
+ line = "#{$1}#{$2}{{#{klass}#{method_type}#{$3}}}#{$4}\n"
311
+ end
312
+ output << line
313
+ end
314
+ output
315
+ end
316
+
317
+ include LocalVariables
318
+ include GeneratedMessage
319
+ def html2e(es_file)
320
+ IO.popen("#{conf[:HTML2TXT]} > #{es_file}", "w") do |w3m|
321
+ w3m.print self.create_anchor
322
+ end
323
+ essrc = File.read(es_file)
324
+ open(es_file, "w") do |es|
325
+ es << essrc.gsub(/\{\{/, ANCHOR_BEGIN).gsub(/\}\}/, ANCHOR_END)
326
+ insert_local_variables es
327
+ end
328
+ generated es_file
329
+ end
330
+
331
+ alias :to_e :html2e
332
+ end
333
+
334
+
335
+ class RDConverter
336
+ def initialize(rdsrc)
337
+ @input = rdsrc
338
+ end
339
+ attr_accessor :conf
340
+
341
+ def create_anchor
342
+ @input.gsub(/^(\-\-\- +)([\w\.:#]+)/) { $1+ANCHOR_BEGIN+$2+ANCHOR_END }
343
+ end
344
+
345
+ include LocalVariables
346
+ include GeneratedMessage
347
+ def to_e(es_file)
348
+ open(es_file, "w") do |es|
349
+ es << create_anchor
350
+ insert_local_variables es
351
+ end
352
+ generated es_file
353
+ end
354
+ end
355
+
356
+ # Ruby Reference Manual HTML version.
357
+ # (browse-url "http://elbereth-hp.hp.infoseek.co.jp/ruby.html")
358
+ class RubyRefm < HTMLIndex
359
+ def init_filename(x)
360
+ if File.directory?(dir = File.expand_path(arg1))
361
+ @dir = dir
362
+ index_file = File.read(File.join(dir, "index.html"))[ %r!<a href="(\S+?.html)">INDEX</a>!, 1 ]
363
+ @index_page = File.join(dir, index_file)
364
+ normalize_filename! @index_page
365
+ else
366
+ super
367
+ end
368
+ end
369
+
370
+
371
+ def pre_process(src)
372
+ src.gsub( %r!^<li><a href="(.+\.html)">(.+)</a>! ) {
373
+ %Q!<li>#{$2}#{space}(lh-w3m nil "file://#{@dir}/#{$1}" t)\n!
374
+ }
375
+ end
376
+ end
377
+
378
+
379
+ #### for backward compatibility
380
+ def ri_all(filename)
381
+ Ri.new.generate_ri_all(filename)
382
+ end
383
+
384
+ def ri_generate_methods_and_classes(methods="ri_methods.lst", classes="ri_classes.lst", ri_all="ri_all.lst")
385
+ Ri.new.generate_method_and_classes(methods, classes, ri_all)
386
+ end
387
+
388
+
389
+
390
+ def refe_generate_methods_and_classes(methods="refe_methods.lst", classes="refe_classes.lst", class_document_comp="/usr/local/share/refe/class_document_comp", method_document_comp="/usr/local/share/refe/method_document_comp")
391
+ Refe.new.generate_method_and_classes(methods, classes, class_document_comp, method_document_comp)
392
+ end
393
+
394
+ def make_rubyhelp(lists, output_file)
395
+ RubyHelp.new(lists).to_e(output_file)
396
+ end
397
+
398
+ # Local Variables:
399
+ # test-script: "../../test/test-ruby.rb"
400
+ # End: