diff --git a/lib/docs/filters/pygame/clean_html.rb b/lib/docs/filters/pygame/clean_html.rb new file mode 100644 index 00000000..5e81fe2c --- /dev/null +++ b/lib/docs/filters/pygame/clean_html.rb @@ -0,0 +1,104 @@ +module Docs + class Pygame + class CleanHtmlFilter < Filter + def call + + @doc = at_css '.body' + + if root_page? + # remove unneeded stuff + at_css('.modindex-jumpbox').remove + css('[role="navigation"],.pcap, .cap, .footer').each do |node| + node.remove + end + # table -> list + list = at_css('table') + list.replace(list.children) + list.name = 'ul' + css('tr').each do |row| + row.name = 'li' + row['class'] = '' + end + return doc + end + + # remove unwanted stuff + # .headerlink => ΒΆ after links + # .toc => table of content + # .tooltip-content => tooltips after links to functions + if toremove = css('table.toc.docutils, .headerlink, .tooltip-content') + toremove.each do |node| + node.remove + end + end + + # Remove wrapper .section + section = at_css('.section') + definition = at_css('.definition') + definition['id'] = section['id'] + section.replace(section.children) + + # Format code for it be highlighted + css('.highlight-default.notranslate').each do |node| + pre = node.at_css('pre') + node.replace(pre) + # gets rid of the already existing syntax highlighting + pre.inner_html = pre.inner_text + pre['class'] = 'language-python' + pre['data-language'] = "python" + end + + # change descriptions of functions/attributes to blockquote + css('.line-block').each do |node| + node.name = 'blockquote' + end + + # change functions + css('.definition').each do |d| + + # the header is the function/attribute name. It might look something like + # this: + # pygame.image.load() + # It'll end up being something like this: + # pygame.image.load(filename) -> Surface + # pygame.image.load(fileobj, namehint="") -> Surface + + header = d.at_css('dt.title') + if d['class'].include?('class') or d['class'].include?('module') + header.name = 'h1' + @section = header.content.strip + else + header.name = 'h3' + end + # save the original header + initial_header = header.content.strip + # save the real name for the entries + header['data-name'] = initial_header + # empty the header + if header.name == 'h3' + header.inner_html = '' + end + # to replace it with the signatures + next_el = header.next_element + signatures = next_el.css('.signature') + signatures.each do |sig| + sig.name = 'code' + if header.name == 'h3' + sig.parent = header + # the signature don't contain pygame.module. I think it's better + # to display them, as it avoids confusion with methods (have a + # look at the pygame.Rect page) + if initial_header.start_with?(@section) + sig.content = @section + '.' + sig.text + end + # seperate the signatures on different lines. + header.add_child "
" + end + end + end + + doc + end + end + end +end diff --git a/lib/docs/filters/pygame/entries.rb b/lib/docs/filters/pygame/entries.rb new file mode 100644 index 00000000..5d589a63 --- /dev/null +++ b/lib/docs/filters/pygame/entries.rb @@ -0,0 +1,35 @@ +module Docs + class Pygame + class EntriesFilter < Docs::EntriesFilter + def get_name + return 'pygame' + end + + def get_type + at_css('h1').content + end + + def include_default_entry? + return false + end + + def additional_entries + return ['pygame'] if root_page? + + entries = [] + css('h1,h2,h3').each do |node| + parentclass = node.parent['class'] + name = node['id'] + if not name + name = node['data-name'] + elsif parentclass.include?('function') or parentclass.include?('method') + name += '()' + end + name = name.sub('pygame.', '') + entries << [name, node['id'], nil] + end + entries + end + end + end +end diff --git a/lib/docs/scrapers/pygame.rb b/lib/docs/scrapers/pygame.rb new file mode 100644 index 00000000..8dcc4515 --- /dev/null +++ b/lib/docs/scrapers/pygame.rb @@ -0,0 +1,26 @@ +module Docs + class Pygame < UrlScraper + + self.type = 'simple' + + self.release = 'v1.9.4.dev0' + + self.initial_paths = ['py-modindex.html'] + self.base_url = 'https://www.pygame.org/docs/' + self.root_path = 'py-modindex.html' + self.initial_paths = [] + + self.links = { + home: 'https://www.pygame.org/', + code: 'https://github.com/pygame/pygame' + } + + html_filters.push 'pygame/clean_html', 'pygame/entries' + + options[:only_patterns] = [/ref\//] + + options[:attribution] = <<-HTML + © Pygame Developpers. + HTML + end +end diff --git a/public/icons/docs/pygame/16.png b/public/icons/docs/pygame/16.png new file mode 100644 index 00000000..f6edae59 Binary files /dev/null and b/public/icons/docs/pygame/16.png differ diff --git a/public/icons/docs/pygame/16@2x.png b/public/icons/docs/pygame/16@2x.png new file mode 100644 index 00000000..9ef9a9e7 Binary files /dev/null and b/public/icons/docs/pygame/16@2x.png differ