text: Category:Indonesian semantic loans from Arabic


text: Category:Indonesian surnames from Austronesian languages

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


text: Category:Indonesian surnames from Sino-Tibetan languages


text: Category:Indonesian terms derived from Northwest Sumatran languages


text: Category:Indonesian terms infixed with -in-


text: Category:Indonesian terms prefixed with pasca-


text: Category:Indonesian terms prefixed with purwa-


text: Category:Italian semi-learned borrowings from Persian


text: Category:Italian terms derived from Old Median


text: Category:Italian unadapted borrowings from Arabic


text: Category:Japanese kanji read as はなづまり

title: Category:Japanese kanji read as はなづまり


text: Category:Japanese kanji with historical goon reading おむ


text: Category:Japanese kanji with historical kan'on reading あむ


text: Category:Japanese kanji with kun reading うわめずかい


text: Category:Japanese kanji with kun reading しとみ


text: Category:Japanese kanji with kun reading まう


text: Category:Japanese kanji with kun reading まわす


text: Category:Japanese kanji with kun reading ゆれる


text: Category:Japanese learned borrowings from English


text: Category:Japanese terms spelled with 柃

title: Category:Japanese terms spelled with 柃


text: Category:Japanese terms spelled with 楸

title: Category:Japanese terms spelled with 楸


text: Category:Kasem terms borrowed from Akan

title: Category:Kasem terms borrowed from Akan


text: Category:Kasem terms derived from Akan

title: Category:Kasem terms derived from Akan


text: Category:Kasem terms with IPA pronunciation


text: Category:Kashubian terms derived from South Slavic languages


text: Category:Latin terms derived from Ionic Greek


text: Category:Learned borrowings from Arabic by language


text: Category:Learned borrowings from Ardhamagadhi Prakrit by language


text: Category:Learned borrowings from Byzantine Greek by language


text: Category:Learned borrowings from Classical Nahuatl by language


text: Category:Learned borrowings from Czech by language


text: Category:Learned borrowings from English by language


text: Category:Learned borrowings from Karakhanid by language


text: Category:Learned borrowings from Medieval Latin by language


text: Category:Learned borrowings from Middle Chinese by language


text: Category:Learned borrowings from Middle English by language


text: Category:Learned borrowings from Middle Korean by language


text: Category:Learned borrowings from Middle Low German by language


text: Category:Learned borrowings from Middle Mongol by language


text: Category:Learned borrowings from Old Irish by language


text: Category:Learned borrowings from Old Javanese by language


text: Category:Learned borrowings from Old Norse by language


text: Category:Learned borrowings from Ottoman Turkish by language


text: Category:Learned borrowings from Persian by language


text: Category:Middle French learned borrowings from Latin


text: Category:Mogholi terms by orthographic property


text: Category:Mogholi terms derived from Western Iranian languages


text: Category:Mon terms with rare senses

title: Category:Mon terms with rare senses


text: Category:Moore adjectives

title: Category:Moore adjectives


text: Category:Moore terms borrowed from Arabic


text: Category:Moore terms borrowed from Hausa


text: Category:Moore terms derived from Arabic


text: Category:Moore terms derived from Hausa

title: Category:Moore terms derived from Hausa


text: Category:Moore verbal nouns

title: Category:Moore verbal nouns


text: Category:Nepali terms with audio links

title: Category:Nepali terms with audio links


text: Category:Norman semi-learned borrowings from Latin


text: Category:Northern Kurdish auto-table templates


text: Category:Northern Kurdish circumpositions


text: Category:Northern Kurdish dialectal terms


text: Category:Northern Kurdish diminutive nouns


text: Category:Northern Kurdish male given names from Persian


text: Category:Northern Kurdish misspellings

title: Category:Northern Kurdish misspellings


text: Category:Northern Kurdish noun-forming suffixes


text: Category:Northern Kurdish personal pronouns


text: Category:Northern Kurdish proverbs

title: Category:Northern Kurdish proverbs


text: Category:Northern Kurdish terms borrowed from Azerbaijani


text: Category:Northern Kurdish terms borrowed from Central Kurdish


text: Category:Northern Kurdish terms borrowed from Latin


text: Category:Northern Kurdish terms borrowed from Old Anatolian Turkish


text: Category:Northern Kurdish terms calqued from Persian


text: Category:Northern Kurdish terms derived from Akkadian


text: Category:Northern Kurdish terms derived from Azerbaijani


text: Category:Northern Kurdish terms derived from Central Kurdish


text: Category:Northern Kurdish terms derived from Gaulish


text: Category:Northern Kurdish terms derived from German


text: Category:Northern Kurdish terms derived from Hittite


text: Category:Northern Kurdish terms derived from Late Latin


text: Category:Northern Kurdish terms derived from Old Anatolian Turkish


text: Category:Northern Kurdish terms derived from Old Norse


text: Category:Northern Kurdish terms derived from Proto-Celtic


text: Category:Northern Kurdish terms derived from Proto-Turkic


text: Category:Northern Kurdish terms derived from Sumerian


text: Category:Northern Kurdish terms derived from Venetian


text: Category:Northern Kurdish terms derived from the Proto-Indo-European root *h₂ep-


text: Category:Northern Kurdish terms derived from the Proto-Indo-European root *ped-


text: Category:Northern Kurdish terms derived from the Proto-Indo-European root *ǵneh₃-


text: Category:Northern Kurdish terms derived from the Proto-Indo-European root *ǵʰes-


text: Category:Northern Kurdish terms with rare senses


text: Category:Northern Kurdish terms prefixed with ana-


text: Category:Northern Kurdish terms prefixed with andro-


text: Category:Northern Kurdish terms prefixed with dendro-


text: Category:Northern Kurdish terms prefixed with etno-


text: Category:Northern Kurdish terms prefixed with hîper-


text: Category:Northern Kurdish terms prefixed with kardiyo-


text: Category:Northern Kurdish terms prefixed with mezo-


text: Category:Northern Kurdish terms prefixed with ne-


text: Category:Northern Kurdish terms prefixed with nefro-


text: Category:Northern Kurdish terms prefixed with nîv-


text: Category:Northern Kurdish terms prefixed with odonto-


text: Category:Northern Kurdish terms prefixed with paş-


text: Category:Northern Kurdish terms prefixed with ra-


text: Category:Northern Kurdish terms prefixed with ser-


text: Category:Northern Kurdish terms suffixed with -bar


text: Category:Northern Kurdish terms suffixed with -dîn


text: Category:Northern Kurdish terms suffixed with -e


text: Category:Northern Kurdish terms suffixed with -ek


text: Category:Northern Kurdish terms suffixed with -gram


text: Category:Northern Kurdish terms suffixed with -kar


text: Category:Northern Kurdish terms suffixed with -kuj


text: Category:Northern Kurdish terms suffixed with -mend


text: Category:Northern Kurdish terms suffixed with -o


text: Category:Northern Kurdish terms suffixed with -parêz


text: Category:Northern Kurdish terms suffixed with -patî


text: Category:Northern Kurdish terms suffixed with -xwaz


text: Category:Old Frisian personal pronouns

title: Category:Old Frisian personal pronouns


text: Category:Old Frisian terms derived from Proto-Italic


text: Category:Old Galician-Portuguese learned borrowings from Late Latin


text: Category:Old Galician-Portuguese semi-learned borrowings from Ecclesiastical Latin


text: Category:Old Galician-Portuguese semi-learned borrowings from Late Latin


text: Category:Old Galician-Portuguese semi-learned borrowings from Latin


text: Category:Old Spanish learned borrowings from Late Latin


text: Category:Orthographic borrowings from Mandarin by language


text: Category:Orthographic borrowings from Russian by language


text: Category:Ottoman Turkish terms derived from Proto-Oghuz


text: Category:Ottoman Turkish terms inherited from Proto-Oghuz


text: Category:Persian learned borrowings from Middle Persian


text: Category:Persian learned borrowings from Old Persian


text: Category:Persian semi-learned borrowings from Middle Persian


text: Category:Portuguese semi-learned borrowings from Late Latin


text: Category:Proto-Hellenic terms derived from the Proto-Indo-European root *tpelH-


text: Category:Rabha terms by etymology

title: Category:Rabha terms by etymology


text: Category:Rabha terms derived from Sal languages


text: Category:Requests for Kannada script by language


text: Category:Requests for clarification of definitions in Northern Kurdish entries


text: Category:Requests for definitions in Central Kurdish entries


text: Category:Requests for inflections in Northern Kurdish entries


text: Category:Requests for native script for Old Burmese terms


text: Category:Requests for quotations in Northern Kurdish


text: Category:Requests for translations of Northern Kurdish usage examples


text: Category:Romanian semi-learned borrowings from Latin


text: Category:Russian learned borrowings from Latin


text: Category:Russian learned borrowings from Old Norse


text: Category:Russian male given names from Byzantine Greek


text: Category:Russian orthographic borrowings from German


text: Category:Sanskrit terms borrowed from Indo-Iranian languages


text: Category:Sanskrit terms derived from French


text: Category:Sanskrit terms derived from the Proto-Indo-European root *peyt-


text:
Citations:delphine

 * 1998, Phyllis Gotlieb, Flesh And Gold, Farrar, Straus, and Giroux (ISBN 9780312871109), page 75:
 * “Is the delphine woman a professional?” “You will teach her whatever she needs to know.” That was it, then. They were not seriously hiring her on for her experience. She had been ticked, and they knew her.

title: Citations:delphine


text: Category:Semi-learned borrowings from French by language


text: Category:Semi-learned borrowings from Medieval Latin by language


text: Category:Semi-learned borrowings from Sanskrit by language


text: Category:Serbo-Croatian terms suffixed with -nje


text: Category:Slovak terms suffixed with -y

title: Category:Slovak terms suffixed with -y


text: Category:Spanish male given names from Biblical Hebrew


text: Category:Tamil terms suffixed with -க்கை


text: Category:Tamil terms suffixed with -த்தி


text: Category:Tapayuna terms by etymology

title: Category:Tapayuna terms by etymology


text: Category:Tapayuna terms derived from Macro-Jê languages


text: Category:Terms borrowed from Chong

title: Category:Terms borrowed from Chong


text: Category:Terms borrowed from Gutnish

title: Category:Terms borrowed from Gutnish


text: Category:Terms borrowed from Pama-Nyungan languages


text: Category:Terms derived from Batak languages


text: Category:Terms derived from Chong

title: Category:Terms derived from Chong


text: Category:Terms derived from Northern Jê languages


text: Category:Terms derived from the Proto-Indo-European root *steyp-


text: Category:Thai terms derived from Pearic languages


text: Category:Vietnamese orthographic borrowings from Japanese


text: Category:Welsh terms derived from Slavic languages


text: Category:Welsh terms derived from the Proto-Indo-European root *med-


text: Category:Yogad terms by usage

title: Category:Yogad terms by usage


text: Category:Yogad terms derived from Min languages


text: Category:Yogad terms derived from Semitic languages


text: Category:aa:Rosales order plants

title: Category:aa:Rosales order plants


text: Category:ar:Travel

title: Category:ar:Travel


text: Category:bg:Piciforms

title: Category:bg:Piciforms


text: Category:bg:Pipits and wagtails

title: Category:bg:Pipits and wagtails


text: Category:en:Neighbourhoods in Cumbria, England


text: Category:en:Rivers in North Lanarkshire, Scotland


text: Category:en:Rivers in South Lanarkshire, Scotland


text: Category:en:Rivers in West Dunbartonshire, Scotland


text: Category:en:Suburbs in Oxfordshire, England


text: Category:es:Quintana Roo

title: Category:es:Quintana Roo


text: Category:fr:Cities in Burkina Faso

title: Category:fr:Cities in Burkina Faso


text: Category:fr:Ranunculales order plants

title: Category:fr:Ranunculales order plants


text: Category:fy:Moons

title: Category:fy:Moons


text: Category:gmq-osw:Columbids

title: Category:gmq-osw:Columbids


text: Category:gur:Capital cities

title: Category:gur:Capital cities


text: Category:gur:Cities

title: Category:gur:Cities


text: Category:gur:Cities in Burkina Faso

title: Category:gur:Cities in Burkina Faso


text: Category:gur:Places

title: Category:gur:Places


text: Category:gur:Places in Burkina Faso

title: Category:gur:Places in Burkina Faso


text: Category:hy:Swimming

title: Category:hy:Swimming


text: Category:id:Minerals

title: Category:id:Minerals


text: Category:id:Systems theory

title: Category:id:Systems theory


text: Category:inc-ogu:Biology

title: Category:inc-ogu:Biology


