Object
Handles page fragment nodes and provides utility methods for parsing HTML headers and generating fragment nodes from them.
Create nested fragment nodes under parent from sections (which can be created using parse_html_headers). path is the source path that defines the fragments (which is not the same as the creation path for parent). The meta information in_menu of the fragment nodes is set to the parameter in_menu and the meta info sort_info is calculated from the base si value.
# File lib/webgen/sourcehandler/fragment.rb, line 52 def create_fragment_nodes(sections, parent, path, in_menu, si = 1000) sections.each do |level, id, title, sub_sections| fragment_path = parent.alcn.sub(/#.*$/, '') + '#' + id node = website.blackboard.invoke(:create_nodes, Webgen::Path.new(fragment_path, path.source_path), self) do |cn_path| cn_path.meta_info['title'] = title cn_path.meta_info['in_menu'] = in_menu cn_path.meta_info['sort_info'] = si = si.succ create_node(cn_path, :parent => parent) end.first create_fragment_nodes(sub_sections, node, path, in_menu, si.succ) end end
Parse the string content for headers h1, ..., h6 and return the found, nested sections.
Only those headers are used which have an id attribute set. The method returns a list of arrays with entries level, id, title, sub sections where sub sections is such a list again.
# File lib/webgen/sourcehandler/fragment.rb, line 19 def parse_html_headers(content) sections = [] stack = [] content.scan(HTML_HEADER_REGEXP).each do |level,attrs,title| next if attrs.nil? id_attr = attrs.scan(HTML_ATTR_REGEXP).find {|name,sep,value| name == 'id'} next if id_attr.nil? id = id_attr[2] section = [level.to_i, id, title, []] success = false while !success if stack.empty? sections << section stack << section success = true elsif stack.last.first < section.first stack.last.last << section stack << section success = true else stack.pop end end end sections end
Generated with the Darkfish Rdoc Generator 2.