text:
User talk:Djkcel/2020

I would have thought you would have known by now, but bor should only be used at the start of an etymology, never further down the chain of descent (see borrowed/documentation). Also redirecting the word to a completely different entry is bad form. -- 02:00, 14 January 2020 (UTC)
 * Clean up your mess at 🇨🇬, because that Proto-Celtic form was borrowed from your very own words.  How ironic that you come to yell at me for borrowing your own contributed knowledge.  I acknowledge that it should have been der over bor, was looking at the Gaulish form while typing that. DJ K-Çel (talk) 02:06, 14 January 2020 (UTC)
 * What are you even talking about? Did you even look at the ? What are you not understanding? -- 02:12, 14 January 2020 (UTC)
 * When you said "redirecting the word to a completely different entry is bad form" I'm assuming you meant >>, but that's what your edit on  did.  I know der should have been used. DJ K-Çel (talk) 02:25, 14 January 2020 (UTC)
 * I'm glad you understand the bor vs. der issue now, if you didn't before. I hear where your coming from on my edit 4 years ago, yet that was done because the entry was moved; regardless, that wasn't the best way to go on my part either. Please try and use some comprehension though, instead of blindly copying entries. -- 03:15, 14 January 2020 (UTC)

Reconstruction:Proto-Indo-European/tauro
This entry has been sent to RFD, and it has many fundamental problems. We cannot reconstruct PIE items based on so little evidence, which as the entry itself acknowledges, may not even be inherited, and the sources used in the entry are not up to scholarly standards. I see that you have been warned before about many aspects of your etymological editing, and yet continue to make entries like this. I have to ask you to stop creating reconstruction entries altogether. We do not have enough knowledgeable people to look over and check your contributions, and catch all the problematic ones. In general, please do not make edits to etymologies without referencing standard etymological works (please ask if you are unsure). This is your final warning. —Μετάknowledge discuss/deeds 01:14, 29 February 2020 (UTC)
 * To be fair, I proposed this root over at the tea room about a week ago and nobody responded. I figured the lack of opposition meant that it was ok for me to go ahead and try my hand at the entry. Was that not the right place to ask? Perhaps the scriptorium would have been better?
 * If you're asking me not to create any more PIE reconstructions, you can be sure that I won't be because it's not worth this kind of backlash when a perfect term isn't created (by the way, that's the first PIE entry I've ever tried). However, I've recently created several Proto-Celtic entries 1 234 that seem to have been welcomed. I use Leiden and OED for most of my stuff. When in doubt, I'll ask. DJ K-Çel (talk) 04:55, 29 February 2020 (UTC)
 * Absence of response doesn't mean approval (and yes, the ES would've been better). As for Proto-Celtic, I'm afraid I don't know anything about it, so I will ping some people who can tell you whether these are indeed up to standards. —Μετάknowledge discuss/deeds 05:04, 29 February 2020 (UTC)
 * The Proto-Celtic entries look fine, not least because they all seem to have been taken directly from R:cel:EDPC. —Mahāgaja · talk 08:28, 29 February 2020 (UTC)
 * Entries like should not exist though, with only a single descendant, especially when their etymology is questionable. Such instances should be left to etymologies. --  08:34, 29 February 2020 (UTC)

Entry formating
I've seen you add entries in manners when they shouldn't be done, forcing me to fix them; some you haven't repeated, yet I liked to bring a few problems to this discussion. Recently you added 🇨🇬 as, which shouldn't be done; all entries are to be created in the nominative singular. Furthermore you added it as a feminine noun despite Kroonen saying it's a neuter noun; the "n." stands for netuer not for noun.

Also, don't add Gaulish nouns ending in "-us" as Gaulish; e.g. unless there is evidence that the nouns was a u stem; most "Gaulish" -um, -us and -o nouns are in fact Gaulish noun borrowed into Latin and adapted to a Latin declension.

And don't forget to order the Celtic descendants as: 𐌷𐌻𐌿𐌳𐌰𐍅𐌹𐌲𐍃 𐌰𐌻𐌰𐍂𐌴𐌹𐌺𐌹𐌲𐌲𐍃 (talk) 17:14, 12 March 2020 (UTC)
 * Brythonic:
 * Breton:
 * Cornish:
 * Welsh:
 * Irish:
 * Gaulish:

 * Thanks for the tips. I may have been following Leiden's headwords and formatting a little too closely. I'm now realizing that when Matasovic says "Briccus [PN]" he is actually referring to an attested Latin borrowing, not a Gaulish word. I'll refer to your guidelines for any future entries. DJ K-Çel (talk) 18:18, 12 March 2020 (UTC)
 * On February 28, I warned you that some of the reconstruction entries you were creating were not up to our standards (the ones copied directly were okay, but you could not determine for yourself which ones were fine and which were not). On March 11, you created the reconstruction entry mentioned by Holodwig that blatantly failed to match our standards, which would take less than a minute to check, and contained a basic error. Pursuant to my warning above, if you make any such errors in reconstruction entries or etymologies from now on, you will be blocked. Your best course of action is not to create any reconstruction entries any more. —Μετάknowledge discuss/deeds 18:34, 12 March 2020 (UTC)

bor in Dutch etymologies from Old French
Hi, I recently noticed your update of the etymology of ; thanks for that. I do have a small request though. In that etymology and a few other ones you have used. However, bor is used for direct borrowings, not those that have been mediated by other languages. Terms in Dutch that derived from Old French are practically always passed on through another language, be it through Middle Dutch, Middle French (and perhaps subsequently modern French) or a third language. So der is usually the one that should be used. ←₰-→ Lingo Bingo Dingo (talk)  13:14, 13 April 2020 (UTC)

Dubious sources (again)
are your sources for this totally dreadful PIE etymology, a book from 1825 and some personal website? Really, Djkcel, has nothing set-in on using respectable sources? Can you please, pretty please, stop with the onomastic etymologies? They're dubious enough without junk sources. I've asked you to start using inline sources so we can know what suspect element comes from what suspect source, but you haven't taken to that advice either.

Look, I'm not trying to be an asshole, but resolving RFEs shouldn't be some fill-in-the-blanks game at the detriment to the quality of the project. -- 02:36, 15 April 2020 (UTC)

 * Out of respect for your request, I'll take a break from onomastic entries, or at least ones that require some digging. In return, can you at least please assume good faith and understand that I'm trying to help and not be a "detriment?" Hostility and excoriation does this place no favors, either.  Just once I'd like to have a civil exchange with you so that it can at least be productive.  It's never happened.
 * Regarding the etymology, I honestly thought it was fine (not feigning ignorance here). I paraphrased Antonio's etymology of Aeculanum (did you read it?), where he cited the listed source of Ribezzo, listed some possible cognates, and maintained a cautious tone that it was only possible. What was so wrong with that? I've read here that just because a source is old doesn't mean it should necessarily be discarded.
 * 98% of my sourcing has been more precise recently as well. I try my very hardest to use the ones with templates only, but if they don't have one, I list a page number. But sometimes, like in Antonio's case, he doesn't give a page number to refer to, so I can only list the source itself.
 * Just curious, what do you think some of my strengths as an editor are? I'm genuinely curious, so I can at least have something to build upon.
 * Also, in case Metaknowledge wants to weigh in with judgment - you asked me to stop creating reconstructions on March 12th and I've since honored that request. The issue in question is now placenames. DJ K-Çel (talk) 02:55, 15 April 2020 (UTC)
 * Djkcel, I lack patients with you because I try and get you on the right track with your edits, like using outdated sources (3 years ago), and then step away to find you at it again a month later. I can recognize some efforts being made, but when another user has to bring up how you're using bor wrong again after I just brought it up with you in January, it's very frustrating. Your etymology truthfully has some kernel of value to it and I cleaned it the best I could, but no one with any basic modern understanding of PIE would reconstruct . Again, I'm not trying to be callous, but since you asked, in my opinion, you're a jack of all trades, master of none. Just as an example, you could gather up etymological source martials on Greek and Latin and focus of Greek borrowings into Latin. Filling in RFE for every language is going to get you in trouble pretty much forever. -- 03:42, 15 April 2020 (UTC)
 * To be fair, Lingo's message above was regarding |an%20edit%20from%20Dec%2016th an edit from December 16th and your message came on January 14th. That's why I just thanked him for the edit and decided not to make any more out of it.  But I see what you're saying and they were both unfortunate mind slips by me.
 * I appreciate your blunt honesty and candor all the same, and I'm going to think a little harder before choosing which pages to edit. DJ K-Çel (talk) 04:14, 15 April 2020 (UTC)
 * OK, thanks. -- 05:38, 15 April 2020 (UTC)

So what's your game plan? -- 21:56, 2 June 2020 (UTC)
 * Source edits and apparently not trust any information already on Wiktionary? I didn't add to 🇨🇬, it was already there. And it wasn't in the desctree at  yet. I was just listing cognates. If  isn't related to, why does the former link to the latter?
 * I haven't been making any reconstructions since I was asked not to, but there's still a lot of red lemmas. DJ K-Çel (talk) 03:34, 3 June 2020 (UTC)
 * The problem with piecing things together from sources you don't understand is that you end up repeating the mistakes and stupidity of others. Chuck Entz (talk) 04:03, 3 June 2020 (UTC)
 * Have you given any more thought to specializing in an area instead of working at random? -- 16:00, 3 June 2020 (UTC)
 * And the random continues. -- 01:36, 20 July 2020 (UTC)

Djkcel, Online Etymology Dictionary is definitively not a good primary source for. -- 01:35, 20 July 2020 (UTC)
 * Did, um, did this not land? OED is not a good source for reconstructions. Please stahp. -- 06:42, 25 July 2020 (UTC)
 * Yep,, so I'll repeat. OED is not a good source for proto etymologies. Most of these general dictionaries are regurgitations of Pokorny. Follow the sources. -- 03:11, 19 December 2020 (UTC)

I see you're back to onomastic etymologies. Fun. -- 05:39, 1 August 2020 (UTC)

क्रम
At क्रम (Sanskrit krama) you introduced an etymology claiming a derivation from PIE *gʰredʰ-. How do you propose to derive krama from *gʰredʰ-? Hölderlin2019 (talk) 12:05, 16 May 2020 (UTC)
 * Hello. I've added the three sources for that etymology (I usually source, not sure why I forgot with that edit, sorry). The problem is that Rendich compares  with 🇨🇬, equating Sanskrit k with Latin g, r with r, a with a/e, and m with m/d, but he uses an outdated Pokorny root, whereas I instead used Vasmer's and de Vaan's more accepted root .  Rendich also compares 🇨🇬 but I think that's from a slightly different root . DJ K-Çel (talk) 19:02, 16 May 2020 (UTC)
 * Sorry, but no, that etymology is embarrassingly impossible, and illustrative of why people should stick to languages they actually know, including authors who like to ramble on possible cognates. -- 03:05, 17 May 2020 (UTC)
 * The Franco Rendich guy does not seem like a very reliable source. I have removed all etymologies citing him, as they all seemed rather crappy; some had been removed by others already. Speaking of which, Djkcel, please only work with reliable, academic, and preferably recent sources... — Mnemosientje (t · c) 16:22, 17 May 2020 (UTC)

Friesa etymology
Are you sure this was borrowed via Latin? (Why would it be?) Anyway, the Latin cannot be from Frisian, as it is attested from the beginning of the millennium - way before Frisian (and indeed even West Germanic) was distinct from Proto-Germanic. — Mnemosientje (t · c) 06:44, 25 May 2020 (UTC)
 * OK, was just going off of OED's entry, which says:
 * from Latin Frisii ‘Frisians’ (from Old Frisian Frīsa, Frēsa) + -ian.
 * Though I now realize this may be referring to in the modern sense... DJ K-Çel (talk) 07:00, 25 May 2020 (UTC)
 * Yes, Frisia is a borrowing from Latin, although even that term can still not derive from Old Frisian. So I am mystified by the OED, perhaps the parenthetic text works differently here and is not supposed to suggest that the Latin derive from the Old Frisian. Either way, that doesn't work chronologically. — Mnemosientje (t · c) 07:09, 25 May 2020 (UTC)

"I am scolded by admins on here way less frequently than I used to be"
hahahaha I know mate. Thanks for moth bean. Equinox ◑ 00:55, 29 May 2020 (UTC)

