def titlecase
swrgxp = self.class.small_words.join('|')
parts = self.split( %r/( [:.;?!][ ] | (?:[ ]|^)["“] )/x )
parts.each do |part|
part.gsub!(%r/\b[[:alpha:]][[:lower:].'’]*\b/) do |s|
s =~ %r/\w+\.\w+/ ? s : s.capitalize
end
part.gsub!(%r/\b(#{swrgxp})\b/i) {|w| w.downcase}
part.gsub!(%r/\A([[:punct:]]*)(#{swrgxp})\b/) {$1 + $2.capitalize}
part.gsub!(%r/\b(#{swrgxp})([^\w\s]*)\z/) {$1.capitalize + $2}
end
str = parts.join
str.gsub!(/ V(s?)\. /, ' v\1. ')
str.gsub!(/(['’])S\b/, '\1s')
str.gsub!(/\b(AT&T|Q&A)\b/i) { |w| w.upcase }
str
end