diff --git a/assets/stylesheets/pages/_haskell.scss b/assets/stylesheets/pages/_haskell.scss
index 29928795..4c98f778 100644
--- a/assets/stylesheets/pages/_haskell.scss
+++ b/assets/stylesheets/pages/_haskell.scss
@@ -1,4 +1,4 @@
-._haskell {
+._haskell-api {
> h2 { @extend %block-heading; }
> h3 { @extend %block-label; }
h4 { font-size: 1em; }
@@ -9,10 +9,13 @@
white-space: normal;
@extend %code;
}
- p.src { @extend %block-label, %label-blue; }
+ p.src {
+ font-size: .8125rem;
+ @extend %block-label, %label-blue;
+ }
dt.src { white-space: normal; }
- .top > .subs { margin-left: 2em; }
+ > .subs { margin-left: 2em; }
.subs p.src { margin-top: 1em; }
dt > code, .complexity, .version { @extend %label; }
diff --git a/lib/docs/filters/haskell/clean_html.rb b/lib/docs/filters/haskell/clean_html.rb
index 130dfe69..14ea2433 100644
--- a/lib/docs/filters/haskell/clean_html.rb
+++ b/lib/docs/filters/haskell/clean_html.rb
@@ -2,17 +2,29 @@ module Docs
class Haskell
class CleanHtmlFilter < Filter
def call
- root_page? ? root : other
+ if root_page? || !result[:entries].empty?
+ subpath.start_with?('users_guide') ? guide : api
+ doc.inner_html = %(
#{doc.inner_html}
)
+ doc.child.before(at_css('h1'))
+ end
+
doc
end
- def root
- css('#description', '#module-list').each do |node|
- node.before(node.children).remove
- end
+ def guide
+ css('#indices-and-tables + ul', '#indices-and-tables').remove
+
+ Docs::Sphinx::CleanHtmlFilter.new(doc, context, result).call
end
- def other
+ def api
+ if root_page?
+ css('#description', '#module-list').each do |node|
+ node.before(node.children).remove
+ end
+ return doc
+ end
+
css('h1').each do |node|
node.remove if node.content == 'Documentation'
end
@@ -28,9 +40,9 @@ module Docs
node.before(node.children).remove
end
- css('#synopsis').remove
+ css('#synopsis', '.selflink').remove
- css('#interface', 'h2 code').each do |node|
+ css('#interface', 'h2 code', 'span.keyword', 'div.top', 'div.doc', 'code code', '.inst-left').each do |node|
node.before(node.children).remove
end
diff --git a/lib/docs/filters/haskell/entries.rb b/lib/docs/filters/haskell/entries.rb
index b134ede0..05986e14 100644
--- a/lib/docs/filters/haskell/entries.rb
+++ b/lib/docs/filters/haskell/entries.rb
@@ -23,10 +23,18 @@ module Docs
Data-ByteString-Builder-Prim.html)
def get_name
- at_css('#module-header .caption').content.strip
+ if subpath.start_with?('users_guide')
+ name = at_css('h1').content
+ name.remove! "\u{00B6}"
+ name
+ else
+ at_css('#module-header .caption').content
+ end
end
def get_type
+ return 'Guide' if subpath.start_with?('users_guide')
+
%w(System.Posix System.Win32 Control.Monad).each do |type|
return type if name.start_with?(type)
end
@@ -41,6 +49,7 @@ module Docs
ADD_SUB_ENTRIES_KEYWORDS = %w(class module newtype)
def additional_entries
+ return [] if subpath.start_with?('users_guide')
return [] if IGNORE_ENTRIES_PATHS.include?(subpath.split('/').last)
css('#synopsis > ul > li').each_with_object [] do |node, entries|
@@ -66,7 +75,7 @@ module Docs
end
def include_default_entry?
- at_css('#synopsis > ul > li')
+ subpath.start_with?('users_guide') || at_css('#synopsis > ul > li')
end
end
end
diff --git a/lib/docs/scrapers/haskell.rb b/lib/docs/scrapers/haskell.rb
index 0e4d0abf..52b7902c 100755
--- a/lib/docs/scrapers/haskell.rb
+++ b/lib/docs/scrapers/haskell.rb
@@ -2,15 +2,17 @@ module Docs
class Haskell < UrlScraper
self.name = 'Haskell'
self.type = 'haskell'
- self.release = '7.10.3'
- self.base_url = "https://downloads.haskell.org/~ghc/#{release}/docs/html/libraries/"
- self.root_path = 'index.html'
+ self.root_path = 'users_guide/index.html'
+ self.initial_paths = %w(libraries/index.html)
html_filters.push 'haskell/entries', 'haskell/clean_html'
- options[:container] = '#content'
+ 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/,
@@ -26,10 +28,37 @@ module Docs
/GHC-IO-Encoding-Types\.html\z/i,
/System-Posix-Process-Internals\.html\z/i
]
+ options[:skip] = %w(
+ users_guide/license.html
+ users_guide/genindex.html
+ users_guide/search.html
+ )
- options[:attribution] = <<-HTML
- © The University of Glasgow and others
- Licensed under a BSD-style license (see top of the page).
- HTML
+ options[:attribution] = ->(filter) do
+ if filter.subpath.start_with?('users_guide')
+ <<-HTML
+ © 2002–2007 The University Court of the University of Glasgow. All rights reserved.
+ Licensed under the Glasgow Haskell Compiler License.
+ HTML
+ else
+ <<-HTML
+ © The University of Glasgow and others
+ Licensed under a BSD-style license (see top of the page).
+ HTML
+ end
+ end
+
+ version '8' do
+ self.release = '8.0.1'
+ 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
end
end