浏览代码

Ensure docs of older OTP versions still look right

Axel Forsman 3 年之前
父节点
当前提交
9e54af6191
共有 2 个文件被更改,包括 20 次插入21 次删除
  1. 10 17
      lib/docs/filters/erlang/clean_html.rb
  2. 10 4
      lib/docs/filters/erlang/entries.rb

+ 10 - 17
lib/docs/filters/erlang/clean_html.rb

@@ -12,8 +12,6 @@ module Docs
           node.before(node.children).remove
         end
 
-        css('> br').remove
-
         css('> font[size="+1"]:first-child').each do |node|
           node.name = 'h1'
         end
@@ -31,15 +29,11 @@ module Docs
         # others
 
         # Remove JS on-hover highlighting
-        css('h3.title-link', 'h4.data-type-name', 'h4.func-head').each do |node|
+        css('h3.title-link', 'h4.title-link', 'div.data-type-name', 'div.func-head').each do |node|
           node.remove_attribute('onmouseover')
           node.remove_attribute('onmouseout')
         end
 
-        css('a[name]').each do |node|
-          node.before(node.children).remove
-        end
-
         css('h3').each do |node|
           content = node.content
           node.content = content.capitalize if content == content.upcase
@@ -49,12 +43,19 @@ module Docs
         css('h4.func-head + .fun-types > h3.func-types-title')
           .each { |node| node.name = 'h5' }
 
+        css('p > a[name]').each do |node|
+          parent = node.parent
+          parent.name = 'h4'
+          parent['id'] ||= node['name']
+          parent.css('> br:last-child').remove
+        end
+        css('a[name]:empty').each { |n| (n.next_element || n.parent)['id'] ||= n['name'] }
+
         css('h3', 'h4', 'h5').each do |node|
           node.name = node.name.sub(/\d/) { |i| i.to_i - 1 }
         end
 
-        # Convert <span/> code blocks to <code/> if inline otherwise
-        # <pre><code/></pre>.
+        # Convert <span/> code blocks to <code/> if inline otherwise <pre><code/></pre>
         css('span.bold_code', 'span.code', '.func-head > span.title-name').each do |node|
           node.remove_attribute('class')
           node.css('span.bold_code', 'span.code')
@@ -75,14 +76,6 @@ module Docs
           node.inner_html = node.inner_html.strip_heredoc
         end
 
-        css('.REFBODY').each do |node|
-          if node.element_children.length == 0
-            node.name = 'p'
-          else
-            node.before(node.children).remove
-          end
-        end
-
         css('a[href^=javascript]').each { |n| n.before(n.children).remove }
 
         css('table').each do |node|

+ 10 - 4
lib/docs/filters/erlang/entries.rb

@@ -2,14 +2,14 @@ module Docs
   class Erlang
     class EntriesFilter < Docs::EntriesFilter
       def get_name
-        name = at_css('h1').content.strip
+        name = at_css('#content h1').content.strip
         name << " (#{type.remove('Guide: ')})" if name == '1 Introduction'
         name.sub! %r{\A(\d+)}, '\1.'
         name
       end
 
       def get_type
-        name = at_css('h1').content.strip
+        name = at_css('#content h1').content.strip
 
         if subpath.start_with?('lib/')
           type = subpath[/lib\/(.+?)[\-\/]/, 1]
@@ -44,7 +44,7 @@ module Docs
         if subpath.start_with?('lib/')
           names = Set.new
           entry_nodes.each_with_object [] do |node, entries|
-            id = node['id']
+            id = node['id'] || node['name']
             name = id.remove %r{\-\d*\z}
             name << ' (type)' if name.sub!(/\Atype-/, '')
             name.prepend "#{self.name}:"
@@ -66,7 +66,13 @@ module Docs
 
       def entry_nodes
         @entry_nodes ||= if subpath.start_with?('lib/')
-          css('article.func > h4', 'article.data-types-body > h4').entries
+          r18_funs = css('p + div.REFBODY').each_with_object [] do |node, result|
+            result.concat(node.previous_element.css('a[name]').to_a)
+          end
+          css('article.data-types-body > h4', 'article.func > h4',
+              'div.data-type-name a[name]', 'div.exports-body > a[name]',
+              'div.fun-type a[name]').entries +
+            r18_funs
         elsif subpath.start_with?('erts')
           link = at_css(".flipMenu a[href='#{File.basename(subpath, '.html')}']")
           list = link.parent.parent