Salut. Je voulais juste partager ma solution.
Concernant les problèmes avec les citations. Comme je l’ai dit précédemment, j’ai rencontré des problèmes - les expressions régulières ne capturaient pas les guillemets lorsque :
- le nom d’utilisateur et l’ID du message pouvaient être entourés de guillemets doubles
- des guillemets imbriqués
J’ai décidé de faire une recherche et remplacement en utilisant une logique différente. Au lieu de rechercher les balises et leur contenu, j’ai utilisé une expression régulière qui recherche uniquement les balises :
était :
raw.gsub!(%r{\\[quote=\"?([^;]+);(\\d+)\"?\\](.+?)\\[\\/quote\\]}im) do
est devenu :
raw.gsub!(%r{(\\[QUOTE(=\"?([^;]+);(\\d+)\"?)?\\])|(\\[\\/QUOTE\\])}im) do
et ensuite j’ai légèrement modifié la détermination de la source d’une citation :
if $3 && $4
if topic_lookup = topic_lookup_from_imported_post_id(post_id)
post_number = topic_lookup[:post_number]
topic_id = topic_lookup[:topic_id]
"\n[quote=\"#{new_username},post:#{post_number},topic:#{topic_id}\"]\n"
else
"\n[quote=\"#{new_username}\"]\n"
end
elsif $5
"\n[/quote]\n"
end
J’ai également changé le code des spoilers. Au lieu de :
# [spoiler=Some hidden stuff]SPOILER HERE!![/spoiler]
raw.gsub!(%r{\\[spoiler=\"?(.+?)\"?\\](.+?)\\[/spoiler\\]}im) do
"\n#{$1}\n[spoiler]#{$2}[/spoiler]\n"
end
qui brouillait le texte, je l’ai converti en balise details :
raw.gsub!(%r{(\\[spoiler(=\"?(.*?)\"?)?\\])|(\\[\\/spoiler\\])}im) do
if $3
"\n[details=#{$3}]\n"
elsif $1
"\n[details]\n"
elsif $4
"\n[/details]\n"
end
end
Parce qu’il se trouve que dans le monde vbulletin, le spoiler n’est pas un contenu flouté, mais plutôt un contenu replié. Je pense donc qu’il est beaucoup plus approprié pour le script d’importation vbulletin de convertir les spoilers en détails plutôt qu’en spoiler flouté.
J’ai également remarqué la balise mention. Dans mon cas, sur vbulletin, les mentions ressemblaient à ceci :
[mention=XXX]username[/mention]
L’expression régulière utilisée dans le script ne tient pas compte du fait que la balise peut contenir l’ID de l’utilisateur.
# [MENTION]<username>[/MENTION]
raw.gsub!(%r{\\[mention\\](.+?)\\[/mention\\]}i) do
new_username = get_username_for_old_username($1)
"@#{new_username}"
end
Je l’ai également corrigé à ma manière :
# [MENTION]<username>[/MENTION]
raw.gsub!(%r{\\[mention(=\\d+)?\\](.+?)\\[/mention\\]}i) do
new_username = get_username_for_old_username($2)
"@#{new_username}"
end


