Merge branch 'master' into plugins
This commit is contained in:
commit
6a0ac419c5
3 changed files with 14 additions and 32 deletions
|
@ -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()
|
||||||
|
|
39
src/xhtml.py
39
src/xhtml.py
|
@ -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')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue