ويكاموس arwiktionary https://ar.wiktionary.org/wiki/%D9%88%D9%8A%D9%83%D8%A7%D9%85%D9%88%D8%B3:%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9_%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9 MediaWiki 1.47.0-wmf.12 case-sensitive ميديا خاص نقاش مستخدم نقاش المستخدم ويكاموس نقاش ويكاموس ملف نقاش الملف ميدياويكي نقاش ميدياويكي قالب نقاش القالب مساعدة نقاش المساعدة تصنيف نقاش التصنيف ملحق نقاش الملحق مكنز نقاش المكنز نص زمني نقاش النص الزمني وحدة نقاش الوحدة فعالية نقاش فعالية نقاش المستخدم:Jianhui67 3 156787 1097369 580804 2026-07-24T05:26:11Z Jianhui67 11553 - 1097369 wikitext text/x-wiki If you have any questions, you are welcome to leave a message here. 0z3ybjr7wro4bo4i4ieif9ug12h22y1 قالب:استشهاد بويكي بيانات/مختبر 10 231222 1097323 1097108 2026-07-23T14:05:28Z حبيشان 31560 1097323 wikitext text/x-wiki * {{استشهاد بويكي بيانات/ملعب|Q115727209|مرجع=أبو السعود}} * {{استشهاد بويكي بيانات|Q115727209|مرجع=أبو السعود}} * {{استشهاد بويكي بيانات/ملعب|Q115641715|مرجع=الشربيني1868}} * {{استشهاد بويكي بيانات|Q115641715|مرجع=الشربيني1868}} * {{استشهاد بويكي بيانات/ملعب|Q115683910|مرجع=القرطبي1935}} * {{استشهاد بويكي بيانات|Q115683910|مرجع=القرطبي1935}} * {{استشهاد بويكي بيانات/ملعب|Q115728353|مرجع=السيوطي1974}} * {{استشهاد بويكي بيانات|Q115728353|مرجع=السيوطي1974}} * {{استشهاد بويكي بيانات/ملعب|Q115732199|مرجع=السيوطي1978}} * {{استشهاد بويكي بيانات|Q115732199|مرجع=السيوطي1978}} * {{استشهاد بويكي بيانات/ملعب|Q115641917|مرجع=القاضي1981}} * {{استشهاد بويكي بيانات|Q115641917|مرجع=القاضي1981}} * {{استشهاد بويكي بيانات/ملعب|Q115641984|مرجع=ابن عاشور1984}} * {{استشهاد بويكي بيانات|Q115641984|مرجع=ابن عاشور1984}} * {{استشهاد بويكي بيانات/ملعب|Q115683837}} * {{استشهاد بويكي بيانات|Q115683837}} * {{استشهاد بويكي بيانات/ملعب|Q115782668|مرجع=النحاس1985}} * {{استشهاد بويكي بيانات|Q115782668|مرجع=النحاس1985}} * {{استشهاد بويكي بيانات/ملعب|Q115746114|مرجع=القحطاني1989}} * {{استشهاد بويكي بيانات|Q115746114|مرجع=القحطاني1989}} * {{استشهاد بويكي بيانات/ملعب|Q19443162}} * {{استشهاد بويكي بيانات|Q19443162}} * {{استشهاد بويكي بيانات/ملعب|Q115640897|مرجع=درويش1992}} * {{استشهاد بويكي بيانات|Q115640897|مرجع=درويش1992}} * {{استشهاد بويكي بيانات/ملعب|Q115754123|مرجع=الواحدي1992}} * {{استشهاد بويكي بيانات|Q115754123|مرجع=الواحدي1992}} * {{استشهاد بويكي بيانات/ملعب|Q115651867|مرجع=الداني1994}} * {{استشهاد بويكي بيانات|Q115651867|مرجع=الداني1994}} * {{استشهاد بويكي بيانات/ملعب|Q115756452|مرجع=عطية1995}} * {{استشهاد بويكي بيانات|Q115756452|مرجع=عطية1995}} * {{استشهاد بويكي بيانات/ملعب|Q115701544|مرجع=ابن كثير1998}} * {{استشهاد بويكي بيانات|Q115701544|مرجع=ابن كثير1998}} * {{استشهاد بويكي بيانات/ملعب|Q115730072|مرجع=ابن عادل1998}} * {{استشهاد بويكي بيانات|Q115730072|مرجع=ابن عادل1998}} * {{استشهاد بويكي بيانات/ملعب|Q115730115|مرجع=الرازي2000}} * {{استشهاد بويكي بيانات|Q115730115|مرجع=الرازي2000}} * {{استشهاد بويكي بيانات/ملعب|Q97221368|مرجع=الطبري2001}} * {{استشهاد بويكي بيانات|Q97221368|مرجع=الطبري2001}} * {{استشهاد بويكي بيانات/ملعب|Q115484580|مرجع=أحمد2001}} * {{استشهاد بويكي بيانات|Q115484580|مرجع=أحمد2001}} * {{استشهاد بويكي بيانات/ملعب|Q115683684}} * {{استشهاد بويكي بيانات|Q115683684}} * {{استشهاد بويكي بيانات/ملعب|Q115640158|مرجع=الدعاس2004}} * {{استشهاد بويكي بيانات|Q115640158|مرجع=الدعاس2004}} * {{استشهاد بويكي بيانات/ملعب|Q115683765|مرجع=سلامة2006}} * {{استشهاد بويكي بيانات|Q115683765|مرجع=سلامة2006}} * {{استشهاد بويكي بيانات/ملعب|Q115701920|مرجع=ابن القيم2007}} * {{استشهاد بويكي بيانات|Q115701920|مرجع=ابن القيم2007}} * {{استشهاد بويكي بيانات/ملعب|Q115743500}} * {{استشهاد بويكي بيانات|Q115743500}} * {{استشهاد بويكي بيانات/ملعب|Q115615370|مرجع=الشايع2011}} * {{استشهاد بويكي بيانات|Q115615370|مرجع=الشايع2011}} * {{استشهاد بويكي بيانات/ملعب|Q140501357}} * {{استشهاد بويكي بيانات|Q140501357}} * {{استشهاد بويكي بيانات/ملعب|Q136804563|ج=2|ص=442}} * {{استشهاد بويكي بيانات|Q136804563|ج=2|ص=442}} * {{استشهاد بويكي بيانات/ملعب|Q115796840|ج=2|ص=100}} * {{استشهاد بويكي بيانات|Q115796840|ج=2|ص=100}} * {{استشهاد بويكي بيانات/ملعب|Q114810954|ص=100}} * {{استشهاد بويكي بيانات|Q114810954|ص=100}} <div dir="ltr"> * {{استشهاد بويكي بيانات/ملعب|Q115917529|مرجع=Dyson1999}} * {{استشهاد بويكي بيانات|Q115917529|مرجع=Dyson1999}} * {{استشهاد بويكي بيانات/ملعب|Q118316084|مرجع=Javvin2005}} * {{استشهاد بويكي بيانات|Q118316084|مرجع=Javvin2005}} * {{استشهاد بويكي بيانات/ملعب|Q115917346|مرجع=Kozierok2005}} * {{استشهاد بويكي بيانات|Q115917346|مرجع=Kozierok2005}} * {{استشهاد بويكي بيانات/ملعب|Q115922106|مرجع=Fall2012}} * {{استشهاد بويكي بيانات|Q115922106|مرجع=Fall2012}} * {{استشهاد بويكي بيانات/ملعب|Q115919723|مرجع=Odom2013}} * {{استشهاد بويكي بيانات|Q115919723|مرجع=Odom2013}} * {{استشهاد بويكي بيانات/ملعب|Q9065143}} </div> 96mhujrstjf1dmprzeespdrcp5y50ag وحدة:Cite Q/ملعب 828 231230 1097360 1097287 2026-07-23T20:59:37Z حبيشان 31560 1097360 Scribunto text/plain --[[ Cite Q النسخة العربية مشتق من النسخة الإنجليزية ]] require('strict') local sandbox = '/ملعب' local WdItem = require('Module:WdItem' .. sandbox) local cfg = mw.loadData('Module:Cite Q/config' .. sandbox) local rtl_lang = {ar = true, fa = true, ur = true, ku = true, he = true, arc = true, dv = true, ha = true, khw = true, ks = true, ps = true, yi = true, ota = true } local ref_cash = {} --[[-------------------< A R G U M E N T _ W R A P P E R >---------------------- Argument wrapper. This function provides support for argument mapping defined in the configuration file so that multiple names can be transparently aliased to single internal variable. ]] local function argument_wrapper ( arglist ) local origin = {}; local nilargs = {}; return setmetatable({ ORIGIN = function ( self, k ) local dummy = self[k]; -- force the variable to be loaded. return origin[k]; end }, { __index = function ( tbl, k ) local v = rawget(tbl,k) if v then return v elseif nilargs[k] then return nil end local list = (type(k)=="number") and k or cfg.aliases_t[k]; if type( list ) == 'table' then for _, alias_key in pairs( list ) do if arglist[alias_key] then v = arglist[alias_key] origin[k] = alias_key break; end end elseif list ~= nil then v = arglist[list] if v then origin[k] = list end end if v == nil then nilargs[k] = true else rawset( tbl, k, v ) end return v end, }); end ------------------------------------------------------------------------------- -- makeOrdinal needs to be internationalised along with cfg.i18n_t -- takes cardinal number as a numeric and returns the ordinal as a string -- we need three exceptions in English for 1st, 2nd, 3rd, 21st, .. 31st, etc. ------------------------------------------------------------------------------- local makeOrdinal = function(cardinal) local card = tonumber(cardinal) if not card then return cardinal end local ordsuffix = cfg.i18n_t.ordinal.default if card % 10 == 1 then ordsuffix = cfg.i18n_t.ordinal[1] elseif card % 10 == 2 then ordsuffix = cfg.i18n_t.ordinal[2] elseif card % 10 == 3 then ordsuffix = cfg.i18n_t.ordinal[3] end -- In English, 1, 21, 31, etc. use 'st', but 11, 111, etc. use 'th' -- similarly for 12 and 13, etc. if (card % 100 == 11) or (card % 100 == 12) or (card % 100 == 13) then ordsuffix = cfg.i18n_t.ordinal.default end return card .. ordsuffix end --[[--------------------------< I S _ S E T >-------------------------------------------------------------- Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. ]] local function is_set( var ) return not (var == nil or var == '') end --[[--------------------------< I N _ A R R A Y >-------------------------------------------------------------- Whether needle is in haystack (taken from Module:Citation/CS1/Utilities) ]] local function in_array( needle, haystack ) if needle == nil then return false end for n, v in ipairs( haystack ) do if v == needle then return n end end return false end local function getLanguages(languageArg) local langcodes = {} if languageArg then -- check these are a supported language codes for lc in mw.text.gsplit( languageArg, "[,، ]+", false ) do --modified langcodes[#langcodes+1] = mw.language.isSupportedLanguage(lc) and lc end end return langcodes end --[[--------------------------< A C C E P T _ V A L U E >------------------------------------------------------- Accept WD value by framing in ((...)) if param_val is equal to keyword; else pass-through WD value as is. ]] local function accept_value( param_val, wd_val ) local val = param_val if val then if in_array (val, {'accept', '))((', ':d:'}) then val = '((' .. wd_val .. '))' elseif '((accept))' == val then val = 'accept' elseif '(())(())' == val then val = '))((' elseif '((:d:))' == val then val = ':d:' else val = wd_val end end return val end -- function to fetch a value to display local function makelink(v, out, link, maxpos, wdl, lang) local label local snak = v.mainsnak or v if snak.snaktype == "value" then if snak.datatype == "wikibase-item" then local qnumber = snak.datavalue.value.id local sitelink = mw.wikibase.getSitelink(qnumber) if qnumber == "Q2818964" then sitelink = nil end -- suppress link to "Various authors" -- من المهم التحقق من وجود datavalue if v.qualifiers and v.qualifiers.P1932 and v.qualifiers.P1932[1].datavalue then label = v.qualifiers.P1932[1].datavalue.value else label = mw.wikibase.getLabelByLang(qnumber, lang) or mw.wikibase.getLabel(qnumber) if label then label = mw.text.nowiki(label) else label = qnumber -- should add tracking category end end local position = maxpos + 1 -- Default to 'next' author. -- use P1545 (series ordinal) instead of default position. if v["qualifiers"] and v.qualifiers["P1545"] and v.qualifiers["P1545"][1] then position = tonumber(v.qualifiers["P1545"][1].datavalue.value) end maxpos = math.max(maxpos, position) if sitelink then -- just the plain name, -- but keep a record of the links, using the same index out[position] = label link[position] = sitelink else if wdl then -- show that there's a Wikidata entry available out[position] = string.format( "[[:d:Q%s|%s]]&nbsp;<span title='%s'>[[File:Wikidata-logo.svg|16px|alt=|link=]]</span>", snak.datavalue.value["numeric-id"], label, cfg.i18n_t["errors"]["local-article-not-found"] ) else -- no Wikidata links wanted, so just give the plain label out[position] = label end end elseif snak.datatype == "string" then local position = maxpos + 1 -- Default to 'next' author. -- use P1545 (series ordinal) instead of default position. if v["qualifiers"] and v.qualifiers["P1545"] and v.qualifiers["P1545"][1] then position = tonumber(v.qualifiers["P1545"][1].datavalue.value) end maxpos = math.max(maxpos, position) out[position] = snak.datavalue.value else -- not a wikibase-item or a string! end else -- code here if we want to return something when author is "unknown" -- من المهم التحقق من وجود datavalue if v.qualifiers and v.qualifiers.P1932 and v.qualifiers.P1932[1].datavalue then label = v.qualifiers.P1932[1].datavalue.value else label = cfg.i18n_t["unknown-author"][lang] or cfg.i18n_t["unknown-author"]["ar"] end maxpos = maxpos + 1 out[maxpos] = label end return maxpos end --[=[-------------------------< G E T _ N A M E _ L I S T >---------------------------------------------------- get_name_list -- adapted from getAuthors code taken from Module:RexxS arguments: nl_type - type of name list to fetch: nl_type = 'author' for authors; 'editor' for editors; 'translator' for translators args - pointer to the parameter arguments table from the template call qid - value from |qid= parameter; the Q-id of the source (book, etc.) in qid wdl - value from the |wdl= parameter; a Boolean passed to enable links to Wikidata when no article exists returns nothing; modifies the args table ]=] local function get_name_list (nl_type, args, Q, wdl, lang) local propertyID = "P50" local fallbackID = "P2093" -- author name string if nl_type =="author" then propertyID = 'P50' -- for authors fallbackID = 'P2093' -- author-string elseif nl_type =="editor" then propertyID = 'P5769' -- "editor-in-chief" fallbackID = 'P98' -- for editors - So-called "fallbacks" are actually a second set of properties processed -- TBD. Take book series editors into account as well (if they have a separate P code as well)? elseif nl_type == "translator" then propertyID = 'P655' -- for translators fallbackID = nil -- elseif 'contributor' == nl_type then -- f.e. author of forewords (P2679) and afterwords (P2680); requires |contribution=, |title= and |author= -- propertyID = 'P' -- for contributors -- fallbackID = nil else return -- not specified so return end -- wdl is a Boolean passed to enable links to Wikidata when no article exists -- if "false" or "no" or "0" is passed set it false -- if nothing or an empty string is passed set it false if wdl and (#wdl > 0) then wdl = wdl:lower() wdl = in_array (wdl, {"false", "no", "0"}) else -- wdl is empty, so wdl = false end local statements = Q:getStatements(propertyID) if statements:count() == 0 and fallbackID then statements = Q:getStatements(fallbackID) end -- Make sure it actually has at least one of the properties requested if statements:count() == 0 then return nil end -- So now we have something to return: -- table 'out' is going to store the names(s): -- and table 'link' will store any links to the name's article local out = {} local link = {} local maxpos = 0 for _, s in statements:iter() do -- maxpos = makelink(v, out, link, maxpos, wdl, lang) local qnumber = s:getRawValue() if qnumber ~='novalue' then local label = s:getValue({linked=false}) local slink if label == 'somevalue' then label = cfg.i18n_t["unknown-author"][lang] or cfg.i18n_t["unknown-author"]["ar"] elseif mw.ustring.match(qnumber, '^Q%d+$') and qnumber ~= 'Q2818964' then slink = mw.wikibase.getSitelink(qnumber, cfg.config_t.linksproject) end local position = maxpos + 1 -- Default to 'next' author. position = tonumber(s:getRawQual("P1545")[1]) or position maxpos = math.max(maxpos, position) out[position] = label if slink then link[position] = cfg.config_t.wikilinkprefix .. slink; end end end -- if there's anything to return, then insert the additions in the template arguments table -- in the form |author1=firstname secondname |author2= ... -- Renumber, in case we have inconsistent numbering local keys = {} for k, v in pairs(out) do keys[#keys + 1] = k end table.sort(keys) -- as they might be out of order for i, k in ipairs(keys) do out[k] = out[k]:gsub ('&#39;', '\''); -- prevent cs1|2 multiple names categorization; replace html entity with the actual character if args[nl_type .. i] then -- name gets overwritten -- pull corresponding -link only if overwritten name is same as WD name if link[k] and (args[nl_type .. i] == out[k]) then args[nl_type .. '-link' .. i] = args[nl_type .. '-link' .. i] or link[k] -- author-linkn or editor-linkn end else -- name does not get overwritten, so pull name from WD args[nl_type .. i] = out[k] if link[k] then args[nl_type .. '-link' .. i] = args[nl_type .. '-link' .. i] or link[k] -- author-linkn or editor-linkn end end end end local function _getLangOfSnakProp(snak, pid) if not pid or not snak then return {} end local out = {} local props = snak[pid] for i, v in ipairs(props) do if v.datatype == "monolingualtext" and v.datavalue then out[#out + 1] = v.datavalue.value.language end end return out end local function getLangOfProp(frame) local pid = frame.args.pid or mw.text.trim(frame.args[1] or "") if pid == "" then return end local qid = frame.args.qid if qid == "" then qid = nil end local Q = WdItem.new(qid, { fwd = "ALL", osd = false, noicon = true }) return table.concat(Q:getLangOfProp(pid), ", ") end -- gets the language codes of a Wikidata entry as a table local function _lang_code(Qitem) local lc = Qitem:getPropOfProp( "P407", "P424") if lc then return mw.text.split( lc, "[,، ]+" ) end --modified lc = Qitem:getPropOfProp( "P407", "P218" ) if lc then return mw.text.split( lc, "[,، ]+" ) end --modified return Qitem:getLangOfProp("P424") end local function lang_code(frame) local Q = WdItem.newItem(frame.args.qid or mw.text.trim(frame.args[1] or ""), { fwd = "ALL", osd = false, noicon = true }) return table.concat(_lang_code(Q), ", ") end -- wraps a string in nowiki unless disable flag is set local function wrap_nowiki(str, disable) if disable then return str or '' end return mw.text.nowiki(str or '') end -- sort sequence table whose values are key-value pairs by key local function comp_key(a, b) local param_a, enum_a = a[1]:match ('(%D+)(%d+)$'); -- get param name and enumerator from <a> local param_b, enum_b = b[1]:match ('(%D+)(%d+)$'); -- get param name and enumerator from <b> if enum_a and enum_b then -- if both parameters have neumerators if param_a == param_b then -- are parameter names the same? return tonumber (enum_a) < tonumber (enum_b); -- yes: compare enumerators end end return a[1] < b[1]; -- alpha sort if here end -- sort sequence table whose values are key-value pairs by value local function comp_val(a, b) return a[2] < b[2] end -- ref filtering for citing from wikidata local function is_rejected(item) -- rejected Q if cfg.rejected_t.sources[item]==true then return true; end -- rejected Properties local item_entity = mw.wikibase.getEntity(item); for _, v in pairs(cfg.rejected_t.properties) do if (#item_entity:getAllStatements( v )>0 ) then return true; end end -- Rejected InatanceOf local instance = item_entity:getAllStatements( "P31" ) for _,v in pairs(instance) do local vsnak = v.mainsnak or v if cfg.rejected_t.instances[vsnak.datavalue.value.id] then return true; end end --No used Properties local has_properties = false for k, _ in pairs(cfg.used_properties_t) do if (#item_entity:getAllStatements( k )>0 ) then has_properties = true; break; end end return not has_properties; end local function _cite_web(citeq_args) local Q local refsnak = citeq_args.snak citeq_args.snak = nil -- retrieve all the parameters local pqid = citeq_args.pqid citeq_args.pqid = nil local wdl = false local qid = nil local multi_args = { P50 = "author", P2093 = "author", P5769 = "editor", P98 = "editor", P655 = "translator", } Q = WdItem.newSnakItem(refsnak, {fwd = "ALL", osd = false, noicon = true, linksproject = cfg.config_t.linksproject, wikilinkprefix = cfg.config_t.wikilinkprefix}) -- find language local langcodes = getLanguages(citeq_args.language) if refsnak["P1476"] then langcodes = _getLangOfSnakProp(refsnak, "P1476") citeq_args.language = citeq_args.language or langcodes[1] end langcodes[#langcodes+1] = 'ar' langcodes[#langcodes+1] = 'en' langcodes[#langcodes+1] = 'mul' Q:setOptions({ langs = langcodes }) local labellang = langcodes[1] local rtl = rtl_lang[langcodes[1]] or false local oth = {} for i in pairs(refsnak) do local label = "" -- multiple authors may be given if refsnak[i][1].snaktype ~= 'novalue' then if multi_args[i] then get_name_list (multi_args[i], citeq_args, Q, wdl, labellang) elseif cfg.used_properties_t[i] and type(cfg.used_properties_t[i]) == "table" then local data = cfg.used_properties_t[i] local langidx = 1 citeq_args[data.arg] = Q:getValue( i, { maxvals = data.maxvals, linked = data.linked, rank = data.rank or "best" } ) if not citeq_args[data.arg] then citeq_args[data.arg] = Q:getValue( i, { maxvals = data.maxvals, linked = data.linked} ) if citeq_args[data.arg]:find('^Q%d+$') then -- qid was returned -- try fallback to qid's native language local qid_languages = _lang_code(WdItem.newItem( citeq_args[data.arg], { fwd = "ALL", osd = false, noicon = true } )) citeq_args[data.arg] = Q:getValue( i, { maxvals = data.maxvals, linked = data.linked, langs = qid_languages} ) if citeq_args[data.arg]:find('^Q%d+$') then -- qid was returned again citeq_args[data.arg] = nil else -- record the language found if no lang specified citeq_args.language = citeq_args.language or qid_languages[1] end end end --- translate unknown value if citeq_args[data.arg] == "Unknown" then if rtl then citeq_args[data.arg] = cfg.i18n_t.ar["unknown-" .. data.arg] or cfg.i18n_t.ar["unknown"] else citeq_args[data.arg] = mw.wikibase.getLabelByLang("Q4233718", lang):gsub("^%l", mw.ustring.upper) end end ----------------- if data.others then oth[#oth + 1] = citeq_args[data.arg] and ((cfg.i18n_t.ar[data.arg] or data.arg:gsub("^%l", string.upper)) .. ": " .. citeq_args[data.arg]) citeq_args[data.arg] = nil end elseif cfg.used_properties_t[i] then if i == "P648" then citeq_args.ol = (Q:getValue( "P648", { maxvals = 1 } ) or ''):gsub("^OL(.+)$", "%1") if citeq_args.ol == "" then citeq_args.ol = nil end elseif i == "P957" then citeq_args.isbn = Q:getValue("P957", { maxvals = 1 } ) elseif in_array(i,{"P854", "P953", "P856", "P2699"}) then local url; for _, pr in ipairs( {"P854", "P953", "P856", "P2699"} ) do url = Q:getValue( pr, { maxvals = 1 } ) if url then citeq_args.url = mw.text.split( url, " (", true )[1] local arcurl = mw.ustring.match( url, " %((.*)%)" ) -- when there is an archive url, <url> holds: url<space>(archive url); here extract the archive url if present if arcurl then local arcy, arcm, arcd = arcurl:match("(20%d%d)%p?(%d%d)%p?(%d%d)") if arcy and arcm and arcd then citeq_args["archive-url"] = arcurl citeq_args["archive-date"] = tonumber(arcd) .. " " .. cfg.i18n_t.months[tonumber(arcm)] .. " " .. arcy end end break end end end end end end if citeq_args.url then if refsnak["P813"] then citeq_args.accessdate = Q:getValue("P813", { maxvals = 1 } ) end if refsnak["P1065"] and refsnak["P2960"] then citeq_args["archive-url"] = Q:getValue("P1065", { maxvals = 1 } ) citeq_args["archive-date"]= Q:getValue("P2960", { maxvals = 1 } ) end end citeq_args.others = citeq_args.others or table.concat(oth, ". ") if citeq_args.others == "" then citeq_args.others = nil end citeq_args.biorxiv = citeq_args.biorxiv and ("10.1101/" .. citeq_args.biorxiv) -- if url then see if there's an archive: citeq_args.url local url local title_display = citeq_args.title if citeq_args.url then citeq_args.title = wrap_nowiki(title_display) end -- TBD: incorporate |at, |sheets= and |sheet= here as well -- Sort out what should happen if several of them are given at the same time if citeq_args.page or citeq_args.p then -- let single take precedence over multiple citeq_args.pages = nil citeq_args.pp = nil end if citeq_args.pages then local _, count = string.gsub(citeq_args.pages, "[,;%s]%d+", "") if count == 1 then citeq_args.page = citeq_args.pages citeq_args.pages = nil end end for k, v in pairs(citeq_args) do if in_array (v, {'(())', 'unset', 'ignore'}) or 'string' ~= type(k) then -- empty accept-as-is-written (()) markup to indicate an empty/unused parameter value, other ((...)) markups are deliberately passed down to {{citation}} citeq_args[k] = nil elseif in_array (v, {'((unset))', '((ignore))'}) then -- strip off markup for free-text values clashing with local keywords citeq_args[k] = 'unset' end end local author_count = 0 for k, v in pairs(citeq_args) do if k:find("^author%d+$") then author_count = author_count + 1 end end if author_count > 8 then -- convention in astronomy journals, optional mode for this? if 'all' == citeq_args['display-authors'] then citeq_args['display-authors'] = nil; -- unset because no longer needed else citeq_args['display-authors'] = citeq_args['display-authors'] or 3 -- limit to three displayed names end end -- replace no-break space by space, User:Mr. Ibrahem if citeq_args.title then citeq_args.title = mw.ustring.gsub( citeq_args.title, "\194\160", " " ) end local editor_count = 0 for k, v in pairs(citeq_args) do if k:find("^editor%d+$") then editor_count = editor_count + 1 end end if editor_count > 8 then -- convention in astronomy journals, optional mode for this? if 'all' == citeq_args['display-editors'] then citeq_args['display-editors'] = nil; -- unset because no longer needed else citeq_args['display-editors'] = citeq_args['display-editors'] or 3 -- limit to three displayed names end end -- code to make a guess what template to use from the supplied parameters -- (first draft for proof-of-concept) local template = "بويب" -- |id= could hold more than one identifier pulled from Wikidata not supported by {{citation}}, right now only add our qid to the list local list_sep = '. ' if citeq_args.mode ~= 'cs1' then list_sep = ', ' end -- clean up any blank parameters for k, v in pairs(citeq_args) do if v == "" then citeq_args[k] = nil end end mw.logObject(citeq_args) if template then -- citeq_args.mode = citeq_args.mode or "cs1" -- a cs1 template already knows that it is cs1 so this line is superfluous template = "استشهاد " .. template else -- citeq_args.mode = citeq_args.mode or "cs2" -- a cs2 template already knows that it is cs2 so this line is superfluous template = "استشهاد" end citeq_args['no-tracking'] = 'true' -- لإيقاف ظهور تصانيف التتبع return mw.getCurrentFrame():expandTemplate{title = template, args = citeq_args} -- render the template end --[[-------------------------< C I T E _ Q >------------------------------------------------------------------ Takes standard CS1|2 template parameters and passes all to {{citation}}. If neither of |author= and |author1= are set, calls get_authors() to try to get an author name-list from Wikidata. The result is passed to {{citation}} for rendering. --]] local function _cite_q (in_citeq_args) local frame = mw.getCurrentFrame() local citeq_args = {} local origin_args = {} local Q -- parameters that don't get passed to Citation local expand = in_citeq_args.expand -- when set to anything, causes {{cite q}} to render <code><nowiki>{{citation|...}}</nowiki></code> local qid = in_citeq_args.qid or in_citeq_args[1] local wdl = in_citeq_args.wdl local template = in_citeq_args.template local cite_class = 'citation' local rtl = true local snak = in_citeq_args.snak or {} local pqid = in_citeq_args.pqid local page_offset = 0 in_citeq_args.expand = nil in_citeq_args[1] = nil in_citeq_args.qid = nil in_citeq_args.wdl = nil in_citeq_args.template = nil in_citeq_args.snak = nil in_citeq_args.pqid = nil mw.logObject(expand) if in_citeq_args.wikidatacite then citeq_args = in_citeq_args else local A = argument_wrapper(in_citeq_args) local loaded_args ={} for _,args_table in pairs({cfg.simple_properties_t, cfg.used_args_t}) do for k,_ in pairs(args_table) do if A[k] then citeq_args[k] = A[k] if k ~= A:ORIGIN(k) then origin_args[k] = A:ORIGIN(k) table.insert(loaded_args, A:ORIGIN(k)) else table.insert(loaded_args, k) end end end end for k,v in pairs(in_citeq_args) do if not in_array(k,loaded_args) then citeq_args[k] = v end end end -- if title supplied, flag to not read html title local titleforced = (citeq_args.title ~= nil) local default_opt = {rank = "preferred normal", fetchwikidata = "ALL", onlysourced = false, noicon = true, linksproject = cfg.config_t.linksproject, wikilinkprefix = cfg.config_t.wikilinkprefix } if citeq_args.volume or citeq_args.volume then local qualifiedaspossible = {} if citeq_args.volume then qualifiedaspossible['P478'] = citeq_args.volume end if citeq_args.chapter then qualifiedaspossible['P792'] = citeq_args.chapter end default_opt.qualifiedaspossible = qualifiedaspossible end Q = WdItem.WdItem:new(qid, default_opt, snak) local oth = {} -- put the language codes into a sequential table langcodes[] local langcodes = getLanguages(citeq_args.language) if not langcodes[1] then -- try to find language of work langcodes = _lang_code(Q) end if not langcodes[1] then -- try fallback to journal's language local journal_qid = Q:followQid("P1433") langcodes = journal_qid and _lang_code(journal_qid) end citeq_args.language = citeq_args.language or table.concat(langcodes, ", ") Q:setOptions( { langs = langcodes } ); local labellang = langcodes[1] or 'ar' rtl = rtl_lang[langcodes[1]] or false -- loop through list of simple properties and get their values in citeq_args for name, data in pairs(cfg.simple_properties_t) do local opt = { maxvals = data.maxvals, linked = data.linked, qual = data.qual } if data.no_vol_qual then opt.qualifiedaspossible = {}; end citeq_args[name] = citeq_args[name] or Q:getValue(data.id, opt ) if not citeq_args[name] and data.populate_from_journal then local publishedin = Q:getValue("P1433", {maxvals = 0, qual = data.id, qualsonly = true} ) citeq_args[name] = publishedin or Q:getPropOfProp("P1433", data.id, { maxvals = data.maxvals}) end if citeq_args[name] and snak[data.id] then snak[data.id] = nil end --- translate unknown value if citeq_args[name] == "Unknown" and rtl then citeq_args[name] = cfg.i18n_t.ar["unknown-" .. name] or cfg.i18n_t.ar["unknown"] end ----------------- if data.others then oth[#oth + 1] = citeq_args[name] and ((rtl and cfg.i18n_t.ar[name] or name:gsub("^%l", string.upper)) .. ": " .. citeq_args[name]) citeq_args[name] = nil end end citeq_args.others = citeq_args.others or table.concat(oth, ". ") if citeq_args.others == "" then citeq_args.others = nil end citeq_args.journal = citeq_args.journal and citeq_args.journal:gsub("^''", ""):gsub("''$", ""):gsub("|''", "|"):gsub("'']]", "]]") citeq_args.ol = citeq_args.ol or (Q:getValue("P648", { maxvals = 1 } ) or ''):gsub("^OL(.+)$", "%1") if citeq_args.ol == "" then citeq_args.ol = nil end -- TBD. Take care of |ol-access=? citeq_args.biorxiv = citeq_args.biorxiv and ("10.1101/" .. citeq_args.biorxiv) citeq_args.isbn = citeq_args.isbn or Q:getValue("P957", { maxvals = 1, rank="best" } ) -- try ISBN 10 (only one value accepted) if citeq_args.page then -- let single take precedence over multiple citeq_args.pages = nil citeq_args.pp = nil end if citeq_args.pages then local _, count = string.gsub(citeq_args.pages, "[,;%s]%d+", "") if count == 1 then citeq_args.page = citeq_args.pages citeq_args.pages = nil end end -- if url then see if there's an archive: citeq_args.url local url --find formatted url if snak ~= {} then for k, v in pairs(snak) do if (v[1].datatype == "external-id") then local furl = mw.wikibase.getBestStatements( k, "P1630" ) if 0 ~= #furl then furl = furl[1]["mainsnak"]["datavalue"]["value"] citeq_args.url = mw.message.newRawMessage(furl, {v[1]["datavalue"]["value"]}):plain() snak[k] = nil break; end end end if citeq_args.url == nil and pqid and qid then local refproperty = mw.wikibase.getBestStatements(qid , "P1687" ) if 0 ~= #refproperty then -- خطأ لوا في وحدة:Cite_Q على السطر 1124: attempt to index field 'datavalue' (a nil value). if refproperty[1]["mainsnak"] and refproperty[1]["mainsnak"]["datavalue"] and refproperty[1]["mainsnak"]["datavalue"]["value"] then refproperty=refproperty[1]["mainsnak"]["datavalue"]["value"]["id"] local furl = mw.wikibase.getBestStatements( refproperty, "P1630" ) if 0 ~= #furl then furl = furl[1]["mainsnak"]["datavalue"]["value"] local refval = mw.wikibase.getBestStatements( pqid, refproperty ) refval = (0 ~= #refval) and refval[1]["mainsnak"]["datavalue"]["value"] if refval then citeq_args.url = mw.message.newRawMessage(furl, {refval}):plain() end end end end end end if not citeq_args.url then local S953 = Q:getStatements("P953"):getBestOne() local S953_val = S953:getRawValue() citeq_args.url = S953_val and (S953_val ~= "novalue" and S953_val ~= "somevalue") and S953_val if citeq_args.url then if mw.ustring.match(citeq_args.url, "archive.org/details/") and citeq_args.page then page_offset = tonumber(S953:getRawQual('P8330')[1]) or 0 if not citeq_args.volume or (citeq_args.volume and citeq_args.volume == S953:getRawQual('P478')[1]) then citeq_args.url = mw.ustring.gsub(citeq_args.url, "/?$", "") .. "/page/n" .. (tonumber(citeq_args.page) + page_offset - 1) .. "/mode/1up" end end end end if not citeq_args.url then for i, pr in ipairs( {"P856", "P2699"} ) do url = Q:getValue(pr, { maxvals = 1, qual="P1065" } ) if url then citeq_args.url = mw.text.split( url, " (", true )[1] local arcurl = mw.ustring.match( url, " %((.*)%)" ) -- when there is an archive url, <url> holds: url<space>(archive url); here extract the archive url if present if arcurl then local arcy, arcm, arcd = arcurl:match("(20%d%d)%p?(%d%d)%p?(%d%d)") if arcy and arcm and arcd then citeq_args["archive-url"] = arcurl citeq_args["archive-date"] = arcy .. '-' .. arcm .. '-' .. arcd end end break; end end end if not titleforced then -- Handle subtitle. if citeq_args.title then local subtitle = Q:getValue('P1680'); if subtitle then citeq_args.title = citeq_args.title .. ": " .. subtitle end end local htmltitle = Q:getValue("P1476", {qual = "P6833", maxvals = 1, qualsonly = true} ) if htmltitle then citeq_args.title = htmltitle:gsub("</?i>", "''") else local title_display = citeq_args.title or (langcodes[1] and mw.wikibase.getLabelByLang(qid, langcodes[1])) or mw.wikibase.getLabel(qid) if title_display and snak and snak.P1810 then title_display=title_display .. " | " .. snak.P1810[1].datavalue.value snak.P1810 = nil end title_display = title_display or ("No label or title -- debug: " .. qid) if citeq_args.url then citeq_args.title = wrap_nowiki(title_display) else local slink = mw.wikibase.getSitelink(qid, cfg.config_t.linksproject) local slink_flag = false local wrap_title = '' local wslink = false if not slink then -- See if we have wikisource if not citeq_args.url then local wikisource_sitelink = mw.wikibase.getSitelink(qid, cfg.i18n_t.wikisource) or nil if wikisource_sitelink then slink = ':s:'..wikisource_sitelink wslink = true end end end if citeq_args.title then if slink then wrap_title = wrap_nowiki(citeq_args.title) slink_flag = true else citeq_args.title = wrap_nowiki(citeq_args.title) end else if slink and not wslink then if slink:lower() == title_display:lower() then citeq_args.title = '[[' .. slink .. ']]' else wrap_title = wrap_nowiki(slink:gsub("%s%(.+%)$", ""):gsub(",.+$", "")) slink_flag = true end elseif wslink then wrap_title = wrap_nowiki(title_display) slink_flag = true else citeq_args.title = wrap_nowiki(title_display) end end if slink_flag then if slink == wrap_title and not wslink then -- direct link citeq_args.title = '[[' .. slink .. ']]' else -- piped link citeq_args.title = '[[' .. slink .. '|' .. wrap_title .. ']]' end end end end end -- replace no-break space by space, User:Mr. Ibrahem if citeq_args.title then citeq_args.title = mw.ustring.gsub( citeq_args.title, "\194\160", " " ) end if is_set (qid) then if not is_set (citeq_args.author) and not is_set (citeq_args.author1) and not is_set (citeq_args.subject) and not is_set (citeq_args.subject1) and not is_set (citeq_args.host) and not is_set (citeq_args.host1) and not is_set (citeq_args.last) and not is_set (citeq_args.last1) and not is_set (citeq_args.surname) and not is_set (citeq_args.surname1) and not is_set (citeq_args['author-last']) and not is_set (citeq_args['author-last1']) and not is_set (citeq_args['author1-last']) and not is_set (citeq_args['author-surname']) and not is_set (citeq_args['author-surname1']) and not is_set (citeq_args['author1-surname1']) then -- if neither are set, try to get authors from Wikidata get_name_list ('author', citeq_args, Q, wdl, labellang) -- modify citeq_args table with authors from Wikidata end if not is_set (citeq_args.editor) and not is_set (citeq_args.editor1) and not is_set (citeq_args['editor-last']) and not is_set (citeq_args['editor-last1']) and not is_set (citeq_args['editor1-last']) and not is_set (citeq_args['editor-surname']) and not is_set (citeq_args['editor-surname1']) and not is_set (citeq_args['editor1-surname']) then -- if neither are set, try to get editors from Wikidata get_name_list ('editor', citeq_args, Q, wdl, labellang) -- modify citeq_args table with editors from Wikidata end if not is_set (citeq_args.translator) and not is_set (citeq_args.translator1) and not is_set (citeq_args['translator-last']) and not is_set (citeq_args['translator-last1']) and not is_set (citeq_args['translator1-last']) and not is_set (citeq_args['translator-surname']) and not is_set (citeq_args['translator-surname1']) and not is_set (citeq_args['translator1-surname']) then -- if neither are set, try to get translators from Wikidata get_name_list ('translator', citeq_args, Q, wdl, labellang) -- modify citeq_args table with translators from Wikidata end end for k, v in pairs(citeq_args) do if in_array (v, {'(())', 'unset', 'ignore'}) or 'string' ~= type(k) then -- empty accept-as-is-written (()) markup to indicate an empty/unused parameter value, other ((...)) markups are deliberately passed down to {{citation}} citeq_args[k] = nil elseif in_array (v, {'((unset))', '((ignore))'}) then -- strip off markup for free-text values clashing with local keywords citeq_args[k] = 'unset' end end local author_count = 0 for k, v in pairs(citeq_args) do if k:find("^author%d+$") then author_count = author_count + 1 end end if author_count > 8 then -- convention in astronomy journals, optional mode for this? if 'all' == citeq_args['display-authors'] then citeq_args['display-authors'] = nil; -- unset because no longer needed else citeq_args['display-authors'] = citeq_args['display-authors'] or 3 -- limit to three displayed names end end local editor_count = 0 for k, v in pairs(citeq_args) do if k:find("^editor%d+$") then editor_count = editor_count + 1 end end if editor_count > 8 then -- convention in astronomy journals, optional mode for this? if 'all' == citeq_args['display-editors'] then citeq_args['display-editors'] = nil; -- unset because no longer needed else citeq_args['display-editors'] = citeq_args['display-editors'] or 3 -- limit to three displayed names end end -- change edition to ordinal if it's set and numeric if (rtl == false) then citeq_args.edition = citeq_args.edition and makeOrdinal(citeq_args.edition) end -- code to make a guess what template to use from the supplied parameters -- (first draft for proof-of-concept) if citeq_args.journal then template = template or "بدورية محكمة" elseif citeq_args.isbn then template = template or "بكتاب" citeq_args.asin = nil -- suppress ASIN if ISBN exists elseif citeq_args.website then template = template or "بويب" end -- template is CS1 designator: journal, web, news, etc. if template then -- citeq_args.mode = citeq_args.mode or "cs1" -- a cs1 template already knows that it is cs1 so this line is superfluous local citeclasses = {["بدورية محكمة"] = 'journal', ["بكتاب"] = "book", ["بويب"] = "web" } cite_class = citeclasses[template] template = "استشهاد " .. template else -- citeq_args.mode = citeq_args.mode or "cs2" -- a cs2 template already knows that it is cs2 so this line is superfluous template = "استشهاد" end -- |id= could hold more than one identifier pulled from Wikidata not supported by {{citation}}, right now only add our qid to the list local list_sep = '. ' if citeq_args.mode ~= 'cs1' then list_sep = ', ' end local id = cfg.i18n_t.wdq .. ':[[:d:' .. qid .. '|' .. qid .. ']]' local old_id = citeq_args.id if wdl then -- show WD logo id = id .. '[[ملف:Wikidata-logo.svg|16px|alt=|link=]]' -- possibly replace by WD edit icon? end if is_set (old_id) then citeq_args.id = old_id .. list_sep .. id -- append to user-specified contents else citeq_args.id = id end -- clean up any blank parameters for k, v in pairs(citeq_args) do if v == "" then citeq_args[k] = nil end end -- use real param names for CS1 messages for k,v in pairs(origin_args) do if citeq_args[k] and citeq_args[k] == in_citeq_args[v] then citeq_args[v] = citeq_args[k] citeq_args[k] = nil end end mw.logObject(citeq_args) -- if |expand=<anything>, write a nowiki'd version to see what the {{citation}} template call looks like if expand then local expand_args = { "{{" .. template .. "\n" } -- init with citation template if expand == "self" then citeq_args.id = old_id -- restore original |id= parameter expand_args = { cfg.i18n_t.cite_q .. qid } -- expand to itself end -- make a sortable table and sort it by param name local sorttable = {} for param, val in pairs (citeq_args) do table.insert(sorttable, {param, val}) end table.sort(sorttable, comp_key) -- add contents to expand_args for idx, val in ipairs(sorttable) do table.insert(expand_args, val[1] .. '=' .. val[2] .. "\n") end -- make the nowiki'd string and done return frame:preprocess (table.concat ({'<syntaxhighlight lang="wikitext" inline="1">', table.concat (expand_args, ' |') .. '}}', '</syntaxhighlight>'})); end local erratumid = Q:getPropertyIDs( "P2507", { maxvals = 1 } ) if erratumid then erratumid = " [[d:" .. erratumid .. "|" .. cfg.i18n_t.erratum .. "]]" .. cfg.i18n_t.trackingcats.erratum else erratumid = "" end local opt_cat = '' if Q:getValue( "P5824" ) then opt_cat = cfg.i18n_t.trackingcats.retracted end if Q:getValue( "P1366" ) then opt_cat = opt_cat .. cfg.i18n_t.trackingcats.replaced end if not citeq_args.title then -- emit category link if missing title opt_cat = opt_cat .. cfg.i18n_t.trackingcats['no-label-or-title']; end if citeq_args.wikidatacite then return frame:expandTemplate{title = template, args = citeq_args} .. erratumid .. opt_cat -- render the template else local CS = require("Module:Citation/CS1" .. sandbox) return CS._citation(frame , citeq_args, {['CitationClass'] = cite_class}) .. erratumid .. opt_cat end end --[[-------------------------< C I T E W I K I D A T A >------------------------------------------------------------------ format wikidata reference --]] local function _cite_wikidata (ref, pqid, expand) -- early exit if not ref then return nil end local snak = ref.snaks -- مراجع غير مقبولة if snak.P143 or snak.P3452 then return nil end local hash = ref.hash if hash and hash ~= "" and ref_cash[hash] then return ref_cash[hash] end local citeq_args = {} local frame = mw.getCurrentFrame() -- مذكور في if snak.P248 then for _, prop in pairs(snak.P248) do if prop.snaktype == "value" then citeq_args.qid = "Q" .. prop.datavalue.value["numeric-id"] end end snak.P248 = nil; end if citeq_args.qid and is_rejected(citeq_args.qid) == true then return nil end local reference citeq_args.snak = snak citeq_args.pqid = pqid citeq_args.wikidatacite = 1 citeq_args.expand = expand if citeq_args.qid then reference = _cite_q(citeq_args) else local has_properties = false for k, _ in pairs(cfg.used_properties_t) do if snak[k] then has_properties = true; break; end end reference = (has_properties and _cite_web(citeq_args) or nil) end if reference and reference ~= "" then reference = frame:extensionTag("ref", reference, {name = 'wikidata-' .. hash}) end if hash and hash ~= "" then ref_cash[hash] = reference end return reference end local function cite_q (frame) local args = {} for k, v in pairs(frame:getParent().args) do if v ~= "" then args[k] = v end end for k, v in pairs(frame.args) do if v ~= "" then args[k] = v end end args.qid = args.qid or args[1] or "" if args.qid == "" then return nil end args[1] = nil local citesep = (args.citesep or "") if citesep == "" then citesep = ", " end citesep = citesep:gsub('"', '') -- strip double quotes after setting default to allow |citesep="" as a blank separator args.citesep = nil local tag = args.tag or "" if tag == "" then tag = nil end args.tag = nil local list = args.list or "" if list == "" then list = nil end args.list = nil args.language = args.language or args.lang args.lang = nil local cites = {} for q in args.qid:gmatch("Q%d+") do -- make a new copy of the arguments local newargs = {} for k, v in pairs(args) do if k ~= "qid" then newargs[k] = v end end newargs.qid = q if tag == "ref" then cites[#cites + 1] = frame:callParserFunction{ name = "#tag:ref", args = { _cite_q(newargs), name = q } } -- expand like this: args = { _cite_q(newargs), name = 'foo', group = 'bar' } else cites[#cites + 1] = _cite_q(newargs) end end if list then return frame:expandTemplate{ title = list, args = cites } else return table.concat(cites, citesep) end end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { makeOrdinal = makeOrdinal, getLangOfProp = getLangOfProp, -- lang_code = lang_code, _cite_wikidata = _cite_wikidata, _cite_q = _cite_q, cite_q = cite_q } dbmabxmc659o07cmj2cqoalyb8d5400 1097361 1097360 2026-07-23T21:33:58Z حبيشان 31560 1097361 Scribunto text/plain --[[ Cite Q النسخة العربية مشتق من النسخة الإنجليزية ]] require('strict') local sandbox = '/ملعب' local WdItem = require('Module:WdItem' .. sandbox) local cfg = mw.loadData('Module:Cite Q/config' .. sandbox) local rtl_lang = {ar = true, fa = true, ur = true, ku = true, he = true, arc = true, dv = true, ha = true, khw = true, ks = true, ps = true, yi = true, ota = true } local ref_cash = {} --[[-------------------< A R G U M E N T _ W R A P P E R >---------------------- Argument wrapper. This function provides support for argument mapping defined in the configuration file so that multiple names can be transparently aliased to single internal variable. ]] local function argument_wrapper ( arglist ) local origin = {}; local nilargs = {}; return setmetatable({ ORIGIN = function ( self, k ) local dummy = self[k]; -- force the variable to be loaded. return origin[k]; end }, { __index = function ( tbl, k ) local v = rawget(tbl,k) if v then return v elseif nilargs[k] then return nil end local list = (type(k)=="number") and k or cfg.aliases_t[k]; if type( list ) == 'table' then for _, alias_key in pairs( list ) do if arglist[alias_key] then v = arglist[alias_key] origin[k] = alias_key break; end end elseif list ~= nil then v = arglist[list] if v then origin[k] = list end end if v == nil then nilargs[k] = true else rawset( tbl, k, v ) end return v end, }); end ------------------------------------------------------------------------------- -- makeOrdinal needs to be internationalised along with cfg.i18n_t -- takes cardinal number as a numeric and returns the ordinal as a string -- we need three exceptions in English for 1st, 2nd, 3rd, 21st, .. 31st, etc. ------------------------------------------------------------------------------- local makeOrdinal = function(cardinal) local card = tonumber(cardinal) if not card then return cardinal end local ordsuffix = cfg.i18n_t.ordinal.default if card % 10 == 1 then ordsuffix = cfg.i18n_t.ordinal[1] elseif card % 10 == 2 then ordsuffix = cfg.i18n_t.ordinal[2] elseif card % 10 == 3 then ordsuffix = cfg.i18n_t.ordinal[3] end -- In English, 1, 21, 31, etc. use 'st', but 11, 111, etc. use 'th' -- similarly for 12 and 13, etc. if (card % 100 == 11) or (card % 100 == 12) or (card % 100 == 13) then ordsuffix = cfg.i18n_t.ordinal.default end return card .. ordsuffix end --[[--------------------------< I S _ S E T >-------------------------------------------------------------- Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. ]] local function is_set( var ) return not (var == nil or var == '') end --[[--------------------------< I N _ A R R A Y >-------------------------------------------------------------- Whether needle is in haystack (taken from Module:Citation/CS1/Utilities) ]] local function in_array( needle, haystack ) if needle == nil then return false end for n, v in ipairs( haystack ) do if v == needle then return n end end return false end local function getLanguages(languageArg) local langcodes = {} if languageArg then -- check these are a supported language codes for lc in mw.text.gsplit( languageArg, "[,، ]+", false ) do --modified langcodes[#langcodes+1] = mw.language.isSupportedLanguage(lc) and lc end end return langcodes end --[[--------------------------< A C C E P T _ V A L U E >------------------------------------------------------- Accept WD value by framing in ((...)) if param_val is equal to keyword; else pass-through WD value as is. ]] local function accept_value( param_val, wd_val ) local val = param_val if val then if in_array (val, {'accept', '))((', ':d:'}) then val = '((' .. wd_val .. '))' elseif '((accept))' == val then val = 'accept' elseif '(())(())' == val then val = '))((' elseif '((:d:))' == val then val = ':d:' else val = wd_val end end return val end -- function to fetch a value to display local function makelink(v, out, link, maxpos, wdl, lang) local label local snak = v.mainsnak or v if snak.snaktype == "value" then if snak.datatype == "wikibase-item" then local qnumber = snak.datavalue.value.id local sitelink = mw.wikibase.getSitelink(qnumber) if qnumber == "Q2818964" then sitelink = nil end -- suppress link to "Various authors" -- من المهم التحقق من وجود datavalue if v.qualifiers and v.qualifiers.P1932 and v.qualifiers.P1932[1].datavalue then label = v.qualifiers.P1932[1].datavalue.value else label = mw.wikibase.getLabelByLang(qnumber, lang) or mw.wikibase.getLabel(qnumber) if label then label = mw.text.nowiki(label) else label = qnumber -- should add tracking category end end local position = maxpos + 1 -- Default to 'next' author. -- use P1545 (series ordinal) instead of default position. if v["qualifiers"] and v.qualifiers["P1545"] and v.qualifiers["P1545"][1] then position = tonumber(v.qualifiers["P1545"][1].datavalue.value) end maxpos = math.max(maxpos, position) if sitelink then -- just the plain name, -- but keep a record of the links, using the same index out[position] = label link[position] = sitelink else if wdl then -- show that there's a Wikidata entry available out[position] = string.format( "[[:d:Q%s|%s]]&nbsp;<span title='%s'>[[File:Wikidata-logo.svg|16px|alt=|link=]]</span>", snak.datavalue.value["numeric-id"], label, cfg.i18n_t["errors"]["local-article-not-found"] ) else -- no Wikidata links wanted, so just give the plain label out[position] = label end end elseif snak.datatype == "string" then local position = maxpos + 1 -- Default to 'next' author. -- use P1545 (series ordinal) instead of default position. if v["qualifiers"] and v.qualifiers["P1545"] and v.qualifiers["P1545"][1] then position = tonumber(v.qualifiers["P1545"][1].datavalue.value) end maxpos = math.max(maxpos, position) out[position] = snak.datavalue.value else -- not a wikibase-item or a string! end else -- code here if we want to return something when author is "unknown" -- من المهم التحقق من وجود datavalue if v.qualifiers and v.qualifiers.P1932 and v.qualifiers.P1932[1].datavalue then label = v.qualifiers.P1932[1].datavalue.value else label = cfg.i18n_t["unknown-author"][lang] or cfg.i18n_t["unknown-author"]["ar"] end maxpos = maxpos + 1 out[maxpos] = label end return maxpos end --[=[-------------------------< G E T _ N A M E _ L I S T >---------------------------------------------------- get_name_list -- adapted from getAuthors code taken from Module:RexxS arguments: nl_type - type of name list to fetch: nl_type = 'author' for authors; 'editor' for editors; 'translator' for translators args - pointer to the parameter arguments table from the template call qid - value from |qid= parameter; the Q-id of the source (book, etc.) in qid wdl - value from the |wdl= parameter; a Boolean passed to enable links to Wikidata when no article exists returns nothing; modifies the args table ]=] local function get_name_list (nl_type, args, Q, wdl, lang) local propertyID = "P50" local fallbackID = "P2093" -- author name string if nl_type =="author" then propertyID = 'P50' -- for authors fallbackID = 'P2093' -- author-string elseif nl_type =="editor" then propertyID = 'P5769' -- "editor-in-chief" fallbackID = 'P98' -- for editors - So-called "fallbacks" are actually a second set of properties processed -- TBD. Take book series editors into account as well (if they have a separate P code as well)? elseif nl_type == "translator" then propertyID = 'P655' -- for translators fallbackID = nil -- elseif 'contributor' == nl_type then -- f.e. author of forewords (P2679) and afterwords (P2680); requires |contribution=, |title= and |author= -- propertyID = 'P' -- for contributors -- fallbackID = nil else return -- not specified so return end -- wdl is a Boolean passed to enable links to Wikidata when no article exists -- if "false" or "no" or "0" is passed set it false -- if nothing or an empty string is passed set it false if wdl and (#wdl > 0) then wdl = wdl:lower() wdl = in_array (wdl, {"false", "no", "0"}) else -- wdl is empty, so wdl = false end local statements = Q:getStatements(propertyID) if statements:count() == 0 and fallbackID then statements = Q:getStatements(fallbackID) end -- Make sure it actually has at least one of the properties requested if statements:count() == 0 then return nil end -- So now we have something to return: -- table 'out' is going to store the names(s): -- and table 'link' will store any links to the name's article local out = {} local link = {} local maxpos = 0 for _, s in statements:iter() do -- maxpos = makelink(v, out, link, maxpos, wdl, lang) local qnumber = s:getRawValue() if qnumber ~='novalue' then local label = s:getValue({linked=false}) local slink if label == 'somevalue' then label = cfg.i18n_t["unknown-author"][lang] or cfg.i18n_t["unknown-author"]["ar"] elseif mw.ustring.match(qnumber, '^Q%d+$') and qnumber ~= 'Q2818964' then slink = mw.wikibase.getSitelink(qnumber, cfg.config_t.linksproject) end local position = maxpos + 1 -- Default to 'next' author. position = tonumber(s:getRawQual("P1545")[1]) or position maxpos = math.max(maxpos, position) out[position] = label if slink then link[position] = cfg.config_t.wikilinkprefix .. slink; end end end -- if there's anything to return, then insert the additions in the template arguments table -- in the form |author1=firstname secondname |author2= ... -- Renumber, in case we have inconsistent numbering local keys = {} for k, v in pairs(out) do keys[#keys + 1] = k end table.sort(keys) -- as they might be out of order for i, k in ipairs(keys) do out[k] = out[k]:gsub ('&#39;', '\''); -- prevent cs1|2 multiple names categorization; replace html entity with the actual character if args[nl_type .. i] then -- name gets overwritten -- pull corresponding -link only if overwritten name is same as WD name if link[k] and (args[nl_type .. i] == out[k]) then args[nl_type .. '-link' .. i] = args[nl_type .. '-link' .. i] or link[k] -- author-linkn or editor-linkn end else -- name does not get overwritten, so pull name from WD args[nl_type .. i] = out[k] if link[k] then args[nl_type .. '-link' .. i] = args[nl_type .. '-link' .. i] or link[k] -- author-linkn or editor-linkn end end end end local function _getLangOfSnakProp(snak, pid) if not pid or not snak then return {} end local out = {} local props = snak[pid] for i, v in ipairs(props) do if v.datatype == "monolingualtext" and v.datavalue then out[#out + 1] = v.datavalue.value.language end end return out end local function getLangOfProp(frame) local pid = frame.args.pid or mw.text.trim(frame.args[1] or "") if pid == "" then return end local qid = frame.args.qid if qid == "" then qid = nil end local Q = WdItem.new(qid, { fwd = "ALL", osd = false, noicon = true }) return table.concat(Q:getLangOfProp(pid), ", ") end -- gets the language codes of a Wikidata entry as a table local function _lang_code(Qitem) local lc = Qitem:getPropOfProp( "P407", "P424") if lc then return mw.text.split( lc, "[,، ]+" ) end --modified lc = Qitem:getPropOfProp( "P407", "P218" ) if lc then return mw.text.split( lc, "[,، ]+" ) end --modified return Qitem:getLangOfProp("P424") end local function lang_code(frame) local Q = WdItem.newItem(frame.args.qid or mw.text.trim(frame.args[1] or ""), { fwd = "ALL", osd = false, noicon = true }) return table.concat(_lang_code(Q), ", ") end -- wraps a string in nowiki unless disable flag is set local function wrap_nowiki(str, disable) if disable then return str or '' end return mw.text.nowiki(str or '') end -- sort sequence table whose values are key-value pairs by key local function comp_key(a, b) local param_a, enum_a = a[1]:match ('(%D+)(%d+)$'); -- get param name and enumerator from <a> local param_b, enum_b = b[1]:match ('(%D+)(%d+)$'); -- get param name and enumerator from <b> if enum_a and enum_b then -- if both parameters have neumerators if param_a == param_b then -- are parameter names the same? return tonumber (enum_a) < tonumber (enum_b); -- yes: compare enumerators end end return a[1] < b[1]; -- alpha sort if here end -- sort sequence table whose values are key-value pairs by value local function comp_val(a, b) return a[2] < b[2] end -- ref filtering for citing from wikidata local function is_rejected(item) -- rejected Q if cfg.rejected_t.sources[item]==true then return true; end -- rejected Properties local item_entity = mw.wikibase.getEntity(item); for _, v in pairs(cfg.rejected_t.properties) do if (#item_entity:getAllStatements( v )>0 ) then return true; end end -- Rejected InatanceOf local instance = item_entity:getAllStatements( "P31" ) for _,v in pairs(instance) do local vsnak = v.mainsnak or v if cfg.rejected_t.instances[vsnak.datavalue.value.id] then return true; end end --No used Properties local has_properties = false for k, _ in pairs(cfg.used_properties_t) do if (#item_entity:getAllStatements( k )>0 ) then has_properties = true; break; end end return not has_properties; end local function _cite_web(citeq_args) local Q local refsnak = citeq_args.snak citeq_args.snak = nil -- retrieve all the parameters local pqid = citeq_args.pqid citeq_args.pqid = nil local wdl = false local qid = nil local multi_args = { P50 = "author", P2093 = "author", P5769 = "editor", P98 = "editor", P655 = "translator", } Q = WdItem.newSnakItem(refsnak, {fwd = "ALL", osd = false, noicon = true, linksproject = cfg.config_t.linksproject, wikilinkprefix = cfg.config_t.wikilinkprefix}) -- find language local langcodes = getLanguages(citeq_args.language) if refsnak["P1476"] then langcodes = _getLangOfSnakProp(refsnak, "P1476") citeq_args.language = citeq_args.language or langcodes[1] end langcodes[#langcodes+1] = 'ar' langcodes[#langcodes+1] = 'en' langcodes[#langcodes+1] = 'mul' Q:setOptions({ langs = langcodes }) local labellang = langcodes[1] local rtl = rtl_lang[langcodes[1]] or false local oth = {} for i in pairs(refsnak) do local label = "" -- multiple authors may be given if refsnak[i][1].snaktype ~= 'novalue' then if multi_args[i] then get_name_list (multi_args[i], citeq_args, Q, wdl, labellang) elseif cfg.used_properties_t[i] and type(cfg.used_properties_t[i]) == "table" then local data = cfg.used_properties_t[i] local langidx = 1 citeq_args[data.arg] = Q:getValue( i, { maxvals = data.maxvals, linked = data.linked, rank = data.rank or "best" } ) if not citeq_args[data.arg] then citeq_args[data.arg] = Q:getValue( i, { maxvals = data.maxvals, linked = data.linked} ) if citeq_args[data.arg]:find('^Q%d+$') then -- qid was returned -- try fallback to qid's native language local qid_languages = _lang_code(WdItem.newItem( citeq_args[data.arg], { fwd = "ALL", osd = false, noicon = true } )) citeq_args[data.arg] = Q:getValue( i, { maxvals = data.maxvals, linked = data.linked, langs = qid_languages} ) if citeq_args[data.arg]:find('^Q%d+$') then -- qid was returned again citeq_args[data.arg] = nil else -- record the language found if no lang specified citeq_args.language = citeq_args.language or qid_languages[1] end end end --- translate unknown value if citeq_args[data.arg] == "Unknown" then if rtl then citeq_args[data.arg] = cfg.i18n_t.ar["unknown-" .. data.arg] or cfg.i18n_t.ar["unknown"] else citeq_args[data.arg] = mw.wikibase.getLabelByLang("Q4233718", lang):gsub("^%l", mw.ustring.upper) end end ----------------- if data.others then oth[#oth + 1] = citeq_args[data.arg] and ((cfg.i18n_t.ar[data.arg] or data.arg:gsub("^%l", string.upper)) .. ": " .. citeq_args[data.arg]) citeq_args[data.arg] = nil end elseif cfg.used_properties_t[i] then if i == "P648" then citeq_args.ol = (Q:getValue( "P648", { maxvals = 1 } ) or ''):gsub("^OL(.+)$", "%1") if citeq_args.ol == "" then citeq_args.ol = nil end elseif i == "P957" then citeq_args.isbn = Q:getValue("P957", { maxvals = 1 } ) elseif in_array(i,{"P854", "P953", "P856", "P2699"}) then local url; for _, pr in ipairs( {"P854", "P953", "P856", "P2699"} ) do url = Q:getValue( pr, { maxvals = 1 } ) if url then citeq_args.url = mw.text.split( url, " (", true )[1] local arcurl = mw.ustring.match( url, " %((.*)%)" ) -- when there is an archive url, <url> holds: url<space>(archive url); here extract the archive url if present if arcurl then local arcy, arcm, arcd = arcurl:match("(20%d%d)%p?(%d%d)%p?(%d%d)") if arcy and arcm and arcd then citeq_args["archive-url"] = arcurl citeq_args["archive-date"] = tonumber(arcd) .. " " .. cfg.i18n_t.months[tonumber(arcm)] .. " " .. arcy end end break end end end end end end if citeq_args.url then if refsnak["P813"] then citeq_args.accessdate = Q:getValue("P813", { maxvals = 1 } ) end if refsnak["P1065"] and refsnak["P2960"] then citeq_args["archive-url"] = Q:getValue("P1065", { maxvals = 1 } ) citeq_args["archive-date"]= Q:getValue("P2960", { maxvals = 1 } ) end end citeq_args.others = citeq_args.others or table.concat(oth, ". ") if citeq_args.others == "" then citeq_args.others = nil end citeq_args.biorxiv = citeq_args.biorxiv and ("10.1101/" .. citeq_args.biorxiv) -- if url then see if there's an archive: citeq_args.url local url local title_display = citeq_args.title if citeq_args.url then citeq_args.title = wrap_nowiki(title_display) end -- TBD: incorporate |at, |sheets= and |sheet= here as well -- Sort out what should happen if several of them are given at the same time if citeq_args.page or citeq_args.p then -- let single take precedence over multiple citeq_args.pages = nil citeq_args.pp = nil end if citeq_args.pages then local _, count = string.gsub(citeq_args.pages, "[,;%s]%d+", "") if count == 1 then citeq_args.page = citeq_args.pages citeq_args.pages = nil end end for k, v in pairs(citeq_args) do if in_array (v, {'(())', 'unset', 'ignore'}) or 'string' ~= type(k) then -- empty accept-as-is-written (()) markup to indicate an empty/unused parameter value, other ((...)) markups are deliberately passed down to {{citation}} citeq_args[k] = nil elseif in_array (v, {'((unset))', '((ignore))'}) then -- strip off markup for free-text values clashing with local keywords citeq_args[k] = 'unset' end end local author_count = 0 for k, v in pairs(citeq_args) do if k:find("^author%d+$") then author_count = author_count + 1 end end if author_count > 8 then -- convention in astronomy journals, optional mode for this? if 'all' == citeq_args['display-authors'] then citeq_args['display-authors'] = nil; -- unset because no longer needed else citeq_args['display-authors'] = citeq_args['display-authors'] or 3 -- limit to three displayed names end end -- replace no-break space by space, User:Mr. Ibrahem if citeq_args.title then citeq_args.title = mw.ustring.gsub( citeq_args.title, "\194\160", " " ) end local editor_count = 0 for k, v in pairs(citeq_args) do if k:find("^editor%d+$") then editor_count = editor_count + 1 end end if editor_count > 8 then -- convention in astronomy journals, optional mode for this? if 'all' == citeq_args['display-editors'] then citeq_args['display-editors'] = nil; -- unset because no longer needed else citeq_args['display-editors'] = citeq_args['display-editors'] or 3 -- limit to three displayed names end end -- code to make a guess what template to use from the supplied parameters -- (first draft for proof-of-concept) local template = "بويب" -- |id= could hold more than one identifier pulled from Wikidata not supported by {{citation}}, right now only add our qid to the list local list_sep = '. ' if citeq_args.mode ~= 'cs1' then list_sep = ', ' end -- clean up any blank parameters for k, v in pairs(citeq_args) do if v == "" then citeq_args[k] = nil end end mw.logObject(citeq_args) if template then -- citeq_args.mode = citeq_args.mode or "cs1" -- a cs1 template already knows that it is cs1 so this line is superfluous template = "استشهاد " .. template else -- citeq_args.mode = citeq_args.mode or "cs2" -- a cs2 template already knows that it is cs2 so this line is superfluous template = "استشهاد" end citeq_args['no-tracking'] = 'true' -- لإيقاف ظهور تصانيف التتبع return mw.getCurrentFrame():expandTemplate{title = template, args = citeq_args} -- render the template end --[[-------------------------< C I T E _ Q >------------------------------------------------------------------ Takes standard CS1|2 template parameters and passes all to {{citation}}. If neither of |author= and |author1= are set, calls get_authors() to try to get an author name-list from Wikidata. The result is passed to {{citation}} for rendering. --]] local function _cite_q (in_citeq_args) local frame = mw.getCurrentFrame() local citeq_args = {} local origin_args = {} local Q -- parameters that don't get passed to Citation local expand = in_citeq_args.expand -- when set to anything, causes {{cite q}} to render <code><nowiki>{{citation|...}}</nowiki></code> local qid = in_citeq_args.qid or in_citeq_args[1] local wdl = in_citeq_args.wdl local template = in_citeq_args.template local cite_class = 'citation' local rtl = true local snak = in_citeq_args.snak or {} local pqid = in_citeq_args.pqid local page_offset = 0 in_citeq_args.expand = nil in_citeq_args[1] = nil in_citeq_args.qid = nil in_citeq_args.wdl = nil in_citeq_args.template = nil in_citeq_args.snak = nil in_citeq_args.pqid = nil mw.logObject(expand) if in_citeq_args.wikidatacite then citeq_args = in_citeq_args else local A = argument_wrapper(in_citeq_args) local loaded_args ={} for _,args_table in pairs({cfg.simple_properties_t, cfg.used_args_t}) do for k,_ in pairs(args_table) do if A[k] then citeq_args[k] = A[k] if k ~= A:ORIGIN(k) then origin_args[k] = A:ORIGIN(k) table.insert(loaded_args, A:ORIGIN(k)) else table.insert(loaded_args, k) end end end end for k,v in pairs(in_citeq_args) do if not in_array(k,loaded_args) then citeq_args[k] = v end end end -- if title supplied, flag to not read html title local titleforced = (citeq_args.title ~= nil) local default_opt = {rank = "preferred normal", fetchwikidata = "ALL", onlysourced = false, noicon = true, linksproject = cfg.config_t.linksproject, wikilinkprefix = cfg.config_t.wikilinkprefix } if citeq_args.volume or citeq_args.volume then local qualifiedaspossible = {} if citeq_args.volume then qualifiedaspossible['P478'] = citeq_args.volume end if citeq_args.chapter then qualifiedaspossible['P792'] = citeq_args.chapter end default_opt.qualifiedaspossible = qualifiedaspossible end Q = WdItem.WdItem:new(qid, default_opt, snak) local oth = {} -- put the language codes into a sequential table langcodes[] local langcodes = getLanguages(citeq_args.language) if not langcodes[1] then -- try to find language of work langcodes = _lang_code(Q) end if not langcodes[1] then -- try fallback to journal's language local journal_qid = Q:followQid("P1433") langcodes = journal_qid and _lang_code(journal_qid) end citeq_args.language = citeq_args.language or table.concat(langcodes, ", ") Q:setOptions( { langs = langcodes } ); local labellang = langcodes[1] or 'ar' rtl = rtl_lang[langcodes[1]] or false -- loop through list of simple properties and get their values in citeq_args for name, data in pairs(cfg.simple_properties_t) do local opt = { maxvals = data.maxvals, linked = data.linked, qual = data.qual , hijri = data.hijri} if data.no_vol_qual then opt.qualifiedaspossible = {}; end citeq_args[name] = citeq_args[name] or Q:getValue(data.id, opt ) if not citeq_args[name] and data.populate_from_journal then local publishedin = Q:getValue("P1433", {maxvals = 0, qual = data.id, qualsonly = true} ) citeq_args[name] = publishedin or Q:getPropOfProp("P1433", data.id, { maxvals = data.maxvals}) end if citeq_args[name] and snak[data.id] then snak[data.id] = nil end --- translate unknown value if citeq_args[name] == "Unknown" and rtl then citeq_args[name] = cfg.i18n_t.ar["unknown-" .. name] or cfg.i18n_t.ar["unknown"] end ----------------- if data.others then oth[#oth + 1] = citeq_args[name] and ((rtl and cfg.i18n_t.ar[name] or name:gsub("^%l", string.upper)) .. ": " .. citeq_args[name]) citeq_args[name] = nil end end citeq_args.others = citeq_args.others or table.concat(oth, ". ") if citeq_args.others == "" then citeq_args.others = nil end citeq_args.journal = citeq_args.journal and citeq_args.journal:gsub("^''", ""):gsub("''$", ""):gsub("|''", "|"):gsub("'']]", "]]") citeq_args.ol = citeq_args.ol or (Q:getValue("P648", { maxvals = 1 } ) or ''):gsub("^OL(.+)$", "%1") if citeq_args.ol == "" then citeq_args.ol = nil end -- TBD. Take care of |ol-access=? citeq_args.biorxiv = citeq_args.biorxiv and ("10.1101/" .. citeq_args.biorxiv) citeq_args.isbn = citeq_args.isbn or Q:getValue("P957", { maxvals = 1, rank="best" } ) -- try ISBN 10 (only one value accepted) if citeq_args.page then -- let single take precedence over multiple citeq_args.pages = nil citeq_args.pp = nil end if citeq_args.pages then local _, count = string.gsub(citeq_args.pages, "[,;%s]%d+", "") if count == 1 then citeq_args.page = citeq_args.pages citeq_args.pages = nil end end -- if url then see if there's an archive: citeq_args.url local url --find formatted url if snak ~= {} then for k, v in pairs(snak) do if (v[1].datatype == "external-id") then local furl = mw.wikibase.getBestStatements( k, "P1630" ) if 0 ~= #furl then furl = furl[1]["mainsnak"]["datavalue"]["value"] citeq_args.url = mw.message.newRawMessage(furl, {v[1]["datavalue"]["value"]}):plain() snak[k] = nil break; end end end if citeq_args.url == nil and pqid and qid then local refproperty = mw.wikibase.getBestStatements(qid , "P1687" ) if 0 ~= #refproperty then -- خطأ لوا في وحدة:Cite_Q على السطر 1124: attempt to index field 'datavalue' (a nil value). if refproperty[1]["mainsnak"] and refproperty[1]["mainsnak"]["datavalue"] and refproperty[1]["mainsnak"]["datavalue"]["value"] then refproperty=refproperty[1]["mainsnak"]["datavalue"]["value"]["id"] local furl = mw.wikibase.getBestStatements( refproperty, "P1630" ) if 0 ~= #furl then furl = furl[1]["mainsnak"]["datavalue"]["value"] local refval = mw.wikibase.getBestStatements( pqid, refproperty ) refval = (0 ~= #refval) and refval[1]["mainsnak"]["datavalue"]["value"] if refval then citeq_args.url = mw.message.newRawMessage(furl, {refval}):plain() end end end end end end if not citeq_args.url then local S953 = Q:getStatements("P953"):getBestOne() local S953_val = S953:getRawValue() citeq_args.url = S953_val and (S953_val ~= "novalue" and S953_val ~= "somevalue") and S953_val if citeq_args.url then if mw.ustring.match(citeq_args.url, "archive.org/details/") and citeq_args.page then page_offset = tonumber(S953:getRawQual('P8330')[1]) or 0 if not citeq_args.volume or (citeq_args.volume and citeq_args.volume == S953:getRawQual('P478')[1]) then citeq_args.url = mw.ustring.gsub(citeq_args.url, "/?$", "") .. "/page/n" .. (tonumber(citeq_args.page) + page_offset - 1) .. "/mode/1up" end end end end if not citeq_args.url then for i, pr in ipairs( {"P856", "P2699"} ) do url = Q:getValue(pr, { maxvals = 1, qual="P1065" } ) if url then citeq_args.url = mw.text.split( url, " (", true )[1] local arcurl = mw.ustring.match( url, " %((.*)%)" ) -- when there is an archive url, <url> holds: url<space>(archive url); here extract the archive url if present if arcurl then local arcy, arcm, arcd = arcurl:match("(20%d%d)%p?(%d%d)%p?(%d%d)") if arcy and arcm and arcd then citeq_args["archive-url"] = arcurl citeq_args["archive-date"] = arcy .. '-' .. arcm .. '-' .. arcd end end break; end end end if not titleforced then -- Handle subtitle. if citeq_args.title then local subtitle = Q:getValue('P1680'); if subtitle then citeq_args.title = citeq_args.title .. ": " .. subtitle end end local htmltitle = Q:getValue("P1476", {qual = "P6833", maxvals = 1, qualsonly = true} ) if htmltitle then citeq_args.title = htmltitle:gsub("</?i>", "''") else local title_display = citeq_args.title or (langcodes[1] and mw.wikibase.getLabelByLang(qid, langcodes[1])) or mw.wikibase.getLabel(qid) if title_display and snak and snak.P1810 then title_display=title_display .. " | " .. snak.P1810[1].datavalue.value snak.P1810 = nil end title_display = title_display or ("No label or title -- debug: " .. qid) if citeq_args.url then citeq_args.title = wrap_nowiki(title_display) else local slink = mw.wikibase.getSitelink(qid, cfg.config_t.linksproject) local slink_flag = false local wrap_title = '' local wslink = false if not slink then -- See if we have wikisource if not citeq_args.url then local wikisource_sitelink = mw.wikibase.getSitelink(qid, cfg.i18n_t.wikisource) or nil if wikisource_sitelink then slink = ':s:'..wikisource_sitelink wslink = true end end end if citeq_args.title then if slink then wrap_title = wrap_nowiki(citeq_args.title) slink_flag = true else citeq_args.title = wrap_nowiki(citeq_args.title) end else if slink and not wslink then if slink:lower() == title_display:lower() then citeq_args.title = '[[' .. slink .. ']]' else wrap_title = wrap_nowiki(slink:gsub("%s%(.+%)$", ""):gsub(",.+$", "")) slink_flag = true end elseif wslink then wrap_title = wrap_nowiki(title_display) slink_flag = true else citeq_args.title = wrap_nowiki(title_display) end end if slink_flag then if slink == wrap_title and not wslink then -- direct link citeq_args.title = '[[' .. slink .. ']]' else -- piped link citeq_args.title = '[[' .. slink .. '|' .. wrap_title .. ']]' end end end end end -- replace no-break space by space, User:Mr. Ibrahem if citeq_args.title then citeq_args.title = mw.ustring.gsub( citeq_args.title, "\194\160", " " ) end if is_set (qid) then if not is_set (citeq_args.author) and not is_set (citeq_args.author1) and not is_set (citeq_args.subject) and not is_set (citeq_args.subject1) and not is_set (citeq_args.host) and not is_set (citeq_args.host1) and not is_set (citeq_args.last) and not is_set (citeq_args.last1) and not is_set (citeq_args.surname) and not is_set (citeq_args.surname1) and not is_set (citeq_args['author-last']) and not is_set (citeq_args['author-last1']) and not is_set (citeq_args['author1-last']) and not is_set (citeq_args['author-surname']) and not is_set (citeq_args['author-surname1']) and not is_set (citeq_args['author1-surname1']) then -- if neither are set, try to get authors from Wikidata get_name_list ('author', citeq_args, Q, wdl, labellang) -- modify citeq_args table with authors from Wikidata end if not is_set (citeq_args.editor) and not is_set (citeq_args.editor1) and not is_set (citeq_args['editor-last']) and not is_set (citeq_args['editor-last1']) and not is_set (citeq_args['editor1-last']) and not is_set (citeq_args['editor-surname']) and not is_set (citeq_args['editor-surname1']) and not is_set (citeq_args['editor1-surname']) then -- if neither are set, try to get editors from Wikidata get_name_list ('editor', citeq_args, Q, wdl, labellang) -- modify citeq_args table with editors from Wikidata end if not is_set (citeq_args.translator) and not is_set (citeq_args.translator1) and not is_set (citeq_args['translator-last']) and not is_set (citeq_args['translator-last1']) and not is_set (citeq_args['translator1-last']) and not is_set (citeq_args['translator-surname']) and not is_set (citeq_args['translator-surname1']) and not is_set (citeq_args['translator1-surname']) then -- if neither are set, try to get translators from Wikidata get_name_list ('translator', citeq_args, Q, wdl, labellang) -- modify citeq_args table with translators from Wikidata end end for k, v in pairs(citeq_args) do if in_array (v, {'(())', 'unset', 'ignore'}) or 'string' ~= type(k) then -- empty accept-as-is-written (()) markup to indicate an empty/unused parameter value, other ((...)) markups are deliberately passed down to {{citation}} citeq_args[k] = nil elseif in_array (v, {'((unset))', '((ignore))'}) then -- strip off markup for free-text values clashing with local keywords citeq_args[k] = 'unset' end end local author_count = 0 for k, v in pairs(citeq_args) do if k:find("^author%d+$") then author_count = author_count + 1 end end if author_count > 8 then -- convention in astronomy journals, optional mode for this? if 'all' == citeq_args['display-authors'] then citeq_args['display-authors'] = nil; -- unset because no longer needed else citeq_args['display-authors'] = citeq_args['display-authors'] or 3 -- limit to three displayed names end end local editor_count = 0 for k, v in pairs(citeq_args) do if k:find("^editor%d+$") then editor_count = editor_count + 1 end end if editor_count > 8 then -- convention in astronomy journals, optional mode for this? if 'all' == citeq_args['display-editors'] then citeq_args['display-editors'] = nil; -- unset because no longer needed else citeq_args['display-editors'] = citeq_args['display-editors'] or 3 -- limit to three displayed names end end -- change edition to ordinal if it's set and numeric if (rtl == false) then citeq_args.edition = citeq_args.edition and makeOrdinal(citeq_args.edition) end -- code to make a guess what template to use from the supplied parameters -- (first draft for proof-of-concept) if citeq_args.journal then template = template or "بدورية محكمة" elseif citeq_args.isbn then template = template or "بكتاب" citeq_args.asin = nil -- suppress ASIN if ISBN exists elseif citeq_args.website then template = template or "بويب" end -- template is CS1 designator: journal, web, news, etc. if template then -- citeq_args.mode = citeq_args.mode or "cs1" -- a cs1 template already knows that it is cs1 so this line is superfluous local citeclasses = {["بدورية محكمة"] = 'journal', ["بكتاب"] = "book", ["بويب"] = "web" } cite_class = citeclasses[template] template = "استشهاد " .. template else -- citeq_args.mode = citeq_args.mode or "cs2" -- a cs2 template already knows that it is cs2 so this line is superfluous template = "استشهاد" end -- |id= could hold more than one identifier pulled from Wikidata not supported by {{citation}}, right now only add our qid to the list local list_sep = '. ' if citeq_args.mode ~= 'cs1' then list_sep = ', ' end local id = cfg.i18n_t.wdq .. ':[[:d:' .. qid .. '|' .. qid .. ']]' local old_id = citeq_args.id if wdl then -- show WD logo id = id .. '[[ملف:Wikidata-logo.svg|16px|alt=|link=]]' -- possibly replace by WD edit icon? end if is_set (old_id) then citeq_args.id = old_id .. list_sep .. id -- append to user-specified contents else citeq_args.id = id end -- clean up any blank parameters for k, v in pairs(citeq_args) do if v == "" then citeq_args[k] = nil end end -- use real param names for CS1 messages for k,v in pairs(origin_args) do if citeq_args[k] and citeq_args[k] == in_citeq_args[v] then citeq_args[v] = citeq_args[k] citeq_args[k] = nil end end mw.logObject(citeq_args) -- if |expand=<anything>, write a nowiki'd version to see what the {{citation}} template call looks like if expand then local expand_args = { "{{" .. template .. "\n" } -- init with citation template if expand == "self" then citeq_args.id = old_id -- restore original |id= parameter expand_args = { cfg.i18n_t.cite_q .. qid } -- expand to itself end -- make a sortable table and sort it by param name local sorttable = {} for param, val in pairs (citeq_args) do table.insert(sorttable, {param, val}) end table.sort(sorttable, comp_key) -- add contents to expand_args for idx, val in ipairs(sorttable) do table.insert(expand_args, val[1] .. '=' .. val[2] .. "\n") end -- make the nowiki'd string and done return frame:preprocess (table.concat ({'<syntaxhighlight lang="wikitext" inline="1">', table.concat (expand_args, ' |') .. '}}', '</syntaxhighlight>'})); end local erratumid = Q:getPropertyIDs( "P2507", { maxvals = 1 } ) if erratumid then erratumid = " [[d:" .. erratumid .. "|" .. cfg.i18n_t.erratum .. "]]" .. cfg.i18n_t.trackingcats.erratum else erratumid = "" end local opt_cat = '' if Q:getValue( "P5824" ) then opt_cat = cfg.i18n_t.trackingcats.retracted end if Q:getValue( "P1366" ) then opt_cat = opt_cat .. cfg.i18n_t.trackingcats.replaced end if not citeq_args.title then -- emit category link if missing title opt_cat = opt_cat .. cfg.i18n_t.trackingcats['no-label-or-title']; end if citeq_args.wikidatacite then return frame:expandTemplate{title = template, args = citeq_args} .. erratumid .. opt_cat -- render the template else local CS = require("Module:Citation/CS1" .. sandbox) return CS._citation(frame , citeq_args, {['CitationClass'] = cite_class}) .. erratumid .. opt_cat end end --[[-------------------------< C I T E W I K I D A T A >------------------------------------------------------------------ format wikidata reference --]] local function _cite_wikidata (ref, pqid, expand) -- early exit if not ref then return nil end local snak = ref.snaks -- مراجع غير مقبولة if snak.P143 or snak.P3452 then return nil end local hash = ref.hash if hash and hash ~= "" and ref_cash[hash] then return ref_cash[hash] end local citeq_args = {} local frame = mw.getCurrentFrame() -- مذكور في if snak.P248 then for _, prop in pairs(snak.P248) do if prop.snaktype == "value" then citeq_args.qid = "Q" .. prop.datavalue.value["numeric-id"] end end snak.P248 = nil; end if citeq_args.qid and is_rejected(citeq_args.qid) == true then return nil end local reference citeq_args.snak = snak citeq_args.pqid = pqid citeq_args.wikidatacite = 1 citeq_args.expand = expand if citeq_args.qid then reference = _cite_q(citeq_args) else local has_properties = false for k, _ in pairs(cfg.used_properties_t) do if snak[k] then has_properties = true; break; end end reference = (has_properties and _cite_web(citeq_args) or nil) end if reference and reference ~= "" then reference = frame:extensionTag("ref", reference, {name = 'wikidata-' .. hash}) end if hash and hash ~= "" then ref_cash[hash] = reference end return reference end local function cite_q (frame) local args = {} for k, v in pairs(frame:getParent().args) do if v ~= "" then args[k] = v end end for k, v in pairs(frame.args) do if v ~= "" then args[k] = v end end args.qid = args.qid or args[1] or "" if args.qid == "" then return nil end args[1] = nil local citesep = (args.citesep or "") if citesep == "" then citesep = ", " end citesep = citesep:gsub('"', '') -- strip double quotes after setting default to allow |citesep="" as a blank separator args.citesep = nil local tag = args.tag or "" if tag == "" then tag = nil end args.tag = nil local list = args.list or "" if list == "" then list = nil end args.list = nil args.language = args.language or args.lang args.lang = nil local cites = {} for q in args.qid:gmatch("Q%d+") do -- make a new copy of the arguments local newargs = {} for k, v in pairs(args) do if k ~= "qid" then newargs[k] = v end end newargs.qid = q if tag == "ref" then cites[#cites + 1] = frame:callParserFunction{ name = "#tag:ref", args = { _cite_q(newargs), name = q } } -- expand like this: args = { _cite_q(newargs), name = 'foo', group = 'bar' } else cites[#cites + 1] = _cite_q(newargs) end end if list then return frame:expandTemplate{ title = list, args = cites } else return table.concat(cites, citesep) end end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { makeOrdinal = makeOrdinal, getLangOfProp = getLangOfProp, -- lang_code = lang_code, _cite_wikidata = _cite_wikidata, _cite_q = _cite_q, cite_q = cite_q } cuzu3578tr4cgwq8ch72jh5jqhcotp4 1097364 1097361 2026-07-23T22:57:17Z حبيشان 31560 1097364 Scribunto text/plain --[[ Cite Q النسخة العربية مشتق من النسخة الإنجليزية ]] require('strict') local sandbox = '/ملعب' local WdItem = require('Module:WdItem' .. sandbox) local cfg = mw.loadData('Module:Cite Q/config' .. sandbox) local rtl_lang = {ar = true, fa = true, ur = true, ku = true, he = true, arc = true, dv = true, ha = true, khw = true, ks = true, ps = true, yi = true, ota = true } local ref_cash = {} --[[-------------------< A R G U M E N T _ W R A P P E R >---------------------- Argument wrapper. This function provides support for argument mapping defined in the configuration file so that multiple names can be transparently aliased to single internal variable. ]] local function argument_wrapper ( arglist ) local origin = {}; local nilargs = {}; return setmetatable({ ORIGIN = function ( self, k ) local dummy = self[k]; -- force the variable to be loaded. return origin[k]; end }, { __index = function ( tbl, k ) local v = rawget(tbl,k) if v then return v elseif nilargs[k] then return nil end local list = (type(k)=="number") and k or cfg.aliases_t[k]; if type( list ) == 'table' then for _, alias_key in pairs( list ) do if arglist[alias_key] then v = arglist[alias_key] origin[k] = alias_key break; end end elseif list ~= nil then v = arglist[list] if v then origin[k] = list end end if v == nil then nilargs[k] = true else rawset( tbl, k, v ) end return v end, }); end ------------------------------------------------------------------------------- -- makeOrdinal needs to be internationalised along with cfg.i18n_t -- takes cardinal number as a numeric and returns the ordinal as a string -- we need three exceptions in English for 1st, 2nd, 3rd, 21st, .. 31st, etc. ------------------------------------------------------------------------------- local makeOrdinal = function(cardinal) local card = tonumber(cardinal) if not card then return cardinal end local ordsuffix = cfg.i18n_t.ordinal.default if card % 10 == 1 then ordsuffix = cfg.i18n_t.ordinal[1] elseif card % 10 == 2 then ordsuffix = cfg.i18n_t.ordinal[2] elseif card % 10 == 3 then ordsuffix = cfg.i18n_t.ordinal[3] end -- In English, 1, 21, 31, etc. use 'st', but 11, 111, etc. use 'th' -- similarly for 12 and 13, etc. if (card % 100 == 11) or (card % 100 == 12) or (card % 100 == 13) then ordsuffix = cfg.i18n_t.ordinal.default end return card .. ordsuffix end --[[--------------------------< I S _ S E T >-------------------------------------------------------------- Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. ]] local function is_set( var ) return not (var == nil or var == '') end --[[--------------------------< I N _ A R R A Y >-------------------------------------------------------------- Whether needle is in haystack (taken from Module:Citation/CS1/Utilities) ]] local function in_array( needle, haystack ) if needle == nil then return false end for n, v in ipairs( haystack ) do if v == needle then return n end end return false end local function getLanguages(languageArg) local langcodes = {} if languageArg then -- check these are a supported language codes for lc in mw.text.gsplit( languageArg, "[,، ]+", false ) do --modified langcodes[#langcodes+1] = mw.language.isSupportedLanguage(lc) and lc end end return langcodes end --[[--------------------------< A C C E P T _ V A L U E >------------------------------------------------------- Accept WD value by framing in ((...)) if param_val is equal to keyword; else pass-through WD value as is. ]] local function accept_value( param_val, wd_val ) local val = param_val if val then if in_array (val, {'accept', '))((', ':d:'}) then val = '((' .. wd_val .. '))' elseif '((accept))' == val then val = 'accept' elseif '(())(())' == val then val = '))((' elseif '((:d:))' == val then val = ':d:' else val = wd_val end end return val end -- function to fetch a value to display local function makelink(v, out, link, maxpos, wdl, lang) local label local snak = v.mainsnak or v if snak.snaktype == "value" then if snak.datatype == "wikibase-item" then local qnumber = snak.datavalue.value.id local sitelink = mw.wikibase.getSitelink(qnumber) if qnumber == "Q2818964" then sitelink = nil end -- suppress link to "Various authors" -- من المهم التحقق من وجود datavalue if v.qualifiers and v.qualifiers.P1932 and v.qualifiers.P1932[1].datavalue then label = v.qualifiers.P1932[1].datavalue.value else label = mw.wikibase.getLabelByLang(qnumber, lang) or mw.wikibase.getLabel(qnumber) if label then label = mw.text.nowiki(label) else label = qnumber -- should add tracking category end end local position = maxpos + 1 -- Default to 'next' author. -- use P1545 (series ordinal) instead of default position. if v["qualifiers"] and v.qualifiers["P1545"] and v.qualifiers["P1545"][1] then position = tonumber(v.qualifiers["P1545"][1].datavalue.value) end maxpos = math.max(maxpos, position) if sitelink then -- just the plain name, -- but keep a record of the links, using the same index out[position] = label link[position] = sitelink else if wdl then -- show that there's a Wikidata entry available out[position] = string.format( "[[:d:Q%s|%s]]&nbsp;<span title='%s'>[[File:Wikidata-logo.svg|16px|alt=|link=]]</span>", snak.datavalue.value["numeric-id"], label, cfg.i18n_t["errors"]["local-article-not-found"] ) else -- no Wikidata links wanted, so just give the plain label out[position] = label end end elseif snak.datatype == "string" then local position = maxpos + 1 -- Default to 'next' author. -- use P1545 (series ordinal) instead of default position. if v["qualifiers"] and v.qualifiers["P1545"] and v.qualifiers["P1545"][1] then position = tonumber(v.qualifiers["P1545"][1].datavalue.value) end maxpos = math.max(maxpos, position) out[position] = snak.datavalue.value else -- not a wikibase-item or a string! end else -- code here if we want to return something when author is "unknown" -- من المهم التحقق من وجود datavalue if v.qualifiers and v.qualifiers.P1932 and v.qualifiers.P1932[1].datavalue then label = v.qualifiers.P1932[1].datavalue.value else label = cfg.i18n_t["unknown-author"][lang] or cfg.i18n_t["unknown-author"]["ar"] end maxpos = maxpos + 1 out[maxpos] = label end return maxpos end --[=[-------------------------< G E T _ N A M E _ L I S T >---------------------------------------------------- get_name_list -- adapted from getAuthors code taken from Module:RexxS arguments: nl_type - type of name list to fetch: nl_type = 'author' for authors; 'editor' for editors; 'translator' for translators args - pointer to the parameter arguments table from the template call qid - value from |qid= parameter; the Q-id of the source (book, etc.) in qid wdl - value from the |wdl= parameter; a Boolean passed to enable links to Wikidata when no article exists returns nothing; modifies the args table ]=] local function get_name_list (nl_type, args, Q, wdl, lang) local propertyID = "P50" local fallbackID = "P2093" -- author name string if nl_type =="author" then propertyID = 'P50' -- for authors fallbackID = 'P2093' -- author-string elseif nl_type =="editor" then propertyID = 'P5769' -- "editor-in-chief" fallbackID = 'P98' -- for editors - So-called "fallbacks" are actually a second set of properties processed -- TBD. Take book series editors into account as well (if they have a separate P code as well)? elseif nl_type == "translator" then propertyID = 'P655' -- for translators fallbackID = nil -- elseif 'contributor' == nl_type then -- f.e. author of forewords (P2679) and afterwords (P2680); requires |contribution=, |title= and |author= -- propertyID = 'P' -- for contributors -- fallbackID = nil else return -- not specified so return end -- wdl is a Boolean passed to enable links to Wikidata when no article exists -- if "false" or "no" or "0" is passed set it false -- if nothing or an empty string is passed set it false if wdl and (#wdl > 0) then wdl = wdl:lower() wdl = in_array (wdl, {"false", "no", "0"}) else -- wdl is empty, so wdl = false end local statements = Q:getStatements(propertyID) if statements:count() == 0 and fallbackID then statements = Q:getStatements(fallbackID) end -- Make sure it actually has at least one of the properties requested if statements:count() == 0 then return nil end -- So now we have something to return: -- table 'out' is going to store the names(s): -- and table 'link' will store any links to the name's article local out = {} local link = {} local maxpos = 0 for _, s in statements:iter() do -- maxpos = makelink(v, out, link, maxpos, wdl, lang) local qnumber = s:getRawValue() if qnumber ~='novalue' then local label = s:getValue({linked=false}) local slink if label == 'somevalue' then label = cfg.i18n_t["unknown-author"][lang] or cfg.i18n_t["unknown-author"]["ar"] elseif mw.ustring.match(qnumber, '^Q%d+$') and qnumber ~= 'Q2818964' then slink = mw.wikibase.getSitelink(qnumber, cfg.config_t.linksproject) end local position = maxpos + 1 -- Default to 'next' author. position = tonumber(s:getRawQual("P1545")[1]) or position maxpos = math.max(maxpos, position) out[position] = label if slink then link[position] = cfg.config_t.wikilinkprefix .. slink; end end end -- if there's anything to return, then insert the additions in the template arguments table -- in the form |author1=firstname secondname |author2= ... -- Renumber, in case we have inconsistent numbering local keys = {} for k, v in pairs(out) do keys[#keys + 1] = k end table.sort(keys) -- as they might be out of order for i, k in ipairs(keys) do out[k] = out[k]:gsub ('&#39;', '\''); -- prevent cs1|2 multiple names categorization; replace html entity with the actual character if args[nl_type .. i] then -- name gets overwritten -- pull corresponding -link only if overwritten name is same as WD name if link[k] and (args[nl_type .. i] == out[k]) then args[nl_type .. '-link' .. i] = args[nl_type .. '-link' .. i] or link[k] -- author-linkn or editor-linkn end else -- name does not get overwritten, so pull name from WD args[nl_type .. i] = out[k] if link[k] then args[nl_type .. '-link' .. i] = args[nl_type .. '-link' .. i] or link[k] -- author-linkn or editor-linkn end end end end local function _getLangOfSnakProp(snak, pid) if not pid or not snak then return {} end local out = {} local props = snak[pid] for i, v in ipairs(props) do if v.datatype == "monolingualtext" and v.datavalue then out[#out + 1] = v.datavalue.value.language end end return out end local function getLangOfProp(frame) local pid = frame.args.pid or mw.text.trim(frame.args[1] or "") if pid == "" then return end local qid = frame.args.qid if qid == "" then qid = nil end local Q = WdItem.new(qid, { fwd = "ALL", osd = false, noicon = true }) return table.concat(Q:getLangOfProp(pid), ", ") end -- gets the language codes of a Wikidata entry as a table local function _lang_code(Qitem) local lc = Qitem:getPropOfProp( "P407", "P424") if lc then return mw.text.split( lc, "[,، ]+" ) end --modified lc = Qitem:getPropOfProp( "P407", "P218" ) if lc then return mw.text.split( lc, "[,، ]+" ) end --modified return Qitem:getLangOfProp("P424") end local function lang_code(frame) local Q = WdItem.newItem(frame.args.qid or mw.text.trim(frame.args[1] or ""), { fwd = "ALL", osd = false, noicon = true }) return table.concat(_lang_code(Q), ", ") end -- wraps a string in nowiki unless disable flag is set local function wrap_nowiki(str, disable) if disable then return str or '' end return mw.text.nowiki(str or '') end -- sort sequence table whose values are key-value pairs by key local function comp_key(a, b) local param_a, enum_a = a[1]:match ('(%D+)(%d+)$'); -- get param name and enumerator from <a> local param_b, enum_b = b[1]:match ('(%D+)(%d+)$'); -- get param name and enumerator from <b> if enum_a and enum_b then -- if both parameters have neumerators if param_a == param_b then -- are parameter names the same? return tonumber (enum_a) < tonumber (enum_b); -- yes: compare enumerators end end return a[1] < b[1]; -- alpha sort if here end -- sort sequence table whose values are key-value pairs by value local function comp_val(a, b) return a[2] < b[2] end -- ref filtering for citing from wikidata local function is_rejected(item) -- rejected Q if cfg.rejected_t.sources[item]==true then return true; end -- rejected Properties local item_entity = mw.wikibase.getEntity(item); for _, v in pairs(cfg.rejected_t.properties) do if (#item_entity:getAllStatements( v )>0 ) then return true; end end -- Rejected InatanceOf local instance = item_entity:getAllStatements( "P31" ) for _,v in pairs(instance) do local vsnak = v.mainsnak or v if cfg.rejected_t.instances[vsnak.datavalue.value.id] then return true; end end --No used Properties local has_properties = false for k, _ in pairs(cfg.used_properties_t) do if (#item_entity:getAllStatements( k )>0 ) then has_properties = true; break; end end return not has_properties; end local function _cite_web(citeq_args) local Q local refsnak = citeq_args.snak citeq_args.snak = nil -- retrieve all the parameters local pqid = citeq_args.pqid citeq_args.pqid = nil local wdl = false local qid = nil local multi_args = { P50 = "author", P2093 = "author", P5769 = "editor", P98 = "editor", P655 = "translator", } Q = WdItem.newSnakItem(refsnak, {fwd = "ALL", osd = false, noicon = true, linksproject = cfg.config_t.linksproject, wikilinkprefix = cfg.config_t.wikilinkprefix}) -- find language local langcodes = getLanguages(citeq_args.language) if refsnak["P1476"] then langcodes = _getLangOfSnakProp(refsnak, "P1476") citeq_args.language = citeq_args.language or langcodes[1] end for _,l in ipairs({'ar','en','mul'}) do if not in_array(l, langcodes) then table.insert(langcodes, l) end end Q:setOptions({ langs = langcodes }) local labellang = langcodes[1] local rtl = rtl_lang[langcodes[1]] or false local oth = {} for i in pairs(refsnak) do local label = "" -- multiple authors may be given if refsnak[i][1].snaktype ~= 'novalue' then if multi_args[i] then get_name_list (multi_args[i], citeq_args, Q, wdl, labellang) elseif cfg.used_properties_t[i] and type(cfg.used_properties_t[i]) == "table" then local data = cfg.used_properties_t[i] local langidx = 1 citeq_args[data.arg] = Q:getValue( i, { maxvals = data.maxvals, linked = data.linked, rank = data.rank or "best" } ) if not citeq_args[data.arg] then citeq_args[data.arg] = Q:getValue( i, { maxvals = data.maxvals, linked = data.linked} ) if citeq_args[data.arg]:find('^Q%d+$') then -- qid was returned -- try fallback to qid's native language local qid_languages = _lang_code(WdItem.newItem( citeq_args[data.arg], { fwd = "ALL", osd = false, noicon = true } )) citeq_args[data.arg] = Q:getValue( i, { maxvals = data.maxvals, linked = data.linked, langs = qid_languages} ) if citeq_args[data.arg]:find('^Q%d+$') then -- qid was returned again citeq_args[data.arg] = nil else -- record the language found if no lang specified citeq_args.language = citeq_args.language or qid_languages[1] end end end --- translate unknown value if citeq_args[data.arg] == "Unknown" then if rtl then citeq_args[data.arg] = cfg.i18n_t.ar["unknown-" .. data.arg] or cfg.i18n_t.ar["unknown"] else citeq_args[data.arg] = mw.wikibase.getLabelByLang("Q4233718", langcodes[1]):gsub("^%l", mw.ustring.upper) end end ----------------- if data.others then oth[#oth + 1] = citeq_args[data.arg] and ((rtl and cfg.i18n_t.ar[data.arg] or data.arg:gsub("^%l", string.upper)) .. ": " .. citeq_args[data.arg]) citeq_args[data.arg] = nil end elseif cfg.used_properties_t[i] then if i == "P648" then citeq_args.ol = (Q:getValue( "P648", { maxvals = 1 } ) or ''):gsub("^OL(.+)$", "%1") if citeq_args.ol == "" then citeq_args.ol = nil end elseif i == "P957" then citeq_args.isbn = Q:getValue("P957", { maxvals = 1 } ) elseif in_array(i,{"P854", "P953", "P856", "P2699"}) then local url; for _, pr in ipairs( {"P854", "P953", "P856", "P2699"} ) do url = Q:getValue( pr, { maxvals = 1 } ) if url then citeq_args.url = mw.text.split( url, " (", true )[1] local arcurl = mw.ustring.match( url, " %((.*)%)" ) -- when there is an archive url, <url> holds: url<space>(archive url); here extract the archive url if present if arcurl then local arcy, arcm, arcd = arcurl:match("(20%d%d)%p?(%d%d)%p?(%d%d)") if arcy and arcm and arcd then citeq_args["archive-url"] = arcurl citeq_args["archive-date"] = tonumber(arcd) .. " " .. cfg.i18n_t.months[tonumber(arcm)] .. " " .. arcy end end break end end end end end end if citeq_args.url then if refsnak["P813"] then citeq_args.accessdate = Q:getValue("P813", { maxvals = 1 } ) end if refsnak["P1065"] and refsnak["P2960"] then citeq_args["archive-url"] = Q:getValue("P1065", { maxvals = 1 } ) citeq_args["archive-date"]= Q:getValue("P2960", { maxvals = 1 } ) end end citeq_args.others = citeq_args.others or table.concat(oth, ". ") if citeq_args.others == "" then citeq_args.others = nil end citeq_args.biorxiv = citeq_args.biorxiv and ("10.1101/" .. citeq_args.biorxiv) -- if url then see if there's an archive: citeq_args.url local url local title_display = citeq_args.title if citeq_args.url then citeq_args.title = wrap_nowiki(title_display) end -- TBD: incorporate |at, |sheets= and |sheet= here as well -- Sort out what should happen if several of them are given at the same time if citeq_args.page or citeq_args.p then -- let single take precedence over multiple citeq_args.pages = nil citeq_args.pp = nil end if citeq_args.pages then local _, count = string.gsub(citeq_args.pages, "[,;%s]%d+", "") if count == 1 then citeq_args.page = citeq_args.pages citeq_args.pages = nil end end for k, v in pairs(citeq_args) do if in_array (v, {'(())', 'unset', 'ignore'}) or 'string' ~= type(k) then -- empty accept-as-is-written (()) markup to indicate an empty/unused parameter value, other ((...)) markups are deliberately passed down to {{citation}} citeq_args[k] = nil elseif in_array (v, {'((unset))', '((ignore))'}) then -- strip off markup for free-text values clashing with local keywords citeq_args[k] = 'unset' end end local author_count = 0 for k, v in pairs(citeq_args) do if k:find("^author%d+$") then author_count = author_count + 1 end end if author_count > 8 then -- convention in astronomy journals, optional mode for this? if 'all' == citeq_args['display-authors'] then citeq_args['display-authors'] = nil; -- unset because no longer needed else citeq_args['display-authors'] = citeq_args['display-authors'] or 3 -- limit to three displayed names end end -- replace no-break space by space, User:Mr. Ibrahem if citeq_args.title then citeq_args.title = mw.ustring.gsub( citeq_args.title, "\194\160", " " ) end local editor_count = 0 for k, v in pairs(citeq_args) do if k:find("^editor%d+$") then editor_count = editor_count + 1 end end if editor_count > 8 then -- convention in astronomy journals, optional mode for this? if 'all' == citeq_args['display-editors'] then citeq_args['display-editors'] = nil; -- unset because no longer needed else citeq_args['display-editors'] = citeq_args['display-editors'] or 3 -- limit to three displayed names end end -- code to make a guess what template to use from the supplied parameters -- (first draft for proof-of-concept) local template = "بويب" -- |id= could hold more than one identifier pulled from Wikidata not supported by {{citation}}, right now only add our qid to the list local list_sep = '. ' if citeq_args.mode ~= 'cs1' then list_sep = ', ' end -- clean up any blank parameters for k, v in pairs(citeq_args) do if v == "" then citeq_args[k] = nil end end mw.logObject(citeq_args) if template then -- citeq_args.mode = citeq_args.mode or "cs1" -- a cs1 template already knows that it is cs1 so this line is superfluous template = "استشهاد " .. template else -- citeq_args.mode = citeq_args.mode or "cs2" -- a cs2 template already knows that it is cs2 so this line is superfluous template = "استشهاد" end citeq_args['no-tracking'] = 'true' -- لإيقاف ظهور تصانيف التتبع return mw.getCurrentFrame():expandTemplate{title = template, args = citeq_args} -- render the template end --[[-------------------------< C I T E _ Q >------------------------------------------------------------------ Takes standard CS1|2 template parameters and passes all to {{citation}}. If neither of |author= and |author1= are set, calls get_authors() to try to get an author name-list from Wikidata. The result is passed to {{citation}} for rendering. --]] local function _cite_q (in_citeq_args) local frame = mw.getCurrentFrame() local citeq_args = {} local origin_args = {} local Q -- parameters that don't get passed to Citation local expand = in_citeq_args.expand -- when set to anything, causes {{cite q}} to render <code><nowiki>{{citation|...}}</nowiki></code> local qid = in_citeq_args.qid or in_citeq_args[1] local wdl = in_citeq_args.wdl local template = in_citeq_args.template local cite_class = 'citation' local rtl = true local snak = in_citeq_args.snak or {} local pqid = in_citeq_args.pqid local page_offset = 0 in_citeq_args.expand = nil in_citeq_args[1] = nil in_citeq_args.qid = nil in_citeq_args.wdl = nil in_citeq_args.template = nil in_citeq_args.snak = nil in_citeq_args.pqid = nil if in_citeq_args.wikidatacite then citeq_args = in_citeq_args else local A = argument_wrapper(in_citeq_args) local loaded_args ={} for _,args_table in pairs({cfg.simple_properties_t, cfg.used_args_t}) do for k,_ in pairs(args_table) do if A[k] then citeq_args[k] = A[k] if k ~= A:ORIGIN(k) then origin_args[k] = A:ORIGIN(k) table.insert(loaded_args, A:ORIGIN(k)) else table.insert(loaded_args, k) end end end end for k,v in pairs(in_citeq_args) do if not in_array(k,loaded_args) then citeq_args[k] = v end end end -- if title supplied, flag to not read html title local titleforced = (citeq_args.title ~= nil) local default_opt = {rank = "preferred normal", fetchwikidata = "ALL", onlysourced = false, noicon = true, linksproject = cfg.config_t.linksproject, wikilinkprefix = cfg.config_t.wikilinkprefix } if citeq_args.volume or citeq_args.volume then local qualifiedaspossible = {} if citeq_args.volume then qualifiedaspossible['P478'] = citeq_args.volume end if citeq_args.chapter then qualifiedaspossible['P792'] = citeq_args.chapter end default_opt.qualifiedaspossible = qualifiedaspossible end Q = WdItem.WdItem:new(qid, default_opt, snak) local oth = {} -- put the language codes into a sequential table langcodes[] local langcodes = getLanguages(citeq_args.language) mw.logObject(langcodes,'1') if not langcodes[1] then -- try to find language of work langcodes = _lang_code(Q) end mw.logObject(langcodes,'2') if not langcodes[1] then -- try fallback to journal's language local journal_qid = Q:followQid("P1433") langcodes = journal_qid and _lang_code(journal_qid) end mw.logObject(langcodes,'3') citeq_args.language = citeq_args.language or table.concat(langcodes, ", ") Q:setOptions( { langs = langcodes } ); local labellang = langcodes[1] or 'ar' rtl = rtl_lang[langcodes[1]] or false -- loop through list of simple properties and get their values in citeq_args for name, data in pairs(cfg.simple_properties_t) do local opt = { maxvals = data.maxvals, linked = data.linked, qual = data.qual , hijri = data.hijri} if data.no_vol_qual then opt.qualifiedaspossible = {}; end citeq_args[name] = citeq_args[name] or Q:getValue(data.id, opt ) if not citeq_args[name] and data.populate_from_journal then local publishedin = Q:getValue("P1433", {maxvals = 0, qual = data.id, qualsonly = true} ) citeq_args[name] = publishedin or Q:getPropOfProp("P1433", data.id, { maxvals = data.maxvals}) end if citeq_args[name] and snak[data.id] then snak[data.id] = nil end --- translate unknown value if citeq_args[name] == "Unknown" and rtl then citeq_args[name] = cfg.i18n_t.ar["unknown-" .. name] or cfg.i18n_t.ar["unknown"] end ----------------- if data.others then oth[#oth + 1] = citeq_args[name] and ((rtl and cfg.i18n_t.ar[name] or name:gsub("^%l", string.upper)) .. ": " .. citeq_args[name]) citeq_args[name] = nil end end citeq_args.others = citeq_args.others or table.concat(oth, ". ") if citeq_args.others == "" then citeq_args.others = nil end citeq_args.journal = citeq_args.journal and citeq_args.journal:gsub("^''", ""):gsub("''$", ""):gsub("|''", "|"):gsub("'']]", "]]") citeq_args.ol = citeq_args.ol or (Q:getValue("P648", { maxvals = 1 } ) or ''):gsub("^OL(.+)$", "%1") if citeq_args.ol == "" then citeq_args.ol = nil end -- TBD. Take care of |ol-access=? citeq_args.biorxiv = citeq_args.biorxiv and ("10.1101/" .. citeq_args.biorxiv) citeq_args.isbn = citeq_args.isbn or Q:getValue("P957", { maxvals = 1, rank="best" } ) -- try ISBN 10 (only one value accepted) if citeq_args.page then -- let single take precedence over multiple citeq_args.pages = nil citeq_args.pp = nil end if citeq_args.pages then local _, count = string.gsub(citeq_args.pages, "[,;%s]%d+", "") if count == 1 then citeq_args.page = citeq_args.pages citeq_args.pages = nil end end -- if url then see if there's an archive: citeq_args.url local url --find formatted url if snak ~= {} then for k, v in pairs(snak) do if (v[1].datatype == "external-id") then local furl = mw.wikibase.getBestStatements( k, "P1630" ) if 0 ~= #furl then furl = furl[1]["mainsnak"]["datavalue"]["value"] citeq_args.url = mw.message.newRawMessage(furl, {v[1]["datavalue"]["value"]}):plain() snak[k] = nil break; end end end if citeq_args.url == nil and pqid and qid then local refproperty = mw.wikibase.getBestStatements(qid , "P1687" ) if 0 ~= #refproperty then -- خطأ لوا في وحدة:Cite_Q على السطر 1124: attempt to index field 'datavalue' (a nil value). if refproperty[1]["mainsnak"] and refproperty[1]["mainsnak"]["datavalue"] and refproperty[1]["mainsnak"]["datavalue"]["value"] then refproperty=refproperty[1]["mainsnak"]["datavalue"]["value"]["id"] local furl = mw.wikibase.getBestStatements( refproperty, "P1630" ) if 0 ~= #furl then furl = furl[1]["mainsnak"]["datavalue"]["value"] local refval = mw.wikibase.getBestStatements( pqid, refproperty ) refval = (0 ~= #refval) and refval[1]["mainsnak"]["datavalue"]["value"] if refval then citeq_args.url = mw.message.newRawMessage(furl, {refval}):plain() end end end end end end if not citeq_args.url then local S953 = Q:getStatements("P953"):getBestOne() local S953_val = S953:getRawValue() citeq_args.url = S953_val and (S953_val ~= "novalue" and S953_val ~= "somevalue") and S953_val if citeq_args.url then if mw.ustring.match(citeq_args.url, "archive.org/details/") and citeq_args.page then page_offset = tonumber(S953:getRawQual('P8330')[1]) or 0 if not citeq_args.volume or (citeq_args.volume and citeq_args.volume == S953:getRawQual('P478')[1]) then citeq_args.url = mw.ustring.gsub(citeq_args.url, "/?$", "") .. "/page/n" .. (tonumber(citeq_args.page) + page_offset - 1) .. "/mode/1up" end end end end if not citeq_args.url then for i, pr in ipairs( {"P856", "P2699"} ) do url = Q:getValue(pr, { maxvals = 1, qual="P1065" } ) if url then citeq_args.url = mw.text.split( url, " (", true )[1] local arcurl = mw.ustring.match( url, " %((.*)%)" ) -- when there is an archive url, <url> holds: url<space>(archive url); here extract the archive url if present if arcurl then local arcy, arcm, arcd = arcurl:match("(20%d%d)%p?(%d%d)%p?(%d%d)") if arcy and arcm and arcd then citeq_args["archive-url"] = arcurl citeq_args["archive-date"] = arcy .. '-' .. arcm .. '-' .. arcd end end break; end end end if not titleforced then -- Handle subtitle. if citeq_args.title then local subtitle = Q:getValue('P1680'); if subtitle then citeq_args.title = citeq_args.title .. ": " .. subtitle end end local htmltitle = Q:getValue("P1476", {qual = "P6833", maxvals = 1, qualsonly = true} ) if htmltitle then citeq_args.title = htmltitle:gsub("</?i>", "''") else local title_display = citeq_args.title or (langcodes[1] and mw.wikibase.getLabelByLang(qid, langcodes[1])) or mw.wikibase.getLabel(qid) if title_display and snak and snak.P1810 then title_display=title_display .. " | " .. snak.P1810[1].datavalue.value snak.P1810 = nil end title_display = title_display or ("No label or title -- debug: " .. qid) if citeq_args.url then citeq_args.title = wrap_nowiki(title_display) else local slink = mw.wikibase.getSitelink(qid, cfg.config_t.linksproject) local slink_flag = false local wrap_title = '' local wslink = false if not slink then -- See if we have wikisource if not citeq_args.url then local wikisource_sitelink = mw.wikibase.getSitelink(qid, cfg.i18n_t.wikisource) or nil if wikisource_sitelink then slink = ':s:'..wikisource_sitelink wslink = true end end end if citeq_args.title then if slink then wrap_title = wrap_nowiki(citeq_args.title) slink_flag = true else citeq_args.title = wrap_nowiki(citeq_args.title) end else if slink and not wslink then if slink:lower() == title_display:lower() then citeq_args.title = '[[' .. slink .. ']]' else wrap_title = wrap_nowiki(slink:gsub("%s%(.+%)$", ""):gsub(",.+$", "")) slink_flag = true end elseif wslink then wrap_title = wrap_nowiki(title_display) slink_flag = true else citeq_args.title = wrap_nowiki(title_display) end end if slink_flag then if slink == wrap_title and not wslink then -- direct link citeq_args.title = '[[' .. slink .. ']]' else -- piped link citeq_args.title = '[[' .. slink .. '|' .. wrap_title .. ']]' end end end end end -- replace no-break space by space, User:Mr. Ibrahem if citeq_args.title then citeq_args.title = mw.ustring.gsub( citeq_args.title, "\194\160", " " ) end if is_set (qid) then if not is_set (citeq_args.author) and not is_set (citeq_args.author1) and not is_set (citeq_args.subject) and not is_set (citeq_args.subject1) and not is_set (citeq_args.host) and not is_set (citeq_args.host1) and not is_set (citeq_args.last) and not is_set (citeq_args.last1) and not is_set (citeq_args.surname) and not is_set (citeq_args.surname1) and not is_set (citeq_args['author-last']) and not is_set (citeq_args['author-last1']) and not is_set (citeq_args['author1-last']) and not is_set (citeq_args['author-surname']) and not is_set (citeq_args['author-surname1']) and not is_set (citeq_args['author1-surname1']) then -- if neither are set, try to get authors from Wikidata get_name_list ('author', citeq_args, Q, wdl, labellang) -- modify citeq_args table with authors from Wikidata end if not is_set (citeq_args.editor) and not is_set (citeq_args.editor1) and not is_set (citeq_args['editor-last']) and not is_set (citeq_args['editor-last1']) and not is_set (citeq_args['editor1-last']) and not is_set (citeq_args['editor-surname']) and not is_set (citeq_args['editor-surname1']) and not is_set (citeq_args['editor1-surname']) then -- if neither are set, try to get editors from Wikidata get_name_list ('editor', citeq_args, Q, wdl, labellang) -- modify citeq_args table with editors from Wikidata end if not is_set (citeq_args.translator) and not is_set (citeq_args.translator1) and not is_set (citeq_args['translator-last']) and not is_set (citeq_args['translator-last1']) and not is_set (citeq_args['translator1-last']) and not is_set (citeq_args['translator-surname']) and not is_set (citeq_args['translator-surname1']) and not is_set (citeq_args['translator1-surname']) then -- if neither are set, try to get translators from Wikidata get_name_list ('translator', citeq_args, Q, wdl, labellang) -- modify citeq_args table with translators from Wikidata end end for k, v in pairs(citeq_args) do if in_array (v, {'(())', 'unset', 'ignore'}) or 'string' ~= type(k) then -- empty accept-as-is-written (()) markup to indicate an empty/unused parameter value, other ((...)) markups are deliberately passed down to {{citation}} citeq_args[k] = nil elseif in_array (v, {'((unset))', '((ignore))'}) then -- strip off markup for free-text values clashing with local keywords citeq_args[k] = 'unset' end end local author_count = 0 for k, v in pairs(citeq_args) do if k:find("^author%d+$") then author_count = author_count + 1 end end if author_count > 8 then -- convention in astronomy journals, optional mode for this? if 'all' == citeq_args['display-authors'] then citeq_args['display-authors'] = nil; -- unset because no longer needed else citeq_args['display-authors'] = citeq_args['display-authors'] or 3 -- limit to three displayed names end end local editor_count = 0 for k, v in pairs(citeq_args) do if k:find("^editor%d+$") then editor_count = editor_count + 1 end end if editor_count > 8 then -- convention in astronomy journals, optional mode for this? if 'all' == citeq_args['display-editors'] then citeq_args['display-editors'] = nil; -- unset because no longer needed else citeq_args['display-editors'] = citeq_args['display-editors'] or 3 -- limit to three displayed names end end -- change edition to ordinal if it's set and numeric if (rtl == false) then citeq_args.edition = citeq_args.edition and makeOrdinal(citeq_args.edition) end -- code to make a guess what template to use from the supplied parameters -- (first draft for proof-of-concept) if citeq_args.journal then template = template or "بدورية محكمة" elseif citeq_args.isbn then template = template or "بكتاب" citeq_args.asin = nil -- suppress ASIN if ISBN exists elseif citeq_args.website then template = template or "بويب" end -- template is CS1 designator: journal, web, news, etc. if template then -- citeq_args.mode = citeq_args.mode or "cs1" -- a cs1 template already knows that it is cs1 so this line is superfluous local citeclasses = {["بدورية محكمة"] = 'journal', ["بكتاب"] = "book", ["بويب"] = "web" } cite_class = citeclasses[template] template = "استشهاد " .. template else -- citeq_args.mode = citeq_args.mode or "cs2" -- a cs2 template already knows that it is cs2 so this line is superfluous template = "استشهاد" end -- |id= could hold more than one identifier pulled from Wikidata not supported by {{citation}}, right now only add our qid to the list local list_sep = '. ' if citeq_args.mode ~= 'cs1' then list_sep = ', ' end local id = cfg.i18n_t.wdq .. ':[[:d:' .. qid .. '|' .. qid .. ']]' local old_id = citeq_args.id if wdl then -- show WD logo id = id .. '[[ملف:Wikidata-logo.svg|16px|alt=|link=]]' -- possibly replace by WD edit icon? end if is_set (old_id) then citeq_args.id = old_id .. list_sep .. id -- append to user-specified contents else citeq_args.id = id end -- clean up any blank parameters for k, v in pairs(citeq_args) do if v == "" then citeq_args[k] = nil end end -- use real param names for CS1 messages for k,v in pairs(origin_args) do if citeq_args[k] and citeq_args[k] == in_citeq_args[v] then citeq_args[v] = citeq_args[k] citeq_args[k] = nil end end mw.logObject(citeq_args) -- if |expand=<anything>, write a nowiki'd version to see what the {{citation}} template call looks like if expand then local expand_args = { "{{" .. template .. "\n" } -- init with citation template if expand == "self" then citeq_args.id = old_id -- restore original |id= parameter expand_args = { cfg.i18n_t.cite_q .. qid } -- expand to itself end -- make a sortable table and sort it by param name local sorttable = {} for param, val in pairs (citeq_args) do table.insert(sorttable, {param, val}) end table.sort(sorttable, comp_key) -- add contents to expand_args for idx, val in ipairs(sorttable) do table.insert(expand_args, val[1] .. '=' .. val[2] .. "\n") end -- make the nowiki'd string and done return frame:preprocess (table.concat ({'<syntaxhighlight lang="wikitext" inline="1">', table.concat (expand_args, ' |') .. '}}', '</syntaxhighlight>'})); end local erratumid = Q:getPropertyIDs( "P2507", { maxvals = 1 } ) if erratumid then erratumid = " [[d:" .. erratumid .. "|" .. cfg.i18n_t.erratum .. "]]" .. cfg.i18n_t.trackingcats.erratum else erratumid = "" end local opt_cat = '' if Q:getValue( "P5824" ) then opt_cat = cfg.i18n_t.trackingcats.retracted end if Q:getValue( "P1366" ) then opt_cat = opt_cat .. cfg.i18n_t.trackingcats.replaced end if not citeq_args.title then -- emit category link if missing title opt_cat = opt_cat .. cfg.i18n_t.trackingcats['no-label-or-title']; end if citeq_args.wikidatacite then return frame:expandTemplate{title = template, args = citeq_args} .. erratumid .. opt_cat -- render the template else local CS = require("Module:Citation/CS1" .. sandbox) return CS._citation(frame , citeq_args, {['CitationClass'] = cite_class}) .. erratumid .. opt_cat end end --[[-------------------------< C I T E W I K I D A T A >------------------------------------------------------------------ format wikidata reference --]] local function _cite_wikidata (ref, pqid, expand) -- early exit if not ref then return nil end local snak = ref.snaks -- مراجع غير مقبولة if snak.P143 or snak.P3452 then return nil end local hash = ref.hash if hash and hash ~= "" and ref_cash[hash] then return ref_cash[hash] end local citeq_args = {} local frame = mw.getCurrentFrame() -- مذكور في if snak.P248 then for _, prop in pairs(snak.P248) do if prop.snaktype == "value" then citeq_args.qid = "Q" .. prop.datavalue.value["numeric-id"] end end snak.P248 = nil; end if citeq_args.qid and is_rejected(citeq_args.qid) == true then return nil end local reference citeq_args.snak = snak citeq_args.pqid = pqid citeq_args.wikidatacite = 1 citeq_args.expand = expand if citeq_args.qid then reference = _cite_q(citeq_args) else local has_properties = false for k, _ in pairs(cfg.used_properties_t) do if snak[k] then has_properties = true; break; end end reference = (has_properties and _cite_web(citeq_args) or nil) end if reference and reference ~= "" then reference = frame:extensionTag("ref", reference, {name = 'wikidata-' .. hash}) end if hash and hash ~= "" then ref_cash[hash] = reference end return reference end local function cite_q (frame) local args = {} for k, v in pairs(frame:getParent().args) do if v ~= "" then args[k] = v end end for k, v in pairs(frame.args) do if v ~= "" then args[k] = v end end args.qid = args.qid or args[1] or "" if args.qid == "" then return nil end args[1] = nil local citesep = (args.citesep or "") if citesep == "" then citesep = ", " end citesep = citesep:gsub('"', '') -- strip double quotes after setting default to allow |citesep="" as a blank separator args.citesep = nil local tag = args.tag or "" if tag == "" then tag = nil end args.tag = nil local list = args.list or "" if list == "" then list = nil end args.list = nil args.language = args.language or args.lang args.lang = nil local cites = {} for q in args.qid:gmatch("Q%d+") do -- make a new copy of the arguments local newargs = {} for k, v in pairs(args) do if k ~= "qid" then newargs[k] = v end end newargs.qid = q if tag == "ref" then cites[#cites + 1] = frame:callParserFunction{ name = "#tag:ref", args = { _cite_q(newargs), name = q } } -- expand like this: args = { _cite_q(newargs), name = 'foo', group = 'bar' } else cites[#cites + 1] = _cite_q(newargs) end end if list then return frame:expandTemplate{ title = list, args = cites } else return table.concat(cites, citesep) end end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { makeOrdinal = makeOrdinal, getLangOfProp = getLangOfProp, -- lang_code = lang_code, _cite_wikidata = _cite_wikidata, _cite_q = _cite_q, cite_q = cite_q } 60014y7s89rjb8l35dmqexl185nlljr أَخَامَ 0 232334 1097366 1092772 2026-07-23T23:49:43Z ForzaGreen 28665 نقل ForzaGreen صفحة [[أَخْيَمَ]] إلى [[أَخَامَ]]: تصحيح صيغة أفعل من الأجوف اليائي 1092772 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535234}} === المعاني === '''أَخْيَمَ''' {{أفعل}}. # (أَخْيَمَ) الْخَيْمَة: [[أَخَامَ]]ها.<ref>{{استشهاد بويكي بيانات|Q110402829|ج1=|ص267=}}</ref> === النطق === * {{أصد-عر|أَخْيَمَ}} {{-}} === التصريفات === {{تصريف|جذر=خيم|وزن=أفعل}} === المراجع === {{مراجع}} fscexi3gjcjz18y0j69nln0ik23h3f2 1097368 1097366 2026-07-23T23:49:53Z ForzaGreen 28665 تصحيح صيغة أفعل من الأجوف اليائي 1097368 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535234}} === المعاني === '''أَخَامَ''' {{أفعل}}. # (أَخَامَ) الْخَيْمَة: [[أَخَامَ]]ها.<ref>{{استشهاد بويكي بيانات|Q110402829|ج1=|ص267=}}</ref> === النطق === * {{أصد-عر|أَخَامَ}} {{-}} === التصريفات === {{تصريف|جذر=خيم|وزن=أفعل}} === المراجع === {{مراجع}} bnevgemuzp0pdi3xhqo141e6lj2qfm7 أَتْهَمَ 0 232355 1097386 1092741 2026-07-24T09:20:25Z إسلام 12622 1097386 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1533485}} === المعاني === '''أَتْهَمَ''' {{أفعل}}. # (أَتْهَمَ): أَتَى تهَامَة.<ref name=":0">{{استشهاد بويكي بيانات|Q110402829|ج=1|ص=90}}</ref> # (أَتْهَمَ) البلدَ: استوخمه واستخبث رِيحَه.<ref name=":0" /> #: '''أَتْهَمَ''' {{أفعل}}. # #: === النطق === * {{أصد-عر|أَتْهَمَ}} {{-}} === التصريفات === {{تصريف|جذر=تهم|وزن=أفعل}} === المراجع === {{مراجع}} im6p76kxbetuhctggvabvmjvv269lvw وحدة:WdItem/ملعب 828 240414 1097362 1097321 2026-07-23T21:55:50Z حبيشان 31560 1097362 Scribunto text/plain -- Module: WdItem -- Object-oriented Wikidata access module for Lua -- Refactored from WikidataIB for direct Lua usage require("strict") local p = {} -- i18n configuration local i18n = { ["errors"] = { ["property-not-found"] = "الخاصية غير موجودة.", ["entity-not-found"] = "الكيان على ويكي بيانات غير موجود.", ["unknown-claim-type"] = "نوع الادعاء غير معروف.", ["local-article-not-found"] = "المعرف متاح على ويكي بيانات، ولكن المقال غير متاح على ويكيبيديا", }, ["months"] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }, ["Unknown"] = "Unknown", ["NaN"] = "Not a number", ["missinginfocat"] = "[[تصنيف:Articles with missing Wikidata information]]", ["list separator"] = ", ", ["list separator-ar"] = "، ", } -- Date precision constants local dp = { [6] = "millennium", [7] = "century", [8] = "decade", [9] = "year", [10] = "month", [11] = "day", } local options_aliases = { ["osd"] = "onlysourced", ["wdlinks"] = "wdl", ["uabbr"] = "unitabbr", ["qo"] = "qualsonly", ["lp"] = "linkprefix", ["lprefix"] = "linkprefix", ["qlp"] = "qlinkprefix", ["sn"] = "shortname", ["uselabel"] = "uselbl", ["plaindate"] = "pd", ["qualifierdateformat"] = "qdf", ["df"] = "qdf", ["qshortname"] = "qsn" } setmetatable(options_aliases, { __index = function(t, k) return k end }) ------------------------------------------------------------------------------- -- Internal helper functions ------------------------------------------------------------------------------- local function findLang(langcode) local langobj langcode = mw.text.trim(langcode or "") if mw.language.isKnownLanguageTag(langcode) then langobj = mw.language.new(langcode) else langcode = mw.getCurrentFrame():callParserFunction('int', {'lang'}) if mw.language.isKnownLanguageTag(langcode) then langobj = mw.language.new(langcode) else langobj = mw.language.getContentLanguage() end end return langobj end local function parseParam(param, default) if param == nil then return default end return param end local function setRanks(rank) rank = (rank or ""):lower() local ranks = {} for w in string.gmatch(rank, "%a+") do if w == "best" or w == "preferred" or w == "normal" or w == "deprecated" then ranks[w] = true end end if ranks.best or not next(ranks) then ranks.preferred = true ranks.normal = true ranks.deprecated = false end return ranks end local function labelOrId(id, lang_t) local langs local label if type(langs) ~= table then langs = { (lang_t == "default") and findLang().code or lang_t, "ar", "en", "fr", "mul" } end mw.logObject(langs) for _,lang in ipairs(langs) do label = mw.wikibase.getLabelByLang(id, lang) if label ~= "" then break; end end if label then return mw.text.nowiki(label), true else return id, false end end local function roundto(x, sf) if x == 0 then return 0 end local s = 1 if x < 0 then x = -x s = -1 end if sf < 1 then sf = 1 end local p = 10 ^ (math.floor(math.log10(x)) - sf + 1) x = math.floor(x / p + 0.5) * p * s if x == math.floor(x) then x = math.floor(x) end return x end local function decimalPrecision(x, p) local s = 1 if x < 0 then x = -x s = -1 end if not tonumber(p) then p = 1e-4 elseif p > 1 then p = 1 elseif p < 1e-6 then p = 1e-6 else p = 10 ^ math.floor(math.log10(p)) end x = math.floor(x / p + 0.5) * p * s if x == math.floor(x) then x = math.floor(x) end if math.abs(x) < 1e-4 then x = string.format("%f", x) end return x end local function decimalToDMS(x, p) if not tonumber(p) then p = 1e-4 end local d = math.floor(x) local ms = (x - d) * 60 if p > 0.5 then if ms > 30 then d = d + 1 end ms = 0 end local m = math.floor(ms) local s = (ms - m) * 60 if p > 0.008 then if s > 30 then m = m +1 end s = 0 elseif p > 0.00014 then s = math.floor(s + 0.5) elseif p > 0.000014 then s = math.floor(10 * s + 0.5) / 10 elseif p > 0.0000014 then s = math.floor(100 * s + 0.5) / 100 else s = math.floor(1000 * s + 0.5) / 1000 end return d, m, s end local function rawValue(dataValue) if dataValue.type == "string" then return dataValue.value elseif dataValue.type == "wikibase-entityid" then return dataValue.value and dataValue.value.id elseif dataValue.type == "monolingualtext" then return dataValue.value.text elseif dataValue.type == "quantity" then return tonumber(dataValue.value.amount) elseif dataValue.type == 'time' then return dataValue.value.time elseif dataValue.type == "globecoordinate" then return dataValue.value.latitude .. '/' .. dataValue.value.longitude end end local function compareValue(dataValue, strValue) return rawValue(dataValue) == strValue end local function dateFormat(timestamp, dprec, df, bcf, pd, qualifiers, lang, adj, model) df = (df or ""):lower() if df == "ymd" then if timestamp:sub(1,1) == "+" then return timestamp:sub(2,11) else local yr = tonumber(timestamp:sub(2,5)) - 1 yr = ("000" .. yr):sub(-4) if yr ~= "0000" then yr = "-" .. yr end return yr .. timestamp:sub(6,11) end end timestamp = timestamp:gsub("%-00%-00T", "-01-01T") dprec = dprec or 11 if df == "y" and dprec > 9 then dprec = 9 end dprec = dprec>11 and 11 or dprec dprec = dprec<6 and 6 or dprec bcf = (bcf or ""):upper() pd = (pd or ""):sub(1,1):lower() if pd == "" or pd == "n" or pd == "f" or pd == "0" then pd = false end lang = lang or findLang().code adj = adj or "" local bc = timestamp:sub(1, 1)=="-" and "BC" or "" local year, month, day = timestamp:match("[+-](%d*)-(%d*)-(%d*)T") local iso = tonumber(year) if dprec == 6 then iso = math.floor( (iso - 1) / 1000 ) + 1 end if dprec == 7 then iso = math.floor( (iso - 1) / 100 ) + 1 end if dprec == 8 then iso = math.floor( iso / 10 ) .. "0" end if dprec == 10 then iso = year .. "-" .. month end if dprec == 11 then iso = year .. "-" .. month .. "-" .. day end local sc = not pd and qualifiers and qualifiers.P1480 if sc then for k1, v1 in pairs(sc) do if v1.datavalue and v1.datavalue.value.id == "Q5727902" then adj = "circa" break end end end local calendarmodel = "" if tonumber(year) > 1582 and dprec > 8 and not pd and model == "http://www.wikidata.org/entity/Q1985786" then calendarmodel = "julian" end -- Simplified date formatting (complex date module not available) local fdate = tostring(iso) if bc ~= "" then fdate = fdate .. " " .. (bcf == "BC" and "BC" or "BCE") end if adj == "circa" then fdate = "c. " .. fdate end return fdate end local function hijriFormat(qualifiers, dateformat, lang) if not (qualifiers and qualifiers.P4241) then return; end local year, month, day local val local qhmonths = {["Q1952053"]=1,["Q489557"]=2, ["Q474167"] = 3, ["Q273815"] = 4, ["Q852002"] = 5, ["Q822218"] = 6, ["Q194210"] = 7, ["Q220914"] = 8, ["Q8867089"]=9, ["Q685440"]=10,["Q150853"]=11,["Q186022"]=12 } local hmonths = {"محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"} local hmonths_inv = {["محرم"] = 1, ["صفر"]=2, ["ربيع الأول"]=3, ["ربيع الآخر"]=4, ["جمادى الأولى"]=5, ["جمادى الآخرة"]=6, ["رجب"]=7, ["شعبان"]=8, ["رمضان"]=9, ["شوال"]=10, ["ذو القعدة"]=11, ["ذو الحجة"]=12} for _, item in ipairs(qualifiers.P4241) do local timeQ = item.datavalue and item.datavalue.value and item.datavalue.value.id local hastime = false if timeQ then local timeQt = mw.wikibase.getBestStatements(timeQ, "P361") for _,timeQsnak in pairs(timeQt) do local timeType = timeQsnak.mainsnak and timeQsnak.mainsnak.datavalue and timeQsnak.mainsnak.datavalue.value and timeQsnak.mainsnak.datavalue.value.id if timeType == "Q28892" then local timeLableAr = mw.wikibase.getLabelByLang(timeQ, "ar") if timeLableAr then year = mw.ustring.match(timeLableAr, "^(%d+) *هـ$") end if not year then local timeLableEn = mw.wikibase.getLabelByLang(timeQ, "en") if timeLableEn then year = mw.ustring.match(timeLableAr, "^(%d+) *AH$") end end hastime=true elseif qhmonths[timeType] then month = qhmonths[timeType] if month>0 and month<13 then month = hmonths[month] end local timeLableAr = mw.wikibase.getLabelByLang(timeQ, "ar") if timeLableAr then day = mw.ustring.match(timeLableAr, "^(%d+) *%a+$") end if not day then local timeLableEn = mw.wikibase.getLabelByLang(timeQ, "en") if timeLableEn then day = mw.ustring.match(timeLableAr, "^(%d+) *%a+$") end end hastime=true end end if not hastime then timeQt = mw.wikibase.getBestStatements(timeQ, "P31") if "Q125390868" == (timeQt[1].mainsnak and timeQt[1].mainsnak.datavalue and timeQt[1].mainsnak.datavalue.value and timeQt[1].mainsnak.datavalue.value.id ) then val = mw.wikibase.getLabelByLang(timeQ, "ar") month, year = mw.ustring.match(val, "^(%a[%a ]+%a) *(%d+) *هـ?$") end end end end if year then if dateformat == "y" or not month then return year; elseif day and month then return day .. ' ' .. month .. ' ' .. year; elseif month then return month .. ' ' .. year; end end return nil; end local function sourced(claim) if claim.references then for kr, vr in pairs(claim.references) do local ref = mw.wikibase.renderSnaks(vr.snaks) if not ref:find("Wiki") then return true end end end end local function linkedItem(id, args) local lprefix = (args.linkprefix or ""):gsub('"', '') local lpostfix = (args.lpostfix or ""):gsub('"', '') local prefix = (args.prefix or ""):gsub('"', '') local postfix = (args.postfix or ""):gsub('"', '') local wikilinkprefix = (args.wikilinkprefix or ""):gsub('"', '') local dtxt = args.dtxt local uselbl = parseParam( args.uselbl, true) local langs = (args.langs and #args.langs>0) and args.langs or args.lang local disp local sitelink = mw.wikibase.getSitelink(id, args.linksproject) local label, islabel if dtxt then label, islabel = dtxt, true else label, islabel = labelOrId(id, langs) end if sitelink then if not uselbl then local pos = sitelink:find(":") or 0 local slink = sitelink if pos > 0 then local pfx = sitelink:sub(1,pos-1) if mw.site.namespaces[pfx] then slink = sitelink:sub(pos+1) end end slink = slink:gsub("%s%(.+%)$", ""):gsub(",.+$", "") if label:find("^%u") then label = slink:gsub("^(%l)", string.upper) else label = slink:gsub("^(%u)", string.lower) end end disp = "[[" .. wikilinkprefix .. sitelink .. lpostfix .. "|" .. prefix .. label .. postfix .. "]]" elseif islabel then disp = prefix .. label .. postfix else disp = prefix .. label .. postfix .. i18n.missinginfocat end return disp end local function rendersnak(propval, args, linked, lpre, lpost, pre, post, uabbr, filter) lpre = lpre or "" lpost = lpost or "" pre = pre or "" post = post or "" args.lang = args.lang or findLang().code; local langs = (args.langs and #args.langs>0) and args.langs or args.lang local snak = propval.mainsnak or propval local dtype = snak.datatype local dv = snak.datavalue dv = dv and dv.value local val, mlt local namedas; namedas = propval.qualifiers and propval.qualifiers.P1932 and propval.qualifiers.P1932[1].datavalue and propval.qualifiers.P1932[1].datavalue.value or nil args.dtxt = namedas if propval.rank and not args.reqranks[propval.rank] then return nil elseif snak.snaktype == "somevalue" then val = namedas or i18n["Unknown"] elseif snak.snaktype == "novalue" then -- return nothing elseif dtype == "wikibase-item" then local qnumber = dv.id if linked then val = linkedItem(qnumber, args) else if namedas then val = pre .. namedas .. post else local label, islabel = labelOrId(qnumber, langs) val = pre .. label .. post end end elseif dtype == "time" then if args.hijri then val = hijriFormat(propval.qualifiers, args.df, args.lang) else val = dateFormat(dv.time, dv.precision, args.df, args.bc, args.pd, propval.qualifiers, args.lang, "", dv.calendarmodel) end elseif dtype == "commonsMedia" or dtype == "external-id" or dtype == "string" or dtype == "url" then if (lpre == "" or lpre == ":") and lpost == "" then val = pre .. dv .. post elseif dtype == "external-id" then val = "[" .. lpre .. dv .. lpost .. " " .. pre .. dv .. post .. "]" else val = "[[" .. lpre .. dv .. lpost .. "|" .. pre .. dv .. post .. "]]" end elseif dtype == "quantity" then local amount = tonumber(dv.amount) or i18n["NaN"] local unit = "" local unitqid = string.match(dv.unit, "(Q%d+)") if filter and unitqid ~= filter then return nil end if unitqid then local uname = labelOrId(unitqid, langs) or "" if uname ~= "" then unit = " " .. uname end end val = tostring(amount) .. unit elseif dtype == "globe-coordinate" then local lat, long, prec = dv.latitude, dv.longitude, dv.precision local show = (args.show or ""):lower() if show == "lat" then val = decimalPrecision(lat, prec) elseif show == "lon" then val = decimalPrecision(long, prec) elseif show == "longlat" then val = decimalPrecision(long, prec) .. ", " .. decimalPrecision(lat, prec) else local ns = lat < 0 and "S" or "N" local ew = long < 0 and "W" or "E" if lat < 0 then lat = -lat end if long < 0 then long = -long end val = decimalPrecision(lat, prec) .. "°" .. ns .. " " .. decimalPrecision(long, prec) .. "°" .. ew end elseif dtype == "monolingualtext" then val = pre .. dv.text .. post mlt = dv.language else val = "unknown data type: " .. dtype end return val, mlt end local function assembleoutput(out, args, entityID, propertyID) local sorted = parseParam(args.sorted, false) local noicon = parseParam(args.noicon, false) local list = args.list or "" local separator = args.sep or "" separator = string.gsub(separator, '"', '') if separator == "" then local rtl_lang = {ar = true, fa = true, ur = true, ku = true, he = true} separator = rtl_lang[args.lang] and i18n["list separator-ar"] or i18n["list separator"] end local strout if #out > 0 then if sorted then table.sort(out) end if list == "" then strout = table.concat(out, separator) elseif list:lower() == "prose" then strout = mw.text.listToText(out) else strout = mw.getCurrentFrame():expandTemplate{title = list, args = out} end else strout = nil end return strout end local function propertyvalueandquals(objproperty, args, qualID) -- needs this style of declaration because it's re-entrant -- onlysourced is a boolean passed to return only values sourced to other than Wikipedia -- if nothing or an empty string is passed set it true local onlysrc = parseParam(args.onlysourced, false) -- linked is a a boolean that enables the link to a local page via sitelink -- if nothing or an empty string is passed set it true local linked = parseParam(args.linked, true) -- prefix is a string that may be nil, empty (""), or a string of characters -- this is prefixed to each value -- useful when when multiple values are returned -- any double-quotes " are stripped out, so that spaces may be passed local prefix = (args.prefix or ""):gsub('"', '') -- postfix is a string that may be nil, empty (""), or a string of characters -- this is postfixed to each value -- useful when when multiple values are returned -- any double-quotes " are stripped out, so that spaces may be passed local postfix = (args.postfix or ""):gsub('"', '') -- linkprefix is a string that may be nil, empty (""), or a string of characters -- this creates a link and is then prefixed to each value -- useful when when multiple values are returned and indirect links are needed -- any double-quotes " are stripped out, so that spaces may be passed local lprefix = (args.linkprefix or ""):gsub('"', '') -- linkpostfix is a string that may be nil, empty (""), or a string of characters -- this is postfixed to each value when linking is enabled with lprefix -- useful when when multiple values are returned -- any double-quotes " are stripped out, so that spaces may be passed local lpostfix = (args.linkpostfix or ""):gsub('"', '') -- wdlinks is a boolean passed to enable links to Wikidata when no article exists -- if nothing or an empty string is passed set it false local wdl = parseParam(args.wdl, false) -- unitabbr is a boolean passed to enable unit abbreviations for common units -- if nothing or an empty string is passed set it false local uabbr = parseParam(args.unitabbr, false) -- qualsonly is a boolean passed to return just the qualifiers -- if nothing or an empty string is passed set it false local qualsonly = parseParam(args.qualsonly, false) -- maxvals is a string that may be nil, empty (""), or a number -- this determines how many items may be returned when multiple values are available -- setting it = 1 is useful where the returned string is used within another call, e.g. image local maxvals = tonumber(args.maxvals) or 0 -- pd boolean -- to disable/enable "sourcing cirumstances" or use adjectival form for the plain date local pd = args.pd or false args.pd = pd -- allow qualifiers to have a different date format; default to year unless qualsonly is set args.qdf = args.qdf or (not qualsonly and "y") local lang = args.lang or (args.langs and args.langs[1]) or findLang().code -- qualID is a string list of wanted qualifiers or "ALL" qualID = qualID or "" -- capitalise list of wanted qualifiers and substitute "DATES" qualID = qualID:upper():gsub("DATES", "P580, P582") local allflag = (qualID == "ALL") -- create table of wanted qualifiers as key local qwanted = {} -- create sequence of wanted qualifiers local qorder = {} for q in mw.text.gsplit(qualID, "%p") do -- split at punctuation and iterate local qtrim = mw.text.trim(q) if qtrim ~= "" then qwanted[mw.text.trim(q)] = true qorder[#qorder+1] = qtrim end end -- qsep is the output separator for rendering qualifier list local qsep = (args.qsep or ""):gsub('"', '') -- qargs are the arguments to supply to assembleoutput() local qargs = { ["osd"] = "false", ["linked"] = tostring(linked), ["prefix"] = args.qprefix, ["postfix"] = args.qpostfix, ["linkprefix"] = args.qlinkprefix, ["linkpostfix"] = args.qlinkpostfix, ["wdl"] = "false", ["unitabbr"] = tostring(uabbr), ["maxvals"] = 0, ["sorted"] = tostring(args.qsorted), ["noicon"] = "true", ["list"] = args.qlist, ["sep"] = qsep, -- ["langobj"] = args.langobj, ["lang"] = lang, langs = args.langs, ["df"] = args.qdf, ["sn"] = parseParam(args.qsn, false), } -- all proper values of a Wikidata property will be the same type as the first -- qualifiers don't have a mainsnak, properties do --#Modified line local datatype = objproperty[1].datatype or (objproperty[1].mainsnak and objproperty[1].mainsnak.datatype) -- out[] holds the a list of returned values for this property -- mlt[] holds the language code if the datatype is monolingual text local out = {} local mlt = {} for k, v in ipairs(objproperty) do local hasvalue = true if (onlysrc and not sourced(v)) then -- no value: it isn't sourced when onlysourced=true hasvalue = false else local val, lcode = rendersnak(v, args, linked, lprefix, lpostfix, prefix, postfix, uabbr) if not val then hasvalue = false -- rank doesn't match elseif qualsonly and qualID then -- suppress value returned: only qualifiers are requested else out[#out+1], mlt[#out+1] = val, lcode end end -- See if qualifiers are to be returned: local snak = v.mainsnak or v if hasvalue and v.qualifiers and qualID ~= "" and snak.snaktype~="novalue" then -- collect all wanted qualifier values returned in qlist, indexed by propertyID local qlist = {} local timestart, timeend = "", "" -- loop through qualifiers for k1, v1 in pairs(v.qualifiers) do if allflag or qwanted[k1] then if k1 == "P1326" then local ts = v1[1].datavalue.value.time local dp = v1[1].datavalue.value.precision qlist[k1] = dateFormat(ts, dp, args.qdf, args.bc, pd, "", lang, "before") elseif k1 == "P1319" then local ts = v1[1].datavalue.value.time local dp = v1[1].datavalue.value.precision qlist[k1] = dateFormat(ts, dp, args.qdf, args.bc, pd, "", lang, "after") elseif k1 == "P580" then timestart = propertyvalueandquals(v1, qargs)[1] or "" -- treat only one start time as valid elseif k1 == "P582" then timeend = propertyvalueandquals(v1, qargs)[1] or "" -- treat only one end time as valid else local q = assembleoutput(propertyvalueandquals(v1, qargs), qargs) -- we already deal with circa via 'sourcing circumstances' if the datatype was time -- circa may be either linked or unlinked *** internationalise later *** if datatype ~= "time" or q ~= "circa" and not (type(q) == "string" and q:find("circa]]")) then qlist[k1] = q end end end -- of test for wanted end -- of loop through qualifiers -- set date separator local t = timestart .. timeend -- *** internationalise date separators later *** local dsep = "&ndash;" if t:find("%s") or t:find("&nbsp;") then dsep = " &ndash; " end -- set the order for the list of qualifiers returned; start time and end time go last if next(qlist) then local qlistout = {} if allflag then for k2, v2 in pairs(qlist) do qlistout[#qlistout+1] = v2 end else for i2, v2 in ipairs(qorder) do qlistout[#qlistout+1] = qlist[v2] end end if t ~= "" then qlistout[#qlistout+1] = timestart .. dsep .. timeend end local qstr = assembleoutput(qlistout, qargs) if qualsonly then out[#out+1] = qstr else out[#out] = out[#out] .. " (" .. qstr .. ")" end elseif t ~= "" then if qualsonly then if timestart == "" then out[#out+1] = timeend elseif timeend == "" then out[#out+1] = timestart else out[#out+1] = timestart .. dsep .. timeend end else out[#out] = out[#out] .. " (" .. timestart .. dsep .. timeend .. ")" end end end -- of test for qualifiers wanted if maxvals > 0 and #out >= maxvals then break end end -- of for each value loop -- we need to pick one value to return if the datatype was "monolingualtext" -- if there's only one value, use that -- otherwise look through the fallback languages for a match if datatype == "monolingualtext" and #out >1 then lang = mw.text.split( lang, '-', true )[1] local fbtbl = mw.language.getFallbacksFor( lang ) table.insert( fbtbl, 1, lang ) local bestval = "" local found = false for idx1, lang1 in ipairs(fbtbl) do for idx2, lang2 in ipairs(mlt) do if (lang1 == lang2) and not found then bestval = out[idx2] found = true break end end -- loop through values of property end -- loop through fallback languages if found then -- replace output table with a table containing the best value out = { bestval } else -- more than one value and none of them on the list of fallback languages -- sod it, just give them the first one out = { out[1] } end end return out end local function mergeOptions(defaults, overrides) overrides = overrides or {} defaults = defaults or {} local result = {} for k, v in pairs(defaults) do result[k] = v end for k, v in pairs(overrides) do result[k] = v if k == 'rank' then result.reqranks = setRanks(v) end end return result end local function filterbyqualifier(statements,qual,value) local filtered_statements = {} for _, statement in ipairs(statements) do if statement.qualifiers and statement.qualifiers[qual] then if '*' == value then table.insert(filtered_statements, statement) else for _, q in ipairs(statement.qualifiers[qual]) do if q.datavalue and (rawValue(q.datavalue) == value) then table.insert(filtered_statements, statement) break end end end end end return filtered_statements end local function orderbyrank(statements) local pref_count = 0 local sorted_statements = {} for k,v in ipairs(statements) do if v.rank == 'preferred' then pref_count = pref_count + 1 table.insert(sorted_statements, pref_count, v) else table.insert(sorted_statements, v) end end return sorted_statements end ------------------------------------------------------------------------------- -- helper class functions ------------------------------------------------------------------------------- local function class() local c = {} c.__index = c function c:new(...) local o = setmetatable({}, c) if o.init then o:init(...) end return o end return c end ------------------------------------------------------------------------------- -- Statement Class Definition ------------------------------------------------------------------------------- local WdStatement = class() function WdStatement:getValue(opts) local mergedOpts = mergeOptions(self.parent.options, opts) local statement = self._statement if not statement then return nil end local qualID = mw.text.trim(mergedOpts.qual or ""):upper() if qualID == "" then qualID = nil end local out = propertyvalueandquals({statement}, mergedOpts, qualID) return assembleoutput(out, mergedOpts, self.parent.qid, self.pid) end function WdStatement:getRawValue() if not self._statement then return nil end local datasnak = self._statement.mainsnak or self._statement if datasnak.snaktype == "value" then return rawValue(datasnak.datavalue) else return datasnak.snaktype end end function WdStatement:getRawQual(qualID) local ret = {} local s = self._statement if s.qualifiers and s.qualifiers[qualID] then for _,q in pairs(s.qualifiers[qualID]) do if q.snaktype == "value" then table.insert(ret, rawValue(q.datavalue)) else table.insert(ret, q.snaktype) end end end return ret end ------------------------------------------------------------------------------- -- Statements Class Definition ------------------------------------------------------------------------------- local WdStatements = class() function WdStatements:getStatmentsTable() return self._statements end function WdStatements:count() return #self._statements end function WdStatements:getFilters() return self.filtered_by end function WdStatements:filter(filter_t) local statements = self._statements if #statements == 0 then return self; end local ret = WdStatements:new() ret.parent = self.parent ret.filtered_by = {} for _,v in ipairs(self.filtered_by) do table.insert(ret.filtered_by, v) end local filtered_statements = {} for k,v in pairs(filter_t) do filtered_statements = filterbyqualifier(statements, k, v) table.insert(ret.filtered_by, {[k] = v}) if #filtered_statements == 0 then break; else statements = filtered_statements end end ret._statements = filtered_statements return ret end function WdStatements:getValue(opts) local mergedOpts = mergeOptions(self.parent.options, opts) local statements = self._statements if not statements or #statements == 0 then return nil end local qualID = mw.text.trim(mergedOpts.qual or ""):upper() if qualID == "" then qualID = nil end local out = propertyvalueandquals(statements, mergedOpts, qualID) return assembleoutput(out, mergedOpts, self.parent.qid, self.pid) end function WdStatements:getQual(qualID, opts) local mergedOpts = mergeOptions(self.parent.options, opts) local statements = self._statements if not statements or #statements == 0 then return nil end local out = propertyvalueandquals(statements, mergedOpts, qualID) return assembleoutput(out, mergedOpts, self.parent.qid, self.pid) end function WdStatements:getRawQual(qualID) local ret = {} for _,s in pairs(self._statements) do local qual_t = {} if s.qualifiers and s.qualifiers[qualID] then for _,q in pairs(s.qualifiers[qualID]) do if q.snaktype == "value" then table.insert(qual_t, rawValue(q.datavalue)) else table.insert(qual_t, q.snaktype) end end end table.insert(ret,qual_t) end return ret end function WdStatements:getRawValue() local ret = {} for _,v in pairs(self._statements) do local datasnak = v.mainsnak or v if datasnak.snaktype=="value" then table.insert(ret, rawValue(datasnak.datavalue)) else table.insert(ret, datasnak.snaktype) end end return ret end function WdStatements:get(index) local ret = WdStatement:new() ret.parent = self.parent ret.filtered_by = ret.filtered_by ret._statement = self._statements[index] ret.pid = ret.pid return ret end function WdStatements:iter() local i = 0 local n = self._statements and #self._statements or 0 return function() i = i + 1 if i <= n then return i, self:get(i) end end end function WdStatements:ipairs() return self:iter() end function WdStatements:getBestOne() local orderd_statements = orderbyrank(self._statements) local ret = WdStatement:new() --setmetatable({}, WdStatement) ret.parent = self.parent ret.filtered_by = ret.filtered_by ret._statement = orderd_statements[1] ret.pid = ret.pid return ret end ------------------------------------------------------------------------------- -- WdItem Class Definition ------------------------------------------------------------------------------- local WdItem = class() function WdItem:__tostring() return "WdItem: " .. (self.qid or "no QID") end function WdItem:UpdateOptions(newOpts) for k, v in pairs(newOpts or {}) do local key = options_aliases[k] self.options[key] = v -- Set default options if key == 'langs' and #v > 0 then self.options.langobj = findLang(self.options.langs[1]) self.options.lang = self.options.langobj.code if not self.options.langobj then self.options.langobj = findLang(self.options.lang) self.options.lang = self.options.langobj.code end end if key == 'rank' then self.options.reqranks = setRanks(self.options.rank) end end if not self.options.reqranks then self.options.reqranks = setRanks('preferred normal') end end function WdItem:init(qid, options,snak) if qid == "" then qid = nil; end self.qid = qid self.snak = snak self.options = options or {} self:UpdateOptions(options) return self end function WdItem:newFromSnaks(snakTable, options) local self = WdItem:new(nil, options or {}, snakTable) self:UpdateOptions(options) return self end function WdItem:setOptions(newOpts) self:UpdateOptions(newOpts) end function WdItem:getStatements(pid, opts) local mergedOpts = mergeOptions(self.options, opts or {}) local statements local ret = WdStatements:new() ret.parent = self ret.filtered_by = {} ret._statements = {} ret.pid = pid if self.snak and self.snak[pid] then statements = self.snak[pid] elseif not self.qid or not mw.wikibase then statements = {} elseif mergedOpts.reqranks and mergedOpts.reqranks.best then statements = mw.wikibase.getBestStatements(self.qid, pid) or {} else statements = mw.wikibase.getAllStatements(self.qid, pid) or {} local filtered_statements = {} if not (mergedOpts.reqranks.deprecated == true and mergedOpts.reqranks.preferred == true and mergedOpts.reqranks.normal == true) then for _,s in pairs(statements) do if mergedOpts.reqranks[s.rank] then table.insert(filtered_statements,s) end end end statements = filtered_statements end if #statements > 0 and mergedOpts.qualifiedaspossible and mergedOpts.qualifiedaspossible ~= {} then local filtered_statements = {} for q,qv in pairs(mergedOpts.qualifiedaspossible) do filtered_statements = filterbyqualifier(statements, q, qv) if #filtered_statements > 0 then table.insert(ret.filtered_by, {[q] = qv}) statements = filtered_statements end end end if #statements > 0 and mergedOpts.qualified and mergedOpts.qualified ~= {} then for q,qv in pairs(mergedOpts.qualified) do statements = filterbyqualifier(statements, q, qv) table.insert(ret.filtered_by, {[q] = qv}) if #statements == 0 then break; end end end ret._statements = statements return ret end function WdItem:getValue(pid, opts) local mergedOpts = mergeOptions(self.options, opts) local statements = self:getStatements(pid, mergedOpts):getStatmentsTable() if not statements or #statements == 0 then return nil end local qualID = mw.text.trim(mergedOpts.qual or ""):upper() if qualID == "" then qualID = nil end local out = propertyvalueandquals(statements, mergedOpts, qualID) return assembleoutput(out, mergedOpts, self.qid, pid) end function WdItem:getValueFromSnaks(pid, opts) if not self.snak or not self.snak[pid] then return nil end local mergedOpts = mergeOptions(self.options, opts) local props = self.snak[pid] local out = propertyvalueandquals(props, mergedOpts) return assembleoutput(out, mergedOpts, nil, pid) end function WdItem:getPropertyIDsTable(pid, opts) local mergedOpts = mergeOptions(self.options, opts) mergedOpts.noicon = tostring(parseParam(mergedOpts.noicon or "", true)) local statements = self:getStatements(pid, opts) if not statements or #statements == 0 then return {} end local onlysrc = parseParam(mergedOpts.onlysourced or mergedOpts.osd, true) local maxvals = tonumber(mergedOpts.maxvals) or 0 local out = {} for i, v in ipairs(statements) do local snak = v.mainsnak or v if (snak.datatype == "wikibase-item") and (v.rank and mergedOpts.reqranks[v.rank:sub(1, 1)]) and (snak.snaktype == "value") and (sourced(v) or not onlysrc) then out[#out+1] = snak.datavalue.value.id end if maxvals > 0 and #out >= maxvals then break end end return out end function WdItem:getPropertyIDs(pid, opts) local out = WdItem:getPropertyIDsTable(pid, opts) if #out == 0 then return nil end return assembleoutput(out, mergeOptions(self.options, opts), self.qid, pid) end function WdItem:getPropOfProp(prop1, prop2, opts) local mergedOpts = mergeOptions(self.options, opts) if not self.qid then return nil end local statements1 = self:getStatements(prop1, opts) if not statements1 or #statements1 == 0 then return nil end local onlysrc = parseParam(mergedOpts.onlysourced or mergedOpts.osd, true) local maxvals = tonumber(mergedOpts.maxvals) or 0 local qualID = mw.text.trim(mergedOpts.qual or ""):upper() if qualID == "" then qualID = nil end local out = {} for k, v in ipairs(statements1) do if not onlysrc or sourced(v) then local snak = v.mainsnak or v if snak.datatype == "wikibase-item" and snak.snaktype == "value" then local qid2 = snak.datavalue.value.id local item2 = WdItem.new(qid2, mergedOpts) local statements2 = item2:getStatements(prop2, opts) if statements2 and statements2[1] then local out2 = propertyvalueandquals(statements2, mergedOpts, qualID) out[#out+1] = assembleoutput(out2, mergedOpts, qid2, prop2) end end end if maxvals > 0 and #out >= maxvals then break end end return assembleoutput(out, mergedOpts, self.qid, prop1) end function WdItem:getLangOfProp(pid) if not pid then return {}; end local out = {} local props = self.snak and self.snak[pid] or (self.qid and mw.wikibase.getAllStatements(self.qid, pid)) or {} for _, v in ipairs(props) do local datasnak = v.mainsnak or v if datasnak.datatype == "monolingualtext" and datasnak.datavalue then out[#out + 1] = datasnak.datavalue.value.language end end return out end function WdItem:followQid(props, all) all = parseParam(all, false) props = (props or ""):upper() if not self.qid then return nil end if props == "" then return self.qid end local out = {} for p in mw.text.gsplit(props, "%p") do p = mw.text.trim(p) for i, v in ipairs(mw.wikibase.getBestStatements(self.qid, p)) do local linkedid = v.mainsnak.datavalue and v.mainsnak.datavalue.value and v.mainsnak.datavalue.value.id if linkedid then if all then out[#out+1] = linkedid else return WdItem.WdItem:new(linkedid) end end end end if #out > 0 then return table.concat(out, " ") else return self end end ------------------------------------------------------------------------------- -- Public API - WdItem Constructors ------------------------------------------------------------------------------- p.WdItem = WdItem function p.newItem(qid, opts, snak ) return WdItem:new(qid, opts, snak) end function p.newSnakItem(snakTable, opts) return WdItem:newFromSnaks(snakTable, opts) end return p 1dstwnxruy5x7c97wlb0nx4vp1b12ar وحدة:Cite Q/config/ملعب 828 240415 1097322 2026-07-23T13:12:36Z حبيشان 31560 إنشاء ملعب 1097322 Scribunto text/plain local config_t = { linksproject = "arwiki", wikilinkprefix = ":w:" } local aliases_t = { ['accessdate'] = {'تاريخ-الوصول','تاريخ الوصول', 'تاريخ وصول', 'access-date', 'accessdate'}, ['agency'] = {'وكالة', 'agency'}, ['archivedate'] = {'تاريخ-الأرشيف', 'تاريخ أرشيف', 'تاريخ الأرشيف', 'archive-date', 'archivedate'}, ['archive-format'] = {'صيغة-الأرشيف', 'صيغة الأرشيف', 'archive-format'}, ['archive-url'] = {'مسار-الأرشيف', 'مسار أرشيف', 'مسار الأرشيف', 'archive-url', 'archiveurl'}, ['article-number'] = {'رقم-المقالة', 'article-number'}, ['asin-tld'] = 'asin-tld', ['at'] = {'في', 'at'}, --##TOREVISE ['authors'] = {'المؤلفون', 'المؤلفين', 'authors', 'people', 'host', 'credits', 'أشخاص'}, ['book-title'] = {'عنوان الكتاب', 'book-title', 'booktitle', 'عنوان المؤتمر'}, ['cartography'] = 'cartography', ['chapter'] = {'الفصل', 'chapter', 'contribution', 'entry', 'article', 'section'}, ['chapter-format'] = {'صيغة-الفصل', 'صيغة الفصل', 'تنسيق الفصل', 'chapter-format', 'contribution-format', 'entry-format', 'article-format', 'section-format'}, ['chapter-url'] = {'مسار-الفصل', 'مسار الفصل', 'chapter-url', 'contribution-url', 'entry-url', 'article-url', 'section-url'}, -- Used by InternetArchiveBot ['chapter-url-access'] = {'chapter-url-access', 'contribution-url-access', 'entry-url-access', 'article-url-access', 'section-url-access'}, -- Used by InternetArchiveBot ['class'] = {'صنف', 'class'}, -- cite arxiv and arxiv identifier ['collaboration'] = 'collaboration', ['conference'] = {'اسم-المؤتمر', 'اسم المؤتمر', 'conference'}, ['conference-format'] = 'conference-format', ['conference-url'] = {'مسار-المؤتمر', 'مسار المؤتمر', 'conference-url'}, -- Used by InternetArchiveBot ['date'] = {'تاريخ', 'التاريخ', 'date', 'air-date', 'airdate'}, ['degree'] = {'الدرجة', 'degree'}, ['df'] = 'df', ['display-authors'] = {'إظهار-المؤلفين', 'إظهار المؤلفين', 'display-authors', 'display-subjects'}, ['display-contributors'] = 'display-contributors', ['display-editors'] = {'إظهار-المحررين', 'إظهار المحررين', 'display-editors'}, ['display-interviewers'] = 'display-interviewers', ['display-translators'] = 'display-translators', ['docket'] = 'docket', ['doi-broken-date'] = 'doi-broken-date', ['edition'] = {'طبعة', 'الإصدار', 'الاصدار', 'إصدار', 'اصدار', 'الطبعة', 'رقم الطبعة', 'edition'}, ['pmc-embargo-date'] = 'pmc-embargo-date', ['encyclopedia'] = {'موسوعة', 'encyclopedia', 'encyclopaedia', 'اسم المعجم', 'dictionary', 'اسم الموسوعة'}, -- cite encyclopedia only ['episode'] = {'الحلقة', 'episode'}, -- cite serial only TODO: make available to cite episode? ['format'] = {'صيغة', 'التنسيق', 'format', 'تنسيق', 'الصيغة'}, ['id'] = {'id', 'ID', 'المعرف'}, ['inset'] = {'inset', 'مجموعة'}, ['issue'] = {'العدد', 'issue', 'number'}, ['language'] = {'لغة', 'اللغة', 'language', 'lang'}, ['mailing-list'] = {'القائمة البريدية', 'mailing-list'}, -- cite mailing list only ['map'] = {'الخريطة', 'map'}, -- cite map only ['map-format'] = {'صيغة الخريطة', 'map-format'}, -- cite map only ['map-url'] = {'مسار الخريطة', 'map-url'}, -- cite map only -- Used by InternetArchiveBot ['map-url-access'] = 'map-url-access', -- cite map only -- Used by InternetArchiveBot ['minutes'] = {'دقيقة', 'minutes'}, ['mode'] = 'mode', ['name-list-style'] = 'name-list-style', ['network'] = {'الشبكة', 'network'}, ['newsgroup'] = {'اسم المجموعة', 'newsgroup'}, -- cite newsgroup only ['nopp'] = {'no-pp', 'nopp'}, ['no-tracking'] = {'no-tracking', 'template-doc-demo'}, ['number'] = 'number', -- this case only for cite techreport ['orig-date'] = {'orig-date', 'orig-year', 'origyear', 'سنة النشر الأصلية'}, ['others'] = {'آخرون','others', 'المحاور', 'المحاورون', 'المحقق'}, ['page'] = {'صفحة', 'p', 'الصفحة', 'page', 'الصفحة', 'رقم الصفحة', 'رقم صفحة','ص'}, -- Used by InternetArchiveBot ['pages'] = {'صفحات', 'الصفحات', 'pp', 'أرقام الصفحات', 'أرقم صفحات', 'pages'}, -- Used by InternetArchiveBot ['journal'] = { 'صحيفة', 'journal', 'دورية محكمة', 'مجلة', 'magazine', 'اسم المجلة', 'newspaper', 'جريدة', 'اسم الصحيفة', 'دورية', 'periodical', 'موقع', 'website', 'الموقع', 'عمل', 'work', 'العمل', 'من عمل', }, ['place'] = { 'مكان', 'place', 'المكان', 'مقر', 'المقر', 'location'}, ['postscript'] = 'postscript', ['publication-date'] = {'تاريخ-النشر', 'تاريخ النشر', 'publication-date'}, ['publication-place'] = {'مكان-النشر', 'مكان النشر', 'publication-place'}, ['publisher'] = {'ناشر', 'publisher', 'الناشر', 'institution', 'مصدر', 'الموزع', 'المصدر', 'المؤسسة'}, ['quote'] = {'اقتباس', 'quote', 'quotation'}, ['quote-page'] = 'quote-page', ['quote-pages'] = 'quote-pages', ['ref'] = {'مرجع', 'ref'}, ['scale'] = {'المقياس', 'scale'}, ['script-chapter'] = {'script-chapter', 'script-contribution', 'script-entry', 'script-article', 'script-section'}, ['script-encyclopedia'] = {'script-encyclopedia', 'script-encyclopaedia'}, -- cite encyclopedia only ['script-map'] = 'script-map', ['script-journal'] = {'script-journal', 'script-magazine', 'script-newspaper', 'script-periodical', 'script-website', 'script-work'}, ['script-quote'] = 'script-quote', ['script-title'] = 'script-title', -- Used by InternetArchiveBot ['season'] = {'الموسم', 'season'}, ['sections'] = {'الأقسام', 'sections'}, -- cite map only ['series'] = {'سلسلة', 'series', 'version'}, ['series-link'] = {'وصلة-سلسلة', 'وصلة سلسلة', 'series-link', 'مسار المسلسل'}, ['series-number'] = {'رقم-سلسلة', 'رقم سلسلة', 'series-number', 'series-no'}, ['sheet'] = {'ورقة', 'sheet'}, -- cite map only ['sheets'] = {'أوراق', 'sheets'}, -- cite map only ['station'] = {'محطة', 'station'}, ['time'] = {'الوقت', 'time'}, ['time-caption'] = 'time-caption', ['title'] = {'عنوان', 'title', 'العنوان'}, ['title-link'] = {'وصلة-العنوان', 'وصلة العنوان', 'title-link', 'episode-link', 'وصلة الحلقة'}, ['title-note'] = {'title-note', 'department'}, ['type'] = {'النوع', 'type', 'medium'}, ['trans-chapter'] = {'trans-article', 'trans-chapter', 'trans-contribution', 'trans-entry', 'trans-section'}, ['transcript'] = 'transcript', ['transcript-format'] = 'transcript-format', ['transcript-url'] = 'transcript-url', -- Used by InternetArchiveBot ['trans-encyclopedia'] = {'trans-encyclopedia', 'trans-encyclopaedia'}, -- cite encyclopedia only ['trans-map'] = 'trans-map', -- cite map only ['trans-journal'] = {'trans-journal', 'trans-magazine', 'trans-newspaper', 'trans-periodical', 'trans-website', 'trans-work'}, ['trans-quote'] = 'trans-quote', ['trans-title'] = {'عنوان مترجم', 'العنوان بالعربي', 'العنوان الأجنبي', 'عنوان أجنبي', 'trans-title', 'العنوان المترجم'}, -- Used by InternetArchiveBot ['url'] = {'مسار', 'المسار','وصلة', 'url', 'URL'}, -- Used by InternetArchiveBot ['url-access'] = {'url-access', 'التسجيل'}, -- Used by InternetArchiveBot ['url-status'] = {'url-status','حالة المسار'}, -- Used by InternetArchiveBot ['vauthors'] = {'vauthors', 'عدة مؤلفين'}, ['veditors'] = {'veditors', 'عدة محررين' }, ['via'] = {'عبر', 'via'}, ['volume'] = {'المجلد', 'volume', 'الجزء', 'ج'}, ['wikidatacite'] = 'wikidatacite', ['year'] = {'سنة', 'year', 'السنة'}, } local i18n_t = { ["ar"] = { illustrator = "رسم", composer = "تلحين", animator = "رسم الرسوم المتحركة", director = "إخراج", screenwriter = "سيناريو", signatory = "توقيع", presenter = "تقديم", performer = "أداء", annotator = "تحقيق", reviewer = "مراجعة", unknown = "مجهول", supervisor = "إشراف", ["unknown-publication-date"] = '<abbr class="abbr" title="دون تاريخ">د.ت.</abbr>', ["unknown-publisher"] = '<abbr class="abbr" title="دون ناشر">د.ن.</abbr>', wikidata = "ويكي بيانات" }, ["cite_q"] = "{{استشهاد بويكي بيانات|", ["erratum"] = "(erratum)", ["unknown-author"] = { ar = "غير معروف", en = "Anonymous", fr = "Aanonyme", de = "Anonymus", es = "Anónimo" }, ["wdq"] = "[[ويكي بيانات|QID]]", -- go through "WDQ (identifier)" redirect to reduce clutter in "What links here" and improve reverse lookup. Keep in sync with {{QID}}. ["wikisource"] = "arwikisource", ["errors"] = { ["local-article-not-found"] = "المقال المحلي غير موجود.", ["no-label-or-title"] = "لا عنون أو تسمية: ", }, -- Next Line Edited ["unknown-author-trackingcat"] = "", -- [[تصنيف:Cite Q - author unknown]] ["months"] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }, ["ordinal"] = { [1] = "st", [2] = "nd", [3] = "rd", ["default"] = "th" }, ["trackingcats"] = { ["erratum"] = "[[تصنيف:استشهاد بويكي بيانات:الاستشهاد يعمل مع خطأ]]", ["missing-wikidata"] = "[[تصنيف:مقالات مع بيانات ويكي بيانات نقاصة]]", -- TODO: point to a {{cite q}}-specific category; this one is specific to Module:WikidataIB ['no-label-or-title'] = '[[تصنيف:استشهاد بويكي بيانات:يفتقر إلى عنوان أو تسمية]]', ["retracted"] = "[[تصنيف:الاستشهاد بويكي بيانات: الاستشهاد بعمل مسحوب]]<!-- retracted -->", ["replaced"] = "[[تصنيف:الاستشهاد بويكي بيانات: الاستشهاد بعمل مستبدل]]<!-- replaced -->", ["unknown-author"] = "", -- [[Category:Cite Q - author unknown]] removed as misplaced; someone is welcome to restore it if it is placed outside of the template parameter value ["unknown-template"] = "[[تصنيف:الاستشهاد بويكي بيانات:قالب مجهول]]", }, } local rejected_t = { sources = { Q465 = true, Q15241312 = true, Q52 = true }, properties = { "P1800", "P1566", "P21"}, instances = { Q5 = true, -- Human is not a direct reference Q184188 = true, Q1250464 = true, -- inatance of refference DBs Q8513 = true, Q17152639 = true, Q7094076 = true, Q5535082 = true, Q856638= true, Q1982918 = true, Q36524 = true, Q36218176 = true, Q526334 = true, Q5227411 = true } } -- Table of simple properties that can be fetched in roughly the same way: -- id = PXXX -- maxvals = maximum number of multiple values (0 for all) -- linked = "no" suppresses linking -- populate_from_journal = true/false determines whether to look in a journal where the source is published -- rank = "best", "preferred", normal, etc. determines how Wikidata ranks are treated -- others = true - the value for the property goes to "others" section local simple_properties_t = { -- Next Line Edited publisher = {id = "P123", maxvals = 3}, oclc = {id = "P243", maxvals = 1}, ['publication-place'] = {id = "P291", maxvals = 0, linked = false}, -- publication place (don't put into |place=; is treated specially in {{citation}} if both are given) doi = {id = "P356", maxvals = 1}, -- take care of |doi-broken-date= (WD "reason for deprecation"/"stated as") and |doi-access= (WD "access status")? issue = {id = "P433", maxvals = 0, populate_from_journal = true}, -- distinguish from |number= ("P1545"?) if both are given (still blocked by {{citation}}, but will be supported in the future) pmid = {id = "P698", maxvals = 1}, -- gbooks = {id = "P675", maxvals = 1}, -- to be added to {{citation}} -- ia = {id = "P724", maxvals = 1}, -- to be added to {{citation}} arxiv = {id = "P818", maxvals = 1}, bibcode = {id = "P819", maxvals = 1}, -- take care of |bibcode-access=? jstor = {id = "P888", maxvals = 1}, -- take care of |jstor-access=? mr = {id = "P889", maxvals = 1}, rfc = {id = "P892", maxvals = 1}, zbl = {id = "P894", maxvals = 1}, ssrn = {id = "P893", maxvals = 1}, place = {id = "P1071", maxvals = 0, linked = false}, -- written-at place -- ['total-pages'] = {id = "P1104", maxvals = 0, linked = 'no'}, -- to be added to {{citation}} / COinS &rft.tpages= -- coden = {id = "P1159", maxvals = 1}, -- to be added to {{citation}} / COinS &rft.coden= s2cid = {id = "P8299", maxvals = 1}, -- take care of |s2cid-access=? pmc = {id = "P932", maxvals = 1}, -- take care of |pmc-embargo-date= (WD "reason for deprecation")? lccn = {id = "P1144", maxvals = 1}, hdl = {id = "P1184", maxvals = 1}, -- take care of |hdl-access=? ismn = {id = "P1208", maxvals = 1}, journal = {id = "P1433", maxvals = 1}, citeseerx = {id = "P3784", maxvals = 1}, osti = {id = "P3894", maxvals = 1}, -- take care of |osti-access=? biorxiv = {id = "P3951", maxvals = 1}, asin = {id = "P5749", maxvals = 1}, -- What about |asin-tld=? (WD examples resolve to .com at present, but may change) -- ['catalog-number'] = {id = "P528", maxvals = 0}, -- to be added to {{citation}} / COinS &rft.artnum= isbn = {id = "P212", maxvals = 1, populate_from_journal = true}, -- ISBN 13 issn = {id = "P236", maxvals = 1, populate_from_journal = true}, -- distinguish from |eissn= for electronic issues? -- jfm = {id = "P?", maxvals = 1}, -- Jahrbuch über die Fortschritte der Mathematik (not Zbl) -- sbn = {id = "P?", maxvals = 1}, -- Standard Book Number (predecessor of ISBN, not ICCU) -- message-id = {id = "P?", maxvals = 1}, -- Usenet message ID chapter = {id = "P792", maxvals = 1, no_vol_qual=true}, ['publication-date'] = {id = "P577", maxvals = 1, populate_from_journal = true}, -- publication date (don't use |date=; is treated specially in {{citation}} if both are given.) series = {id = "P179", maxvals = 1, populate_from_journal = true, qual = "P1545"}, version = {id = "P348", maxvals = 0}, edition = {id = "P393", maxvals = 0}, volume = {id = "P478", maxvals = 0, populate_from_journal = true, no_vol_qual=true}, -- part = {id = "P1545"?, maxvals = 0}, -- to be added to {{citation}} / COinS &rft.part= title = {id = "P1476", rank="p n"}, -- url = {id = "P953", maxvals = 1}, -- deal with this along with archive-url pages = {id = "P304", maxvals = 0, populate_from_journal = true, no_vol_qual=true}, at = {id = "P958", maxvals = 0, populate_from_journal = true, no_vol_qual=true}, -- also incorporate lines (P7421) and columns (P3903) into this (cite map also supports |section=) -- sheets = {id = "P7416", maxvals = 0, populate_from_journal = true}, -- interviewer = {id = "P?", maxvals = 0}, -- does **not** go to "others" section! Multiple interviewers should be n-enumerated illustrator = {id = "P110", maxvals = 10, others = true}, -- goes to "others" section -- foreword and afterword, when contributions to another author's work, are contributions so belong in |contribution=; -- the writer's name goes in |contributor=; requires |title= and |author= -- However, this might need to add support for multiple contributors and their roles to {{citation}}, see Help_talk:Citation_Style_1#Others -- foreword = {id = "P2679", maxvals = 10, others = true}, -- goes to "others" section -- afterword = {id = "P2680", maxvals = 10, others = true}, -- goes to "others" section composer = {id = "P86", maxvals = 10, others = true}, -- goes to "others" section animator = {id = "P6942", maxvals = 10, others = true}, -- goes to "others" section director = {id = "P57", maxvals = 10, others = true}, -- goes to "others" section screenwriter = {id = "P58", maxvals = 10, others = true}, -- goes to "others" section signatory = {id = "P1891", maxvals = 10, others = true}, -- goes to "others" section presenter = {id = "P371", maxvals = 10, others = true}, -- goes to "others" section performer = {id = "P175", maxvals = 10, others = true}, -- goes to "others" section -- next 2 lines added for Arabic Wikipedia annotator = {id ="P11105", maxvals = 10, others = true}, -- goes to "others" section reviewer = {id ="P4032", maxvals = 10, others = true}, -- goes to "others" section supervisor = {id ="P7604", maxvals = 3, others = true}, -- goes to "others" section } local used_args_t = {accessdate=true, language=true, mode=true, ol=true, other=true, ['display-authors']=true, ['display-editors']=true, ['archive-url']=true, ['archive-date']=true, url=true, title=true, page=true, pages = true, volume=true} -- all_used_properties local used_properties_t = { P1071 = {arg= "place", maxvals = 0, linked = false}, -- written-at place P110 = {arg= "illustrator", maxvals = 10, others = true}, -- goes to "others" section P11105 = {arg= "annotator", maxvals = 10, others = true}, -- goes to "others" section P1144 = {arg= "lccn", maxvals = 1}, P1184 = {arg= "hdl", maxvals = 1}, -- take care of |hdl-access=? P1208 = {arg= "ismn", maxvals = 1}, P123 = {arg= "publisher", maxvals = 3}, P1433 = {arg= "journal", maxvals = 1}, P1476 = {arg= "title", rank="p n"}, P1680 = true, P175 = {arg= "performer", maxvals = 10, others = true}, -- goes to "others" section P179 = {arg= "series", maxvals = 1, populate_from_journal = true}, P1891 = {arg= "signatory", maxvals = 10, others = true}, -- goes to "others" section P1932 = true, P2093 = true, -- author string P212 = {arg= "isbn", maxvals = 1, populate_from_journal = true}, -- ISBN 13 P236 = {arg= "issn", maxvals = 1, populate_from_journal = true}, -- distinguish from |eissn= for electronic issues? P243 = {arg= "oclc", maxvals = 1}, P2699 = true, P291 = {arg= "publication-place", maxvals = 0, linked = false}, -- publication place (don't put into |place=; is treated specially in {{citation}} if both are given) P304 = {arg= "pages", maxvals = 0, populate_from_journal = true}, P348 = {arg= "version", maxvals = 0}, P356 = {arg= "doi", maxvals = 1}, -- take care of |doi-broken-date= (WD "reason for deprecation"/"stated as") and |doi-access= (WD "access status")? P371 = {arg= "presenter", maxvals = 10, others = true}, -- goes to "others" section P3784 = {arg= "citeseerx", maxvals = 1}, P3894 = {arg= "osti", maxvals = 1}, -- take care of |osti-access=? P393 = {arg= "edition", maxvals = 0}, P3951 = {arg= "biorxiv", maxvals = 1}, P4032 = {arg= "reviewer", maxvals = 10, others = true}, -- goes to "others" section P407 = true, P433 = {arg= "issue", maxvals = 0, populate_from_journal = true}, -- distinguish from |number= ("P1545"?) if both are given (still blocked by {{citation}}, but will be supported in the future) P478 = {arg= "volume", maxvals = 0, populate_from_journal = true}, P50 = true, -- author P57 = {arg= "director", maxvals = 10, others = true}, -- goes to "others" section P5749 = {arg= "asin", maxvals = 1}, -- What about |asin-tld=? (WD examples resolve to .com at present, but may change) P5769 = true, --editor P577 = {arg= "publication-date", maxvals = 1, populate_from_journal = true}, -- publication date (don't use |date=; is treated specially in {{citation}} if both are given.) P58 = {arg= "screenwriter", maxvals = 10, others = true}, -- goes to "others" section P655 = true, P6942 = {arg= "animator", maxvals = 10, others = true}, -- goes to "others" section P698 = {arg= "pmid", maxvals = 1}, P7604 = {arg ="supervisor", maxvals = 3, others = true}, -- goes to "others" section P792 = {arg= "chapter", maxvals = 1}, P818 = {arg= "arxiv", maxvals = 1}, P819 = {arg= "bibcode", maxvals = 1}, -- take care of |bibcode-access=? P8299 = {arg= "s2cid", maxvals = 1}, -- take care of |s2cid-access=? P856 = true, P86 = {arg= "composer", maxvals = 10, others = true}, -- goes to "others" section P888 = {arg= "jstor", maxvals = 1}, -- take care of |jstor-access=? P889 = {arg= "mr", maxvals = 1}, P892 = {arg= "rfc", maxvals = 1}, P893 = {arg= "ssrn", maxvals = 1}, P894 = {arg= "zbl", maxvals = 1}, P932 = {arg= "pmc", maxvals = 1}, -- take care of |pmc-embargo-date= (WD "reason for deprecation")? P953 = true, P958 = {arg= "at", maxvals = 0, populate_from_journal = true}, -- also incorporate lines (P7421) and columns (P3903) into this (cite map also supports |section=) P98 = true, P854 = true, } return { aliases_t = aliases_t, i18n_t = i18n_t, rejected_t = rejected_t, simple_properties_t = simple_properties_t, used_args_t = used_args_t, used_properties_t = used_properties_t, config_t = config_t } l8ms9bejwokc2aihkf23kn2dzt6b3gc 1097359 1097322 2026-07-23T20:27:56Z حبيشان 31560 التاريخ الهجري 1097359 Scribunto text/plain local config_t = { linksproject = "arwiki", wikilinkprefix = ":w:" } local aliases_t = { ['accessdate'] = {'تاريخ-الوصول','تاريخ الوصول', 'تاريخ وصول', 'access-date', 'accessdate'}, ['agency'] = {'وكالة', 'agency'}, ['archivedate'] = {'تاريخ-الأرشيف', 'تاريخ أرشيف', 'تاريخ الأرشيف', 'archive-date', 'archivedate'}, ['archive-format'] = {'صيغة-الأرشيف', 'صيغة الأرشيف', 'archive-format'}, ['archive-url'] = {'مسار-الأرشيف', 'مسار أرشيف', 'مسار الأرشيف', 'archive-url', 'archiveurl'}, ['article-number'] = {'رقم-المقالة', 'article-number'}, ['asin-tld'] = 'asin-tld', ['at'] = {'في', 'at'}, --##TOREVISE ['authors'] = {'المؤلفون', 'المؤلفين', 'authors', 'people', 'host', 'credits', 'أشخاص'}, ['book-title'] = {'عنوان الكتاب', 'book-title', 'booktitle', 'عنوان المؤتمر'}, ['cartography'] = 'cartography', ['chapter'] = {'الفصل', 'chapter', 'contribution', 'entry', 'article', 'section'}, ['chapter-format'] = {'صيغة-الفصل', 'صيغة الفصل', 'تنسيق الفصل', 'chapter-format', 'contribution-format', 'entry-format', 'article-format', 'section-format'}, ['chapter-url'] = {'مسار-الفصل', 'مسار الفصل', 'chapter-url', 'contribution-url', 'entry-url', 'article-url', 'section-url'}, -- Used by InternetArchiveBot ['chapter-url-access'] = {'chapter-url-access', 'contribution-url-access', 'entry-url-access', 'article-url-access', 'section-url-access'}, -- Used by InternetArchiveBot ['class'] = {'صنف', 'class'}, -- cite arxiv and arxiv identifier ['collaboration'] = 'collaboration', ['conference'] = {'اسم-المؤتمر', 'اسم المؤتمر', 'conference'}, ['conference-format'] = 'conference-format', ['conference-url'] = {'مسار-المؤتمر', 'مسار المؤتمر', 'conference-url'}, -- Used by InternetArchiveBot ['date'] = {'تاريخ', 'التاريخ', 'date', 'air-date', 'airdate'}, ['degree'] = {'الدرجة', 'degree'}, ['df'] = 'df', ['display-authors'] = {'إظهار-المؤلفين', 'إظهار المؤلفين', 'display-authors', 'display-subjects'}, ['display-contributors'] = 'display-contributors', ['display-editors'] = {'إظهار-المحررين', 'إظهار المحررين', 'display-editors'}, ['display-interviewers'] = 'display-interviewers', ['display-translators'] = 'display-translators', ['docket'] = 'docket', ['doi-broken-date'] = 'doi-broken-date', ['edition'] = {'طبعة', 'الإصدار', 'الاصدار', 'إصدار', 'اصدار', 'الطبعة', 'رقم الطبعة', 'edition'}, ['pmc-embargo-date'] = 'pmc-embargo-date', ['encyclopedia'] = {'موسوعة', 'encyclopedia', 'encyclopaedia', 'اسم المعجم', 'dictionary', 'اسم الموسوعة'}, -- cite encyclopedia only ['episode'] = {'الحلقة', 'episode'}, -- cite serial only TODO: make available to cite episode? ['format'] = {'صيغة', 'التنسيق', 'format', 'تنسيق', 'الصيغة'}, ['hijri-date'] = {'التاريخ الهجري', 'تاريخ هجري', 'hijri-date'}, ['id'] = {'id', 'ID', 'المعرف'}, ['inset'] = {'inset', 'مجموعة'}, ['issue'] = {'العدد', 'issue', 'number'}, ['language'] = {'لغة', 'اللغة', 'language', 'lang'}, ['mailing-list'] = {'القائمة البريدية', 'mailing-list'}, -- cite mailing list only ['map'] = {'الخريطة', 'map'}, -- cite map only ['map-format'] = {'صيغة الخريطة', 'map-format'}, -- cite map only ['map-url'] = {'مسار الخريطة', 'map-url'}, -- cite map only -- Used by InternetArchiveBot ['map-url-access'] = 'map-url-access', -- cite map only -- Used by InternetArchiveBot ['minutes'] = {'دقيقة', 'minutes'}, ['mode'] = 'mode', ['name-list-style'] = 'name-list-style', ['network'] = {'الشبكة', 'network'}, ['newsgroup'] = {'اسم المجموعة', 'newsgroup'}, -- cite newsgroup only ['nopp'] = {'no-pp', 'nopp'}, ['no-tracking'] = {'no-tracking', 'template-doc-demo'}, ['number'] = 'number', -- this case only for cite techreport ['orig-date'] = {'orig-date', 'orig-year', 'origyear', 'سنة النشر الأصلية'}, ['others'] = {'آخرون','others', 'المحاور', 'المحاورون', 'المحقق'}, ['page'] = {'صفحة', 'p', 'الصفحة', 'page', 'الصفحة', 'رقم الصفحة', 'رقم صفحة','ص'}, -- Used by InternetArchiveBot ['pages'] = {'صفحات', 'الصفحات', 'pp', 'أرقام الصفحات', 'أرقم صفحات', 'pages'}, -- Used by InternetArchiveBot ['journal'] = { 'صحيفة', 'journal', 'دورية محكمة', 'مجلة', 'magazine', 'اسم المجلة', 'newspaper', 'جريدة', 'اسم الصحيفة', 'دورية', 'periodical', 'موقع', 'website', 'الموقع', 'عمل', 'work', 'العمل', 'من عمل', }, ['place'] = { 'مكان', 'place', 'المكان', 'مقر', 'المقر', 'location'}, ['postscript'] = 'postscript', ['publication-date'] = {'تاريخ-النشر', 'تاريخ النشر', 'publication-date'}, ['publication-place'] = {'مكان-النشر', 'مكان النشر', 'publication-place'}, ['publisher'] = {'ناشر', 'publisher', 'الناشر', 'institution', 'مصدر', 'الموزع', 'المصدر', 'المؤسسة'}, ['quote'] = {'اقتباس', 'quote', 'quotation'}, ['quote-page'] = 'quote-page', ['quote-pages'] = 'quote-pages', ['ref'] = {'مرجع', 'ref'}, ['scale'] = {'المقياس', 'scale'}, ['script-chapter'] = {'script-chapter', 'script-contribution', 'script-entry', 'script-article', 'script-section'}, ['script-encyclopedia'] = {'script-encyclopedia', 'script-encyclopaedia'}, -- cite encyclopedia only ['script-map'] = 'script-map', ['script-journal'] = {'script-journal', 'script-magazine', 'script-newspaper', 'script-periodical', 'script-website', 'script-work'}, ['script-quote'] = 'script-quote', ['script-title'] = 'script-title', -- Used by InternetArchiveBot ['season'] = {'الموسم', 'season'}, ['sections'] = {'الأقسام', 'sections'}, -- cite map only ['series'] = {'سلسلة', 'series', 'version'}, ['series-link'] = {'وصلة-سلسلة', 'وصلة سلسلة', 'series-link', 'مسار المسلسل'}, ['series-number'] = {'رقم-سلسلة', 'رقم سلسلة', 'series-number', 'series-no'}, ['sheet'] = {'ورقة', 'sheet'}, -- cite map only ['sheets'] = {'أوراق', 'sheets'}, -- cite map only ['station'] = {'محطة', 'station'}, ['time'] = {'الوقت', 'time'}, ['time-caption'] = 'time-caption', ['title'] = {'عنوان', 'title', 'العنوان'}, ['title-link'] = {'وصلة-العنوان', 'وصلة العنوان', 'title-link', 'episode-link', 'وصلة الحلقة'}, ['title-note'] = {'title-note', 'department'}, ['type'] = {'النوع', 'type', 'medium'}, ['trans-chapter'] = {'trans-article', 'trans-chapter', 'trans-contribution', 'trans-entry', 'trans-section'}, ['transcript'] = 'transcript', ['transcript-format'] = 'transcript-format', ['transcript-url'] = 'transcript-url', -- Used by InternetArchiveBot ['trans-encyclopedia'] = {'trans-encyclopedia', 'trans-encyclopaedia'}, -- cite encyclopedia only ['trans-map'] = 'trans-map', -- cite map only ['trans-journal'] = {'trans-journal', 'trans-magazine', 'trans-newspaper', 'trans-periodical', 'trans-website', 'trans-work'}, ['trans-quote'] = 'trans-quote', ['trans-title'] = {'عنوان مترجم', 'العنوان بالعربي', 'العنوان الأجنبي', 'عنوان أجنبي', 'trans-title', 'العنوان المترجم'}, -- Used by InternetArchiveBot ['url'] = {'مسار', 'المسار','وصلة', 'url', 'URL'}, -- Used by InternetArchiveBot ['url-access'] = {'url-access', 'التسجيل'}, -- Used by InternetArchiveBot ['url-status'] = {'url-status','حالة المسار'}, -- Used by InternetArchiveBot ['vauthors'] = {'vauthors', 'عدة مؤلفين'}, ['veditors'] = {'veditors', 'عدة محررين' }, ['via'] = {'عبر', 'via'}, ['volume'] = {'المجلد', 'volume', 'الجزء', 'ج'}, ['wikidatacite'] = 'wikidatacite', ['year'] = {'سنة', 'year', 'السنة'}, } local i18n_t = { ["ar"] = { illustrator = "رسم", composer = "تلحين", animator = "رسم الرسوم المتحركة", director = "إخراج", screenwriter = "سيناريو", signatory = "توقيع", presenter = "تقديم", performer = "أداء", annotator = "تحقيق", reviewer = "مراجعة", unknown = "مجهول", supervisor = "إشراف", ["unknown-publication-date"] = '<abbr class="abbr" title="دون تاريخ">د.ت.</abbr>', ["unknown-publisher"] = '<abbr class="abbr" title="دون ناشر">د.ن.</abbr>', wikidata = "ويكي بيانات" }, ["cite_q"] = "{{استشهاد بويكي بيانات|", ["erratum"] = "(erratum)", ["unknown-author"] = { ar = "غير معروف", en = "Anonymous", fr = "Aanonyme", de = "Anonymus", es = "Anónimo" }, ["wdq"] = "[[ويكي بيانات|QID]]", -- go through "WDQ (identifier)" redirect to reduce clutter in "What links here" and improve reverse lookup. Keep in sync with {{QID}}. ["wikisource"] = "arwikisource", ["errors"] = { ["local-article-not-found"] = "المقال المحلي غير موجود.", ["no-label-or-title"] = "لا عنون أو تسمية: ", }, -- Next Line Edited ["unknown-author-trackingcat"] = "", -- [[تصنيف:Cite Q - author unknown]] ["months"] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }, ["ordinal"] = { [1] = "st", [2] = "nd", [3] = "rd", ["default"] = "th" }, ["trackingcats"] = { ["erratum"] = "[[تصنيف:استشهاد بويكي بيانات:الاستشهاد يعمل مع خطأ]]", ["missing-wikidata"] = "[[تصنيف:مقالات مع بيانات ويكي بيانات نقاصة]]", -- TODO: point to a {{cite q}}-specific category; this one is specific to Module:WikidataIB ['no-label-or-title'] = '[[تصنيف:استشهاد بويكي بيانات:يفتقر إلى عنوان أو تسمية]]', ["retracted"] = "[[تصنيف:الاستشهاد بويكي بيانات: الاستشهاد بعمل مسحوب]]<!-- retracted -->", ["replaced"] = "[[تصنيف:الاستشهاد بويكي بيانات: الاستشهاد بعمل مستبدل]]<!-- replaced -->", ["unknown-author"] = "", -- [[Category:Cite Q - author unknown]] removed as misplaced; someone is welcome to restore it if it is placed outside of the template parameter value ["unknown-template"] = "[[تصنيف:الاستشهاد بويكي بيانات:قالب مجهول]]", }, } local rejected_t = { sources = { Q465 = true, Q15241312 = true, Q52 = true }, properties = { "P1800", "P1566", "P21"}, instances = { Q5 = true, -- Human is not a direct reference Q184188 = true, Q1250464 = true, -- inatance of refference DBs Q8513 = true, Q17152639 = true, Q7094076 = true, Q5535082 = true, Q856638= true, Q1982918 = true, Q36524 = true, Q36218176 = true, Q526334 = true, Q5227411 = true } } -- Table of simple properties that can be fetched in roughly the same way: -- id = PXXX -- maxvals = maximum number of multiple values (0 for all) -- linked = "no" suppresses linking -- populate_from_journal = true/false determines whether to look in a journal where the source is published -- rank = "best", "preferred", normal, etc. determines how Wikidata ranks are treated -- others = true - the value for the property goes to "others" section local simple_properties_t = { -- Next Line Edited publisher = {id = "P123", maxvals = 3}, oclc = {id = "P243", maxvals = 1}, ['publication-place'] = {id = "P291", maxvals = 0, linked = false}, -- publication place (don't put into |place=; is treated specially in {{citation}} if both are given) doi = {id = "P356", maxvals = 1}, -- take care of |doi-broken-date= (WD "reason for deprecation"/"stated as") and |doi-access= (WD "access status")? issue = {id = "P433", maxvals = 0, populate_from_journal = true}, -- distinguish from |number= ("P1545"?) if both are given (still blocked by {{citation}}, but will be supported in the future) pmid = {id = "P698", maxvals = 1}, -- gbooks = {id = "P675", maxvals = 1}, -- to be added to {{citation}} -- ia = {id = "P724", maxvals = 1}, -- to be added to {{citation}} arxiv = {id = "P818", maxvals = 1}, bibcode = {id = "P819", maxvals = 1}, -- take care of |bibcode-access=? jstor = {id = "P888", maxvals = 1}, -- take care of |jstor-access=? mr = {id = "P889", maxvals = 1}, rfc = {id = "P892", maxvals = 1}, zbl = {id = "P894", maxvals = 1}, ssrn = {id = "P893", maxvals = 1}, place = {id = "P1071", maxvals = 0, linked = false}, -- written-at place -- ['total-pages'] = {id = "P1104", maxvals = 0, linked = 'no'}, -- to be added to {{citation}} / COinS &rft.tpages= -- coden = {id = "P1159", maxvals = 1}, -- to be added to {{citation}} / COinS &rft.coden= s2cid = {id = "P8299", maxvals = 1}, -- take care of |s2cid-access=? pmc = {id = "P932", maxvals = 1}, -- take care of |pmc-embargo-date= (WD "reason for deprecation")? lccn = {id = "P1144", maxvals = 1}, hdl = {id = "P1184", maxvals = 1}, -- take care of |hdl-access=? ismn = {id = "P1208", maxvals = 1}, journal = {id = "P1433", maxvals = 1}, citeseerx = {id = "P3784", maxvals = 1}, osti = {id = "P3894", maxvals = 1}, -- take care of |osti-access=? biorxiv = {id = "P3951", maxvals = 1}, asin = {id = "P5749", maxvals = 1}, -- What about |asin-tld=? (WD examples resolve to .com at present, but may change) -- ['catalog-number'] = {id = "P528", maxvals = 0}, -- to be added to {{citation}} / COinS &rft.artnum= isbn = {id = "P212", maxvals = 1, populate_from_journal = true}, -- ISBN 13 issn = {id = "P236", maxvals = 1, populate_from_journal = true}, -- distinguish from |eissn= for electronic issues? -- jfm = {id = "P?", maxvals = 1}, -- Jahrbuch über die Fortschritte der Mathematik (not Zbl) -- sbn = {id = "P?", maxvals = 1}, -- Standard Book Number (predecessor of ISBN, not ICCU) -- message-id = {id = "P?", maxvals = 1}, -- Usenet message ID chapter = {id = "P792", maxvals = 1, no_vol_qual=true}, ['publication-date'] = {id = "P577", maxvals = 1, populate_from_journal = true}, -- publication date (don't use |date=; is treated specially in {{citation}} if both are given.) series = {id = "P179", maxvals = 1, populate_from_journal = true, qual = "P1545"}, version = {id = "P348", maxvals = 0}, edition = {id = "P393", maxvals = 0}, volume = {id = "P478", maxvals = 0, populate_from_journal = true, no_vol_qual=true}, -- part = {id = "P1545"?, maxvals = 0}, -- to be added to {{citation}} / COinS &rft.part= title = {id = "P1476", rank="p n"}, -- url = {id = "P953", maxvals = 1}, -- deal with this along with archive-url pages = {id = "P304", maxvals = 0, populate_from_journal = true, no_vol_qual=true}, at = {id = "P958", maxvals = 0, populate_from_journal = true, no_vol_qual=true}, -- also incorporate lines (P7421) and columns (P3903) into this (cite map also supports |section=) -- sheets = {id = "P7416", maxvals = 0, populate_from_journal = true}, -- interviewer = {id = "P?", maxvals = 0}, -- does **not** go to "others" section! Multiple interviewers should be n-enumerated illustrator = {id = "P110", maxvals = 10, others = true}, -- goes to "others" section -- foreword and afterword, when contributions to another author's work, are contributions so belong in |contribution=; -- the writer's name goes in |contributor=; requires |title= and |author= -- However, this might need to add support for multiple contributors and their roles to {{citation}}, see Help_talk:Citation_Style_1#Others -- foreword = {id = "P2679", maxvals = 10, others = true}, -- goes to "others" section -- afterword = {id = "P2680", maxvals = 10, others = true}, -- goes to "others" section composer = {id = "P86", maxvals = 10, others = true}, -- goes to "others" section animator = {id = "P6942", maxvals = 10, others = true}, -- goes to "others" section director = {id = "P57", maxvals = 10, others = true}, -- goes to "others" section screenwriter = {id = "P58", maxvals = 10, others = true}, -- goes to "others" section signatory = {id = "P1891", maxvals = 10, others = true}, -- goes to "others" section presenter = {id = "P371", maxvals = 10, others = true}, -- goes to "others" section performer = {id = "P175", maxvals = 10, others = true}, -- goes to "others" section -- next 2 lines added for Arabic Wikipedia annotator = {id ="P11105", maxvals = 10, others = true}, -- goes to "others" section reviewer = {id ="P4032", maxvals = 10, others = true}, -- goes to "others" section supervisor = {id ="P7604", maxvals = 3, others = true}, -- goes to "others" section ['hijri-date'] = {id = "P577", maxvals = 3, hijri=true}, } local used_args_t = {accessdate=true, language=true, mode=true, ol=true, other=true, ['display-authors']=true, ['display-editors']=true, ['archive-url']=true, ['archive-date']=true, url=true, title=true, page=true, pages = true, volume=true} -- all_used_properties local used_properties_t = { P1071 = {arg= "place", maxvals = 0, linked = false}, -- written-at place P110 = {arg= "illustrator", maxvals = 10, others = true}, -- goes to "others" section P11105 = {arg= "annotator", maxvals = 10, others = true}, -- goes to "others" section P1144 = {arg= "lccn", maxvals = 1}, P1184 = {arg= "hdl", maxvals = 1}, -- take care of |hdl-access=? P1208 = {arg= "ismn", maxvals = 1}, P123 = {arg= "publisher", maxvals = 3}, P1433 = {arg= "journal", maxvals = 1}, P1476 = {arg= "title", rank="p n"}, P1680 = true, P175 = {arg= "performer", maxvals = 10, others = true}, -- goes to "others" section P179 = {arg= "series", maxvals = 1, populate_from_journal = true}, P1891 = {arg= "signatory", maxvals = 10, others = true}, -- goes to "others" section P1932 = true, P2093 = true, -- author string P212 = {arg= "isbn", maxvals = 1, populate_from_journal = true}, -- ISBN 13 P236 = {arg= "issn", maxvals = 1, populate_from_journal = true}, -- distinguish from |eissn= for electronic issues? P243 = {arg= "oclc", maxvals = 1}, P2699 = true, P291 = {arg= "publication-place", maxvals = 0, linked = false}, -- publication place (don't put into |place=; is treated specially in {{citation}} if both are given) P304 = {arg= "pages", maxvals = 0, populate_from_journal = true}, P348 = {arg= "version", maxvals = 0}, P356 = {arg= "doi", maxvals = 1}, -- take care of |doi-broken-date= (WD "reason for deprecation"/"stated as") and |doi-access= (WD "access status")? P371 = {arg= "presenter", maxvals = 10, others = true}, -- goes to "others" section P3784 = {arg= "citeseerx", maxvals = 1}, P3894 = {arg= "osti", maxvals = 1}, -- take care of |osti-access=? P393 = {arg= "edition", maxvals = 0}, P3951 = {arg= "biorxiv", maxvals = 1}, P4032 = {arg= "reviewer", maxvals = 10, others = true}, -- goes to "others" section P407 = true, P433 = {arg= "issue", maxvals = 0, populate_from_journal = true}, -- distinguish from |number= ("P1545"?) if both are given (still blocked by {{citation}}, but will be supported in the future) P478 = {arg= "volume", maxvals = 0, populate_from_journal = true}, P50 = true, -- author P57 = {arg= "director", maxvals = 10, others = true}, -- goes to "others" section P5749 = {arg= "asin", maxvals = 1}, -- What about |asin-tld=? (WD examples resolve to .com at present, but may change) P5769 = true, --editor P577 = {arg= "publication-date", maxvals = 1, populate_from_journal = true}, -- publication date (don't use |date=; is treated specially in {{citation}} if both are given.) P58 = {arg= "screenwriter", maxvals = 10, others = true}, -- goes to "others" section P655 = true, P6942 = {arg= "animator", maxvals = 10, others = true}, -- goes to "others" section P698 = {arg= "pmid", maxvals = 1}, P7604 = {arg ="supervisor", maxvals = 3, others = true}, -- goes to "others" section P792 = {arg= "chapter", maxvals = 1}, P818 = {arg= "arxiv", maxvals = 1}, P819 = {arg= "bibcode", maxvals = 1}, -- take care of |bibcode-access=? P8299 = {arg= "s2cid", maxvals = 1}, -- take care of |s2cid-access=? P856 = true, P86 = {arg= "composer", maxvals = 10, others = true}, -- goes to "others" section P888 = {arg= "jstor", maxvals = 1}, -- take care of |jstor-access=? P889 = {arg= "mr", maxvals = 1}, P892 = {arg= "rfc", maxvals = 1}, P893 = {arg= "ssrn", maxvals = 1}, P894 = {arg= "zbl", maxvals = 1}, P932 = {arg= "pmc", maxvals = 1}, -- take care of |pmc-embargo-date= (WD "reason for deprecation")? P953 = true, P958 = {arg= "at", maxvals = 0, populate_from_journal = true}, -- also incorporate lines (P7421) and columns (P3903) into this (cite map also supports |section=) P98 = true, P854 = true, } return { aliases_t = aliases_t, i18n_t = i18n_t, rejected_t = rejected_t, simple_properties_t = simple_properties_t, used_args_t = used_args_t, used_properties_t = used_properties_t, config_t = config_t } 298vk97xvcxa2q61bwb2qm3cmypxj9u 1097363 1097359 2026-07-23T21:56:32Z حبيشان 31560 1097363 Scribunto text/plain local config_t = { linksproject = "", wikilinkprefix = "" } local aliases_t = { ['accessdate'] = {'تاريخ-الوصول','تاريخ الوصول', 'تاريخ وصول', 'access-date', 'accessdate'}, ['agency'] = {'وكالة', 'agency'}, ['archivedate'] = {'تاريخ-الأرشيف', 'تاريخ أرشيف', 'تاريخ الأرشيف', 'archive-date', 'archivedate'}, ['archive-format'] = {'صيغة-الأرشيف', 'صيغة الأرشيف', 'archive-format'}, ['archive-url'] = {'مسار-الأرشيف', 'مسار أرشيف', 'مسار الأرشيف', 'archive-url', 'archiveurl'}, ['article-number'] = {'رقم-المقالة', 'article-number'}, ['asin-tld'] = 'asin-tld', ['at'] = {'في', 'at'}, --##TOREVISE ['authors'] = {'المؤلفون', 'المؤلفين', 'authors', 'people', 'host', 'credits', 'أشخاص'}, ['book-title'] = {'عنوان الكتاب', 'book-title', 'booktitle', 'عنوان المؤتمر'}, ['cartography'] = 'cartography', ['chapter'] = {'الفصل', 'chapter', 'contribution', 'entry', 'article', 'section'}, ['chapter-format'] = {'صيغة-الفصل', 'صيغة الفصل', 'تنسيق الفصل', 'chapter-format', 'contribution-format', 'entry-format', 'article-format', 'section-format'}, ['chapter-url'] = {'مسار-الفصل', 'مسار الفصل', 'chapter-url', 'contribution-url', 'entry-url', 'article-url', 'section-url'}, -- Used by InternetArchiveBot ['chapter-url-access'] = {'chapter-url-access', 'contribution-url-access', 'entry-url-access', 'article-url-access', 'section-url-access'}, -- Used by InternetArchiveBot ['class'] = {'صنف', 'class'}, -- cite arxiv and arxiv identifier ['collaboration'] = 'collaboration', ['conference'] = {'اسم-المؤتمر', 'اسم المؤتمر', 'conference'}, ['conference-format'] = 'conference-format', ['conference-url'] = {'مسار-المؤتمر', 'مسار المؤتمر', 'conference-url'}, -- Used by InternetArchiveBot ['date'] = {'تاريخ', 'التاريخ', 'date', 'air-date', 'airdate'}, ['degree'] = {'الدرجة', 'degree'}, ['df'] = 'df', ['display-authors'] = {'إظهار-المؤلفين', 'إظهار المؤلفين', 'display-authors', 'display-subjects'}, ['display-contributors'] = 'display-contributors', ['display-editors'] = {'إظهار-المحررين', 'إظهار المحررين', 'display-editors'}, ['display-interviewers'] = 'display-interviewers', ['display-translators'] = 'display-translators', ['docket'] = 'docket', ['doi-broken-date'] = 'doi-broken-date', ['edition'] = {'طبعة', 'الإصدار', 'الاصدار', 'إصدار', 'اصدار', 'الطبعة', 'رقم الطبعة', 'edition'}, ['pmc-embargo-date'] = 'pmc-embargo-date', ['encyclopedia'] = {'موسوعة', 'encyclopedia', 'encyclopaedia', 'اسم المعجم', 'dictionary', 'اسم الموسوعة'}, -- cite encyclopedia only ['episode'] = {'الحلقة', 'episode'}, -- cite serial only TODO: make available to cite episode? ['format'] = {'صيغة', 'التنسيق', 'format', 'تنسيق', 'الصيغة'}, ['hijri-date'] = {'التاريخ الهجري', 'تاريخ هجري', 'hijri-date'}, ['id'] = {'id', 'ID', 'المعرف'}, ['inset'] = {'inset', 'مجموعة'}, ['issue'] = {'العدد', 'issue', 'number'}, ['language'] = {'لغة', 'اللغة', 'language', 'lang'}, ['mailing-list'] = {'القائمة البريدية', 'mailing-list'}, -- cite mailing list only ['map'] = {'الخريطة', 'map'}, -- cite map only ['map-format'] = {'صيغة الخريطة', 'map-format'}, -- cite map only ['map-url'] = {'مسار الخريطة', 'map-url'}, -- cite map only -- Used by InternetArchiveBot ['map-url-access'] = 'map-url-access', -- cite map only -- Used by InternetArchiveBot ['minutes'] = {'دقيقة', 'minutes'}, ['mode'] = 'mode', ['name-list-style'] = 'name-list-style', ['network'] = {'الشبكة', 'network'}, ['newsgroup'] = {'اسم المجموعة', 'newsgroup'}, -- cite newsgroup only ['nopp'] = {'no-pp', 'nopp'}, ['no-tracking'] = {'no-tracking', 'template-doc-demo'}, ['number'] = 'number', -- this case only for cite techreport ['orig-date'] = {'orig-date', 'orig-year', 'origyear', 'سنة النشر الأصلية'}, ['others'] = {'آخرون','others', 'المحاور', 'المحاورون', 'المحقق'}, ['page'] = {'صفحة', 'p', 'الصفحة', 'page', 'الصفحة', 'رقم الصفحة', 'رقم صفحة','ص'}, -- Used by InternetArchiveBot ['pages'] = {'صفحات', 'الصفحات', 'pp', 'أرقام الصفحات', 'أرقم صفحات', 'pages'}, -- Used by InternetArchiveBot ['journal'] = { 'صحيفة', 'journal', 'دورية محكمة', 'مجلة', 'magazine', 'اسم المجلة', 'newspaper', 'جريدة', 'اسم الصحيفة', 'دورية', 'periodical', 'موقع', 'website', 'الموقع', 'عمل', 'work', 'العمل', 'من عمل', }, ['place'] = { 'مكان', 'place', 'المكان', 'مقر', 'المقر', 'location'}, ['postscript'] = 'postscript', ['publication-date'] = {'تاريخ-النشر', 'تاريخ النشر', 'publication-date'}, ['publication-place'] = {'مكان-النشر', 'مكان النشر', 'publication-place'}, ['publisher'] = {'ناشر', 'publisher', 'الناشر', 'institution', 'مصدر', 'الموزع', 'المصدر', 'المؤسسة'}, ['quote'] = {'اقتباس', 'quote', 'quotation'}, ['quote-page'] = 'quote-page', ['quote-pages'] = 'quote-pages', ['ref'] = {'مرجع', 'ref'}, ['scale'] = {'المقياس', 'scale'}, ['script-chapter'] = {'script-chapter', 'script-contribution', 'script-entry', 'script-article', 'script-section'}, ['script-encyclopedia'] = {'script-encyclopedia', 'script-encyclopaedia'}, -- cite encyclopedia only ['script-map'] = 'script-map', ['script-journal'] = {'script-journal', 'script-magazine', 'script-newspaper', 'script-periodical', 'script-website', 'script-work'}, ['script-quote'] = 'script-quote', ['script-title'] = 'script-title', -- Used by InternetArchiveBot ['season'] = {'الموسم', 'season'}, ['sections'] = {'الأقسام', 'sections'}, -- cite map only ['series'] = {'سلسلة', 'series', 'version'}, ['series-link'] = {'وصلة-سلسلة', 'وصلة سلسلة', 'series-link', 'مسار المسلسل'}, ['series-number'] = {'رقم-سلسلة', 'رقم سلسلة', 'series-number', 'series-no'}, ['sheet'] = {'ورقة', 'sheet'}, -- cite map only ['sheets'] = {'أوراق', 'sheets'}, -- cite map only ['station'] = {'محطة', 'station'}, ['time'] = {'الوقت', 'time'}, ['time-caption'] = 'time-caption', ['title'] = {'عنوان', 'title', 'العنوان'}, ['title-link'] = {'وصلة-العنوان', 'وصلة العنوان', 'title-link', 'episode-link', 'وصلة الحلقة'}, ['title-note'] = {'title-note', 'department'}, ['type'] = {'النوع', 'type', 'medium'}, ['trans-chapter'] = {'trans-article', 'trans-chapter', 'trans-contribution', 'trans-entry', 'trans-section'}, ['transcript'] = 'transcript', ['transcript-format'] = 'transcript-format', ['transcript-url'] = 'transcript-url', -- Used by InternetArchiveBot ['trans-encyclopedia'] = {'trans-encyclopedia', 'trans-encyclopaedia'}, -- cite encyclopedia only ['trans-map'] = 'trans-map', -- cite map only ['trans-journal'] = {'trans-journal', 'trans-magazine', 'trans-newspaper', 'trans-periodical', 'trans-website', 'trans-work'}, ['trans-quote'] = 'trans-quote', ['trans-title'] = {'عنوان مترجم', 'العنوان بالعربي', 'العنوان الأجنبي', 'عنوان أجنبي', 'trans-title', 'العنوان المترجم'}, -- Used by InternetArchiveBot ['url'] = {'مسار', 'المسار','وصلة', 'url', 'URL'}, -- Used by InternetArchiveBot ['url-access'] = {'url-access', 'التسجيل'}, -- Used by InternetArchiveBot ['url-status'] = {'url-status','حالة المسار'}, -- Used by InternetArchiveBot ['vauthors'] = {'vauthors', 'عدة مؤلفين'}, ['veditors'] = {'veditors', 'عدة محررين' }, ['via'] = {'عبر', 'via'}, ['volume'] = {'المجلد', 'volume', 'الجزء', 'ج'}, ['wikidatacite'] = 'wikidatacite', ['year'] = {'سنة', 'year', 'السنة'}, } local i18n_t = { ["ar"] = { illustrator = "رسم", composer = "تلحين", animator = "رسم الرسوم المتحركة", director = "إخراج", screenwriter = "سيناريو", signatory = "توقيع", presenter = "تقديم", performer = "أداء", annotator = "تحقيق", reviewer = "مراجعة", unknown = "مجهول", supervisor = "إشراف", ["unknown-publication-date"] = '<abbr class="abbr" title="دون تاريخ">د.ت.</abbr>', ["unknown-publisher"] = '<abbr class="abbr" title="دون ناشر">د.ن.</abbr>', wikidata = "ويكي بيانات" }, ["cite_q"] = "{{استشهاد بويكي بيانات|", ["erratum"] = "(erratum)", ["unknown-author"] = { ar = "غير معروف", en = "Anonymous", fr = "Aanonyme", de = "Anonymus", es = "Anónimo" }, ["wdq"] = "[[ويكي بيانات|QID]]", -- go through "WDQ (identifier)" redirect to reduce clutter in "What links here" and improve reverse lookup. Keep in sync with {{QID}}. ["wikisource"] = "arwikisource", ["errors"] = { ["local-article-not-found"] = "المقال المحلي غير موجود.", ["no-label-or-title"] = "لا عنون أو تسمية: ", }, -- Next Line Edited ["unknown-author-trackingcat"] = "", -- [[تصنيف:Cite Q - author unknown]] ["months"] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }, ["ordinal"] = { [1] = "st", [2] = "nd", [3] = "rd", ["default"] = "th" }, ["trackingcats"] = { ["erratum"] = "[[تصنيف:استشهاد بويكي بيانات:الاستشهاد يعمل مع خطأ]]", ["missing-wikidata"] = "[[تصنيف:مقالات مع بيانات ويكي بيانات نقاصة]]", -- TODO: point to a {{cite q}}-specific category; this one is specific to Module:WikidataIB ['no-label-or-title'] = '[[تصنيف:استشهاد بويكي بيانات:يفتقر إلى عنوان أو تسمية]]', ["retracted"] = "[[تصنيف:الاستشهاد بويكي بيانات: الاستشهاد بعمل مسحوب]]<!-- retracted -->", ["replaced"] = "[[تصنيف:الاستشهاد بويكي بيانات: الاستشهاد بعمل مستبدل]]<!-- replaced -->", ["unknown-author"] = "", -- [[Category:Cite Q - author unknown]] removed as misplaced; someone is welcome to restore it if it is placed outside of the template parameter value ["unknown-template"] = "[[تصنيف:الاستشهاد بويكي بيانات:قالب مجهول]]", }, } local rejected_t = { sources = { Q465 = true, Q15241312 = true, Q52 = true }, properties = { "P1800", "P1566", "P21"}, instances = { Q5 = true, -- Human is not a direct reference Q184188 = true, Q1250464 = true, -- inatance of refference DBs Q8513 = true, Q17152639 = true, Q7094076 = true, Q5535082 = true, Q856638= true, Q1982918 = true, Q36524 = true, Q36218176 = true, Q526334 = true, Q5227411 = true } } -- Table of simple properties that can be fetched in roughly the same way: -- id = PXXX -- maxvals = maximum number of multiple values (0 for all) -- linked = "no" suppresses linking -- populate_from_journal = true/false determines whether to look in a journal where the source is published -- rank = "best", "preferred", normal, etc. determines how Wikidata ranks are treated -- others = true - the value for the property goes to "others" section local simple_properties_t = { -- Next Line Edited publisher = {id = "P123", maxvals = 3}, oclc = {id = "P243", maxvals = 1}, ['publication-place'] = {id = "P291", maxvals = 0, linked = false}, -- publication place (don't put into |place=; is treated specially in {{citation}} if both are given) doi = {id = "P356", maxvals = 1}, -- take care of |doi-broken-date= (WD "reason for deprecation"/"stated as") and |doi-access= (WD "access status")? issue = {id = "P433", maxvals = 0, populate_from_journal = true}, -- distinguish from |number= ("P1545"?) if both are given (still blocked by {{citation}}, but will be supported in the future) pmid = {id = "P698", maxvals = 1}, -- gbooks = {id = "P675", maxvals = 1}, -- to be added to {{citation}} -- ia = {id = "P724", maxvals = 1}, -- to be added to {{citation}} arxiv = {id = "P818", maxvals = 1}, bibcode = {id = "P819", maxvals = 1}, -- take care of |bibcode-access=? jstor = {id = "P888", maxvals = 1}, -- take care of |jstor-access=? mr = {id = "P889", maxvals = 1}, rfc = {id = "P892", maxvals = 1}, zbl = {id = "P894", maxvals = 1}, ssrn = {id = "P893", maxvals = 1}, place = {id = "P1071", maxvals = 0, linked = false}, -- written-at place -- ['total-pages'] = {id = "P1104", maxvals = 0, linked = 'no'}, -- to be added to {{citation}} / COinS &rft.tpages= -- coden = {id = "P1159", maxvals = 1}, -- to be added to {{citation}} / COinS &rft.coden= s2cid = {id = "P8299", maxvals = 1}, -- take care of |s2cid-access=? pmc = {id = "P932", maxvals = 1}, -- take care of |pmc-embargo-date= (WD "reason for deprecation")? lccn = {id = "P1144", maxvals = 1}, hdl = {id = "P1184", maxvals = 1}, -- take care of |hdl-access=? ismn = {id = "P1208", maxvals = 1}, journal = {id = "P1433", maxvals = 1}, citeseerx = {id = "P3784", maxvals = 1}, osti = {id = "P3894", maxvals = 1}, -- take care of |osti-access=? biorxiv = {id = "P3951", maxvals = 1}, asin = {id = "P5749", maxvals = 1}, -- What about |asin-tld=? (WD examples resolve to .com at present, but may change) -- ['catalog-number'] = {id = "P528", maxvals = 0}, -- to be added to {{citation}} / COinS &rft.artnum= isbn = {id = "P212", maxvals = 1, populate_from_journal = true}, -- ISBN 13 issn = {id = "P236", maxvals = 1, populate_from_journal = true}, -- distinguish from |eissn= for electronic issues? -- jfm = {id = "P?", maxvals = 1}, -- Jahrbuch über die Fortschritte der Mathematik (not Zbl) -- sbn = {id = "P?", maxvals = 1}, -- Standard Book Number (predecessor of ISBN, not ICCU) -- message-id = {id = "P?", maxvals = 1}, -- Usenet message ID chapter = {id = "P792", maxvals = 1, no_vol_qual=true}, ['publication-date'] = {id = "P577", maxvals = 1, populate_from_journal = true}, -- publication date (don't use |date=; is treated specially in {{citation}} if both are given.) series = {id = "P179", maxvals = 1, populate_from_journal = true, qual = "P1545"}, version = {id = "P348", maxvals = 0}, edition = {id = "P393", maxvals = 0}, volume = {id = "P478", maxvals = 0, populate_from_journal = true, no_vol_qual=true}, -- part = {id = "P1545"?, maxvals = 0}, -- to be added to {{citation}} / COinS &rft.part= title = {id = "P1476", rank="p n"}, -- url = {id = "P953", maxvals = 1}, -- deal with this along with archive-url pages = {id = "P304", maxvals = 0, populate_from_journal = true, no_vol_qual=true}, at = {id = "P958", maxvals = 0, populate_from_journal = true, no_vol_qual=true}, -- also incorporate lines (P7421) and columns (P3903) into this (cite map also supports |section=) -- sheets = {id = "P7416", maxvals = 0, populate_from_journal = true}, -- interviewer = {id = "P?", maxvals = 0}, -- does **not** go to "others" section! Multiple interviewers should be n-enumerated illustrator = {id = "P110", maxvals = 10, others = true}, -- goes to "others" section -- foreword and afterword, when contributions to another author's work, are contributions so belong in |contribution=; -- the writer's name goes in |contributor=; requires |title= and |author= -- However, this might need to add support for multiple contributors and their roles to {{citation}}, see Help_talk:Citation_Style_1#Others -- foreword = {id = "P2679", maxvals = 10, others = true}, -- goes to "others" section -- afterword = {id = "P2680", maxvals = 10, others = true}, -- goes to "others" section composer = {id = "P86", maxvals = 10, others = true}, -- goes to "others" section animator = {id = "P6942", maxvals = 10, others = true}, -- goes to "others" section director = {id = "P57", maxvals = 10, others = true}, -- goes to "others" section screenwriter = {id = "P58", maxvals = 10, others = true}, -- goes to "others" section signatory = {id = "P1891", maxvals = 10, others = true}, -- goes to "others" section presenter = {id = "P371", maxvals = 10, others = true}, -- goes to "others" section performer = {id = "P175", maxvals = 10, others = true}, -- goes to "others" section -- next 2 lines added for Arabic Wikipedia annotator = {id ="P11105", maxvals = 10, others = true}, -- goes to "others" section reviewer = {id ="P4032", maxvals = 10, others = true}, -- goes to "others" section supervisor = {id ="P7604", maxvals = 3, others = true}, -- goes to "others" section ['hijri-date'] = {id = "P577", maxvals = 3, hijri=true}, } local used_args_t = {accessdate=true, language=true, mode=true, ol=true, other=true, ['display-authors']=true, ['display-editors']=true, ['archive-url']=true, ['archive-date']=true, url=true, title=true, page=true, pages = true, volume=true} -- all_used_properties local used_properties_t = { P1071 = {arg= "place", maxvals = 0, linked = false}, -- written-at place P110 = {arg= "illustrator", maxvals = 10, others = true}, -- goes to "others" section P11105 = {arg= "annotator", maxvals = 10, others = true}, -- goes to "others" section P1144 = {arg= "lccn", maxvals = 1}, P1184 = {arg= "hdl", maxvals = 1}, -- take care of |hdl-access=? P1208 = {arg= "ismn", maxvals = 1}, P123 = {arg= "publisher", maxvals = 3}, P1433 = {arg= "journal", maxvals = 1}, P1476 = {arg= "title", rank="p n"}, P1680 = true, P175 = {arg= "performer", maxvals = 10, others = true}, -- goes to "others" section P179 = {arg= "series", maxvals = 1, populate_from_journal = true}, P1891 = {arg= "signatory", maxvals = 10, others = true}, -- goes to "others" section P1932 = true, P2093 = true, -- author string P212 = {arg= "isbn", maxvals = 1, populate_from_journal = true}, -- ISBN 13 P236 = {arg= "issn", maxvals = 1, populate_from_journal = true}, -- distinguish from |eissn= for electronic issues? P243 = {arg= "oclc", maxvals = 1}, P2699 = true, P291 = {arg= "publication-place", maxvals = 0, linked = false}, -- publication place (don't put into |place=; is treated specially in {{citation}} if both are given) P304 = {arg= "pages", maxvals = 0, populate_from_journal = true}, P348 = {arg= "version", maxvals = 0}, P356 = {arg= "doi", maxvals = 1}, -- take care of |doi-broken-date= (WD "reason for deprecation"/"stated as") and |doi-access= (WD "access status")? P371 = {arg= "presenter", maxvals = 10, others = true}, -- goes to "others" section P3784 = {arg= "citeseerx", maxvals = 1}, P3894 = {arg= "osti", maxvals = 1}, -- take care of |osti-access=? P393 = {arg= "edition", maxvals = 0}, P3951 = {arg= "biorxiv", maxvals = 1}, P4032 = {arg= "reviewer", maxvals = 10, others = true}, -- goes to "others" section P407 = true, P433 = {arg= "issue", maxvals = 0, populate_from_journal = true}, -- distinguish from |number= ("P1545"?) if both are given (still blocked by {{citation}}, but will be supported in the future) P478 = {arg= "volume", maxvals = 0, populate_from_journal = true}, P50 = true, -- author P57 = {arg= "director", maxvals = 10, others = true}, -- goes to "others" section P5749 = {arg= "asin", maxvals = 1}, -- What about |asin-tld=? (WD examples resolve to .com at present, but may change) P5769 = true, --editor P577 = {arg= "publication-date", maxvals = 1, populate_from_journal = true}, -- publication date (don't use |date=; is treated specially in {{citation}} if both are given.) P58 = {arg= "screenwriter", maxvals = 10, others = true}, -- goes to "others" section P655 = true, P6942 = {arg= "animator", maxvals = 10, others = true}, -- goes to "others" section P698 = {arg= "pmid", maxvals = 1}, P7604 = {arg ="supervisor", maxvals = 3, others = true}, -- goes to "others" section P792 = {arg= "chapter", maxvals = 1}, P818 = {arg= "arxiv", maxvals = 1}, P819 = {arg= "bibcode", maxvals = 1}, -- take care of |bibcode-access=? P8299 = {arg= "s2cid", maxvals = 1}, -- take care of |s2cid-access=? P856 = true, P86 = {arg= "composer", maxvals = 10, others = true}, -- goes to "others" section P888 = {arg= "jstor", maxvals = 1}, -- take care of |jstor-access=? P889 = {arg= "mr", maxvals = 1}, P892 = {arg= "rfc", maxvals = 1}, P893 = {arg= "ssrn", maxvals = 1}, P894 = {arg= "zbl", maxvals = 1}, P932 = {arg= "pmc", maxvals = 1}, -- take care of |pmc-embargo-date= (WD "reason for deprecation")? P953 = true, P958 = {arg= "at", maxvals = 0, populate_from_journal = true}, -- also incorporate lines (P7421) and columns (P3903) into this (cite map also supports |section=) P98 = true, P854 = true, } return { aliases_t = aliases_t, i18n_t = i18n_t, rejected_t = rejected_t, simple_properties_t = simple_properties_t, used_args_t = used_args_t, used_properties_t = used_properties_t, config_t = config_t } 7d11rvvt8t31dtznqotdcbudwntazk8 ذَحَا 0 240416 1097324 2026-07-23T14:43:00Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097324 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1547033}} === المعاني === '''ذَحَا''' {{فتح}} {{معجمية|L1547033|معاني}} === النطق === * {{أصد-عر|ذَحَا}} {{-}} === التصريفات === {{تصريف|جذر=ذحو|وزن=فعَل يفعَل}} === المراجع === {{مراجع}} rm89otwkdl60kr900ko502qciethej4 أَذْرَأَ 0 240417 1097325 2026-07-23T14:45:33Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097325 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535700}} === المعاني === '''أَذْرَأَ''' {{أفعل}} {{معجمية|L1535700|معاني}} === النطق === * {{أصد-عر|أَذْرَأَ}} {{-}} === التصريفات === {{تصريف|جذر=ذرأ|وزن=أفعل}} === المراجع === {{مراجع}} edh5mrzc7032pc17v3i4ebql1m7n961 ذَارَعَ 0 240418 1097326 2026-07-23T14:47:06Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097326 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535713}} === المعاني === '''ذَارَعَ''' {{فاعل}} {{معجمية|L1535713|معاني}} === النطق === * {{أصد-عر|ذَارَعَ}} {{-}} === التصريفات === {{تصريف|جذر=ذرع|وزن=فاعل}} === المراجع === {{مراجع}} 2uxmiu0odiqdo71lnts8iw50uz26ofn اِسْتَذْرَفَ 0 240419 1097327 2026-07-23T14:48:57Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097327 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535716}} === المعاني === '''اِسْتَذْرَفَ''' {{استفعل}} {{معجمية|L1535716|معاني}} === النطق === * {{أصد-عر|اِسْتَذْرَفَ}} {{-}} === التصريفات === {{تصريف|جذر=ذرف|وزن=استفعل}} === المراجع === {{مراجع}} t3vigsfo5d264u2u1swii63g6k4yifx ذَلَجَ 0 240420 1097328 2026-07-23T14:50:23Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097328 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1544816}} === المعاني === '''ذَلَجَ''' {{نصر}} {{معجمية|L1544816|معاني}} === النطق === * {{أصد-عر|ذَلَجَ}} {{-}} === التصريفات === {{تصريف|جذر=ذلج|وزن=فعَل يفعُل}} === المراجع === {{مراجع}} 1p5lv9ic7wfn0di5n72z0tyoi5jvyzg اِسْتَذْلَقَ 0 240421 1097329 2026-07-23T14:52:45Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097329 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535756}} === المعاني === '''اِسْتَذْلَقَ''' {{استفعل}} {{معجمية|L1535756|معاني}} === النطق === * {{أصد-عر|اِسْتَذْلَقَ}} {{-}} === التصريفات === {{تصريف|جذر=ذلق|وزن=استفعل}} === المراجع === {{مراجع}} 8qi2dkdkk0eky4oy9algt72jsk4yjx2 اِنْذَلَقَ 0 240422 1097330 2026-07-23T14:54:04Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097330 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535757}} === المعاني === '''اِنْذَلَقَ''' {{انفعل}} {{معجمية|L1535757|معاني}} === النطق === * {{أصد-عر|اِنْذَلَقَ}} {{-}} === التصريفات === {{تصريف|جذر=ذلق|وزن=انفعل}} === المراجع === {{مراجع}} 0hnalihjdtxz3gprv33mddjxwitqz7l اِسْتَذْرَى 0 240423 1097331 2026-07-23T14:56:17Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097331 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535726}} === المعاني === '''اِسْتَذْرَى''' {{استفعل}} {{معجمية|L1535726|معاني}} === النطق === * {{أصد-عر|اِسْتَذْرَى}} {{-}} === التصريفات === {{تصريف|جذر=ذرو|وزن=استفعل}} === المراجع === {{مراجع}} 3oppr0i17d3xdy9g0r1vl6htrwe7ow6 ذَفْذَفَ 0 240424 1097332 2026-07-23T14:58:39Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097332 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535739}} === المعاني === '''ذَفْذَفَ''' {{فعلل}} {{معجمية|L1535739|معاني}} === النطق === * {{أصد-عر|ذَفْذَفَ}} {{-}} === التصريفات === {{تصريف|جذر=ذفذف|وزن=فعلل}} === المراجع === {{مراجع}} nra30lnj0w1wah72yapc0q25ip04p29 اِسْتَذْفَرَ 0 240425 1097333 2026-07-23T15:00:28Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097333 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535740}} === المعاني === '''اِسْتَذْفَرَ''' {{استفعل}} {{معجمية|L1535740|معاني}} === النطق === * {{أصد-عر|اِسْتَذْفَرَ}} {{-}} === التصريفات === {{تصريف|جذر=ذفر|وزن=استفعل}} === المراجع === {{مراجع}} q61cdyyenfdxzpg3orqrs7gtkw3qjaf جَبِئَ 0 240426 1097334 2026-07-23T15:03:25Z أبو هشام 20788 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097334 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1498074}} === المعاني === '''جَبِئَ''' {{سمع}} {{معجمية|L1498074|معاني}} === النطق === * {{أصد-عر|جَبِئَ}} {{-}} === التصريفات === {{تصريف|جذر=جبأ|وزن=فعِل يفعَل}} === المراجع === {{مراجع}} 716zcb55ytfznpiz1udkkwyawbot96m تَذَقَّحَ 0 240427 1097335 2026-07-23T15:05:25Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097335 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535746}} === المعاني === '''تَذَقَّحَ''' {{تفعّل}} {{معجمية|L1535746|معاني}} === النطق === * {{أصد-عر|تَذَقَّحَ}} {{-}} === التصريفات === {{تصريف|جذر=ذقح|وزن=تفعّل}} === المراجع === {{مراجع}} cvjphv21qtqxqriv3qt4t0o36o61oq0 ذَرَقَ 0 240428 1097336 2026-07-23T15:12:37Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097336 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1480409}} === المعاني === '''ذَرَقَ''' {{نصر}} {{معجمية|L1480409|معاني}} === النطق === * {{أصد-عر|ذَرَقَ}} {{-}} === التصريفات === {{تصريف|جذر=ذرق|وزن=فعَل يفعُل}} === المراجع === {{مراجع}} sg9493kxj5chqwyfc9xvpv73uddcw2z اِذْلَوْلَى 0 240429 1097337 2026-07-23T15:17:11Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097337 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1486201}} === المعاني === '''اِذْلَوْلَى''' {{افعوعل}} {{معجمية|L1486201|معاني}} === النطق === * {{أصد-عر|اِذْلَوْلَى}} {{-}} === التصريفات === {{تصريف|جذر=ذلي|وزن=افعوعل}} === المراجع === {{مراجع}} l4y2d9aqnt6zwbihf907k8jdgick4gr تَحَتْحَتَ 0 240430 1097338 2026-07-23T15:29:57Z أبو هشام 20788 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097338 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1534201}} === المعاني === '''تَحَتْحَتَ''' {{تفعلل}} {{معجمية|L1534201|معاني}} === النطق === * {{أصد-عر|تَحَتْحَتَ}} {{-}} === التصريفات === {{تصريف|جذر=حتحت|وزن=تفعلل}} === المراجع === {{مراجع}} ago48scqbynbqbto8oarmc0o78c2a79 تَدَاءَكَ 0 240431 1097339 2026-07-23T17:11:15Z أبو هشام 20788 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097339 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535260}} === المعاني === '''تَدَاءَكَ''' {{تفاعل}} {{معجمية|L1535260|معاني}} === النطق === * {{أصد-عر|تَدَاءَكَ}} {{-}} === التصريفات === {{تصريف|جذر=دأك|وزن=تفاعل}} === المراجع === {{مراجع}} gafy8k6ma5jwkz004r4dakkmq44od6c اِنْدَجَرَ 0 240432 1097340 2026-07-23T17:16:11Z أبو هشام 20788 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097340 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535289}} === المعاني === '''اِنْدَجَرَ''' {{انفعل}} {{معجمية|L1535289|معاني}} === النطق === * {{أصد-عر|اِنْدَجَرَ}} {{-}} === التصريفات === {{تصريف|جذر=دجر|وزن=انفعل}} === المراجع === {{مراجع}} oustxjttn2k93h3mj748761daa5lz6u اِنْدَحَضَ 0 240433 1097341 2026-07-23T17:19:55Z أبو هشام 20788 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097341 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535302}} === المعاني === '''اِنْدَحَضَ''' {{انفعل}} {{معجمية|L1535302|معاني}} === النطق === * {{أصد-عر|اِنْدَحَضَ}} {{-}} === التصريفات === {{تصريف|جذر=دحض|وزن=انفعل}} === المراجع === {{مراجع}} 0jstgfcm14pj5tzywklfcdnisiloy7x تَدَرْبَسَ 0 240434 1097342 2026-07-23T17:21:53Z أبو هشام 20788 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097342 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535343}} === المعاني === '''تَدَرْبَسَ''' {{تفعلل}} {{معجمية|L1535343|معاني}} === النطق === * {{أصد-عر|تَدَرْبَسَ}} {{-}} === التصريفات === {{تصريف|جذر=دربس|وزن=تفعلل}} === المراجع === {{مراجع}} fglf4l0h8pj9v8gf4firxelhjnok37w دَرْبَصَ 0 240435 1097343 2026-07-23T17:25:04Z أبو هشام 20788 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097343 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535344}} === المعاني === '''دَرْبَصَ''' {{فعلل}} {{معجمية|L1535344|معاني}} === النطق === * {{أصد-عر|دَرْبَصَ}} {{-}} === التصريفات === {{تصريف|جذر=دربص|وزن=فعلل}} === المراجع === {{مراجع}} 551smoz1pd0cnjwp24avidr10hzij6a دَرْجَبَ 0 240436 1097344 2026-07-23T17:26:19Z أبو هشام 20788 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097344 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535349}} === المعاني === '''دَرْجَبَ''' {{فعلل}} {{معجمية|L1535349|معاني}} === النطق === * {{أصد-عر|دَرْجَبَ}} {{-}} === التصريفات === {{تصريف|جذر=درجب|وزن=فعلل}} === المراجع === {{مراجع}} 5xpdy25xdcv5wfldos9viw8vrrd4vqx دَرْجَلَ 0 240437 1097345 2026-07-23T17:28:54Z أبو هشام 20788 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097345 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535350}} === المعاني === '''دَرْجَلَ''' {{فعلل}} {{معجمية|L1535350|معاني}} === النطق === * {{أصد-عر|دَرْجَلَ}} {{-}} === التصريفات === {{تصريف|جذر=درجل|وزن=فعلل}} === المراجع === {{مراجع}} 1swwszrumdi6z4nuuap04mdb3rg7d52 أَحْبَى 0 240438 1097346 2026-07-23T17:41:32Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097346 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1534195}} === المعاني === '''أَحْبَى''' {{أفعل}} {{معجمية|L1534195|معاني}} === النطق === * {{أصد-عر|أَحْبَى}} {{-}} === التصريفات === {{تصريف|جذر=حبو|وزن=أفعل}} === المراجع === {{مراجع}} ednvapadxhjawdqrmgf7r3gyuirc2j1 تَحَبَّى 0 240439 1097347 2026-07-23T17:43:03Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097347 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1534196}} === المعاني === '''تَحَبَّى''' {{تفعّل}} {{معجمية|L1534196|معاني}} === النطق === * {{أصد-عر|تَحَبَّى}} {{-}} === التصريفات === {{تصريف|جذر=حبو|وزن=تفعّل}} === المراجع === {{مراجع}} mir8n9bamfj0k39k7m175uvbuheb5s5 حَابَى 0 240440 1097348 2026-07-23T17:43:42Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097348 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1475950}} === المعاني === '''حَابَى''' {{فاعل}} {{معجمية|L1475950|معاني}} === النطق === * {{أصد-عر|حَابَى}} {{-}} === التصريفات === {{تصريف|جذر=حبو|وزن=فاعل}} === المراجع === {{مراجع}} kk3i23ut952s90p56nsfp0fld0mdahq حَتَلَ 0 240441 1097349 2026-07-23T17:45:45Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097349 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1498107}} === المعاني === '''حَتَلَ''' {{نصر}} {{معجمية|L1498107|معاني}} === النطق === * {{أصد-عر|حَتَلَ}} {{-}} === التصريفات === {{تصريف|جذر=حتل|وزن=فعَل يفعُل}} === المراجع === {{مراجع}} oduhq493ep995xglhxmifc0vlomvopo حَتِلَ 0 240442 1097350 2026-07-23T17:47:42Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097350 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1545855}} === المعاني === '''حَتِلَ''' {{سمع}} {{معجمية|L1545855|معاني}} === النطق === * {{أصد-عر|حَتِلَ}} {{-}} === التصريفات === {{تصريف|جذر=حتل|وزن=فعِل يفعَل}} === المراجع === {{مراجع}} r8e9xiw1jkpwha3p3w777vfz357f10k حَأْحَأَ 0 240443 1097351 2026-07-23T17:53:13Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097351 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1534165}} === المعاني === '''حَأْحَأَ''' {{فعلل}} {{معجمية|L1534165|معاني}} === النطق === * {{أصد-عر|حَأْحَأَ}} {{-}} === التصريفات === {{تصريف|جذر=حأحأ|وزن=فعلل}} === المراجع === {{مراجع}} qls7btvx9oxd8qxkp9jncd7zy75gal0 اِسْتَحَبَّ 0 240444 1097352 2026-07-23T17:54:14Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097352 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1483780}} === المعاني === '''اِسْتَحَبَّ''' {{استفعل}} {{معجمية|L1483780|معاني}} === النطق === * {{أصد-عر|اِسْتَحَبَّ}} {{-}} === التصريفات === {{تصريف|جذر=حبب|وزن=استفعل}} === المراجع === {{مراجع}} ohz8o9iu722qd15qhu33bwm6su6m7w0 تَحَابَّ 0 240445 1097353 2026-07-23T17:55:20Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097353 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1480342}} === المعاني === '''تَحَابَّ''' {{تفاعل}} {{معجمية|L1480342|معاني}} === النطق === * {{أصد-عر|تَحَابَّ}} {{-}} === التصريفات === {{تصريف|جذر=حبب|وزن=تفاعل}} === المراجع === {{مراجع}} d179rc1s0uj6ocb9bbep5sg8w032e4z اِسْتَبْسَلَ 0 240446 1097354 2026-07-23T17:57:52Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097354 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1496805}} === المعاني === '''اِسْتَبْسَلَ''' {{استفعل}} {{معجمية|L1496805|معاني}} === النطق === * {{أصد-عر|اِسْتَبْسَلَ}} {{-}} === التصريفات === {{تصريف|جذر=بسل|وزن=استفعل}} === المراجع === {{مراجع}} pdo5lbdjbrzwwgz8lswrrdwg37zvaoe اِبْتَسَمَ 0 240447 1097355 2026-07-23T17:59:41Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097355 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1477358}} === المعاني === '''اِبْتَسَمَ''' {{افتعل}} {{معجمية|L1477358|معاني}} === النطق === * {{أصد-عر|اِبْتَسَمَ}} {{-}} === التصريفات === {{تصريف|جذر=بسم|وزن=افتعل}} === المراجع === {{مراجع}} kapl2rofebgqvx1vj43gzq3fpgzf2kw دَرْشَقَ 0 240448 1097356 2026-07-23T18:57:27Z أبو هشام 20788 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097356 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535360}} === المعاني === '''دَرْشَقَ''' {{فعلل}} {{معجمية|L1535360|معاني}} === النطق === * {{أصد-عر|دَرْشَقَ}} {{-}} === التصريفات === {{تصريف|جذر=درشق|وزن=فعلل}} === المراجع === {{مراجع}} spn9ucjofepq6e9pdr192srafx21lvp دَرْفَلَ 0 240449 1097357 2026-07-23T18:58:30Z أبو هشام 20788 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097357 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535371}} === المعاني === '''دَرْفَلَ''' {{فعلل}} {{معجمية|L1535371|معاني}} === النطق === * {{أصد-عر|دَرْفَلَ}} {{-}} === التصريفات === {{تصريف|جذر=درفل|وزن=فعلل}} === المراجع === {{مراجع}} ng4uscf6m4qyr523hnlcdu2a48mte5c اِدْرَنْفَقَ 0 240450 1097358 2026-07-23T19:06:25Z أبو هشام 20788 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097358 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535370}} === المعاني === '''اِدْرَنْفَقَ''' {{افعنلل}} {{معجمية|L1535370|معاني}} === النطق === * {{أصد-عر|اِدْرَنْفَقَ}} {{-}} === التصريفات === {{تصريف|جذر=درفق|وزن=افعنلل}} === المراجع === {{مراجع}} r92794tdyygf3w7rr6ucss9d62g81h1 أَقْلَمَ 0 240451 1097365 2026-07-23T23:36:16Z ForzaGreen 28665 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097365 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1532689}} === المعاني === '''أَقْلَمَ''' {{فعلل}} {{معجمية|L1532689|معاني}} === النطق === * {{أصد-عر|أَقْلَمَ}} {{-}} === التصريفات === {{تصريف|جذر=أقلم|وزن=فعلل}} === المراجع === {{مراجع}} 9xqw4ks6zueh4fkyqurh7fwq615tk22 أَخْيَمَ 0 240452 1097367 2026-07-23T23:49:44Z ForzaGreen 28665 نقل ForzaGreen صفحة [[أَخْيَمَ]] إلى [[أَخَامَ]]: تصحيح صيغة أفعل من الأجوف اليائي 1097367 wikitext text/x-wiki #تحويل [[أَخَامَ]] nqsilzmu16w5gxouvchg3tlqtzawrgf اِخْتَلَجَ 0 240453 1097370 2026-07-24T06:45:59Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097370 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1486044}} === المعاني === '''اِخْتَلَجَ''' {{افتعل}} {{معجمية|L1486044|معاني}} === النطق === * {{أصد-عر|اِخْتَلَجَ}} {{-}} === التصريفات === {{تصريف|جذر=خلج|وزن=افتعل}} === المراجع === {{مراجع}} kd4vnhjr1cx9sz7xrqhqpf2v9m376q7 اِزْدَغَرَ 0 240454 1097371 2026-07-24T06:46:32Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097371 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1536524}} === المعاني === '''اِزْدَغَرَ''' {{افتعل}} {{معجمية|L1536524|معاني}} === النطق === * {{أصد-عر|اِزْدَغَرَ}} {{-}} === التصريفات === {{تصريف|جذر=زغر|وزن=افتعل}} === المراجع === {{مراجع}} 26a9w02t8h46d3z3ya126fs5aarzlqn تَدَلَّهَ 0 240455 1097372 2026-07-24T06:49:06Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097372 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1497285}} === المعاني === '''تَدَلَّهَ''' {{تفعّل}} {{معجمية|L1497285|معاني}} === النطق === * {{أصد-عر|تَدَلَّهَ}} {{-}} === التصريفات === {{تصريف|جذر=دله|وزن=تفعّل}} === المراجع === {{مراجع}} ltct76vjfg5h8xwektq9x35ou296a6m تَرَمَّى 0 240456 1097373 2026-07-24T06:50:12Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097373 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1536274}} === المعاني === '''تَرَمَّى''' {{تفعّل}} {{معجمية|L1536274|معاني}} === النطق === * {{أصد-عر|تَرَمَّى}} {{-}} === التصريفات === {{تصريف|جذر=رمي|وزن=تفعّل}} === المراجع === {{مراجع}} l5misbsru6iu3f0g1uyedfmfa6wm5zz اِحْتَلَمَ 0 240457 1097374 2026-07-24T06:51:25Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097374 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1476955}} === المعاني === '''اِحْتَلَمَ''' {{افتعل}} {{معجمية|L1476955|معاني}} === النطق === * {{أصد-عر|اِحْتَلَمَ}} {{-}} === التصريفات === {{تصريف|جذر=حلم|وزن=افتعل}} === المراجع === {{مراجع}} 1iq4lx741ic21wmqybp45jqt21xaw6v تَحَوَّى 0 240458 1097375 2026-07-24T06:52:19Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097375 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1480871}} === المعاني === '''تَحَوَّى''' {{تفعّل}} {{معجمية|L1480871|معاني}} === النطق === * {{أصد-عر|تَحَوَّى}} {{-}} === التصريفات === {{تصريف|جذر=حوي|وزن=تفعّل}} === المراجع === {{مراجع}} 2m1mn9xfzi611hok7oqk6clie8m5eir أَبَاثَ 0 240459 1097376 2026-07-24T06:53:37Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097376 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1533311}} === المعاني === '''أَبَاثَ''' {{أفعل}} {{معجمية|L1533311|معاني}} === النطق === * {{أصد-عر|أَبَاثَ}} {{-}} === التصريفات === {{تصريف|جذر=بوث|وزن=أفعل}} === المراجع === {{مراجع}} a7foc6lwnirukbwhmbd9bfey9wktvp5 دَعْمَظَ 0 240460 1097377 2026-07-24T06:54:12Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097377 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535432}} === المعاني === '''دَعْمَظَ''' {{فعلل}} {{معجمية|L1535432|معاني}} === النطق === * {{أصد-عر|دَعْمَظَ}} {{-}} === التصريفات === {{تصريف|جذر=دعمظ|وزن=فعلل}} === المراجع === {{مراجع}} ebgblfejsa1l3w7us8caxok5evm5boo اِبْتَرَضَ 0 240461 1097378 2026-07-24T06:54:57Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097378 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1532941}} === المعاني === '''اِبْتَرَضَ''' {{افتعل}} {{معجمية|L1532941|معاني}} === النطق === * {{أصد-عر|اِبْتَرَضَ}} {{-}} === التصريفات === {{تصريف|جذر=برض|وزن=افتعل}} === المراجع === {{مراجع}} kahadkgkujpwgl3xia2sibrxxiarirf اِدْبَسَّ 0 240462 1097379 2026-07-24T06:55:39Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097379 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1535272}} === المعاني === '''اِدْبَسَّ''' {{افعلّ}} {{معجمية|L1535272|معاني}} === النطق === * {{أصد-عر|اِدْبَسَّ}} {{-}} === التصريفات === {{تصريف|جذر=دبس|وزن=افعلّ}} === المراجع === {{مراجع}} ttf6pcnz0a0vp3gaavfz3jjc61a9ulg تَزَنْتَرَ 0 240463 1097380 2026-07-24T06:56:15Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097380 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1536626}} === المعاني === '''تَزَنْتَرَ''' {{تفعلل}} {{معجمية|L1536626|معاني}} === النطق === * {{أصد-عر|تَزَنْتَرَ}} {{-}} === التصريفات === {{تصريف|جذر=زنتر|وزن=تفعلل}} === المراجع === {{مراجع}} 0z49mimlkmj7v4s313k9mkmcdldse6t اِزْدَادَ 0 240464 1097381 2026-07-24T06:58:43Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097381 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1476086}} === المعاني === '''اِزْدَادَ''' {{افتعل}} {{معجمية|L1476086|معاني}} === النطق === * {{أصد-عر|اِزْدَادَ}} {{-}} === التصريفات === {{تصريف|جذر=زود|وزن=افتعل}} === المراجع === {{مراجع}} s1a22kbd5hqeigxhul9tl4dotayav94 سَقِمَ 0 240465 1097382 2026-07-24T07:05:45Z نور إسماعيل 37425 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097382 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1485072}} === المعاني === '''سَقِمَ''' {{سمع}} {{معجمية|L1485072|معاني}} === النطق === * {{أصد-عر|سَقِمَ}} {{-}} === التصريفات === {{تصريف|جذر=سقم|وزن=فعِل يفعَل}} === المراجع === {{مراجع}} ogag9pkrxp0p0cgm7uid93hebgtenst اِسْتَسْخَرَ 0 240466 1097383 2026-07-24T09:13:11Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097383 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1497540}} === المعاني === '''اِسْتَسْخَرَ''' {{استفعل}} {{معجمية|L1497540|معاني}} === النطق === * {{أصد-عر|اِسْتَسْخَرَ}} {{-}} === التصريفات === {{تصريف|جذر=سخر|وزن=استفعل}} === المراجع === {{مراجع}} fiwl840vwcg50fzbjve60qwzdbpxa6j تَسَخَّرَ 0 240467 1097384 2026-07-24T09:15:05Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097384 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1481132}} === المعاني === '''تَسَخَّرَ''' {{تفعّل}} {{معجمية|L1481132|معاني}} === النطق === * {{أصد-عر|تَسَخَّرَ}} {{-}} === التصريفات === {{تصريف|جذر=سخر|وزن=تفعّل}} === المراجع === {{مراجع}} hycrj6t7nbnjwlm8p0vf4h4ddfih6yp اِنْسَجَمَ 0 240468 1097385 2026-07-24T09:17:09Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097385 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1480816}} === المعاني === '''اِنْسَجَمَ''' {{انفعل}} {{معجمية|L1480816|معاني}} === النطق === * {{أصد-عر|اِنْسَجَمَ}} {{-}} === التصريفات === {{تصريف|جذر=سجم|وزن=انفعل}} === المراجع === {{مراجع}} cga611gv360px8ikbm79jppc3nbla3b سَجَّمَ 0 240469 1097387 2026-07-24T09:31:17Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097387 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1536797}} === المعاني === '''سَجَّمَ''' {{فعّل}} {{معجمية|L1536797|معاني}} === النطق === * {{أصد-عر|سَجَّمَ}} {{-}} === التصريفات === {{تصريف|جذر=سجم|وزن=فعّل}} === المراجع === {{مراجع}} 3u1nkr3smn5c7javaiwb3zl0clw2ht9 اِنْسَحَبَ 0 240470 1097388 2026-07-24T09:37:30Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097388 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1489723}} === المعاني === '''اِنْسَحَبَ''' {{انفعل}} {{معجمية|L1489723|معاني}} === النطق === * {{أصد-عر|اِنْسَحَبَ}} {{-}} === التصريفات === {{تصريف|جذر=سحب|وزن=انفعل}} === المراجع === {{مراجع}} eevon8lp8l57v2kjh2g5czqupflkgto تَسَحَّبَ 0 240471 1097389 2026-07-24T09:39:28Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097389 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1536805}} === المعاني === '''تَسَحَّبَ''' {{تفعّل}} {{معجمية|L1536805|معاني}} === النطق === * {{أصد-عر|تَسَحَّبَ}} {{-}} === التصريفات === {{تصريف|جذر=سحب|وزن=تفعّل}} === المراجع === {{مراجع}} nb0jqz43a9j76owh2bxdvgjuu1yh60f اِسْتَبَقَ 0 240472 1097390 2026-07-24T09:44:28Z إسلام 12622 إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool) 1097390 wikitext text/x-wiki == {{اللغة|عربية}} == {{صندوق معلومات فعل|L1480803}} === المعاني === '''اِسْتَبَقَ''' {{افتعل}} {{معجمية|L1480803|معاني}} === النطق === * {{أصد-عر|اِسْتَبَقَ}} {{-}} === التصريفات === {{تصريف|جذر=سبق|وزن=افتعل}} === المراجع === {{مراجع}} 0oqhbidohxftxv0yh4pqqe0re51ylrj