Module:Sandbox/Ans/CS1Local
Appearance
--[[--------------------------< F O R W A R D D E C L A R A T I O N S >--------------------------------------]]localcfg;-- table of tables imported from slected Module:Citation/CS1/Configurationlocalfunction_convert_year(val,local_digits)val=mw.ustring.gsub(val,'%d',local_digits);-- translate 'local' digits to Western 0-9ifval:match("^%d+$")thenval=val-543;-- convert year to 4 digits to prevent it being interpreted as day in en moduleifval<0thenreturnfalse;-- TODO: handle this--elseif val<1 then-- val='000'..val;elseifval<10then-- this should be faster than formatDate()?val='000'..val;elseifval<100thenval='00'..val;elseifval<1000thenval='0'..val;endreturnval;endreturnfalse;endlocalen_month_name={'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'};localfunction_convert_local_date(val,date_names_local,local_digits)localdmy=mw.text.split(val,'%s+');if#dmy==3thendmy[2]=date_names_local.long[dmy[2]]ordate_names_local.short[dmy[2]];ifdmy[2]then--dmy[1] = tonumber(dmy[1]); if dmy[1]<10 then dmy[1]='0'..dmy[1]; end -- this should be faster than formatDate()--dmy[2] = tonumber(dmy[2]); if dmy[2]<10 then dmy[2]='0'..dmy[2]; end--return dmy[3]-543 ..'-'..dmy[2]..'-'..dmy[1];dmy[1]=mw.ustring.gsub(dmy[1],'%d',local_digits);-- translate 'local' digits to Western 0-9-- always interprete dmy[1] as dayifdmy[1]:match("^%d%d?$")thendmy[1]=tonumber(dmy[1]);ifdmy[1]>31ordmy[1]<1thenreturnval;enddmy[3]=_convert_year(dmy[3],local_digits);ifdmy[3]thenreturndmy[1]..' '..en_month_name[dmy[2]]..' '..dmy[3];endreturnval;endreturnval;endreturnval;elseif#dmy==2thenlocaldmy1=date_names_local.long[dmy[1]]ordate_names_local.short[dmy[1]];ifdmy1thendmy[2]=_convert_year(dmy[2],local_digits);ifdmy[2]thenreturnen_month_name[dmy1]..' '..dmy[2];endreturnval;enddmy[2]=date_names_local.long[dmy[2]]ordate_names_local.short[dmy[2]];ifdmy[2]thendmy[1]=mw.ustring.gsub(dmy[1],'%d',local_digits);-- translate 'local' digits to Western 0-9-- always interprete dmy[1] as dayifdmy[1]:match("^%d%d?$")thendmy[1]=tonumber(dmy[1]);ifdmy[1]>31ordmy[1]<1thenreturnval;endreturndmy[1]..' '..en_month_name[dmy[2]];endreturnval;endreturnval;elseif#dmy==1thendmy[1]=date_names_local.long[dmy[1]]ordate_names_local.short[dmy[1]];ifdmy[1]thenreturnen_month_name[dmy[1]];endreturnval;elsereturnval;endend--[[Some local wiki use non-Gregorian calendar.Use this function to convert local non-Gregorian calendar to Gregorian calendar]]localfunctionconvert_local_date(k,val)if'year'==kthen--return 2010;returnval;--elseif 'date'==k or 'access-date'==k or 'archive-date'==k or 'doi-broken-date'==k or 'embargo'==k or 'lay-date'==k or 'publication-date'==k then-- return _convert_local_date(val, cfg.date_names['local'], cfg.date_names.local_digits);--elseif 'embargo'==k then-- return val;elsemw.log(k,_convert_local_date(val,cfg.date_names['local'],cfg.date_names.local_digits));return_convert_local_date(val,cfg.date_names['local'],cfg.date_names.local_digits);--return val;end--return '2010-04-30';--return val;end--[[--------------------------< S E T _ S E L E C T E D _ M O D U L E S >--------------------------------------Sets local imported functions table to same (live or sandbox) as that used by the other modules.]]localfunctionset_selected_modules(cfg_table_ptr,utilities_page_ptr)cfg=cfg_table_ptr;-- import tables from selected Module:Citation/CS1/Configurationend--[[--------------------------< E X P O R T S >----------------------------------------------------------------]]return{convert_local_date=convert_local_date,set_selected_modules=set_selected_modules,_convert_local_date=_convert_local_date,-- TODO: split to another separated module?_convert_local_year=_convert_year,-- TODO: split to another separated module?}