Modul:sort/dok

Definition från Wiktionary, den fria ordlistan.
Hoppa till: navigering, sök

Detta är dokumentationssidan för Modul:sort

Syfte[redigera]

När sidor kategoriseras sorteras enligt standardalgoritmen för svenskspråka Wiktionary så sorteras de i en ordning som inte alltid stämmer överens med det aktuella språkets regler. Exempelvis sorteras ä och ö framför å, vilket blir fel för svenska. Olika språk har olika regler och dessa regler hämtas från Modul:lang som har dessa sorteringsregler och annan språkrelaterad information sparad i Modul:lang/data.

Användning[redigera]

local sort = require("Modul:sort")
local sort_code = sort.getSortCode("sv", "sidnamnet")
Modulen används endast av andra moduler, och inte direkt från mallkoden. Mallar bör istället använda Modul:categorize för att skapa kategorier där sorteringsnyckeln är inkluderad.

Specifikation[redigera]

Den textsträng som returnereras är sidnamnet som skickas in, efter det att särskilda operationer utförts som delvis är beroende på språk.
1= språkkod (bör anges, annars tilldelas "xx" som språkkod)
Språkkoden anges för att kunna använda sig av de speciella sorteringsregler som finns för det aktuella språket.
Om språkkoden är "xx" används inga speciella sorteringsregler.
Om språkkoden inte existerar blir resultatet samma som om språkkoden hade varit "xx".
2= sidnamnet (om utesluts eller lämnas tom, kommer textsträngen som returneras att vara tom).
1. Ett antal tecken plockas bort från textsträngen: .,&!-/:"'$()*+\;=?~% samt mellanrum. borde mellanrummet behållas?
2. Gör om hela textsträngen till gemener (vi vill att "A" ska sorteras på samma sätt som "a").
3. Ta bort alla diakriter enligt Modul:sort/data-diacritics. "å" görs om till "a", "é" görs om till "e" osv. Men hantera varje språks speciella regler. För svenska, t.ex., ska "å" inte göras om till "a" utan till "z~" (vilket betyder "sortera direkt efter "z").
4. Applicera en speciell algoritm på strängen så att inkluderade nummer sorteras i nummerordning, dvs. att 99 sorteras före 100. Detta görs genom att lägga till ett prefix framför numret med det antal ":"-tecken som är antalet siffror i talet.
5. Efter att ovanstående punkterna har gåtts igenom kan textsträngen returneras.

Tester[redigera]

All tests passed. (refresh)

test01_basic:

Text Expected Actual
Passed s.getSortKey("sv","abc") abc abc
Passed s.getSortKey("sv","a b c") abc abc
Passed s.getSortKey("fr","TV") tv tv

test02_diacritics:

Text Expected Actual
Passed s.getSortKey("sv","åra") z~ra z~ra
Passed s.getSortKey("en","åra") ara ara
Passed s.getSortKey("sv","Åre") z~re z~re
Passed s.getSortKey("fr","Åre") are are
Passed s.getSortKey("","éüåäö") euaao euaao
Passed s.getSortKey("xyz","éüåäö") euaao euaao

test03_special_characters:

Text Expected Actual
Passed s.getSortKey("de","a.,-b") ab ab
Passed s.getSortKey("","a.,-b") ab ab
Passed s.getSortKey("xx","a.,-b") ab ab
Passed s.getSortKey("xx","a&b") ab ab

test04_missing_pagename:

Text Expected Actual
Passed s.getSortKey("sv")
Passed s.getSortKey("sv","")

test05_bad_language_code:

Text Expected Actual
Passed s.getSortKey(nil,"é.,-b") eb eb
Passed s.getSortKey("","é.,-b") eb eb
Passed s.getSortKey("xx","é.,-b") eb eb
Passed s.getSortKey("xyz","é.,-b") eb eb

test06_numbers_basic:

Text Expected Actual
Passed s.getSortKey("sv","33")  ::33  ::33
Passed s.getSortKey("sv","ab33cd") ab::33cd ab::33cd

test07_numbers_with_special_characters:

Text Expected Actual
Passed s.getSortKey("sv","1,2-etandiol")  ::12etandiol  ::12etandiol
Passed s.getSortKey("sv","1,2,3-propantriol")  :::123propantriol  :::123propantriol

test08_numbers_multiple_occurances:

Text Expected Actual
Passed s.getSortKey("sv","ab33cd9988ef") ab::33cd::::9988ef ab::33cd::::9988ef
Passed s.getSortKey("sv","ab0033cd09900ef") ab::33cd::::9900ef ab::33cd::::9900ef

test09_dont_mess_up_non_latin:

Text Expected Actual
Passed s.getSortKey("zh", "中世紀") 中世紀 中世紀