Ciao. Voglio solo condividere la mia soluzione.
Per quanto riguarda i problemi con le citazioni. Come ho detto prima, stavo affrontando problemi: l’espressione regolare non catturava le virgolette quando:
- il nome utente e l’ID del post potevano essere racchiusi tra virgolette doppie
- citazioni annidate
Ho deciso di fare una ricerca e sostituzione usando una logica diversa. Invece di cercare i tag e il loro contenuto, ho usato un’espressione regolare che cerca solo i tag:
era:
raw.gsub!(%r{\\[quote=\"?([^;]+);(\\d+)\"?\\](.+?)\\[\\/quote\\]}im) do
diventa:
raw.gsub!(%r{(\\[QUOTE(=\"?([^;]+);(\\d+)\"?)?\\])|(\\[\\/QUOTE\\])}im) do
e poi ho modificato leggermente la determinazione della fonte di una citazione:
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
Inoltre, ho modificato il codice dello spoiler. Invece di:
# [spoiler=Some hidden stuff]SPOILER HERE!![/spoiler]
raw.gsub!(%r{\\[spoiler=\"?(.+?)\"?\\](.+?)\\[/spoiler\\]}im) do
"\n#{$1}\n[spoiler]#{$2}[/spoiler]\n"
end
che sfoca il testo, lo converto in un tag 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
Poiché si dà il caso che nel mondo vbulletin - spoiler non sia il contenuto sfocato, ma piuttosto il contenuto collassato. Quindi penso che sia molto più appropriato per lo script di importazione vbulletin convertire gli spoiler in dettagli invece dello spoiler sfocato.
Ho anche notato il tag di menzione. Nel mio caso, in vbulletin, le menzioni apparivano così:
[mention=XXX]username[/mention]
L’espressione regolare utilizzata nello script non tiene conto del fatto che il tag possa contenere l’ID utente.
# [MENTION]<username>[/MENTION]
raw.gsub!(%r{\\[mention\\](.+?)\\[/mention\\]}i) do
new_username = get_username_for_old_username($1)
"@#{new_username}"
end
L’ho corretto anche a modo mio:
# [MENTION]<username>[/MENTION]
raw.gsub!(%r{\\[mention(=\\d+)?\\](.+?)\\[/mention\\]}i) do
new_username = get_username_for_old_username($2)
"@#{new_username}"
end


