[devdocsgjs/main: 1355/1867] Update Pygame documentation (2.0.0)




commit d6756ce24fc0e6135e9baeeb0ce9eccc16ac1ef6
Author: Phil Scherer <pnscher evoforge org>
Date:   Tue Dec 8 03:18:34 2020 -0500

    Update Pygame documentation (2.0.0)

 assets/stylesheets/application.css.scss   |   1 +
 assets/stylesheets/pages/_pygame.scss     |  12 ++++
 lib/docs/filters/pygame/clean_html.rb     | 112 ++++++++----------------------
 lib/docs/filters/pygame/entries.rb        |  21 ++----
 lib/docs/filters/pygame/pre_clean_html.rb |  11 +++
 lib/docs/scrapers/pygame.rb               |   6 +-
 6 files changed, 63 insertions(+), 100 deletions(-)
---
diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss
index 41fa4c1b..97347da6 100644
--- a/assets/stylesheets/application.css.scss
+++ b/assets/stylesheets/application.css.scss
@@ -92,6 +92,7 @@
         'pages/phpunit',
         'pages/postgres',
         'pages/pug',
+        'pages/pygame',
         'pages/python',
         'pages/qt',
         'pages/ramda',
diff --git a/assets/stylesheets/pages/_pygame.scss b/assets/stylesheets/pages/_pygame.scss
new file mode 100644
index 00000000..10add41b
--- /dev/null
+++ b/assets/stylesheets/pages/_pygame.scss
@@ -0,0 +1,12 @@
+._pygame {
+  @extend %simple;
+
+  dl.class > dt { @extend %block-label, %label-orange; }
+  dl.function > dt, dl.method > dt { @extend %block-label, %label-blue; }
+  dl.attribute > dt, dl.exception > dt , dl.data > dt { @extend %block-label, %label-green; }
+
+  .line-block { @extend %note; }
+  .line-block > .line:first-child { margin-bottom: 1em; }
+  .line-block > .line:only-child { margin-bottom: 0em; }
+  span.signature { font-family: monospace; }
+}
diff --git a/lib/docs/filters/pygame/clean_html.rb b/lib/docs/filters/pygame/clean_html.rb
index 956807b8..af01f2d0 100644
--- a/lib/docs/filters/pygame/clean_html.rb
+++ b/lib/docs/filters/pygame/clean_html.rb
@@ -2,100 +2,46 @@ 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').remove
-          # table -> list
-          list = at_css('table')
-          list.replace(list.children)
-          list.name = 'ul'
-          css('tr').each do |row|
-            row.name = 'li'
-            row.remove_attribute('class')
-          end
-          at_css('h1').content = 'Pygame'
-          return doc
-        end
+        @doc = at_css('.body')
+        root_page? ? root : other
+        doc
+      end
 
-        # remove unwanted stuff
-        # .headerlink => ¶ after links
-        # .toc => table of content
-        # .tooltip-content => tooltips after links to functions
-        css('table.toc.docutils, .headerlink, .tooltip-content').remove
+      def root
+        at_css('h1').content = 'Pygame'
 
-        # Remove wrapper .section
-        section = at_css('.section')
-        definition = at_css('.definition')
-        definition['id'] = section['id']
-        section.replace(section.children)
+        # remove unneeded stuff
+        at_css('.modindex-jumpbox').remove
+        css('[role="navigation"], .pcap, .cap, .footer').remove
+        css('tr > td:first-child').remove
 
-        # 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.content = pre.content
-          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'
+        # Unitalicize package descriptions
+        css('td > em').each do |node|
+          node.parent.content = node.content
         end
+      end
 
-        # change functions
-        css('.definition').each do |d|
+      def other
+        css('> :not(.section), table.toc.docutils, .tooltip-content').remove
 
-          # 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
+        # Remove code tag from function, class, method, module, etc.
+        css('dl > dt').each do |node|
+          node.content = node.content
+        end
 
-          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
-              # separate the signatures on different lines.
-              header.add_child "<br>"
-            end
-          end
+        css('> .section > dl > dt').each do |node|
+          node.name = 'h1'
+          node.parent.parent.before(node)
         end
 
-        css('> dl', '> dl > dd', 'h1 code').each do |node|
-          node.before(node.children).remove
+        # Format code for it be highlighted
+        css('.highlight-default.notranslate').each do |node|
+          node.name = 'pre'
+          node.content = node.content.strip
+          node['class'] = 'language-python'
+          node['data-language'] = 'python'
         end
 
-        doc
       end
     end
   end
diff --git a/lib/docs/filters/pygame/entries.rb b/lib/docs/filters/pygame/entries.rb
index 94c171b6..08ebda88 100644
--- a/lib/docs/filters/pygame/entries.rb
+++ b/lib/docs/filters/pygame/entries.rb
@@ -2,26 +2,19 @@ module Docs
   class Pygame
     class EntriesFilter < Docs::EntriesFilter
       def get_name
-        at_css('h1').content.remove('pygame.')
+        at_css('.title').content.remove('pygame.').strip
       end
 
       def get_type
-        at_css('h1').content
+        at_css('.title').content.strip
       end
 
       def additional_entries
-        return [] if root_page?
-
-        css('h1, h2, h3').each_with_object [] do |node, entries|
-          name = node['id'] || node['data-name']
-
-          if node.parent['class'].include?('function') or node.parent['class'].include?('method')
-            name << '()'
-          end
-
-          name.remove!('pygame.')
-
-          entries << [name, node['id']] unless name == self.name
+        css('dl.definition > dt.title').each_with_object [] do |node, entries|
+          name = node['id'] || node.parent.parent['id']
+          name.remove! 'pygame.'
+          id = node['id']
+          entries << [name, id] unless name == self.name
         end
       end
     end
diff --git a/lib/docs/filters/pygame/pre_clean_html.rb b/lib/docs/filters/pygame/pre_clean_html.rb
new file mode 100644
index 00000000..4cf71095
--- /dev/null
+++ b/lib/docs/filters/pygame/pre_clean_html.rb
@@ -0,0 +1,11 @@
+module Docs
+  class Pygame
+    class PreCleanHtmlFilter < Filter
+      def call
+        # Remove ¶ character from tag w/ name & type
+        css('.headerlink').remove
+        doc
+      end
+    end
+  end
+end
diff --git a/lib/docs/scrapers/pygame.rb b/lib/docs/scrapers/pygame.rb
index f77ddbc7..75bcb198 100644
--- a/lib/docs/scrapers/pygame.rb
+++ b/lib/docs/scrapers/pygame.rb
@@ -1,7 +1,7 @@
 module Docs
   class Pygame < UrlScraper
-    self.type = 'simple'
-    self.release = '1.9.6'
+    self.type = 'pygame'
+    self.release = '2.0.0'
     self.base_url = 'https://www.pygame.org/docs/'
     self.root_path = 'py-modindex.html'
     self.links = {
@@ -9,7 +9,7 @@ module Docs
       code: 'https://github.com/pygame/pygame'
     }
 
-    html_filters.push 'pygame/clean_html', 'pygame/entries'
+    html_filters.push 'pygame/pre_clean_html', 'pygame/entries', 'pygame/clean_html'
 
     options[:only_patterns] = [/ref\//]
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]