Mô tổ:Sortkey
Ngoại quan
Mô khối văn đương[Tra khán] [Biên tập] [Lịch sử] [Thanh trừ hoãn tồn]
Thử mô khối dĩ bình viThông hành bản,Ổn định khả kháo, khả các xử sử dụng vô ngộ. Dĩ khả tại bang trợ hiệt diện hòa kỳ tha duy cơ bách khoa tư nguyên trung đề cập, dĩ bang trợ tân dụng hộ học tập. Vi hàng đê phục vụ khí phụ tái hòa thác ngộ thâu xuất, cải thiện bổn mô khối tiền ứng tiến hànhSa hạp trắc thí,Nhi bất thị trọng phục đích thí thác tính biên tập. |
Thượng thuậtVăn đươngKhảm nhậpTựModule:Sortkey/doc.(Biên tập|Lịch sử) Biên giả khả dĩ tại bổn mô khối đích sa hạp(Sang kiến|Kính tượng)Hòa trắc thí dạng lệ(Sang kiến)Hiệt diện tiến hành thật nghiệm. Bổn mô khối đích tử hiệt diện. |
localgetArgs=require('Module:Arguments').getArgs
localp={}
functionp._encode(sortkey)
-- Protect against sortkey nesting.
-- Example: {{sort|{{dts|2013|07|07}}|{{dts|1990|12|01}}}}
ifstring.find(sortkey,"sortkey")orstring.find(sortkey,"data-sort-value")then
return"";
end
returnmw.text.encode(sortkey)
end
functionp.encode(frame)
localargs=getArgs(frame);
returnp._encode(args[1]or"")
end
localfunctionvalid_number(num)
-- Return true if num is a valid number.
-- In Scribunto (different from some standard Lua), when expressed as a string,
-- overflow or other problems are indicated with text like "inf" or "nan"
-- which are regarded as invalid here (each contains "n" ).
iftype(num)=='number'andtostring(num):find('n',1,true)==nilthen
returntrue
end
end
functionp._sortKeyForNumber(value)
ifnotvalid_number(value)then
ifvalue<0then
sortkey='1000000000000000000'
else
sortkey='9000000000000000000'
end
elseifvalue==0then
sortkey='5000000000000000000'
else
localmag=math.floor(math.log10(math.abs(value))+1e-14)
localprefix
ifvalue>0then
prefix=7000+mag
else
prefix=2999-mag
value=value+10^(mag+1)
end
sortkey=string.format('%d',prefix)..string.format('%015.0f',math.floor(value*10^(math.min(28,14-mag))))
end
returnsortkey;
end
functionp.sortKeyForNumber(frame)
localargs=getArgs(frame);
returnp._sortKeyForNumber(args[1]or"")
end
returnp