aboutsummaryrefslogtreecommitdiff
path: root/cli/new
diff options
context:
space:
mode:
Diffstat (limited to 'cli/new')
-rw-r--r--cli/new/command.py4
-rw-r--r--cli/new/format.py20
-rw-r--r--cli/new/test_format.py25
3 files changed, 38 insertions, 11 deletions
diff --git a/cli/new/command.py b/cli/new/command.py
index 9f5e5dc..dae0be7 100644
--- a/cli/new/command.py
+++ b/cli/new/command.py
@@ -42,9 +42,9 @@ def run(books_library, book_source=None):
metadata = f"""title = "{title}"
subtitle = "{subtitle}"
- authors = {format.format_list(authors)}
+ authors = {format.list(authors)}
authorsSort = "{author_sort}"
- genres = {format.format_list(genres)}
+ genres = {format.list(genres)}
date = {year}
summary = \"\"\"
{summary}
diff --git a/cli/new/format.py b/cli/new/format.py
index c004f82..7f66f44 100644
--- a/cli/new/format.py
+++ b/cli/new/format.py
@@ -2,15 +2,15 @@ import pathlib
import re
import unicodedata
-def format_list(xs):
- return '[ ' + ', '.join([f'"{x}"' for x in xs]) + ' ]'
+def 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')
+ return ''.join(c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn')
def alnum_or_space(c):
if c.isalnum():
@@ -23,9 +23,9 @@ def extension(path):
def cleanup_text(s, lang):
s = re.sub('\'', '’', s)
- s = re.sub('\.\.\.', '…', s)
- s = re.sub('\. \. \.', '…', s)
- s = cleanup_quotes(s, lang)
+ s = re.sub(r'\.\.\.', '…', s)
+ s = re.sub(r'\. \. \.', '…', s)
+ s = cleanup_double_quotes(s, lang)
if lang == 'fr':
s = re.sub('“', '«', s)
@@ -36,7 +36,10 @@ def cleanup_text(s, lang):
s = re.sub('« ', '« ', s)
# Add missing insecable spaces
- s = re.sub(r'([^ ])([:?\!»])', r'\1 \2', s)
+ s = re.sub(r'([^ ]):', r'\1 :', s)
+ s = re.sub(r'([^ ])\?', r'\1 ?', s)
+ s = re.sub(r'([^ ])\!', r'\1 !', s)
+ s = re.sub(r'([^ ])»', r'\1 »', s)
s = re.sub(r'«([^ ])', r'« \1', s)
elif lang == 'en':
@@ -45,7 +48,7 @@ def cleanup_text(s, lang):
return s
-def cleanup_quotes(s, lang):
+def cleanup_double_quotes(s, lang):
res = ''
quoted = False
for c in s:
@@ -65,4 +68,3 @@ def cleanup_quotes(s, lang):
else:
res += c
return res
-
diff --git a/cli/new/test_format.py b/cli/new/test_format.py
new file mode 100644
index 0000000..d6269d0
--- /dev/null
+++ b/cli/new/test_format.py
@@ -0,0 +1,25 @@
+import cli.new.format as format
+
+def test_list():
+ assert format.list([]) == '[]'
+ assert format.list(['a', 'b', 'c']) == '["a", "b", "c"]'
+
+def test_unaccent():
+ assert format.unaccent('AuieTsrn') == 'AuieTsrn'
+ assert format.unaccent('âàéèêëîïôù') == 'aaeeeeiiou'
+ assert format.unaccent('ÂÀÉÈÊËÎÏÔÙ') == 'AAEEEEIIOU'
+
+def test_path_part():
+ assert format.path_part('L’Homme à la béquille') == 'l-homme-a-la-bequille'
+
+def test_extension():
+ assert format.extension('https://website.de/file.webp') == '.webp'
+ assert format.extension('/home/toto/extension-test/auie.notepad') == '.notepad'
+
+def test_cleaneup_quotes():
+ assert format.cleanup_double_quotes('Bonjour, "ceci" où “cela”.', 'fr') == 'Bonjour, «ceci» où “cela”.'
+ assert format.cleanup_double_quotes('Hello, "this" or «that».', 'en') == 'Hello, “this” or «that».'
+
+def test_cleaneup_text():
+ assert format.cleanup_text('l\'"est": ici... Là? OK! Yes !', 'fr') == 'l’« est » : ici… Là ? OK ! Yes !'
+ assert format.cleanup_text('Is it "ok" or «not»?', 'en') == 'Is it “ok” or “not”?'