From 568e1edd1e7c81259a98f8640ca0ead8d9727b02 Mon Sep 17 00:00:00 2001 From: Benjamin Richter Date: Fri, 25 Sep 2009 17:11:38 +0200 Subject: Improved handling of RTL nicknames in roster. Fixes #4293 If the number of connected resources is appended in parentheses, the appropriate ltr or rtl mark is inserted before, so that the writing direction at the end of the nickname matches the writing direction of the whole displayed string as determined by http://www.unicode.org/reports/tr9/#The_Paragraph_Level --- src/common/i18n.py | 14 ++++++++++++++ src/roster_window.py | 4 +++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/common/i18n.py b/src/common/i18n.py index e6e7d3f9b..94c8fc2ef 100644 --- a/src/common/i18n.py +++ b/src/common/i18n.py @@ -5,6 +5,7 @@ ## Copyright (C) 2004 Vincent Hanquez ## Copyright (C) 2004-2007 Yann Leboulanger ## Copyright (C) 2005-2006 Nikos Kouremenos +## Copyright (C) 2009 Benjamin Richter
## ## This file is part of Gajim. ## @@ -25,6 +26,19 @@ import locale import gettext import os import defs +import unicodedata + +def paragraph_direction_mark(text): + """Determine paragraph writing direction according to + http://www.unicode.org/reports/tr9/#The_Paragraph_Level + + Returns either Unicode LTR mark or RTL mark.""" + for c in text: + bidi = unicodedata.bidirectional(c) + if bidi == 'L': return u'\u200E' + elif bidi == 'AL' or bidi == 'R': return u'\u200F' + + return u'\u200E' APP = 'gajim' DIR = defs.localedir diff --git a/src/roster_window.py b/src/roster_window.py index 69e35c250..7bc4c1cf1 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -1113,7 +1113,9 @@ class RosterWindow: if c.show not in ('error', 'offline'): nb_connected_contact += 1 if nb_connected_contact > 1: - name += ' (' + unicode(nb_connected_contact) + ')' + # switch back to default writing direction + name += i18n.paragraph_direction_mark(unicode(name)) + name += u' (%d)' % nb_connected_contact # show (account_name) if there are 2 contact with same jid # in merged mode -- cgit v1.2.3