text: Category:inc-ogu:Medicine

title: Category:inc-ogu:Medicine


text: Category:jam:Art

title: Category:jam:Art


text: Category:jam:Tools

title: Category:jam:Tools


text: Category:kmr:Astronomy

title: Category:kmr:Astronomy


text: Category:kmr:Buildings

title: Category:kmr:Buildings


text: Category:kmr:Calendar

title: Category:kmr:Calendar


text: Category:kmr:Cities in Albania

title: Category:kmr:Cities in Albania


text: Category:kmr:Cities in Belgium

title: Category:kmr:Cities in Belgium


text: Category:kmr:Cities in Egypt

title: Category:kmr:Cities in Egypt


text: Category:kmr:Cities in Germany

title: Category:kmr:Cities in Germany


text: Category:kmr:Cities in Iran

title: Category:kmr:Cities in Iran


text: Category:kmr:Cities in Latvia

title: Category:kmr:Cities in Latvia


text: Category:kmr:Cities in Lebanon

title: Category:kmr:Cities in Lebanon


text: Category:kmr:Cities in Pakistan

title: Category:kmr:Cities in Pakistan


text: Category:kmr:Cities in Russia

title: Category:kmr:Cities in Russia


text: Category:kmr:Cities in Syria

title: Category:kmr:Cities in Syria


text: Category:kmr:Compass points

title: Category:kmr:Compass points


text: Category:kmr:Continents

title: Category:kmr:Continents


text: Category:kmr:Diseases

title: Category:kmr:Diseases


text: Category:kmr:Facial expressions

title: Category:kmr:Facial expressions


text: Category:kmr:Federal cities of Russia

title: Category:kmr:Federal cities of Russia


text: Category:kmr:Fish

title: Category:kmr:Fish


text: Category:kmr:Hair

title: Category:kmr:Hair


text: Category:kmr:Internet

title: Category:kmr:Internet


text: Category:kmr:Islam

title: Category:kmr:Islam


text: Category:kmr:Judaism

title: Category:kmr:Judaism


text: Category:kmr:Lexicography

title: Category:kmr:Lexicography


text: Category:kmr:Mathematics

title: Category:kmr:Mathematics


text: Category:kmr:Neurotransmitters

title: Category:kmr:Neurotransmitters


text: Category:kmr:Oblasts of Russia

title: Category:kmr:Oblasts of Russia


text: Category:kmr:Organic compounds

title: Category:kmr:Organic compounds


text: Category:kmr:Parts of speech

title: Category:kmr:Parts of speech


text: Category:kmr:Pigs

title: Category:kmr:Pigs


text: Category:kmr:Places in Albania

title: Category:kmr:Places in Albania


text: Category:kmr:Places in Belgium

title: Category:kmr:Places in Belgium


text: Category:kmr:Places in Egypt

title: Category:kmr:Places in Egypt


text: Category:kmr:Places in Germany

title: Category:kmr:Places in Germany


text: Category:kmr:Places in Iran

title: Category:kmr:Places in Iran


text: Category:kmr:Places in Latvia

title: Category:kmr:Places in Latvia


text: Category:kmr:Places in Lebanon

title: Category:kmr:Places in Lebanon


text: Category:kmr:Places in Pakistan

title: Category:kmr:Places in Pakistan


text: Category:kmr:Places in Russia

title: Category:kmr:Places in Russia


text: Category:kmr:Places in Syria

title: Category:kmr:Places in Syria


text: Category:kmr:Politics

title: Category:kmr:Politics


text: Category:kmr:Psychology

title: Category:kmr:Psychology


text: Category:kmr:Rail transportation

title: Category:kmr:Rail transportation


text: Category:kmr:Rhetoric

title: Category:kmr:Rhetoric


text: Category:kmr:Rivers

title: Category:kmr:Rivers


text: Category:kmr:Rodents

title: Category:kmr:Rodents


text: Category:kmr:Seasons

title: Category:kmr:Seasons


text: Category:kmr:Shapes

title: Category:kmr:Shapes


text: Category:kmr:States of Germany

title: Category:kmr:States of Germany


text: Category:kmr:Time

title: Category:kmr:Time


text: Category:kmr:Vessels

title: Category:kmr:Vessels


text: Category:kmr:War

title: Category:kmr:War


text: Category:mg:Amaranths and goosefoots

title: Category:mg:Amaranths and goosefoots


text: Category:mg:Plantain family plants

title: Category:mg:Plantain family plants


text: Category:mg:Storks

title: Category:mg:Storks


text: Category:mg:Telecommunications

title: Category:mg:Telecommunications


text: Category:mg:Zingiberales order plants

title: Category:mg:Zingiberales order plants


text: Category:mhj:All topics

title: Category:mhj:All topics


text: Category:mhj:List of related-to categories


text: Category:mk:Cartography

title: Category:mk:Cartography


text: Category:mnw:Botany

title: Category:mnw:Botany


text: Category:mnw:Buddhism

title: Category:mnw:Buddhism


text: Category:mnw:Family members

title: Category:mnw:Family members


text: Category:mnw:Matter

title: Category:mnw:Matter


text: Category:mnw:Nautical

title: Category:mnw:Nautical


text: Category:mnw:Polities

title: Category:mnw:Polities


text: Category:mnw:Vehicles

title: Category:mnw:Vehicles


text: Category:my:Bivalves

title: Category:my:Bivalves


text: Category:nn:Ideologies

title: Category:nn:Ideologies


text: Category:nn:Socialism

title: Category:nn:Socialism


text: Category:odt:Columbids

title: Category:odt:Columbids


text: Category:ofs:Anatids

title: Category:ofs:Anatids


text: Category:ofs:Anatomy

title: Category:ofs:Anatomy


text: Category:ota:Arachnids

title: Category:ota:Arachnids


text: Category:sh:Cartography

title: Category:sh:Cartography


text: Category:ta:Theater

title: Category:ta:Theater


text: Category:ta:Weapons

title: Category:ta:Weapons


text: Category:tr:Proteins

title: Category:tr:Proteins


text:
தளை

Etymology 1
From.

Verb

 * 1)  to fasten, bind, chain

Verb

 * 1) to tie, bind, fasten, entangle

Etymology 2
From.

Noun

 * 1) tie, fastening, bandage
 * 2) cord, rope
 * 3) fetters,shelters
 * 4) soul-bonding
 * 5) closed condition, as of an unblown flower
 * 6) imprisonment
 * 7) relationship, friendship, bond of union
 * 8) paddy field, as divided into plots

title: தளை


text:
Module:User:Benwing2/headword/data

local headword_page_module = "Module:User:Benwing2/headword/page"

local concat = table.concat local get_etym_lang = require("Module:etymology languages").getByCanonicalName local gsub = mw.ustring.gsub local insert = table.insert local set = require("Module:utilities/set") local split = mw.text.split local trim = mw.text.trim local type_or_class = require("Module:parser").type_or_class local u = require("Module:string/char")

local frame = mw.getCurrentFrame local title = mw.title.getCurrentTitle local content = title:getContent local content_lang = mw.getContentLanguage

local data = {}

-- 1. Lists that will be converted into sets. --

data.invariable = set{ "cmavo", "cmene", "fu'ivla", "gismu", "Han tu", "hanja", "jyutping", "kanji", "lujvo", "phrasebook", "pinyin", "rafsi", "romaji", }

data.lemmas = set{ "abbreviations", "acronyms", "adjectives", "adnominals", "adpositions", "adverbs", "affixes", "ambipositions", "articles", "circumfixes", "circumpositions", "classifiers", "cmavo", "cmavo clusters", "cmene", "combining forms", "conjunctions", "counters", "determiners", "diacritical marks", "digraphs", "equative adjectives", "fu'ivla", "gismu", "Han characters", "Han tu", "hanja", "ideophones", "idioms", "infixes", "initialisms", "interfixes", "interjections", "kanji", "letters", "ligatures", "logograms", "lujvo", "morphemes", "non-constituents", "nouns", "numbers", "numeral symbols", "numerals", "particles", "phrases", "postpositions", "postpositional phrases", "predicatives", "prefixes", "prepositional phrases", "prepositions", "preverbs", "pronominal adverbs", "pronouns", "proper nouns", "proverbs", "punctuation marks", "relatives", "roots", "stems", "suffixes", "syllables", "symbols", "verbs", }

data.nonlemmas = set{ "active participle forms", "active participles", "adjectival participles", "adjective case forms", "adjective forms", "adjective feminine forms", "adjective plural forms", "adverb forms", "adverbial participles", "agent participles", "article forms", "circumfix forms", "combined forms", "comparative adjective forms", "comparative adjectives", "comparative adverb forms", "comparative adverbs", "conjunction forms", "contractions", "converbs", "determiner comparative forms", "determiner forms", "determiner superlative forms", "diminutive nouns", "elative adjectives", "equative adjective forms", "equative adjectives", "future participles", "gerunds", "infinitive forms", "infinitives", "interjection forms", "jyutping", "kanji readings", "misspellings", "negative participles", "nominal participles", "noun case forms", "noun dual forms", "noun forms", "noun paucal forms", "noun plural forms", "noun possessive forms", "noun singulative forms", "numeral forms", "participles", "participle forms", "particle forms", "passive participles", "past active participles", "past participles", "past participle forms", "past passive participles", "perfect active participles", "perfect participles", "perfect passive participles", "pinyin", "plurals", "postposition forms", "prefix forms", "preposition contractions", "preposition forms", "prepositional pronouns", "present active participles", "present participles", "present passive participles", "pronoun forms", "pronoun possessive forms", "proper noun forms", "proper noun plural forms", "rafsi", "romanizations", "root forms", "singulatives", "suffix forms", "superlative adjective forms", "superlative adjectives", "superlative adverb forms", "superlative adverbs", "verb forms", "verbal nouns", }

-- These langauges will not have links to separate parts of the headword. data.no_multiword_links = set{ "zh", }

-- These languages will not have "LANG multiword terms" categories added. data.no_multiword_cat = set{ Languages without spaces between words (sometimes spaces between phrases) "blt", -- Tai Dam "ja", -- Japanese "khb", -- Lü	"km", -- Khmer "lo", -- Lao "mnw", -- Mon "my", -- Burmese "nan", -- Min Nan (some words in Latin script; hyphens between syllables) "nan-hbl", -- Hokkien (some words in Latin script; hyphens between syllables) "nod", -- Northern Thai "ojp", -- Old Japanese "shn", -- Shan "sou", -- Southern Thai "tdd", -- Tai Nüa "th", -- Thai "tts", -- Isan "twh", -- Tai Dón "txg", -- Tangut "zh", -- Chinese (all varieties with Chinese characters) "zkt", -- Khitan

Languages with spaces between syllables "ahk", -- Akha "aou", -- A'ou	"atb", -- Zaiwa "byk", -- Biao "cdy", -- Chadong --"duu", -- Drung; not sure --"hmx-pro", -- Proto-Hmong-Mien --"hnj", -- Green Hmong; not sure "huq", -- Tsat "ium", -- Iu Mien --"lis", -- Lisu; not sure "mtq", -- Muong --"mww", -- White Hmong; not sure "onb", -- Lingao --"sit-gkh", -- Gokhy; not sure --"swi", -- Sui; not sure "tbq-lol-pro", -- Proto-Loloish "tdh", -- Thulung "ukk", -- Muak Sa-aak "vi", -- Vietnamese "yig", -- Wusa Nasu "zng", -- Mang

Languages with ~ with surrounding spaces used to separate variants "mkh-ban-pro", -- Proto-Bahnaric "sit-pro", -- Proto-Sino-Tibetan; listed above

Other weirdnesses "mul", -- Translingual; gestures, Morse code, etc.	"aot", -- Atong (India); bullet is a letter

All sign languages "ads", "aed", "aen", "afg", "ase", "asf", "asp", "asq", "asw", "bfi", "bfk", "bog", "bqn", "bqy", "bvl", "bzs", "cds", "csc", "csd", "cse", "csf", "csg", "csl", "csn", "csq", "csr", "doq", "dse", "dsl", "ecs", "esl", "esn", "eso", "eth", "fcs", "fse", "fsl", "fss", "gds", "gse", "gsg", "gsm", "gss", "gus", "hab", "haf", "hds", "hks", "hos", "hps", "hsh", "hsl", "icl", "iks", "ils", "inl", "ins", "ise", "isg", "isr", "jcs", "jhs", "jls", "jos", "jsl", "jus", "kgi", "kvk", "lbs", "lls", "lsl", "lso", "lsp", "lst", "lsy", "lws", "mdl", "mfs", "mre", "msd", "msr", "mzc", "mzg", "mzy", "nbs", "ncs", "nsi", "nsl", "nsp", "nsr", "nzs", "okl", "pgz", "pks", "prl", "prz", "psc", "psd", "psg", "psl", "pso", "psp", "psr", "pys", "rms", "rsl", "rsm", "sdl", "sfb", "sfs", "sgg", "sgx", "slf", "sls", "sqk", "sqs", "ssp", "ssr", "svk", "swl", "syy", "tse", "tsm", "tsq", "tss", "tsy", "tza", "ugn", "ugy", "ukl", "uks", "vgt", "vsi", "vsl", "vsv", "xki", "xml", "xms", "ygs", "ysl", "zib", "zsl", }

