From d3968c872a7c3bf3bd9021b905820616e7f30ede Mon Sep 17 00:00:00 2001 From: Matthew Hoopes Date: Wed, 2 Jan 2019 21:24:29 -0500 Subject: [PATCH 1/5] added the linux font directories by copying the pattern of mac/windows font directories --- pptx/text/fonts.py | 17 +++++++++++++++++ tests/text/test_fonts.py | 20 ++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/pptx/text/fonts.py b/pptx/text/fonts.py index 9c67352a7..07e3ff4a1 100644 --- a/pptx/text/fonts.py +++ b/pptx/text/fonts.py @@ -54,6 +54,8 @@ def _font_directories(cls): return cls._os_x_font_directories() if sys.platform.startswith('win32'): return cls._windows_font_directories() + if sys.platform.startswith('linux'): + return cls._linux_font_directories() raise OSError('unsupported operating system') @classmethod @@ -100,6 +102,21 @@ def _windows_font_directories(cls): """ return [r'C:\Windows\Fonts'] + @classmethod + def _linux_font_directories(cls): + """ + Return a sequence of directory paths on Linux in which fonts are + likely to be located. + """ + linux_font_dirs = [ + '/usr/share/fonts', + ] + home = os.environ.get('HOME') + if home is not None: + linux_font_dirs.extend([ + os.path.join(home, '.fonts') + ]) + return linux_font_dirs class _Font(object): """ diff --git a/tests/text/test_fonts.py b/tests/text/test_fonts.py index 95cdc7a68..ff8053e96 100644 --- a/tests/text/test_fonts.py +++ b/tests/text/test_fonts.py @@ -54,6 +54,11 @@ def it_knows_windows_font_dirs_to_help_find(self, win_dirs_fixture): font_dirs = FontFiles._windows_font_directories() assert font_dirs == expected_dirs + def it_knows_linux_font_dirs_to_help_find(self, win_dirs_fixture): + expected_dirs = linux_dirs_fixture + font_dirs = FontFiles._linux_font_directories() + assert font_dirs == expected_dirs + def it_iterates_over_fonts_in_dir_to_help_find(self, iter_fixture): directory, _Font_, expected_calls, expected_paths = iter_fixture paths = list(FontFiles._iter_font_files_in(directory)) @@ -77,6 +82,7 @@ def find_fixture(self, request, _installed_fonts_): @pytest.fixture(params=[ ('darwin', ['a', 'b']), ('win32', ['c', 'd']), + ('linux', ['e', 'f']), ]) def font_dirs_fixture( self, request, _os_x_font_directories_, @@ -133,6 +139,17 @@ def osx_dirs_fixture(self, request): def win_dirs_fixture(self, request): return [r'C:\Windows\Fonts'] + @pytest.fixture + def linux_dirs_fixture(self, request): + import os + os_ = var_mock(request, 'pptx.text.fonts.os') + os_.path = os.path + os_.environ = {'HOME': '/home/fbar'} + return [ + '/usr/share/fonts', + '/home/fbar/.fonts', + ] + # fixture components ----------------------------------- @pytest.fixture @@ -167,6 +184,9 @@ def _os_x_font_directories_(self, request): def _windows_font_directories_(self, request): return method_mock(request, FontFiles, '_windows_font_directories') + @pytest.fixture + def _linux_font_directories_(self, request): + return method_mock(request, FontFiles, '_linux_font_directories') class Describe_Font(object): From e112e9c627199c208a7d30b317ccd00db36843fd Mon Sep 17 00:00:00 2001 From: Matthew Hoopes Date: Wed, 2 Jan 2019 21:33:13 -0500 Subject: [PATCH 2/5] fix font tests --- tests/text/test_fonts.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/text/test_fonts.py b/tests/text/test_fonts.py index ff8053e96..e615a7ca9 100644 --- a/tests/text/test_fonts.py +++ b/tests/text/test_fonts.py @@ -54,7 +54,7 @@ def it_knows_windows_font_dirs_to_help_find(self, win_dirs_fixture): font_dirs = FontFiles._windows_font_directories() assert font_dirs == expected_dirs - def it_knows_linux_font_dirs_to_help_find(self, win_dirs_fixture): + def it_knows_linux_font_dirs_to_help_find(self, linux_dirs_fixture): expected_dirs = linux_dirs_fixture font_dirs = FontFiles._linux_font_directories() assert font_dirs == expected_dirs @@ -86,11 +86,12 @@ def find_fixture(self, request, _installed_fonts_): ]) def font_dirs_fixture( self, request, _os_x_font_directories_, - _windows_font_directories_): + _windows_font_directories_, _linux_font_directories_): platform, expected_dirs = request.param dirs_meth_mock = { 'darwin': _os_x_font_directories_, 'win32': _windows_font_directories_, + 'linux': _linux_font_directories_, }[platform] sys_ = var_mock(request, 'pptx.text.fonts.sys') sys_.platform = platform From 1b879a40bdaac0319e4ac0b1b60d7455546af54a Mon Sep 17 00:00:00 2001 From: Matthew Hoopes Date: Fri, 4 Jan 2019 19:46:44 -0500 Subject: [PATCH 3/5] added arch linux local font dir --- pptx/text/fonts.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pptx/text/fonts.py b/pptx/text/fonts.py index 07e3ff4a1..e13e203c2 100644 --- a/pptx/text/fonts.py +++ b/pptx/text/fonts.py @@ -114,7 +114,8 @@ def _linux_font_directories(cls): home = os.environ.get('HOME') if home is not None: linux_font_dirs.extend([ - os.path.join(home, '.fonts') + os.path.join(home, '.fonts'), + os.path.join(home, '.local/share/fonts'), ]) return linux_font_dirs From 036c697000e6cef16c2939bf8cbbda885b6b6098 Mon Sep 17 00:00:00 2001 From: Matthew Hoopes Date: Fri, 4 Jan 2019 19:48:24 -0500 Subject: [PATCH 4/5] added /usr/local/share/fonts --- pptx/text/fonts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pptx/text/fonts.py b/pptx/text/fonts.py index e13e203c2..73919f827 100644 --- a/pptx/text/fonts.py +++ b/pptx/text/fonts.py @@ -110,6 +110,7 @@ def _linux_font_directories(cls): """ linux_font_dirs = [ '/usr/share/fonts', + '/usr/local/share/fonts', ] home = os.environ.get('HOME') if home is not None: From ef8d5807b1c8c315bd887d4866a17289781fb4df Mon Sep 17 00:00:00 2001 From: Matthew Hoopes Date: Fri, 4 Jan 2019 19:54:10 -0500 Subject: [PATCH 5/5] fix font tests --- tests/text/test_fonts.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/text/test_fonts.py b/tests/text/test_fonts.py index e615a7ca9..d6971cb45 100644 --- a/tests/text/test_fonts.py +++ b/tests/text/test_fonts.py @@ -148,7 +148,9 @@ def linux_dirs_fixture(self, request): os_.environ = {'HOME': '/home/fbar'} return [ '/usr/share/fonts', + '/usr/local/share/fonts', '/home/fbar/.fonts', + '/home/fbar/.local/share/fonts', ] # fixture components -----------------------------------