Showing the changes to lib/docs (73 of 175 files). Show all
Unified · Split
| @@ -0,0 +1,74 @@ | ||
| 1 | +module Docs | |
| 2 | + class Bash | |
| 3 | + class CleanHtmlFilter < Filter | |
| 4 | + def call | |
| 5 | + # Remove the navigation header and footer and the lines underneath and above it | |
| 6 | + at_css('.header + hr').remove | |
| 7 | + line_above = at_xpath('//div[@class="header"]/preceding::hr[1]') | |
| 8 | + line_above.remove unless line_above.nil? | |
| 9 | + css('.header').remove | |
| 10 | + | |
| 11 | + # Remove chapter and section numbers from title | |
| 12 | + title_node = at_css('h1, h2, h3, h4, h5, h6') | |
| 13 | + title_node.content = title_node.content.gsub(/(\d+\.?)+/, '').strip | |
| 14 | + title_node.name = 'h1' | |
| 15 | + | |
| 16 | + # Remove the "D. " from names like "D. Concept Index" and "D. Function Index" | |
| 17 | + title_node.content = title_node.content[3..-1] if title_node.content.start_with?("D. ") | |
| 18 | + | |
| 19 | + # Remove columns containing a single space from tables | |
| 20 | + # In the original reference they are used to add width between two columns | |
| 21 | + xpath('//td[text()=" " and not(descendant::*)]').remove | |
| 22 | + | |
| 23 | + # Add id's to additional entry nodes | |
| 24 | + css('dl > dt > code').each do |node| | |
| 25 | + # Only take the direct text (i.e. "<div>Hello <span>World</span></div>" becomes "Hello") | |
| 26 | + node['id'] = node.xpath('text()').to_s.strip | |
| 27 | + end | |
| 28 | + | |
| 29 | + # Fix hashes of index entries so they link to the correct hash on the linked page | |
| 30 | + css('table[class^=index-] td[valign=top] > a').each do |node| | |
| 31 | + path = node['href'].split('#')[0] | |
| 32 | + hash = node.content | |
| 33 | + | |
| 34 | + # Fix the index entries linking to the Special Parameters page | |
| 35 | + # There are multiple index entries that should link to the same paragraph on that page | |
| 36 | + # Example: the documentation for "$!" is equal to the documentation for "!" | |
| 37 | + if path.downcase.include?('special-parameters') | |
| 38 | + if hash.size > 1 && hash[0] == '$' | |
| 39 | + hash = hash[1..-1] | |
| 40 | + end | |
| 41 | + end | |
| 42 | + | |
| 43 | + node['href'] = path + '#' + hash | |
| 44 | + end | |
| 45 | + | |
| 46 | + # Fix index table letter hashes (the "Jump to" hashes) | |
| 47 | + css('table[class^=index-] th > a').each do |node| | |
| 48 | + node['id'] = node['name'] | |
| 49 | + end | |
| 50 | + | |
| 51 | + # Remove the rows with a horizontal line in them from the index tables | |
| 52 | + css('td[colspan="4"]').remove | |
| 53 | + | |
| 54 | + # Remove additional text from menu entry and index entry cells | |
| 55 | + css('td[valign=top]').each do |node| | |
| 56 | + link = node.at_css('a') | |
| 57 | + node.children = link unless link.nil? | |
| 58 | + end | |
| 59 | + | |
| 60 | + css('tt', 'code', 'table').remove_attr('class') | |
| 61 | + | |
| 62 | + css('tt').each do |node| | |
| 63 | + node.name = 'code' | |
| 64 | + end | |
| 65 | + | |
| 66 | + css('pre').each do |node| | |
| 67 | + node.content = node.content | |
| 68 | + end | |
| 69 | + | |
| 70 | + doc | |
| 71 | + end | |
| 72 | + end | |
| 73 | + end | |
| 74 | +end | |
| @@ -0,0 +1,56 @@ | ||
| 1 | +module Docs | |
| 2 | + class Bash | |
| 3 | + class EntriesFilter < Docs::EntriesFilter | |
| 4 | + def get_name | |
| 5 | + name = at_css('hr + a + *').content.gsub(/(\d+\.?)+/, '') | |
| 6 | + | |
| 7 | + # Remove the "D. " from names like "D. Concept Index" and "D. Function Index" | |
| 8 | + name = name[3..-1] if name.start_with?('D. ') | |
| 9 | + | |
| 10 | + name | |
| 11 | + end | |
| 12 | + | |
| 13 | + def get_type | |
| 14 | + return 'Manual: Appendices' if name.start_with?('Appendix') | |
| 15 | + return 'Manual: Indexes' if at_css('a[rel=up]').content.include?("Index") | |
| 16 | + "Manual" | |
| 17 | + end | |
| 18 | + | |
| 19 | + def additional_entries | |
| 20 | + entry_type = { | |
| 21 | + "Function Index" => "Functions", | |
| 22 | + "Index of Shell Builtin Commands" => "Builtin Commands", | |
| 23 | + "Index of Shell Reserved Words" => "Reserved Words", | |
| 24 | + "Parameter and Variable Index" => "Parameters and Variables" | |
| 25 | + }[name] | |
| 26 | + | |
| 27 | + # Only extract additional entries from certain index pages | |
| 28 | + return [] if entry_type.nil? | |
| 29 | + | |
| 30 | + entries = [] | |
| 31 | + | |
| 32 | + css('table[class^=index-] td[valign=top] > a').each_slice(2) do |entry_node, section_node| | |
| 33 | + entry_name = entry_node.content | |
| 34 | + | |
| 35 | + page = section_node['href'].split('#')[0] | |
| 36 | + hash = entry_name | |
| 37 | + | |
| 38 | + # The Special Parameters page has multiple additional entries which should link to the same paragraph | |
| 39 | + # Example: the documentation for "$!" is equal to the documentation for "!" | |
| 40 | + if page == 'special-parameters' | |
| 41 | + if hash.size > 1 && hash[0] == '$' | |
| 42 | + hash = hash[1..-1] | |
| 43 | + end | |
| 44 | + end | |
| 45 | + | |
| 46 | + # Construct path to the page which the index links to | |
| 47 | + entry_path = '/html_node/' + page + '#' + hash | |
| 48 | + | |
| 49 | + entries << [entry_name, entry_path, entry_type] | |
| 50 | + end | |
| 51 | + | |
| 52 | + entries | |
| 53 | + end | |
| 54 | + end | |
| 55 | + end | |
| 56 | +end | |
| @@ -0,0 +1,66 @@ | ||
| 1 | +module Docs | |
| 2 | + class Dart | |
| 3 | + class CleanHtmlFilter < Filter | |
| 4 | + def call | |
| 5 | + # Move the title into the main content node in the v1 docs | |
| 6 | + title = at_css('h1.title') | |
| 7 | + if title | |
| 8 | + name = title.children.last.content.strip | |
| 9 | + kind = title.at_css('.kind').content | |
| 10 | + at_css('.main-content').prepend_child("<h1>#{name} #{kind}</h1>") | |
| 11 | + end | |
| 12 | + | |
| 13 | + # Add a title to the homepage of the v2 docs | |
| 14 | + if subpath == 'index.html' && at_css('.main-content > h1').nil? | |
| 15 | + at_css('.main-content').prepend_child('<h1>Dart SDK</h1>') | |
| 16 | + end | |
| 17 | + | |
| 18 | + # Add the library to the main content (it is not always visible in the menu entry) | |
| 19 | + breadcrumbs = at_css('.breadcrumbs').css('li:not(.self-crumb) > a') | |
| 20 | + if breadcrumbs.length > 1 | |
| 21 | + library = breadcrumbs[1].content | |
| 22 | + | |
| 23 | + # Generate the link to the homepage of the library | |
| 24 | + with_hypens = library.gsub(/:/, '-') | |
| 25 | + location = "#{'../' * subpath.count('/')}#{with_hypens}/#{with_hypens}-library" | |
| 26 | + link = "<a href=\"#{location}\" class=\"_links-link\">#{library}</span>" | |
| 27 | + | |
| 28 | + # Add the link to the main title, just like how the "Homepage" and "Source code" links appear | |
| 29 | + at_css('.main-content').prepend_child("<p class=\"_links\">#{link}</p>") | |
| 30 | + end | |
| 31 | + | |
| 32 | + # Extract the actual content | |
| 33 | + # We can't use options[:container] here because the entries filter uses the breadcrumbs node | |
| 34 | + @doc = at_css('.main-content') | |
| 35 | + | |
| 36 | + # Move the features (i.e. "read-only, inherited") into the blue header | |
| 37 | + css('.features').each do |node| | |
| 38 | + header = node.xpath('parent::dd/preceding::dt').last | |
| 39 | + header.add_child node unless header.nil? | |
| 40 | + end | |
| 41 | + | |
| 42 | + css('section').each do |node| | |
| 43 | + if node['id'] && node.first_element_child | |
| 44 | + node.first_element_child['id'] ||= node['id'] | |
| 45 | + end | |
| 46 | + | |
| 47 | + node.before(node.children).remove | |
| 48 | + end | |
| 49 | + | |
| 50 | + css('span').each do |node| | |
| 51 | + node.before(node.children).remove | |
| 52 | + end | |
| 53 | + | |
| 54 | + # Make code blocks detectable by Prism | |
| 55 | + css('pre').each do |node| | |
| 56 | + node['data-language'] = 'dart' | |
| 57 | + node.content = node.content | |
| 58 | + end | |
| 59 | + | |
| 60 | + css('.properties', '.property', '.callables', '.callable').remove_attr('class') | |
| 61 | + | |
| 62 | + doc | |
| 63 | + end | |
| 64 | + end | |
| 65 | + end | |
| 66 | +end | |
| @@ -0,0 +1,42 @@ | ||
| 1 | +module Docs | |
| 2 | + class Dart | |
| 3 | + class EntriesFilter < Docs::EntriesFilter | |
| 4 | + def get_name | |
| 5 | + title = at_css('h1.title') | |
| 6 | + if title # v1 | |
| 7 | + name = title.element_children.last.content.strip | |
| 8 | + kind = title.at_css('.kind').content | |
| 9 | + else # v2 | |
| 10 | + title = at_css('.main-content > h1') | |
| 11 | + name = title.content[/(.*)( )/, 1].split(' top-level')[0] | |
| 12 | + kind = title.content[/(.*)( )(.+)/, 3] | |
| 13 | + end | |
| 14 | + | |
| 15 | + breadcrumbs = at_css('.breadcrumbs').css('li:not(.self-crumb) > a') | |
| 16 | + first_part = '' | |
| 17 | + | |
| 18 | + if breadcrumbs.length == 2 && !kind.include?('class') | |
| 19 | + first_part = breadcrumbs[1].content | |
| 20 | + elsif breadcrumbs.length == 3 | |
| 21 | + first_part = breadcrumbs[2].content | |
| 22 | + end | |
| 23 | + | |
| 24 | + separator = '' | |
| 25 | + | |
| 26 | + unless first_part.empty? | |
| 27 | + if kind.include?('class') | |
| 28 | + separator = ':' | |
| 29 | + else | |
| 30 | + separator = '.' | |
| 31 | + end | |
| 32 | + end | |
| 33 | + | |
| 34 | + "#{first_part}#{separator}#{name}" | |
| 35 | + end | |
| 36 | + | |
| 37 | + def get_type | |
| 38 | + at_css('.breadcrumbs > li:nth-child(2)').content.split(' ')[0] | |
| 39 | + end | |
| 40 | + end | |
| 41 | + end | |
| 42 | +end | |
| @@ -26,6 +26,7 @@ module Docs · 25 unmodified lines | ||
| 26 | 26 | 'Geometry' => 'Geometry', |
| 27 | 27 | 'High Resolution Time' => 'Performance', |
| 28 | 28 | 'Intersection' => 'Intersection Observer', |
| 29 | + 'Media Capabilities' => 'Media', | |
| 29 | 30 | 'Media Capture' => 'Media', |
| 30 | 31 | 'Media Session' => 'Media', |
| 31 | 32 | 'Media Source' => 'Media', |
| @@ -99,6 +100,7 @@ module Docs · 67 unmodified lines | ||
| 99 | 100 | 'MediaSession' => 'Media Session', |
| 100 | 101 | 'MediaTrack' => 'Media Streams', |
| 101 | 102 | 'Message' => 'Channel Messaging', |
| 103 | + 'Mutation' => 'DOM', | |
| 102 | 104 | 'NamedNode' => 'Nodes', |
| 103 | 105 | 'Node' => 'Nodes', |
| 104 | 106 | 'Notification' => 'Notification', |
| @@ -116,6 +118,7 @@ module Docs · 11 unmodified lines | ||
| 116 | 118 | 'Shadow' => 'Shadow DOM', |
| 117 | 119 | 'StaticRange' => 'Range', |
| 118 | 120 | 'Streams' => 'Media Streams', |
| 121 | + 'StyleProperty' => 'CSS', | |
| 119 | 122 | 'StyleSheet' => 'CSS', |
| 120 | 123 | 'Stylesheet' => 'CSS', |
| 121 | 124 | 'SVG' => 'SVG', |
| @@ -59,6 +59,7 @@ module Docs · 58 unmodified lines | ||
| 59 | 59 | |
| 60 | 60 | css('pre').each do |node| |
| 61 | 61 | node['data-language'] = 'elixir' |
| 62 | + node.content = node.content | |
| 62 | 63 | end |
| 63 | 64 | end |
| 64 | 65 | end |
| @@ -42,6 +42,11 @@ module Docs · 41 unmodified lines | ||
| 42 | 42 | node.parent.content = node.parent.content |
| 43 | 43 | end |
| 44 | 44 | |
| 45 | + # Fix links to the method reference | |
| 46 | + css('a').each do |node| | |
| 47 | + node['href'] = node['href'].sub('4x/api', 'index') | |
| 48 | + end | |
| 49 | + | |
| 45 | 50 | doc |
| 46 | 51 | end |
| 47 | 52 | end |
| @@ -0,0 +1,27 @@ | ||
| 1 | +module Docs | |
| 2 | + class Graphite | |
| 3 | + class CleanHtmlFilter < Filter | |
| 4 | + def call | |
| 5 | + # Remove the paragraph icon after all headers | |
| 6 | + css('.headerlink').remove | |
| 7 | + | |
| 8 | + css('dl.function > dt').each do |node| | |
| 9 | + node.content = node.content | |
| 10 | + end | |
| 11 | + | |
| 12 | + css('.section').each do |node| | |
| 13 | + node.before(node.children).remove | |
| 14 | + end | |
| 15 | + | |
| 16 | + css('div[class*="highlight-"]').each do |node| | |
| 17 | + node.content = node.content.strip | |
| 18 | + node.name = 'pre' | |
| 19 | + node['data-language'] = node['class'][/highlight\-(\w+)/, 1] | |
| 20 | + node.remove_attribute('class') | |
| 21 | + end | |
| 22 | + | |
| 23 | + doc | |
| 24 | + end | |
| 25 | + end | |
| 26 | + end | |
| 27 | +end | |
| @@ -0,0 +1,46 @@ | ||
| 1 | +module Docs | |
| 2 | + class Graphite | |
| 3 | + class EntriesFilter < Docs::EntriesFilter | |
| 4 | + def get_name | |
| 5 | + at_css('h1').children[0].to_s | |
| 6 | + end | |
| 7 | + | |
| 8 | + def get_type | |
| 9 | + get_name | |
| 10 | + end | |
| 11 | + | |
| 12 | + def additional_entries | |
| 13 | + entries = [] | |
| 14 | + | |
| 15 | + # Sections | |
| 16 | + css('.section > .section').each do |node| | |
| 17 | + title = node.at_css('h2, h3') | |
| 18 | + | |
| 19 | + next if title.nil? | |
| 20 | + | |
| 21 | + # Move the id attribute to the title | |
| 22 | + # If this is excluded, the complete section will be highlighted in yellow when someone navigates to it | |
| 23 | + title['id'] = node['id'] | |
| 24 | + node.remove_attribute('id') | |
| 25 | + | |
| 26 | + parent_title_selector = "parent::div[@class='section']/preceding::#{title.name == 'h2' ? 'h1' : 'h2'}" | |
| 27 | + | |
| 28 | + entries << [ | |
| 29 | + title.children[0].to_s, | |
| 30 | + title['id'], | |
| 31 | + title.xpath(parent_title_selector).last.children[0].to_s | |
| 32 | + ] | |
| 33 | + end | |
| 34 | + | |
| 35 | + # Functions | |
| 36 | + css('dl.function > dt').each do |node| | |
| 37 | + name = node.at_css('.descname').content | |
| 38 | + name << '()' | |
| 39 | + entries << [name, node['id'], 'Functions'] | |
| 40 | + end | |
| 41 | + | |
| 42 | + entries | |
| 43 | + end | |
| 44 | + end | |
| 45 | + end | |
| 46 | +end | |
| @@ -0,0 +1,44 @@ | ||
| 1 | +module Docs | |
| 2 | + class Handlebars | |
| 3 | + class CleanHtmlFilter < Filter | |
| 4 | + def call | |
| 5 | + # Remove the t-shirt shop advertisement | |
| 6 | + css('#callout').remove | |
| 7 | + | |
| 8 | + # The title filter is used to add titles to pages without one, remove original headers | |
| 9 | + css('h1').remove | |
| 10 | + | |
| 11 | + # Remove the link to the issue tracker | |
| 12 | + css('.issue-tracker').remove | |
| 13 | + | |
| 14 | + css('pre').each do |node| | |
| 15 | + # Remove nested nodes inside pre tags | |
| 16 | + node.content = node.content | |
| 17 | + | |
| 18 | + # Add syntax highlighting | |
| 19 | + node['data-language'] = 'html' | |
| 20 | + end | |
| 21 | + | |
| 22 | + # Transform 'Learn More' links to headers in the "Getting Started" part of the homepage | |
| 23 | + # If this step is skipped, that section looks cluttered with 4 sub-sections without any dividers | |
| 24 | + css('#getting-started + .contents a.more-info').each do |node| | |
| 25 | + clone = node.clone | |
| 26 | + | |
| 27 | + # Move it to the top of the sub-section | |
| 28 | + node.parent.prepend_child(clone) | |
| 29 | + | |
| 30 | + # Turn it into a header | |
| 31 | + clone.name = 'h3' | |
| 32 | + | |
| 33 | + # Remove the "Learn More: " part | |
| 34 | + clone.content = clone.content[12..-1] | |
| 35 | + end | |
| 36 | + | |
| 37 | + # Remove class attributes from div elements to reduce file size | |
| 38 | + css('div').remove_attr('class') | |
| 39 | + | |
| 40 | + doc | |
| 41 | + end | |
| 42 | + end | |
| 43 | + end | |
| 44 | +end | |
| @@ -0,0 +1,19 @@ | ||
| 1 | +module Docs | |
| 2 | + class Handlebars | |
| 3 | + class EntriesFilter < Docs::EntriesFilter | |
| 4 | + def get_name | |
| 5 | + subpath[0..-6].titleize | |
| 6 | + end | |
| 7 | + | |
| 8 | + def get_type | |
| 9 | + name | |
| 10 | + end | |
| 11 | + | |
| 12 | + def additional_entries | |
| 13 | + css('h2, h3').to_a.map do |node| | |
| 14 | + [node.content.strip, node['id'], root_page? ? 'Manual' : nil] | |
| 15 | + end | |
| 16 | + end | |
| 17 | + end | |
| 18 | + end | |
| 19 | +end | |
| @@ -0,0 +1,24 @@ | ||
| 1 | +module Docs | |
| 2 | + class Puppeteer | |
| 3 | + class CleanHtmlFilter < Filter | |
| 4 | + def call | |
| 5 | + at_css('h1').content = 'Puppeteer Documentation' | |
| 6 | + | |
| 7 | + # None of the elements to remove have classes, so the order of the remove calls is trivial | |
| 8 | + | |
| 9 | + # Remove links to previous versions of the reference | |
| 10 | + at_css('h1 + ul').remove | |
| 11 | + | |
| 12 | + # Remove table of contents | |
| 13 | + at_css('h1 + h5').remove | |
| 14 | + at_css('h1 + ul').remove | |
| 15 | + | |
| 16 | + # Make headers bigger by transforming them into a bigger variant | |
| 17 | + css('h3').each { |node| node.name = 'h2' } | |
| 18 | + css('h4').each { |node| node.name = 'h3' } | |
| 19 | + | |
| 20 | + doc | |
| 21 | + end | |
| 22 | + end | |
| 23 | + end | |
| 24 | +end | |
| @@ -0,0 +1,41 @@ | ||
| 1 | +module Docs | |
| 2 | + class Puppeteer | |
| 3 | + class EntriesFilter < Docs::EntriesFilter | |
| 4 | + # The entire reference is one big page, so get_name and get_type are not necessary | |
| 5 | + | |
| 6 | + def additional_entries | |
| 7 | + entries = [] | |
| 8 | + | |
| 9 | + css('h3').each do |node| | |
| 10 | + name = node.content.split(': ').last | |
| 11 | + | |
| 12 | + # Find all sub-items (all h4's between the current h3 and the next) | |
| 13 | + current = node.next | |
| 14 | + while !current.nil? && current.name != 'h3' | |
| 15 | + if current.name == 'h4' | |
| 16 | + current_name = current.content | |
| 17 | + | |
| 18 | + # Prepend events with the class name | |
| 19 | + if current_name.start_with?('event: ') | |
| 20 | + current_name = "#{name} event: #{current_name[/'(.*)'/, 1]}" | |
| 21 | + end | |
| 22 | + | |
| 23 | + # Remove arguments from functions | |
| 24 | + if current_name.include?('(') | |
| 25 | + current_name = current_name.split('(')[0] + '()' | |
| 26 | + end | |
| 27 | + | |
| 28 | + entries << [current_name, current['id'], name] | |
| 29 | + end | |
| 30 | + | |
| 31 | + current = current.next | |
| 32 | + end | |
| 33 | + | |
| 34 | + entries << [name, node['id'], name] | |
| 35 | + end | |
| 36 | + | |
| 37 | + entries | |
| 38 | + end | |
| 39 | + end | |
| 40 | + end | |
| 41 | +end | |
| @@ -0,0 +1,102 @@ | ||
| 1 | +module Docs | |
| 2 | + class Pygame | |
| 3 | + class CleanHtmlFilter < Filter | |
| 4 | + def call | |
| 5 | + @doc = at_css '.body' | |
| 6 | + | |
| 7 | + if root_page? | |
| 8 | + # remove unneeded stuff | |
| 9 | + at_css('.modindex-jumpbox').remove | |
| 10 | + css('[role="navigation"],.pcap, .cap, .footer').remove | |
| 11 | + # table -> list | |
| 12 | + list = at_css('table') | |
| 13 | + list.replace(list.children) | |
| 14 | + list.name = 'ul' | |
| 15 | + css('tr').each do |row| | |
| 16 | + row.name = 'li' | |
| 17 | + row.remove_attribute('class') | |
| 18 | + end | |
| 19 | + at_css('h1').content = 'Pygame' | |
| 20 | + return doc | |
| 21 | + end | |
| 22 | + | |
| 23 | + # remove unwanted stuff | |
| 24 | + # .headerlink => ¶ after links | |
| 25 | + # .toc => table of content | |
| 26 | + # .tooltip-content => tooltips after links to functions | |
| 27 | + css('table.toc.docutils, .headerlink, .tooltip-content').remove | |
| 28 | + | |
| 29 | + # Remove wrapper .section | |
| 30 | + section = at_css('.section') | |
| 31 | + definition = at_css('.definition') | |
| 32 | + definition['id'] = section['id'] | |
| 33 | + section.replace(section.children) | |
| 34 | + | |
| 35 | + # Format code for it be highlighted | |
| 36 | + css('.highlight-default.notranslate').each do |node| | |
| 37 | + pre = node.at_css('pre') | |
| 38 | + node.replace(pre) | |
| 39 | + # gets rid of the already existing syntax highlighting | |
| 40 | + pre.content = pre.content | |
| 41 | + pre['class'] = 'language-python' | |
| 42 | + pre['data-language'] = "python" | |
| 43 | + end | |
| 44 | + | |
| 45 | + # change descriptions of functions/attributes to blockquote | |
| 46 | + css('.line-block').each do |node| | |
| 47 | + node.name = 'blockquote' | |
| 48 | + end | |
| 49 | + | |
| 50 | + # change functions | |
| 51 | + css('.definition').each do |d| | |
| 52 | + | |
| 53 | + # the header is the function/attribute name. It might look something like | |
| 54 | + # this: | |
| 55 | + # pygame.image.load() | |
| 56 | + # It'll end up being something like this: | |
| 57 | + # pygame.image.load(filename) -> Surface | |
| 58 | + # pygame.image.load(fileobj, namehint="") -> Surface | |
| 59 | + | |
| 60 | + header = d.at_css('dt.title') | |
| 61 | + if d['class'].include?('class') or d['class'].include?('module') | |
| 62 | + header.name = 'h1' | |
| 63 | + @section = header.content.strip | |
| 64 | + else | |
| 65 | + header.name = 'h3' | |
| 66 | + end | |
| 67 | + # save the original header | |
| 68 | + initial_header = header.content.strip | |
| 69 | + # save the real name for the entries | |
| 70 | + header['data-name'] = initial_header | |
| 71 | + # empty the header | |
| 72 | + if header.name == 'h3' | |
| 73 | + header.inner_html = '' | |
| 74 | + end | |
| 75 | + # to replace it with the signatures | |
| 76 | + next_el = header.next_element | |
| 77 | + signatures = next_el.css('.signature') | |
| 78 | + signatures.each do |sig| | |
| 79 | + sig.name = 'code' | |
| 80 | + if header.name == 'h3' | |
| 81 | + sig.parent = header | |
| 82 | + # the signature don't contain pygame.module. I think it's better | |
| 83 | + # to display them, as it avoids confusion with methods (have a | |
| 84 | + # look at the pygame.Rect page) | |
| 85 | + if initial_header.start_with?(@section) | |
| 86 | + sig.content = @section + '.' + sig.text | |
| 87 | + end | |
| 88 | + # seperate the signatures on different lines. | |
| 89 | + header.add_child "<br>" | |
| 90 | + end | |
| 91 | + end | |
| 92 | + end | |
| 93 | + | |
| 94 | + css('> dl', '> dl > dd', 'h1 code').each do |node| | |
| 95 | + node.before(node.children).remove | |
| 96 | + end | |
| 97 | + | |
| 98 | + doc | |
| 99 | + end | |
| 100 | + end | |
| 101 | + end | |
| 102 | +end | |
| @@ -0,0 +1,29 @@ | ||
| 1 | +module Docs | |
| 2 | + class Pygame | |
| 3 | + class EntriesFilter < Docs::EntriesFilter | |
| 4 | + def get_name | |
| 5 | + at_css('h1').content.remove('pygame.') | |
| 6 | + end | |
| 7 | + | |
| 8 | + def get_type | |
| 9 | + at_css('h1').content | |
| 10 | + end | |
| 11 | + | |
| 12 | + def additional_entries | |
| 13 | + return [] if root_page? | |
| 14 | + | |
| 15 | + css('h1, h2, h3').each_with_object [] do |node, entries| | |
| 16 | + name = node['id'] || node['data-name'] | |
| 17 | + | |
| 18 | + if node.parent['class'].include?('function') or node.parent['class'].include?('method') | |
| 19 | + name << '()' | |
| 20 | + end | |
| 21 | + | |
| 22 | + name.remove!('pygame.') | |
| 23 | + | |
| 24 | + entries << [name, node['id']] unless name == self.name | |
| 25 | + end | |
| 26 | + end | |
| 27 | + end | |
| 28 | + end | |
| 29 | +end | |
| @@ -15,15 +15,17 @@ module Docs · 14 unmodified lines | ||
| 15 | 15 | |
| 16 | 16 | def other |
| 17 | 17 | css('h1').each do |node| |
| 18 | − node.content = node.content.sub!(/\A[\d\.]+/) do |str| | |
| 18 | + node.content = node.content.sub(/\A[\d\.]+/) do |str| | |
| 19 | 19 | rgx = /\A#{str}/ |
| 20 | 20 | @levelRegexp = @levelRegexp ? Regexp.union(@levelRegexp, rgx) : rgx |
| 21 | 21 | '' |
| 22 | 22 | end |
| 23 | 23 | end |
| 24 | 24 | |
| 25 | − css('h2', 'h3', 'h4').each do |node| | |
| 26 | − node.inner_html = node.inner_html.remove @levelRegexp | |
| 25 | + unless @levelRegexp.nil? | |
| 26 | + css('h2', 'h3', 'h4').each do |node| | |
| 27 | + node.inner_html = node.inner_html.remove @levelRegexp | |
| 28 | + end | |
| 27 | 29 | end |
| 28 | 30 | end |
| 29 | 31 | end |
| @@ -2,16 +2,18 @@ module Docs · 1 unmodified line | ||
| 2 | 2 | class Python |
| 3 | 3 | class EntriesV3Filter < Docs::EntriesFilter |
| 4 | 4 | REPLACE_TYPES = { |
| 5 | − 'Cryptographic' => 'Cryptography', | |
| 6 | − 'Custom Interpreters' => 'Interpreters', | |
| 7 | − 'Data Compression & Archiving' => 'Data Compression', | |
| 8 | − 'Generic Operating System' => 'Operating System', | |
| 9 | − 'Graphical User Interfaces with Tk' => 'Tk', | |
| 10 | − 'Internet Data Handling' => 'Internet Data', | |
| 11 | − 'Internet Protocols & Support' => 'Internet', | |
| 12 | − 'Interprocess Communication & Networking' => 'Networking', | |
| 13 | − 'Program Frameworks' => 'Frameworks', | |
| 14 | − 'Structured Markup Processing Tools' => 'Structured Markup' } | |
| 5 | + 'contextvars — Context Variables' => 'Context Variables', | |
| 6 | + 'Cryptographic' => 'Cryptography', | |
| 7 | + 'Custom Interpreters' => 'Interpreters', | |
| 8 | + 'Data Compression & Archiving' => 'Data Compression', | |
| 9 | + 'email — An email & MIME handling package' => 'Email', | |
| 10 | + 'Generic Operating System' => 'Operating System', | |
| 11 | + 'Graphical User Interfaces with Tk' => 'Tk', | |
| 12 | + 'Internet Data Handling' => 'Internet Data', | |
| 13 | + 'Internet Protocols & Support' => 'Internet', | |
| 14 | + 'Interprocess Communication & Networking' => 'Networking', | |
| 15 | + 'Program Frameworks' => 'Frameworks', | |
| 16 | + 'Structured Markup Processing Tools' => 'Structured Markup' } | |
| 15 | 17 | |
| 16 | 18 | def get_name |
| 17 | 19 | name = at_css('h1').content |
| @@ -0,0 +1,31 @@ | ||
| 1 | +module Docs | |
| 2 | + class Qt | |
| 3 | + class CleanHtmlFilter < Filter | |
| 4 | + def call | |
| 5 | + # Remove unneeded elements | |
| 6 | + css('.copy-notice, .navigationbar, .headerNavi, .footerNavi, .sidebar, .toc, #ec_toggle', '.landingicons img', 'br').remove | |
| 7 | + | |
| 8 | + # QML property/method header | |
| 9 | + css('.qmlproto').each do |node| | |
| 10 | + id = node.at_css('tr')['id'] | |
| 11 | + node.inner_html = node.at_css('td').inner_html | |
| 12 | + node.name = 'h3' | |
| 13 | + node['id'] = id | |
| 14 | + end | |
| 15 | + | |
| 16 | + css('.main-rounded', '.content', '.line', '.context', '.descr', '.types', '.func', '.table', 'div:not([class])', '.landing', '.col-1', '.heading', '.qmlitem', '.qmldoc', 'div.pre').each do |node| | |
| 17 | + node.before(node.children).remove | |
| 18 | + end | |
| 19 | + | |
| 20 | + css('pre').each do |node| | |
| 21 | + node.content = node.content | |
| 22 | + node['data-language'] = 'cpp' if node['class'].include?('cpp') | |
| 23 | + node['data-language'] = 'qml' if node['class'].include?('qml') | |
| 24 | + node.remove_attribute('class') | |
| 25 | + end | |
| 26 | + | |
| 27 | + doc | |
| 28 | + end | |
| 29 | + end | |
| 30 | + end | |
| 31 | +end | |
| @@ -0,0 +1,141 @@ | ||
| 1 | +# frozen_string_literal: true | |
| 2 | + | |
| 3 | +module Docs | |
| 4 | + class Qt | |
| 5 | + class EntriesFilter < Docs::EntriesFilter | |
| 6 | + def get_name | |
| 7 | + header = at_css('h1.title + .small-subtitle a') || at_css('h1.title') || at_css('.context h2') | |
| 8 | + name = header.content | |
| 9 | + name.sub! %r{ Class$}, ' (class)' | |
| 10 | + name.sub! %r{ QML Type$}, ' (QML type)' | |
| 11 | + name.sub! %r{ QML Basic Type$}, ' (QML basic type)' | |
| 12 | + | |
| 13 | + # Add '(class)' to the class pages where the subtitle name is used (e.g. qset-const-iterator.html) | |
| 14 | + if at_css('h1.title').content.strip.end_with?(' Class') && !name.include?('(class)') | |
| 15 | + name = "#{name} (class) " | |
| 16 | + end | |
| 17 | + | |
| 18 | + name | |
| 19 | + end | |
| 20 | + | |
| 21 | + def get_type | |
| 22 | + breadcrumb = css('#main_title_bar + ul li') | |
| 23 | + category = if breadcrumb.length < 3 | |
| 24 | + then 'Qt'.dup | |
| 25 | + else breadcrumb.at(1).content | |
| 26 | + end | |
| 27 | + | |
| 28 | + if category == 'Qt' | |
| 29 | + return 'Qt Platforms' if name.include?(' for ') || name == 'Qt Platform Abstraction' | |
| 30 | + return 'Qt Quick' if name == 'Qt Quick Test' || name == 'Qt Quick Test Reference Documentation' | |
| 31 | + | |
| 32 | + alwaysInQt = ['Qt Configure Options', 'Qt Image Formats'] | |
| 33 | + category = name if name.start_with?('Qt ') && !alwaysInQt.include?(name) | |
| 34 | + end | |
| 35 | + | |
| 36 | + qtPlatformsTypes = ['Qt Platform Headers', 'Qt Android Extras', 'Qt Mac Extras', 'Qt Windows Extras', 'Qt X11 Extras'] | |
| 37 | + return 'Qt Platforms' if qtPlatformsTypes.include?(category) | |
| 38 | + | |
| 39 | + category.remove!(' Manual') | |
| 40 | + category | |
| 41 | + end | |
| 42 | + | |
| 43 | + def include_default_entry? | |
| 44 | + name != 'All Classes' && name != 'All QML Types' | |
| 45 | + end | |
| 46 | + | |
| 47 | + def additional_entries | |
| 48 | + entries = [] | |
| 49 | + titles = [] | |
| 50 | + | |
| 51 | + className = at_css('h1.title').content.strip.remove(' Class') | |
| 52 | + displayedClassName = className | |
| 53 | + alternativeClassName = at_css('h1.title + .small-subtitle a') | |
| 54 | + displayedClassName = alternativeClassName.content if alternativeClassName | |
| 55 | + | |
| 56 | + # Functions signatures | |
| 57 | + css('h3.fn').each do |node| | |
| 58 | + header = node.clone | |
| 59 | + | |
| 60 | + # Skip typenames | |
| 61 | + next if header.content.strip.start_with?('typename ') | |
| 62 | + | |
| 63 | + # Remove leading <a name=""> | |
| 64 | + header.children.css('a[name]').remove | |
| 65 | + | |
| 66 | + # Remove leading <code> tag (virtual/static/… attributes) | |
| 67 | + code = header.children.first | |
| 68 | + code.remove if code.name == 'code' | |
| 69 | + | |
| 70 | + # Remove leading ‘const’ | |
| 71 | + header.children.first.remove if header.content.strip.start_with?('const ') | |
| 72 | + | |
| 73 | + # Remove return type | |
| 74 | + returnType = header.children.first | |
| 75 | + returnType.remove if returnType['class'] == 'type' | |
| 76 | + | |
| 77 | + title = header.content.strip | |
| 78 | + | |
| 79 | + # Remove leading '&'/'*' | |
| 80 | + title[0] = '' if title[0] == '&' || title[0] == '*' | |
| 81 | + | |
| 82 | + # Ignore operator overloads | |
| 83 | + next if title.start_with?('operator') | |
| 84 | + | |
| 85 | + # Remove function parameters | |
| 86 | + title.sub! %r{\(.*\)}, '()' | |
| 87 | + | |
| 88 | + # Remove template generics | |
| 89 | + title.remove!(%r{^<.*> }) | |
| 90 | + | |
| 91 | + # Remove ‘const’ at the end | |
| 92 | + title.remove!(%r{ const$}) | |
| 93 | + | |
| 94 | + # Enum/typedef formatting | |
| 95 | + title.sub! %r{(enum|typedef) (.*)}, '\2 (\1)' | |
| 96 | + | |
| 97 | + # Remove property type | |
| 98 | + title = "#{displayedClassName}::#{title}" if title.sub!(%r{ : .*$}, '') | |
| 99 | + | |
| 100 | + # Replace the class name by the alternative class name if available | |
| 101 | + title = title.sub(className, displayedClassName) if alternativeClassName | |
| 102 | + | |
| 103 | + unless titles.include?(title) # Remove duplicates (function overloading) | |
| 104 | + entries << [title, header['id']] | |
| 105 | + titles.push title | |
| 106 | + end | |
| 107 | + end | |
| 108 | + | |
| 109 | + # QML properties/functions | |
| 110 | + qmlTypeName = at_css('h1.title').content.remove(' QML Type', '') | |
| 111 | + css('.qmlproto').each do |node| | |
| 112 | + title = node.content.strip | |
| 113 | + id = node.at_css('tr')['id'] | |
| 114 | + | |
| 115 | + # Remove options | |
| 116 | + title.remove!(%r{^\[.*\] }) | |
| 117 | + | |
| 118 | + # Remove function parameters | |
| 119 | + title.sub! %r{\(.*\)}, '()' | |
| 120 | + | |
| 121 | + # Remove property type | |
| 122 | + title.remove!(%r{ : .*$}) | |
| 123 | + | |
| 124 | + # Remove return type | |
| 125 | + title.remove!(%r{.* }) | |
| 126 | + | |
| 127 | + # Remove return type | |
| 128 | + title.remove!(%r{.* }) | |
| 129 | + | |
| 130 | + title = "#{qmlTypeName}.#{title.strip}" | |
| 131 | + unless titles.include?(title) # Remove duplicates (function overloading) | |
| 132 | + entries << [title, id] | |
| 133 | + titles.push(title) | |
| 134 | + end | |
| 135 | + end | |
| 136 | + | |
| 137 | + entries | |
| 138 | + end | |
| 139 | + end | |
| 140 | + end | |
| 141 | +end | |
| @@ -12,7 +12,7 @@ module Docs · 11 unmodified lines | ||
| 12 | 12 | when 'HDEL' then 'Hashes' |
| 13 | 13 | when 'BLPOP' then 'Lists' |
| 14 | 14 | when 'SADD' then 'Sets' |
| 15 | − when 'ZADD' then 'Sorted Sets' | |
| 15 | + when 'BZPOPMAX' then 'Sorted Sets' | |
| 16 | 16 | when 'PSUBSCRIBE' then 'Pub/Sub' |
| 17 | 17 | when 'DISCARD' then 'Transactions' |
| 18 | 18 | when 'EVAL' then 'Scripting' |
| @@ -21,6 +21,7 @@ module Docs · 2 unmodified lines | ||
| 21 | 21 | when 'PFADD' then 'HyperLogLog' |
| 22 | 22 | when 'CLUSTER ADDSLOTS' then 'Cluster' |
| 23 | 23 | when 'GEOADD' then 'Geo' |
| 24 | + when 'XADD' then 'Stream' | |
| 24 | 25 | else 'Miscellaneous' |
| 25 | 26 | end |
| 26 | 27 | end |
| @@ -2,10 +2,8 @@ module Docs · 1 unmodified line | ||
| 2 | 2 | class Rust |
| 3 | 3 | class CleanHtmlFilter < Filter |
| 4 | 4 | def call |
| 5 | − puts subpath if at_css('#versioninfo') | |
| 6 | − | |
| 7 | 5 | if slug.start_with?('book') || slug.start_with?('reference') |
| 8 | − @doc = at_css('#content') | |
| 6 | + @doc = at_css('#content main') | |
| 9 | 7 | elsif slug == 'error-index' |
| 10 | 8 | css('.error-undescribed').remove |
| 11 | 9 | |
| @@ -29,12 +27,16 @@ module Docs · 17 unmodified lines | ||
| 29 | 27 | |
| 30 | 28 | css('.rusttest', '.test-arrow', 'hr').remove |
| 31 | 29 | |
| 30 | + css('.docblock.attributes').each do |node| | |
| 31 | + node.remove if node.content.include?('#[must_use]') | |
| 32 | + end | |
| 33 | + | |
| 32 | 34 | css('a.header').each do |node| |
| 33 | − node.first_element_child['id'] = node['name'] | |
| 35 | + node.first_element_child['id'] = node['name'] || node['id'] | |
| 34 | 36 | node.before(node.children).remove |
| 35 | 37 | end |
| 36 | 38 | |
| 37 | − css('.docblock > h1').each { |node| node.name = 'h4' } | |
| 39 | + css('.docblock > h1:not(.section-header)').each { |node| node.name = 'h4' } | |
| 38 | 40 | css('h2.section-header').each { |node| node.name = 'h3' } |
| 39 | 41 | css('h1.section-header').each { |node| node.name = 'h2' } |
| 40 | 42 | |
| @@ -44,7 +46,7 @@ module Docs · 3 unmodified lines | ||
| 44 | 46 | end |
| 45 | 47 | end |
| 46 | 48 | |
| 47 | − css('> .impl-items', '> .docblock', 'pre > pre').each do |node| | |
| 49 | + css('> .impl-items', '> .docblock', 'pre > pre', '.tooltiptext', '.tooltip').each do |node| | |
| 48 | 50 | node.before(node.children).remove |
| 49 | 51 | end |
| 50 | 52 | |
| @@ -62,6 +64,35 @@ module Docs · 11 unmodified lines | ||
| 62 | 64 | node['data-language'] = 'rust' if node['class'] && node['class'].include?('rust') |
| 63 | 65 | end |
| 64 | 66 | |
| 67 | + doc.first_element_child.name = 'h1' if doc.first_element_child.name = 'h2' | |
| 68 | + at_css('h1').content = 'Rust Documentation' if root_page? | |
| 69 | + | |
| 70 | + css('.table-display').each do |node| | |
| 71 | + node.css('td').each do |td| | |
| 72 | + node.before(td.children) | |
| 73 | + end | |
| 74 | + node.remove | |
| 75 | + end | |
| 76 | + | |
| 77 | + css('h2 .important-traits', 'h3 .important-traits', 'h4 .important-traits').each do |node| | |
| 78 | + content = node.at_css('.content.hidden .content') | |
| 79 | + node.at_css('.content.hidden').replace(content) if content | |
| 80 | + node.parent.after(node) | |
| 81 | + end | |
| 82 | + | |
| 83 | + css('code.content').each do |node| | |
| 84 | + node.name = 'pre' | |
| 85 | + node.css('.fmt-newline').each do |line| | |
| 86 | + line.inner_html = line.inner_html + "\n" | |
| 87 | + end | |
| 88 | + node.inner_html = node.inner_html.gsub('<br>', "\n") | |
| 89 | + node.content = node.content | |
| 90 | + end | |
| 91 | + | |
| 92 | + css('.since + .srclink').each do |node| | |
| 93 | + node.previous_element.before(node) | |
| 94 | + end | |
| 95 | + | |
| 65 | 96 | doc |
| 66 | 97 | end |
| 67 | 98 | end |
| @@ -42,11 +42,14 @@ module Docs · 41 unmodified lines | ||
| 42 | 42 | entries << [node.content, node['id']] unless node.content.include?('Note:') |
| 43 | 43 | end |
| 44 | 44 | else |
| 45 | − css('#methods + * + div > .method', '#required-methods + div > .method', '#provided-methods + div > .method').map do |node| | |
| 46 | − name = node.at_css('.fnname').content | |
| 47 | − name.prepend "#{self.name}::" | |
| 48 | − [name, node['id']] | |
| 49 | − end | |
| 45 | + css('.method') | |
| 46 | + .select {|node| !node.at_css('.fnname').nil?} | |
| 47 | + .map {|node| | |
| 48 | + name = node.at_css('.fnname').content | |
| 49 | + name.prepend "#{self.name}::" | |
| 50 | + [name, node['id']] | |
| 51 | + } | |
| 52 | + .uniq {|item| item[0]} | |
| 50 | 53 | end |
| 51 | 54 | end |
| 52 | 55 | end |
| @@ -9,6 +9,7 @@ module Docs · 8 unmodified lines | ||
| 9 | 9 | |
| 10 | 10 | def get_type |
| 11 | 11 | return 'Declaration Files' if subpath.include?('declaration-files') |
| 12 | + return 'Project Configuration' if slug == 'handbook/configuring-watch' | |
| 12 | 13 | type = at_css('#main-nav a.active').ancestors('.panel').first.at_css('> a').content |
| 13 | 14 | type = name if type == 'Handbook' |
| 14 | 15 | type |
| @@ -3,7 +3,7 @@ module Docs · 2 unmodified lines | ||
| 3 | 3 | self.name = 'Apache HTTP Server' |
| 4 | 4 | self.slug = 'apache_http_server' |
| 5 | 5 | self.type = 'apache' |
| 6 | − self.release = '2.4.33' | |
| 6 | + self.release = '2.4.34' | |
| 7 | 7 | self.base_url = 'https://httpd.apache.org/docs/2.4/en/' |
| 8 | 8 | self.links = { |
| 9 | 9 | home: 'https://httpd.apache.org/' |
| @@ -2,7 +2,7 @@ module Docs · 1 unmodified line | ||
| 2 | 2 | class ApachePig < UrlScraper |
| 3 | 3 | self.name = 'Apache Pig' |
| 4 | 4 | self.slug = 'apache_pig' |
| 5 | − self.type = 'apache_pig' | |
| 5 | + self.type = 'simple' | |
| 6 | 6 | self.links = { |
| 7 | 7 | home: 'https://pig.apache.org/' |
| 8 | 8 | } |
| @@ -0,0 +1,21 @@ | ||
| 1 | +module Docs | |
| 2 | + class Bash < UrlScraper | |
| 3 | + self.type = 'bash' | |
| 4 | + self.release = '4.4' | |
| 5 | + self.base_url = 'https://www.gnu.org/software/bash/manual' | |
| 6 | + self.root_path = '/html_node/index.html' | |
| 7 | + self.links = { | |
| 8 | + home: 'https://www.gnu.org/software/bash/', | |
| 9 | + code: 'http://git.savannah.gnu.org/cgit/bash.git' | |
| 10 | + } | |
| 11 | + | |
| 12 | + html_filters.push 'bash/entries', 'bash/clean_html' | |
| 13 | + | |
| 14 | + options[:only_patterns] = [/\/html_node\//] | |
| 15 | + | |
| 16 | + options[:attribution] = <<-HTML | |
| 17 | + Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.<br> | |
| 18 | + Licensed under the GNU Free Documentation License. | |
| 19 | + HTML | |
| 20 | + end | |
| 21 | +end | |
| @@ -16,7 +16,7 @@ module Docs · 15 unmodified lines | ||
| 16 | 16 | HTML |
| 17 | 17 | |
| 18 | 18 | version '4' do |
| 19 | − self.release = '4.1.1' | |
| 19 | + self.release = '4.1.3' | |
| 20 | 20 | self.base_url = 'https://getbootstrap.com/docs/4.1/' |
| 21 | 21 | self.root_path = 'getting-started/introduction/' |
| 22 | 22 | |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Bower < UrlScraper |
| 3 | 3 | self.name = 'Bower' |
| 4 | − self.type = 'bower' | |
| 4 | + self.type = 'simple' | |
| 5 | 5 | self.release = '1.8.4' |
| 6 | 6 | self.base_url = 'https://bower.io/docs/' |
| 7 | 7 | self.root_path = 'api' |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Chai < UrlScraper |
| 3 | 3 | self.name = 'Chai' |
| 4 | − self.type = 'chai' | |
| 4 | + self.type = 'simple' | |
| 5 | 5 | self.release = '4.1.0' |
| 6 | 6 | self.base_url = 'http://chaijs.com' |
| 7 | 7 | self.root_path = '/api/' |
| @@ -16,12 +16,22 @@ module Docs · 15 unmodified lines | ||
| 16 | 16 | options[:skip_patterns] = [/\Agenerator/, /\Ainclude/, /\Arelease/] |
| 17 | 17 | |
| 18 | 18 | options[:attribution] = <<-HTML |
| 19 | − © 2000–2017 Kitware, Inc. and Contributors<br> | |
| 19 | + © 2000–2018 Kitware, Inc. and Contributors<br> | |
| 20 | 20 | Licensed under the BSD 3-clause License. |
| 21 | 21 | HTML |
| 22 | 22 | |
| 23 | + version '3.12' do | |
| 24 | + self.release = '3.12.1' | |
| 25 | + self.base_url = 'https://cmake.org/cmake/help/v3.12/' | |
| 26 | + end | |
| 27 | + | |
| 28 | + version '3.11' do | |
| 29 | + self.release = '3.11.4' | |
| 30 | + self.base_url = 'https://cmake.org/cmake/help/v3.11/' | |
| 31 | + end | |
| 32 | + | |
| 23 | 33 | version '3.10' do |
| 24 | − self.release = '3.10.1' | |
| 34 | + self.release = '3.10.3' | |
| 25 | 35 | self.base_url = 'https://cmake.org/cmake/help/v3.10/' |
| 26 | 36 | end |
| 27 | 37 | |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Codeceptjs < UrlScraper |
| 3 | 3 | self.name = 'CodeceptJS' |
| 4 | − self.type = 'codeceptjs' | |
| 4 | + self.type = 'simple' | |
| 5 | 5 | self.root_path = 'index.html' |
| 6 | 6 | self.release = '1.3.1' |
| 7 | 7 | self.base_url = 'https://codecept.io/' |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Crystal < UrlScraper |
| 3 | 3 | self.type = 'crystal' |
| 4 | − self.release = '0.25.1' | |
| 4 | + self.release = '0.26.0' | |
| 5 | 5 | self.base_url = 'https://crystal-lang.org/' |
| 6 | 6 | self.root_path = "api/#{release}/index.html" |
| 7 | 7 | self.initial_paths = %w(docs/index.html) |
| @@ -0,0 +1,37 @@ | ||
| 1 | +module Docs | |
| 2 | + class Dart < FileScraper | |
| 3 | + self.type = 'dart' | |
| 4 | + self.root_path = 'index.html' | |
| 5 | + self.links = { | |
| 6 | + home: 'https://www.dartlang.org/', | |
| 7 | + code: 'https://github.com/dart-lang/sdk' | |
| 8 | + } | |
| 9 | + | |
| 10 | + html_filters.push 'dart/entries', 'dart/clean_html' | |
| 11 | + | |
| 12 | + options[:fix_urls] = ->(url) do | |
| 13 | + # localhost/dart-web_audio/..dart-io/dart-io-library.html > localhost/dart-io/dart-io-library.html | |
| 14 | + url.remove!(/[^\/]+\/\.\./) | |
| 15 | + url | |
| 16 | + end | |
| 17 | + | |
| 18 | + options[:attribution] = <<-HTML | |
| 19 | + © 2012 the Dart project authors<br> | |
| 20 | + Licensed under the Creative Commons Attribution-ShareAlike License v4.0. | |
| 21 | + HTML | |
| 22 | + | |
| 23 | + # Download the documentation from https://www.dartlang.org/tools/sdk/archive | |
| 24 | + | |
| 25 | + version '2' do | |
| 26 | + self.release = '2.0.0' | |
| 27 | + self.dir = '/Users/Thibaut/DevDocs/Docs/Dart2' | |
| 28 | + self.base_url = "https://api.dartlang.org/stable/#{release}/" | |
| 29 | + end | |
| 30 | + | |
| 31 | + version '1' do | |
| 32 | + self.release = '1.24.3' | |
| 33 | + self.dir = '/Users/Thibaut/DevDocs/Docs/Dart1' | |
| 34 | + self.base_url = "https://api.dartlang.org/stable/#{release}/" | |
| 35 | + end | |
| 36 | + end | |
| 37 | +end | |
| @@ -34,6 +34,12 @@ module Docs · 33 unmodified lines | ||
| 34 | 34 | Licensed under the BSD License. |
| 35 | 35 | HTML |
| 36 | 36 | |
| 37 | + version '2.1' do | |
| 38 | + self.release = '2.1.0' | |
| 39 | + self.dir = '/Users/Thibaut/DevDocs/Docs/Django21' | |
| 40 | + self.base_url = 'https://docs.djangoproject.com/en/2.1/' | |
| 41 | + end | |
| 42 | + | |
| 37 | 43 | version '2.0' do |
| 38 | 44 | self.release = '2.0.7' |
| 39 | 45 | self.dir = '/Users/Thibaut/DevDocs/Docs/Django20' |
| @@ -1,6 +1,6 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Docker < UrlScraper |
| 3 | − self.type = 'docker' | |
| 3 | + self.type = 'simple' | |
| 4 | 4 | self.links = { |
| 5 | 5 | home: 'https://docker.com/', |
| 6 | 6 | code: 'https://github.com/docker/docker' |
| @@ -1,6 +1,6 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Electron < UrlScraper |
| 3 | − self.type = 'electron' | |
| 3 | + self.type = 'simple' | |
| 4 | 4 | self.base_url = 'https://electronjs.org/docs' |
| 5 | 5 | self.release = '2.0.2' |
| 6 | 6 | self.links = { |
| @@ -33,6 +33,19 @@ module Docs · 32 unmodified lines | ||
| 33 | 33 | "https://elixir-lang.org/getting-started/introduction.html" ] |
| 34 | 34 | end |
| 35 | 35 | |
| 36 | + version '1.7' do | |
| 37 | + self.release = '1.7.3' | |
| 38 | + self.base_urls = [ | |
| 39 | + "https://hexdocs.pm/elixir/#{release}/", | |
| 40 | + "https://hexdocs.pm/eex/#{release}/", | |
| 41 | + "https://hexdocs.pm/ex_unit/#{release}/", | |
| 42 | + "https://hexdocs.pm/iex/#{release}/", | |
| 43 | + "https://hexdocs.pm/logger/#{release}/", | |
| 44 | + "https://hexdocs.pm/mix/#{release}/", | |
| 45 | + 'https://elixir-lang.org/getting-started/' | |
| 46 | + ] | |
| 47 | + end | |
| 48 | + | |
| 36 | 49 | version '1.6' do |
| 37 | 50 | self.release = '1.6.5' |
| 38 | 51 | self.base_urls = [ |
| @@ -2,7 +2,7 @@ module Docs · 1 unmodified line | ||
| 2 | 2 | class Express < UrlScraper |
| 3 | 3 | self.name = 'Express' |
| 4 | 4 | self.type = 'express' |
| 5 | − self.release = '4.16.1' | |
| 5 | + self.release = '4.16.3' | |
| 6 | 6 | self.base_url = 'http://expressjs.com/en/' |
| 7 | 7 | self.root_path = '4x/api.html' |
| 8 | 8 | self.initial_paths = %w( |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Fish < UrlScraper |
| 3 | 3 | self.name = 'Fish' |
| 4 | − self.type = 'fish' | |
| 4 | + self.type = 'simple' | |
| 5 | 5 | self.root_path = 'index.html' |
| 6 | 6 | self.links = { |
| 7 | 7 | home: 'https://fishshell.com/', |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Flow < UrlScraper |
| 3 | − self.type = 'flow' | |
| 4 | − self.release = '0.75.0' | |
| 3 | + self.type = 'simple' | |
| 4 | + self.release = '0.79.1' | |
| 5 | 5 | self.base_url = 'https://flow.org/en/docs/' |
| 6 | 6 | self.links = { |
| 7 | 7 | home: 'https://flow.org/', |
| @@ -1,6 +1,6 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Gnu < FileScraper |
| 3 | − self.type = 'gnu' | |
| 3 | + self.type = 'simple' | |
| 4 | 4 | self.root_path = 'index.html' |
| 5 | 5 | self.abstract = 'true' |
| 6 | 6 | |
| @@ -0,0 +1,21 @@ | ||
| 1 | +module Docs | |
| 2 | + class Graphite < UrlScraper | |
| 3 | + self.type = 'graphite' | |
| 4 | + self.release = '1.1.3' | |
| 5 | + self.base_url = 'https://graphite.readthedocs.io/en/latest/' | |
| 6 | + self.links = { | |
| 7 | + code: 'https://github.com/graphite-project/graphite-web' | |
| 8 | + } | |
| 9 | + | |
| 10 | + html_filters.push 'graphite/entries', 'graphite/clean_html' | |
| 11 | + | |
| 12 | + options[:container] = '.document > div' | |
| 13 | + options[:skip] = %w(releases.html who-is-using.html composer.html search.html py-modindex.html genindex.html) | |
| 14 | + | |
| 15 | + options[:attribution] = <<-HTML | |
| 16 | + © 2008–2012 Chris Davis<br> | |
| 17 | + © 2011–2016 The Graphite Project<br> | |
| 18 | + Licensed under the Apache License, Version 2.0. | |
| 19 | + HTML | |
| 20 | + end | |
| 21 | +end | |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Grunt < UrlScraper |
| 3 | 3 | self.name = 'Grunt' |
| 4 | − self.type = 'grunt' | |
| 4 | + self.type = 'simple' | |
| 5 | 5 | self.release = '1.0.1' |
| 6 | 6 | self.base_url = 'https://gruntjs.com/' |
| 7 | 7 | self.root_path = 'getting-started' |
| @@ -0,0 +1,23 @@ | ||
| 1 | +module Docs | |
| 2 | + class Handlebars < UrlScraper | |
| 3 | + self.name = 'Handlebars.js' | |
| 4 | + self.slug = 'handlebars' | |
| 5 | + self.type = 'simple' | |
| 6 | + self.release = '4.0.12' | |
| 7 | + self.base_url = 'https://handlebarsjs.com/' | |
| 8 | + self.links = { | |
| 9 | + home: 'https://handlebarsjs.com/', | |
| 10 | + code: 'https://github.com/wycats/handlebars.js/' | |
| 11 | + } | |
| 12 | + | |
| 13 | + html_filters.push 'handlebars/entries', 'handlebars/clean_html', 'title' | |
| 14 | + | |
| 15 | + options[:container] = '#contents' | |
| 16 | + options[:root_title] = 'Handlebars.js' | |
| 17 | + | |
| 18 | + options[:attribution] = <<-HTML | |
| 19 | + © 2011–2017 by Yehuda Katz<br> | |
| 20 | + Licensed under the MIT License. | |
| 21 | + HTML | |
| 22 | + end | |
| 23 | +end | |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Haxe < UrlScraper |
| 3 | 3 | self.name = 'Haxe' |
| 4 | − self.type = 'haxe' | |
| 4 | + self.type = 'simple' | |
| 5 | 5 | self.release = '3.4.7' |
| 6 | 6 | self.base_url = 'https://api.haxe.org/' |
| 7 | 7 | |
| @@ -2,7 +2,7 @@ module Docs · 1 unmodified line | ||
| 2 | 2 | class Immutable < UrlScraper |
| 3 | 3 | self.name = 'Immutable.js' |
| 4 | 4 | self.slug = 'immutable' |
| 5 | − self.type = 'immutable' | |
| 5 | + self.type = 'simple' | |
| 6 | 6 | self.release = '3.8.1' |
| 7 | 7 | self.base_url = 'https://facebook.github.io/immutable-js/docs/' |
| 8 | 8 | self.links = { |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Influxdata < UrlScraper |
| 3 | 3 | self.name = 'InfluxData' |
| 4 | − self.type = 'influxdata' | |
| 4 | + self.type = 'simple' | |
| 5 | 5 | self.release = '1.3' |
| 6 | 6 | self.base_url = 'https://docs.influxdata.com/' |
| 7 | 7 | self.links = { |
| @@ -1,8 +1,8 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Jasmine < UrlScraper |
| 3 | − self.type = 'jasmine' | |
| 4 | − self.release = '3.1.0' | |
| 5 | − self.base_url = 'https://jasmine.github.io/api/3.0/' | |
| 3 | + self.type = 'simple' | |
| 4 | + self.release = '3.2.1' | |
| 5 | + self.base_url = 'https://jasmine.github.io/api/3.2/' | |
| 6 | 6 | self.root_path = 'index.html' |
| 7 | 7 | self.links = { |
| 8 | 8 | home: 'https://jasmine.github.io/', |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Jest < UrlScraper |
| 3 | − self.type = 'jest' | |
| 4 | − self.release = '23.3.0' | |
| 3 | + self.type = 'simple' | |
| 4 | + self.release = '23.5.0' | |
| 5 | 5 | self.base_url = 'https://jestjs.io/docs/en/' |
| 6 | 6 | self.root_path = 'getting-started' |
| 7 | 7 | self.links = { |
| @@ -12,9 +12,29 @@ module Docs · 11 unmodified lines | ||
| 12 | 12 | Licensed under the MIT License. |
| 13 | 13 | HTML |
| 14 | 14 | |
| 15 | + version '1.0' do | |
| 16 | + self.release = '1.0.0' | |
| 17 | + self.base_url = "https://docs.julialang.org/en/v#{release}/" | |
| 18 | + self.type = 'julia' | |
| 19 | + | |
| 20 | + html_filters.push 'julia/entries', 'julia/clean_html' | |
| 21 | + | |
| 22 | + options[:container] = '#docs' | |
| 23 | + end | |
| 24 | + | |
| 25 | + version '0.7' do | |
| 26 | + self.release = '0.7.0' | |
| 27 | + self.base_url = "https://docs.julialang.org/en/v#{release}/" | |
| 28 | + self.type = 'julia' | |
| 29 | + | |
| 30 | + html_filters.push 'julia/entries', 'julia/clean_html' | |
| 31 | + | |
| 32 | + options[:container] = '#docs' | |
| 33 | + end | |
| 34 | + | |
| 15 | 35 | version '0.6' do |
| 16 | 36 | self.release = '0.6.2' |
| 17 | − self.base_url = 'https://docs.julialang.org/en/release-0.6/' | |
| 37 | + self.base_url = "https://docs.julialang.org/en/v#{release}/" | |
| 18 | 38 | self.type = 'julia' |
| 19 | 39 | |
| 20 | 40 | html_filters.push 'julia/entries', 'julia/clean_html' |
| @@ -24,7 +44,7 @@ module Docs · 3 unmodified lines | ||
| 24 | 44 | |
| 25 | 45 | version '0.5' do |
| 26 | 46 | self.release = '0.5.2' |
| 27 | − self.base_url = 'https://docs.julialang.org/en/release-0.5/' | |
| 47 | + self.base_url = "https://docs.julialang.org/en/v#{release}/" | |
| 28 | 48 | self.type = 'sphinx_simple' |
| 29 | 49 | |
| 30 | 50 | html_filters.push 'julia/entries_sphinx', 'julia/clean_html_sphinx', 'sphinx/clean_html' |
| @@ -29,8 +29,21 @@ module Docs · 28 unmodified lines | ||
| 29 | 29 | Laravel is a trademark of Taylor Otwell. |
| 30 | 30 | HTML |
| 31 | 31 | |
| 32 | + version '5.7' do | |
| 33 | + self.release = '5.7.7' | |
| 34 | + self.root_path = '/api/5.7/index.html' | |
| 35 | + self.initial_paths = %w(/docs/5.7/installation /api/5.7/classes.html) | |
| 36 | + | |
| 37 | + options[:only_patterns] = [%r{\A/api/5\.7/}, %r{\A/docs/5\.7/}] | |
| 38 | + | |
| 39 | + options[:fix_urls] = ->(url) do | |
| 40 | + url.sub! %r{#{Regexp.escape(Laravel.base_url)}/docs\/(?!\d)}, "#{Laravel.base_url}/docs/5.7/" | |
| 41 | + url | |
| 42 | + end | |
| 43 | + end | |
| 44 | + | |
| 32 | 45 | version '5.6' do |
| 33 | − self.release = '5.6.12' | |
| 46 | + self.release = '5.6.33' | |
| 34 | 47 | self.root_path = '/api/5.6/index.html' |
| 35 | 48 | self.initial_paths = %w(/docs/5.6/installation /api/5.6/classes.html) |
| 36 | 49 | |
| @@ -1,6 +1,6 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Less < UrlScraper |
| 3 | − self.type = 'less' | |
| 3 | + self.type = 'simple' | |
| 4 | 4 | self.release = '2.7.2' |
| 5 | 5 | self.base_url = 'http://lesscss.org' |
| 6 | 6 | self.root_path = '/features' |
| @@ -2,7 +2,7 @@ module Docs · 1 unmodified line | ||
| 2 | 2 | class Lodash < UrlScraper |
| 3 | 3 | self.name = 'lodash' |
| 4 | 4 | self.slug = 'lodash' |
| 5 | − self.type = 'lodash' | |
| 5 | + self.type = 'simple' | |
| 6 | 6 | self.links = { |
| 7 | 7 | home: 'https://lodash.com/', |
| 8 | 8 | code: 'https://github.com/lodash/lodash/' |
| @@ -2,7 +2,7 @@ module Docs · 1 unmodified line | ||
| 2 | 2 | class Marionette < UrlScraper |
| 3 | 3 | self.name = 'Marionette.js' |
| 4 | 4 | self.slug = 'marionette' |
| 5 | − self.type = 'marionette' | |
| 5 | + self.type = 'simple' | |
| 6 | 6 | self.root_path = 'index' |
| 7 | 7 | self.links = { |
| 8 | 8 | home: 'https://marionettejs.com/', |
| @@ -18,6 +18,13 @@ module Docs · 9 unmodified lines | ||
| 18 | 18 | Licensed under the MIT License. |
| 19 | 19 | HTML |
| 20 | 20 | |
| 21 | + version '4' do | |
| 22 | + self.release = '4.0.0' | |
| 23 | + self.base_url = "https://marionettejs.com/docs/v#{release}/" | |
| 24 | + | |
| 25 | + html_filters.push 'marionette/entries_v3' | |
| 26 | + end | |
| 27 | + | |
| 21 | 28 | version '3' do |
| 22 | 29 | self.release = '3.5.1' |
| 23 | 30 | self.base_url = "https://marionettejs.com/docs/v#{release}/" |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Markdown < UrlScraper |
| 3 | 3 | self.name = 'Markdown' |
| 4 | − self.type = 'markdown' | |
| 4 | + self.type = 'simple' | |
| 5 | 5 | self.base_url = 'http://daringfireball.net/projects/markdown/syntax' |
| 6 | 6 | |
| 7 | 7 | html_filters.push 'markdown/clean_html', 'markdown/entries' |
| @@ -1,6 +1,6 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Mocha < UrlScraper |
| 3 | − self.type = 'mocha' | |
| 3 | + self.type = 'simple' | |
| 4 | 4 | self.release = '5.0.1' |
| 5 | 5 | self.base_url = 'https://mochajs.org/' |
| 6 | 6 | self.links = { |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Mongoose < UrlScraper |
| 3 | 3 | self.name = 'Mongoose' |
| 4 | − self.type = 'mongoose' | |
| 4 | + self.type = 'simple' | |
| 5 | 5 | self.release = '4.13.1' |
| 6 | 6 | self.base_url = 'http://mongoosejs.com/docs/' |
| 7 | 7 | self.root_path = 'index.html' |
| @@ -1,6 +1,6 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Nim < UrlScraper |
| 3 | − self.type = 'nim' | |
| 3 | + self.type = 'simple' | |
| 4 | 4 | self.release = '0.18.0' |
| 5 | 5 | self.base_url = 'https://nim-lang.org/docs/' |
| 6 | 6 | self.root_path = 'overview.html' |
| @@ -23,17 +23,17 @@ module Docs · 22 unmodified lines | ||
| 23 | 23 | HTML |
| 24 | 24 | |
| 25 | 25 | version do |
| 26 | − self.release = '10.6.0' | |
| 26 | + self.release = '10.9.0' | |
| 27 | 27 | self.base_url = 'https://nodejs.org/dist/latest-v10.x/docs/api/' |
| 28 | 28 | end |
| 29 | 29 | |
| 30 | 30 | version '8 LTS' do |
| 31 | − self.release = '8.11.2' | |
| 31 | + self.release = '8.11.4' | |
| 32 | 32 | self.base_url = 'https://nodejs.org/dist/latest-v8.x/docs/api/' |
| 33 | 33 | end |
| 34 | 34 | |
| 35 | 35 | version '6 LTS' do |
| 36 | − self.release = '6.14.2' | |
| 36 | + self.release = '6.14.4' | |
| 37 | 37 | self.base_url = 'https://nodejs.org/dist/latest-v6.x/docs/api/' |
| 38 | 38 | end |
| 39 | 39 | |
| @@ -2,7 +2,7 @@ module Docs · 1 unmodified line | ||
| 2 | 2 | class Npm < UrlScraper |
| 3 | 3 | self.name = 'npm' |
| 4 | 4 | self.type = 'npm' |
| 5 | − self.release = '6.1.0' | |
| 5 | + self.release = '6.4.0' | |
| 6 | 6 | self.base_url = 'https://docs.npmjs.com/' |
| 7 | 7 | self.force_gzip = true |
| 8 | 8 | self.links = { |
| @@ -4,7 +4,7 @@ module Docs · 3 unmodified lines | ||
| 4 | 4 | |
| 5 | 5 | self.name = 'PHP' |
| 6 | 6 | self.type = 'php' |
| 7 | − self.release = '7.2.5' | |
| 7 | + self.release = '7.2.9' | |
| 8 | 8 | self.base_url = 'https://secure.php.net/manual/en/' |
| 9 | 9 | self.root_path = 'index.html' |
| 10 | 10 | self.initial_paths = %w( |
| @@ -0,0 +1,18 @@ | ||
| 1 | +module Docs | |
| 2 | + class Puppeteer < Github | |
| 3 | + self.release = '1.8.0' | |
| 4 | + self.base_url = 'https://github.com/GoogleChrome/puppeteer/blob/v1.8.0/docs/api.md' | |
| 5 | + self.links = { | |
| 6 | + code: 'https://github.com/GoogleChrome/puppeteer' | |
| 7 | + } | |
| 8 | + | |
| 9 | + html_filters.push 'puppeteer/entries', 'puppeteer/clean_html' | |
| 10 | + | |
| 11 | + options[:container] = '.markdown-body' | |
| 12 | + | |
| 13 | + options[:attribution] = <<-HTML | |
| 14 | + © 2017 Google Inc<br> | |
| 15 | + Licensed under the Apache License 2.0. | |
| 16 | + HTML | |
| 17 | + end | |
| 18 | +end | |
| @@ -0,0 +1,20 @@ | ||
| 1 | +module Docs | |
| 2 | + class Pygame < UrlScraper | |
| 3 | + self.type = 'simple' | |
| 4 | + self.release = '1.9.4' | |
| 5 | + self.root_path = 'py-modindex.html' | |
| 6 | + self.links = { | |
| 7 | + home: 'https://www.pygame.org/', | |
| 8 | + code: 'https://github.com/pygame/pygame' | |
| 9 | + } | |
| 10 | + | |
| 11 | + html_filters.push 'pygame/clean_html', 'pygame/entries' | |
| 12 | + | |
| 13 | + options[:only_patterns] = [/ref\//] | |
| 14 | + | |
| 15 | + options[:attribution] = <<-HTML | |
| 16 | + © Pygame Developpers.<br> | |
| 17 | + Licensed under the GNU LGPL License version 2.1. | |
| 18 | + HTML | |
| 19 | + end | |
| 20 | +end | |
| @@ -0,0 +1,121 @@ | ||
| 1 | +module Docs | |
| 2 | + class Qt < UrlScraper | |
| 3 | + self.name = 'Qt' | |
| 4 | + self.type = 'qt' | |
| 5 | + self.initial_paths = %w(classes.html qmltypes.html) | |
| 6 | + self.root_path = 'index.html' | |
| 7 | + self.links = { | |
| 8 | + home: 'https://www.qt.io', | |
| 9 | + code: 'https://code.qt.io/cgit/' | |
| 10 | + } | |
| 11 | + | |
| 12 | + html_filters.push 'qt/entries', 'qt/clean_html' | |
| 13 | + | |
| 14 | + options[:container] = '.main' | |
| 15 | + options[:max_image_size] = 156_000 | |
| 16 | + options[:skip_patterns] = [ | |
| 17 | + # License, copyright attributions | |
| 18 | + /3rdparty/, | |
| 19 | + /attribution/, | |
| 20 | + /license/, | |
| 21 | + /licensing/, | |
| 22 | + | |
| 23 | + # Examples, guides, tutorials | |
| 24 | + /example/, | |
| 25 | + /guide$/, | |
| 26 | + /tutorial/, | |
| 27 | + /porting/, | |
| 28 | + /usecase/, | |
| 29 | + /topic/, | |
| 30 | + /^modelview/, | |
| 31 | + /deploy(ing|ment)/, | |
| 32 | + /building/, | |
| 33 | + | |
| 34 | + # Old versions, changelog | |
| 35 | + /obsolete/, | |
| 36 | + /compatibility/, | |
| 37 | + /^whatsnew/, | |
| 38 | + /^newclasses/, | |
| 39 | + | |
| 40 | + # Deprecated modules | |
| 41 | + /(qtopengl|qgl)/, | |
| 42 | + /qt?script/, | |
| 43 | + | |
| 44 | + # Indexes | |
| 45 | + /members/, | |
| 46 | + /module/, | |
| 47 | + /overview/, | |
| 48 | + /^qopenglfunctions/, | |
| 49 | + | |
| 50 | + # Tooling | |
| 51 | + /^(qt)?(linguist|assistant|qdbusviewer)/, | |
| 52 | + ] | |
| 53 | + | |
| 54 | + options[:skip] = [ | |
| 55 | + "qt5-intro.html", | |
| 56 | + "compatmap.html", | |
| 57 | + | |
| 58 | + # Indexes | |
| 59 | + "classes.html", | |
| 60 | + "qtmodules.html", | |
| 61 | + "modules-qml.html", | |
| 62 | + "modules-cpp.html", | |
| 63 | + "functions.html", | |
| 64 | + "namespaces.html", | |
| 65 | + "qmltypes.html", | |
| 66 | + "qt3d-qml.html", | |
| 67 | + "qmlbasictypes.html", | |
| 68 | + "guibooks.html", | |
| 69 | + "annotated.html", | |
| 70 | + "overviews-main.html", | |
| 71 | + "reference-overview.html", | |
| 72 | + | |
| 73 | + # Tutorials | |
| 74 | + "qtvirtualkeyboard-build.html", | |
| 75 | + | |
| 76 | + # Copyright | |
| 77 | + "trademarks.html", | |
| 78 | + "lgpl.html", | |
| 79 | + "bughowto.html", | |
| 80 | + | |
| 81 | + # Changelogs | |
| 82 | + "changes.html", | |
| 83 | + "qtlocation-changes.html", | |
| 84 | + "sourcebreaks.html", | |
| 85 | + | |
| 86 | + # Best practice guides | |
| 87 | + "accessible.html", | |
| 88 | + "accessible-qtquick.html", | |
| 89 | + "sharedlibrary.html", | |
| 90 | + "exceptionsafety.html", | |
| 91 | + "scalability.html", | |
| 92 | + "session.html", | |
| 93 | + "appicon.html", | |
| 94 | + "accelerators.html", | |
| 95 | + | |
| 96 | + # Other | |
| 97 | + "ecmascript.html", | |
| 98 | + "qtremoteobjects-interaction.html", | |
| 99 | + ] | |
| 100 | + | |
| 101 | + options[:attribution] = <<-HTML | |
| 102 | + © The Qt Company Ltd<br> | |
| 103 | + Licensed under the GNU Free Documentation License, Version 1.3. | |
| 104 | + HTML | |
| 105 | + | |
| 106 | + version '5.11' do | |
| 107 | + self.release = '5.11' | |
| 108 | + self.base_url = 'https://doc.qt.io/qt-5/' | |
| 109 | + end | |
| 110 | + | |
| 111 | + version '5.9' do | |
| 112 | + self.release = '5.9' | |
| 113 | + self.base_url = 'https://doc.qt.io/qt-5.9/' | |
| 114 | + end | |
| 115 | + | |
| 116 | + version '5.6' do | |
| 117 | + self.release = '5.6' | |
| 118 | + self.base_url = 'https://doc.qt.io/qt-5.6/' | |
| 119 | + end | |
| 120 | + end | |
| 121 | +end | |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Redis < UrlScraper |
| 3 | 3 | self.type = 'redis' |
| 4 | − self.release = '4.0.9' | |
| 4 | + self.release = '4.0.11' | |
| 5 | 5 | self.base_url = 'https://redis.io/commands' |
| 6 | 6 | self.links = { |
| 7 | 7 | home: 'https://redis.io/', |
| @@ -1,6 +1,6 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Redux < UrlScraper |
| 3 | − self.type = 'redux' | |
| 3 | + self.type = 'simple' | |
| 4 | 4 | self.release = '3.7.2' |
| 5 | 5 | self.base_url = 'http://redux.js.org/docs/' |
| 6 | 6 | self.links = { |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Requirejs < UrlScraper |
| 3 | 3 | self.name = 'RequireJS' |
| 4 | − self.type = 'requirejs' | |
| 4 | + self.type = 'simple' | |
| 5 | 5 | self.release = '2.3.5' |
| 6 | 6 | self.base_url = 'http://requirejs.org/docs/' |
| 7 | 7 | self.links = { |
| @@ -1,9 +1,9 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Rust < UrlScraper |
| 3 | 3 | self.type = 'rust' |
| 4 | − self.release = '1.26.0' | |
| 4 | + self.release = '1.29.1' | |
| 5 | 5 | self.base_url = 'https://doc.rust-lang.org/' |
| 6 | − self.root_path = 'book/first-edition/index.html' | |
| 6 | + self.root_path = 'book/second-edition/index.html' | |
| 7 | 7 | self.initial_paths = %w( |
| 8 | 8 | reference/introduction.html |
| 9 | 9 | collections/index.html |
| @@ -17,13 +17,13 @@ module Docs · 7 unmodified lines | ||
| 17 | 17 | html_filters.push 'rust/entries', 'rust/clean_html' |
| 18 | 18 | |
| 19 | 19 | options[:only_patterns] = [ |
| 20 | − /\Abook\/first-edition\//, | |
| 20 | + /\Abook\/second-edition\//, | |
| 21 | 21 | /\Areference\//, |
| 22 | 22 | /\Acollections\//, |
| 23 | 23 | /\Astd\// ] |
| 24 | 24 | |
| 25 | − options[:skip] = %w(book/first-edition/README.html) | |
| 26 | − options[:skip_patterns] = [/(?<!\.html)\z/] | |
| 25 | + options[:skip] = %w(book/second-edition/README.html) | |
| 26 | + options[:skip_patterns] = [/(?<!\.html)\z/, /\/print\.html/] | |
| 27 | 27 | |
| 28 | 28 | options[:fix_urls] = ->(url) do |
| 29 | 29 | url.sub! %r{(#{Rust.base_url}.+/)\z}, '\1index.html' |
| @@ -1,8 +1,8 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Typescript < UrlScraper |
| 3 | 3 | self.name = 'TypeScript' |
| 4 | − self.type = 'typescript' | |
| 5 | − self.release = '2.9.0' | |
| 4 | + self.type = 'simple' | |
| 5 | + self.release = '3.0.1' | |
| 6 | 6 | self.base_url = 'https://www.typescriptlang.org/docs/' |
| 7 | 7 | self.root_path = 'tutorial.html' |
| 8 | 8 | self.links = { |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Vagrant < UrlScraper |
| 3 | 3 | self.name = 'Vagrant' |
| 4 | − self.type = 'vagrant' | |
| 4 | + self.type = 'simple' | |
| 5 | 5 | self.release = '2.1.1' |
| 6 | 6 | self.base_url = 'https://www.vagrantup.com/docs/' |
| 7 | 7 | self.root_path = 'index.html' |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Vulkan < UrlScraper |
| 3 | 3 | self.name = 'Vulkan' |
| 4 | − self.type = 'vulkan' | |
| 4 | + self.type = 'simple' | |
| 5 | 5 | self.release = '1.0.59' |
| 6 | 6 | self.base_url = 'https://www.khronos.org/registry/vulkan/specs/1.0/' |
| 7 | 7 | self.root_path = 'apispec.html' |
| @@ -4,7 +4,7 @@ module Docs · 3 unmodified lines | ||
| 4 | 4 | self.type = 'webpack' |
| 5 | 5 | |
| 6 | 6 | version do |
| 7 | − self.release = '4.12.0' | |
| 7 | + self.release = '4.16.5' | |
| 8 | 8 | self.base_url = 'https://webpack.js.org/' |
| 9 | 9 | self.root_path = 'guides/' |
| 10 | 10 | self.initial_paths = %w( |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | module Docs |
| 2 | 2 | class Yarn < UrlScraper |
| 3 | − self.type = 'yarn' | |
| 4 | − self.release = '1.7.0' | |
| 3 | + self.type = 'simple' | |
| 4 | + self.release = '1.9.4' | |
| 5 | 5 | self.base_url = 'https://yarnpkg.com/en/docs/' |
| 6 | 6 | self.links = { |
| 7 | 7 | home: 'https://yarnpkg.com/', |