Roromis / Lalf-Forumactif

Script permettant de convertir un forum hébergé par Forumactif en forum phpbb.
https://roromis.github.io/Lalf-Forumactif/
GNU General Public License v3.0
21 stars 13 forks source link

Balises BBCode non supportées (autre que TABLE) #56

Open Titou74 opened 8 years ago

Titou74 commented 8 years ago

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

Titou74 commented 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 !

Titou74 commented 8 years ago

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.

Pour les H* (H2, H3, H4)

Fichier phpbb.py

{"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}'},

Fichier htmltobbcode.py

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)

Pour les vidéos youtube et dailymotion

Fichier phpbb.py

{"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\">'},

Fichier htmltobbcode.py

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)