Inline sources
Again, can you please try and use inline sources for your etymologies, like in ? I have no way otherwise if knowing if the item you added to "Further reading" is to with the word itself, the etymology, or or neither. You've ignored the request many times now. Why is that? -- 22:50, 29 May 2020 (UTC)
 * Sup. Forgive my ignorance but I was never too familiar with what inline sources meant, and w:References doesn't seem to have any info. (maybe we can refer to Wikipedia: Inline Citation?)

 * Anyway, does that simply mean you attach a reference to an etymology/descendant using  so that the ref appears as a superscript, on which you can click to bring you to that specific reference? I'm fine doing that.  But, on, I did refer to the book, headword and page number. Were you just wanting to see it under "References" instead of "Further reading?"

 * While we're on the subject, in the past I've cited Kroonen, OED, Beekes etc under "References" only for someone to come along and change it to "Further reading." I think Rua may have done it a few times. Is there a consensus on when to use what? thanks in advance. DJ K-Çel (talk) 01:15, 30 May 2020 (UTC)
 * As for "lease try and used inline sources for your etymologies", this is not Wiktionary standard; it is one of multiple practices. In case of any further doubt, we may start a Beer parlour discussion to see whether editors want to establish a recommendation in that direction.
 * My experience with the English Wiktionary is that there are too many editors asking people to follow non-existent standards, often standards that I find unreasonable. Luckily enough, we have a mature voting process that can sort out where consensus actually lies. ---Dan Polansky (talk) 10:47, 30 May 2020 (UTC)
 * On the other hand, I would be happy to make user signatures like those of the original poster illegal; alas, I am not a supreme legislator of the place. --Dan Polansky (talk) 10:48, 30 May 2020 (UTC)
 * Correct, inline sourcing just means, as you say, using  after that actual information you're citing, which then is called up under References using   . I only use Further reading is the content does not cite a reconnection or etymology, usually cognate lists. --  15:00, 30 May 2020 (UTC)

Only use this template for actual roots, not just any PIE term. —Rua (mew) 08:12, 23 June 2020 (UTC)

Basic dictionaries
Djkcel, I can't stress this enough again, basic dictionaries like Online Etymology Dictionary and the American Heritage Dictionary are not good primary sources for etymologies, especially reconstructions. They're often based on some pretty outdated work. If it's a Proto-Germanic reconstruction, use a body of work that specializes in Proto-Germanic. -- 23:16, 9 August 2020 (UTC)

Redlinks and bad reconstructions
Djkcel, edits like demonstrate you are lacking in understanding of how PIE entries are formatted, but more alarmingly, in how PIE functions. How can, as you format it, derive from ? Proto-Germanic also seems out of your comprehension, as seen , were you derive the adjective from the deadjectival verb (I'll let that sink in), which despite being under Derived terms, you still manage to misformat the link to. Then you go on to and create a bad redlink to PIE. A really important tenet of the project is that you  never create redlinks to pages that should not exist . Have you ever seen a PIE entry formatted like ? I've said this to you now probably over a dozen times: if you're unfamiliar with a language, stay away from it, especially reconstructions. You're going to get yourself banned. -- 16:16, 27 August 2020 (UTC)
 * I can only assume Pokorny's u̯ is equivalent to our w. I've seen his roots converted similarly elsewhere on here. But for roots that shouldn't be lemmas, I can use double ||, such as
 * 🇨🇬.  DJ K-Çel (talk) 16:31, 27 August 2020 (UTC)
 * If that's your only comment, clearly most of what I said went over your head. -- 16:41, 27 August 2020 (UTC)
 * You asked me to inline source, I started inline sourcing. You asked me to use tr= for non-English translations, I started using tr= instead of ||. You asked me to stop using AHD and Online Etymological Dictionary, I stopped using them. You asked me to stop editing place names and I stopped doing them (well, at least the really obscure ones). You asked me to stop making reconstructions, I stopped creating them. Now you're asking me to use double || for PIE entries that shouldn't exist, which I acknowledged. Would you also like me to acknowledge the difference between a deadjectival verb and an adjective? The confusion arose from Kroonen and Pokorny using the verb for their entries, whereas Wiktionary tends to use the adjective as the lemma. Fine. I'll add it to the list of cardinal sins not to commit.
 * As for the question: How can derive from ?  don't shoot the messenger bra  DJ K-Çel (talk) 17:05, 27 August 2020 (UTC)
 * I think you may be missing the point (to be fair, Victar didn't exactly make a clear point in his litany above). The point here is that you cannot simply be the messenger here. You have to make choices, from the banality of notation to the finer points of reconstruction, and you need to be able to assess etymological claims critically. If we were just simple messengers of all the reconstructions we found, our PIE would be an inconsistent, garbled mess. Instead, we try to match the latest scholarship as coherently and faithfully to evidence as possible.
 * PIE is very complicated, and that's why I try not to touch it — and even I know that Pokorny is outdated and not to be trusted. It's above my pay grade, and that's okay. I certainly find lots of other things to do around here that are more in my areas of expertise. I'm not saying that you can never edit PIE again, but if you want to, you should read some books on it first (we can offer suggested reading), so you actually know what you're doing. And if you don't want to have to read a bunch of books, then that's a good sign you should step away from making edits related to PIE. —Μετάknowledge discuss/deeds 18:04, 27 August 2020 (UTC)
 * Thanks, Meta. Please excuse any disjointedness above, for this is me. Djkcel, your reply hit the nail straight on the head; you can't simply hide behind the excuse of "I'm just copying what's here". You need to be able to analytically parse what you're reading, otherwise you're just contributing to the problem, not the solution. -- 20:33, 27 August 2020 (UTC)

 * Djkcel, you just two invalid PIE links,  and . Did you not understand the above? --  05:42, 31 August 2020 (UTC)
 * Sorry, copied that from but was a little too hasty on the trigger. I'll fix the root on that page too. DJ K-Çel (talk) 05:45, 31 August 2020 (UTC)
 * Again, just copying stuff isn't good enough. I wish every link on Wiktionary were perfect enough to copy, but critical assessment is required. We can't keep warning you: you need to change your behaviour, or else you may be blocked. —Μετάknowledge discuss/deeds 06:08, 31 August 2020 (UTC)

 * Your is not valid and neither is your reconstruction in the etymology of . Can you please stop reconstructing proto languages you have no clue about? --  20:46, 27 November 2020 (UTC)
 * How about you take a look at the came from?  I know you're going to spout a bunch of bullshit about not copying links from other pages, but you should at least know that it's not my reconstruction. DJ K-Çel (contribs ~ talk) 20:57, 27 November 2020 (UTC)
 * It. Does. Not. Matter. It's your signature on the edit and you're responsible for everything within. That fact that you think that's "a bunch of bullshit" is why your edits are unwelcome. -- 21:03, 27 November 2020 (UTC)
 * What made you think that a noun with an "r" was the source of an adjective without any "r", when there's already a Persian descendant with an "r" on the same PIE page? It doesn't matter where you got the parts if you use the wrong ones. Chuck Entz (talk) 21:35, 27 November 2020 (UTC)
 * I added a more probable etymology and cleaned up your etymology . --  19:16, 28 November 2020 (UTC)

 * So it looks like you're just going to continue doing ?  --  05:22, 2 December 2020 (UTC)
 * I want you to try something. Instead of indiscriminately reverting and leaving belligerent messages saying nothing other than "I don't like anything that you ever do," please try writing what exactly was so wrong with, say, the edits to . It was reliably sourced. It used a root that the source specified (and was already in the RFE), and it listed a possible relation with 🇨🇬. I put these things in the edit. What was so wrong with that? Just as you always accuse me of making "the same mistakes," I've been patiently asking you for years to Assume good faith; I'm just trying to help. Reversion sprees and general snark along the lines of "you suck" in edit summaries are not conducive to a collaborative environment. If you reasonably tell me what you don't like, I do listen. (The list of things you've asked me to do has grown over the years and to this day I'm still following most of it...I should write that list down). Also, patience and amicability with others makes them much more likely to work with you (I know I'm not the only one you talk down to, I've seen your interactions with others). I'm trying to work with you, but please work with me in return. DJ K-Çel (contribs ~ talk) 05:45, 2 December 2020 (UTC)
 * That's just it, Djkcel. I do assume your edits are "in good faith", which means you think there's nothing wrong with your edits, and that's the whole problem. How about this, Djkcel: you try and list some things wrong your edits to and . --  06:07, 2 December 2020 (UTC)
 * Ha! Uno reverse card. Well, let's see...
 * For, I see that you removed Leasnam's etymology for this root, which is what I had used. He usually writes great etymologies and that one looked fine to me, especially since Kroonen suggests that *kahwu could related to . Maybe they're different, but the part about it being onomatopoeic certainly couldn't have been wrong. Fine, no more (blindly) copying from other pages. Primary sources only.
 * definitely isn't infalible. That etymology on is also from 2012 and I think we've all improved since them, in both understanding and sourcing. But yes, "no more copying from other pages" is the key takeaway here. --  22:37, 7 December 2020 (UTC)
 * For, I think it was probably the root. Etymologiebank's entry for kuiken, connects the Norse word to , calling it a shortening of which is imitative. I now realize that  could be a West Germanic formation, but Etymonline also says that the Norse word is from  (I swear! see the link). Also, both Etymologiebank and Etymonline cite a possible connection with 🇨🇬 (modern 🇨🇬) and call it imitative, which I also included. So my only deduction can be that you don't think  can become , and that the root should instead have been something like , .   By the way, feel free to DM me on Discord if you ever want to have quicker conversations, unless you're wanting these exchanges to remain public. DJ K-Çel (contribs ~ talk) 20:38, 3 December 2020 (UTC)
 * We don't reconstruct PG as roots, so yes, the root. See on the page now. You also  you were going to null out reconstructions you didn't know how to lemmatize. --  22:37, 7 December 2020 (UTC)

 * Where'd you copy  from? Roots don't have accents, for one. --  03:27, 8 December 2020 (UTC)
 * Are you referring to the accent over the e (é) in the PIE root? 🇨🇬 was on  🇨🇬, and the PIE root is Pokorny. The PIE root is also found on 🇨🇬, accented on there too. DJ K-Çel (contribs ~ talk) 03:38, 8 December 2020 (UTC)
 * We don't accent roots. Read WT:AINE. If you don't know how to reconstruct a language, don't. Period. -- 03:49, 8 December 2020 (UTC)

Everything above applies also to. -- 22:33, 10 January 2021 (UTC)

Your block
You were warned about onomastic entries (earlier on this page), and agreed to take a break from them. In general, there have been many discussions about how to identify trustworthy sources, assess those sources critically, and avoid introducing mistakes into Wiktionary. However, this edit indicates to me that you have taken none of this advice to heart. On a basic level, the problem is that the content you added is wrong, and marks a return to your pattern of adding dubious onomastic etymologies. (And as a minor aside, you cited a Latin verb in the infinitive form, rather than lemmatising it the way we do on Wiktionary (along with most dictionaries), which shows disregard for standard formatting practices.) More fundamentally, however, this shows me that you are still making no effort to distinguish trustworthy scholarly sources from random claims on the Internet. Your reference was to a blog post on Eupedia, which is simply ridiculous to consider as a source. And even if it had been from a scholarly source, you should still have questioned whether a major river far from the Roman heartland would have a purely Latin etymology, and wondered how the sequence /li/ could magically convert into /g/.

This has been going on for many years, and yet you are still resistant to learning or improving, even when the basic correctness of your additions, and thus the reliability of the dictionary as a whole, is on the line. I hope that you use the duration of this block to do some soul-searching about whether you actually want to be a help here, or a hindrance. —Μετάknowledge discuss/deeds 00:36, 11 September 2020 (UTC)
 * Thanks Obama Wikipedia DJ K-Çel (talk) 01:04, 11 September 2020 (UTC)
 * This gave me a chuckle — looks like you already knew what my response would be. But no work is infallible, so the point about thinking critically is never going to go away, no matter which sources you avoid. —Μετάknowledge discuss/deeds 02:49, 11 September 2020 (UTC)

We sent you an e-mail
Hello ,

Really sorry for the inconvenience. This is a gentle note to request that you check your email. We sent you a message titled "The Community Insights survey is coming!". If you have questions, email surveys@wikimedia.org.

You can see my explanation here.

MediaWiki message delivery (talk) 18:48, 25 September 2020 (UTC)

kaag
Djkcel, to Dutch  were pretty misguided. You don't seem to understand Germanic sound changes and didn't take the time to analyse the veracity the semantic changes. pinged you on Discord to fix your etymology, but your were nearly just as bad. Much like with PIE, you don't appear to grasp Proto-Germanic case endings, and therefore shouldn't be creating redlinks to their reconstructions. (Nor do you seem to know what a is.) Again, not trying to be a jerk, but it's hard not to when it's so systemic.

I also want to bring your attention to this discussion, which, in the latter half, talks about using a new templates called dercat. Instead of me following you to delete the PG entry links in etymologies all the time, perhaps you can start using this template instead. Thanks.

-- 19:48, 15 October 2020 (UTC)

 * Hello, and thank you for submitting your feedback to the R&D department! Your concerns have been processed an- OK enough of my dumb bullshit onto the etymologies.

 * : let's be very fair here, my source said:
 * ...ofri. kāch (nfri. keech, Noord-Fries kuuch); alle ‘buitendijks land’, < pgm. *kaugi-, *kauga-.
 * ...oe., cēg, ne. key) (which is from )
 * ...keg(ge) ‘wig’, en zie verder → . (which is from )
 * ..Op grond van deze moeilijkheden, tezamen met de beperkte geografische spreiding, concludeert Boutkan (1998) dat het woord een ontlening moet zijn uit een Noordwest-Europese substraattaal. (screw it, it's a substrate!)

 * OK, so I think you're saying that: 1) Roots like, should be grey, not red (these roots don't have standard wkt. case endings); 2) instead of linking to the Proto-Germanic roots of the cognates listed, just mention the cognates? e.g. ,  3) yes I know what a doublet is ( and ,  and , etc), mind-slip sorry.

 * Sounds reasonable. If you don't know how to add the case endings to PG terms, nulling them out as links, like and, would be better. Please remember to keep the trailing dash though. Adding possible cognate reconstructions is fine, it just could have been less messy. --  16:43, 16 October 2020 (UTC)

 * etymology chains: yes, I did see that discussion and you and I are actually in agreement (that it should only go to the closest blue link, or blue link whose lemma actually exists). For new etymologies, that is what I do (e.g. ). But for etymologies who already go to gem-pro or beyond, I leave them there, just because I don't want to upset any others by undoing work they've already done. I want to point out to you that many times you've thought I was adding in gem-pro and beyond to etymology chains, when all I was doing was adding missing gmw-pro to the middle (such as  to, etc.), while the other stuff was already there. If I'm doing a new etymology I'll try messing around with your new template.
 * But yeah, I agree with you that the overly long chains make the etymologies look cluttered. A bit off-topic, but so do the absolute glob of cognates that seem to pervade many of the English etymologies. Like, look at or  for god's sake. Blech. Thanks, see you around.

 * DJ K-Çel (contribs ~ talk) 23:58, 15 October 2020 (UTC)
 * Cool. I would appreciate then if instead of you do . Yeah, if they have a direct common parent entry linked, I'll just delete any cognates. --  16:43, 16 October 2020 (UTC)

