#!/usr/bin/env ruby # @(#) generate skeleton listing of a POM file require 'nokogiri' IGNORE=%w(comment) # don't show # don't show children PRUNE=%w( ciManagement contributors dependencies developers dependencyManagement distributionManagement extensions includes issueManagement licenses mailingLists modules organization pluginManagement plugins profiles properties resources scm testResources ) INDENT=' ' def textonly?(node) return node.children.count == 1 && node.children.first.name == 'text' end def show(node, depth, maxdepth) name = node.name return if IGNORE.include? name if textonly? node or depth == maxdepth # empty puts "#{depth}<#{name}/>" return end if PRUNE.include? name puts "#{depth}<#{name}>..." return end puts "#{depth}<#{name}>" node.children.each do |child| show(child,depth+INDENT, maxdepth) end puts "#{depth}" end maxdepth = nil maxdepth = INDENT if ARGV.delete '--one' doc = Nokogiri::XML(ARGF) do |config| config.options = Nokogiri::XML::ParseOptions::NOBLANKS end show(doc.root,'',maxdepth)