Closes #432.
Unified · Split
| @@ -2,6 +2,7 @@ · 1 unmodified line | ||
| 2 | 2 | @extend %simple; |
| 3 | 3 | |
| 4 | 4 | h3.code { @extend %code; } |
| 5 | + code.code { @extend %label; } | |
| 5 | 6 | .note { @extend %note; } |
| 6 | 7 | .warning { @extend %note, %note-red; } |
| 7 | 8 | .note .label, .warning .label { font-weight: bold; } |
| @@ -45,7 +45,7 @@ module Docs · 44 unmodified lines | ||
| 45 | 45 | node.content = content.capitalize if content == content.upcase |
| 46 | 46 | end |
| 47 | 47 | |
| 48 | − css('p > span.bold_code:first-child ~ br:last-child').each do |node| | |
| 48 | + css('p > .bold_code:first-child ~ br:last-child').each do |node| | |
| 49 | 49 | parent = node.parent |
| 50 | 50 | parent.name = 'h3' |
| 51 | 51 | parent['class'] = 'code' |
| @@ -54,15 +54,11 @@ module Docs · 2 unmodified lines | ||
| 54 | 54 | parent.inner_html = parent.inner_html.strip |
| 55 | 55 | end |
| 56 | 56 | |
| 57 | − css('span.code').each do |node| | |
| 58 | − node.name = 'code' | |
| 59 | − end | |
| 60 | − | |
| 61 | − css('pre *:not(a)').each do |node| | |
| 57 | + css('pre:not(.REFTYPES) *:not(a)', 'a[href^=javascript]').each do |node| | |
| 62 | 58 | node.before(node.children).remove |
| 63 | 59 | end |
| 64 | 60 | |
| 65 | − css('pre').each do |node| | |
| 61 | + css('pre:not(.REFTYPES)').each do |node| | |
| 66 | 62 | node.inner_html = node.inner_html.strip_heredoc |
| 67 | 63 | end |
| 68 | 64 | |
| @@ -3,14 +3,32 @@ module Docs · 2 unmodified lines | ||
| 3 | 3 | class EntriesFilter < Docs::EntriesFilter |
| 4 | 4 | def get_name |
| 5 | 5 | name = at_css('h1').content.strip |
| 6 | − name.prepend 'Guide: ' if doc.inner_html.include?('<strong>User\'s Guide</strong>') | |
| 6 | + name << " (#{type.remove('Guide: ')})" if name == '1 Introduction' | |
| 7 | 7 | name |
| 8 | 8 | end |
| 9 | 9 | |
| 10 | 10 | def get_type |
| 11 | − type = subpath[/lib\/(.+?)[\-\/]/, 1] | |
| 12 | − type << "/#{name}" if type == 'stdlib' && entry_nodes.length >= 10 | |
| 13 | − type | |
| 11 | + if subpath.start_with?('lib/') | |
| 12 | + type = subpath[/lib\/(.+?)[\-\/]/, 1] | |
| 13 | + type << "/#{name}" if type == 'stdlib' && entry_nodes.length >= 10 | |
| 14 | + type | |
| 15 | + elsif subpath.start_with?('doc/') | |
| 16 | + type = subpath[/doc\/(.+?)\//, 1] | |
| 17 | + type.capitalize! | |
| 18 | + type.sub! '_', ' ' | |
| 19 | + type.sub! 'Oam', 'OAM' | |
| 20 | + type.remove! ' Guide' | |
| 21 | + type.prepend 'Guide: ' | |
| 22 | + type | |
| 23 | + elsif subpath.start_with?('erts') | |
| 24 | + type = 'ERTS' | |
| 25 | + if name =~ /\A\d/ | |
| 26 | + type.prepend 'Guide: ' | |
| 27 | + elsif entry_nodes.length > 0 | |
| 28 | + type << "/#{name}" | |
| 29 | + end | |
| 30 | + type | |
| 31 | + end | |
| 14 | 32 | end |
| 15 | 33 | |
| 16 | 34 | def include_default_entry? |
| @@ -18,17 +36,38 @@ module Docs · 1 unmodified line | ||
| 18 | 36 | end |
| 19 | 37 | |
| 20 | 38 | def additional_entries |
| 21 | − entry_nodes.map do |node| | |
| 22 | − id = node['name'] | |
| 23 | − name = id.gsub %r{\-(?<arity>.*)\z}, '/\k<arity>' | |
| 24 | − name.remove! 'Module:' | |
| 25 | − name.prepend "#{self.name}:" | |
| 26 | − [name, id] | |
| 39 | + return [] unless include_default_entry? | |
| 40 | + | |
| 41 | + if subpath.start_with?('lib/') | |
| 42 | + entry_nodes.map do |node| | |
| 43 | + id = node['name'] | |
| 44 | + name = id.gsub %r{\-(?<arity>.*)\z}, '/\k<arity>' | |
| 45 | + name.remove! 'Module:' | |
| 46 | + name.prepend "#{self.name}:" | |
| 47 | + [name, id] | |
| 48 | + end | |
| 49 | + elsif subpath.start_with?('doc/') | |
| 50 | + [] | |
| 51 | + elsif subpath.start_with?('erts') | |
| 52 | + return [] if type.start_with?('Guide') | |
| 53 | + entry_nodes.map do |node| | |
| 54 | + id = node['href'][/#(.+)/, 1] | |
| 55 | + name = node.content.strip | |
| 56 | + name.remove! 'Module:' | |
| 57 | + name.prepend "#{self.name}:" | |
| 58 | + [name, id] | |
| 59 | + end | |
| 27 | 60 | end |
| 28 | 61 | end |
| 29 | 62 | |
| 30 | 63 | def entry_nodes |
| 31 | − @entry_nodes ||= css('div.REFBODY + p > a') | |
| 64 | + @entry_nodes ||= if subpath.start_with?('lib/') | |
| 65 | + css('div.REFBODY + p > a') | |
| 66 | + elsif subpath.start_with?('erts') | |
| 67 | + link = at_css(".flipMenu a[href='#{File.basename(subpath, '.html')}']") | |
| 68 | + list = link.parent.parent | |
| 69 | + list['class'] == 'flipMenu' ? [] : list.css('a').to_a.tap { |a| a.delete(link); } | |
| 70 | + end | |
| 32 | 71 | end |
| 33 | 72 | end |
| 34 | 73 | end |
| @@ -2,7 +2,17 @@ module Docs · 1 unmodified line | ||
| 2 | 2 | class Erlang |
| 3 | 3 | class PreCleanHtmlFilter < Filter |
| 4 | 4 | def call |
| 5 | − css('.flipMenu li[title] > a').remove | |
| 5 | + css('.flipMenu li[title] > a').remove unless subpath.start_with?('erts') # perf | |
| 6 | + | |
| 7 | + css('.REFTYPES').each do |node| | |
| 8 | + node.name = 'pre' | |
| 9 | + end | |
| 10 | + | |
| 11 | + css('span.bold_code', 'span.code').each do |node| | |
| 12 | + node.name = 'code' | |
| 13 | + node.inner_html = node.inner_html.strip.gsub(/\s+/, ' ') | |
| 14 | + end | |
| 15 | + | |
| 6 | 16 | doc |
| 7 | 17 | end |
| 8 | 18 | end |
| @@ -10,13 +10,18 @@ module Docs · 9 unmodified lines | ||
| 10 | 10 | html_filters.insert_after 'container', 'erlang/pre_clean_html' |
| 11 | 11 | html_filters.push 'erlang/entries', 'erlang/clean_html' |
| 12 | 12 | |
| 13 | − options[:only_patterns] = [/\Alib/] | |
| 13 | + options[:only_patterns] = [ | |
| 14 | + /\Alib/, | |
| 15 | + /\Adoc\/\w+\//, | |
| 16 | + /\Aerts.+\/html/ | |
| 17 | + ] | |
| 14 | 18 | |
| 15 | 19 | options[:skip_patterns] = [ |
| 16 | 20 | /pdf/, |
| 17 | 21 | /release_notes/, |
| 18 | 22 | /result/, |
| 19 | 23 | /java/, |
| 24 | + /\.erl\z/, | |
| 20 | 25 | /\/html\/.*_app\.html\z/, |
| 21 | 26 | /_examples\.html\z/, |
| 22 | 27 | /\Alib\/edoc/, |