Use bidiv instead of fribidi if available (Fixes #1912)

This commit is contained in:
Philipp Hagemeister 2013-12-23 04:19:20 +01:00
parent c7b487d96b
commit 5d681e960d
2 changed files with 17 additions and 8 deletions

View File

@ -183,12 +183,19 @@ def __init__(self, params=None):
width_args = [] width_args = []
else: else:
width_args = ['-w', str(width)] width_args = ['-w', str(width)]
self._fribidi = subprocess.Popen( sp_kwargs = dict(
['fribidi', '-c', 'UTF-8'] + width_args,
stdin=subprocess.PIPE, stdin=subprocess.PIPE,
stdout=slave, stdout=slave,
stderr=self._err_file) stderr=self._err_file)
self._fribidi_channel = os.fdopen(master, 'rb') try:
self._output_process = subprocess.Popen(
['bidiv'] + width_args, **sp_kwargs
)
except OSError:
print('Falling back to fribidi')
self._output_process = subprocess.Popen(
['fribidi', '-c', 'UTF-8'] + width_args, **sp_kwargs)
self._output_channel = os.fdopen(master, 'rb')
except OSError as ose: except OSError as ose:
if ose.errno == 2: if ose.errno == 2:
self.report_warning(u'Could not find fribidi executable, ignoring --bidi-workaround . Make sure that fribidi is an executable file in one of the directories in your $PATH.') self.report_warning(u'Could not find fribidi executable, ignoring --bidi-workaround . Make sure that fribidi is an executable file in one of the directories in your $PATH.')
@ -243,14 +250,16 @@ def add_post_processor(self, pp):
pp.set_downloader(self) pp.set_downloader(self)
def _bidi_workaround(self, message): def _bidi_workaround(self, message):
if not hasattr(self, '_fribidi_channel'): if not hasattr(self, '_output_channel'):
print('WORKAROUND NOT ENABLED')
return message return message
assert hasattr(self, '_output_process')
assert type(message) == type(u'') assert type(message) == type(u'')
line_count = message.count(u'\n') + 1 line_count = message.count(u'\n') + 1
self._fribidi.stdin.write((message + u'\n').encode('utf-8')) self._output_process.stdin.write((message + u'\n').encode('utf-8'))
self._fribidi.stdin.flush() self._output_process.stdin.flush()
res = u''.join(self._fribidi_channel.readline().decode('utf-8') res = u''.join(self._output_channel.readline().decode('utf-8')
for _ in range(line_count)) for _ in range(line_count))
return res[:-len(u'\n')] return res[:-len(u'\n')]

View File

@ -194,7 +194,7 @@ def _hide_login_info(opts):
type=float, default=None, help=optparse.SUPPRESS_HELP) type=float, default=None, help=optparse.SUPPRESS_HELP)
general.add_option( general.add_option(
'--bidi-workaround', dest='bidi_workaround', action='store_true', '--bidi-workaround', dest='bidi_workaround', action='store_true',
help=u'Work around terminals that lack bidirectional text support. Requires fribidi executable in PATH') help=u'Work around terminals that lack bidirectional text support. Requires bidiv or fribidi executable in PATH')
selection.add_option( selection.add_option(