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 @@
1module 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
46end
lib/docs/filters/go/entries.rb+33−0
@@ -0,0 +1,33 @@
1module 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
33end
lib/docs/scrapers/go.rb+22−0
@@ -0,0 +1,22 @@
1module 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
22end