From c33017583e4ac0663405276efd0f66b255af340c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 31 Dec 2015 10:23:12 +0530 Subject: [PATCH] Book details panel: Display data in right-to-left format when the calibre interface language is set to a right-to-left language such as Hebrew or Arabic --- src/calibre/ebooks/metadata/book/render.py | 5 +++-- src/calibre/gui2/book_details.py | 3 ++- src/calibre/gui2/viewer/ui.py | 3 ++- src/calibre/utils/localization.py | 3 +++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/calibre/ebooks/metadata/book/render.py b/src/calibre/ebooks/metadata/book/render.py index e6ad2a5f9d..b6f5a0ef19 100644 --- a/src/calibre/ebooks/metadata/book/render.py +++ b/src/calibre/ebooks/metadata/book/render.py @@ -53,7 +53,7 @@ def search_href(search_term, value): def item_data(field_name, value, book_id): return hexlify(cPickle.dumps((field_name, value, book_id), -1)) -def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers=True, rating_font='Liberation Serif'): +def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers=True, rating_font='Liberation Serif', rtl=False): if field_list is None: field_list = get_field_list(mi) ans = [] @@ -263,4 +263,5 @@ def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers= ans = [u'%s'%(fieldl.replace('#', '_'), classname(fieldl), html) for fieldl, html in ans] # print '\n'.join(ans) - return u'%s
'%(u'\n'.join(ans)), comment_fields + direction = 'rtl' if rtl else 'ltr' + return u'%s
'%(direction, u'\n'.join(ans)), comment_fields diff --git a/src/calibre/gui2/book_details.py b/src/calibre/gui2/book_details.py index eb0794e2f9..1ff5d22cfb 100644 --- a/src/calibre/gui2/book_details.py +++ b/src/calibre/gui2/book_details.py @@ -23,6 +23,7 @@ from calibre.ebooks.metadata.book.base import (field_metadata, Metadata) from calibre.ebooks.metadata.book.render import mi_to_html from calibre.gui2 import (config, open_url, pixmap_to_data, gprefs, rating_font) from calibre.utils.config import tweaks +from calibre.utils.localization import is_rtl def render_html(mi, css, vertical, widget, all_fields=False, render_data_func=None): # {{{ table, comment_fields = (render_data_func or render_data)(mi, all_fields=all_fields, @@ -100,7 +101,7 @@ def get_field_list(fm, use_defaults=False): def render_data(mi, use_roman_numbers=True, all_fields=False): field_list = get_field_list(getattr(mi, 'field_metadata', field_metadata)) field_list = [(x, all_fields or display) for x, display in field_list] - return mi_to_html(mi, field_list=field_list, use_roman_numbers=use_roman_numbers, + return mi_to_html(mi, field_list=field_list, use_roman_numbers=use_roman_numbers, rtl=is_rtl(), rating_font=rating_font(), default_author_link=gprefs.get('default_author_link')) # }}} diff --git a/src/calibre/gui2/viewer/ui.py b/src/calibre/gui2/viewer/ui.py index 98db0443dd..f069ceda36 100644 --- a/src/calibre/gui2/viewer/ui.py +++ b/src/calibre/gui2/viewer/ui.py @@ -21,6 +21,7 @@ from calibre.gui2.viewer.documentview import DocumentView from calibre.gui2.viewer.bookmarkmanager import BookmarkManager from calibre.gui2.viewer.toc import TOCView, TOCSearch from calibre.gui2.viewer.footnote import FootnotesView +from calibre.utils.localization import is_rtl class DoubleSpinBox(QDoubleSpinBox): # {{{ @@ -85,7 +86,7 @@ class Metadata(QWebView): # {{{ from calibre.ebooks.metadata.book.render import mi_to_html def render_data(mi, use_roman_numbers=True, all_fields=False): - return mi_to_html(mi, use_roman_numbers=use_roman_numbers, rating_font=rating_font()) + return mi_to_html(mi, use_roman_numbers=use_roman_numbers, rating_font=rating_font(), rtl=is_rtl()) mi = opf.to_book_metadata() html = render_html(mi, self.css, True, self, render_data_func=render_data) diff --git a/src/calibre/utils/localization.py b/src/calibre/utils/localization.py index 9d09b13417..402d92057b 100644 --- a/src/calibre/utils/localization.py +++ b/src/calibre/utils/localization.py @@ -81,6 +81,9 @@ def get_lang(): lang = 'en' return lang +def is_rtl(): + return get_lang()[:2].lower() in {'he', 'ar'} + def get_lc_messages_path(lang): hlang = None if zf_exists():