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