Show and return words in the proper case in interactive mode.
diff --git a/codespell.py b/codespell.py
index ace5ec0..2af1992 100755
--- a/codespell.py
+++ b/codespell.py
@@ -183,15 +183,24 @@
return True
+def fix_case(word, fixword):
+ if word == word.capitalize():
+ return fixword.capitalize()
+ elif word == word.upper():
+ return fixword.upper()
+ # they are both lower case
+ # or we don't have any idea
+ return fixword
+
def ask_for_word_fix(line, wrongword, misspelling, interactivity):
if interactivity <= 0:
- return misspelling.fix, misspelling.data
+ return misspelling.fix, fix_case(wrongword, misspelling.data)
if misspelling.fix and interactivity & 1:
r = ''
+ fixword = fix_case(wrongword, misspelling.data)
while not r:
- print("%s\t%s ==> %s (Y/n) " % (line, wrongword,
- misspelling.data), end='')
+ print("%s\t%s ==> %s (Y/n) " % (line, wrongword, fixword), end='')
r = sys.stdin.readline().strip().upper()
if not r: r = 'Y'
if r != 'Y' and r != 'N':
@@ -211,7 +220,8 @@
while not r:
print("%s Choose an option (blank for none): " % line, end='')
for i in range(len(opt)):
- print(" %d) %s" % (i, opt[i]), end='')
+ fixword = fix_case(wrongword, opt[i])
+ print(" %d) %s" % (i, fixword), end='')
print(": ", end='')
sys.stdout.flush()
@@ -229,7 +239,7 @@
misspelling.fix = True
misspelling.data = r
- return misspelling.fix, misspelling.data
+ return misspelling.fix, fix_case(wrongword, misspelling.data)
def parse_file(filename, colors, summary):
lines = None
@@ -293,15 +303,7 @@
lword = word.lower()
if lword in misspellings:
fix = misspellings[lword].fix
-
- if word == word.capitalize():
- fixword = misspellings[lword].data.capitalize()
- elif word == word.upper():
- fixword = misspellings[lword].data.upper()
- else:
- # even they are the same lower case or
- # or we don't have any idea
- fixword = misspellings[lword].data
+ fixword = fix_case(word, misspellings[lword].data)
if options.interactive and not lword in fixed_words:
fix, fixword = ask_for_word_fix(lines[i - 1], word,