「モジュール:Citation/CS1/Date validation/sandbox」の版間の差分

削除された内容 追加された内容
モジュール:Citation/CS1/Date validation oldid=75568243 より一部移入
取り消し
(同じ利用者による、間の13版が非表示)
371行目:
local patterns = {
-- year-initial numerical year-month-day
['ymd'] = {'^(%d%d%d%d)%-(%d%d?)%-(%d%d?)$', 'y', 'm', 'd'},
-- month-initial: month day, year
['Mdy'] = {'^(%D-) +([1-9]%d?), +((%d%d%d%d?)%a?)$', 'm', 'd', 'a', 'y'},
401行目:
['Sy4-y2'] = {'^(%D-) +((%d%d)%d%d)[%-–]((%d%d)%a?)$'}, -- special case Winter/Summer year-year (YYYY-YY); year separated with unspaced endash
['Sy-y'] = {'^(%D-) +(%d%d%d%d)[%-–]((%d%d%d%d)%a?)$'}, -- special case Winter/Summer year-year; year separated with unspaced endash
['y-y'] = {'^(%d%d%d%d?)[%-–]((%d%d%d%d?)%a?)$', 'y', 'a', 'y2'}, -- year range: YYY-YYY or YYY-YYYY or YYYY–YYYY; separated by unspaced endash; 100-9999
['y4-y2'] = {'^((%d%d)%d%d)[%-–]((%d%d)%a?)$'}, -- year range: YYYY–YY; separated by unspaced endash
['y'] = {'^((%d%d%d%d?)%a?)$', 'a', 'y'}, -- year; here accept either YYY or YYYY
}
 
800行目:
['dmy'] = {'%s %s %s', 'd', 'm', 'y'}, -- |df=dmy
-- ['yMd'] = {'%s %s %s', 'y', 'm', 'd'}, -- |df=yMd; not supported at en.wiki
['ja'] = {'%s年%s%s日', 'y', 'm', 'd'}, -- 日本語版独自。「月」はConfigurationで指定されている
},
['Mdy'] = { -- date format is Mdy; reformat to:
806 ⟶ 807行目:
['ymd'] = {'%s-%s-%s', 'y', 'm', 'd'}, -- |df=ymd
-- ['yMd'] = {'%s %s %s', 'y', 'm', 'd'}, -- |df=yMd; not supported at en.wiki
['ja'] = {'%s年%s%s日', 'y', 'm', 'd'}, -- 日本語版独自。「月」はConfigurationで指定されている
},
['dMy'] = { -- date format is dMy; reformat to:
812 ⟶ 814行目:
['ymd'] = {'%s-%s-%s', 'y', 'm', 'd'}, -- |df=ymd
-- ['yMd'] = {'%s %s %s', 'y', 'm', 'd'}, -- |df=yMd; not supported at en.wiki
['ja'] = {'%s年%s%s日', 'y', 'm', 'd'}, -- 日本語版独自。「月」はConfigurationで指定されている
},
['Md-dy'] = { -- date format is Md-dy; reformat to:
['mdy'] = {'%s %s–%s, %s', 'm', 'd', 'd2', 'y'}, -- for long/short reformatting
['dmy'] = {'%s–%s %s %s', 'd', 'd2', 'm', 'y'}, -- |df=dmy -> d-dMy
['ja'] = {'%s年%s%s日 - %s日', 'y', 'm', 'd', 'd2'}, -- 日本語版独自。「月」はConfigurationで指定されている
},
['d-dMy'] = { -- date format is d-d>y; reformat to:
['dmy'] = {'%s–%s %s %s', 'd', 'd2', 'm', 'y'}, -- for long/short reformatting
['mdy'] = {'%s %s–%s, %s', 'm', 'd', 'd2', 'y'}, -- |df=mdy -> Md-dy
['ja'] = {'%s年%s%s日 - %s日', 'y', 'm', 'd', 'd2'}, -- 日本語版独自。「月」はConfigurationで指定されている
},
['dM-dMy'] = { -- date format is dM-dMy; reformat to:
['dmy'] = {'%s %s – %s %s %s', 'd', 'm', 'd2', 'm2', 'y'}, -- for long/short reformatting
['mdy'] = {'%s %s – %s %s, %s', 'm', 'd', 'm2', 'd2', 'y'}, -- |df=mdy -> Md-Mdy
['ja'] = {'%s年%s%s日 - %s%s日', 'y', 'm', 'd', 'm2', 'd2'}, -- 日本語版独自。「月」はConfigurationで指定されている
},
['Md-Mdy'] = { -- date format is Md-Mdy; reformat to:
['mdy'] = {'%s %s – %s %s, %s', 'm', 'd', 'm2', 'd2', 'y'}, -- for long/short reformatting
['dmy'] = {'%s %s – %s %s %s', 'd', 'm', 'd2', 'm2', 'y'}, -- |df=dmy -> dM-dMy
['ja'] = {'%s年%s%s日 - %s%s日', 'y', 'm', 'd', 'm2', 'd2'}, -- 日本語版独自。「月」はConfigurationで指定されている
},
['dMy-dMy'] = { -- date format is dMy-dMy; reformat to:
['dmy'] = {'%s %s %s – %s %s %s', 'd', 'm', 'y', 'd2', 'm2', 'y2'}, -- for long/short reformatting
['mdy'] = {'%s %s, %s – %s %s, %s', 'm', 'd', 'y', 'm2', 'd2', 'y2'}, -- |df=mdy -> Mdy-Mdy
['ja'] = {'%s年%s%s日 - %s年%s%s日', 'y', 'm', 'd', 'y2', 'm2', 'd2'}, -- 日本語版独自。「月」はConfigurationで指定されている
},
['Mdy-Mdy'] = { -- date format is Mdy-Mdy; reformat to:
['mdy'] = {'%s %s, %s – %s %s, %s', 'm', 'd', 'y', 'm2', 'd2', 'y2'}, -- for long/short reformatting
['dmy'] = {'%s %s %s – %s %s %s', 'd', 'm', 'y', 'd2', 'm2', 'y2'}, -- |df=dmy -> dMy-dMy
['ja'] = {'%s年%s%s日 - %s年%s%s日', 'y', 'm', 'd', 'y2', 'm2', 'd2'}, -- 日本語版独自。「月」はConfigurationで指定されている
},
['My-My'] = { -- these for long/short reformatting
['any'] = {'%s %s – %s %s', 'm', 'y', 'm2', 'y2'}, -- dmy/mdy agnostic
['ja'] = {'%s年%s - %s年%s', 'y', 'm', 'y2', 'm2'}, -- 日本語版独自。「月」はConfigurationで指定されている
},
['M-My'] = { -- these for long/short reformatting
['any'] = {'%s–%s %s', 'm', 'm2', 'y'}, -- dmy/mdy agnostic
['ja'] = {'%s年%s-%s', 'y', 'm', 'm2'}, -- 日本語版独自。「月」はConfigurationで指定されている
},
['My'] = { -- these for long/short reformatting
['any'] = {'%s %s', 'm', 'y'}, -- dmy/mdy agnostic
['ja'] = {'%s年%s', 'y', 'm'}, -- 日本語版独自。「月」はConfigurationで指定されている
},
['y'] = {
['ja'] = {'%s年', 'y'}, -- 日本語版独自
},
['y-y'] = {
['ja'] = {'%s年–%s年', 'y', 'y2'}, -- 日本語版独自
},
-- ['yMd'] = { -- not supported at en.wiki
850 ⟶ 868行目:
-- ['dmy'] = {'%s %s %s', 'd', 'm', 'y'}, -- |df=dmy
-- ['ymd'] = {'%s-%s-%s', 'y', 'm', 'd'}, -- |df=ymd
-- ['ja'] = {'%s年%s%s日', 'y', 'm', 'd'}, -- 日本語版独自。「月」はConfigurationで指定されている
-- },
}
855 ⟶ 874行目:
 
