From d4d07dcb50993430f40c4d2a380ecb3656c1b296 Mon Sep 17 00:00:00 2001 From: Alberto Pettarin Date: Tue, 16 Feb 2016 20:53:31 +0100 Subject: [PATCH] Fixed problem with escape sequences in CSV files --- LICENSE | 2 +- README.md | 7 +++---- README.rst | 16 +++++++++++----- VERSION | 2 +- bin/penelope | 4 ++-- penelope/__init__.py | 4 ++-- penelope/__main__.py | 4 ++-- penelope/collation_default.py | 4 ++-- penelope/collation_german.py | 4 ++-- penelope/command_line.py | 4 ++-- penelope/dictionary.py | 4 ++-- penelope/dictionary_ebook.py | 4 ++-- penelope/format_bookeen.py | 4 ++-- penelope/format_csv.py | 32 +++++++++++++++++++++++++------ penelope/format_epub.py | 4 ++-- penelope/format_kobo.py | 4 ++-- penelope/format_mobi.py | 4 ++-- penelope/format_stardict.py | 4 ++-- penelope/format_xml.py | 4 ++-- penelope/input_parser_identity.py | 4 ++-- penelope/input_parser_webster.py | 4 ++-- penelope/prefix_default.py | 4 ++-- penelope/prefix_kobo.py | 4 ++-- penelope/utilities.py | 4 ++-- setup.py | 6 +++--- 25 files changed, 83 insertions(+), 58 deletions(-) diff --git a/LICENSE b/LICENSE index 489f957..4709b9f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2012-2015 Alberto Pettarin (alberto@albertopettarin.it) +Copyright (c) 2012-2016 Alberto Pettarin (alberto@albertopettarin.it) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index b760b75..17c3880 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ **Penelope** is a multi-tool for creating, editing and converting dictionaries, especially for eReader devices. -* Version: 3.1.1 -* Date: 2015-12-02 +* Version: 3.1.2 +* Date: 2016-02-16 * Developer: [Alberto Pettarin](http://www.albertopettarin.it/) * License: the MIT License (MIT) * Contact: [click here](http://www.albertopettarin.it/contact.html) @@ -31,7 +31,6 @@ With the current version you can: * 2015-11-24 Penelope is now available on [PyPI](https://pypi.python.org/pypi/penelope/), bumped version to **3.0.1** * 2015-11-22 **The command line interface has changed with v3.0.0**, as I performed a huge code refactoring. -* 2014-06-30 I moved Penelope to GitHub, and released it under the MIT License, with the version code v2.0.0. ## Installation @@ -290,7 +289,7 @@ otherwise the correct dictionary might not be loaded. ### Kobo Devices -At the time of this writing (2015-12-02), Kobo devices will load dictionaries +At the time of this writing (2016-02-16), Kobo devices will load dictionaries only if the files have a file name of an official Kobo dictionaries, which are: * `dicthtml.zip` (EN) diff --git a/README.rst b/README.rst index 78403cb..0609f9c 100644 --- a/README.rst +++ b/README.rst @@ -4,8 +4,8 @@ Penelope **Penelope** is a multi-tool for creating, editing and converting dictionaries, especially for eReader devices. -- Version: 3.1.1 -- Date: 2015-12-02 +- Version: 3.1.2 +- Date: 2016-02-16 - Developer: `Alberto Pettarin `__ - License: the MIT License (MIT) - Contact: `click here `__ @@ -39,8 +39,6 @@ Important updates **3.0.1** - 2015-11-22 **The command line interface has changed with v3.0.0**, as I performed a huge code refactoring. -- 2014-06-30 I moved Penelope to GitHub, and released it under the MIT - License, with the version code v2.0.0. Installation ------------ @@ -319,7 +317,7 @@ correct dictionary might not be loaded. Kobo Devices ~~~~~~~~~~~~ -At the time of this writing (2015-12-02), Kobo devices will load +At the time of this writing (2016-02-16), Kobo devices will load dictionaries only if the files have a file name of an official Kobo dictionaries, which are: @@ -398,6 +396,14 @@ Limitations and Missing Features - Documentation is not complete - Unit tests are missing +Sponsors +-------- + +- **December 2015**: `IngleseXpress.it `__, + "Grazie per averci aiutato a pubblicare per Kindle il `Dizionario + Inglese-Italiano della Pronuncia Scritta + Semplificata `__!" + Acknowledgments --------------- diff --git a/VERSION b/VERSION index 94ff29c..ef538c2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.1 +3.1.2 diff --git a/bin/penelope b/bin/penelope index 9079f6a..5db9207 100755 --- a/bin/penelope +++ b/bin/penelope @@ -12,9 +12,9 @@ from __future__ import absolute_import from penelope import main as package_main __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/__init__.py b/penelope/__init__.py index d1e1740..61c2154 100644 --- a/penelope/__init__.py +++ b/penelope/__init__.py @@ -30,9 +30,9 @@ from penelope.utilities import print_info __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/__main__.py b/penelope/__main__.py index f99686e..0732e62 100644 --- a/penelope/__main__.py +++ b/penelope/__main__.py @@ -29,9 +29,9 @@ from penelope.utilities import print_info __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/collation_default.py b/penelope/collation_default.py index 8d16a34..1228ce6 100644 --- a/penelope/collation_default.py +++ b/penelope/collation_default.py @@ -6,9 +6,9 @@ """ __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/collation_german.py b/penelope/collation_german.py index 9a851d0..71e4ba8 100644 --- a/penelope/collation_german.py +++ b/penelope/collation_german.py @@ -6,9 +6,9 @@ """ __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/command_line.py b/penelope/command_line.py index 31259c2..92616a1 100644 --- a/penelope/command_line.py +++ b/penelope/command_line.py @@ -13,9 +13,9 @@ from penelope.utilities import print_error __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/dictionary.py b/penelope/dictionary.py index a4bd90b..fc26425 100644 --- a/penelope/dictionary.py +++ b/penelope/dictionary.py @@ -24,9 +24,9 @@ from penelope.utilities import print_error __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/dictionary_ebook.py b/penelope/dictionary_ebook.py index dc82e56..3075676 100644 --- a/penelope/dictionary_ebook.py +++ b/penelope/dictionary_ebook.py @@ -16,9 +16,9 @@ from penelope.utilities import delete_directory __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/format_bookeen.py b/penelope/format_bookeen.py index 04ae741..88fcabb 100644 --- a/penelope/format_bookeen.py +++ b/penelope/format_bookeen.py @@ -21,9 +21,9 @@ from penelope.utilities import delete_directory __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/format_csv.py b/penelope/format_csv.py index 62ecaa4..7b1aac2 100644 --- a/penelope/format_csv.py +++ b/penelope/format_csv.py @@ -12,24 +12,42 @@ from penelope.utilities import print_error __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" +ASCII_ESCAPES = [ + ("\\a", "\a"), + ("\\b", "\b"), + ("\\t", "\t"), + ("\\n", "\n"), + ("\\v", "\v"), + ("\\f", "\f"), + ("\\r", "\r") +] + +def escape(string): + ret = string + for s, r in ASCII_ESCAPES: + ret = ret.replace(s, r) + return ret + def read(dictionary, args, input_file_paths): + csv_fs = escape(args.csv_fs) + csv_ls = escape(args.csv_ls) for input_file_path in input_file_paths: print_debug("Reading from file '%s'..." % (input_file_path), args.debug) input_file_object = open(input_file_path, "rb") data_bytes = input_file_object.read() # bytes data_unicode = data_bytes.decode(args.input_file_encoding) # unicode input_file_object.close() - lines = data_unicode.split(args.csv_ls) + lines = data_unicode.split(csv_ls) if args.csv_ignore_first_line: lines = lines[1:] for line in lines: - array = line.split(args.csv_fs) + array = line.split(csv_fs) if len(array) >= 2: headword = array[0] definition = line[len(headword) + 1:] @@ -40,6 +58,8 @@ def read(dictionary, args, input_file_paths): return dictionary def write(dictionary, args, output_file_path): + csv_fs = escape(args.csv_fs) + csv_ls = escape(args.csv_ls) try: print_debug("Writing to file '%s'..." % (output_file_path), args.debug) output_file_obj = open(output_file_path, "wb") @@ -47,9 +67,9 @@ def write(dictionary, args, output_file_path): entry = dictionary.entries[index] string = u"%s%s%s%s" % ( entry.headword, - args.csv_fs, + csv_fs, entry.definition, - args.csv_ls + csv_ls ) output_file_obj.write(string.encode("utf-8")) output_file_obj.close() diff --git a/penelope/format_epub.py b/penelope/format_epub.py index 485c9a3..681c0dd 100644 --- a/penelope/format_epub.py +++ b/penelope/format_epub.py @@ -20,9 +20,9 @@ from penelope.utilities import print_info __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/format_kobo.py b/penelope/format_kobo.py index de2664e..e05cdd7 100644 --- a/penelope/format_kobo.py +++ b/penelope/format_kobo.py @@ -37,9 +37,9 @@ from penelope.utilities import rename_file __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/format_mobi.py b/penelope/format_mobi.py index 93129d5..01d1b85 100644 --- a/penelope/format_mobi.py +++ b/penelope/format_mobi.py @@ -21,9 +21,9 @@ from penelope.utilities import delete_directory __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/format_stardict.py b/penelope/format_stardict.py index ee0d3a7..9b873f0 100644 --- a/penelope/format_stardict.py +++ b/penelope/format_stardict.py @@ -22,9 +22,9 @@ from penelope.utilities import print_info __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/format_xml.py b/penelope/format_xml.py index 9a87c24..6bd5371 100644 --- a/penelope/format_xml.py +++ b/penelope/format_xml.py @@ -13,9 +13,9 @@ from penelope.utilities import print_error __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/input_parser_identity.py b/penelope/input_parser_identity.py index 5d879bd..1bd7204 100644 --- a/penelope/input_parser_identity.py +++ b/penelope/input_parser_identity.py @@ -9,9 +9,9 @@ """ __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/input_parser_webster.py b/penelope/input_parser_webster.py index 5d9f47c..1105247 100644 --- a/penelope/input_parser_webster.py +++ b/penelope/input_parser_webster.py @@ -7,9 +7,9 @@ """ __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/prefix_default.py b/penelope/prefix_default.py index 72efafc..afb75f3 100644 --- a/penelope/prefix_default.py +++ b/penelope/prefix_default.py @@ -6,9 +6,9 @@ """ __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/prefix_kobo.py b/penelope/prefix_kobo.py index 28551cb..ed1ce24 100644 --- a/penelope/prefix_kobo.py +++ b/penelope/prefix_kobo.py @@ -6,9 +6,9 @@ """ __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/penelope/utilities.py b/penelope/utilities.py index 0161a4a..d23db96 100644 --- a/penelope/utilities.py +++ b/penelope/utilities.py @@ -16,9 +16,9 @@ import uuid __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" diff --git a/setup.py b/setup.py index be1722c..730b8d6 100644 --- a/setup.py +++ b/setup.py @@ -8,9 +8,9 @@ from setuptools import setup, Extension __author__ = "Alberto Pettarin" -__copyright__ = "Copyright 2012-2015, Alberto Pettarin (www.albertopettarin.it)" +__copyright__ = "Copyright 2012-2016, Alberto Pettarin (www.albertopettarin.it)" __license__ = "MIT" -__version__ = "3.1.1" +__version__ = "3.1.2" __email__ = "alberto@albertopettarin.it" __status__ = "Production" @@ -18,7 +18,7 @@ name="penelope", packages=["penelope"], package_data={"penelope": ["res/*"]}, - version="3.1.1.1", + version="3.1.2.0", description="Penelope is a multi-tool for creating, editing and converting dictionaries, especially for eReader devices", author="Alberto Pettarin", author_email="alberto@albertopettarin.it",