mirror of
https://github.com/google/pebble.git
synced 2025-03-26 13:09:06 +00:00
203 lines
6.7 KiB
Ruby
203 lines
6.7 KiB
Ruby
# Copyright 2025 Google LLC
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
require 'zip'
|
|
require 'nokogiri'
|
|
require_relative 'pebble_documentation'
|
|
|
|
# TODO: Error handling.
|
|
# TODO: Introduce some DRY
|
|
# TODO: Fix the internal links!
|
|
# TODO: Bring back the summarys which I broke.
|
|
# TODO: Android Index Page
|
|
|
|
module Pebble
|
|
class DocumentationPebbleKitAndroid < Documentation
|
|
def initialize(site, source)
|
|
super(site)
|
|
@path = '/docs/pebblekit-android/'
|
|
open(source) do | zf |
|
|
Zip::File.open(zf.path) do | zipfile |
|
|
entry = zipfile.glob('javadoc/overview-summary.html').first
|
|
summary = Nokogiri::HTML(entry.get_input_stream.read)
|
|
process_summary(zipfile, summary)
|
|
|
|
@pages << PageDocPebbleKitAndroid.new(@site, @site.source, 'docs/pebblekit-android/com/constant-values/', 'Constant Values', process_html(Nokogiri::HTML(zipfile.glob('javadoc/constant-values.html').first.get_input_stream.read).at_css('.constantValuesContainer').to_html, '/docs/pebblekit-android/'), nil)
|
|
@pages << PageDocPebbleKitAndroid.new(@site, @site.source, 'docs/pebblekit-android/com/serialized-form/', 'Serialized Form', process_html(Nokogiri::HTML(zipfile.glob('javadoc/serialized-form.html').first.get_input_stream.read).at_css('.serializedFormContainer').to_html, '/docs/pebblekit-android/'), nil)
|
|
end
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def language
|
|
'pebblekit_android'
|
|
end
|
|
|
|
def process_summary(zipfile, summary)
|
|
summary.css('tbody tr').each do | row |
|
|
name = row.at_css('td.colFirst').content
|
|
package = {
|
|
name: name,
|
|
url: "#{@path}#{name_to_url(name)}/",
|
|
children: [],
|
|
methods: [],
|
|
enums: [],
|
|
exceptions: [],
|
|
path: [name]
|
|
}
|
|
add_symbol(name: name, url: "#{@path}#{name_to_url(name)}/")
|
|
@tree << package
|
|
end
|
|
|
|
@tree.each do | package |
|
|
entry = zipfile.glob("javadoc/#{name_to_url(package[:name])}/package-summary.html").first
|
|
summary = Nokogiri::HTML(entry.get_input_stream.read)
|
|
process_package(zipfile, package, summary)
|
|
end
|
|
end
|
|
|
|
def process_package(zipfile, package, summary)
|
|
url = "#{@path}#{name_to_url(package[:name])}"
|
|
|
|
html = summary.at_css('.contentContainer').to_html
|
|
html = process_html(html, url)
|
|
|
|
@pages << PageDocPebbleKitAndroid.new(@site, @site.source, url, package[:name], html, package)
|
|
|
|
class_table = summary.css('table[summary~="Class Summary"]')
|
|
class_table.css('tbody tr').each do | row |
|
|
name = row.at_css('td.colFirst').content
|
|
package[:children] << {
|
|
name: name,
|
|
summary: row.at_css('.colLast').content,
|
|
url: "#{url}/#{name}",
|
|
path: package[:path].clone << name,
|
|
type: 'class',
|
|
children: [],
|
|
methods: [],
|
|
enums: [],
|
|
exceptions: []
|
|
}
|
|
add_symbol(name: "#{package[:name]}.#{name}", url: "#{url}/#{name}")
|
|
end
|
|
|
|
enum_table = summary.css('table[summary~="Enum Summary"]')
|
|
enum_table.css('tbody tr').each do | row |
|
|
name = row.at_css('.colFirst').content
|
|
package[:children] << {
|
|
name: name,
|
|
summary: row.at_css('.colLast').content,
|
|
path: package[:path].clone << name,
|
|
url: "#{url}/#{name}",
|
|
type: 'enum',
|
|
children: [],
|
|
methods: [],
|
|
enums: [],
|
|
exceptions: []
|
|
}
|
|
add_symbol(name: "#{package[:name]}.#{name}", url: "#{url}/#{name}")
|
|
end
|
|
|
|
summary.css('table[summary~="Exception Summary"]').css('tbody tr').each do | row |
|
|
name = row.at_css('td.colFirst').content
|
|
package[:children] << {
|
|
name: name,
|
|
summary: row.at_css('.colLast').content,
|
|
path: package[:path].clone << name,
|
|
url: "#{url}/#{name}",
|
|
type: 'exception',
|
|
children: [],
|
|
methods: [],
|
|
enums: [],
|
|
exceptions: []
|
|
}
|
|
add_symbol(name: "#{package[:name]}.#{name}", url: "#{url}/#{name}")
|
|
end
|
|
|
|
package[:children].each do | child |
|
|
filename = "javadoc/#{name_to_url(package[:name])}/#{child[:name]}.html"
|
|
child_url = '/docs/pebblekit-android/' + package[:name].split('.').join('/') + '/' + child[:name] + '/'
|
|
|
|
entry = zipfile.glob(filename).first
|
|
summary = Nokogiri::HTML(entry.get_input_stream.read)
|
|
|
|
method_table = summary.css('table[summary~="Method Summary"]')
|
|
method_table.css('tr').each do | row |
|
|
next unless row.at_css('.memberNameLink')
|
|
name = row.at_css('.memberNameLink').content
|
|
child[:methods] << {
|
|
name: name,
|
|
summary: row.at_css('.block') ? row.at_css('.block').content : '',
|
|
url: child_url + '#' + name,
|
|
type: 'method'
|
|
}
|
|
add_symbol(name: [package[:name], child[:name], name].join('.'), url: child_url + '#' + name)
|
|
end
|
|
html = summary.at_css('.contentContainer').to_html
|
|
html = process_html(html, child_url)
|
|
@pages << PageDocPebbleKitAndroid.new(@site, @site.source, child_url, child[:name], html, child)
|
|
end
|
|
end
|
|
|
|
def name_to_url(name)
|
|
name.split('.').join('/')
|
|
end
|
|
|
|
def process_html(html, root)
|
|
contents = Nokogiri::HTML(html)
|
|
contents.css('a').each do | link |
|
|
next if link['href'].nil?
|
|
href = File.expand_path(link['href'], root)
|
|
href = href.sub('/com/com/', '/com/')
|
|
href = href.sub('.html', '/')
|
|
link['href'] = href
|
|
end
|
|
contents.css('.memberSummary caption').remove
|
|
contents.to_html
|
|
end
|
|
end
|
|
|
|
class PageDocPebbleKitAndroid < Jekyll::Page
|
|
def initialize(site, base, dir, title, contents, group)
|
|
@site = site
|
|
@base = base
|
|
@dir = dir
|
|
@name = 'index.html'
|
|
@contents = contents
|
|
@group = group
|
|
|
|
process(@name)
|
|
read_yaml(File.join(base, '_layouts', 'docs'), 'pebblekit-android.html')
|
|
data['title'] = title.to_s
|
|
end
|
|
|
|
def to_liquid(attrs = ATTRIBUTES_FOR_LIQUID)
|
|
super(attrs + %w(
|
|
contents
|
|
group
|
|
))
|
|
end
|
|
|
|
attr_reader :contents
|
|
|
|
def group
|
|
if @group.nil?
|
|
{}
|
|
else
|
|
JSON.parse(JSON.dump(@group))
|
|
end
|
|
end
|
|
end
|
|
end
|