in dercat
As I tagged in the edit comments, please don't include  in dercat unless there is a reason to reconstruct a Frankish form, i.e. not on every Dutch entry, as you have been doing. -- 04:13, 2 December 2020 (UTC)
 * 👍 Makes sense, will keep it in mind going forward. DJ K-Çel (contribs ~ talk) 05:45, 2 December 2020 (UTC)

title: User talk:Djkcel/2020


text:
User talk:Djkcel/2021

in dercat (continued)
Also, please stop adding new lines before cognate lists in all etymologies. It's appropriate when the etymology is really long, but not everywhere carte blanche. -- 04:24, 2 December 2020 (UTC)
 * Actually, now that I think about it, how do you feel about using rel-top and rel-bottom as wrappers around cognates on English entries? The problem for me is simply how cluttered and unreadable English etymologies look on phones and smaller screens because they always seem to have 10+ cognates. It can be tough to see where the PIE root ends and where the cognates begin. But is looking pretty good to me... DJ K-Çel (contribs ~ talk) 05:45, 2 December 2020 (UTC)
 * You're being rather heavy-handed with rel-top on cognate lists. -- 19:17, 24 June 2021 (UTC)

So, I thought you were going to stop to cognates list everywhere carte blanche? And actually, in this case, the related terms in the etymology should have been moved to its own header, and that further out cognate info doesn't really belong there. -- 05:03, 14 January 2021 (UTC)
 * Well, as I said before the "cognate globs" just look really messy on mobile and smaller screens (like this). It looks cleaner when the cognates are separated from the etymologies (like this). If you prefer for me to get rid of the cognates entirely I can do that as well, I just didn't want to upset any others who liked having all the cognates there. Or, how do you feel about using rel-top and rel-bottom? (see above) DJ K-Çel (contribs ~ talk) 05:15, 14 January 2021 (UTC)
 * Long etymologies are quite common but all the same, we don't break every sentence into paragraphs just for mobile users. Cognates should only be added when they benefit the etymology, like when a common parent entry doesn't exist. Etymologies that go beyond the scope of entry's origin should also be cut down as to not overreach. rel-top is overkill. -- 22:06, 14 January 2021 (UTC)
 * I the etymology of  as an example of when cognates are helpful. --  22:20, 14 January 2021 (UTC)
 * OK, I may just start removing unneeded cognates in the future for entries where a PGmc. entry already exists. Thanks. DJ K-Çel (contribs ~ talk) 01:02, 15 January 2021 (UTC)
 * Bro, why are you still putting cognates on ? -- 05:33, 8 February 2021 (UTC)
 * Sorry dude, think I meant to use rel-top or delete the line and it slipped. Trying to keep in mind to just delete cognates for blue links instead. DJ K-Çel (contribs ~ talk) 15:44, 8 February 2021 (UTC)
 * Thanks. Much appreicated. -- 19:03, 8 February 2021 (UTC)
 * , man... -- 05:44, 1 May 2021 (UTC)

Your Spanish etymologies
Hi. To make a change, here's a nice message. The Spanish etymologies seem good to me. Keep it up. Also, as you claim to be a native Turkish speaker, please can you have a look at Category:Tbot entries (Turkish)? These are entries made by a robot over 10 years ago that haven't been fixed. If you could check some I'd be very grateful La más guay (talk) 00:07, 17 December 2020 (UTC)
 * Hello Mr. Cool guy! No problem. I have no formal (written) Turkish education, as I just spoke it colloquially growing up, but I'd be happy to take a look at the terms created by that bot and see if they look right. Wow, some of these entries are super old! DJ K-Çel (contribs ~ talk) 01:50, 17 December 2020 (UTC)

Online Etymology Dictionary
I've mentioned several times now above, but please don't use the website OED for reconstruction entries. Instead, take the time to find academic sources. -- 20:56, 10 January 2021 (UTC)
 * Figured you wouldn't like that edit. I really try not to. But can you recommend some sources for when Kroonen, Etymologiebank, and Kluge don't cover a reconstruction? Maybe Ringe? Orel? Thanks in advance.DJ K-Çel (contribs ~ talk) 21:13, 10 January 2021 (UTC)
 * Category:Proto-Germanic reference templates has a few you might be missing. R:ofs:OFED, R:no:NEO, and R:sv:SEO are also surprisingly fruitful sources.
 * In the case of, the related terms section hints to its likely etymology, which is ultimately from PIE . Germanic has the parallel semantic shift of “to sip, drink” > “to sigh” in.
 * -- 22:17, 10 January 2021 (UTC)

ঝুট
juṣṭi is not phonologically possible in Prakrit. Even if it were then that form cannot go back to an earlier Sanskrit jūṭa.

This is the second time I'm having to ask you to refrain from dabbling in etymologies of languages you don't know about. -- 𝓑𝓱𝓪𝓰𝓪𝓭𝓪𝓽𝓽𝓪(𝓽𝓪𝓵𝓴) 13:35, 25 February 2021 (UTC)
 * Chill. I was just citing OED's definition for that word which said..."mid 18th century: from Bengali jhūṭo ‘matted hair’, from Prakrit juṣṭi." They don't provide native scripts, but I wish they did. Also, the part about it being of non-Indo-European origin (Watkins) was valid so there was no need to throw out the whole edit. DJ K-Çel (contribs ~ talk) 14:07, 25 February 2021 (UTC)

 * Could you please stop adding bad etymologies to Sanskrit entries? The etymology you gave for is not possible (wrong vowel, wrong nasal) and your edit at  showed wrong formations (again). Moreover, you cite Pokorny at  but Pokorny never lists this term as a descendant of that PIE root nor does Mayrhofer. That leaves just one source making a dubious claim. You should leave things alone if you are unable to assess the validity of information pertaining to them by yourself. -- 𝓑𝓱𝓪𝓰𝓪𝓭𝓪𝓽𝓽𝓪(𝓽𝓪𝓵𝓴)  02:59, 1 March 2021 (UTC)
 * Sorry, for the second word I had accidentally been looking at, not (hence the formation ). Seems that for , Gupta shoehorned it in with a bunch of other Sanskrit derivatives of , but I'm now realizing that even with metathesis the vowel doesn't line up. Honest mistakes, those. Will be more careful in the future. (Btw, may add  to a few entries...) DJ K-Çel (contribs ~ talk) 03:13, 1 March 2021 (UTC)

greave 1
@Djkcel: A few sources suppose that grove is derived from Anglo-Saxon grafan; but there is no warrant for this, even though the original meaning of grove has been assumed as 'a clearing in a wood'; but this is disputable. There is no connection etymologically between grǣfa in etymology 1 and that in etymology 3. Etymology 1 stands alone, as evidenced by its meaning. Care has to be taken with some of Webster's etymologies that start off accurately, but tend to wildly link other unrelated lexemes - for example in that of dye. Sources that do not apply etymological logic are not helpful. I left the wrong assumption in etymology 1 as to the P.G. form for 'hole' that is related to the root of a grave, since you qualified it by 'probably'. Kind regards. Andrew H. Gray 16:47, 12 May 2021 (UTC) Andrew
 * Yo Andrew. Isn't sense 1 of greave basically just a corruption of ? I'm not sure they're close enough to warrant calling them alternate forms, but our etymology for says to compare, which if related, could be connected to  if they're both from 🇨🇬. But I agree that since the origin of the both senses 1 & 3 are far from clear, cautious wording in the etymologies is a good idea. DJ K-Çel (contribs ~ talk) 21:58, 13 May 2021 (UTC)

Greave 1
@Djkcel: I am aware of the source that connects grove with groove; but that is a classic example of a source that has not used etymological logic, because of the manifest connection between greave 1 (that also refers to 'brushwood') and grove. Am trying to get Wiktionary etymologies to maximum accuracy and that is not an easy task when blocked by an extremely knowledgeable linguist who is not an etymologist! For example, the P.G. roots for adze and the latter syllable of 'annEAL' never existed. What are stated for wood are mere substrates from the Proto-Celtic, that is confirmed by the Irish Pictish 'uudu' for wood. There are also an number of hybrid etymologies between Proto-Germanic and Celtic. There are rules for editing etymologies on my user page, that, if adhered to, will cause little controversy and avoid having to be blocked. Kind Regards. Andrew H. Gray 16:17, 14 May 2021 (UTC) Andrew (talk)

Hashtags
Djkcel, please use senseid and id to direct people to the correct entry and not hashtags. -- 15:44, 23 August 2021 (UTC)
 * Thanks Victar. DJ K-Çel (contribs ~ talk) 15:49, 23 August 2021 (UTC)

Türkçedeki yeterlilik eki
Merhaba, gördüğüm kadarıyla buraya hakim birisiniz. Türkçe de bildiğinize göre umarım yardımcı olabilirsiniz. alabilmek sayfasını oluşturdum ancak buradaki sistemi tam çözemedim için Türkçedeki "yeterlilik fiili"ni "ability" olarak çevirebildim. inflection of şablonu bunu beğenmemiş olacak ki bağlantı vermedi. Muhtemelen doğru girmediğim için ability'i tanımadı. Benzer bir sayfa da bulamadım örnek alayım. Ek konusunda yardımcı olursanız sevinirim. ToprakM (talk) 03:01, 10 September 2021 (UTC)
 * Merhaba arkadaş. Bence aradığınız hâl durumu "ablative" olabilir. Belki böyle?
 * Aradığınız bu değilse, lütfen bana bildirin, belki biraz daha yardımcı olmaya çalışabilirim. DJ K-Çel (contribs ~ talk) 14:55, 10 September 2021 (UTC)
 * Teşekkür ederim ancak anladığım kadarıyla ablative, Türkçede "ismin -den hali" olarak kullanılıyor. "araba" - "arabadan" şeklinde. Yani çok yüksek ihtimalle bu durumda ablative kullanmak doğru olmaz. Wikipedia "Turkish grammar" sayfasında "-(e)bilmek (implies ability)" şeklinde yazmışlar ama burada nasıl yapılır hala emin değilim. ToprakM (talk) 17:17, 10 September 2021 (UTC)
 * Ohhh!! Yanlış anlaşılma için özür dilerim..görünüşe göre gerçekten "ability" demek istedin! Sanırım bahsettiğiniz hâl genellikle "abilitative mood" olarak adlandırılıyor. Ancak, inflection of buna sahip değildir, ancak hemen hemen aynı şey olan vardır. Yani belki:

 * Bu uygun bir köprü oluşturacaktır. DJ K-Çel (contribs ~ talk) 19:38, 12 September 2021 (UTC)

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

title: User talk:Djkcel/2021


text: 梿头板子

title: 梿头板子


text:
槤頭板子

Noun

 * 1)  paddle of a water wheel

title: 槤頭板子


text: κεκλόμενος

title: κεκλόμενος


text: κεκλόμενοι

title: κεκλόμενοι


text:
Bisher

Etymology
Americanized form of.

Statistics

 * According to the 2010 United States Census, Bisher is the 40745th most common surname in the United States, belonging to 536 individuals. Bisher is most common among White (93.66%) individuals.

title: Bisher


text:
Zenú

Noun

 * 1) A pre-Columbian culture in Colombia from about 200 BCE to about 1600 CE, whose ancestral territory comprises the valleys of the Sinú and San Jorge rivers as well as the coast of the Caribbean around the Gulf of Morrosquillo.

title: Zenú


text:
Beissel

Etymology
Borrowed from.

Statistics

 * According to the 2010 United States Census, Beissel is the 40745th most common surname in the United States, belonging to 536 individuals. Beissel is most common among White (95.34%) individuals.

title: Beissel


text: Beissels

title: Beissels


text: Bishers

title: Bishers


text:
Zeuzerinae

Hypernyms

 * ; - family

title: Zeuzerinae


text:
флейтоподібний

Etymology
From. Compare 🇨🇬.

Adjective

 * 1) flutelike

title: флейтоподібний


text: Citations:Taiyuan

title: Citations:Taiyuan


text: Zaporozhe

title: Zaporozhe


