Detta är dokumentationssidan för Modul:sort

När sidor kategoriseras sorteras enligt standardalgoritmen för svenskspråkiga 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.getSortKey("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 returneras ä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.  
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.

All tests passed. (refresh)

Text Expected Actual
test01_basic:
  s.getSortKey("sv","abc") abc abc
  s.getSortKey("sv","a b c") abc abc
  s.getSortKey("fr","TV") tv tv
Text Expected Actual
test02_diacritics:
  s.getSortKey("sv","åra") z~ra z~ra
  s.getSortKey("en","åra") ara ara
  s.getSortKey("sv","Åre") z~re z~re
  s.getSortKey("fr","Åre") are are
  s.getSortKey("","éüåäö") euaao euaao
  s.getSortKey("xyz","éüåäö") euaao euaao
Text Expected Actual
test03_special_characters:
  s.getSortKey("de","a.,-b") ab ab
  s.getSortKey("","a.,-b") ab ab
  s.getSortKey("xx","a.,-b") ab ab
  s.getSortKey("xx","a&b") ab ab
Text Expected Actual
test04_missing_pagename:
  s.getSortKey("sv")
  s.getSortKey("sv","")
Text Expected Actual
test05_bad_language_code:
  s.getSortKey(nil,"é.,-b") eb eb
  s.getSortKey("","é.,-b") eb eb
  s.getSortKey("xx","é.,-b") eb eb
  s.getSortKey("xyz","é.,-b") eb eb
Text Expected Actual
test06_numbers_basic:
  s.getSortKey("sv","33") ::33 ::33
  s.getSortKey("sv","ab33cd") ab::33cd ab::33cd
Text Expected Actual
test07_numbers_with_special_characters:
  s.getSortKey("sv","1,2-etandiol") ::12etandiol ::12etandiol
  s.getSortKey("sv","1,2,3-propantriol") :::123propantriol :::123propantriol
Text Expected Actual
test08_numbers_multiple_occurances:
  s.getSortKey("sv","ab33cd9988ef") ab::33cd::::9988ef ab::33cd::::9988ef
  s.getSortKey("sv","ab0033cd09900ef") ab::33cd::::9900ef ab::33cd::::9900ef
Text Expected Actual
test09_dont_mess_up_non_latin:
  s.getSortKey("zh", "中世紀") 中世紀 中世紀