Open Titou74 opened 8 years ago
En fouillant un peu, je viens de trouver le fichier "phpbb.py" , dans lequel est défini les différents BBCODE supportés (est ensuite utilisé par "htmltobbcode.py"). Je vais ajouter les BBCodes manquant et tester. Je transmettrai le fichier si ça fonctionne !
fichiers htmltobbcode et phpbb.zip
Le petit bidouillage qui permet d'importer les balises H2, H3 et H4, ainsi que les vidéos Youtube et dailymotion :
NOTE : le formatage du code plante sur github ... les 2 fichiers modifiés sont dans le zip joint.
{"bbcode_id" : 29, "bbcode_tag" : 'h2', "bbcode_helpline" : 'H2', "display_on_posting" : 0, "bbcode_match" : '[h2]{TEXT}[/h2]', "bbcode_tpl" : '<h2 class=\"post-content\">{TEXT}', "first_passmatch" : '![h2](.?)[/h2]!ies', "first_pass_replace" : '\'[h2:$uid]\'.str_replace(array(\"\r\n\", \'\"\', \'\'\', \'(\', \')\'), array(\"\n\", \'\"\', \''\', \'(\', \')\'), trim(\'${1}\')).\'[/h2:$uid]\'', "second_passmatch" : '![h2:$uid](.?)[/h2:$uid]!s', "second_pass_replace" : '<h2 class=\"post-content\">${1}'},
{"bbcode_id" : 30, "bbcode_tag" : 'h3', "bbcode_helpline" : 'H3', "display_on_posting" : 0, "bbcode_match" : '[h3]{TEXT}[/h3]', "bbcode_tpl" : '<h3 class=\"post-content\">{TEXT}', "first_passmatch" : '![h3](.?)[/h3]!ies', "first_pass_replace" : '\'[h3:$uid]\'.str_replace(array(\"\r\n\", \'\"\', \'\'\', \'(\', \')\'), array(\"\n\", \'\"\', \''\', \'(\', \')\'), trim(\'${1}\')).\'[/h3:$uid]\'', "second_passmatch" : '![h3:$uid](.?)[/h3:$uid]!s', "second_pass_replace" : '<h3 class=\"post-content\">${1}'},
{"bbcode_id" : 31, "bbcode_tag" : 'h4', "bbcode_helpline" : 'H4', "display_on_posting" : 0, "bbcode_match" : '[h4]{TEXT}[/h4]', "bbcode_tpl" : '<h4 class=\"post-content\">{TEXT}', "first_passmatch" : '![h4](.?)[/h4]!ies', "first_pass_replace" : '\'[h4:$uid]\'.str_replace(array(\"\r\n\", \'\"\', \'\'\', \'(\', \')\'), array(\"\n\", \'\"\', \''\', \'(\', \')\'), trim(\'${1}\')).\'[/h4:$uid]\'', "second_passmatch" : '![h4:$uid](.?)[/h4:$uid]!s', "second_pass_replace" : '<h4 class=\"post-content\">${1}'},
Ajout des balises "h2", "h3", "h4" dans le _inline_handler
@Parser.handler("i", "u", "strike", "sub", "sup", "hr", "tr", "h2", "h3", "h4") def _inline_handler(tag, attrs): return InlineTagNode(tag)
{"bbcode_id" : 32, "bbcode_tag" : 'youtube', "bbcode_helpline" : 'Youtube', "display_on_posting" : 0, "bbcode_match" : '[youtube]{TEXT}[/youtube]', "bbcode_tpl" : '<iframe src=\"https://www.youtube.com/embed/{TEXT}\" allowfullscreen frameborder=\"0\" height=\"315\" width=\"560\">', "first_passmatch" : '![youtube](.?)[/youtube]!ies', "first_pass_replace" : '\'[youtube:$uid]${1}[/youtube:$uid]\'', "second_passmatch" : '![youtube:$uid](.?)[/youtube:$uid]!s', "second_pass_replace" : '<iframe src=\"https://www.youtube.com/embed/${1}\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" width=\"560\">'},
{"bbcode_id" : 33, "bbcode_tag" : 'dailymotion', "bbcode_helpline" : 'Dailymotion', "display_on_posting" : 0, "bbcode_match" : '[dailymotion]{TEXT}[/dailymotion]', "bbcode_tpl" : '<iframe src=\"http://www.dailymotion.com/video/embed/{TEXT}\" allowfullscreen=\"\" frameborder=\"0\" height=\"270\" width=\"480\">', "first_passmatch" : '![dailymotion](.?)[/dailymotion]!ies', "first_pass_replace" : '\'[dailymotion:$uid]\'.str_replace(array(\"\r\n\", \'\"\', \'\'\', \'(\', \')\'), array(\"\n\", \'\"\', \''\', \'(\', \')\'), trim(\'${1}\')).\'[/dailymotion:$uid]\'', "second_passmatch" : '![dailymotion:$uid](.?)[/dailymotion:$uid]!s', "second_pass_replace" : '<iframe src=\"http://www.dailymotion.com/embed/video/embed/${1}\" allowfullscreen=\"\" frameborder=\"0\" height=\"270\" width=\"480\">'},
class IframeTagNode(Node): """ A node representing an inline element """ def init(self, tag, attrs="", closing_tag=None, content=""): Node.init(self, tag) self.closing_tag = closing_tag self.attrs = attrs
if content: self.add_text(content) def get_bbcode(self, fileobj, bb, uid=""): if self.tag not in TAGS: logger = logging.getLogger('lalf.htmltobbcode') logger.warning("La balise bbcode [%s] n'est pas supportée.", self.tag) Node.get_bbcode(self, fileobj, bb, uid) else: fileobj.write("[{}{}{}]".format(self.tag, self.attrs, uid)) Node.get_bbcode(self, fileobj, bb, uid) if self.closing_tag: fileobj.write("[/{}{}]".format(self.closing_tag, uid)) else: fileobj.write("[/{}{}]".format(self.tag.rstrip("="), uid))
@Parser.handler("iframe") def _iframe_handler(tag, attrs): logger = logging.getLogger('lalf.htmltobbcode') if attrs["src"][:30] == "https://www.youtube.com/embed/": logger.warning(attrs["src"][30:len(attrs["src"])]) return IframeTagNode("youtube", content=attrs["src"][30:len(attrs["src"])]) if attrs["src"][:39] == "http://www.dailymotion.com/embed/video/": logger.warning(attrs["src"][39:len(attrs["src"])]) return IframeTagNode("dailymotion", content=attrs["src"][39:len(attrs["src"])]) return InlineTagNode(tag)
Bonjour, Tout d'abord, merci pour ce script qui va me permettre d'ENFIN changer :+1: :-)
J'ai cependant un soucis sur des BBCodes non supportées. Dans le fichier de log (que vous trouverez ci joint), les seules WARNINGS que j'ai portent sur les balises "table" et "hide".
J'ai donc détecté que les balises BBCode suivantes ne sont pas supportées (il n'y a pas de warning, et elles ne sont pas présentent dans les sujets extraits dans le SQL) :
Une solution serait de conserver dans les réponses les balises inconnues. phpBB 3.0.x et 3.1.x permettant tout 2 de gérer ses propres balises, cela permettrait (après ajout) d'appliquer le bon format HTML pour les balises citées ci dessus.
debug.zip