diff options
author | Joris | 2023-09-16 18:28:54 +0200 |
---|---|---|
committer | Joris | 2023-09-16 18:31:24 +0200 |
commit | c236facb4d4c277773c83f1a4ee85b48833d7e67 (patch) | |
tree | 240e72821f7715e24c906e1a2e4081264d47d0ba /src/new/format.py | |
parent | 06f045e90bb57c36738e58ee6830e2a2391bc6a3 (diff) |
Add CLI command to insert book in library
Diffstat (limited to 'src/new/format.py')
-rw-r--r-- | src/new/format.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/new/format.py b/src/new/format.py new file mode 100644 index 0000000..a712544 --- /dev/null +++ b/src/new/format.py @@ -0,0 +1,76 @@ +import PIL.Image +import io +import os +import pathlib +import re +import requests +import shutil +import subprocess +import sys +import unicodedata +import urllib.request + +def format_list(xs): + return '[ ' + ', '.join([f'"{x}"' for x in xs]) + ' ]' + +def path_part(name): + simplified = ''.join([alnum_or_space(c) for c in unaccent(name.lower())]) + return '-'.join(simplified.split()) + +def unaccent(s): + return ''.join(c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn') + +def alnum_or_space(c): + if c.isalnum(): + return c + else: + return ' ' + +def extension(path): + return pathlib.Path(path).suffix + +def cleanup_text(s, lang): + s = re.sub('\'', '’', s) + s = re.sub('\.\.\.', '…', s) + s = re.sub('\. \. \.', '…', s) + s = cleanup_quotes(s, lang) + + if lang == 'fr': + s = re.sub('“', '«', s) + s = re.sub('”', '»', s) + + # Replace space by insecable spaces + s = re.sub(r' ([:?\!»])', r' \1', s) + s = re.sub('« ', '« ', s) + + # Add missing insecable spaces + s = re.sub(r'([^ ])([:?\!»])', r'\1 \2', s) + s = re.sub(r'«([^ ])', r'« \1', s) + + elif lang == 'en': + s = re.sub('«', '“', s) + s = re.sub('»', '”', s) + + return s + +def cleanup_quotes(s, lang): + res = '' + quoted = False + for c in s: + if c == '"': + if quoted: + quoted = False + if lang == 'fr': + res += '»' + elif lang == 'en': + res += '”' + else: + quoted = True + if lang == 'fr': + res += '«' + elif lang == 'en': + res += '“' + else: + res += c + return res + |