diff --git a/docs/formatting.md b/docs/formatting.md index 03d9f62a..503cb84d 100644 --- a/docs/formatting.md +++ b/docs/formatting.md @@ -128,6 +128,12 @@ Conversion specifiers allow to *convert* the value to a different form or type. {foo!n} 7 + + W + Sanitize whitespace - Remove leading and trailing whitespace characters and replace all whitespace (sequences) with a single space character + {space!W} + Foo Bar + t Trim a string, i.e. remove leading and trailing whitespace characters diff --git a/gallery_dl/formatter.py b/gallery_dl/formatter.py index d3a532d4..34ede812 100644 --- a/gallery_dl/formatter.py +++ b/gallery_dl/formatter.py @@ -541,6 +541,7 @@ _CONVERSIONS = { "U": text.unescape, "H": lambda s: text.unescape(text.remove_html(s)), "g": text.slugify, + "W": text.sanitize_whitespace, "S": util.to_string, "s": str, "r": repr, diff --git a/test/test_formatter.py b/test/test_formatter.py index dc7c30a6..4a5a7abb 100644 --- a/test/test_formatter.py +++ b/test/test_formatter.py @@ -39,6 +39,7 @@ class TestFormatter(unittest.TestCase): ], "n": None, "s": " \n\r\tSPACE ", + "S": " \n\r\tS P A\tC\nE ", "h": "

foo

& bar

", "u": "'< / >'", "t": 1262304000, @@ -61,6 +62,7 @@ class TestFormatter(unittest.TestCase): self._run_test("{a!c}", "Hello world") self._run_test("{a!C}", "Hello World") self._run_test("{s!t}", "SPACE") + self._run_test("{S!t}", "S P A\tC\nE") self._run_test("{a!U}", self.kwdict["a"]) self._run_test("{u!U}", "'< / >'") self._run_test("{a!H}", self.kwdict["a"]) @@ -90,6 +92,8 @@ class TestFormatter(unittest.TestCase): self._run_test("{a!n}", 11) self._run_test("{l!n}", 3) self._run_test("{d!n}", 3) + self._run_test("{s!W}", "SPACE") + self._run_test("{S!W}", "S P A C E") self._run_test("{i_str!i}", 12345) self._run_test("{i_str!f}", 12345.0) self._run_test("{f_str!f}", 12.45) @@ -549,10 +553,10 @@ def noarg(): fmt4 = formatter.parse("\fM " + path + ":lengths") self.assertEqual(fmt1.format_map(self.kwdict), "'Title' by Name") - self.assertEqual(fmt2.format_map(self.kwdict), "142") + self.assertEqual(fmt2.format_map(self.kwdict), "168") self.assertEqual(fmt3.format_map(self.kwdict), "'Title' by Name") - self.assertEqual(fmt4.format_map(self.kwdict), "142") + self.assertEqual(fmt4.format_map(self.kwdict), "168") with self.assertRaises(TypeError): self.assertEqual(fmt0.format_map(self.kwdict), "")