مرحباً. أردت فقط مشاركة حلي.
بالنسبة للمشاكل المتعلقة بالاقتباسات. كما ذكرت سابقًا، كنت أواجه مشاكل - التعبير النمطي لا يلتقط علامات الاقتباس عندما:
- قد يتم تضمين اسم المستخدم ومعرف المنشور في علامات اقتباس مزدوجة
- اقتباسات متداخلة
قررت إجراء بحث واستبدال باستخدام منطق مختلف. بدلاً من البحث عن العلامات ومحتوياتها، استخدمت تعبيرًا نمطيًا يبحث فقط عن العلامات:
كان:
raw.gsub!(%r{\\[quote=\"?([^;]+);(\\d+)\"?\\](.+?)\\[\\/quote\\]}im) do
أصبح:
raw.gsub!(%r{(\\[QUOTE(=\"?([^;]+);(\\d+)\"?)?\\])|(\\[\\/QUOTE\\])}im) do
ثم قمت بتغيير تحديد مصدر الاقتباس قليلاً:
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
أيضًا، قمت بتغيير رمز الإخفاء. بدلاً من:
# [spoiler=Some hidden stuff]SPOILER HERE!![/spoiler]
raw.gsub!(%r{\\[spoiler=\"?(.+?)\"?\\](.+?)\\[/spoiler\\]}im) do
"\n#{$1}\n[spoiler]#{$2}[/spoiler]\n"
end
الذي يقوم بتمويه النص، قمت بتحويله إلى علامة تفاصيل:
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
نظرًا لأنه يحدث أن في عالم vbulletin - الإخفاء ليس محتوى مموهًا، بل هو محتوى مطوي. لذلك أعتقد أنه من الأنسب بكثير لبرنامج نصي لاستيراد vbulletin تحويل المخفي إلى تفاصيل بدلاً من الإخفاء المموه.
لاحظت أيضًا علامة الإشارة. في حالتي، في vbulletin، بدت الإشارات هكذا:
[mention=XXX]username[/mention]
التعبير النمطي المستخدم في البرنامج النصي لا يأخذ في الاعتبار أن العلامة قد تحتوي على معرف المستخدم.
# [MENTION]<username>[/MENTION]
raw.gsub!(%r{\\[mention\\](.+?)\\[/mention\\]}i) do
new_username = get_username_for_old_username($1)
"@#{new_username}"
end
لقد قمت بإصلاح هذا بطريقتي الخاصة أيضًا:
# [MENTION]<username>[/MENTION]
raw.gsub!(%r{\\[mention(=\\d+)?\\](.+?)\\[/mention\\]}i) do
new_username = get_username_for_old_username($2)
"@#{new_username}"
end