local function reformatter (date, pattern_idx, format_param, mon_len)
if not in_array (pattern_idx, {'ymd', 'Mdy', 'Md-dy', 'dMy', 'yMd', 'd-dMy', 'dM-dMy', 'Md-Mdy', 'dMy-dMy', 'Mdy-Mdy', 'My-My', 'M-My', 'My', 'y', 'y-y'}) then
return; -- not in this set of date format patterns then not a reformattable date
end
863 ⟶ 882行目:
end
 
if 'ja' ~= format_param and in_array (pattern_idx, {'My', 'M-My', 'My-My'}) then -- these are not dmy/mdy so can't be 'reformatted' into either, except for ja
format_param = 'any'; -- so format-agnostic
end
972 ⟶ 991行目:
for param_name, param_val in pairs (date_parameters_list) do -- for each date-holding parameter in the list
if is_set (param_val.val) then -- if the parameter has a value
for pattern_idx, pattern in pairs (patterns) do
if not (not all and in_array (param_name, {'access-date', 'archive-date'})) then -- skip access- or archive-date unless format is xxx-all; yeah, ugly; TODO: find a better way
forif pattern_idxmw.ustring.match (param_val.val, pattern in pairs (patterns[1]) dothen
if not (not all and in_array (param_name, {'access-date', 'archive-date'})) then -- skip access日本語版独自:access- or dateとarchive-date unless format is xxx-all; yeah, ugly; TODO: find a better wayは常にYYYY年M月D日と表示
if mw.ustring.match (param_val.val, pattern[1]) then
new_date = reformatter (param_val.val, pattern_idx, format'ja', len_plen_a);
if all and in_array (param_name, {'access-date', 'archive-date'}) then -- if this date is an access- or archive-date
elseif is_set (format) then
new_date = reformatter (param_val.val, pattern_idx, (('y' == len_a) and 'ymd') or format, len_a); -- choose ymd or dmy/mdy according to len_a setting
new_date = reformatter (param_val.val, pattern_idx, (('y' == len_a) and 'ymd') or format, len_alen_p); -- choose ymd or dmy/mdy according to len_a setting
else -- all other dates
endelse
new_date = reformatter (param_val.val, pattern_idx, format, len_p);
endnew_date = nil;
end
if new_date then -- set when date was reformatted
date_parameters_list[param_name].val =if new_date; then -- updateset date inwhen date listwas reformatted
date_parameters_list[param_name].val = new_date; -- update date in date list
result = true; -- and announce that changes have been made
end
end
end -- if
end -- for
end -- if
end -- iffor
end -- for
return result; -- declare boolean result and done
end