def find_fancy(str, code=nil, additional_options={})
if str && !str.include?('?') && str != 'guess'
lexer_class = find(str)
return lexer_class && lexer_class.new(additional_options)
end
name, opts = str ? str.split('?', 2) : [nil, '']
opts = CGI.parse(opts || '').map do |k, vals|
val = case vals.size
when 0 then true
when 1 then vals[0]
else vals
end
[ k.to_s, val ]
end
opts = additional_options.merge(Hash[opts])
lexer_class = case name
when 'guess', nil
self.guess(:source => code, :mimetype => opts['mimetype'])
when String
self.find(name)
end
lexer_class && lexer_class.new(opts)
end