-- In these languages, the hyphen is not considered a word separator for the "multiword terms" category. data.hyphen_not_multiword_sep = set{ "akk", -- Akkadian; hyphens between syllables "akl", -- Aklanon; hyphens for mid-word glottal stops "ber-pro", -- Proto-Berber; morphemes separated by hyphens "ceb", -- Cebuano; hyphens for mid-word glottal stops "cnk", -- Khumi Chin; hyphens used in single words "cpi", -- Chinese Pidgin English; Chinese-derived words with hyphens between syllables "de", -- too many false positives "esx-esk-pro", -- hyphen used to separate morphemes "fi", -- Finnish; hyphen used to separate components in compound words if the final and initial vowels match, respectively "hil", -- Hiligaynon; hyphens for mid-word glottal stops "ilo", -- Ilocano; hyphens for mid-word glottal stops "lcp", -- Western Lawa; dash as syllable joiner "lwl", -- Eastern Lawa; dash as syllable joiner "mfa", -- Pattani Malay in Thai script; dash as syllable joiner "mkh-vie-pro", -- Proto-Vietic; morphemes separated by hyphens "msb", -- Masbatenyo; too many false positives "tl", -- Tagalog; too many false positives "war", -- Waray-Waray; too many false positives "yo", -- Yoruba; hyphens used to show lengthened nasal vowels }

-- These languages will not have "LANG masculine nouns" and similar categories added. data.no_gender_cat = set{ -- Languages without gender but which use the gender field for other purposes "ja", "th", }

data.notranslit = set{ "ams", "az", "bbc", "bug", "cia", "cjm", "cmn", "cpi", "hak", "ja", "kzg", "lad", "lzh", "ms", "mul", "mvi", "nan", "nan-hbl", "nan-hnm", "nan-luh", "nan-tws", "oj", "okn", "ryn", "rys", "ryu", "sh", "tgt", "th", "tkn", "tly", "txg", "und", "vi", "xug", "yoi", "yox", "yue", "za", "zh", }

-- Script codes for which a script-tagged display title will be added. data.toBeTagged = set{ "Ahom", "Arab", "fa-Arab", "glk-Arab", "kk-Arab", "ks-Arab", "ku-Arab", "mzn-Arab", "ms-Arab", "ota-Arab", "pa-Arab", "ps-Arab", "sd-Arab", "tt-Arab", "ug-Arab", "ur-Arab", "Armi", "Armn", "Avst", "Bali", "Bamu", "Batk", "Beng", "as-Beng", "Bopo", "Brah", "Brai", "Bugi", "Buhd", "Cakm", "Cans", "Cari", "Cham", "Cher", "Copt", "Cprt", "Cyrl", "Cyrs", "Deva", "Dsrt", "Egyd", "Egyp", "Ethi", "Geok", "Geor", "Glag", "Goth", "Grek", "Polyt", "polytonic", "Gujr", "Guru", "Hang", "Hani", "Hano", "Hebr", "Hira", "Hluw", "Ital", "Java", "Kali", "Kana", "Khar", "Khmr", "Knda", "Kthi", "Lana", "Laoo", "Latn", "Latf", "Latg", "Latnx", "Latinx", "pjt-Latn", "Lepc", "Limb", "Linb", "Lisu", "Lyci", "Lydi", "Mand", "Mani", "Marc", "Merc", "Mero", "Mlym", "Mong", "mnc-Mong", "sjo-Mong", "xwo-Mong", "Mtei", "Mymr", "Narb", "Nkoo", "Ogam", "Olck", "Orkh", "Orya", "Osma", "Ougr", "Palm", "Phag", "Phli", "Phlv", "Phnx", "Plrd", "Prti", "Rjng", "Runr", "Samr", "Sarb", "Saur", "Sgnw", "Shaw", "Shrd", "Sinh", "Sora", "Sund", "Sylo", "Syrc", "Tagb", "Tale", "Talu", "Taml", "Tang", "Tavt", "Telu", "Tfng", "Tglg", "Thaa", "Thai", "Tibt", "Ugar", "Vaii", "Xpeo", "Xsux", "Yiii", "Zmth", "Zsym",

"Ipach", "IPAchar", "Music", "musical", "Rumin", "Ruminumerals", }

-- Parts of speech which will not be categorised in categories like "English terms spelled with É" if -- the term is the character in question (e.g. the letter entry for English é). This contrasts with -- entries like the French adjective m̂, which is a one-letter word spelled with the letter. data.pos_not_spelled_with_self = set{ "diacritical marks", "Han characters", "Han tu", "hanja", "kanji", "letters", "ligatures", "logograms", "numeral symbols", "numerals", "symbols", }

-- 2. Lists that will not be converted into sets. --

-- Recognized aliases for parts of speech (param 2=). Key is the short form and value is the canonical singular (not -- pluralized) form. It is singular so that the same table can be used in Module:form of for the p=/POS= param -- and Module:links for the pos= param. data.pos_aliases = { a = "adjective", adj = "adjective", adv = "adverb", art = "article", det = "determiner", cnum = "cardinal number", conj = "conjunction", conv = "converb", hanzi = "Han character", int = "interjection", interj = "interjection", intj = "interjection", n = "noun", num = "numeral", part = "participle", pcl = "particle", phr = "phrase", pn = "proper noun", postp = "postposition", pre = "preposition", prep = "preposition", pro = "pronoun", pron = "pronoun", prop = "proper noun", proper = "proper noun", onum = "ordinal number", v = "verb", vb = "verb", vi = "intransitive verb", vt = "transitive verb", vti = "transitive and intransitive verb", }

-- Parts of speech for which categories like "German masculine nouns" or "Russian imperfective verbs" -- will be generated if the headword is of the appropriate gender/number. data.pos_for_gender_number_cat = { ["nouns"] = "nouns", ["proper nouns"] = "nouns", ["suffixes"] = "suffixes", -- We include verbs because impf and pf are valid "genders". ["verbs"] = "verbs", }

-- 3. Page-wide processing (so that it only needs to be done once per page). -- data.page = require(headword_page_module).process_page -- Fuckme, random references to data.pagename and data.encoded_pagename are scattered throughout the codebase. FIXME! data.pagename = data.page.pagename data.encoded_pagename = data.page.encoded_pagename

return data

title: Module:User:Benwing2/headword/data


text:
Module:User:Benwing2/gender and number/data

local data = {}

-- A list of all possible "parts" that a specification can be made out of. For each part, we list -- the class it's in (gender, animacy, etc.), the associated category (if any) and the display form. -- In a given gender/number spec, only one part of each class is allowed. data.codes = { ["?"] = {type = "other", display = '? '},

-- Genders ["m"] = {type = "gender", cat = "masculine POS", display = 'm '}, ["f"] = {type = "gender", cat = "feminine POS", display = 'f '}, ["n"] = {type = "gender", cat = "neuter POS", display = 'n '}, ["c"] = {type = "gender", cat = "common-gender POS", display = 'c '},

-- Animacy ["an"] = {type = "animacy", cat = "animate POS", display = ' anim '}, ["in"] = {type = "animacy", cat = "inanimate POS", display = ' inan '}, -- Animal (for Ukrainian, Belarusian, Polish) ["anml"] = {type = "animacy", cat = "animal POS", display = ' animal '}, -- Personal (for Ukrainian, Belarusian, Polish) ["pr"] = {type = "animacy", cat = "personal POS", display = ' pers '}, -- Nonpersonal not currently used ["np"] = {type = "animacy", cat = "nonpersonal POS", display = ' npers '},

-- Virility (for Polish) ["vr"] = {type = "virility", cat = "virile POS", display = ' vir '}, ["nv"] = {type = "virility", cat = "nonvirile POS", display = ' nvir '},

-- Numbers ["s"] = {type = "number", display = 'sg '}, ["d"] = {type = "number", cat = "dualia tantum", display = ' du '}, ["p"] = {type = "number", cat = "pluralia tantum", display = 'pl '},

-- Verb qualifiers ["impf"] = {type = "aspect", cat = "imperfective POS", display = 'impf '}, ["pf"] = {type = "aspect", cat = "perfective POS", display = 'pf '}, }

-- Combined codes that are equivalent to giving multiple specs. `mf` is the same as specifying two separate specs, -- one with `m` in it and the other with `f`. `mfbysense` is similar but is used for nouns that can be either masculine -- or feminine according as to whether they refer to masculine or feminine beings. data.combinations = { ["mf"] = {codes = {"m", "f"}}, ["mfbysense"] = {codes = {"m", "f"}, cat = "masculine and feminine POS by sense", display = 'by sense '} }

-- Categories when multiple gender/number specs of a given type occur in different data.codetype_cats = { ["gender"] = "POS with multiple genders", ["animacy"] = "POS with multiple animacies", ["aspect"] = "biaspectual POS" }

return data


text:
Module:User:Benwing2/headword

local export = {}

-- Named constants for all modules used, to make it easier to swap out sandbox versions. local debug_track_module = "Module:debug/track" local gender_and_number_module = "Module:gender and number" local headword_data_module = "Module:User:Benwing2/headword/data" local headword_page_module = "Module:User:Benwing2/headword/page" local links_module = "Module:links" local palindromes_module = "Module:palindromes" local qualifier_module = "Module:qualifier" local scripts_module = "Module:scripts" local scripts_data_module = "Module:scripts/data" local script_utilities_module = "Module:script utilities" local script_utilities_data_module = "Module:script utilities/data" local string_encode_entities_module = "Module:string/encode entities" local string_pattern_escape_module = "Module:string/pattern escape" local table_module = "Module:table" local utilities_module = "Module:utilities"

local concat = table.concat local insert = table.insert local rgmatch = mw.ustring.gmatch local rsubn = mw.ustring.gsub local rfind = mw.ustring.find local ulen = mw.ustring.len local rmatch = mw.ustring.match local toNFC = mw.ustring.toNFC local toNFD = mw.ustring.toNFD

local m_data = mw.loadData(headword_data_module)

local isLemma = m_data.lemmas local isNonLemma = m_data.nonlemmas local notranslit = m_data.notranslit local toBeTagged = m_data.toBeTagged

-- If set to true, categories always appear, even in non-mainspace pages local test_force_categories = false

-- Version of rsubn that discards all but the first return value. local function rsub(term, foo, bar) return (rsubn(term, foo, bar)) end

-- Add a tracking category to track entries with certain (unusually undesirable) properties. `track_id` is an identifier -- for the particular property being tracked and goes into the tracking page. Specifically, this adds a link in the -- page text to Tracking/headword/TRACK_ID, meaning you can find all entries with the `track_id` property -- by visiting Special:WhatLinksHere/Wiktionary:Tracking/headword/TRACK_ID. -- -- If `lang` (a language object) is given, an additional tracking page Tracking/headword/TRACK_ID/CODE is -- linked to where CODE is the language code of `lang`, and you can find all entries in the combination of `track_id` -- and `lang` by visiting Special:WhatLinksHere/Wiktionary:Tracking/headword/TRACK_ID/CODE. This makes it possible to -- isolate only the entries with a specific tracking property that are in a given language. Note that if `lang` -- references at etymology-only language, both that language's code and its full parent's code are tracked. local function track(track_id, lang) local tracking_page = "headword/" .. track_id local m_debug_track = require(debug_track_module) if lang and lang:hasType("etymology-only") then m_debug_track{tracking_page, tracking_page .. "/" .. lang:getCode, tracking_page .. "/" .. lang:getFullCode} elseif lang then m_debug_track{tracking_page, tracking_page .. "/" .. lang:getCode} else m_debug_track(tracking_page) end return true end

local function text_in_script(text, script_code) local sc = require(scripts_module).getByCode(script_code) if not sc then error("Internal error: Bad script code " .. script_code) end local characters = sc:getCharacters

local out if characters then text = rsub(text, "%W", "") out = rfind(text, "[" .. characters .. "]") end

if out then return true else return false end end

