mirror of
https://github.com/google/pebble.git
synced 2025-06-01 16:03:11 +00:00
Import the pebble dev site into devsite/
This commit is contained in:
parent
3b92768480
commit
527858cf4c
1359 changed files with 265431 additions and 0 deletions
153
devsite/lib/c_docs/doc_class.rb
Normal file
153
devsite/lib/c_docs/doc_class.rb
Normal file
|
@ -0,0 +1,153 @@
|
|||
# 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.
|
||||
|
||||
module Pebble
|
||||
# DocClass is a special type of DocElement for structs and unions.
|
||||
# It acts like a DocGroup in that it parses an XML file, but it acts like a
|
||||
# DocMember in that it belongs to a group etc.
|
||||
class DocClass < DocElement
|
||||
attr_reader :summary, :description, :kind, :position, :id, :name
|
||||
|
||||
def initialize(root, dir, platform, kind, id, group)
|
||||
super(root, platform)
|
||||
@dir = dir
|
||||
@group = group
|
||||
@kind = kind
|
||||
@children = []
|
||||
@xml = {}
|
||||
@code = id
|
||||
@doxygen_processor = DoxygenProcessor.new(platform)
|
||||
load_xml(platform)
|
||||
end
|
||||
|
||||
def load_xml(platform)
|
||||
@xml[platform] = Nokogiri::XML(File.read("#{@dir}/#{platform}/xml/#{@kind}_#{@code}.xml"))
|
||||
@data[platform] = {}
|
||||
@name = @xml[platform].at_css('compounddef > compoundname').content.to_s
|
||||
@id = @xml[platform].at_css('compounddef')['id']
|
||||
@path = "#{@group.path}##{@name}"
|
||||
create_members(platform)
|
||||
end
|
||||
|
||||
def to_liquid
|
||||
{
|
||||
'name' => @name,
|
||||
'summary' => @summary,
|
||||
'description' => @description,
|
||||
'url' => url,
|
||||
'children' => @children,
|
||||
'data' => @data,
|
||||
'platforms' => @xml.keys,
|
||||
'uniform' => uniform?
|
||||
}
|
||||
end
|
||||
|
||||
def process(mapping)
|
||||
@xml.each do |platform, xml|
|
||||
@data[platform]['summary'] = @doxygen_processor.process_summary(
|
||||
xml.at_css('compounddef > briefdescription'), mapping
|
||||
)
|
||||
description = xml.at_css('compounddef > detaileddescription')
|
||||
process_simplesects(description, mapping, platform)
|
||||
@data[platform]['description'] = @doxygen_processor.process_description(
|
||||
description, mapping)
|
||||
process_members(mapping, platform)
|
||||
end
|
||||
@children = @children.reject { |child| child.name.match(/^@/) }
|
||||
@children.sort! { |m, n| m.position <=> n.position }
|
||||
end
|
||||
|
||||
def uniform?
|
||||
identical = @data['aplite'].to_json == @data['basalt'].to_json
|
||||
identical &&= @children.all?(&:uniform?)
|
||||
identical
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_members(platform)
|
||||
@xml[platform].css('memberdef').each do |child|
|
||||
variable = DocClassVariable.new(@root, child, @group, platform)
|
||||
existing = @children.select { |ex| ex.name == variable.name }.first
|
||||
if existing.nil?
|
||||
@children << variable
|
||||
else
|
||||
existing.add_platform(platform, child)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def process_members(mapping, platform)
|
||||
@children.each { |child| child.process(mapping, platform) }
|
||||
end
|
||||
end
|
||||
|
||||
# DocClassVariable is a DocElement subclass that handles the members (or
|
||||
# variables) of a struct or union.
|
||||
class DocClassVariable < DocElement
|
||||
attr_reader :name, :position
|
||||
|
||||
def initialize(root, node, group, platform)
|
||||
super(root, platform)
|
||||
@name = node.at_css('name').content.to_s
|
||||
@group = group
|
||||
@nodes = { platform => node }
|
||||
@platforms = [platform]
|
||||
@path = "#{@group.path}##{@name}"
|
||||
@position = node.at_css(' > location')['line'].to_i
|
||||
end
|
||||
|
||||
def add_platform(platform, node)
|
||||
@nodes[platform] = node
|
||||
@platforms << platform
|
||||
@data[platform] = {}
|
||||
end
|
||||
|
||||
def to_liquid
|
||||
{
|
||||
'name' => @name,
|
||||
'data' => @data,
|
||||
'url' => url,
|
||||
'type' => @type,
|
||||
'platforms' => @platforms
|
||||
}
|
||||
end
|
||||
|
||||
def uniform?
|
||||
@data['aplite'].to_json == @data['basalt'].to_json
|
||||
end
|
||||
|
||||
def process(mapping, platform)
|
||||
return unless @platforms.include? platform
|
||||
@data[platform]['summary'] = @doxygen_processor.process_summary(
|
||||
@nodes[platform].at_css('briefdescription'), mapping
|
||||
)
|
||||
description = @nodes[platform].at_css('detaileddescription')
|
||||
process_simplesects(description, mapping, platform)
|
||||
process_type(mapping, platform)
|
||||
@data[platform]['description'] = @doxygen_processor.process_description(
|
||||
description, mapping)
|
||||
end
|
||||
|
||||
def process_type(mapping, platform)
|
||||
if @nodes[platform].at_css('type > ref').nil?
|
||||
@data[platform]['type'] = @nodes[platform].at_css('type').content.to_s
|
||||
else
|
||||
type_node = @nodes[platform].at_css('type').clone()
|
||||
@doxygen_processor.process_node_ref(type_node.at_css('ref'), mapping)
|
||||
@data[platform]['type'] = type_node.to_html.to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue