Hola. Solo quiero compartir mi solución.
En cuanto a los problemas con las citas. Como dije antes, me enfrentaba a problemas: la expresión regular no capturaba las comillas cuando:
- el nombre de usuario y el ID de la publicación pueden estar entre comillas dobles
- comillas anidadas
Decidí hacer una búsqueda y reemplazo usando una lógica diferente. En lugar de buscar etiquetas y su contenido, utilicé una expresión regular que busca solo las etiquetas:
era:
raw.gsub!(%r{\\[quote=\"?([^;]+);(\\d+)\"?\\](.+?)\\[\\/quote\\]}im) do
se convirtió en:
raw.gsub!(%r{(\\[QUOTE(=\"?([^;]+);(\\d+)\"?)?\\])|(\\[\\/QUOTE\\])}im) do
y luego cambié un poco la determinación de la fuente de una cita:
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
También cambié el código del spoiler. En lugar de:
# [spoiler=Some hidden stuff]SPOILER HERE!![/spoiler]
raw.gsub!(%r{\\[spoiler=\"?(.+?)\"?\\](.+?)\\[/spoiler\\]}im) do
"\n#{$1}\n[spoiler]#{$2}[/spoiler]\n"
end
que difumina el texto, lo convierto a la etiqueta de detalles:
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
Porque resulta que en el mundo de vbulletin, el spoiler no es contenido difuminado, sino contenido colapsado. Así que creo que es mucho más apropiado para el script de importación de vbulletin convertir los spoilers en detalles en lugar del spoiler difuminado.
También noté la etiqueta de mención. En mi caso, en vbulletin, las menciones se veían así:
[mention=XXX]username[/mention]
La expresión regular utilizada en el script no tiene en cuenta que la etiqueta puede contener el ID de usuario.
# [MENTION]<username>[/MENTION]
raw.gsub!(%r{\\[mention\\](.+?)\\[/mention\\]}i) do
new_username = get_username_for_old_username($1)
"@#{new_username}"
end
Lo arreglé a mi manera también:
# [MENTION]<username>[/MENTION]
raw.gsub!(%r{\\[mention(=\\d+)?\\](.+?)\\[/mention\\]}i) do
new_username = get_username_for_old_username($2)
"@#{new_username}"
end


