summaryrefslogtreecommitdiff
path: root/src/index.rb
blob: 81b042a27093de5b3ea7373d3713210799f018aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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[<title>(.*)\(Autoconf\)(.*)</title>]

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(/&amp;/, '&').gsub(/'/, "\\'").gsub(/&lt;/, '<')
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