Yeah, I thought about something that would map case letter by letter, wrapping around if the replacement word were longer, but decided that leaving it uppercase was good enough. I didn't really think if uppercase as the default, since I would expect almost all cases to be lower or ucfirst as you say, but as a fallback for weird case (or actual uppercase input).