local spacingPunctuation = "[%s%p]+" -- List of punctuation or spacing characters that are found inside of words.	 Used to exclude characters from the regex above. local wordPunc = "-־׳״'.·*’་•:᠊" local notWordPunc = "[^" .. wordPunc .. "]+"

-- Format a term (either a head term or an inflection term) along with any left or right qualifiers, references or -- customized separator: `part` is the object specifying the term, which should optionally contain: -- * left qualifiers in `q`, an array of strings (or `qualifiers` for compatibility purposes); -- * right qualifiers in `qq`, an array of strings; -- * references in `refs`, an array either of strings (formatted reference text) or objects containing fields `text` --  (formatted reference text) and optionally `name` and/or `group`; -- * a separator in `separator`, defaulting to " or " if this is not the first term (j > 1), otherwise "". -- `formatted` is the formatted version of the term itself, and `j` is the index of the term. local function format_term_with_qualifiers_and_refs(part, formatted, j)	local left_qualifiers, right_qualifiers local reftext

left_qualifiers = part.q and #part.q > 0 and part.q	if left_qualifiers then left_qualifiers = require(qualifier_module).format_qualifier(left_qualifiers) .. " "	end

right_qualifiers = part.qq and #part.qq > 0 and part.qq	if right_qualifiers then right_qualifiers = " " .. require(qualifier_module).format_qualifier(right_qualifiers) end if part.refs and #part.refs > 0 then local refs = {} for _, ref in ipairs(part.refs) do			if type(ref) ~= "table" then ref = {text = ref} end local refargs if ref.name or ref.group then refargs = {name = ref.name, group = ref.group} end insert(refs, mw.getCurrentFrame:extensionTag("ref", ref.text, refargs)) end reftext = concat(refs) end

local separator = part.separator or j > 1 and " or " -- use "" to request no separator

if left_qualifiers then formatted = left_qualifiers .. formatted end if reftext then formatted = formatted .. reftext end if right_qualifiers then formatted = formatted .. right_qualifiers end if separator then formatted = separator .. formatted end

return formatted end

--[==[Return true if the given head is multiword according to the algorithm used in full_headword.]==] function export.head_is_multiword(head) for possibleWordBreak in rgmatch(head, spacingPunctuation) do		if rmatch(possibleWordBreak, notWordPunc) then return true end end

return false end

--[==[Add links to a multiword head.]==] function export.add_multiword_links(head, default) local function workaround_to_exclude_chars(s) return rsub(s, notWordPunc, "\2%1\1") end

head = "\1" .. rsub(head, spacingPunctuation, workaround_to_exclude_chars) .. "\2"	if default then head = head :gsub("(\1[^\2]*)\\([:#][^\2]*\2)", "%1\\\\%2") :gsub("(\1[^\2]*)([:#][^\2]*\2)", "%1\\%2") end

--Escape any remaining square brackets to stop them breaking links (e.g. "[citation needed]"). head = require(string_encode_entities_module)(head, "[]")

--[=[	use this when workaround is no longer needed:

head = "" .. rsub(head, WORDBREAKCHARS, "%1") .. ""

Remove any empty links, which could have been created above at the beginning or end of the string. ]=]	return (head		:gsub("\1\2", "")		:gsub("[\1\2]", {["\1"] = "", ["\2"] = ""})) end

local function non_categorizable(full_raw_pagename) return full_raw_pagename:find("^Appendix:Gestures/") end

-- Format a headword with transliterations. local function format_headword(data) local m_scriptutils = require(script_utilities_module)

-- Are there non-empty transliterations? local has_translits = false local has_manual_translits = false

-- Format the headwords. --

local head_parts = {} local unique_head_parts = {}

local has_multiple_heads = #data.heads > 1

for j, head in ipairs(data.heads) do		if head.tr or head.ts then has_translits = true end if head.tr and head.tr_manual or head.ts then has_manual_translits = true end

local formatted

-- Apply processing to the headword, for formatting links and such. if head.term:find("[[", nil, true) and head.sc:getCode ~= "Imag" then			formatted = require(links_module).language_link{term = head.term, lang = data.lang}		else			formatted = data.lang:makeDisplayText(head.term, head.sc, true)		end

local function tag_text_and_add_quals_and_refs(head, formatted, j) -- Add language and script wrapper. formatted = m_scriptutils.tag_text(formatted, data.lang, head.sc, "head", nil, j == 1 and data.id or nil)

-- Add qualifiers, references and separator. return format_term_with_qualifiers_and_refs(head, formatted, j)		end

local head_part = tag_text_and_add_quals_and_refs(head, formatted, j)		insert(head_parts, head_part)

-- If multiple heads, try to determine whether all heads display the same. To do this we need to effectively -- rerun the text tagging and addition of qualifiers and references, using 1 for all indices. if has_multiple_heads then local unique_head_part if j == 1 then unique_head_part = head_part else unique_head_part = tag_text_and_add_quals_and_refs(head, formatted, 1) end unique_head_parts[unique_head_part] = true end end

local set_size = 0 if has_multiple_heads then for k, _ in pairs(unique_head_parts) do			set_size = set_size + 1 end end if set_size == 1 then head_parts = head_parts[1] else head_parts = concat(head_parts) end

if has_manual_translits then -- Special:WhatLinksHere/Wiktionary:Tracking/headword/has-manual-translit -- Special:WhatLinksHere/Wiktionary:Tracking/headword/has-manual-translit/LANGCODE track("has-manual-translit", data.lang) end

-- Format the transliterations and transcriptions. --

local translits_formatted

if has_translits then local translit_parts = {} for i, head in ipairs(data.heads) do			if head.tr or head.ts then local this_parts = {} if head.tr then insert(this_parts, m_scriptutils.tag_translit(head.tr, data.lang:getCode, "head", nil, head.tr_manual)) if head.ts then insert(this_parts, " ") end end if head.ts then insert(this_parts, "/" .. m_scriptutils.tag_transcription(head.ts, data.lang:getCode, "head") .. "/") end insert(translit_parts, concat(this_parts)) end end

translits_formatted = " (" .. concat(translit_parts, " or ") .. ")"

local langname = data.lang:getCanonicalName local transliteration_page = mw.title.new(langname .. " transliteration", "Wiktionary") local saw_translit_page = false

if transliteration_page and transliteration_page.exists then translits_formatted = " •" .. translits_formatted saw_translit_page = true end -- If data.lang is an etymology-only language and we didn't find a translation page for it, fall back to the -- full parent. if not saw_translit_page and data.lang:hasType("etymology-only") then langname = data.lang:getFullName transliteration_page = mw.title.new(langname .. " transliteration", "Wiktionary") if transliteration_page and transliteration_page.exists then translits_formatted = " •" .. translits_formatted end end else translits_formatted = "" end

-- Paste heads and transliterations/transcriptions. --

local lemma_gloss if data.gloss then lemma_gloss = ' ' .. data.gloss .. ' '	else lemma_gloss = "" end

return head_parts .. translits_formatted .. lemma_gloss end

local function format_genders(data) local retval = "" if data.genders and #data.genders > 0 then if data.gloss then retval = "," end local pos_for_cat if not data.nogendercat and not m_data.no_gender_cat[data.lang:getCode] and not m_data.no_gender_cat[data.lang:getFullCode] then local pos_category = data.pos_category:gsub("^reconstructed ", "") pos_for_cat = m_data.pos_for_gender_number_cat[pos_category] end local text, cats = require(gender_and_number_module).format_genders(data.genders, data.lang, pos_for_cat) for _, cat in ipairs(cats) do			insert(data.categories, cat) end retval = retval .. " " .. text end return retval end

local function format_inflection_parts(data, parts) local any_part_translit = false

for j, part in ipairs(parts) do		if type(part) ~= "table" then part = {term = part} end

local partaccel = part.accel local face = part.face or "bold" if face ~= "bold" and face ~= "plain" and face ~= "hypothetical" then error("The face `" .. face .. "` " .. ( mw.loadData(script_utilities_data_module).faces[face] and "should not be used for non-headword terms on the headword line." or "is invalid." ))		end

-- Here the final part 'or data.nolinkinfl' allows to have 'nolinkinfl=true' -- right into the 'data' table to disable inflection links of the entire headword -- when inflected forms aren't entry-worthy, e.g.: in Vulgar Latin local nolinkinfl = part.face == "hypothetical" or (part.nolink and track("nolink") or part.nolinkinfl) or (			data.nolink and track("nolink") or data.nolinkinfl)

local formatted if part.label then -- FIXME: There should be a better way of italicizing a label. As is, this isn't customizable. formatted = "''" .. part.label .. "''"		else -- Convert the term into a full link. Don't show a transliteration here unless enable_auto_translit is -- requested, either at the `parts` level (i.e. per inflection) or at the `data.inflections` level (i.e.			-- specified for all inflections). This is controllable in using autotrinfl=1 for all inflections, -- or fNautotr=1 for an individual inflection (remember that a single inflection may be associated with			-- multiple terms). The reason for doing this is to avoid clutter in headword lines by default in languages -- where the script is relatively straightforward to read by learners (e.g. Greek, Russian), but allow it -- to be enabled in languages with more complex scripts (e.g. Arabic). local tr = part.translit or (not (parts.enable_auto_translit or data.inflections.enable_auto_translit) and "-" or nil) if tr ~= "-" then any_part_translit = true end formatted = require(links_module).full_link(				{					term = not nolinkinfl and part.term or nil,					alt = part.alt or (nolinkinfl and part.term or nil),					lang = part.lang or data.lang,					sc = part.sc or parts.sc or nil,					id = part.id,					genders = part.genders,					tr = tr,					ts = part.transcription,					accel = partaccel or parts.accel,				},				face				) end

parts[j] = format_term_with_qualifiers_and_refs(part, formatted, j)	end

local parts_output

if #parts > 0 then parts_output = (parts.label and " " or "") .. concat(parts) elseif parts.request then parts_output = " [please provide] " insert(data.categories, "Requests for inflections in " .. data.lang:getFullName .. " entries") else parts_output = "" end

local parts_label = parts.label and ("" .. parts.label .. "") or "" return parts_label .. parts_output, any_part_translit end

-- Format the inflections following the headword. local function format_inflections(data) local any_part_translit = false if data.inflections and #data.inflections > 0 then -- Format each inflection individually. for key, infl in ipairs(data.inflections) do			local this_any_part_translit data.inflections[key], this_any_part_translit = format_inflection_parts(data, infl) if this_any_part_translit then any_part_translit = true end end

local concat_result = concat(data.inflections, ", ") return " (" .. concat_result .. ")" else return "" end end

--[==[ -- Return "lemma" if the given POS is a lemma, "non-lemma form" if a non-lemma form, or nil -- if unknown. The POS passed in must be in its plural form ("nouns", "prefixes", etc.). -- If you have a POS in its singular form, call pluralize in Module:string utilities to -- pluralize it in a smart fashion that knows when to add '-s' and when to add '-es'. -- -- If `best_guess` is given and the POS is in neither the lemma nor non-lemma list, guess -- based on whether it ends in " forms"; otherwise, return nil.]==] function export.pos_lemma_or_nonlemma(plpos, best_guess) -- Is it a lemma category? if isLemma[plpos] then return "lemma" end local plpos_no_recon = plpos:gsub("^reconstructed ", "") if isLemma[plpos_no_recon] then return "lemma" end -- Is it a nonlemma category? if isNonLemma[plpos] or isNonLemma[plpos_no_recon] then return "non-lemma form" end local plpos_no_mut = plpos:gsub("^mutated ", "") if isLemma[plpos_no_mut] or isNonLemma[plpos_no_mut] then return "non-lemma form" elseif best_guess then return plpos:find(" forms$") and "non-lemma form" or "lemma" else return nil end end

-- Find and return the maximum index in the array `data[element]` (which may have gaps in it), and initialize it to a -- zero-length array if unspecified. Check to make sure all keys are numeric (other than "maxindex", which is set by -- Module:parameters for list parameters), all values are strings, and unless `allow_blank_string` is given, -- no blank (zero-length) strings are present. local function init_and_find_maximum_index(data, element, allow_blank_string) local maxind = 0 if not data[element] then data[element] = {} end local typ = type(data[element]) if typ ~= "table" then error(("In full_headword, `data.%s` must be an array but is a %s"):format(element, typ)) end for k, v in pairs(data[element]) do		if k ~= "maxindex" then if type(k) ~= "number" then error(("Unrecognized non-numeric key '%s' in `data.%s`"):format(k, name)) end if k > maxind then maxind = k			end if v then if type(v) ~= "string" then error(("For key '%s' in `data.%s`, value should be a string but is a %s"):format(k, element, type(v))) end if not allow_blank_string and v == "" then error(("For key '%s' in `data.%s`, blank string not allowed; use 'false' for the default"):format(k, element)) end end end end return maxind end

