scripts/bin/dmjavadoc
Alexander Gehrke cefd40b6dc Initial commit
2019-09-30 14:49:14 +02:00

67 lines
1.7 KiB
Ruby
Executable file

#!/usr/bin/env ruby
require 'dmenu'
JAVA_DOC_LOCATION = "/usr/share/doc/api"
JAVAFX_DOC_LOCATION = "/usr/share/doc/javafx-sdk-docs-*"
USER_DOC_LOCATION = (ENV['XDG_DATA_HOME'] || ENV['HOME'] + '/.local/share') + '/javadoc/*'
class DocIndex
attr_reader :items
def initialize(path)
@items = []
find_entries(path)
end
private
def gen_candidates(dir)
Dir.entries(dir).reject {|e| e == '.' ||
e == '..' ||
e == 'class-use' ||
e == 'src-html' ||
(e =~ /^[a-z].*\..*/ && e != 'package-summary.html')}
end
def find_entries(dir, path = [])
candidates = gen_candidates(dir)
candidates.each do |entry|
if entry == "package-summary.html"
@items << Dmenu::Item.new(path.join(?.), dir + ?/ + entry)
elsif entry.end_with? ".html"
@items << Dmenu::Item.new(
path.join(?.) + ?. + File.basename(entry, '.html'),
dir + ?/ + entry
)
elsif File.directory?(dir + ?/ + entry)
find_entries(dir + ?/ + entry, path + [entry])
end
end
end
end
user_libs = Dir.glob(USER_DOC_LOCATION)
java_folder = Dir.glob(JAVA_DOC_LOCATION).last
jfx_folder = Dir.glob(JAVAFX_DOC_LOCATION).last + "/html"
libmenu = Dmenu.new
libmenu.items = [
Dmenu::Item.new("Java Standard Library (std)", java_folder),
Dmenu::Item.new("javafx", jfx_folder)
] + user_libs.map{|f| Dmenu::Item.new(File.basename(f), f)}
libmenu.case_insensitive = true
libmenu.prompt = "Library:"
libmenu.lines = 20
menu = Dmenu.new
menu.items = DocIndex.new(libmenu.run.value).items
menu.case_insensitive = true
menu.prompt = "Javadoc:"
menu.lines = 20
system("xdg-open #{menu.run.value}")