def initialize( config, opts = {} )
opts = @@defaults.merge opts
@config = config.kind_of?(::Loquacious::Configuration) ? config :
::Loquacious::Configuration.for(config)
@io = opts[:io]
@name_length = Integer(opts[:name_length])
@desc_leader = opts[:desc_leader]
@nesting_nodes = opts[:nesting_nodes]
@colorize = opts[:colorize]
@colors = opts[:colors]
unless @name_length > 0
Iterator.new(@config).each do |node|
length = node.name.length
@name_length = length if length > @name_length
end
end
name_leader = opts[:name_leader]
name_value_sep = opts[:name_value_sep]
extra_length = name_leader.length + name_value_sep.length
name_value_sep = name_value_sep.gsub('%', '%%')
@value_length = 78 - @name_length - extra_length
@value_leader = "\n" + ' '*(@name_length + extra_length)
@format = "#{name_leader}%-#{@name_length}s#{name_value_sep}%s"
@name_format = "#{name_leader}%s"
if colorize?
@desc_leader = self.__send__(@colors[:leader], @desc_leader)
name_leader = self.__send__(@colors[:leader], name_leader)
name_value_sep = self.__send__(@colors[:leader], name_value_sep)
@format = name_leader.dup
@format << self.__send__(@colors[:name], "%-#{@name_length}s")
@format << name_value_sep.dup
@format << self.__send__(@colors[:value], "%s")
@name_format = name_leader.dup
@name_format << self.__send__(@colors[:name], "%s")
end
@desc_leader.freeze
@value_leader.freeze
@format.freeze
@name_format.freeze
end