--[==[ -- Add the page to various maintenance categories for the language and the -- whole page. These are placed in the headword somewhat arbitrarily, but -- mainly because headword templates are mandatory for entries (meaning that -- in theory it provides full coverage). -- -- This is provided as an external entry point so that modules which transclude -- information from other entries (such as ja-see) can take advantage -- of this feature as well, because they are used in place of a conventional -- headword template.]==] do -- Handle any manual sortkeys that have been specified in raw categories -- by tracking if they are the same or different from the automatically- -- generated sortkey, so that we can track them in maintenance -- categories. local function handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats) sortkey = sortkey or lang:makeSortKey(page.pagename) -- If there are raw categories with no sortkey, then they will be		-- sorted based on the default MediaWiki sortkey, so we check against -- that. if type(tbl) ~= "table" then if page.raw_defaultsort ~= sortkey then insert(lang_cats, lang:getFullName .. " terms with non-redundant non-automated sortkeys") end return end local redundant, different for _, v in ipairs(tbl) do			if v:uupper == sortkey then redundant = true else different = true end end if redundant then insert(lang_cats, lang:getFullName .. " terms with redundant sortkeys") end if different then insert(lang_cats, lang:getFullName .. " terms with non-redundant non-automated sortkeys") end return sortkey end -- FIXME: generalise how these are added, instead of doing them one-by-one. function export.maintenance_cats(page, lang, lang_cats, page_cats) lang = lang:getFull -- since we are just generating categories local canonical = lang:getCanonicalName if page.unsupported_title then insert(page_cats, "Unsupported titles") end if page.tab_characters then insert(page_cats, "Pages with tab characters") end if page.unencoded_char then insert(page_cats, "Terms containing unencoded characters") end local tbl, sortkey = page.wikitext_topic_cat[lang:getCode] if tbl then sortkey = handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats) insert(lang_cats, canonical .. " entries with topic categories using raw markup") end tbl = page.wikitext_langname_cat[canonical] if tbl then handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats) insert(lang_cats, canonical .. " entries with language name categories using raw markup") end if require(utilities_module).get_current_L2 ~= canonical then insert(lang_cats, canonical .. " entries with incorrect language header") end if page.pagename_displaytitle_conflict then insert(page_cats, page.pagename_displaytitle_conflict) end if page.raw_sortkey then insert(page_cats, page.raw_sortkey) end end end

--[==[This is the primary external entry point.

This is used by and various language-specific headword templates (e.g.  for Russian adjectives,  for German nouns, etc.) to display an entire headword line. See ]==] function export.full_headword(data) local remove_links = require(links_module).remove_links local format_categories = require(utilities_module).format_categories

-- Prevent data from being destructively modified. local data = require(table_module).shallowcopy(data)

1. Basic checks for old-style (multi-arg) calling convention.

if data.getCanonicalName then error("In full_headword, the first argument `data` needs to be a Lua object (table) of properties, not a language object") end

if not data.lang or type(data.lang) ~= "table" or not data.lang.getCode then error("In full_headword, the first argument `data` needs to be a Lua object (table) and `data.lang` must be a language object") end

if data.id and type(data.id) ~= "string" then error("The id in the data table should be a string.") end

2. Initialize pagename etc.

local langcode = data.lang:getCode local full_langcode = data.lang:getFullCode local langname = data.lang:getCanonicalName local full_langname = data.lang:getFullName

local page if data.pagename then -- for testing, doc pages, etc.		page = require(headword_page_module).process_page(data.pagename) else page = m_data.page end

-- Check the namespace against the language type. if page.namespace == "" then if data.lang:hasType("reconstructed") then error("Entries in " .. langname .. " must be placed in the Reconstruction: namespace") elseif data.lang:hasType("appendix-constructed") then error("Entries in " .. langname .. " must be placed in the Appendix: namespace") end end

3. Initialize `data.heads` table; if old-style, convert to new-style.

if type(data.heads) == "table" and type(data.heads[1]) == "table" then -- new-style if data.translits or data.transcriptions then error("In full_headword, if `data.heads` is new-style (array of head objects), `data.translits` and `data.transcriptions` cannot be given") end else -- convert old-style `heads`, `translits` and `transcriptions` to new-style local maxind = math.max(			init_and_find_maximum_index(data, "heads"),			init_and_find_maximum_index(data, "translits", true),			init_and_find_maximum_index(data, "transcriptions", true)		) for i = 1, maxind do			data.heads[i] = { term = data.heads[i], tr = data.translits[i], ts = data.transcriptions[i], }		end end

-- Make sure there's at least one head. if not data.heads[1] then data.heads[1] = {} end

4. Initialize and validate `data.categories` and `data.whole_page_categories`, and determine `pos_category` if not given, and add basic categories.

init_and_find_maximum_index(data, "categories") init_and_find_maximum_index(data, "whole_page_categories") local pos_category_already_present = false if #data.categories > 0 then local escaped_langname = require(string_pattern_escape_module)(full_langname) local matches_lang_pattern = "^" .. escaped_langname .. " "		for _, cat in ipairs(data.categories) do -- Does the category begin with the language name? If not, tag it with a tracking category. if not cat:find(matches_lang_pattern) then -- Special:WhatLinksHere/Wiktionary:Tracking/headword/no lang category -- Special:WhatLinksHere/Wiktionary:Tracking/headword/no lang category/LANGCODE track("no lang category", data.lang) end end

-- If `pos_category` not given, try to infer it from the first specified category. If this doesn't work, we -- throw an error below. if not data.pos_category and data.categories[1]:find(matches_lang_pattern) then data.pos_category = data.categories[1]:gsub(matches_lang_pattern, "") -- Optimization to avoid inserting category already present. pos_category_already_present = true end end

if not data.pos_category then error("`data.pos_category` not specified and could not be inferred from the categories given in "			.. "`data.categories`. Either specify the plural part of speech in `data.pos_category` "			.. "(e.g. \"proper nouns\") or ensure that the first category in `data.categories` is formed from the "			.. "language's canonical name plus the plural part of speech (e.g. \"Norwegian Bokmål proper nouns\")."			) end

-- Insert a category at the beginning for the part of speech unless it's already present or `data.noposcat` given. if not pos_category_already_present and not data.noposcat then local pos_category = full_langname .. " " .. data.pos_category -- FIXME: User:Theknightwho Why is this special case here? Please add an explanatory comment. if pos_category ~= "Translingual Han characters" then insert(data.categories, 1, pos_category) end end

-- Try to determine whether the part of speech refers to a lemma or a non-lemma form; if we can figure this out, -- add an appropriate category. local postype = export.pos_lemma_or_nonlemma(data.pos_category) if not postype then -- We don't know what this category is, so tag it with a tracking category. -- Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos -- Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/LANGCODE track("unrecognized pos", data.lang) -- Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/POS -- Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/POS/LANGCODE track("unrecognized pos/pos/" .. data.pos_category, data.lang) elseif not data.noposcat then insert(data.categories, 1, full_langname .. " " .. postype .. "s") end

5. Create a default headword, and add links to multiword page names.

-- Determine if term is reconstructed local is_reconstructed = page.namespace == "Reconstruction" or data.lang:hasType("reconstructed")

-- Create a default headword based on the pagename, which is determined in -- advance by the data module so that it only needs to be done once. local default_head = page.pagename

-- Add links to multi-word page names when appropriate if not data.nolinkhead and not m_data.no_multiword_links[langcode] and not m_data.no_multiword_links[full_langcode] and	not is_reconstructed and export.head_is_multiword(default_head) then default_head = export.add_multiword_links(default_head, true) end

if is_reconstructed then default_head = "*" .. default_head end

6. Fill in missing values in `data.heads`.

-- True if any script among the headword scripts has spaces in it. local any_script_has_spaces = false -- True if any term has a redundant head= param. local has_redundant_head_param = false

for _, head in ipairs(data.heads) do

-- 6a. If missing head, replace with default head. if not head.term then head.term = default_head elseif head.term == default_head then has_redundant_head_param = true end

-- 6b. Try to detect the script(s) if not provided. If a per-head script is provided, that takes precedence, --    otherwise fall back to the overall script if given. If neither given, autodetect the script. local auto_sc = data.lang:findBestScript(head.term) if (			auto_sc:getCode == "None" and			require(scripts_module).findBestScriptWithoutLang(head.term):getCode ~= "None"		) then insert(data.categories, full_langname .. " terms in nonstandard scripts") end if not (head.sc or data.sc) then -- No script code given, so use autodetected script. head.sc = auto_sc else if not head.sc then -- Overall script code given. head.sc = data.sc			end -- Track uses of sc parameter. if head.sc:getCode == auto_sc:getCode then insert(data.categories, full_langname .. " terms with redundant script codes") else insert(data.categories, full_langname .. " terms with non-redundant manual script codes") end end

-- If using a discouraged character sequence, add to maintenance category. if head.sc:hasNormalizationFixes == true then local composed_head = toNFC(head.term) if head.sc:fixDiscouragedSequences(composed_head) ~= composed_head then insert(data.whole_page_categories, "Pages using discouraged character sequences") end end

any_script_has_spaces = any_script_has_spaces or head.sc:hasSpaces

-- 6c. Create automatic transliterations for any non-Latin headwords without manual translit given --    (provided automatic translit is available, e.g. not in Persian or Hebrew).

-- Make transliterations head.tr_manual = nil

-- Try to generate a transliteration if necessary if head.tr == "-" then head.tr = nil elseif not notranslit[langcode] and not notranslit[full_langcode] and head.sc:isTransliterated then head.tr_manual = not not head.tr

local text = head.term if not data.lang:link_tr then text = remove_links(text) end

local automated_tr, tr_categories automated_tr, head.tr_fail, tr_categories = data.lang:transliterate(text, head.sc)

if automated_tr or head.tr_fail then local manual_tr = head.tr

if manual_tr then if (remove_links(manual_tr) == remove_links(automated_tr)) and (not head.tr_fail) then insert(data.categories, full_langname .. " terms with redundant transliterations") elseif not head.tr_fail then insert(data.categories, full_langname .. " terms with non-redundant manual transliterations") end end

if not manual_tr then head.tr = automated_tr for _, category in ipairs(tr_categories) do						insert(data.categories, category) end end end

-- There is still no transliteration? -- Add the entry to a cleanup category. if not head.tr then head.tr = " transliteration needed " -- FIXME: No current support for 'Request for transliteration of Classical Persian terms' or similar. -- Consider adding this support in Module:category tree/poscatboiler/data/entry maintenance. insert(data.categories, "Requests for transliteration of " .. full_langname .. " terms") else -- Otherwise, trim it. head.tr = mw.text.trim(head.tr) end end

-- Link to the transliteration entry for languages that require this. if head.tr and data.lang:link_tr then head.tr = require(links_module).full_link { term = head.tr, lang = data.lang, sc = require(scripts_module).getByCode("Latn"), tr = "-" }		end end

7. Maybe tag the title with the appropriate script code, using the `display_title` mechanism.

