135: def convert_misc_characters(options = {})
136: dummy = dup.gsub(/\.{3,}/, " dot dot dot ")
137:
138: {
139: /(\s|^)\$(\d+)\.(\d+)(\s|$)/ => '\2 dollars \3 cents',
140: /(\s|^)£(\d+)\.(\d+)(\s|$)/u => '\2 pounds \3 pence',
141: }.each do |found, replaced|
142: replaced = " #{replaced} " unless replaced =~ /\\1/
143: dummy.gsub!(found, replaced)
144: end
145:
146: misc_characters =
147: {
148: /\s*&\s*/ => "and",
149: /\s*#/ => "number",
150: /\s*@\s*/ => "at",
151: /(\S|^)\.(\S)/ => '\1 dot \2',
152: /(\s|^)\$(\d*)(\s|$)/ => '\2 dollars',
153: /(\s|^)£(\d*)(\s|$)/u => '\2 pounds',
154: /(\s|^)¥(\d*)(\s|$)/u => '\2 yen',
155: /\s*\*\s*/ => "star",
156: /\s*%\s*/ => "percent",
157: /(\s*=\s*)/ => " equals ",
158: /\s*\+\s*/ => "plus"
159: }
160: misc_characters[/\s*(\\|\/)\s*/] = 'slash' unless options[:allow_slash]
161: misc_characters.each do |found, replaced|
162: replaced = " #{replaced} " unless replaced =~ /\\1/
163: dummy.gsub!(found, replaced)
164: end
165: dummy = dummy.gsub(/(^|\w)'(\w|$)/, '\1\2').gsub(/[\.,:;()\[\]\?!\^'"_]/, " ")
166: end