165: def convert_misc_characters(options = {})
166: dummy = dup.gsub(/\.{3,}/, " dot dot dot ")
167:
168: {
169: /(\s|^)\$(\d+)\.(\d+)(\s|$)/ => '\2 dollars \3 cents',
170: /(\s|^)£(\d+)\.(\d+)(\s|$)/u => '\2 pounds \3 pence',
171: }.each do |found, replaced|
172: replaced = " #{replaced} " unless replaced =~ /\\1/
173: dummy.gsub!(found, replaced)
174: end
175:
176: misc_characters =
177: {
178: /\s*&\s*/ => "and",
179: /\s*#/ => "number",
180: /\s*@\s*/ => "at",
181: /(\S|^)\.(\S)/ => '\1 dot \2',
182: /(\s|^)\$(\d*)(\s|$)/ => '\2 dollars',
183: /(\s|^)£(\d*)(\s|$)/u => '\2 pounds',
184: /(\s|^)¥(\d*)(\s|$)/u => '\2 yen',
185: /\s*\*\s*/ => "star",
186: /\s*%\s*/ => "percent",
187: /(\s*=\s*)/ => " equals ",
188: /\s*\+\s*/ => "plus",
189: /\s*°\s*/ => "degrees"
190: }
191: misc_characters[/\s*(\\|\/)\s*/] = 'slash' unless options[:allow_slash]
192: misc_characters.each do |found, replaced|
193: replaced = " #{replaced} " unless replaced =~ /\\1/
194: dummy.gsub!(found, replaced)
195: end
196: dummy = dummy.gsub(/(^|[[:alpha:]])'([[:alpha:]]|$)/, '\1\2').gsub(/[\.,:;()\[\]\/\?!\^'ʼ"_]/, " ").strip
197: end