-- Assumes that the scripts in "toBeTagged" will never occur in the Reconstruction namespace. -- (FIXME: Don't make assumptions like this, and if you need to do so, throw an error if the assumption is violated.) -- Avoid tagging ASCII as Hani even when it is tagged as Hani in the headword, as in check. The check for ASCII -- might need to be expanded to a check for any Latin characters and whitespace or punctuation. local display_title -- Where there are multiple headwords, use the script for the first. This assumes the first headword is similar to -- the pagename, and that headwords that are in different scripts from the pagename aren't first. This seems to be -- about the best we can do (alternatively we could potentially do script detection on the pagename). local dt_script = data.heads[1].sc	local dt_script_code = dt_script:getCode local page_non_ascii = page.namespace == "" and not page.pagename:find("^[%z\1-\127]+$") local unsupported_pagename, unsupported = page.full_raw_pagename:gsub("^Unsupported titles/", "") if unsupported == 1 and page.unsupported_titles[unsupported_pagename] then display_title = 'Unsupported titles/' .. page.unsupported_titles[unsupported_pagename] .. ' '	elseif page_non_ascii and toBeTagged[dt_script_code] or (dt_script_code == "Jpan" and (text_in_script(data.pagename, "Hira") or text_in_script(data.pagename, "Kana"))) or (dt_script_code == "Kore" and text_in_script(data.pagename, "Hang")) then display_title = '' .. page.full_raw_pagename .. ' '	-- Keep Han entries region-neutral in the display title. elseif page_non_ascii and (dt_script_code == "Hant" or dt_script_code == "Hans") then display_title = ' ' .. page.full_raw_pagename .. ' '	elseif page.namespace == "Reconstruction" then display_title, matched = rsubn(			page.full_raw_pagename,			"^(Reconstruction:[^/]+/)(.+)$",			function(before, term)				return before ..					require(script_utilities_module).tag_text( term, data.lang, dt_script )			end		) if matched == 0 then display_title = nil end end

if display_title then mw.getCurrentFrame:callParserFunction(			"DISPLAYTITLE",			display_title		) end

8. Insert additional categories.

if data.force_cat_output then -- Special:WhatLinksHere/Wiktionary:Tracking/headword/force cat output track("force cat output") end

if has_redundant_head_param then if not data.no_redundant_head_cat then insert(data.categories, full_langname .. " terms with redundant head parameter") end end

-- If the first head is multiword (after removing links), maybe insert into "LANG multiword terms". if not data.nomultiwordcat and any_script_has_spaces and postype == "lemma" and not m_data.no_multiword_cat[langcode] and not m_data.no_multiword_cat[full_langcode] then -- Check for spaces or hyphens, but exclude prefixes and suffixes. -- Use the pagename, not the head= value, because the latter may have extra -- junk in it, e.g. superscripted text that throws off the algorithm. local checkpattern = ".[%s%-፡]." if m_data.hyphen_not_multiword_sep[langcode] or m_data.hyphen_not_multiword_sep[full_langcode] then -- Exclude hyphens if the data module states that they should for this language checkpattern = ".[%s፡]." end if rmatch(page.pagename, checkpattern) and not non_categorizable(page.full_raw_pagename) then insert(data.categories, full_langname .. " multiword terms") end end

if data.sccat then for _, head in ipairs(data.heads) do insert(data.categories, full_langname .. " " .. data.pos_category .. " in " ..				head.sc:getDisplayForm) end end

-- Reconstructed terms often use weird combinations of scripts and realistically aren't spelled so much as notated. if page.namespace ~= "Reconstruction" then -- Determine how many real scripts are found in the pagename, where we exclude symbols and such. We exclude -- scripts whose `character_category` is false as well as Zmth (mathematical notation symbols), which has a -- category of "Mathematical notation symbols". When counting scripts, we need to elide language-specific -- variants because e.g. Beng and as-Beng have slightly different characters but we don't want to consider them -- two different scripts (e.g. এৰ has two characters which are detected respectively as Beng and as-Beng). local seen_scripts = {} local num_seen_scripts = 0 local num_loops = 0 local canon_pagename = page.pagename local script_data = mw.loadData(scripts_data_module) while true do			if canon_pagename == "" or num_seen_scripts >= 2 or num_loops >= 10 then break end -- Make sure we don't get into a loop checking the same script over and over again; happens with e.g. ᠪᡳ num_loops = num_loops + 1 local pagename_script = require(scripts_module).findBestScriptWithoutLang(canon_pagename, "None only as last resort") local script_chars = pagename_script:getCharacters if not script_chars then -- we are stuck; this happens with None break end local script_code = pagename_script:getCode local replaced canon_pagename, replaced = rsubn(canon_pagename, "[" .. script_chars .. "]", "") if replaced and script_code ~= "Zmth" and script_data[script_code] and script_data[script_code].character_category ~= false then script_code = script_code:gsub("^.-%-", "") if not seen_scripts[script_code] then seen_scripts[script_code] = true num_seen_scripts = num_seen_scripts + 1 end end end

if num_seen_scripts > 1 then insert(data.categories, full_langname .. " terms written in multiple scripts") end end -- Categorise for unusual characters. Takes into account combining characters, so that we can categorise for characters with diacritics that aren't encoded as atomic characters (e.g. U̠). These can be in two formats: single combining characters (i.e. character + diacritic(s)) or double combining characters (i.e. character + diacritic(s) + character). Each can have any number of diacritics. local standard = data.lang:getStandardCharacters if standard and not non_categorizable(page.full_raw_pagename) then local function char_category(char) local specials = { ["#"] = "number sign", ["("] = "parentheses",				[")"] = "parentheses", ["<"] = "angle brackets", [">"] = "angle brackets", ["["] = "square brackets", ["]"] = "square brackets", ["_"] = "underscore", ["{"] = "braces", ["|"] = "vertical line", ["}"] = "braces", ["ß"] = "ẞ", ["\205\133"] = "", -- this is UTF-8 for U+0345 ( ͅ) ["\239\191\189"] = "replacement character", }			char = toNFD(char) :gsub("[%z\1-\127\194-\244][\128-\191]*", function(m)					local new_m = specials[m]					new_m = new_m or m:uupper					return new_m				end) return toNFC(char) end if full_langcode ~= "hi" and full_langcode ~= "lo" then local standard_chars_scripts = {} for _, head in ipairs(data.heads) do				standard_chars_scripts[head.sc:getCode] = true end -- Iterate over the scripts, in case there is more than one (as they can have different sets of standard characters). for code in pairs(standard_chars_scripts) do				local sc_standard = data.lang:getStandardCharacters(code) if sc_standard then if page.pagename_len > 1 then local explode_standard = {} local function explode(char) explode_standard[char] = true return "" end local sc_standard = rsub(sc_standard, page.comb_chars.combined_double, explode) sc_standard = rsub(sc_standard,page.comb_chars.combined_single, explode) :gsub("[%z\1-\127\194-\244][\128-\191]*", explode) local num_cat_inserted for char in pairs(page.explode_pagename) do							if not explode_standard[char] then if char:find("[0-9]") then if not num_cat_inserted then insert(data.categories, full_langname .. " terms spelled with numbers") num_cat_inserted = true end elseif rfind(char, page.emoji_pattern) then insert(data.categories, full_langname .. " terms spelled with emoji") else local upper = char_category(char) if not explode_standard[upper] then char = upper end insert(data.categories, full_langname .. " terms spelled with " .. char) end end end end -- If a diacritic doesn't appear in any of the standard characters, also categorise for it generally. sc_standard = toNFD(sc_standard) for diacritic in rgmatch(page.decompose_pagename, page.comb_chars.diacritics_single) do						if not rmatch(sc_standard, diacritic) then insert(data.categories, full_langname .. " terms spelled with ◌" .. diacritic) end end for diacritic in rgmatch(page.decompose_pagename, page.comb_chars.diacritics_double) do						if not rmatch(sc_standard, diacritic) then insert(data.categories, full_langname .. " terms spelled with ◌" .. diacritic .. "◌") end end end end -- Ancient Greek, Hindi and Lao handled the old way for now, as their standard chars still need to be converted to the new format (because there are a lot of them). elseif ulen(page.pagename) ~= 1 then for character in rgmatch(page.pagename, "([^" .. standard .. "])") do				local upper = char_category(character) if not rmatch(upper, "[" .. standard .. "]") then character = upper end insert(data.categories, full_langname .. " terms spelled with " .. character) end end end if data.heads[1].sc:isSystem("alphabet") then local pagename, i = page.pagename:ulower, 2 while rmatch(pagename, "(%a)" .. ("%1"):rep(i)) do			i = i + 1 insert(data.categories, full_langname .. " terms with " .. i .. " consecutive instances of the same letter") end end -- Categorise for palindromes if not data.nopalindromecat and page.namespace ~= "Reconstruction" and ulen(page.pagename) > 2 -- FIXME: Use of first script here seems hacky. What is the clean way of doing this in the presence of -- multiple scripts? and require(palindromes_module).is_palindrome(page.pagename, data.lang, data.heads[1].sc) then insert(data.categories, full_langname .. " palindromes") end

if page.namespace == "" and not data.lang:hasType("reconstructed") then local m_links = require(links_module) for _, head in ipairs(data.heads) do			if page.full_raw_pagename ~= m_links.get_link_page(remove_links(head.term), data.lang, head.sc) then -- Special:WhatLinksHere/Wiktionary:Tracking/headword/pagename spelling mismatch -- Special:WhatLinksHere/Wiktionary:Tracking/headword/pagename spelling mismatch/LANGCODE track("pagename spelling mismatch", data.lang) break end end end

-- Add to various maintenance categories. export.maintenance_cats(page, data.lang, data.categories, data.whole_page_categories)

9. Format and return headwords, genders, inflections and categories.

-- Format and return all the gathered information. This may add more categories (e.g. gender/number categories), -- so make sure we do it before evaluating `data.categories`. local text = ' ' .. format_headword(data) .. format_genders(data) .. format_inflections(data) .. ' '

-- Language-specific categories. local cats = format_categories(		data.categories, data.lang, data.sort_key, page.encoded_pagename,		data.force_cat_output or test_force_categories, data.heads[1].sc	) -- Language-agnostic categories. local whole_page_cats = format_categories(		data.whole_page_categories, nil, "-"	) return text .. cats .. whole_page_cats end

return export

title: Module:User:Benwing2/headword


text:
Module:User:Benwing2/kmr-headword

local export = {} local pos_functions = {}

local lang = require("Module:languages").getByCode("kmr") local langname = lang:getCanonicalName

local PAGENAME = mw.title.getCurrentTitle.text

local suffix_categories = { ["adjectives"] = true, ["adverbs"] = true, ["nouns"] = true, ["verbs"] = true, }

local function track(page) require("Module:debug").track("kmr-headword/" .. page) return true end

local function glossary_link(entry, text) text = text or entry return "" .. text .. "" end

-- The main entry point. -- This is the only function that can be invoked from a template. function export.show(frame) local tracking_categories = {} local poscat = frame.args[1] or error("Plural part of speech e.g. 'nouns' has not been specified. Please pass parameter 1 to the module invocation.") local params = { ["head"] = {list = true}, ["tr"] = {list = true, allow_holes = true}, ["id"] = {}, ["suff"] = {type = "boolean"}, }

if pos_functions[poscat] then for key, val in pairs(pos_functions[poscat].params) do			params[key] = val end end local parargs = frame:getParent.args local args = require("Module:parameters").process(parargs, params) local data = { lang = lang, pos_category = poscat, categories = {}, heads = args["head"], translits = args["tr"], genders = {}, inflections = {}, id = args["id"], categories = {} }	if args["suff"] then data.pos_category = "suffixes" if suffix_categories[poscat] then local singular_poscat = poscat:gsub("s$", "") table.insert(data.categories, langname .. " " .. singular_poscat .. "-forming suffixes") else error("No category exists for suffixes forming " .. poscat .. ".") end end if pos_functions[poscat] then pos_functions[poscat].func(args, data, tracking_categories) end return require("Module:User:Benwing2/headword").full_headword(data) .. require("Module:utilities").format_categories(tracking_categories, lang) end

pos_functions["verbs"] = { params = { [1] = {},		[2] = {},	},	func = function(args, data, tracking_categories) if args[1] then table.insert(data.inflections, {label = "third-person singular simple present", args[1]}) end if args[2] then table.insert(data.inflections, {label = "past tense", args[2]}) end end }

pos_functions["adjectives"] = { params = { [1] = {alias_of = "comparative"}, ["comparative"] = {list = true}, --comparative(s) [2] = {alias_of = "superlative"}, ["superlative"] = {list = true}, --superlative(s) },	func = function(args, data, tracking_categories) if args.comparative[1] == "-" then table.insert(data.inflections, {label = "not comparable"}) table.insert(data.categories, langname .. " uncomparable adjectives") else if #args.comparative > 0 then args.comparative.label = glossary_link("comparative") args.comparative.accel = {form = "comparative"} table.insert(data.inflections, args.comparative) end if #args.superlative > 0 then args.superlative.label = glossary_link("superlative") args.superlative.accel = {form = "superlative"} table.insert(data.inflections, args.superlative) end end end }

local noun_params = { [1] = {alias_of = "g"}, ["g"] = {list = true}, --gender(s) [2] = {alias_of = "pl"}, ["pl"] = {list = true}, --plural(s) ["f"] = {list = true}, --feminine form(s) ["m"] = {list = true}, --masculine form(s) }

local allowed_genders = { ["m"] = true, ["f"] = true, ["n"] = true, ["mf"] = true, ["m-p"] = true, ["f-p"] = true, ["n-p"] = true, }

local function do_nouns(pos, args, data, tracking_categories) local genders = {} for _, g in ipairs(args.g) do		if not allowed_genders[g] then error("Unrecognized gender: " .. g)		end if g == "mf" then table.insert(genders, "m") table.insert(genders, "f") else table.insert(genders, g)		end end

if #genders > 0 then data.genders = genders else data.genders = {"?"} end local plpos = require("Module:string utilities").pluralize(pos)

-- Check for special plural signals local mode = nil if args.pl[1] == "?" or args.pl[1] == "!" or args.pl[1] == "-" or args.pl[1] == "-~" or args.pl[1] == "~" or args.pl[1] == "#" then mode = args.pl[1] table.remove(args.pl, 1) -- Remove the mode parameter end if mode == "?" then -- Plural is unknown table.insert(data.categories, langname .. " " .. plpos .. " with unknown or uncertain plurals") elseif mode == "!" then -- Plural is not attested table.insert(data.inflections, {label = "plural not attested"}) table.insert(data.categories, langname .. " " .. plpos .. " with unattested plurals") return elseif mode == "-" then -- Uncountable noun; may occasionally have a plural table.insert(data.categories, langname .. " uncountable " .. plpos) table.insert(data.inflections, {label = glossary_link("uncountable")}) elseif mode == "-~" then table.insert(data.categories, langname .. " uncountable " .. plpos) table.insert(data.inflections, {label = "usually " .. glossary_link("uncountable")}) elseif mode == "~" then -- Mixed countable/uncountable noun, always has a plural table.insert(data.inflections, {label = glossary_link("countable") .. " and " .. glossary_link("uncountable")}) table.insert(data.categories, langname .. " uncountable " .. plpos) table.insert(data.categories, langname .. " countable " .. plpos) elseif mode == "#" or pos == "noun" then -- Countable nouns; the default for regular nouns but not proper nouns if mode == "#" then table.insert(data.inflections, {label = glossary_link("countable")}) end -- Not enough nouns properly use - in the second argument -- table.insert(data.categories, langname .. " countable " .. plpos) end

if #args.pl > 0 then args.pl.label = "plural" args.pl.accel = {form = "p"} table.insert(data.inflections, args.pl) end

if #args.f > 0 then args.f.label = "feminine" table.insert(data.inflections, args.f)	end

if #args.m > 0 then args.m.label = "masculine" table.insert(data.inflections, args.m)	end end

pos_functions["nouns"] = { params = noun_params, func = function(args, data, tracking_categories) return do_nouns("noun", args, data, tracking_categories) end, }

pos_functions["proper nouns"] = { params = noun_params, func = function(args, data, tracking_categories) return do_nouns("proper noun", args, data, tracking_categories) end, }

return export

title: Module:User:Benwing2/kmr-headword


title: User:Benwing2/kmr-noun


text:
Talk:等一下

Philippine Hokkien
How do you know the tone of the contraction of 一下 when it's neutral tone? Also, could you also check the example sentence as well? — justin(r)leung { (t...) 01:47, 14 October 2020 (UTC)
 * I just based it on the tone of 下 which is ē. The example sentence, well, the English translation is grammatically wrong, the Hokkien sentence sounds weird to me. --Mar vin kaiser (talk) 07:08, 14 October 2020 (UTC)
 * Isn't it ě in Philippine Hokkien, though? And could you fix the example sentence in anyway? — justin(r)leung { (t...) 07:12, 14 October 2020 (UTC)
 * Actually, we say 一下 as chi̍t-ē, with the second syllable as high falling. --Mar vin kaiser (talk) 10:24, 14 October 2020 (UTC)
 * What about the contraction? What tone is it actually pronounced with? — justin(r)leung { (t...) 22:16, 14 October 2020 (UTC)
 * Well, in the contraction, since 等 is pronounced with the original tone (high flat), and not with a tone sandhi, that means that "一下" would be in a neutral tone, which manifests also as a high falling tone. --Mar vin kaiser (talk) 01:06, 15 October 2020 (UTC)
 * Hmm, I thought so. So high falling tone is how the neutral tone is pronounced in all cases? If it is, I think this would mean 下 isn't actually ē, but just sounds like it because it's neutral? — justin(r)leung { (t...) 01:17, 15 October 2020 (UTC)
 * Well, the only reason I wrote the romanization as "ē" is because if the origin of the word is 陽去, based on what I usually see in POJ, the tone marking is retained in the neutral tone. As for the pronunciation of the neutral tone in Philippine Hokkien, it's not always high falling in all cases. Based on my observation, it's based on the previous tone, if the previous tone ends high, then the tendency is the neutral tone will be high falling. --Mar vin kaiser (talk) 01:35, 15 October 2020 (UTC)

title: Talk:等一下


text:
עומס

Noun

 * 1) load, burden

title: עומס


text:
Module:User:Benwing2/headword/templates

local process_params = require("Module:parameters").process

local export = {}

local function get_args(frame) local boolean = {type = "boolean"} local boolean_list_allow_holes = {type = "boolean", list = true, allow_holes = true} local list_allow_holes = {list = true, allow_holes = true} local plain = {} return process_params(frame:getParent.args, {		[1] = {required = true, type = "language", etym_lang = true, default = "und"},		["sc"] = {type = "script"},		["sort"] = plain,

[2] = {required = true, default = "nouns"}, ["sccat"] = boolean, ["noposcat"] = boolean, ["nomultiwordcat"] = boolean, ["nogendercat"] = boolean, ["nopalindromecat"] = boolean, ["nolinkhead"] = boolean, ["autotrinfl"] = boolean, ["cat2"] = plain, ["cat3"] = plain, ["cat4"] = plain, ["head"] = list_allow_holes, ["id"] = plain, ["tr"] = list_allow_holes, ["ts"] = list_allow_holes, ["gloss"] = plain, ["g"] = {list = true}, ["g\1qual"] = list_allow_holes, [3] = list_allow_holes, ["f\1accel-form"] = list_allow_holes, ["f\1accel-translit"] = list_allow_holes, ["f\1accel-lemma"] = list_allow_holes, ["f\1accel-lemma-translit"] = list_allow_holes, ["f\1accel-gender"] = list_allow_holes, ["f\1accel-nostore"] = boolean_list_allow_holes, ["f\1request"] = list_allow_holes, ["f\1alt"] = list_allow_holes, ["f\1lang"] = {list = true, allow_holes = true, type = "language", etym_lang = true}, ["f\1sc"] = {list = true, allow_holes = true, type = "script"}, ["f\1id"] = list_allow_holes, ["f\1tr"] = list_allow_holes, ["f\1ts"] = list_allow_holes, ["f\1g"] = list_allow_holes, ["f\1qual"] = list_allow_holes, ["f\1autotr"] = boolean_list_allow_holes, ["f\1nolink"] = boolean_list_allow_holes, }) end

function export.head_t(frame) local function track(page) require("Module:debug/track")("headword/templates/" .. page) return true end

local args = get_args(frame) -- Get language and script information local data = {} data.lang = args[1] data.sc = args["sc"] data.sccat = args["sccat"] data.sort_key = args["sort"] data.heads = args["head"] data.id = args["id"] data.translits = args["tr"] data.transcriptions = args["ts"] data.gloss = args["gloss"] data.genders = args["g"] -- This shouldn't really happen. for i = 1,args["head"].maxindex do		if not args["head"][i] then track("head-with-holes") end end for k, v in pairs(args["gqual"]) do		if k ~= "maxindex" then if data.genders[k] then data.genders[k] = {spec = data.genders[k], qualifiers = {v}} else k = k == 1 and "" or tostring(k) error(("g%squal= specified without g%s="):format(k, k)) end end end

-- Part-of-speech category data.pos_category = args[2] data.noposcat = args["noposcat"]

local headword_data = mw.loadData("Module:headword/data")

-- Check for headword aliases and then pluralize if the POS term does not have an invariable plural. data.pos_category = headword_data.pos_aliases[data.pos_category] or data.pos_category if not data.pos_category:find("s$") and not headword_data.invariable[data.pos_category] then -- Make the plural form of the part of speech data.pos_category = data.pos_category:gsub("x$", "%0e") .. "s" end

-- Additional categories. data.categories = {} data.whole_page_categories = {} data.nomultiwordcat = args["nomultiwordcat"] data.nogendercat = args["nogendercat"] data.nopalindromecat = args["nopalindromecat"]

if args["cat2"] then table.insert(data.categories, data.lang:getFullName .. " " .. args["cat2"]) end

if args["cat3"] then table.insert(data.categories, data.lang:getFullName .. " " .. args["cat3"]) end

if args["cat4"] then table.insert(data.categories, data.lang:getFullName .. " " .. args["cat4"]) end

-- Headword linking data.nolinkhead = args["nolinkhead"]

-- Inflected forms data.inflections = {enable_auto_translit = args["autotrinfl"]}

for i = 1, math.ceil(args[3].maxindex / 2) do		local infl_part = { label   = args[3][i * 2 - 1], accel   = args["faccel-form"][i] and { form     = args["faccel-form"][i], translit = args["faccel-translit"][i], lemma    = args["faccel-lemma"][i], lemma_translit = args["faccel-lemma-translit"][i], gender   = args["faccel-gender"][i], nostore  = args["faccel-nostore"][i], } or nil, request = args["frequest"][i], enable_auto_translit = args["fautotr"][i], }		local form = { term         =  args[3][i * 2], alt          =  args["falt"][i], genders      =  args["fg"][i] and mw.text.split(args["fg"][i], ",") or {}, id           =  args["fid"][i], lang         =  args["flang"][i], nolinkinfl   =  args["fnolink"][i], q            = {args["fqual"][i]}, sc           =  args["fsc"][i], translit     =  args["ftr"][i], transcription = args["fts"][i], }		-- If no term or alt is given, then the label is shown alone. if form.term or form.alt then table.insert(infl_part, form) end if infl_part.label == "or" then -- Append to the previous inflection part, if one exists if #infl_part > 0 and data.inflections[1] then table.insert(data.inflections[#data.inflections], form) end elseif infl_part.label then -- Add a new inflection part table.insert(data.inflections, infl_part) end end return require("Module:headword").full_headword(data) end

return export

title: Module:User:Benwing2/headword/templates


title: User:Benwing2/head


text:
User:Benwing2/test-head

 * Production templates

intj

n

title: User:Benwing2/test-head


text: Category:ur:Afghanistan

title: Category:ur:Afghanistan


text: Category:ota:Afghanistan

title: Category:ota:Afghanistan


text:
Module:Swadesh/data/bra

local m = {} m["nativename"] = "ब्रज" m[1] = m[2] = m[3] = {{term = "इ", notes = "proximal"}, {term = "बु", notes = "distal"}} m[4] = m[5] = m[6] = {{term = "ये", notes = "proximal"}, {term = "बे", notes = "distal"}} m[7] = {{term = "इ", notes = "singular"}, {term = "ये", notes = "plural"}} m[8] = {{term = "बु", notes = "singular"}, {term = "बे", notes = "plural"}} return m

title: Module:Swadesh/data/bra


text:
סיכון

Noun

 * 1) danger, risk, hazard, peril

title: סיכון


text:
runian

Etymology
From, equivalent to.

Verb

 * 1) to whisper

title: runian


text:
Talk:οἰονός

RFV discussion: October 2020
RFD'ed by with the text "the title is misspelled: the correct page is οἰωνός (2020, May)". Created by .__Gamren (talk) 19:00, 3 October 2020 (UTC)
 * Not in any of LSJ, Middle Liddell, Bailly or the DGE, so apparently a misspelling for . --Lambiam 03:57, 4 October 2020 (UTC)
 * I can't find evidence that it's a misspelling that ever actually occurs either, so I'm just deleting it. —Mahāgaja · talk 07:47, 4 October 2020 (UTC)

title: Talk:οἰονός


text: Aðalbjörn

title: Aðalbjörn


text:
seljusöngvari

Noun

 * 1) marsh warbler

