88 lines · 2.7 KB · Ruby
RawDownload
module Docs  class Haskell < UrlScraper    self.name = 'Haskell'    self.type = 'haskell'    self.root_path = 'users_guide/index.html'    self.initial_paths = %w(libraries/index.html)    self.links = {      home: 'https://www.haskell.org/'    }     html_filters.push 'haskell/entries', 'haskell/clean_html'     options[:container] = ->(filter) {filter.subpath.start_with?('users_guide') ? '.body' : '#content'}     options[:only_patterns] = [/\Alibraries\//, /\Ausers_guide\//]     options[:skip_patterns] = [      /-notes/,      /editing-guide/,      /src\//,      /doc-index/,      /haskell2010/,      /ghc-/,      /Cabal-/,      /Compiler-Hoopl-Internals\.html\z/i,      /Control-Exception-Base\.html\z/i,      /Data-Binary-Get-Internal\.html\z/i,      /Language-Haskell-TH-Lib\.html\z/i,      /Text-PrettyPrint\.html\z/i,      /Data-OldTypeable-Internal\.html\z/i,      /Data-Typeable-Internal\.html\z/i,      /GHC-IO-Encoding-Types\.html\z/i,      /System-Posix-Process-Internals\.html\z/i,      /Data-Map-Strict-Internal\.html\z/i,      /Data-IntMap-Internal\.html\z/i,      /Data-Set-Internal\.html\z/i,      /Data-Map-Internal\.html\z/i,      /Data-Sequence-Internal\.html\z/i    ]     options[:skip] = %w(      users_guide/license.html      users_guide/genindex.html      users_guide/search.html    )     options[:attribution] = ->(filter) do      if filter.subpath.start_with?('users_guide')        <<-HTML          &copy; 2002&ndash;2007 The University Court of the University of Glasgow. All rights reserved.<br>          Licensed under the Glasgow Haskell Compiler License.        HTML      else        <<-HTML          &copy; The University of Glasgow and others<br>          Licensed under a BSD-style license (see top of the page).        HTML      end    end     version '9' do      self.release = '9.12.1'      self.base_url = "https://downloads.haskell.org/~ghc/#{release}/docs/"      options[:container] = ->(filter) {filter.subpath.start_with?('users_guide') ? '.document' : '#content'}    end     version '8' do      self.release = '8.10.2'      self.base_url = "https://downloads.haskell.org/~ghc/#{release}/docs/html/"    end     version '7' do      self.release = '7.10.3'      self.base_url = "https://downloads.haskell.org/~ghc/#{release}/docs/html/"      self.root_path = 'libraries/index.html'       options[:only_patterns] = [/\Alibraries\//]    end     def get_latest_version(opts)      doc = fetch_doc('https://www.haskell.org/ghc/download.html', opts)      links = doc.css('a').to_a      versions = links.map {|link| link.content.scan(/\A([0-9.]+)\Z/)}      versions.find {|version| !version.empty?}[0][0]    end   endend