Merge branch 'master' into plugins

This commit is contained in:
Florent Le Coz 2011-11-06 19:24:37 +01:00
commit 6a0ac419c5
3 changed files with 14 additions and 32 deletions

View file

@ -1217,7 +1217,7 @@ class PrivateTab(ChatTab):
needed = 'inactive' if self.core.status.show in ('xa', 'away') else 'active' needed = 'inactive' if self.core.status.show in ('xa', 'away') else 'active'
msg['chat_state'] = needed msg['chat_state'] = needed
msg.send() msg.send()
self.core.add_message_to_text_buffer(self._text_buffer, line, None, self.core.own_nick or self.own_nick) self.core.add_message_to_text_buffer(self._text_buffer, xhtml.convert_simple_to_full_colors(line), None, self.core.own_nick or self.own_nick)
self.cancel_paused_delay() self.cancel_paused_delay()
self.text_win.refresh() self.text_win.refresh()
self.input.refresh() self.input.refresh()
@ -1579,7 +1579,6 @@ class RosterInfoTab(Tab):
self.command_add(jid.lstrip('\n')) self.command_add(jid.lstrip('\n'))
self.core.information('Contacts imported from %s' % filepath, 'Info') self.core.information('Contacts imported from %s' % filepath, 'Info')
def command_export(self, arg): def command_export(self, arg):
""" """
Export the contacts Export the contacts
@ -1881,7 +1880,7 @@ class ConversationTab(ChatTab):
needed = 'inactive' if self.core.status.show in ('xa', 'away') else 'active' needed = 'inactive' if self.core.status.show in ('xa', 'away') else 'active'
msg['chat_state'] = needed msg['chat_state'] = needed
msg.send() msg.send()
self.core.add_message_to_text_buffer(self._text_buffer, line, None, self.core.own_nick) self.core.add_message_to_text_buffer(self._text_buffer, xhtml.convert_simple_to_full_colors(line), None, self.core.own_nick)
logger.log_message(JID(self.get_name()).bare, self.core.own_nick, line) logger.log_message(JID(self.get_name()).bare, self.core.own_nick, line)
self.cancel_paused_delay() self.cancel_paused_delay()
self.text_win.refresh() self.text_win.refresh()

View file

@ -178,6 +178,8 @@ whitespace_re = re.compile(r'\s+')
xhtml_attr_re = re.compile(r'\x19\d{0,3}\}|\x19[buaio]') xhtml_attr_re = re.compile(r'\x19\d{0,3}\}|\x19[buaio]')
xhtml_simple_attr_re = re.compile(r'\x19\d')
def get_body_from_message_stanza(message): def get_body_from_message_stanza(message):
""" """
Returns a string with xhtml markups converted to Returns a string with xhtml markups converted to
@ -342,6 +344,15 @@ def clean_text_simple(string):
pos = string.find('\x19') pos = string.find('\x19')
return string return string
def convert_simple_to_full_colors(text):
"""
takes a \x19n formatted string and returns
a \x19n} formatted one.
"""
def add_curly_bracket(match):
return match.group(0) + '}'
return re.sub(xhtml_simple_attr_re, add_curly_bracket, text)
number_to_color_names = { number_to_color_names = {
1: 'red', 1: 'red',
2: 'green', 2: 'green',
@ -394,31 +405,3 @@ def poezio_colors_to_html(string):
res += '</%s>' % (elem,) res += '</%s>' % (elem,)
res += "</p></body>" res += "</p></body>"
return res.replace('\n', '<br />') return res.replace('\n', '<br />')
def poezio_colors_to_xhtml(string):
"""
Generate a valid xhtml string from
the poezio colors in the given string
"""
res = "<body xmlns='http://www.w3.org/1999/xhtml'>"
next_attr_char = string.find('\x19')
open_elements = []
while next_attr_char != -1:
attr_char = string[next_attr_char+1].lower()
if next_attr_char != 0:
res += string[:next_attr_char]
string = string[next_attr_char+2:]
if attr_char == 'o':
# close all opened elements
for elem in open_elements:
res += '</%s>'
open_elements = []
elif attr_char == 'b':
if 'strong' not in open_elements:
res += '<strong>'
open_elements.append('strong')
elif attr_char in digits:
self._win.attron(common.curses_color_pair(int(attr_char)))
next_attr_char = string.find('\x19')