Skip to content

Commit

Permalink
Improve handling of illegal language codes (#547)
Browse files Browse the repository at this point in the history
1. Don't allow illegal values to be saved
2. Output an error message, rather than using an assertion.

Fixes #546
  • Loading branch information
windymilla authored Nov 28, 2024
1 parent f833069 commit e8b2891
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 8 deletions.
4 changes: 3 additions & 1 deletion src/guiguts/application.py
Original file line number Diff line number Diff line change
Expand Up @@ -894,7 +894,9 @@ def selection_str() -> str:
)

the_statusbar.add(
"languages label", tooltip="Click: Set language(s)", text="Lang: "
"languages label",
tooltip="Click: Set language(s), e.g. 'en' or 'de fr'",
text="Lang: ",
)
the_statusbar.add_binding(
"languages label", "ButtonRelease-1", self.file.set_languages
Expand Down
11 changes: 8 additions & 3 deletions src/guiguts/file.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ def __init__(
self._filename_callback = filename_callback
self._image_dir = ""
self._project_id = ""
self._languages = "en"
self._languages_callback = languages_callback
self.page_details = PageDetails()
self.project_dict = ProjectDict()
Expand Down Expand Up @@ -178,13 +179,17 @@ def languages(self) -> Any:

@languages.setter
def languages(self, value: str) -> None:
value = value.strip()
if not value:
value = "en"
value = self._languages if self._languages else "en"
if re.fullmatch(r"[a-z_]+(\+[a-z_]+)*", value) is None:
logger.error("Invalid language code(s): valid examples are 'en' or 'de fr'")
return
self._languages = value
self._languages_callback()
preferences.set(PrefKey.DEFAULT_LANGUAGES, value)
preferences.set(PrefKey.DEFAULT_LANGUAGES, self._languages)
# Inform maintext, so text manipulation algorithms there can check languages
maintext().set_languages(value)
maintext().set_languages(self._languages)

def reset(self) -> None:
"""Reset file internals to defaults, e.g. filename, page markers, etc.
Expand Down
7 changes: 3 additions & 4 deletions src/guiguts/maintext.py
Original file line number Diff line number Diff line change
Expand Up @@ -1926,11 +1926,10 @@ def capitalize_first_letter(match: re.regex.Match[str]) -> str:
def set_languages(self, languages: str) -> None:
"""Set languages used in text.
Multiple languages are separated by "+"
Args:
languages: Language, or list of languages separated by "+". Assumed valid.
"""
if languages:
assert re.match(r"[a-z_]+(\+[a-z_]+)*", languages)
self.languages = languages
self.languages = languages

def get_language_list(self) -> list[str]:
"""Get list of languages used in text.
Expand Down

0 comments on commit e8b2891

Please sign in to comment.