text: Zaporozhie

title: Zaporozhie


text: Wiktionary:Word of the day/2022/August 23


text:
wybrzuszanie

Etymology
From.

title: wybrzuszanie


text:
beer bike

Etymology
From, in reference to the beer frequently drunk while using them.

title: beer bike


text: beer bikes

title: beer bikes


text:
wybrzuszenie

Etymology
From.

Noun

 * 1) bulge, camber, hump
 * 1) bulge, camber, hump

title: wybrzuszenie


text:
turing

Noun

 * 1) name commonly used for something
 * 2) act of making mention of something
 * 3)  respect; regard; consideration
 * 4)  one's treatment of someone
 * 5) guess; answer
 * 6) selling price of goods
 * 7) price offered by a buyer
 * 1) selling price of goods
 * 2) price offered by a buyer
 * 1) price offered by a buyer

title: turing


text: pedibuses

title: pedibuses


text:
hedelmäkyyhky

Noun

 * 1) fruit dove pigeon of the genus

title: hedelmäkyyhky


text:
რაფერ

Etymology
From.

Adverb

 * 1)  how

title: რაფერ


text: Category:Ancient Greek terms derived from the Proto-Indo-European root *kel-


text:
Bolf

Etymology
Borrowed from and, a variant of.

Statistics

 * According to the 2010 United States Census, Bolf is the 40745th most common surname in the United States, belonging to 536 individuals. Bolf is most common among White (93.66%) individuals.

title: Bolf


text: Category:Latin terms derived from the Proto-Indo-European root *kel-


text: zoosporocysts

title: zoosporocysts


text:
Brechtel

Etymology
Borrowed from.

Statistics

 * According to the 2010 United States Census, Brechtel is the 40745th most common surname in the United States, belonging to 536 individuals. Brechtel is most common among White (93.84%) individuals.

title: Brechtel


text: Brechtels

title: Brechtels


text: Bolfs

title: Bolfs


text:
keltapääkaijanen

Noun

 * 1) buff-faced pygmy parrot, Microspitta pusio

title: keltapääkaijanen


text:
Zieger

Etymology
Borrowed from.

Statistics

 * According to the 2010 United States Census, Zieger is the 46138th most common surname in the United States, belonging to 462 individuals. Zieger is most common among White (95.67%) individuals.

title: Zieger


text: davero

title: davero


text:
upangaji

Etymology
From.

Noun

 * 1) arranging
 * 2) renting, rental
 * 3) adoption

title: upangaji


text:
Nemenhah

Proper noun

 * 1) A religious group founded circa 2000 that practises alternative medicine.

title: Nemenhah


text:
Reconstruction:Proto-Slavic/bělъ bogъ

Etymology
From 🇰🇲.

Noun

 * 1) good luck

Descendants

 * East Slavic:
 * South Slavic:
 * Serbian: ,
 * West Slavic:
 * Pomeranian:
 * Serbian: ,
 * West Slavic:
 * Pomeranian:
 * Pomeranian:
 * Pomeranian:
 * Pomeranian:

title: Reconstruction:Proto-Slavic/bělъ bogъ


text:
Weichert

Etymology
Borrowed from.

Statistics

 * According to the 2010 United States Census, Weichert is the 40745th most common surname in the United States, belonging to 536 individuals. Weichert is most common among White (95.34%) individuals.

title: Weichert


text:
keltasiipiaratti

Noun

 * 1) sulfur-winged parakeet,

title: keltasiipiaratti


text:
Wittler

Etymology
Borrowed from.

Statistics

 * According to the 2010 United States Census, Wittler is the 40745th most common surname in the United States, belonging to 536 individuals. Wittler is most common among White (96.08%) individuals.

title: Wittler


text: Wittlers

title: Wittlers


text:
tuntong

Etymology
From Proto-Central Philippine *tuŋtuŋ (“stand-on; layer-over”), from. Compare 🇨🇬, 🇨🇬, and 🇨🇬. .

Noun

 * 1) stepping; treading
 * 2) footprint
 * 3) setting of one's feet
 * 4)  reaching on a certain year
 * 5) pot cover
 * 1)  reaching on a certain year
 * 2) pot cover

title: tuntong


text: Weicherts

title: Weicherts


text:
wybrzuszyć

Etymology
From.

Verb

 * 1)  to bulge, to camber, to hump

title: wybrzuszyć


text: Ziegers

title: Ziegers


text:
wybrzuszać

Etymology
From.

Verb

 * 1)  to bulge, to camber, to hump

title: wybrzuszać


text: Category:Swahili terms derived from the Arabic root ه د ي


text:
McGrouther

Etymology
Variant of.

Statistics

 * According to data collected by Forebears in 2014, McGrouther is the 3633rd most common surname in Scotland, belonging to 141 individuals.

title: McGrouther


text:
tunganga

Adjective

 * 1) idling with an open mouth; with an agape mouth

Noun

 * 1) gazing with one's mouth agape
 * 2) act of pass one's time idly by watching others while working

title: tunganga


text:
krótkonożny

Etymology
From.

Adjective

 * 1) short-legged

title: krótkonożny


text:
牛荔枝

Noun

 * 1)  cow's testicle

title: 牛荔枝


text:
Umfreville

Etymology
Habitational surname of origin, from the village of, in Normandy.

Statistics

 * According to data collected by Forebears in 2014, Umfreville is the 48999th most common surname in England, belonging to 57 individuals.

title: Umfreville


text:
długonożny

Etymology
From.

Adjective

 * 1) long-legged

title: długonożny


text:
reality warping

Noun

 * : The psychic ability to manipulate, control, distort or alter reality
 * 1) An instance of reality being warped or manipulated by this ability or other kind of phenomenon

title: reality warping


text: நாடுகள்

title: நாடுகள்


text:
адъерфос

Etymology
From. Cognates include 🇨🇬,.

Noun

 * 1) brother

title: адъерфос


text:
hüner

Etymology
From, from.

Noun

 * 1) craft, ability
 * 2) talent, skill

title: hüner


text:
yungan

Etymology
From an Aboriginal language.

Noun

 * 1)  The dugong.

title: yungan


text:
Woolfitt

Etymology
Habitational surname from a minor place in the parish of, South Yorkshire, now known as Woolthwaite, but called Woolfit in 1817. The name derives from +.

Statistics

 * According to data collected by Forebears in 2014, Woolfitt is the 35632nd most common surname in England, belonging to 94 individuals.

title: Woolfitt


text: Woolfitts

title: Woolfitts


text:
Reconstruction:Proto-Slavic/čьrnъ bogъ

Etymology
From 🇰🇲.

Noun

 * 1) bad luck

Descendants

 * East Slavic:
 * South Slavic:
 * ⇒ Serbian:
 * West Slavic:
 * Old Polabian: *carny bog
 * West Slavic:
 * Old Polabian: *carny bog

title: Reconstruction:Proto-Slavic/čьrnъ bogъ


text:
Module:User:Theknightwho/mn-decl

local export = {} local m_table = require( "Module:table" ) local m_links = require( "Module:links" ) local m_string_utilities = require( "Module:string utilities" ) local lang = require( "Module:languages" ).getByCode( "mn" ) local com = require( "Module:mn-common" ) local iut = require( "Module:inflection utilities" ) local m_para = require( "Module:parameters" )

local char = mw.ustring.char local find = mw.ustring.find local format = mw.ustring.format local len = require( "Module:string" ).ulen local match = mw.ustring.match local gmatch = mw.ustring.gmatch local sub = mw.ustring.sub local gsub = mw.ustring.gsub local lower = mw.ustring.lower local split = mw.text.split local reverse = require( "Module:string" ).reverse local upper = mw.ustring.upper table.append = require( "Module:table" ).append

local output_noun_slots = { nom_sg = "nom|s", gen_sg = "gen|s", datloc_sg = "dat|-|loc|s", acc_sg = "acc|s", abl_sg = "abl|s", ins_sg = "ins|s", com_sg = "com|s", priv_sg = "priv|s", dirc_sg = "dirc|s", nom_pl = "nom|p", gen_pl = "gen|p", datloc_pl = "dat|-|loc|p", acc_pl = "acc|p", abl_pl = "abl|p", ins_pl = "ins|p", com_pl = "com|p", priv_pl = "priv|p", dirc_pl = "dirc|p", nom_sg_refl = "nom|s|refl", gen_sg_refl = "gen|s|refl", datloc_sg_refl = "dat|-|loc|s|refl", acc_sg_refl = "acc|s|refl", abl_sg_refl = "abl|s|refl", ins_sg_refl = "ins|s|refl", com_sg_refl = "com|s|refl", priv_sg_refl = "priv|s|refl", dirc_sg_refl = "dirc|s|refl", nom_pl_refl = "nom|p|refl", gen_pl_refl = "gen|p|refl", datloc_pl_refl = "dat|-|loc|p|refl", acc_pl_refl = "acc|p|refl", abl_pl_refl = "abl|p|refl", ins_pl_refl = "ins|p|refl", com_pl_refl = "com|p|refl", priv_pl_refl = "priv|p|refl", dirc_pl_refl = "dirc|p|refl", }

local output_noun_slots_with_linked = m_table.shallowcopy( output_noun_slots ) output_noun_slots_with_linked["nom_sg_linked"] = "nom|s" output_noun_slots_with_linked["nom_pl_linked"] = "nom|p"

local input_params_to_slots_both = { [1] = "nom_sg", [2] = "nom_pl", [3] = "gen_sg", [4] = "gen_pl", [5] = "datloc_sg", [6] = "datloc_pl", [7] = "acc_sg", [8] = "acc_pl", [7] = "abl_sg", [8] = "abl_pl", [11] = "ins_sg", [12] = "ins_pl", [13] = "com_sg", [14] = "com_pl", [15] = "priv_sg", [16] = "priv_pl", [17] = "dirc_sg", [18] = "dirc_pl", [19] = "nom_sg_refl", [20] = "nom_pl_refl", [21] = "gen_sg_refl", [22] = "gen_pl_refl", [23] = "datloc_sg_refl", [24] = "datloc_pl_refl", [25] = "acc_sg_refl", [26] = "acc_pl_refl", [27] = "abl_sg_refl", [28] = "abl_pl_refl", [29] = "ins_sg_refl", [30] = "ins_pl_refl", [31] = "com_sg_refl", [32] = "com_pl_refl", [33] = "priv_sg_refl", [34] = "priv_pl_refl", [35] = "dirc_sg_refl", [36] = "dirc_pl_refl", }

local input_params_to_slots_sg = { [1] = "nom_sg", [2] = "gen_sg", [3] = "datloc_sg", [4] = "acc_sg", [5] = "abl_sg", [6] = "ins_sg", [7] = "com_sg", [8] = "priv_sg", [9] = "dirc_sg", [10] = "nom_sg_refl", [11] = "gen_sg_refl", [12] = "datloc_sg_refl", [13] = "acc_sg_refl", [14] = "abl_sg_refl", [15] = "ins_sg_refl", [16] = "com_sg_refl", [17] = "priv_sg_refl", [18] = "dirc_sg_refl", }

local input_params_to_slots_pl = { [1] = "nom_pl", [2] = "gen_pl", [3] = "datloc_pl", [4] = "acc_pl", [5] = "abl_pl", [6] = "ins_pl", [7] = "com_pl", [8] = "priv_pl", [9] = "dirc_pl", [10] = "nom_pl_refl", [11] = "gen_pl_refl", [12] = "datloc_pl_refl", [13] = "acc_pl_refl", [14] = "abl_pl_refl", [15] = "ins_pl_refl", [16] = "com_pl_refl", [17] = "priv_pl_refl", [18] = "dirc_pl_refl", }

local cases = { nom = true, gen = true, datloc = true, acc = true, abl = true, ins = true, com = true, priv = true, dirc = true, }

local accented_cases = { ["nóm"] = "nom", ["gén"] = "gen", ["dátloc"] = "datloc", ["ácc"] = "acc", ["ábl"] = "abl", ["íns"] = "ins", ["cóm"] = "com", ["prív"] = "priv", ["dírc"] = "dirc", }

local function skip_slot( number, slot ) return number == "sg" and find( slot, "_p$" ) or		number == "pl" and find( slot, "_s$" ) end

local function add( data, slot, stem_and_ending, footnotes ) local stem local ending if not stem_and_ending then return end if skip_slot( data.number, slot ) then return end if type( stem_and_ending ) == "string" then stem = stem_and_ending ending = "" else stem = stem_and_ending[1] ending = stem_and_ending[2] end iut.add_forms( data.forms, slot, stem, ending, com.combine_stem_ending ) end

local function process_slot_overrides( data, do_slot ) for slot, overrides in pairs( data.overrides ) do		if skip_slot( data.number, slot ) then error( "Override specified for invalid slot '" .. slot .. "' due to '" .. data.number .. "' number restriction" ) end if do_slot( slot ) then data.forms[slot] = nil local slot_is_plural = find( slot, "_p$" ) for _, override in ipairs( overrides ) do				for _, value in ipairs( override.values ) do					local form = value.form local combined_notes = iut.combine_footnotes( data.footnotes, value.footnotes ) end end end end end

