وحدة:Cite Shamela/ملعب
هذه صفحة ملعب الوحدة لصفحة وحدة:Cite Shamela (فرق). |
توثيق الوحدة [أنشئ] [محو الاختزان][استخدامات] [قوالب]
local string=mw.ustring
function cite(frame)
local b,c,v,p,s,q,txt,book_id,u
local args = {}
local targs = {}
for k, v in pairs(frame.args) do
if v ~= "" then args[k] = v end
end
for k, v in pairs(frame:getParent().args) do
if v ~= "" then args[k] = v end
end
txt = args[1]
if string.find(txt,'https://shamela.ws/book/') ~= nil then
local q,c,u,ch,p
if string.match(txt,'^([^\n]+)\n%-%-%-%-%-%-%-%-\n([^\n]+) %- المكتبة الشاملة\n%-%-%-%-%-%-%-%-\nالرابط:(https://shamela.ws/book/%d+/%d+#p%d+)$') then
q,c,u = string.match(txt,'^([^\n]+)\n%-%-%-%-%-%-%-%-\n([^\n]+) %- المكتبة الشاملة\n%-%-%-%-%-%-%-%-\nالرابط:(https://shamela.ws/book/%d+/%d+#p%d+)$')
elseif string.match(txt,'(ص[^\n]+) %- المكتبة الشاملة\n%-%-%-%-%-%-%-%-\nالرابط:(https://shamela.ws/book/%d+/%d+#p%d+)$') then
c,u = string.match(txt,'(ص[^\n]+) %- المكتبة الشاملة\n%-%-%-%-%-%-%-%-\nالرابط:(https://shamela.ws/book/%d+/%d+#p%d+)$')
elseif string.match(txt,'(https://shamela.ws/book/%d+/%d+#p%d+)$') or string.match(txt,'(https://shamela.ws/book/%d+)$') then
u = string.match(txt,'(https://shamela.ws/book/%d+/%d+#p%d+)$') or string.match(txt,'(https://shamela.ws/book/%d+)$')
else
error('صيغة غير قياسية')
end
book_id = string.match(u,'^https://shamela.ws/book/(%d+)$') or string.match(u,'^https://shamela.ws/book/(%d+)/')
if not book_id then
return error("تحقق من رابط الموقع")
else
book_id=tonumber(book_id)
if c and string.match(u,'^https://shamela.ws/book/(%d+)/(%d+)') then
p,ch = string.match(c,'^ص([^\n ]+) %- [^\n]+ %- ([^\n%-]+)$')
if ch then
targs['chapter-url'] = u
targs.chapter = ch
else
targs.url= u
end
if p then
targs.page= p
end
else
targs['url'] = u
end
if q then
targs.quote = q
targs.via = '[[المكتبة الشاملة]]'
end
end
else
q = string.match(txt,':[%s\n]*«([^%)]+)»$')
if q then
targs.quote = q
targs.via = '[[المكتبة الشاملة]]'
end
b,c = string.match(txt,'^([^%(0-9]+) %(([^%)]+)%)')
if not b then
return error("صيغة غير قياسية")
elseif string.sub(b,1,1) == '«' and string.sub(b,-1,-1) == '»' then
b = mw.text.trim(string.sub(b,2,-2))
end
if c then
if string.match(c,'^ص(%d+)$') then
p = string.match(c,'^ص(%d+)$')
elseif string.match(c,'^ص(%d+) ([ء-ي].+)$') then
p,s = string.match(c,'^ص(%d+) ([ء-ي].+)$')
elseif string.match(c,'^([^/]+)/ (%d+)$') then
v,p = string.match(c,'^([^/]+)/ (%d+)$')
elseif string.match(c,'^([^/]+)/ (%d+) ([ء-ي].+)$') then
v,p,s = string.match(c,'^([^/]+)/ (%d+) ([ء-ي].+)$')
else
return error("صيغة غير قياسية")
end
if p then
targs.page = p
end
if v then
targs.volume = v
end
end
mw.log(txt,b,c,v,p,s,q)
end
if b or book_id then
shamela = mw.loadData('Module:Cite Shamela/data')
if book_id then
for k,v in pairs(shamela) do
if v.id == book_id then
b = v.name
targs.qid = v.q
break
end
end
elseif b then
for k,v in pairs(shamela) do
if (v.pre or v.name) == b and s == v.suf then
book_id = v.id
targs.qid = v.q
break
end
end
end
end
if targs.qid == nil then
return ('<strong class="error">لم يعثر على بيانات الكتاب في ويكي بيانات</strong>')
end
return table.concat ({frame:expandTemplate ({title='استشهاد بويكي بيانات/نسخ', args=targs}), '<!-- إخراج تلقائي من قالب:استشهاد بالشاملة -->'})
end
return {
cite = cite
}