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 53 53: def create_fragment_nodes(sections, parent, path, in_menu, si = 1000) 54: sections.each do |level, id, title, sub_sections| 55: fragment_path = parent.alcn.sub(/#.*$/, '') + '#' + id 56: node = website.blackboard.invoke(:create_nodes, 57: Webgen::Path.new(fragment_path, path.source_path), 58: self) do |cn_path| 59: cn_path.meta_info['title'] = title 60: cn_path.meta_info['in_menu'] = in_menu 61: cn_path.meta_info['sort_info'] = si = si.succ 62: create_node(cn_path, :parent => parent) 63: end.first 64: create_fragment_nodes(sub_sections, node, path, in_menu, si.succ) 65: end 66: 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 20 20: def parse_html_headers(content) 21: sections = [] 22: stack = [] 23: content.scan(HTML_HEADER_REGEXP).each do |level,attrs,title| 24: next if attrs.nil? 25: id_attr = attrs.scan(HTML_ATTR_REGEXP).find {|name,sep,value| name == 'id'} 26: next if id_attr.nil? 27: id = id_attr[2] 28: 29: section = [level.to_i, id, title, []] 30: success = false 31: while !success 32: if stack.empty? 33: sections << section 34: stack << section 35: success = true 36: elsif stack.last.first < section.first 37: stack.last.last << section 38: stack << section 39: success = true 40: else 41: stack.pop 42: end 43: end 44: end 45: sections 46: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.