local function vowelharmony( infl, data ) return com.vowelharmony( infl, data )[#com.vowelharmony( infl, data )] end

local function syllables( infl ) return #com.syllables( infl ) end

local function propernoun( infl, data ) if sub( infl, 1, 1 ) ~= lower( sub( infl, 1, 1 ) ) then return true else return false end end

local function voweldeletion( infl, data ) return com.voweldeletion( infl, data ) end

local function attributive( infl, data ) end

local function plural( infl, data ) local vh = vowelharmony( infl, data ) local reduced = voweldeletion( infl, data ) if data.decl == "g" then return infl .. "г" .. vh.uu .. "д" elseif data.decl == "n" then elseif data.decl == "r" then local matches = { { {				match( infl, "ч.н$" ), match( infl, "ён$" ) },				"д" },			{ { match( infl, "[йы]$" ) }, "н" .. vh.uu .. "д" },			{ {				match( infl, "[аеёийоөуүэюя][аоөуүэ]$" ), match( reduced, "[бвгджзклмнпрстфхцчшщ][аоөуүэ]$" ), -- C[уү], and also loanwords with a word-final long vowel written as a single vowel match( infl, "[еёюя]$" ) and data.bor },				"г" .. vh.uu .. "д" },			{ { match( infl, "[иь]$" ) }, "и" .. vh.u .. "д" },			{ { match( infl, "[еёюя]$" ) }, vh.u .. "д" },			{ { match( infl, "[бвгджзклмнпрстфхцчшщ][аоөэ]?$" ) }, vh.uu .. "д" }		}		for s,t in ipairs( matches ) do			for _,m in pairs( t[1] ) do				if match( infl, "^хүн$" ) then return "хүмүүс" elseif t[2] == "д" then return sub( infl, 1, len( infl ) - 1 ) .. t[2] else return reduced .. t[2] end end end end end

local function genitive( infl, data ) local vh = vowelharmony( infl, data ) local reduced = voweldeletion( infl, data )

if data.decl == "g" then return infl .. "гийн" elseif data.decl == "n" then elseif data.decl == "r" then local matches = { { { match( infl, "н$" ) }, vh.ii			}, { {				match( infl, "[йы]$" ), match( reduced, "и$" ) },				"н" },			{ {				match( infl, "[аеёийоөуүэюя][аоөуүэ]$" ), match( reduced, "[бвгджзклмнпрстфхцчшщ][аоөуүэ]$" ), -- C[уү], and also loanwords with a word-final long vowel written as a single vowel match( infl, "[еёюя]$" ) and data.bor },				"гийн" },			{ { match( infl, "[гжикчшщь]$" ) }, "ийн" },			{ {				match( infl, "[бвдзлмпрстфхц]$" ), match( infl, "[еёюя]$" ), match( infl, "[бвгджзклмнпрстфхцчшщ][аоөэ]$" ) -- not C[уү] },				vh.ii .. "н" }		}		for s,t in ipairs( matches ) do			for _,m in pairs( t[1] ) do				if m then return { reduced, t[2] } end end end end end

local function dativelocative( infl, data ) local vh = vowelharmony( infl, data ) local syllables = syllables( infl ) local reduced = voweldeletion( infl, data )

if data.decl == "g" then return infl .. "d" elseif data.decl == "n" then elseif data.decl == "r" then local vowel = "[аеёийоөуүэюяы]" local consonant = "[бвгджзклмнпрстфхцчшщ]" local matches = { { {				match( infl, "[гкф]$" ) or match( infl, "[^бвгклмнф]п$" ), ( match( infl, "в$" ) or match( infl, "[^вгклмнпф]б$" ) ) and ( data.syllables ~= 1 or match( infl, "^" .. consonant .. consonant ) ), match( infl, vowel .. vowel .. "[рс]$" ) or match( infl, consonant .. "р$" ), ( match( infl, "р$" ) or match( infl, vowel .. "с$" ) ) and ( data.syllables ~= 1 or data.proper == true ), match( infl, vowel .. "[бгкпсф]ь?с$" ), match( infl, "[влмнр]ьс$" ), match( infl, "и[влмнр]с$" ), },				"т" },			{ {				match( infl, vowel .. "$" ), match( infl, "[^вгклмнпф]б$" ), match( infl, "[влмнр]$" ), match( infl, "[бвгклмнпрф]ь$" ), },				"д" },			{ {				match( infl, "[жчшщ]ь?$" ), match( infl, "[дзстфхц]ь$" ) },				"ид" },			{ {				match( infl, ".$" ), },				vh.a .. "д" }		}		for s,t in ipairs( matches ) do			for _,m in pairs( t[1] ) do				if m then if match( infl, "[джзстхцчшщ]ь$" ) then return { sub( infl, 1, len( infl ) - 1 ), t[2] } elseif match( infl, "[джзтхцчш]$" ) then return { reduced, t[2] } else return { infl, t[2] } end end end end return infl .. "д" end end

local function accusative( infl, data ) local vh = vowelharmony( infl, data ) local reduced = voweldeletion( infl, data )

if data.decl == "g" then return infl .. "г" elseif data.decl == "n" then elseif data.decl == "r" then local matches = { { {				match( infl, "[йы]$" ), match( infl, "[аеёийоөуүэюя][аоөуүэ]$" ), match( reduced, "[бвгджзклмнпрстфхцчшщ][аоөуүэ]$" ), -- C[уү], and also loanwords with a word-final long vowel written as a single vowel match( reduced, "и$" ), match( infl, "[еёюя]$" ) and data.bor },				"г" },			{ { match( infl, "[гжикчшщь]$" ) }, "ийг" },			{ {				match( infl, "[бвдзлмнпрстфхц]$" ), match( infl, "[еёюя]$" ), match( infl, "[бвгджзклмнпрстфхцчшщ][аоөэ]$" ) -- not C[уү] },				vh.ii .. "г" }		}		for s,t in ipairs( matches ) do			for _,m in pairs( t[1] ) do				if m then return { reduced, t[2] } end end end end end

local function aa( infl, data, decl ) local vh = vowelharmony( infl, data ) local reduced = voweldeletion( infl, data )

if decl == "g" then return infl .. "г" .. vh.aa	elseif decl == "n" then elseif decl == "r" then local matches = { { {				match( infl, "[йы]$" ), match( infl, "[аеёийоөуүэюя][аоөуүэ]$" ), match( reduced, "[бвгджзклмнпрстфхцчшщ][аоөуүэ]$" ), -- C[уү], and also loanwords with a word-final long vowel written as a single vowel match( reduced, "и$" ), match( infl, "[еёюя]$" ) and data.bor },				"г" .. vh.aa			}, { { match( infl, "[еёюя]$" ) }, vh.a			}, { { match( infl, "[иь]$" ) }, "и" .. vh.a			}, { {				match( infl, "[бвгджзклмнпрстфхцчшщ]$" ), match( infl, "[бвгджзклмнпрстфхцчшщ][аоөэ]$" ) -- not C[уү] },				vh.aa			} }		for s,t in ipairs( matches ) do			for _,m in pairs( t[1] ) do				if m then return reduced, t[2] end end end end end

local function ablative( infl, data ) local stem, ending = aa( infl, data, data.decl ) return { stem, ending .. "с" } end

local function instrumental( infl, data ) if match( data.decl, "[rnm]" ) then local stem, ending = aa( infl, data, "r" ) return { stem, ending .. "р" } elseif match( data.decl, "g" ) then local stem, ending = aa( infl, data, "g" ) return { stem, ending .. "р" } end end

local function reflexive( infl, data ) if match( data.decl, "[rnm]" ) then local stem, ending = aa( infl, data, "r" ) return { stem, ending } elseif match( data.decl, "g" ) then local stem, ending = aa( infl, data, "g" ) return { stem, ending } end end

local function comitative( infl, data )

local vh = vowelharmony( infl, data ) if match( infl, "[джзстхцчшщ]ь$" ) then return { sub( infl, 1, len( infl ) - 1 ), "ит" .. vh.ai, } else return { infl, "т" .. vh.ai, } end end

local function privative( infl, data ) return { infl, "гүй" } end

local function directional( infl, data )

local vh = vowelharmony( infl, data )

if match( infl, "рь?$" ) then return { infl, " л" .. vh.uu, } else return { infl, " р" .. vh.uu, } end end

local function equative( infl, data ) end

local function handle_derived_slots_and_overrides( data )

add( data, "nom_sg", data.lemma ) add( data, "gen_sg", genitive( data.lemma, data ) ) add( data, "datloc_sg", dativelocative( data.lemma, data ) ) add( data, "acc_sg", accusative( data.lemma, data ) ) add( data, "abl_sg", ablative( data.lemma, data ) ) add( data, "ins_sg", instrumental( data.lemma, data ) ) add( data, "com_sg", comitative( data.lemma, data ) ) add( data, "priv_sg", privative( data.lemma, data ) ) add( data, "dirc_sg", directional( data.lemma, data ) ) add( data, "nom_pl", plural( data.lemma, data ) ) add( data, "gen_pl", genitive( data.forms["nom_pl"][1].form, data ) ) add( data, "datloc_pl", dativelocative( data.forms["nom_pl"][1].form, data ) ) add( data, "acc_pl", accusative( data.forms["nom_pl"][1].form, data ) ) add( data, "abl_pl", ablative( data.forms["nom_pl"][1].form, data ) ) add( data, "ins_pl", instrumental( data.forms["nom_pl"][1].form, data ) ) add( data, "com_pl", comitative( data.forms["nom_pl"][1].form, data ) ) add( data, "priv_pl", privative( data.forms["nom_pl"][1].form, data ) ) add( data, "dirc_pl", directional( data.forms["nom_pl"][1].form, data ) ) add( data, "nom_sg_refl", reflexive( data.lemma, data ) ) add( data, "gen_sg_refl", reflexive( data.forms["gen_sg"][1].form, data ) ) add( data, "datloc_sg_refl", reflexive( data.forms["datloc_sg"][1].form, data ) ) add( data, "acc_sg_refl", reflexive( data.forms["acc_sg"][1].form, data ) ) add( data, "abl_sg_refl", reflexive( data.forms["abl_sg"][1].form, data ) ) add( data, "ins_sg_refl", reflexive( data.forms["ins_sg"][1].form, data ) ) add( data, "com_sg_refl", reflexive( data.forms["com_sg"][1].form, data ) ) add( data, "priv_sg_refl", reflexive( data.forms["priv_sg"][1].form, data ) ) add( data, "dirc_sg_refl", reflexive( data.forms["dirc_sg"][1].form, data ) ) add( data, "nom_pl_refl", reflexive( data.forms["nom_pl"][1].form, data ) ) add( data, "gen_pl_refl", reflexive( data.forms["gen_pl"][1].form, data ) ) add( data, "datloc_pl_refl", reflexive( data.forms["datloc_pl"][1].form, data ) ) add( data, "acc_pl_refl", reflexive( data.forms["acc_pl"][1].form, data ) ) add( data, "abl_pl_refl", reflexive( data.forms["abl_pl"][1].form, data ) ) add( data, "ins_pl_refl", reflexive( data.forms["ins_pl"][1].form, data ) ) add( data, "com_pl_refl", reflexive( data.forms["com_pl"][1].form, data ) ) add( data, "priv_pl_refl", reflexive( data.forms["priv_pl"][1].form, data ) ) add( data, "dirc_pl_refl", reflexive( data.forms["dirc_pl"][1].form, data ) )

-- Compute linked versions of potential lemma slots, for use in. -- We substitute the original lemma (before removing links) for forms that -- are the same as the lemma, if the original lemma has links. for _, slot in ipairs( { "nom_sg", "nom_pl" } ) do iut.insert_forms( data.forms, slot .. "_linked", iut.map_forms( data.forms[slot], function( form ) if form == data.orig_lemma_no_links and find( data.orig_lemma, "%[%[" ) then return data.orig_lemma else return form end end ) ) end end

--[=[ function export.loanworddiagnostic( text ) local consonant = "[БВГДЖЗКЛМНПРСТФХЦЧШЩбвгджзклмнпрстфхцчшщ]" local vconsonant = "[БВГЛМНРбвглмнр]" local vowel = "[АЕЁИЙОӨУҮЭЮЯаеёийоөуүэюя]" local cvowel = "[АИЙОӨЭаийоөэ]" local ivowel = "[ЕЁЮЯеёюя]" local sign = "[ЪЬъь]" local soft = "[Ьь]" local hard = "[Ъъ]" local prefixes = { "аб", "авто", "агро", "алко", "анарх", "анти", "архео", "астро", "аудио", "афро", "аэро", "баро", "био", "видео", "внутр", "эко", "гекто", "гео", "геронто", "гимна", "гига", "гидро", "гипер", "дека", "демо", "деци", "диа", "евро", "зепто", "изо", "интер", "интра", "инфра", "йокто", "квази", "кибер", "кило", "кино", "ко", "контра", "лабо", "либер", "макро", "мега", "мета", "метро", "микро", "милли", "мини", "мото", "мульти", "нано", "нео", "об", "олимп", "орга", "пано", "панто", "пара", "поли", "полу", "пост", "пре", "про", "псевдо", "радио", "суб", "супер", "теле", "тетр", "техн", "три", "турбо", "ультра", "фото", "цис", "четвер", "четыр", "экс", "электр" }

local suffixes = { "атор", "атори", "еон", "етик", "жер", "изм", "ист", "логи", "мент", "метр", "оми", "пол", "порт", "сер", "тер", "техник", "ятор", "ятори" }	local loanword local matches = { match( text, "[КФЩкфщ]" ), -- always used in loanwords match( text, consonant .. vconsonant .. consonant ), -- voweled consonant in the middle of a cluster match( text, consonant .. vconsonant .. sign .. consonant ), match( text, "[Бб]" .. consonant ), -- б followed by consonant match( text, consonant .. "[Йй]" ), -- consonant followed by й match( text, cvowel .. cvowel .. cvowel ), -- triple common vowel match( text, "и[ЁӨҮЭёөүэ]" ), match( text, hard .. consonant ), match( text, hard .. "[АЕИЙОӨЭЮаеийоөэю]" ), match( text, vowel .. sign ), match( text, "[жчш]э" .. consonant ), match( text, consonant .. vconsonant .. "$" ), -- word-final voweled consonant after consonant match( text, consonant .. sign .. vconsonant .. "$" ), match( text, "[БДЖЗТЦЧШбджзтцчш]" .. consonant .. "$" ), match( text, "[БДЖЗТЦЧШбджзтцчш]" .. sign .. consonant .. "$" ), match( text, "[СХсх][БВГДЖЗЛМНПРСХЦШбвгджзлмнпрсхцш]" .. consonant .. "$" ), match( text, "[СХсх][БВГДЖЗЛМНПРСХЦШбвгджзлмнпрсхцш]" .. sign .. consonant .. "$" ), match( text, "[ЖЧШжчш]э$" ), match( text, "^[ЙЪЬйъь]" ), -- starting with й, ь or ъ match( text, "^" .. consonant .. consonant ) -- starting with consonant cluster }	for _,v in pairs( matches ) do		if v then loanword = true break end end if loanword ~= true then for _,prefix in pairs( prefixes ) do if match( text, "^" .. prefix ) then loanword = true break end end end if loanword ~= true then for _,suffix in pairs( suffixes ) do if match( text, suffix .. "$" ) then loanword = true break end end end if loanword == true then return true else return false end end ]=]--

local function parse_indicator_spec( angle_bracket_spec ) local inside = match( angle_bracket_spec, "^<(.*)>$" ) local data = { overrides = {}, forms = {} } if inside ~= "" then local segments = iut.parse_balanced_segment_run( inside, "[", "]" ) local dot_separated_groups = iut.split_alternating_runs( segments, "%." ) for i, dot_separated_group in ipairs( dot_separated_groups ) do			local part = dot_separated_group[1] local case_prefix = sub( part, 1, 3 ) if cases[case_prefix] or accented_cases[case_prefix] then local slot, override = parse_override( dot_separated_group ) if data.overrides[slot] then table.insert( data.overrides[slot], override ) else data.overrides[slot] = { override } end elseif part == "" then if #dot_separated_group == 1 then error( "Blank indicator: '" .. inside .. "'" ) end data.footnotes = fetch_footnotes( dot_separated_group ) elseif part == "r" or part == "n" or part == "g" then if data.decl then error( "Can't specify declension twice: '" .. inside .. "'" ) end data.decl = part elseif part == "sg" or part == "pl" then if data.number then error( "Can't specify number twice: '" .. inside .. "'" ) end data.number = part elseif part == "а" or part == "о" or part == "ө" or part == "э" then if data.vh_override then error( "Can't specify vowel harmony twice: '" .. inside .. "'" ) end data.vh_override = part elseif part == "bor" or part == "Russian" then if data.bor then error( "Can't specify borrowing twice: '" .. inside .. "'" ) end data.bor = part elseif part == "proper" then if data.proper then error( "Can't specify proper noun twice: '" .. inside .. "'" ) end data.proper = true else error( "Unrecognized indicator '" .. part .. "': '" .. inside .. "'" ) end end else error( "Blank indicator: '" .. inside .. "'" ) end return data end

local function set_defaults_and_check_bad_indicators( data ) -- Set default values. if not data.adj then if data.proper then data.number = data.number or "sg" else data.number = data.number or "both" end end end

local function check_indicators_match_lemma( data ) -- Check for indicators that don't make sense given the context. if data.decl == "n" and match( data.lemma, "н$" ) then error( "Hidden-n declension cannot be specified with a lemma ending in н" ) end if data.decl == "g" and not match( data.lemma, "н$" ) then error( "Hidden-g declension can only be specified with a lemma ending in н" ) end end

local function detect_indicator_spec( data ) if propernoun( data.lemma, data ) then data.proper = true end set_defaults_and_check_bad_indicators( data ) check_indicators_match_lemma( data ) end

local function detect_all_indicator_specs( alternant_multiword_spec ) local is_multiword = #alternant_multiword_spec.alternant_or_word_specs > 1 iut.map_word_specs( alternant_multiword_spec, function( data )		detect_indicator_spec( data )		data.multiword = is_multiword	end ) end

local propagate_multiword_properties

local function propagate_alternant_properties( alternant_spec, property, mixed_value, nouns_only ) local seen_property for _, multiword_spec in ipairs( alternant_spec.alternants ) do		propagate_multiword_properties( multiword_spec, property, mixed_value, nouns_only ) if seen_property == nil then seen_property = multiword_spec[property] elseif multiword_spec[property] and seen_property ~= multiword_spec[property] then seen_property = mixed_value end end alternant_spec[property] = seen_property end

propagate_multiword_properties = function( multiword_spec, property, mixed_value, nouns_only ) local seen_property = nil local last_seen_nounal_pos = 0 local word_specs = multiword_spec.alternant_or_word_specs or multiword_spec.word_specs for i = 1, #word_specs do		local is_nounal if word_specs[i].alternants then propagate_alternant_properties( word_specs[i], property, mixed_value ) is_nounal = not not word_specs[i][property] elseif nouns_only then is_nounal = not word_specs[i].adj else is_nounal = not not word_specs[i][property] end if is_nounal then if not word_specs[i][property] then error( "Internal error: noun-type word spec without " .. property .. " set" ) end for j = last_seen_nounal_pos + 1, i - 1 do				word_specs[j][property] = word_specs[j][property] or word_specs[i][property] end last_seen_nounal_pos = i			if seen_property == nil then seen_property = word_specs[i][property] elseif seen_property ~= word_specs[i][property] then seen_property = mixed_value end end end if last_seen_nounal_pos > 0 then for i = last_seen_nounal_pos + 1, #word_specs do			word_specs[i][property] = word_specs[i][property] or word_specs[last_seen_nounal_pos][property] end end multiword_spec[property] = seen_property end

local function propagate_properties_downward( alternant_multiword_spec, property, default_propval ) local propval1 = alternant_multiword_spec[property] or default_propval for _, alternant_or_word_spec in ipairs( alternant_multiword_spec.alternant_or_word_specs ) do		local propval2 = alternant_or_word_spec[property] or propval1 if alternant_or_word_spec.alternants then for _, multiword_spec in ipairs( alternant_or_word_spec.alternants ) do				local propval3 = multiword_spec[property] or propval2 for _, word_spec in ipairs( multiword_spec.word_specs ) do					local propval4 = word_spec[property] or propval3 if propval4 == "mixed" then error( "Attempt to assign mixed " .. property .. " to word" ) end word_spec[property] = propval4 end end else if propval2 == "mixed" then error( "Attempt to assign mixed " .. property .. " to word" ) end alternant_or_word_spec[property] = propval2 end end end

local function propagate_properties( alternant_multiword_spec, property, default_propval, mixed_value ) propagate_multiword_properties( alternant_multiword_spec, property, mixed_value, "nouns only" ) propagate_multiword_properties( alternant_multiword_spec, property, mixed_value, false ) propagate_properties_downward( alternant_multiword_spec, property, default_propval ) end

local function normalize_all_lemmas( alternant_multiword_spec ) iut.map_word_specs( alternant_multiword_spec, function( data )		data.orig_lemma = data.lemma		data.orig_lemma_no_links = m_links.remove_links( data.lemma )		data.lemma = data.orig_lemma_no_links	end ) end

local function compute_categories_and_annotation( alternant_multiword_spec ) local cats = {} local function insert( cattype ) m_table.insertIfNot( cats, "Mongolian " .. cattype ) end if alternant_multiword_spec.pos == "noun" then if alternant_multiword_spec.number == "sg" then insert( "uncountable nouns" ) elseif alternant_multiword_spec.number == "pl" then insert( "pluralia tantum" ) end end local annotation if alternant_multiword_spec.manual then alternant_multiword_spec.annotation = alternant_multiword_spec.number == "sg" and "sg-only" or			alternant_multiword_spec.number == "pl" and "pl-only" or			"" else local annparts = {} local bor = nil local decl = {} local irregs = {} local stems = {} local reducible = nil local vh = {} local function do_word_spec( data ) m_table.insertIfNot( vh, vowelharmony( data.lemma, data ).a ) insert( vowelharmony( data.lemma, data ).a .. "-harmonic nouns" ) if data.decl == "r" then m_table.insertIfNot( decl, "reg" ) insert( "regular declension " .. alternant_multiword_spec.pos .. "s" ) elseif data.decl == "n" then m_table.insertIfNot( decl, "hidden-n" ) insert( "hidden-n declension " .. alternant_multiword_spec.pos .. "s" ) elseif data.decl == "g" then m_table.insertIfNot( decl, "hidden-g" ) insert( "hidden-g declension " .. alternant_multiword_spec.pos .. "s" ) end if data.bor then bor = true end if voweldeletion( data.lemma, data ) ~= data.lemma then reducible = true end end local key_entry = alternant_multiword_spec.first_noun or 1 if #alternant_multiword_spec.alternant_or_word_specs >= key_entry then local alternant_or_word_spec = alternant_multiword_spec.alternant_or_word_specs[key_entry] if alternant_or_word_spec.alternants then for _, multiword_spec in ipairs( alternant_or_word_spec.alternants ) do					key_entry = multiword_spec.first_noun or 1 if #multiword_spec.word_specs >= key_entry then do_word_spec( multiword_spec.word_specs[key_entry] ) end end else do_word_spec( alternant_or_word_spec ) end end if alternant_multiword_spec.pos == "proper noun" then table.insert( annparts, "proper" ) elseif alternant_multiword_spec.number ~= "both" then table.insert( annparts, alternant_multiword_spec.number == "sg" and "sg-only" or "pl-only" ) end if #vh > 0 then table.insert( annparts, table.concat( vh, "/" ) .. "-harmonic" ) end if #decl > 0 then table.insert( annparts, table.concat( decl, "/" ) .. " decl" ) end if bor then table.insert( annparts, "borr" ) end if reducible then table.insert( annparts, "reduc" ) end if #irregs > 0 then table.insert( annparts, table.concat( irregs, " // " ) ) end alternant_multiword_spec.annotation = table.concat( annparts, " " ) if #stems > 1 then insert( alternant_multiword_spec.pos .. "s with multiple stems" ) end end alternant_multiword_spec.categories = cats end

local function combine_stem_ending( stem, ending ) return stem .. ending end

local function show_forms( alternant_multiword_spec ) local lemmas = {} local props = { lemmas = lemmas, slot_table = output_noun_slots_with_linked, lang = lang, canonicalize = form, include_translit = true, footnotes = alternant_multiword_spec.footnotes, allow_footnote_symbols = not not alternant_multiword_spec.footnotes, }	iut.show_forms( alternant_multiword_spec.forms, props ) end

local function make_table( alternant_multiword_spec )

local forms = alternant_multiword_spec.forms local function header( min_width ) min_width = min_width or "70" return gsub( [===[ {title}{annotation} {\op}| style="background:#F9F9F9; text-align:center; min-width:MINWIDTHem; width:100%;" class="inflection-table" ]===], "MINWIDTH", min_width ) end local function reflexive( min_width ) min_width = min_width or "70" return gsub( [===[|- Reflexive forms {\op}| style="background:#F9F9F9; text-align:center; min-width:MINWIDTHem; width:100%;" class="inflection-table" ]===], "MINWIDTH", min_width ) end local function template_footer return [===[|- |{\cl}{notes_clause}   ]===] end local table_spec_both = header( "45" ) .. [===[ ! style="width:10em;background:#d9ebff" | ! style="background:#d9ebff;width:20em;" | singular / indefinite ! style="background:#d9ebff;width:20em;" | definite plural ! style="background:#eff7ff" | nominative ! style="background:#eff7ff" | genitive ! style="background:#eff7ff" | dative-locative ! style="background:#eff7ff" | accusative ! style="background:#eff7ff" | ablative ! style="background:#eff7ff" | instrumental ! style="background:#eff7ff" | comitative ! style="background:#eff7ff" | privative ! style="background:#eff7ff" | directional ]===] .. reflexive( "45" ) .. [===[ ! style="width:10em;background:#d9ebff" | ! style="background:#d9ebff;width:20em;" | singular / indefinite ! style="background:#d9ebff;width:20em;" | definite plural ! style="background:#eff7ff" | nominative ! style="background:#eff7ff" | genitive ! style="background:#eff7ff" | dative-locative ! style="background:#eff7ff" | accusative ! style="background:#eff7ff" | ablative ! style="background:#eff7ff" | instrumental ! style="background:#eff7ff" | comitative ! style="background:#eff7ff" | privative ! style="background:#eff7ff" | directional ]===] .. template_footer local table_spec_sg = header( "30" ) .. [===[ ! style="width:10em;background:#d9ebff" | ! style="background:#d9ebff" | singular / indefinite ! style="background:#eff7ff" | nominative ! style="background:#eff7ff" | genitive ! style="background:#eff7ff" | dative-locative ! style="background:#eff7ff" | accusative ! style="background:#eff7ff" | ablative ! style="background:#eff7ff" | instrumental ! style="background:#eff7ff" | comitative ! style="background:#eff7ff" | privative ! style="background:#eff7ff" | directional ]===] .. reflexive( "30" ) .. [===[ ! style="width:10em;background:#d9ebff" | ! style="background:#d9ebff" | singular / indefinite ! style="background:#eff7ff" | nominative ! style="background:#eff7ff" | genitive ! style="background:#eff7ff" | dative-locative ! style="background:#eff7ff" | accusative ! style="background:#eff7ff" | ablative ! style="background:#eff7ff" | instrumental ! style="background:#eff7ff" | comitative ! style="background:#eff7ff" | privative ! style="background:#eff7ff" | directional ]===] .. template_footer
 * {\cl}
 * {nom_sg}
 * {nom_pl}
 * {gen_sg}
 * {gen_pl}
 * {datloc_sg}
 * {datloc_pl}
 * {acc_sg}
 * {acc_pl}
 * {abl_sg}
 * {abl_pl}
 * {ins_sg}
 * {ins_pl}
 * {com_sg}
 * {com_pl}
 * {priv_sg}
 * {priv_pl}
 * {dirc_sg}
 * {dirc_pl}
 * {nom_sg_refl}
 * {nom_pl_refl}
 * {gen_sg_refl}
 * {gen_pl_refl}
 * {datloc_sg_refl}
 * {datloc_pl_refl}
 * {acc_sg_refl}
 * {acc_pl_refl}
 * {abl_sg_refl}
 * {abl_pl_refl}
 * {ins_sg_refl}
 * {ins_pl_refl}
 * {com_sg_refl}
 * {com_pl_refl}
 * {priv_sg_refl}
 * {priv_pl_refl}
 * {dirc_sg_refl}
 * {dirc_pl_refl}
 * {nom_sg}
 * {gen_sg}
 * {datloc_sg}
 * {acc_sg}
 * {abl_sg}
 * {ins_sg}
 * {com_sg}
 * {priv_sg}
 * {dirc_sg}
 * {nom_sg_refl}
 * {gen_sg_refl}
 * {datloc_sg_refl}
 * {acc_sg_refl}
 * {abl_sg_refl}
 * {ins_sg_refl}
 * {com_sg_refl}
 * {priv_sg_refl}
 * {dirc_sg_refl}

local table_spec_pl = header( "30" ) .. [===[ ! style="width:10em;background:#d9ebff" | ! style="background:#d9ebff" | definite plural ! style="background:#eff7ff" | nominative ! style="background:#eff7ff" | genitive ! style="background:#eff7ff" | dative-locative ! style="background:#eff7ff" | accusative ! style="background:#eff7ff" | ablative ! style="background:#eff7ff" | instrumental ! style="background:#eff7ff" | comitative ! style="background:#eff7ff" | privative ! style="background:#eff7ff" | directional ]===] .. reflexive( "30" ) .. [===[ ! style="width:10em;background:#d9ebff" | ! style="background:#d9ebff" | definite plural ! style="background:#eff7ff" | nominative ! style="background:#eff7ff" | genitive ! style="background:#eff7ff" | dative-locative ! style="background:#eff7ff" | accusative ! style="background:#eff7ff" | ablative ! style="background:#eff7ff" | instrumental ! style="background:#eff7ff" | comitative ! style="background:#eff7ff" | privative ! style="background:#eff7ff" | directional ]===] .. template_footer local notes_template = [===[ {footnote} ]===]	if alternant_multiword_spec.title then forms.title = alternant_multiword_spec.title else forms.title = "Declension of " .. forms.lemma .. "" end local annotation = alternant_multiword_spec.annotation or "" if annotation == "" then forms.annotation = "" else forms.annotation = " (" .. annotation .. " )" end local table_spec = alternant_multiword_spec.number == "sg" and table_spec_sg or		alternant_multiword_spec.number == "pl" and table_spec_pl or		table_spec_both forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format( notes_template, forms ) or "" return m_string_utilities.format( table_spec, forms ) end
 * {nom_pl}
 * {gen_pl}
 * {datloc_pl}
 * {acc_pl}
 * {abl_pl}
 * {ins_pl}
 * {com_pl}
 * {priv_pl}
 * {dirc_pl}
 * {nom_pl_refl}
 * {gen_pl_refl}
 * {datloc_pl_refl}
 * {acc_pl_refl}
 * {abl_pl_refl}
 * {ins_pl_refl}
 * {com_pl_refl}
 * {priv_pl_refl}
 * {dirc_pl_refl}

function create_reflexives( infl, data )

data[infl].syllables = #com.syllables( data[infl].text ) vowelharmony( infl, data ) data[infl].vh = data[infl].vh[#data[infl].vh] data[infl].reduced = voweldeletion( infl, data ) data[infl].text_nostress = lang:makeEntryName( data[infl].text ) data[infl].reduced_nostress = lang:makeEntryName( data[infl].reduced ) return reflexive( infl, data ) end

local function create_caseforms( infl, data ) data[infl].syllables = #com.syllables( data[infl].text ) vowelharmony( infl, data ) data[infl].vh = data[infl].vh[#data[infl].vh] data[infl].reduced = voweldeletion( infl, data ) data[infl].text_nostress = lang:makeEntryName( data[infl].text ) data[infl].reduced_nostress = lang:makeEntryName( data[infl].reduced ) iut.add_forms( data.cases, "nom_" .. infl, data[infl].text, "", combine_stem_ending, lang ) genitive( infl, data ) dativelocative( infl, data ) accusative( infl, data ) ablative( infl, data ) instrumental( infl, data ) comitative( infl, data ) privative( infl, data ) directional( infl, data ) return data end

function export.do_generate_forms( parent_args, pos, from_headword, def )

local params = { [1] = { required = true, default = "хаан" }, footnote = { list = true }, title = {}, pos = { default = "noun" } }

local args = m_para.process( parent_args, params ) if not match( args[1], "<.*>" ) then error( "Please specify declension" ) end local parse_props = { parse_indicator_spec = parse_indicator_spec }	local alternant_multiword_spec = iut.parse_inflected_text( args[1], parse_props ) alternant_multiword_spec.title = args.title alternant_multiword_spec.pos = args.pos or pos alternant_multiword_spec.footnotes = args.footnote alternant_multiword_spec.args = args normalize_all_lemmas( alternant_multiword_spec ) detect_all_indicator_specs( alternant_multiword_spec ) propagate_properties( alternant_multiword_spec, "proper", "", true ) propagate_properties( alternant_multiword_spec, "number", "both", "both" ) local inflect_props = { skip_slot = function( slot ) return skip_slot( alternant_multiword_spec.number, slot ) end, slot_table = output_noun_slots_with_linked, get_variants = get_variants, inflect_word_spec = handle_derived_slots_and_overrides, }	iut.inflect_multiword_or_alternant_multiword_spec( alternant_multiword_spec, inflect_props ) compute_categories_and_annotation( alternant_multiword_spec ) return alternant_multiword_spec end

function export.show( frame ) local parent_args = frame:getParent.args or frame.args local alternant_multiword_spec = export.do_generate_forms( parent_args ) show_forms( alternant_multiword_spec ) return make_table( alternant_multiword_spec ) .. require( "Module:utilities" ).format_categories( alternant_multiword_spec.categories, lang ) end

local function lb( total ) return ( ( total + 1 ) / 14 ) * ( tonumber( mw.title.getCurrentTitle.subpageText ) - 1 ) end

local function ub( total ) return ( ( total + 1 ) / 14 ) * tonumber( mw.title.getCurrentTitle.subpageText ) end

function export.testpreprocess( rawtext ) local data = {}

data.text, data.spec = match( rawtext, "^(.*)<(.-)>$" ) data.text_nostress = lang:makeEntryName( data.text ) data.spec = split( data.spec, ".", true ) data.decl = data.spec[1] data.bor = data.spec[2] or nil data.syllables = #com.syllables( data.text ) vowelharmony( data ) propernoun( data ) data.vh = data.vh[#data.vh] data.reduced = export.voweldeletion( data ) data.reduced_nostress = lang:makeEntryName( data.reduced ) return data end

local function testheader( section ) local title = mw.title.getCurrentTitle.subpageText local function subpages( inflection ) local subpages = {} for i=1,14 do table.insert( subpages, "" .. i .. " " ) end return table.concat( subpages ) end if section == 1 then return "  " .. testheader( 2 ) .." " end

function export.vowelharmonytest( frame ) local lemmas = require( "Module:User:Theknightwho/mn-lemmas" ).group1 local terms = {} local correct = 0 local wrong_native = 0 local wrong_loan = 0 local predicted_vh for i,v in pairs( lemmas ) do		if i >= ( tonumber( frame.args[1] ) or lb( #lemmas ) ) and i <= ( tonumber( frame.args[2] ) or ub( #lemmas ) ) and not v.bor then local vharm = vowelharmony( v.lemma ) vharm = vharm[#vharm] if vharm.position == "back" and vharm.quality == "unrounded" then predicted_vh = 1 elseif vharm.position == "back" and vharm.quality == "rounded" then predicted_vh = 2 elseif vharm.position == "front" and vharm.quality == "rounded" then predicted_vh = 3 else predicted_vh = 4 end if predicted_vh == v.vh then correct = correct + 1 colour = "#BBFFBB" elseif v.bor then wrong_loan = wrong_loan + 1 colour = "#FFFFBB" else wrong_native = wrong_native + 1 colour = "#FFBBBB" end local term = " " .. v.class .. " " .. v.lemma .. " " .. v.vh .. " " .. predicted_vh .. " "			if colour == "#BBFFBB" then term = term .. "Correct " elseif colour == "#FFFFBB" then term = term .. "Incorrect loan " else term = term .. "Incorrect " end table.insert( terms, term ) end end return testheader( 1 ) .. " " .. testheader( 2 ) .." " end

function export.loanwordtest( frame ) local lemmas = require( "Module:User:Theknightwho/mn-lemmas" ).group1 local terms = {} local correct = 0 local wrong = 0 for i,v in pairs( lemmas ) do		if i >= ( tonumber( frame.args[1] ) or lb( #lemmas ) ) and i <= ( tonumber( frame.args[2] ) or ub( #lemmas ) ) then if v.bor then if ( export.loanworddiagnostic( v.lemma ) == true ) then correct = correct + 1 colour = "#BBFFBB" else wrong = wrong + 1 colour = "#FFBBBB" end else if ( export.loanworddiagnostic( v.lemma ) == false ) then correct = correct + 1 colour = "#BBFFBB" else wrong = wrong + 1 colour = "#FFBBBB" end end local term = " " .. v.class .. " " .. v.lemma .. " "			if v.bor then if colour == "#BBFFBB" then term = term .. "Loanword Loanword  Correct  " else term = term .. "Loanword Native word  Incorrect  " end else if colour == "#BBFFBB" then term = term .. "Native word Native word  Correct  " else term = term .. "Native word Loanword  Incorrect  " end end table.insert( terms, term ) end end return testheader( 1 ) .. " " .. testheader( 2 ) .. " " end

function export.genitivetest( frame ) local lemmas = require( "Module:User:Theknightwho/mn-lemmas" ).group1 local terms = {} local correct = 0 local wrong = 0 local data = {} local gen local stem local known local iin = { 1, 3, 5, 7, 14, 17, 18, 19, 21 } local iiin = { 4, 6, 8, 22, 23, 24, 31, 32 } local ii = { 2, 20 } local n = { 15 } local giiin = { 16, 30 } local nii = { 9, 10, 11, 12, 12.1, 25, 26, 27 } local inii = { 13, 28, 29 } for i,v in pairs( lemmas ) do		if i >= ( tonumber( frame.args[1] ) or 0 ) and i <= ( tonumber( frame.args[2] ) or 15000 ) and ( v.class <= 8 or ( v.class >= 14 and v.class <= 24 ) or v.class >= 30 ) then data = export.testpreprocess( v.lemma ) gen = genitive( data ) stem = data.text if v.class == 17 or ( v.class >= 19 and v.class <= 22 ) or v.class == 26 or v.class == 27 or v.class == 31 then stem = sub( stem, 1, len( stem ) - 2 ) .. sub( stem, -1 ) elseif v.class == 8 or v.class == 18 or v.class == 23 or v.class == 24 or v.class == 28 or v.class == 29 then stem = sub( stem, 1, len( stem ) - 1 ) end for _,class in pairs( iin ) do				if v.class == class and v.vh <= 2 then known = stem .. "ын" elseif v.class == class and v.vh >= 3 then known = stem .. "ийн" end end for _,class in pairs( iiin ) do if v.class == class then known = stem .. "ийн" end end for _,class in pairs( ii ) do				if v.class == class and v.vh <= 2 then known = stem .. "ы" elseif v.class == class and v.vh >= 3 then known = stem .. "ий" end end for _,class in pairs( n ) do if v.class == class then known = stem .. "н" end end for _,class in pairs( giiin ) do if v.class == class then known = stem .. "гийн" end end for _,class in pairs( nii ) do				if v.class == class and v.vh <= 2 then known = stem .. "ны" elseif v.class == class and v.vh >= 3 then known = stem .. "ний" end end for _,class in pairs( inii ) do				if v.class == class and v.vh <= 2 then known = stem .. "ины" elseif v.class == class and v.vh >= 3 then known = stem .. "иний" end end if gen == known then correct = correct + 1 colour = "#BBFFBB" else wrong = wrong + 1 colour = "#FFBBBB" end local term = " " .. v.class .. " " .. data.text .. " " .. known .. " " .. gen .. " "			if colour == "#BBFFBB" then term = term .. "Correct " else term = term .. "Incorrect " end table.insert( terms, term ) end end return testheader( 1 ) .. " " .. testheader( 2 ) .." " end

function export.dativelocativetest( frame ) local lemmas = require( "Module:User:Theknightwho/mn-lemmas" ).group1 local terms = {} local correct = 0 local wrong = 0 local data = {} local datloc local stem local d = { 1, 2, 7, 8, 15, 16, 17, 18, 20, 23, 30 } local ad = { 3, 19 } local id = { 4, 24, 31, 32 } local t = { 5, 6, 21, 22 } local nd = { 12, 12.1, 13, 25 } local _and = { 9, 10, 14, 26 } local ind = { 11, 27, 28, 29 } for i,v in pairs( lemmas ) do		if i >= ( tonumber( frame.args[1] ) or 0 ) and i <= ( tonumber( frame.args[2] ) or 15000 ) and ( v.class <= 8 or ( v.class >= 14 and v.class <= 24 ) or v.class >= 30 ) then data = export.testpreprocess( v.lemma ) datloc = dativelocative( data ) stem = data.text for j,vh in pairs( { "а", "о", "ө", "э" } ) do				if j == v.vh then vowel = vh end end if v.class == 19 or v.class == 26 or v.class == 27 or v.class == 31 then stem = sub( stem, 1, len( stem ) - 2 ) .. sub( stem, -1 ) elseif v.class == 24 or v.class == 28 or v.class == 29 then stem = sub( stem, 1, len( stem ) - 1 ) end for _,class in pairs( d ) do if v.class == class then known = stem .. "д" end end for _,class in pairs( ad ) do if v.class == class then known = stem .. vowel .. "д" end end for _,class in pairs( id ) do if v.class == class then known = stem .. "ид" end end for _,class in pairs( t ) do if v.class == class then known = stem .. "т" end end for _,class in pairs( nd ) do if v.class == class then known = stem .. "нд" end end for _,class in pairs( _and ) do if v.class == class then known = stem .. vowel .. "нд" end end for _,class in pairs( ind ) do if v.class == class then known = stem .. "инд" end end if datloc == known then correct = correct + 1 colour = "#BBFFBB" else wrong = wrong + 1 colour = "#FFBBBB" end local term = " " .. v.class .. " " .. data.text .. " " .. known .. " " .. datloc .. " "			if colour == "#BBFFBB" then term = term .. "Correct " else term = term .. "Incorrect " end table.insert( terms, term ) end end return testheader( 1 ) .. " " .. testheader( 2 ) .." " end

function export.accusativetest( frame ) local lemmas = require( "Module:User:Theknightwho/mn-lemmas" ).group1 local terms = {} local correct = 0 local wrong = 0 local data = {} local acc local stem local known local iig = { 1, 2, 3, 5, 7, 9, 12.1, 14, 17, 18, 19, 20, 21, 25, 26 } local iiig = { 4, 6, 8, 10, 11, 13, 22, 23, 24, 27, 28, 29, 31, 32 } local g = { 12, 15, 16, 30 } for i,v in pairs( lemmas ) do		if i >= ( tonumber( frame.args[1] ) or 0 ) and i <= ( tonumber( frame.args[2] ) or 15000 ) and ( v.class <= 8 or ( v.class >= 14 and v.class <= 24 ) or v.class >= 30 ) then data = export.testpreprocess( v.lemma ) acc = accusative( data ) stem = data.text if v.class == 17 or ( v.class >= 19 and v.class <= 22 ) or v.class == 26 or v.class == 27 or v.class == 31 then stem = sub( stem, 1, len( stem ) - 2 ) .. sub( stem, -1 ) elseif v.class == 8 or v.class == 18 or v.class == 23 or v.class == 24 or v.class == 28 or v.class == 29 then stem = sub( stem, 1, len( stem ) - 1 ) end for _,class in pairs( iig ) do				if v.class == class and v.vh <= 2 then known = stem .. "ыг" elseif v.class == class and v.vh >= 3 then known = stem .. "ийг" end end for _,class in pairs( iiig ) do if v.class == class then known = stem .. "ийг" end end for _,class in pairs( g ) do if v.class == class then known = stem .. "г" end end if acc == known then correct = correct + 1 colour = "#BBFFBB" else wrong = wrong + 1 colour = "#FFBBBB" end local term = " " .. v.class .. " " .. data.text .. " " .. known .. " " .. acc .. " "			if colour == "#BBFFBB" then term = term .. "Correct " else term = term .. "Incorrect " end table.insert( terms, term ) end end return testheader( 1 ) .. " Correct:  " .. correct .. "   Incorrect:  " .. wrong .. "   Accuracy:  " .. ( correct / ( correct + wrong ) ) * 100 .. "%  " .. testheader( 2 ) .." " end

function export.ablativetest( frame ) local lemmas = require( "Module:User:Theknightwho/mn-lemmas" ).group1 local terms = {} local correct = 0 local wrong = 0 local data = {} local abl local stem local vowel local known local aas = { 1, 2, 3, 4, 5, 6, 14, 17, 18, 19, 20, 21, 22, 31, 32 } local as = { 7 } local ias = { 8, 23, 24 } local gaas = { 15, 16, 30 } local naas = { 9, 10, 11, 12, 12.1, 13, 25, 26, 27 } local inaas = { 28, 29 } for i,v in pairs( lemmas ) do		if i >= ( tonumber( frame.args[1] ) or 0 ) and i <= ( tonumber( frame.args[2] ) or 15000 ) and ( v.class <= 8 or ( v.class >= 14 and v.class <= 24 ) or v.class >= 30 ) then data = export.testpreprocess( v.lemma ) abl = ablative( data ) stem = data.text for j,vh in pairs( { "а", "о", "ө", "э" } ) do				if j == v.vh then vowel = vh end end if v.class == 17 or ( v.class >= 19 and v.class <= 22 ) or v.class == 26 or v.class == 27 or v.class == 31 then stem = sub( stem, 1, len( stem ) - 2 ) .. sub( stem, -1 ) elseif v.class == 8 or v.class == 18 or v.class == 23 or v.class == 24 then stem = sub( stem, 1, len( stem ) - 1 ) end for _,class in pairs( aas ) do				if v.class == class then known = stem .. vowel .. vowel .. "с" end end for _,class in pairs( as ) do				if v.class == class then known = stem .. vowel .. "с" end end for _,class in pairs( ias ) do				if v.class == class then known = stem .. "и" .. vowel .. "с" end end for _,class in pairs( gaas ) do				if v.class == class then known = stem .. "г" .. vowel .. vowel .. "с" end end for _,class in pairs( naas ) do				if v.class == class then known = stem .. "н" .. vowel .. vowel .. "с" end end for _,class in pairs( inaas ) do				if v.class == class then known = stem .. "ин" .. vowel .. vowel .. "с" end end if abl == known then correct = correct + 1 colour = "#BBFFBB" else wrong = wrong + 1 colour = "#FFBBBB" end local term = " " .. v.class .. " " .. data.text .. " " .. known .. " " .. abl .. " "			if colour == "#BBFFBB" then term = term .. "Correct " else term = term .. "Incorrect " end table.insert( terms, term ) end end return testheader( 1 ) .. " Correct:  " .. correct .. "   Incorrect:  " .. wrong .. "   Accuracy:  " .. ( correct / ( correct + wrong ) ) * 100 .. "%  " .. testheader( 2 ) .." " end

function export.instrumentaltest( frame ) local lemmas = require( "Module:User:Theknightwho/mn-lemmas" ).group1 local terms = {} local correct = 0 local wrong = 0 local data = {} local ins local stem local vowel local known local aar = { 1, 2, 3, 4, 5, 6, 9, 10, 11, 14, 17, 18, 19, 20, 21, 22, 25, 26, 27, 31, 32 } local ar = { 7, 12.1 } local iar = { 8, 13, 23, 24, 28, 29 } local gaar = { 12, 15, 16, 30 } for i,v in pairs( lemmas ) do		if i >= ( tonumber( frame.args[1] ) or 0 ) and i <= ( tonumber( frame.args[2] ) or 15000 ) then data = export.testpreprocess( v.lemma ) ins = instrumental( data ) stem = data.text for j,vh in pairs( { "а", "о", "ө", "э" } ) do				if j == v.vh then vowel = vh end end if v.class == 17 or ( v.class >= 19 and v.class <= 22 ) or v.class == 26 or v.class == 27 or v.class == 31 then stem = sub( stem, 1, len( stem ) - 2 ) .. sub( stem, -1 ) elseif v.class == 8 or v.class == 13 or v.class == 18 or ( v.class >= 23 and v.class <= 25 ) or v.class == 28 or v.class == 29 then stem = sub( stem, 1, len( stem ) - 1 ) end for _,class in pairs( aar ) do				if v.class == class then known = stem .. vowel .. vowel .. "р" end end for _,class in pairs( ar ) do				if v.class == class then known = stem .. vowel .. "р" end end for _,class in pairs( iar ) do				if v.class == class then known = stem .. "и" .. vowel .. "р" end end for _,class in pairs( gaar ) do				if v.class == class then known = stem .. "г" .. vowel .. vowel .. "р" end end if ins == known then correct = correct + 1 colour = "#BBFFBB" else wrong = wrong + 1 colour = "#FFBBBB" end local term = " " .. v.class .. " " .. data.text .. " " .. known .. " " .. ins .. " "			if colour == "#BBFFBB" then term = term .. "Correct " else term = term .. "Incorrect " end table.insert( terms, term ) end end return testheader( 1 ) .. " Correct:  " .. correct .. "   Incorrect:  " .. wrong .. "   Accuracy:  " .. ( correct / ( correct + wrong ) ) * 100 .. "%  " .. testheader( 2 ) .." " end

return export

title: Module:User:Theknightwho/mn-decl


text:
Bagguley

Etymology
Variant of.

Statistics

 * According to data collected by Forebears in 2014, Bagguley is the 8734th most common surname in England, belonging to 717 individuals.

title: Bagguley


text: McGrouthers

title: McGrouthers


text: Umfrevilles

title: Umfrevilles


text:
пширу

Etymology
From. Cognate with 🇨🇬.

Verb

 * 1)  to begin

title: пширу


text:
Template:qya-personal pronouns

Quenya personal pronouns (nominative/accusative case)

$1$ as object † archaic

title: Template:qya-personal pronouns


text:
keltajuova-aratti

Noun

 * 1) yellow-chevroned parakeet,

title: keltajuova-aratti


text: yilt

title: yilt


text: yilts

title: yilts


text:
keltahuppuaratti

Noun

 * 1) saffron-headed parrot, Pionopsitta pyrilia

title: keltahuppuaratti


text:
keltapääamatsoni

Noun

 * 1) yellow-headed parrot,

title: keltapääamatsoni


text:
Citations:train

 * 1) Sexual act.
 * 2) * 1988, X Motion Picture and Center for New Art Activities (New York, N.Y.), Bomb: Issues 26-29, link
 * Then Swooney agreed, "Yeah, let's run a train up the fat cunt."
 * 1) * 2005, Violet Blue, Best Women's Erotica 2006: Volume 2001, link
 * “You want us to run a train on you?”
 * 1) * 2010, Diesel King, A Good Time in the Hood, page 12
 * We eventually began to decide that with the endless supply of men we had there was no need to only run trains, or gangbang, the insatiables.

title: Citations:train


text:
Talk:yockel

Possible alt forms
Various dialect dictionaries have and  (the latter is currently being RFVed). Hard to find outside of dictionaries. Equinox ◑ 14:46, 11 August 2022 (UTC)

title: Talk:yockel


text:
Lelean

Statistics

 * According to data collected by Forebears in 2014, Lelean is the 32731st most common surname in England, belonging to 107 individuals.

title: Lelean


text:
keltaniska-amatsoni

Noun

 * 1) yellow-naped parrot,

title: keltaniska-amatsoni


text:
yabbi

Noun

 * 1)  Satirical verbal abuse; a roasting.

title: yabbi


text: yabbis

title: yabbis


text:
keltahelmipöllö

Noun

 * 1) buff-fronted owl, Aegolius harrisii

title: keltahelmipöllö


text:
uciąg

Etymology
.

Noun

 * 1) the ability to pull
 * 2)  pull

title: uciąg