Update PostgreSQL documentation (10.1)

pull/699/merge
Thibaut Courouble 7 years ago
parent 0342854a1f
commit e7048a87f6

@ -1,19 +1,24 @@
._postgres { ._postgres {
padding-left: 1rem; padding-left: 1rem;
h1, h1 ~ p, h1 ~ pre, h1 ~ blockquote, h2, .NAVFOOTER { margin-left: -1rem; } h1, h1 ~ p, h1 ~ pre, h1 ~ ul, h1 ~ blockquote, h2, .navfooter { margin-left: -1rem; }
h2 { @extend %block-heading; } h2 { @extend %block-heading; }
.VARIABLELIST dt { @extend %block-label, %label-blue; } .variablelist dt { @extend %block-label, %label-blue; }
blockquote.NOTE, blockquote.IMPORTANT, blockquote.TIP, blockquote.CAUTION { @extend %note; } blockquote.note, blockquote.important, blockquote.tip, blockquote.caution { @extend %note; }
blockquote.TIP { @extend %note-green; } blockquote.tip { @extend %note-green; }
blockquote.CAUTION { @extend %note-orange; } blockquote.caution { @extend %note-orange; }
blockquote > h3 {
font-size: .875rem;
margin: 0 0 .25rem;
}
p > code { @extend %label; } p > code { @extend %label; }
p.c2 { font-weight: $boldFontWeight; } p.c2 { font-weight: $boldFontWeight; }
.NAVFOOTER > table { width: 100%; } .navfooter > table { width: 100%; }
td[align=center] { text-align: center; } td[align=center] { text-align: center; }
td[align=right] { text-align: right; } td[align=right] { text-align: right; }
} }

@ -13,18 +13,22 @@ module Docs
def other def other
@doc = at_css('#docContent') @doc = at_css('#docContent')
css('.NAVHEADER', 'hr', '.NAVFOOTER a[accesskey="H"]').remove css('.navheader', 'hr', '.navfooter a[accesskey="H"]').remove
unless at_css('h1')
at_css('.refnamediv h2, .titlepage h2').name = 'h1'
end
css('a[name]').each do |node| css('a[name]').each do |node|
node.parent['id'] = node['name'] node.parent['id'] = node['name']
node.before(node.children).remove node.before(node.children).remove
end end
css('div.SECT1', 'pre > kbd', 'tt > code', 'h1 > tt', '> .CHAPTER', 'div.NOTE', '.APPENDIX').each do |node| css('div.sect1', '.refentry', '.refnamediv', '.refentrytitle', '.refsynopsisdiv', 'pre > kbd', 'tt > code', 'h1 > tt', '> .chapter', '.appendix', '.titlepage', 'div:not([class]):not([id])', 'br', 'a.indexterm', 'acronym', '.productname', 'div.itemizedlist', 'span.sect2', 'span.application', 'em.replaceable', 'span.term').each do |node|
node.before(node.children).remove node.before(node.children).remove
end end
css('div.CAUTION table.CAUTION').each do |node| css('div.caution table.caution').each do |node|
parent = node.parent parent = node.parent
title = node.at_css('.c2, .c3, .c4, .c5').content title = node.at_css('.c2, .c3, .c4, .c5').content
node.replace(node.css('p')) node.replace(node.css('p'))
@ -43,11 +47,27 @@ module Docs
node.remove_attribute 'valign' node.remove_attribute 'valign'
end end
css('.sect2 > h3').each do |node|
node.name = 'h2'
end
css('.sect3 > h4').each do |node|
node.name = 'h3'
end
css('tt').each do |node| css('tt').each do |node|
node.name = 'code' node.name = 'code'
end end
css('.REFSYNOPSISDIV > p').each do |node| css('div.note', 'div.important', 'div.tip', 'div.caution').each do |node|
if node.at_css('blockquote')
node.before(node.children).remove
else
node.name = 'blockquote'
end
end
css('.refsynopsisdiv > p').each do |node|
node.name = 'pre' node.name = 'pre'
node.content = node.content node.content = node.content
end end
@ -56,9 +76,18 @@ module Docs
node.before(node.children).remove node.before(node.children).remove
end end
css('pre.SYNOPSIS', 'pre.PROGRAMLISTING').each do |node| css('code').each do |node|
node.inner_html = node.inner_html.gsub(/\s*\n\s*/, ' ')
end
css('pre.synopsis', 'pre.programlisting').each do |node|
node['data-language'] = 'sql' node['data-language'] = 'sql'
end end
css('h1', 'ul', 'li', 'pre').each do |node|
node.remove_attribute 'class'
node.remove_attribute 'style'
end
end end
end end
end end

@ -90,33 +90,33 @@ module Docs
return config_additional_entries if type && type.include?('Configuration') return config_additional_entries if type && type.include?('Configuration')
return data_types_additional_entries if type == 'Data Types' return data_types_additional_entries if type == 'Data Types'
return command_additional_entries if type == 'Commands' return command_additional_entries if type == 'Commands'
return get_heading_entries('h3[id]') if slug == 'functions-xml' return get_heading_entries('h3[id], .sect3[id] > h3:first-child') if slug == 'functions-xml'
entries = get_heading_entries('h2[id]') entries = get_heading_entries('h2[id], .sect2[id] > h2:first-child')
case slug case slug
when 'queries-union' when 'queries-union'
entries.concat get_custom_entries('p > .LITERAL:first-child') entries.concat get_custom_entries('p > .literal:first-child')
when 'queries-table-expressions' when 'queries-table-expressions'
entries.concat get_heading_entries('h3[id]') entries.concat get_heading_entries('h3[id], .sect3[id] > h3:first-child')
entries.concat get_custom_entries('dt > .LITERAL:first-child') entries.concat get_custom_entries('dt > .literal:first-child')
when 'functions-logical' when 'functions-logical'
entries.concat get_custom_entries('> table td:first-child > code') entries.concat get_custom_entries('> table td:first-child > code')
when 'functions-formatting' when 'functions-formatting'
entries.concat get_custom_entries('#FUNCTIONS-FORMATTING-TABLE td:first-child > code') entries.concat get_custom_entries('#FUNCTIONS-FORMATTING-TABLE td:first-child > code')
when 'functions-admin' when 'functions-admin'
entries.concat get_custom_entries('.TABLE td:first-child > code') entries.concat get_custom_entries('.table td:first-child > code')
when 'functions-string' when 'functions-string'
entries.concat get_custom_entries('> div[id^="FUNC"] td:first-child > code') entries.concat get_custom_entries('> div[id^="FUNC"] td:first-child > code')
entries.concat get_custom_entries('> div[id^="FORMAT"] td:first-child > code') entries.concat get_custom_entries('> div[id^="FORMAT"] td:first-child > code')
else else
if type && type.start_with?('Functions') if type && type.start_with?('Functions')
entries.concat get_custom_entries('> .TABLE td:first-child > code.LITERAL:first-child') entries.concat get_custom_entries('> .table td:first-child > code.literal:first-child')
entries.concat get_custom_entries('> .TABLE td:first-child > code.FUNCTION:first-child') entries.concat get_custom_entries('> .table td:first-child > code.function:first-child')
entries.concat get_custom_entries('> .TABLE td:first-child > code:not(.LITERAL):first-child + code.LITERAL') entries.concat get_custom_entries('> .table td:first-child > code:not(.literal):first-child + code.literal')
entries.concat get_custom_entries('> .TABLE td:first-child > p > code.LITERAL:first-child') entries.concat get_custom_entries('> .table td:first-child > p > code.literal:first-child')
entries.concat get_custom_entries('> .TABLE td:first-child > p > code.FUNCTION:first-child') entries.concat get_custom_entries('> .table td:first-child > p > code.function:first-child')
entries.concat get_custom_entries('> .TABLE td:first-child > p > code:not(.LITERAL):first-child + code.LITERAL') entries.concat get_custom_entries('> .table td:first-child > p > code:not(.literal):first-child + code.literal')
if slug == 'functions-comparison' && !at_css('#FUNCTIONS-COMPARISON-PRED-TABLE') # before 9.6 if slug == 'functions-comparison' && !at_css('#FUNCTIONS-COMPARISON-PRED-TABLE') # before 9.6
entries.concat %w(IS NULL BETWEEN DISTINCT\ FROM).map { |name| ["#{self.name}: #{name}"] } entries.concat %w(IS NULL BETWEEN DISTINCT\ FROM).map { |name| ["#{self.name}: #{name}"] }
end end
@ -127,8 +127,8 @@ module Docs
end end
def config_additional_entries def config_additional_entries
css('.VARIABLELIST dt[id]').map do |node| css('.variablelist dt[id]').map do |node|
name = node.at_css('.VARNAME').content name = node.at_css('.varname').content
["Config: #{name}", node['id']] ["Config: #{name}", node['id']]
end end
end end
@ -136,27 +136,27 @@ module Docs
def data_types_additional_entries def data_types_additional_entries
selector = case slug selector = case slug
when 'rangetypes' when 'rangetypes'
'li > p > .TYPE:first-child' 'li > p > .type:first-child'
when 'datatype-textsearch' when 'datatype-textsearch'
'.SECT2 > .TYPE' '.title > .type, .sect2 > .type'
else else
'.CALSTABLE td:first-child > .TYPE' '.table-contents td:first-child > .type, .calstable td:first-child > .type'
end end
get_custom_entries(selector) get_custom_entries(selector)
end end
def command_additional_entries def command_additional_entries
css('.REFSECT2[id^="SQL"]').each_with_object([]) do |node, entries| css('.refsect2[id^="SQL"]').each_with_object([]) do |node, entries|
next unless heading = node.at_css('h3') next unless heading = node.at_css('h3')
next unless heading.content.strip =~ /[A-Z_\-]+ Clause/ next unless heading.content.strip =~ /[A-Z_\-]+ Clause/
name = heading.at_css('.LITERAL').content name = heading.at_css('.literal').content
name.prepend "#{self.name} ... " name.prepend "#{self.name} ... "
entries << [name, node['id']] entries << [name, node['id']]
end end
end end
def include_default_entry? def include_default_entry?
!initial_page? && !at_css('.TOC') && type !initial_page? && (!at_css('.toc') || at_css('.sect2, .variablelist, .refsect1')) && type
end end
SKIP_ENTRIES_SLUGS = [ SKIP_ENTRIES_SLUGS = [
@ -199,7 +199,9 @@ module Docs
css(selector).each_with_object([]) do |node, entries| css(selector).each_with_object([]) do |node, entries|
name = node.content name = node.content
clean_heading_name(name) clean_heading_name(name)
entries << ["#{additional_entry_prefix}: #{name}", node['id']] unless skip_heading?(name) id = node['id'] || node.parent['id']
raise "missing ids for selector #{selector}" unless id
entries << ["#{additional_entry_prefix}: #{name}", id] unless skip_heading?(name)
end end
end end

@ -8,13 +8,14 @@ module Docs
end end
def extract_up_path def extract_up_path
if node = at_css('.NAVHEADER a[accesskey="U"]') if node = at_css('.navheader a[accesskey="u"], .navheader a[accesskey="U"]')
result[:pg_up_path] = node['href'] result[:pg_up_path] = node['href']
end end
end end
def extract_chapter def extract_chapter
return unless text = at_css('.NAVHEADER td[align="center"]').content css('.navheader td[align="center"], .navheader th[align="center"]').each do |node|
text = node.content.strip
if match = text.match(/\AChapter (\d+)\. (.+)\z/) if match = text.match(/\AChapter (\d+)\. (.+)\z/)
result[:pg_chapter] = match[1].to_i result[:pg_chapter] = match[1].to_i
result[:pg_chapter_name] = match[2].strip result[:pg_chapter_name] = match[2].strip
@ -25,4 +26,5 @@ module Docs
end end
end end
end end
end
end end

@ -0,0 +1,13 @@
module Docs
class Postgresql
class NormalizeClassNamesFilter < Filter
def call
doc.css('*').each do |node|
node['class'] = node['class'].downcase if node['class'].present?
end
doc
end
end
end
end

@ -55,19 +55,30 @@ module Docs
Licensed under the PostgreSQL License. Licensed under the PostgreSQL License.
HTML HTML
version '10' do
self.release = '10.1'
self.base_url = 'https://www.postgresql.org/docs/10/static/'
end
version '9.6' do version '9.6' do
self.release = '9.6.5' self.release = '9.6.6'
self.base_url = 'https://www.postgresql.org/docs/9.6/static/' self.base_url = 'https://www.postgresql.org/docs/9.6/static/'
html_filters.insert_before 'postgresql/extract_metadata', 'postgresql/normalize_class_names'
end end
version '9.5' do version '9.5' do
self.release = '9.5.9' self.release = '9.5.10'
self.base_url = 'https://www.postgresql.org/docs/9.5/static/' self.base_url = 'https://www.postgresql.org/docs/9.5/static/'
html_filters.insert_before 'postgresql/extract_metadata', 'postgresql/normalize_class_names'
end end
version '9.4' do version '9.4' do
self.release = '9.4.14' self.release = '9.4.15'
self.base_url = 'https://www.postgresql.org/docs/9.4/static/' self.base_url = 'https://www.postgresql.org/docs/9.4/static/'
html_filters.insert_before 'postgresql/extract_metadata', 'postgresql/normalize_class_names'
end end
end end
end end

Loading…
Cancel
Save