| # HG changeset patch |
| # User Tim Hatch <tim@timhatch.com> |
| # Date 1445007300 25200 |
| # Node ID 0036ab1c99e256298094505e5e92fdacdfc5b0a8 |
| # Parent c0c0d4049a7c325cd69b764c6ceb7747d319212d |
| Avoid the shell entirely when finding fonts. |
| |
| Manually tested on OS X. |
| |
| diff --git a/pygments/formatters/img.py b/pygments/formatters/img.py |
| --- a/pygments/formatters/img.py |
| +++ b/pygments/formatters/img.py |
| @@ -10,12 +10,13 @@ |
| """ |
| |
| import sys |
| -import shlex |
| |
| from pygments.formatter import Formatter |
| from pygments.util import get_bool_opt, get_int_opt, get_list_opt, \ |
| get_choice_opt, xrange |
| |
| +import subprocess |
| + |
| # Import this carefully |
| try: |
| from PIL import Image, ImageDraw, ImageFont |
| @@ -76,14 +77,11 @@ |
| self._create_nix() |
| |
| def _get_nix_font_path(self, name, style): |
| - try: |
| - from commands import getstatusoutput |
| - except ImportError: |
| - from subprocess import getstatusoutput |
| - exit, out = getstatusoutput('fc-list %s file' % |
| - shlex.quote("%s:style=%s" % (name, style))) |
| - if not exit: |
| - lines = out.splitlines() |
| + proc = subprocess.Popen(['fc-list', "%s:style=%s" % (name, style), 'file'], |
| + stdout=subprocess.PIPE, stderr=None) |
| + stdout, _ = proc.communicate() |
| + if proc.returncode == 0: |
| + lines = stdout.splitlines() |
| if lines: |
| path = lines[0].strip().strip(':') |
| return path |
| @@ -198,7 +196,7 @@ |
| bold and italic fonts will be generated. This really should be a |
| monospace font to look sane. |
| |
| - Default: "Bitstream Vera Sans Mono" |
| + Default: "Bitstream Vera Sans Mono" on Windows, Courier New on *nix |
| |
| `font_size` |
| The font size in points to be used. |