Wiktionary
svwiktionary
https://sv.wiktionary.org/wiki/Wiktionary:Huvudsida
MediaWiki 1.39.0-wmf.25
case-sensitive
Media
Special
Diskussion
Användare
Användardiskussion
Wiktionary
Wiktionarydiskussion
Fil
Fildiskussion
MediaWiki
MediaWiki-diskussion
Mall
Malldiskussion
Hjälp
Hjälpdiskussion
Kategori
Kategoridiskussion
Appendix
Appendixdiskussion
Rimord
Rimordsdiskussion
Transwiki
Transwikidiskussion
TimedText
TimedText talk
Modul
Moduldiskussion
Gadget
Gadget talk
Gadget definition
Gadget definition talk
fuck
0
1737
3703319
3573423
2022-08-19T07:21:15Z
2A01:B740:1F:2030:49D3:34D:D129:481E
/* Verb */
wikitext
text/x-wiki
==Engelska==
===Interjektion===
{{interj|en}}
'''fuck'''
#{{tagg|kat=svordomar|språk=en}} [[svordom]], funktionsmässigt (grammatiskt) kanske närmast jämförbar med [[fan]] eller [[fitta]] fast den uppfattas som betydligt grövre
#:{{etymologi|''Fuck'' är ett engelskt [[vulgär]]t verb med den ordagranna betydelsen "ha [[samlag]] (med)", "[[knulla]]" (se nedan för verbets ursprung). Ordet har dock använts som generell [[svordom]] och förstärkningsord, vilket har gjort att det idag kan användas på olika sätt i extremt många olika sammanhang. Det anses dock trots det som en mycket grov svordom.}}
#:{{besläktade ord|[[fucking]], [[fucked]]}}
#:{{sammansättningar|[[mercy fuck]], [[mindfuck]]}}
#:{{fraser|[[fuck all]], [[fuck off]], [[fuck up]], [[fuck you]]}}
===Substantiv===
{{subst|en}}
'''fuck'''
#[[knull]], [[ligg]] (ett samlag)
#:{{synonymer|[[fucking]], [[shag]], [[frig]]}}
===Verb===
{{en-verb}}
'''fuck'''
#{{tagg|vulgärt|språk=en}} ha samlag (med), [[knulla]]
#:{{synonymer|[[screw]], [[do]], [[sleep with]], [[shag]]}}
#{{tagg|vulgärt|språk=en}} [[lura]], [[bedra]], [[förråda]]
#:{{synonymer|[[screw]]}}
#{{tagg|vulgärt|språk=en}} [[driva]] med, uppträda oseriöst
#{{tagg|vulgärt|språk=en}} [[sabotera]], [[förstöra]]
#:''If you do that, I’m '''fucked'''.''
#::''Om du gör det, så är det kört för mig.''
#{{tagg|vulgärt|språk=en}} [[ha sönder]], [[paja]]
#:''My nephew '''fucked''' my car last weekend.''
#::''Min brorson förstörde min bil förra helgen.''
#{{tagg|vulgärt|språk=en}} [[fippla]], [[pilla]], [[talla]], leka obetänksamt
:{{avgränsare}}
:{{etymologi|Ordets ursprung är oklart. Det första säkra användandet är från före år 1500, från den engelsk-latinska dikten Flen flyys: "''Non sunt in celi quia fuccant uuiuys of heli''" ("de bor inte i paradiset, ty de ''fuck'' Elys hustrur). Det finns en uppenbart likhet med det tyska ordet ''ficken'' (ha samlag med, dialektalt även rubba, gnida och historiskt använt i betydelsen slå, träffa), och latinets ''futurere'' (varur franskans ''foutre'' och italienskans ''fottere''), men det finns stor osäkerhet kring om det verkligen finns ett samband och hur det i så fall skulle se ut. Dessa rötter, trots sin likhet, är inte det ursprungliga indo-europeiska ordet för samlag; det ordet är snarare *yebh-, vars förekomst säkrats i Sanskrit och slaviska språk, bland annat. Det finns liknande ord i andra germanska språk, exempelvis mittnederländska ''fokken'' (stöta, kopulera), dialektala norska ''fukka'' (kopulera) och även dialektalt svenska "focka" med liknande betydelse. Fock är även en synonym till penis i vissa områden. Det finns kanske till och med en ursprunglig keltisk härledning; ''futuere'' som är relaterat till ''battuere'' (träffa, slå, kopulera) som i sin tur kan vara besläktat med iriska ''bot'' och manx ''bwoid'', båda med innebörden "penis". Argumentet för detta är att battuere och futuere (liksom de iriska och manx orden) kommer från keltiskans *bacture (att genomtränga), som härrör ut ''buc-'' (en spets). En ännu tidigare rot kan vara egyptiskans ''petcha'' (kopulera), som för övrigt har en mycket intressant hieroglyf. En anledning till att etymologin är så svårutredd är att ordet var för tabubelagt för att komma med i de första utgåvorna av Oxford English Dictionary. Det finns många uppfinningsrika men felaktiga myter om ordets ursprung. En av de mera välkända är att ordet skulle vara en akronym av ''Fornication Under Consent of the King'' ("kopulation med tillstånd av konungen"), vilket då skulle vara texten på en skylt som placerades på husen under perioder med försök att kontrollera befolkningstillväxten i medeltida England. En annan utläsning av bokstäverna är ''For Unlawful Carnal Knowledge'' ("För olaglig köttslig/världslig kunskap") som skulle ha skrivits på de som satts i bojor offentligt som straff för otrohet, eller ''Forced Unlawful Carnal Knowledge'' ("påtvingad olaglig köttslig/världslig kunskap") i samband med våldtäkter. Dessa akronymer var dock helt okända före 1960-talet, enligt boken "The F-Word".}}
#:{{sammansättningar|[[fuck boy]], [[fuck face]], [[fuck-up]]}}
l88peljqoes2upm7crrafdron5fv4xo
3703320
3703319
2022-08-19T07:21:32Z
2A01:B740:1F:2030:49D3:34D:D129:481E
/* Verb */
wikitext
text/x-wiki
==Engelska==
===Interjektion===
{{interj|en}}
'''fuck'''
#{{tagg|kat=svordomar|språk=en}} [[svordom]], funktionsmässigt (grammatiskt) kanske närmast jämförbar med [[fan]] eller [[fitta]] fast den uppfattas som betydligt grövre
#:{{etymologi|''Fuck'' är ett engelskt [[vulgär]]t verb med den ordagranna betydelsen "ha [[samlag]] (med)", "[[knulla]]" (se nedan för verbets ursprung). Ordet har dock använts som generell [[svordom]] och förstärkningsord, vilket har gjort att det idag kan användas på olika sätt i extremt många olika sammanhang. Det anses dock trots det som en mycket grov svordom.}}
#:{{besläktade ord|[[fucking]], [[fucked]]}}
#:{{sammansättningar|[[mercy fuck]], [[mindfuck]]}}
#:{{fraser|[[fuck all]], [[fuck off]], [[fuck up]], [[fuck you]]}}
===Substantiv===
{{subst|en}}
'''fuck'''
#[[knull]], [[ligg]] (ett samlag)
#:{{synonymer|[[fucking]], [[shag]], [[frig]]}}
===Verb===
{{en-verb}}
'''fuck'''
#{{tagg|vulgärt|språk=en}} ha samlag (med), [[knulla]]
#:{{synonymer|[[screw]], [[do]], [[sleep with]], [[shag]]}}
#{{tagg|vulgärt|språk=en}} [[lura]], [[bedra]], [[förråda]]
#:{{synonymer|[[screw]]}}
#{{tagg|vulgärt|språk=en}} [[driva]] med, uppträda oseriöst
#{{tagg|vulgärt|språk=en}} [[sabotera]], [[förstöra]]
#:''If you do that, I’m '''fucked'''.''
#::''Om du gör det, så är det kört för mig.''
#{{tagg|vulgärt|språk=en}} [[ha sönder]], [[paja]]
#:''My nephew '''fucked''' my car last weekend.''
#::''Min brorson förstörde min bil förra helgen.''
#{{tagg|vulgärt|språk=en}} [[fippla]], [[pilla]], [[talla]], leka obetänksamt
:{{avgränsare}}
:{{etymologi|Ordets ursprung är oklart. Det första säkra användandet är från före år 1500, från den engelsk-latinska dikten Flen flyys: "''Non sunt in celi quia fuccant uuiuys of heli''" ("de bor inte i paradiset, ty de ''fuck'' Elys hustrur). Det finns en uppenbart likhet med det tyska ordet ''ficken'' (ha samlag med, dialektalt även rubba, gnida och historiskt använt i betydelsen slå, träffa), och latinets ''futurere'' (varur franskans ''foutre'' och italienskans ''fottere''), men det finns stor osäkerhet kring om det verkligen finns ett samband och hur det i så fall skulle se ut. Dessa rötter, trots sin likhet, är inte det ursprungliga indo-europeiska ordet för samlag; det ordet är snarare *yebh-, vars förekomst säkrats i Sanskrit och slaviska språk, bland annat. Det finns liknande ord i andra germanska språk, exempelvis mittnederländska ''fokken'' (stöta, kopulera), dialektala norska ''fukka'' (kopulera) och även dialektalt svenska "focka" med liknande betydelse. Fock är även en synonym till penis i vissa områden. Det finns kanske till och med en ursprunglig keltisk härledning; ''futuere'' som är relaterat till ''battuere'' (träffa, slå, kopulera) som i sin tur kan vara besläktat med iriska ''bot'' och manx ''bwoid'', båda med innebörden "penis". Argumentet för detta är att battuere och futuere (liksom de iriska och manx orden) kommer från keltiskans *bacture (att genomtränga), som härrör ut ''buc-'' (en spets). En ännu tidigare rot kan vara egyptiskans ''petcha'' (kopulera), som för övrigt har en mycket intressant hieroglyf. En anledning till att etymologin är så svårutredd är att ordet var för tabubelagt för att komma med i de första utgåvorna av Oxford English Dictionary. Det finns många uppfinningsrika men felaktiga myter om ordets ursprung. En av de mera välkända är att ordet skulle vara en akronym av ''Fornication Under Consent of the King'' ("kopulation med tillstånd av konungen"), vilket då skulle vara texten på en skylt som placerades på husen under perioder med försök att kontrollera befolkningstillväxten i medeltida England. En annan utläsning av bokstäverna är ''For Unlawful Carnal Knowledge'' ("För olaglig köttslig/världslig kunskap") som skulle ha skrivits på de som satts i bojor offentligt som straff för otrohet, eller ''Forced Unlawful Carnal Knowledge'' ("påtvingad olaglig köttslig/världslig kunskap") i samband med våldtäkter. Dessa akronymer var dock helt okända före 1960-talet, enligt boken "The F-Word".}}
:{{sammansättningar|[[fuck boy]], [[fuck face]], [[fuck-up]]}}
d9maqjhqxvad8hcvh0a76mc8o0adhi9
heptagon
0
7458
3703306
3639178
2022-08-19T06:52:22Z
Andreasl01
37996
/* Svenska */ härledning, +kohyponymer
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[hepta]][[-gon|gon]]'''
#{{tagg|geometri}} [[polygon]] med sju hörn
#:{{etymologi|Från {{härledning-|grc|επτα|talet [[sju]]|tr=hepta}} + ''{{länk|grc|γωνία}}'' (''gonia'', ”[[vinkel]]”).}}
#:{{synonymer|[[sjuhörning]]}}
#:{{hyperonymer|[[polygon]]}}
#:{{kohyponymer|[[triangel]], [[tetragon]], [[pentagon]], [[hexagon]], [[oktogon]], [[nonagon]], [[dekagon]]}}
====Översättningar====
{{ö-topp}}
*asturiska: {{ö|ast|heptágonu}}
*danska: {{ö|da|heptagon}}
*engelska: {{ö+|en|heptagon}}
*esperanto: {{ö|eo|heptagono}}
*finska: {{ö|fi|seitsenkulmio}}, {{ö|fi|heptagoni}}
*franska: {{ö|fr|heptagone}}
*iriska: {{ö|ga|heipteagán}}
*italienska: {{ö|it|ettagono}}
*nynorska: {{ö|nn|heptagon}}
*ryska: {{ö+|ru|гептагон|m}}, {{ö+|ru|семиугольник|m}}
*spanska: {{ö+|es|heptágono|m}}
{{ö-botten}}
==Danska==
===Substantiv===
{{subst|da}}
'''heptagon'''
#{{tagg|kat=geometri|språk=da}} [[sjuhörning]], [[#Svenska|heptagon]]
==Engelska==
===Substantiv===
{{en-subst}}
'''heptagon'''
#{{tagg|geometri|språk=en}} [[sjuhörning]], [[#Svenska|heptagon]]
#:''A fifty pence piece is a '''heptagon'''.''
#::''En femtio pence mynt är en '''heptagon'''.''
rpj0gr1sibdk09ztpmd0kfynkb1qcjd
noggrannhet
0
7881
3703307
3211026
2022-08-19T06:58:12Z
PeterFisk
21271
+no: [[nøyaktighet]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[noggrann]][[-het|het]]'''
#till [[noggrann]], av [[noga]]
#{{tagg|matematik}} [[precision]], med många korrekta decimaler etc.
#:''Vi nöjde oss med en tresiffrig '''noggrannhet'''.''
#[[omsorg]], [[omsorgsfullhet]]
====Översättningar====
{{ö-topp|precision}}
*bokmål: {{ö+|no|nøyaktighet|m}}
*engelska: {{ö+|en|accuracy}}
*japanska: {{ö|ja|正確性|tr=せいかくせい, ''seikakusei''}}
*polska: {{ö+|pl|dokładność}}
*ryska: {{ö+|ru|точность|f}}
*tyska: {{ö+|de|Genauigkeit|f}}
{{ö-botten}}
{{ö-topp|omsorg}}
*polska: {{ö|pl|staranność}}
*ryska: {{ö+|ru|забота|f}}
{{ö-botten}}
dytcy2xybbu6y64q83v28gzw2u8n2r8
med
0
8465
3703334
3632165
2022-08-19T07:49:28Z
Andreasl01
37996
/* Svenska */ fraser
wikitext
text/x-wiki
==Svenska==
===Preposition===
{{prep|sv}}
'''med'''
#i särskilt förbund, [[jämte]]; [[tillsammans]] med
#:''Han kom '''med''' oss.''
#:'''''Med''' en hög inkomst brukar man inte vara lika sparsam.''
#''för att uttrycka samtidighet''
#:'''''Med''' den starka vinden kom regnet.''
#:{{fraser|[[i och med]], [[med detsamma]]}}
#som har
#:''Ser du tavlan '''med''' röd ram?''
#:''Finns det någon ingrediens i er mysli bar '''med''' en laxerande effekt?''
#genom att [[använda]]; ''för att uttrycka instrument, med vilket en handling utförs''
#:''Vill du äta '''med''' pinnar eller '''med''' kniv och gaffel?''
:{{avgränsare}}
:{{etymologi|{{härledning|gmq-fsv|[[mæþ]], [[mædh]]}}}}
====Översättningar====
{{ö-topp|jämte; tillsammans med}}
*bokmål: {{ö+|no|med}}
*engelska: {{ö+|en|with}}
*esperanto: {{ö+|eo|kun}}
*finska: {{ö+|fi|kanssa}}
*franska: {{ö+|fr|avec}}
*frisiska: {{ö|fy|mei}}
*haitisk kreol: {{ö|ht|avèk}}
*hebreiska: {{ö+|he|עם|tr=ím}}
*indonesiska: {{ö+|id|dengan}}
*italienska: {{ö+|it|con}}
*japanska: {{ö+|ja|と}} (''{{ö+|ja|to}}'')
*jiddisch: {{ö|yi|מיט|tr=mit}}
*katalanska: {{ö+|ca|amb}}
*ladino: {{ö|lad|kon}}, {{ö|lad|קון}}
*latin: {{ö+|la|cum}}
*nynorska: {{ö|nn|med}}
*occitanska: {{ö+|oc|amb}}
*polska: {{ö+|pl|z}}
*portugisiska: {{ö+|pt|com}}
*ryska: {{ö+|ru|с|tr=s|skrift=Cyrl}}
*spanska: {{ö+|es|con}}
*tjeckiska: {{ö+|cs|s}}
*tyska: {{ö+|de|mit}}
*älvdalska: {{ö|ovd|nest}}, {{ö|ovd|min}}
{{ö-botten}}
{{ö-topp|som har}}
*bokmål: {{ö+|no|med}}
*engelska: {{ö+|en|with}}
*frisiska: {{ö|fy|mei}}
*indonesiska: {{ö+|id|dengan}}
*italienska: {{ö+|it|con}}
*nynorska: {{ö|nn|med}}
*tyska: {{ö+|de|mit}}
{{ö-botten}}
{{ö-topp|genom att använda}}
*bokmål: {{ö+|no|med}}
*engelska: {{ö+|en|with}}
*esperanto: {{ö+|eo|per}}
*finska: {{ö+|fi|-lla}}, {{ö+|fi|-llä}}
*frisiska: {{ö|fy|mei}}
*italienska: {{ö+|it|con}}
*nynorska: {{ö|nn|med}}
*tyska: {{ö+|de|mit}}
{{ö-botten}}
{{ö-topp-granska}}
*bretonska: {{ö+|br|gant}} {{?}}
*tyska: {{ö+|de|mit}}, {{ö+|de|bei}} {{?}}
{{ö-botten}}
===Adverb===
{{adv|sv}}
'''med'''
#''ställt efter ett ord för att markera vad som kommer till''
#:''Vi tog inte bara hans plånbok, vi tog mobiltelefonen '''med'''.''
#:''Sara är duktig på att simma - men är Pelle '''med''', när jag tänker efter.''
#:{{synonymer|[[också]], [[även]]}}
====Översättningar====
{{ö-topp|för att markera vad som kommer till}}
*bokmål: {{ö+|no|også}}, {{ö+|no|òg}}
*engelska: {{ö+|en|too}}
*finska: {{ö+|fi|myös}}
*franska: {{ö+|fr|aussi}}
*frisiska: {{ö+|fy|ek}}
*nynorska: {{ö|nn|med}}, {{ö|nn|òg}}, {{ö+|nn|også}}, {{ö|nn|ogso}}
*ryska: {{ö+|ru|тоже}}
*spanska: {{ö+|es|también}}
*tyska: {{ö+|de|auch}}
{{ö-botten}}
===Substantiv===
{{sv-subst-n-ar}}
{{media|Norwegian kicksled.jpg|en [[spark]] med två '''medar'''}}
'''med'''
#[[skena]] med uppåtböjd framända som [[släde]] eller dylikt glider på
#:{{varianter|[[mede]]}}
====Översättningar====
{{ö-topp|skena som släde eller dylikt glider på}}
*bokmål: {{ö|no|meie|f}}, {{ö|no|mei|m}}
*danska: {{ö|da|mede|u}}
*engelska: {{ö+|en|runner}}
*finska: {{ö+|fi|jalas}}
*franska: {{ö+|fr|patin|m}}
*nynorska: {{ö|nn|mei|m}}
*polska: {{ö|pl|płoza|f}}
*tyska: {{ö+|de|Kufe|f}}
{{ö-botten}}
==Bosniska==
===Substantiv===
{{subst|bs}}
'''med''' {{m}}
#{{tagg|kat=mat|språk=bs}} [[honung]]
==Kroatiska==
===Substantiv===
{{subst|hr}}
'''med''' {{m}}
#{{tagg|kat=mat|språk=hr}} [[honung]]
==Serbiska==
===Substantiv===
{{subst|sr}}
'''med''' {{m}} ([[мед]])
#{{tagg|kat=mat|språk=sr}} [[honung]]
==Slovakiska==
===Substantiv===
{{subst|sk}}
'''med''' {{m}}
#{{tagg|kat=mat|språk=sk}} [[honung]]
#:{{besläktade ord|[[medokýš]], [[medovina]], [[medovník]], [[medový]]}}
==Slovenska==
===Substantiv===
{{subst|sl}}
'''med'''
#{{tagg|kat=mat|språk=sl}} [[honung]]
==Tjeckiska==
===Substantiv===
{{subst|cs}}
'''med'''
#{{tagg|kat=mat|språk=cs}} [[honung]]
#:{{besläktade ord|[[medvěd]], [[medovina]]}}
bgjq4zt568h4uz9jzcktvzg7qohecpi
triangel
0
8785
3703264
3623895
2022-08-18T17:41:22Z
Andreasl01
37996
/* Svenska */ formatering
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-ar|pluralrot=triangl|fog=}}
'''[[tri]][[angel]]'''
{{media|Triangle.Equilateral.svg|en [[liksidig triangel]] (geometrisk figur)|Triangel (Instrument).png|triangel (instrument) och [[triangelstål]]}}
#{{tagg|geometri}} [[polygon]] med tre sidor
#:''"Detta är en '''triangel'''", sade lågstadieläraren till eleverna.''
#:{{synonymer|[[trehörning]], [[trekant]], [[tresiding]], tresidig figur}}
#:{{hyponymer|[[rätvinklig triangel]], [[likbent triangel]], [[spetsvinklig triangel]], [[trubbvinklig triangel]]}}
#:{{kohyponymer|[[tetragon]], [[pentagon]], [[hexagon]], [[heptagon]], [[oktogon]], [[nonagon]], [[dekagon]]}}
#:{{besläktade ord|[[triangulation]], [[triangulera]], [[triangulering]], [[triangulär]]}}
#:{{sammansättningar|[[triangeldrama]], [[triangelformad]], [[varningstriangel]], [[sierpinskitriangel]]}}
#:{{fraser|[[hyperbolisk triangel]], [[sfärisk triangel]]}}
#:{{seäven|[[cirkel]]}}
#{{tagg|kat=slagverksinstrument}} ett [[percussioninstrument]] format som en triangel i metall
#:''Oj, har du lärt dig att spela '''triangel'''?''
#:''Nej, jag har köpt en skiva, vars huvudinstrument är '''triangel'''.''
====Översättningar====
{{ö-topp|geometri}}
*belarusiska: {{ö|be|трохкутнік|m}}
*bokmål: {{ö+|no|trekant|m}}
*danska: {{ö+|da|trekant|u}}
*engelska: {{ö+|en|triangle}}
*esperanto: {{ö|eo|triangulo}}
*finska: {{ö+|fi|kolmio}}
*franska: {{ö+|fr|triangle|m}}
*iriska: {{ö+|ga|triantán}}
*italienska: {{ö+|it|triangolo|m}}
*jiddisch: {{ö|yi|דרײַעק|m}}
*kroatiska: {{ö+|hr|trokut|m}}
*kurdiska: {{ö+|ku|sêgoşe}}
*latin: {{ö|la|triangulum|n}}
*lettiska: {{ö+|lv|trijstūris}}
*litauiska: {{ö|lt|trikampis}}
*nederländska: {{ö+|nl|driehoek|m}}
*nynorska: {{ö|nn|trekant|m}}
*polska: {{ö+|pl|trójkąt|m}}
*portugisiska: {{ö+|pt|triângulo|m}}
*ryska: {{ö+|ru|треугольник|m}}
*spanska: {{ö+|es|triángulo|m}}
*turkiska: {{ö+|tr|üçgen}}
*tyska: {{ö+|de|Dreieck|n}}
*ukrainska: {{ö|uk|трикутник|m}}
*vietnamesiska: {{ö+|vi|tam giác}}, {{ö|vi|hình tam giác}}
{{ö-botten}}
{{ö-topp|musik}}
*belarusiska: {{ö|be|трохвугольнік|m}}
*bokmål: {{ö|no|triangel|n}}
*danska: {{ö+|da|triangel|u}}
*engelska: {{ö+|en|triangle}}
*finska: {{ö+|fi|triangeli}}
*franska: {{ö+|fr|triangle|m}}
*italienska: {{ö+|it|triangolo|m}}
*nederländska: {{ö+|nl|triangel|m}}
*nynorska: {{ö|nn|triangel|n}}
*polska: {{ö+|pl|trójkąt|m}}
*ryska: {{ö+|ru|треугольник|m}}
*spanska: {{ö+|es|triángulo|m}}
*tyska: {{ö+|de|Triangel|f}}
*ukrainska: {{ö|uk|трикутник|m}}
{{ö-botten}}
ghgy5ape4yl8r5z8seixwowauuhjpqk
3703305
3703264
2022-08-19T06:51:14Z
Andreasl01
37996
/* Svenska */
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-ar|pluralrot=triangl|fog=}}
'''[[tri]][[angel]]'''
{{media|Triangle.Equilateral.svg|en [[liksidig triangel]] (geometrisk figur)|Triangel (Instrument).png|triangel (instrument) och [[triangelstål]]}}
#{{tagg|geometri}} [[polygon]] med tre sidor
#:''"Detta är en '''triangel'''", sade lågstadieläraren till eleverna.''
#:{{synonymer|[[trehörning]], [[trekant]], [[tresiding]], tresidig figur}}
#:{{hyponymer|[[rätvinklig triangel]], [[likbent triangel]], [[liksidig triangel]], [[spetsvinklig triangel]], [[trubbvinklig triangel]]}}
#:{{kohyponymer|[[tetragon]], [[pentagon]], [[hexagon]], [[heptagon]], [[oktogon]], [[nonagon]], [[dekagon]]}}
#:{{besläktade ord|[[triangulation]], [[triangulera]], [[triangulering]], [[triangulär]]}}
#:{{sammansättningar|[[triangeldrama]], [[triangelformad]], [[varningstriangel]], [[sierpinskitriangel]]}}
#:{{fraser|[[hyperbolisk triangel]], [[sfärisk triangel]], [[Pascals triangel]]}}
#:{{seäven|[[cirkel]]}}
#{{tagg|kat=slagverksinstrument}} ett [[percussioninstrument]] format som en triangel i metall
#:''Oj, har du lärt dig att spela '''triangel'''?''
#:''Nej, jag har köpt en skiva, vars huvudinstrument är '''triangel'''.''
====Översättningar====
{{ö-topp|geometri}}
*belarusiska: {{ö|be|трохкутнік|m}}
*bokmål: {{ö+|no|trekant|m}}
*danska: {{ö+|da|trekant|u}}
*engelska: {{ö+|en|triangle}}
*esperanto: {{ö|eo|triangulo}}
*finska: {{ö+|fi|kolmio}}
*franska: {{ö+|fr|triangle|m}}
*iriska: {{ö+|ga|triantán}}
*italienska: {{ö+|it|triangolo|m}}
*jiddisch: {{ö|yi|דרײַעק|m}}
*kroatiska: {{ö+|hr|trokut|m}}
*kurdiska: {{ö+|ku|sêgoşe}}
*latin: {{ö|la|triangulum|n}}
*lettiska: {{ö+|lv|trijstūris}}
*litauiska: {{ö|lt|trikampis}}
*nederländska: {{ö+|nl|driehoek|m}}
*nynorska: {{ö|nn|trekant|m}}
*polska: {{ö+|pl|trójkąt|m}}
*portugisiska: {{ö+|pt|triângulo|m}}
*ryska: {{ö+|ru|треугольник|m}}
*spanska: {{ö+|es|triángulo|m}}
*turkiska: {{ö+|tr|üçgen}}
*tyska: {{ö+|de|Dreieck|n}}
*ukrainska: {{ö|uk|трикутник|m}}
*vietnamesiska: {{ö+|vi|tam giác}}, {{ö|vi|hình tam giác}}
{{ö-botten}}
{{ö-topp|musik}}
*belarusiska: {{ö|be|трохвугольнік|m}}
*bokmål: {{ö|no|triangel|n}}
*danska: {{ö+|da|triangel|u}}
*engelska: {{ö+|en|triangle}}
*finska: {{ö+|fi|triangeli}}
*franska: {{ö+|fr|triangle|m}}
*italienska: {{ö+|it|triangolo|m}}
*nederländska: {{ö+|nl|triangel|m}}
*nynorska: {{ö|nn|triangel|n}}
*polska: {{ö+|pl|trójkąt|m}}
*ryska: {{ö+|ru|треугольник|m}}
*spanska: {{ö+|es|triángulo|m}}
*tyska: {{ö+|de|Triangel|f}}
*ukrainska: {{ö|uk|трикутник|m}}
{{ö-botten}}
87hyd5kukdexy1qt5ihry8i0ql7x13p
klåpare
0
15457
3703340
3525536
2022-08-19T08:45:26Z
PeterFisk
21271
+no: [[klossmajor]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-0|rot=klåpar|are=}}
'''klåpare'''
*{{uttal|sv|ipa=kloːpare}}
#en person som är [[oskicklig]] på det som den gör
#:{{citat|En hvar, som hade någon färdighet i teckning eller målning, äfven om han ur konstnärlig synpunkt ej kunde tillmätas någon högre rang än '''klåparens''', kunde blifva ritlärare vid ett af statens läroverk.|titel=[http://runeberg.org/oversitt/1/0357.html Våra öfversittare : ungdomsminnen och läroverksstudier]|år=1898|förf=Oscar Svahn}}
#:{{besläktade ord|[[klåpa]], [[klåperi]]}}
====Översättningar====
{{ö-topp|en person som är oskicklig på det som den gör}}
*bokmål: {{ö|no|klossmajor|m}}
*engelska: {{ö+|en|dabbler}}, {{ö+|en|bungler}}, {{ö+|en|bumbler}}, {{ö+|en|botcher}}, {{ö+|en|fumbler}}
*finska: {{ö+|fi|tunari}}
*italienska: {{ö+|it|pasticcione|m}}, {{ö+|it|maldestro}}, {{ö+|it|inetto|m}}, {{ö+|it|imbranato|m}}
*litauiska: {{ö|lt|nemokša|u}}, {{ö|lt|nevykėlis|m}}
*tyska: {{ö|de|Pfuscher|m}}, {{ö+|de|Stümper|m}}, {{ö|de|Pfuscherin|f}}, {{ö|de|Stümperin|f}}, {{ö+|de|Dilettant|m}}, {{ö+|de|Dilettantin|f}}
{{ö-botten}}
j55j5vp11zw1nhz58v135pbwa0dgnfp
3703341
3703340
2022-08-19T08:46:29Z
PeterFisk
21271
+no: [[kløne]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-0|rot=klåpar|are=}}
'''klåpare'''
*{{uttal|sv|ipa=kloːpare}}
#en person som är [[oskicklig]] på det som den gör
#:{{citat|En hvar, som hade någon färdighet i teckning eller målning, äfven om han ur konstnärlig synpunkt ej kunde tillmätas någon högre rang än '''klåparens''', kunde blifva ritlärare vid ett af statens läroverk.|titel=[http://runeberg.org/oversitt/1/0357.html Våra öfversittare : ungdomsminnen och läroverksstudier]|år=1898|förf=Oscar Svahn}}
#:{{besläktade ord|[[klåpa]], [[klåperi]]}}
====Översättningar====
{{ö-topp|en person som är oskicklig på det som den gör}}
*bokmål: {{ö|no|klossmajor|m}}, {{ö|no|kløne|m}}
*engelska: {{ö+|en|dabbler}}, {{ö+|en|bungler}}, {{ö+|en|bumbler}}, {{ö+|en|botcher}}, {{ö+|en|fumbler}}
*finska: {{ö+|fi|tunari}}
*italienska: {{ö+|it|pasticcione|m}}, {{ö+|it|maldestro}}, {{ö+|it|inetto|m}}, {{ö+|it|imbranato|m}}
*litauiska: {{ö|lt|nemokša|u}}, {{ö|lt|nevykėlis|m}}
*tyska: {{ö|de|Pfuscher|m}}, {{ö+|de|Stümper|m}}, {{ö|de|Pfuscherin|f}}, {{ö|de|Stümperin|f}}, {{ö+|de|Dilettant|m}}, {{ö+|de|Dilettantin|f}}
{{ö-botten}}
ml7juyxe0twm660xhjmic5iqpqtuwkd
rygg
0
16007
3703339
3680969
2022-08-19T08:42:20Z
PeterFisk
21271
+nl: [[rug]] (assisterat)
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-ar}}
{{media|Surface anatomy of the back-Gray.png|'''rygg''' (bakre del av kropp)}}
'''rygg'''
#[[bak]]re del av [[kropp]] från spets i [[svansben]]et upp till [[nacke]]n; även om vissa föremål, t.ex. [[klädesplagg]], [[bok]], [[stol]]
#:''Hon kliade honom på '''ryggen'''.''
#:''Jag tror jag skall måla '''ryggen''' på stolen grå.''
#:{{sammansättningar|[[handrygg]], [[stolsrygg]], [[ryggbast]], [[ryggmärg]], [[ryggrad]], [[ryggradsdjur]], [[ryggskott]], [[ryggsäck]], [[ryggtavla]], [[ryggvärk]]}}
#:{{synonymer|[[rigg]] ''(orsamål)''}}
#[[ås]], [[bergskam]], [[krön]], vanligen i form av [[bergsrygg]]
#:{{sammansättningar|[[fjällrygg]]}}
:{{avgränsare}}
:{{fraser|[[bakom ryggen på]], [[binda ris åt egen rygg]], [[ge råg i ryggen]], [[ha ryggen fri]], [[ha råg i ryggen]], [[hålla någon om ryggen]], [[inte röra någon i ryggen]], [[kröka ryggen]], [[lägga benen på ryggen]], [[ta rygg på]], [[vända någon ryggen]], [[vända ryggen till]]}}
:{{seäven|[[rygga]]}}
====Översättningar====
{{ö-topp|bakre del av kropp}}
*azerbajdzjanska: {{ö+|az|arxa}}
*bokmål: {{ö+|no|rygg}}
*bretonska: {{ö+|br|kein|m}}
*danska: {{ö+|da|ryg}}
*engelska: {{ö+|en|back}}
*esperanto: {{ö+|eo|dorso}}
*finska: {{ö+|fi|selkä}}
*franska: {{ö+|fr|dos|m}}
*frisiska: {{ö|fy|rêch}}
*hebreiska: {{ö+|he|גַּב|m|tr=gav}}
*isländska: {{ö+|is|bak|n}}
*italienska: {{ö+|it|schiena|f}}
*jiddisch: {{ö|yi|רוקן|m|tr=rukn}}
*katalanska: {{ö+|ca|esquena}}
*latin: {{ö|la|dorsum|n}}
*maltesiska: {{ö|mt|dahar}}
*nederländska: {{ö+|nl|rug|m}}
*polska: {{ö+|pl|plecy|p}}, {{ö+|pl|grzbiet|m}}
*portugisiska: {{ö+|pt|costas}}, {{ö+|pt|dorso}}
*romani: {{ö|rom|dumo}}
*ryska: {{ö+|ru|спина|f}}
*spanska: {{ö+|es|espalda|f}}
*svensk romani: {{ö|rmu|dummo}}
*turkiska: {{ö+|tr|sırt}}
*tyska: {{ö+|de|Rücken|m}}
*vietnamesiska: {{ö+|vi|lưng}}
{{ö-botten}}
{{ö-topp|bergskam}}
*engelska: {{ö+|en|ridge}}
*polska: {{ö+|pl|grzbiet|m}}
*spanska: {{ö+|es|cresta}}
*tyska: {{ö+|de|Rücken|m}}, {{ö|de|Bergrücken|m}}
{{ö-botten}}
==Bokmål==
===Substantiv===
{{no-subst-m-er}}
'''rygg''' {{u}}
#[[#Substantiv|rygg]]
==Bottniska==
===Substantiv===
{{gmq-bot-subst-m|rot=ryggj}}
'''rygg''' {{m}}
*{{uttal|gmq-bot|ipa=rɪ́ɡː}} ''(Luleå)''
#{{tagg|anatomi|språk=gmq-bot}}[[#Svenska|rygg]]
#späd [[telning]] av gran eller en, varmed takveden på kroppåsen sammanhålles därigenom att sådana ryggar inträdas genom de på takvedens övre ända borrade hål
:{{avgränsare}}
:{{etymologi|{{härledning|non|hryggr|språk=gmq-bot}}}}
:{{sammansättningar|[[ryggás]]}}
trmwb8lcfhz5dwbwr01fecii2vspa20
à
0
17883
3703293
3597667
2022-08-18T21:42:14Z
Skalman
414
sms
wikitext
text/x-wiki
{{se även|Appendix:Varianter/a}}
==Svenska==
===Preposition===
{{prep|sv}}
'''à'''
#{{tagg|kat=palindrom}} till ett pris av, per styck; på, för
#:''Han köpte tre äpplen '''à''' 2 kronor.''
#:{{sammansättningar|[[à-pris]]}}
#[[till]]; ''används mellan två sifferuppgifter''
#:''Föreningen har stormöte 3 '''à''' 5 gånger per år.''
#:''Kvinnor på 25 '''à''' 26 år''
====Översättningar====
{{ö-topp|per styck}}
*engelska: {{ö+|en|each}} ''(placeras '''efter''' det som är per styck)''
*franska: {{ö+|fr|à}}
*italienska: {{ö+|it|ognuno|m}} / {{ö|it|ognuna|f}} ''(båda placeras '''efter''' det som är per styck)''
*ryska: {{ö+|ru|по}} ''po'', {{ö+|ru|за}}
{{ö-botten}}
{{ö-topp|till}}
*engelska: {{ö+|en|to}}
*franska: {{ö+|fr|à}}
*italienska: {{ö+|it|a}}
*ryska: {{ö+|ru|до}}
{{ö-botten}}
==Franska==
===Preposition===
{{prep|fr}}
'''à'''
*{{uttal|fr|ipa=a}}
#{{tagg|kat=palindrom|språk=fr}} [[i]] (som ''[[au]]'' {{m}}, ''[[en]]'' {{f}} och ''[[aux]]'' {{p}}; används om länder och områden)
#:''Qu’est-ce que tu fais '''à''' Monaco?''
#::''Vad gör du '''i''' Monaco?''
#[[på]] (anger läge vid plats)
#:''Je suis '''à''' l’école.''
#::''Jag är '''på''' skolan.''
#[[vid]]
#*'''''À''' Noël.''
#::'''''Vid''' jul.''
#[[till]]; anger färd till en plats eller mellan två platser
#:''Je vais '''à''' Luc.''
#::''Jag åker '''till''' Luc.''
#att färdas med någonting
#:''aller '''à''' vélo''
#::''att åka cykel''
===Användning===
*''À'' och ''le'' kontraheras till ''[[au]]''. ''À'' och ''les'' kontraheras till ''[[aux]]'', medan ''à'' tillsammans med ''la'' eller ''l''' inte kontraheras.
===Partikel===
'''à'''
*{{uttal|fr|ipa=a}}
#[[att]] (infinitivmarkör)
#:'''''À''' faire: nettoyer, passer l'aspirateur.''
#:: '''Att''' göra: städa, dammsuga.
#:''Je n'ai rien '''à''' dire.''
#:: Jag har ingenting '''att''' säga.
==Portugisiska==
===Förkortning===
{{förkortning|pt}}
'''à'''
#{{tagg|kat=palindrom|språk=pt}} ''sammandragsförkortning av prepositionen ''[[a#Portugisiska|a]]'' och den bestämda artikeln ''[[a#Portugisiska|a]]
====Se även====
*[[ao]]
mbhkvv47aap6i723mgpt32dq6cscltl
indigo
0
18378
3703343
3617434
2022-08-19T09:12:35Z
Andreasl01
37996
/* Svenska */ formatering
wikitext
text/x-wiki
{{se även|Indigo}}
==Svenska==
===Adjektiv===
{{adj|sv}}
{{färg|#4B0082|indigo}}
'''indigo'''
#{{tagg|kat=färger}} som har blålila [[färg]]
#:{{hyponymer|[[blålila]]}}
====Översättningar====
{{ö-topp}}
*belarusiska: {{ö|be|індыга}}
*bokmål: {{ö|no|indigo}}
*bulgariska: {{ö|bg|индиго}}
*engelska: {{ö+|en|indigo}}
*esperanto: {{ö|eo|indiga}}
*finska: {{ö|fi|indigonsininen}}
*franska: {{ö+|fr|indigo}}
*färöiska: {{ö|fo|indigo}}
*isländska: {{ö|is|indígóblár}}
*italienska: {{ö+|it|indaco}}
*makedonska: {{ö|mk|индиго}}
*nederländska: {{ö+|nl|indigo}}
*polska: {{ö|pl|indygo}}
*portugisiska: {{ö+|pt|índigo}}
*rumänska: {{ö+|ro|indigo}}
*ryska: {{ö+|ru|инди́говый}}, {{ö+|ru|индиго}}
*spanska: {{ö+|es|índigo}}
*turkiska: {{ö+|tr|indigo}}
*tyska: {{ö+|de|indigofarben}}, {{ö|de|indigoblau}}
*ukrainska: {{ö|uk|індиго}}, {{ö|uk|інди́говий}}
{{ö-botten}}
8fp76tmgvz9uxfuaq73htwooxod4uc2
bas
0
18889
3703313
3627151
2022-08-19T07:15:59Z
Andreasl01
37996
/* Översättningar */ ö-topp|se → ö-se
wikitext
text/x-wiki
{{wikipedia|bas}}
{{se även|bås|baş|băs|baš|bás|bàs}}
==Svenska==
===Substantiv===
{{sv-subst-n-ar|betydelser=1-6.}}
{{sv-subst-n-er|betydelser=7-15.}}
'''bas'''
#{{tagg|musik}} [[mansröst]] eller [[instrument]] i det [[djup]]aste [[stämläget]]
#{{tagg|musik}} sångare som sjunger basstämma
#{{tagg|stränginstrument|kat=kortformer}} ''kortform av'' [[elbas]],
#{{tagg|stråkinstrument}} ''kortform av'' [[basfiol]]
#{{tagg|bleckblåsinstrument}} ''kortform av'' [[bastuba]]
#{{tagg|vardagligt}} [[arbetsledare]]
#:''Det är jag som är '''basen'''.''
#:{{synonymer|[[förman]]}}
#:{{besläktade ord|[[basa]]}}
#något som man utgår ifrån eller använder som [[grund]]
#:''Man kan göra soppa med fiskbuljong som '''bas'''.''
#:{{sammansättningar|[[basindustri]], [[baslivsmedel]], [[basnivå]], [[basår]], [[grytbas]], [[soppbas]]}}
#{{tagg|kemi}} kemiskt ämne som upptar [[väte]][[jon]]er
#:{{synonymer|[[alkalie]]}}
#:{{antonymer|[[syra]]}}
#:{{sammansättningar|[[baskonstant]]}}
#{{tagg|kemi|vardagligt}} ett ämne som, eventuellt i [[vatten]][[lösning]], har ett [[pH]]-värde över 7
#:{{antonymer|[[syra]]}}
#{{tagg|matematik}} [[tal]]et som ska upphöjas i en [[potens]]; exempelvis 2 i 2<sup>10</sup> = 1024
#{{tagg|matematik}} det tal som ligger till grund för ett [[positionssystem]]
#:''Även om människor föredrar att räkna med ett talsystem som använder 10 som '''bas''', så använder datorerna '''basen''' 2 istället.''
#{{tagg|matematik}} uppsättning [[vektor]]er sådana att varje element i ett givet vektorrum kan skrivas som en summa av dessa element
#:{{synonymer|[[basvektor]], [[baselement]]}}
#{{tagg|matematik}} [[horisontell]] sida nedtill i en [[triangel]], som t.ex. kan användas för areaberäkning
#{{tagg|elektronik}} den anslutning på en [[transistor]] som styr transistorns arbete
#{{tagg|militärvetenskap}} [[stödjepunkt]]; plats där personal, utrustning och/eller stridsledning finns
#:{{synonymer|[[militärbas]]}}
#:{{sammansättningar|[[marinbas]]}}
#{{tagg|kosmetika}} [[smink]] i form av en flytande [[hudfärgad]] [[kräm]] eller ett [[puder]] som [[jämna]]r ut [[hudton]]erna i ansiktet
#:{{synonymer|[[foundation]]}}
====Översättningar====
{{ö-topp|mansröst eller instrument i djupaste stämläget}}
*bokmål: {{ö+|no|bass|m}}
*finska: {{ö+|fi|basso}}
*isländska: {{ö|is|bassarödd|f}}
*tyska: {{ö+|de|Bass|m}}
{{ö-botten}}
{{ö-topp|sångare}}
*bokmål: {{ö+|no|bass|m}}, {{ö|no|bass-sanger|m}}, {{ö|no|bassanger|m}}
*engelska: {{ö+|en|bass}}
*isländska: {{ö|is|bassasöngvari|m}}
*tyska: {{ö+|de|Bassist|m}}
{{ö-botten}}
{{ö-se|elbas}}
{{ö-se|basfiol}}
{{ö-se|bastuba}}
{{ö-topp|arbetsledare}}
*bokmål: {{ö+|no|bas}}
*engelska: {{ö+|en|boss}}
*tyska: {{ö|de|Vorarbeiter|m}}, {{ö|de|Vormann|m}}, {{ö+|de|Polier|m}}
{{ö-botten}}
{{ö-topp|något som man utgår ifrån}}
*bokmål: {{ö|no|basis|m}}
*engelska: {{ö+|en|base}}
*tyska: {{ö+|de|Basis|f}}
{{ö-botten}}
{{ö-topp|kemiskt ämne som upptar vätejoner}}
*bokmål: {{ö+|no|base|m}}
*danska: {{ö|da|base}}
*engelska: {{ö+|en|base}}
*polska: {{ö+|pl|zasada}}
*tyska: {{ö+|de|Base|f}}, {{ö+|de|Lauge|f}}
{{ö-botten}}
{{ö-topp|ämne med pH över 7}}
*engelska: {{ö+|en|base}}
*franska: {{ö+|fr|base|f}}
*isländska: {{ö|is|basi|m}}
*italienska: {{ö+|it|base|f}}
*nederländska: {{ö+|nl|base}}
*portugisiska: {{ö+|pt|base|m}}
*spanska: {{ö+|es|base|m}}
*tyska: {{ö+|de|Base|f}}
{{ö-botten}}
{{ö-topp|tal i potens}}
*engelska: {{ö+|en|base}}
*tyska: {{ö+|de|Basis|f}}
{{ö-botten}}
{{ö-topp|tal som grund i positionssystem}}
*engelska: {{ö+|en|base}}, {{ö+|en|radix}}
{{ö-botten}}
{{ö-se|basvektor}}
{{ö-topp|horisontell sida nedtill i en triangel}}
{{ö-botten}}
{{ö-topp|transistoranslutning}}
*engelska: {{ö+|en|base}}
*tyska: {{ö+|de|Basis|f}}
{{ö-botten}}
{{ö-topp|militär stödjepunkt}}
*bokmål: {{ö+|no|base|m}}
*engelska: {{ö+|en|base}}
*isländska: {{ö+|is|bækistöð|f}}
*tyska: {{ö+|de|Basis|f}}
{{ö-botten}}
{{ö-se|foundation}}
==Franska==
===Adjektiv===
{{fr-adj-sx|fog=s}}
'''bas'''
*{{uttal|fr|ipa=bɑ}}
#{{tagg|text=om läge}} [[låg]]
#{{tagg|text=om höjd}} [[låg]]
#{{tagg|text=om toner|kat=musik|kat2=fysik|språk=fr}} [[låg]]
#:{{synonymer|[[grave]]}}
===Substantiv===
{{fr-subst-m-0}}
'''bas'''
*{{uttal|fr|ipa=bɑ}}
#[[botten]]
#[[strumpa]]
===Adverb===
{{adv|fr}}
'''bas'''
*{{uttal|fr|ipa=bɑ}}
#[[lågt]]
#[[tyst]]
000v0wzatiqptlt11s57x4922cbc6e4
tetragon
0
18971
3703265
3111446
2022-08-18T17:43:16Z
Andreasl01
37996
/* Svenska */ formatering
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[tetra-|tetra]][[-gon|gon]]'''
#{{tagg|geometri}} [[fyrhörning]]
#:{{synonymer|[[fyrhörning]]}}
#:{{hyperonymer|[[polygon]], [[månghörning]]}}
#:{{hyponymer|[[parallelltrapets]], [[trapets]]}}
#:{{kohyponymer|[[triangel]], [[pentagon]], [[hexagon]], [[heptagon]], [[oktogon]], [[nonagon]], [[dekagon]]}}
====Översättningar====
{{ö-topp|se [[fyrhörning]]}}
{{ö-botten}}
qi3muvtd56kt9nbuw4c2frlh2gzbrcb
3703266
3703265
2022-08-18T17:44:22Z
Andreasl01
37996
/* Översättningar */ ö-topp|se → ö-se
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[tetra-|tetra]][[-gon|gon]]'''
#{{tagg|geometri}} [[fyrhörning]]
#:{{synonymer|[[fyrhörning]]}}
#:{{hyperonymer|[[polygon]], [[månghörning]]}}
#:{{hyponymer|[[parallelltrapets]], [[trapets]]}}
#:{{kohyponymer|[[triangel]], [[pentagon]], [[hexagon]], [[heptagon]], [[oktogon]], [[nonagon]], [[dekagon]]}}
====Översättningar====
{{ö-se|fyrhörning}}
mz4lgbc2fkk6miir3r38d4571nh2bzg
pentagon
0
18978
3703267
3549049
2022-08-18T17:45:08Z
Andreasl01
37996
/* Översättningar */ ö-topp|se → ö-se
wikitext
text/x-wiki
{{se även|Pentagon}}
{{wikipedia|Pentagon (olika betydelser)}}
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[penta-|penta]][[-gon|gon]]'''
#{{tagg|geometri}} [[polygon]] med fem hörn
#:{{synonymer|[[femhörning]]}}
#:{{hyperonymer|[[polygon]]}}
====Översättningar====
{{ö-se|femhörning}}
==Engelska==
===Substantiv===
{{en-subst}}
'''pentagon'''
#{{tagg|geometri|språk=en}} [[femhörning]], [[#Svenska|pentagon]]
s0pbtkpap5cflrig1qeewbwnvcqufxq
3703311
3703267
2022-08-19T07:08:55Z
Andreasl01
37996
/* Svenska */ +kohyponymer
wikitext
text/x-wiki
{{se även|Pentagon}}
{{wikipedia|Pentagon (olika betydelser)}}
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[penta-|penta]][[-gon|gon]]'''
#{{tagg|geometri}} [[polygon]] med fem hörn
#:{{synonymer|[[femhörning]]}}
#:{{hyperonymer|[[polygon]]}}
#:{{kohyponymer|[[triangel]], [[tetragon]], [[hexagon]], [[heptagon]], [[oktogon]], [[nonagon]], [[dekagon]]}}
====Översättningar====
{{ö-se|femhörning}}
==Engelska==
===Substantiv===
{{en-subst}}
'''pentagon'''
#{{tagg|geometri|språk=en}} [[femhörning]], [[#Svenska|pentagon]]
rnwkxrp9oc6ixwy64vs5pbirjdlvc86
märka
0
26354
3703260
3693155
2022-08-18T16:50:40Z
Andreasl01
37996
/* Svenska */ formatering, översättningsrubrik
wikitext
text/x-wiki
{{se även|märkä}}
{{saknad-betydelse|sv|verb|slangord "ge stryk" eller något ditåt}}
==Svenska==
===Verb===
{{sv-verb-er|rot=märk|fog=t|perfpart=}}
'''märka'''
#bli medveten om något
#:''Jag '''märkte''' inte att någon annan gömde sig i rummet.''
#:''Hon kommer inte att '''märka''' något.''
#:{{synonymer|[[bemärka]], [[förmärka]], [[lägga märke till]], [[notera]], [[observera]], [[uppfatta]]}}
#[[förse]] med [[igenkänningstecken]]; göra lätt att känna igen
#:{{sammansättningar|[[anmärka]], [[brännmärka]], [[datummärka]], [[dödskallemärka]], [[frimärka]], [[kronmärka]], [[kulturminnesmärka]], [[ommärka]], [[prismärka]], [[ringmärka]], [[runmärka]], [[uppmärka]], [[utmärka]], [[öronmärka]]}}
:{{avgränsare}}
:{{seäven|[[märkbar]], [[märke]]}}
====Översättningar====
{{ö-topp|bli medveten}}
*bokmål: {{ö+|no|merke}}
*bulgariska: {{ö+|bg|забелязвам}}
*engelska: {{ö+|en|notice}}
*finska: {{ö+|fi|huomata}}
*franska: {{ö+|fr|remarquer}}, {{ö|fr|prendre conscience (de)}}, {{ö+|fr|se rendre compte}}
*italienska: {{ö+|it|notare}}
*portugisiska: {{ö+|pt|perceber}}, {{ö+|pt|notar}}
*spanska: {{ö|es|darse cuenta}}
*tyska: {{ö+|de|merken}}
{{ö-botten}}
{{ö-topp|förse med igenkänningstecken}}
*bokmål: {{ö+|no|merke}}
*bulgariska: {{ö+|bg|известие}}, {{ö+|bg|съобщение}}
*engelska: {{ö+|en|label}}, {{ö+|en|letter}}, (''skriva namn'') {{ö+|en|name}}
*finska: {{ö+|fi|merkitä}}
*tyska: {{ö+|de|markieren}}, {{ö+|de|kennzeichnen}}
{{ö-botten}}
qf59u2rckvgvp7thxprqq9h5nkcr8x1
a conto
0
26830
3703284
3307908
2022-08-18T20:43:19Z
Skalman
414
bättre definition utifrån divserse nätkällor och enwikt, dawikt, nowikt
wikitext
text/x-wiki
==Svenska==
===Adverb===
{{adv|sv}}
'''a conto'''
#{{tagg|ekonomi|text=om betalning}} (som [[delbetalning]]) [[i förskott]] utifrån ett [[estimat]], för att senare [[reglera]]s baserad på faktisk konsumtion
#:{{sammansättningar|[[a conto-betalning]], [[a conto-faktura]]}}
#:{{etymologi|Från italienska.}}
2ogtyu8y7ygi7qm5jg058ctmksbs69w
Pascals triangel
0
28218
3703263
3231456
2022-08-18T17:32:06Z
Andreasl01
37996
/* Svenska */ fixade (och flyttade upp) triangeln
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{subst|sv}}
<div class="thumb tright">
<div style="width: min-content;">
<pre style="white-space: pre;">
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
</pre>
<div class="thumbcaption">
De första sju raderna i Pascals triangel; varje tal (förutom den översta ettan) kan beräknas genom att ta summan av talet rakt ovanför och snett ovanför till vänster, där en tom plats räknas som noll.</div>
</div>
</div>
'''[[Pascal]]s [[triangel]]'''
#{{tagg|matematik}} triangulär uppställning av [[binomialkoefficient]]er på formen <math>{n \choose k}</math> där ''n'' är den aktuella raden och ''k'' den aktuella kolumnen; den första raden räknas som rad 0 och den första kolumnen räknas som kolumn 0
#:''Du kan slå upp binomialkoefficienterna i '''Pascals triangel'''.''
#:{{seäven|[[Pascals identitet]], [[Pascals pyramid]]}}
====Översättningar====
{{ö-topp}}
*engelska: {{ö+|en|Pascal's triangle}}
*ryska: {{ö|ru|треугольник Паскаля}}
*tyska: {{ö|de|Pascalsches Dreieck}}
{{ö-botten}}
{{ö-topp-granska|Följande översättningar är inte kontrollerade med avseende på versalisering av initialbokstäver:}}
*bokmål: {{ö|no|Pascals trekant}}
*finska: {{ö|fi|Pascalin kolmio}}
*franska: {{ö+|fr|triangle de Pascal}}
*hebreiska: {{ö|he|משולש פסקל}}
*isländska: {{ö|is|Pascal-þríhyrningur}}
*italienska: {{ö|it|triangolo di Tartaglia}}
*katalanska: {{ö|ca|triangle de Tartaglia}}
*kinesiska: {{ö|zh|杨辉三角形}}
*koreanska: {{ö|ko|파스칼의 삼각형}}
*litauiska: {{ö|lt|Paskalio trikampis}}
*nederländska: {{ö|nl|driehoek van Pascal}}
*persiska: {{ö|fa|مثلث خیام-پاسکال}}
*polska: {{ö|pl|trójkąt Pascala}}
*portugisiska: {{ö|pt|triângulo de Pascal}}
*serbiska: {{ö|sr|Паскалов троугао}}
*spanska: {{ö|es|triángulo de Pascal}}
*tjeckiska: {{ö|cs|Pascalův trojúhelník}}
*turkiska: {{ö|tr|Pascal üçgeni}}
*vietnamesiska: {{ö|vi|tam giác Pascal}}
{{ö-botten}}
cmwo6wp07985dcpri4wun11y5wdx4nk
fluga
0
36470
3703365
3693113
2022-08-19T11:57:38Z
Tapanpet
6520
+fi: [[perho]] (assisterat)
wikitext
text/x-wiki
{{wikipedia|flugor}}
{{saknad-betydelse|sv|??|fiskefluga}}
==Svenska==
===Substantiv===
{{sv-subst-n-or|fog=|pluralrot=flug}}
{{media|Calliphora augur whitebackground.jpg|(1) en fluga}}
{{media|BOWTIE red velvet pretied clipon.JPG|(2) en fluga}}
{{media|Fly lures.jpg|(4) olika flugor}}
'''fluga'''
#{{tagg|insekter|zoologi}} tvåvingad insekt av underordningen ''Brachycera'' av insektsordningen [[tvåvingade]] (''Diptera''); ofta avses särskilt [[husfluga]]n (''Musca domestica'')
#:{{sammansättningar|[[bananfluga]], [[eldfluga]], [[flugfiske]], [[flugfångare]], [[fluglarv]], [[flugsmälla]], [[flugsnappare]], [[flugsvamp]], [[husfluga]], [[spyfluga]]}}
#:{{fraser|[[inte göra en fluga förnär]], [[slå två flugor i en smäll]], [[fluga på väggen]]}}
#{{tagg|kläder}} band som knyts runt halsen i en [[rosett]] (bärs av män och pojkar i kombination med skjorta)
#plötslig företeelse som sprider sig snabbt, för att snart försvinna
#:{{citat|publ=[[w:Sydsvenskan|Sydsvenskan]]|titel=[http://www.sydsvenskan.se/sverige/sudoku-populart-sifferpussel/ Sudoku populärt sifferpussel]|år=2005|datum=22 oktober|Sudoku betyder ensam siffra på japanska, men spelet kommer från USA, exporterades till Japan, blev en '''fluga''' där och kom i våras till Europa.}}
#:{{synonymer|[[modenyck]], [[modefluga]], [[mode]]}}
#{{tagg|fiske}} insektsliknande bete som används för att få fisk med hjälp av att efterlikna en insekts beteende
:{{avgränsare}}
:{{etymologi|{{härledning|non|fluga}}}}
:{{besläktade ord|[[flugen]], [[fly]], [[flyga]], [[flygare]], [[flygg]], [[flygning]], [[flykt]], [[flykting]]}}
====Översättningar====
{{ö-topp|insekt}}
*belarusiska: {{ö|be|муха|f}}
*bokmål: {{ö+|no|flue|f}}
*danska: {{ö+|da|flue|u}}
*engelska: {{ö+|en|fly}}
*finska: {{ö+|fi|kärpänen}}
*franska: {{ö+|fr|mouche|f}}
*isländska: {{ö+|is|fluga|f}}
*italienska: {{ö+|it|mosca|f}}
*japanska: {{ö|ja|ハエ|tr=hae}}
*ladino: {{ö|lad|moshka|f}}, {{ö|lad|מושקה|f}}
*nynorska: {{ö|nn|fluge|f}}
*polska: {{ö+|pl|mucha|f}}
*ryska: {{ö+|ru|муха|f|tr=múcha}}
*tyska: {{ö+|de|Fliege|f}}
*ukrainska: {{ö+|uk|муха|f}}
{{ö-botten}}
{{ö-topp|band i rosett}}
*engelska: {{ö+|en|bow tie}}, {{ö+|en|bowtie}}
*finska: {{ö+|fi|rusetti}}
*franska: {{ö+|fr|nœud papillon|m}}
*italienska: {{ö+|it|farfalla|f}}
*ryska: {{ö+|ru|галстук-бабочка|m|tr=gálstuk-bábočka}}, {{ö+|ru|бабочка|f|tr=bábočka}}
*tyska: {{ö+|de|Fliege|f}}
{{ö-botten}}
{{ö-topp|plötslig företeelse}}
*engelska: {{ö+|en|craze}}, {{ö+|en|fad}}
*franska: {{ö+|fr|vogue|f}}, {{ö+|fr|engouement|m}}
*tyska: {{ö+|de|Fimmel|m}}
{{ö-botten}}
{{ö-topp|insektsliknande fiskebete}}
*finska: {{ö+|fi|perho}}
*tyska: {{ö+|de|Fliege|f}}
{{ö-botten}}
==Isländska==
===Substantiv===
{{is-subst-f-a|rot=flug|15=flugna|16=flugnanna}}
'''fluga''' {{f}}
#{{tagg|kat=insekter|språk=is}} [[fluga#Svenska|fluga]]
co3i8luzyl2zukzh8o0svb7f6v4ch37
led
0
42563
3703338
3635366
2022-08-19T08:40:15Z
Andreasl01
37996
/* Svenska */ formatering, +sammansättningar
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Adjektiv===
{{sv-adj-peri|pers=}}
'''led'''
#[[uttråkad]], [[utled]], [[less]]
#{{tagg|vardagligt}} elak; otrevlig
#:'''1937''': Severina Jakobsson (upptecknat av Britt Adenius), "Troll". Citerat i Susanne Nylund Skog; Fredrik Skott (23 juni 2020), [https://www.isof.se/om-oss/vara-bloggar/folkminnesarkiven-berattar/arkivberattelser/2020-06-23-samla-sagner-och-skapa-kulturarv.html "Samla sägner och skapa kulturarv"], isof.se, Institutet för språk och folkminnen, avsnitt "Sägner upptecknade av Britt Adenius", läst 24 juni 2020:
#::''Usch, vad det var '''lett'''!''
#:''Fy för den '''lede'''!''
#:''''' Lede''' Fi'', i betydelsen "Den grymma fienden".
:{{avgränsare}}
:{{varianter|[[le]]}}
:{{fraser|[[den lede]]}}
====Översättningar====
{{ö-topp|uttråkad, utled, less}}
*engelska: {{ö+|en|bored}}, {{ö+|en|sick}}
*katalanska: {{ö|ca|fart}}
*spanska: {{ö+|es|harto}}
*tyska: {{ö+|de|leid}}, {{ö+|de|überdrüssig}}
{{ö-botten}}
===Substantiv===
{{sv-subst-t-0|betydelser=1.}}
{{sv-subst-n-er|betydelser=2.}}
'''led''' 1 {{n}}
#individer av något (särskilt människor) som står uppställda på [[rad]]
#:''Ställ dig sist i '''ledet'''!''
#:{{seäven|[[kö]]}}
#del av något (såsom ett förlopp, en abstrakt kedja)
#:''Det var ett '''led''' i utvecklingen.''
#{{tagg|matematik}} det som står intill ett [[likhetstecken|likhets]]- eller [[olikhetstecken]]
#:''Förkorta bort massan i båda '''leden'''.''
#:{{sammansättningar|[[ekvationsled]], [[vänsterled]], [[högerled]]}}
#:{{synonymer|[[ledd]]}}
#{{tagg|lingvistik}} del av [[ord]]
#:{{besläktade ord|[[enledad]], [[tvåledad]]}}
#:{{sammansättningar|[[förled]], [[efterled]]}}
#:{{seäven|[[affix]]}}
#[[riktning]], håll
#:''På andra sidan gatan kör bilarna i motsatt '''led'''.''
#:{{sammansättningar|[[breddled]], [[djupled]], [[horisontalled]], [[höjdled]], [[lodled]], [[längdled]], [[sidled]], [[vertikalled]], [[västerled]], [[österled]]}}
'''led''' 2 {{u}}
#{{tagg|anatomi}} del av [[skelett]]et där två eller flera [[ben]] möter varandra och via en [[muskel]] tillåter rörelse
#:''Vi brukar alltid värma upp '''lederna''' före träning för att förebygga skador.''
#:{{sammansättningar|[[armled]], [[axelled]], [[fingerled]], [[fotled]], [[handled]], [[höftled]], [[knäled]], [[ledband]], [[ledbrosk]], [[ledkapsel]], [[ledvärk]], [[ledvätska]], [[nackled]], [[tumled]]}}
#[[väg]], [[farled]]
#:''Att köra skoter utanför '''leden''' är förbjudet.''
#:{{sammansättningar|[[cykelled]], [[farled]], [[genomfartsled]], [[huvudled]], [[motionsled]], [[motortrafikled]], [[trafikled]], [[vandringsled]]}}
::{{grammatik|Kontroversiella och instabila böjningsmönster för diverse betydelser och sammansättningar.}}
====Översättningar====
{{ö-topp|1.1 individer på rad}}
*bokmål: {{ö|no|geledd|n}}
*engelska: {{ö+|en|queue}}, {{ö+|en|line}}
*katalanska: {{ö+|ca|cua|f}}
*nynorska: {{ö|nn|geledd|n}}
*portugisiska: {{ö+|pt|fila|f}}
*spanska: {{ö+|es|línea|f}}, {{ö+|es|cola}}
*tyska: {{ö+|de|Glied|n}}, {{ö+|de|Reihe|f}}
{{ö-botten}}
{{ö-topp|1.2 del}}
*engelska: {{ö+|en|stage}}, {{ö+|en|part}}, {{ö+|en|link}}
*katalanska: {{ö+|ca|part}}
*nederländska: {{ö+|nl|schakel}}
*nynorska: {{ö|nn|led|m}}, {{ö|nn|ledd|n}}
*spanska: {{ö+|es|parte}}
*tyska: {{ö+|de|Glied|n}}
{{ö-botten}}
{{ö-topp|1.3 matematik}}
*engelska: {{ö+|en|side}}
*tyska: {{ö+|de|Term|m}}
{{ö-botten}}
{{ö-topp|1.4 lingvistik}}
*engelska: {{ö+|en|stem}}, {{ö+|en|affix}}
{{ö-botten}}
{{ö-topp|1.5 riktning, håll}}
*engelska: {{ö+|en|direction}}, {{ö+|en|way}}
*tyska: {{ö+|de|Richtung|f}}
{{ö-botten}}
{{ö-topp|2.1 anatomi}}
*armeniska: {{ö|hy|հոդ}} (hod)
*bokmål: {{ö+|no|ledd|n}}
*danska: {{ö+|da|led}}
*engelska: {{ö+|en|joint}}
*esperanto: {{ö|eo|artiko}}
*franska: {{ö+|fr|articulation|f}}
*italienska: {{ö+|it|articolazione|f}}
*nynorska: {{ö|nn|led|m}}, {{ö|nn|ledd|n}}
*polska: {{ö+|pl|staw|m}}
*portugisiska: {{ö+|pt|articulação|f}}, {{ö+|pt|junta|f}}
*ryska: {{ö+|ru|сустав}}
*spanska: {{ö+|es|articulación|f}}
*tyska: {{ö+|de|Gelenk}}
{{ö-botten}}
{{ö-topp|2.2 väg, farled}}
*bokmål: {{ö+|no|lei|f}}
*engelska: {{ö+|en|way}}, {{ö+|en|route}}, {{ö+|en|track}}
*finska: {{ö+|fi|väylä}}
*tyska: {{ö+|de|Weg|m}}, {{ö+|de|Fahrrinne|f}}, {{ö+|de|Führe|f|not=bergsbestigning}}
{{ö-botten}}
===Verb===
'''led'''
#{{böjning|sv|verb|leda}}
#{{böjning|sv|verb|lida}}
==Engelska==
===Adjektiv===
{{adj|en}}
'''led'''
#{{avledning|en|lead|ordform=perfpart}}
===Verb===
'''led'''
#{{böjning|en|verb|lead}}
7mppzdtnadc2fu0y925igz5bxptb93b
3703342
3703338
2022-08-19T08:57:15Z
Andreasl01
37996
/* Svenska */ +sammansättningar
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Adjektiv===
{{sv-adj-peri|pers=}}
'''led'''
#[[uttråkad]], [[utled]], [[less]]
#{{tagg|vardagligt}} elak; otrevlig
#:'''1937''': Severina Jakobsson (upptecknat av Britt Adenius), "Troll". Citerat i Susanne Nylund Skog; Fredrik Skott (23 juni 2020), [https://www.isof.se/om-oss/vara-bloggar/folkminnesarkiven-berattar/arkivberattelser/2020-06-23-samla-sagner-och-skapa-kulturarv.html "Samla sägner och skapa kulturarv"], isof.se, Institutet för språk och folkminnen, avsnitt "Sägner upptecknade av Britt Adenius", läst 24 juni 2020:
#::''Usch, vad det var '''lett'''!''
#:''Fy för den '''lede'''!''
#:''''' Lede''' Fi'', i betydelsen "Den grymma fienden".
:{{avgränsare}}
:{{varianter|[[le]]}}
:{{fraser|[[den lede]]}}
====Översättningar====
{{ö-topp|uttråkad, utled, less}}
*engelska: {{ö+|en|bored}}, {{ö+|en|sick}}
*katalanska: {{ö|ca|fart}}
*spanska: {{ö+|es|harto}}
*tyska: {{ö+|de|leid}}, {{ö+|de|überdrüssig}}
{{ö-botten}}
===Substantiv===
{{sv-subst-t-0|betydelser=1.}}
{{sv-subst-n-er|betydelser=2.}}
'''led''' 1 {{n}}
#individer av något (särskilt människor) som står uppställda på [[rad]]
#:''Ställ dig sist i '''ledet'''!''
#:{{seäven|[[kö]]}}
#del av något (såsom ett förlopp, en abstrakt kedja)
#:''Det var ett '''led''' i utvecklingen.''
#{{tagg|matematik}} det som står intill ett [[likhetstecken|likhets]]- eller [[olikhetstecken]]
#:''Förkorta bort massan i båda '''leden'''.''
#:{{sammansättningar|[[ekvationsled]], [[vänsterled]], [[högerled]]}}
#:{{synonymer|[[ledd]]}}
#{{tagg|lingvistik}} del av [[ord]]
#:{{besläktade ord|[[enledad]], [[tvåledad]]}}
#:{{sammansättningar|[[förled]], [[efterled]]}}
#:{{seäven|[[affix]]}}
#[[riktning]], håll
#:''På andra sidan gatan kör bilarna i motsatt '''led'''.''
#:{{sammansättningar|[[breddled]], [[djupled]], [[horisontalled]], [[höjdled]], [[lodled]], [[längdled]], [[sidled]], [[vertikalled]], [[västerled]], [[österled]]}}
'''led''' 2 {{u}}
#{{tagg|anatomi}} del av [[skelett]]et där två eller flera [[ben]] möter varandra och via en [[muskel]] tillåter rörelse
#:''Vi brukar alltid värma upp '''lederna''' före träning för att förebygga skador.''
#:{{sammansättningar|[[armled]], [[axelled]], [[fingerled]], [[fotled]], [[handled]], [[höftled]], [[knäled]], [[ledband]], [[ledbrosk]], [[ledkapsel]], [[ledvärk]], [[ledvätska]], [[nackled]], [[tumled]]}}
#[[väg]], [[farled]]
#:''Att köra skoter utanför '''leden''' är förbjudet.''
#:{{sammansättningar|[[bergsled]], [[cykelled]], [[farled]], [[genomfartsled]], [[huvudled]], [[ledkryss]], [[ledmarkering]], [[motionsled]], [[motortrafikled]], [[sjöled]], [[skidled]], [[skogsled]], [[skoterled]], [[snöskoterled]], [[trafikled]], [[vandringsled]]}}
::{{grammatik|Kontroversiella och instabila böjningsmönster för diverse betydelser och sammansättningar.}}
====Översättningar====
{{ö-topp|1.1 individer på rad}}
*bokmål: {{ö|no|geledd|n}}
*engelska: {{ö+|en|queue}}, {{ö+|en|line}}
*katalanska: {{ö+|ca|cua|f}}
*nynorska: {{ö|nn|geledd|n}}
*portugisiska: {{ö+|pt|fila|f}}
*spanska: {{ö+|es|línea|f}}, {{ö+|es|cola}}
*tyska: {{ö+|de|Glied|n}}, {{ö+|de|Reihe|f}}
{{ö-botten}}
{{ö-topp|1.2 del}}
*engelska: {{ö+|en|stage}}, {{ö+|en|part}}, {{ö+|en|link}}
*katalanska: {{ö+|ca|part}}
*nederländska: {{ö+|nl|schakel}}
*nynorska: {{ö|nn|led|m}}, {{ö|nn|ledd|n}}
*spanska: {{ö+|es|parte}}
*tyska: {{ö+|de|Glied|n}}
{{ö-botten}}
{{ö-topp|1.3 matematik}}
*engelska: {{ö+|en|side}}
*tyska: {{ö+|de|Term|m}}
{{ö-botten}}
{{ö-topp|1.4 lingvistik}}
*engelska: {{ö+|en|stem}}, {{ö+|en|affix}}
{{ö-botten}}
{{ö-topp|1.5 riktning, håll}}
*engelska: {{ö+|en|direction}}, {{ö+|en|way}}
*tyska: {{ö+|de|Richtung|f}}
{{ö-botten}}
{{ö-topp|2.1 anatomi}}
*armeniska: {{ö|hy|հոդ}} (hod)
*bokmål: {{ö+|no|ledd|n}}
*danska: {{ö+|da|led}}
*engelska: {{ö+|en|joint}}
*esperanto: {{ö|eo|artiko}}
*franska: {{ö+|fr|articulation|f}}
*italienska: {{ö+|it|articolazione|f}}
*nynorska: {{ö|nn|led|m}}, {{ö|nn|ledd|n}}
*polska: {{ö+|pl|staw|m}}
*portugisiska: {{ö+|pt|articulação|f}}, {{ö+|pt|junta|f}}
*ryska: {{ö+|ru|сустав}}
*spanska: {{ö+|es|articulación|f}}
*tyska: {{ö+|de|Gelenk}}
{{ö-botten}}
{{ö-topp|2.2 väg, farled}}
*bokmål: {{ö+|no|lei|f}}
*engelska: {{ö+|en|way}}, {{ö+|en|route}}, {{ö+|en|track}}
*finska: {{ö+|fi|väylä}}
*tyska: {{ö+|de|Weg|m}}, {{ö+|de|Fahrrinne|f}}, {{ö+|de|Führe|f|not=bergsbestigning}}
{{ö-botten}}
===Verb===
'''led'''
#{{böjning|sv|verb|leda}}
#{{böjning|sv|verb|lida}}
==Engelska==
===Adjektiv===
{{adj|en}}
'''led'''
#{{avledning|en|lead|ordform=perfpart}}
===Verb===
'''led'''
#{{böjning|en|verb|lead}}
5yzeu4lr4hwcz3tw5h6rep0xhv9scdb
rekord
0
44894
3703322
3655901
2022-08-19T07:25:59Z
2A01:B740:1F:2030:49D3:34D:D129:481E
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-0}}
'''rekord''' ''n''
#det extremaste resultat eller värde för en viss bedrift, särskilt i tävlingssammanhang
#:'''''Rekordet''' i längdhopp är svårslaget.''
#:''Hon slog sitt gamla '''rekord''' med hela sju sekunder.''
#:''Nya '''värmerekord''' väntas under den kommande månaden, med extrem hetta och luftfuktighet.''
#:{{sammansättningar|[[bottenrekord]], [[publikrekord]], [[rekordfart]], [[rekordförsök]], [[rekordhelg]], [[rekordvecka]], [[rekordvärme]], [[rekordår]], [[värmerekord]]}}
#:{{fraser|[[sätta rekord]]}}
====Översättningar====
{{ö-topp|det extremaste resultat}}
*engelska: {{ö+|en|record}}
*esperanto: {{ö|eo|rekordo}}
*finska: {{ö+|fi|ennätys}}
*franska: {{ö+|fr|record|m}}
*nederländska: {{ö+|nl|record|n}}
*polska: {{ö+|pl|rekord|m}}
*turkiska: {{ö+|tr|rekor}}
*tyska: {{ö+|de|Rekord|m}}
{{ö-botten}}
leooq17c2tpbc967g4gcgs9r2pty6hn
3703323
3703322
2022-08-19T07:26:32Z
2A01:B740:1F:2030:49D3:34D:D129:481E
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-0}}
'''rekord''' ''n''
#det extremaste resultat eller värde för en viss bedrift, särskilt i tävlingssammanhang
#:'''''Rekordet''' i längdhopp är svårslaget.''
#:''Hon slog sitt gamla '''rekord''' med hela sju sekunder.''
#:''Nya '''värmerekord''' väntas under den kommande månaden, med extrem hetta och luftfuktighet.''
#:{{sammansättningar|[[bottenrekord]], [[Europarekord]], [[publikrekord]], [[rekordfart]], [[rekordförsök]], [[rekordhelg]], [[rekordvecka]], [[rekordvärme]], [[rekordår]], [[världsrekord]], [[värmerekord]]}}
#:{{fraser|[[sätta rekord]]}}
====Översättningar====
{{ö-topp|det extremaste resultat}}
*engelska: {{ö+|en|record}}
*esperanto: {{ö|eo|rekordo}}
*finska: {{ö+|fi|ennätys}}
*franska: {{ö+|fr|record|m}}
*nederländska: {{ö+|nl|record|n}}
*polska: {{ö+|pl|rekord|m}}
*turkiska: {{ö+|tr|rekor}}
*tyska: {{ö+|de|Rekord|m}}
{{ö-botten}}
mbl62qe9oiunm2sjozuq72rxnzoda1a
hexagon
0
45833
3703269
3574892
2022-08-18T17:48:35Z
Andreasl01
37996
+hr: [[šesterokut]] (assisterat)
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[hexa-|hexa]][[-gon|gon]]'''
#{{tagg|geometri}} [[sexhörning]]; en plan geometrisk figur med sex sidor
#:{{etymologi|Från grekiska [[εξ]] (''hex'', talet [[sex]]) + [[γωνία]] (''gonia'', [[vinkel]])}}
#:{{hyperonymer|[[polygon]], [[månghörning]]}}
====Kohyponymer====
*[[triangel]]
*[[tetragon]]
*[[pentagon]]
*[[heptagon]]
*[[oktagon]]
*[[nonagon]]
*[[dekagon]]
====Besläktade ord====
*[[hexaflexagon]]
====Synonymer====
*[[sexhörning]]
====Översättningar====
{{ö-topp}}
*asturiska: {{ö|ast|hexágonu}}
*danska: {{ö|da|sekskant}}, {{ö|da|heksagon}}, {{ö|da|hexagon}}
*engelska: {{ö+|en|hexagon}}
*finska: {{ö+|fi|kuusikulmio}}, {{ö+|fi|heksagoni}}
*franska: {{ö+|fr|hexagone|m}}
*iriska: {{ö|ga|heicseagán}}
*italienska: {{ö+|it|esagono|m}}
*kroatiska: {{ö|hr|šesterokut|m}}
*kurdiska: {{ö+|ku|şeşgoşe}}
*nynorska: {{ö|nn|heksagon}}
*polska: {{ö+|pl|sześciokąt|m}}
*spanska: {{ö|es|sexángulo|m}}, {{ö+|es|hexágono|m}}
*turkiska: {{ö+|tr|altıgen}}
*tyska: {{ö+|de|Hexagon|n}}, {{ö+|de|Hexagon|n}}, {{ö+|de|Sechseck|n}}
{{ö-botten}}
==Engelska==
===Substantiv===
{{en-subst}}
'''hexagon'''
#{{tagg|geometri|språk=en}} [[sexhörning]], [[#Svenska|hexagon]]
5jfohceug24h3gg4heeb8nog371m4in
3703270
3703269
2022-08-18T17:52:13Z
Andreasl01
37996
/* Svenska */ formatering
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[hexa-|hexa]][[-gon|gon]]'''
#{{tagg|geometri}} [[sexhörning]]; en plan geometrisk figur med sex sidor
#:{{etymologi|Från grekiska [[εξ]] (''hex'', talet [[sex]]) + [[γωνία]] (''gonia'', [[vinkel]])}}
#:{{synonymer|[[sexhörning]]}}
#:{{hyperonymer|[[polygon]], [[månghörning]]}}
#:{{kohyponymer|[[triangel]], [[tetragon]], [[pentagon]], [[heptagon]], [[oktogon]], [[nonagon]], [[dekagon]]}}
#:{{besläktade ord|[[hexaflexagon]]}}
====Översättningar====
{{ö-topp}}
*asturiska: {{ö|ast|hexágonu}}
*danska: {{ö|da|sekskant}}, {{ö|da|heksagon}}, {{ö|da|hexagon}}
*engelska: {{ö+|en|hexagon}}
*finska: {{ö+|fi|kuusikulmio}}, {{ö+|fi|heksagoni}}
*franska: {{ö+|fr|hexagone|m}}
*iriska: {{ö|ga|heicseagán}}
*italienska: {{ö+|it|esagono|m}}
*kroatiska: {{ö|hr|šesterokut|m}}
*kurdiska: {{ö+|ku|şeşgoşe}}
*nynorska: {{ö|nn|heksagon}}
*polska: {{ö+|pl|sześciokąt|m}}
*spanska: {{ö|es|sexángulo|m}}, {{ö+|es|hexágono|m}}
*turkiska: {{ö+|tr|altıgen}}
*tyska: {{ö+|de|Hexagon|n}}, {{ö+|de|Hexagon|n}}, {{ö+|de|Sechseck|n}}
{{ö-botten}}
==Engelska==
===Substantiv===
{{en-subst}}
'''hexagon'''
#{{tagg|geometri|språk=en}} [[sexhörning]], [[#Svenska|hexagon]]
hyg6j1w9m2llhgqcpiavz80ra0kdjsx
nonagon
0
45835
3703308
3111644
2022-08-19T07:01:08Z
Andreasl01
37996
/* Svenska */ härledning, formatering
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[nona-|nona]][[-gon|gon]]'''
#{{tagg|geometri}} [[niohörning]]; en plan [[geometrisk figur]] med nio sidor
#:{{synonymer|[[niohörning]]}}
#:{{etymologi|Från {{härledning-|la|nonnus|[[nio]]}} + {{härledning-|grc|γωνία|[[vinkel]]|tr=gonia}}.}}
#:{{hyperonymer|[[polygon]], [[månghörning]]}}
#:{{kohyponymer|[[triangel]], [[tetragon]], [[pentagon]], [[hexagon]], [[heptagon]], [[oktogon]], [[dekagon]]}}
====Översättningar====
{{ö-se|niohörning}}
le1yiayg4dl8wgzmbugvwujp6a68gj9
dekagon
0
45836
3703309
3275476
2022-08-19T07:03:09Z
Andreasl01
37996
/* Svenska */ formatering
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[deka-|deka]][[-gon|gon]]'''
#{{tagg|geometri}} [[tiohörning]]; en plan [[geometrisk figur]] med tio sidor
#:{{etymologi|{{härledning|grc|δεκα|tr=deka|talet tio|punkt=-}} + [[γωνία]] (''gonia'', [[vinkel]]).}}
#:{{synonymer|[[tiohörning]]}}
#:{{hyperonymer|[[polygon]], [[månghörning]]}}
#:{{kohyponymer|[[triangel]], [[tetragon]], [[pentagon]], [[hexagon]], [[heptagon]], [[oktogon]], [[nonagon]]}}
====Översättningar====
{{ö-topp}}
*asturiska: {{ö|ast|decágonu}}
*engelska: {{ö+|en|decagon}}
*finska: {{ö|fi|kymmenkulmio}}
*franska: {{ö|fr|décagone}}
*iriska: {{ö|ga|deacagán}}
*italienska: {{ö+|it|decagono}}
*nynorska: {{ö|nn|dekagon}}
*spanska: {{ö+|es|decágono}}
*tyska: {{ö|de|Dekagon|n}}
{{ö-botten}}
4uhheoxwrzwa6wa8816ju44a3jijtff
millennium
0
62035
3703315
3637817
2022-08-19T07:17:08Z
Andreasl01
37996
/* Översättningar */ ö-topp|se → ö-se
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-t-er|rot=millenni}}
'''millennium'''
#{{tagg|kat=tidsuttryck}} [[årtusende]]; en period av tusen år och egentligen då ett kalenderårtusende
====Översättningar====
{{ö-se|årtusende}}
==Engelska==
===Substantiv===
{{en-subst|2=[[millennia]], [[millenniums]]|4=[[millennia's]], [[millenniums']]}}
'''millennium'''
#[[#Svenska|millennium]], [[årtusende]]
1m2v8fw1qxi1vbjqlrulcfwo21cevul
kavel
0
65866
3703274
3694047
2022-08-18T18:13:20Z
188.238.106.86
+tr: [[merdane]]; +tr: [[oklava]] (assisterat)
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-ar|fog=|pluralrot=kavl}}
{{media|Rollingpin.jpg|kavel}}
'''kavel'''
#{{tagg|köksredskap}} redskap för tillplattning av [[deg]] vid bakning
#:{{varianter|kavle}}
#:{{besläktade ord|[[kavla]]}}
#:{{sammansättningar|[[brödkavel]]}}
#handtag på fäktredskap
#:''Utsmyckningen på klingan var riktad mot svärdets '''kavel'''.''
====Översättningar====
{{ö-topp|köksredskap}}
*bokmål: {{ö+|no|kjevle|n}}
*danska: {{ö|da|kagerulle|c}}
*engelska: {{ö+|en|rolling pin}}
*finska: {{ö+|fi|kaulin}}
*franska: {{ö+|fr|rouleau à pâtisserie|m}}
*polska: {{ö+|pl|wałek do ciasta|m}}
*ryska: {{ö+|ru|скалка}}
*turkiska: {{ö+|tr|merdane}}, {{ö+|tr|oklava}}
*tyska: {{ö+|de|Nudelholz|n}}, {{ö|de|Teigrolle|f}}
{{ö-botten}}
3nu4wjsc8m87040bhx09q8ohk6ugc39
trehörning
0
72106
3703310
3089819
2022-08-19T07:04:13Z
Andreasl01
37996
/* Översättningar */ ö-topp|se → ö-se
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-ar}}
'''[[tre]][[-hörning|hörning]]'''
#{{tagg|geometri|vardagligt}} [[triangel]], en [[månghörning]]
#:{{användning|Se [[månghörning]] för en diskussion om språkbruket.}}
#:{{hyperonymer|[[månghörning]]}}
====Översättningar====
{{ö-se|triangel}}
6y412bu6bee5e4jkkh92t5zbsysop9q
sexhörning
0
72107
3703268
3467945
2022-08-18T17:47:10Z
Andreasl01
37996
/* Översättningar */ ö-topp|se → ö-se
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-ar}}
'''[[sex]][[-hörning|hörning]]'''
#{{tagg|geometri|vardagligt}} [[hexagon]], en [[månghörning]]
#:{{användning|Se [[månghörning]] för en diskussion om språkbruket.}}
#:{{hyperonymer|[[månghörning]]}}
====Översättningar====
{{ö-se|hexagon}}
oez4dqo09hgb27yavofahqoy0uxs222
tiohörning
0
72110
3703312
2833182
2022-08-19T07:11:56Z
Andreasl01
37996
/* Svenska */ ====Översättningar==== {{ö-se|dekagon}}
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-ar}}
'''[[tio]][[-hörning|hörning]]'''
#{{tagg|geometri|vardagligt}} [[dekagon]], en [[månghörning]]
#:{{användning|Se [[månghörning]] för en diskussion om språkbruket.}}
#:{{hyperonymer|[[månghörning]]}}
====Översättningar====
{{ö-se|dekagon}}
d6t0dpoxzr8h0ao72z670xn3oo1g4gn
sjuhörning
0
72111
3703271
3089939
2022-08-18T17:53:35Z
Andreasl01
37996
/* Översättningar */ ö-topp|se → ö-se
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-ar}}
'''[[sju]][[-hörning|hörning]]'''
#{{tagg|geometri|vardagligt}} [[heptagon]], en [[månghörning]]
#:{{användning|Se [[månghörning]] för en diskussion om språkbruket.}}
#:{{hyperonymer|[[månghörning]]}}
====Översättningar====
{{ö-se|heptagon}}
c5l3r7bzzbkejvoiu0old6elm1nigy4
ftw
0
72933
3703239
3584006
2022-08-18T15:26:27Z
213.89.158.0
/* Förkortning */
wikitext
text/x-wiki
==Engelska==
===Förkortning===
{{förkortning|en}}
'''ftw'''
#{{tagg|chattspråk|språk=en}} ''förkortning för'' [[for the win]]
:{{avgränsare}}
:{{varianter|[[FTW]]}}
79d8pn2swsbfe13o3nxgz34m21md04w
3703272
3703239
2022-08-18T18:07:54Z
Skalman
414
Återställde redigeringar av [[Special:Contributions/213.89.158.0|213.89.158.0]] ([[User talk:213.89.158.0|användardiskussion]]) till senaste versionen av [[User:Taylorbot|Taylorbot]]
wikitext
text/x-wiki
==Engelska==
===Förkortning===
{{förkortning|en}}
'''ftw'''
#{{tagg|chattspråk|språk=en}} ''förkortning för'' [[for the win]]
#{{tagg|chattspråk|språk=en}} ''förkortning för'' [[Fuck the world.]]
#{{tagg|slang|språk=en}} ''förkortning för'' [[Forever two wheels.]]
:{{avgränsare}}
:{{varianter|[[FTW]]}}
0uoyglfk6hmk881bf87hwiocg0enamt
tie
0
119026
3703350
3647041
2022-08-19T09:36:27Z
Andreasl01
37996
/* Engelska */ formatering, +sammansättningar
wikitext
text/x-wiki
==Svenska==
===Räkneord===
{{räkn|sv}}
'''tie'''
#{{tagg|vardagligt|dialektalt}} [[tio]]
==Bokmål==
===Verb===
{{no-verb-r|3=[[tidde]], [[tiet]]|4=[[tidd]], [[tiet]]|5=ti|prespart=tiende|perfpart=-}}
'''tie'''
#[[tiga]]
==Engelska==
===Verb===
{{en-verb-e|rot=ti|3=[[tieing]], [[tying]]}}
'''tie'''
*{{uttal|en|ipa=taɪ}}
#[[knyta]], [[binda]]
#{{tagg|kat=sport|språk=en}}spela [[oavgjort]] i [[spel]] eller [[sport]]
:{{avgränsare}}
:{{homofoner|[[Thai]], [[Ty]]}}
===Substantiv===
{{en-subst}}
'''tie'''
#{{tagg|amerikansk engelska|järnväg|språk=en}} [[sliper]]
#:{{synonymer|[[railroad tie]], [[railway tie]], [[rail tie]], [[crosstie]], [[railway sleeper]]}}
#[[band]], [[snöre]]
#:{{sammansättningar|[[bowtie]], [[necktie]], [[twist tie]]}}
#{{tagg|kat=kläder|språk=en}}[[slips]]
#:{{synonymer|[[necktie]]}}
#[[oavgjort]] resultat
#:{{sammansättningar|[[tiebreak]]}}
==Finska==
===Substantiv===
'''tie'''
#[[väg]]
#:{{sammansättningar|[[jäätie]], [[kehätie]], [[keskikaidetie]], [[maantie]], [[matkailutie]], [[moottoritie]], [[moottoriliikennetie]], [[piennartie]], [[pyörätie]], [[rautatie]], [[suojatie]], [[talvitie]], [[tiekirkko]], [[tienkäyttäjä]], [[tienristeys]], [[tietyö]], [[tieverkko]], [[valtatie]]}}
74koz8fgtdq79ufb4w114xlpkkb3iuh
bow
0
123640
3703346
3700915
2022-08-19T09:25:22Z
Andreasl01
37996
/* Engelska */ formatering, +sammansättning
wikitext
text/x-wiki
==Engelska==
===Substantiv===
{{en-subst}}
'''bow 1'''
*{{uttal|en|ipa=bəʊ|region=Storbritannien}}
*{{uttal|en|ipa=boʊ|region=USA}}
#[[båge]], [[rundning]], [[krökning]]
#:{{sammansättningar|[[rainbow]]}}
#[[rosett]]
#:{{sammansättningar|[[bowtie]]}}
#{{tagg|kat=vapen|språk=en}} [[pilbåge]], [[båge]]
#:{{sammansättningar|[[bowman]], [[crossbow]], [[longbow]], [[shortbow]]}}
#{{tagg|kat=musik|språk=en}} [[stråke]]
:{{avgränsare}}
:{{etymologi|Från germanska roten *bugan-, varav även svenska ''[[båge]]''.}}
'''bow 2'''
*{{uttal|en|ipa=baʊ}}
#[[bog]] (på fartyg); [[för]] (på fartyg), [[stäv]]
#:{{etymologi|Troligen inlånat från antingen lågtyska eller ett nordiskt språk. Besläktat med svenska ''[[bog]]''.}}
'''bow 3'''
*{{uttal|en|ipa=baʊ}}
#[[bugning]]
===Verb===
{{en-verb}}
'''bow'''
*{{uttal|en|ipa=baʊ}}
#[[böja]]; [[kröka]]
#[[buga]]; [[böja sig]]
:{{avgränsare}}
:{{etymologi|Från germanska roten *beugan, varav även svenska ''[[buga]]''.}}
lh6s3rfh2261y4qr7nryc5bsloru8bt
mörkblå
0
123725
3703262
3428975
2022-08-18T17:00:20Z
Andreasl01
37996
/* Svenska */ formatering
wikitext
text/x-wiki
==Svenska==
===Adjektiv===
{{sv-adj-alt|pers=|mörkblå|mörkblått|mörkblå, mörkblåe|mörkblå, mörkblåa|mörkblå, mörkblåa|mörkblå|mörkblått|mörkblå, mörkblåa}}
{{färg|#00008B}}
'''[[mörk]][[blå]]'''
#{{tagg|kat=färger}}som har en [[mörk]]are [[nyans]] av [[färg]]en [[blå]]
#:{{seäven|[[marinblå]], [[ljusblå]]}}
====Översättningar====
{{ö-topp|färg}}
*bokmål: {{ö|no|mørkeblå}}
*danska: {{ö|da|mørkeblå}}
*engelska: {{ö|en|dark blue}}
*finska: {{ö|fi|tummansininen}}
*frisiska: {{ö|fy|donkerblau}}
*iriska: {{ö+|ga|dúghorm}}
*isländska: {{ö|is|dökkblár}}
*italienska: {{ö|it|blu scuro}}
*nederländska: {{ö+|nl|donkerblauw}}
*polska: {{ö+|pl|ciemnoniebieski}}
*portugisiska: {{ö+|pt|azul-escuro}}
*tyska: {{ö+|de|dunkelblau}}
{{ö-botten}}
===Substantiv===
{{subst|sv}}
'''mörkblå'''
#färgen mörkblå
====Översättningar====
{{ö-topp|färgen mörkblå}}
*franska: {{ö|fr|bleu foncé|m}}
*tyska: {{ö|de|Dunkelblau|n}}
{{ö-botten}}
i52jim07lgxrtf9toozxighu1atw2r3
marin
0
132800
3703354
3424672
2022-08-19T09:46:07Z
Andreasl01
37996
/* Svenska */ formatering
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''marin'''
#[[sjöförsvar]]
#:{{synonymer|[[flotta]]}}
#:{{sammansättningar|[[marinblå]], [[marinsoldat]], [[marinstab]]}}
#:{{seäven|[[kustartilleri]], [[vapenslag]]}}
#[[målning]] med [[havsmotiv]]
#:{{sammansättningar|[[marinmålare]], [[marinmålning]]}}
====Översättningar====
{{ö-topp|sjöförsvar}}
*engelska: {{ö+|en|navy}}
*finska: {{ö+|fi|laivasto}}, {{ö+|fi|merivoimat}}
*franska: {{ö|fr|marine|f}}
*spanska: {{ö+|es|marina|f}}
*tyska: {{ö+|de|Marine|f}}
{{ö-botten}}
{{ö-topp|målning}}
{{ö-botten}}
===Adjektiv===
{{sv-adj-okomp|pers=}}
'''marin'''
#som har att göra med [[sjöförsvar]]
#som har att göra med [[hav]]et
{{nollpos}}
====Översättningar====
{{ö-topp|som har att göra med sjöförsvar}}
*engelska: {{ö+|en|naval}}
*finska: {{ö|fi|laivasto-}}, {{ö|fi|meripuolustus-}}
*franska: {{ö+|fr|naval}}
*italienska: {{ö+|it|navale}}
*portugisiska: {{ö+|pt|naval}}
*spanska: {{ö+|es|naval}}
{{ö-botten}}
{{ö-topp|som har att göra med havet}}
*engelska: {{ö+|en|marine}}
*finska: {{ö+|fi|merellinen}}, {{ö|fi|meri-}}
*franska: {{ö+|fr|marin}}
*italienska: {{ö+|it|marino}}
*polska: {{ö+|pl|morski}}
*portugisiska: {{ö+|pt|marinho}}
*spanska: {{ö+|es|marino}}
{{ö-botten}}
2pkx54nw1ncrljkkys2qy0vts1j7g82
kovändning
0
134767
3703325
3215873
2022-08-19T07:28:31Z
PeterFisk
21271
+no: [[kuvending]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-ar}}
'''[[ko]][[vändning]]'''
#[[plötslig]] vändning, det att plötsligt inta [[motsatt]] [[ståndpunkt]]
#:{{citat|år=2009|datum=2 nov|titel=[http://hbl.fi/nyheter/2009-11-02/ny-plan-avdelning-atta Ny plan för avdelning åtta]|publ=[[w:Hufvudstadsbladet|Hufvudstadsbladet]]|Personalen på avdelning åtta beskriver ledningsgruppens förslag som en överraskande '''kovändning'''.}}
====Översättningar====
{{ö-topp}}
*bokmål: {{ö|no|kuvending|m}}
*finska: {{ö|fi|lehmänkäännös}}
*tyska: {{ö+|de|Kehrtwende|f}}, {{ö+|de|Kehrtwendung|f}}
{{ö-botten}}
tcmi4m69du6f1qo0lqpsj7sa0phrik3
rav
0
145038
3703321
3571149
2022-08-19T07:22:48Z
Andreasl01
37996
/* Översättningar */ ö-topp|se → ö-se
wikitext
text/x-wiki
{{se även|räv}}
==Svenska==
===Substantiv===
{{sv-subst-n-oräkn}}
'''rav'''
#{{tagg|kat=mineraler|ålderdomligt|dialektalt}} [[bärnsten]]
#:{{besläktade ord|[[radband]]}}
#:{{sammansättningar|[[valrav]]}}
#:{{etymologi|Av fornsvenska och fornnordiska ''[[raf]]'' med samma betydelse. Jämför även isländska ''[[raf]]'' samt danska, färöiska och norska ''[[rav#Danska|rav]]''.}}
====Översättningar====
{{ö-se|bärnsten}}
==Bokmål==
===Substantiv===
{{subst|no}}
'''rav''' {{n}}
#{{tagg|kat=mineraler|språk=no}} [[bärnsten]]
==Danska==
===Substantiv===
{{subst|da}}
'''rav''' {{n}}
#{{tagg|kat=mineraler|språk=da}} [[bärnsten]]
===Verb===
'''rav'''
#{{böjning|da|verb|rave}}
==Färöiska==
===Substantiv===
{{subst|fo}}
'''rav''' {{n}}
#{{tagg|kat=mineraler|språk=fo}} [[bärnsten]]
#:{{sammansättningar|[[ravmagn]]}}
==Nynorska==
===Substantiv===
{{subst|nn}}
'''rav''' {{n}}
#{{tagg|kat=mineraler|språk=nn}} [[bärnsten]]
8ph696jjifzkmp469o5lq3jyfsxoola
3703324
3703321
2022-08-19T07:27:26Z
Andreasl01
37996
/* Svenska */ härledning
wikitext
text/x-wiki
{{se även|räv}}
==Svenska==
===Substantiv===
{{sv-subst-n-oräkn}}
'''rav'''
#{{tagg|kat=mineraler|ålderdomligt|dialektalt}} [[bärnsten]]
#:{{besläktade ord|[[radband]]}}
#:{{sammansättningar|[[valrav]]}}
#:{{etymologi|Av {{härledning-|gmq-fsv}} och {{härledning-|non|raf}} med samma betydelse. Jämför även isländska ''[[raf]]'' samt danska, färöiska och norska ''[[rav#Danska|rav]]''.}}
====Översättningar====
{{ö-se|bärnsten}}
==Bokmål==
===Substantiv===
{{subst|no}}
'''rav''' {{n}}
#{{tagg|kat=mineraler|språk=no}} [[bärnsten]]
==Danska==
===Substantiv===
{{subst|da}}
'''rav''' {{n}}
#{{tagg|kat=mineraler|språk=da}} [[bärnsten]]
===Verb===
'''rav'''
#{{böjning|da|verb|rave}}
==Färöiska==
===Substantiv===
{{subst|fo}}
'''rav''' {{n}}
#{{tagg|kat=mineraler|språk=fo}} [[bärnsten]]
#:{{sammansättningar|[[ravmagn]]}}
==Nynorska==
===Substantiv===
{{subst|nn}}
'''rav''' {{n}}
#{{tagg|kat=mineraler|språk=nn}} [[bärnsten]]
33o2f61rnp6n44yc9hd54ylh6dpshxy
bärnsten
0
145039
3703331
3665529
2022-08-19T07:36:40Z
Andreasl01
37996
/* Svenska */ härledning
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-oräkn}}
'''bärnsten'''
{{media|Amber.insect.800pix.050203.jpg|bärnsten}}
#{{tagg|mineraler}} [[stelnad|stelnat]] [[fossil]]t [[harts]], ursprungligen [[avsöndra]]d som [[kåda]] av [[träd]], framförallt [[barr]]
#:{{synonymer|[[rav]] ''(dialekt)''}}
#:{{etymologi|Av {{härledning-|nds|bernsten|sten man kan [[bränna]]}} av ''[[bernen]]'' (”[[bränna]]”). Ersatte inhemska ''[[rav]]''. Jämför tyska ''[[Bernstein]]''.}}
#:{{sammansättningar|[[bärnstensfärgad]], [[bärnstensgul]]}}
====Översättningar====
{{ö-topp|fossilt harts}}
*afrikaans: {{ö|af|barnsteen}}
*baskiska: {{ö|eu|anbar}}
*bokmål: {{ö+|no|rav|n}}
*danska: {{ö+|da|rav|n}}
*engelska: {{ö+|en|amber}}
*esperanto: {{ö|eo|sukceno}}
*estniska: {{ö|et|merevaik}}
*finska: {{ö+|fi|meripihka}}
*fornengelska: {{ö|ang|amber|m}}
*fornnordiska: {{ö|non|raf|n}}
*fornsvenska: {{ö|gmq-fsv|raf|n}}
*franska: {{ö+|fr|ambre}}
*färöiska: {{ö|fo|rav|n}}
*grekiska: {{ö+|el|κεχριμπάρι|n}} (''kechrimári'')
*indonesiska: {{ö+|id|ambar}}
*iriska: {{ö|ga|ómra|m}}
*isländska: {{ö|is|raf|n}}
*italienska: {{ö|it|ambra|f}}
*katalanska: {{ö|ca|ambre}}
*klassisk grekiska: {{ö|grc|ήλεκτρον}} (''ēlektron'')
*kroatiska: {{ö|hr|jantar|m}}
*kymriska: {{ö+|cy|ambr}}
*latin: {{ö|la|glaesum|n}}
*lettiska: {{ö+|lv|dzintars|m}}
*limburgiska: {{ö|li|barnsstein}}
*litauiska: {{ö+|lt|gintaras|m}}
*nederländska: {{ö+|nl|barnsteen}}
*nynorska: {{ö|nn|rav|n}}
*polska: {{ö+|pl|bursztyn|m}}
*slovakiska: {{ö|sk|jantar|m}}
*slovenska: {{ö+|sl|jantar|m}}
*spanska: {{ö+|es|ámbar|m}}
*tjeckiska: {{ö+|cs|jantar|m}}
*tyska: {{ö+|de|Bernstein|m}}, {{ö+|de|Amber|m}}
*ungerska: {{ö+|hu|borostyán}}
{{ö-botten}}
m47af5kp2ohvlnmklb31gjkc6i3qeuf
3703332
3703331
2022-08-19T07:37:56Z
Andreasl01
37996
/* Översättningar */ tr
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-oräkn}}
'''bärnsten'''
{{media|Amber.insect.800pix.050203.jpg|bärnsten}}
#{{tagg|mineraler}} [[stelnad|stelnat]] [[fossil]]t [[harts]], ursprungligen [[avsöndra]]d som [[kåda]] av [[träd]], framförallt [[barr]]
#:{{synonymer|[[rav]] ''(dialekt)''}}
#:{{etymologi|Av {{härledning-|nds|bernsten|sten man kan [[bränna]]}} av ''[[bernen]]'' (”[[bränna]]”). Ersatte inhemska ''[[rav]]''. Jämför tyska ''[[Bernstein]]''.}}
#:{{sammansättningar|[[bärnstensfärgad]], [[bärnstensgul]]}}
====Översättningar====
{{ö-topp|fossilt harts}}
*afrikaans: {{ö|af|barnsteen}}
*baskiska: {{ö|eu|anbar}}
*bokmål: {{ö+|no|rav|n}}
*danska: {{ö+|da|rav|n}}
*engelska: {{ö+|en|amber}}
*esperanto: {{ö|eo|sukceno}}
*estniska: {{ö|et|merevaik}}
*finska: {{ö+|fi|meripihka}}
*fornengelska: {{ö|ang|amber|m}}
*fornnordiska: {{ö|non|raf|n}}
*fornsvenska: {{ö|gmq-fsv|raf|n}}
*franska: {{ö+|fr|ambre}}
*färöiska: {{ö|fo|rav|n}}
*grekiska: {{ö+|el|κεχριμπάρι|n|tr=kechrimári}}
*indonesiska: {{ö+|id|ambar}}
*iriska: {{ö|ga|ómra|m}}
*isländska: {{ö|is|raf|n}}
*italienska: {{ö|it|ambra|f}}
*katalanska: {{ö|ca|ambre}}
*klassisk grekiska: {{ö|grc|ήλεκτρον|tr=ēlektron}}
*kroatiska: {{ö|hr|jantar|m}}
*kymriska: {{ö+|cy|ambr}}
*latin: {{ö|la|glaesum|n}}
*lettiska: {{ö+|lv|dzintars|m}}
*limburgiska: {{ö|li|barnsstein}}
*litauiska: {{ö+|lt|gintaras|m}}
*nederländska: {{ö+|nl|barnsteen}}
*nynorska: {{ö|nn|rav|n}}
*polska: {{ö+|pl|bursztyn|m}}
*slovakiska: {{ö|sk|jantar|m}}
*slovenska: {{ö+|sl|jantar|m}}
*spanska: {{ö+|es|ámbar|m}}
*tjeckiska: {{ö+|cs|jantar|m}}
*tyska: {{ö+|de|Bernstein|m}}, {{ö+|de|Amber|m}}
*ungerska: {{ö+|hu|borostyán}}
{{ö-botten}}
dn4xy5jdosxi6fnxgl27xrb6vifzurk
ringare
0
151462
3703326
3232756
2022-08-19T07:30:11Z
PeterFisk
21271
+no: [[ringer]]; +no: [[klokker]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Adjektiv===
'''ringare'''
#{{böjning|sv|adj|ringa}}
===Substantiv===
{{sv-subst-n-0|rot=ringar|are=}}
'''ringare'''
#person som har till yrke att [[ringa]] i [[kyrkklocka|kyrkklockor]]
#:{{sammansättningar|[[w:Ringaren i Notre Dame|Ringaren i Notre Dame]]}}
====Översättningar====
{{ö-topp}}
*bokmål: {{ö+|no|ringer|m}}, {{ö+|no|klokker|m}}
*engelska: {{ö+|en|ringer}}, {{ö+|en|bell-ringer}}
*tyska: {{ö+|de|Glöckner|m}}
{{ö-botten}}
rw3iyrjde8ypmtcrsdxn68kr4ifk7ap
dörröppnare
0
160624
3703335
1640241
2022-08-19T08:12:16Z
PeterFisk
21271
+no: [[døråpner]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-0|rot=dörröppnar|are=}}
'''[[dörr]][[öppnare]]'''
#person eller tekniskt föremål som [[öppna]]r [[dörr]]ar
====Översättningar====
{{ö-topp}}
*bokmål: {{ö|no|døråpner|m}}
*engelska: {{ö|en|door unlocker}}, {{ö|en|door opener}}
{{ö-botten}}
onou1i6hh3pbzxnwk3mkt3rl2nlxsih
romare
0
165287
3703336
3515755
2022-08-19T08:13:04Z
PeterFisk
21271
+no: [[romer]]; +no: [[romer]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-0|rot=romar|are=}}
'''romare'''
#{{tagg|historia}} person från [[romarriket]] som hade [[romersk]] [[medborgarrätt]]
#person som är född och uppvuxen i staden [[Rom]]
:{{avgränsare}}
:{{besläktade ord|[[Rom]], [[romersk]], [[romerska]], [[romarinna]]}}
====Översättningar====
{{ö-topp|person från romarriket som hade romersk medborgarrätt}}
*bokmål: {{ö+|no|romer|m}}
*engelska: {{ö+|en|Roman}}
*franska: {{ö+|fr|Romain|m}}, {{ö+|fr|Romaine|f}}
*italienska: {{ö+|it|romano|m}}, {{ö+|it|romana|f}}
*spanska: {{ö+|es|romano|m}}, {{ö+|es|romana|f}}
*tyska: {{ö+|de|Römer|m}}, {{ö|de|Römerin|f}}
*älvdalska: {{ö|ovd|ruomer|m}}
{{ö-botten}}
{{ö-topp|person som är född och uppvuxen i staden Rom}}
*bokmål: {{ö+|no|romer|m}}
*engelska: {{ö+|en|Roman}}
*franska: {{ö+|fr|Romain|m}}, {{ö+|fr|Romaine|f}}
*italienska: {{ö+|it|romano|m}}, {{ö+|it|romana|f}}
*spanska: {{ö+|es|romano|m}}, {{ö+|es|romana|f}}
*tyska: {{ö+|de|Römer|m}}, {{ö|de|Römerin|f}}
{{ö-botten}}
ro797exp5001x0ohemd7rla3s5wggwa
bowtie
0
169908
3703348
3537397
2022-08-19T09:31:28Z
Andreasl01
37996
/* Engelska */ länk till engelskt avsnitt
wikitext
text/x-wiki
==Engelska==
===Substantiv===
{{en-subst}}
'''[[bow]][[tie#Engelska|tie]]'''
#{{tagg|kläder|språk=en}} [[fluga]]
#:{{varianter|[[bow tie]]}}
#:{{synonymer|(''brittisk slang'') [[dicky bow]]}}
2ud74e9wzv13dablmnc9obq24u6lul5
yacht
0
169948
3703259
3557527
2022-08-18T16:46:21Z
Gabbe
1153
/* Engelska */ la till IPA: /jɒt/, /jɑːt/
wikitext
text/x-wiki
{{se även|Yacht}}
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
*{{uttal|sv|ipa=jåtˈ}}
'''yacht'''
#{{tagg|segling}} ''stavningsvariant av'' [[jakt]]
====Översättningar====
{{ö-se|jakt}}
==Engelska==
===Substantiv===
{{en-subst}}
'''yacht'''
*{{uttal|en|ipa=jɒt|region=Storbritannien}}
*{{uttal|en|ipa=jɑːt|region=USA}}
#{{tagg|kat=sjöfart|språk=en}} [[jakt]], [[#Svenska|yacht]]
===Verb===
{{en-verb}}
'''yacht'''
#[[segla]], [[kappsegla]]
==Franska==
===Substantiv===
{{fr-subst-m}}
'''yacht'''
*{{uttal|fr|ipa=jɔt}}
#{{tagg|kat=sjöfart|språk=fr}} [[jakt]], [[yacht#Svenska|yacht]]
b1w13ysbqe4afo6mzt21e91c7z08wz6
viol
0
187485
3703261
3626754
2022-08-18T16:58:00Z
Andreasl01
37996
/* Svenska */ formatering
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Adjektiv===
{{adj|sv}}
{{färg|#8B00FF}}
'''viol'''
#{{tagg|kat=färger|text=annat namn för}} [[violett]]
===Substantiv===
{{sv-subst-n-er}}
'''viol'''
#{{tagg|kat=växter}} någon av de mellan 400 - 500 växtarter i släktet [[violer]] ''([[Viola]])'', i familjen [[violväxter]] ''([[Violaceae]])''; exemplar av en sådan art
#[[smak]] ursprungligen från sirap av socker och stötta kronblad av [[luktviol]], men som idag ofta utvinns av [[violrot]] som doftar likt viol, men som i själva verket är rötter från en sorts [[iris]]
:{{avgränsare}}
:{{sammansättningar|[[violpastill]], [[violrot]], [[violsirap]], [[violsmak]]}}
====Översättningar====
{{ö-topp|någon av de mellan 400 - 500 växtarter i släktet violer , i familjen violväxter }}
*engelska: {{ö+|en|violet}}
*finska: {{ö+|fi|orvokki}}
*isländska: {{ö+|is|fjóla|f}}
*spanska: {{ö+|es|violeta|f}}
*turkiska: {{ö+|tr|menekşe}}
*tyska: {{ö+|de|Veilchen|n}}
{{ö-botten}}
{{ö-topp|smak ursprungligen från sirap av socker och stötta kronblad av luktviol, men som idag ofta utvinns av violrot som doftar likt viol, men som i själva verket är rötter från en sorts iris}}
*tyska: {{ö|de|Veilchengeschmack|m}}
{{ö-botten}}
==Franska==
===Substantiv===
{{fr-subst-m}}
'''viol''' {{m}}
*{{uttal|fr|ipa=vjɔl}}
#[[våldtäkt]]
#:{{besläktade ord|[[violence]], [[violer]]}}
==Rumänska==
===Substantiv===
{{subst|ro}}
'''viol'''
#[[våldtäkt]]
sxcb24gdvqre3o95t37z2fjbg3vuj17
kredit
0
287157
3703292
3454957
2022-08-18T21:39:10Z
Skalman
414
fler definitioner, uttal
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-er|betydelser=1.}}
*{{uttal|sv|enkel=kred'i:t|betydelser=1.}}
*{{uttal|sv|enkel='kre:dit|betydelser=2.}}
*{{uttal|sv|enkel='kredit|betydelser=3.}}
'''kredit'''
#{{tagg|ekonomi}} [[pengar]] som [[låna]]s av [[bank]]en mot [[betalning]] av [[räntor]]
#:{{synonymer|[[lån]], [[penninglån]]}}
#:{{sammansättningar|[[kreditgivare]], [[kreditgräns]], [[kreditinstitut]], [[kreditkort]], [[kredittagare]]}}
#{{tagg|ekonomi}} {{oböjl}} [[inkomst]]er eller [[tillgodohavande]] till ett [[konto]] (i en sammanställning av inkomster och utgifter)
#:{{antonymer|[[debet]]}}
#:{{konstr|[[debet och kredit]]}}
#{{tagg|vardagligt}} {{oböjl}} ''variant av'' [[kredd]]
====Översättningar====
{{ö-topp|pengar som lånas av banken mot betalning av räntor}}
*finska: {{ö+|fi|luotto}}
*franska: {{ö+|fr|crédit|m}}
*ryska: {{ö+|ru|кредит|m}}
*tyska: {{ö+|de|Kredit|m}}
*ungerska: {{ö+|hu|hitel}}
{{ö-botten}}
{{ö-topp|inkomster eller tillgodohavande}}
*engelska: {{ö+|en|credit}}
{{ö-botten}}
{{ö-se|kredd}}
2u7p2qd352m8kok4d27mpk2hgxsmk2s
järnvägstrafik
0
388146
3703359
3426425
2022-08-19T09:58:51Z
PeterFisk
21271
+no: [[jernbanetrafikk]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-oräkn}}
'''[[järnväg]]s[[trafik]]'''
#[[trafik]] som sker över [[spårväg]]
====Översättningar====
{{ö-topp|trafik som sker över spårväg}}
*bokmål: {{ö|no|jernbanetrafikk|m}}
*isländska: {{ö|is|einstefnuakstur|m}}
*nederländska: {{ö|nl|treinverkeer}}
*tyska: {{ö+|de|Zugverkehr|m}}
{{ö-botten}}
qorzfq6ioz04mv2b1v5hwizrkpd4rgp
3703363
3703359
2022-08-19T11:56:44Z
Tapanpet
6520
+fi: [[rautatieliikenne]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-oräkn}}
'''[[järnväg]]s[[trafik]]'''
#[[trafik]] som sker över [[spårväg]]
====Översättningar====
{{ö-topp|trafik som sker över spårväg}}
*bokmål: {{ö|no|jernbanetrafikk|m}}
*finska: {{ö+|fi|rautatieliikenne}}
*isländska: {{ö|is|einstefnuakstur|m}}
*nederländska: {{ö|nl|treinverkeer}}
*tyska: {{ö+|de|Zugverkehr|m}}
{{ö-botten}}
5uw5ljizsrc9ctjfo7qswe1n0viwibd
picador
0
412069
3703318
3298127
2022-08-19T07:20:48Z
Andreasl01
37996
/* Översättningar */ ö-topp|se → ö-se
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''picador'''
#se ''[[pikador]]''
====Översättningar====
{{ö-se|pikador}}
==Aragonska==
===Substantiv===
{{subst|an}}
'''picador'''
#[[skogshuggare]]
==Spanska==
===Substantiv===
{{es-subst-m-es}}
'''picador''' {{m}}
# [[pikador]]
sxmhn7bxji2mxqcktpguu125pp6v7o5
radhus
0
521447
3703329
3226606
2022-08-19T07:33:59Z
PeterFisk
21271
+no: [[rekkehus]] (assisterat)
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-t-0}}
'''[[rad]][[hus]]'''
#{{tagg|byggnadsteknik}} [[bostadshus]] som är [[sammanlänkad]]e i [[yttervägg]]arna med andra likadana bostadshus
#:{{jämför|[[småhus]], [[kedjehus]], [[villa]], [[parhus]], [[fritidshus]]}}
====Översättningar====
{{ö-topp|bostadshus som är sammanlänkade i ytterväggarna med andra likadana bostadshus}}
*bokmål: {{ö|no|rekkehus|n}}
*danska: {{ö|da|rækkehus|n}}
*nederländska: {{ö+|nl|rijtjeshuis}}
*tyska: {{ö+|de|Reihenhaus|n}}
{{ö-botten}}
gfrsyscq00qsos4q6ibut4zxshtxb3y
Användardiskussion:Christoffre
3
564330
3703296
3703134
2022-08-18T22:09:37Z
Skalman
414
/* gravmonumentsindustrifabrikationsprodukt */ Svar
wikitext
text/x-wiki
Hej och varmt välkommen till svenskspråkiga Wiktionary! Jag hoppas att du kommer trivas och vill stanna. Här är några sidor du kan ha nytta av:
* [[Wiktionary:Välkommen|Välkommen]] - ''om hur Wiktionary funkar och vad du kan göra''
* [[Wiktionary:Om|Om Wiktionary]] - ''översiktligt om Wiktionary, lite historia och dess mål''
* [[Wiktionary:Stilguide#Definitionen|Stilguide: Definitionen]] - ''från stilguiden: tips på hur man skriver en bra definition''
Kolla gärna in hur andra uppslag ser ut (som [[bil]], [[harkrank]], [[kanske]], [[tävla]] och [[rot]]).
Jag hoppas att du kommer tycka att det är roligt att redigera på Wiktionary. Glöm inte att signera dina inlägg på diskussionssidor med fyra tilde (<nowiki>~~~~</nowiki>); detta kommer automatiskt infoga ditt användarnamn och datumet. Om du behöver hjälp eller undrar över något är det bara att fråga mig på min diskussionssida, i [[Wiktionary:Bybrunnen|Bybrunnen]] eller på den här sidan. Som sagt, välkommen! [[Användare:Andreas Rejbrand|Andreas Rejbrand]] ([[Användardiskussion:Andreas Rejbrand|diskussion]]) 10 mars 2016 kl. 03.55 (CET)
== Ett par tips ==
Snyggt jobbat med [[strömavtagare]]! Jag vet att det är tusen saker att tänka på, men här är två som gör att man följer den existerande strukturen lite bättre (till nästa gång):
*Uppslag ska normalt börja med liten bokstav
*Om du anger översättningar, så ska dessa ligga under rubriken <code>====Översättningar====</code>
Som alltid, fråga gärna om du funderar på något. [[Användare:Skalman|//Skal]] 19 december 2017 kl. 20.49 (CET)
== Adjektivdefinitioner ==
Ang. [https://sv.wiktionary.org/w/index.php?title=oformlig&diff=3085116&oldid=3085115 min ändring] på [[oformlig]]. Adjektivdefinitioner oftast är antingen andra adjektiv, eller så börjar dom med "som" (eller i undantagsfall med "med", "utan", "i" etc - men dessa är vanligare för adverb). Det här tar lite tid att bli van vid, men det gör inte så mkt om det blir fel - nån annan kan ju fixa det efterhand. [[Användare:Skalman|//Skal]] 9 januari 2018 kl. 23.21 (CET)
:...och, på samma tema, så fungerar [[brinna inne]] som ett verb, och bör därför ges en verb-definition! :) --[[Användare:Andreas Rejbrand|Andreas Rejbrand]] ([[Användardiskussion:Andreas Rejbrand|diskussion]]) 12 januari 2018 kl. 19.53 (CET)
::Tack för hjälpen {{@|Andreas Rejbrand}} och {{@|Skalman}}, finns det någon lista man kan kolla på så att ni slipper rätta varenda redigering XD
:: Dessutom, hur funkar ''<nowiki>{{sv-subst-n-er}}</nowiki>''? Vet inte vad den heter och jag hittar den inte i [[Wiktionary:Stilguide|stilguiden.]] --[[Användare:Christoffre|Christoffre]] ([[Användardiskussion:Christoffre|diskussion]]) 13 januari 2018 kl. 17.01 (CET)
:::Det finns ingen bra beskrivning av alla sorts definitioner, men man kan börja på [[Wiktionary:Stilguide#Definitionen]]. Annars rekommenderar jag helt enkelt att titta på nåt liknande ord och försöka skapa en definition på samma form.
:::Böjningsmallar såsom {{mall|sv-subst-n-er}} är frivilliga. Dom är ganska komplexa och nämns i [[Wiktionary:Stilguide#Grammatikmallar och böjningstabeller|stilguiden]]. Dom svenska mallarna hittar du på [[Wiktionary:Stilguide/Grammatik/Svenska]]; klicka på en mall för mer information om den ordklassen. Eftersom dom kan vara ganska krångliga, så är ett tips att antingen strunta i dom eller att även här titta på nåt ord som böjs på samma sätt och kopiera mallen.
:::Jag tänker att du lär dig allteftersom, så det gör inget att några fel smyger sig in då och då. {{=)}} [[Användare:Skalman|//Skal]] 13 januari 2018 kl. 18.53 (CET)
== Synonymer / etymologi ==
{{mall|synonymer}} och {{mall|etymologi}} (och andra liknande mallar) ska anges en nivå under definitionen. Se [https://sv.wiktionary.org/w/index.php?title=pain_riche&diff=3087714&oldid=3087702 min ändring].
<mark>#</mark>definition
<mark>#:</mark>{{<nowiki/>synonymer|...}}
<mark>#:</mark>{{<nowiki/>etymologi|...}}
[[Användare:Skalman|//Skal]] 17 januari 2018 kl. 19.47 (CET)
:...och jag som trodde att jag tänkt på allt denna gång --[[Användare:Christoffre|Christoffre]] ([[Användardiskussion:Christoffre|diskussion]]) 17 januari 2018 kl. 20.22 (CET)
::Nästan. {{=)}} [[Användare:Skalman|//Skal]] 17 januari 2018 kl. 21.07 (CET)
:::[https://sv.wiktionary.org/w/index.php?diff=3090557&oldid=3090301&title=gatupratare] Ytterligare ett par detaljer:
:::# Det blev fel böjningsmall (det är inte oräknebart - man kan säga "många gatupratare")
:::# Mallar som {{mall|varianter}} och {{mall|synonymer}} ska anges en nivå under definitionen
:::# Här är det en synonym, inte variant (från stilguiden: "varianter listar samma ord som skrivs på ett annorlunda sätt")
:::Som jag sagt tidigare - det gör inget att det blir lite småfel. Det viktiga är definitionen! [[Användare:Skalman|//Skal]] 30 januari 2018 kl. 22.37 (CET)
::::Ahhh... Jag missförstod betydelsen av ''oräknebar''. Trodde att det gällde böjningen (en gatupratare, flera gatupratare'''ar'''). --[[Användare:Christoffre|Christoffre]] ([[Användardiskussion:Christoffre|diskussion]])
== Länkar ==
[https://sv.wiktionary.org/w/index.php?title=gatum%C3%B6bel&diff=3089999&oldid=3089983] En liten detalj: länkar ska normalt gå till ordets grundform. [[Användare:Skalman|//Skal]] 28 januari 2018 kl. 16.04 (CET)
== Exempelmeningar ==
[https://sv.wiktionary.org/w/index.php?title=kalenderm%C3%A5nad&type=revision&diff=3106172&oldid=3106095] Exempelmeningar indenteras med ett enstaka kolon (svensk översättning av mening på annat språk med två kolon), och normalt behövs inga citattecken till exempelmeningen.
#<mark><nowiki>:''</nowiki></mark>För rätt till ersättning ska du ha arbetat minst 80 timmar per <nowiki>'''kalendermånad'''</nowiki>.<mark><nowiki>''</nowiki></mark>
Som jag sagt tidigare: Bra jobbat! [[Användare:Skalman|//Skal]] 12 mars 2018 kl. 21.35 (CET)
== Omdirigeringar ==
Du omdirigerade [[räkneskapsår]] till [[räkenskapsår]]. Det brukar vi bara göra med flerordsuppslag där det finns flera korrekta varianter, t.ex. [[surt sa räven]] → [[Surt, sa räven om rönnbären.]]
När det handlar om stavfel eller liknande brukar vi istället använda {{mall|inget uppslag}} för att uppmärksamma användaren på att hen skrivit fel. Du kan se hur det blev på [[räkneskapsår]]. [[Användare:Skalman|//Skal]] 12 mars 2018 kl. 21.46 (CET)
:{{@|Skalman}}, gör du något annat än att hålla koll på oss nybörjare som gör fel? XD
:Tack för hjälpen i alla fall ;) --[[Användare:Christoffre|Christoffre]] ([[Användardiskussion:Christoffre|diskussion]]) 12 mars 2018 kl. 22.36 (CET)
::Jo, det har blivit mkt wiktionarykollande på sistone {{=)}}. Men det känns meningsfullt, för dina och andras bidrag gör ju ordboken mer komplett. [[Användare:Skalman|//Skal]] 12 mars 2018 kl. 22.43 (CET)
== Ordklass ==
[https://sv.wiktionary.org/w/index.php?title=restnoterad&type=revision&diff=3260470&oldid=3260465] Du angav [[restnoterad]] (och [[restad]]) som substantiv, men det är väl snarare adjektiv. Vidare vill jag påminna om att {{mall|varianter}} anges med prefixet <code>#:</code>. [[Användare:Skalman|Skalman]] ([[Användardiskussion:Skalman|diskussion]]) 21 januari 2019 kl. 23.49 (CET)
== Formatering {wikipedia} och {media} ==
[https://sv.wiktionary.org/w/index.php?title=morrh%C3%A5r&type=revision&diff=3281104&oldid=3281098] Ett par små formateringsdetaljer: Flera {{mall|wikipedia}}-mallar anges med radbrytning mellan. {{mall|media}} stödjer flera bilder i samma anrop, och detta föredras där möjligt. [[Användare:Skalman|Skalman]] ([[Användardiskussion:Skalman|diskussion]]) 19 mars 2019 kl. 21.41 (CET)
== ananassmultron ==
Hej! Angående din redigering [https://sv.wiktionary.org/w/index.php?diff=3414228&oldid=3409304&title=jordgubbe&curid=2513], är det så att ''ananassmultron'' är en synonym till den ålderdomliga definitionen (def. 3) med betydelse ''parksmultron'' eller är det en ålderdomlig synonym till def. 1? --[[Användare:Andreas Rejbrand|Andreas Rejbrand]] ([[Användardiskussion:Andreas Rejbrand|diskussion]]) 8 juli 2020 kl. 13.55 (CEST)
:Ananassmultron är originalnamnet på dagens jordgubbar, ''Fragaria × ananassa'' (def 1 och 2).
:Angående def 3; om någon sa "jordgubbe" på 1600-talet så menar de parksmultron, ''Fragaria moschata''. --[[Användare:Christoffre|Christoffre]] ([[Användardiskussion:Christoffre|diskussion]]) 8 juli 2020 kl. 22.52 (CEST)
::Tack, jag förtydligade det i artikeln. --[[Användare:Andreas Rejbrand|Andreas Rejbrand]] ([[Användardiskussion:Andreas Rejbrand|diskussion]]) 9 juli 2020 kl. 01.13 (CEST)
== Hot joina ==
Hej! Tack för att du flyttade verbet till en fungerande verbform. Jag hittar dock knappt några belägg på att ordet ännu används. Är det verkligen en vedertagen term på svenska? [[Användare:Svenji|Svenji]] ([[Användardiskussion:Svenji|diskussion]]) 8 oktober 2021 kl. 12.34 (CEST)
:Beror på hur du menar med vedertagen. Tror att det definitivt är mer talspråk än skriftspråk, på ett ganska slangigt ord dessutom. La in den enligt riktlinjen ''Var djärv'', klart medveten om att det fanns en risk att ordet kanske inte skulle nå hela vägen upp. [[Användare:Christoffre|Christoffre]] ([[Användardiskussion:Christoffre|diskussion]]) 8 oktober 2021 kl. 17.19 (CEST)
== Verifiera ordet ==
Hej! Det verkar för mig som att ordet ''pallkarl'' endast figurerar i ordlistan du nämnde, eller av folk som letat upp det därur. Jag skulle gärna se att du letade upp ett skriftligt citat där ordet faktiskt figurerar, då det ser något uppdiktat ut (för underhållning) i originalkällan. [[Användare:Svenji|Svenji]] ([[Användardiskussion:Svenji|diskussion]]) 8 december 2021 kl. 14.54 (CET)
:<s>Citatet finns i {{plainlink|https://libris.kb.se/bib/8588552|denna bok}}, dock lär det dröja lite då boken är svår att få tag i [[Användare:Christoffre|Christoffre]] ([[Användardiskussion:Christoffre|diskussion]]) 10 december 2021 kl. 22.16 (CET)</s>
:Stryk det förra... Läste nu vad du faktiskt skrev... Det lär blir svårt att hitta via manuell sökning. Särskilt då man inte gärna använda bygdemål (särskilt fula) i tryckta verk. Dock tror jag att detta är ett riktigt ord som ärvts muntligt (men vet inte om det är skäl nog här). Radera? [[Användare:Christoffre|Christoffre]] ([[Användardiskussion:Christoffre|diskussion]]) 10 december 2021 kl. 22.30 (CET)
== [[gravmonumentsindustrifabrikationsprodukt]] ==
Det här ordet är väl knappast etablerat? Har du flera källor som använder ordet? [[Användare:Skalman|Skalman]] ([[Användardiskussion:Skalman|diskussion]]) 17 augusti 2022 kl. 17.22 (CEST)
:Och bara för att tydliggöra: i citatet du angav ''diskuteras'' ordet, men det används bara som ett exempel på något konstigt som sagts. Se gärna [[Wiktionary:Stilguide/Vilka ord ska tas med#Att belägga uttryck]]. [[Användare:Skalman|Skalman]] ([[Användardiskussion:Skalman|diskussion]]) 17 augusti 2022 kl. 18.09 (CEST)
::Jag är medveten om kraven, men inte exakt var gränsen går. Eftersom det är från en dagstidning har vi en källa. Och eftersom de beskriver användningen av ordet vet vi att det har använts. Huruvida detta är tillräckligt eller otillräckligt visste jag inte, så jag la in det på försök. Jag har lite som hobby att försöka hitta svenskans (ej påhittade) längsta ord, så lite synd tycker jag om denna 40 bokstäver mastodont försvinner ...men jag vet att det måste finnas en hög lägsta-nivå och att reglerna finns av en anledning --[[Användare:Christoffre|Christoffre]] ([[Användardiskussion:Christoffre|diskussion]]) 18 augusti 2022 kl. 01.13 (CEST)
:::Jag har tagit bort sidan nu. Lycka till med att hitta andra långa ord! [[Användare:Skalman|Skalman]] ([[Användardiskussion:Skalman|diskussion]]) 19 augusti 2022 kl. 00.09 (CEST)
cxz4mn3k1pxbxc52llezf0qk6jpwz4w
helpension
0
611984
3703327
3461385
2022-08-19T07:31:21Z
PeterFisk
21271
+no: [[fullpensjon]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-er|fog=e}}
'''helpension'''
#{{tagg|turism}} [[övernattning]] på [[hotell]] eller [[pensionat]] med alla [[måltid]]er per dag
#:{{jämför|[[halvpension]]}}
====Översättningar====
{{ö-topp|övernattning på hotell eller pensionat med alla måltider per dag}}
*bokmål: {{ö|no|fullpensjon|m}}
*tyska: {{ö+|de|Vollpension|f}}
{{ö-botten}}
7zxeglnne6q653yhqln17tb8594fpna
3703328
3703327
2022-08-19T07:32:26Z
PeterFisk
21271
+fr: [[pension complète]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-er|fog=e}}
'''helpension'''
#{{tagg|turism}} [[övernattning]] på [[hotell]] eller [[pensionat]] med alla [[måltid]]er per dag
#:{{jämför|[[halvpension]]}}
====Översättningar====
{{ö-topp|övernattning på hotell eller pensionat med alla måltider per dag}}
*bokmål: {{ö|no|fullpensjon|m}}
*franska: {{ö|fr|pension complète}}
*tyska: {{ö+|de|Vollpension|f}}
{{ö-botten}}
pv45mc672oh77nl7olvg8czsc11e1xs
klädskåp
0
735068
3703337
3337236
2022-08-19T08:14:36Z
PeterFisk
21271
+no: [[klesskap]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-0}}
'''[[kläder|kläd]][[skåp]]'''
#skåp för [[förvaring]] av [[klädsel]]
====Översättningar====
{{ö-topp|skåp för förvaring av klädsel}}
*bokmål: {{ö+|no|klesskap|n}}
*engelska: {{ö+|en|wardrobe}}
*isländska: {{ö+|is|fataskápur|m}}
*nederländska: {{ö+|nl|kleerkast|f}}, {{ö+|nl|kledingkast|f}}
*tyska: {{ö+|de|Kleiderschrank|m}}
{{ö-botten}}
i6t0dv0eqt2lv7k9th2bq8pi98v3vd1
postkort
0
754810
3703316
3302988
2022-08-19T07:18:22Z
Andreasl01
37996
/* Översättningar */ ö-topp|se → ö-se
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-0}}
'''[[post]][[kort]]''' {{n}}
#{{tagg|kat=postväsen}}[[vykort]]
====Översättningar====
{{ö-se|vykort}}
==Bokmål==
===Substantiv===
{{no-subst-n-0}}
'''[[post]][[kort]]''' {{n}}
#{{tagg|kat=postväsen|språk=no}}[[#Svenska|postkort]], [[vykort]] (med påtryckt [[frimärke]])
==Danska==
===Substantiv===
{{da-subst-t-0}}
'''[[post]][[kort]]''' {{n}}
#{{tagg|kat=postväsen|språk=da}}[[#Svenska|postkort]], [[vykort]]
==Nynorska==
===Substantiv===
{{nn-subst-n}}
'''[[post]][[kort]]''' {{n}}
#{{tagg|kat=postväsen|språk=nn}}[[#Svenska|postkort]], [[vykort]] (med påtryckt [[frimärke]])
b3vwjjc0g4rq56cu05u9a5uperxoi4b
skolväsen
0
812207
3703330
3379509
2022-08-19T07:34:18Z
PeterFisk
21271
+no: [[skolevesen]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-0|2=skolväsendet|4=skolväsendena}}
'''[[skola|skol]][[-väsen|väsen]]'''
# {{tagg|utbildningsväsende|text=samlingsbegrepp för}} alla arter av [[undervisning]] på [[oakademisk]] [[nivå]]
#:{{varianter|skolväsende}}
====Översättningar====
{{ö-topp|alla arter av undervisning på oakademisk nivå}}
*bokmål: {{ö|no|skolevesen|n}}
*tyska: {{ö+|de|Schulwesen|n}}
{{ö-botten}}
treutc9xggqqmxcc8t4bb6bujb45387
hør
0
821074
3703352
3403132
2022-08-19T09:41:04Z
LA2
544
/* Danska */
wikitext
text/x-wiki
==Bokmål==
===Verb===
'''hør'''
#{{böjning|no|verb|høre}}
==Danska==
===Substantiv===
{{da-subst-n-oräkn|2=hørren}}
'''hør''' {{u}}
#{{tagg|växter|språk=da}} [[lin]]
#:''Når hørren er rusket på marken bereder vi den, knevler, rødner, bryder, skætter, hegler og spinder.''
#::''När linet är ryckt på marken bereder vi det, repar, rötar, bråkar, skäktar, häcklar och spinner.''
#:{{sammansättningar|[[hørfrø]], [[hørgarn]], [[hørgul]], [[hørjakke]], [[hørkjole]], [[hørlærred]], [[hørtave]], [[hørtråd]]}}
#:{{jämför|[[linned]], [[linolie]], [[lærred]]}}
===Verb===
'''hør'''
#{{böjning|da|verb|høre}}
2t2pb1om4dkzltoloc84vrvn4xj3kty
3703353
3703352
2022-08-19T09:42:16Z
LA2
544
/* Danska */
wikitext
text/x-wiki
==Bokmål==
===Verb===
'''hør'''
#{{böjning|no|verb|høre}}
==Danska==
===Substantiv===
{{da-subst-n-oräkn|2=hørren}}
'''hør''' {{u}}
#{{tagg|växter|språk=da}} [[lin]]
#:''Når '''hørren''' er rusket på marken bereder vi den, knevler, rødner, bryder, skætter, hegler og spinder.''
#::''När '''linet''' är ryckt ur marken bereder vi det, repar, rötar, bråkar, skäktar, häcklar och spinner.''
#:{{sammansättningar|[[hørfrø]], [[hørgarn]], [[hørgul]], [[hørjakke]], [[hørkjole]], [[hørlærred]], [[hørtave]], [[hørtråd]]}}
#:{{jämför|[[linned]], [[linolie]], [[lærred]]}}
===Verb===
'''hør'''
#{{böjning|da|verb|høre}}
pbp6sasgamkpaqea14q67cfhego6uuh
bärighet
0
828095
3703240
3700785
2022-08-18T15:57:11Z
82.196.99.214
/* Substantiv */Rättade till stavfel
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[bära|bär]]ig[[-het|het]]'''
# {{tagg|väg- och vattenbyggnad|transport|järnväg}} förmöga hos en [[väg]] eller ett [[järnvägsspår]] <ref>https://web.archive.org/web/20120304041117/http://www.inlandsbanan.se/core/files/utvecklingsplan_ibab.pdf</ref> att bära tunga [[fordon]]
====Översättningar====
{{ö-topp|förmåga hos en väg eller ett järnvägsspår [1] att bära tunga fordon}}
*bokmål: {{ö|no|bæreevne|m}}
*tyska: {{ö|de|Tragfähigkeit|f}}
{{ö-botten}}
==Källor==
<references />
2hpv8xb49ulrlddbro042fkk24bx2i8
3703241
3703240
2022-08-18T15:57:46Z
82.196.99.214
/* Substantiv */Rättade stavfel
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[bära|bär]]ig[[-het|het]]'''
# {{tagg|väg- och vattenbyggnad|transport|järnväg}} förmåga hos en [[väg]] eller ett [[järnvägsspår]] <ref>https://web.archive.org/web/20120304041117/http://www.inlandsbanan.se/core/files/utvecklingsplan_ibab.pdf</ref> att bära tunga [[fordon]]
====Översättningar====
{{ö-topp|förmåga hos en väg eller ett järnvägsspår [1] att bära tunga fordon}}
*bokmål: {{ö|no|bæreevne|m}}
*tyska: {{ö|de|Tragfähigkeit|f}}
{{ö-botten}}
==Källor==
<references />
8symtsgnkefipz3iomuhoa8eb91j1ho
nagelsax
0
834930
3703314
3670236
2022-08-19T07:17:02Z
2A01:B740:1F:2030:49D3:34D:D129:481E
+fi: [[kynsisakset]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-ar}}
'''[[nagel]][[sax]]'''
#sax för [[avklippning]] av [[nagel|naglar]](nas framkant)
====Översättningar====
{{ö-topp|sax för avklippning av naglar}}
*finska: {{ö+|fi|kynsisakset}}
*tyska: {{ö+|de|Nagelschere|f}}
{{ö-botten}}
el4l841wcg2lzshp0mnj5wdj1p3mtq9
nyckelvittne
0
854874
3703357
3469942
2022-08-19T09:56:52Z
PeterFisk
21271
+no: [[nøkkelvitne]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-n}}
'''[[nyckel]][[vittne]]'''
#[[avgörande]] [[vittne]]; vittne med mycket stor betydelse i en [[rättegång]] eller liknande
====Översättningar====
{{ö-topp|avgörande vittne}}
*bokmål: {{ö|no|nøkkelvitne|n}}
*engelska: {{ö|en|key witness}}
*finska: {{ö|fi|avaintodistaja}}
{{ö-botten}}
oh7ws2cxlnerael6xso03xx1cfmj07e
3703364
3703357
2022-08-19T11:57:00Z
Tapanpet
6520
+fi: [[avaintodistaja]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-n}}
'''[[nyckel]][[vittne]]'''
#[[avgörande]] [[vittne]]; vittne med mycket stor betydelse i en [[rättegång]] eller liknande
====Översättningar====
{{ö-topp|avgörande vittne}}
*bokmål: {{ö|no|nøkkelvitne|n}}
*engelska: {{ö|en|key witness}}
*finska: {{ö|fi|avaintodistaja}}, {{ö|fi|avaintodistaja}}
{{ö-botten}}
bcjmusa1mfldnjrgx2036uq9bnxuuzm
järnvägsövergång
0
861184
3703317
3523394
2022-08-19T07:20:03Z
Andreasl01
37996
/* Översättningar */ ö-topp|se → ö-se
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-ar}}
'''[[järnväg]]s[[övergång]]'''
#{{tagg|kat=transport|kat2=järnväg}} plats där en väg korsar en [[järnväg]] (i samma plan)
====Översättningar====
{{ö-se|järnvägskorsning}}
jpeyspsexmtq8g8betepck94p6p20wh
pyssel
0
873964
3703226
3703054
2022-08-18T13:32:33Z
Andreasl01
37996
/* Svenska */ +sammansättningar, +böjningstabell
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-0|rot=pyssl}}
'''pyssel''' {{n}}
#lekfullt smågöra, exempelvis pussel och korsord
#:{{besläktade ord|[[pyssla]]}}
#:{{sammansättningar|[[julpyssel]], [[pysselbok]], [[pysselgrupp]], [[pysselhörna]], [[påskpyssel]]}}
qnnrx38gb9cdjtspbcweui81a7tq1nx
Användare:Christoffre
2
903470
3703298
3651475
2022-08-18T22:22:58Z
Christoffre
6867
wikitext
text/x-wiki
{{babel|sv|en-3|da-0|no-0}}
==Att göra==
* [[akra ren]] – Kolla datum på [https://litteraturbanken.se/f%C3%B6rfattare/M%C3%A5nssonP/titlar/PederM%C3%A5nssonsBondakonst/sida/30/faksimil?traff=w29_212&traffslut=w29_213&s_query=Akra%20ren&s_from=0&s_to=29&s_text_filter=%7B%7D&s_word_form_only=true&s_lbworkid=lb8206747&hit_index=0 citat] och lägg till
epf204f7ndbvn1xqaax35wfycgbgc2c
Kategori:Japanska/Uppslag med 石
14
927878
3703218
3700277
2022-08-18T12:55:56Z
Kusurija
8159
Kategori
wikitext
text/x-wiki
[[Kategori:Japanska/Alla uppslag|石]]
[[Kategori:CJK/Uppslag med 石|Japanska]]
aqqo6vke1atvrxt7djh9i75x96j03z6
Kategori:Japanska/Uppslag med 石 läst som セキ (漢音)
14
927886
3703221
3700290
2022-08-18T13:18:40Z
Kusurija
8159
Kategori
wikitext
text/x-wiki
[[Kategori:Japanska/Uppslag med 石|セキ]]
[[Kategori:Japanska/Uppslag med kanji läst som セキ (漢音)|石]]
[[Kategori:Japanska/Uppslag kanji läsning|セキ]]
noh8wu89hl96zy889x6u9mvpit5oetp
Kategori:Japanska/Uppslag med 石 läst som いし
14
927893
3703216
3700305
2022-08-18T12:44:45Z
Kusurija
8159
Kategori
wikitext
text/x-wiki
[[Kategori:Japanska/Uppslag med 石|いし]]
[[Kategori:Japanska/Uppslag med kanji läst som いし|石]]
[[Kategori:Japanska/Uppslag kanji läsning|いし]]
khp8mkwcyor461djvzwx2309l8y8b0v
Modul:translit/ru
828
928537
3703355
3703163
2022-08-19T09:48:45Z
Dodde
309
initialiserar tabellen "latinska" med värden direkt för att inte behöva scrolla så mycket för att komma ner till övrig kod
Scribunto
text/plain
-- Denna modul används för att transkribera ryska.
--
-- För att transkribera bulgariska, ukrainska och
-- vitryska/belarusiska kan ett liknande system användas.
-- Det hanteras dock av särskilda moduler. Se:
--
-- Modul:translit/be
-- Modul:translit/bg
-- Modul:translit/uk
--
-- Systemet för transkribering följer det som anges i
-- "Svenska skrivregler" (2017), fjärde upplagan, red. Ola Karlsson
-- En kopia av avsnittet finns i skrivande stund här:
-- https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf
--
-- Notera att detta sätt är specifikt för att transkribera
-- till svenska. Transkribering till andra språk sker enligt
-- andra mönster. Exempelvis ska Горбачёв bli just Gorbatjóv.
-- På andra språk skulle det kunna bli Gorbachev, Gorbatschow,
-- Gorbatchev, Gorbatsjov, osv.
--
-- En vanlig fallgrop är att "ё" bara transkriberas korrekt när
-- de två punkterna är med. På ryska utelämnas de ofta när sammanhanget gör det
-- uppenbart. Alltså är det vanligt att "Пётр" istället stavas "Пeтр", vilket
-- denna modul följaktligen tolkar som "Petr" istället för "Pjotr".
--
-- Denna modul är gjord för att returnera latinska tecken med accenterna
-- utskrivna. Därför blir Горбачёв till Gorbatjóv, inte Gorbatjov.
--
-- TODO: Placera i en dold kategori för att markera de ord som inte har
-- tillräckligt många accenttecken
--
-- Denna modul används av följande mall:
-- {{tr}}
--
-- Modulen är författad av (och underhålls av) [[Användare:Gabbe]]
local export = {}
latinska = { ["А"]="A", ["а"]="a", ["Б"]="B", ["б"]="b", ["В"]="V", ["в"]="v",
["Г"]="G", ["г"]="g", ["Д"]="D", ["д"]="d", ["Е"]="E", ["е"]="e", ["Ё"]="Jo",
["ё"]="jo", ["Ж"]="Zj", ["ж"]="zj", ["З"]="Z", ["з"]="z", ["И"]="I", ["и"]="i",
["Й"]="J", ["й"]="j", ["К"]="K", ["к"]="k", ["Л"]="L", ["л"]="l", ["М"]="M",
["м"]="m", ["Н"]="N", ["н"]="n", ["О"]="O", ["о"]="o", ["П"]="P", ["п"]="p",
["Р"]="R", ["р"]="r", ["С"]="S", ["с"]="s", ["Т"]="T", ["т"]="t", ["У"]="U",
["у"]="u", ["Ф"]="F", ["ф"]="f", ["Х"]="Ch", ["х"]="ch", ["Ц"]="Ts", ["ц"]="ts",
["Ч"]="Tj", ["ч"]="tj", ["Ш"]="Sj", ["ш"]="sj", ["Щ"]="Sjtj", ["щ"]="sjtj",
["Ъ"]="", ["ъ"]="", ["Ы"]="Y", ["ы"]="y", ["Ь"]="J", ["ь"]="j", ["Э"]="E",
["э"]="e", ["Ю"]="Ju", ["ю"]="ju", ["Я"]="Ja", ["я"]="ja" }
-- Fem köfunktioner
function enqueue(q, val)
q.last = q.last + 1
q.data[q.last] = val
end
function dequeue(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
q.data[q.first] = nil
q.first = q.first + 1
end
return rval
end
function peekonce(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
end
return rval
end
function peektwice(q)
local rval
if (q.first+1 > q.last) then
rval = -1
else
rval = q.data[q.first+1]
end
return rval
end
function peeklast(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.last]
end
return rval
end
-- Själva transkriberingsfunktionen för ryska
function transkribera_ru(text)
-- Två köer: en för kyrilliska bokstäver och en för latinska bokstäver
indata = {}
indata.first = 0
indata.last = -1
indata.data = {}
utdata = {}
utdata.first = 0
utdata.last = -1
utdata.data = {}
-- en separat kö att returnera på slutet
local returndata = {}
for c in string.gmatch(text, ".[\128-\191]*") do
enqueue(indata, c)
end
repeat
local x = dequeue(indata)
local y = peekonce(indata)
local z = peektwice(indata)
local u = peeklast(utdata)
if (latinska[x] == nil) then -- icke-kyrilliskt tecken
enqueue(utdata, x)
elseif ((u == -1) and (string.match(x,"Е"))) then -- initialt E
enqueue(utdata,"Je")
elseif((u == -1) and (string.match(x,"е"))) then -- initialt e
enqueue(utdata,"je")
elseif ((string.match(u," ")) and (string.match(x,"Е"))) then -- initialt E
enqueue(utdata,"Je")
elseif((string.match(u," ")) and (string.match(x,"е"))) then -- initialt e
enqueue(utdata,"je")
elseif (string.match(x,"ь")) then
if (string.match(y,"и")) then
enqueue(utdata, "j")
end
elseif ((string.match(x,"с")) or (string.match(x,"т")) or (string.match(x,"з"))
or (string.match(x,"С")) or (string.match(x,"Т")) or (string.match(x,"З"))) then
if(string.match(y,"ь")) then
if(string.match(z,"е")) then
enqueue(utdata,latinska[x])
enqueue(utdata,"ie")
dequeue(indata)
dequeue(indata)
elseif(string.match(z,"ё")) then
enqueue(utdata,latinska[x])
enqueue(utdata,"io")
dequeue(indata)
dequeue(indata)
elseif(string.match(z,"ю")) then
enqueue(utdata,latinska[x])
enqueue(utdata,"iu")
dequeue(indata)
dequeue(indata)
elseif(string.match(z,"я")) then
enqueue(utdata,latinska[x])
enqueue(utdata,"ia")
dequeue(indata)
dequeue(indata)
else
enqueue(utdata,latinska[x])
end
elseif(string.match(y,"ё")) then
enqueue(utdata,latinska[x])
enqueue(utdata,"io")
dequeue(indata)
elseif(string.match(y,"ю")) then
enqueue(utdata,latinska[x])
enqueue(utdata,"iu")
dequeue(indata)
elseif(string.match(y,"я")) then
enqueue(utdata,latinska[x])
enqueue(utdata,"ia")
dequeue(indata)
else
enqueue(utdata, latinska[x])
end
elseif((string.match(x,"ш")) or (string.match(x,"щ")) or (string.match(x,"ч"))
or (string.match(x,"Ш")) or (string.match(x,"Щ")) or (string.match(x,"Ч"))) then
if (y == nil) then
enqueue(utdata,latinska[x])
elseif (string.match(y,"ё")) then
enqueue(utdata,latinska[x])
enqueue(utdata,"o")
dequeue(indata)
else
enqueue(utdata,latinska[x])
end
elseif(string.match(x,"е")) then
if((string.match(u,"a")) or (string.match(u,"e")) or (string.match(u,"o")) or (string.match(u,"u")) or (string.match(u,"i"))) then
enqueue(utdata,"je")
else
enqueue(utdata,"e")
end
else
enqueue(utdata, latinska[x])
end
until (indata.first > indata.last)
repeat
local x = dequeue(utdata)
local y = peekonce(utdata)
if(string.match(y,"́")) then
if (string.match(x,"a")) then
x = string.gsub(x,"a","á")
table.insert(returndata, x)
dequeue(utdata)
elseif (string.match(x,"e")) then
x = string.gsub(x,"e","é")
table.insert(returndata, x)
dequeue(utdata)
elseif (string.match(x,"o")) then
x = string.gsub(x,"o","ó")
table.insert(returndata, x)
dequeue(utdata)
elseif (string.match(x,"u")) then
x = string.gsub(x,"u","ú")
table.insert(returndata, x)
dequeue(utdata)
elseif (string.match(x,"i")) then
x = string.gsub(x,"i","í")
table.insert(returndata, x)
dequeue(utdata)
else
table.insert(returndata,x)
table.insert(returndata,y)
dequeue(utdata)
end
else
table.insert(returndata,x)
end
until (utdata.first > utdata.last)
return returndata
end
-- följande funktion hanterar det faktum att ë alltid
-- i praktiken innebär det att den gör om ë till ё́
-- för de ord som har fler än en stavelse
function accentuera_jo ( text )
vokaler = {
["А"] = true, ["а"] = true,
["Е"] = true, ["е"] = true,
["Ё"] = true, ["ё"] = true,
["И"] = true, ["и"] = true,
["О"] = true, ["о"] = true,
["У"] = true, ["у"] = true,
["Э"] = true, ["э"] = true,
["Ю"] = true, ["ю"] = true,
["Ы"] = true, ["ы"] = true,
["Я"] = true, ["я"] = true,
}
skiljetecken = {
[" "] = true, [";"] = true, [","] = true, ["."] = true,
["!"] = true, ["?"] = true, ["("] = true, [")"] = true,
["-"] = true,
}
-- Börja med att förvandla eventuella ё́ tillbaka till ё
-- (annars blir det kaka på kaka)
text = string.gsub(text,"ё́","ё")
-- Följande rader sätter automatiskt accent på ё i flerstaviga ord
orden = {}
iter = 1;
for c in string.gmatch(text, ".[\128-\191]*") do
if ((latinska[c] ~= nil) or (string.match(c,"́"))) then
if (orden[iter] == nil) then
orden[iter] = c
else
orden[iter] = orden[iter]..c
end
elseif (skiljetecken[c]) then
iter = iter+1
orden[iter] = c
else -- annars är det något icke-ryskt tecken, som i "IP-адрес"
if (orden[iter] == nil) then
orden[iter] = c
else
orden[iter] = orden[iter]..c
end
end
end
for key, value in pairs(orden) do
antal_vokaler = 0;
for c in string.gmatch(value, ".[\128-\191]*") do
if(vokaler[c]) then
antal_vokaler = antal_vokaler +1
end
end
if (antal_vokaler>1) then
orden[key] = string.gsub(value,"ё","ё́")
end
end
return table.concat(orden,"")
end
--[[
function export.transkribera( argument )
local text = argument.args["text"]
-- först en funktion som gör att till exempel
-- Горбачёв blir Gorbatjóv (inte Gorbatjov)
text = accentuera_jo (text)
outputdata = transkribera_ru(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
--]]
function export.tr( argument )
local text = argument
-- först en funktion som gör att till exempel
-- Горбачёв blir Gorbatjóv (inte Gorbatjov)
text = accentuera_jo (text)
outputdata = transkribera_ru(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
return export
9sh1ea3evsq6wshcwpztartv5sxl82a
3703356
3703355
2022-08-19T09:54:38Z
Dodde
309
latinska -> latin -> latin_by_cyrillic, mer utförligt namn på tabellen enligt "value by key"
Scribunto
text/plain
-- Denna modul används för att transkribera ryska.
--
-- För att transkribera bulgariska, ukrainska och
-- vitryska/belarusiska kan ett liknande system användas.
-- Det hanteras dock av särskilda moduler. Se:
--
-- Modul:translit/be
-- Modul:translit/bg
-- Modul:translit/uk
--
-- Systemet för transkribering följer det som anges i
-- "Svenska skrivregler" (2017), fjärde upplagan, red. Ola Karlsson
-- En kopia av avsnittet finns i skrivande stund här:
-- https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf
--
-- Notera att detta sätt är specifikt för att transkribera
-- till svenska. Transkribering till andra språk sker enligt
-- andra mönster. Exempelvis ska Горбачёв bli just Gorbatjóv.
-- På andra språk skulle det kunna bli Gorbachev, Gorbatschow,
-- Gorbatchev, Gorbatsjov, osv.
--
-- En vanlig fallgrop är att "ё" bara transkriberas korrekt när
-- de två punkterna är med. På ryska utelämnas de ofta när sammanhanget gör det
-- uppenbart. Alltså är det vanligt att "Пётр" istället stavas "Пeтр", vilket
-- denna modul följaktligen tolkar som "Petr" istället för "Pjotr".
--
-- Denna modul är gjord för att returnera latinska tecken med accenterna
-- utskrivna. Därför blir Горбачёв till Gorbatjóv, inte Gorbatjov.
--
-- TODO: Placera i en dold kategori för att markera de ord som inte har
-- tillräckligt många accenttecken
--
-- Denna modul används av följande mall:
-- {{tr}}
--
-- Modulen är författad av (och underhålls av) [[Användare:Gabbe]]
local export = {}
latin_by_cyrillic = { ["А"]="A", ["а"]="a", ["Б"]="B", ["б"]="b", ["В"]="V", ["в"]="v",
["Г"]="G", ["г"]="g", ["Д"]="D", ["д"]="d", ["Е"]="E", ["е"]="e", ["Ё"]="Jo",
["ё"]="jo", ["Ж"]="Zj", ["ж"]="zj", ["З"]="Z", ["з"]="z", ["И"]="I", ["и"]="i",
["Й"]="J", ["й"]="j", ["К"]="K", ["к"]="k", ["Л"]="L", ["л"]="l", ["М"]="M",
["м"]="m", ["Н"]="N", ["н"]="n", ["О"]="O", ["о"]="o", ["П"]="P", ["п"]="p",
["Р"]="R", ["р"]="r", ["С"]="S", ["с"]="s", ["Т"]="T", ["т"]="t", ["У"]="U",
["у"]="u", ["Ф"]="F", ["ф"]="f", ["Х"]="Ch", ["х"]="ch", ["Ц"]="Ts", ["ц"]="ts",
["Ч"]="Tj", ["ч"]="tj", ["Ш"]="Sj", ["ш"]="sj", ["Щ"]="Sjtj", ["щ"]="sjtj",
["Ъ"]="", ["ъ"]="", ["Ы"]="Y", ["ы"]="y", ["Ь"]="J", ["ь"]="j", ["Э"]="E",
["э"]="e", ["Ю"]="Ju", ["ю"]="ju", ["Я"]="Ja", ["я"]="ja" }
-- Fem köfunktioner
function enqueue(q, val)
q.last = q.last + 1
q.data[q.last] = val
end
function dequeue(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
q.data[q.first] = nil
q.first = q.first + 1
end
return rval
end
function peekonce(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
end
return rval
end
function peektwice(q)
local rval
if (q.first+1 > q.last) then
rval = -1
else
rval = q.data[q.first+1]
end
return rval
end
function peeklast(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.last]
end
return rval
end
-- Själva transkriberingsfunktionen för ryska
function transkribera_ru(text)
-- Två köer: en för kyrilliska bokstäver och en för latinska bokstäver
indata = {}
indata.first = 0
indata.last = -1
indata.data = {}
utdata = {}
utdata.first = 0
utdata.last = -1
utdata.data = {}
-- en separat kö att returnera på slutet
local returndata = {}
for c in string.gmatch(text, ".[\128-\191]*") do
enqueue(indata, c)
end
repeat
local x = dequeue(indata)
local y = peekonce(indata)
local z = peektwice(indata)
local u = peeklast(utdata)
if (latin_by_cyrillic[x] == nil) then -- icke-kyrilliskt tecken
enqueue(utdata, x)
elseif ((u == -1) and (string.match(x,"Е"))) then -- initialt E
enqueue(utdata,"Je")
elseif((u == -1) and (string.match(x,"е"))) then -- initialt e
enqueue(utdata,"je")
elseif ((string.match(u," ")) and (string.match(x,"Е"))) then -- initialt E
enqueue(utdata,"Je")
elseif((string.match(u," ")) and (string.match(x,"е"))) then -- initialt e
enqueue(utdata,"je")
elseif (string.match(x,"ь")) then
if (string.match(y,"и")) then
enqueue(utdata, "j")
end
elseif ((string.match(x,"с")) or (string.match(x,"т")) or (string.match(x,"з"))
or (string.match(x,"С")) or (string.match(x,"Т")) or (string.match(x,"З"))) then
if(string.match(y,"ь")) then
if(string.match(z,"е")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"ie")
dequeue(indata)
dequeue(indata)
elseif(string.match(z,"ё")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"io")
dequeue(indata)
dequeue(indata)
elseif(string.match(z,"ю")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"iu")
dequeue(indata)
dequeue(indata)
elseif(string.match(z,"я")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"ia")
dequeue(indata)
dequeue(indata)
else
enqueue(utdata,latin_by_cyrillic[x])
end
elseif(string.match(y,"ё")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"io")
dequeue(indata)
elseif(string.match(y,"ю")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"iu")
dequeue(indata)
elseif(string.match(y,"я")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"ia")
dequeue(indata)
else
enqueue(utdata, latin_by_cyrillic[x])
end
elseif((string.match(x,"ш")) or (string.match(x,"щ")) or (string.match(x,"ч"))
or (string.match(x,"Ш")) or (string.match(x,"Щ")) or (string.match(x,"Ч"))) then
if (y == nil) then
enqueue(utdata,latin_by_cyrillic[x])
elseif (string.match(y,"ё")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"o")
dequeue(indata)
else
enqueue(utdata,latin_by_cyrillic[x])
end
elseif(string.match(x,"е")) then
if((string.match(u,"a")) or (string.match(u,"e")) or (string.match(u,"o")) or (string.match(u,"u")) or (string.match(u,"i"))) then
enqueue(utdata,"je")
else
enqueue(utdata,"e")
end
else
enqueue(utdata, latin_by_cyrillic[x])
end
until (indata.first > indata.last)
repeat
local x = dequeue(utdata)
local y = peekonce(utdata)
if(string.match(y,"́")) then
if (string.match(x,"a")) then
x = string.gsub(x,"a","á")
table.insert(returndata, x)
dequeue(utdata)
elseif (string.match(x,"e")) then
x = string.gsub(x,"e","é")
table.insert(returndata, x)
dequeue(utdata)
elseif (string.match(x,"o")) then
x = string.gsub(x,"o","ó")
table.insert(returndata, x)
dequeue(utdata)
elseif (string.match(x,"u")) then
x = string.gsub(x,"u","ú")
table.insert(returndata, x)
dequeue(utdata)
elseif (string.match(x,"i")) then
x = string.gsub(x,"i","í")
table.insert(returndata, x)
dequeue(utdata)
else
table.insert(returndata,x)
table.insert(returndata,y)
dequeue(utdata)
end
else
table.insert(returndata,x)
end
until (utdata.first > utdata.last)
return returndata
end
-- följande funktion hanterar det faktum att ë alltid
-- i praktiken innebär det att den gör om ë till ё́
-- för de ord som har fler än en stavelse
function accentuera_jo ( text )
vokaler = {
["А"] = true, ["а"] = true,
["Е"] = true, ["е"] = true,
["Ё"] = true, ["ё"] = true,
["И"] = true, ["и"] = true,
["О"] = true, ["о"] = true,
["У"] = true, ["у"] = true,
["Э"] = true, ["э"] = true,
["Ю"] = true, ["ю"] = true,
["Ы"] = true, ["ы"] = true,
["Я"] = true, ["я"] = true,
}
skiljetecken = {
[" "] = true, [";"] = true, [","] = true, ["."] = true,
["!"] = true, ["?"] = true, ["("] = true, [")"] = true,
["-"] = true,
}
-- Börja med att förvandla eventuella ё́ tillbaka till ё
-- (annars blir det kaka på kaka)
text = string.gsub(text,"ё́","ё")
-- Följande rader sätter automatiskt accent på ё i flerstaviga ord
orden = {}
iter = 1;
for c in string.gmatch(text, ".[\128-\191]*") do
if ((latin_by_cyrillic[c] ~= nil) or (string.match(c,"́"))) then
if (orden[iter] == nil) then
orden[iter] = c
else
orden[iter] = orden[iter]..c
end
elseif (skiljetecken[c]) then
iter = iter+1
orden[iter] = c
else -- annars är det något icke-ryskt tecken, som i "IP-адрес"
if (orden[iter] == nil) then
orden[iter] = c
else
orden[iter] = orden[iter]..c
end
end
end
for key, value in pairs(orden) do
antal_vokaler = 0;
for c in string.gmatch(value, ".[\128-\191]*") do
if(vokaler[c]) then
antal_vokaler = antal_vokaler +1
end
end
if (antal_vokaler>1) then
orden[key] = string.gsub(value,"ё","ё́")
end
end
return table.concat(orden,"")
end
--[[
function export.transkribera( argument )
local text = argument.args["text"]
-- först en funktion som gör att till exempel
-- Горбачёв blir Gorbatjóv (inte Gorbatjov)
text = accentuera_jo (text)
outputdata = transkribera_ru(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
--]]
function export.tr( argument )
local text = argument
-- först en funktion som gör att till exempel
-- Горбачёв blir Gorbatjóv (inte Gorbatjov)
text = accentuera_jo (text)
outputdata = transkribera_ru(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
return export
ipmpx404ya9f9pgcvo8q7bnbl0lf2s3
3703358
3703356
2022-08-19T09:57:41Z
Dodde
309
funktioner som bara används inuti en modul ska deklareras "local", även variabler ska vara "local"
Scribunto
text/plain
-- Denna modul används för att transkribera ryska.
--
-- För att transkribera bulgariska, ukrainska och
-- vitryska/belarusiska kan ett liknande system användas.
-- Det hanteras dock av särskilda moduler. Se:
--
-- Modul:translit/be
-- Modul:translit/bg
-- Modul:translit/uk
--
-- Systemet för transkribering följer det som anges i
-- "Svenska skrivregler" (2017), fjärde upplagan, red. Ola Karlsson
-- En kopia av avsnittet finns i skrivande stund här:
-- https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf
--
-- Notera att detta sätt är specifikt för att transkribera
-- till svenska. Transkribering till andra språk sker enligt
-- andra mönster. Exempelvis ska Горбачёв bli just Gorbatjóv.
-- På andra språk skulle det kunna bli Gorbachev, Gorbatschow,
-- Gorbatchev, Gorbatsjov, osv.
--
-- En vanlig fallgrop är att "ё" bara transkriberas korrekt när
-- de två punkterna är med. På ryska utelämnas de ofta när sammanhanget gör det
-- uppenbart. Alltså är det vanligt att "Пётр" istället stavas "Пeтр", vilket
-- denna modul följaktligen tolkar som "Petr" istället för "Pjotr".
--
-- Denna modul är gjord för att returnera latinska tecken med accenterna
-- utskrivna. Därför blir Горбачёв till Gorbatjóv, inte Gorbatjov.
--
-- TODO: Placera i en dold kategori för att markera de ord som inte har
-- tillräckligt många accenttecken
--
-- Denna modul används av följande mall:
-- {{tr}}
--
-- Modulen är författad av (och underhålls av) [[Användare:Gabbe]]
local export = {}
local latin_by_cyrillic = { ["А"]="A", ["а"]="a", ["Б"]="B", ["б"]="b", ["В"]="V", ["в"]="v",
["Г"]="G", ["г"]="g", ["Д"]="D", ["д"]="d", ["Е"]="E", ["е"]="e", ["Ё"]="Jo",
["ё"]="jo", ["Ж"]="Zj", ["ж"]="zj", ["З"]="Z", ["з"]="z", ["И"]="I", ["и"]="i",
["Й"]="J", ["й"]="j", ["К"]="K", ["к"]="k", ["Л"]="L", ["л"]="l", ["М"]="M",
["м"]="m", ["Н"]="N", ["н"]="n", ["О"]="O", ["о"]="o", ["П"]="P", ["п"]="p",
["Р"]="R", ["р"]="r", ["С"]="S", ["с"]="s", ["Т"]="T", ["т"]="t", ["У"]="U",
["у"]="u", ["Ф"]="F", ["ф"]="f", ["Х"]="Ch", ["х"]="ch", ["Ц"]="Ts", ["ц"]="ts",
["Ч"]="Tj", ["ч"]="tj", ["Ш"]="Sj", ["ш"]="sj", ["Щ"]="Sjtj", ["щ"]="sjtj",
["Ъ"]="", ["ъ"]="", ["Ы"]="Y", ["ы"]="y", ["Ь"]="J", ["ь"]="j", ["Э"]="E",
["э"]="e", ["Ю"]="Ju", ["ю"]="ju", ["Я"]="Ja", ["я"]="ja" }
-- Fem köfunktioner
local function enqueue(q, val)
q.last = q.last + 1
q.data[q.last] = val
end
local function dequeue(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
q.data[q.first] = nil
q.first = q.first + 1
end
return rval
end
local function peekonce(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
end
return rval
end
local function peektwice(q)
local rval
if (q.first+1 > q.last) then
rval = -1
else
rval = q.data[q.first+1]
end
return rval
end
local function peeklast(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.last]
end
return rval
end
-- Själva transkriberingsfunktionen för ryska
local function transkribera_ru(text)
-- Två köer: en för kyrilliska bokstäver och en för latinska bokstäver
indata = {}
indata.first = 0
indata.last = -1
indata.data = {}
utdata = {}
utdata.first = 0
utdata.last = -1
utdata.data = {}
-- en separat kö att returnera på slutet
local returndata = {}
for c in string.gmatch(text, ".[\128-\191]*") do
enqueue(indata, c)
end
repeat
local x = dequeue(indata)
local y = peekonce(indata)
local z = peektwice(indata)
local u = peeklast(utdata)
if (latin_by_cyrillic[x] == nil) then -- icke-kyrilliskt tecken
enqueue(utdata, x)
elseif ((u == -1) and (string.match(x,"Е"))) then -- initialt E
enqueue(utdata,"Je")
elseif((u == -1) and (string.match(x,"е"))) then -- initialt e
enqueue(utdata,"je")
elseif ((string.match(u," ")) and (string.match(x,"Е"))) then -- initialt E
enqueue(utdata,"Je")
elseif((string.match(u," ")) and (string.match(x,"е"))) then -- initialt e
enqueue(utdata,"je")
elseif (string.match(x,"ь")) then
if (string.match(y,"и")) then
enqueue(utdata, "j")
end
elseif ((string.match(x,"с")) or (string.match(x,"т")) or (string.match(x,"з"))
or (string.match(x,"С")) or (string.match(x,"Т")) or (string.match(x,"З"))) then
if(string.match(y,"ь")) then
if(string.match(z,"е")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"ie")
dequeue(indata)
dequeue(indata)
elseif(string.match(z,"ё")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"io")
dequeue(indata)
dequeue(indata)
elseif(string.match(z,"ю")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"iu")
dequeue(indata)
dequeue(indata)
elseif(string.match(z,"я")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"ia")
dequeue(indata)
dequeue(indata)
else
enqueue(utdata,latin_by_cyrillic[x])
end
elseif(string.match(y,"ё")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"io")
dequeue(indata)
elseif(string.match(y,"ю")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"iu")
dequeue(indata)
elseif(string.match(y,"я")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"ia")
dequeue(indata)
else
enqueue(utdata, latin_by_cyrillic[x])
end
elseif((string.match(x,"ш")) or (string.match(x,"щ")) or (string.match(x,"ч"))
or (string.match(x,"Ш")) or (string.match(x,"Щ")) or (string.match(x,"Ч"))) then
if (y == nil) then
enqueue(utdata,latin_by_cyrillic[x])
elseif (string.match(y,"ё")) then
enqueue(utdata,latin_by_cyrillic[x])
enqueue(utdata,"o")
dequeue(indata)
else
enqueue(utdata,latin_by_cyrillic[x])
end
elseif(string.match(x,"е")) then
if((string.match(u,"a")) or (string.match(u,"e")) or (string.match(u,"o")) or (string.match(u,"u")) or (string.match(u,"i"))) then
enqueue(utdata,"je")
else
enqueue(utdata,"e")
end
else
enqueue(utdata, latin_by_cyrillic[x])
end
until (indata.first > indata.last)
repeat
local x = dequeue(utdata)
local y = peekonce(utdata)
if(string.match(y,"́")) then
if (string.match(x,"a")) then
x = string.gsub(x,"a","á")
table.insert(returndata, x)
dequeue(utdata)
elseif (string.match(x,"e")) then
x = string.gsub(x,"e","é")
table.insert(returndata, x)
dequeue(utdata)
elseif (string.match(x,"o")) then
x = string.gsub(x,"o","ó")
table.insert(returndata, x)
dequeue(utdata)
elseif (string.match(x,"u")) then
x = string.gsub(x,"u","ú")
table.insert(returndata, x)
dequeue(utdata)
elseif (string.match(x,"i")) then
x = string.gsub(x,"i","í")
table.insert(returndata, x)
dequeue(utdata)
else
table.insert(returndata,x)
table.insert(returndata,y)
dequeue(utdata)
end
else
table.insert(returndata,x)
end
until (utdata.first > utdata.last)
return returndata
end
-- följande funktion hanterar det faktum att ë alltid
-- i praktiken innebär det att den gör om ë till ё́
-- för de ord som har fler än en stavelse
local function accentuera_jo ( text )
vokaler = {
["А"] = true, ["а"] = true,
["Е"] = true, ["е"] = true,
["Ё"] = true, ["ё"] = true,
["И"] = true, ["и"] = true,
["О"] = true, ["о"] = true,
["У"] = true, ["у"] = true,
["Э"] = true, ["э"] = true,
["Ю"] = true, ["ю"] = true,
["Ы"] = true, ["ы"] = true,
["Я"] = true, ["я"] = true,
}
skiljetecken = {
[" "] = true, [";"] = true, [","] = true, ["."] = true,
["!"] = true, ["?"] = true, ["("] = true, [")"] = true,
["-"] = true,
}
-- Börja med att förvandla eventuella ё́ tillbaka till ё
-- (annars blir det kaka på kaka)
text = string.gsub(text,"ё́","ё")
-- Följande rader sätter automatiskt accent på ё i flerstaviga ord
orden = {}
iter = 1;
for c in string.gmatch(text, ".[\128-\191]*") do
if ((latin_by_cyrillic[c] ~= nil) or (string.match(c,"́"))) then
if (orden[iter] == nil) then
orden[iter] = c
else
orden[iter] = orden[iter]..c
end
elseif (skiljetecken[c]) then
iter = iter+1
orden[iter] = c
else -- annars är det något icke-ryskt tecken, som i "IP-адрес"
if (orden[iter] == nil) then
orden[iter] = c
else
orden[iter] = orden[iter]..c
end
end
end
for key, value in pairs(orden) do
antal_vokaler = 0;
for c in string.gmatch(value, ".[\128-\191]*") do
if(vokaler[c]) then
antal_vokaler = antal_vokaler +1
end
end
if (antal_vokaler>1) then
orden[key] = string.gsub(value,"ё","ё́")
end
end
return table.concat(orden,"")
end
--[[
function export.transkribera( argument )
local text = argument.args["text"]
-- först en funktion som gör att till exempel
-- Горбачёв blir Gorbatjóv (inte Gorbatjov)
text = accentuera_jo (text)
outputdata = transkribera_ru(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
--]]
function export.tr( argument )
local text = argument
-- först en funktion som gör att till exempel
-- Горбачёв blir Gorbatjóv (inte Gorbatjov)
text = accentuera_jo (text)
outputdata = transkribera_ru(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
return export
rs96vlejlr1gf68w1j0jx6we9a7k6id
Mall:tr
10
928541
3703212
3703186
2022-08-18T12:21:44Z
Gabbe
1153
flyttade även grc till vägen via [[modul:translit]]
wikitext
text/x-wiki
<includeonly><!--
-->{{#switch:<!--o-->{{{1}}}<!--
-->|<!--o-->ru={{#invoke:translit|tr|lang=ru|text={{{2|{{PAGENAME}}}}}}}<!--
-->|<!--o-->be={{#invoke:translit|tr|lang=be|text={{{2|{{PAGENAME}}}}}}}<!--
-->|<!--o-->bg={{#invoke:translit|tr|lang=bg|text={{{2|{{PAGENAME}}}}}}}<!--
-->|<!--o-->uk={{#invoke:translit|tr|lang=uk|text={{{2|{{PAGENAME}}}}}}}<!--
-->|<!--o-->ar={{#invoke:translit/ar|transkribera|text={{{2|{{PAGENAME}}}}}}}<!--
-->|<!--o-->grc={{#invoke:translit|tr|lang=grc|text={{{2|{{PAGENAME}}}}}}}<!--
-->|<!--o-->#default='''FEL i mall "{<nowiki>{tr}</nowiki>}" : språkkod "{{{1|??}}}" stöds ej'''<!--
-->}}<!--endswitch--></includeonly><noinclude>
== Syfte ==
Denna mall transkriberar vissa språk till det latinska alfabetet.
För närvarande hanterar mallen följande språk som skrivs med det kyrilliska alfabetet [https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf på ett särskilt svenskt sätt]:
* ryska [ru]
* belarusiska/vitryska [be]
* bulgariska [bg]
* ukrainska [uk]
På experimentstadiet hanterar den även:
* arabiska [ar]
* klassisk grekiska [grc]
På längre sikt är ambitionen att mallen även ska kunna transkribera andra språk.
== Parametrar ==
Mallen har två parametrar. Den första parametern, som är obligatorisk, är språkkoden. Den andra parametern, som är frivillig, är det ord som ska transkriberas. Sidnamnet hämtas ifall parametern saknas.
== Exempel och självtest ==
<pre>{{tr}}</pre>
{{tr}}
----
<pre>{{tr|ru|Пётр Ильи́ч Чайко́вский}}</pre>
{{tr|ru|Пётр Ильи́ч Чайко́вский}}
----
<pre>{{tr|ru|Горбачёв}}</pre>
{{tr|ru|Горбачёв}}
----
<pre>{{tr|ru|ёж}}</pre>
{{tr|ru|ёж}}
----
<pre>{{tr|ru|ёлка}}</pre>
{{tr|ru|ёлка}}
----
<pre>{{tr|bg|Жельо}}</pre>
{{tr|bg|Жельо}}
----
<pre>{{tr|uk|Запоріжжя}}</pre>
{{tr|uk|Запоріжжя}}
----
== Behövda moduler ==
* {{modul|translit}}
* {{modul|translit/ru}}
* {{modul|translit/be}}
* {{modul|translit/bg}}
* {{modul|translit/uk}}
* {{modul|translit/ar}}
* {{modul|translit/grc}}
[[Kategori:Wiktionary:Mallar]]
</noinclude>
hpiqwkjdwjw7tjv4cmm2f5i8kbzzk2w
Modul:translit/grc
828
928807
3703210
3703002
2022-08-18T12:18:08Z
Gabbe
1153
lägger till funktion för att kunna anropas från [[modul:translit]]
Scribunto
text/plain
-- Denna modul används för att transkribera antik grekiska till svenska.
--
-- För att transkribera modern grekiska kan ett liknande system användas.
-- Det hanteras dock av särskilda moduler. Se:
--
-- [TODO]
--
--
-- Denna modul strävar efter att följa det system som används av
-- "Library of Congress". Det finns i skrivande stund beskrivet här:
--
-- https://www.loc.gov/catdir/cpso/romanization/greek.pdf
--
-- Några avsteg har gjorts för att bättre reflektera hur orden vanligen
-- transkriberas till svenska. Exempelvis förvandlas φρόνησις till "frónēsis",
-- inte "phronēsis".
--
-- Notera att det finns andra sätt för att transkribera forngrekiska.
-- Notera även att denna modul inte (ännu) hanterar skriftsystem som Linear B
-- eller den cypriska stavelseskriften.
--
-- Lägg också märke till att denna version av modulen hanterar de flesta
-- diakriter på ett ganska styvmoderligt sätt. Framtida versioner kan
-- (och bör) göra detta mer nyanserat.
--
--
-- Denna modul används av följande mall:
-- {{tr}}
--
-- Kända brister
-- * Bokstavskombinationer av typen "γγ", "γκ", "γξ", "γχ"
--
-- Modulen är författad av (och underhålls av) [[Användare:Gabbe]]
local export = {}
latinska = {}
-- börja med de vanliga bokstäverna
latinska["Α"]="A"; latinska["α"]="a"
latinska["Β"]="B"; latinska["β"]="b"
latinska["Γ"]="G"; latinska["γ"]="g"
latinska["Δ"]="D"; latinska["δ"]="d"
latinska["Ε"]="E"; latinska["ε"]="e"
latinska["Ζ"]="Z"; latinska["ζ"]="z"
latinska["Η"]="Ē"; latinska["η"]="ē"
latinska["Θ"]="Th"; latinska["θ"]="th"
latinska["Ι"]="I"; latinska["ι"]="i"
latinska["Κ"]="K"; latinska["κ"]="k"
latinska["Λ"]="L"; latinska["λ"]="l"
latinska["Μ"]="M"; latinska["μ"]="m"
latinska["Ν"]="N"; latinska["ν"]="n"
latinska["Ξ"]="X"; latinska["ξ"]="x"
latinska["Ο"]="O"; latinska["ο"]="o"
latinska["Π"]="P"; latinska["π"]="p"
latinska["Ρ"]="R"; latinska["ρ"]="r"
latinska["Σ"]="S"; latinska["σ"]="s"; latinska["ς"]="s"
latinska["Τ"]="T"; latinska["τ"]="t"
latinska["Υ"]="Y"; latinska["υ"]="y"
latinska["Φ"]="F"; latinska["φ"]="f"
latinska["Χ"]="Ch"; latinska["χ"]="ch"
latinska["Ψ"]="Ps"; latinska["ψ"]="ps"
latinska["Ω"]="Ō"; latinska["ω"]="ō"
-- särvariant av sigma
latinska["Ϲ"]="S"; latinska["ϲ"]="s"
-- två arkaiska bokstäver
latinska["Ϝ"]="W"; latinska["ϝ"]="w"
latinska["Ϙ"]="Ḳ"; latinska["ϙ"]="ḳ"
-- sen en separat tabell för att hålla reda på vilka som har "spiritus asper":
spiritus_asper = {
["Ἁ"] = true, ["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true, ["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true, ["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true, ["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true,
["ἁ"] = true, ["ἑ"] = true, ["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true, ["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true,
["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true,
["ἃ"] = true, ["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true, ["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true,
["ἇ"] = true, ["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true, ["ᾗ"] = true, ["ᾧ"] = true,
}
-- sen en separat tabell för versalerna:
versaler = {
["Α"] = true, ["Ε"] = true, ["Η"] = true, ["Ι"] = true, ["Ο"] = true,
["Υ"] = true, ["Ω"] = true, ["ᾼ"] = true, ["ῌ"] = true, ["ῼ"] = true,
["Ρ"] = true, ["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true,
["Ό"] = true, ["Ύ"] = true, ["Ώ"] = true, ["Ὰ"] = true, ["Ὲ"] = true,
["Ὴ"] = true, ["Ὶ"] = true, ["Ὸ"] = true, ["Ὺ"] = true, ["Ὼ"] = true,
["Ἀ"] = true, ["Ἐ"] = true, ["Ἠ"] = true, ["Ἰ"] = true, ["Ὀ"] = true,
["Ὠ"] = true, ["ᾈ"] = true, ["ᾘ"] = true, ["ᾨ"] = true, ["Ἄ"] = true,
["Ἔ"] = true, ["Ἤ"] = true, ["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true,
["ᾌ"] = true, ["ᾜ"] = true, ["ᾬ"] = true, ["Ἂ"] = true, ["Ἒ"] = true,
["Ἢ"] = true, ["Ἲ"] = true, ["Ὂ"] = true, ["Ὢ"] = true, ["ᾊ"] = true,
["ᾚ"] = true, ["ᾪ"] = true, ["Ἆ"] = true, ["Ἦ"] = true, ["Ἶ"] = true,
["Ὦ"] = true, ["ᾎ"] = true, ["ᾞ"] = true, ["ᾮ"] = true, ["Ἁ"] = true,
["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true,
["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true,
["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true,
["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true,
["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true, ["Ᾱ"] = true, ["Ῑ"] = true,
["Ῡ"] = true, ["Ᾰ"] = true, ["Ῐ"] = true, ["Ῠ"] = true,
}
-- sen en för gemenerna:
gemener = {
["α"] = true, ["ε"] = true, ["η"] = true, ["ι"] = true, ["ο"] = true,
["υ"] = true, ["ω"] = true, ["ᾳ"] = true, ["ῃ"] = true, ["ῳ"] = true,
["ρ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ὰ"] = true, ["ὲ"] = true, ["ὴ"] = true, ["ὶ"] = true,
["ὸ"] = true, ["ὺ"] = true, ["ὼ"] = true, ["ᾲ"] = true, ["ῂ"] = true,
["ῲ"] = true, ["ᾶ"] = true, ["ῆ"] = true, ["ῖ"] = true, ["ῦ"] = true,
["ῶ"] = true, ["ᾷ"] = true, ["ῇ"] = true, ["ῷ"] = true, ["ἀ"] = true,
["ἐ"] = true, ["ἠ"] = true, ["ἰ"] = true, ["ὀ"] = true, ["ὐ"] = true,
["ὠ"] = true, ["ᾀ"] = true, ["ᾐ"] = true, ["ᾠ"] = true, ["ῤ"] = true,
["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true, ["ὄ"] = true,
["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true, ["ᾤ"] = true,
["ἂ"] = true, ["ἒ"] = true, ["ἢ"] = true, ["ἲ"] = true, ["ὂ"] = true,
["ὒ"] = true, ["ὢ"] = true, ["ᾂ"] = true, ["ᾒ"] = true, ["ᾢ"] = true,
["ἆ"] = true, ["ἦ"] = true, ["ἶ"] = true, ["ὖ"] = true, ["ὦ"] = true,
["ᾆ"] = true, ["ᾖ"] = true, ["ᾦ"] = true, ["ἁ"] = true, ["ἑ"] = true,
["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true,
["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true, ["ἅ"] = true,
["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true,
["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true, ["ἃ"] = true,
["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true,
["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true, ["ἇ"] = true,
["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true,
["ᾗ"] = true, ["ᾧ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
["ᾱ"] = true, ["ῑ"] = true, ["ῡ"] = true, ["ᾰ"] = true, ["ῐ"] = true,
["ῠ"] = true,
}
-- sen en tabell för de med akut accent:
akut_accent = {
["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true, ["Ό"] = true,
["Ύ"] = true, ["Ώ"] = true, ["Ἄ"] = true, ["Ἔ"] = true, ["Ἤ"] = true,
["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true, ["ᾌ"] = true, ["ᾜ"] = true,
["ᾬ"] = true, ["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true,
["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true,
["ᾭ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true,
["ὄ"] = true, ["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true,
["ᾤ"] = true, ["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true,
["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true,
["ᾥ"] = true, ["ΐ"] = true, ["ΰ"] = true,
}
-- sen några separata tabeller för att hålla reda på vilken slags bokstav det är
alfa = {
["α"] = true, ["𝛂"] = true, ["𝛼"] = true, ["𝜶"] = true, ["𝝰"] = true,
["𝞪"] = true, ["Α"] = true, ["𝚨"] = true, ["𝛢"] = true, ["𝜜"] = true,
["𝝖"] = true, ["𝞐"] = true, ["ἀ"] = true, ["Ἀ"] = true, ["ἄ"] = true,
["Ἄ"] = true, ["ᾄ"] = true, ["ᾌ"] = true, ["ἂ"] = true, ["Ἂ"] = true,
["ᾂ"] = true, ["ᾊ"] = true, ["ἆ"] = true, ["Ἆ"] = true, ["ᾆ"] = true,
["ᾎ"] = true, ["ᾀ"] = true, ["ᾈ"] = true, ["ἁ"] = true, ["Ἁ"] = true,
["ἅ"] = true, ["Ἅ"] = true, ["ᾅ"] = true, ["ᾍ"] = true, ["ἃ"] = true,
["Ἃ"] = true, ["ᾃ"] = true, ["ᾋ"] = true, ["ἇ"] = true, ["Ἇ"] = true,
["ᾇ"] = true, ["ᾏ"] = true, ["ᾁ"] = true, ["ᾉ"] = true, ["ά"] = true,
["ά"] = true, ["Ά"] = true, ["Ά"] = true, ["ᾴ"] = true, ["ὰ"] = true,
["Ὰ"] = true, ["ᾲ"] = true, ["ᾰ"] = true, ["Ᾰ"] = true, ["ᾶ"] = true,
["ᾷ"] = true, ["ᾱ"] = true, ["Ᾱ"] = true, ["ᾳ"] = true, ["ᾼ"] = true,
}
epsilon = {
["ε"] = true, ["ϵ"] = true, ["𝛆"] = true, ["𝛜"] = true, ["𝜀"] = true,
["𝜖"] = true, ["𝜺"] = true, ["𝝐"] = true, ["𝝴"] = true, ["𝞊"] = true,
["𝞮"] = true, ["𝟄"] = true, ["Ε"] = true, ["𝚬"] = true, ["𝛦"] = true,
["𝜠"] = true, ["𝝚"] = true, ["𝞔"] = true, ["ἐ"] = true, ["Ἐ"] = true,
["ἔ"] = true, ["Ἔ"] = true, ["ἒ"] = true, ["Ἒ"] = true, ["ἑ"] = true,
["Ἑ"] = true, ["ἕ"] = true, ["Ἕ"] = true, ["ἓ"] = true, ["Ἓ"] = true,
["έ"] = true, ["έ"] = true, ["Έ"] = true, ["Έ"] = true, ["ὲ"] = true,
["Ὲ"] = true,
}
eta = {
["η"] = true, ["𝛈"] = true, ["𝜂"] = true, ["𝜼"] = true, ["𝝶"] = true,
["𝞰"] = true, ["Η"] = true, ["𝚮"] = true, ["𝛨"] = true, ["𝜢"] = true,
["𝝜"] = true, ["𝞖"] = true, ["ἠ"] = true, ["Ἠ"] = true, ["ἤ"] = true,
["Ἤ"] = true, ["ᾔ"] = true, ["ᾜ"] = true, ["ἢ"] = true, ["Ἢ"] = true,
["ᾒ"] = true, ["ᾚ"] = true, ["ἦ"] = true, ["Ἦ"] = true, ["ᾖ"] = true,
["ᾞ"] = true, ["ᾐ"] = true, ["ᾘ"] = true, ["ἡ"] = true, ["Ἡ"] = true,
["ἥ"] = true, ["Ἥ"] = true, ["ᾕ"] = true, ["ᾝ"] = true, ["ἣ"] = true,
["Ἣ"] = true, ["ᾓ"] = true, ["ᾛ"] = true, ["ἧ"] = true, ["Ἧ"] = true,
["ᾗ"] = true, ["ᾟ"] = true, ["ᾑ"] = true, ["ᾙ"] = true, ["ή"] = true,
["ή"] = true, ["Ή"] = true, ["Ή"] = true, ["ῄ"] = true, ["ὴ"] = true,
["Ὴ"] = true, ["ῂ"] = true, ["ῆ"] = true, ["ῇ"] = true, ["ῃ"] = true,
["ῌ"] = true,
}
jota = {
["ι"] = true, ["𝛊"] = true, ["𝜄"] = true, ["𝜾"] = true, ["𝝸"] = true,
["𝞲"] = true, ["Ι"] = true, ["𝚰"] = true, ["𝛪"] = true, ["𝜤"] = true,
["𝝞"] = true, ["𝞘"] = true, ["ἰ"] = true, ["Ἰ"] = true, ["ἴ"] = true,
["Ἴ"] = true, ["ἲ"] = true, ["Ἲ"] = true, ["ἶ"] = true, ["Ἶ"] = true,
["ἱ"] = true, ["Ἱ"] = true, ["ἵ"] = true, ["Ἵ"] = true, ["ἳ"] = true,
["Ἳ"] = true, ["ἷ"] = true, ["Ἷ"] = true, ["ί"] = true, ["ί"] = true,
["Ί"] = true, ["Ί"] = true, ["ὶ"] = true, ["Ὶ"] = true, ["ῐ"] = true,
["Ῐ"] = true, ["ῖ"] = true, ["ϊ"] = true, ["Ϊ"] = true, ["ΐ"] = true,
["ΐ"] = true, ["ῒ"] = true, ["ῗ"] = true, ["ῑ"] = true, ["Ῑ"] = true,
["ι"] = true, ["ͺ"] = true,
}
omikron = {
["ο"] = true, ["𝛐"] = true, ["𝜊"] = true, ["𝝄"] = true, ["𝝾"] = true,
["𝞸"] = true, ["Ο"] = true, ["𝚶"] = true, ["𝛰"] = true, ["𝜪"] = true,
["𝝤"] = true, ["𝞞"] = true, ["ὀ"] = true, ["Ὀ"] = true, ["ὄ"] = true,
["Ὄ"] = true, ["ὂ"] = true, ["Ὂ"] = true, ["ὁ"] = true, ["Ὁ"] = true,
["ὅ"] = true, ["Ὅ"] = true, ["ὃ"] = true, ["Ὃ"] = true, ["ό"] = true,
["ό"] = true, ["Ό"] = true, ["Ό"] = true, ["ὸ"] = true, ["Ὸ"] = true,
}
rho = {
["ρ"] = true, ["ϱ"] = true, ["𝛒"] = true, ["𝛠"] = true, ["𝜌"] = true,
["𝜚"] = true, ["𝝆"] = true, ["𝝔"] = true, ["𝞀"] = true, ["𝞎"] = true,
["𝞺"] = true, ["𝟈"] = true, ["Ρ"] = true, ["𝚸"] = true, ["𝛲"] = true,
["𝜬"] = true, ["𝝦"] = true, ["𝞠"] = true, ["ᵨ"] = true, ["ῤ"] = true,
["ῥ"] = true, ["Ῥ"] = true, ["ᴩ"] = true, ["ϼ"] = true,
}
ypsilon = {
["υ"] = true, ["𝛖"] = true, ["𝜐"] = true, ["𝝊"] = true, ["𝞄"] = true,
["𝞾"] = true, ["Υ"] = true, ["ϒ"] = true, ["𝚼"] = true, ["𝛶"] = true,
["𝜰"] = true, ["𝝪"] = true, ["𝞤"] = true, ["ὐ"] = true, ["ὔ"] = true,
["ὒ"] = true, ["ὖ"] = true, ["ὑ"] = true, ["Ὑ"] = true, ["ὕ"] = true,
["Ὕ"] = true, ["ὓ"] = true, ["Ὓ"] = true, ["ὗ"] = true, ["Ὗ"] = true,
["ύ"] = true, ["ύ"] = true, ["Ύ"] = true, ["Ύ"] = true, ["ϓ"] = true,
["ὺ"] = true, ["Ὺ"] = true, ["ῠ"] = true, ["Ῠ"] = true, ["ῦ"] = true,
["ϋ"] = true, ["Ϋ"] = true, ["ϔ"] = true, ["ΰ"] = true, ["ΰ"] = true,
["ῢ"] = true, ["ῧ"] = true, ["ῡ"] = true, ["Ῡ"] = true,
}
omega = {
["ω"] = true, ["𝛚"] = true, ["𝜔"] = true, ["𝝎"] = true, ["𝞈"] = true,
["𝟂"] = true, ["Ω"] = true, ["𝛀"] = true, ["𝛺"] = true, ["𝜴"] = true,
["𝝮"] = true, ["𝞨"] = true, ["ὠ"] = true, ["Ὠ"] = true, ["ὤ"] = true,
["Ὤ"] = true, ["ᾤ"] = true, ["ᾬ"] = true, ["ὢ"] = true, ["Ὢ"] = true,
["ᾢ"] = true, ["ᾪ"] = true, ["ὦ"] = true, ["Ὦ"] = true, ["ᾦ"] = true,
["ᾮ"] = true, ["ᾠ"] = true, ["ᾨ"] = true, ["ὡ"] = true, ["Ὡ"] = true,
["ὥ"] = true, ["Ὥ"] = true, ["ᾥ"] = true, ["ᾭ"] = true, ["ὣ"] = true,
["Ὣ"] = true, ["ᾣ"] = true, ["ᾫ"] = true, ["ὧ"] = true, ["Ὧ"] = true,
["ᾧ"] = true, ["ᾯ"] = true, ["ᾡ"] = true, ["ᾩ"] = true, ["ώ"] = true,
["ώ"] = true, ["Ώ"] = true, ["Ώ"] = true, ["ῴ"] = true, ["ὼ"] = true,
["Ὼ"] = true, ["ῲ"] = true, ["ῶ"] = true, ["ῷ"] = true, ["ῳ"] = true,
["ῼ"] = true, ["ꭥ"] = true, ["Ω"] = true, ["㏀"] = true, ["㏁"] = true,
}
-- de som har två prickar ovanför vokalen
hiatus = {
["Ϊ"] = true, ["Ϋ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
}
-- generera tabellen för de övriga bokstäverna med diverse diakritiska tecken
for i,v in pairs(versaler) do
if(alfa[i]) then
latinska[i] = latinska["Α"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["α"]
end
elseif(epsilon[i]) then
latinska[i] = latinska["Ε"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ε"]
end
elseif(eta[i]) then
latinska[i] = latinska["Η"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["η"]
end
elseif(jota[i]) then
latinska[i] = latinska["Ι"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ι"]
end
elseif(omikron[i]) then
latinska[i] = latinska["Ο"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["Ρ"]
if(spiritus_asper[i]) then
latinska[i] = latinska[i].."h"
end
elseif(ypsilon[i]) then
latinska[i] = latinska["Υ"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["υ"]
end
elseif(omega[i]) then
latinska[i] = latinska["Ω"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ω"]
end
end
end
for i,v in pairs(gemener) do
if(alfa[i]) then
if (akut_accent[i]) then
latinska[i] = "á"
else
latinska[i] = latinska["α"]
end
elseif(epsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "é"
else
latinska[i] = latinska["ε"]
end
elseif(eta[i]) then
if (akut_accent[i]) then
latinska[i] = "ḗ"
else
latinska[i] = latinska["η"]
end
elseif(jota[i]) then
if (akut_accent[i]) then
latinska[i] = "í"
else
latinska[i] = latinska["ι"]
end
elseif(omikron[i]) then
if (akut_accent[i]) then
latinska[i] = "ó"
else
latinska[i] = latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["ρ"]
elseif(ypsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "ý"
else
latinska[i] = latinska["υ"]
end
elseif(omega[i]) then
if (akut_accent[i]) then
latinska[i] = "ṓ"
else
latinska[i] = latinska["ω"]
end
end
if(spiritus_asper[i]) then
if(rho[i]) then
latinska[i] = latinska[i].."h"
else
latinska[i] = "h"..latinska[i]
end
end
end
-- Fem köfunktioner
function enqueue(q, val)
q.last = q.last + 1
q.data[q.last] = val
end
function dequeue(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
q.data[q.first] = nil
q.first = q.first + 1
end
return rval
end
function peekonce(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
end
return rval
end
function peektwice(q)
local rval
if (q.first+1 > q.last) then
rval = -1
else
rval = q.data[q.first+1]
end
return rval
end
function peeklast(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.last]
end
return rval
end
-- Själva transkriberingsfunktionen för forngrekiska
function transkribera_grc(text)
-- Två köer: en för grekiska bokstäver och en för latinska bokstäver
indata = {}
indata.first = 0
indata.last = -1
indata.data = {}
utdata = {}
utdata.first = 0
utdata.last = -1
utdata.data = {}
-- en separat kö att returnera på slutet
local returndata = {}
for c in string.gmatch(text, ".[\128-\191]*") do
enqueue(indata, c)
end
repeat
local x = dequeue(indata)
local y = peekonce(indata)
local z = peektwice(indata)
local u = peeklast(utdata)
if (latinska[x] == nil) then -- icke-grekiskt tecken
enqueue(utdata, x)
-- diverse undantag, startar med "spiritus asper" som del av en diftong
elseif (((u == -1) or string.match(u," ")) and spiritus_asper[y]) then
enqueue(utdata, string.sub(latinska[y],1,1)) -- versalt "H" eller gement "h"
if (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, latinska[x])
end
if ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, string.sub(latinska[y],2))
end
dequeue(indata)
-- sen diftongerna "αυ", "ευ", "ηυ", "ου", "ωυ"
elseif ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
enqueue(utdata, latinska[x])
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
dequeue(indata)
-- sen diftongen "υι"
elseif (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x] and spiritus_asper[x]) then
enqueue(utdata, "hú")
elseif(akut_accent[x]) then
enqueue(utdata, "ú")
elseif(spiritus_asper[x]) then
enqueue(utdata, "hu")
else
enqueue(utdata, "u")
end
enqueue(utdata, latinska[y])
dequeue(indata)
-- sen, när "spiritus asper" hanteras med modifierare
elseif (string.match(y,"̔")) then
enqueue(utdata, "h") -- TODO!!! Kan detta vara versalt "H"? Diftonger?
enqueue(utdata, latinska[x])
dequeue(indata)
else
enqueue(utdata, latinska[x])
end
until (indata.first > indata.last)
repeat
local x = dequeue(utdata)
table.insert(returndata,x)
until (utdata.first > utdata.last)
return returndata
end
function export.transkribera( argument )
local text = argument.args["text"]
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
function export.tr( argument )
local text = argument
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
return export
94v44eqda9simwy8m4emmlctbcjd1k3
3703213
3703210
2022-08-18T12:22:24Z
Gabbe
1153
kommenterar bort funktionen som anropar modulen direkt från en mall
Scribunto
text/plain
-- Denna modul används för att transkribera antik grekiska till svenska.
--
-- För att transkribera modern grekiska kan ett liknande system användas.
-- Det hanteras dock av särskilda moduler. Se:
--
-- [TODO]
--
--
-- Denna modul strävar efter att följa det system som används av
-- "Library of Congress". Det finns i skrivande stund beskrivet här:
--
-- https://www.loc.gov/catdir/cpso/romanization/greek.pdf
--
-- Några avsteg har gjorts för att bättre reflektera hur orden vanligen
-- transkriberas till svenska. Exempelvis förvandlas φρόνησις till "frónēsis",
-- inte "phronēsis".
--
-- Notera att det finns andra sätt för att transkribera forngrekiska.
-- Notera även att denna modul inte (ännu) hanterar skriftsystem som Linear B
-- eller den cypriska stavelseskriften.
--
-- Lägg också märke till att denna version av modulen hanterar de flesta
-- diakriter på ett ganska styvmoderligt sätt. Framtida versioner kan
-- (och bör) göra detta mer nyanserat.
--
--
-- Denna modul används av följande mall:
-- {{tr}}
--
-- Kända brister
-- * Bokstavskombinationer av typen "γγ", "γκ", "γξ", "γχ"
--
-- Modulen är författad av (och underhålls av) [[Användare:Gabbe]]
local export = {}
latinska = {}
-- börja med de vanliga bokstäverna
latinska["Α"]="A"; latinska["α"]="a"
latinska["Β"]="B"; latinska["β"]="b"
latinska["Γ"]="G"; latinska["γ"]="g"
latinska["Δ"]="D"; latinska["δ"]="d"
latinska["Ε"]="E"; latinska["ε"]="e"
latinska["Ζ"]="Z"; latinska["ζ"]="z"
latinska["Η"]="Ē"; latinska["η"]="ē"
latinska["Θ"]="Th"; latinska["θ"]="th"
latinska["Ι"]="I"; latinska["ι"]="i"
latinska["Κ"]="K"; latinska["κ"]="k"
latinska["Λ"]="L"; latinska["λ"]="l"
latinska["Μ"]="M"; latinska["μ"]="m"
latinska["Ν"]="N"; latinska["ν"]="n"
latinska["Ξ"]="X"; latinska["ξ"]="x"
latinska["Ο"]="O"; latinska["ο"]="o"
latinska["Π"]="P"; latinska["π"]="p"
latinska["Ρ"]="R"; latinska["ρ"]="r"
latinska["Σ"]="S"; latinska["σ"]="s"; latinska["ς"]="s"
latinska["Τ"]="T"; latinska["τ"]="t"
latinska["Υ"]="Y"; latinska["υ"]="y"
latinska["Φ"]="F"; latinska["φ"]="f"
latinska["Χ"]="Ch"; latinska["χ"]="ch"
latinska["Ψ"]="Ps"; latinska["ψ"]="ps"
latinska["Ω"]="Ō"; latinska["ω"]="ō"
-- särvariant av sigma
latinska["Ϲ"]="S"; latinska["ϲ"]="s"
-- två arkaiska bokstäver
latinska["Ϝ"]="W"; latinska["ϝ"]="w"
latinska["Ϙ"]="Ḳ"; latinska["ϙ"]="ḳ"
-- sen en separat tabell för att hålla reda på vilka som har "spiritus asper":
spiritus_asper = {
["Ἁ"] = true, ["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true, ["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true, ["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true, ["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true,
["ἁ"] = true, ["ἑ"] = true, ["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true, ["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true,
["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true,
["ἃ"] = true, ["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true, ["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true,
["ἇ"] = true, ["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true, ["ᾗ"] = true, ["ᾧ"] = true,
}
-- sen en separat tabell för versalerna:
versaler = {
["Α"] = true, ["Ε"] = true, ["Η"] = true, ["Ι"] = true, ["Ο"] = true,
["Υ"] = true, ["Ω"] = true, ["ᾼ"] = true, ["ῌ"] = true, ["ῼ"] = true,
["Ρ"] = true, ["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true,
["Ό"] = true, ["Ύ"] = true, ["Ώ"] = true, ["Ὰ"] = true, ["Ὲ"] = true,
["Ὴ"] = true, ["Ὶ"] = true, ["Ὸ"] = true, ["Ὺ"] = true, ["Ὼ"] = true,
["Ἀ"] = true, ["Ἐ"] = true, ["Ἠ"] = true, ["Ἰ"] = true, ["Ὀ"] = true,
["Ὠ"] = true, ["ᾈ"] = true, ["ᾘ"] = true, ["ᾨ"] = true, ["Ἄ"] = true,
["Ἔ"] = true, ["Ἤ"] = true, ["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true,
["ᾌ"] = true, ["ᾜ"] = true, ["ᾬ"] = true, ["Ἂ"] = true, ["Ἒ"] = true,
["Ἢ"] = true, ["Ἲ"] = true, ["Ὂ"] = true, ["Ὢ"] = true, ["ᾊ"] = true,
["ᾚ"] = true, ["ᾪ"] = true, ["Ἆ"] = true, ["Ἦ"] = true, ["Ἶ"] = true,
["Ὦ"] = true, ["ᾎ"] = true, ["ᾞ"] = true, ["ᾮ"] = true, ["Ἁ"] = true,
["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true,
["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true,
["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true,
["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true,
["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true, ["Ᾱ"] = true, ["Ῑ"] = true,
["Ῡ"] = true, ["Ᾰ"] = true, ["Ῐ"] = true, ["Ῠ"] = true,
}
-- sen en för gemenerna:
gemener = {
["α"] = true, ["ε"] = true, ["η"] = true, ["ι"] = true, ["ο"] = true,
["υ"] = true, ["ω"] = true, ["ᾳ"] = true, ["ῃ"] = true, ["ῳ"] = true,
["ρ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ὰ"] = true, ["ὲ"] = true, ["ὴ"] = true, ["ὶ"] = true,
["ὸ"] = true, ["ὺ"] = true, ["ὼ"] = true, ["ᾲ"] = true, ["ῂ"] = true,
["ῲ"] = true, ["ᾶ"] = true, ["ῆ"] = true, ["ῖ"] = true, ["ῦ"] = true,
["ῶ"] = true, ["ᾷ"] = true, ["ῇ"] = true, ["ῷ"] = true, ["ἀ"] = true,
["ἐ"] = true, ["ἠ"] = true, ["ἰ"] = true, ["ὀ"] = true, ["ὐ"] = true,
["ὠ"] = true, ["ᾀ"] = true, ["ᾐ"] = true, ["ᾠ"] = true, ["ῤ"] = true,
["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true, ["ὄ"] = true,
["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true, ["ᾤ"] = true,
["ἂ"] = true, ["ἒ"] = true, ["ἢ"] = true, ["ἲ"] = true, ["ὂ"] = true,
["ὒ"] = true, ["ὢ"] = true, ["ᾂ"] = true, ["ᾒ"] = true, ["ᾢ"] = true,
["ἆ"] = true, ["ἦ"] = true, ["ἶ"] = true, ["ὖ"] = true, ["ὦ"] = true,
["ᾆ"] = true, ["ᾖ"] = true, ["ᾦ"] = true, ["ἁ"] = true, ["ἑ"] = true,
["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true,
["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true, ["ἅ"] = true,
["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true,
["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true, ["ἃ"] = true,
["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true,
["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true, ["ἇ"] = true,
["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true,
["ᾗ"] = true, ["ᾧ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
["ᾱ"] = true, ["ῑ"] = true, ["ῡ"] = true, ["ᾰ"] = true, ["ῐ"] = true,
["ῠ"] = true,
}
-- sen en tabell för de med akut accent:
akut_accent = {
["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true, ["Ό"] = true,
["Ύ"] = true, ["Ώ"] = true, ["Ἄ"] = true, ["Ἔ"] = true, ["Ἤ"] = true,
["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true, ["ᾌ"] = true, ["ᾜ"] = true,
["ᾬ"] = true, ["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true,
["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true,
["ᾭ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true,
["ὄ"] = true, ["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true,
["ᾤ"] = true, ["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true,
["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true,
["ᾥ"] = true, ["ΐ"] = true, ["ΰ"] = true,
}
-- sen några separata tabeller för att hålla reda på vilken slags bokstav det är
alfa = {
["α"] = true, ["𝛂"] = true, ["𝛼"] = true, ["𝜶"] = true, ["𝝰"] = true,
["𝞪"] = true, ["Α"] = true, ["𝚨"] = true, ["𝛢"] = true, ["𝜜"] = true,
["𝝖"] = true, ["𝞐"] = true, ["ἀ"] = true, ["Ἀ"] = true, ["ἄ"] = true,
["Ἄ"] = true, ["ᾄ"] = true, ["ᾌ"] = true, ["ἂ"] = true, ["Ἂ"] = true,
["ᾂ"] = true, ["ᾊ"] = true, ["ἆ"] = true, ["Ἆ"] = true, ["ᾆ"] = true,
["ᾎ"] = true, ["ᾀ"] = true, ["ᾈ"] = true, ["ἁ"] = true, ["Ἁ"] = true,
["ἅ"] = true, ["Ἅ"] = true, ["ᾅ"] = true, ["ᾍ"] = true, ["ἃ"] = true,
["Ἃ"] = true, ["ᾃ"] = true, ["ᾋ"] = true, ["ἇ"] = true, ["Ἇ"] = true,
["ᾇ"] = true, ["ᾏ"] = true, ["ᾁ"] = true, ["ᾉ"] = true, ["ά"] = true,
["ά"] = true, ["Ά"] = true, ["Ά"] = true, ["ᾴ"] = true, ["ὰ"] = true,
["Ὰ"] = true, ["ᾲ"] = true, ["ᾰ"] = true, ["Ᾰ"] = true, ["ᾶ"] = true,
["ᾷ"] = true, ["ᾱ"] = true, ["Ᾱ"] = true, ["ᾳ"] = true, ["ᾼ"] = true,
}
epsilon = {
["ε"] = true, ["ϵ"] = true, ["𝛆"] = true, ["𝛜"] = true, ["𝜀"] = true,
["𝜖"] = true, ["𝜺"] = true, ["𝝐"] = true, ["𝝴"] = true, ["𝞊"] = true,
["𝞮"] = true, ["𝟄"] = true, ["Ε"] = true, ["𝚬"] = true, ["𝛦"] = true,
["𝜠"] = true, ["𝝚"] = true, ["𝞔"] = true, ["ἐ"] = true, ["Ἐ"] = true,
["ἔ"] = true, ["Ἔ"] = true, ["ἒ"] = true, ["Ἒ"] = true, ["ἑ"] = true,
["Ἑ"] = true, ["ἕ"] = true, ["Ἕ"] = true, ["ἓ"] = true, ["Ἓ"] = true,
["έ"] = true, ["έ"] = true, ["Έ"] = true, ["Έ"] = true, ["ὲ"] = true,
["Ὲ"] = true,
}
eta = {
["η"] = true, ["𝛈"] = true, ["𝜂"] = true, ["𝜼"] = true, ["𝝶"] = true,
["𝞰"] = true, ["Η"] = true, ["𝚮"] = true, ["𝛨"] = true, ["𝜢"] = true,
["𝝜"] = true, ["𝞖"] = true, ["ἠ"] = true, ["Ἠ"] = true, ["ἤ"] = true,
["Ἤ"] = true, ["ᾔ"] = true, ["ᾜ"] = true, ["ἢ"] = true, ["Ἢ"] = true,
["ᾒ"] = true, ["ᾚ"] = true, ["ἦ"] = true, ["Ἦ"] = true, ["ᾖ"] = true,
["ᾞ"] = true, ["ᾐ"] = true, ["ᾘ"] = true, ["ἡ"] = true, ["Ἡ"] = true,
["ἥ"] = true, ["Ἥ"] = true, ["ᾕ"] = true, ["ᾝ"] = true, ["ἣ"] = true,
["Ἣ"] = true, ["ᾓ"] = true, ["ᾛ"] = true, ["ἧ"] = true, ["Ἧ"] = true,
["ᾗ"] = true, ["ᾟ"] = true, ["ᾑ"] = true, ["ᾙ"] = true, ["ή"] = true,
["ή"] = true, ["Ή"] = true, ["Ή"] = true, ["ῄ"] = true, ["ὴ"] = true,
["Ὴ"] = true, ["ῂ"] = true, ["ῆ"] = true, ["ῇ"] = true, ["ῃ"] = true,
["ῌ"] = true,
}
jota = {
["ι"] = true, ["𝛊"] = true, ["𝜄"] = true, ["𝜾"] = true, ["𝝸"] = true,
["𝞲"] = true, ["Ι"] = true, ["𝚰"] = true, ["𝛪"] = true, ["𝜤"] = true,
["𝝞"] = true, ["𝞘"] = true, ["ἰ"] = true, ["Ἰ"] = true, ["ἴ"] = true,
["Ἴ"] = true, ["ἲ"] = true, ["Ἲ"] = true, ["ἶ"] = true, ["Ἶ"] = true,
["ἱ"] = true, ["Ἱ"] = true, ["ἵ"] = true, ["Ἵ"] = true, ["ἳ"] = true,
["Ἳ"] = true, ["ἷ"] = true, ["Ἷ"] = true, ["ί"] = true, ["ί"] = true,
["Ί"] = true, ["Ί"] = true, ["ὶ"] = true, ["Ὶ"] = true, ["ῐ"] = true,
["Ῐ"] = true, ["ῖ"] = true, ["ϊ"] = true, ["Ϊ"] = true, ["ΐ"] = true,
["ΐ"] = true, ["ῒ"] = true, ["ῗ"] = true, ["ῑ"] = true, ["Ῑ"] = true,
["ι"] = true, ["ͺ"] = true,
}
omikron = {
["ο"] = true, ["𝛐"] = true, ["𝜊"] = true, ["𝝄"] = true, ["𝝾"] = true,
["𝞸"] = true, ["Ο"] = true, ["𝚶"] = true, ["𝛰"] = true, ["𝜪"] = true,
["𝝤"] = true, ["𝞞"] = true, ["ὀ"] = true, ["Ὀ"] = true, ["ὄ"] = true,
["Ὄ"] = true, ["ὂ"] = true, ["Ὂ"] = true, ["ὁ"] = true, ["Ὁ"] = true,
["ὅ"] = true, ["Ὅ"] = true, ["ὃ"] = true, ["Ὃ"] = true, ["ό"] = true,
["ό"] = true, ["Ό"] = true, ["Ό"] = true, ["ὸ"] = true, ["Ὸ"] = true,
}
rho = {
["ρ"] = true, ["ϱ"] = true, ["𝛒"] = true, ["𝛠"] = true, ["𝜌"] = true,
["𝜚"] = true, ["𝝆"] = true, ["𝝔"] = true, ["𝞀"] = true, ["𝞎"] = true,
["𝞺"] = true, ["𝟈"] = true, ["Ρ"] = true, ["𝚸"] = true, ["𝛲"] = true,
["𝜬"] = true, ["𝝦"] = true, ["𝞠"] = true, ["ᵨ"] = true, ["ῤ"] = true,
["ῥ"] = true, ["Ῥ"] = true, ["ᴩ"] = true, ["ϼ"] = true,
}
ypsilon = {
["υ"] = true, ["𝛖"] = true, ["𝜐"] = true, ["𝝊"] = true, ["𝞄"] = true,
["𝞾"] = true, ["Υ"] = true, ["ϒ"] = true, ["𝚼"] = true, ["𝛶"] = true,
["𝜰"] = true, ["𝝪"] = true, ["𝞤"] = true, ["ὐ"] = true, ["ὔ"] = true,
["ὒ"] = true, ["ὖ"] = true, ["ὑ"] = true, ["Ὑ"] = true, ["ὕ"] = true,
["Ὕ"] = true, ["ὓ"] = true, ["Ὓ"] = true, ["ὗ"] = true, ["Ὗ"] = true,
["ύ"] = true, ["ύ"] = true, ["Ύ"] = true, ["Ύ"] = true, ["ϓ"] = true,
["ὺ"] = true, ["Ὺ"] = true, ["ῠ"] = true, ["Ῠ"] = true, ["ῦ"] = true,
["ϋ"] = true, ["Ϋ"] = true, ["ϔ"] = true, ["ΰ"] = true, ["ΰ"] = true,
["ῢ"] = true, ["ῧ"] = true, ["ῡ"] = true, ["Ῡ"] = true,
}
omega = {
["ω"] = true, ["𝛚"] = true, ["𝜔"] = true, ["𝝎"] = true, ["𝞈"] = true,
["𝟂"] = true, ["Ω"] = true, ["𝛀"] = true, ["𝛺"] = true, ["𝜴"] = true,
["𝝮"] = true, ["𝞨"] = true, ["ὠ"] = true, ["Ὠ"] = true, ["ὤ"] = true,
["Ὤ"] = true, ["ᾤ"] = true, ["ᾬ"] = true, ["ὢ"] = true, ["Ὢ"] = true,
["ᾢ"] = true, ["ᾪ"] = true, ["ὦ"] = true, ["Ὦ"] = true, ["ᾦ"] = true,
["ᾮ"] = true, ["ᾠ"] = true, ["ᾨ"] = true, ["ὡ"] = true, ["Ὡ"] = true,
["ὥ"] = true, ["Ὥ"] = true, ["ᾥ"] = true, ["ᾭ"] = true, ["ὣ"] = true,
["Ὣ"] = true, ["ᾣ"] = true, ["ᾫ"] = true, ["ὧ"] = true, ["Ὧ"] = true,
["ᾧ"] = true, ["ᾯ"] = true, ["ᾡ"] = true, ["ᾩ"] = true, ["ώ"] = true,
["ώ"] = true, ["Ώ"] = true, ["Ώ"] = true, ["ῴ"] = true, ["ὼ"] = true,
["Ὼ"] = true, ["ῲ"] = true, ["ῶ"] = true, ["ῷ"] = true, ["ῳ"] = true,
["ῼ"] = true, ["ꭥ"] = true, ["Ω"] = true, ["㏀"] = true, ["㏁"] = true,
}
-- de som har två prickar ovanför vokalen
hiatus = {
["Ϊ"] = true, ["Ϋ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
}
-- generera tabellen för de övriga bokstäverna med diverse diakritiska tecken
for i,v in pairs(versaler) do
if(alfa[i]) then
latinska[i] = latinska["Α"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["α"]
end
elseif(epsilon[i]) then
latinska[i] = latinska["Ε"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ε"]
end
elseif(eta[i]) then
latinska[i] = latinska["Η"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["η"]
end
elseif(jota[i]) then
latinska[i] = latinska["Ι"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ι"]
end
elseif(omikron[i]) then
latinska[i] = latinska["Ο"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["Ρ"]
if(spiritus_asper[i]) then
latinska[i] = latinska[i].."h"
end
elseif(ypsilon[i]) then
latinska[i] = latinska["Υ"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["υ"]
end
elseif(omega[i]) then
latinska[i] = latinska["Ω"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ω"]
end
end
end
for i,v in pairs(gemener) do
if(alfa[i]) then
if (akut_accent[i]) then
latinska[i] = "á"
else
latinska[i] = latinska["α"]
end
elseif(epsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "é"
else
latinska[i] = latinska["ε"]
end
elseif(eta[i]) then
if (akut_accent[i]) then
latinska[i] = "ḗ"
else
latinska[i] = latinska["η"]
end
elseif(jota[i]) then
if (akut_accent[i]) then
latinska[i] = "í"
else
latinska[i] = latinska["ι"]
end
elseif(omikron[i]) then
if (akut_accent[i]) then
latinska[i] = "ó"
else
latinska[i] = latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["ρ"]
elseif(ypsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "ý"
else
latinska[i] = latinska["υ"]
end
elseif(omega[i]) then
if (akut_accent[i]) then
latinska[i] = "ṓ"
else
latinska[i] = latinska["ω"]
end
end
if(spiritus_asper[i]) then
if(rho[i]) then
latinska[i] = latinska[i].."h"
else
latinska[i] = "h"..latinska[i]
end
end
end
-- Fem köfunktioner
function enqueue(q, val)
q.last = q.last + 1
q.data[q.last] = val
end
function dequeue(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
q.data[q.first] = nil
q.first = q.first + 1
end
return rval
end
function peekonce(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
end
return rval
end
function peektwice(q)
local rval
if (q.first+1 > q.last) then
rval = -1
else
rval = q.data[q.first+1]
end
return rval
end
function peeklast(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.last]
end
return rval
end
-- Själva transkriberingsfunktionen för forngrekiska
function transkribera_grc(text)
-- Två köer: en för grekiska bokstäver och en för latinska bokstäver
indata = {}
indata.first = 0
indata.last = -1
indata.data = {}
utdata = {}
utdata.first = 0
utdata.last = -1
utdata.data = {}
-- en separat kö att returnera på slutet
local returndata = {}
for c in string.gmatch(text, ".[\128-\191]*") do
enqueue(indata, c)
end
repeat
local x = dequeue(indata)
local y = peekonce(indata)
local z = peektwice(indata)
local u = peeklast(utdata)
if (latinska[x] == nil) then -- icke-grekiskt tecken
enqueue(utdata, x)
-- diverse undantag, startar med "spiritus asper" som del av en diftong
elseif (((u == -1) or string.match(u," ")) and spiritus_asper[y]) then
enqueue(utdata, string.sub(latinska[y],1,1)) -- versalt "H" eller gement "h"
if (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, latinska[x])
end
if ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, string.sub(latinska[y],2))
end
dequeue(indata)
-- sen diftongerna "αυ", "ευ", "ηυ", "ου", "ωυ"
elseif ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
enqueue(utdata, latinska[x])
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
dequeue(indata)
-- sen diftongen "υι"
elseif (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x] and spiritus_asper[x]) then
enqueue(utdata, "hú")
elseif(akut_accent[x]) then
enqueue(utdata, "ú")
elseif(spiritus_asper[x]) then
enqueue(utdata, "hu")
else
enqueue(utdata, "u")
end
enqueue(utdata, latinska[y])
dequeue(indata)
-- sen, när "spiritus asper" hanteras med modifierare
elseif (string.match(y,"̔")) then
enqueue(utdata, "h") -- TODO!!! Kan detta vara versalt "H"? Diftonger?
enqueue(utdata, latinska[x])
dequeue(indata)
else
enqueue(utdata, latinska[x])
end
until (indata.first > indata.last)
repeat
local x = dequeue(utdata)
table.insert(returndata,x)
until (utdata.first > utdata.last)
return returndata
end
--[[
function export.transkribera( argument )
local text = argument.args["text"]
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
--]]
function export.tr( argument )
local text = argument
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
return export
jrmxm3qsogrfnc44bij1f8whx7jxwpd
3703220
3703213
2022-08-18T12:59:57Z
Gabbe
1153
la till hantering av bokstavsföljden "gamma + gamma"
Scribunto
text/plain
-- Denna modul används för att transkribera antik grekiska till svenska.
--
-- För att transkribera modern grekiska kan ett liknande system användas.
-- Det hanteras dock av särskilda moduler. Se:
--
-- [TODO]
--
--
-- Denna modul strävar efter att följa det system som används av
-- "Library of Congress". Det finns i skrivande stund beskrivet här:
--
-- https://www.loc.gov/catdir/cpso/romanization/greek.pdf
--
-- Några avsteg har gjorts för att bättre reflektera hur orden vanligen
-- transkriberas till svenska. Exempelvis förvandlas φρόνησις till "frónēsis",
-- inte "phronēsis".
--
-- Notera att det finns andra sätt för att transkribera forngrekiska.
-- Notera även att denna modul inte (ännu) hanterar skriftsystem som Linear B
-- eller den cypriska stavelseskriften.
--
-- Lägg också märke till att denna version av modulen hanterar de flesta
-- diakriter på ett ganska styvmoderligt sätt. Framtida versioner kan
-- (och bör) göra detta mer nyanserat.
--
--
-- Denna modul används av följande mall:
-- {{tr}}
--
-- Kända brister
-- * Bokstavskombinationer av typen "γκ", "γξ", "γχ"
--
-- Modulen är författad av (och underhålls av) [[Användare:Gabbe]]
local export = {}
latinska = {}
-- börja med de vanliga bokstäverna
latinska["Α"]="A"; latinska["α"]="a"
latinska["Β"]="B"; latinska["β"]="b"
latinska["Γ"]="G"; latinska["γ"]="g"
latinska["Δ"]="D"; latinska["δ"]="d"
latinska["Ε"]="E"; latinska["ε"]="e"
latinska["Ζ"]="Z"; latinska["ζ"]="z"
latinska["Η"]="Ē"; latinska["η"]="ē"
latinska["Θ"]="Th"; latinska["θ"]="th"
latinska["Ι"]="I"; latinska["ι"]="i"
latinska["Κ"]="K"; latinska["κ"]="k"
latinska["Λ"]="L"; latinska["λ"]="l"
latinska["Μ"]="M"; latinska["μ"]="m"
latinska["Ν"]="N"; latinska["ν"]="n"
latinska["Ξ"]="X"; latinska["ξ"]="x"
latinska["Ο"]="O"; latinska["ο"]="o"
latinska["Π"]="P"; latinska["π"]="p"
latinska["Ρ"]="R"; latinska["ρ"]="r"
latinska["Σ"]="S"; latinska["σ"]="s"; latinska["ς"]="s"
latinska["Τ"]="T"; latinska["τ"]="t"
latinska["Υ"]="Y"; latinska["υ"]="y"
latinska["Φ"]="F"; latinska["φ"]="f"
latinska["Χ"]="Ch"; latinska["χ"]="ch"
latinska["Ψ"]="Ps"; latinska["ψ"]="ps"
latinska["Ω"]="Ō"; latinska["ω"]="ō"
-- särvariant av sigma
latinska["Ϲ"]="S"; latinska["ϲ"]="s"
-- två arkaiska bokstäver
latinska["Ϝ"]="W"; latinska["ϝ"]="w"
latinska["Ϙ"]="Ḳ"; latinska["ϙ"]="ḳ"
-- sen en separat tabell för att hålla reda på vilka som har "spiritus asper":
spiritus_asper = {
["Ἁ"] = true, ["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true, ["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true, ["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true, ["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true,
["ἁ"] = true, ["ἑ"] = true, ["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true, ["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true,
["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true,
["ἃ"] = true, ["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true, ["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true,
["ἇ"] = true, ["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true, ["ᾗ"] = true, ["ᾧ"] = true,
}
-- sen en separat tabell för versalerna:
versaler = {
["Α"] = true, ["Ε"] = true, ["Η"] = true, ["Ι"] = true, ["Ο"] = true,
["Υ"] = true, ["Ω"] = true, ["ᾼ"] = true, ["ῌ"] = true, ["ῼ"] = true,
["Ρ"] = true, ["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true,
["Ό"] = true, ["Ύ"] = true, ["Ώ"] = true, ["Ὰ"] = true, ["Ὲ"] = true,
["Ὴ"] = true, ["Ὶ"] = true, ["Ὸ"] = true, ["Ὺ"] = true, ["Ὼ"] = true,
["Ἀ"] = true, ["Ἐ"] = true, ["Ἠ"] = true, ["Ἰ"] = true, ["Ὀ"] = true,
["Ὠ"] = true, ["ᾈ"] = true, ["ᾘ"] = true, ["ᾨ"] = true, ["Ἄ"] = true,
["Ἔ"] = true, ["Ἤ"] = true, ["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true,
["ᾌ"] = true, ["ᾜ"] = true, ["ᾬ"] = true, ["Ἂ"] = true, ["Ἒ"] = true,
["Ἢ"] = true, ["Ἲ"] = true, ["Ὂ"] = true, ["Ὢ"] = true, ["ᾊ"] = true,
["ᾚ"] = true, ["ᾪ"] = true, ["Ἆ"] = true, ["Ἦ"] = true, ["Ἶ"] = true,
["Ὦ"] = true, ["ᾎ"] = true, ["ᾞ"] = true, ["ᾮ"] = true, ["Ἁ"] = true,
["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true,
["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true,
["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true,
["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true,
["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true, ["Ᾱ"] = true, ["Ῑ"] = true,
["Ῡ"] = true, ["Ᾰ"] = true, ["Ῐ"] = true, ["Ῠ"] = true,
}
-- sen en för gemenerna:
gemener = {
["α"] = true, ["ε"] = true, ["η"] = true, ["ι"] = true, ["ο"] = true,
["υ"] = true, ["ω"] = true, ["ᾳ"] = true, ["ῃ"] = true, ["ῳ"] = true,
["ρ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ὰ"] = true, ["ὲ"] = true, ["ὴ"] = true, ["ὶ"] = true,
["ὸ"] = true, ["ὺ"] = true, ["ὼ"] = true, ["ᾲ"] = true, ["ῂ"] = true,
["ῲ"] = true, ["ᾶ"] = true, ["ῆ"] = true, ["ῖ"] = true, ["ῦ"] = true,
["ῶ"] = true, ["ᾷ"] = true, ["ῇ"] = true, ["ῷ"] = true, ["ἀ"] = true,
["ἐ"] = true, ["ἠ"] = true, ["ἰ"] = true, ["ὀ"] = true, ["ὐ"] = true,
["ὠ"] = true, ["ᾀ"] = true, ["ᾐ"] = true, ["ᾠ"] = true, ["ῤ"] = true,
["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true, ["ὄ"] = true,
["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true, ["ᾤ"] = true,
["ἂ"] = true, ["ἒ"] = true, ["ἢ"] = true, ["ἲ"] = true, ["ὂ"] = true,
["ὒ"] = true, ["ὢ"] = true, ["ᾂ"] = true, ["ᾒ"] = true, ["ᾢ"] = true,
["ἆ"] = true, ["ἦ"] = true, ["ἶ"] = true, ["ὖ"] = true, ["ὦ"] = true,
["ᾆ"] = true, ["ᾖ"] = true, ["ᾦ"] = true, ["ἁ"] = true, ["ἑ"] = true,
["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true,
["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true, ["ἅ"] = true,
["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true,
["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true, ["ἃ"] = true,
["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true,
["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true, ["ἇ"] = true,
["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true,
["ᾗ"] = true, ["ᾧ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
["ᾱ"] = true, ["ῑ"] = true, ["ῡ"] = true, ["ᾰ"] = true, ["ῐ"] = true,
["ῠ"] = true,
}
-- sen en tabell för de med akut accent:
akut_accent = {
["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true, ["Ό"] = true,
["Ύ"] = true, ["Ώ"] = true, ["Ἄ"] = true, ["Ἔ"] = true, ["Ἤ"] = true,
["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true, ["ᾌ"] = true, ["ᾜ"] = true,
["ᾬ"] = true, ["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true,
["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true,
["ᾭ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true,
["ὄ"] = true, ["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true,
["ᾤ"] = true, ["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true,
["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true,
["ᾥ"] = true, ["ΐ"] = true, ["ΰ"] = true,
}
-- sen några separata tabeller för att hålla reda på vilken slags bokstav det är
alfa = {
["α"] = true, ["𝛂"] = true, ["𝛼"] = true, ["𝜶"] = true, ["𝝰"] = true,
["𝞪"] = true, ["Α"] = true, ["𝚨"] = true, ["𝛢"] = true, ["𝜜"] = true,
["𝝖"] = true, ["𝞐"] = true, ["ἀ"] = true, ["Ἀ"] = true, ["ἄ"] = true,
["Ἄ"] = true, ["ᾄ"] = true, ["ᾌ"] = true, ["ἂ"] = true, ["Ἂ"] = true,
["ᾂ"] = true, ["ᾊ"] = true, ["ἆ"] = true, ["Ἆ"] = true, ["ᾆ"] = true,
["ᾎ"] = true, ["ᾀ"] = true, ["ᾈ"] = true, ["ἁ"] = true, ["Ἁ"] = true,
["ἅ"] = true, ["Ἅ"] = true, ["ᾅ"] = true, ["ᾍ"] = true, ["ἃ"] = true,
["Ἃ"] = true, ["ᾃ"] = true, ["ᾋ"] = true, ["ἇ"] = true, ["Ἇ"] = true,
["ᾇ"] = true, ["ᾏ"] = true, ["ᾁ"] = true, ["ᾉ"] = true, ["ά"] = true,
["ά"] = true, ["Ά"] = true, ["Ά"] = true, ["ᾴ"] = true, ["ὰ"] = true,
["Ὰ"] = true, ["ᾲ"] = true, ["ᾰ"] = true, ["Ᾰ"] = true, ["ᾶ"] = true,
["ᾷ"] = true, ["ᾱ"] = true, ["Ᾱ"] = true, ["ᾳ"] = true, ["ᾼ"] = true,
}
gamma = {
["γ"] = true, ["𝛄"] = true, ["𝛾"] = true, ["𝜸"] = true, ["𝝲"] = true,
["𝞬"] = true, ["Γ"] = true, ["𝚪"] = true, ["𝛤"] = true, ["𝜞"] = true,
["𝝘"] = true, ["𝞒"] = true, ["ℽ"] = true, ["ℾ"] = true, ["ᵞ"] = true,
["ᵧ"] = true, ["ᴦ"] = true,
}
epsilon = {
["ε"] = true, ["ϵ"] = true, ["𝛆"] = true, ["𝛜"] = true, ["𝜀"] = true,
["𝜖"] = true, ["𝜺"] = true, ["𝝐"] = true, ["𝝴"] = true, ["𝞊"] = true,
["𝞮"] = true, ["𝟄"] = true, ["Ε"] = true, ["𝚬"] = true, ["𝛦"] = true,
["𝜠"] = true, ["𝝚"] = true, ["𝞔"] = true, ["ἐ"] = true, ["Ἐ"] = true,
["ἔ"] = true, ["Ἔ"] = true, ["ἒ"] = true, ["Ἒ"] = true, ["ἑ"] = true,
["Ἑ"] = true, ["ἕ"] = true, ["Ἕ"] = true, ["ἓ"] = true, ["Ἓ"] = true,
["έ"] = true, ["έ"] = true, ["Έ"] = true, ["Έ"] = true, ["ὲ"] = true,
["Ὲ"] = true,
}
eta = {
["η"] = true, ["𝛈"] = true, ["𝜂"] = true, ["𝜼"] = true, ["𝝶"] = true,
["𝞰"] = true, ["Η"] = true, ["𝚮"] = true, ["𝛨"] = true, ["𝜢"] = true,
["𝝜"] = true, ["𝞖"] = true, ["ἠ"] = true, ["Ἠ"] = true, ["ἤ"] = true,
["Ἤ"] = true, ["ᾔ"] = true, ["ᾜ"] = true, ["ἢ"] = true, ["Ἢ"] = true,
["ᾒ"] = true, ["ᾚ"] = true, ["ἦ"] = true, ["Ἦ"] = true, ["ᾖ"] = true,
["ᾞ"] = true, ["ᾐ"] = true, ["ᾘ"] = true, ["ἡ"] = true, ["Ἡ"] = true,
["ἥ"] = true, ["Ἥ"] = true, ["ᾕ"] = true, ["ᾝ"] = true, ["ἣ"] = true,
["Ἣ"] = true, ["ᾓ"] = true, ["ᾛ"] = true, ["ἧ"] = true, ["Ἧ"] = true,
["ᾗ"] = true, ["ᾟ"] = true, ["ᾑ"] = true, ["ᾙ"] = true, ["ή"] = true,
["ή"] = true, ["Ή"] = true, ["Ή"] = true, ["ῄ"] = true, ["ὴ"] = true,
["Ὴ"] = true, ["ῂ"] = true, ["ῆ"] = true, ["ῇ"] = true, ["ῃ"] = true,
["ῌ"] = true,
}
jota = {
["ι"] = true, ["𝛊"] = true, ["𝜄"] = true, ["𝜾"] = true, ["𝝸"] = true,
["𝞲"] = true, ["Ι"] = true, ["𝚰"] = true, ["𝛪"] = true, ["𝜤"] = true,
["𝝞"] = true, ["𝞘"] = true, ["ἰ"] = true, ["Ἰ"] = true, ["ἴ"] = true,
["Ἴ"] = true, ["ἲ"] = true, ["Ἲ"] = true, ["ἶ"] = true, ["Ἶ"] = true,
["ἱ"] = true, ["Ἱ"] = true, ["ἵ"] = true, ["Ἵ"] = true, ["ἳ"] = true,
["Ἳ"] = true, ["ἷ"] = true, ["Ἷ"] = true, ["ί"] = true, ["ί"] = true,
["Ί"] = true, ["Ί"] = true, ["ὶ"] = true, ["Ὶ"] = true, ["ῐ"] = true,
["Ῐ"] = true, ["ῖ"] = true, ["ϊ"] = true, ["Ϊ"] = true, ["ΐ"] = true,
["ΐ"] = true, ["ῒ"] = true, ["ῗ"] = true, ["ῑ"] = true, ["Ῑ"] = true,
["ι"] = true, ["ͺ"] = true,
}
omikron = {
["ο"] = true, ["𝛐"] = true, ["𝜊"] = true, ["𝝄"] = true, ["𝝾"] = true,
["𝞸"] = true, ["Ο"] = true, ["𝚶"] = true, ["𝛰"] = true, ["𝜪"] = true,
["𝝤"] = true, ["𝞞"] = true, ["ὀ"] = true, ["Ὀ"] = true, ["ὄ"] = true,
["Ὄ"] = true, ["ὂ"] = true, ["Ὂ"] = true, ["ὁ"] = true, ["Ὁ"] = true,
["ὅ"] = true, ["Ὅ"] = true, ["ὃ"] = true, ["Ὃ"] = true, ["ό"] = true,
["ό"] = true, ["Ό"] = true, ["Ό"] = true, ["ὸ"] = true, ["Ὸ"] = true,
}
rho = {
["ρ"] = true, ["ϱ"] = true, ["𝛒"] = true, ["𝛠"] = true, ["𝜌"] = true,
["𝜚"] = true, ["𝝆"] = true, ["𝝔"] = true, ["𝞀"] = true, ["𝞎"] = true,
["𝞺"] = true, ["𝟈"] = true, ["Ρ"] = true, ["𝚸"] = true, ["𝛲"] = true,
["𝜬"] = true, ["𝝦"] = true, ["𝞠"] = true, ["ᵨ"] = true, ["ῤ"] = true,
["ῥ"] = true, ["Ῥ"] = true, ["ᴩ"] = true, ["ϼ"] = true,
}
ypsilon = {
["υ"] = true, ["𝛖"] = true, ["𝜐"] = true, ["𝝊"] = true, ["𝞄"] = true,
["𝞾"] = true, ["Υ"] = true, ["ϒ"] = true, ["𝚼"] = true, ["𝛶"] = true,
["𝜰"] = true, ["𝝪"] = true, ["𝞤"] = true, ["ὐ"] = true, ["ὔ"] = true,
["ὒ"] = true, ["ὖ"] = true, ["ὑ"] = true, ["Ὑ"] = true, ["ὕ"] = true,
["Ὕ"] = true, ["ὓ"] = true, ["Ὓ"] = true, ["ὗ"] = true, ["Ὗ"] = true,
["ύ"] = true, ["ύ"] = true, ["Ύ"] = true, ["Ύ"] = true, ["ϓ"] = true,
["ὺ"] = true, ["Ὺ"] = true, ["ῠ"] = true, ["Ῠ"] = true, ["ῦ"] = true,
["ϋ"] = true, ["Ϋ"] = true, ["ϔ"] = true, ["ΰ"] = true, ["ΰ"] = true,
["ῢ"] = true, ["ῧ"] = true, ["ῡ"] = true, ["Ῡ"] = true,
}
omega = {
["ω"] = true, ["𝛚"] = true, ["𝜔"] = true, ["𝝎"] = true, ["𝞈"] = true,
["𝟂"] = true, ["Ω"] = true, ["𝛀"] = true, ["𝛺"] = true, ["𝜴"] = true,
["𝝮"] = true, ["𝞨"] = true, ["ὠ"] = true, ["Ὠ"] = true, ["ὤ"] = true,
["Ὤ"] = true, ["ᾤ"] = true, ["ᾬ"] = true, ["ὢ"] = true, ["Ὢ"] = true,
["ᾢ"] = true, ["ᾪ"] = true, ["ὦ"] = true, ["Ὦ"] = true, ["ᾦ"] = true,
["ᾮ"] = true, ["ᾠ"] = true, ["ᾨ"] = true, ["ὡ"] = true, ["Ὡ"] = true,
["ὥ"] = true, ["Ὥ"] = true, ["ᾥ"] = true, ["ᾭ"] = true, ["ὣ"] = true,
["Ὣ"] = true, ["ᾣ"] = true, ["ᾫ"] = true, ["ὧ"] = true, ["Ὧ"] = true,
["ᾧ"] = true, ["ᾯ"] = true, ["ᾡ"] = true, ["ᾩ"] = true, ["ώ"] = true,
["ώ"] = true, ["Ώ"] = true, ["Ώ"] = true, ["ῴ"] = true, ["ὼ"] = true,
["Ὼ"] = true, ["ῲ"] = true, ["ῶ"] = true, ["ῷ"] = true, ["ῳ"] = true,
["ῼ"] = true, ["ꭥ"] = true, ["Ω"] = true, ["㏀"] = true, ["㏁"] = true,
}
-- de som har två prickar ovanför vokalen
hiatus = {
["Ϊ"] = true, ["Ϋ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
}
-- generera tabellen för de övriga bokstäverna med diverse diakritiska tecken
for i,v in pairs(versaler) do
if(alfa[i]) then
latinska[i] = latinska["Α"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["α"]
end
elseif(epsilon[i]) then
latinska[i] = latinska["Ε"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ε"]
end
elseif(eta[i]) then
latinska[i] = latinska["Η"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["η"]
end
elseif(jota[i]) then
latinska[i] = latinska["Ι"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ι"]
end
elseif(omikron[i]) then
latinska[i] = latinska["Ο"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["Ρ"]
if(spiritus_asper[i]) then
latinska[i] = latinska[i].."h"
end
elseif(ypsilon[i]) then
latinska[i] = latinska["Υ"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["υ"]
end
elseif(omega[i]) then
latinska[i] = latinska["Ω"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ω"]
end
end
end
for i,v in pairs(gemener) do
if(alfa[i]) then
if (akut_accent[i]) then
latinska[i] = "á"
else
latinska[i] = latinska["α"]
end
elseif(epsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "é"
else
latinska[i] = latinska["ε"]
end
elseif(eta[i]) then
if (akut_accent[i]) then
latinska[i] = "ḗ"
else
latinska[i] = latinska["η"]
end
elseif(jota[i]) then
if (akut_accent[i]) then
latinska[i] = "í"
else
latinska[i] = latinska["ι"]
end
elseif(omikron[i]) then
if (akut_accent[i]) then
latinska[i] = "ó"
else
latinska[i] = latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["ρ"]
elseif(ypsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "ý"
else
latinska[i] = latinska["υ"]
end
elseif(omega[i]) then
if (akut_accent[i]) then
latinska[i] = "ṓ"
else
latinska[i] = latinska["ω"]
end
end
if(spiritus_asper[i]) then
if(rho[i]) then
latinska[i] = latinska[i].."h"
else
latinska[i] = "h"..latinska[i]
end
end
end
-- Fem köfunktioner
function enqueue(q, val)
q.last = q.last + 1
q.data[q.last] = val
end
function dequeue(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
q.data[q.first] = nil
q.first = q.first + 1
end
return rval
end
function peekonce(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
end
return rval
end
function peektwice(q)
local rval
if (q.first+1 > q.last) then
rval = -1
else
rval = q.data[q.first+1]
end
return rval
end
function peeklast(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.last]
end
return rval
end
-- Själva transkriberingsfunktionen för forngrekiska
function transkribera_grc(text)
-- Två köer: en för grekiska bokstäver och en för latinska bokstäver
indata = {}
indata.first = 0
indata.last = -1
indata.data = {}
utdata = {}
utdata.first = 0
utdata.last = -1
utdata.data = {}
-- en separat kö att returnera på slutet
local returndata = {}
for c in string.gmatch(text, ".[\128-\191]*") do
enqueue(indata, c)
end
repeat
local x = dequeue(indata)
local y = peekonce(indata)
local z = peektwice(indata)
local u = peeklast(utdata)
if (latinska[x] == nil) then -- icke-grekiskt tecken
enqueue(utdata, x)
-- diverse undantag, startar med "spiritus asper" som del av en diftong
elseif (((u == -1) or string.match(u," ")) and spiritus_asper[y]) then
enqueue(utdata, string.sub(latinska[y],1,1)) -- versalt "H" eller gement "h"
if (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, latinska[x])
end
if ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, string.sub(latinska[y],2))
end
dequeue(indata)
-- sen diftongerna "αυ", "ευ", "ηυ", "ου", "ωυ"
elseif ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
enqueue(utdata, latinska[x])
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
dequeue(indata)
-- sen diftongen "υι"
elseif (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x] and spiritus_asper[x]) then
enqueue(utdata, "hú")
elseif(akut_accent[x]) then
enqueue(utdata, "ú")
elseif(spiritus_asper[x]) then
enqueue(utdata, "hu")
else
enqueue(utdata, "u")
end
enqueue(utdata, latinska[y])
dequeue(indata)
-- sen bokstavsföljden "γγ"
elseif (gamma[x] and gamma[y]) then
enqueue(utdata,"n")
enqueue(utdata,"g")
dequeue(indata)
-- sen, när "spiritus asper" hanteras med modifierare
elseif (string.match(y,"̔")) then
enqueue(utdata, "h") -- TODO!!! Kan detta vara versalt "H"? Diftonger?
enqueue(utdata, latinska[x])
dequeue(indata)
else
enqueue(utdata, latinska[x])
end
until (indata.first > indata.last)
repeat
local x = dequeue(utdata)
table.insert(returndata,x)
until (utdata.first > utdata.last)
return returndata
end
--[[
function export.transkribera( argument )
local text = argument.args["text"]
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
--]]
function export.tr( argument )
local text = argument
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
return export
2wthjw132injehacoo74c30qgzwl6zm
3703222
3703220
2022-08-18T13:19:26Z
Gabbe
1153
hanterade "γξ"
Scribunto
text/plain
-- Denna modul används för att transkribera antik grekiska till svenska.
--
-- För att transkribera modern grekiska kan ett liknande system användas.
-- Det hanteras dock av särskilda moduler. Se:
--
-- [TODO]
--
--
-- Denna modul strävar efter att följa det system som används av
-- "Library of Congress". Det finns i skrivande stund beskrivet här:
--
-- https://www.loc.gov/catdir/cpso/romanization/greek.pdf
--
-- Några avsteg har gjorts för att bättre reflektera hur orden vanligen
-- transkriberas till svenska. Exempelvis förvandlas φρόνησις till "frónēsis",
-- inte "phronēsis".
--
-- Notera att det finns andra sätt för att transkribera forngrekiska.
-- Notera även att denna modul inte (ännu) hanterar skriftsystem som Linear B
-- eller den cypriska stavelseskriften.
--
-- Lägg också märke till att denna version av modulen hanterar de flesta
-- diakriter på ett ganska styvmoderligt sätt. Framtida versioner kan
-- (och bör) göra detta mer nyanserat.
--
--
-- Denna modul används av följande mall:
-- {{tr}}
--
-- Kända brister
-- * Bokstavskombinationer av typen "γκ", "γχ"
--
-- Modulen är författad av (och underhålls av) [[Användare:Gabbe]]
local export = {}
latinska = {}
-- börja med de vanliga bokstäverna
latinska["Α"]="A"; latinska["α"]="a"
latinska["Β"]="B"; latinska["β"]="b"
latinska["Γ"]="G"; latinska["γ"]="g"
latinska["Δ"]="D"; latinska["δ"]="d"
latinska["Ε"]="E"; latinska["ε"]="e"
latinska["Ζ"]="Z"; latinska["ζ"]="z"
latinska["Η"]="Ē"; latinska["η"]="ē"
latinska["Θ"]="Th"; latinska["θ"]="th"
latinska["Ι"]="I"; latinska["ι"]="i"
latinska["Κ"]="K"; latinska["κ"]="k"
latinska["Λ"]="L"; latinska["λ"]="l"
latinska["Μ"]="M"; latinska["μ"]="m"
latinska["Ν"]="N"; latinska["ν"]="n"
latinska["Ξ"]="X"; latinska["ξ"]="x"
latinska["Ο"]="O"; latinska["ο"]="o"
latinska["Π"]="P"; latinska["π"]="p"
latinska["Ρ"]="R"; latinska["ρ"]="r"
latinska["Σ"]="S"; latinska["σ"]="s"; latinska["ς"]="s"
latinska["Τ"]="T"; latinska["τ"]="t"
latinska["Υ"]="Y"; latinska["υ"]="y"
latinska["Φ"]="F"; latinska["φ"]="f"
latinska["Χ"]="Ch"; latinska["χ"]="ch"
latinska["Ψ"]="Ps"; latinska["ψ"]="ps"
latinska["Ω"]="Ō"; latinska["ω"]="ō"
-- särvariant av sigma
latinska["Ϲ"]="S"; latinska["ϲ"]="s"
-- två arkaiska bokstäver
latinska["Ϝ"]="W"; latinska["ϝ"]="w"
latinska["Ϙ"]="Ḳ"; latinska["ϙ"]="ḳ"
-- sen en separat tabell för att hålla reda på vilka som har "spiritus asper":
spiritus_asper = {
["Ἁ"] = true, ["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true, ["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true, ["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true, ["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true,
["ἁ"] = true, ["ἑ"] = true, ["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true, ["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true,
["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true,
["ἃ"] = true, ["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true, ["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true,
["ἇ"] = true, ["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true, ["ᾗ"] = true, ["ᾧ"] = true,
}
-- sen en separat tabell för versalerna:
versaler = {
["Α"] = true, ["Ε"] = true, ["Η"] = true, ["Ι"] = true, ["Ο"] = true,
["Υ"] = true, ["Ω"] = true, ["ᾼ"] = true, ["ῌ"] = true, ["ῼ"] = true,
["Ρ"] = true, ["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true,
["Ό"] = true, ["Ύ"] = true, ["Ώ"] = true, ["Ὰ"] = true, ["Ὲ"] = true,
["Ὴ"] = true, ["Ὶ"] = true, ["Ὸ"] = true, ["Ὺ"] = true, ["Ὼ"] = true,
["Ἀ"] = true, ["Ἐ"] = true, ["Ἠ"] = true, ["Ἰ"] = true, ["Ὀ"] = true,
["Ὠ"] = true, ["ᾈ"] = true, ["ᾘ"] = true, ["ᾨ"] = true, ["Ἄ"] = true,
["Ἔ"] = true, ["Ἤ"] = true, ["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true,
["ᾌ"] = true, ["ᾜ"] = true, ["ᾬ"] = true, ["Ἂ"] = true, ["Ἒ"] = true,
["Ἢ"] = true, ["Ἲ"] = true, ["Ὂ"] = true, ["Ὢ"] = true, ["ᾊ"] = true,
["ᾚ"] = true, ["ᾪ"] = true, ["Ἆ"] = true, ["Ἦ"] = true, ["Ἶ"] = true,
["Ὦ"] = true, ["ᾎ"] = true, ["ᾞ"] = true, ["ᾮ"] = true, ["Ἁ"] = true,
["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true,
["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true,
["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true,
["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true,
["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true, ["Ᾱ"] = true, ["Ῑ"] = true,
["Ῡ"] = true, ["Ᾰ"] = true, ["Ῐ"] = true, ["Ῠ"] = true,
}
-- sen en för gemenerna:
gemener = {
["α"] = true, ["ε"] = true, ["η"] = true, ["ι"] = true, ["ο"] = true,
["υ"] = true, ["ω"] = true, ["ᾳ"] = true, ["ῃ"] = true, ["ῳ"] = true,
["ρ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ὰ"] = true, ["ὲ"] = true, ["ὴ"] = true, ["ὶ"] = true,
["ὸ"] = true, ["ὺ"] = true, ["ὼ"] = true, ["ᾲ"] = true, ["ῂ"] = true,
["ῲ"] = true, ["ᾶ"] = true, ["ῆ"] = true, ["ῖ"] = true, ["ῦ"] = true,
["ῶ"] = true, ["ᾷ"] = true, ["ῇ"] = true, ["ῷ"] = true, ["ἀ"] = true,
["ἐ"] = true, ["ἠ"] = true, ["ἰ"] = true, ["ὀ"] = true, ["ὐ"] = true,
["ὠ"] = true, ["ᾀ"] = true, ["ᾐ"] = true, ["ᾠ"] = true, ["ῤ"] = true,
["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true, ["ὄ"] = true,
["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true, ["ᾤ"] = true,
["ἂ"] = true, ["ἒ"] = true, ["ἢ"] = true, ["ἲ"] = true, ["ὂ"] = true,
["ὒ"] = true, ["ὢ"] = true, ["ᾂ"] = true, ["ᾒ"] = true, ["ᾢ"] = true,
["ἆ"] = true, ["ἦ"] = true, ["ἶ"] = true, ["ὖ"] = true, ["ὦ"] = true,
["ᾆ"] = true, ["ᾖ"] = true, ["ᾦ"] = true, ["ἁ"] = true, ["ἑ"] = true,
["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true,
["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true, ["ἅ"] = true,
["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true,
["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true, ["ἃ"] = true,
["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true,
["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true, ["ἇ"] = true,
["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true,
["ᾗ"] = true, ["ᾧ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
["ᾱ"] = true, ["ῑ"] = true, ["ῡ"] = true, ["ᾰ"] = true, ["ῐ"] = true,
["ῠ"] = true,
}
-- sen en tabell för de med akut accent:
akut_accent = {
["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true, ["Ό"] = true,
["Ύ"] = true, ["Ώ"] = true, ["Ἄ"] = true, ["Ἔ"] = true, ["Ἤ"] = true,
["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true, ["ᾌ"] = true, ["ᾜ"] = true,
["ᾬ"] = true, ["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true,
["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true,
["ᾭ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true,
["ὄ"] = true, ["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true,
["ᾤ"] = true, ["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true,
["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true,
["ᾥ"] = true, ["ΐ"] = true, ["ΰ"] = true,
}
-- sen några separata tabeller för att hålla reda på vilken slags bokstav det är
alfa = {
["α"] = true, ["𝛂"] = true, ["𝛼"] = true, ["𝜶"] = true, ["𝝰"] = true,
["𝞪"] = true, ["Α"] = true, ["𝚨"] = true, ["𝛢"] = true, ["𝜜"] = true,
["𝝖"] = true, ["𝞐"] = true, ["ἀ"] = true, ["Ἀ"] = true, ["ἄ"] = true,
["Ἄ"] = true, ["ᾄ"] = true, ["ᾌ"] = true, ["ἂ"] = true, ["Ἂ"] = true,
["ᾂ"] = true, ["ᾊ"] = true, ["ἆ"] = true, ["Ἆ"] = true, ["ᾆ"] = true,
["ᾎ"] = true, ["ᾀ"] = true, ["ᾈ"] = true, ["ἁ"] = true, ["Ἁ"] = true,
["ἅ"] = true, ["Ἅ"] = true, ["ᾅ"] = true, ["ᾍ"] = true, ["ἃ"] = true,
["Ἃ"] = true, ["ᾃ"] = true, ["ᾋ"] = true, ["ἇ"] = true, ["Ἇ"] = true,
["ᾇ"] = true, ["ᾏ"] = true, ["ᾁ"] = true, ["ᾉ"] = true, ["ά"] = true,
["ά"] = true, ["Ά"] = true, ["Ά"] = true, ["ᾴ"] = true, ["ὰ"] = true,
["Ὰ"] = true, ["ᾲ"] = true, ["ᾰ"] = true, ["Ᾰ"] = true, ["ᾶ"] = true,
["ᾷ"] = true, ["ᾱ"] = true, ["Ᾱ"] = true, ["ᾳ"] = true, ["ᾼ"] = true,
}
gamma = {
["γ"] = true, ["𝛄"] = true, ["𝛾"] = true, ["𝜸"] = true, ["𝝲"] = true,
["𝞬"] = true, ["Γ"] = true, ["𝚪"] = true, ["𝛤"] = true, ["𝜞"] = true,
["𝝘"] = true, ["𝞒"] = true, ["ℽ"] = true, ["ℾ"] = true, ["ᵞ"] = true,
["ᵧ"] = true, ["ᴦ"] = true,
}
epsilon = {
["ε"] = true, ["ϵ"] = true, ["𝛆"] = true, ["𝛜"] = true, ["𝜀"] = true,
["𝜖"] = true, ["𝜺"] = true, ["𝝐"] = true, ["𝝴"] = true, ["𝞊"] = true,
["𝞮"] = true, ["𝟄"] = true, ["Ε"] = true, ["𝚬"] = true, ["𝛦"] = true,
["𝜠"] = true, ["𝝚"] = true, ["𝞔"] = true, ["ἐ"] = true, ["Ἐ"] = true,
["ἔ"] = true, ["Ἔ"] = true, ["ἒ"] = true, ["Ἒ"] = true, ["ἑ"] = true,
["Ἑ"] = true, ["ἕ"] = true, ["Ἕ"] = true, ["ἓ"] = true, ["Ἓ"] = true,
["έ"] = true, ["έ"] = true, ["Έ"] = true, ["Έ"] = true, ["ὲ"] = true,
["Ὲ"] = true,
}
eta = {
["η"] = true, ["𝛈"] = true, ["𝜂"] = true, ["𝜼"] = true, ["𝝶"] = true,
["𝞰"] = true, ["Η"] = true, ["𝚮"] = true, ["𝛨"] = true, ["𝜢"] = true,
["𝝜"] = true, ["𝞖"] = true, ["ἠ"] = true, ["Ἠ"] = true, ["ἤ"] = true,
["Ἤ"] = true, ["ᾔ"] = true, ["ᾜ"] = true, ["ἢ"] = true, ["Ἢ"] = true,
["ᾒ"] = true, ["ᾚ"] = true, ["ἦ"] = true, ["Ἦ"] = true, ["ᾖ"] = true,
["ᾞ"] = true, ["ᾐ"] = true, ["ᾘ"] = true, ["ἡ"] = true, ["Ἡ"] = true,
["ἥ"] = true, ["Ἥ"] = true, ["ᾕ"] = true, ["ᾝ"] = true, ["ἣ"] = true,
["Ἣ"] = true, ["ᾓ"] = true, ["ᾛ"] = true, ["ἧ"] = true, ["Ἧ"] = true,
["ᾗ"] = true, ["ᾟ"] = true, ["ᾑ"] = true, ["ᾙ"] = true, ["ή"] = true,
["ή"] = true, ["Ή"] = true, ["Ή"] = true, ["ῄ"] = true, ["ὴ"] = true,
["Ὴ"] = true, ["ῂ"] = true, ["ῆ"] = true, ["ῇ"] = true, ["ῃ"] = true,
["ῌ"] = true,
}
jota = {
["ι"] = true, ["𝛊"] = true, ["𝜄"] = true, ["𝜾"] = true, ["𝝸"] = true,
["𝞲"] = true, ["Ι"] = true, ["𝚰"] = true, ["𝛪"] = true, ["𝜤"] = true,
["𝝞"] = true, ["𝞘"] = true, ["ἰ"] = true, ["Ἰ"] = true, ["ἴ"] = true,
["Ἴ"] = true, ["ἲ"] = true, ["Ἲ"] = true, ["ἶ"] = true, ["Ἶ"] = true,
["ἱ"] = true, ["Ἱ"] = true, ["ἵ"] = true, ["Ἵ"] = true, ["ἳ"] = true,
["Ἳ"] = true, ["ἷ"] = true, ["Ἷ"] = true, ["ί"] = true, ["ί"] = true,
["Ί"] = true, ["Ί"] = true, ["ὶ"] = true, ["Ὶ"] = true, ["ῐ"] = true,
["Ῐ"] = true, ["ῖ"] = true, ["ϊ"] = true, ["Ϊ"] = true, ["ΐ"] = true,
["ΐ"] = true, ["ῒ"] = true, ["ῗ"] = true, ["ῑ"] = true, ["Ῑ"] = true,
["ι"] = true, ["ͺ"] = true,
}
xi = {
["ξ"] = true, ["𝛏"] = true, ["𝜉"] = true, ["𝝃"] = true, ["𝝽"] = true,
["𝞷"] = true, ["Ξ"] = true, ["𝚵"] = true, ["𝛯"] = true, ["𝜩"] = true,
["𝝣"] = true, ["𝞝"] = true,
}
omikron = {
["ο"] = true, ["𝛐"] = true, ["𝜊"] = true, ["𝝄"] = true, ["𝝾"] = true,
["𝞸"] = true, ["Ο"] = true, ["𝚶"] = true, ["𝛰"] = true, ["𝜪"] = true,
["𝝤"] = true, ["𝞞"] = true, ["ὀ"] = true, ["Ὀ"] = true, ["ὄ"] = true,
["Ὄ"] = true, ["ὂ"] = true, ["Ὂ"] = true, ["ὁ"] = true, ["Ὁ"] = true,
["ὅ"] = true, ["Ὅ"] = true, ["ὃ"] = true, ["Ὃ"] = true, ["ό"] = true,
["ό"] = true, ["Ό"] = true, ["Ό"] = true, ["ὸ"] = true, ["Ὸ"] = true,
}
rho = {
["ρ"] = true, ["ϱ"] = true, ["𝛒"] = true, ["𝛠"] = true, ["𝜌"] = true,
["𝜚"] = true, ["𝝆"] = true, ["𝝔"] = true, ["𝞀"] = true, ["𝞎"] = true,
["𝞺"] = true, ["𝟈"] = true, ["Ρ"] = true, ["𝚸"] = true, ["𝛲"] = true,
["𝜬"] = true, ["𝝦"] = true, ["𝞠"] = true, ["ᵨ"] = true, ["ῤ"] = true,
["ῥ"] = true, ["Ῥ"] = true, ["ᴩ"] = true, ["ϼ"] = true,
}
ypsilon = {
["υ"] = true, ["𝛖"] = true, ["𝜐"] = true, ["𝝊"] = true, ["𝞄"] = true,
["𝞾"] = true, ["Υ"] = true, ["ϒ"] = true, ["𝚼"] = true, ["𝛶"] = true,
["𝜰"] = true, ["𝝪"] = true, ["𝞤"] = true, ["ὐ"] = true, ["ὔ"] = true,
["ὒ"] = true, ["ὖ"] = true, ["ὑ"] = true, ["Ὑ"] = true, ["ὕ"] = true,
["Ὕ"] = true, ["ὓ"] = true, ["Ὓ"] = true, ["ὗ"] = true, ["Ὗ"] = true,
["ύ"] = true, ["ύ"] = true, ["Ύ"] = true, ["Ύ"] = true, ["ϓ"] = true,
["ὺ"] = true, ["Ὺ"] = true, ["ῠ"] = true, ["Ῠ"] = true, ["ῦ"] = true,
["ϋ"] = true, ["Ϋ"] = true, ["ϔ"] = true, ["ΰ"] = true, ["ΰ"] = true,
["ῢ"] = true, ["ῧ"] = true, ["ῡ"] = true, ["Ῡ"] = true,
}
omega = {
["ω"] = true, ["𝛚"] = true, ["𝜔"] = true, ["𝝎"] = true, ["𝞈"] = true,
["𝟂"] = true, ["Ω"] = true, ["𝛀"] = true, ["𝛺"] = true, ["𝜴"] = true,
["𝝮"] = true, ["𝞨"] = true, ["ὠ"] = true, ["Ὠ"] = true, ["ὤ"] = true,
["Ὤ"] = true, ["ᾤ"] = true, ["ᾬ"] = true, ["ὢ"] = true, ["Ὢ"] = true,
["ᾢ"] = true, ["ᾪ"] = true, ["ὦ"] = true, ["Ὦ"] = true, ["ᾦ"] = true,
["ᾮ"] = true, ["ᾠ"] = true, ["ᾨ"] = true, ["ὡ"] = true, ["Ὡ"] = true,
["ὥ"] = true, ["Ὥ"] = true, ["ᾥ"] = true, ["ᾭ"] = true, ["ὣ"] = true,
["Ὣ"] = true, ["ᾣ"] = true, ["ᾫ"] = true, ["ὧ"] = true, ["Ὧ"] = true,
["ᾧ"] = true, ["ᾯ"] = true, ["ᾡ"] = true, ["ᾩ"] = true, ["ώ"] = true,
["ώ"] = true, ["Ώ"] = true, ["Ώ"] = true, ["ῴ"] = true, ["ὼ"] = true,
["Ὼ"] = true, ["ῲ"] = true, ["ῶ"] = true, ["ῷ"] = true, ["ῳ"] = true,
["ῼ"] = true, ["ꭥ"] = true, ["Ω"] = true, ["㏀"] = true, ["㏁"] = true,
}
-- de som har två prickar ovanför vokalen
hiatus = {
["Ϊ"] = true, ["Ϋ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
}
-- generera tabellen för de övriga bokstäverna med diverse diakritiska tecken
for i,v in pairs(versaler) do
if(alfa[i]) then
latinska[i] = latinska["Α"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["α"]
end
elseif(epsilon[i]) then
latinska[i] = latinska["Ε"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ε"]
end
elseif(eta[i]) then
latinska[i] = latinska["Η"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["η"]
end
elseif(jota[i]) then
latinska[i] = latinska["Ι"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ι"]
end
elseif(omikron[i]) then
latinska[i] = latinska["Ο"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["Ρ"]
if(spiritus_asper[i]) then
latinska[i] = latinska[i].."h"
end
elseif(ypsilon[i]) then
latinska[i] = latinska["Υ"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["υ"]
end
elseif(omega[i]) then
latinska[i] = latinska["Ω"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ω"]
end
end
end
for i,v in pairs(gemener) do
if(alfa[i]) then
if (akut_accent[i]) then
latinska[i] = "á"
else
latinska[i] = latinska["α"]
end
elseif(epsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "é"
else
latinska[i] = latinska["ε"]
end
elseif(eta[i]) then
if (akut_accent[i]) then
latinska[i] = "ḗ"
else
latinska[i] = latinska["η"]
end
elseif(jota[i]) then
if (akut_accent[i]) then
latinska[i] = "í"
else
latinska[i] = latinska["ι"]
end
elseif(omikron[i]) then
if (akut_accent[i]) then
latinska[i] = "ó"
else
latinska[i] = latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["ρ"]
elseif(ypsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "ý"
else
latinska[i] = latinska["υ"]
end
elseif(omega[i]) then
if (akut_accent[i]) then
latinska[i] = "ṓ"
else
latinska[i] = latinska["ω"]
end
end
if(spiritus_asper[i]) then
if(rho[i]) then
latinska[i] = latinska[i].."h"
else
latinska[i] = "h"..latinska[i]
end
end
end
-- Fem köfunktioner
function enqueue(q, val)
q.last = q.last + 1
q.data[q.last] = val
end
function dequeue(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
q.data[q.first] = nil
q.first = q.first + 1
end
return rval
end
function peekonce(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
end
return rval
end
function peektwice(q)
local rval
if (q.first+1 > q.last) then
rval = -1
else
rval = q.data[q.first+1]
end
return rval
end
function peeklast(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.last]
end
return rval
end
-- Själva transkriberingsfunktionen för forngrekiska
function transkribera_grc(text)
-- Två köer: en för grekiska bokstäver och en för latinska bokstäver
indata = {}
indata.first = 0
indata.last = -1
indata.data = {}
utdata = {}
utdata.first = 0
utdata.last = -1
utdata.data = {}
-- en separat kö att returnera på slutet
local returndata = {}
for c in string.gmatch(text, ".[\128-\191]*") do
enqueue(indata, c)
end
repeat
local x = dequeue(indata)
local y = peekonce(indata)
local z = peektwice(indata)
local u = peeklast(utdata)
if (latinska[x] == nil) then -- icke-grekiskt tecken
enqueue(utdata, x)
-- diverse undantag, startar med "spiritus asper" som del av en diftong
elseif (((u == -1) or string.match(u," ")) and spiritus_asper[y]) then
enqueue(utdata, string.sub(latinska[y],1,1)) -- versalt "H" eller gement "h"
if (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, latinska[x])
end
if ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, string.sub(latinska[y],2))
end
dequeue(indata)
-- sen diftongerna "αυ", "ευ", "ηυ", "ου", "ωυ"
elseif ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
enqueue(utdata, latinska[x])
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
dequeue(indata)
-- sen diftongen "υι"
elseif (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x] and spiritus_asper[x]) then
enqueue(utdata, "hú")
elseif(akut_accent[x]) then
enqueue(utdata, "ú")
elseif(spiritus_asper[x]) then
enqueue(utdata, "hu")
else
enqueue(utdata, "u")
end
enqueue(utdata, latinska[y])
dequeue(indata)
-- sen bokstavsföljden "γγ"
elseif (gamma[x] and gamma[y]) then
enqueue(utdata,"n")
enqueue(utdata,"g")
dequeue(indata)
-- sen bokstavsföljden "γξ"
elseif (gamma[x] and xi[y]) then
enqueue(utdata,"n")
enqueue(utdata,"x")
dequeue(indata)
-- sen, när "spiritus asper" hanteras med modifierare
elseif (string.match(y,"̔")) then
enqueue(utdata, "h") -- TODO!!! Kan detta vara versalt "H"? Diftonger?
enqueue(utdata, latinska[x])
dequeue(indata)
else
enqueue(utdata, latinska[x])
end
until (indata.first > indata.last)
repeat
local x = dequeue(utdata)
table.insert(returndata,x)
until (utdata.first > utdata.last)
return returndata
end
--[[
function export.transkribera( argument )
local text = argument.args["text"]
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
--]]
function export.tr( argument )
local text = argument
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
return export
pmu5ggm7voxl24rc5siarmrika48gko
3703224
3703222
2022-08-18T13:26:20Z
Gabbe
1153
la till hantering av "gamma + chi"
Scribunto
text/plain
-- Denna modul används för att transkribera antik grekiska till svenska.
--
-- För att transkribera modern grekiska kan ett liknande system användas.
-- Det hanteras dock av särskilda moduler. Se:
--
-- [TODO]
--
--
-- Denna modul strävar efter att följa det system som används av
-- "Library of Congress". Det finns i skrivande stund beskrivet här:
--
-- https://www.loc.gov/catdir/cpso/romanization/greek.pdf
--
-- Några avsteg har gjorts för att bättre reflektera hur orden vanligen
-- transkriberas till svenska. Exempelvis förvandlas φρόνησις till "frónēsis",
-- inte "phronēsis".
--
-- Notera att det finns andra sätt för att transkribera forngrekiska.
-- Notera även att denna modul inte (ännu) hanterar skriftsystem som Linear B
-- eller den cypriska stavelseskriften.
--
-- Lägg också märke till att denna version av modulen hanterar de flesta
-- diakriter på ett ganska styvmoderligt sätt. Framtida versioner kan
-- (och bör) göra detta mer nyanserat.
--
--
-- Denna modul används av följande mall:
-- {{tr}}
--
-- Kända brister
-- * Bokstavskombinationer av typen "γκ"
--
-- Modulen är författad av (och underhålls av) [[Användare:Gabbe]]
local export = {}
latinska = {}
-- börja med de vanliga bokstäverna
latinska["Α"]="A"; latinska["α"]="a"
latinska["Β"]="B"; latinska["β"]="b"
latinska["Γ"]="G"; latinska["γ"]="g"
latinska["Δ"]="D"; latinska["δ"]="d"
latinska["Ε"]="E"; latinska["ε"]="e"
latinska["Ζ"]="Z"; latinska["ζ"]="z"
latinska["Η"]="Ē"; latinska["η"]="ē"
latinska["Θ"]="Th"; latinska["θ"]="th"
latinska["Ι"]="I"; latinska["ι"]="i"
latinska["Κ"]="K"; latinska["κ"]="k"
latinska["Λ"]="L"; latinska["λ"]="l"
latinska["Μ"]="M"; latinska["μ"]="m"
latinska["Ν"]="N"; latinska["ν"]="n"
latinska["Ξ"]="X"; latinska["ξ"]="x"
latinska["Ο"]="O"; latinska["ο"]="o"
latinska["Π"]="P"; latinska["π"]="p"
latinska["Ρ"]="R"; latinska["ρ"]="r"
latinska["Σ"]="S"; latinska["σ"]="s"; latinska["ς"]="s"
latinska["Τ"]="T"; latinska["τ"]="t"
latinska["Υ"]="Y"; latinska["υ"]="y"
latinska["Φ"]="F"; latinska["φ"]="f"
latinska["Χ"]="Ch"; latinska["χ"]="ch"
latinska["Ψ"]="Ps"; latinska["ψ"]="ps"
latinska["Ω"]="Ō"; latinska["ω"]="ō"
-- särvariant av sigma
latinska["Ϲ"]="S"; latinska["ϲ"]="s"
-- två arkaiska bokstäver
latinska["Ϝ"]="W"; latinska["ϝ"]="w"
latinska["Ϙ"]="Ḳ"; latinska["ϙ"]="ḳ"
-- sen en separat tabell för att hålla reda på vilka som har "spiritus asper":
spiritus_asper = {
["Ἁ"] = true, ["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true, ["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true, ["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true, ["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true,
["ἁ"] = true, ["ἑ"] = true, ["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true, ["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true,
["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true,
["ἃ"] = true, ["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true, ["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true,
["ἇ"] = true, ["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true, ["ᾗ"] = true, ["ᾧ"] = true,
}
-- sen en separat tabell för versalerna:
versaler = {
["Α"] = true, ["Ε"] = true, ["Η"] = true, ["Ι"] = true, ["Ο"] = true,
["Υ"] = true, ["Ω"] = true, ["ᾼ"] = true, ["ῌ"] = true, ["ῼ"] = true,
["Ρ"] = true, ["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true,
["Ό"] = true, ["Ύ"] = true, ["Ώ"] = true, ["Ὰ"] = true, ["Ὲ"] = true,
["Ὴ"] = true, ["Ὶ"] = true, ["Ὸ"] = true, ["Ὺ"] = true, ["Ὼ"] = true,
["Ἀ"] = true, ["Ἐ"] = true, ["Ἠ"] = true, ["Ἰ"] = true, ["Ὀ"] = true,
["Ὠ"] = true, ["ᾈ"] = true, ["ᾘ"] = true, ["ᾨ"] = true, ["Ἄ"] = true,
["Ἔ"] = true, ["Ἤ"] = true, ["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true,
["ᾌ"] = true, ["ᾜ"] = true, ["ᾬ"] = true, ["Ἂ"] = true, ["Ἒ"] = true,
["Ἢ"] = true, ["Ἲ"] = true, ["Ὂ"] = true, ["Ὢ"] = true, ["ᾊ"] = true,
["ᾚ"] = true, ["ᾪ"] = true, ["Ἆ"] = true, ["Ἦ"] = true, ["Ἶ"] = true,
["Ὦ"] = true, ["ᾎ"] = true, ["ᾞ"] = true, ["ᾮ"] = true, ["Ἁ"] = true,
["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true,
["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true,
["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true,
["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true,
["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true, ["Ᾱ"] = true, ["Ῑ"] = true,
["Ῡ"] = true, ["Ᾰ"] = true, ["Ῐ"] = true, ["Ῠ"] = true,
}
-- sen en för gemenerna:
gemener = {
["α"] = true, ["ε"] = true, ["η"] = true, ["ι"] = true, ["ο"] = true,
["υ"] = true, ["ω"] = true, ["ᾳ"] = true, ["ῃ"] = true, ["ῳ"] = true,
["ρ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ὰ"] = true, ["ὲ"] = true, ["ὴ"] = true, ["ὶ"] = true,
["ὸ"] = true, ["ὺ"] = true, ["ὼ"] = true, ["ᾲ"] = true, ["ῂ"] = true,
["ῲ"] = true, ["ᾶ"] = true, ["ῆ"] = true, ["ῖ"] = true, ["ῦ"] = true,
["ῶ"] = true, ["ᾷ"] = true, ["ῇ"] = true, ["ῷ"] = true, ["ἀ"] = true,
["ἐ"] = true, ["ἠ"] = true, ["ἰ"] = true, ["ὀ"] = true, ["ὐ"] = true,
["ὠ"] = true, ["ᾀ"] = true, ["ᾐ"] = true, ["ᾠ"] = true, ["ῤ"] = true,
["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true, ["ὄ"] = true,
["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true, ["ᾤ"] = true,
["ἂ"] = true, ["ἒ"] = true, ["ἢ"] = true, ["ἲ"] = true, ["ὂ"] = true,
["ὒ"] = true, ["ὢ"] = true, ["ᾂ"] = true, ["ᾒ"] = true, ["ᾢ"] = true,
["ἆ"] = true, ["ἦ"] = true, ["ἶ"] = true, ["ὖ"] = true, ["ὦ"] = true,
["ᾆ"] = true, ["ᾖ"] = true, ["ᾦ"] = true, ["ἁ"] = true, ["ἑ"] = true,
["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true,
["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true, ["ἅ"] = true,
["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true,
["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true, ["ἃ"] = true,
["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true,
["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true, ["ἇ"] = true,
["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true,
["ᾗ"] = true, ["ᾧ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
["ᾱ"] = true, ["ῑ"] = true, ["ῡ"] = true, ["ᾰ"] = true, ["ῐ"] = true,
["ῠ"] = true,
}
-- sen en tabell för de med akut accent:
akut_accent = {
["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true, ["Ό"] = true,
["Ύ"] = true, ["Ώ"] = true, ["Ἄ"] = true, ["Ἔ"] = true, ["Ἤ"] = true,
["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true, ["ᾌ"] = true, ["ᾜ"] = true,
["ᾬ"] = true, ["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true,
["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true,
["ᾭ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true,
["ὄ"] = true, ["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true,
["ᾤ"] = true, ["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true,
["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true,
["ᾥ"] = true, ["ΐ"] = true, ["ΰ"] = true,
}
-- sen några separata tabeller för att hålla reda på vilken slags bokstav det är
alfa = {
["α"] = true, ["𝛂"] = true, ["𝛼"] = true, ["𝜶"] = true, ["𝝰"] = true,
["𝞪"] = true, ["Α"] = true, ["𝚨"] = true, ["𝛢"] = true, ["𝜜"] = true,
["𝝖"] = true, ["𝞐"] = true, ["ἀ"] = true, ["Ἀ"] = true, ["ἄ"] = true,
["Ἄ"] = true, ["ᾄ"] = true, ["ᾌ"] = true, ["ἂ"] = true, ["Ἂ"] = true,
["ᾂ"] = true, ["ᾊ"] = true, ["ἆ"] = true, ["Ἆ"] = true, ["ᾆ"] = true,
["ᾎ"] = true, ["ᾀ"] = true, ["ᾈ"] = true, ["ἁ"] = true, ["Ἁ"] = true,
["ἅ"] = true, ["Ἅ"] = true, ["ᾅ"] = true, ["ᾍ"] = true, ["ἃ"] = true,
["Ἃ"] = true, ["ᾃ"] = true, ["ᾋ"] = true, ["ἇ"] = true, ["Ἇ"] = true,
["ᾇ"] = true, ["ᾏ"] = true, ["ᾁ"] = true, ["ᾉ"] = true, ["ά"] = true,
["ά"] = true, ["Ά"] = true, ["Ά"] = true, ["ᾴ"] = true, ["ὰ"] = true,
["Ὰ"] = true, ["ᾲ"] = true, ["ᾰ"] = true, ["Ᾰ"] = true, ["ᾶ"] = true,
["ᾷ"] = true, ["ᾱ"] = true, ["Ᾱ"] = true, ["ᾳ"] = true, ["ᾼ"] = true,
}
gamma = {
["γ"] = true, ["𝛄"] = true, ["𝛾"] = true, ["𝜸"] = true, ["𝝲"] = true,
["𝞬"] = true, ["Γ"] = true, ["𝚪"] = true, ["𝛤"] = true, ["𝜞"] = true,
["𝝘"] = true, ["𝞒"] = true, ["ℽ"] = true, ["ℾ"] = true, ["ᵞ"] = true,
["ᵧ"] = true, ["ᴦ"] = true,
}
epsilon = {
["ε"] = true, ["ϵ"] = true, ["𝛆"] = true, ["𝛜"] = true, ["𝜀"] = true,
["𝜖"] = true, ["𝜺"] = true, ["𝝐"] = true, ["𝝴"] = true, ["𝞊"] = true,
["𝞮"] = true, ["𝟄"] = true, ["Ε"] = true, ["𝚬"] = true, ["𝛦"] = true,
["𝜠"] = true, ["𝝚"] = true, ["𝞔"] = true, ["ἐ"] = true, ["Ἐ"] = true,
["ἔ"] = true, ["Ἔ"] = true, ["ἒ"] = true, ["Ἒ"] = true, ["ἑ"] = true,
["Ἑ"] = true, ["ἕ"] = true, ["Ἕ"] = true, ["ἓ"] = true, ["Ἓ"] = true,
["έ"] = true, ["έ"] = true, ["Έ"] = true, ["Έ"] = true, ["ὲ"] = true,
["Ὲ"] = true,
}
eta = {
["η"] = true, ["𝛈"] = true, ["𝜂"] = true, ["𝜼"] = true, ["𝝶"] = true,
["𝞰"] = true, ["Η"] = true, ["𝚮"] = true, ["𝛨"] = true, ["𝜢"] = true,
["𝝜"] = true, ["𝞖"] = true, ["ἠ"] = true, ["Ἠ"] = true, ["ἤ"] = true,
["Ἤ"] = true, ["ᾔ"] = true, ["ᾜ"] = true, ["ἢ"] = true, ["Ἢ"] = true,
["ᾒ"] = true, ["ᾚ"] = true, ["ἦ"] = true, ["Ἦ"] = true, ["ᾖ"] = true,
["ᾞ"] = true, ["ᾐ"] = true, ["ᾘ"] = true, ["ἡ"] = true, ["Ἡ"] = true,
["ἥ"] = true, ["Ἥ"] = true, ["ᾕ"] = true, ["ᾝ"] = true, ["ἣ"] = true,
["Ἣ"] = true, ["ᾓ"] = true, ["ᾛ"] = true, ["ἧ"] = true, ["Ἧ"] = true,
["ᾗ"] = true, ["ᾟ"] = true, ["ᾑ"] = true, ["ᾙ"] = true, ["ή"] = true,
["ή"] = true, ["Ή"] = true, ["Ή"] = true, ["ῄ"] = true, ["ὴ"] = true,
["Ὴ"] = true, ["ῂ"] = true, ["ῆ"] = true, ["ῇ"] = true, ["ῃ"] = true,
["ῌ"] = true,
}
jota = {
["ι"] = true, ["𝛊"] = true, ["𝜄"] = true, ["𝜾"] = true, ["𝝸"] = true,
["𝞲"] = true, ["Ι"] = true, ["𝚰"] = true, ["𝛪"] = true, ["𝜤"] = true,
["𝝞"] = true, ["𝞘"] = true, ["ἰ"] = true, ["Ἰ"] = true, ["ἴ"] = true,
["Ἴ"] = true, ["ἲ"] = true, ["Ἲ"] = true, ["ἶ"] = true, ["Ἶ"] = true,
["ἱ"] = true, ["Ἱ"] = true, ["ἵ"] = true, ["Ἵ"] = true, ["ἳ"] = true,
["Ἳ"] = true, ["ἷ"] = true, ["Ἷ"] = true, ["ί"] = true, ["ί"] = true,
["Ί"] = true, ["Ί"] = true, ["ὶ"] = true, ["Ὶ"] = true, ["ῐ"] = true,
["Ῐ"] = true, ["ῖ"] = true, ["ϊ"] = true, ["Ϊ"] = true, ["ΐ"] = true,
["ΐ"] = true, ["ῒ"] = true, ["ῗ"] = true, ["ῑ"] = true, ["Ῑ"] = true,
["ι"] = true, ["ͺ"] = true,
}
xi = {
["ξ"] = true, ["𝛏"] = true, ["𝜉"] = true, ["𝝃"] = true, ["𝝽"] = true,
["𝞷"] = true, ["Ξ"] = true, ["𝚵"] = true, ["𝛯"] = true, ["𝜩"] = true,
["𝝣"] = true, ["𝞝"] = true,
}
omikron = {
["ο"] = true, ["𝛐"] = true, ["𝜊"] = true, ["𝝄"] = true, ["𝝾"] = true,
["𝞸"] = true, ["Ο"] = true, ["𝚶"] = true, ["𝛰"] = true, ["𝜪"] = true,
["𝝤"] = true, ["𝞞"] = true, ["ὀ"] = true, ["Ὀ"] = true, ["ὄ"] = true,
["Ὄ"] = true, ["ὂ"] = true, ["Ὂ"] = true, ["ὁ"] = true, ["Ὁ"] = true,
["ὅ"] = true, ["Ὅ"] = true, ["ὃ"] = true, ["Ὃ"] = true, ["ό"] = true,
["ό"] = true, ["Ό"] = true, ["Ό"] = true, ["ὸ"] = true, ["Ὸ"] = true,
}
rho = {
["ρ"] = true, ["ϱ"] = true, ["𝛒"] = true, ["𝛠"] = true, ["𝜌"] = true,
["𝜚"] = true, ["𝝆"] = true, ["𝝔"] = true, ["𝞀"] = true, ["𝞎"] = true,
["𝞺"] = true, ["𝟈"] = true, ["Ρ"] = true, ["𝚸"] = true, ["𝛲"] = true,
["𝜬"] = true, ["𝝦"] = true, ["𝞠"] = true, ["ᵨ"] = true, ["ῤ"] = true,
["ῥ"] = true, ["Ῥ"] = true, ["ᴩ"] = true, ["ϼ"] = true,
}
ypsilon = {
["υ"] = true, ["𝛖"] = true, ["𝜐"] = true, ["𝝊"] = true, ["𝞄"] = true,
["𝞾"] = true, ["Υ"] = true, ["ϒ"] = true, ["𝚼"] = true, ["𝛶"] = true,
["𝜰"] = true, ["𝝪"] = true, ["𝞤"] = true, ["ὐ"] = true, ["ὔ"] = true,
["ὒ"] = true, ["ὖ"] = true, ["ὑ"] = true, ["Ὑ"] = true, ["ὕ"] = true,
["Ὕ"] = true, ["ὓ"] = true, ["Ὓ"] = true, ["ὗ"] = true, ["Ὗ"] = true,
["ύ"] = true, ["ύ"] = true, ["Ύ"] = true, ["Ύ"] = true, ["ϓ"] = true,
["ὺ"] = true, ["Ὺ"] = true, ["ῠ"] = true, ["Ῠ"] = true, ["ῦ"] = true,
["ϋ"] = true, ["Ϋ"] = true, ["ϔ"] = true, ["ΰ"] = true, ["ΰ"] = true,
["ῢ"] = true, ["ῧ"] = true, ["ῡ"] = true, ["Ῡ"] = true,
}
chi = {
["χ"] = true, ["𝛘"] = true, ["𝜒"] = true, ["𝝌"] = true, ["𝞆"] = true,
["𝟀"] = true, ["Χ"] = true, ["𝚾"] = true, ["𝛸"] = true, ["𝜲"] = true,
["𝝬"] = true, ["𝞦"] = true, ["ᵡ"] = true, ["ᵪ"] = true
}
omega = {
["ω"] = true, ["𝛚"] = true, ["𝜔"] = true, ["𝝎"] = true, ["𝞈"] = true,
["𝟂"] = true, ["Ω"] = true, ["𝛀"] = true, ["𝛺"] = true, ["𝜴"] = true,
["𝝮"] = true, ["𝞨"] = true, ["ὠ"] = true, ["Ὠ"] = true, ["ὤ"] = true,
["Ὤ"] = true, ["ᾤ"] = true, ["ᾬ"] = true, ["ὢ"] = true, ["Ὢ"] = true,
["ᾢ"] = true, ["ᾪ"] = true, ["ὦ"] = true, ["Ὦ"] = true, ["ᾦ"] = true,
["ᾮ"] = true, ["ᾠ"] = true, ["ᾨ"] = true, ["ὡ"] = true, ["Ὡ"] = true,
["ὥ"] = true, ["Ὥ"] = true, ["ᾥ"] = true, ["ᾭ"] = true, ["ὣ"] = true,
["Ὣ"] = true, ["ᾣ"] = true, ["ᾫ"] = true, ["ὧ"] = true, ["Ὧ"] = true,
["ᾧ"] = true, ["ᾯ"] = true, ["ᾡ"] = true, ["ᾩ"] = true, ["ώ"] = true,
["ώ"] = true, ["Ώ"] = true, ["Ώ"] = true, ["ῴ"] = true, ["ὼ"] = true,
["Ὼ"] = true, ["ῲ"] = true, ["ῶ"] = true, ["ῷ"] = true, ["ῳ"] = true,
["ῼ"] = true, ["ꭥ"] = true, ["Ω"] = true, ["㏀"] = true, ["㏁"] = true,
}
-- de som har två prickar ovanför vokalen
hiatus = {
["Ϊ"] = true, ["Ϋ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
}
-- generera tabellen för de övriga bokstäverna med diverse diakritiska tecken
for i,v in pairs(versaler) do
if(alfa[i]) then
latinska[i] = latinska["Α"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["α"]
end
elseif(epsilon[i]) then
latinska[i] = latinska["Ε"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ε"]
end
elseif(eta[i]) then
latinska[i] = latinska["Η"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["η"]
end
elseif(jota[i]) then
latinska[i] = latinska["Ι"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ι"]
end
elseif(omikron[i]) then
latinska[i] = latinska["Ο"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["Ρ"]
if(spiritus_asper[i]) then
latinska[i] = latinska[i].."h"
end
elseif(ypsilon[i]) then
latinska[i] = latinska["Υ"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["υ"]
end
elseif(omega[i]) then
latinska[i] = latinska["Ω"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ω"]
end
end
end
for i,v in pairs(gemener) do
if(alfa[i]) then
if (akut_accent[i]) then
latinska[i] = "á"
else
latinska[i] = latinska["α"]
end
elseif(epsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "é"
else
latinska[i] = latinska["ε"]
end
elseif(eta[i]) then
if (akut_accent[i]) then
latinska[i] = "ḗ"
else
latinska[i] = latinska["η"]
end
elseif(jota[i]) then
if (akut_accent[i]) then
latinska[i] = "í"
else
latinska[i] = latinska["ι"]
end
elseif(omikron[i]) then
if (akut_accent[i]) then
latinska[i] = "ó"
else
latinska[i] = latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["ρ"]
elseif(ypsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "ý"
else
latinska[i] = latinska["υ"]
end
elseif(omega[i]) then
if (akut_accent[i]) then
latinska[i] = "ṓ"
else
latinska[i] = latinska["ω"]
end
end
if(spiritus_asper[i]) then
if(rho[i]) then
latinska[i] = latinska[i].."h"
else
latinska[i] = "h"..latinska[i]
end
end
end
-- Fem köfunktioner
function enqueue(q, val)
q.last = q.last + 1
q.data[q.last] = val
end
function dequeue(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
q.data[q.first] = nil
q.first = q.first + 1
end
return rval
end
function peekonce(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
end
return rval
end
function peektwice(q)
local rval
if (q.first+1 > q.last) then
rval = -1
else
rval = q.data[q.first+1]
end
return rval
end
function peeklast(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.last]
end
return rval
end
-- Själva transkriberingsfunktionen för forngrekiska
function transkribera_grc(text)
-- Två köer: en för grekiska bokstäver och en för latinska bokstäver
indata = {}
indata.first = 0
indata.last = -1
indata.data = {}
utdata = {}
utdata.first = 0
utdata.last = -1
utdata.data = {}
-- en separat kö att returnera på slutet
local returndata = {}
for c in string.gmatch(text, ".[\128-\191]*") do
enqueue(indata, c)
end
repeat
local x = dequeue(indata)
local y = peekonce(indata)
local z = peektwice(indata)
local u = peeklast(utdata)
if (latinska[x] == nil) then -- icke-grekiskt tecken
enqueue(utdata, x)
-- diverse undantag, startar med "spiritus asper" som del av en diftong
elseif (((u == -1) or string.match(u," ")) and spiritus_asper[y]) then
enqueue(utdata, string.sub(latinska[y],1,1)) -- versalt "H" eller gement "h"
if (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, latinska[x])
end
if ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, string.sub(latinska[y],2))
end
dequeue(indata)
-- sen diftongerna "αυ", "ευ", "ηυ", "ου", "ωυ"
elseif ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
enqueue(utdata, latinska[x])
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
dequeue(indata)
-- sen diftongen "υι"
elseif (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x] and spiritus_asper[x]) then
enqueue(utdata, "hú")
elseif(akut_accent[x]) then
enqueue(utdata, "ú")
elseif(spiritus_asper[x]) then
enqueue(utdata, "hu")
else
enqueue(utdata, "u")
end
enqueue(utdata, latinska[y])
dequeue(indata)
-- sen bokstavsföljden "γγ"
elseif (gamma[x] and gamma[y]) then
enqueue(utdata,"n")
enqueue(utdata,latinska["γ"])
dequeue(indata)
-- sen bokstavsföljden "γξ"
elseif (gamma[x] and xi[y]) then
enqueue(utdata,"n")
enqueue(utdata,latinska["ξ"])
dequeue(indata)
-- sen bokstavsföljden "γχ"
elseif (gamma[x] and xi[y]) then
enqueue(utdata,"n")
enqueue(utdata,latinska["χ"])
dequeue(indata)
-- sen, när "spiritus asper" hanteras med modifierare
elseif (string.match(y,"̔")) then
enqueue(utdata, "h") -- TODO!!! Kan detta vara versalt "H"? Diftonger?
enqueue(utdata, latinska[x])
dequeue(indata)
else
enqueue(utdata, latinska[x])
end
until (indata.first > indata.last)
repeat
local x = dequeue(utdata)
table.insert(returndata,x)
until (utdata.first > utdata.last)
return returndata
end
--[[
function export.transkribera( argument )
local text = argument.args["text"]
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
--]]
function export.tr( argument )
local text = argument
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
return export
ns7wbt33scc4ujexv3ntzj25uz30w0h
3703225
3703224
2022-08-18T13:27:10Z
Gabbe
1153
"chi", inte "xi"
Scribunto
text/plain
-- Denna modul används för att transkribera antik grekiska till svenska.
--
-- För att transkribera modern grekiska kan ett liknande system användas.
-- Det hanteras dock av särskilda moduler. Se:
--
-- [TODO]
--
--
-- Denna modul strävar efter att följa det system som används av
-- "Library of Congress". Det finns i skrivande stund beskrivet här:
--
-- https://www.loc.gov/catdir/cpso/romanization/greek.pdf
--
-- Några avsteg har gjorts för att bättre reflektera hur orden vanligen
-- transkriberas till svenska. Exempelvis förvandlas φρόνησις till "frónēsis",
-- inte "phronēsis".
--
-- Notera att det finns andra sätt för att transkribera forngrekiska.
-- Notera även att denna modul inte (ännu) hanterar skriftsystem som Linear B
-- eller den cypriska stavelseskriften.
--
-- Lägg också märke till att denna version av modulen hanterar de flesta
-- diakriter på ett ganska styvmoderligt sätt. Framtida versioner kan
-- (och bör) göra detta mer nyanserat.
--
--
-- Denna modul används av följande mall:
-- {{tr}}
--
-- Kända brister
-- * Bokstavskombinationer av typen "γκ"
--
-- Modulen är författad av (och underhålls av) [[Användare:Gabbe]]
local export = {}
latinska = {}
-- börja med de vanliga bokstäverna
latinska["Α"]="A"; latinska["α"]="a"
latinska["Β"]="B"; latinska["β"]="b"
latinska["Γ"]="G"; latinska["γ"]="g"
latinska["Δ"]="D"; latinska["δ"]="d"
latinska["Ε"]="E"; latinska["ε"]="e"
latinska["Ζ"]="Z"; latinska["ζ"]="z"
latinska["Η"]="Ē"; latinska["η"]="ē"
latinska["Θ"]="Th"; latinska["θ"]="th"
latinska["Ι"]="I"; latinska["ι"]="i"
latinska["Κ"]="K"; latinska["κ"]="k"
latinska["Λ"]="L"; latinska["λ"]="l"
latinska["Μ"]="M"; latinska["μ"]="m"
latinska["Ν"]="N"; latinska["ν"]="n"
latinska["Ξ"]="X"; latinska["ξ"]="x"
latinska["Ο"]="O"; latinska["ο"]="o"
latinska["Π"]="P"; latinska["π"]="p"
latinska["Ρ"]="R"; latinska["ρ"]="r"
latinska["Σ"]="S"; latinska["σ"]="s"; latinska["ς"]="s"
latinska["Τ"]="T"; latinska["τ"]="t"
latinska["Υ"]="Y"; latinska["υ"]="y"
latinska["Φ"]="F"; latinska["φ"]="f"
latinska["Χ"]="Ch"; latinska["χ"]="ch"
latinska["Ψ"]="Ps"; latinska["ψ"]="ps"
latinska["Ω"]="Ō"; latinska["ω"]="ō"
-- särvariant av sigma
latinska["Ϲ"]="S"; latinska["ϲ"]="s"
-- två arkaiska bokstäver
latinska["Ϝ"]="W"; latinska["ϝ"]="w"
latinska["Ϙ"]="Ḳ"; latinska["ϙ"]="ḳ"
-- sen en separat tabell för att hålla reda på vilka som har "spiritus asper":
spiritus_asper = {
["Ἁ"] = true, ["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true, ["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true, ["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true, ["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true,
["ἁ"] = true, ["ἑ"] = true, ["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true, ["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true,
["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true,
["ἃ"] = true, ["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true, ["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true,
["ἇ"] = true, ["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true, ["ᾗ"] = true, ["ᾧ"] = true,
}
-- sen en separat tabell för versalerna:
versaler = {
["Α"] = true, ["Ε"] = true, ["Η"] = true, ["Ι"] = true, ["Ο"] = true,
["Υ"] = true, ["Ω"] = true, ["ᾼ"] = true, ["ῌ"] = true, ["ῼ"] = true,
["Ρ"] = true, ["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true,
["Ό"] = true, ["Ύ"] = true, ["Ώ"] = true, ["Ὰ"] = true, ["Ὲ"] = true,
["Ὴ"] = true, ["Ὶ"] = true, ["Ὸ"] = true, ["Ὺ"] = true, ["Ὼ"] = true,
["Ἀ"] = true, ["Ἐ"] = true, ["Ἠ"] = true, ["Ἰ"] = true, ["Ὀ"] = true,
["Ὠ"] = true, ["ᾈ"] = true, ["ᾘ"] = true, ["ᾨ"] = true, ["Ἄ"] = true,
["Ἔ"] = true, ["Ἤ"] = true, ["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true,
["ᾌ"] = true, ["ᾜ"] = true, ["ᾬ"] = true, ["Ἂ"] = true, ["Ἒ"] = true,
["Ἢ"] = true, ["Ἲ"] = true, ["Ὂ"] = true, ["Ὢ"] = true, ["ᾊ"] = true,
["ᾚ"] = true, ["ᾪ"] = true, ["Ἆ"] = true, ["Ἦ"] = true, ["Ἶ"] = true,
["Ὦ"] = true, ["ᾎ"] = true, ["ᾞ"] = true, ["ᾮ"] = true, ["Ἁ"] = true,
["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true,
["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true,
["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true,
["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true,
["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true, ["Ᾱ"] = true, ["Ῑ"] = true,
["Ῡ"] = true, ["Ᾰ"] = true, ["Ῐ"] = true, ["Ῠ"] = true,
}
-- sen en för gemenerna:
gemener = {
["α"] = true, ["ε"] = true, ["η"] = true, ["ι"] = true, ["ο"] = true,
["υ"] = true, ["ω"] = true, ["ᾳ"] = true, ["ῃ"] = true, ["ῳ"] = true,
["ρ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ὰ"] = true, ["ὲ"] = true, ["ὴ"] = true, ["ὶ"] = true,
["ὸ"] = true, ["ὺ"] = true, ["ὼ"] = true, ["ᾲ"] = true, ["ῂ"] = true,
["ῲ"] = true, ["ᾶ"] = true, ["ῆ"] = true, ["ῖ"] = true, ["ῦ"] = true,
["ῶ"] = true, ["ᾷ"] = true, ["ῇ"] = true, ["ῷ"] = true, ["ἀ"] = true,
["ἐ"] = true, ["ἠ"] = true, ["ἰ"] = true, ["ὀ"] = true, ["ὐ"] = true,
["ὠ"] = true, ["ᾀ"] = true, ["ᾐ"] = true, ["ᾠ"] = true, ["ῤ"] = true,
["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true, ["ὄ"] = true,
["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true, ["ᾤ"] = true,
["ἂ"] = true, ["ἒ"] = true, ["ἢ"] = true, ["ἲ"] = true, ["ὂ"] = true,
["ὒ"] = true, ["ὢ"] = true, ["ᾂ"] = true, ["ᾒ"] = true, ["ᾢ"] = true,
["ἆ"] = true, ["ἦ"] = true, ["ἶ"] = true, ["ὖ"] = true, ["ὦ"] = true,
["ᾆ"] = true, ["ᾖ"] = true, ["ᾦ"] = true, ["ἁ"] = true, ["ἑ"] = true,
["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true,
["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true, ["ἅ"] = true,
["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true,
["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true, ["ἃ"] = true,
["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true,
["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true, ["ἇ"] = true,
["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true,
["ᾗ"] = true, ["ᾧ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
["ᾱ"] = true, ["ῑ"] = true, ["ῡ"] = true, ["ᾰ"] = true, ["ῐ"] = true,
["ῠ"] = true,
}
-- sen en tabell för de med akut accent:
akut_accent = {
["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true, ["Ό"] = true,
["Ύ"] = true, ["Ώ"] = true, ["Ἄ"] = true, ["Ἔ"] = true, ["Ἤ"] = true,
["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true, ["ᾌ"] = true, ["ᾜ"] = true,
["ᾬ"] = true, ["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true,
["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true,
["ᾭ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true,
["ὄ"] = true, ["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true,
["ᾤ"] = true, ["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true,
["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true,
["ᾥ"] = true, ["ΐ"] = true, ["ΰ"] = true,
}
-- sen några separata tabeller för att hålla reda på vilken slags bokstav det är
alfa = {
["α"] = true, ["𝛂"] = true, ["𝛼"] = true, ["𝜶"] = true, ["𝝰"] = true,
["𝞪"] = true, ["Α"] = true, ["𝚨"] = true, ["𝛢"] = true, ["𝜜"] = true,
["𝝖"] = true, ["𝞐"] = true, ["ἀ"] = true, ["Ἀ"] = true, ["ἄ"] = true,
["Ἄ"] = true, ["ᾄ"] = true, ["ᾌ"] = true, ["ἂ"] = true, ["Ἂ"] = true,
["ᾂ"] = true, ["ᾊ"] = true, ["ἆ"] = true, ["Ἆ"] = true, ["ᾆ"] = true,
["ᾎ"] = true, ["ᾀ"] = true, ["ᾈ"] = true, ["ἁ"] = true, ["Ἁ"] = true,
["ἅ"] = true, ["Ἅ"] = true, ["ᾅ"] = true, ["ᾍ"] = true, ["ἃ"] = true,
["Ἃ"] = true, ["ᾃ"] = true, ["ᾋ"] = true, ["ἇ"] = true, ["Ἇ"] = true,
["ᾇ"] = true, ["ᾏ"] = true, ["ᾁ"] = true, ["ᾉ"] = true, ["ά"] = true,
["ά"] = true, ["Ά"] = true, ["Ά"] = true, ["ᾴ"] = true, ["ὰ"] = true,
["Ὰ"] = true, ["ᾲ"] = true, ["ᾰ"] = true, ["Ᾰ"] = true, ["ᾶ"] = true,
["ᾷ"] = true, ["ᾱ"] = true, ["Ᾱ"] = true, ["ᾳ"] = true, ["ᾼ"] = true,
}
gamma = {
["γ"] = true, ["𝛄"] = true, ["𝛾"] = true, ["𝜸"] = true, ["𝝲"] = true,
["𝞬"] = true, ["Γ"] = true, ["𝚪"] = true, ["𝛤"] = true, ["𝜞"] = true,
["𝝘"] = true, ["𝞒"] = true, ["ℽ"] = true, ["ℾ"] = true, ["ᵞ"] = true,
["ᵧ"] = true, ["ᴦ"] = true,
}
epsilon = {
["ε"] = true, ["ϵ"] = true, ["𝛆"] = true, ["𝛜"] = true, ["𝜀"] = true,
["𝜖"] = true, ["𝜺"] = true, ["𝝐"] = true, ["𝝴"] = true, ["𝞊"] = true,
["𝞮"] = true, ["𝟄"] = true, ["Ε"] = true, ["𝚬"] = true, ["𝛦"] = true,
["𝜠"] = true, ["𝝚"] = true, ["𝞔"] = true, ["ἐ"] = true, ["Ἐ"] = true,
["ἔ"] = true, ["Ἔ"] = true, ["ἒ"] = true, ["Ἒ"] = true, ["ἑ"] = true,
["Ἑ"] = true, ["ἕ"] = true, ["Ἕ"] = true, ["ἓ"] = true, ["Ἓ"] = true,
["έ"] = true, ["έ"] = true, ["Έ"] = true, ["Έ"] = true, ["ὲ"] = true,
["Ὲ"] = true,
}
eta = {
["η"] = true, ["𝛈"] = true, ["𝜂"] = true, ["𝜼"] = true, ["𝝶"] = true,
["𝞰"] = true, ["Η"] = true, ["𝚮"] = true, ["𝛨"] = true, ["𝜢"] = true,
["𝝜"] = true, ["𝞖"] = true, ["ἠ"] = true, ["Ἠ"] = true, ["ἤ"] = true,
["Ἤ"] = true, ["ᾔ"] = true, ["ᾜ"] = true, ["ἢ"] = true, ["Ἢ"] = true,
["ᾒ"] = true, ["ᾚ"] = true, ["ἦ"] = true, ["Ἦ"] = true, ["ᾖ"] = true,
["ᾞ"] = true, ["ᾐ"] = true, ["ᾘ"] = true, ["ἡ"] = true, ["Ἡ"] = true,
["ἥ"] = true, ["Ἥ"] = true, ["ᾕ"] = true, ["ᾝ"] = true, ["ἣ"] = true,
["Ἣ"] = true, ["ᾓ"] = true, ["ᾛ"] = true, ["ἧ"] = true, ["Ἧ"] = true,
["ᾗ"] = true, ["ᾟ"] = true, ["ᾑ"] = true, ["ᾙ"] = true, ["ή"] = true,
["ή"] = true, ["Ή"] = true, ["Ή"] = true, ["ῄ"] = true, ["ὴ"] = true,
["Ὴ"] = true, ["ῂ"] = true, ["ῆ"] = true, ["ῇ"] = true, ["ῃ"] = true,
["ῌ"] = true,
}
jota = {
["ι"] = true, ["𝛊"] = true, ["𝜄"] = true, ["𝜾"] = true, ["𝝸"] = true,
["𝞲"] = true, ["Ι"] = true, ["𝚰"] = true, ["𝛪"] = true, ["𝜤"] = true,
["𝝞"] = true, ["𝞘"] = true, ["ἰ"] = true, ["Ἰ"] = true, ["ἴ"] = true,
["Ἴ"] = true, ["ἲ"] = true, ["Ἲ"] = true, ["ἶ"] = true, ["Ἶ"] = true,
["ἱ"] = true, ["Ἱ"] = true, ["ἵ"] = true, ["Ἵ"] = true, ["ἳ"] = true,
["Ἳ"] = true, ["ἷ"] = true, ["Ἷ"] = true, ["ί"] = true, ["ί"] = true,
["Ί"] = true, ["Ί"] = true, ["ὶ"] = true, ["Ὶ"] = true, ["ῐ"] = true,
["Ῐ"] = true, ["ῖ"] = true, ["ϊ"] = true, ["Ϊ"] = true, ["ΐ"] = true,
["ΐ"] = true, ["ῒ"] = true, ["ῗ"] = true, ["ῑ"] = true, ["Ῑ"] = true,
["ι"] = true, ["ͺ"] = true,
}
xi = {
["ξ"] = true, ["𝛏"] = true, ["𝜉"] = true, ["𝝃"] = true, ["𝝽"] = true,
["𝞷"] = true, ["Ξ"] = true, ["𝚵"] = true, ["𝛯"] = true, ["𝜩"] = true,
["𝝣"] = true, ["𝞝"] = true,
}
omikron = {
["ο"] = true, ["𝛐"] = true, ["𝜊"] = true, ["𝝄"] = true, ["𝝾"] = true,
["𝞸"] = true, ["Ο"] = true, ["𝚶"] = true, ["𝛰"] = true, ["𝜪"] = true,
["𝝤"] = true, ["𝞞"] = true, ["ὀ"] = true, ["Ὀ"] = true, ["ὄ"] = true,
["Ὄ"] = true, ["ὂ"] = true, ["Ὂ"] = true, ["ὁ"] = true, ["Ὁ"] = true,
["ὅ"] = true, ["Ὅ"] = true, ["ὃ"] = true, ["Ὃ"] = true, ["ό"] = true,
["ό"] = true, ["Ό"] = true, ["Ό"] = true, ["ὸ"] = true, ["Ὸ"] = true,
}
rho = {
["ρ"] = true, ["ϱ"] = true, ["𝛒"] = true, ["𝛠"] = true, ["𝜌"] = true,
["𝜚"] = true, ["𝝆"] = true, ["𝝔"] = true, ["𝞀"] = true, ["𝞎"] = true,
["𝞺"] = true, ["𝟈"] = true, ["Ρ"] = true, ["𝚸"] = true, ["𝛲"] = true,
["𝜬"] = true, ["𝝦"] = true, ["𝞠"] = true, ["ᵨ"] = true, ["ῤ"] = true,
["ῥ"] = true, ["Ῥ"] = true, ["ᴩ"] = true, ["ϼ"] = true,
}
ypsilon = {
["υ"] = true, ["𝛖"] = true, ["𝜐"] = true, ["𝝊"] = true, ["𝞄"] = true,
["𝞾"] = true, ["Υ"] = true, ["ϒ"] = true, ["𝚼"] = true, ["𝛶"] = true,
["𝜰"] = true, ["𝝪"] = true, ["𝞤"] = true, ["ὐ"] = true, ["ὔ"] = true,
["ὒ"] = true, ["ὖ"] = true, ["ὑ"] = true, ["Ὑ"] = true, ["ὕ"] = true,
["Ὕ"] = true, ["ὓ"] = true, ["Ὓ"] = true, ["ὗ"] = true, ["Ὗ"] = true,
["ύ"] = true, ["ύ"] = true, ["Ύ"] = true, ["Ύ"] = true, ["ϓ"] = true,
["ὺ"] = true, ["Ὺ"] = true, ["ῠ"] = true, ["Ῠ"] = true, ["ῦ"] = true,
["ϋ"] = true, ["Ϋ"] = true, ["ϔ"] = true, ["ΰ"] = true, ["ΰ"] = true,
["ῢ"] = true, ["ῧ"] = true, ["ῡ"] = true, ["Ῡ"] = true,
}
chi = {
["χ"] = true, ["𝛘"] = true, ["𝜒"] = true, ["𝝌"] = true, ["𝞆"] = true,
["𝟀"] = true, ["Χ"] = true, ["𝚾"] = true, ["𝛸"] = true, ["𝜲"] = true,
["𝝬"] = true, ["𝞦"] = true, ["ᵡ"] = true, ["ᵪ"] = true
}
omega = {
["ω"] = true, ["𝛚"] = true, ["𝜔"] = true, ["𝝎"] = true, ["𝞈"] = true,
["𝟂"] = true, ["Ω"] = true, ["𝛀"] = true, ["𝛺"] = true, ["𝜴"] = true,
["𝝮"] = true, ["𝞨"] = true, ["ὠ"] = true, ["Ὠ"] = true, ["ὤ"] = true,
["Ὤ"] = true, ["ᾤ"] = true, ["ᾬ"] = true, ["ὢ"] = true, ["Ὢ"] = true,
["ᾢ"] = true, ["ᾪ"] = true, ["ὦ"] = true, ["Ὦ"] = true, ["ᾦ"] = true,
["ᾮ"] = true, ["ᾠ"] = true, ["ᾨ"] = true, ["ὡ"] = true, ["Ὡ"] = true,
["ὥ"] = true, ["Ὥ"] = true, ["ᾥ"] = true, ["ᾭ"] = true, ["ὣ"] = true,
["Ὣ"] = true, ["ᾣ"] = true, ["ᾫ"] = true, ["ὧ"] = true, ["Ὧ"] = true,
["ᾧ"] = true, ["ᾯ"] = true, ["ᾡ"] = true, ["ᾩ"] = true, ["ώ"] = true,
["ώ"] = true, ["Ώ"] = true, ["Ώ"] = true, ["ῴ"] = true, ["ὼ"] = true,
["Ὼ"] = true, ["ῲ"] = true, ["ῶ"] = true, ["ῷ"] = true, ["ῳ"] = true,
["ῼ"] = true, ["ꭥ"] = true, ["Ω"] = true, ["㏀"] = true, ["㏁"] = true,
}
-- de som har två prickar ovanför vokalen
hiatus = {
["Ϊ"] = true, ["Ϋ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
}
-- generera tabellen för de övriga bokstäverna med diverse diakritiska tecken
for i,v in pairs(versaler) do
if(alfa[i]) then
latinska[i] = latinska["Α"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["α"]
end
elseif(epsilon[i]) then
latinska[i] = latinska["Ε"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ε"]
end
elseif(eta[i]) then
latinska[i] = latinska["Η"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["η"]
end
elseif(jota[i]) then
latinska[i] = latinska["Ι"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ι"]
end
elseif(omikron[i]) then
latinska[i] = latinska["Ο"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["Ρ"]
if(spiritus_asper[i]) then
latinska[i] = latinska[i].."h"
end
elseif(ypsilon[i]) then
latinska[i] = latinska["Υ"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["υ"]
end
elseif(omega[i]) then
latinska[i] = latinska["Ω"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ω"]
end
end
end
for i,v in pairs(gemener) do
if(alfa[i]) then
if (akut_accent[i]) then
latinska[i] = "á"
else
latinska[i] = latinska["α"]
end
elseif(epsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "é"
else
latinska[i] = latinska["ε"]
end
elseif(eta[i]) then
if (akut_accent[i]) then
latinska[i] = "ḗ"
else
latinska[i] = latinska["η"]
end
elseif(jota[i]) then
if (akut_accent[i]) then
latinska[i] = "í"
else
latinska[i] = latinska["ι"]
end
elseif(omikron[i]) then
if (akut_accent[i]) then
latinska[i] = "ó"
else
latinska[i] = latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["ρ"]
elseif(ypsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "ý"
else
latinska[i] = latinska["υ"]
end
elseif(omega[i]) then
if (akut_accent[i]) then
latinska[i] = "ṓ"
else
latinska[i] = latinska["ω"]
end
end
if(spiritus_asper[i]) then
if(rho[i]) then
latinska[i] = latinska[i].."h"
else
latinska[i] = "h"..latinska[i]
end
end
end
-- Fem köfunktioner
function enqueue(q, val)
q.last = q.last + 1
q.data[q.last] = val
end
function dequeue(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
q.data[q.first] = nil
q.first = q.first + 1
end
return rval
end
function peekonce(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
end
return rval
end
function peektwice(q)
local rval
if (q.first+1 > q.last) then
rval = -1
else
rval = q.data[q.first+1]
end
return rval
end
function peeklast(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.last]
end
return rval
end
-- Själva transkriberingsfunktionen för forngrekiska
function transkribera_grc(text)
-- Två köer: en för grekiska bokstäver och en för latinska bokstäver
indata = {}
indata.first = 0
indata.last = -1
indata.data = {}
utdata = {}
utdata.first = 0
utdata.last = -1
utdata.data = {}
-- en separat kö att returnera på slutet
local returndata = {}
for c in string.gmatch(text, ".[\128-\191]*") do
enqueue(indata, c)
end
repeat
local x = dequeue(indata)
local y = peekonce(indata)
local z = peektwice(indata)
local u = peeklast(utdata)
if (latinska[x] == nil) then -- icke-grekiskt tecken
enqueue(utdata, x)
-- diverse undantag, startar med "spiritus asper" som del av en diftong
elseif (((u == -1) or string.match(u," ")) and spiritus_asper[y]) then
enqueue(utdata, string.sub(latinska[y],1,1)) -- versalt "H" eller gement "h"
if (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, latinska[x])
end
if ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, string.sub(latinska[y],2))
end
dequeue(indata)
-- sen diftongerna "αυ", "ευ", "ηυ", "ου", "ωυ"
elseif ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
enqueue(utdata, latinska[x])
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
dequeue(indata)
-- sen diftongen "υι"
elseif (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x] and spiritus_asper[x]) then
enqueue(utdata, "hú")
elseif(akut_accent[x]) then
enqueue(utdata, "ú")
elseif(spiritus_asper[x]) then
enqueue(utdata, "hu")
else
enqueue(utdata, "u")
end
enqueue(utdata, latinska[y])
dequeue(indata)
-- sen bokstavsföljden "γγ"
elseif (gamma[x] and gamma[y]) then
enqueue(utdata,"n")
enqueue(utdata,latinska["γ"])
dequeue(indata)
-- sen bokstavsföljden "γξ"
elseif (gamma[x] and xi[y]) then
enqueue(utdata,"n")
enqueue(utdata,latinska["ξ"])
dequeue(indata)
-- sen bokstavsföljden "γχ"
elseif (gamma[x] and chi[y]) then
enqueue(utdata,"n")
enqueue(utdata,latinska["χ"])
dequeue(indata)
-- sen, när "spiritus asper" hanteras med modifierare
elseif (string.match(y,"̔")) then
enqueue(utdata, "h") -- TODO!!! Kan detta vara versalt "H"? Diftonger?
enqueue(utdata, latinska[x])
dequeue(indata)
else
enqueue(utdata, latinska[x])
end
until (indata.first > indata.last)
repeat
local x = dequeue(utdata)
table.insert(returndata,x)
until (utdata.first > utdata.last)
return returndata
end
--[[
function export.transkribera( argument )
local text = argument.args["text"]
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
--]]
function export.tr( argument )
local text = argument
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
return export
bh9gumv8feln4ynnxcun7t7cl0zh7vi
3703233
3703225
2022-08-18T14:26:01Z
Gabbe
1153
la till särvariant av beta
Scribunto
text/plain
-- Denna modul används för att transkribera antik grekiska till svenska.
--
-- För att transkribera modern grekiska kan ett liknande system användas.
-- Det hanteras dock av särskilda moduler. Se:
--
-- [TODO]
--
--
-- Denna modul strävar efter att följa det system som används av
-- "Library of Congress". Det finns i skrivande stund beskrivet här:
--
-- https://www.loc.gov/catdir/cpso/romanization/greek.pdf
--
-- Några avsteg har gjorts för att bättre reflektera hur orden vanligen
-- transkriberas till svenska. Exempelvis förvandlas φρόνησις till "frónēsis",
-- inte "phronēsis".
--
-- Notera att det finns andra sätt för att transkribera forngrekiska.
-- Notera även att denna modul inte (ännu) hanterar skriftsystem som Linear B
-- eller den cypriska stavelseskriften.
--
-- Lägg också märke till att denna version av modulen hanterar de flesta
-- diakriter på ett ganska styvmoderligt sätt. Framtida versioner kan
-- (och bör) göra detta mer nyanserat.
--
--
-- Denna modul används av följande mall:
-- {{tr}}
--
-- Kända brister
-- * Bokstavskombinationer av typen "γκ"
--
-- Modulen är författad av (och underhålls av) [[Användare:Gabbe]]
local export = {}
latinska = {}
-- börja med de vanliga bokstäverna
latinska["Α"]="A"; latinska["α"]="a"
latinska["Β"]="B"; latinska["β"]="b"
latinska["Γ"]="G"; latinska["γ"]="g"
latinska["Δ"]="D"; latinska["δ"]="d"
latinska["Ε"]="E"; latinska["ε"]="e"
latinska["Ζ"]="Z"; latinska["ζ"]="z"
latinska["Η"]="Ē"; latinska["η"]="ē"
latinska["Θ"]="Th"; latinska["θ"]="th"
latinska["Ι"]="I"; latinska["ι"]="i"
latinska["Κ"]="K"; latinska["κ"]="k"
latinska["Λ"]="L"; latinska["λ"]="l"
latinska["Μ"]="M"; latinska["μ"]="m"
latinska["Ν"]="N"; latinska["ν"]="n"
latinska["Ξ"]="X"; latinska["ξ"]="x"
latinska["Ο"]="O"; latinska["ο"]="o"
latinska["Π"]="P"; latinska["π"]="p"
latinska["Ρ"]="R"; latinska["ρ"]="r"
latinska["Σ"]="S"; latinska["σ"]="s"; latinska["ς"]="s"
latinska["Τ"]="T"; latinska["τ"]="t"
latinska["Υ"]="Y"; latinska["υ"]="y"
latinska["Φ"]="F"; latinska["φ"]="f"
latinska["Χ"]="Ch"; latinska["χ"]="ch"
latinska["Ψ"]="Ps"; latinska["ψ"]="ps"
latinska["Ω"]="Ō"; latinska["ω"]="ō"
-- särvariant av sigma
latinska["Ϲ"]="S"; latinska["ϲ"]="s"
-- särvariant av beta
latinska["ϐ"]="b"
-- två arkaiska bokstäver
latinska["Ϝ"]="W"; latinska["ϝ"]="w"
latinska["Ϙ"]="Ḳ"; latinska["ϙ"]="ḳ"
-- sen en separat tabell för att hålla reda på vilka som har "spiritus asper":
spiritus_asper = {
["Ἁ"] = true, ["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true, ["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true, ["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true, ["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true,
["ἁ"] = true, ["ἑ"] = true, ["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true, ["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true,
["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true,
["ἃ"] = true, ["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true, ["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true,
["ἇ"] = true, ["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true, ["ᾗ"] = true, ["ᾧ"] = true,
}
-- sen en separat tabell för versalerna:
versaler = {
["Α"] = true, ["Ε"] = true, ["Η"] = true, ["Ι"] = true, ["Ο"] = true,
["Υ"] = true, ["Ω"] = true, ["ᾼ"] = true, ["ῌ"] = true, ["ῼ"] = true,
["Ρ"] = true, ["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true,
["Ό"] = true, ["Ύ"] = true, ["Ώ"] = true, ["Ὰ"] = true, ["Ὲ"] = true,
["Ὴ"] = true, ["Ὶ"] = true, ["Ὸ"] = true, ["Ὺ"] = true, ["Ὼ"] = true,
["Ἀ"] = true, ["Ἐ"] = true, ["Ἠ"] = true, ["Ἰ"] = true, ["Ὀ"] = true,
["Ὠ"] = true, ["ᾈ"] = true, ["ᾘ"] = true, ["ᾨ"] = true, ["Ἄ"] = true,
["Ἔ"] = true, ["Ἤ"] = true, ["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true,
["ᾌ"] = true, ["ᾜ"] = true, ["ᾬ"] = true, ["Ἂ"] = true, ["Ἒ"] = true,
["Ἢ"] = true, ["Ἲ"] = true, ["Ὂ"] = true, ["Ὢ"] = true, ["ᾊ"] = true,
["ᾚ"] = true, ["ᾪ"] = true, ["Ἆ"] = true, ["Ἦ"] = true, ["Ἶ"] = true,
["Ὦ"] = true, ["ᾎ"] = true, ["ᾞ"] = true, ["ᾮ"] = true, ["Ἁ"] = true,
["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true,
["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true,
["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true,
["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true,
["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true, ["Ᾱ"] = true, ["Ῑ"] = true,
["Ῡ"] = true, ["Ᾰ"] = true, ["Ῐ"] = true, ["Ῠ"] = true,
}
-- sen en för gemenerna:
gemener = {
["α"] = true, ["ε"] = true, ["η"] = true, ["ι"] = true, ["ο"] = true,
["υ"] = true, ["ω"] = true, ["ᾳ"] = true, ["ῃ"] = true, ["ῳ"] = true,
["ρ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ὰ"] = true, ["ὲ"] = true, ["ὴ"] = true, ["ὶ"] = true,
["ὸ"] = true, ["ὺ"] = true, ["ὼ"] = true, ["ᾲ"] = true, ["ῂ"] = true,
["ῲ"] = true, ["ᾶ"] = true, ["ῆ"] = true, ["ῖ"] = true, ["ῦ"] = true,
["ῶ"] = true, ["ᾷ"] = true, ["ῇ"] = true, ["ῷ"] = true, ["ἀ"] = true,
["ἐ"] = true, ["ἠ"] = true, ["ἰ"] = true, ["ὀ"] = true, ["ὐ"] = true,
["ὠ"] = true, ["ᾀ"] = true, ["ᾐ"] = true, ["ᾠ"] = true, ["ῤ"] = true,
["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true, ["ὄ"] = true,
["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true, ["ᾤ"] = true,
["ἂ"] = true, ["ἒ"] = true, ["ἢ"] = true, ["ἲ"] = true, ["ὂ"] = true,
["ὒ"] = true, ["ὢ"] = true, ["ᾂ"] = true, ["ᾒ"] = true, ["ᾢ"] = true,
["ἆ"] = true, ["ἦ"] = true, ["ἶ"] = true, ["ὖ"] = true, ["ὦ"] = true,
["ᾆ"] = true, ["ᾖ"] = true, ["ᾦ"] = true, ["ἁ"] = true, ["ἑ"] = true,
["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true,
["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true, ["ἅ"] = true,
["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true,
["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true, ["ἃ"] = true,
["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true,
["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true, ["ἇ"] = true,
["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true,
["ᾗ"] = true, ["ᾧ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
["ᾱ"] = true, ["ῑ"] = true, ["ῡ"] = true, ["ᾰ"] = true, ["ῐ"] = true,
["ῠ"] = true,
}
-- sen en tabell för de med akut accent:
akut_accent = {
["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true, ["Ό"] = true,
["Ύ"] = true, ["Ώ"] = true, ["Ἄ"] = true, ["Ἔ"] = true, ["Ἤ"] = true,
["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true, ["ᾌ"] = true, ["ᾜ"] = true,
["ᾬ"] = true, ["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true,
["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true,
["ᾭ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true,
["ὄ"] = true, ["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true,
["ᾤ"] = true, ["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true,
["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true,
["ᾥ"] = true, ["ΐ"] = true, ["ΰ"] = true,
}
-- sen några separata tabeller för att hålla reda på vilken slags bokstav det är
alfa = {
["α"] = true, ["𝛂"] = true, ["𝛼"] = true, ["𝜶"] = true, ["𝝰"] = true,
["𝞪"] = true, ["Α"] = true, ["𝚨"] = true, ["𝛢"] = true, ["𝜜"] = true,
["𝝖"] = true, ["𝞐"] = true, ["ἀ"] = true, ["Ἀ"] = true, ["ἄ"] = true,
["Ἄ"] = true, ["ᾄ"] = true, ["ᾌ"] = true, ["ἂ"] = true, ["Ἂ"] = true,
["ᾂ"] = true, ["ᾊ"] = true, ["ἆ"] = true, ["Ἆ"] = true, ["ᾆ"] = true,
["ᾎ"] = true, ["ᾀ"] = true, ["ᾈ"] = true, ["ἁ"] = true, ["Ἁ"] = true,
["ἅ"] = true, ["Ἅ"] = true, ["ᾅ"] = true, ["ᾍ"] = true, ["ἃ"] = true,
["Ἃ"] = true, ["ᾃ"] = true, ["ᾋ"] = true, ["ἇ"] = true, ["Ἇ"] = true,
["ᾇ"] = true, ["ᾏ"] = true, ["ᾁ"] = true, ["ᾉ"] = true, ["ά"] = true,
["ά"] = true, ["Ά"] = true, ["Ά"] = true, ["ᾴ"] = true, ["ὰ"] = true,
["Ὰ"] = true, ["ᾲ"] = true, ["ᾰ"] = true, ["Ᾰ"] = true, ["ᾶ"] = true,
["ᾷ"] = true, ["ᾱ"] = true, ["Ᾱ"] = true, ["ᾳ"] = true, ["ᾼ"] = true,
}
gamma = {
["γ"] = true, ["𝛄"] = true, ["𝛾"] = true, ["𝜸"] = true, ["𝝲"] = true,
["𝞬"] = true, ["Γ"] = true, ["𝚪"] = true, ["𝛤"] = true, ["𝜞"] = true,
["𝝘"] = true, ["𝞒"] = true, ["ℽ"] = true, ["ℾ"] = true, ["ᵞ"] = true,
["ᵧ"] = true, ["ᴦ"] = true,
}
epsilon = {
["ε"] = true, ["ϵ"] = true, ["𝛆"] = true, ["𝛜"] = true, ["𝜀"] = true,
["𝜖"] = true, ["𝜺"] = true, ["𝝐"] = true, ["𝝴"] = true, ["𝞊"] = true,
["𝞮"] = true, ["𝟄"] = true, ["Ε"] = true, ["𝚬"] = true, ["𝛦"] = true,
["𝜠"] = true, ["𝝚"] = true, ["𝞔"] = true, ["ἐ"] = true, ["Ἐ"] = true,
["ἔ"] = true, ["Ἔ"] = true, ["ἒ"] = true, ["Ἒ"] = true, ["ἑ"] = true,
["Ἑ"] = true, ["ἕ"] = true, ["Ἕ"] = true, ["ἓ"] = true, ["Ἓ"] = true,
["έ"] = true, ["έ"] = true, ["Έ"] = true, ["Έ"] = true, ["ὲ"] = true,
["Ὲ"] = true,
}
eta = {
["η"] = true, ["𝛈"] = true, ["𝜂"] = true, ["𝜼"] = true, ["𝝶"] = true,
["𝞰"] = true, ["Η"] = true, ["𝚮"] = true, ["𝛨"] = true, ["𝜢"] = true,
["𝝜"] = true, ["𝞖"] = true, ["ἠ"] = true, ["Ἠ"] = true, ["ἤ"] = true,
["Ἤ"] = true, ["ᾔ"] = true, ["ᾜ"] = true, ["ἢ"] = true, ["Ἢ"] = true,
["ᾒ"] = true, ["ᾚ"] = true, ["ἦ"] = true, ["Ἦ"] = true, ["ᾖ"] = true,
["ᾞ"] = true, ["ᾐ"] = true, ["ᾘ"] = true, ["ἡ"] = true, ["Ἡ"] = true,
["ἥ"] = true, ["Ἥ"] = true, ["ᾕ"] = true, ["ᾝ"] = true, ["ἣ"] = true,
["Ἣ"] = true, ["ᾓ"] = true, ["ᾛ"] = true, ["ἧ"] = true, ["Ἧ"] = true,
["ᾗ"] = true, ["ᾟ"] = true, ["ᾑ"] = true, ["ᾙ"] = true, ["ή"] = true,
["ή"] = true, ["Ή"] = true, ["Ή"] = true, ["ῄ"] = true, ["ὴ"] = true,
["Ὴ"] = true, ["ῂ"] = true, ["ῆ"] = true, ["ῇ"] = true, ["ῃ"] = true,
["ῌ"] = true,
}
jota = {
["ι"] = true, ["𝛊"] = true, ["𝜄"] = true, ["𝜾"] = true, ["𝝸"] = true,
["𝞲"] = true, ["Ι"] = true, ["𝚰"] = true, ["𝛪"] = true, ["𝜤"] = true,
["𝝞"] = true, ["𝞘"] = true, ["ἰ"] = true, ["Ἰ"] = true, ["ἴ"] = true,
["Ἴ"] = true, ["ἲ"] = true, ["Ἲ"] = true, ["ἶ"] = true, ["Ἶ"] = true,
["ἱ"] = true, ["Ἱ"] = true, ["ἵ"] = true, ["Ἵ"] = true, ["ἳ"] = true,
["Ἳ"] = true, ["ἷ"] = true, ["Ἷ"] = true, ["ί"] = true, ["ί"] = true,
["Ί"] = true, ["Ί"] = true, ["ὶ"] = true, ["Ὶ"] = true, ["ῐ"] = true,
["Ῐ"] = true, ["ῖ"] = true, ["ϊ"] = true, ["Ϊ"] = true, ["ΐ"] = true,
["ΐ"] = true, ["ῒ"] = true, ["ῗ"] = true, ["ῑ"] = true, ["Ῑ"] = true,
["ι"] = true, ["ͺ"] = true,
}
xi = {
["ξ"] = true, ["𝛏"] = true, ["𝜉"] = true, ["𝝃"] = true, ["𝝽"] = true,
["𝞷"] = true, ["Ξ"] = true, ["𝚵"] = true, ["𝛯"] = true, ["𝜩"] = true,
["𝝣"] = true, ["𝞝"] = true,
}
omikron = {
["ο"] = true, ["𝛐"] = true, ["𝜊"] = true, ["𝝄"] = true, ["𝝾"] = true,
["𝞸"] = true, ["Ο"] = true, ["𝚶"] = true, ["𝛰"] = true, ["𝜪"] = true,
["𝝤"] = true, ["𝞞"] = true, ["ὀ"] = true, ["Ὀ"] = true, ["ὄ"] = true,
["Ὄ"] = true, ["ὂ"] = true, ["Ὂ"] = true, ["ὁ"] = true, ["Ὁ"] = true,
["ὅ"] = true, ["Ὅ"] = true, ["ὃ"] = true, ["Ὃ"] = true, ["ό"] = true,
["ό"] = true, ["Ό"] = true, ["Ό"] = true, ["ὸ"] = true, ["Ὸ"] = true,
}
rho = {
["ρ"] = true, ["ϱ"] = true, ["𝛒"] = true, ["𝛠"] = true, ["𝜌"] = true,
["𝜚"] = true, ["𝝆"] = true, ["𝝔"] = true, ["𝞀"] = true, ["𝞎"] = true,
["𝞺"] = true, ["𝟈"] = true, ["Ρ"] = true, ["𝚸"] = true, ["𝛲"] = true,
["𝜬"] = true, ["𝝦"] = true, ["𝞠"] = true, ["ᵨ"] = true, ["ῤ"] = true,
["ῥ"] = true, ["Ῥ"] = true, ["ᴩ"] = true, ["ϼ"] = true,
}
ypsilon = {
["υ"] = true, ["𝛖"] = true, ["𝜐"] = true, ["𝝊"] = true, ["𝞄"] = true,
["𝞾"] = true, ["Υ"] = true, ["ϒ"] = true, ["𝚼"] = true, ["𝛶"] = true,
["𝜰"] = true, ["𝝪"] = true, ["𝞤"] = true, ["ὐ"] = true, ["ὔ"] = true,
["ὒ"] = true, ["ὖ"] = true, ["ὑ"] = true, ["Ὑ"] = true, ["ὕ"] = true,
["Ὕ"] = true, ["ὓ"] = true, ["Ὓ"] = true, ["ὗ"] = true, ["Ὗ"] = true,
["ύ"] = true, ["ύ"] = true, ["Ύ"] = true, ["Ύ"] = true, ["ϓ"] = true,
["ὺ"] = true, ["Ὺ"] = true, ["ῠ"] = true, ["Ῠ"] = true, ["ῦ"] = true,
["ϋ"] = true, ["Ϋ"] = true, ["ϔ"] = true, ["ΰ"] = true, ["ΰ"] = true,
["ῢ"] = true, ["ῧ"] = true, ["ῡ"] = true, ["Ῡ"] = true,
}
chi = {
["χ"] = true, ["𝛘"] = true, ["𝜒"] = true, ["𝝌"] = true, ["𝞆"] = true,
["𝟀"] = true, ["Χ"] = true, ["𝚾"] = true, ["𝛸"] = true, ["𝜲"] = true,
["𝝬"] = true, ["𝞦"] = true, ["ᵡ"] = true, ["ᵪ"] = true
}
omega = {
["ω"] = true, ["𝛚"] = true, ["𝜔"] = true, ["𝝎"] = true, ["𝞈"] = true,
["𝟂"] = true, ["Ω"] = true, ["𝛀"] = true, ["𝛺"] = true, ["𝜴"] = true,
["𝝮"] = true, ["𝞨"] = true, ["ὠ"] = true, ["Ὠ"] = true, ["ὤ"] = true,
["Ὤ"] = true, ["ᾤ"] = true, ["ᾬ"] = true, ["ὢ"] = true, ["Ὢ"] = true,
["ᾢ"] = true, ["ᾪ"] = true, ["ὦ"] = true, ["Ὦ"] = true, ["ᾦ"] = true,
["ᾮ"] = true, ["ᾠ"] = true, ["ᾨ"] = true, ["ὡ"] = true, ["Ὡ"] = true,
["ὥ"] = true, ["Ὥ"] = true, ["ᾥ"] = true, ["ᾭ"] = true, ["ὣ"] = true,
["Ὣ"] = true, ["ᾣ"] = true, ["ᾫ"] = true, ["ὧ"] = true, ["Ὧ"] = true,
["ᾧ"] = true, ["ᾯ"] = true, ["ᾡ"] = true, ["ᾩ"] = true, ["ώ"] = true,
["ώ"] = true, ["Ώ"] = true, ["Ώ"] = true, ["ῴ"] = true, ["ὼ"] = true,
["Ὼ"] = true, ["ῲ"] = true, ["ῶ"] = true, ["ῷ"] = true, ["ῳ"] = true,
["ῼ"] = true, ["ꭥ"] = true, ["Ω"] = true, ["㏀"] = true, ["㏁"] = true,
}
-- de som har två prickar ovanför vokalen
hiatus = {
["Ϊ"] = true, ["Ϋ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
}
-- generera tabellen för de övriga bokstäverna med diverse diakritiska tecken
for i,v in pairs(versaler) do
if(alfa[i]) then
latinska[i] = latinska["Α"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["α"]
end
elseif(epsilon[i]) then
latinska[i] = latinska["Ε"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ε"]
end
elseif(eta[i]) then
latinska[i] = latinska["Η"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["η"]
end
elseif(jota[i]) then
latinska[i] = latinska["Ι"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ι"]
end
elseif(omikron[i]) then
latinska[i] = latinska["Ο"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["Ρ"]
if(spiritus_asper[i]) then
latinska[i] = latinska[i].."h"
end
elseif(ypsilon[i]) then
latinska[i] = latinska["Υ"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["υ"]
end
elseif(omega[i]) then
latinska[i] = latinska["Ω"]
if(spiritus_asper[i]) then
latinska[i] = "H"..latinska["ω"]
end
end
end
for i,v in pairs(gemener) do
if(alfa[i]) then
if (akut_accent[i]) then
latinska[i] = "á"
else
latinska[i] = latinska["α"]
end
elseif(epsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "é"
else
latinska[i] = latinska["ε"]
end
elseif(eta[i]) then
if (akut_accent[i]) then
latinska[i] = "ḗ"
else
latinska[i] = latinska["η"]
end
elseif(jota[i]) then
if (akut_accent[i]) then
latinska[i] = "í"
else
latinska[i] = latinska["ι"]
end
elseif(omikron[i]) then
if (akut_accent[i]) then
latinska[i] = "ó"
else
latinska[i] = latinska["ο"]
end
elseif(rho[i]) then
latinska[i] = latinska["ρ"]
elseif(ypsilon[i]) then
if (akut_accent[i]) then
latinska[i] = "ý"
else
latinska[i] = latinska["υ"]
end
elseif(omega[i]) then
if (akut_accent[i]) then
latinska[i] = "ṓ"
else
latinska[i] = latinska["ω"]
end
end
if(spiritus_asper[i]) then
if(rho[i]) then
latinska[i] = latinska[i].."h"
else
latinska[i] = "h"..latinska[i]
end
end
end
-- Fem köfunktioner
function enqueue(q, val)
q.last = q.last + 1
q.data[q.last] = val
end
function dequeue(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
q.data[q.first] = nil
q.first = q.first + 1
end
return rval
end
function peekonce(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.first]
end
return rval
end
function peektwice(q)
local rval
if (q.first+1 > q.last) then
rval = -1
else
rval = q.data[q.first+1]
end
return rval
end
function peeklast(q)
local rval
if (q.first > q.last) then
rval = -1
else
rval = q.data[q.last]
end
return rval
end
-- Själva transkriberingsfunktionen för forngrekiska
function transkribera_grc(text)
-- Två köer: en för grekiska bokstäver och en för latinska bokstäver
indata = {}
indata.first = 0
indata.last = -1
indata.data = {}
utdata = {}
utdata.first = 0
utdata.last = -1
utdata.data = {}
-- en separat kö att returnera på slutet
local returndata = {}
for c in string.gmatch(text, ".[\128-\191]*") do
enqueue(indata, c)
end
repeat
local x = dequeue(indata)
local y = peekonce(indata)
local z = peektwice(indata)
local u = peeklast(utdata)
if (latinska[x] == nil) then -- icke-grekiskt tecken
enqueue(utdata, x)
-- diverse undantag, startar med "spiritus asper" som del av en diftong
elseif (((u == -1) or string.match(u," ")) and spiritus_asper[y]) then
enqueue(utdata, string.sub(latinska[y],1,1)) -- versalt "H" eller gement "h"
if (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, latinska[x])
end
if ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
else
enqueue(utdata, string.sub(latinska[y],2))
end
dequeue(indata)
-- sen diftongerna "αυ", "ευ", "ηυ", "ου", "ωυ"
elseif ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
enqueue(utdata, latinska[x])
if(akut_accent[y]) then
enqueue(utdata, "ú")
else
enqueue(utdata, "u")
end
dequeue(indata)
-- sen diftongen "υι"
elseif (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(akut_accent[x] and spiritus_asper[x]) then
enqueue(utdata, "hú")
elseif(akut_accent[x]) then
enqueue(utdata, "ú")
elseif(spiritus_asper[x]) then
enqueue(utdata, "hu")
else
enqueue(utdata, "u")
end
enqueue(utdata, latinska[y])
dequeue(indata)
-- sen bokstavsföljden "γγ"
elseif (gamma[x] and gamma[y]) then
enqueue(utdata,"n")
enqueue(utdata,latinska["γ"])
dequeue(indata)
-- sen bokstavsföljden "γξ"
elseif (gamma[x] and xi[y]) then
enqueue(utdata,"n")
enqueue(utdata,latinska["ξ"])
dequeue(indata)
-- sen bokstavsföljden "γχ"
elseif (gamma[x] and chi[y]) then
enqueue(utdata,"n")
enqueue(utdata,latinska["χ"])
dequeue(indata)
-- sen, när "spiritus asper" hanteras med modifierare
elseif (string.match(y,"̔")) then
enqueue(utdata, "h") -- TODO!!! Kan detta vara versalt "H"? Diftonger?
enqueue(utdata, latinska[x])
dequeue(indata)
else
enqueue(utdata, latinska[x])
end
until (indata.first > indata.last)
repeat
local x = dequeue(utdata)
table.insert(returndata,x)
until (utdata.first > utdata.last)
return returndata
end
--[[
function export.transkribera( argument )
local text = argument.args["text"]
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
--]]
function export.tr( argument )
local text = argument
outputdata = transkribera_grc(text)
outputtext = table.concat(outputdata,"")
return outputtext
end
return export
nawaborz1hjwukq56ofms54rth4rhgo
Modul:translit
828
928924
3703211
3703185
2022-08-18T12:19:45Z
Gabbe
1153
lägger till även "grc" på prov
Scribunto
text/plain
-- Denna modul fungerar som ett "paraply" för mer specifika transkriberingsmoduler.
-- Dessa har alla namn av formatet "Modul:translit/[språkkod]"
--
-- Syftet med denna modul är att kunna åberopas av mallen {{tr}}
-- samt eventuellt av andra moduler
local export = {}
export.available_lang = function ( lang )
working_lang = {
["ru"] = true, ["be"] = true, ["bg"] = true, ["uk"] = true,
["grc"] = true, --["ar"] = true,
}
return not (not working_lang[lang])
end
export.tr = function ( argument )
local langcode = argument.args["lang"]
local text = argument.args["text"]
local utdata = ""
if export.available_lang(langcode) then
local tr_modul = require("Modul:translit/"..langcode)
utdata = tr_modul.tr (text)
end--if
return utdata
end
return export
8yq1qird0v3be9g53c1gxj7zj43oi8x
Modul:translit/ru/test
828
928999
3703300
3703157
2022-08-19T00:03:36Z
Dodde
309
börjar på tester för isolerade tecken, börjar på tester för ord med bara versaler vs ord med både versaler och gemener som innehåller tecken som translittereras till mutipla tecken
Scribunto
text/plain
local t = require("Modul:UnitTests")
local mut = require("Modul:translit/ru")
function t:test1_isolated_uppercase_characters()
self:equals('mut.tr("А,Б,В,Г,Д")', mut.tr("А,Б,В,Г,Д"), "A,B,V,G,D")
self:equals('mut.tr("Е,Ё,Ж,З,И")', mut.tr("Е,Ё,Ж,З,И"), "JE,JO,ZJ,Z,I")
-- etc...
end
function t:test2_isolated_lowercase_characters()
self:equals('mut.tr("а,б,в,г,д")', mut.tr("а,б,в,г,д"), "a,b,v,g,d")
self:equals('mut.tr("е,ё,ж,з,и")', mut.tr("е,ё,ж,з,и"), "je,jo,zj,z,i")
-- etc...
end
function t:test3_uppercase_vs_mixedcase_words()
self:equals('mut.tr("ЖА,Жa")', mut.tr("ЖА,Жa"), "ZJA,Zja")
-- etc... (alla tecken som translittererar till multipla tecken)
end
function t:test4_example()
self:equals('mut.tr("Горбачёв")', mut.tr("Горбачёв"), "Gorbatjóv")
end
function t:test5_example() -- de från Svenska skrivregler
self:equals('mut.tr("Анна")', mut.tr("Анна"), "Anna")
self:equals('mut.tr("Борис")', mut.tr("Борис"), "Boris")
self:equals('mut.tr("Волга")', mut.tr("Волга"), "Volga")
self:equals('mut.tr("Горький")', mut.tr("Горький"), "Gorkij")
self:equals('mut.tr("Дон")', mut.tr("Дон"), "Don")
self:equals('mut.tr("Афанасьев")', mut.tr("Афанасьев"), "Afanasiev")
self:equals('mut.tr("Днепр")', mut.tr("Днепр"), "Dnepr")
self:equals('mut.tr("Евгений")', mut.tr("Евгений"), "Jevgenij")
self:equals('mut.tr("Алексеев")', mut.tr("Алексеев"), "Aleksejev")
self:equals('mut.tr("Кондратьев")', mut.tr("Кондратьев"), "Kondratiev")
self:equals('mut.tr("Чёрный")', mut.tr("Чёрный"), "Tjórnyj")
self:equals('mut.tr("Аксёнов")', mut.tr("Аксёнов"), "Aksiónov")
self:equals('mut.tr("Фёдор")', mut.tr("Фёдор"), "Fjódor")
self:equals('mut.tr("Пётр")', mut.tr("Пётр"), "Pjotr")
self:equals('mut.tr("Зёрнов")', mut.tr("Зёрнов"), "Ziórnov")
self:equals('mut.tr("Щёлкин")', mut.tr("Щёлкин"), "Sjtjólkin")
self:equals('mut.tr("Жуковский")', mut.tr("Жуковский"), "Zjukovskij")
self:equals('mut.tr("Замятин")', mut.tr("Замятин"), "Zamjatin")
self:equals('mut.tr("Ирина")', mut.tr("Ирина"), "Irina")
self:equals('mut.tr("Толстой")', mut.tr("Толстой"), "Tolstoj")
self:equals('mut.tr("Куприн")', mut.tr("Куприн"), "Kuprin")
self:equals('mut.tr("Лесков")', mut.tr("Лесков"), "Leskov")
self:equals('mut.tr("Максим")', mut.tr("Максим"), "Maksim")
self:equals('mut.tr("Надя")', mut.tr("Надя"), "Nadja")
self:equals('mut.tr("Онега")', mut.tr("Онега"), "Onega")
self:equals('mut.tr("Пушкин")', mut.tr("Пушкин"), "Pusjkin")
self:equals('mut.tr("Ростропович")', mut.tr("Ростропович"), "Rostropovitj")
self:equals('mut.tr("Самара")', mut.tr("Самара"), "Samara")
self:equals('mut.tr("Толстой")', mut.tr("Толстой"), "Tolstoj")
self:equals('mut.tr("Устинов")', mut.tr("Устинов"), "Ustinov")
self:equals('mut.tr("Фёдор")', mut.tr("Фёдор"), "Fjódor")
self:equals('mut.tr("Тихонов")', mut.tr("Тихонов"), "Tichonov")
self:equals('mut.tr("Донец")', mut.tr("Донец"), "Donets")
self:equals('mut.tr("Чайковский")', mut.tr("Чайковский"), "Tjajkovskij")
self:equals('mut.tr("Шостакович")', mut.tr("Шостакович"), "Sjostakovitj")
self:equals('mut.tr("Щедрин")', mut.tr("Щедрин"), "Sjtjedrin")
self:equals('mut.tr("Подъячев")', mut.tr("Подъячев"), "Podjatjev")
self:equals('mut.tr("Белый")', mut.tr("Белый"), "Belyj")
self:equals('mut.tr("Ильич")', mut.tr("Ильич"), "Iljitj")
self:equals('mut.tr("Игорь")', mut.tr("Игорь"), "Igor")
self:equals('mut.tr("Эдуард")', mut.tr("Эдуард"), "Eduard")
self:equals('mut.tr("Юрий")', mut.tr("Юрий"), "Jurij")
self:equals('mut.tr("Актюбинск")', mut.tr("Актюбинск"), "Aktiubinsk")
self:equals('mut.tr("Союз")', mut.tr("Союз"), "Sojuz")
self:equals('mut.tr("Татьяна")', mut.tr("Татьяна"), "Tatiana")
self:equals('mut.tr("Зябков")', mut.tr("Зябков"), "Ziabkov")
self:equals('mut.tr("Ярослав")', mut.tr("Ярослав"), "Jaroslav")
end
return t
ai4bduh541ev5iegd0swa4ebi9m443b
3703351
3703300
2022-08-19T09:36:43Z
Dodde
309
korrigerar förväntade testresultat enligt vad som förklarats på diskussionssidan (Ж -> Zj, inte ZJ, oavsett ordets övriga tecken är versaler eller gemener)
Scribunto
text/plain
local t = require("Modul:UnitTests")
local mut = require("Modul:translit/ru")
function t:test1_isolated_uppercase_characters()
self:equals('mut.tr("А,Б,В,Г,Д")', mut.tr("А,Б,В,Г,Д"), "A,B,V,G,D")
self:equals('mut.tr("Е,Ё,Ж,З,И")', mut.tr("Е,Ё,Ж,З,И"), "Je,Jo,Zj,Z,I")
-- etc...
end
function t:test2_isolated_lowercase_characters()
self:equals('mut.tr("а,б,в,г,д")', mut.tr("а,б,в,г,д"), "a,b,v,g,d")
self:equals('mut.tr("е,ё,ж,з,и")', mut.tr("е,ё,ж,з,и"), "je,jo,zj,z,i")
-- etc...
end
function t:test3_uppercase_vs_mixedcase_words()
self:equals('mut.tr("ЖА,Жa")', mut.tr("ЖА,Жa"), "ZjA,Zja")
-- etc... (alla tecken som translittererar till multipla tecken)
end
function t:test4_example()
self:equals('mut.tr("Горбачёв")', mut.tr("Горбачёв"), "Gorbatjóv")
end
function t:test5_example() -- de från Svenska skrivregler
self:equals('mut.tr("Анна")', mut.tr("Анна"), "Anna")
self:equals('mut.tr("Борис")', mut.tr("Борис"), "Boris")
self:equals('mut.tr("Волга")', mut.tr("Волга"), "Volga")
self:equals('mut.tr("Горький")', mut.tr("Горький"), "Gorkij")
self:equals('mut.tr("Дон")', mut.tr("Дон"), "Don")
self:equals('mut.tr("Афанасьев")', mut.tr("Афанасьев"), "Afanasiev")
self:equals('mut.tr("Днепр")', mut.tr("Днепр"), "Dnepr")
self:equals('mut.tr("Евгений")', mut.tr("Евгений"), "Jevgenij")
self:equals('mut.tr("Алексеев")', mut.tr("Алексеев"), "Aleksejev")
self:equals('mut.tr("Кондратьев")', mut.tr("Кондратьев"), "Kondratiev")
self:equals('mut.tr("Чёрный")', mut.tr("Чёрный"), "Tjórnyj")
self:equals('mut.tr("Аксёнов")', mut.tr("Аксёнов"), "Aksiónov")
self:equals('mut.tr("Фёдор")', mut.tr("Фёдор"), "Fjódor")
self:equals('mut.tr("Пётр")', mut.tr("Пётр"), "Pjotr")
self:equals('mut.tr("Зёрнов")', mut.tr("Зёрнов"), "Ziórnov")
self:equals('mut.tr("Щёлкин")', mut.tr("Щёлкин"), "Sjtjólkin")
self:equals('mut.tr("Жуковский")', mut.tr("Жуковский"), "Zjukovskij")
self:equals('mut.tr("Замятин")', mut.tr("Замятин"), "Zamjatin")
self:equals('mut.tr("Ирина")', mut.tr("Ирина"), "Irina")
self:equals('mut.tr("Толстой")', mut.tr("Толстой"), "Tolstoj")
self:equals('mut.tr("Куприн")', mut.tr("Куприн"), "Kuprin")
self:equals('mut.tr("Лесков")', mut.tr("Лесков"), "Leskov")
self:equals('mut.tr("Максим")', mut.tr("Максим"), "Maksim")
self:equals('mut.tr("Надя")', mut.tr("Надя"), "Nadja")
self:equals('mut.tr("Онега")', mut.tr("Онега"), "Onega")
self:equals('mut.tr("Пушкин")', mut.tr("Пушкин"), "Pusjkin")
self:equals('mut.tr("Ростропович")', mut.tr("Ростропович"), "Rostropovitj")
self:equals('mut.tr("Самара")', mut.tr("Самара"), "Samara")
self:equals('mut.tr("Толстой")', mut.tr("Толстой"), "Tolstoj")
self:equals('mut.tr("Устинов")', mut.tr("Устинов"), "Ustinov")
self:equals('mut.tr("Фёдор")', mut.tr("Фёдор"), "Fjódor")
self:equals('mut.tr("Тихонов")', mut.tr("Тихонов"), "Tichonov")
self:equals('mut.tr("Донец")', mut.tr("Донец"), "Donets")
self:equals('mut.tr("Чайковский")', mut.tr("Чайковский"), "Tjajkovskij")
self:equals('mut.tr("Шостакович")', mut.tr("Шостакович"), "Sjostakovitj")
self:equals('mut.tr("Щедрин")', mut.tr("Щедрин"), "Sjtjedrin")
self:equals('mut.tr("Подъячев")', mut.tr("Подъячев"), "Podjatjev")
self:equals('mut.tr("Белый")', mut.tr("Белый"), "Belyj")
self:equals('mut.tr("Ильич")', mut.tr("Ильич"), "Iljitj")
self:equals('mut.tr("Игорь")', mut.tr("Игорь"), "Igor")
self:equals('mut.tr("Эдуард")', mut.tr("Эдуард"), "Eduard")
self:equals('mut.tr("Юрий")', mut.tr("Юрий"), "Jurij")
self:equals('mut.tr("Актюбинск")', mut.tr("Актюбинск"), "Aktiubinsk")
self:equals('mut.tr("Союз")', mut.tr("Союз"), "Sojuz")
self:equals('mut.tr("Татьяна")', mut.tr("Татьяна"), "Tatiana")
self:equals('mut.tr("Зябков")', mut.tr("Зябков"), "Ziabkov")
self:equals('mut.tr("Ярослав")', mut.tr("Ярослав"), "Jaroslav")
end
return t
rriup1lcfu52mapx3lmr4lc43rpwr8m
3703360
3703351
2022-08-19T11:05:46Z
Gabbe
1153
la till ett några stycken
Scribunto
text/plain
local t = require("Modul:UnitTests")
local mut = require("Modul:translit/ru")
function t:test1_isolated_uppercase_characters()
self:equals('mut.tr("А,Б,В,Г,Д")', mut.tr("А,Б,В,Г,Д"), "A,B,V,G,D")
self:equals('mut.tr("Е,Ё,Ж,З,И")', mut.tr("Е,Ё,Ж,З,И"), "Je,Jo,Zj,Z,I")
-- etc...
end
function t:test2_isolated_lowercase_characters()
self:equals('mut.tr("а,б,в,г,д")', mut.tr("а,б,в,г,д"), "a,b,v,g,d")
self:equals('mut.tr("е,ё,ж,з,и")', mut.tr("е,ё,ж,з,и"), "je,jo,zj,z,i")
-- etc...
end
function t:test3_uppercase_vs_mixedcase_words()
self:equals('mut.tr("ЖА,Жa")', mut.tr("ЖА,Жa"), "ZjA,Zja")
-- etc... (alla tecken som translittererar till multipla tecken)
end
function t:test4_example()
self:equals('mut.tr("Горбачёв")', mut.tr("Горбачёв"), "Gorbatjóv")
end
function t:test5_example() -- de från Svenska skrivregler
self:equals('mut.tr("Анна")', mut.tr("Анна"), "Anna")
self:equals('mut.tr("Борис")', mut.tr("Борис"), "Boris")
self:equals('mut.tr("Волга")', mut.tr("Волга"), "Volga")
self:equals('mut.tr("Горький")', mut.tr("Горький"), "Gorkij")
self:equals('mut.tr("Дон")', mut.tr("Дон"), "Don")
self:equals('mut.tr("Афанасьев")', mut.tr("Афанасьев"), "Afanasiev")
self:equals('mut.tr("Днепр")', mut.tr("Днепр"), "Dnepr")
self:equals('mut.tr("Евгений")', mut.tr("Евгений"), "Jevgenij")
self:equals('mut.tr("Алексеев")', mut.tr("Алексеев"), "Aleksejev")
self:equals('mut.tr("Кондратьев")', mut.tr("Кондратьев"), "Kondratiev")
self:equals('mut.tr("Чёрный")', mut.tr("Чёрный"), "Tjórnyj")
self:equals('mut.tr("Аксёнов")', mut.tr("Аксёнов"), "Aksiónov")
self:equals('mut.tr("Фёдор")', mut.tr("Фёдор"), "Fjódor")
self:equals('mut.tr("Пётр")', mut.tr("Пётр"), "Pjotr")
self:equals('mut.tr("Зёрнов")', mut.tr("Зёрнов"), "Ziórnov")
self:equals('mut.tr("Щёлкин")', mut.tr("Щёлкин"), "Sjtjólkin")
self:equals('mut.tr("Жуковский")', mut.tr("Жуковский"), "Zjukovskij")
self:equals('mut.tr("Замятин")', mut.tr("Замятин"), "Zamjatin")
self:equals('mut.tr("Ирина")', mut.tr("Ирина"), "Irina")
self:equals('mut.tr("Толстой")', mut.tr("Толстой"), "Tolstoj")
self:equals('mut.tr("Куприн")', mut.tr("Куприн"), "Kuprin")
self:equals('mut.tr("Лесков")', mut.tr("Лесков"), "Leskov")
self:equals('mut.tr("Максим")', mut.tr("Максим"), "Maksim")
self:equals('mut.tr("Надя")', mut.tr("Надя"), "Nadja")
self:equals('mut.tr("Онега")', mut.tr("Онега"), "Onega")
self:equals('mut.tr("Пушкин")', mut.tr("Пушкин"), "Pusjkin")
self:equals('mut.tr("Ростропович")', mut.tr("Ростропович"), "Rostropovitj")
self:equals('mut.tr("Самара")', mut.tr("Самара"), "Samara")
self:equals('mut.tr("Толстой")', mut.tr("Толстой"), "Tolstoj")
self:equals('mut.tr("Устинов")', mut.tr("Устинов"), "Ustinov")
self:equals('mut.tr("Фёдор")', mut.tr("Фёдор"), "Fjódor")
self:equals('mut.tr("Тихонов")', mut.tr("Тихонов"), "Tichonov")
self:equals('mut.tr("Донец")', mut.tr("Донец"), "Donets")
self:equals('mut.tr("Чайковский")', mut.tr("Чайковский"), "Tjajkovskij")
self:equals('mut.tr("Шостакович")', mut.tr("Шостакович"), "Sjostakovitj")
self:equals('mut.tr("Щедрин")', mut.tr("Щедрин"), "Sjtjedrin")
self:equals('mut.tr("Подъячев")', mut.tr("Подъячев"), "Podjatjev")
self:equals('mut.tr("Белый")', mut.tr("Белый"), "Belyj")
self:equals('mut.tr("Ильич")', mut.tr("Ильич"), "Iljitj")
self:equals('mut.tr("Игорь")', mut.tr("Игорь"), "Igor")
self:equals('mut.tr("Эдуард")', mut.tr("Эдуард"), "Eduard")
self:equals('mut.tr("Юрий")', mut.tr("Юрий"), "Jurij")
self:equals('mut.tr("Актюбинск")', mut.tr("Актюбинск"), "Aktiubinsk")
self:equals('mut.tr("Союз")', mut.tr("Союз"), "Sojuz")
self:equals('mut.tr("Татьяна")', mut.tr("Татьяна"), "Tatiana")
self:equals('mut.tr("Зябков")', mut.tr("Зябков"), "Ziabkov")
self:equals('mut.tr("Ярослав")', mut.tr("Ярослав"), "Jaroslav")
end
function t:test6_automatically_accentuate_polysyllabic_yo()
self:equals('mut.tr("Фёдор")', mut.tr("Фёдор"), "Fjódor")
self:equals('mut.tr("Пётр")', mut.tr("Пётр"), "Pjotr")
end
function t:test7_never_treat_e_like_yo()
self:equals('mut.tr("Пeтр")', mut.tr("Пeтр"), "Petr")
end
return t
g05gxi2j7rhlna406gt22ug8vryh9s2
3703362
3703360
2022-08-19T11:27:19Z
Gabbe
1153
la till ett par ytterligare
Scribunto
text/plain
local t = require("Modul:UnitTests")
local mut = require("Modul:translit/ru")
function t:test1_isolated_uppercase_characters()
self:equals('mut.tr("А,Б,В,Г,Д")', mut.tr("А,Б,В,Г,Д"), "A,B,V,G,D")
self:equals('mut.tr("Е,Ё,Ж,З,И")', mut.tr("Е,Ё,Ж,З,И"), "Je,Jo,Zj,Z,I")
-- etc...
end
function t:test2_isolated_lowercase_characters()
self:equals('mut.tr("а,б,в,г,д")', mut.tr("а,б,в,г,д"), "a,b,v,g,d")
self:equals('mut.tr("е,ё,ж,з,и")', mut.tr("е,ё,ж,з,и"), "je,jo,zj,z,i")
-- etc...
end
function t:test3_uppercase_vs_mixedcase_words()
self:equals('mut.tr("ЖА,Жa")', mut.tr("ЖА,Жa"), "ZjA,Zja")
-- etc... (alla tecken som translittererar till multipla tecken)
end
function t:test4_example()
self:equals('mut.tr("Горбачёв")', mut.tr("Горбачёв"), "Gorbatjóv")
end
function t:test5_example() -- de från Svenska skrivregler
self:equals('mut.tr("Анна")', mut.tr("Анна"), "Anna")
self:equals('mut.tr("Борис")', mut.tr("Борис"), "Boris")
self:equals('mut.tr("Волга")', mut.tr("Волга"), "Volga")
self:equals('mut.tr("Горький")', mut.tr("Горький"), "Gorkij")
self:equals('mut.tr("Дон")', mut.tr("Дон"), "Don")
self:equals('mut.tr("Афанасьев")', mut.tr("Афанасьев"), "Afanasiev")
self:equals('mut.tr("Днепр")', mut.tr("Днепр"), "Dnepr")
self:equals('mut.tr("Евгений")', mut.tr("Евгений"), "Jevgenij")
self:equals('mut.tr("Алексеев")', mut.tr("Алексеев"), "Aleksejev")
self:equals('mut.tr("Кондратьев")', mut.tr("Кондратьев"), "Kondratiev")
self:equals('mut.tr("Чёрный")', mut.tr("Чёрный"), "Tjórnyj")
self:equals('mut.tr("Аксёнов")', mut.tr("Аксёнов"), "Aksiónov")
self:equals('mut.tr("Фёдор")', mut.tr("Фёдор"), "Fjódor")
self:equals('mut.tr("Пётр")', mut.tr("Пётр"), "Pjotr")
self:equals('mut.tr("Зёрнов")', mut.tr("Зёрнов"), "Ziórnov")
self:equals('mut.tr("Щёлкин")', mut.tr("Щёлкин"), "Sjtjólkin")
self:equals('mut.tr("Жуковский")', mut.tr("Жуковский"), "Zjukovskij")
self:equals('mut.tr("Замятин")', mut.tr("Замятин"), "Zamjatin")
self:equals('mut.tr("Ирина")', mut.tr("Ирина"), "Irina")
self:equals('mut.tr("Толстой")', mut.tr("Толстой"), "Tolstoj")
self:equals('mut.tr("Куприн")', mut.tr("Куприн"), "Kuprin")
self:equals('mut.tr("Лесков")', mut.tr("Лесков"), "Leskov")
self:equals('mut.tr("Максим")', mut.tr("Максим"), "Maksim")
self:equals('mut.tr("Надя")', mut.tr("Надя"), "Nadja")
self:equals('mut.tr("Онега")', mut.tr("Онега"), "Onega")
self:equals('mut.tr("Пушкин")', mut.tr("Пушкин"), "Pusjkin")
self:equals('mut.tr("Ростропович")', mut.tr("Ростропович"), "Rostropovitj")
self:equals('mut.tr("Самара")', mut.tr("Самара"), "Samara")
self:equals('mut.tr("Толстой")', mut.tr("Толстой"), "Tolstoj")
self:equals('mut.tr("Устинов")', mut.tr("Устинов"), "Ustinov")
self:equals('mut.tr("Фёдор")', mut.tr("Фёдор"), "Fjódor")
self:equals('mut.tr("Тихонов")', mut.tr("Тихонов"), "Tichonov")
self:equals('mut.tr("Донец")', mut.tr("Донец"), "Donets")
self:equals('mut.tr("Чайковский")', mut.tr("Чайковский"), "Tjajkovskij")
self:equals('mut.tr("Шостакович")', mut.tr("Шостакович"), "Sjostakovitj")
self:equals('mut.tr("Щедрин")', mut.tr("Щедрин"), "Sjtjedrin")
self:equals('mut.tr("Подъячев")', mut.tr("Подъячев"), "Podjatjev")
self:equals('mut.tr("Белый")', mut.tr("Белый"), "Belyj")
self:equals('mut.tr("Ильич")', mut.tr("Ильич"), "Iljitj")
self:equals('mut.tr("Игорь")', mut.tr("Игорь"), "Igor")
self:equals('mut.tr("Эдуард")', mut.tr("Эдуард"), "Eduard")
self:equals('mut.tr("Юрий")', mut.tr("Юрий"), "Jurij")
self:equals('mut.tr("Актюбинск")', mut.tr("Актюбинск"), "Aktiubinsk")
self:equals('mut.tr("Союз")', mut.tr("Союз"), "Sojuz")
self:equals('mut.tr("Татьяна")', mut.tr("Татьяна"), "Tatiana")
self:equals('mut.tr("Зябков")', mut.tr("Зябков"), "Ziabkov")
self:equals('mut.tr("Ярослав")', mut.tr("Ярослав"), "Jaroslav")
end
function t:test6_automatically_accentuate_polysyllabic_yo()
self:equals('mut.tr("Фёдор")', mut.tr("Фёдор"), "Fjódor")
self:equals('mut.tr("Пётр")', mut.tr("Пётр"), "Pjotr")
end
function t:test7_never_treat_e_like_yo()
self:equals('mut.tr("Пeтр")', mut.tr("Пeтр"), "Petr")
end
function t:test8_return_unaccentuated_from_unaccentuated_input()
self:equals('mut.tr("замок")', mut.tr("замок"), "zamok")
end
function t:test9_pass_through_non_cyrillic_input()
self:equals('mut.tr("IP-адрес")', mut.tr("IP-адрес"), "IP-adres")
self:equals('mut.tr("β-распад")', mut.tr("β-распад"), "β-raspad")
end
return t
eyfombxuftljkcd8gkqs52h8k6i2uij
Moduldiskussion:translit/ru/test
829
929004
3703299
3703201
2022-08-19T00:01:08Z
Dodde
309
/* Stilguide för moduler */
wikitext
text/x-wiki
== Stilguide för moduler ==
Det finns en [[Wiktionary:Stilguide/Skapa_en_modul|stilguide för moduler]] som kanske har översetts när den här modulen och kanske en del andra moduler skapades. Jag skapade det här exempeltestet som en början till att belysa några av punkterna som tas upp i Stilguiden. Jag uppskattar försöket att fixa till det misslyckade enhetstestet.
Att ett enhetstest misslyckas behöver inte vara något negativt. Det är grunden i TDD, test driven development, vilket är en teknik för att säkerställa att koden som skrivs är robust och inte lätt går sönder om man senare gör ändringar i koden. Den går i korthet ut på att man som steg ett skapar ett test som misslyckas. Sedan skapar man koden som får testet att lyckas. [https://canro91.github.io/2021/02/05/FailingTest/ https://canro91.github.io/2021/02/05/FailingTest/] var en sida som kom upp när jag googlade. Jag tänker att det är en relevant aspekt eftersom än skadlig ändring i en modul kan få konsekvenser för informationen på tiotusentals sidor. Så det misslyckade enhetstestet var alltså ett tecken på att någonting i själva modulen behöver åtgärdas - problemet var inte enhetstestet i sig, så att säga.
Exempeltestet anropar en funktion som inte finns. Enligt stilguiden ska funktionens namn vara på engelska och skrivas med camelCase. "transkribera" är därför inte ett giltigt funktionsnamn. Jag föreslår "<s>br</s>tr", som är samma som parameternamnet i flera mallar, bl.a. översättningsmallarna. Det råkar också vara det funktionsnamn som engelska translitterationsmoduken för ryska använder. Men, andra engelska funktionsnamn kan absolut övervägas.
Eftersom modulen är en hjälpmodul för huvudmodulen Modul:translit som i sin tur ska kunna användas av alla möjliga mallar och moduler tänker jag att det faktiskt är den här modulens funktioner som ska testat direkt - inte genom att anropa en mall som anropar en modul som anropar den här modulen. Om modulen endast är tänkt att användas av en specifik mall så kan det finnas skäl att använda UnitTest-funktionen "preprocess_equals" istället för "equals".
När en modul anropas direkt av en mall, så ska "frame" användas som parametertabell, men Modul:translit/ru ska anropas av Modul:translit och inte direkt av en mall. Så "tr"-funktionen bör formas så att det är enkelt och smidigt att anropa funktionen - och vad är enklare och smidigare än att anropa funktionen med ett icke namngivet argument, alltså modul.tr(text_som_ska_translittereras)? Så tänkte jag när jag skapade exempelenhetstestet iallafall.
Att jag benämnde det "exempeltest" var sedan att det allra bästa vore ju sedan att med enhetstester täcka in så mycket som möjligt av modulens funktionalitet. På detta sätt blir testsidan en ritning för hur man vill att modulen ska fungera och sedan är det förhållandevis enkelt att skapa själva modulen enligt den ritningen. [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 04.47 (CEST)
::{{@|Dodde}}: Ja, jag har mycket riktigt försummat stilguiden. {{=)}} Det var dock inte med flit. Jag kände inte till den förrän nu. Jag skriver om modulerna (vad gäller funktionsnamn, indentering via tabb, osv.) för att bli mer i enlighet med guiden. Jag antar att det du föreslår är att "transkribera"-funktionen ska heta '''tr''' (inte "br"). En fråga redan nu: finns det också en stilguide för dokumentationen som ska hamna på "/dok"? Eller åtminstone en modul som anses vara så exemplariskt dokumenterad att jag kan utgå ifrån den som något slags rättesnöre?
::Vad gäller enhetstesterna så har jag hittills gjort sånt offline i min Lua IDE innan jag gör någon ändring på Wiktionary. Precis som du nämner så började jag med en lista på "failing tests", för att sen skriva om modulen i enlighet med beteendet jag ville ha. Helt enligt TDD. Skälet till att jag gjort sånt på min stationära dator är att jag tycker det är lättare att utföra mer intrikata tester där. Exempelvis: när det står "ó", är det lika med "o" följt av Unicodetecknet U+0301, eller är det lika med U+00F3? Jag fattar att när en mall eller modul ska användas på tiotusentals sidor så blir det mycket mer betryggande ifall sådana tester sköts offentligt via "/test". Det är också vad jag avser göra framgent.
::Jag skriver också om modulerna så att {{mall|tr}} anropar [[Modul:translit]] som sen anropar [[Modul:translit/ru]] (istället för, som nu, att mallen direkt anropar de språkspecifika modulerna). [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 06.30 (CEST)
:::{{@|Gabbe}} Haha, oops, tr, inte br, tack! Det finns ingen stilguide för dokumentation vad jag känner till, men jag tänker att lämpliga delar att ha med på en dokumentationssida kan vara att förklara modulens syfte, hur man använder den (från en mall? från en annan modul? båda?), en specifikation för hur (de publika) funktionerna beter sig, dvs. modulens gränssnitt, och slutligen att själva testerna inkluderas, t.ex. som på [[Modul:h3/dok]] som kanske inte är bra nog att utgå från som rättesnöre, men kanske den, liksom ett antal andra moduler kan fungera som lite inspiration. Olika moduler kanske kan behöva lite olika typer av dokumentation. Man kan behöva tänka på var dokumentationen placeras och att rätt information hamnar på rätt plats. Är det lämpligt att beskriva ''mallens'' användning, alltså hur en användare ska använda en tillhörande mall, i ''modulens'' dokumentation? Eller är det hur mallen, alltså den som skapar själva mallkodeen, bör använda modulen som ska beskrivas? Troligen det senare.
:::Har du möjlighet att ansluta till Wiktionarys Discord-chatt? Isåfall kan vi diskutera lite testning lite mer direkt och kanske utforma relevanta tester tillsammans. Just nu klurar jag på vad det är alla dina nytillagda tester testar för något :) ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.48 (CEST)
::::@[[Användare:Dodde|Dodde]]: (1) Tack för tipset! Jag funderar vidare på vad som ska dokumenteras var. (2) Nej, jag har tyvärr inte möjlighet att ansluta till Wiktionarys Discord-chatt, eller något annat forum utanför Wiktionary. Ledsen för det. (3) De nytillagda testerna strävar efter att följa de som anges i [https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf Svenska språkregler]. Jag har tagit bort några av de rena dubbletterna, samt de som inte hör till ryska. Vad jag angett som "förväntat" beteende avviker från Svenska språkregler i två avseenden. Dels accentuerar modulen ё automatiskt i flerstaviga ord (så att det blir Gorbatjóv, inte Gorbatjov). Svenska skrivregler har istället alla ord utan accent (vilket var vad jag implementerade först). Varför jag accentuerar automatiskt följer av meningsutbytet mellan mig och LA2 på [[Wiktionary:Bybrunnen#Modul för translitterering av ryska]]. Det andra avseendet som jag avsiktligen avviker från Svenska skrivregler är deras sista exempel: namnet Ярослав. De har tyvärr skrivit Яролав, vilket egentligen blir Jarolav. Tråkigt när det är "fel i facit", så att säga, men så kan det bli. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 13.03 (CEST)
:::::{{@|Gabbe}}, okej, tack för klargörande. Jag hoppas jag att det är ok att jag ändrar i mallar och moduler direkt, så kan vi diskutera ändringarna i efterhand om frågor uppstår. Eftersom replikskiftet på en diskussionssida på Wiktionary sker med mycket mer sällan än det typiskt sker i en chatt, kanske det är mer pragmatiskt att göra så, så att det inte tar onödigt lång tid att skapa en modul eller mall?
:::::När det gäller testerna, så tänker jag att det är viktigt att det dels är tydligt ''vad'' som testas, men också att rätt saker testas, och att det som testas är så isolerat som möjligt. Jag tänker att testerna med namnen från Skrivregler-dokumentet i testerna inte riktigt gör det. Jag ska försöka ändra direkt i testkoden, men vi behöver hjälpas åt för att det ska bli rätt i slutänden. Här förklarar jag hur jag tänker:
:::::1. gruppera liknande tester i var sin funktion och ge funktionerna talande namn. Här kan det ibland vara nödvändigt att lägga till en förklarande kommentar. Inled funktionsnamnet med något gemensamt så att de hamnar i en ordning som blir översiktlig, exempelvis test1_blabla, test2_blabla, eller test01 om antalet testgrupper är 10 eller fler. Enklare, mer allmängiltiga tester längre upp, mer specialiserade tester längre ner för att ge en bättre överblick. Testerna inkluderas ju på sidan med dokumentation, så att det ger en samlad överblick är väsentligt.
:::::2. låt oss testa varje enskild funktionalitet för sig. Svenska språkregler ger exemplet "К к k Куприн → Kuprin", och nu finns testet self:equals('mut.tr("Куприн")', mut.tr("Куприн"), "Kuprin"). Vad vi är intresserade av här är egentligen att kolla att К translittereras till K, varför inte testa just bara den här bokstaven, då, varför lägga till fler felkällor än nödvändigt? Men det viktiga är att vi ju ''också'' vill testa så att к blir k, men к finns ju inte ens med i strängen "Куприн", så här missar vi något som borde testas. För att det inte ska bli så ofantligt många rader för de väldigt enkla testerna som testar varje bokstav enskilt, så grupperar jag dem fem och fem. Exakt hur grupperingar sker spelar inte så stor roll, syftet är bara att det ska bli tydligt och överskådligt.
:::::3. en fråga dök upp och det borde avspeglas i testerna: borde Ж bli ZJ när det står självständigt eller i ett ord med bara kyrilliska versaler och Zj när det förekommer framför en gemen bokstav? (Vem hade ens tänkt på detta utan tester? :D) I testet använder jag mig av А och a som hjälp-bokstäver.
:::::4. vad händer när (3.) skickas in som en del av en mening? Det bör testas så att man vet att modulen klarar av att translitterera rätt även när ordet inte är isolerat, utan förekommer med andra ord skiljetecken.
:::::5. "visa förhandsgranskning" med "Modul:translit/ru/test" för att se att testkoden ser ut som det är tänkt. Publicera ändringar. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 02.01 (CEST)
== Gorbatjóv-testet ==
{{@|Gabbe}} Det förväntade resultatet av Gorbatjóv-testet är "Gorbatjóv" (ó som ett unikt "pre composed" tecken med Unicode-kodpunkt 00F3), men det som returneras av modulen är "Gorbatjóv" (ó som två separata tecken, o och ett "combining character" ´ med Unicode-kodpunkt 0301) och när dessa två strängar jämförs så misslyckas testet, även om de två strängarna ''ser'' likadana ut. Att enhetstestet misslyckas är alltså korrekt och koden behöver åtgärdas för att testat ska lyckas. (Som i stycket ovan, att åtgärda testet i sig, så att det lyckas är inte rätt väg att gå). Och kanske är det så att andra moduler behöver fixas på motsvarande sätt. Det finns något som heter Unicode normalization, och det kan lite förenklat utifrån just detta exemplet ske genom att dela upp ett tecken i två, "decompose", eller slå ihop dem till en, "compose". Givet att du har två "decomposed" tecken, o och ´, så behöver modulen en funktion som "compose" dem till en, ó , vilket kallas för NFC, Normalization Form Composition. Det finns kanske en färdig sådan kod man isåfall måste importera till svwikt. Men det bästa vore no att inte skapa några "decomposed" characters till att börja med, om det är möjligt att undvika? ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 05.58 (CEST)
:{{@|Dodde}}: Jag kan ändra koden så att den inte skapar några "decomposed" som utdata. Frågan är om det är rätt väg att gå. Låt mig ge några exempel: Ett typiskt indata till den ryska modulen är ''каню́ля''. Eftersom det (vad jag vet) inte finns något "composed" tecken för ю́ så skickas det in som ю med modifiern. Det förvandlar sen min mall i nuläget till {{tr|ru|каню́ля}}, alltså "u" med "´" modifiern. Då kan man förstås göra om så att den istället returnerar kanjúlja (alltså composed). Då kommer genast en följdfråga. Här på Wiktionary har vi även möjlig indata som blandar kyrillisk och icke-kyrillisk text. Exempel är [[IP-адрес]] och [[β-распад]]. Just de två har inga modifiers på den icke-kyrilliska biten. Hur borde mallen göra ifall de hade haft det? Ska ÍP-адрес som indata ge olika utdata ifall det första tecknet är decomposed eller inte? Min tanke med modulen är att låta modifiers på icke-kyrillisk indata vara ifred. Om de var decomposed i indata blir de det i utdata också. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 07.33 (CEST)
:{{@|Dodde}}: Jag har gjort så att den istället "composar" ó i Gorbatjóv (och motsvarande för de andra vokalerna i den kyrilliska delen av indatan). När indata blandar kyrilliska och icke-kyrilliska tecken så låter den däremot eventuella modifiers på den icke-kyrilliska indatan vara ifred. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.11 (CEST)
::Eller, rättare sagt, den composar á, é, ó, ú, och í, vilket är vad som kan komma från den kyrilliska delen av datan. Om de förekommer i den icke-kyrilliska delen av indata composas de också. Andra slags modifiers låter den vara. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.15 (CEST)
:::{{@|Gabbe}} Jag har svårt att avgöra vad modulen ''borde'' göra rörande composed och decomposed. Allt detta är i stort sett obeprövad mark för mig också :). Man kan googla och man kan snegla på enwikt som ''ibland'' redan kan ha löst problemet som man försöker lösa. Om man lägger till tester för de här sakerna så blir det också åtminstone tydligt hur vår avsikt är att modulen ska fungera, och fungerande tester visar att koden fungerar som det är tänkt. Blir man i ett senare skede klokare och vill ändra avsikt, är det lätt att ändra testerna, och sedan ändra i koden. Om indata med "decomposed" tecken förekommer kanske man kan lägga dem i en kategori dels om man anser att det är fel att ha sådan indata, dels för att senare granska de fall som uppstått och vid en senare tidpunkt avgöra vad man borde göra - korrigera indata eller göra ytterligare en ändring i modulen. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.08 (CEST)
7kw9i7a83hedsmccc90f76w8djki45a
3703301
3703299
2022-08-19T03:51:33Z
Dodde
309
/* Några funderingar om modulkoden */ nytt avsnitt
wikitext
text/x-wiki
== Stilguide för moduler ==
Det finns en [[Wiktionary:Stilguide/Skapa_en_modul|stilguide för moduler]] som kanske har översetts när den här modulen och kanske en del andra moduler skapades. Jag skapade det här exempeltestet som en början till att belysa några av punkterna som tas upp i Stilguiden. Jag uppskattar försöket att fixa till det misslyckade enhetstestet.
Att ett enhetstest misslyckas behöver inte vara något negativt. Det är grunden i TDD, test driven development, vilket är en teknik för att säkerställa att koden som skrivs är robust och inte lätt går sönder om man senare gör ändringar i koden. Den går i korthet ut på att man som steg ett skapar ett test som misslyckas. Sedan skapar man koden som får testet att lyckas. [https://canro91.github.io/2021/02/05/FailingTest/ https://canro91.github.io/2021/02/05/FailingTest/] var en sida som kom upp när jag googlade. Jag tänker att det är en relevant aspekt eftersom än skadlig ändring i en modul kan få konsekvenser för informationen på tiotusentals sidor. Så det misslyckade enhetstestet var alltså ett tecken på att någonting i själva modulen behöver åtgärdas - problemet var inte enhetstestet i sig, så att säga.
Exempeltestet anropar en funktion som inte finns. Enligt stilguiden ska funktionens namn vara på engelska och skrivas med camelCase. "transkribera" är därför inte ett giltigt funktionsnamn. Jag föreslår "<s>br</s>tr", som är samma som parameternamnet i flera mallar, bl.a. översättningsmallarna. Det råkar också vara det funktionsnamn som engelska translitterationsmoduken för ryska använder. Men, andra engelska funktionsnamn kan absolut övervägas.
Eftersom modulen är en hjälpmodul för huvudmodulen Modul:translit som i sin tur ska kunna användas av alla möjliga mallar och moduler tänker jag att det faktiskt är den här modulens funktioner som ska testat direkt - inte genom att anropa en mall som anropar en modul som anropar den här modulen. Om modulen endast är tänkt att användas av en specifik mall så kan det finnas skäl att använda UnitTest-funktionen "preprocess_equals" istället för "equals".
När en modul anropas direkt av en mall, så ska "frame" användas som parametertabell, men Modul:translit/ru ska anropas av Modul:translit och inte direkt av en mall. Så "tr"-funktionen bör formas så att det är enkelt och smidigt att anropa funktionen - och vad är enklare och smidigare än att anropa funktionen med ett icke namngivet argument, alltså modul.tr(text_som_ska_translittereras)? Så tänkte jag när jag skapade exempelenhetstestet iallafall.
Att jag benämnde det "exempeltest" var sedan att det allra bästa vore ju sedan att med enhetstester täcka in så mycket som möjligt av modulens funktionalitet. På detta sätt blir testsidan en ritning för hur man vill att modulen ska fungera och sedan är det förhållandevis enkelt att skapa själva modulen enligt den ritningen. [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 04.47 (CEST)
::{{@|Dodde}}: Ja, jag har mycket riktigt försummat stilguiden. {{=)}} Det var dock inte med flit. Jag kände inte till den förrän nu. Jag skriver om modulerna (vad gäller funktionsnamn, indentering via tabb, osv.) för att bli mer i enlighet med guiden. Jag antar att det du föreslår är att "transkribera"-funktionen ska heta '''tr''' (inte "br"). En fråga redan nu: finns det också en stilguide för dokumentationen som ska hamna på "/dok"? Eller åtminstone en modul som anses vara så exemplariskt dokumenterad att jag kan utgå ifrån den som något slags rättesnöre?
::Vad gäller enhetstesterna så har jag hittills gjort sånt offline i min Lua IDE innan jag gör någon ändring på Wiktionary. Precis som du nämner så började jag med en lista på "failing tests", för att sen skriva om modulen i enlighet med beteendet jag ville ha. Helt enligt TDD. Skälet till att jag gjort sånt på min stationära dator är att jag tycker det är lättare att utföra mer intrikata tester där. Exempelvis: när det står "ó", är det lika med "o" följt av Unicodetecknet U+0301, eller är det lika med U+00F3? Jag fattar att när en mall eller modul ska användas på tiotusentals sidor så blir det mycket mer betryggande ifall sådana tester sköts offentligt via "/test". Det är också vad jag avser göra framgent.
::Jag skriver också om modulerna så att {{mall|tr}} anropar [[Modul:translit]] som sen anropar [[Modul:translit/ru]] (istället för, som nu, att mallen direkt anropar de språkspecifika modulerna). [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 06.30 (CEST)
:::{{@|Gabbe}} Haha, oops, tr, inte br, tack! Det finns ingen stilguide för dokumentation vad jag känner till, men jag tänker att lämpliga delar att ha med på en dokumentationssida kan vara att förklara modulens syfte, hur man använder den (från en mall? från en annan modul? båda?), en specifikation för hur (de publika) funktionerna beter sig, dvs. modulens gränssnitt, och slutligen att själva testerna inkluderas, t.ex. som på [[Modul:h3/dok]] som kanske inte är bra nog att utgå från som rättesnöre, men kanske den, liksom ett antal andra moduler kan fungera som lite inspiration. Olika moduler kanske kan behöva lite olika typer av dokumentation. Man kan behöva tänka på var dokumentationen placeras och att rätt information hamnar på rätt plats. Är det lämpligt att beskriva ''mallens'' användning, alltså hur en användare ska använda en tillhörande mall, i ''modulens'' dokumentation? Eller är det hur mallen, alltså den som skapar själva mallkodeen, bör använda modulen som ska beskrivas? Troligen det senare.
:::Har du möjlighet att ansluta till Wiktionarys Discord-chatt? Isåfall kan vi diskutera lite testning lite mer direkt och kanske utforma relevanta tester tillsammans. Just nu klurar jag på vad det är alla dina nytillagda tester testar för något :) ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.48 (CEST)
::::@[[Användare:Dodde|Dodde]]: (1) Tack för tipset! Jag funderar vidare på vad som ska dokumenteras var. (2) Nej, jag har tyvärr inte möjlighet att ansluta till Wiktionarys Discord-chatt, eller något annat forum utanför Wiktionary. Ledsen för det. (3) De nytillagda testerna strävar efter att följa de som anges i [https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf Svenska språkregler]. Jag har tagit bort några av de rena dubbletterna, samt de som inte hör till ryska. Vad jag angett som "förväntat" beteende avviker från Svenska språkregler i två avseenden. Dels accentuerar modulen ё automatiskt i flerstaviga ord (så att det blir Gorbatjóv, inte Gorbatjov). Svenska skrivregler har istället alla ord utan accent (vilket var vad jag implementerade först). Varför jag accentuerar automatiskt följer av meningsutbytet mellan mig och LA2 på [[Wiktionary:Bybrunnen#Modul för translitterering av ryska]]. Det andra avseendet som jag avsiktligen avviker från Svenska skrivregler är deras sista exempel: namnet Ярослав. De har tyvärr skrivit Яролав, vilket egentligen blir Jarolav. Tråkigt när det är "fel i facit", så att säga, men så kan det bli. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 13.03 (CEST)
:::::{{@|Gabbe}}, okej, tack för klargörande. Jag hoppas jag att det är ok att jag ändrar i mallar och moduler direkt, så kan vi diskutera ändringarna i efterhand om frågor uppstår. Eftersom replikskiftet på en diskussionssida på Wiktionary sker med mycket mer sällan än det typiskt sker i en chatt, kanske det är mer pragmatiskt att göra så, så att det inte tar onödigt lång tid att skapa en modul eller mall?
:::::När det gäller testerna, så tänker jag att det är viktigt att det dels är tydligt ''vad'' som testas, men också att rätt saker testas, och att det som testas är så isolerat som möjligt. Jag tänker att testerna med namnen från Skrivregler-dokumentet i testerna inte riktigt gör det. Jag ska försöka ändra direkt i testkoden, men vi behöver hjälpas åt för att det ska bli rätt i slutänden. Här förklarar jag hur jag tänker:
:::::1. gruppera liknande tester i var sin funktion och ge funktionerna talande namn. Här kan det ibland vara nödvändigt att lägga till en förklarande kommentar. Inled funktionsnamnet med något gemensamt så att de hamnar i en ordning som blir översiktlig, exempelvis test1_blabla, test2_blabla, eller test01 om antalet testgrupper är 10 eller fler. Enklare, mer allmängiltiga tester längre upp, mer specialiserade tester längre ner för att ge en bättre överblick. Testerna inkluderas ju på sidan med dokumentation, så att det ger en samlad överblick är väsentligt.
:::::2. låt oss testa varje enskild funktionalitet för sig. Svenska språkregler ger exemplet "К к k Куприн → Kuprin", och nu finns testet self:equals('mut.tr("Куприн")', mut.tr("Куприн"), "Kuprin"). Vad vi är intresserade av här är egentligen att kolla att К translittereras till K, varför inte testa just bara den här bokstaven, då, varför lägga till fler felkällor än nödvändigt? Men det viktiga är att vi ju ''också'' vill testa så att к blir k, men к finns ju inte ens med i strängen "Куприн", så här missar vi något som borde testas. För att det inte ska bli så ofantligt många rader för de väldigt enkla testerna som testar varje bokstav enskilt, så grupperar jag dem fem och fem. Exakt hur grupperingar sker spelar inte så stor roll, syftet är bara att det ska bli tydligt och överskådligt.
:::::3. en fråga dök upp och det borde avspeglas i testerna: borde Ж bli ZJ när det står självständigt eller i ett ord med bara kyrilliska versaler och Zj när det förekommer framför en gemen bokstav? (Vem hade ens tänkt på detta utan tester? :D) I testet använder jag mig av А och a som hjälp-bokstäver.
:::::4. vad händer när (3.) skickas in som en del av en mening? Det bör testas så att man vet att modulen klarar av att translitterera rätt även när ordet inte är isolerat, utan förekommer med andra ord skiljetecken.
:::::5. "visa förhandsgranskning" med "Modul:translit/ru/test" för att se att testkoden ser ut som det är tänkt. Publicera ändringar. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 02.01 (CEST)
== Gorbatjóv-testet ==
{{@|Gabbe}} Det förväntade resultatet av Gorbatjóv-testet är "Gorbatjóv" (ó som ett unikt "pre composed" tecken med Unicode-kodpunkt 00F3), men det som returneras av modulen är "Gorbatjóv" (ó som två separata tecken, o och ett "combining character" ´ med Unicode-kodpunkt 0301) och när dessa två strängar jämförs så misslyckas testet, även om de två strängarna ''ser'' likadana ut. Att enhetstestet misslyckas är alltså korrekt och koden behöver åtgärdas för att testat ska lyckas. (Som i stycket ovan, att åtgärda testet i sig, så att det lyckas är inte rätt väg att gå). Och kanske är det så att andra moduler behöver fixas på motsvarande sätt. Det finns något som heter Unicode normalization, och det kan lite förenklat utifrån just detta exemplet ske genom att dela upp ett tecken i två, "decompose", eller slå ihop dem till en, "compose". Givet att du har två "decomposed" tecken, o och ´, så behöver modulen en funktion som "compose" dem till en, ó , vilket kallas för NFC, Normalization Form Composition. Det finns kanske en färdig sådan kod man isåfall måste importera till svwikt. Men det bästa vore no att inte skapa några "decomposed" characters till att börja med, om det är möjligt att undvika? ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 05.58 (CEST)
:{{@|Dodde}}: Jag kan ändra koden så att den inte skapar några "decomposed" som utdata. Frågan är om det är rätt väg att gå. Låt mig ge några exempel: Ett typiskt indata till den ryska modulen är ''каню́ля''. Eftersom det (vad jag vet) inte finns något "composed" tecken för ю́ så skickas det in som ю med modifiern. Det förvandlar sen min mall i nuläget till {{tr|ru|каню́ля}}, alltså "u" med "´" modifiern. Då kan man förstås göra om så att den istället returnerar kanjúlja (alltså composed). Då kommer genast en följdfråga. Här på Wiktionary har vi även möjlig indata som blandar kyrillisk och icke-kyrillisk text. Exempel är [[IP-адрес]] och [[β-распад]]. Just de två har inga modifiers på den icke-kyrilliska biten. Hur borde mallen göra ifall de hade haft det? Ska ÍP-адрес som indata ge olika utdata ifall det första tecknet är decomposed eller inte? Min tanke med modulen är att låta modifiers på icke-kyrillisk indata vara ifred. Om de var decomposed i indata blir de det i utdata också. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 07.33 (CEST)
:{{@|Dodde}}: Jag har gjort så att den istället "composar" ó i Gorbatjóv (och motsvarande för de andra vokalerna i den kyrilliska delen av indatan). När indata blandar kyrilliska och icke-kyrilliska tecken så låter den däremot eventuella modifiers på den icke-kyrilliska indatan vara ifred. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.11 (CEST)
::Eller, rättare sagt, den composar á, é, ó, ú, och í, vilket är vad som kan komma från den kyrilliska delen av datan. Om de förekommer i den icke-kyrilliska delen av indata composas de också. Andra slags modifiers låter den vara. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.15 (CEST)
:::{{@|Gabbe}} Jag har svårt att avgöra vad modulen ''borde'' göra rörande composed och decomposed. Allt detta är i stort sett obeprövad mark för mig också :). Man kan googla och man kan snegla på enwikt som ''ibland'' redan kan ha löst problemet som man försöker lösa. Om man lägger till tester för de här sakerna så blir det också åtminstone tydligt hur vår avsikt är att modulen ska fungera, och fungerande tester visar att koden fungerar som det är tänkt. Blir man i ett senare skede klokare och vill ändra avsikt, är det lätt att ändra testerna, och sedan ändra i koden. Om indata med "decomposed" tecken förekommer kanske man kan lägga dem i en kategori dels om man anser att det är fel att ha sådan indata, dels för att senare granska de fall som uppstått och vid en senare tidpunkt avgöra vad man borde göra - korrigera indata eller göra ytterligare en ändring i modulen. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.08 (CEST)
== Några funderingar om modulkoden ==
Har några funderingar om modulkoden och förslag på ändringar:
1. Varför inte ange argumentets namn direkt?
<br><code>function export.tr( argument )</code>
<br><code>local text = argument</code>
<br>->
<br><code>function export.tr(text)</code>
2. a)Varför heter funktionen accentuera_jo och inte bara accentuera? Vad betyder jo? (föreslår att mellanslagen tas bort för enhetligt utseende). Också bra med engelska namn på funktioner. Kommentaren är vilseledande <br>
<code>function accentuera_jo ( text )</code>
<br>->
<br><code>function accentuate(text)</code>
3. Stilguiden rekommenderar kod utan kommentarer och erbjuder länkar till fördjupning om skälen till varför det är bra. Kan funktionens namn göras tydligare så slipper vi kommentarer helt. Kan man säga att man explicit lägger till accenter till textsträngen? I så fall kanske funktionen kan heta
<br><code>function accentuate_explicitly(text)</code>
4. Bra med engelska namn på funktioner, och att ha "ru" i funktionsnamnet är överflödigt.
<br><code>function transkribera_ru(text)</code>
<br>->
<br><code>function transliterate(text)</code>
5. Att accentuera den ryska texten, är inte det en del av translitterationsprocessen? Isåfall kanske anropet till accentuera-funktionen ska flytta in i transliterate-funktionen.
6. Varför returnerar inte transliterate-funktionen det vi vill ha? Den returnerar en tabell som vi måste hantera och göra om till en textsträng. Det kan transliterate-funktionen ta hand om. En textsträng borde vi kunna få serverat på ett silverfat istället. Koden blir isåfall:
<code>function export.tr(text)
return transliterate(text)
end</code>
7. Wow. Det enda tr-funktionen gör är att anropa transliterate-funktionen och returnera vad den funktionen returnerar. Nu blir det uppenbart att vi inte behöver nån transliterate-funktion då vi lika gärna kan placera koden direkt i tr-funktionen.
8. De där köfunktionerna verkar återanvändas i flera moduler. Det finns en programmeringsprincip som heter DIY - don't repeat yourself. De borde kanske brytas ut till en egen hjälpmodul? Samtidigt ser det rätt rörigt ut när de används. Man måste liksom veta vad koden är tänkt att göra för att förstå vad den gör. Jag undrar om det finns något alternativt angreppssätt. Kanske inte. Jag får fundera lite till. Man kan säkert fila på det lite grann, åtminstone. Men lättare när testerna är på plats... ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 05.51 (CEST)
8uqeiw6f4pzljuux37fmzw07drdd5s0
3703302
3703301
2022-08-19T06:07:11Z
Gabbe
1153
några svar
wikitext
text/x-wiki
== Stilguide för moduler ==
Det finns en [[Wiktionary:Stilguide/Skapa_en_modul|stilguide för moduler]] som kanske har översetts när den här modulen och kanske en del andra moduler skapades. Jag skapade det här exempeltestet som en början till att belysa några av punkterna som tas upp i Stilguiden. Jag uppskattar försöket att fixa till det misslyckade enhetstestet.
Att ett enhetstest misslyckas behöver inte vara något negativt. Det är grunden i TDD, test driven development, vilket är en teknik för att säkerställa att koden som skrivs är robust och inte lätt går sönder om man senare gör ändringar i koden. Den går i korthet ut på att man som steg ett skapar ett test som misslyckas. Sedan skapar man koden som får testet att lyckas. [https://canro91.github.io/2021/02/05/FailingTest/ https://canro91.github.io/2021/02/05/FailingTest/] var en sida som kom upp när jag googlade. Jag tänker att det är en relevant aspekt eftersom än skadlig ändring i en modul kan få konsekvenser för informationen på tiotusentals sidor. Så det misslyckade enhetstestet var alltså ett tecken på att någonting i själva modulen behöver åtgärdas - problemet var inte enhetstestet i sig, så att säga.
Exempeltestet anropar en funktion som inte finns. Enligt stilguiden ska funktionens namn vara på engelska och skrivas med camelCase. "transkribera" är därför inte ett giltigt funktionsnamn. Jag föreslår "<s>br</s>tr", som är samma som parameternamnet i flera mallar, bl.a. översättningsmallarna. Det råkar också vara det funktionsnamn som engelska translitterationsmoduken för ryska använder. Men, andra engelska funktionsnamn kan absolut övervägas.
Eftersom modulen är en hjälpmodul för huvudmodulen Modul:translit som i sin tur ska kunna användas av alla möjliga mallar och moduler tänker jag att det faktiskt är den här modulens funktioner som ska testat direkt - inte genom att anropa en mall som anropar en modul som anropar den här modulen. Om modulen endast är tänkt att användas av en specifik mall så kan det finnas skäl att använda UnitTest-funktionen "preprocess_equals" istället för "equals".
När en modul anropas direkt av en mall, så ska "frame" användas som parametertabell, men Modul:translit/ru ska anropas av Modul:translit och inte direkt av en mall. Så "tr"-funktionen bör formas så att det är enkelt och smidigt att anropa funktionen - och vad är enklare och smidigare än att anropa funktionen med ett icke namngivet argument, alltså modul.tr(text_som_ska_translittereras)? Så tänkte jag när jag skapade exempelenhetstestet iallafall.
Att jag benämnde det "exempeltest" var sedan att det allra bästa vore ju sedan att med enhetstester täcka in så mycket som möjligt av modulens funktionalitet. På detta sätt blir testsidan en ritning för hur man vill att modulen ska fungera och sedan är det förhållandevis enkelt att skapa själva modulen enligt den ritningen. [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 04.47 (CEST)
::{{@|Dodde}}: Ja, jag har mycket riktigt försummat stilguiden. {{=)}} Det var dock inte med flit. Jag kände inte till den förrän nu. Jag skriver om modulerna (vad gäller funktionsnamn, indentering via tabb, osv.) för att bli mer i enlighet med guiden. Jag antar att det du föreslår är att "transkribera"-funktionen ska heta '''tr''' (inte "br"). En fråga redan nu: finns det också en stilguide för dokumentationen som ska hamna på "/dok"? Eller åtminstone en modul som anses vara så exemplariskt dokumenterad att jag kan utgå ifrån den som något slags rättesnöre?
::Vad gäller enhetstesterna så har jag hittills gjort sånt offline i min Lua IDE innan jag gör någon ändring på Wiktionary. Precis som du nämner så började jag med en lista på "failing tests", för att sen skriva om modulen i enlighet med beteendet jag ville ha. Helt enligt TDD. Skälet till att jag gjort sånt på min stationära dator är att jag tycker det är lättare att utföra mer intrikata tester där. Exempelvis: när det står "ó", är det lika med "o" följt av Unicodetecknet U+0301, eller är det lika med U+00F3? Jag fattar att när en mall eller modul ska användas på tiotusentals sidor så blir det mycket mer betryggande ifall sådana tester sköts offentligt via "/test". Det är också vad jag avser göra framgent.
::Jag skriver också om modulerna så att {{mall|tr}} anropar [[Modul:translit]] som sen anropar [[Modul:translit/ru]] (istället för, som nu, att mallen direkt anropar de språkspecifika modulerna). [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 06.30 (CEST)
:::{{@|Gabbe}} Haha, oops, tr, inte br, tack! Det finns ingen stilguide för dokumentation vad jag känner till, men jag tänker att lämpliga delar att ha med på en dokumentationssida kan vara att förklara modulens syfte, hur man använder den (från en mall? från en annan modul? båda?), en specifikation för hur (de publika) funktionerna beter sig, dvs. modulens gränssnitt, och slutligen att själva testerna inkluderas, t.ex. som på [[Modul:h3/dok]] som kanske inte är bra nog att utgå från som rättesnöre, men kanske den, liksom ett antal andra moduler kan fungera som lite inspiration. Olika moduler kanske kan behöva lite olika typer av dokumentation. Man kan behöva tänka på var dokumentationen placeras och att rätt information hamnar på rätt plats. Är det lämpligt att beskriva ''mallens'' användning, alltså hur en användare ska använda en tillhörande mall, i ''modulens'' dokumentation? Eller är det hur mallen, alltså den som skapar själva mallkodeen, bör använda modulen som ska beskrivas? Troligen det senare.
:::Har du möjlighet att ansluta till Wiktionarys Discord-chatt? Isåfall kan vi diskutera lite testning lite mer direkt och kanske utforma relevanta tester tillsammans. Just nu klurar jag på vad det är alla dina nytillagda tester testar för något :) ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.48 (CEST)
::::@[[Användare:Dodde|Dodde]]: (1) Tack för tipset! Jag funderar vidare på vad som ska dokumenteras var. (2) Nej, jag har tyvärr inte möjlighet att ansluta till Wiktionarys Discord-chatt, eller något annat forum utanför Wiktionary. Ledsen för det. (3) De nytillagda testerna strävar efter att följa de som anges i [https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf Svenska språkregler]. Jag har tagit bort några av de rena dubbletterna, samt de som inte hör till ryska. Vad jag angett som "förväntat" beteende avviker från Svenska språkregler i två avseenden. Dels accentuerar modulen ё automatiskt i flerstaviga ord (så att det blir Gorbatjóv, inte Gorbatjov). Svenska skrivregler har istället alla ord utan accent (vilket var vad jag implementerade först). Varför jag accentuerar automatiskt följer av meningsutbytet mellan mig och LA2 på [[Wiktionary:Bybrunnen#Modul för translitterering av ryska]]. Det andra avseendet som jag avsiktligen avviker från Svenska skrivregler är deras sista exempel: namnet Ярослав. De har tyvärr skrivit Яролав, vilket egentligen blir Jarolav. Tråkigt när det är "fel i facit", så att säga, men så kan det bli. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 13.03 (CEST)
:::::{{@|Gabbe}}, okej, tack för klargörande. Jag hoppas jag att det är ok att jag ändrar i mallar och moduler direkt, så kan vi diskutera ändringarna i efterhand om frågor uppstår. Eftersom replikskiftet på en diskussionssida på Wiktionary sker med mycket mer sällan än det typiskt sker i en chatt, kanske det är mer pragmatiskt att göra så, så att det inte tar onödigt lång tid att skapa en modul eller mall?
:::::När det gäller testerna, så tänker jag att det är viktigt att det dels är tydligt ''vad'' som testas, men också att rätt saker testas, och att det som testas är så isolerat som möjligt. Jag tänker att testerna med namnen från Skrivregler-dokumentet i testerna inte riktigt gör det. Jag ska försöka ändra direkt i testkoden, men vi behöver hjälpas åt för att det ska bli rätt i slutänden. Här förklarar jag hur jag tänker:
:::::1. gruppera liknande tester i var sin funktion och ge funktionerna talande namn. Här kan det ibland vara nödvändigt att lägga till en förklarande kommentar. Inled funktionsnamnet med något gemensamt så att de hamnar i en ordning som blir översiktlig, exempelvis test1_blabla, test2_blabla, eller test01 om antalet testgrupper är 10 eller fler. Enklare, mer allmängiltiga tester längre upp, mer specialiserade tester längre ner för att ge en bättre överblick. Testerna inkluderas ju på sidan med dokumentation, så att det ger en samlad överblick är väsentligt.
:::::2. låt oss testa varje enskild funktionalitet för sig. Svenska språkregler ger exemplet "К к k Куприн → Kuprin", och nu finns testet self:equals('mut.tr("Куприн")', mut.tr("Куприн"), "Kuprin"). Vad vi är intresserade av här är egentligen att kolla att К translittereras till K, varför inte testa just bara den här bokstaven, då, varför lägga till fler felkällor än nödvändigt? Men det viktiga är att vi ju ''också'' vill testa så att к blir k, men к finns ju inte ens med i strängen "Куприн", så här missar vi något som borde testas. För att det inte ska bli så ofantligt många rader för de väldigt enkla testerna som testar varje bokstav enskilt, så grupperar jag dem fem och fem. Exakt hur grupperingar sker spelar inte så stor roll, syftet är bara att det ska bli tydligt och överskådligt.
:::::3. en fråga dök upp och det borde avspeglas i testerna: borde Ж bli ZJ när det står självständigt eller i ett ord med bara kyrilliska versaler och Zj när det förekommer framför en gemen bokstav? (Vem hade ens tänkt på detta utan tester? :D) I testet använder jag mig av А och a som hjälp-bokstäver.
:::::4. vad händer när (3.) skickas in som en del av en mening? Det bör testas så att man vet att modulen klarar av att translitterera rätt även när ordet inte är isolerat, utan förekommer med andra ord skiljetecken.
:::::5. "visa förhandsgranskning" med "Modul:translit/ru/test" för att se att testkoden ser ut som det är tänkt. Publicera ändringar. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 02.01 (CEST)
:{{@|Dodde}}: Några kommentarer. Jag håller med om att en chatt skulle gå snabbare, men det är tyvärr inte ett alternativ för mig. Vidare angående (3) som är en viktig fråga: Normalt use-case på Wiktionary är ord med enbart gemener. Naturligtvis finns det många ord som innehåller versaler. Ett ord som ''[[кубик Рубика]]'', då ska stora bokstaven i andra ordet bli stor. Däremot är det mindre vanligt med ord som har två stora versaler på rad. I sådana fall är det vanligast (i den verkligen världen utanför Wiktionary) att ЖА blir ZjA. Detta för att förtydliga att "j":et inte är en oberoende bokstav. Eftersom det bara finns en stor bokstav innan A på kyrilliska bör texten med latinska bokstäver också bara ha en stor bokstav innan A:et. Det är det konventionella sättet att göra. När en stor bokstav på kyrilliska blir fler än en bokstav på latinska, då är det bara den första av de två bokstäverna som ska vara stor. Se till exempel inledningen till Wikipediasidan "[[w:en:Cheka|Cheka]]". Där blir förkortningen ВЧК till VChK (inte VCHK). På svenska är det vanligaste sättet att göra ВЧК till VTjK (inte VTJK), vilket min modul också gör idag. Det finns bara tre stora bokstäver på kyrilliska, därför finns det bara tre stora bokstäver på dess motsvarighet i latinska bokstäver. En person kan se VTjK på svenska och omedelbart fatta att det är en trebokstavsförkortning på ryska. Finns det välmotiverade argument till att "VTJK" skulle vara det konventionella sättet att göra på i svenska så är jag lyhörd för det. Annars lägger jag till att ВЧК ska bli VTjK som en rad i "/test", samt tar bort "JE,JO,ZJ,ZJA". Min uppfattning är att de senare är felaktiga allihopa.
:Det är naturligtvis okej att du ändrar i mallar och moduler direkt! {{=)}} Det här är ju en wiki, trots allt. Jag "äger" inte något av detta. Om du gör en ändring som jag uppfattar som en förändring till det sämre kan jag ju alltid revert:a.
:Jag kan lägga till fler rader som förtydligar exakt vad varje test testar för något. Jag antar att det är via funktionsnamnet på engelska som det ska klargöras (som du gjorde)? Fem och fem låter förståndigt. Finns det något tak på hur många tester testsidan kan innehålla? [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 08.06 (CEST)
== Gorbatjóv-testet ==
{{@|Gabbe}} Det förväntade resultatet av Gorbatjóv-testet är "Gorbatjóv" (ó som ett unikt "pre composed" tecken med Unicode-kodpunkt 00F3), men det som returneras av modulen är "Gorbatjóv" (ó som två separata tecken, o och ett "combining character" ´ med Unicode-kodpunkt 0301) och när dessa två strängar jämförs så misslyckas testet, även om de två strängarna ''ser'' likadana ut. Att enhetstestet misslyckas är alltså korrekt och koden behöver åtgärdas för att testat ska lyckas. (Som i stycket ovan, att åtgärda testet i sig, så att det lyckas är inte rätt väg att gå). Och kanske är det så att andra moduler behöver fixas på motsvarande sätt. Det finns något som heter Unicode normalization, och det kan lite förenklat utifrån just detta exemplet ske genom att dela upp ett tecken i två, "decompose", eller slå ihop dem till en, "compose". Givet att du har två "decomposed" tecken, o och ´, så behöver modulen en funktion som "compose" dem till en, ó , vilket kallas för NFC, Normalization Form Composition. Det finns kanske en färdig sådan kod man isåfall måste importera till svwikt. Men det bästa vore no att inte skapa några "decomposed" characters till att börja med, om det är möjligt att undvika? ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 05.58 (CEST)
:{{@|Dodde}}: Jag kan ändra koden så att den inte skapar några "decomposed" som utdata. Frågan är om det är rätt väg att gå. Låt mig ge några exempel: Ett typiskt indata till den ryska modulen är ''каню́ля''. Eftersom det (vad jag vet) inte finns något "composed" tecken för ю́ så skickas det in som ю med modifiern. Det förvandlar sen min mall i nuläget till {{tr|ru|каню́ля}}, alltså "u" med "´" modifiern. Då kan man förstås göra om så att den istället returnerar kanjúlja (alltså composed). Då kommer genast en följdfråga. Här på Wiktionary har vi även möjlig indata som blandar kyrillisk och icke-kyrillisk text. Exempel är [[IP-адрес]] och [[β-распад]]. Just de två har inga modifiers på den icke-kyrilliska biten. Hur borde mallen göra ifall de hade haft det? Ska ÍP-адрес som indata ge olika utdata ifall det första tecknet är decomposed eller inte? Min tanke med modulen är att låta modifiers på icke-kyrillisk indata vara ifred. Om de var decomposed i indata blir de det i utdata också. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 07.33 (CEST)
:{{@|Dodde}}: Jag har gjort så att den istället "composar" ó i Gorbatjóv (och motsvarande för de andra vokalerna i den kyrilliska delen av indatan). När indata blandar kyrilliska och icke-kyrilliska tecken så låter den däremot eventuella modifiers på den icke-kyrilliska indatan vara ifred. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.11 (CEST)
::Eller, rättare sagt, den composar á, é, ó, ú, och í, vilket är vad som kan komma från den kyrilliska delen av datan. Om de förekommer i den icke-kyrilliska delen av indata composas de också. Andra slags modifiers låter den vara. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.15 (CEST)
:::{{@|Gabbe}} Jag har svårt att avgöra vad modulen ''borde'' göra rörande composed och decomposed. Allt detta är i stort sett obeprövad mark för mig också :). Man kan googla och man kan snegla på enwikt som ''ibland'' redan kan ha löst problemet som man försöker lösa. Om man lägger till tester för de här sakerna så blir det också åtminstone tydligt hur vår avsikt är att modulen ska fungera, och fungerande tester visar att koden fungerar som det är tänkt. Blir man i ett senare skede klokare och vill ändra avsikt, är det lätt att ändra testerna, och sedan ändra i koden. Om indata med "decomposed" tecken förekommer kanske man kan lägga dem i en kategori dels om man anser att det är fel att ha sådan indata, dels för att senare granska de fall som uppstått och vid en senare tidpunkt avgöra vad man borde göra - korrigera indata eller göra ytterligare en ändring i modulen. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.08 (CEST)
== Några funderingar om modulkoden ==
Har några funderingar om modulkoden och förslag på ändringar:
1. Varför inte ange argumentets namn direkt?
<br><code>function export.tr( argument )</code>
<br><code>local text = argument</code>
<br>->
<br><code>function export.tr(text)</code>
2. a)Varför heter funktionen accentuera_jo och inte bara accentuera? Vad betyder jo? (föreslår att mellanslagen tas bort för enhetligt utseende). Också bra med engelska namn på funktioner. Kommentaren är vilseledande <br>
<code>function accentuera_jo ( text )</code>
<br>->
<br><code>function accentuate(text)</code>
3. Stilguiden rekommenderar kod utan kommentarer och erbjuder länkar till fördjupning om skälen till varför det är bra. Kan funktionens namn göras tydligare så slipper vi kommentarer helt. Kan man säga att man explicit lägger till accenter till textsträngen? I så fall kanske funktionen kan heta
<br><code>function accentuate_explicitly(text)</code>
4. Bra med engelska namn på funktioner, och att ha "ru" i funktionsnamnet är överflödigt.
<br><code>function transkribera_ru(text)</code>
<br>->
<br><code>function transliterate(text)</code>
5. Att accentuera den ryska texten, är inte det en del av translitterationsprocessen? Isåfall kanske anropet till accentuera-funktionen ska flytta in i transliterate-funktionen.
6. Varför returnerar inte transliterate-funktionen det vi vill ha? Den returnerar en tabell som vi måste hantera och göra om till en textsträng. Det kan transliterate-funktionen ta hand om. En textsträng borde vi kunna få serverat på ett silverfat istället. Koden blir isåfall:
<code>function export.tr(text)
return transliterate(text)
end</code>
7. Wow. Det enda tr-funktionen gör är att anropa transliterate-funktionen och returnera vad den funktionen returnerar. Nu blir det uppenbart att vi inte behöver nån transliterate-funktion då vi lika gärna kan placera koden direkt i tr-funktionen.
8. De där köfunktionerna verkar återanvändas i flera moduler. Det finns en programmeringsprincip som heter DIY - don't repeat yourself. De borde kanske brytas ut till en egen hjälpmodul? Samtidigt ser det rätt rörigt ut när de används. Man måste liksom veta vad koden är tänkt att göra för att förstå vad den gör. Jag undrar om det finns något alternativt angreppssätt. Kanske inte. Jag får fundera lite till. Man kan säkert fila på det lite grann, åtminstone. Men lättare när testerna är på plats... ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 05.51 (CEST)
:{{@|Dodde}}: Jag har ännu inte hunnit översatt alla variabel- och funktionsnamn till engelska. Jag har för avsikt att hinna färdigt med det innan månaden är slut. Funktionen "accentuera_jo" heter så eftersom den accentuerar (sätter dit en akut accent "´") på bokstaven "jo" (ё). En översättning till engelska skulle alltså bli "accentuate_yo". Den accentuerar inte någon annan bokstav än just ''jo'' ("yo" på engelska). Syftet med den funktionen är just det här problemet med Gorbatjov / Gorbatjóv. Att det förut blev "Gorbatjov" (utan accent) betraktade jag som en feature, inte en bugg. LA2 beskrev det som mycket mer användarvänligt om det görs automatiskt. Man kan ha olika åsikter, men jag är benägen att hålla med LA2. Jag kan föreställa mig att det finns situationer där man faktiskt vill ha utan accent. Då kommer det eventuellt vara relevant att kunna anropa den större funktionen utan att ha kört "accentuera_jo" / "accentuate_yo" först. Det kan man antingen lösa genom att anropa olika funktionsnamn, eller genom att ha en "boolean" som avgör huruvida "accentuera_jo" ska köras innan resten av funktionen körs.
:Att köfunktionerna används i flera moduler har du rätt i. Om det finns en konsensus här att det vore bättre att därför ha dem utanför modulen så kan jag flytta dem till en separat modul med generella köfunktioner. Jag tänkte att det var en lite för "simpel" sak för att ha en egen modul för. Köer är rätt grundläggande. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 08.06 (CEST)
65fob5jmta4dftn568h5t5fu3ui40o9
3703333
3703302
2022-08-19T07:48:48Z
Gabbe
1153
/* Några funderingar om modulkoden */ Elegant kod är förstås viktigt, men har "/test" högre prioritet?
wikitext
text/x-wiki
== Stilguide för moduler ==
Det finns en [[Wiktionary:Stilguide/Skapa_en_modul|stilguide för moduler]] som kanske har översetts när den här modulen och kanske en del andra moduler skapades. Jag skapade det här exempeltestet som en början till att belysa några av punkterna som tas upp i Stilguiden. Jag uppskattar försöket att fixa till det misslyckade enhetstestet.
Att ett enhetstest misslyckas behöver inte vara något negativt. Det är grunden i TDD, test driven development, vilket är en teknik för att säkerställa att koden som skrivs är robust och inte lätt går sönder om man senare gör ändringar i koden. Den går i korthet ut på att man som steg ett skapar ett test som misslyckas. Sedan skapar man koden som får testet att lyckas. [https://canro91.github.io/2021/02/05/FailingTest/ https://canro91.github.io/2021/02/05/FailingTest/] var en sida som kom upp när jag googlade. Jag tänker att det är en relevant aspekt eftersom än skadlig ändring i en modul kan få konsekvenser för informationen på tiotusentals sidor. Så det misslyckade enhetstestet var alltså ett tecken på att någonting i själva modulen behöver åtgärdas - problemet var inte enhetstestet i sig, så att säga.
Exempeltestet anropar en funktion som inte finns. Enligt stilguiden ska funktionens namn vara på engelska och skrivas med camelCase. "transkribera" är därför inte ett giltigt funktionsnamn. Jag föreslår "<s>br</s>tr", som är samma som parameternamnet i flera mallar, bl.a. översättningsmallarna. Det råkar också vara det funktionsnamn som engelska translitterationsmoduken för ryska använder. Men, andra engelska funktionsnamn kan absolut övervägas.
Eftersom modulen är en hjälpmodul för huvudmodulen Modul:translit som i sin tur ska kunna användas av alla möjliga mallar och moduler tänker jag att det faktiskt är den här modulens funktioner som ska testat direkt - inte genom att anropa en mall som anropar en modul som anropar den här modulen. Om modulen endast är tänkt att användas av en specifik mall så kan det finnas skäl att använda UnitTest-funktionen "preprocess_equals" istället för "equals".
När en modul anropas direkt av en mall, så ska "frame" användas som parametertabell, men Modul:translit/ru ska anropas av Modul:translit och inte direkt av en mall. Så "tr"-funktionen bör formas så att det är enkelt och smidigt att anropa funktionen - och vad är enklare och smidigare än att anropa funktionen med ett icke namngivet argument, alltså modul.tr(text_som_ska_translittereras)? Så tänkte jag när jag skapade exempelenhetstestet iallafall.
Att jag benämnde det "exempeltest" var sedan att det allra bästa vore ju sedan att med enhetstester täcka in så mycket som möjligt av modulens funktionalitet. På detta sätt blir testsidan en ritning för hur man vill att modulen ska fungera och sedan är det förhållandevis enkelt att skapa själva modulen enligt den ritningen. [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 04.47 (CEST)
::{{@|Dodde}}: Ja, jag har mycket riktigt försummat stilguiden. {{=)}} Det var dock inte med flit. Jag kände inte till den förrän nu. Jag skriver om modulerna (vad gäller funktionsnamn, indentering via tabb, osv.) för att bli mer i enlighet med guiden. Jag antar att det du föreslår är att "transkribera"-funktionen ska heta '''tr''' (inte "br"). En fråga redan nu: finns det också en stilguide för dokumentationen som ska hamna på "/dok"? Eller åtminstone en modul som anses vara så exemplariskt dokumenterad att jag kan utgå ifrån den som något slags rättesnöre?
::Vad gäller enhetstesterna så har jag hittills gjort sånt offline i min Lua IDE innan jag gör någon ändring på Wiktionary. Precis som du nämner så började jag med en lista på "failing tests", för att sen skriva om modulen i enlighet med beteendet jag ville ha. Helt enligt TDD. Skälet till att jag gjort sånt på min stationära dator är att jag tycker det är lättare att utföra mer intrikata tester där. Exempelvis: när det står "ó", är det lika med "o" följt av Unicodetecknet U+0301, eller är det lika med U+00F3? Jag fattar att när en mall eller modul ska användas på tiotusentals sidor så blir det mycket mer betryggande ifall sådana tester sköts offentligt via "/test". Det är också vad jag avser göra framgent.
::Jag skriver också om modulerna så att {{mall|tr}} anropar [[Modul:translit]] som sen anropar [[Modul:translit/ru]] (istället för, som nu, att mallen direkt anropar de språkspecifika modulerna). [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 06.30 (CEST)
:::{{@|Gabbe}} Haha, oops, tr, inte br, tack! Det finns ingen stilguide för dokumentation vad jag känner till, men jag tänker att lämpliga delar att ha med på en dokumentationssida kan vara att förklara modulens syfte, hur man använder den (från en mall? från en annan modul? båda?), en specifikation för hur (de publika) funktionerna beter sig, dvs. modulens gränssnitt, och slutligen att själva testerna inkluderas, t.ex. som på [[Modul:h3/dok]] som kanske inte är bra nog att utgå från som rättesnöre, men kanske den, liksom ett antal andra moduler kan fungera som lite inspiration. Olika moduler kanske kan behöva lite olika typer av dokumentation. Man kan behöva tänka på var dokumentationen placeras och att rätt information hamnar på rätt plats. Är det lämpligt att beskriva ''mallens'' användning, alltså hur en användare ska använda en tillhörande mall, i ''modulens'' dokumentation? Eller är det hur mallen, alltså den som skapar själva mallkodeen, bör använda modulen som ska beskrivas? Troligen det senare.
:::Har du möjlighet att ansluta till Wiktionarys Discord-chatt? Isåfall kan vi diskutera lite testning lite mer direkt och kanske utforma relevanta tester tillsammans. Just nu klurar jag på vad det är alla dina nytillagda tester testar för något :) ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.48 (CEST)
::::@[[Användare:Dodde|Dodde]]: (1) Tack för tipset! Jag funderar vidare på vad som ska dokumenteras var. (2) Nej, jag har tyvärr inte möjlighet att ansluta till Wiktionarys Discord-chatt, eller något annat forum utanför Wiktionary. Ledsen för det. (3) De nytillagda testerna strävar efter att följa de som anges i [https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf Svenska språkregler]. Jag har tagit bort några av de rena dubbletterna, samt de som inte hör till ryska. Vad jag angett som "förväntat" beteende avviker från Svenska språkregler i två avseenden. Dels accentuerar modulen ё automatiskt i flerstaviga ord (så att det blir Gorbatjóv, inte Gorbatjov). Svenska skrivregler har istället alla ord utan accent (vilket var vad jag implementerade först). Varför jag accentuerar automatiskt följer av meningsutbytet mellan mig och LA2 på [[Wiktionary:Bybrunnen#Modul för translitterering av ryska]]. Det andra avseendet som jag avsiktligen avviker från Svenska skrivregler är deras sista exempel: namnet Ярослав. De har tyvärr skrivit Яролав, vilket egentligen blir Jarolav. Tråkigt när det är "fel i facit", så att säga, men så kan det bli. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 13.03 (CEST)
:::::{{@|Gabbe}}, okej, tack för klargörande. Jag hoppas jag att det är ok att jag ändrar i mallar och moduler direkt, så kan vi diskutera ändringarna i efterhand om frågor uppstår. Eftersom replikskiftet på en diskussionssida på Wiktionary sker med mycket mer sällan än det typiskt sker i en chatt, kanske det är mer pragmatiskt att göra så, så att det inte tar onödigt lång tid att skapa en modul eller mall?
:::::När det gäller testerna, så tänker jag att det är viktigt att det dels är tydligt ''vad'' som testas, men också att rätt saker testas, och att det som testas är så isolerat som möjligt. Jag tänker att testerna med namnen från Skrivregler-dokumentet i testerna inte riktigt gör det. Jag ska försöka ändra direkt i testkoden, men vi behöver hjälpas åt för att det ska bli rätt i slutänden. Här förklarar jag hur jag tänker:
:::::1. gruppera liknande tester i var sin funktion och ge funktionerna talande namn. Här kan det ibland vara nödvändigt att lägga till en förklarande kommentar. Inled funktionsnamnet med något gemensamt så att de hamnar i en ordning som blir översiktlig, exempelvis test1_blabla, test2_blabla, eller test01 om antalet testgrupper är 10 eller fler. Enklare, mer allmängiltiga tester längre upp, mer specialiserade tester längre ner för att ge en bättre överblick. Testerna inkluderas ju på sidan med dokumentation, så att det ger en samlad överblick är väsentligt.
:::::2. låt oss testa varje enskild funktionalitet för sig. Svenska språkregler ger exemplet "К к k Куприн → Kuprin", och nu finns testet self:equals('mut.tr("Куприн")', mut.tr("Куприн"), "Kuprin"). Vad vi är intresserade av här är egentligen att kolla att К translittereras till K, varför inte testa just bara den här bokstaven, då, varför lägga till fler felkällor än nödvändigt? Men det viktiga är att vi ju ''också'' vill testa så att к blir k, men к finns ju inte ens med i strängen "Куприн", så här missar vi något som borde testas. För att det inte ska bli så ofantligt många rader för de väldigt enkla testerna som testar varje bokstav enskilt, så grupperar jag dem fem och fem. Exakt hur grupperingar sker spelar inte så stor roll, syftet är bara att det ska bli tydligt och överskådligt.
:::::3. en fråga dök upp och det borde avspeglas i testerna: borde Ж bli ZJ när det står självständigt eller i ett ord med bara kyrilliska versaler och Zj när det förekommer framför en gemen bokstav? (Vem hade ens tänkt på detta utan tester? :D) I testet använder jag mig av А och a som hjälp-bokstäver.
:::::4. vad händer när (3.) skickas in som en del av en mening? Det bör testas så att man vet att modulen klarar av att translitterera rätt även när ordet inte är isolerat, utan förekommer med andra ord skiljetecken.
:::::5. "visa förhandsgranskning" med "Modul:translit/ru/test" för att se att testkoden ser ut som det är tänkt. Publicera ändringar. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 02.01 (CEST)
:{{@|Dodde}}: Några kommentarer. Jag håller med om att en chatt skulle gå snabbare, men det är tyvärr inte ett alternativ för mig. Vidare angående (3) som är en viktig fråga: Normalt use-case på Wiktionary är ord med enbart gemener. Naturligtvis finns det många ord som innehåller versaler. Ett ord som ''[[кубик Рубика]]'', då ska stora bokstaven i andra ordet bli stor. Däremot är det mindre vanligt med ord som har två stora versaler på rad. I sådana fall är det vanligast (i den verkligen världen utanför Wiktionary) att ЖА blir ZjA. Detta för att förtydliga att "j":et inte är en oberoende bokstav. Eftersom det bara finns en stor bokstav innan A på kyrilliska bör texten med latinska bokstäver också bara ha en stor bokstav innan A:et. Det är det konventionella sättet att göra. När en stor bokstav på kyrilliska blir fler än en bokstav på latinska, då är det bara den första av de två bokstäverna som ska vara stor. Se till exempel inledningen till Wikipediasidan "[[w:en:Cheka|Cheka]]". Där blir förkortningen ВЧК till VChK (inte VCHK). På svenska är det vanligaste sättet att göra ВЧК till VTjK (inte VTJK), vilket min modul också gör idag. Det finns bara tre stora bokstäver på kyrilliska, därför finns det bara tre stora bokstäver på dess motsvarighet i latinska bokstäver. En person kan se VTjK på svenska och omedelbart fatta att det är en trebokstavsförkortning på ryska. Finns det välmotiverade argument till att "VTJK" skulle vara det konventionella sättet att göra på i svenska så är jag lyhörd för det. Annars lägger jag till att ВЧК ska bli VTjK som en rad i "/test", samt tar bort "JE,JO,ZJ,ZJA". Min uppfattning är att de senare är felaktiga allihopa.
:Det är naturligtvis okej att du ändrar i mallar och moduler direkt! {{=)}} Det här är ju en wiki, trots allt. Jag "äger" inte något av detta. Om du gör en ändring som jag uppfattar som en förändring till det sämre kan jag ju alltid revert:a.
:Jag kan lägga till fler rader som förtydligar exakt vad varje test testar för något. Jag antar att det är via funktionsnamnet på engelska som det ska klargöras (som du gjorde)? Fem och fem låter förståndigt. Finns det något tak på hur många tester testsidan kan innehålla? [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 08.06 (CEST)
== Gorbatjóv-testet ==
{{@|Gabbe}} Det förväntade resultatet av Gorbatjóv-testet är "Gorbatjóv" (ó som ett unikt "pre composed" tecken med Unicode-kodpunkt 00F3), men det som returneras av modulen är "Gorbatjóv" (ó som två separata tecken, o och ett "combining character" ´ med Unicode-kodpunkt 0301) och när dessa två strängar jämförs så misslyckas testet, även om de två strängarna ''ser'' likadana ut. Att enhetstestet misslyckas är alltså korrekt och koden behöver åtgärdas för att testat ska lyckas. (Som i stycket ovan, att åtgärda testet i sig, så att det lyckas är inte rätt väg att gå). Och kanske är det så att andra moduler behöver fixas på motsvarande sätt. Det finns något som heter Unicode normalization, och det kan lite förenklat utifrån just detta exemplet ske genom att dela upp ett tecken i två, "decompose", eller slå ihop dem till en, "compose". Givet att du har två "decomposed" tecken, o och ´, så behöver modulen en funktion som "compose" dem till en, ó , vilket kallas för NFC, Normalization Form Composition. Det finns kanske en färdig sådan kod man isåfall måste importera till svwikt. Men det bästa vore no att inte skapa några "decomposed" characters till att börja med, om det är möjligt att undvika? ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 05.58 (CEST)
:{{@|Dodde}}: Jag kan ändra koden så att den inte skapar några "decomposed" som utdata. Frågan är om det är rätt väg att gå. Låt mig ge några exempel: Ett typiskt indata till den ryska modulen är ''каню́ля''. Eftersom det (vad jag vet) inte finns något "composed" tecken för ю́ så skickas det in som ю med modifiern. Det förvandlar sen min mall i nuläget till {{tr|ru|каню́ля}}, alltså "u" med "´" modifiern. Då kan man förstås göra om så att den istället returnerar kanjúlja (alltså composed). Då kommer genast en följdfråga. Här på Wiktionary har vi även möjlig indata som blandar kyrillisk och icke-kyrillisk text. Exempel är [[IP-адрес]] och [[β-распад]]. Just de två har inga modifiers på den icke-kyrilliska biten. Hur borde mallen göra ifall de hade haft det? Ska ÍP-адрес som indata ge olika utdata ifall det första tecknet är decomposed eller inte? Min tanke med modulen är att låta modifiers på icke-kyrillisk indata vara ifred. Om de var decomposed i indata blir de det i utdata också. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 07.33 (CEST)
:{{@|Dodde}}: Jag har gjort så att den istället "composar" ó i Gorbatjóv (och motsvarande för de andra vokalerna i den kyrilliska delen av indatan). När indata blandar kyrilliska och icke-kyrilliska tecken så låter den däremot eventuella modifiers på den icke-kyrilliska indatan vara ifred. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.11 (CEST)
::Eller, rättare sagt, den composar á, é, ó, ú, och í, vilket är vad som kan komma från den kyrilliska delen av datan. Om de förekommer i den icke-kyrilliska delen av indata composas de också. Andra slags modifiers låter den vara. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.15 (CEST)
:::{{@|Gabbe}} Jag har svårt att avgöra vad modulen ''borde'' göra rörande composed och decomposed. Allt detta är i stort sett obeprövad mark för mig också :). Man kan googla och man kan snegla på enwikt som ''ibland'' redan kan ha löst problemet som man försöker lösa. Om man lägger till tester för de här sakerna så blir det också åtminstone tydligt hur vår avsikt är att modulen ska fungera, och fungerande tester visar att koden fungerar som det är tänkt. Blir man i ett senare skede klokare och vill ändra avsikt, är det lätt att ändra testerna, och sedan ändra i koden. Om indata med "decomposed" tecken förekommer kanske man kan lägga dem i en kategori dels om man anser att det är fel att ha sådan indata, dels för att senare granska de fall som uppstått och vid en senare tidpunkt avgöra vad man borde göra - korrigera indata eller göra ytterligare en ändring i modulen. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.08 (CEST)
== Några funderingar om modulkoden ==
Har några funderingar om modulkoden och förslag på ändringar:
1. Varför inte ange argumentets namn direkt?
<br><code>function export.tr( argument )</code>
<br><code>local text = argument</code>
<br>->
<br><code>function export.tr(text)</code>
2. a)Varför heter funktionen accentuera_jo och inte bara accentuera? Vad betyder jo? (föreslår att mellanslagen tas bort för enhetligt utseende). Också bra med engelska namn på funktioner. Kommentaren är vilseledande <br>
<code>function accentuera_jo ( text )</code>
<br>->
<br><code>function accentuate(text)</code>
3. Stilguiden rekommenderar kod utan kommentarer och erbjuder länkar till fördjupning om skälen till varför det är bra. Kan funktionens namn göras tydligare så slipper vi kommentarer helt. Kan man säga att man explicit lägger till accenter till textsträngen? I så fall kanske funktionen kan heta
<br><code>function accentuate_explicitly(text)</code>
4. Bra med engelska namn på funktioner, och att ha "ru" i funktionsnamnet är överflödigt.
<br><code>function transkribera_ru(text)</code>
<br>->
<br><code>function transliterate(text)</code>
5. Att accentuera den ryska texten, är inte det en del av translitterationsprocessen? Isåfall kanske anropet till accentuera-funktionen ska flytta in i transliterate-funktionen.
6. Varför returnerar inte transliterate-funktionen det vi vill ha? Den returnerar en tabell som vi måste hantera och göra om till en textsträng. Det kan transliterate-funktionen ta hand om. En textsträng borde vi kunna få serverat på ett silverfat istället. Koden blir isåfall:
<code>function export.tr(text)
return transliterate(text)
end</code>
7. Wow. Det enda tr-funktionen gör är att anropa transliterate-funktionen och returnera vad den funktionen returnerar. Nu blir det uppenbart att vi inte behöver nån transliterate-funktion då vi lika gärna kan placera koden direkt i tr-funktionen.
8. De där köfunktionerna verkar återanvändas i flera moduler. Det finns en programmeringsprincip som heter DIY - don't repeat yourself. De borde kanske brytas ut till en egen hjälpmodul? Samtidigt ser det rätt rörigt ut när de används. Man måste liksom veta vad koden är tänkt att göra för att förstå vad den gör. Jag undrar om det finns något alternativt angreppssätt. Kanske inte. Jag får fundera lite till. Man kan säkert fila på det lite grann, åtminstone. Men lättare när testerna är på plats... ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 05.51 (CEST)
:{{@|Dodde}}: Jag har ännu inte hunnit översatt alla variabel- och funktionsnamn till engelska. Jag har för avsikt att hinna färdigt med det innan månaden är slut. Funktionen "accentuera_jo" heter så eftersom den accentuerar (sätter dit en akut accent "´") på bokstaven "jo" (ё). En översättning till engelska skulle alltså bli "accentuate_yo". Den accentuerar inte någon annan bokstav än just ''jo'' ("yo" på engelska). Syftet med den funktionen är just det här problemet med Gorbatjov / Gorbatjóv. Att det förut blev "Gorbatjov" (utan accent) betraktade jag som en feature, inte en bugg. LA2 beskrev det som mycket mer användarvänligt om det görs automatiskt. Man kan ha olika åsikter, men jag är benägen att hålla med LA2. Jag kan föreställa mig att det finns situationer där man faktiskt vill ha utan accent. Då kommer det eventuellt vara relevant att kunna anropa den större funktionen utan att ha kört "accentuera_jo" / "accentuate_yo" först. Det kan man antingen lösa genom att anropa olika funktionsnamn, eller genom att ha en "boolean" som avgör huruvida "accentuera_jo" ska köras innan resten av funktionen körs.
:Att köfunktionerna används i flera moduler har du rätt i. Om det finns en konsensus här att det vore bättre att därför ha dem utanför modulen så kan jag flytta dem till en separat modul med generella köfunktioner. Jag tänkte att det var en lite för "simpel" sak för att ha en egen modul för. Köer är rätt grundläggande. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 08.06 (CEST)
:{{@|Dodde}}: Jag kan väl också säga så här: Från och med september kommer jag ha saker i mitt liv utanför Wiktionary som gör att jag kommer delta här i mer begränsad omfattning. Jag kommer inte sluta med Wiktionary, men jag kommer vara märkbart mindre aktiv än vad jag varit den här veckan. Tills dess har jag alltså begränsat med tid. Den tiden kan prioriteras på lite olika saker. Några exempel (i ingen särskild ordning):
:#Lägga till nya funktioner. Exempel på det vore det LA2 pratade om, att när ett ord på ryska har fler än en stavelse, men inga accent-tecken, så ska sidan som anropar modulen placeras i en dold kategori. Då har användaren varit "lat" och glömt att accentuera texten tillräckligt, vilket borde åtgärdas manuellt.
:#Göra "/test" mer utförlig angående vad jag betraktar som modulernas features redan idag, så att andra användare lättare förstår vad som mallen och modulen "förväntas" göra.
:#Göra dokumentationen som ska ligga under "/dok"
:#Göra "estetiska" förändringar av själva källkoden. Med det menar jag sådant som gör koden mer i linje med Stilguiden (engelska funktionsnamn, tabbar för indentering, osv), men som i övrigt inte förändrar vilken utdata som kommer ifrån en given indata. Sånt är även det viktigt för att andra användare lättare ska kunna ändra koden.
:Detta gäller för såväl de här modulerna som används av {{mall|tr}}, men även för ett annat projekt jag jobbat med, nämligen {{mall|fr-verb-test}} (och de moduler som den använder, [[Modul:fr-verb-artikel]] och [[Modul:fr-verb-konj]]). Helst ska jag förstås göra alla de ovanstående de närmsta två veckorna. Men det kommer jag nog inte hinna om vi ska vara realistiska. Det jag beskriver ovan tar olika lång tid och är olika viktigt. Om du fick önska, vad tycker du vore mest högprioriterat av dessa? I vilken ordning borde jag fokusera min energi de närmsta par veckorna? Jag tänker mig att en gedigen "/test" för varje modul är det som har allra högst prioritet. Håller du med? [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 09.48 (CEST)
qih1fwxhpgivo9og3hqx7u8uw4qnils
3703344
3703333
2022-08-19T09:19:50Z
Dodde
309
/* Några funderingar om modulkoden */
wikitext
text/x-wiki
== Stilguide för moduler ==
Det finns en [[Wiktionary:Stilguide/Skapa_en_modul|stilguide för moduler]] som kanske har översetts när den här modulen och kanske en del andra moduler skapades. Jag skapade det här exempeltestet som en början till att belysa några av punkterna som tas upp i Stilguiden. Jag uppskattar försöket att fixa till det misslyckade enhetstestet.
Att ett enhetstest misslyckas behöver inte vara något negativt. Det är grunden i TDD, test driven development, vilket är en teknik för att säkerställa att koden som skrivs är robust och inte lätt går sönder om man senare gör ändringar i koden. Den går i korthet ut på att man som steg ett skapar ett test som misslyckas. Sedan skapar man koden som får testet att lyckas. [https://canro91.github.io/2021/02/05/FailingTest/ https://canro91.github.io/2021/02/05/FailingTest/] var en sida som kom upp när jag googlade. Jag tänker att det är en relevant aspekt eftersom än skadlig ändring i en modul kan få konsekvenser för informationen på tiotusentals sidor. Så det misslyckade enhetstestet var alltså ett tecken på att någonting i själva modulen behöver åtgärdas - problemet var inte enhetstestet i sig, så att säga.
Exempeltestet anropar en funktion som inte finns. Enligt stilguiden ska funktionens namn vara på engelska och skrivas med camelCase. "transkribera" är därför inte ett giltigt funktionsnamn. Jag föreslår "<s>br</s>tr", som är samma som parameternamnet i flera mallar, bl.a. översättningsmallarna. Det råkar också vara det funktionsnamn som engelska translitterationsmoduken för ryska använder. Men, andra engelska funktionsnamn kan absolut övervägas.
Eftersom modulen är en hjälpmodul för huvudmodulen Modul:translit som i sin tur ska kunna användas av alla möjliga mallar och moduler tänker jag att det faktiskt är den här modulens funktioner som ska testat direkt - inte genom att anropa en mall som anropar en modul som anropar den här modulen. Om modulen endast är tänkt att användas av en specifik mall så kan det finnas skäl att använda UnitTest-funktionen "preprocess_equals" istället för "equals".
När en modul anropas direkt av en mall, så ska "frame" användas som parametertabell, men Modul:translit/ru ska anropas av Modul:translit och inte direkt av en mall. Så "tr"-funktionen bör formas så att det är enkelt och smidigt att anropa funktionen - och vad är enklare och smidigare än att anropa funktionen med ett icke namngivet argument, alltså modul.tr(text_som_ska_translittereras)? Så tänkte jag när jag skapade exempelenhetstestet iallafall.
Att jag benämnde det "exempeltest" var sedan att det allra bästa vore ju sedan att med enhetstester täcka in så mycket som möjligt av modulens funktionalitet. På detta sätt blir testsidan en ritning för hur man vill att modulen ska fungera och sedan är det förhållandevis enkelt att skapa själva modulen enligt den ritningen. [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 04.47 (CEST)
::{{@|Dodde}}: Ja, jag har mycket riktigt försummat stilguiden. {{=)}} Det var dock inte med flit. Jag kände inte till den förrän nu. Jag skriver om modulerna (vad gäller funktionsnamn, indentering via tabb, osv.) för att bli mer i enlighet med guiden. Jag antar att det du föreslår är att "transkribera"-funktionen ska heta '''tr''' (inte "br"). En fråga redan nu: finns det också en stilguide för dokumentationen som ska hamna på "/dok"? Eller åtminstone en modul som anses vara så exemplariskt dokumenterad att jag kan utgå ifrån den som något slags rättesnöre?
::Vad gäller enhetstesterna så har jag hittills gjort sånt offline i min Lua IDE innan jag gör någon ändring på Wiktionary. Precis som du nämner så började jag med en lista på "failing tests", för att sen skriva om modulen i enlighet med beteendet jag ville ha. Helt enligt TDD. Skälet till att jag gjort sånt på min stationära dator är att jag tycker det är lättare att utföra mer intrikata tester där. Exempelvis: när det står "ó", är det lika med "o" följt av Unicodetecknet U+0301, eller är det lika med U+00F3? Jag fattar att när en mall eller modul ska användas på tiotusentals sidor så blir det mycket mer betryggande ifall sådana tester sköts offentligt via "/test". Det är också vad jag avser göra framgent.
::Jag skriver också om modulerna så att {{mall|tr}} anropar [[Modul:translit]] som sen anropar [[Modul:translit/ru]] (istället för, som nu, att mallen direkt anropar de språkspecifika modulerna). [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 06.30 (CEST)
:::{{@|Gabbe}} Haha, oops, tr, inte br, tack! Det finns ingen stilguide för dokumentation vad jag känner till, men jag tänker att lämpliga delar att ha med på en dokumentationssida kan vara att förklara modulens syfte, hur man använder den (från en mall? från en annan modul? båda?), en specifikation för hur (de publika) funktionerna beter sig, dvs. modulens gränssnitt, och slutligen att själva testerna inkluderas, t.ex. som på [[Modul:h3/dok]] som kanske inte är bra nog att utgå från som rättesnöre, men kanske den, liksom ett antal andra moduler kan fungera som lite inspiration. Olika moduler kanske kan behöva lite olika typer av dokumentation. Man kan behöva tänka på var dokumentationen placeras och att rätt information hamnar på rätt plats. Är det lämpligt att beskriva ''mallens'' användning, alltså hur en användare ska använda en tillhörande mall, i ''modulens'' dokumentation? Eller är det hur mallen, alltså den som skapar själva mallkodeen, bör använda modulen som ska beskrivas? Troligen det senare.
:::Har du möjlighet att ansluta till Wiktionarys Discord-chatt? Isåfall kan vi diskutera lite testning lite mer direkt och kanske utforma relevanta tester tillsammans. Just nu klurar jag på vad det är alla dina nytillagda tester testar för något :) ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.48 (CEST)
::::@[[Användare:Dodde|Dodde]]: (1) Tack för tipset! Jag funderar vidare på vad som ska dokumenteras var. (2) Nej, jag har tyvärr inte möjlighet att ansluta till Wiktionarys Discord-chatt, eller något annat forum utanför Wiktionary. Ledsen för det. (3) De nytillagda testerna strävar efter att följa de som anges i [https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf Svenska språkregler]. Jag har tagit bort några av de rena dubbletterna, samt de som inte hör till ryska. Vad jag angett som "förväntat" beteende avviker från Svenska språkregler i två avseenden. Dels accentuerar modulen ё automatiskt i flerstaviga ord (så att det blir Gorbatjóv, inte Gorbatjov). Svenska skrivregler har istället alla ord utan accent (vilket var vad jag implementerade först). Varför jag accentuerar automatiskt följer av meningsutbytet mellan mig och LA2 på [[Wiktionary:Bybrunnen#Modul för translitterering av ryska]]. Det andra avseendet som jag avsiktligen avviker från Svenska skrivregler är deras sista exempel: namnet Ярослав. De har tyvärr skrivit Яролав, vilket egentligen blir Jarolav. Tråkigt när det är "fel i facit", så att säga, men så kan det bli. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 13.03 (CEST)
:::::{{@|Gabbe}}, okej, tack för klargörande. Jag hoppas jag att det är ok att jag ändrar i mallar och moduler direkt, så kan vi diskutera ändringarna i efterhand om frågor uppstår. Eftersom replikskiftet på en diskussionssida på Wiktionary sker med mycket mer sällan än det typiskt sker i en chatt, kanske det är mer pragmatiskt att göra så, så att det inte tar onödigt lång tid att skapa en modul eller mall?
:::::När det gäller testerna, så tänker jag att det är viktigt att det dels är tydligt ''vad'' som testas, men också att rätt saker testas, och att det som testas är så isolerat som möjligt. Jag tänker att testerna med namnen från Skrivregler-dokumentet i testerna inte riktigt gör det. Jag ska försöka ändra direkt i testkoden, men vi behöver hjälpas åt för att det ska bli rätt i slutänden. Här förklarar jag hur jag tänker:
:::::1. gruppera liknande tester i var sin funktion och ge funktionerna talande namn. Här kan det ibland vara nödvändigt att lägga till en förklarande kommentar. Inled funktionsnamnet med något gemensamt så att de hamnar i en ordning som blir översiktlig, exempelvis test1_blabla, test2_blabla, eller test01 om antalet testgrupper är 10 eller fler. Enklare, mer allmängiltiga tester längre upp, mer specialiserade tester längre ner för att ge en bättre överblick. Testerna inkluderas ju på sidan med dokumentation, så att det ger en samlad överblick är väsentligt.
:::::2. låt oss testa varje enskild funktionalitet för sig. Svenska språkregler ger exemplet "К к k Куприн → Kuprin", och nu finns testet self:equals('mut.tr("Куприн")', mut.tr("Куприн"), "Kuprin"). Vad vi är intresserade av här är egentligen att kolla att К translittereras till K, varför inte testa just bara den här bokstaven, då, varför lägga till fler felkällor än nödvändigt? Men det viktiga är att vi ju ''också'' vill testa så att к blir k, men к finns ju inte ens med i strängen "Куприн", så här missar vi något som borde testas. För att det inte ska bli så ofantligt många rader för de väldigt enkla testerna som testar varje bokstav enskilt, så grupperar jag dem fem och fem. Exakt hur grupperingar sker spelar inte så stor roll, syftet är bara att det ska bli tydligt och överskådligt.
:::::3. en fråga dök upp och det borde avspeglas i testerna: borde Ж bli ZJ när det står självständigt eller i ett ord med bara kyrilliska versaler och Zj när det förekommer framför en gemen bokstav? (Vem hade ens tänkt på detta utan tester? :D) I testet använder jag mig av А och a som hjälp-bokstäver.
:::::4. vad händer när (3.) skickas in som en del av en mening? Det bör testas så att man vet att modulen klarar av att translitterera rätt även när ordet inte är isolerat, utan förekommer med andra ord skiljetecken.
:::::5. "visa förhandsgranskning" med "Modul:translit/ru/test" för att se att testkoden ser ut som det är tänkt. Publicera ändringar. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 02.01 (CEST)
:{{@|Dodde}}: Några kommentarer. Jag håller med om att en chatt skulle gå snabbare, men det är tyvärr inte ett alternativ för mig. Vidare angående (3) som är en viktig fråga: Normalt use-case på Wiktionary är ord med enbart gemener. Naturligtvis finns det många ord som innehåller versaler. Ett ord som ''[[кубик Рубика]]'', då ska stora bokstaven i andra ordet bli stor. Däremot är det mindre vanligt med ord som har två stora versaler på rad. I sådana fall är det vanligast (i den verkligen världen utanför Wiktionary) att ЖА blir ZjA. Detta för att förtydliga att "j":et inte är en oberoende bokstav. Eftersom det bara finns en stor bokstav innan A på kyrilliska bör texten med latinska bokstäver också bara ha en stor bokstav innan A:et. Det är det konventionella sättet att göra. När en stor bokstav på kyrilliska blir fler än en bokstav på latinska, då är det bara den första av de två bokstäverna som ska vara stor. Se till exempel inledningen till Wikipediasidan "[[w:en:Cheka|Cheka]]". Där blir förkortningen ВЧК till VChK (inte VCHK). På svenska är det vanligaste sättet att göra ВЧК till VTjK (inte VTJK), vilket min modul också gör idag. Det finns bara tre stora bokstäver på kyrilliska, därför finns det bara tre stora bokstäver på dess motsvarighet i latinska bokstäver. En person kan se VTjK på svenska och omedelbart fatta att det är en trebokstavsförkortning på ryska. Finns det välmotiverade argument till att "VTJK" skulle vara det konventionella sättet att göra på i svenska så är jag lyhörd för det. Annars lägger jag till att ВЧК ska bli VTjK som en rad i "/test", samt tar bort "JE,JO,ZJ,ZJA". Min uppfattning är att de senare är felaktiga allihopa.
:Det är naturligtvis okej att du ändrar i mallar och moduler direkt! {{=)}} Det här är ju en wiki, trots allt. Jag "äger" inte något av detta. Om du gör en ändring som jag uppfattar som en förändring till det sämre kan jag ju alltid revert:a.
:Jag kan lägga till fler rader som förtydligar exakt vad varje test testar för något. Jag antar att det är via funktionsnamnet på engelska som det ska klargöras (som du gjorde)? Fem och fem låter förståndigt. Finns det något tak på hur många tester testsidan kan innehålla? [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 08.06 (CEST)
== Gorbatjóv-testet ==
{{@|Gabbe}} Det förväntade resultatet av Gorbatjóv-testet är "Gorbatjóv" (ó som ett unikt "pre composed" tecken med Unicode-kodpunkt 00F3), men det som returneras av modulen är "Gorbatjóv" (ó som två separata tecken, o och ett "combining character" ´ med Unicode-kodpunkt 0301) och när dessa två strängar jämförs så misslyckas testet, även om de två strängarna ''ser'' likadana ut. Att enhetstestet misslyckas är alltså korrekt och koden behöver åtgärdas för att testat ska lyckas. (Som i stycket ovan, att åtgärda testet i sig, så att det lyckas är inte rätt väg att gå). Och kanske är det så att andra moduler behöver fixas på motsvarande sätt. Det finns något som heter Unicode normalization, och det kan lite förenklat utifrån just detta exemplet ske genom att dela upp ett tecken i två, "decompose", eller slå ihop dem till en, "compose". Givet att du har två "decomposed" tecken, o och ´, så behöver modulen en funktion som "compose" dem till en, ó , vilket kallas för NFC, Normalization Form Composition. Det finns kanske en färdig sådan kod man isåfall måste importera till svwikt. Men det bästa vore no att inte skapa några "decomposed" characters till att börja med, om det är möjligt att undvika? ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 05.58 (CEST)
:{{@|Dodde}}: Jag kan ändra koden så att den inte skapar några "decomposed" som utdata. Frågan är om det är rätt väg att gå. Låt mig ge några exempel: Ett typiskt indata till den ryska modulen är ''каню́ля''. Eftersom det (vad jag vet) inte finns något "composed" tecken för ю́ så skickas det in som ю med modifiern. Det förvandlar sen min mall i nuläget till {{tr|ru|каню́ля}}, alltså "u" med "´" modifiern. Då kan man förstås göra om så att den istället returnerar kanjúlja (alltså composed). Då kommer genast en följdfråga. Här på Wiktionary har vi även möjlig indata som blandar kyrillisk och icke-kyrillisk text. Exempel är [[IP-адрес]] och [[β-распад]]. Just de två har inga modifiers på den icke-kyrilliska biten. Hur borde mallen göra ifall de hade haft det? Ska ÍP-адрес som indata ge olika utdata ifall det första tecknet är decomposed eller inte? Min tanke med modulen är att låta modifiers på icke-kyrillisk indata vara ifred. Om de var decomposed i indata blir de det i utdata också. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 07.33 (CEST)
:{{@|Dodde}}: Jag har gjort så att den istället "composar" ó i Gorbatjóv (och motsvarande för de andra vokalerna i den kyrilliska delen av indatan). När indata blandar kyrilliska och icke-kyrilliska tecken så låter den däremot eventuella modifiers på den icke-kyrilliska indatan vara ifred. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.11 (CEST)
::Eller, rättare sagt, den composar á, é, ó, ú, och í, vilket är vad som kan komma från den kyrilliska delen av datan. Om de förekommer i den icke-kyrilliska delen av indata composas de också. Andra slags modifiers låter den vara. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.15 (CEST)
:::{{@|Gabbe}} Jag har svårt att avgöra vad modulen ''borde'' göra rörande composed och decomposed. Allt detta är i stort sett obeprövad mark för mig också :). Man kan googla och man kan snegla på enwikt som ''ibland'' redan kan ha löst problemet som man försöker lösa. Om man lägger till tester för de här sakerna så blir det också åtminstone tydligt hur vår avsikt är att modulen ska fungera, och fungerande tester visar att koden fungerar som det är tänkt. Blir man i ett senare skede klokare och vill ändra avsikt, är det lätt att ändra testerna, och sedan ändra i koden. Om indata med "decomposed" tecken förekommer kanske man kan lägga dem i en kategori dels om man anser att det är fel att ha sådan indata, dels för att senare granska de fall som uppstått och vid en senare tidpunkt avgöra vad man borde göra - korrigera indata eller göra ytterligare en ändring i modulen. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.08 (CEST)
== Några funderingar om modulkoden ==
Har några funderingar om modulkoden och förslag på ändringar:
1. Varför inte ange argumentets namn direkt?
<br><code>function export.tr( argument )</code>
<br><code>local text = argument</code>
<br>->
<br><code>function export.tr(text)</code>
2. a)Varför heter funktionen accentuera_jo och inte bara accentuera? Vad betyder jo? (föreslår att mellanslagen tas bort för enhetligt utseende). Också bra med engelska namn på funktioner. Kommentaren är vilseledande <br>
<code>function accentuera_jo ( text )</code>
<br>->
<br><code>function accentuate(text)</code>
3. Stilguiden rekommenderar kod utan kommentarer och erbjuder länkar till fördjupning om skälen till varför det är bra. Kan funktionens namn göras tydligare så slipper vi kommentarer helt. Kan man säga att man explicit lägger till accenter till textsträngen? I så fall kanske funktionen kan heta
<br><code>function accentuate_explicitly(text)</code>
4. Bra med engelska namn på funktioner, och att ha "ru" i funktionsnamnet är överflödigt.
<br><code>function transkribera_ru(text)</code>
<br>->
<br><code>function transliterate(text)</code>
5. Att accentuera den ryska texten, är inte det en del av translitterationsprocessen? Isåfall kanske anropet till accentuera-funktionen ska flytta in i transliterate-funktionen.
6. Varför returnerar inte transliterate-funktionen det vi vill ha? Den returnerar en tabell som vi måste hantera och göra om till en textsträng. Det kan transliterate-funktionen ta hand om. En textsträng borde vi kunna få serverat på ett silverfat istället. Koden blir isåfall:
<code>function export.tr(text)
return transliterate(text)
end</code>
7. Wow. Det enda tr-funktionen gör är att anropa transliterate-funktionen och returnera vad den funktionen returnerar. Nu blir det uppenbart att vi inte behöver nån transliterate-funktion då vi lika gärna kan placera koden direkt i tr-funktionen.
8. De där köfunktionerna verkar återanvändas i flera moduler. Det finns en programmeringsprincip som heter DIY - don't repeat yourself. De borde kanske brytas ut till en egen hjälpmodul? Samtidigt ser det rätt rörigt ut när de används. Man måste liksom veta vad koden är tänkt att göra för att förstå vad den gör. Jag undrar om det finns något alternativt angreppssätt. Kanske inte. Jag får fundera lite till. Man kan säkert fila på det lite grann, åtminstone. Men lättare när testerna är på plats... ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 05.51 (CEST)
:{{@|Dodde}}: Jag har ännu inte hunnit översatt alla variabel- och funktionsnamn till engelska. Jag har för avsikt att hinna färdigt med det innan månaden är slut. Funktionen "accentuera_jo" heter så eftersom den accentuerar (sätter dit en akut accent "´") på bokstaven "jo" (ё). En översättning till engelska skulle alltså bli "accentuate_yo". Den accentuerar inte någon annan bokstav än just ''jo'' ("yo" på engelska). Syftet med den funktionen är just det här problemet med Gorbatjov / Gorbatjóv. Att det förut blev "Gorbatjov" (utan accent) betraktade jag som en feature, inte en bugg. LA2 beskrev det som mycket mer användarvänligt om det görs automatiskt. Man kan ha olika åsikter, men jag är benägen att hålla med LA2. Jag kan föreställa mig att det finns situationer där man faktiskt vill ha utan accent. Då kommer det eventuellt vara relevant att kunna anropa den större funktionen utan att ha kört "accentuera_jo" / "accentuate_yo" först. Det kan man antingen lösa genom att anropa olika funktionsnamn, eller genom att ha en "boolean" som avgör huruvida "accentuera_jo" ska köras innan resten av funktionen körs.
:Att köfunktionerna används i flera moduler har du rätt i. Om det finns en konsensus här att det vore bättre att därför ha dem utanför modulen så kan jag flytta dem till en separat modul med generella köfunktioner. Jag tänkte att det var en lite för "simpel" sak för att ha en egen modul för. Köer är rätt grundläggande. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 08.06 (CEST)
:{{@|Dodde}}: Jag kan väl också säga så här: Från och med september kommer jag ha saker i mitt liv utanför Wiktionary som gör att jag kommer delta här i mer begränsad omfattning. Jag kommer inte sluta med Wiktionary, men jag kommer vara märkbart mindre aktiv än vad jag varit den här veckan. Tills dess har jag alltså begränsat med tid. Den tiden kan prioriteras på lite olika saker. Några exempel (i ingen särskild ordning):
:#Lägga till nya funktioner. Exempel på det vore det LA2 pratade om, att när ett ord på ryska har fler än en stavelse, men inga accent-tecken, så ska sidan som anropar modulen placeras i en dold kategori. Då har användaren varit "lat" och glömt att accentuera texten tillräckligt, vilket borde åtgärdas manuellt.
:#Göra "/test" mer utförlig angående vad jag betraktar som modulernas features redan idag, så att andra användare lättare förstår vad som mallen och modulen "förväntas" göra.
:#Göra dokumentationen som ska ligga under "/dok"
:#Göra "estetiska" förändringar av själva källkoden. Med det menar jag sådant som gör koden mer i linje med Stilguiden (engelska funktionsnamn, tabbar för indentering, osv), men som i övrigt inte förändrar vilken utdata som kommer ifrån en given indata. Sånt är även det viktigt för att andra användare lättare ska kunna ändra koden.
:Detta gäller för såväl de här modulerna som används av {{mall|tr}}, men även för ett annat projekt jag jobbat med, nämligen {{mall|fr-verb-test}} (och de moduler som den använder, [[Modul:fr-verb-artikel]] och [[Modul:fr-verb-konj]]). Helst ska jag förstås göra alla de ovanstående de närmsta två veckorna. Men det kommer jag nog inte hinna om vi ska vara realistiska. Det jag beskriver ovan tar olika lång tid och är olika viktigt. Om du fick önska, vad tycker du vore mest högprioriterat av dessa? I vilken ordning borde jag fokusera min energi de närmsta par veckorna? Jag tänker mig att en gedigen "/test" för varje modul är det som har allra högst prioritet. Håller du med? [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 09.48 (CEST)
::{{@|Gabbe}} Tack för förklaringen av "jo". Då förstår jag. Jag ska ändra testerna rörande detta.
::
::Att ha genomtänkta gedigna tester är a och o ur så många synvinklar. Jag håller med om att det är prioriterat. Kvalitet före kvantitet. Men också: Gör Modul:translit/ru ordentligt först, så blir Modul:translit/uk så gott som ett copy-paste-jobb. Med DRY-principen behöver dessutom minimalt med kod copy-pastas. Och med bra, genomtänkt kod, blir även andra moduler enklare att göra. Man behöver inte diskutera hur man löser samma problem, om och om igen. Har man löst ett problem på ett tillfredsställande sätt i en modul, kan man återanvända den lösningen. När testerna är genomtänkta och kompletta, så finns det inget sätt för modulkoden att göra fel (utan att testerna misslyckas) och på så sätt bäddar man för att fler kan bidra till modulen i framtiden utan att någon ska behöva vara orolig för att det får oväntade konsekvenser.
::
::Angående extra funktionalitet. Är det bra, genomtänkt funktionalitet, lägg till det som en del av testerna i ett tidigt skede. Skulle det visa sig att en del funktioner är komplicerade att inkludera, så kan man kommentera ut testerna så länge, längre fram. Om du inte vet exakt hur testerna ska utformas, skriv en kommentar med en beskrivning och vad som behöver testas, så kan man återkomma till det så fort man har en lösning på det.
::
::När det gäller kosmetiska förändringar. Framförallt är det viktigt att funktioner som exporteras har genomtänkta namn och att deras syntax är genomtänkta. Det är endast dessa som bör dokumenteras. Det blir lksom ett kontrakt med användaren, att "om du använder dig av modulen på det som beskrivs här, så kan du lita på att det fungerar, även i framtiden". Om vi vill ändra på en funktions namn eller hur den fungerar, så måste vi ta höjd för alla andra moduler och/eller mallar, och i förlängningen mallanrop på sidor med uppslag, korrigeras så att de fungerar med vår uppdatering. Och det kan vara ett stort jobb, som kräver att tiotusentals sidor uppdateras. Ungefär som är nödvändigt med sidor som använder {{mall|härledning}} just nu. Men, det är svårt att förutse alla situationer som kan uppstå. Därför hamnar vi ändå i de här situationerna ibland. Men om vi lägger extra tid och energi på att få det rätt från början, genom att fokusera på kvalitet i varje del, så undviker vi att skapa onödigt jobb för oss, och andra, i framtiden. Och vi undviker att skapa så stora jobb att ingen nånsin lär orka ta tag i dem ens. Hur man ska anropa modulens tr-funktion i olika fall som att accentuera "jo" eller inte är en sådan relevant sak att ta i beaktning. Och här kan man behöva fundera på att sättet att anropa Modul:translit-ru sker på ett liknande sätt som hur andra språkspecifika translit-moduler funkar, eftersom ju den generella Modul:translit är den som anropas från olika språks mallar. Angående Modul:fr-verb-konj så tänker jag att enhetlig namngivning på grammatikmoduler är språkkod-ordklass. "Konj" bör eventuellt vara en parameter. Och det är viktigt att alla grammatikmoduler bygger på [[Modul:grammar]] och [[Modul:grammar-table]]. Se mer här: [[Modul:grammar-example]]. Kanske försöker du återuppfinna hjulet på nytt i vissa avseenden?
::
::När det gäller dokumentationen så tänker jag att den kan göras i slutet, när man löst alla problem och vet hur modulen (eller mallen) faktiskt fungerar. I slutet ''men(!)'' innan modulen börjar användas. Det finns inget tristare än att behöva gå igenom sidor med uppslag manuellt och ändra mallsyntax för att mallen eller modulen börjat användas innan den varit klar och genomtänkt. När man skriver dokumentationen så kan man upptäcka saker, precis som när man skapar testerna, allt man har missat att tänka på någonting. Och det bjuder också in andra deltagare att använda mallen och förstå hur den funkar. Alla är inte programmerare eller mallkodsexperter. Vi har tyvärr grammatikmallar och andra mallar idag som endast den personen som skapade mallen förstår sig på och kan använda. Det kanske kan ordnas med robotändringar och syntaxändringar i framtiden, men det hade ju varit önskvärt om det hade gjorts ordentligt från början. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 11.19 (CEST)
l9d4l8xn6kh7uo3c6tb4un4vd173771
3703345
3703344
2022-08-19T09:21:39Z
Dodde
309
/* Några funderingar om modulkoden */
wikitext
text/x-wiki
== Stilguide för moduler ==
Det finns en [[Wiktionary:Stilguide/Skapa_en_modul|stilguide för moduler]] som kanske har översetts när den här modulen och kanske en del andra moduler skapades. Jag skapade det här exempeltestet som en början till att belysa några av punkterna som tas upp i Stilguiden. Jag uppskattar försöket att fixa till det misslyckade enhetstestet.
Att ett enhetstest misslyckas behöver inte vara något negativt. Det är grunden i TDD, test driven development, vilket är en teknik för att säkerställa att koden som skrivs är robust och inte lätt går sönder om man senare gör ändringar i koden. Den går i korthet ut på att man som steg ett skapar ett test som misslyckas. Sedan skapar man koden som får testet att lyckas. [https://canro91.github.io/2021/02/05/FailingTest/ https://canro91.github.io/2021/02/05/FailingTest/] var en sida som kom upp när jag googlade. Jag tänker att det är en relevant aspekt eftersom än skadlig ändring i en modul kan få konsekvenser för informationen på tiotusentals sidor. Så det misslyckade enhetstestet var alltså ett tecken på att någonting i själva modulen behöver åtgärdas - problemet var inte enhetstestet i sig, så att säga.
Exempeltestet anropar en funktion som inte finns. Enligt stilguiden ska funktionens namn vara på engelska och skrivas med camelCase. "transkribera" är därför inte ett giltigt funktionsnamn. Jag föreslår "<s>br</s>tr", som är samma som parameternamnet i flera mallar, bl.a. översättningsmallarna. Det råkar också vara det funktionsnamn som engelska translitterationsmoduken för ryska använder. Men, andra engelska funktionsnamn kan absolut övervägas.
Eftersom modulen är en hjälpmodul för huvudmodulen Modul:translit som i sin tur ska kunna användas av alla möjliga mallar och moduler tänker jag att det faktiskt är den här modulens funktioner som ska testat direkt - inte genom att anropa en mall som anropar en modul som anropar den här modulen. Om modulen endast är tänkt att användas av en specifik mall så kan det finnas skäl att använda UnitTest-funktionen "preprocess_equals" istället för "equals".
När en modul anropas direkt av en mall, så ska "frame" användas som parametertabell, men Modul:translit/ru ska anropas av Modul:translit och inte direkt av en mall. Så "tr"-funktionen bör formas så att det är enkelt och smidigt att anropa funktionen - och vad är enklare och smidigare än att anropa funktionen med ett icke namngivet argument, alltså modul.tr(text_som_ska_translittereras)? Så tänkte jag när jag skapade exempelenhetstestet iallafall.
Att jag benämnde det "exempeltest" var sedan att det allra bästa vore ju sedan att med enhetstester täcka in så mycket som möjligt av modulens funktionalitet. På detta sätt blir testsidan en ritning för hur man vill att modulen ska fungera och sedan är det förhållandevis enkelt att skapa själva modulen enligt den ritningen. [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 04.47 (CEST)
::{{@|Dodde}}: Ja, jag har mycket riktigt försummat stilguiden. {{=)}} Det var dock inte med flit. Jag kände inte till den förrän nu. Jag skriver om modulerna (vad gäller funktionsnamn, indentering via tabb, osv.) för att bli mer i enlighet med guiden. Jag antar att det du föreslår är att "transkribera"-funktionen ska heta '''tr''' (inte "br"). En fråga redan nu: finns det också en stilguide för dokumentationen som ska hamna på "/dok"? Eller åtminstone en modul som anses vara så exemplariskt dokumenterad att jag kan utgå ifrån den som något slags rättesnöre?
::Vad gäller enhetstesterna så har jag hittills gjort sånt offline i min Lua IDE innan jag gör någon ändring på Wiktionary. Precis som du nämner så började jag med en lista på "failing tests", för att sen skriva om modulen i enlighet med beteendet jag ville ha. Helt enligt TDD. Skälet till att jag gjort sånt på min stationära dator är att jag tycker det är lättare att utföra mer intrikata tester där. Exempelvis: när det står "ó", är det lika med "o" följt av Unicodetecknet U+0301, eller är det lika med U+00F3? Jag fattar att när en mall eller modul ska användas på tiotusentals sidor så blir det mycket mer betryggande ifall sådana tester sköts offentligt via "/test". Det är också vad jag avser göra framgent.
::Jag skriver också om modulerna så att {{mall|tr}} anropar [[Modul:translit]] som sen anropar [[Modul:translit/ru]] (istället för, som nu, att mallen direkt anropar de språkspecifika modulerna). [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 06.30 (CEST)
:::{{@|Gabbe}} Haha, oops, tr, inte br, tack! Det finns ingen stilguide för dokumentation vad jag känner till, men jag tänker att lämpliga delar att ha med på en dokumentationssida kan vara att förklara modulens syfte, hur man använder den (från en mall? från en annan modul? båda?), en specifikation för hur (de publika) funktionerna beter sig, dvs. modulens gränssnitt, och slutligen att själva testerna inkluderas, t.ex. som på [[Modul:h3/dok]] som kanske inte är bra nog att utgå från som rättesnöre, men kanske den, liksom ett antal andra moduler kan fungera som lite inspiration. Olika moduler kanske kan behöva lite olika typer av dokumentation. Man kan behöva tänka på var dokumentationen placeras och att rätt information hamnar på rätt plats. Är det lämpligt att beskriva ''mallens'' användning, alltså hur en användare ska använda en tillhörande mall, i ''modulens'' dokumentation? Eller är det hur mallen, alltså den som skapar själva mallkodeen, bör använda modulen som ska beskrivas? Troligen det senare.
:::Har du möjlighet att ansluta till Wiktionarys Discord-chatt? Isåfall kan vi diskutera lite testning lite mer direkt och kanske utforma relevanta tester tillsammans. Just nu klurar jag på vad det är alla dina nytillagda tester testar för något :) ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.48 (CEST)
::::@[[Användare:Dodde|Dodde]]: (1) Tack för tipset! Jag funderar vidare på vad som ska dokumenteras var. (2) Nej, jag har tyvärr inte möjlighet att ansluta till Wiktionarys Discord-chatt, eller något annat forum utanför Wiktionary. Ledsen för det. (3) De nytillagda testerna strävar efter att följa de som anges i [https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf Svenska språkregler]. Jag har tagit bort några av de rena dubbletterna, samt de som inte hör till ryska. Vad jag angett som "förväntat" beteende avviker från Svenska språkregler i två avseenden. Dels accentuerar modulen ё automatiskt i flerstaviga ord (så att det blir Gorbatjóv, inte Gorbatjov). Svenska skrivregler har istället alla ord utan accent (vilket var vad jag implementerade först). Varför jag accentuerar automatiskt följer av meningsutbytet mellan mig och LA2 på [[Wiktionary:Bybrunnen#Modul för translitterering av ryska]]. Det andra avseendet som jag avsiktligen avviker från Svenska skrivregler är deras sista exempel: namnet Ярослав. De har tyvärr skrivit Яролав, vilket egentligen blir Jarolav. Tråkigt när det är "fel i facit", så att säga, men så kan det bli. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 13.03 (CEST)
:::::{{@|Gabbe}}, okej, tack för klargörande. Jag hoppas jag att det är ok att jag ändrar i mallar och moduler direkt, så kan vi diskutera ändringarna i efterhand om frågor uppstår. Eftersom replikskiftet på en diskussionssida på Wiktionary sker med mycket mer sällan än det typiskt sker i en chatt, kanske det är mer pragmatiskt att göra så, så att det inte tar onödigt lång tid att skapa en modul eller mall?
:::::När det gäller testerna, så tänker jag att det är viktigt att det dels är tydligt ''vad'' som testas, men också att rätt saker testas, och att det som testas är så isolerat som möjligt. Jag tänker att testerna med namnen från Skrivregler-dokumentet i testerna inte riktigt gör det. Jag ska försöka ändra direkt i testkoden, men vi behöver hjälpas åt för att det ska bli rätt i slutänden. Här förklarar jag hur jag tänker:
:::::1. gruppera liknande tester i var sin funktion och ge funktionerna talande namn. Här kan det ibland vara nödvändigt att lägga till en förklarande kommentar. Inled funktionsnamnet med något gemensamt så att de hamnar i en ordning som blir översiktlig, exempelvis test1_blabla, test2_blabla, eller test01 om antalet testgrupper är 10 eller fler. Enklare, mer allmängiltiga tester längre upp, mer specialiserade tester längre ner för att ge en bättre överblick. Testerna inkluderas ju på sidan med dokumentation, så att det ger en samlad överblick är väsentligt.
:::::2. låt oss testa varje enskild funktionalitet för sig. Svenska språkregler ger exemplet "К к k Куприн → Kuprin", och nu finns testet self:equals('mut.tr("Куприн")', mut.tr("Куприн"), "Kuprin"). Vad vi är intresserade av här är egentligen att kolla att К translittereras till K, varför inte testa just bara den här bokstaven, då, varför lägga till fler felkällor än nödvändigt? Men det viktiga är att vi ju ''också'' vill testa så att к blir k, men к finns ju inte ens med i strängen "Куприн", så här missar vi något som borde testas. För att det inte ska bli så ofantligt många rader för de väldigt enkla testerna som testar varje bokstav enskilt, så grupperar jag dem fem och fem. Exakt hur grupperingar sker spelar inte så stor roll, syftet är bara att det ska bli tydligt och överskådligt.
:::::3. en fråga dök upp och det borde avspeglas i testerna: borde Ж bli ZJ när det står självständigt eller i ett ord med bara kyrilliska versaler och Zj när det förekommer framför en gemen bokstav? (Vem hade ens tänkt på detta utan tester? :D) I testet använder jag mig av А och a som hjälp-bokstäver.
:::::4. vad händer när (3.) skickas in som en del av en mening? Det bör testas så att man vet att modulen klarar av att translitterera rätt även när ordet inte är isolerat, utan förekommer med andra ord skiljetecken.
:::::5. "visa förhandsgranskning" med "Modul:translit/ru/test" för att se att testkoden ser ut som det är tänkt. Publicera ändringar. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 02.01 (CEST)
:{{@|Dodde}}: Några kommentarer. Jag håller med om att en chatt skulle gå snabbare, men det är tyvärr inte ett alternativ för mig. Vidare angående (3) som är en viktig fråga: Normalt use-case på Wiktionary är ord med enbart gemener. Naturligtvis finns det många ord som innehåller versaler. Ett ord som ''[[кубик Рубика]]'', då ska stora bokstaven i andra ordet bli stor. Däremot är det mindre vanligt med ord som har två stora versaler på rad. I sådana fall är det vanligast (i den verkligen världen utanför Wiktionary) att ЖА blir ZjA. Detta för att förtydliga att "j":et inte är en oberoende bokstav. Eftersom det bara finns en stor bokstav innan A på kyrilliska bör texten med latinska bokstäver också bara ha en stor bokstav innan A:et. Det är det konventionella sättet att göra. När en stor bokstav på kyrilliska blir fler än en bokstav på latinska, då är det bara den första av de två bokstäverna som ska vara stor. Se till exempel inledningen till Wikipediasidan "[[w:en:Cheka|Cheka]]". Där blir förkortningen ВЧК till VChK (inte VCHK). På svenska är det vanligaste sättet att göra ВЧК till VTjK (inte VTJK), vilket min modul också gör idag. Det finns bara tre stora bokstäver på kyrilliska, därför finns det bara tre stora bokstäver på dess motsvarighet i latinska bokstäver. En person kan se VTjK på svenska och omedelbart fatta att det är en trebokstavsförkortning på ryska. Finns det välmotiverade argument till att "VTJK" skulle vara det konventionella sättet att göra på i svenska så är jag lyhörd för det. Annars lägger jag till att ВЧК ska bli VTjK som en rad i "/test", samt tar bort "JE,JO,ZJ,ZJA". Min uppfattning är att de senare är felaktiga allihopa.
:Det är naturligtvis okej att du ändrar i mallar och moduler direkt! {{=)}} Det här är ju en wiki, trots allt. Jag "äger" inte något av detta. Om du gör en ändring som jag uppfattar som en förändring till det sämre kan jag ju alltid revert:a.
:Jag kan lägga till fler rader som förtydligar exakt vad varje test testar för något. Jag antar att det är via funktionsnamnet på engelska som det ska klargöras (som du gjorde)? Fem och fem låter förståndigt. Finns det något tak på hur många tester testsidan kan innehålla? [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 08.06 (CEST)
== Gorbatjóv-testet ==
{{@|Gabbe}} Det förväntade resultatet av Gorbatjóv-testet är "Gorbatjóv" (ó som ett unikt "pre composed" tecken med Unicode-kodpunkt 00F3), men det som returneras av modulen är "Gorbatjóv" (ó som två separata tecken, o och ett "combining character" ´ med Unicode-kodpunkt 0301) och när dessa två strängar jämförs så misslyckas testet, även om de två strängarna ''ser'' likadana ut. Att enhetstestet misslyckas är alltså korrekt och koden behöver åtgärdas för att testat ska lyckas. (Som i stycket ovan, att åtgärda testet i sig, så att det lyckas är inte rätt väg att gå). Och kanske är det så att andra moduler behöver fixas på motsvarande sätt. Det finns något som heter Unicode normalization, och det kan lite förenklat utifrån just detta exemplet ske genom att dela upp ett tecken i två, "decompose", eller slå ihop dem till en, "compose". Givet att du har två "decomposed" tecken, o och ´, så behöver modulen en funktion som "compose" dem till en, ó , vilket kallas för NFC, Normalization Form Composition. Det finns kanske en färdig sådan kod man isåfall måste importera till svwikt. Men det bästa vore no att inte skapa några "decomposed" characters till att börja med, om det är möjligt att undvika? ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 05.58 (CEST)
:{{@|Dodde}}: Jag kan ändra koden så att den inte skapar några "decomposed" som utdata. Frågan är om det är rätt väg att gå. Låt mig ge några exempel: Ett typiskt indata till den ryska modulen är ''каню́ля''. Eftersom det (vad jag vet) inte finns något "composed" tecken för ю́ så skickas det in som ю med modifiern. Det förvandlar sen min mall i nuläget till {{tr|ru|каню́ля}}, alltså "u" med "´" modifiern. Då kan man förstås göra om så att den istället returnerar kanjúlja (alltså composed). Då kommer genast en följdfråga. Här på Wiktionary har vi även möjlig indata som blandar kyrillisk och icke-kyrillisk text. Exempel är [[IP-адрес]] och [[β-распад]]. Just de två har inga modifiers på den icke-kyrilliska biten. Hur borde mallen göra ifall de hade haft det? Ska ÍP-адрес som indata ge olika utdata ifall det första tecknet är decomposed eller inte? Min tanke med modulen är att låta modifiers på icke-kyrillisk indata vara ifred. Om de var decomposed i indata blir de det i utdata också. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 07.33 (CEST)
:{{@|Dodde}}: Jag har gjort så att den istället "composar" ó i Gorbatjóv (och motsvarande för de andra vokalerna i den kyrilliska delen av indatan). När indata blandar kyrilliska och icke-kyrilliska tecken så låter den däremot eventuella modifiers på den icke-kyrilliska indatan vara ifred. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.11 (CEST)
::Eller, rättare sagt, den composar á, é, ó, ú, och í, vilket är vad som kan komma från den kyrilliska delen av datan. Om de förekommer i den icke-kyrilliska delen av indata composas de också. Andra slags modifiers låter den vara. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.15 (CEST)
:::{{@|Gabbe}} Jag har svårt att avgöra vad modulen ''borde'' göra rörande composed och decomposed. Allt detta är i stort sett obeprövad mark för mig också :). Man kan googla och man kan snegla på enwikt som ''ibland'' redan kan ha löst problemet som man försöker lösa. Om man lägger till tester för de här sakerna så blir det också åtminstone tydligt hur vår avsikt är att modulen ska fungera, och fungerande tester visar att koden fungerar som det är tänkt. Blir man i ett senare skede klokare och vill ändra avsikt, är det lätt att ändra testerna, och sedan ändra i koden. Om indata med "decomposed" tecken förekommer kanske man kan lägga dem i en kategori dels om man anser att det är fel att ha sådan indata, dels för att senare granska de fall som uppstått och vid en senare tidpunkt avgöra vad man borde göra - korrigera indata eller göra ytterligare en ändring i modulen. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.08 (CEST)
== Några funderingar om modulkoden ==
Har några funderingar om modulkoden och förslag på ändringar:
1. Varför inte ange argumentets namn direkt?
<br><code>function export.tr( argument )</code>
<br><code>local text = argument</code>
<br>->
<br><code>function export.tr(text)</code>
2. a)Varför heter funktionen accentuera_jo och inte bara accentuera? Vad betyder jo? (föreslår att mellanslagen tas bort för enhetligt utseende). Också bra med engelska namn på funktioner. Kommentaren är vilseledande <br>
<code>function accentuera_jo ( text )</code>
<br>->
<br><code>function accentuate(text)</code>
3. Stilguiden rekommenderar kod utan kommentarer och erbjuder länkar till fördjupning om skälen till varför det är bra. Kan funktionens namn göras tydligare så slipper vi kommentarer helt. Kan man säga att man explicit lägger till accenter till textsträngen? I så fall kanske funktionen kan heta
<br><code>function accentuate_explicitly(text)</code>
4. Bra med engelska namn på funktioner, och att ha "ru" i funktionsnamnet är överflödigt.
<br><code>function transkribera_ru(text)</code>
<br>->
<br><code>function transliterate(text)</code>
5. Att accentuera den ryska texten, är inte det en del av translitterationsprocessen? Isåfall kanske anropet till accentuera-funktionen ska flytta in i transliterate-funktionen.
6. Varför returnerar inte transliterate-funktionen det vi vill ha? Den returnerar en tabell som vi måste hantera och göra om till en textsträng. Det kan transliterate-funktionen ta hand om. En textsträng borde vi kunna få serverat på ett silverfat istället. Koden blir isåfall:
<code>function export.tr(text)
return transliterate(text)
end</code>
7. Wow. Det enda tr-funktionen gör är att anropa transliterate-funktionen och returnera vad den funktionen returnerar. Nu blir det uppenbart att vi inte behöver nån transliterate-funktion då vi lika gärna kan placera koden direkt i tr-funktionen.
8. De där köfunktionerna verkar återanvändas i flera moduler. Det finns en programmeringsprincip som heter DIY - don't repeat yourself. De borde kanske brytas ut till en egen hjälpmodul? Samtidigt ser det rätt rörigt ut när de används. Man måste liksom veta vad koden är tänkt att göra för att förstå vad den gör. Jag undrar om det finns något alternativt angreppssätt. Kanske inte. Jag får fundera lite till. Man kan säkert fila på det lite grann, åtminstone. Men lättare när testerna är på plats... ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 05.51 (CEST)
:{{@|Dodde}}: Jag har ännu inte hunnit översatt alla variabel- och funktionsnamn till engelska. Jag har för avsikt att hinna färdigt med det innan månaden är slut. Funktionen "accentuera_jo" heter så eftersom den accentuerar (sätter dit en akut accent "´") på bokstaven "jo" (ё). En översättning till engelska skulle alltså bli "accentuate_yo". Den accentuerar inte någon annan bokstav än just ''jo'' ("yo" på engelska). Syftet med den funktionen är just det här problemet med Gorbatjov / Gorbatjóv. Att det förut blev "Gorbatjov" (utan accent) betraktade jag som en feature, inte en bugg. LA2 beskrev det som mycket mer användarvänligt om det görs automatiskt. Man kan ha olika åsikter, men jag är benägen att hålla med LA2. Jag kan föreställa mig att det finns situationer där man faktiskt vill ha utan accent. Då kommer det eventuellt vara relevant att kunna anropa den större funktionen utan att ha kört "accentuera_jo" / "accentuate_yo" först. Det kan man antingen lösa genom att anropa olika funktionsnamn, eller genom att ha en "boolean" som avgör huruvida "accentuera_jo" ska köras innan resten av funktionen körs.
:Att köfunktionerna används i flera moduler har du rätt i. Om det finns en konsensus här att det vore bättre att därför ha dem utanför modulen så kan jag flytta dem till en separat modul med generella köfunktioner. Jag tänkte att det var en lite för "simpel" sak för att ha en egen modul för. Köer är rätt grundläggande. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 08.06 (CEST)
:{{@|Dodde}}: Jag kan väl också säga så här: Från och med september kommer jag ha saker i mitt liv utanför Wiktionary som gör att jag kommer delta här i mer begränsad omfattning. Jag kommer inte sluta med Wiktionary, men jag kommer vara märkbart mindre aktiv än vad jag varit den här veckan. Tills dess har jag alltså begränsat med tid. Den tiden kan prioriteras på lite olika saker. Några exempel (i ingen särskild ordning):
:#Lägga till nya funktioner. Exempel på det vore det LA2 pratade om, att när ett ord på ryska har fler än en stavelse, men inga accent-tecken, så ska sidan som anropar modulen placeras i en dold kategori. Då har användaren varit "lat" och glömt att accentuera texten tillräckligt, vilket borde åtgärdas manuellt.
:#Göra "/test" mer utförlig angående vad jag betraktar som modulernas features redan idag, så att andra användare lättare förstår vad som mallen och modulen "förväntas" göra.
:#Göra dokumentationen som ska ligga under "/dok"
:#Göra "estetiska" förändringar av själva källkoden. Med det menar jag sådant som gör koden mer i linje med Stilguiden (engelska funktionsnamn, tabbar för indentering, osv), men som i övrigt inte förändrar vilken utdata som kommer ifrån en given indata. Sånt är även det viktigt för att andra användare lättare ska kunna ändra koden.
:Detta gäller för såväl de här modulerna som används av {{mall|tr}}, men även för ett annat projekt jag jobbat med, nämligen {{mall|fr-verb-test}} (och de moduler som den använder, [[Modul:fr-verb-artikel]] och [[Modul:fr-verb-konj]]). Helst ska jag förstås göra alla de ovanstående de närmsta två veckorna. Men det kommer jag nog inte hinna om vi ska vara realistiska. Det jag beskriver ovan tar olika lång tid och är olika viktigt. Om du fick önska, vad tycker du vore mest högprioriterat av dessa? I vilken ordning borde jag fokusera min energi de närmsta par veckorna? Jag tänker mig att en gedigen "/test" för varje modul är det som har allra högst prioritet. Håller du med? [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 09.48 (CEST)
::{{@|Gabbe}} Tack för förklaringen av "jo". Då förstår jag. Jag ska ändra testerna rörande detta.
<br>
::Att ha genomtänkta gedigna tester är a och o ur så många synvinklar. Jag håller med om att det är prioriterat. Kvalitet före kvantitet. Men också: Gör Modul:translit/ru ordentligt först, så blir Modul:translit/uk så gott som ett copy-paste-jobb. Med DRY-principen behöver dessutom minimalt med kod copy-pastas. Och med bra, genomtänkt kod, blir även andra moduler enklare att göra. Man behöver inte diskutera hur man löser samma problem, om och om igen. Har man löst ett problem på ett tillfredsställande sätt i en modul, kan man återanvända den lösningen. När testerna är genomtänkta och kompletta, så finns det inget sätt för modulkoden att göra fel (utan att testerna misslyckas) och på så sätt bäddar man för att fler kan bidra till modulen i framtiden utan att någon ska behöva vara orolig för att det får oväntade konsekvenser. <br>
::Angående extra funktionalitet. Är det bra, genomtänkt funktionalitet, lägg till det som en del av testerna i ett tidigt skede. Skulle det visa sig att en del funktioner är komplicerade att inkludera, så kan man kommentera ut testerna så länge, längre fram. Om du inte vet exakt hur testerna ska utformas, skriv en kommentar med en beskrivning och vad som behöver testas, så kan man återkomma till det så fort man har en lösning på det.
<br>
::När det gäller kosmetiska förändringar. Framförallt är det viktigt att funktioner som exporteras har genomtänkta namn och att deras syntax är genomtänkta. Det är endast dessa som bör dokumenteras. Det blir lksom ett kontrakt med användaren, att "om du använder dig av modulen på det som beskrivs här, så kan du lita på att det fungerar, även i framtiden". Om vi vill ändra på en funktions namn eller hur den fungerar, så måste vi ta höjd för alla andra moduler och/eller mallar, och i förlängningen mallanrop på sidor med uppslag, korrigeras så att de fungerar med vår uppdatering. Och det kan vara ett stort jobb, som kräver att tiotusentals sidor uppdateras. Ungefär som är nödvändigt med sidor som använder {{mall|härledning}} just nu. Men, det är svårt att förutse alla situationer som kan uppstå. Därför hamnar vi ändå i de här situationerna ibland. Men om vi lägger extra tid och energi på att få det rätt från början, genom att fokusera på kvalitet i varje del, så undviker vi att skapa onödigt jobb för oss, och andra, i framtiden. Och vi undviker att skapa så stora jobb att ingen nånsin lär orka ta tag i dem ens. Hur man ska anropa modulens tr-funktion i olika fall som att accentuera "jo" eller inte är en sådan relevant sak att ta i beaktning. Och här kan man behöva fundera på att sättet att anropa Modul:translit-ru sker på ett liknande sätt som hur andra språkspecifika translit-moduler funkar, eftersom ju den generella Modul:translit är den som anropas från olika språks mallar. Angående Modul:fr-verb-konj så tänker jag att enhetlig namngivning på grammatikmoduler är språkkod-ordklass. "Konj" bör eventuellt vara en parameter. Och det är viktigt att alla grammatikmoduler bygger på [[Modul:grammar]] och [[Modul:grammar-table]]. Se mer här: [[Modul:grammar-example]]. Kanske försöker du återuppfinna hjulet på nytt i vissa avseenden?
<br>
::När det gäller dokumentationen så tänker jag att den kan göras i slutet, när man löst alla problem och vet hur modulen (eller mallen) faktiskt fungerar. I slutet ''men(!)'' innan modulen börjar användas. Det finns inget tristare än att behöva gå igenom sidor med uppslag manuellt och ändra mallsyntax för att mallen eller modulen börjat användas innan den varit klar och genomtänkt. När man skriver dokumentationen så kan man upptäcka saker, precis som när man skapar testerna, allt man har missat att tänka på någonting. Och det bjuder också in andra deltagare att använda mallen och förstå hur den funkar. Alla är inte programmerare eller mallkodsexperter. Vi har tyvärr grammatikmallar och andra mallar idag som endast den personen som skapade mallen förstår sig på och kan använda. Det kanske kan ordnas med robotändringar och syntaxändringar i framtiden, men det hade ju varit önskvärt om det hade gjorts ordentligt från början. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 11.19 (CEST)
l7tc96szh0wtzebwdf1c346xfvex9z2
3703349
3703345
2022-08-19T09:32:53Z
Dodde
309
/* Stilguide för moduler */
wikitext
text/x-wiki
== Stilguide för moduler ==
Det finns en [[Wiktionary:Stilguide/Skapa_en_modul|stilguide för moduler]] som kanske har översetts när den här modulen och kanske en del andra moduler skapades. Jag skapade det här exempeltestet som en början till att belysa några av punkterna som tas upp i Stilguiden. Jag uppskattar försöket att fixa till det misslyckade enhetstestet.
Att ett enhetstest misslyckas behöver inte vara något negativt. Det är grunden i TDD, test driven development, vilket är en teknik för att säkerställa att koden som skrivs är robust och inte lätt går sönder om man senare gör ändringar i koden. Den går i korthet ut på att man som steg ett skapar ett test som misslyckas. Sedan skapar man koden som får testet att lyckas. [https://canro91.github.io/2021/02/05/FailingTest/ https://canro91.github.io/2021/02/05/FailingTest/] var en sida som kom upp när jag googlade. Jag tänker att det är en relevant aspekt eftersom än skadlig ändring i en modul kan få konsekvenser för informationen på tiotusentals sidor. Så det misslyckade enhetstestet var alltså ett tecken på att någonting i själva modulen behöver åtgärdas - problemet var inte enhetstestet i sig, så att säga.
Exempeltestet anropar en funktion som inte finns. Enligt stilguiden ska funktionens namn vara på engelska och skrivas med camelCase. "transkribera" är därför inte ett giltigt funktionsnamn. Jag föreslår "<s>br</s>tr", som är samma som parameternamnet i flera mallar, bl.a. översättningsmallarna. Det råkar också vara det funktionsnamn som engelska translitterationsmoduken för ryska använder. Men, andra engelska funktionsnamn kan absolut övervägas.
Eftersom modulen är en hjälpmodul för huvudmodulen Modul:translit som i sin tur ska kunna användas av alla möjliga mallar och moduler tänker jag att det faktiskt är den här modulens funktioner som ska testat direkt - inte genom att anropa en mall som anropar en modul som anropar den här modulen. Om modulen endast är tänkt att användas av en specifik mall så kan det finnas skäl att använda UnitTest-funktionen "preprocess_equals" istället för "equals".
När en modul anropas direkt av en mall, så ska "frame" användas som parametertabell, men Modul:translit/ru ska anropas av Modul:translit och inte direkt av en mall. Så "tr"-funktionen bör formas så att det är enkelt och smidigt att anropa funktionen - och vad är enklare och smidigare än att anropa funktionen med ett icke namngivet argument, alltså modul.tr(text_som_ska_translittereras)? Så tänkte jag när jag skapade exempelenhetstestet iallafall.
Att jag benämnde det "exempeltest" var sedan att det allra bästa vore ju sedan att med enhetstester täcka in så mycket som möjligt av modulens funktionalitet. På detta sätt blir testsidan en ritning för hur man vill att modulen ska fungera och sedan är det förhållandevis enkelt att skapa själva modulen enligt den ritningen. [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 04.47 (CEST)
::{{@|Dodde}}: Ja, jag har mycket riktigt försummat stilguiden. {{=)}} Det var dock inte med flit. Jag kände inte till den förrän nu. Jag skriver om modulerna (vad gäller funktionsnamn, indentering via tabb, osv.) för att bli mer i enlighet med guiden. Jag antar att det du föreslår är att "transkribera"-funktionen ska heta '''tr''' (inte "br"). En fråga redan nu: finns det också en stilguide för dokumentationen som ska hamna på "/dok"? Eller åtminstone en modul som anses vara så exemplariskt dokumenterad att jag kan utgå ifrån den som något slags rättesnöre?
::Vad gäller enhetstesterna så har jag hittills gjort sånt offline i min Lua IDE innan jag gör någon ändring på Wiktionary. Precis som du nämner så började jag med en lista på "failing tests", för att sen skriva om modulen i enlighet med beteendet jag ville ha. Helt enligt TDD. Skälet till att jag gjort sånt på min stationära dator är att jag tycker det är lättare att utföra mer intrikata tester där. Exempelvis: när det står "ó", är det lika med "o" följt av Unicodetecknet U+0301, eller är det lika med U+00F3? Jag fattar att när en mall eller modul ska användas på tiotusentals sidor så blir det mycket mer betryggande ifall sådana tester sköts offentligt via "/test". Det är också vad jag avser göra framgent.
::Jag skriver också om modulerna så att {{mall|tr}} anropar [[Modul:translit]] som sen anropar [[Modul:translit/ru]] (istället för, som nu, att mallen direkt anropar de språkspecifika modulerna). [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 06.30 (CEST)
:::{{@|Gabbe}} Haha, oops, tr, inte br, tack! Det finns ingen stilguide för dokumentation vad jag känner till, men jag tänker att lämpliga delar att ha med på en dokumentationssida kan vara att förklara modulens syfte, hur man använder den (från en mall? från en annan modul? båda?), en specifikation för hur (de publika) funktionerna beter sig, dvs. modulens gränssnitt, och slutligen att själva testerna inkluderas, t.ex. som på [[Modul:h3/dok]] som kanske inte är bra nog att utgå från som rättesnöre, men kanske den, liksom ett antal andra moduler kan fungera som lite inspiration. Olika moduler kanske kan behöva lite olika typer av dokumentation. Man kan behöva tänka på var dokumentationen placeras och att rätt information hamnar på rätt plats. Är det lämpligt att beskriva ''mallens'' användning, alltså hur en användare ska använda en tillhörande mall, i ''modulens'' dokumentation? Eller är det hur mallen, alltså den som skapar själva mallkodeen, bör använda modulen som ska beskrivas? Troligen det senare.
:::Har du möjlighet att ansluta till Wiktionarys Discord-chatt? Isåfall kan vi diskutera lite testning lite mer direkt och kanske utforma relevanta tester tillsammans. Just nu klurar jag på vad det är alla dina nytillagda tester testar för något :) ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.48 (CEST)
::::@[[Användare:Dodde|Dodde]]: (1) Tack för tipset! Jag funderar vidare på vad som ska dokumenteras var. (2) Nej, jag har tyvärr inte möjlighet att ansluta till Wiktionarys Discord-chatt, eller något annat forum utanför Wiktionary. Ledsen för det. (3) De nytillagda testerna strävar efter att följa de som anges i [https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf Svenska språkregler]. Jag har tagit bort några av de rena dubbletterna, samt de som inte hör till ryska. Vad jag angett som "förväntat" beteende avviker från Svenska språkregler i två avseenden. Dels accentuerar modulen ё automatiskt i flerstaviga ord (så att det blir Gorbatjóv, inte Gorbatjov). Svenska skrivregler har istället alla ord utan accent (vilket var vad jag implementerade först). Varför jag accentuerar automatiskt följer av meningsutbytet mellan mig och LA2 på [[Wiktionary:Bybrunnen#Modul för translitterering av ryska]]. Det andra avseendet som jag avsiktligen avviker från Svenska skrivregler är deras sista exempel: namnet Ярослав. De har tyvärr skrivit Яролав, vilket egentligen blir Jarolav. Tråkigt när det är "fel i facit", så att säga, men så kan det bli. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 13.03 (CEST)
:::::{{@|Gabbe}}, okej, tack för klargörande. Jag hoppas jag att det är ok att jag ändrar i mallar och moduler direkt, så kan vi diskutera ändringarna i efterhand om frågor uppstår. Eftersom replikskiftet på en diskussionssida på Wiktionary sker med mycket mer sällan än det typiskt sker i en chatt, kanske det är mer pragmatiskt att göra så, så att det inte tar onödigt lång tid att skapa en modul eller mall?
:::::När det gäller testerna, så tänker jag att det är viktigt att det dels är tydligt ''vad'' som testas, men också att rätt saker testas, och att det som testas är så isolerat som möjligt. Jag tänker att testerna med namnen från Skrivregler-dokumentet i testerna inte riktigt gör det. Jag ska försöka ändra direkt i testkoden, men vi behöver hjälpas åt för att det ska bli rätt i slutänden. Här förklarar jag hur jag tänker:
:::::1. gruppera liknande tester i var sin funktion och ge funktionerna talande namn. Här kan det ibland vara nödvändigt att lägga till en förklarande kommentar. Inled funktionsnamnet med något gemensamt så att de hamnar i en ordning som blir översiktlig, exempelvis test1_blabla, test2_blabla, eller test01 om antalet testgrupper är 10 eller fler. Enklare, mer allmängiltiga tester längre upp, mer specialiserade tester längre ner för att ge en bättre överblick. Testerna inkluderas ju på sidan med dokumentation, så att det ger en samlad överblick är väsentligt.
:::::2. låt oss testa varje enskild funktionalitet för sig. Svenska språkregler ger exemplet "К к k Куприн → Kuprin", och nu finns testet self:equals('mut.tr("Куприн")', mut.tr("Куприн"), "Kuprin"). Vad vi är intresserade av här är egentligen att kolla att К translittereras till K, varför inte testa just bara den här bokstaven, då, varför lägga till fler felkällor än nödvändigt? Men det viktiga är att vi ju ''också'' vill testa så att к blir k, men к finns ju inte ens med i strängen "Куприн", så här missar vi något som borde testas. För att det inte ska bli så ofantligt många rader för de väldigt enkla testerna som testar varje bokstav enskilt, så grupperar jag dem fem och fem. Exakt hur grupperingar sker spelar inte så stor roll, syftet är bara att det ska bli tydligt och överskådligt.
:::::3. en fråga dök upp och det borde avspeglas i testerna: borde Ж bli ZJ när det står självständigt eller i ett ord med bara kyrilliska versaler och Zj när det förekommer framför en gemen bokstav? (Vem hade ens tänkt på detta utan tester? :D) I testet använder jag mig av А och a som hjälp-bokstäver.
:::::4. vad händer när (3.) skickas in som en del av en mening? Det bör testas så att man vet att modulen klarar av att translitterera rätt även när ordet inte är isolerat, utan förekommer med andra ord skiljetecken.
:::::5. "visa förhandsgranskning" med "Modul:translit/ru/test" för att se att testkoden ser ut som det är tänkt. Publicera ändringar. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 02.01 (CEST)
:{{@|Dodde}}: Några kommentarer. Jag håller med om att en chatt skulle gå snabbare, men det är tyvärr inte ett alternativ för mig. Vidare angående (3) som är en viktig fråga: Normalt use-case på Wiktionary är ord med enbart gemener. Naturligtvis finns det många ord som innehåller versaler. Ett ord som ''[[кубик Рубика]]'', då ska stora bokstaven i andra ordet bli stor. Däremot är det mindre vanligt med ord som har två stora versaler på rad. I sådana fall är det vanligast (i den verkligen världen utanför Wiktionary) att ЖА blir ZjA. Detta för att förtydliga att "j":et inte är en oberoende bokstav. Eftersom det bara finns en stor bokstav innan A på kyrilliska bör texten med latinska bokstäver också bara ha en stor bokstav innan A:et. Det är det konventionella sättet att göra. När en stor bokstav på kyrilliska blir fler än en bokstav på latinska, då är det bara den första av de två bokstäverna som ska vara stor. Se till exempel inledningen till Wikipediasidan "[[w:en:Cheka|Cheka]]". Där blir förkortningen ВЧК till VChK (inte VCHK). På svenska är det vanligaste sättet att göra ВЧК till VTjK (inte VTJK), vilket min modul också gör idag. Det finns bara tre stora bokstäver på kyrilliska, därför finns det bara tre stora bokstäver på dess motsvarighet i latinska bokstäver. En person kan se VTjK på svenska och omedelbart fatta att det är en trebokstavsförkortning på ryska. Finns det välmotiverade argument till att "VTJK" skulle vara det konventionella sättet att göra på i svenska så är jag lyhörd för det. Annars lägger jag till att ВЧК ska bli VTjK som en rad i "/test", samt tar bort "JE,JO,ZJ,ZJA". Min uppfattning är att de senare är felaktiga allihopa.
:Det är naturligtvis okej att du ändrar i mallar och moduler direkt! {{=)}} Det här är ju en wiki, trots allt. Jag "äger" inte något av detta. Om du gör en ändring som jag uppfattar som en förändring till det sämre kan jag ju alltid revert:a.
:Jag kan lägga till fler rader som förtydligar exakt vad varje test testar för något. Jag antar att det är via funktionsnamnet på engelska som det ska klargöras (som du gjorde)? Fem och fem låter förståndigt. Finns det något tak på hur många tester testsidan kan innehålla? [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 08.06 (CEST)
::{{@|Gabbe}}: Jag respekterar naturligtvis att chatt inte funkar för dig, oavsett anledning. :) Angående ZjA osv, tack för den utförliga förklaringen, då förstår jag. Jag ska korrigera testerna som byggde på det felaktiga antagandet. Tack för tillåtelsen, ja precis, då är det bara att reverta. :) ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 11.32 (CEST)
== Gorbatjóv-testet ==
{{@|Gabbe}} Det förväntade resultatet av Gorbatjóv-testet är "Gorbatjóv" (ó som ett unikt "pre composed" tecken med Unicode-kodpunkt 00F3), men det som returneras av modulen är "Gorbatjóv" (ó som två separata tecken, o och ett "combining character" ´ med Unicode-kodpunkt 0301) och när dessa två strängar jämförs så misslyckas testet, även om de två strängarna ''ser'' likadana ut. Att enhetstestet misslyckas är alltså korrekt och koden behöver åtgärdas för att testat ska lyckas. (Som i stycket ovan, att åtgärda testet i sig, så att det lyckas är inte rätt väg att gå). Och kanske är det så att andra moduler behöver fixas på motsvarande sätt. Det finns något som heter Unicode normalization, och det kan lite förenklat utifrån just detta exemplet ske genom att dela upp ett tecken i två, "decompose", eller slå ihop dem till en, "compose". Givet att du har två "decomposed" tecken, o och ´, så behöver modulen en funktion som "compose" dem till en, ó , vilket kallas för NFC, Normalization Form Composition. Det finns kanske en färdig sådan kod man isåfall måste importera till svwikt. Men det bästa vore no att inte skapa några "decomposed" characters till att börja med, om det är möjligt att undvika? ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 05.58 (CEST)
:{{@|Dodde}}: Jag kan ändra koden så att den inte skapar några "decomposed" som utdata. Frågan är om det är rätt väg att gå. Låt mig ge några exempel: Ett typiskt indata till den ryska modulen är ''каню́ля''. Eftersom det (vad jag vet) inte finns något "composed" tecken för ю́ så skickas det in som ю med modifiern. Det förvandlar sen min mall i nuläget till {{tr|ru|каню́ля}}, alltså "u" med "´" modifiern. Då kan man förstås göra om så att den istället returnerar kanjúlja (alltså composed). Då kommer genast en följdfråga. Här på Wiktionary har vi även möjlig indata som blandar kyrillisk och icke-kyrillisk text. Exempel är [[IP-адрес]] och [[β-распад]]. Just de två har inga modifiers på den icke-kyrilliska biten. Hur borde mallen göra ifall de hade haft det? Ska ÍP-адрес som indata ge olika utdata ifall det första tecknet är decomposed eller inte? Min tanke med modulen är att låta modifiers på icke-kyrillisk indata vara ifred. Om de var decomposed i indata blir de det i utdata också. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 07.33 (CEST)
:{{@|Dodde}}: Jag har gjort så att den istället "composar" ó i Gorbatjóv (och motsvarande för de andra vokalerna i den kyrilliska delen av indatan). När indata blandar kyrilliska och icke-kyrilliska tecken så låter den däremot eventuella modifiers på den icke-kyrilliska indatan vara ifred. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.11 (CEST)
::Eller, rättare sagt, den composar á, é, ó, ú, och í, vilket är vad som kan komma från den kyrilliska delen av datan. Om de förekommer i den icke-kyrilliska delen av indata composas de också. Andra slags modifiers låter den vara. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.15 (CEST)
:::{{@|Gabbe}} Jag har svårt att avgöra vad modulen ''borde'' göra rörande composed och decomposed. Allt detta är i stort sett obeprövad mark för mig också :). Man kan googla och man kan snegla på enwikt som ''ibland'' redan kan ha löst problemet som man försöker lösa. Om man lägger till tester för de här sakerna så blir det också åtminstone tydligt hur vår avsikt är att modulen ska fungera, och fungerande tester visar att koden fungerar som det är tänkt. Blir man i ett senare skede klokare och vill ändra avsikt, är det lätt att ändra testerna, och sedan ändra i koden. Om indata med "decomposed" tecken förekommer kanske man kan lägga dem i en kategori dels om man anser att det är fel att ha sådan indata, dels för att senare granska de fall som uppstått och vid en senare tidpunkt avgöra vad man borde göra - korrigera indata eller göra ytterligare en ändring i modulen. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.08 (CEST)
== Några funderingar om modulkoden ==
Har några funderingar om modulkoden och förslag på ändringar:
1. Varför inte ange argumentets namn direkt?
<br><code>function export.tr( argument )</code>
<br><code>local text = argument</code>
<br>->
<br><code>function export.tr(text)</code>
2. a)Varför heter funktionen accentuera_jo och inte bara accentuera? Vad betyder jo? (föreslår att mellanslagen tas bort för enhetligt utseende). Också bra med engelska namn på funktioner. Kommentaren är vilseledande <br>
<code>function accentuera_jo ( text )</code>
<br>->
<br><code>function accentuate(text)</code>
3. Stilguiden rekommenderar kod utan kommentarer och erbjuder länkar till fördjupning om skälen till varför det är bra. Kan funktionens namn göras tydligare så slipper vi kommentarer helt. Kan man säga att man explicit lägger till accenter till textsträngen? I så fall kanske funktionen kan heta
<br><code>function accentuate_explicitly(text)</code>
4. Bra med engelska namn på funktioner, och att ha "ru" i funktionsnamnet är överflödigt.
<br><code>function transkribera_ru(text)</code>
<br>->
<br><code>function transliterate(text)</code>
5. Att accentuera den ryska texten, är inte det en del av translitterationsprocessen? Isåfall kanske anropet till accentuera-funktionen ska flytta in i transliterate-funktionen.
6. Varför returnerar inte transliterate-funktionen det vi vill ha? Den returnerar en tabell som vi måste hantera och göra om till en textsträng. Det kan transliterate-funktionen ta hand om. En textsträng borde vi kunna få serverat på ett silverfat istället. Koden blir isåfall:
<code>function export.tr(text)
return transliterate(text)
end</code>
7. Wow. Det enda tr-funktionen gör är att anropa transliterate-funktionen och returnera vad den funktionen returnerar. Nu blir det uppenbart att vi inte behöver nån transliterate-funktion då vi lika gärna kan placera koden direkt i tr-funktionen.
8. De där köfunktionerna verkar återanvändas i flera moduler. Det finns en programmeringsprincip som heter DIY - don't repeat yourself. De borde kanske brytas ut till en egen hjälpmodul? Samtidigt ser det rätt rörigt ut när de används. Man måste liksom veta vad koden är tänkt att göra för att förstå vad den gör. Jag undrar om det finns något alternativt angreppssätt. Kanske inte. Jag får fundera lite till. Man kan säkert fila på det lite grann, åtminstone. Men lättare när testerna är på plats... ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 05.51 (CEST)
:{{@|Dodde}}: Jag har ännu inte hunnit översatt alla variabel- och funktionsnamn till engelska. Jag har för avsikt att hinna färdigt med det innan månaden är slut. Funktionen "accentuera_jo" heter så eftersom den accentuerar (sätter dit en akut accent "´") på bokstaven "jo" (ё). En översättning till engelska skulle alltså bli "accentuate_yo". Den accentuerar inte någon annan bokstav än just ''jo'' ("yo" på engelska). Syftet med den funktionen är just det här problemet med Gorbatjov / Gorbatjóv. Att det förut blev "Gorbatjov" (utan accent) betraktade jag som en feature, inte en bugg. LA2 beskrev det som mycket mer användarvänligt om det görs automatiskt. Man kan ha olika åsikter, men jag är benägen att hålla med LA2. Jag kan föreställa mig att det finns situationer där man faktiskt vill ha utan accent. Då kommer det eventuellt vara relevant att kunna anropa den större funktionen utan att ha kört "accentuera_jo" / "accentuate_yo" först. Det kan man antingen lösa genom att anropa olika funktionsnamn, eller genom att ha en "boolean" som avgör huruvida "accentuera_jo" ska köras innan resten av funktionen körs.
:Att köfunktionerna används i flera moduler har du rätt i. Om det finns en konsensus här att det vore bättre att därför ha dem utanför modulen så kan jag flytta dem till en separat modul med generella köfunktioner. Jag tänkte att det var en lite för "simpel" sak för att ha en egen modul för. Köer är rätt grundläggande. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 08.06 (CEST)
:{{@|Dodde}}: Jag kan väl också säga så här: Från och med september kommer jag ha saker i mitt liv utanför Wiktionary som gör att jag kommer delta här i mer begränsad omfattning. Jag kommer inte sluta med Wiktionary, men jag kommer vara märkbart mindre aktiv än vad jag varit den här veckan. Tills dess har jag alltså begränsat med tid. Den tiden kan prioriteras på lite olika saker. Några exempel (i ingen särskild ordning):
:#Lägga till nya funktioner. Exempel på det vore det LA2 pratade om, att när ett ord på ryska har fler än en stavelse, men inga accent-tecken, så ska sidan som anropar modulen placeras i en dold kategori. Då har användaren varit "lat" och glömt att accentuera texten tillräckligt, vilket borde åtgärdas manuellt.
:#Göra "/test" mer utförlig angående vad jag betraktar som modulernas features redan idag, så att andra användare lättare förstår vad som mallen och modulen "förväntas" göra.
:#Göra dokumentationen som ska ligga under "/dok"
:#Göra "estetiska" förändringar av själva källkoden. Med det menar jag sådant som gör koden mer i linje med Stilguiden (engelska funktionsnamn, tabbar för indentering, osv), men som i övrigt inte förändrar vilken utdata som kommer ifrån en given indata. Sånt är även det viktigt för att andra användare lättare ska kunna ändra koden.
:Detta gäller för såväl de här modulerna som används av {{mall|tr}}, men även för ett annat projekt jag jobbat med, nämligen {{mall|fr-verb-test}} (och de moduler som den använder, [[Modul:fr-verb-artikel]] och [[Modul:fr-verb-konj]]). Helst ska jag förstås göra alla de ovanstående de närmsta två veckorna. Men det kommer jag nog inte hinna om vi ska vara realistiska. Det jag beskriver ovan tar olika lång tid och är olika viktigt. Om du fick önska, vad tycker du vore mest högprioriterat av dessa? I vilken ordning borde jag fokusera min energi de närmsta par veckorna? Jag tänker mig att en gedigen "/test" för varje modul är det som har allra högst prioritet. Håller du med? [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 09.48 (CEST)
::{{@|Gabbe}} Tack för förklaringen av "jo". Då förstår jag. Jag ska ändra testerna rörande detta.
<br>
::Att ha genomtänkta gedigna tester är a och o ur så många synvinklar. Jag håller med om att det är prioriterat. Kvalitet före kvantitet. Men också: Gör Modul:translit/ru ordentligt först, så blir Modul:translit/uk så gott som ett copy-paste-jobb. Med DRY-principen behöver dessutom minimalt med kod copy-pastas. Och med bra, genomtänkt kod, blir även andra moduler enklare att göra. Man behöver inte diskutera hur man löser samma problem, om och om igen. Har man löst ett problem på ett tillfredsställande sätt i en modul, kan man återanvända den lösningen. När testerna är genomtänkta och kompletta, så finns det inget sätt för modulkoden att göra fel (utan att testerna misslyckas) och på så sätt bäddar man för att fler kan bidra till modulen i framtiden utan att någon ska behöva vara orolig för att det får oväntade konsekvenser. <br>
::Angående extra funktionalitet. Är det bra, genomtänkt funktionalitet, lägg till det som en del av testerna i ett tidigt skede. Skulle det visa sig att en del funktioner är komplicerade att inkludera, så kan man kommentera ut testerna så länge, längre fram. Om du inte vet exakt hur testerna ska utformas, skriv en kommentar med en beskrivning och vad som behöver testas, så kan man återkomma till det så fort man har en lösning på det.
<br>
::När det gäller kosmetiska förändringar. Framförallt är det viktigt att funktioner som exporteras har genomtänkta namn och att deras syntax är genomtänkta. Det är endast dessa som bör dokumenteras. Det blir lksom ett kontrakt med användaren, att "om du använder dig av modulen på det som beskrivs här, så kan du lita på att det fungerar, även i framtiden". Om vi vill ändra på en funktions namn eller hur den fungerar, så måste vi ta höjd för alla andra moduler och/eller mallar, och i förlängningen mallanrop på sidor med uppslag, korrigeras så att de fungerar med vår uppdatering. Och det kan vara ett stort jobb, som kräver att tiotusentals sidor uppdateras. Ungefär som är nödvändigt med sidor som använder {{mall|härledning}} just nu. Men, det är svårt att förutse alla situationer som kan uppstå. Därför hamnar vi ändå i de här situationerna ibland. Men om vi lägger extra tid och energi på att få det rätt från början, genom att fokusera på kvalitet i varje del, så undviker vi att skapa onödigt jobb för oss, och andra, i framtiden. Och vi undviker att skapa så stora jobb att ingen nånsin lär orka ta tag i dem ens. Hur man ska anropa modulens tr-funktion i olika fall som att accentuera "jo" eller inte är en sådan relevant sak att ta i beaktning. Och här kan man behöva fundera på att sättet att anropa Modul:translit-ru sker på ett liknande sätt som hur andra språkspecifika translit-moduler funkar, eftersom ju den generella Modul:translit är den som anropas från olika språks mallar. Angående Modul:fr-verb-konj så tänker jag att enhetlig namngivning på grammatikmoduler är språkkod-ordklass. "Konj" bör eventuellt vara en parameter. Och det är viktigt att alla grammatikmoduler bygger på [[Modul:grammar]] och [[Modul:grammar-table]]. Se mer här: [[Modul:grammar-example]]. Kanske försöker du återuppfinna hjulet på nytt i vissa avseenden?
<br>
::När det gäller dokumentationen så tänker jag att den kan göras i slutet, när man löst alla problem och vet hur modulen (eller mallen) faktiskt fungerar. I slutet ''men(!)'' innan modulen börjar användas. Det finns inget tristare än att behöva gå igenom sidor med uppslag manuellt och ändra mallsyntax för att mallen eller modulen börjat användas innan den varit klar och genomtänkt. När man skriver dokumentationen så kan man upptäcka saker, precis som när man skapar testerna, allt man har missat att tänka på någonting. Och det bjuder också in andra deltagare att använda mallen och förstå hur den funkar. Alla är inte programmerare eller mallkodsexperter. Vi har tyvärr grammatikmallar och andra mallar idag som endast den personen som skapade mallen förstår sig på och kan använda. Det kanske kan ordnas med robotändringar och syntaxändringar i framtiden, men det hade ju varit önskvärt om det hade gjorts ordentligt från början. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 11.19 (CEST)
pbo54l8wt80zd7b9hcd1anw3e5eruh3
3703361
3703349
2022-08-19T11:21:48Z
Gabbe
1153
/* Några funderingar om modulkoden */ Tack! Då vet jag vad jag ska sätta tänderna i härnäst.
wikitext
text/x-wiki
== Stilguide för moduler ==
Det finns en [[Wiktionary:Stilguide/Skapa_en_modul|stilguide för moduler]] som kanske har översetts när den här modulen och kanske en del andra moduler skapades. Jag skapade det här exempeltestet som en början till att belysa några av punkterna som tas upp i Stilguiden. Jag uppskattar försöket att fixa till det misslyckade enhetstestet.
Att ett enhetstest misslyckas behöver inte vara något negativt. Det är grunden i TDD, test driven development, vilket är en teknik för att säkerställa att koden som skrivs är robust och inte lätt går sönder om man senare gör ändringar i koden. Den går i korthet ut på att man som steg ett skapar ett test som misslyckas. Sedan skapar man koden som får testet att lyckas. [https://canro91.github.io/2021/02/05/FailingTest/ https://canro91.github.io/2021/02/05/FailingTest/] var en sida som kom upp när jag googlade. Jag tänker att det är en relevant aspekt eftersom än skadlig ändring i en modul kan få konsekvenser för informationen på tiotusentals sidor. Så det misslyckade enhetstestet var alltså ett tecken på att någonting i själva modulen behöver åtgärdas - problemet var inte enhetstestet i sig, så att säga.
Exempeltestet anropar en funktion som inte finns. Enligt stilguiden ska funktionens namn vara på engelska och skrivas med camelCase. "transkribera" är därför inte ett giltigt funktionsnamn. Jag föreslår "<s>br</s>tr", som är samma som parameternamnet i flera mallar, bl.a. översättningsmallarna. Det råkar också vara det funktionsnamn som engelska translitterationsmoduken för ryska använder. Men, andra engelska funktionsnamn kan absolut övervägas.
Eftersom modulen är en hjälpmodul för huvudmodulen Modul:translit som i sin tur ska kunna användas av alla möjliga mallar och moduler tänker jag att det faktiskt är den här modulens funktioner som ska testat direkt - inte genom att anropa en mall som anropar en modul som anropar den här modulen. Om modulen endast är tänkt att användas av en specifik mall så kan det finnas skäl att använda UnitTest-funktionen "preprocess_equals" istället för "equals".
När en modul anropas direkt av en mall, så ska "frame" användas som parametertabell, men Modul:translit/ru ska anropas av Modul:translit och inte direkt av en mall. Så "tr"-funktionen bör formas så att det är enkelt och smidigt att anropa funktionen - och vad är enklare och smidigare än att anropa funktionen med ett icke namngivet argument, alltså modul.tr(text_som_ska_translittereras)? Så tänkte jag när jag skapade exempelenhetstestet iallafall.
Att jag benämnde det "exempeltest" var sedan att det allra bästa vore ju sedan att med enhetstester täcka in så mycket som möjligt av modulens funktionalitet. På detta sätt blir testsidan en ritning för hur man vill att modulen ska fungera och sedan är det förhållandevis enkelt att skapa själva modulen enligt den ritningen. [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 04.47 (CEST)
::{{@|Dodde}}: Ja, jag har mycket riktigt försummat stilguiden. {{=)}} Det var dock inte med flit. Jag kände inte till den förrän nu. Jag skriver om modulerna (vad gäller funktionsnamn, indentering via tabb, osv.) för att bli mer i enlighet med guiden. Jag antar att det du föreslår är att "transkribera"-funktionen ska heta '''tr''' (inte "br"). En fråga redan nu: finns det också en stilguide för dokumentationen som ska hamna på "/dok"? Eller åtminstone en modul som anses vara så exemplariskt dokumenterad att jag kan utgå ifrån den som något slags rättesnöre?
::Vad gäller enhetstesterna så har jag hittills gjort sånt offline i min Lua IDE innan jag gör någon ändring på Wiktionary. Precis som du nämner så började jag med en lista på "failing tests", för att sen skriva om modulen i enlighet med beteendet jag ville ha. Helt enligt TDD. Skälet till att jag gjort sånt på min stationära dator är att jag tycker det är lättare att utföra mer intrikata tester där. Exempelvis: när det står "ó", är det lika med "o" följt av Unicodetecknet U+0301, eller är det lika med U+00F3? Jag fattar att när en mall eller modul ska användas på tiotusentals sidor så blir det mycket mer betryggande ifall sådana tester sköts offentligt via "/test". Det är också vad jag avser göra framgent.
::Jag skriver också om modulerna så att {{mall|tr}} anropar [[Modul:translit]] som sen anropar [[Modul:translit/ru]] (istället för, som nu, att mallen direkt anropar de språkspecifika modulerna). [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 06.30 (CEST)
:::{{@|Gabbe}} Haha, oops, tr, inte br, tack! Det finns ingen stilguide för dokumentation vad jag känner till, men jag tänker att lämpliga delar att ha med på en dokumentationssida kan vara att förklara modulens syfte, hur man använder den (från en mall? från en annan modul? båda?), en specifikation för hur (de publika) funktionerna beter sig, dvs. modulens gränssnitt, och slutligen att själva testerna inkluderas, t.ex. som på [[Modul:h3/dok]] som kanske inte är bra nog att utgå från som rättesnöre, men kanske den, liksom ett antal andra moduler kan fungera som lite inspiration. Olika moduler kanske kan behöva lite olika typer av dokumentation. Man kan behöva tänka på var dokumentationen placeras och att rätt information hamnar på rätt plats. Är det lämpligt att beskriva ''mallens'' användning, alltså hur en användare ska använda en tillhörande mall, i ''modulens'' dokumentation? Eller är det hur mallen, alltså den som skapar själva mallkodeen, bör använda modulen som ska beskrivas? Troligen det senare.
:::Har du möjlighet att ansluta till Wiktionarys Discord-chatt? Isåfall kan vi diskutera lite testning lite mer direkt och kanske utforma relevanta tester tillsammans. Just nu klurar jag på vad det är alla dina nytillagda tester testar för något :) ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.48 (CEST)
::::@[[Användare:Dodde|Dodde]]: (1) Tack för tipset! Jag funderar vidare på vad som ska dokumenteras var. (2) Nej, jag har tyvärr inte möjlighet att ansluta till Wiktionarys Discord-chatt, eller något annat forum utanför Wiktionary. Ledsen för det. (3) De nytillagda testerna strävar efter att följa de som anges i [https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf Svenska språkregler]. Jag har tagit bort några av de rena dubbletterna, samt de som inte hör till ryska. Vad jag angett som "förväntat" beteende avviker från Svenska språkregler i två avseenden. Dels accentuerar modulen ё automatiskt i flerstaviga ord (så att det blir Gorbatjóv, inte Gorbatjov). Svenska skrivregler har istället alla ord utan accent (vilket var vad jag implementerade först). Varför jag accentuerar automatiskt följer av meningsutbytet mellan mig och LA2 på [[Wiktionary:Bybrunnen#Modul för translitterering av ryska]]. Det andra avseendet som jag avsiktligen avviker från Svenska skrivregler är deras sista exempel: namnet Ярослав. De har tyvärr skrivit Яролав, vilket egentligen blir Jarolav. Tråkigt när det är "fel i facit", så att säga, men så kan det bli. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 13.03 (CEST)
:::::{{@|Gabbe}}, okej, tack för klargörande. Jag hoppas jag att det är ok att jag ändrar i mallar och moduler direkt, så kan vi diskutera ändringarna i efterhand om frågor uppstår. Eftersom replikskiftet på en diskussionssida på Wiktionary sker med mycket mer sällan än det typiskt sker i en chatt, kanske det är mer pragmatiskt att göra så, så att det inte tar onödigt lång tid att skapa en modul eller mall?
:::::När det gäller testerna, så tänker jag att det är viktigt att det dels är tydligt ''vad'' som testas, men också att rätt saker testas, och att det som testas är så isolerat som möjligt. Jag tänker att testerna med namnen från Skrivregler-dokumentet i testerna inte riktigt gör det. Jag ska försöka ändra direkt i testkoden, men vi behöver hjälpas åt för att det ska bli rätt i slutänden. Här förklarar jag hur jag tänker:
:::::1. gruppera liknande tester i var sin funktion och ge funktionerna talande namn. Här kan det ibland vara nödvändigt att lägga till en förklarande kommentar. Inled funktionsnamnet med något gemensamt så att de hamnar i en ordning som blir översiktlig, exempelvis test1_blabla, test2_blabla, eller test01 om antalet testgrupper är 10 eller fler. Enklare, mer allmängiltiga tester längre upp, mer specialiserade tester längre ner för att ge en bättre överblick. Testerna inkluderas ju på sidan med dokumentation, så att det ger en samlad överblick är väsentligt.
:::::2. låt oss testa varje enskild funktionalitet för sig. Svenska språkregler ger exemplet "К к k Куприн → Kuprin", och nu finns testet self:equals('mut.tr("Куприн")', mut.tr("Куприн"), "Kuprin"). Vad vi är intresserade av här är egentligen att kolla att К translittereras till K, varför inte testa just bara den här bokstaven, då, varför lägga till fler felkällor än nödvändigt? Men det viktiga är att vi ju ''också'' vill testa så att к blir k, men к finns ju inte ens med i strängen "Куприн", så här missar vi något som borde testas. För att det inte ska bli så ofantligt många rader för de väldigt enkla testerna som testar varje bokstav enskilt, så grupperar jag dem fem och fem. Exakt hur grupperingar sker spelar inte så stor roll, syftet är bara att det ska bli tydligt och överskådligt.
:::::3. en fråga dök upp och det borde avspeglas i testerna: borde Ж bli ZJ när det står självständigt eller i ett ord med bara kyrilliska versaler och Zj när det förekommer framför en gemen bokstav? (Vem hade ens tänkt på detta utan tester? :D) I testet använder jag mig av А och a som hjälp-bokstäver.
:::::4. vad händer när (3.) skickas in som en del av en mening? Det bör testas så att man vet att modulen klarar av att translitterera rätt även när ordet inte är isolerat, utan förekommer med andra ord skiljetecken.
:::::5. "visa förhandsgranskning" med "Modul:translit/ru/test" för att se att testkoden ser ut som det är tänkt. Publicera ändringar. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 02.01 (CEST)
:{{@|Dodde}}: Några kommentarer. Jag håller med om att en chatt skulle gå snabbare, men det är tyvärr inte ett alternativ för mig. Vidare angående (3) som är en viktig fråga: Normalt use-case på Wiktionary är ord med enbart gemener. Naturligtvis finns det många ord som innehåller versaler. Ett ord som ''[[кубик Рубика]]'', då ska stora bokstaven i andra ordet bli stor. Däremot är det mindre vanligt med ord som har två stora versaler på rad. I sådana fall är det vanligast (i den verkligen världen utanför Wiktionary) att ЖА blir ZjA. Detta för att förtydliga att "j":et inte är en oberoende bokstav. Eftersom det bara finns en stor bokstav innan A på kyrilliska bör texten med latinska bokstäver också bara ha en stor bokstav innan A:et. Det är det konventionella sättet att göra. När en stor bokstav på kyrilliska blir fler än en bokstav på latinska, då är det bara den första av de två bokstäverna som ska vara stor. Se till exempel inledningen till Wikipediasidan "[[w:en:Cheka|Cheka]]". Där blir förkortningen ВЧК till VChK (inte VCHK). På svenska är det vanligaste sättet att göra ВЧК till VTjK (inte VTJK), vilket min modul också gör idag. Det finns bara tre stora bokstäver på kyrilliska, därför finns det bara tre stora bokstäver på dess motsvarighet i latinska bokstäver. En person kan se VTjK på svenska och omedelbart fatta att det är en trebokstavsförkortning på ryska. Finns det välmotiverade argument till att "VTJK" skulle vara det konventionella sättet att göra på i svenska så är jag lyhörd för det. Annars lägger jag till att ВЧК ska bli VTjK som en rad i "/test", samt tar bort "JE,JO,ZJ,ZJA". Min uppfattning är att de senare är felaktiga allihopa.
:Det är naturligtvis okej att du ändrar i mallar och moduler direkt! {{=)}} Det här är ju en wiki, trots allt. Jag "äger" inte något av detta. Om du gör en ändring som jag uppfattar som en förändring till det sämre kan jag ju alltid revert:a.
:Jag kan lägga till fler rader som förtydligar exakt vad varje test testar för något. Jag antar att det är via funktionsnamnet på engelska som det ska klargöras (som du gjorde)? Fem och fem låter förståndigt. Finns det något tak på hur många tester testsidan kan innehålla? [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 08.06 (CEST)
::{{@|Gabbe}}: Jag respekterar naturligtvis att chatt inte funkar för dig, oavsett anledning. :) Angående ZjA osv, tack för den utförliga förklaringen, då förstår jag. Jag ska korrigera testerna som byggde på det felaktiga antagandet. Tack för tillåtelsen, ja precis, då är det bara att reverta. :) ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 11.32 (CEST)
== Gorbatjóv-testet ==
{{@|Gabbe}} Det förväntade resultatet av Gorbatjóv-testet är "Gorbatjóv" (ó som ett unikt "pre composed" tecken med Unicode-kodpunkt 00F3), men det som returneras av modulen är "Gorbatjóv" (ó som två separata tecken, o och ett "combining character" ´ med Unicode-kodpunkt 0301) och när dessa två strängar jämförs så misslyckas testet, även om de två strängarna ''ser'' likadana ut. Att enhetstestet misslyckas är alltså korrekt och koden behöver åtgärdas för att testat ska lyckas. (Som i stycket ovan, att åtgärda testet i sig, så att det lyckas är inte rätt väg att gå). Och kanske är det så att andra moduler behöver fixas på motsvarande sätt. Det finns något som heter Unicode normalization, och det kan lite förenklat utifrån just detta exemplet ske genom att dela upp ett tecken i två, "decompose", eller slå ihop dem till en, "compose". Givet att du har två "decomposed" tecken, o och ´, så behöver modulen en funktion som "compose" dem till en, ó , vilket kallas för NFC, Normalization Form Composition. Det finns kanske en färdig sådan kod man isåfall måste importera till svwikt. Men det bästa vore no att inte skapa några "decomposed" characters till att börja med, om det är möjligt att undvika? ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 05.58 (CEST)
:{{@|Dodde}}: Jag kan ändra koden så att den inte skapar några "decomposed" som utdata. Frågan är om det är rätt väg att gå. Låt mig ge några exempel: Ett typiskt indata till den ryska modulen är ''каню́ля''. Eftersom det (vad jag vet) inte finns något "composed" tecken för ю́ så skickas det in som ю med modifiern. Det förvandlar sen min mall i nuläget till {{tr|ru|каню́ля}}, alltså "u" med "´" modifiern. Då kan man förstås göra om så att den istället returnerar kanjúlja (alltså composed). Då kommer genast en följdfråga. Här på Wiktionary har vi även möjlig indata som blandar kyrillisk och icke-kyrillisk text. Exempel är [[IP-адрес]] och [[β-распад]]. Just de två har inga modifiers på den icke-kyrilliska biten. Hur borde mallen göra ifall de hade haft det? Ska ÍP-адрес som indata ge olika utdata ifall det första tecknet är decomposed eller inte? Min tanke med modulen är att låta modifiers på icke-kyrillisk indata vara ifred. Om de var decomposed i indata blir de det i utdata också. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 07.33 (CEST)
:{{@|Dodde}}: Jag har gjort så att den istället "composar" ó i Gorbatjóv (och motsvarande för de andra vokalerna i den kyrilliska delen av indatan). När indata blandar kyrilliska och icke-kyrilliska tecken så låter den däremot eventuella modifiers på den icke-kyrilliska indatan vara ifred. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.11 (CEST)
::Eller, rättare sagt, den composar á, é, ó, ú, och í, vilket är vad som kan komma från den kyrilliska delen av datan. Om de förekommer i den icke-kyrilliska delen av indata composas de också. Andra slags modifiers låter den vara. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 18 augusti 2022 kl. 08.15 (CEST)
:::{{@|Gabbe}} Jag har svårt att avgöra vad modulen ''borde'' göra rörande composed och decomposed. Allt detta är i stort sett obeprövad mark för mig också :). Man kan googla och man kan snegla på enwikt som ''ibland'' redan kan ha löst problemet som man försöker lösa. Om man lägger till tester för de här sakerna så blir det också åtminstone tydligt hur vår avsikt är att modulen ska fungera, och fungerande tester visar att koden fungerar som det är tänkt. Blir man i ett senare skede klokare och vill ändra avsikt, är det lätt att ändra testerna, och sedan ändra i koden. Om indata med "decomposed" tecken förekommer kanske man kan lägga dem i en kategori dels om man anser att det är fel att ha sådan indata, dels för att senare granska de fall som uppstått och vid en senare tidpunkt avgöra vad man borde göra - korrigera indata eller göra ytterligare en ändring i modulen. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 18 augusti 2022 kl. 12.08 (CEST)
== Några funderingar om modulkoden ==
Har några funderingar om modulkoden och förslag på ändringar:
1. Varför inte ange argumentets namn direkt?
<br><code>function export.tr( argument )</code>
<br><code>local text = argument</code>
<br>->
<br><code>function export.tr(text)</code>
2. a)Varför heter funktionen accentuera_jo och inte bara accentuera? Vad betyder jo? (föreslår att mellanslagen tas bort för enhetligt utseende). Också bra med engelska namn på funktioner. Kommentaren är vilseledande <br>
<code>function accentuera_jo ( text )</code>
<br>->
<br><code>function accentuate(text)</code>
3. Stilguiden rekommenderar kod utan kommentarer och erbjuder länkar till fördjupning om skälen till varför det är bra. Kan funktionens namn göras tydligare så slipper vi kommentarer helt. Kan man säga att man explicit lägger till accenter till textsträngen? I så fall kanske funktionen kan heta
<br><code>function accentuate_explicitly(text)</code>
4. Bra med engelska namn på funktioner, och att ha "ru" i funktionsnamnet är överflödigt.
<br><code>function transkribera_ru(text)</code>
<br>->
<br><code>function transliterate(text)</code>
5. Att accentuera den ryska texten, är inte det en del av translitterationsprocessen? Isåfall kanske anropet till accentuera-funktionen ska flytta in i transliterate-funktionen.
6. Varför returnerar inte transliterate-funktionen det vi vill ha? Den returnerar en tabell som vi måste hantera och göra om till en textsträng. Det kan transliterate-funktionen ta hand om. En textsträng borde vi kunna få serverat på ett silverfat istället. Koden blir isåfall:
<code>function export.tr(text)
return transliterate(text)
end</code>
7. Wow. Det enda tr-funktionen gör är att anropa transliterate-funktionen och returnera vad den funktionen returnerar. Nu blir det uppenbart att vi inte behöver nån transliterate-funktion då vi lika gärna kan placera koden direkt i tr-funktionen.
8. De där köfunktionerna verkar återanvändas i flera moduler. Det finns en programmeringsprincip som heter DIY - don't repeat yourself. De borde kanske brytas ut till en egen hjälpmodul? Samtidigt ser det rätt rörigt ut när de används. Man måste liksom veta vad koden är tänkt att göra för att förstå vad den gör. Jag undrar om det finns något alternativt angreppssätt. Kanske inte. Jag får fundera lite till. Man kan säkert fila på det lite grann, åtminstone. Men lättare när testerna är på plats... ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 05.51 (CEST)
:{{@|Dodde}}: Jag har ännu inte hunnit översatt alla variabel- och funktionsnamn till engelska. Jag har för avsikt att hinna färdigt med det innan månaden är slut. Funktionen "accentuera_jo" heter så eftersom den accentuerar (sätter dit en akut accent "´") på bokstaven "jo" (ё). En översättning till engelska skulle alltså bli "accentuate_yo". Den accentuerar inte någon annan bokstav än just ''jo'' ("yo" på engelska). Syftet med den funktionen är just det här problemet med Gorbatjov / Gorbatjóv. Att det förut blev "Gorbatjov" (utan accent) betraktade jag som en feature, inte en bugg. LA2 beskrev det som mycket mer användarvänligt om det görs automatiskt. Man kan ha olika åsikter, men jag är benägen att hålla med LA2. Jag kan föreställa mig att det finns situationer där man faktiskt vill ha utan accent. Då kommer det eventuellt vara relevant att kunna anropa den större funktionen utan att ha kört "accentuera_jo" / "accentuate_yo" först. Det kan man antingen lösa genom att anropa olika funktionsnamn, eller genom att ha en "boolean" som avgör huruvida "accentuera_jo" ska köras innan resten av funktionen körs.
:Att köfunktionerna används i flera moduler har du rätt i. Om det finns en konsensus här att det vore bättre att därför ha dem utanför modulen så kan jag flytta dem till en separat modul med generella köfunktioner. Jag tänkte att det var en lite för "simpel" sak för att ha en egen modul för. Köer är rätt grundläggande. [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 08.06 (CEST)
:{{@|Dodde}}: Jag kan väl också säga så här: Från och med september kommer jag ha saker i mitt liv utanför Wiktionary som gör att jag kommer delta här i mer begränsad omfattning. Jag kommer inte sluta med Wiktionary, men jag kommer vara märkbart mindre aktiv än vad jag varit den här veckan. Tills dess har jag alltså begränsat med tid. Den tiden kan prioriteras på lite olika saker. Några exempel (i ingen särskild ordning):
:#Lägga till nya funktioner. Exempel på det vore det LA2 pratade om, att när ett ord på ryska har fler än en stavelse, men inga accent-tecken, så ska sidan som anropar modulen placeras i en dold kategori. Då har användaren varit "lat" och glömt att accentuera texten tillräckligt, vilket borde åtgärdas manuellt.
:#Göra "/test" mer utförlig angående vad jag betraktar som modulernas features redan idag, så att andra användare lättare förstår vad som mallen och modulen "förväntas" göra.
:#Göra dokumentationen som ska ligga under "/dok"
:#Göra "estetiska" förändringar av själva källkoden. Med det menar jag sådant som gör koden mer i linje med Stilguiden (engelska funktionsnamn, tabbar för indentering, osv), men som i övrigt inte förändrar vilken utdata som kommer ifrån en given indata. Sånt är även det viktigt för att andra användare lättare ska kunna ändra koden.
:Detta gäller för såväl de här modulerna som används av {{mall|tr}}, men även för ett annat projekt jag jobbat med, nämligen {{mall|fr-verb-test}} (och de moduler som den använder, [[Modul:fr-verb-artikel]] och [[Modul:fr-verb-konj]]). Helst ska jag förstås göra alla de ovanstående de närmsta två veckorna. Men det kommer jag nog inte hinna om vi ska vara realistiska. Det jag beskriver ovan tar olika lång tid och är olika viktigt. Om du fick önska, vad tycker du vore mest högprioriterat av dessa? I vilken ordning borde jag fokusera min energi de närmsta par veckorna? Jag tänker mig att en gedigen "/test" för varje modul är det som har allra högst prioritet. Håller du med? [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 09.48 (CEST)
::{{@|Gabbe}} Tack för förklaringen av "jo". Då förstår jag. Jag ska ändra testerna rörande detta.
<br>
::Att ha genomtänkta gedigna tester är a och o ur så många synvinklar. Jag håller med om att det är prioriterat. Kvalitet före kvantitet. Men också: Gör Modul:translit/ru ordentligt först, så blir Modul:translit/uk så gott som ett copy-paste-jobb. Med DRY-principen behöver dessutom minimalt med kod copy-pastas. Och med bra, genomtänkt kod, blir även andra moduler enklare att göra. Man behöver inte diskutera hur man löser samma problem, om och om igen. Har man löst ett problem på ett tillfredsställande sätt i en modul, kan man återanvända den lösningen. När testerna är genomtänkta och kompletta, så finns det inget sätt för modulkoden att göra fel (utan att testerna misslyckas) och på så sätt bäddar man för att fler kan bidra till modulen i framtiden utan att någon ska behöva vara orolig för att det får oväntade konsekvenser. <br>
::Angående extra funktionalitet. Är det bra, genomtänkt funktionalitet, lägg till det som en del av testerna i ett tidigt skede. Skulle det visa sig att en del funktioner är komplicerade att inkludera, så kan man kommentera ut testerna så länge, längre fram. Om du inte vet exakt hur testerna ska utformas, skriv en kommentar med en beskrivning och vad som behöver testas, så kan man återkomma till det så fort man har en lösning på det.
<br>
::När det gäller kosmetiska förändringar. Framförallt är det viktigt att funktioner som exporteras har genomtänkta namn och att deras syntax är genomtänkta. Det är endast dessa som bör dokumenteras. Det blir lksom ett kontrakt med användaren, att "om du använder dig av modulen på det som beskrivs här, så kan du lita på att det fungerar, även i framtiden". Om vi vill ändra på en funktions namn eller hur den fungerar, så måste vi ta höjd för alla andra moduler och/eller mallar, och i förlängningen mallanrop på sidor med uppslag, korrigeras så att de fungerar med vår uppdatering. Och det kan vara ett stort jobb, som kräver att tiotusentals sidor uppdateras. Ungefär som är nödvändigt med sidor som använder {{mall|härledning}} just nu. Men, det är svårt att förutse alla situationer som kan uppstå. Därför hamnar vi ändå i de här situationerna ibland. Men om vi lägger extra tid och energi på att få det rätt från början, genom att fokusera på kvalitet i varje del, så undviker vi att skapa onödigt jobb för oss, och andra, i framtiden. Och vi undviker att skapa så stora jobb att ingen nånsin lär orka ta tag i dem ens. Hur man ska anropa modulens tr-funktion i olika fall som att accentuera "jo" eller inte är en sådan relevant sak att ta i beaktning. Och här kan man behöva fundera på att sättet att anropa Modul:translit-ru sker på ett liknande sätt som hur andra språkspecifika translit-moduler funkar, eftersom ju den generella Modul:translit är den som anropas från olika språks mallar. Angående Modul:fr-verb-konj så tänker jag att enhetlig namngivning på grammatikmoduler är språkkod-ordklass. "Konj" bör eventuellt vara en parameter. Och det är viktigt att alla grammatikmoduler bygger på [[Modul:grammar]] och [[Modul:grammar-table]]. Se mer här: [[Modul:grammar-example]]. Kanske försöker du återuppfinna hjulet på nytt i vissa avseenden?
<br>
::När det gäller dokumentationen så tänker jag att den kan göras i slutet, när man löst alla problem och vet hur modulen (eller mallen) faktiskt fungerar. I slutet ''men(!)'' innan modulen börjar användas. Det finns inget tristare än att behöva gå igenom sidor med uppslag manuellt och ändra mallsyntax för att mallen eller modulen börjat användas innan den varit klar och genomtänkt. När man skriver dokumentationen så kan man upptäcka saker, precis som när man skapar testerna, allt man har missat att tänka på någonting. Och det bjuder också in andra deltagare att använda mallen och förstå hur den funkar. Alla är inte programmerare eller mallkodsexperter. Vi har tyvärr grammatikmallar och andra mallar idag som endast den personen som skapade mallen förstår sig på och kan använda. Det kanske kan ordnas med robotändringar och syntaxändringar i framtiden, men det hade ju varit önskvärt om det hade gjorts ordentligt från början. ~ [[Användare:Dodde|Dodde]] ([[Användardiskussion:Dodde|diskussion]]) 19 augusti 2022 kl. 11.19 (CEST)
:::{{@|Dodde}}: Tack! Jag uppskattar dina kommentarer och håller väl egentligen med om allting. Det blir lite av ett diskussionsmässigt sidospår med [[Modul:grammar]], men tack för att du nämnde dem också! Jag kände inte till dem sedan tidigare. Det jag gjorde var att (efter [[Wiktionary:Teknikvinden#Hur få moduler att returnera flera rader?|denna diskussion]] för en dryg månad sen) göra en modul som strävade att returnera samma sak som {{mall|fr-verb-er}}, {{mall|fr-verb-aître}} med flera gör idag. Det vill säga, gå in på HTML-källkod-nivån och kolla med [https://text-compare.com/ text-compare.com], liksom. Vad jag kunde se var det ingen av de mallarna som använde Modul:grammar. Det blir lite pill att gå över till grammatikmodulen, men det verkar absolut som att det kan vara värt det! {{=)}} [[Användare:Gabbe|Gabbe]] ([[Användardiskussion:Gabbe|diskussion]]) 19 augusti 2022 kl. 13.21 (CEST)
gv9mv3yu28979m6c598oefqkocoum4d
åkerren
0
929007
3703257
3703167
2022-08-18T16:26:07Z
Christoffre
6867
/* Svenska */+Översättning
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{subst|sv}}
'''åkerren'''
#[[ouppodlad]] [[gräsbevuxen]] [[landremsa]] längst en [[åker]]
#:{{citat|år=1834|titel=[https://litteraturbanken.se/f%C3%B6rfattare/GeijerEG/titlar/MinnenUtdragUrBref/sida/193/etext Minnen. Utdrag ur bref och dagböcker.]|publ=Palmblad & C.|förf=Erik Gustaf Geijer|sid=193|Fordom stod der ett Acacieträd. Det är på en grön '''åkerren'''. Folket kallar den der Schwedenrain och visar stället.}}
#:{{citat|år=1868|titel=[https://litteraturbanken.se/f%C3%B6rfattare/Anonym/titlar/L%C3%A4sebokF%C3%B6rFolkskolan1868/sida/212/faksimil Läsebok för folkskolan]|publ=P. A. Norstedt & Söner|förf=Anonym|sid=212|Detta bo, som förlägges antingen i någon skogsbacke under trädrötter, stenar och berghällar, eller äfven någon gång på slätten i kanten af en '''åkerren''', är oftast försedt med flere ingångar samt för öfrigt af ganska vidsträckt omfång.}}
#:{{citat|år=2022|datum=21 juni|titel=[https://jordbruksverket.se/vaxter/odling/biologisk-mangfald/natur--och-kulturmiljoer Natur- och kulturmiljöer]|förf=Jordbruksverket|Du får inte sprida slam och gödsel utanför åkern eftersom '''åkerrenar''' är viktiga livsmiljöer för växter och djur. [...] '''Åkerrenar''' är också ett viktigt skydd för småvilt som rapphöns, fasaner och hare. Även fåglar som gulsparv och sånglärka använder '''åkerrenar''' som boplats och den sällsynta kornknarren tar under våren ofta skydd i '''åkerrenens''' växtlighet.}}
#:{{synonymer|åkerkant}}
#:{{etymologi|{{härledning|gmq-fsv|akra ren}} Belagt sen ca 1520.<ref>{{källa-saob|åkerren|18 augusti 2022|unik=U_%C3%851_89484}}</ref>}}
====Översättningar====
{{ö-topp|ouppodlad gräsbevuxen landremsa}}
*engelska: {{ö|en|balk}}
*tyska: {{ö|de|Ackerrain}}, {{ö|de|Feldrain}}
{{ö-botten}}
===Källor===
<references/>
fordwsavao9sehk0w018qbhb4agpy71
3703258
3703257
2022-08-18T16:28:18Z
Christoffre
6867
/* Översättningar */
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{subst|sv}}
'''åkerren'''
#[[ouppodlad]] [[gräsbevuxen]] [[landremsa]] längst en [[åker]]
#:{{citat|år=1834|titel=[https://litteraturbanken.se/f%C3%B6rfattare/GeijerEG/titlar/MinnenUtdragUrBref/sida/193/etext Minnen. Utdrag ur bref och dagböcker.]|publ=Palmblad & C.|förf=Erik Gustaf Geijer|sid=193|Fordom stod der ett Acacieträd. Det är på en grön '''åkerren'''. Folket kallar den der Schwedenrain och visar stället.}}
#:{{citat|år=1868|titel=[https://litteraturbanken.se/f%C3%B6rfattare/Anonym/titlar/L%C3%A4sebokF%C3%B6rFolkskolan1868/sida/212/faksimil Läsebok för folkskolan]|publ=P. A. Norstedt & Söner|förf=Anonym|sid=212|Detta bo, som förlägges antingen i någon skogsbacke under trädrötter, stenar och berghällar, eller äfven någon gång på slätten i kanten af en '''åkerren''', är oftast försedt med flere ingångar samt för öfrigt af ganska vidsträckt omfång.}}
#:{{citat|år=2022|datum=21 juni|titel=[https://jordbruksverket.se/vaxter/odling/biologisk-mangfald/natur--och-kulturmiljoer Natur- och kulturmiljöer]|förf=Jordbruksverket|Du får inte sprida slam och gödsel utanför åkern eftersom '''åkerrenar''' är viktiga livsmiljöer för växter och djur. [...] '''Åkerrenar''' är också ett viktigt skydd för småvilt som rapphöns, fasaner och hare. Även fåglar som gulsparv och sånglärka använder '''åkerrenar''' som boplats och den sällsynta kornknarren tar under våren ofta skydd i '''åkerrenens''' växtlighet.}}
#:{{synonymer|åkerkant}}
#:{{etymologi|{{härledning|gmq-fsv|akra ren}} Belagt sen ca 1520.<ref>{{källa-saob|åkerren|18 augusti 2022|unik=U_%C3%851_89484}}</ref>}}
====Översättningar====
{{ö-topp|ouppodlad gräsbevuxen landremsa}}
*engelska: {{ö|en|balk}}, {{ö|en|headland}}
*tyska: {{ö|de|Ackerrain}}, {{ö|de|Feldrain}}
{{ö-botten}}
===Källor===
<references/>
cd556lrkvkwwf8pj4sc35y5gbdx7gw4
Modul:translit/grc/test
828
929021
3703214
2022-08-18T12:24:48Z
Gabbe
1153
la till första exemplet från LoC
Scribunto
text/plain
local t = require("Modul:UnitTests")
local mut = require("Modul:translit/grc")
function t:test2_example() -- de från https://www.loc.gov/catdir/cpso/romanization/greek.pdf
self:equals('mut.tr("Ἡσιόδου τοῦ Ἀσκραίου Ἔργα καὶ ἡμέραι")', mut.tr("Ἡσιόδου τοῦ Ἀσκραίου Ἔργα καὶ ἡμέραι"), "Hēsiódou tou Askraíou Erga kai hēmérai")
end
return t
q1imv6mxti2z9iqjui1mydtgdq53w9h
3703215
3703214
2022-08-18T12:32:33Z
Gabbe
1153
la till resten från LOC
Scribunto
text/plain
local t = require("Modul:UnitTests")
local mut = require("Modul:translit/grc")
function t:test2_example() -- de från https://www.loc.gov/catdir/cpso/romanization/greek.pdf
self:equals('mut.tr("Ἡσιόδου τοῦ Ἀσκραίου Ἔργα καὶ ἡμέραι")', mut.tr("Ἡσιόδου τοῦ Ἀσκραίου Ἔργα καὶ ἡμέραι"), "Hēsiódou tou Askraíou Erga kai hēmérai")
self:equals('mut.tr("Ἡ τοῦ Ὁμήρου Ἰλιάς")', mut.tr("Ἡ τοῦ Ὁμήρου Ἰλιάς"), "Hē tou Homḗrou Iliás")
self:equals('mut.tr("Φίληβος ἢ Περὶ ἡδονῆς")', mut.tr("Φίληβος ἢ Περὶ ἡδονῆς"), "Fílēbos ē Peri hēdonēs")
self:equals('mut.tr("Ἀγνώστῳ θεῷ")', mut.tr("Ἀγνώστῳ θεῷ"), "Agnṓstō theō")
self:equals('mut.tr("κεῖται παρ’ Ἅιδῃ")', mut.tr("κεῖται παρ’ Ἅιδῃ"), "keitai par’ Haidē")
self:equals('mut.tr("Αἴτια Ῥωμαϊκά")', mut.tr("Αἴτια Ῥωμαϊκά"), "Aítia Rhōmaiká")
self:equals('mut.tr("Ὅτι οὐδ’ ἡδέως ζῆν ἔστι κατ’ Ἐπίκουρον")', mut.tr("Ὅτι οὐδ’ ἡδέως ζῆν ἔστι κατ’ Ἐπίκουρον"), "Hoti oud’ hēdéōs zēn ésti kat’ Epíkouron")
self:equals('mut.tr("Περὶ τοῦ μὴ ῥᾳδίως πιστεύειν διαβολῇ")', mut.tr("Περὶ τοῦ μὴ ῥᾳδίως πιστεύειν διαβολῇ"), "Peri tou mē rhadíōs pisteúein diabolē")
self:equals('mut.tr("ἀΰπνους νύκτας ἴαυον")', mut.tr("ἀΰπνους νύκτας ἴαυον"), "aýpnous nýktas íauon")
self:equals('mut.tr("Λητοῦς καὶ Διὸς υἱός")', mut.tr("Λητοῦς καὶ Διὸς υἱός"), "Lētous kai Dios huiós")
self:equals('mut.tr("ὑϊκὸν πάσχειν")', mut.tr("ὑϊκὸν πάσχειν"), "hyikon páschein")
self:equals('mut.tr("εἶπε πρὸς τὸν ἄνδρα τὸν ἑωυτῆς")', mut.tr("εἶπε πρὸς τὸν ἄνδρα τὸν ἑωυτῆς"), "eipe pros ton ándra ton heōutēs")
self:equals('mut.tr("τί τοῦδ’ ἂν εὕρημ’ ηὗρον εὐτυχέστερον;")', mut.tr("τί τοῦδ’ ἂν εὕρημ’ ηὗρον εὐτυχέστερον;"), "tí toud’ an heúrēm’ hēuron eutychésteron;")
self:equals('mut.tr("Τοῦ Κατὰ πασῶν αἱρέσεων ἐλέγχου βιβλίον αʹ")', mut.tr("Τοῦ Κατὰ πασῶν αἱρέσεων ἐλέγχου βιβλίον αʹ"), "Tou Kata pasōn hairéseōn elénchou biblíon aʹ")
self:equals('mut.tr("καλὸν κἀγαθόν")', mut.tr("καλὸν κἀγαθόν"), "kalon kagathόn")
self:equals('mut.tr("ᾤχοντο θοἰμάτιον λαβόντες μου")', mut.tr("ᾤχοντο θοἰμάτιον λαβόντες μου"), "ṓchonto thoimátion labóntes mou")
self:equals('mut.tr("Περὶ ἰλίγγων")', mut.tr("Περὶ ἰλίγγων"), "Peri ilíngōn")
self:equals('mut.tr("ὅτε τ’ ἴαχε σάλπιγξ")', mut.tr("ὅτε τ’ ἴαχε σάλπιγξ"), "hóte t’ íache sálpinx")
self:equals('mut.tr("Ἐγχειρίδιον ἁρμονικῆς")', mut.tr("Ἐγχειρίδιον ἁρμονικῆς"), "Encheirídion harmonikēs")
self:equals('mut.tr("ἄλαϲτα δὲ ϝέργα πάθον κακὰ μηϲαμένοι")', mut.tr("ἄλαϲτα δὲ ϝέργα πάθον κακὰ μηϲαμένοι"), "álasta de wérga páthon kaka mēsaménoi")
self:equals('mut.tr("Δαμαρέτα τ’ ἐρατά τε Ϝιανθεμίϲ")', mut.tr("Δαμαρέτα τ’ ἐρατά τε Ϝιανθεμίϲ"), "Damaréta t’ eratá te Wianthemís")
self:equals('mut.tr("ξένϝος")', mut.tr("ξένϝος"), "xénwos")
self:equals('mut.tr("Πάτροϙλος")', mut.tr("Πάτροϙλος"), "Pátroḳlos")
end
return t
ed4cc8waerli0mdsqkw9ei999ks9deh
3703232
3703215
2022-08-18T14:08:13Z
Gabbe
1153
bytte ut ό (U+03CC) mot ó (U+00F3)
Scribunto
text/plain
local t = require("Modul:UnitTests")
local mut = require("Modul:translit/grc")
function t:test2_example() -- de från https://www.loc.gov/catdir/cpso/romanization/greek.pdf
self:equals('mut.tr("Ἡσιόδου τοῦ Ἀσκραίου Ἔργα καὶ ἡμέραι")', mut.tr("Ἡσιόδου τοῦ Ἀσκραίου Ἔργα καὶ ἡμέραι"), "Hēsiódou tou Askraíou Erga kai hēmérai")
self:equals('mut.tr("Ἡ τοῦ Ὁμήρου Ἰλιάς")', mut.tr("Ἡ τοῦ Ὁμήρου Ἰλιάς"), "Hē tou Homḗrou Iliás")
self:equals('mut.tr("Φίληβος ἢ Περὶ ἡδονῆς")', mut.tr("Φίληβος ἢ Περὶ ἡδονῆς"), "Fílēbos ē Peri hēdonēs")
self:equals('mut.tr("Ἀγνώστῳ θεῷ")', mut.tr("Ἀγνώστῳ θεῷ"), "Agnṓstō theō")
self:equals('mut.tr("κεῖται παρ’ Ἅιδῃ")', mut.tr("κεῖται παρ’ Ἅιδῃ"), "keitai par’ Haidē")
self:equals('mut.tr("Αἴτια Ῥωμαϊκά")', mut.tr("Αἴτια Ῥωμαϊκά"), "Aítia Rhōmaiká")
self:equals('mut.tr("Ὅτι οὐδ’ ἡδέως ζῆν ἔστι κατ’ Ἐπίκουρον")', mut.tr("Ὅτι οὐδ’ ἡδέως ζῆν ἔστι κατ’ Ἐπίκουρον"), "Hoti oud’ hēdéōs zēn ésti kat’ Epíkouron")
self:equals('mut.tr("Περὶ τοῦ μὴ ῥᾳδίως πιστεύειν διαβολῇ")', mut.tr("Περὶ τοῦ μὴ ῥᾳδίως πιστεύειν διαβολῇ"), "Peri tou mē rhadíōs pisteúein diabolē")
self:equals('mut.tr("ἀΰπνους νύκτας ἴαυον")', mut.tr("ἀΰπνους νύκτας ἴαυον"), "aýpnous nýktas íauon")
self:equals('mut.tr("Λητοῦς καὶ Διὸς υἱός")', mut.tr("Λητοῦς καὶ Διὸς υἱός"), "Lētous kai Dios huiós")
self:equals('mut.tr("ὑϊκὸν πάσχειν")', mut.tr("ὑϊκὸν πάσχειν"), "hyikon páschein")
self:equals('mut.tr("εἶπε πρὸς τὸν ἄνδρα τὸν ἑωυτῆς")', mut.tr("εἶπε πρὸς τὸν ἄνδρα τὸν ἑωυτῆς"), "eipe pros ton ándra ton heōutēs")
self:equals('mut.tr("τί τοῦδ’ ἂν εὕρημ’ ηὗρον εὐτυχέστερον;")', mut.tr("τί τοῦδ’ ἂν εὕρημ’ ηὗρον εὐτυχέστερον;"), "tí toud’ an heúrēm’ hēuron eutychésteron;")
self:equals('mut.tr("Τοῦ Κατὰ πασῶν αἱρέσεων ἐλέγχου βιβλίον αʹ")', mut.tr("Τοῦ Κατὰ πασῶν αἱρέσεων ἐλέγχου βιβλίον αʹ"), "Tou Kata pasōn hairéseōn elénchou biblíon aʹ")
self:equals('mut.tr("καλὸν κἀγαθόν")', mut.tr("καλὸν κἀγαθόν"), "kalon kagathón")
self:equals('mut.tr("ᾤχοντο θοἰμάτιον λαβόντες μου")', mut.tr("ᾤχοντο θοἰμάτιον λαβόντες μου"), "ṓchonto thoimátion labóntes mou")
self:equals('mut.tr("Περὶ ἰλίγγων")', mut.tr("Περὶ ἰλίγγων"), "Peri ilíngōn")
self:equals('mut.tr("ὅτε τ’ ἴαχε σάλπιγξ")', mut.tr("ὅτε τ’ ἴαχε σάλπιγξ"), "hóte t’ íache sálpinx")
self:equals('mut.tr("Ἐγχειρίδιον ἁρμονικῆς")', mut.tr("Ἐγχειρίδιον ἁρμονικῆς"), "Encheirídion harmonikēs")
self:equals('mut.tr("ἄλαϲτα δὲ ϝέργα πάθον κακὰ μηϲαμένοι")', mut.tr("ἄλαϲτα δὲ ϝέργα πάθον κακὰ μηϲαμένοι"), "álasta de wérga páthon kaka mēsaménoi")
self:equals('mut.tr("Δαμαρέτα τ’ ἐρατά τε Ϝιανθεμίϲ")', mut.tr("Δαμαρέτα τ’ ἐρατά τε Ϝιανθεμίϲ"), "Damaréta t’ eratá te Wianthemís")
self:equals('mut.tr("ξένϝος")', mut.tr("ξένϝος"), "xénwos")
self:equals('mut.tr("Πάτροϙλος")', mut.tr("Πάτροϙλος"), "Pátroḳlos")
end
return t
og18ftrajsfija4py2uzbzcstzat965
3703234
3703232
2022-08-18T14:28:27Z
Gabbe
1153
la till fyra rader Sofokles
Scribunto
text/plain
local t = require("Modul:UnitTests")
local mut = require("Modul:translit/grc")
function t:test2_example() -- de från https://www.loc.gov/catdir/cpso/romanization/greek.pdf
self:equals('mut.tr("Ἡσιόδου τοῦ Ἀσκραίου Ἔργα καὶ ἡμέραι")', mut.tr("Ἡσιόδου τοῦ Ἀσκραίου Ἔργα καὶ ἡμέραι"), "Hēsiódou tou Askraíou Erga kai hēmérai")
self:equals('mut.tr("Ἡ τοῦ Ὁμήρου Ἰλιάς")', mut.tr("Ἡ τοῦ Ὁμήρου Ἰλιάς"), "Hē tou Homḗrou Iliás")
self:equals('mut.tr("Φίληβος ἢ Περὶ ἡδονῆς")', mut.tr("Φίληβος ἢ Περὶ ἡδονῆς"), "Fílēbos ē Peri hēdonēs")
self:equals('mut.tr("Ἀγνώστῳ θεῷ")', mut.tr("Ἀγνώστῳ θεῷ"), "Agnṓstō theō")
self:equals('mut.tr("κεῖται παρ’ Ἅιδῃ")', mut.tr("κεῖται παρ’ Ἅιδῃ"), "keitai par’ Haidē")
self:equals('mut.tr("Αἴτια Ῥωμαϊκά")', mut.tr("Αἴτια Ῥωμαϊκά"), "Aítia Rhōmaiká")
self:equals('mut.tr("Ὅτι οὐδ’ ἡδέως ζῆν ἔστι κατ’ Ἐπίκουρον")', mut.tr("Ὅτι οὐδ’ ἡδέως ζῆν ἔστι κατ’ Ἐπίκουρον"), "Hoti oud’ hēdéōs zēn ésti kat’ Epíkouron")
self:equals('mut.tr("Περὶ τοῦ μὴ ῥᾳδίως πιστεύειν διαβολῇ")', mut.tr("Περὶ τοῦ μὴ ῥᾳδίως πιστεύειν διαβολῇ"), "Peri tou mē rhadíōs pisteúein diabolē")
self:equals('mut.tr("ἀΰπνους νύκτας ἴαυον")', mut.tr("ἀΰπνους νύκτας ἴαυον"), "aýpnous nýktas íauon")
self:equals('mut.tr("Λητοῦς καὶ Διὸς υἱός")', mut.tr("Λητοῦς καὶ Διὸς υἱός"), "Lētous kai Dios huiós")
self:equals('mut.tr("ὑϊκὸν πάσχειν")', mut.tr("ὑϊκὸν πάσχειν"), "hyikon páschein")
self:equals('mut.tr("εἶπε πρὸς τὸν ἄνδρα τὸν ἑωυτῆς")', mut.tr("εἶπε πρὸς τὸν ἄνδρα τὸν ἑωυτῆς"), "eipe pros ton ándra ton heōutēs")
self:equals('mut.tr("τί τοῦδ’ ἂν εὕρημ’ ηὗρον εὐτυχέστερον;")', mut.tr("τί τοῦδ’ ἂν εὕρημ’ ηὗρον εὐτυχέστερον;"), "tí toud’ an heúrēm’ hēuron eutychésteron;")
self:equals('mut.tr("Τοῦ Κατὰ πασῶν αἱρέσεων ἐλέγχου βιβλίον αʹ")', mut.tr("Τοῦ Κατὰ πασῶν αἱρέσεων ἐλέγχου βιβλίον αʹ"), "Tou Kata pasōn hairéseōn elénchou biblíon aʹ")
self:equals('mut.tr("καλὸν κἀγαθόν")', mut.tr("καλὸν κἀγαθόν"), "kalon kagathón")
self:equals('mut.tr("ᾤχοντο θοἰμάτιον λαβόντες μου")', mut.tr("ᾤχοντο θοἰμάτιον λαβόντες μου"), "ṓchonto thoimátion labóntes mou")
self:equals('mut.tr("Περὶ ἰλίγγων")', mut.tr("Περὶ ἰλίγγων"), "Peri ilíngōn")
self:equals('mut.tr("ὅτε τ’ ἴαχε σάλπιγξ")', mut.tr("ὅτε τ’ ἴαχε σάλπιγξ"), "hóte t’ íache sálpinx")
self:equals('mut.tr("Ἐγχειρίδιον ἁρμονικῆς")', mut.tr("Ἐγχειρίδιον ἁρμονικῆς"), "Encheirídion harmonikēs")
self:equals('mut.tr("ἄλαϲτα δὲ ϝέργα πάθον κακὰ μηϲαμένοι")', mut.tr("ἄλαϲτα δὲ ϝέργα πάθον κακὰ μηϲαμένοι"), "álasta de wérga páthon kaka mēsaménoi")
self:equals('mut.tr("Δαμαρέτα τ’ ἐρατά τε Ϝιανθεμίϲ")', mut.tr("Δαμαρέτα τ’ ἐρατά τε Ϝιανθεμίϲ"), "Damaréta t’ eratá te Wianthemís")
self:equals('mut.tr("ξένϝος")', mut.tr("ξένϝος"), "xénwos")
self:equals('mut.tr("Πάτροϙλος")', mut.tr("Πάτροϙλος"), "Pátroḳlos")
end
function t:test3_example() -- rad 1182–1185 från tragedin "Oedipus Rex" av Sofokles
self:equals('mut.tr("Ἰοὺ ἰού· τὰ πάντʼ ἂν ἐξήκοι σαφῆ.")', mut.tr("Ἰοὺ ἰού· τὰ πάντʼ ἂν ἐξήκοι σαφῆ."), "Iou ioú· ta pántʼ an exḗkoi safē.")
self:equals('mut.tr("Ὦ φῶς, τελευταῖόν σε προσβλέψαιμι νῦν,")', mut.tr("Ὦ φῶς, τελευταῖόν σε προσβλέψαιμι νῦν,"), "Ō fōs, teleutaión se prosblépsaimi nyn,")
self:equals('mut.tr("ὅστις πέφασμαι φύς τʼ ἀφʼ ὧν οὐ χρῆν, ξὺν οἷς τʼ")', mut.tr("ὅστις πέφασμαι φύς τʼ ἀφʼ ὧν οὐ χρῆν, ξὺν οἷς τʼ"), "hóstis péfasmai fýs tʼ afʼ hōn ou chrēn, xyn hois tʼ")
self:equals('mut.tr("οὐ χρῆν ὁμιλῶν, οὕς τέ μʼ οὐκ ἔδει κτανών.")', mut.tr("οὐ χρῆν ὁμιλῶν, οὕς τέ μʼ οὐκ ἔδει κτανών."), "ou chrēn homilōn, hoús té mʼ ouk édei ktanṓn.")
end
return t
2fggni0i6wbyfs5m8kd1jyt7rj5e5jg
3703235
3703234
2022-08-18T14:29:16Z
Gabbe
1153
... fast med sär-beta
Scribunto
text/plain
local t = require("Modul:UnitTests")
local mut = require("Modul:translit/grc")
function t:test2_example() -- de från https://www.loc.gov/catdir/cpso/romanization/greek.pdf
self:equals('mut.tr("Ἡσιόδου τοῦ Ἀσκραίου Ἔργα καὶ ἡμέραι")', mut.tr("Ἡσιόδου τοῦ Ἀσκραίου Ἔργα καὶ ἡμέραι"), "Hēsiódou tou Askraíou Erga kai hēmérai")
self:equals('mut.tr("Ἡ τοῦ Ὁμήρου Ἰλιάς")', mut.tr("Ἡ τοῦ Ὁμήρου Ἰλιάς"), "Hē tou Homḗrou Iliás")
self:equals('mut.tr("Φίληβος ἢ Περὶ ἡδονῆς")', mut.tr("Φίληβος ἢ Περὶ ἡδονῆς"), "Fílēbos ē Peri hēdonēs")
self:equals('mut.tr("Ἀγνώστῳ θεῷ")', mut.tr("Ἀγνώστῳ θεῷ"), "Agnṓstō theō")
self:equals('mut.tr("κεῖται παρ’ Ἅιδῃ")', mut.tr("κεῖται παρ’ Ἅιδῃ"), "keitai par’ Haidē")
self:equals('mut.tr("Αἴτια Ῥωμαϊκά")', mut.tr("Αἴτια Ῥωμαϊκά"), "Aítia Rhōmaiká")
self:equals('mut.tr("Ὅτι οὐδ’ ἡδέως ζῆν ἔστι κατ’ Ἐπίκουρον")', mut.tr("Ὅτι οὐδ’ ἡδέως ζῆν ἔστι κατ’ Ἐπίκουρον"), "Hoti oud’ hēdéōs zēn ésti kat’ Epíkouron")
self:equals('mut.tr("Περὶ τοῦ μὴ ῥᾳδίως πιστεύειν διαβολῇ")', mut.tr("Περὶ τοῦ μὴ ῥᾳδίως πιστεύειν διαβολῇ"), "Peri tou mē rhadíōs pisteúein diabolē")
self:equals('mut.tr("ἀΰπνους νύκτας ἴαυον")', mut.tr("ἀΰπνους νύκτας ἴαυον"), "aýpnous nýktas íauon")
self:equals('mut.tr("Λητοῦς καὶ Διὸς υἱός")', mut.tr("Λητοῦς καὶ Διὸς υἱός"), "Lētous kai Dios huiós")
self:equals('mut.tr("ὑϊκὸν πάσχειν")', mut.tr("ὑϊκὸν πάσχειν"), "hyikon páschein")
self:equals('mut.tr("εἶπε πρὸς τὸν ἄνδρα τὸν ἑωυτῆς")', mut.tr("εἶπε πρὸς τὸν ἄνδρα τὸν ἑωυτῆς"), "eipe pros ton ándra ton heōutēs")
self:equals('mut.tr("τί τοῦδ’ ἂν εὕρημ’ ηὗρον εὐτυχέστερον;")', mut.tr("τί τοῦδ’ ἂν εὕρημ’ ηὗρον εὐτυχέστερον;"), "tí toud’ an heúrēm’ hēuron eutychésteron;")
self:equals('mut.tr("Τοῦ Κατὰ πασῶν αἱρέσεων ἐλέγχου βιβλίον αʹ")', mut.tr("Τοῦ Κατὰ πασῶν αἱρέσεων ἐλέγχου βιβλίον αʹ"), "Tou Kata pasōn hairéseōn elénchou biblíon aʹ")
self:equals('mut.tr("καλὸν κἀγαθόν")', mut.tr("καλὸν κἀγαθόν"), "kalon kagathón")
self:equals('mut.tr("ᾤχοντο θοἰμάτιον λαβόντες μου")', mut.tr("ᾤχοντο θοἰμάτιον λαβόντες μου"), "ṓchonto thoimátion labóntes mou")
self:equals('mut.tr("Περὶ ἰλίγγων")', mut.tr("Περὶ ἰλίγγων"), "Peri ilíngōn")
self:equals('mut.tr("ὅτε τ’ ἴαχε σάλπιγξ")', mut.tr("ὅτε τ’ ἴαχε σάλπιγξ"), "hóte t’ íache sálpinx")
self:equals('mut.tr("Ἐγχειρίδιον ἁρμονικῆς")', mut.tr("Ἐγχειρίδιον ἁρμονικῆς"), "Encheirídion harmonikēs")
self:equals('mut.tr("ἄλαϲτα δὲ ϝέργα πάθον κακὰ μηϲαμένοι")', mut.tr("ἄλαϲτα δὲ ϝέργα πάθον κακὰ μηϲαμένοι"), "álasta de wérga páthon kaka mēsaménoi")
self:equals('mut.tr("Δαμαρέτα τ’ ἐρατά τε Ϝιανθεμίϲ")', mut.tr("Δαμαρέτα τ’ ἐρατά τε Ϝιανθεμίϲ"), "Damaréta t’ eratá te Wianthemís")
self:equals('mut.tr("ξένϝος")', mut.tr("ξένϝος"), "xénwos")
self:equals('mut.tr("Πάτροϙλος")', mut.tr("Πάτροϙλος"), "Pátroḳlos")
end
function t:test3_example() -- rad 1182–1185 från tragedin "Oedipus Rex" av Sofokles
self:equals('mut.tr("Ἰοὺ ἰού· τὰ πάντʼ ἂν ἐξήκοι σαφῆ.")', mut.tr("Ἰοὺ ἰού· τὰ πάντʼ ἂν ἐξήκοι σαφῆ."), "Iou ioú· ta pántʼ an exḗkoi safē.")
self:equals('mut.tr("Ὦ φῶς, τελευταῖόν σε προσϐλέψαιμι νῦν,")', mut.tr("Ὦ φῶς, τελευταῖόν σε προσϐλέψαιμι νῦν,"), "Ō fōs, teleutaión se prosblépsaimi nyn,")
self:equals('mut.tr("ὅστις πέφασμαι φύς τʼ ἀφʼ ὧν οὐ χρῆν, ξὺν οἷς τʼ")', mut.tr("ὅστις πέφασμαι φύς τʼ ἀφʼ ὧν οὐ χρῆν, ξὺν οἷς τʼ"), "hóstis péfasmai fýs tʼ afʼ hōn ou chrēn, xyn hois tʼ")
self:equals('mut.tr("οὐ χρῆν ὁμιλῶν, οὕς τέ μʼ οὐκ ἔδει κτανών.")', mut.tr("οὐ χρῆν ὁμιλῶν, οὕς τέ μʼ οὐκ ἔδει κτανών."), "ou chrēn homilōn, hoús té mʼ ouk édei ktanṓn.")
end
return t
2ayffu121qw83qquaooeu05jmhp47yp
Kategori:Japanska/Uppslag med kanji läst som いし
14
929022
3703217
2022-08-18T12:45:56Z
Kusurija
8159
Kategori
wikitext
text/x-wiki
[[Kategori:Japanska/Uppslag med kun'yomi kanji läsning|いし]]
kbcd37gjeza8w6c6jpkax22uvzsbxdc
Kategori:CJK/Uppslag med 石
14
929023
3703219
2022-08-18T12:57:20Z
Kusurija
8159
Kategori
wikitext
text/x-wiki
[[Kategori:CJK/Alla uppslag|石]]
[[Kategori:CJK radikal/Uppslag med radikal 112 石|00]]
7vmuk2nrme09zxmqpx5o24zqehapr1q
Kategori:Japanska/Uppslag med kanji läst som セキ (漢音)
14
929024
3703223
2022-08-18T13:19:44Z
Kusurija
8159
Kategori
wikitext
text/x-wiki
[[Kategori:Japanska/Uppslag med kan'on kanji läsning|セキ]]
ggk2qjq8l33hxrlc0ttbicwproq5ykt
pysslet
0
929025
3703227
2022-08-18T13:32:54Z
Andreasl01
37996
böjningsform av [[pyssel]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''pysslet'''
#{{böjning|sv|subst|pyssel}}
rdqk51yth9p0p94uk5qeqb0w7l1tt5n
pysslen
0
929026
3703228
2022-08-18T13:33:03Z
Andreasl01
37996
böjningsform av [[pyssel]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''pysslen'''
#{{böjning|sv|subst|pyssel}}
5e7zry2sqo8hhwxldasmml85jtc6trk
pyssels
0
929027
3703229
2022-08-18T13:33:10Z
Andreasl01
37996
böjningsform av [[pyssel]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''pyssels'''
#{{böjning|sv|subst|pyssel}}
72faup1fy1wvnzoeolna1h0wrz1raja
pysslets
0
929028
3703230
2022-08-18T13:33:17Z
Andreasl01
37996
böjningsform av [[pyssel]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''pysslets'''
#{{böjning|sv|subst|pyssel}}
l0ige4948dedpko33p2wzl90qv0ac72
pysslens
0
929029
3703231
2022-08-18T13:33:24Z
Andreasl01
37996
böjningsform av [[pyssel]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''pysslens'''
#{{böjning|sv|subst|pyssel}}
a3lfzdmgr4zcm8ldmdnwszq09imhhx5
monsignore
0
929030
3703236
2022-08-18T14:54:16Z
Gabbe
1153
nytt uppslag (svenska)
wikitext
text/x-wiki
{{wikipedia|Monsignore}}
==Svenska==
===Substantiv===
{{sv-subst-n-r}}
'''monsignore''' {{u}}
#{{tagg|kristendom}} [[hederstitel]] för vissa [[katolsk]]a [[präst]]er
#:{{etymologi|Av {{härledning-|it|monsignore}}, av {{härledning-|fr|monseigneur}}, bokstavligen "min herre" på fornfranska. Belagt på svenska sedan 1913.}}
63txwhyhpy4r7svgdpj5ajutn5mg3ni
3703237
3703236
2022-08-18T14:55:36Z
Gabbe
1153
+översättningar; +en: [[monsignor]]; +fr: [[monseigneur]]; +de: [[Monsignore]] (assisterat)
wikitext
text/x-wiki
{{wikipedia|Monsignore}}
==Svenska==
===Substantiv===
{{sv-subst-n-r}}
'''monsignore''' {{u}}
#{{tagg|kristendom}} [[hederstitel]] för vissa [[katolsk]]a [[präst]]er
#:{{etymologi|Av {{härledning-|it|monsignore}}, av {{härledning-|fr|monseigneur}}, bokstavligen "min herre" på fornfranska. Belagt på svenska sedan 1913.}}
====Översättningar====
{{ö-topp|hederstitel för vissa katolska präster}}
*engelska: {{ö+|en|monsignor}}
*franska: {{ö+|fr|monseigneur|m}}
*tyska: {{ö+|de|Monsignore|m}}
{{ö-botten}}
pv700hm8sb2gfcwviekbi9tkpwo3hhp
monsignor
0
929031
3703238
2022-08-18T14:59:07Z
Gabbe
1153
översättning av [[monsignore]]
wikitext
text/x-wiki
==Engelska==
===Substantiv===
{{subst|en}}
'''monsignor'''
*{{uttal|en|ipa=mɒn.ˈsiːn.jə|region=Storbritannien}}
*{{uttal|en|ipa=mɑːn.ˈsiːn.jəɹ|region=Storbritannien}}
#{{tagg|kat=kristendom|språk=en}} [[monsignore]]
a4sussm3w4f1skiypgzdjbyd0ox9ivy
flyguppvisning
0
929032
3703242
2022-08-18T15:57:56Z
Gabbe
1153
nytt uppslag (svenska)
wikitext
text/x-wiki
{{wikipedia}}
==Svenska==
===Substantiv===
{{sv-subst-n-ar}}
'''[[flyga|flyg]][[uppvisning]]'''
#[[organiserad]] [[uppvisning]] av [[flygning]]
ojw469x5kltd39knm9l9k3kf1pnjxzn
flyguppvisningen
0
929033
3703243
2022-08-18T15:58:02Z
Gabbe
1153
böjningsform av [[flyguppvisning]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''flyguppvisningen'''
#{{böjning|sv|subst|flyguppvisning}}
am1hfck9jmdp9q40zmb0fkcdhzworph
flyguppvisningar
0
929034
3703244
2022-08-18T15:58:03Z
Gabbe
1153
böjningsform av [[flyguppvisning]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''flyguppvisningar'''
#{{böjning|sv|subst|flyguppvisning}}
dfzslhsigbqt45ucoqn26it7jw434dk
flyguppvisningarna
0
929035
3703245
2022-08-18T15:58:04Z
Gabbe
1153
böjningsform av [[flyguppvisning]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''flyguppvisningarna'''
#{{böjning|sv|subst|flyguppvisning}}
rrlbv75y6pbm3zpkw3bwzglvo5qkzwi
flyguppvisnings
0
929036
3703246
2022-08-18T15:58:04Z
Gabbe
1153
böjningsform av [[flyguppvisning]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''flyguppvisnings'''
#{{böjning|sv|subst|flyguppvisning}}
9x1qlnfrh5nptompy09kfv2ne6be6dt
flyguppvisningens
0
929037
3703247
2022-08-18T15:58:05Z
Gabbe
1153
böjningsform av [[flyguppvisning]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''flyguppvisningens'''
#{{böjning|sv|subst|flyguppvisning}}
06fp7qkwd0wa8obywxf8j8mwj7rfzzr
flyguppvisningars
0
929038
3703248
2022-08-18T15:58:06Z
Gabbe
1153
böjningsform av [[flyguppvisning]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''flyguppvisningars'''
#{{böjning|sv|subst|flyguppvisning}}
cgfrx58oqgxwh1zzpcgyyiuiqothqkr
flyguppvisningarnas
0
929039
3703249
2022-08-18T15:58:07Z
Gabbe
1153
böjningsform av [[flyguppvisning]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''flyguppvisningarnas'''
#{{böjning|sv|subst|flyguppvisning}}
lxsuftvddenyu4b0gd5oq580hhhxmpv
monsignoren
0
929040
3703250
2022-08-18T15:58:22Z
Gabbe
1153
böjningsform av [[monsignore]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''monsignoren'''
#{{böjning|sv|subst|monsignore}}
25bcrw8udd7dt3ykdn3hcx95qkcy1d7
monsignorer
0
929041
3703251
2022-08-18T15:58:23Z
Gabbe
1153
böjningsform av [[monsignore]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''monsignorer'''
#{{böjning|sv|subst|monsignore}}
cu8iub6stqrbkxunvzrzj3rr2kzfdrp
monsignorerna
0
929042
3703252
2022-08-18T15:58:24Z
Gabbe
1153
böjningsform av [[monsignore]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''monsignorerna'''
#{{böjning|sv|subst|monsignore}}
pjy7oap6mbddagwcwcz89cbjig7vxje
monsignores
0
929043
3703253
2022-08-18T15:58:25Z
Gabbe
1153
böjningsform av [[monsignore]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''monsignores'''
#{{böjning|sv|subst|monsignore}}
bmnsjfh7ggywwve7mbqjhenr8ianh02
monsignorens
0
929044
3703254
2022-08-18T15:58:26Z
Gabbe
1153
böjningsform av [[monsignore]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''monsignorens'''
#{{böjning|sv|subst|monsignore}}
i4hnkfrkyoq2s2j5rdr41vwnd9g0w4d
monsignorers
0
929045
3703255
2022-08-18T15:58:27Z
Gabbe
1153
böjningsform av [[monsignore]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''monsignorers'''
#{{böjning|sv|subst|monsignore}}
6eurf1onmpp1cb2je3mnkfnjg127nw7
monsignorernas
0
929046
3703256
2022-08-18T15:58:28Z
Gabbe
1153
böjningsform av [[monsignore]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''monsignorernas'''
#{{böjning|sv|subst|monsignore}}
4mtexitgfxzsg19s3vowesxptnzqjzy
Användardiskussion:213.89.158.0
3
929047
3703273
2022-08-18T18:09:33Z
Skalman
414
/* ftw */ nytt avsnitt
wikitext
text/x-wiki
== [[ftw]] ==
Jag har återställt din ändring, eftersom jag hittar flera källor till de betydelser du tog bort.
Säg gärna till om du funderar över något. [[Användare:Skalman|Skalman]] ([[Användardiskussion:Skalman|diskussion]]) 18 augusti 2022 kl. 20.09 (CEST)
36a6sxcio1gprq4d1dsqwjf5wjedg8z
elvakaffet
0
929048
3703275
2022-08-18T19:57:44Z
Andreas Rejbrand
328
böjningsform av [[elvakaffe]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''elvakaffet'''
#{{böjning|sv|subst|elvakaffe}}
mvslbi6flxnsat3q8fnv4d4hd4b19vg
elvakaffes
0
929049
3703276
2022-08-18T19:57:44Z
Andreas Rejbrand
328
böjningsform av [[elvakaffe]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''elvakaffes'''
#{{böjning|sv|subst|elvakaffe}}
qnppwdigjk7hdw26shpm2suyh3g1vdp
elvakaffets
0
929050
3703277
2022-08-18T19:57:45Z
Andreas Rejbrand
328
böjningsform av [[elvakaffe]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''elvakaffets'''
#{{böjning|sv|subst|elvakaffe}}
dhpchqi6r4cspv63k6kdhr60agzcyrj
lösnageln
0
929051
3703278
2022-08-18T19:58:42Z
Andreas Rejbrand
328
böjningsform av [[lösnagel]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''lösnageln'''
#{{böjning|sv|subst|lösnagel}}
899fbgr63g0reipc6ht80io76lvrrdl
lösnaglarna
0
929052
3703279
2022-08-18T19:58:43Z
Andreas Rejbrand
328
böjningsform av [[lösnagel]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''lösnaglarna'''
#{{böjning|sv|subst|lösnagel}}
d69vrvqb631ct02b3wcerzt1jd1m4tm
lösnagels
0
929053
3703280
2022-08-18T19:58:43Z
Andreas Rejbrand
328
böjningsform av [[lösnagel]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''lösnagels'''
#{{böjning|sv|subst|lösnagel}}
8o0gzvl4w3dtl5pjgkxlnf6525bz5w9
lösnagelns
0
929054
3703281
2022-08-18T19:58:44Z
Andreas Rejbrand
328
böjningsform av [[lösnagel]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''lösnagelns'''
#{{böjning|sv|subst|lösnagel}}
f81znv354trijmv03pim39heclwdugr
lösnaglars
0
929055
3703282
2022-08-18T19:58:44Z
Andreas Rejbrand
328
böjningsform av [[lösnagel]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''lösnaglars'''
#{{böjning|sv|subst|lösnagel}}
osqf4cb608pwpn4676qqkanr8qo9ng6
lösnaglarnas
0
929056
3703283
2022-08-18T19:58:45Z
Andreas Rejbrand
328
böjningsform av [[lösnagel]]
wikitext
text/x-wiki
==Svenska==
===Substantiv===
'''lösnaglarnas'''
#{{böjning|sv|subst|lösnagel}}
pe4836zqidx9lg6403y1wyw48ouuwbc
a conto-betalning
0
929057
3703285
2022-08-18T20:48:09Z
Skalman
414
nytt uppslag (svenska)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{subst|sv}}
'''[[a conto]]-[[betalning]]'''
#{{tagg|ekonomi}} [[förskottsbetalning]] utifrån ett [[estimat]], som senare ska [[reglera]]s baserad på faktisk konsumtion
#:{{jämför|[[a conto]], [[a conto-faktura]]}}
1imzikhjxt5dlgkyfnpx3yq9iquu4p9
a conto-faktura
0
929058
3703286
2022-08-18T20:48:30Z
Skalman
414
nytt uppslag (svenska)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{subst|sv}}
'''[[a conto]]-[[faktura]]'''
#{{tagg|ekonomi}} [[faktura]] för betalning som ska göras [[a conto]]
#:{{jämför|[[a conto]], [[a conto-betalning]]}}
6evmbs6pg4bpzuz4kufl5xwevuey2vx
estimat
0
929059
3703287
2022-08-18T20:51:09Z
Skalman
414
nytt uppslag (svenska)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-0}}
'''estimat'''
#[[ungefärlig]], inte [[exakt]] [[beräkning]] (av värdet, storleken eller priset på något)
#:{{synonymer|[[uppskattning]], [[approximation]]}}
#:{{besläktade ord|[[estimera]]}}
8w1dd09n9r3a8ycbny32r6o3tl7biw0
delbetalning
0
929060
3703288
2022-08-18T21:09:25Z
Skalman
414
nytt uppslag (svenska)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-oräkn|betydelser=1.}}
{{sv-subst-n-ar|betydelser=2.}}
'''[[del]][[betalning]]'''
#[[betalsätt]] där man köper något på [[kredit]] (genom att ta ett lån)
#:''I webbshopen kan man välja '''delbetalning''' i kassan.''
#enskild [[betalning]] av en [[del]] av den totala summan som ska betalas
:{{avgränsare}}
:{{besläktade ord|[[delbetala]]}}
m1nqhcq8suytuavzx0w6i18imr3epqr
betalsätt
0
929061
3703289
2022-08-18T21:14:43Z
Skalman
414
nytt uppslag (svenska)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-0}}
'''[[betala|betal]][[sätt]]'''
#[[metod]] för att [[betala]] vid ett [[köp]], såsom [[kort]], (viss) [[mobilapp]], [[internetbank]] eller plattform för [[delbetalning]]
0702gervza8pah3xmk34a7mw26v2y1z
internetbank
0
929062
3703290
2022-08-18T21:17:40Z
Skalman
414
nytt uppslag (svenska)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-n-er}}
'''[[internet]][[bank]]'''
#[[webbplats]] som tillhör en [[bank]], där kunderna kan utföra sina [[bankärende]]n
5tx400ysml3zh6nnko12lahmdrngzch
bankärende
0
929063
3703291
2022-08-18T21:23:38Z
Skalman
414
nytt uppslag (svenska)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-n}}
'''[[bank]][[ärende]]'''
#[[uppgift]] som uträttas på en [[bank]] (på plats, via telefon eller internet), exempelvis betalning av [[räkning]]ar
#:{{konstr|uträtta bankärenden}}
3hinq2yoqkhfsx8b5jslxktiw6na4gy
à-pris
0
929064
3703294
2022-08-18T21:47:01Z
Skalman
414
nytt uppslag (svenska)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-er}}
'''[[à]]-[[pris]]'''
#[[pris]] per mängd av en vara, per [[styck]], per [[kilo]] eller dylikt
#:{{hyponymer|[[styckpris]], [[kilopris]]}}
90i4e90z8ztdlgs1deh42zd7g5ptz3c
styckpris
0
929065
3703295
2022-08-18T21:55:23Z
Skalman
414
nytt uppslag (svenska)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-er}}
'''[[styck]][[pris]]'''
#[[pris]] per [[styck]] av en vara; [[kostnad]] per [[exemplar]] av en vara
#:{{hyperonymer|[[à-pris]]}}
h2tf90or4iuavbv7qs9k5ha785eaqbc
3703303
3703295
2022-08-19T06:09:18Z
Pametzma
10470
+översättningar; +de: [[Stückpreis]] (assisterat)
wikitext
text/x-wiki
==Svenska==
===Substantiv===
{{sv-subst-t-er}}
'''[[styck]][[pris]]'''
#[[pris]] per [[styck]] av en vara; [[kostnad]] per [[exemplar]] av en vara
#:{{hyperonymer|[[à-pris]]}}
====Översättningar====
{{ö-topp|pris per styck av en vara}}
*tyska: {{ö+|de|Stückpreis|m}}
{{ö-botten}}
l6np9wlna1bnp3rn26kt96c2cl4gpj9
akra ren
0
929066
3703297
2022-08-18T22:20:20Z
Christoffre
6867
Ny sida
wikitext
text/x-wiki
==Fornsvenska==
===Substantiv===
{{subst|gmq-fsv}}
'''akra ren'''
#[[åkerren]]
srvqiesv51q6jjmi3bhe69eaoaycwrd
Stückpreis
0
929067
3703304
2022-08-19T06:13:53Z
Pametzma
10470
översättning av [[styckpris]]
wikitext
text/x-wiki
==Tyska==
===Substantiv===
{{de-subst-m|2=Stückpreises|plural=Stückpreise}}
'''Stückpreis''' {{m}}
#[[styckpris]]
4xrrsoybeajnlrljkd5pmvi4xewa78t
Secretario General
0
929068
3703347
2022-08-19T09:27:48Z
2A01:B740:1F:2030:49D3:34D:D129:481E
översättning av [[generalsekreterare]]
wikitext
text/x-wiki
==Spanska==
===Substantiv===
{{subst|es}}
'''[[secretario|Secretario]] [[general|General]]'''
#[[generalsekreterare]]
qmutjfre5hye5g005b9k2bn09b7avt8