diff --git a/config.default.toml b/config.default.toml index ff48b97..366bc9c 100644 --- a/config.default.toml +++ b/config.default.toml @@ -42,8 +42,8 @@ template = ''' ''' # Filename template for generated HTML files. filename_template = "{{ published_formatted }}\t[{{ origin_title }}]\t{{ title }}.html" -# Maximum allowed filename length before truncating. -max_filename_length = 200 +# Maximum allowed filename length (in bytes assuming UTF-8 encoding) before truncating. Depending on your filesystem filename's limits it may be possible to increase the value, ask Wikipedia for details. +max_filename_length = 250 [time] # Which timezone to use when writing date and time. diff --git a/main.py b/main.py index d28df90..ce03824 100644 --- a/main.py +++ b/main.py @@ -114,9 +114,14 @@ def escape_filename(filename): def truncate_filename(config, filename): max_filename_length = config.max_filename_length - suffix = Path(filename).suffix - max_basename_length = max_filename_length - len(suffix) - return filename[:max_basename_length] + '…' + suffix if len(filename) > max_filename_length else filename + filename_utf8 = filename.encode("utf-8") + if len(filename_utf8) <= max_filename_length: + return filename + else: + suffix = Path(filename).suffix + max_basename_length = max_filename_length - len(suffix.encode("utf-8")) + cutoff = len(filename.encode('utf-8')[:max_basename_length].decode('utf-8', errors="ignore")) + return filename[:cutoff] + '…' + suffix def get_html_path(config, item_json): folder_directory = config.html_root / escape_filename(item_json["folder"]) @@ -124,8 +129,7 @@ def get_html_path(config, item_json): html_name = truncate_filename(config, escape_filename(config.item_filename_template.render(item_json))) - html_path = folder_directory / html_name - return html_path + return folder_directory / html_name def format_datetime(config, timestamp): return datetime.fromtimestamp(timestamp, config.timezone).strftime(config.time_format)