@skobkin @supportfireman @strizhechenko Ну, мне в своё время надо было в BBCode и такого там точно не было, пришлось писать. Вышло как-то так. Это другая либа, надеюсь, что автору не придётся - но она явно похожая :))
def parse_bbcode(message_text, entities, urled=False):
"""BBCode parsing function"""
if message_text is None:
return None
if not sys.maxunicode == 0xffff:
message_text = message_text.encode('utf-16-le')
bbcode_text = ''
last_offset = 0
for entity, text in sorted(entities.items(), key=(lambda item: item[0].offset)):
trailingnewline = ''
nl = re.compile('\n$', re.IGNORECASE)
nlr = nl.search(text)
if (nlr):
print('Trailing NEWLINE detected in entiry, stripping...')
text = text.rstrip("\n")
trailingnewline = '\n'
if entity.type == 'text_link':
dm = (re.compile('![a-z0-9.]*@[a-z0-9.]*', re.IGNORECASE)).search(text)
if not (dm):
insert = '[url={}]{}[/url]'.format(entity.url, text)
else: insert = text
elif entity.type == 'mention':
insert = '[url=https://t.me/{0}]{1}[/url]'.format(text.strip('@'),text)
elif entity.type == 'url' and urled:
dm = (re.compile('![a-z0-9.]*@[a-z0-9.]*', re.IGNORECASE)).search(text)
if not (dm):
insert = '[url={0}]{0}[/url]'.format(text)
else: insert = text
elif entity.type == 'bold':
insert = '[b]' + text + '[/b]'
elif entity.type == 'italic':
insert = '[i]' + text + '[/i]'
elif entity.type == 'underline':
insert = '[u]' + text + '[/u]'
elif entity.type == 'strikethrough':
insert = '[s]' + text + '[/s]'
elif entity.type == 'code':
insert = '[c0de]' + text + '[/c0de]'
elif entity.type == 'pre':
insert = '[pre]' + text + '[/pre]'
else:
insert = text
if sys.maxunicode == 0xffff:
bbcode_text += message_text[last_offset:entity.offset] + insert + trailingnewline
else:
bbcode_text += message_text[last_offset * 2:entity.offset * 2].decode('utf-16-le') + insert + trailingnewline
last_offset = entity.offset + entity.length
if sys.maxunicode == 0xffff:
bbcode_text += message_text[last_offset:]
else:
bbcode_text += message_text[last_offset * 2:].decode('utf-16-le')
return bbcode_text
@shuro @skobkin @strizhechenko
в целом да, уже вижу что дернуть. Спасибо за entities - нашел в доке интересное!