mirror of https://github.com/freeCodeCamp/devdocs
parent
dd2229eda0
commit
bec23e6b70
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 34 KiB |
@ -0,0 +1,13 @@
|
||||
._postgres {
|
||||
padding-left: 1rem;
|
||||
|
||||
h1, h1 ~ p, h2 { margin-left: -1rem; }
|
||||
h2 { @extend %block-heading; }
|
||||
|
||||
.VARIABLELIST dt { @extend %block-label, %label-blue; }
|
||||
|
||||
blockquote.NOTE, blockquote.IMPORTANT { @extend %note; }
|
||||
blockquote.TIP { @extend %note, %note-green; }
|
||||
|
||||
p > code { @extend %label; }
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
module Docs
|
||||
class Postgresql
|
||||
class CleanHtmlFilter < Filter
|
||||
def call
|
||||
root_page? ? root : other
|
||||
doc
|
||||
end
|
||||
|
||||
def root
|
||||
doc.inner_html = ' '
|
||||
end
|
||||
|
||||
def other
|
||||
css('a[name]').each do |node|
|
||||
node.parent['id'] = node['name']
|
||||
node.before(node.children).remove
|
||||
end
|
||||
|
||||
css('div.SECT1', 'pre > kbd', 'tt > code', 'h1 > tt').each do |node|
|
||||
node.before(node.children).remove
|
||||
end
|
||||
|
||||
css('table').each do |node|
|
||||
node.remove_attribute 'border'
|
||||
node.remove_attribute 'width'
|
||||
end
|
||||
|
||||
css('td').each do |node|
|
||||
node.remove_attribute 'align'
|
||||
node.remove_attribute 'valign'
|
||||
end
|
||||
|
||||
css('tt').each do |node|
|
||||
node.name = 'code'
|
||||
end
|
||||
|
||||
css('.REFSYNOPSISDIV > p').each do |node|
|
||||
node.name = 'pre'
|
||||
node.content = node.content
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,25 @@
|
||||
module Docs
|
||||
class Postgresql
|
||||
class CleanNavFilter < Filter
|
||||
def call
|
||||
extract_up_path
|
||||
extract_chapter
|
||||
css('.NAVHEADER', '.NAVFOOTER').remove
|
||||
doc
|
||||
end
|
||||
|
||||
def extract_up_path
|
||||
if node = at_css('.NAVHEADER a[accesskey="U"]')
|
||||
result[:pg_up_path] = node['href']
|
||||
end
|
||||
end
|
||||
|
||||
def extract_chapter
|
||||
return unless text = at_css('.NAVHEADER td[align="center"]').content
|
||||
return unless match = text.match(/\AChapter (\d+)\. (.+)\z/)
|
||||
result[:pg_chapter] = match[1].to_i
|
||||
result[:pg_chapter_name] = match[2]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,153 @@
|
||||
module Docs
|
||||
class Postgresql
|
||||
class EntriesFilter < Docs::EntriesFilter
|
||||
REPLACE_NAMES = {
|
||||
'Sorting Rows' => 'ORDER BY',
|
||||
'Select Lists' => 'SELECT Lists',
|
||||
'Data Type Formatting Functions' => 'Formatting Functions',
|
||||
'Enum Support Functions' => 'Enum Functions',
|
||||
'Row and Array Comparisons' => 'Array Comparisons',
|
||||
'Sequence Manipulation Functions' => 'Sequence Functions',
|
||||
'System Administration Functions' => 'Administration Functions',
|
||||
'System Information Functions' => 'Information Functions' }
|
||||
|
||||
def get_name
|
||||
name = at_css('h1').content
|
||||
clean_heading_name(name)
|
||||
|
||||
if %w(Overview Introduction).include?(name)
|
||||
result[:pg_chapter_name]
|
||||
else
|
||||
name.sub! ' (Common Table Expressions)', ''
|
||||
REPLACE_NAMES[name] || name
|
||||
end
|
||||
end
|
||||
|
||||
def clean_heading_name(name)
|
||||
name.sub! %r{\A[\d\.\s]+}, ''
|
||||
name.sub! 'Using ', ''
|
||||
name.sub! %r{\AThe }, ''
|
||||
name
|
||||
end
|
||||
|
||||
def get_type
|
||||
return if initial_page?
|
||||
|
||||
if result[:pg_up_path] == 'sql-commands.html'
|
||||
'Commands'
|
||||
elsif result[:pg_up_path].start_with? 'reference-'
|
||||
'Applications'
|
||||
elsif type = result[:pg_chapter_name]
|
||||
if type.start_with?('Func') && (match = name.match(/\A(?!Form|Seq|Set|Enum)(.+) Func/))
|
||||
"Functions: #{match[1]}"
|
||||
else
|
||||
type.sub 'SQL ', ''
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def additional_entries
|
||||
return [] if skip_additional_entries?
|
||||
return get_config_entries if config_page?
|
||||
return get_heading_entries('h3[id]') if slug == 'functions-xml'
|
||||
|
||||
if type == 'Data Types'
|
||||
return get_custom_entries case slug
|
||||
when 'rangetypes' then 'li > p > .TYPE:first-child'
|
||||
when 'datatype-textsearch' then '.SECT2 > .TYPE'
|
||||
else '.CALSTABLE td:first-child > .TYPE' end
|
||||
end
|
||||
|
||||
entries = get_heading_entries('h2[id]')
|
||||
|
||||
if slug == 'queries-union'
|
||||
entries.concat get_custom_entries('p > .LITERAL:first-child')
|
||||
elsif slug == 'queries-table-expressions'
|
||||
entries.concat get_heading_entries('h3[id]')
|
||||
entries.concat get_custom_entries('dt > .LITERAL:first-child')
|
||||
elsif slug == 'functions-logical'
|
||||
entries.concat get_custom_entries('> table td:first-child > code')
|
||||
elsif slug == 'functions-formatting'
|
||||
entries.concat get_custom_entries('#FUNCTIONS-FORMATTING-TABLE td:first-child > code')
|
||||
elsif slug == 'functions-admin'
|
||||
entries.concat get_custom_entries('.TABLE td:first-child > code')
|
||||
elsif slug == 'functions-string'
|
||||
entries.concat get_custom_entries('> div[id^="FUNC"] td:first-child > code')
|
||||
elsif type && type.start_with?('Functions')
|
||||
entries.concat get_custom_entries('> .TABLE td:first-child > code:first-child')
|
||||
entries.concat get_comparison_entries if slug == 'functions-comparison'
|
||||
end
|
||||
|
||||
entries
|
||||
end
|
||||
|
||||
def get_config_entries
|
||||
css('.VARIABLELIST dt[id]').map do |node|
|
||||
name = node.at_css('.VARNAME').content
|
||||
["Config: #{name}", node['id']]
|
||||
end
|
||||
end
|
||||
|
||||
def get_heading_entries(selector)
|
||||
css(selector).inject [] do |entries, node|
|
||||
name = node.content
|
||||
clean_heading_name(name)
|
||||
|
||||
unless skip_heading?(name)
|
||||
entries << ["#{additional_entry_prefix}: #{name}", node['id']]
|
||||
end
|
||||
|
||||
entries
|
||||
end
|
||||
end
|
||||
|
||||
def get_custom_entries(selector)
|
||||
css(selector).inject [] do |entries, node|
|
||||
name = node.content
|
||||
name.gsub! %r{\(.*?\)}m, ''
|
||||
name.gsub! %r{\[.*?\]}m, ''
|
||||
name.squeeze! ' '
|
||||
name.sub! %r{\([^\)]*\z}, '' # bug fix: json_populate_record
|
||||
name = '||' if name.include? ' || '
|
||||
id = name.gsub(/[^a-z0-9\-_]/) { |char| char.ord }
|
||||
id = id.parameterize
|
||||
name.prepend "#{additional_entry_prefix}: "
|
||||
|
||||
unless entries.any? { |entry| entry[0] == name }
|
||||
node['id'] = id
|
||||
entries << [name, id]
|
||||
end
|
||||
|
||||
entries
|
||||
end
|
||||
end
|
||||
|
||||
def get_comparison_entries
|
||||
%w(IS NULL BETWEEN DISTINCT\ FROM).map do |name|
|
||||
["#{self.name}: #{name}"]
|
||||
end
|
||||
end
|
||||
|
||||
def additional_entry_prefix
|
||||
type.dup.sub!('Functions: ', '') || self.name
|
||||
end
|
||||
|
||||
def skip_additional_entries?
|
||||
slug == 'config-setting' || %w(Concurrency\ Control Localization).include?(type)
|
||||
end
|
||||
|
||||
def skip_heading?(name)
|
||||
%w(Usage\ Patterns Portability Caveats Overview).include?(name) ||
|
||||
(type.start_with?('Functions') && slug != 'functions-xml' && name.split.first.upcase!)
|
||||
end
|
||||
|
||||
def include_default_entry?
|
||||
!(initial_page? || at_css('.TOC') || config_page?)
|
||||
end
|
||||
|
||||
def config_page?
|
||||
slug.start_with? 'runtime-config'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,55 @@
|
||||
module Docs
|
||||
class Postgresql < FileScraper
|
||||
self.name = 'PostgreSQL'
|
||||
self.type = 'postgres'
|
||||
self.version = 'up to 9.3.2'
|
||||
self.dir = '/Users/Thibaut/DevDocs/Docs/PostgreSQL'
|
||||
self.base_url = 'http://www.postgresql.org/docs/9.3/static/'
|
||||
self.root_path = 'reference.html'
|
||||
self.initial_paths = %w(sql.html runtime-config.html charset.html)
|
||||
|
||||
html_filters.insert_before 'normalize_urls', 'postgresql/clean_nav'
|
||||
html_filters.push 'postgresql/clean_html', 'postgresql/entries', 'title'
|
||||
|
||||
options[:title] = false
|
||||
options[:root_title] = 'PostgreSQL'
|
||||
options[:follow_links] = ->(filter) { filter.initial_page? }
|
||||
|
||||
options[:only] = %w(
|
||||
arrays.html
|
||||
rowtypes.html
|
||||
rangetypes.html
|
||||
mvcc-intro.html
|
||||
transaction-iso.html
|
||||
explicit-locking.html
|
||||
applevel-consistency.html
|
||||
locking-indexes.html
|
||||
config-setting.html
|
||||
locale.html
|
||||
collation.html
|
||||
multibyte.html)
|
||||
|
||||
options[:only_patterns] = [
|
||||
/\Asql\-/,
|
||||
/\Aapp\-/,
|
||||
/\Addl\-/,
|
||||
/\Adml\-/,
|
||||
/\Aqueries\-/,
|
||||
/\Adatatype\-/,
|
||||
/\Afunctions\-/,
|
||||
/\Aindexes\-/,
|
||||
/\Aruntime\-config\-/]
|
||||
|
||||
options[:skip] = %w(
|
||||
ddl-others.html
|
||||
runtime-config-custom.html
|
||||
runtime-config-short.html
|
||||
functions-event-triggers.html
|
||||
functions-trigger.html)
|
||||
|
||||
options[:attribution] = <<-HTML
|
||||
© 1996–2013 The PostgreSQL Global Development Group<br>
|
||||
Licensed under the PostgreSQL License.
|
||||
HTML
|
||||
end
|
||||
end
|
After Width: | Height: | Size: 833 B |
After Width: | Height: | Size: 2.4 KiB |
@ -0,0 +1 @@
|
||||
http://www.postgresql.org/about/press/presskit93/#logos
|
Loading…
Reference in new issue