require 'pathname'
puts %Q[
CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);
CREATE UNIQUE INDEX anchor ON searchIndex (name, type, path);
]
INSERT_SQL = %Q[
INSERT INTO searchIndex(name, type, path) VALUES ('%s','%s','%s');
]
PATTERN = %r[
(.*)\(Autoconf\)(.*)]
BUILTIN_PATTERN = /The node you are looking for is at.*Limitations-of-.*\.html/
MACRO_PATTERN = /The node you are looking for is at/
def quote(s)
s.gsub(/&/, '&').gsub(/'/, "\\'").gsub(/</, '<')
end
ARGV.each do |arg|
Pathname.glob(arg) do |path|
macro_match = path.each_line.lazy.map { |line| MACRO_PATTERN.match(line) }.find { |m| m }
builtin_match = path.each_line.lazy.map { |line| BUILTIN_PATTERN.match(line) }.find { |m| m }
if builtin_match
type = "Builtin"
elsif macro_match
type = "Macro"
else
type = "Guide"
end
match = path.each_line.lazy.map { |line| PATTERN.match(line) }.find { |m| m }
if match
printf INSERT_SQL, quote(match[1]), type, path.basename
else
$stderr.puts "%{path.basename}: no title found"
end
end
end