انتقل إلى المحتوى

وحدة:Wikidata2/time

من ويكيبيديا، الموسوعه الحره

يمكن إنشاء صفحة توثيق الوحدة فيوحدة:Wikidata2/time/شرح

localp={}
------------------------------------------------------------------------------
-- module local variables and functions

localwiki=
{
langcode=mw.language.getContentLanguage().code
}

-- internationalisation
locali18n=
{["errors"]={
["property-param-not-provided"]="Property parameter not provided.",
["entity-not-found"]="Entity not found.",
["unknown-claim-type"]="Unknown claim type.",
["unknown-snak-type"]="Unknown snak type.",
["unknown-datatype"]="Unknown datatype.",
["unknown-entity-type"]="Unknown entity type.",
["unknown-value-module"]="You must set both value-module and value-function parameters.",
["value-module-not-found"]="The module pointed by value-module not found.",
["value-function-not-found"]="The function pointed by value-function not found."
},
["datetime"]=
{
-- $1 is a placeholder for the actual number
[0]="$1 مليار سنة",--a الدقة:مليار سنة
[1]="$100 مليون سنة",--a الدقة: مئات من ملايين السنين
[2]="$10 مليون سنة",--a الدقة: عشرة ملايين سنة
[3]="$1 مليون سنة",--a الدقة: مليون سنة
[4]="$100,000 سنة",--a الدقة: مئات آلاف السنين
[5]="$10,000 سنة",--a الدقة: عشرة آلاف سنة
[6]="$1 ألفية",--a الدقة: ألفية
[7]="القرن $1",--a الدقة: قرن
[8]="العقد $1",--a الدقة: عقد
-- the following use the format of #time parser function
[9]="Y",-- الدقة: سنة,
[10]="F Y",-- الدقة: شهر
[11]="j F Y",-- الدقة: يوم
[12]="j F Y ga",-- الدقة: ساعة
[13]="j F Y g:ia",-- الدقة: دقائق
[14]="j F Y g:i:sa",-- الدقة: ثواني
["beforenow"]="$1 ق.م",-- how to format negative numbers for precisions 0 to 5
["afternow"]="$1",-- how to format positive numbers for precisions 0 to 5
["bc"]='$1 "ق.م" ',-- كيف طباعة السنوات السلبية
["ad"]="$1",-- كيف طباعة سنوات الإيجابية
-- the following are for function getDateValue()
["default-format"]="dmy",-- القيمة الافتراضية ل #3 (getDateValue)
["default-addon"]="ق.م",-- default value of the #4 (getDateValue)
["prefix-addon"]=false,-- set to true for languages put "BC" in front of the
-- datetime string; or the addon will be suffixed
["addon-sep"]="",-- separator between datetime string and addon (or inverse)
["format"]=-- options of the 3rd argument
{
["j F Y"]="j F Y",
["dmy"]="j F Y",
["dmY"]="dmY",
["j F"]="j F",
["longdate"]="j F Y",
["my"]="F Y",
["y"]="Y",
["Y"]="Y",
["F"]="F",
["n"]="n",
["m"]="F",
["j"]="j",
["d"]="j",
["ymd"]="Y-m-d",
["ym"]="Y-m"
}
},
["ordinal"]=
{
[1]="",--st
[2]="",--
[3]="",--rd
["default"]=""--
}
}
localcategorywikidatadata='[[تصنيف:صفحات بها بيانات ويكي بيانات]]';

-- this function needs to be internationalised along with the above:
-- we need three exceptions in English for 1st, 2nd, 3rd
-- takes cardinal numer as a numeric and returns the ordinal as a string
localfunctionmakeOrdinal(cardinal)
localordsuffix=i18n.ordinal.default
ifcardinal%10==1then
ordsuffix=i18n.ordinal[1]
elseifcardinal%10==2then
ordsuffix=i18n.ordinal[2]
elseifcardinal%10==3then
ordsuffix=i18n.ordinal[3]
end
returntostring(cardinal)..ordsuffix
end

localfunctionformatError(code)
return'<span class= "error" >'..(i18n.errors[code]orcode)..'</span>'
end

localfunctionparseDateValue(timestamp,date_format,date_addon)
localprefix_addon=i18n["datetime"]["prefix-addon"]
localaddon_sep=i18n["datetime"]["addon-sep"]
localaddon=""

-- check for negative date
ifstring.sub(timestamp,1,1)=='-'then
timestamp='+'..string.sub(timestamp,2)
addon=date_addon
end
localfunctiond(f)
localyear_suffix
localtstr=""
locallang_obj=mw.language.new(wiki.langcode)
localf_parts=mw.text.split(f,'Y',true)
foridx,f_partinpairs(f_parts)do
year_suffix=''
ifstring.match(f_part,"x[mijkot]$")then
-- for non-Gregorian year
f_part=f_part..'Y'
elseifidx<#f_partsthen
-- supress leading zeros in year
year_suffix=lang_obj:formatDate('Y',timestamp)
year_suffix=string.gsub(year_suffix,'^0+','',1)
end
tstr=tstr..lang_obj:formatDate(f_part,timestamp)..year_suffix
end
ifaddon~=""andprefix_addonthen
returnaddon..addon_sep..tstr
elseifaddon~=""then
returntstr..addon_sep..addon
else
returntstr
end
end
local_date_format=i18n["datetime"]["format"][date_format]
if_date_format~=nilthen
returnd(_date_format)
else
returnformatError("unknown-datetime-format")
end
end

-- This local function combines the year/month/day/BC/BCE handling of parseDateValue{}
-- with the millennium/century/decade handling of formatDate()
localfunctionparseDateFull(timestamp,precision,date_format,date_addon)
localprefix_addon=i18n["datetime"]["prefix-addon"]
localaddon_sep=i18n["datetime"]["addon-sep"]
localaddon=""

-- check for negative date
ifstring.sub(timestamp,1,1)=='-'then
timestamp='+'..string.sub(timestamp,2)
addon=date_addon
end
-- get the next four characters after the + (should be the year now in all cases)
-- ok, so this is dirty, but let's get it working first
localintyear=tonumber(string.sub(timestamp,2,5))
ifintyear==0andprecision<=9then
return""
end

-- precision is 10000 years or more
ifprecision<=5then
localfactor=10^((5-precision)+4)
localy2=math.ceil(math.abs(intyear)/factor)
ifprecision==2theny2=intyear/10end
ifprecision==3theny2=intyear/100end
localrelative=mw.ustring.gsub(i18n.datetime[precision],"$1",tostring(y2))
--mw.log( "وحدة:Wikidata2/time:".. i18n.datetime[precision].. "timestamp:".. timestamp.. "intyear:".. intyear )
ifaddon~=""then
-- negative date
relative=mw.ustring.gsub(i18n.datetime.beforenow,"$1",relative)
else
relative=mw.ustring.gsub(i18n.datetime.afternow,"$1",relative)
end
returnrelative
end

-- precision is decades (8), centuries (7) and millennia (6)
localera,card
ifprecision==6then
card=math.floor((intyear-1)/1000)+1
era=mw.ustring.gsub(i18n.datetime[6],"$1",makeOrdinal(card))
end
ifprecision==7then
card=math.floor((intyear-1)/100)+1
era=mw.ustring.gsub(i18n.datetime[7],"$1",makeOrdinal(card))
end
ifprecision==8then
era=mw.ustring.gsub(i18n.datetime[8],"$1",tostring(math.floor(math.abs(intyear)/10)*10))
end
iferathen
ifaddon~=""then
era=mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.bc,' "',""),"$1",era)
else
era=mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.ad,' "',""),"$1",era)
end
returnera
end

local_date_format=i18n["datetime"]["format"][date_format]
if_date_format~=nilthen
-- check for precision is year and override supplied date_format
ifprecision==9then
_date_format=i18n["datetime"][9]
end
ifprecision==10then
_date_format=i18n["datetime"][10]
end
localyear_suffix
localtstr=""
locallang_obj=mw.language.new(wiki.langcode)
localf_parts=mw.text.split(_date_format,'Y',true)
foridx,f_partinpairs(f_parts)do
year_suffix=''
ifstring.match(f_part,"x[mijkot]$")then
-- for non-Gregorian year
f_part=f_part..'Y'
elseifidx<#f_partsthen
-- supress leading zeros in year
year_suffix=lang_obj:formatDate('Y',timestamp)
year_suffix=string.gsub(year_suffix,'^0+','',1)
end
tstr=tstr..lang_obj:formatDate(f_part,timestamp)..year_suffix
end
localfdate
ifaddon~=""andprefix_addonthen
fdate=addon..addon_sep..tstr
elseifaddon~=""then
fdate=tstr..addon_sep..addon
else
fdate=tstr
end

--mw.log( "وحدة:Wikidata2/time:".. timestamp.. "precision:".. precision.. "fdate:".. fdate )
returnfdate
else
returnformatError("unknown-datetime-format")
end
end

-- precision: 0 - billion years, 1 - hundred million years,..., 6 - millennia, 7 - century, 8 - decade, 9 - year, 10 - month, 11 - day, 12 - hour, 13 - minute, 14 - second
localfunctionnormalizeDate(date)
date=mw.text.trim(date,"+")
-- extract year
localyearstr=mw.ustring.match(date,"^\-?%d+ ")
localyear=tonumber(yearstr)
-- remove leading zeros of year
returnyear..mw.ustring.sub(date,#yearstr+1),year
end

functionp.getdate(time1,options)
ifoptions.modifytimeandoptions.modifytime~=""
then
formatd=options.modifytime
else
formatd=i18n["datetime"]["default-format"]
end
localdate_format=mw.text.trim(formatd)
localtimestamp=time1.time
localdateprecision=time1.precision
ifdateprecision>5then
timestamp=mw.ustring.gsub(timestamp,'%-00%-','-01-')
end
ifdateprecision==9ordateprecision==10then
timestamp=mw.ustring.gsub(timestamp,'%-00T','-01T')end

localdate_addon=mw.text.trim(options.date_addonori18n["datetime"]["default-addon"])
localtid=parseDateFull(timestamp,dateprecision,date_format,date_addon)
returntid

end


functionp.getdate1(time1,modifytime)
ifmodifytimeandmodifytime~=''
then
formatd=modifytime
else
formatd=i18n["datetime"]["default-format"]
end
localdate_format=mw.text.trim(formatd)
localtimestamp=time1.time
localdateprecision=time1.precision
timestamp=string.gsub(timestamp,'-00-','-01-')

ifdateprecision==9ordateprecision==10then
timestamp=string.gsub(timestamp,'-00T','-01T')
end
localdate_addon=mw.text.trim(i18n["datetime"]["default-addon"])
localtid=parseDateFull(timestamp,dateprecision,date_format,date_addon)
returntid

end

-- returns the page id (Q...) of the current page or nothing of the page is not connected to Wikidata
functionp.pageId(frame)
localentity=mw.wikibase.getEntityObject()
ifnotentitythenreturnnilelsereturnentity.idend
end



returnp