History

Add Go documentation

Thibaut committed 12 years ago

Commit f657dfd1 parent 50f1ca914 files · +122 −-3Browse files

Showing the changes to lib/docs (3 of 14 files). Show all

Unified · Split

3 files
  1. lib/docs/filters/go/clean_html.rb +46 −0
  2. lib/docs/filters/go/entries.rb +33 −0
  3. lib/docs/scrapers/go.rb +22 −0
lib/docs/filters/go/clean_html.rb+46−0
@@ -0,0 +1,46 @@
1+module Docs
2+ class Go
3+ class CleanHtmlFilter < Filter
4+ def call
5+ if root_page?
6+ at_css('h1').content = 'Go Programming Language'
7+
8+ # Remove empty columns
9+ css('tr:first-child + tr', 'th:first-child + th', 'td:first-child + td').remove
10+
11+ # Remove links to unscraped pages
12+ css('td + td:empty').each do |node|
13+ node.previous_element.content = node.previous_element.content
14+ end
15+ end
16+
17+ css('#plusone', '#nav', '.pkgGopher', '#footer', '.collapsed').remove
18+
19+ # Remove triangle character
20+ css('h2', '.exampleHeading').each do |node|
21+ node.content = node.content.sub("\u25BE", '')
22+ node.name = 'h2'
23+ end
24+
25+ # Turn <dl> into <ul>
26+ css('#short-nav', '#manual-nav').each do |node|
27+ node.children = node.css('dd').tap { |nodes| nodes.each { |dd| dd.name = 'li' } }
28+ node.name = 'ul'
29+ end
30+
31+ # Remove code highlighting
32+ css('pre').each do |node|
33+ node.content = node.content
34+ end
35+
36+ # Fix example markup
37+ css('.play').each do |node|
38+ node.children = node.at_css('.code').children
39+ node.name = 'pre'
40+ end
41+
42+ doc
43+ end
44+ end
45+ end
46+end
lib/docs/filters/go/entries.rb+33−0
@@ -0,0 +1,33 @@
1+module Docs
2+ class Go
3+ class EntriesFilter < Docs::EntriesFilter
4+ def get_name
5+ name = at_css('h1').content
6+ name.sub! 'Package ', ''
7+ name
8+ end
9+
10+ def get_type
11+ subpath[/\A[^\/]+/]
12+ end
13+
14+ def additional_entries
15+ css('#manual-nav a').each_with_object [] do |node, entries|
16+ case node.content
17+ when /type\ (\w+)/
18+ name = $1
19+ when /func\ (?:\(.+\)\ )?(\w+)\(/
20+ name = "#{$1}()"
21+ name.prepend "#{$1}." if node['href'] =~ /#(\w+)\.#{$1}/
22+ end
23+
24+ entries << ["#{name} (#{self.name})", node['href'][1..-1]] if name
25+ end
26+ end
27+
28+ def include_default_entry?
29+ !at_css('h1 + table.dir')
30+ end
31+ end
32+ end
33+end
lib/docs/scrapers/go.rb+22−0
@@ -0,0 +1,22 @@
1+module Docs
2+ class Go < UrlScraper
3+ self.type = 'go'
4+ self.version = '1.2.1'
5+ self.base_url = 'http://golang.org/pkg/'
6+
7+ html_filters.push 'go/clean_html', 'go/entries'
8+
9+ options[:container] = '#page .container'
10+
11+ options[:attribution] = <<-HTML
12+ &copy; Google, Inc.<br>
13+ Licensed under the Creative Commons Attribution License 3.0.
14+ HTML
15+
16+ private
17+
18+ def parse(html) # Hook here because Nokogori removes whitespace from textareas
19+ super html.gsub %r{<textarea\ class="code"[^>]*>([\W\w]+?)</textarea>}, '<pre class="code">\1</pre>'
20+ end
21+ end
22+end