History

Add C documentation

Thibaut committed 12 years ago

Commit 5b6d9d91 parent d062b2a16 files · +173 −-3Browse files

Showing the changes to lib (5 of 16 files). Show all

Unified · Split

5 files
  1. lib/docs/filters/c/clean_html.rb +37 −0
  2. lib/docs/filters/c/entries.rb +44 −0
  3. lib/docs/filters/c/fix_code.rb +21 −0
  4. lib/docs/filters/c/fix_urls.rb +11 −0
  5. lib/docs/scrapers/c.rb +22 −0
lib/docs/filters/c/clean_html.rb+37−0
@@ -0,0 +1,37 @@
1module Docs
2 class C
3 class CleanHtmlFilter < Filter
4 def call
5 if root_page?
6 doc.inner_html = ' '
7 return doc
8 end
9
10 css('#siteSub', '#contentSub', '.printfooter', '.t-navbar', '.editsection', '#toc', '.t-dsc-sep', '.t-dcl-sep',
11 '#catlinks', '.ambox-notice', '.mw-cite-backlink', '.t-sdsc-sep:first-child:last-child').remove
12
13 css('#bodyContent', '.mw-content-ltr', 'span[style]').each do |node|
14 node.before(node.children).remove
15 end
16
17 css('h2 > span[id]', 'h3 > span[id]', 'h4 > span[id]', 'h5 > span[id]', 'h6 > span[id]').each do |node|
18 node.parent['id'] = node['id']
19 node.before(node.children).remove
20 end
21
22 css('table[style]', 'th[style]', 'td[style]').remove_attr('style')
23
24 css('.t-dsc-hitem > td', '.t-dsc-header > td').each do |node|
25 node.name = 'th'
26 node.content = ' ' if node.content.empty?
27 end
28
29 css('tt').each do |node|
30 node.name = 'code'
31 end
32
33 doc
34 end
35 end
36 end
37end
lib/docs/filters/c/entries.rb+44−0
@@ -0,0 +1,44 @@
1module Docs
2 class C
3 class EntriesFilter < Docs::EntriesFilter
4 ADDITIONAL_NAMES = {
5 'Conditional inclusion' => %w(if else elif ifdef ifndef endif).map { |s| "##{s} directive" },
6 'Function specifiers' => ['inline specifier', '_Noreturn specifier'] }
7
8 REPLACE_NAMES = {
9 'Error directive' => '#error directive',
10 'Filename and line information' => '#line directive',
11 'Implementation defined behavior control' => '#pragma directive',
12 'Replacing text macros' => '#define directive',
13 'Source file inclusion' => '#include directive',
14 'Warning directive' => '#warning directive' }
15
16 def get_name
17 name = at_css('#firstHeading').content.strip
18 name.sub! 'C keywords: ', ''
19 name.sub! %r{\s\(.+\)}, ''
20 name = name.split(',').first
21 REPLACE_NAMES[name] || name
22 end
23
24 def get_type
25 if type = at_css('.t-navbar > div:nth-child(4) > :first-child').try(:content)
26 type.strip!
27 type.sub! ' library', ''
28 type.sub! ' utilities', ''
29 type
30 end
31 end
32
33 def additional_entries
34 names = at_css('#firstHeading').content.split(',')[1..-1]
35 names.concat ADDITIONAL_NAMES[name] || []
36 names.map { |name| [name] }
37 end
38
39 def include_default_entry?
40 at_css '.t-navbar > div:nth-child(4) > a'
41 end
42 end
43 end
44end
lib/docs/filters/c/fix_code.rb+21−0
@@ -0,0 +1,21 @@
1module Docs
2 class C
3 class FixCodeFilter < Filter
4 def call
5 css('div > span.source-c').each do |node|
6 node.inner_html = node.inner_html.gsub(/<br>\n?/, "\n").gsub("\n</p>\n", "</p>\n")
7 node.parent.name = 'pre'
8 node.parent['class'] = 'source-c'
9 node.parent.content = node.content
10 end
11
12 nbsp = Nokogiri::HTML('&nbsp;').text
13 css('pre').each do |node|
14 node.content = node.content.gsub(nbsp, ' ')
15 end
16
17 doc
18 end
19 end
20 end
21end
lib/docs/filters/c/fix_urls.rb+11−0
@@ -0,0 +1,11 @@
1module Docs
2 class C
3 class FixUrlsFilter < Filter
4 def call
5 html.gsub! File.join(C.base_url, C.root_path), C.base_url[0..-2]
6 html.gsub! %r{#{C.base_url}([^"']+?)\.html}, "#{C.base_url}\\1"
7 html
8 end
9 end
10 end
11end
lib/docs/scrapers/c.rb+22−0
@@ -0,0 +1,22 @@
1module Docs
2 class C < FileScraper
3 self.type = 'c'
4 self.dir = '/Users/Thibaut/DevDocs/Docs/C/en/c'
5 self.base_url = 'http://en.cppreference.com/w/c/'
6 self.root_path = 'header.html'
7
8 html_filters.insert_before 'clean_html', 'c/fix_code'
9 html_filters.push 'c/entries', 'c/clean_html', 'title'
10 text_filters.push 'c/fix_urls'
11
12 options[:container] = '#content'
13 options[:title] = false
14 options[:root_title] = 'C Programming Language'
15 options[:skip] = %w(language/history.html)
16
17 options[:attribution] = <<-HTML
18 &copy; cppreference.com<br>
19 Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
20 HTML
21 end
22end