mirror of
https://github.com/1j01/textual-paint.git
synced 2024-11-28 01:34:42 +03:00
Specify UTF-8 encoding, since it's not default on Windows
https://peps.python.org/pep-0597/#using-the-default-encoding-is-a-common-mistake
This commit is contained in:
parent
033e86f4e7
commit
fc395e2db9
@ -97,11 +97,11 @@ def write_ansi_file(file: TextIO) -> None:
|
|||||||
# Generate and write to a file
|
# Generate and write to a file
|
||||||
file_path = os.path.join(os.path.dirname(__file__), f'../samples/{box_inner_width}x{box_inner_height}_font_template.ans')
|
file_path = os.path.join(os.path.dirname(__file__), f'../samples/{box_inner_width}x{box_inner_height}_font_template.ans')
|
||||||
file_path = os.path.abspath(file_path)
|
file_path = os.path.abspath(file_path)
|
||||||
with open(file_path, 'w') as file:
|
with open(file_path, 'w', encoding='utf-8') as file:
|
||||||
write_ansi_file(file)
|
write_ansi_file(file)
|
||||||
|
|
||||||
# Print the art to the terminal
|
# Print the art to the terminal
|
||||||
with open(file_path, 'r') as file:
|
with open(file_path, 'r', encoding='utf-8') as file:
|
||||||
print(file.read())
|
print(file.read())
|
||||||
|
|
||||||
# Print the path to the file, and resulting file size
|
# Print the path to the file, and resulting file size
|
||||||
|
@ -65,11 +65,11 @@ height = 24
|
|||||||
# Generate and write the ANSI art to a file
|
# Generate and write the ANSI art to a file
|
||||||
file_path = os.path.join(os.path.dirname(__file__), '../samples/gradient_test.ans')
|
file_path = os.path.join(os.path.dirname(__file__), '../samples/gradient_test.ans')
|
||||||
file_path = os.path.abspath(file_path)
|
file_path = os.path.abspath(file_path)
|
||||||
with open(file_path, 'w') as file:
|
with open(file_path, 'w', encoding='utf-8') as file:
|
||||||
generate_ansi_art(width, height, file)
|
generate_ansi_art(width, height, file)
|
||||||
|
|
||||||
# Print the art to the terminal
|
# Print the art to the terminal
|
||||||
with open(file_path, 'r') as file:
|
with open(file_path, 'r', encoding='utf-8') as file:
|
||||||
print(file.read())
|
print(file.read())
|
||||||
|
|
||||||
# Print the path to the file, and resulting file size
|
# Print the path to the file, and resulting file size
|
||||||
|
@ -167,9 +167,9 @@ full_size_flf_output_path = os.path.join(font_folder, 'NanoTiny_v14_4x4.flf')
|
|||||||
extracted_image, extracted_text_half, extracted_text_full = extract_textures(image_input_path)
|
extracted_image, extracted_text_half, extracted_text_full = extract_textures(image_input_path)
|
||||||
extracted_image.save(image_output_path)
|
extracted_image.save(image_output_path)
|
||||||
print(f'Wrote extracted textures to {image_output_path}')
|
print(f'Wrote extracted textures to {image_output_path}')
|
||||||
with open(full_size_flf_output_path, 'w') as f:
|
with open(full_size_flf_output_path, 'w', encoding='utf-8') as f:
|
||||||
f.write(extracted_text_full)
|
f.write(extracted_text_full)
|
||||||
print(f'Wrote FIGlet font {full_size_flf_output_path}')
|
print(f'Wrote FIGlet font {full_size_flf_output_path}')
|
||||||
with open(half_size_flf_output_path, 'w') as f:
|
with open(half_size_flf_output_path, 'w', encoding='utf-8') as f:
|
||||||
f.write(extracted_text_half)
|
f.write(extracted_text_half)
|
||||||
print(f'Wrote FIGlet font {half_size_flf_output_path}')
|
print(f'Wrote FIGlet font {half_size_flf_output_path}')
|
||||||
|
@ -893,7 +893,8 @@ class NodeInfo(Container):
|
|||||||
# parse the python file to find the line number of the widget definition
|
# parse the python file to find the line number of the widget definition
|
||||||
# could use `ast` module for robustness
|
# could use `ast` module for robustness
|
||||||
# to avoid things like finding DEFAULT_CSS from the wrong widget
|
# to avoid things like finding DEFAULT_CSS from the wrong widget
|
||||||
with open(path) as f:
|
# TODO: handle read/decode errors
|
||||||
|
with open(path, encoding="utf-8") as f:
|
||||||
lines = f.readlines()
|
lines = f.readlines()
|
||||||
for i, line in enumerate(lines):
|
for i, line in enumerate(lines):
|
||||||
if f"class {widget_name}" in line:
|
if f"class {widget_name}" in line:
|
||||||
|
@ -30,7 +30,7 @@ def load_language(language_code: str):
|
|||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
file = os.path.join(localization_folder, language_code, "localizations.js")
|
file = os.path.join(localization_folder, language_code, "localizations.js")
|
||||||
with open(file, "r") as f:
|
with open(file, "r", encoding="utf-8") as f:
|
||||||
# find the JSON object
|
# find the JSON object
|
||||||
js = f.read()
|
js = f.read()
|
||||||
start = js.find("{")
|
start = js.find("{")
|
||||||
@ -49,7 +49,7 @@ def load_language(language_code: str):
|
|||||||
if TRACK_UNTRANSLATED:
|
if TRACK_UNTRANSLATED:
|
||||||
untranslated: set[str] = set()
|
untranslated: set[str] = set()
|
||||||
try:
|
try:
|
||||||
with open(untranslated_file, "r") as f:
|
with open(untranslated_file, "r", encoding="utf-8") as f:
|
||||||
untranslated = set(f.read().splitlines())
|
untranslated = set(f.read().splitlines())
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
pass
|
pass
|
||||||
@ -87,7 +87,7 @@ def get(base_language_str: str, *interpolations: str) -> str:
|
|||||||
if base_language_str not in untranslated and current_language != base_language:
|
if base_language_str not in untranslated and current_language != base_language:
|
||||||
untranslated.add(base_language_str)
|
untranslated.add(base_language_str)
|
||||||
# append to untranslated strings file
|
# append to untranslated strings file
|
||||||
with open(untranslated_file, "a") as f:
|
with open(untranslated_file, "a", encoding="utf-8") as f:
|
||||||
f.write(base_language_str + "\n")
|
f.write(base_language_str + "\n")
|
||||||
|
|
||||||
return base_language_str
|
return base_language_str
|
||||||
|
@ -90,10 +90,10 @@ loaded_localizations("{target_lang}", {localizations_json});
|
|||||||
f.write(js)
|
f.write(js)
|
||||||
|
|
||||||
# file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "index.html"))
|
# file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "index.html"))
|
||||||
# with open(file_path, "r") as f:
|
# with open(file_path, "r", encoding="utf-8") as f:
|
||||||
# code = f.read()
|
# code = f.read()
|
||||||
# available_langs_json = json.dumps(available_langs, ensure_ascii=False).replace('","', '", "')
|
# available_langs_json = json.dumps(available_langs, ensure_ascii=False).replace('","', '", "')
|
||||||
# code = re.sub(r"(available_languages\s*=\s*)\[[^\]]*\]", f"$1{available_langs_json}]", code)
|
# code = re.sub(r"(available_languages\s*=\s*)\[[^\]]*\]", f"$1{available_langs_json}]", code)
|
||||||
# with open(file_path, "w") as f:
|
# with open(file_path, "w", encoding="utf-8") as f:
|
||||||
# f.write(code)
|
# f.write(code)
|
||||||
# print(f'Updated available_languages list in "{file_path}"')
|
# print(f'Updated available_languages list in "{file_path}"')
|
||||||
|
@ -85,7 +85,7 @@ def update_cli_help_on_readme():
|
|||||||
readme_help_start = re.compile(r"```\n.*--help\n")
|
readme_help_start = re.compile(r"```\n.*--help\n")
|
||||||
readme_help_end = re.compile(r"```")
|
readme_help_end = re.compile(r"```")
|
||||||
readme_file_path = os.path.join(os.path.dirname(__file__), "../../README.md")
|
readme_file_path = os.path.join(os.path.dirname(__file__), "../../README.md")
|
||||||
with open(readme_file_path, "r+") as f:
|
with open(readme_file_path, "r+", encoding="utf-8") as f:
|
||||||
# By default, argparse uses the terminal width for formatting help text,
|
# By default, argparse uses the terminal width for formatting help text,
|
||||||
# even when using format_help() to get a string.
|
# even when using format_help() to get a string.
|
||||||
# The only way to override that is to override the formatter_class.
|
# The only way to override that is to override the formatter_class.
|
||||||
@ -150,7 +150,7 @@ class MetaGlyphFont:
|
|||||||
# I could install the font, with FigletFont.installFonts,
|
# I could install the font, with FigletFont.installFonts,
|
||||||
# maybe with some prefixed name, but I don't want to do that.
|
# maybe with some prefixed name, but I don't want to do that.
|
||||||
|
|
||||||
with open(self.file_path) as f:
|
with open(self.file_path, encoding="utf-8") as f:
|
||||||
flf = f.read()
|
flf = f.read()
|
||||||
fig_font = FigletFont()
|
fig_font = FigletFont()
|
||||||
fig_font.data = flf
|
fig_font.data = flf
|
||||||
@ -2746,7 +2746,7 @@ class PaintApp(App[None]):
|
|||||||
if os.path.getsize(backup_file_path) > MAX_FILE_SIZE:
|
if os.path.getsize(backup_file_path) > MAX_FILE_SIZE:
|
||||||
self.message_box(_("Open"), _("A backup file was found, but was not recovered.") + "\n" + _("The file is too large to open."), "ok")
|
self.message_box(_("Open"), _("A backup file was found, but was not recovered.") + "\n" + _("The file is too large to open."), "ok")
|
||||||
return
|
return
|
||||||
with open(backup_file_path, "r") as f:
|
with open(backup_file_path, "r", encoding="utf-8") as f:
|
||||||
backup_content = f.read()
|
backup_content = f.read()
|
||||||
backup_image = AnsiArtDocument.from_text(backup_content)
|
backup_image = AnsiArtDocument.from_text(backup_content)
|
||||||
self.backup_checked_for = backup_file_path
|
self.backup_checked_for = backup_file_path
|
||||||
@ -3326,7 +3326,7 @@ class PaintApp(App[None]):
|
|||||||
if os.path.getsize(file_path) > MAX_FILE_SIZE:
|
if os.path.getsize(file_path) > MAX_FILE_SIZE:
|
||||||
self.message_box(_("Paste"), _("The file is too large to open."), "ok")
|
self.message_box(_("Paste"), _("The file is too large to open."), "ok")
|
||||||
return
|
return
|
||||||
with open(file_path, "r") as f:
|
with open(file_path, "r", encoding="utf-8") as f:
|
||||||
# TODO: handle pasting image files
|
# TODO: handle pasting image files
|
||||||
self.paste(f.read())
|
self.paste(f.read())
|
||||||
window.close()
|
window.close()
|
||||||
@ -3484,7 +3484,7 @@ class PaintApp(App[None]):
|
|||||||
|
|
||||||
def handle_selected_file_path(file_path: str) -> None:
|
def handle_selected_file_path(file_path: str) -> None:
|
||||||
try:
|
try:
|
||||||
with open(file_path, "r") as f:
|
with open(file_path, "r", encoding="utf-8") as f:
|
||||||
self.load_palette(f.read())
|
self.load_palette(f.read())
|
||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
self.message_box(_("Open"), file_path + "\n" + _("Paint cannot read this file.") + "\n" + _("Unexpected file format."), "ok")
|
self.message_box(_("Open"), file_path + "\n" + _("Paint cannot read this file.") + "\n" + _("Unexpected file format."), "ok")
|
||||||
@ -3564,7 +3564,7 @@ Columns: {len(palette) // 2}
|
|||||||
os.makedirs(dir, exist_ok=True)
|
os.makedirs(dir, exist_ok=True)
|
||||||
svg = self.image.get_svg()
|
svg = self.image.get_svg()
|
||||||
image_path = os.path.join(dir, "wallpaper.svg")
|
image_path = os.path.join(dir, "wallpaper.svg")
|
||||||
with open(image_path, "w") as f:
|
with open(image_path, "w", encoding="utf-8") as f:
|
||||||
f.write(svg)
|
f.write(svg)
|
||||||
set_wallpaper(image_path)
|
set_wallpaper(image_path)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -3916,7 +3916,7 @@ Columns: {len(palette) // 2}
|
|||||||
handle_button=handle_button,
|
handle_button=handle_button,
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
with open(os.path.join(os.path.dirname(__file__), "stretch_skew_icons.ans")) as f:
|
with open(os.path.join(os.path.dirname(__file__), "stretch_skew_icons.ans"), encoding="utf-8") as f:
|
||||||
icons_ansi = f.read()
|
icons_ansi = f.read()
|
||||||
icons_doc = AnsiArtDocument.from_ansi(icons_ansi)
|
icons_doc = AnsiArtDocument.from_ansi(icons_ansi)
|
||||||
icons_rich_markup = icons_doc.get_rich_console_markup()
|
icons_rich_markup = icons_doc.get_rich_console_markup()
|
||||||
|
@ -576,7 +576,7 @@ get_warning_icon = lambda: Static("""
|
|||||||
# def get_question_icon() -> Static:
|
# def get_question_icon() -> Static:
|
||||||
# global question_icon_ansi
|
# global question_icon_ansi
|
||||||
# if not question_icon_ansi:
|
# if not question_icon_ansi:
|
||||||
# with open("question_icon.ans", "r") as f:
|
# with open("question_icon.ans", "r", encoding="utf-8") as f:
|
||||||
# question_icon_ansi = f.read()
|
# question_icon_ansi = f.read()
|
||||||
# return Static(question_icon_ansi, classes="question_icon message_box_icon")
|
# return Static(question_icon_ansi, classes="question_icon message_box_icon")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user