title: seljusöngvari


text: fullboðlegur

title: fullboðlegur


text:
fýsilegur

Adjective

 * 1) tempting

title: fýsilegur


text:
клепач

Noun

 * 1) eyelid

title: клепач


text:
Citations:英釐安納

 * 1849,,  (A Short Account of the Maritime Circuit)

title: Citations:英釐安納


text: Þangbrandur

title: Þangbrandur


text:
stilltur

Adjective

 * 1) calm

title: stilltur


text: OK's

title: OK's


text: OK'ing

title: OK'ing


text: OK'd

title: OK'd


text:
ជុះអាច់

Etymology
🇰🇲

Verb

 * 1)  to defecate, to shit

title: ជុះអាច់


text: KDR

title: KDR


text:
ក្ស័ត្រ

Noun

 * : king

title: ក្ស័ត្រ


text: kill/death ratio

title: kill/death ratio


text: kill/death ratios

title: kill/death ratios


text: KDRs

title: KDRs


text:
melonal

Etymology
. . From, from , from being a -based that smells like melons.

Noun

 * 1) A melon-smelling scent compound found in nature and synthesized for perfuming, that in its pure form is a clear pale yellow liquid.
 * 2)  A fragrance or flavour additive based on the melonal chemical compound

Synonyms

 * CAS 106-72-9

