Hallo. Ich möchte nur meine Lösung teilen.
Was die Probleme mit Zitaten betrifft. Wie ich bereits sagte, hatte ich Probleme – reguläre Ausdrücke erfassen Zitate nicht, wenn:
- Benutzernamen und Post-IDs in Anführungszeichen eingeschlossen sein können
- verschachtelte Zitate
Ich habe mich entschieden, eine Suche und Ersetzung mit einer anderen Logik durchzuführen. Anstatt nach Tags und ihren Inhalten zu suchen, habe ich einen regulären Ausdruck verwendet, der nur nach Tags sucht:
war:
raw.gsub!(%r{\\[quote=\"?([^;]+);(\\d+)\"?\\](.+?)\\[\\/quote\\]}im) do
wurde zu:
raw.gsub!(%r{(\\[QUOTE(=\"?([^;]+);(\\d+)\"?)?\\])|(\\[\\/QUOTE\\])}im) do
und dann habe ich die Bestimmung der Quelle eines Zitats leicht geändert:
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
Außerdem habe ich den Spoiler-Code geändert. Anstatt:
# [spoiler=Some hidden stuff]SPOILER HERE!![/spoiler]
raw.gsub!(%r{\\[spoiler=\"?(.+?)\"?\\](.+?)\\[/spoiler\\]}im) do
"\\n#{$1}\\n[spoiler]#{$2}[/spoiler]\\n"
end
der den Text verschwommen darstellt, konvertiere ich ihn in ein Details-Tag:
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
Denn es stellt sich heraus, dass in der vBulletin-Welt – Spoiler nicht der verschwommene Inhalt ist, sondern der zusammengeklappte Inhalt. Daher halte ich es für das vBulletin-Importskript viel angemessener, Spoiler in Details anstelle von verschwommenen Spoilern zu konvertieren.
Ich habe auch das Erwähnungs-Tag bemerkt. In meinem Fall sahen die Erwähnungen in vBulletin so aus:
[mention=XXX]username[/mention]
Der im Skript verwendete reguläre Ausdruck berücksichtigt nicht, dass das Tag die Benutzer-ID enthalten kann.
# [MENTION]<username>[/MENTION]
raw.gsub!(%r{\\[mention\\](.+?)\\[/mention\\]}i) do
new_username = get_username_for_old_username($1)
"@#{new_username}"
end
Ich habe das auch auf meine Weise behoben:
# [MENTION]<username>[/MENTION]
raw.gsub!(%r{\\[mention(=\\d+)?\\](.+?)\\[/mention\\]}i) do
new_username = get_username_for_old_username($2)
"@#{new_username}"
end


