mirror of https://github.com/freeCodeCamp/devdocs
parent
5780aeef6f
commit
2d1d564582
@ -0,0 +1,15 @@
|
||||
._gtk {
|
||||
padding-left: 1rem;
|
||||
|
||||
h1, h2, h3 { margin-left: -1rem; }
|
||||
h2 { @extend %block-heading; }
|
||||
h3 { @extend %block-label, %label-blue; }
|
||||
|
||||
div.toc { margin-top: 1.5em; }
|
||||
.toc dl { margin-top: 0; margin-bottom: 0; }
|
||||
|
||||
.note { @extend %note, %note-green; }
|
||||
.warning { @extend %note, %note-orange; }
|
||||
|
||||
.gallery-float { float:left; }
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
module Docs
|
||||
class Gtk
|
||||
class CleanHtmlFilter < Filter
|
||||
def call
|
||||
|
||||
css('table#top', 'table > colgroup', 'h2.title', '.footer', 'hr', 'br').remove
|
||||
|
||||
if root_page?
|
||||
css('span > a').each do |node|
|
||||
node.parent.before(node).remove
|
||||
end
|
||||
end
|
||||
|
||||
if top_table = at_css('.refnamediv > table')
|
||||
top_table.css('td > p', 'td > img').each do |node|
|
||||
top_table.before(node)
|
||||
end
|
||||
top_table.remove
|
||||
end
|
||||
|
||||
css('table').each do |node|
|
||||
node.remove_attribute 'border'
|
||||
node.remove_attribute 'width'
|
||||
end
|
||||
|
||||
# Move anchors to general headings
|
||||
css('h2 > a[name]', 'h3 > a[name]').each do |node|
|
||||
node.parent['id'] = node['name']
|
||||
end
|
||||
|
||||
# Move anchors to function/struct/enum/etc.
|
||||
css('a[name] + h2', 'a[name] + h3').each do |node|
|
||||
node['id'] = node.previous_element['name']
|
||||
end
|
||||
|
||||
# Move anchors to struct and enum members
|
||||
css('td.struct_member_name', 'td.enum_member_name').each do |node|
|
||||
node['id'] = node.at_css('a[name]')['name']
|
||||
end
|
||||
|
||||
# Remove surrounding table from code blocks
|
||||
css('.listing_frame').each do |node|
|
||||
node.before(at_css('.listing_code')).remove
|
||||
end
|
||||
|
||||
css('.literallayout code').each do |node|
|
||||
node.name = 'pre'
|
||||
end
|
||||
|
||||
# Fix code highlighting
|
||||
css('pre').each do |node|
|
||||
# If a codeblock has URLs, don't touch it
|
||||
next if node.at_css('a[href]')
|
||||
|
||||
node.content = node.content
|
||||
|
||||
# it's not perfect, but make a guess at language
|
||||
if node.content =~ /\<\?xml/
|
||||
node['data-language'] = 'xml'
|
||||
else
|
||||
node['data-language'] = 'c'
|
||||
end
|
||||
end
|
||||
|
||||
doc
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,154 @@
|
||||
module Docs
|
||||
class Gtk
|
||||
class EntriesFilter < Docs::EntriesFilter
|
||||
# The GTK documentation paths are "flat" and while the contents of each
|
||||
# page provides a way to determine the direct parent relationship, we
|
||||
# really need a full hierarchy of pages *a priori* to be able to fully
|
||||
# categorize all pages and entries. So we're going to recursivly generate
|
||||
# a full map of page -> parent relationships from the table of contents...
|
||||
PARENT_BY_PATH = {}
|
||||
|
||||
# And then use it to generate the list of 'breadcrumb' paths for each page
|
||||
# ex: ['gtkwidgets', 'fancywidgets', 'gtkexamplewidget']
|
||||
attr_accessor :breadcrumbs
|
||||
|
||||
# Map of paths to Page Names/Titles
|
||||
NAME_BY_PATH = {}
|
||||
|
||||
# GTK+ 3 and GTK 4
|
||||
REPLACE_NAMES = {
|
||||
'I. GTK+ Overview' => '1. Overview',
|
||||
'II. GTK+ Widgets and Objects' => '2. Widgets and Objects',
|
||||
'III. GTK+ Core Reference' => '3. Core Reference',
|
||||
'IV. Theming in GTK+' => '4. Theming',
|
||||
'VI. GTK+ Tools' => '6. Tools',
|
||||
'VII. GTK+ Platform Support' => '7. Platform Support',
|
||||
|
||||
'I. Introduction' => '1. Introduction',
|
||||
'II. GTK Concepts' => '2. Concepts',
|
||||
'III. GTK Widgets and Objects' => '3. Widgets and Objects',
|
||||
'IV. GTK Core Reference' => '4. Core Reference',
|
||||
'V. Theming in GTK' => '5. Theming',
|
||||
'VII. GTK Tools' => '7. Tools',
|
||||
'VIII. GTK Platform Support' => '8. Platform Support'
|
||||
}
|
||||
|
||||
def call
|
||||
if root_page?
|
||||
# Generate NAME_BY_PATH Hash
|
||||
css('dl.toc a').each do |node|
|
||||
name = node.content
|
||||
path = node['href'].split('/').last.remove('.html')
|
||||
NAME_BY_PATH[path] = REPLACE_NAMES[name] || name
|
||||
end
|
||||
# Generate PARENT_BY_PATH Hash
|
||||
process_toc(at_css('dl.toc'), nil)
|
||||
end
|
||||
super
|
||||
end
|
||||
|
||||
# Recursive depth-first search
|
||||
# Treat solo 'dt' nodes as leaf nodes and
|
||||
# sibling 'dt + dd' nodes as nodes with children
|
||||
def process_toc(toc_dl_node, parent_path)
|
||||
toc_dl_node.css('> dt').each do |node|
|
||||
node_path = node.at_css('a')['href'].split('/').last.remove('.html')
|
||||
PARENT_BY_PATH[node_path] = parent_path
|
||||
|
||||
if node.next_element && node.next_element.name == 'dd'
|
||||
children = node.next_element.children.first
|
||||
process_toc(children, node_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def breadcrumbs
|
||||
@breadcrumbs ||= get_breadcrumbs
|
||||
end
|
||||
|
||||
def get_breadcrumbs
|
||||
return [] if root_page?
|
||||
|
||||
breadcrumbs = []
|
||||
path = slug.downcase
|
||||
while path
|
||||
breadcrumbs.prepend path
|
||||
path = PARENT_BY_PATH[path]
|
||||
end
|
||||
|
||||
breadcrumbs
|
||||
end
|
||||
|
||||
def get_name
|
||||
NAME_BY_PATH[self.breadcrumbs.last]
|
||||
end
|
||||
|
||||
def get_type
|
||||
NAME_BY_PATH[self.breadcrumbs.first]
|
||||
end
|
||||
|
||||
def additional_entries
|
||||
entries = []
|
||||
type = case self.breadcrumbs.first
|
||||
when 'gtkobjects'
|
||||
"Widgets / #{NAME_BY_PATH[self.breadcrumbs[1]]}"
|
||||
when 'gtkbase'
|
||||
"Base / #{self.name}"
|
||||
when'theming'
|
||||
"Theming / #{self.name}"
|
||||
end
|
||||
|
||||
if funcs = at_css('h2:contains("Functions")')
|
||||
funcs.next_element.css('td.function_name > a').each do |node|
|
||||
name = "#{node.content}()"
|
||||
id = node['href']
|
||||
entries << [name, id, type]
|
||||
end
|
||||
end
|
||||
|
||||
css('td.property_name > a').each do |node|
|
||||
name = "#{node.content} (#{self.name} property)"
|
||||
id = node['href']
|
||||
entries << [name, id, type]
|
||||
end
|
||||
|
||||
css('td.signal_name > a').each do |node|
|
||||
name = "#{node.content} (#{self.name} signal)"
|
||||
id = node['href']
|
||||
entries << [name, id, type]
|
||||
end
|
||||
|
||||
css('td.enum_member_name').each do |node|
|
||||
name = node.content
|
||||
id = node.at_css('a')['name']
|
||||
entries << [name, id, type]
|
||||
end
|
||||
|
||||
if values_node = at_css('h2:contains("Types and Values") + .informaltable')
|
||||
values_node.css('tr').each do |node|
|
||||
data_type = node.css('td').first.content
|
||||
name = node.at_css('td.function_name').content
|
||||
if data_type == ' '
|
||||
name = "#{name} (type)"
|
||||
elsif data_type == 'enum' || data_type == 'struct'
|
||||
name = "#{name} (#{data_type})"
|
||||
end
|
||||
id = node.at_css('td.function_name a')['href']
|
||||
entries << [name, id, type]
|
||||
end
|
||||
end
|
||||
|
||||
if slug == 'gtk-running'
|
||||
css('h3 > a[name]').each do |node|
|
||||
name = node.parent.content
|
||||
id = node['name']
|
||||
entries << [name, id, 'Platform / Environment Variables']
|
||||
end
|
||||
end
|
||||
|
||||
entries
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,116 @@
|
||||
module Docs
|
||||
class Gtk < UrlScraper
|
||||
self.name = 'GTK'
|
||||
self.slug = 'gtk'
|
||||
self.type = 'gtk'
|
||||
self.root_path = 'index.html'
|
||||
self.links = {
|
||||
home: 'https://www.gtk.org/',
|
||||
code: 'https://gitlab.gnome.org/GNOME/gtk/'
|
||||
}
|
||||
|
||||
html_filters.push 'gtk/entries', 'gtk/clean_html', 'title'
|
||||
|
||||
options[:container] = '.content'
|
||||
|
||||
# These are all "index"-ish pages with no valuable content
|
||||
GTK3_SKIP = %w(
|
||||
gtk.html
|
||||
gtk-resources.html gtk-question-index.html
|
||||
gtkobjects.html
|
||||
Application.html Builder.html WindowWidgets.html LayoutContainers.html
|
||||
DisplayWidgets.html ButtonWidgets.html NumericEntry.html
|
||||
TextWidgetObjects.html TreeWidgetObjects.html MenusAndCombos.html
|
||||
SelectorWidgets.html Ornaments.html ScrollingWidgets.html Printing.html
|
||||
ShortcutsOverview.html MiscObjects.html AbstractObjects.html
|
||||
PlugSocket.html RecentDocuments.html ApplicationChoosing.html
|
||||
Gestures.html DeprecatedObjects.html
|
||||
gtkbase.html
|
||||
theming.html
|
||||
migrating.html
|
||||
ch26s02.html ch28s02.html
|
||||
pt06.html
|
||||
platform-support.html
|
||||
glossary.html
|
||||
annotation-glossary.html
|
||||
)
|
||||
|
||||
GTK3_SKIP_PATTERNS = [
|
||||
/migrating/, /checklist/, /ch30/, /ch32/, /api-index-/
|
||||
]
|
||||
|
||||
# These are all "index"-ish pages with no valuable content
|
||||
GTK4_SKIP = %w(
|
||||
gtk.html
|
||||
gtk-resources.html gtk-question-index.html ch02s02.html
|
||||
concepts.html
|
||||
gtkobjects.html
|
||||
Lists.html Trees.html Application.html Builder.html WindowWidgets.html
|
||||
LayoutContainers.html LayoutManagers.html DisplayWidgets.html
|
||||
MediaSupport.html ButtonWidgets.html NumericEntry.html
|
||||
MenusAndCombos.html SelectorWidgets.html DrawingWidgets.html
|
||||
Ornaments.html ScrollingWidgets.html Printing.html
|
||||
ShortcutsOverview.html MiscObjects.html AbstractObjects.html
|
||||
RecentDocuments.html ApplicationChoosing.html Gestures.html ch36.html
|
||||
ch37.html
|
||||
gtkbase.html
|
||||
theming.html
|
||||
migrating.html
|
||||
ch41s02.html ch41s03.html
|
||||
pt07.html
|
||||
platform-support.html
|
||||
api-index-full.html
|
||||
annotation-glossary.html
|
||||
)
|
||||
|
||||
GTK4_SKIP_PATTERNS = [
|
||||
/migrating/, /ch03/, /ch09/, /ch10/
|
||||
]
|
||||
|
||||
options[:attribution] = <<-HTML
|
||||
© 2005–2020 The GNOME Project<br>
|
||||
Licensed under the GNU Lesser General Public License version 2.1 or later.
|
||||
HTML
|
||||
|
||||
version '4.0' do
|
||||
self.release = '4.0.0'
|
||||
self.base_url = "https://developer.gnome.org/gtk4/#{self.version}/"
|
||||
|
||||
options[:root_title] = 'GTK 4 Reference Manual'
|
||||
options[:skip] = GTK4_SKIP
|
||||
options[:skip_patterns] = GTK4_SKIP_PATTERNS
|
||||
end
|
||||
|
||||
version '3.24' do
|
||||
self.release = '3.24.24'
|
||||
self.base_url = "https://developer.gnome.org/gtk3/#{self.version}/"
|
||||
|
||||
options[:root_title] = 'GTK+ 3 Reference Manual'
|
||||
options[:skip] = GTK3_SKIP
|
||||
options[:skip_patterns] = GTK3_SKIP_PATTERNS
|
||||
end
|
||||
|
||||
version '3.22' do
|
||||
self.release = '3.22.3'
|
||||
self.base_url = "https://developer.gnome.org/gtk3/#{self.version}/"
|
||||
|
||||
options[:root_title] = 'GTK+ 3 Reference Manual'
|
||||
options[:skip] = GTK3_SKIP
|
||||
options[:skip_patterns] = GTK3_SKIP_PATTERNS
|
||||
end
|
||||
|
||||
version '3.20' do
|
||||
self.release = '3.20.4'
|
||||
self.base_url = "https://developer.gnome.org/gtk3/#{self.version}/"
|
||||
|
||||
options[:root_title] = 'GTK+ 3 Reference Manual'
|
||||
options[:skip] = GTK3_SKIP
|
||||
options[:skip_patterns] = GTK3_SKIP_PATTERNS
|
||||
end
|
||||
|
||||
def get_latest_version(opts)
|
||||
tags = get_gitlab_tags('gitlab.gnome.org', 'GNOME', 'gtk', opts)
|
||||
tags[0]['name']
|
||||
end
|
||||
end
|
||||
end
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 2.1 KiB |
@ -0,0 +1 @@
|
||||
https://www.gtk.org/assets/img/logo-gtk-sm.png
|
Loading…
Reference in new issue