Hypernyms

 * C9H16O
 * compound
 * compound
 * chemical
 * compound
 * chemical
 * chemical

title: melonal


text: IDEFK

title: IDEFK


text:
தள்ளை

Etymology
. Cognate with 🇨🇬 and 🇨🇬.

Noun

 * 1) mother

title: தள்ளை


text:
형태소

Etymology
.

Noun

 * 1)  morpheme

title: 형태소


text:
idek

Related terms

 * / I don't know
 * / /  don't know

title: idek


text:
தளப்பு

Etymology
From தளம்பு.

Noun

 * 1) injury, evil influence

title: தளப்பு


text:
இழிவு

Etymology
From.

Noun

 * 1) inferiority, lowness, baseness, humility
 * 2) disgrace, dishonor, ignominy
 * 3) diminution, decrease, deficiency
 * 4) ruin, destruction
 * 5) fault, blemish
 * 6) pollution, defilement
 * 7) hollow, depression, pit

title: இழிவு


text:
پھلنا

Etymology
or from. Cognate with 🇨🇬 /, 🇨🇬 / , 🇨🇬, 🇨🇬, 🇨🇬, 🇨🇬.

Verb

 * 1) to bear fruit
 * 2) to have heirs
 * 3) to prove successful or advantageous
 * 4) to break out as blisters or pimples

title: پھلنا


text:
heptenal

Etymology
.

Noun

 * 1)  Any of several isomeric unsaturated aldehydes that have seven carbon atoms

title: heptenal


text:
இழிப்பு

Etymology
.

Noun

 * 1) contemptuous treatment
 * 2) sentiment of disgust

title: இழிப்பு


text: Citations:aw nah

title: Citations:aw nah


text:
melon aldehyde

Etymology
From being a -scented.

title: melon aldehyde


text:
தளர்வு

Etymology
From.

Noun

 * 1) growing slack, relaxing
 * 2) staggering
 * 3) faintness, weakness, depression of spirits
 * 4) sorrow

title: தளர்வு


text:
melon heptenal

Etymology
From being a -scented aldehyde with an unsaturated  seven-carbon-atom backbone chain.

title: melon heptenal


text:
இழுக்கம்

Etymology
From இழுக்கு.

Noun

 * 1) fault, offense, transgression
 * 2) violation of social caste rules
 * 3) ignominy, discomfiture

title: இழுக்கம்


text:
afsprengi

Noun

 * 1) offspring, progeny

title: afsprengi


text:
இழுக்கு

Verb

 * 1)  to slip down from a great height, fall from a high rank
 * 2) to suffer misery, undergo pain
 * 3) to slip, slide
 * 4) to grow weak, lose vigour, to become dispirited
 * 5) to be caught, entrapped
 * 6)  to forget
 * 7) to lose
 * 8) to give up, avoid
 * 9) to destroy

Noun

 * 1) evil, vice, wickedness
 * 2) disgrace, reproach
 * 3) imperfection, flaw, defect
 * 4) inferiority, baseness
 * 5) forgetfulness
 * 6) slippery ground

title: இழுக்கு


text:
បុព្វបទ

Etymology
Derived from +, equivalent to 🇰🇲.

Noun

 * 1)  prefix

title: បុព្វបទ


text:
இழுது

Noun

 * 1) butter
 * 2) ghee
 * 3) fat, grease
 * 4) honey
 * 5) thick, semi-liquid substance

title: இழுது


text:
ရှေ့ဆက်

Etymology
🇰🇲.

Noun

 * 1)  prefix

title: ရှေ့ဆက်


text:
இழுதை

Noun

 * 1) ignorance
 * 2) devil
 * 3) untruth, falsehood

title: இழுதை


text:
இழுப்பறை

Etymology
From இழுப்பு.

Noun

 * 1) drawer

title: இழுப்பறை


text:
បច្ច័យ

Etymology
Borrowed from.

Noun

 * 1)  suffix
 * 2) factor; cause
 * 3)  the four requisites or necessities of a Buddhist monk

title: បច្ច័យ


text:
дыргъ

Noun

 * 1) fruit

title: дыргъ


text:
рӕзӕ

Noun

 * 1) fruit

title: рӕзӕ


text:
Reconstruction:Old Frisian/ose

Etymology
From, from.

Noun

 * 1) eyelet

title: Reconstruction:Old Frisian/ose


text:
နောက်ဆက်

Etymology
🇰🇲.

Noun

 * 1)  suffix

title: နောက်ဆက်


text:
yeah, nah

Usage notes

 * Although this expression seems oxymoronic, the is more of an affirmation of the original question than a positive answer.

title: yeah, nah


text: yeah nah

title: yeah nah


text:
箭豬

Noun

 * 1) porcupine

title: 箭豬


text: 箭猪

title: 箭猪


text:
User talk:2003:DE:3729:1773:38F6:CB13:FE21:D02

You obviously haven't done a Google search on "Patwa" vs. "Jumeikan". There are enough hits in book titles alone (e.g. Jamaican Patwa Language) to surpass hits of "Jumeikan" that are referring specifically to the language (if there are any- I haven't found one yet). Also, my Dictionary of Jamaican English (which also covers Patwa) doesn't even have an entry for any spelling of "Jamaican" that refers to the language, but it does have "PATWA dial sp for patois. JC speech."

I think you need to step back and take a look at yourself. Edit-warring with a native speaker over the name of his own language is not exactly doing wonders for your credibility. Chuck Entz (talk) 04:23, 14 October 2020 (UTC)


text:
frEGG

Noun

 * 1)  A free-floating evaporating gaseous globule; a relatively concentrated mass of gas in a star-forming region

title: frEGG


text: amoebozoa

title: amoebozoa


text:
avoir quelqu'un dans le nez

Phrase

 * 1)  to get up someone's nose, to dislike someone

title: avoir quelqu'un dans le nez


text:
netzolli

Noun

 * 1) choya

title: netzolli


text:
anatelophase

Noun

 * 1)  A combination of anaphase and telophase

title: anatelophase


text: angiomotins

title: angiomotins


text:
anomerase

Noun

 * 1)  An enzyme that catalyses the formation of anomers

title: anomerase


text: anomerases

title: anomerases


text: Category:Jamaican Creole terms derived from French


text: Category:Jamaican Creole terms derived from Oïl languages


text: Category:Jamaican Creole terms derived from Romance languages


text: Category:Jamaican Creole terms derived from Italic languages


text:
anosteocytic

Adjective

 * 1) Free from osteocytes

title: anosteocytic


text: αντικονφορμισμού

title: αντικονφορμισμού


text: αντικονφορμισμό

title: αντικονφορμισμό


text: αντικονφορμισμέ

title: αντικονφορμισμέ


text: αντικονφορμισμών

title: αντικονφορμισμών


text: αντικονφορμισμούς

title: αντικονφορμισμούς


text: αντικονφορμισμοί

title: αντικονφορμισμοί


text: αντικομφορμισμών

title: αντικομφορμισμών


text: αντικομφορμισμούς

title: αντικομφορμισμούς


text: αντικομφορμισμοί

title: αντικομφορμισμοί


text: αντικομφορμισμού

title: αντικομφορμισμού


text: αντικομφορμισμό

title: αντικομφορμισμό


text:
antheridiophore

Noun

 * 1)  A gametophore that bears antheridia (typically in a moss or liverwort)

title: antheridiophore


text: antheridiophores

title: antheridiophores


text: αντικομφορμισμέ

title: αντικομφορμισμέ


text:
αντικομφορμιστής

Noun

 * 1) nonconformist

title: αντικομφορμιστής


text:
anticercarial

Adjective

 * 1) That counters cercarias

title: anticercarial


text: елдер

title: елдер


text:
αντικομφορμίστρια

Noun

 * 1) nonconformist

title: αντικομφορμίστρια


text: αντικομφορμίστριας

title: αντικομφορμίστριας


text: αντικομφορμιστριών

title: αντικομφορμιστριών


text:
antigonococcal

Adjective

 * 1) That counters gonococci

title: antigonococcal


text: αντικομφορμίστριες

title: αντικομφορμίστριες


text: αντικομφορμιστές

title: αντικομφορμιστές


text: αντικομφορμιστών

title: αντικομφορμιστών


text: αντικομφορμιστή

title: αντικομφορμιστή


text:
antipreferred

Adjective

 * 1) Positively disliked

title: antipreferred


text: αντίκρια

title: αντίκρια


text:
հրկիզում

Etymology
From.

Noun

 * 1) arson, burning

title: հրկիզում


text:
antisynapsin

Adjective

 * 1)  That disrupts the action of synapsins

title: antisynapsin


text:
xillantli

Noun

 * 1) belly

title: xillantli


text:
दाह

Etymology
From the root.

Noun

 * 1) burning, combustion, conflagration, heat
 * 2) place of cremation
 * 3) glowing, redness (of the sky)
 * 4) cauterizing, cautery (of a wound)
 * 5) internal heat, fever

title: दाह


text:
arealization

Noun

 * 1) The development of areas (as in the brain) that have different function

title: arealization


text:
autaptically

Adverb

 * 1) In an autaptic manner

title: autaptically


text: autocovariation

title: autocovariation


text:
autograded

Adjective

 * 1) automatically graded

title: autograded


text:
autopick

Verb

 * 1) To pick (or select) automatically

title: autopick


text: autopicking

title: autopicking


text:
autopicked

Adjective

 * 1) picked (or selected) automatically

title: autopicked


text:
autoreception

Etymology
en

Noun

 * 1)  The action of an autoreceptor

title: autoreception


text:
αντικρυστής

Noun

 * 1)  influenced by the adverb

title: αντικρυστής


text:
autorefinement

Noun

 * 1) automatic refinement

title: autorefinement


text:
axosomal

Adjective

 * 1) Relating to an axosome

title: axosomal


text:
αντικριστής

Etymology
Stem αντικρισ- of verb, +.

Noun

 * 1) a stockjobber's assistant
 * also see
 * 1)  one who views, viewer

Usage notes

 * Rare spelling with upsilon αντικρυστής influenced by the adverb

title: αντικριστής


text: azetazolamide

title: azetazolamide


text:
politrickster

Noun

 * 1)  A crooked or devious politician, especially one who doesn't keep promises.

Etymology
From +.

Noun

 * 1) politrickster

title: politrickster


text: gāozhāo

title: gāozhāo


text:
αντικρίστρια

Noun

 * also see of
 * also see of

Usage notes

 * Rare spelling with upsilon αντικρύστρια. See.

title: αντικρίστρια


text:
妙招

Noun

 * 1) clever move; brilliant idea

title: 妙招


text: miàozhāo

title: miàozhāo


text:
June plum

Noun

 * 1)   or its fruit.

Noun

 * 1)  or its fruit; ambarella;.

title: June plum


text: αντικρύστρια

title: αντικρύστρια


text:
bezlotoxumab

Etymology
.

Noun

 * 1)  A particular monoclonal antitoxin antibody

title: bezlotoxumab


text:
yodhājīva

Noun

 * 1) warrior

title: yodhājīva


text: αντικριστριών

title: αντικριστριών


text: Category:Central Kurdish terms in Latin script


text: αντικρίστριες

title: αντικρίστριες


text: αντικρίστριας

title: αντικρίστριας


text: bilateria

title: bilateria


text:
bindosome

Noun

 * 1)  A component of the cell membrane of certain bacteria that bind sugars to proteins

title: bindosome


text: bindosomes

title: bindosomes


text:
biorient

Verb

 * 1) To undergo biorientation

title: biorient


text: blastcidine

title: blastcidine


text: blasticin

title: blasticin


text:
bregmoid

Adjective

 * 1)  Relating to bregmata

title: bregmoid


text:
brilacidin

Noun

 * 1)  A particular host-defence-protein-mimetic antibiotic

title: brilacidin


text:
bromoadenosine

Noun

 * 1)  A bromo derivative of adenosine; especially 8-bromoadenosine

title: bromoadenosine


text: duójiǔ

title: duójiǔ


text:
bromoenollactone

Noun

 * 1)  The lactone of a bromoenol, but especially E-6-(bromoethylene)tetrahydro-3-(1-naphthyl)-2H-pyran-2-one that is a selective inhibitor of phospholipase activity in macrophages

title: bromoenollactone


text:
bromoenol

Noun

 * 1)  The bromo derivative of an enol

title: bromoenol