diff --git a/assets/stylesheets/pages/_rust.scss b/assets/stylesheets/pages/_rust.scss index 992bceae..f7f3c90c 100644 --- a/assets/stylesheets/pages/_rust.scss +++ b/assets/stylesheets/pages/_rust.scss @@ -7,5 +7,5 @@ div.stability { margin-bottom: 1em; } em.stab, span.stab { @extend %label; } em.stab.unstable, span.stab.unstable { @extend %label-orange; } - .since { float: right; } + .since, .out-of-band { float: right; } } diff --git a/lib/docs/filters/rust/clean_html.rb b/lib/docs/filters/rust/clean_html.rb index c20208ac..1550c89c 100644 --- a/lib/docs/filters/rust/clean_html.rb +++ b/lib/docs/filters/rust/clean_html.rb @@ -2,21 +2,49 @@ module Docs class Rust class CleanHtmlFilter < Filter def call - if slug.start_with?('book') - book - elsif slug.start_with?('reference') || slug == 'error-index' - reference + puts subpath if at_css('#versioninfo') + + if slug.start_with?('book') || slug.start_with?('reference') + @doc = at_css('#content') + elsif slug == 'error-index' + css('.error-undescribed').remove + + css('.error-described').each do |node| + node.before(node.children).remove + end else - api + @doc = at_css('#main') + + css('.toggle-wrapper').remove + + css('h1.fqn').each do |node| + node.content = node.at_css('.in-band').content + end + + css('.stability .stab').each do |node| + node.name = 'span' + node.content = node.content + end end css('.rusttest', '.test-arrow', 'hr').remove + css('a.header').each do |node| + node.first_element_child['id'] = node['name'] + node.before(node.children).remove + end + css('.docblock > h1').each { |node| node.name = 'h4' } css('h2.section-header').each { |node| node.name = 'h3' } css('h1.section-header').each { |node| node.name = 'h2' } - css('> .impl-items', '> .docblock').each do |node| + if at_css('h1 ~ h1') + css('h1 ~ h1', 'h2', 'h3').each do |node| + node.name = node.name.sub(/\d/) { |i| i.to_i + 1 } + end + end + + css('> .impl-items', '> .docblock', 'pre > pre').each do |node| node.before(node.children).remove end @@ -36,33 +64,6 @@ module Docs doc end - - def book - @doc = at_css('#page') - end - - def reference - css('#versioninfo', '.error-undescribed').remove - - css('.error-described').each do |node| - node.before(node.children).remove - end - end - - def api - @doc = at_css('#main') - - css('.toggle-wrapper').remove - - css('h1.fqn').each do |node| - node.content = node.at_css('.in-band').content - end - - css('.stability .stab').each do |node| - node.name = 'span' - node.content = node.content - end - end end end end diff --git a/lib/docs/filters/rust/entries.rb b/lib/docs/filters/rust/entries.rb index bc6754e7..e0b3ecad 100644 --- a/lib/docs/filters/rust/entries.rb +++ b/lib/docs/filters/rust/entries.rb @@ -2,10 +2,8 @@ module Docs class Rust class EntriesFilter < Docs::EntriesFilter def get_name - if slug.start_with?('book') - at_css("#toc a[href='#{File.basename(slug)}']").content - elsif slug.start_with?('reference') - 'Reference' + if slug.start_with?('book') || slug.start_with?('reference') + at_css("#sidebar a[href='#{File.basename(slug)}']").content elsif slug == 'error-index' 'Compiler Errors' else @@ -37,16 +35,8 @@ module Docs end def additional_entries - if slug.start_with?('book') + if slug.start_with?('book') || slug.start_with?('reference') [] - elsif slug.start_with?('reference') - css('#TOC > ul > li > a', '#TOC > ul > li > ul > li > a').map do |node| - name = node.content - name.sub! %r{(\d)\ }, '\1. ' - name.sub! '10.0.', '10.' - id = node['href'].remove('#') - [name, id] - end elsif slug == 'error-index' css('.error-described h2.section-header').each_with_object [] do |node, entries| entries << [node.content, node['id']] unless node.content.include?('Note:') diff --git a/lib/docs/scrapers/rust.rb b/lib/docs/scrapers/rust.rb index 68b00358..11494780 100644 --- a/lib/docs/scrapers/rust.rb +++ b/lib/docs/scrapers/rust.rb @@ -1,11 +1,11 @@ module Docs class Rust < UrlScraper self.type = 'rust' - self.release = '1.16.0' + self.release = '1.17.0' self.base_url = 'https://doc.rust-lang.org/' self.root_path = 'book/index.html' self.initial_paths = %w( - reference.html + reference/introduction.html collections/index.html std/index.html error-index.html) @@ -18,6 +18,7 @@ module Docs options[:only_patterns] = [ /\Abook\//, + /\Areference\//, /\Acollections\//, /\Astd\// ]