Unified · Split
| @@ -290,6 +290,11 @@ credits = [ · 289 unmodified lines | ||
| 290 | 290 | '2005-2018 Linus Torvalds and others', |
| 291 | 291 | 'GPLv2', |
| 292 | 292 | 'https://raw.githubusercontent.com/git/git/master/COPYING' |
| 293 | + ], [ | |
| 294 | + 'GnuCOBOL', | |
| 295 | + 'Free Software Foundation', | |
| 296 | + 'GFDL', | |
| 297 | + 'https://www.gnu.org/licenses/fdl-1.3.en.html' | |
| 293 | 298 | ], [ |
| 294 | 299 | 'Go', |
| 295 | 300 | 'Google, Inc.', |
| @@ -0,0 +1,56 @@ | ||
| 1 | +module Docs | |
| 2 | + class GnuCobol | |
| 3 | + class CleanHtmlFilter < Filter | |
| 4 | + def call | |
| 5 | + # Replace the title | |
| 6 | + at_css('.settitle').content = 'GnuCOBOL' | |
| 7 | + | |
| 8 | + # Remove the Table of Contents | |
| 9 | + # It's huge and the DevDocs sidebar is basically a direct copy | |
| 10 | + css('.contents, .contents-heading').remove | |
| 11 | + | |
| 12 | + # Remove the changelog | |
| 13 | + at_css('p').remove | |
| 14 | + at_css('ol').remove | |
| 15 | + | |
| 16 | + # Remove everything after Appendix B | |
| 17 | + # This includes the license text, the document changelog, the compiler changelog and the footnote | |
| 18 | + start_element = at_css('a[name="Appendix-C-_002d-GNU-Free-Documentation-License"]').previous_element | |
| 19 | + next_element = start_element.next_element | |
| 20 | + until start_element.nil? | |
| 21 | + start_element.remove | |
| 22 | + start_element = next_element | |
| 23 | + next_element = start_element.nil? ? nil : start_element.next_element | |
| 24 | + end | |
| 25 | + | |
| 26 | + # Make headers bigger | |
| 27 | + css('h4').each {|node| node.name = 'h3'} | |
| 28 | + | |
| 29 | + # Remove the newlines | |
| 30 | + # All paragraphs are inside <p> tags already anyways | |
| 31 | + css('br').remove | |
| 32 | + | |
| 33 | + # The original document contains sub-headers surrounded by equal signs | |
| 34 | + # Convert that to actual header elements | |
| 35 | + css('div[align="center"]').each do |node| | |
| 36 | + if node.content.include?('=' * 50) | |
| 37 | + node.replace('<hr>') | |
| 38 | + else | |
| 39 | + node.remove_attribute('align') | |
| 40 | + node.name = 'h4' | |
| 41 | + end | |
| 42 | + end | |
| 43 | + | |
| 44 | + # Remove all hr's after h4's | |
| 45 | + css('h4').each do |node| | |
| 46 | + next_element = node.next_element | |
| 47 | + if !next_element.nil? && next_element.name == 'hr' | |
| 48 | + next_element.remove | |
| 49 | + end | |
| 50 | + end | |
| 51 | + | |
| 52 | + doc | |
| 53 | + end | |
| 54 | + end | |
| 55 | + end | |
| 56 | +end | |
| @@ -0,0 +1,50 @@ | ||
| 1 | +module Docs | |
| 2 | + class GnuCobol | |
| 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('.contents > ul > li:not(:last-child)').each do |node| | |
| 10 | + parent = node.at_css('a') | |
| 11 | + | |
| 12 | + entries << create_entry(parent, parent) | |
| 13 | + | |
| 14 | + node.css('ul a').each do |link| | |
| 15 | + entries << create_entry(parent, link) | |
| 16 | + end | |
| 17 | + end | |
| 18 | + | |
| 19 | + entries.compact | |
| 20 | + end | |
| 21 | + | |
| 22 | + def create_entry(parent_link, current_link) | |
| 23 | + name = current_link.content | |
| 24 | + id = current_link['href'][1..-1] | |
| 25 | + type = parent_link.content | |
| 26 | + | |
| 27 | + # The navigation link don't actually navigate to the correct header | |
| 28 | + # Instead, it references an `a` tag above it | |
| 29 | + # The `a` tag it is referencing is removed by a filter further down the pipeline | |
| 30 | + # This adds the id to the correct header element | |
| 31 | + target_node = at_css("a[name='#{id}']") | |
| 32 | + target_node.next_element.next_element['id'] = id | |
| 33 | + | |
| 34 | + if name.start_with?('Appendix') | |
| 35 | + type = 'Appendices' | |
| 36 | + end | |
| 37 | + | |
| 38 | + # Everything after Appendix B is removed by the clean_html filter | |
| 39 | + ignored_names = [ | |
| 40 | + 'Appendix C - GNU Free Documentation License', | |
| 41 | + 'Appendix D - Summary of Document Changes', | |
| 42 | + 'Appendix E - Summary of Compiler Changes since 2009 and version v1-1', | |
| 43 | + 'Index' | |
| 44 | + ] | |
| 45 | + | |
| 46 | + ignored_names.include?(name) ? nil : [name, id, type] | |
| 47 | + end | |
| 48 | + end | |
| 49 | + end | |
| 50 | +end | |
| @@ -0,0 +1,20 @@ | ||
| 1 | +module Docs | |
| 2 | + class GnuCobol < UrlScraper | |
| 3 | + self.name = 'GnuCOBOL' | |
| 4 | + self.slug = 'gnu_cobol' | |
| 5 | + self.type = 'simple' | |
| 6 | + self.release = '2.2' | |
| 7 | + self.base_url = 'https://open-cobol.sourceforge.io/HTML/gnucobpg.html' | |
| 8 | + self.links = { | |
| 9 | + home: 'https://sourceforge.net/projects/open-cobol/', | |
| 10 | + code: 'https://sourceforge.net/p/open-cobol/code/HEAD/tree/trunk/' | |
| 11 | + } | |
| 12 | + | |
| 13 | + html_filters.push 'gnu_cobol/entries', 'gnu_cobol/clean_html' | |
| 14 | + | |
| 15 | + options[:attribution] = <<-HTML | |
| 16 | + Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.<br> | |
| 17 | + Licensed under the GNU Free Documentation License. | |
| 18 | + HTML | |
| 19 | + end | |
| 20 | +end | |