Fenrir will now read dots in the middle of or at the beginning of words regardless of punctuation settings.
This commit is contained in:
		| @@ -77,6 +77,27 @@ class OutputManager: | ||||
|     def get_last_echo(self): | ||||
|         return self.last_echo | ||||
|  | ||||
|     def process_mid_word_punctuation(self, text): | ||||
|         """ | ||||
|         Process punctuation that appears mid-word to ensure proper pronunciation. | ||||
|         Specifically handles dots between word characters (e.g., "settings.conf" -> "settings dot conf") | ||||
|         and dots at word beginnings (e.g., ".local" -> "dot local") | ||||
|         while preserving sentence-ending periods and other punctuation behavior. | ||||
|         """ | ||||
|         if not text: | ||||
|             return text | ||||
|          | ||||
|         # Handle dots at the beginning of words (like .local, .bashrc, .config) | ||||
|         # Look for non-word character (or start of string), dot, then word characters | ||||
|         text = re.sub(r'(?<!\w)\.(\w+)', r'dot \1', text) | ||||
|          | ||||
|         # Replace dots that appear between word characters with spoken form | ||||
|         # Use a loop to handle multiple consecutive dots like www.example.com or a.b.c.d | ||||
|         while re.search(r'\b\w+\.\w+\b', text): | ||||
|             text = re.sub(r'\b(\w+)\.(\w+)\b', r'\1 dot \2', text) | ||||
|          | ||||
|         return text | ||||
|  | ||||
|     def speak_text( | ||||
|         self, | ||||
|         text, | ||||
| @@ -208,6 +229,7 @@ class OutputManager: | ||||
|             clean_text = self.env["runtime"]["TextManager"].replace_head_lines( | ||||
|                 clean_text | ||||
|             ) | ||||
|             clean_text = self.process_mid_word_punctuation(clean_text) | ||||
|             clean_text = self.env["runtime"][ | ||||
|                 "PunctuationManager" | ||||
|             ].proceed_punctuation(clean_text, ignore_punctuation) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user