উইকিঅভিধান
bnwiktionary
https://bn.wiktionary.org/wiki/%E0%A6%AA%E0%A7%8D%E0%A6%B0%E0%A6%A7%E0%A6%BE%E0%A6%A8_%E0%A6%AA%E0%A6%BE%E0%A6%A4%E0%A6%BE
MediaWiki 1.47.0-wmf.12
case-sensitive
মিডিয়া
বিশেষ
আলাপ
ব্যবহারকারী
ব্যবহারকারী আলাপ
উইকিঅভিধান
উইকিঅভিধান আলোচনা
চিত্র
চিত্র আলোচনা
মিডিয়াউইকি
মিডিয়াউইকি আলোচনা
টেমপ্লেট
টেমপ্লেট আলোচনা
সাহায্য
সাহায্য আলোচনা
বিষয়শ্রেণী
বিষয়শ্রেণী আলোচনা
পরিশিষ্ট
পরিশিষ্ট আলোচনা
ছন্দ
ছন্দ আলোচনা
থিসরাস
থিসরাস আলোচনা
উদ্ধৃতি
উদ্ধৃতি আলোচনা
TimedText
TimedText talk
মডিউল
মডিউল আলাপ
ইভেন্ট
ইভেন্ট আলোচনা
ষ
0
2386
514133
302271
2026-07-25T17:54:41Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309268-এর সাথে সংযোগ তৈরি করছি
514133
wikitext
text/x-wiki
{{Bengali character info}}
==ভূমিকা==
=== উচ্চারণ ===
*/মুর্ধোন্নো শ/
* {{অডিও|bn|LL-Q9610 (ben)-Titodutta-ষ.wav|অডিও}}
=== বর্ণনা ===
বাংলা বর্ণমালার ত্রিংশ বা ৩০তম ব্যঞ্জনবর্ণ এবং মূর্ধা থেকে উচ্চার্য অঘোষ অল্পপ্রাণ উষ্ম ধ্বনির দ্যোতক। (বাংলায় শ-এর মতো উচ্চারিত।)
==== ব্যবহার ====
====বৈশিষ্ট্য====
অঘোষ অল্পপ্রাণ উষ্ম ধ্বনি।
[[বিষয়শ্রেণী:বাংলা ব্যঞ্জনবর্ণ]]
{{লে|L309268|না}}
o8jlj0w9i8p9t4auerb336j3qg2itdg
514134
514133
2026-07-25T17:54:49Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309267-এর সাথে সংযোগ তৈরি করছি
514134
wikitext
text/x-wiki
{{Bengali character info}}
==ভূমিকা==
=== উচ্চারণ ===
*/মুর্ধোন্নো শ/
* {{অডিও|bn|LL-Q9610 (ben)-Titodutta-ষ.wav|অডিও}}
=== বর্ণনা ===
বাংলা বর্ণমালার ত্রিংশ বা ৩০তম ব্যঞ্জনবর্ণ এবং মূর্ধা থেকে উচ্চার্য অঘোষ অল্পপ্রাণ উষ্ম ধ্বনির দ্যোতক। (বাংলায় শ-এর মতো উচ্চারিত।)
==== ব্যবহার ====
====বৈশিষ্ট্য====
অঘোষ অল্পপ্রাণ উষ্ম ধ্বনি।
[[বিষয়শ্রেণী:বাংলা ব্যঞ্জনবর্ণ]]
{{লে|L309268|না}}
{{লে|L309267|না}}
7rwz91gkdiam8rkk6yzhw6xlmj2c4b4
হাতি
0
3224
514107
502024
2026-07-25T17:30:29Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309068-এর সাথে সংযোগ তৈরি করছি
514107
wikitext
text/x-wiki
=={{langname|bn}}==
===বিশেষ্য===
{{বিশেষ্য|bn}}
[[চিত্র:Elephant near ndutu.jpg|thumb|right|200px|''হাতি'']]
# বৃহত্তম স্থলচর স্তন্যপায়ী।
# প্রোবোসিডিয়া (শূণ্ডধারী) বর্গের (order proboscidea) একমাত্র [[জীবিত]] বংশধর (জাতভাই ছিল ম্যামথ ইত্যাদি যারা বিলুপ্ত)।
# শুঁড়কে হাত(হস্ত/কর)-এর মত ব্যবহার করতে পারার জন্য এর নাম "হাতি"("হস্তী"/"করী")।
====সমার্থক শব্দ====
# গজ
=== অনুবাদ ===
{{অনুবাদ-শীর্ষ}}
* [[ইংরেজি]]: [[elephant]]
* [[তামিল]]: [[யானை]] (উচ্চারণ: যানৈ)
{{অনুবাদ-নীচ}}
{{লে|L309068|না}}
[[বিষয়শ্রেণী:bn:প্রাণিবিজ্ঞান]]
[[বিষয়শ্রেণী:২-অক্ষর বিশিষ্ট বাংলা শব্দ]]
{{লে|L1421699}}
[[বিষয়শ্রেণী:জীববিজ্ঞান]]
[[বিষয়শ্রেণী:বিজ্ঞান]]
sd8ik1sfshid30c3e28aio06a7g0mfe
খুলনা
0
6131
514029
148133
2026-07-25T14:09:11Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308665-এর সাথে সংযোগ তৈরি করছি
514029
wikitext
text/x-wiki
{{লে|L308665}}
d9d9uk1i47r9ul7l0raris83tjzdzqb
হ্যাংলামি
0
7004
514094
148604
2026-07-25T16:58:24Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309018-এর সাথে সংযোগ তৈরি করছি
514094
wikitext
text/x-wiki
{{লে|L309018|meaning=
#হীন ভাবে লোভ প্রকাশ
{{ux|bn|এতো হ্যাংলামি করিস কেন রে?}}
}}
==সম্পর্কিত==
[[হ্যাংলা]]
tfqvtz69ges3ry4ska3qzo967lecufc
হ্যাঁচকা
0
7038
514096
136863
2026-07-25T16:58:46Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309020-এর সাথে সংযোগ তৈরি করছি
514096
wikitext
text/x-wiki
{{লে|L309020}}
5gxr66vhmp96jfm8w4p8tcjmbsx1mch
ষণ্ড
0
7879
514123
148726
2026-07-25T17:50:36Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309120-এর সাথে সংযোগ তৈরি করছি
514123
wikitext
text/x-wiki
{{লে|L309120}}
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
#[[ষাঁড়]];
# স্বাধীনভাবে বিচরণকারী বৃষ; ধর্ম্মের ষাঁড়;
# ষণ্ড; নপুংসক;
# যোনিরোগবিশেষ;
# দৈত্যগুরু শুক্রাচার্য্যের পুত্র; প্রহ্লাদের শিক্ষাগুরু।
[[বিষয়শ্রেণী:২-অক্ষর বিশিষ্ট বাংলা শব্দ]]
atjx9eawp1xpuhpyqnwzwnozn102qaw
ষত্ববিধান
0
7889
514121
88293
2026-07-25T17:49:07Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309109-এর সাথে সংযোগ তৈরি করছি
514121
wikitext
text/x-wiki
{{লে|L309109|meaning=
[[স]] স্থলে [[ষ]] হওয়ার ব্যাকরণ নির্দ্দিষ্ট নিয়ম।}}
n1uylz5g56wlxu1k38ekbk7m7ann6il
ভোলা
0
9010
514042
87659
2026-07-25T14:44:01Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308687-এর সাথে সংযোগ তৈরি করছি
514042
wikitext
text/x-wiki
{{লে|L308687}}
233a337buywixio63l6vxtei2kd957c
বগুড়া
0
9192
514053
148382
2026-07-25T14:53:22Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308683-এর সাথে সংযোগ তৈরি করছি
514053
wikitext
text/x-wiki
{{লে|L308683}}
5931wl3cstnet5bd3ie3tnaov0gl1jc
পাবনা
0
9194
514038
447042
2026-07-25T14:18:57Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308681-এর সাথে সংযোগ তৈরি করছি
514038
wikitext
text/x-wiki
{{লে|L308681}}
jv3mjeqotgn47mk9s51myse3wt1xuz5
কুমিল্লা
0
9195
514028
148109
2026-07-25T14:08:29Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308672-এর সাথে সংযোগ তৈরি করছি
514028
wikitext
text/x-wiki
{{লে|L308672}}
b1rqvitgvnejb9xha4zmdyva0prc05s
ঔষধীয়
0
14766
514145
295287
2026-07-25T17:58:05Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309286-এর সাথে সংযোগ তৈরি করছি
514145
wikitext
text/x-wiki
{{লে|L309286|ব্যুৎপত্তি=
* [[সংস্কৃত]] জাত।
}}
5rq3mrq0hgaaj9smy7t9kj95pms6j8w
ঔষধালয়
0
14768
514146
446101
2026-07-25T18:02:08Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309287-এর সাথে সংযোগ তৈরি করছি
514146
wikitext
text/x-wiki
{{লে|L309287|ব্যুৎপত্তি=
সংস্কৃত [[औषधालय]] থেকে।
}}
bj8j8hwa9udnnfsllpemslhbcx7kzfu
ষ্ঠীবন
0
15218
514113
88350
2026-07-25T17:32:38Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309077-এর সাথে সংযোগ তৈরি করছি
514113
wikitext
text/x-wiki
{{লে|L309077}}
|ব্যুৎপত্তি=
[[সংস্কৃত]] “√ ষ্ঠিব্”-এর সাথে ‘অন’ যুক্ত হয়ে।|meaning=
# [[থুতু]]}}
7199dhc6vn5wxot0o100d4u5axyux1u
514115
514113
2026-07-25T17:32:56Z
Redmin
6857
514115
wikitext
text/x-wiki
{{লে|L309077
|ব্যুৎপত্তি=
[[সংস্কৃত]] “√ ষ্ঠিব্”-এর সাথে ‘অন’ যুক্ত হয়ে।|meaning=
# [[থুতু]]}}
f5tgt599n5kddj1rznchsxzlb14zv7u
উইকিঅভিধান:প্রশাসকদের আলোচনাসভা
4
25943
514063
512365
2026-07-25T16:19:21Z
Shadabgdg
14931
/* Invitation to Participate in Kerala Culture Month 2026 */ নতুন অনুচ্ছেদ
514063
wikitext
text/x-wiki
#পুনর্নির্দেশ [[উইকিঅভিধান:আলোচনাসভা]]
== WikiConference India 2026: Call for Submissions and Self-funded applications ==
প্রিয় সম্প্রদায় সদস্যবৃন্দ, আমরা আনন্দের সাথে জানাচ্ছি যে, ‘উইকিকনফারেন্স ইন্ডিয়া ২০২৬’-এর জন্য নিজস্ব অর্থায়নে নিবন্ধন এবং প্রস্তাবনা জমা দেওয়ার প্রক্রিয়া এখন শুরু হয়েছে। কেরালার কোচিতে, ২০২৬ সালের ৪ঠা থেকে ৬ই সেপ্টেম্বর উইকিকনফারেন্স ইন্ডিয়া ২০২৬ অনুষ্ঠিত হবে। এই সম্মেলনে ভারত ও দক্ষিণ এশিয়া জুড়ে ছড়িয়ে থাকা উইকিমিডিয়ান, কমিউনিটি লিডার, ডেভেলপার, গবেষক এবং উন্মুক্ত জ্ঞানের অনুরাগীরা পারস্পরিক সংযোগ স্থাপন করা, যৌথভাবে কাজ করা ও অভিজ্ঞতা বিনিময়ের উদ্দেশ্যে একত্রিত হবেন।
উইকিকনফারেন্স ইন্ডিয়া ২০২৬-এর মূল প্রতিপাদ্য হলো: “জ্ঞানের উন্মুক্ত ভাণ্ডারের নতুন রূপায়ন: ক্রমবিকাশমান উইকিমিডিয়া ইকোসিস্টেমে সম্প্রদায়ের নেতৃত্ব।” উইকিমিডিয়া আন্দোলন যখন কৃত্রিম বুদ্ধিমত্তা এবং জ্ঞান সৃষ্টির নতুন মাধ্যমগুলির উত্থানসহ দ্রুত প্রযুক্তিগত পরিবর্তনের মধ্যে দিয়ে যাচ্ছে, তখন এই সম্মেলনের লক্ষ্য হলো—কমিউনিটি নেতৃত্ব, জ্ঞানের সমতা, আঞ্চলিক ভাষা, মুক্ত জ্ঞান এবং ভারত ও দক্ষিণ এশিয়ায় উইকিমিডিয়ার ভবিষ্যৎ নিয়ে আলোচনার সুযোগ তৈরি করা। স্ব-অর্থায়িত নিবন্ধন স্ব-অর্থায়িত নিবন্ধনের আবেদন প্রক্রিয়াটি এখন Pretix-এ চালু হয়েছে। নিবন্ধন ফর্ম: [৪]
বিস্তারিত তথ্য এবং যোগ্যতার শর্তাবলি: [৫]
প্রস্তাবনা জমা দেওয়া প্রস্তাবনা জমা দেওয়ার প্রক্রিয়াটি এখন Eventyay-তে চালু হয়েছে। আমরা কর্মশালা, আলোচনা, প্যানেল সেশন, অংশগ্রহণমূলক সেশন, লাইটনিং টক এবং পোস্টার উপস্থাপনার জন্য প্রস্তাবনা আহ্বান করছি। আপনি একজন অভিজ্ঞ অবদানকারী হোন কিংবা কমিউনিটির নতুন সদস্য—আপনার ধারণা, অভিজ্ঞতা ও শিক্ষা এই সম্মেলনের কর্মসূচিকে রূপ দিতে এবং এই আন্দোলনের গুরুত্বপূর্ণ আলোচনাগুলোতে অবদান রাখতে সহায়তা করতে পারে। বিস্তারিত তথ্য ও নির্দেশিকা: [৬]
জমা দেওয়ার শেষ সময়সীমা: [১৫ই জুলাই ২০২৬] অংশগ্রহণের বিস্তারিত তথ্য, সময়সূচি, সম্মেলনের সর্বশেষ হালনাগাদ এবং জমা দেওয়ার নির্দেশনাসহ ‘উইকিকনফারেন্স ইন্ডিয়া ২০২৬’ বিষয়ক পূর্ণাঙ্গ তথ্যের জন্য অনুগ্রহ করে আনুষ্ঠানিক ঘোষণাটি দেখুন: বিস্তারিত ঘোষণা: [৭] আমরা সম্প্রদায় সদস্যদের উৎসাহিত করছি নিবন্ধন করতে, প্রস্তাবনা জমা দিতে এবং তাঁদের পরিচিত মহলে এই ঘোষণাটি ছড়িয়ে দিতে। শুভেচ্ছান্তে, উইকিকনফারেন্স ইন্ডিয়া ২০২৬ আয়োজনকারী দল
[1] https://meta.wikimedia.org/wiki/WikiConference_India_2026 [2] https://meta.wikimedia.org/wiki/WikiConference_India_2026/Registration [3] https://pretix.eu/wikimedia-events/WCI2026/ [4] https://meta.wikimedia.org/wiki/WikiConference_India_2026/Programme/Submissions [5] https://diff.wikimedia.org/2026/06/26/shape-the-future-call-for-submissions-open-for-wikiconference-india-2026/ [[ব্যবহারকারী:Amrit Sufi|Amrit Sufi]] ([[ব্যবহারকারী আলাপ:Amrit Sufi|আলাপ]]) ১০:১২, ৩০ জুন ২০২৬ (ইউটিসি)
== Invitation to Participate in Kerala Culture Month 2026 ==
Dear Wikimedia Contributors,
We are excited to announce '''[https://meta.wikimedia.org/wiki/Kerala_Culture_Month_2026 Kerala Culture Month 2026]''', a collaborative campaign launched in conjunction with '''[https://meta.wikimedia.org/wiki/WikiConference_India_2026 WikiConference India 2026]'''. This initiative aims to expand and enhance content about Kerala across all Wikimedia projects, creating a comprehensive, open-access knowledge base.
'''Campaign Focus:'''
* Expand Wikipedia articles about Kerala in multiple languages
* Improve content quality with citations, images, and comprehensive information
* Populate Wikimedia Commons with freely licensed Kerala media
* Enrich Wikidata with structured information about Kerala-related topics
We invite you to contribute by writing new articles, enhancing existing ones, uploading media, or organizing data on Wikidata. Whether you're an experienced editor or new to Wikimedia, your participation matters.
For more information and to get involved, visit the campaign page: https://meta.wikimedia.org/wiki/Kerala_Culture_Month_2026 on your preferred Wikimedia project.
Best regards,
''Communications Team, WCI 2026''
[[ব্যবহারকারী:Shadabgdg|Shadabgdg]] ([[ব্যবহারকারী আলাপ:Shadabgdg|আলাপ]]) ১৬:১৯, ২৫ জুলাই ২০২৬ (ইউটিসি)
l7k6k267mz00twj6xilfeae7yd8h78x
মডিউল:আভিধানিক উপাত্ত
828
50158
514026
513941
2026-07-25T12:29:00Z
Redmin
6857
514026
Scribunto
text/plain
local p = {}
local i18n = require('মডিউল:আভিধানিক উপাত্ত/i18n')
local references = require('মডিউল:উইকিউপাত্ত তথ্যসূত্র বিন্যাসকরণ').format
local getArgs = require('Module:Arguments').getArgs
local wb = mw.wikibase
local ustring = mw.ustring
local html = mw.html
local mw_lang = mw.language
local entity_cache = {}
local reference_cache = {}
local forms
local lang_code
local lex_cat
local matched_lemma
local lang_id
local function wrapStringInWikilinks(str)
local exceptions = i18n.nolinks
local result = str:gsub('(%S+)', function(token)
local word, trailing_char = token:match('^(.-)([;,.:!?]*)$')
local wrapped = word:gsub('[^(-/]+', function(part)
if exceptions[part] then
return part
else
return '[[' .. mw.text.nowiki(part) .. '#' .. i18n['content_lang_name'] .. '|' .. mw.text.nowiki(part) .. ']]'
end
end)
return wrapped .. trailing_char
end)
return result
end
local function serializeTable(val, name, skipnewlines, depth) -- https://stackoverflow.com/a/6081639
skipnewlines = skipnewlines or false
depth = depth or 0
local tmp = string.rep(" ", depth)
if name then tmp = tmp .. name .. " = " end
if type(val) == "table" then
tmp = tmp .. "{" .. (not skipnewlines and "\n" or "")
for k, v in pairs(val) do
tmp = tmp .. serializeTable(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and "\n" or "")
end
tmp = tmp .. string.rep(" ", depth) .. "}"
elseif type(val) == "number" then
tmp = tmp .. tostring(val)
elseif type(val) == "string" then
tmp = tmp .. string.format("%q", val)
elseif type(val) == "boolean" then
tmp = tmp .. (val and "true" or "false")
else
tmp = tmp .. "\"[inserializable datatype:" .. type(val) .. "]\""
end
return tmp
end
-- Use this to safely expand templates when you are not sure that they exist.
local function safeExpand(frame, title, args)
local _, result = pcall(function()
return frame:expandTemplate{ title = title, args = args }
end)
if result:find('does not exist') then -- expandTemplate{} doesn't seem to throw any error that can be handled with pcall() so string search is the only viable option.
return nil
end
return result
end
local function checkTitleCodePointInRange(title, start_point, end_point)
return ustring.find( title, '[' ..ustring.char(start_point) .. '-' .. ustring.char(end_point) .. ']' )
end
local function getLanguageForCategories(title)
-- বিশেষ ভাষার জন্য
if lang_id == 'Q11051' then -- হিন্দি/উর্দু
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- উর্দু
lang_id = 'Q11051ur'
elseif checkTitleCodePointInRange(title, 0x0900, 0x097f) then -- হিন্দি
lang_id = 'Q11051hi'
end
elseif lang_id == 'Q58635' then -- পাঞ্জাবি
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- শাহমুখী
lang_id = 'Q58635pnb'
elseif checkTitleCodePointInRange(title, 0x0a00, 0x0a7f) then -- গুরুমুখী
lang_id = 'Q58635pa'
end
elseif lang_id == 'Q56356571' then -- নয়া ফার্সি ভাষা
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- ফার্সি (ইরান/আফগানিস্তান)
lang_id = 'Q56356571fa'
elseif checkTitleCodePointInRange(title, 0x0400, 0x04ff) then -- তাজিক
lang_id = 'Q56356571tg'
end
elseif lang_id == 'Q256' then
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then
lang_id = 'Q56356571ota'
else
lang_id = 'Q56356571tr'
end
end
return lang_id
end
local function getEntity(id)
if entity_cache[id] == nil then
entity_cache[id] = wb.getEntity(id) or error('Invalid ID provided: ' .. id)
end
return entity_cache[id] ~= false and entity_cache[id] or nil
end
-- Use this function to get the label of an item even if that item does not have any label in the wiki's content language or English.
local function getLabel(id)
if id == 'Q11051hi' then
return 'হিন্দি'
elseif id == 'Q11051ur' then
return 'উর্দু'
elseif id == 'Q56356571fa' then
return 'ফার্সি'
elseif id == 'Q56356571tg' then
return 'তাজিক'
elseif id == 'Q58635pa' or id == 'Q58635pnb' then
return 'পাঞ্জাবি'
elseif id == 'Q256tr' then
return 'তুর্কি'
elseif id == 'Q256ota' then
return 'উসমানীয় তুর্কি'
end
local label = wb.getLabel(id)
if label then
return label
end
local labels = getEntity(id).labels
if not labels then
return id
end
for _, v in pairs(labels) do
if v and v.value then
return v.value
end
end
end
local function getReference(id, reference)
local out_id = nil
local url_value
if reference_cache[id] == nil then
local ref_text = references(reference, wb, mw_lang, i18n['content_lang_code'], i18n['wikipedia'])
if reference.snaks then
if reference.snaks['P248'] then
for _, snak in pairs(reference.snaks['P248']) do
if snak.datavalue and snak.datavalue.value.id == 'Q428' then -- কুরআন
ref_text = ustring.gsub(ref_text, 'নামক অনুচ্ছেদ', 'নং আয়াত')
break
end
end
end
if reference.snaks['P854'] then
local snak = reference.snaks['P854'][1]
if snak.datavalue then
url_value = snak.datavalue.value
end
end
end
if url_value then
ref_text = ref_text .. ', [' .. url_value .. ' সংযোগ]'
end
reference_cache[id] = ref_text
else
out_id = id
end
return {out_id, reference_cache[id]}
end
-- Returns the Wiktionary language code for a lexeme entity or nil, in the latter case, getLemmas() can be relied on to fetch the language code by stripping extraneous bits from the 'language' string as necessary
local function getLexemeLanguageCode(lexeme)
local lang_item_id = lexeme:getLanguage()
local lang_entity = getEntity(lang_item_id)
for i, statement_property in ipairs({'P305','P424', 'P220'}) do -- আইইটিএফ ভাষা ট্যাগ, উইকিমিডিয়া ভাষা কোড, আইএসও ৬৩৯-৩
local statements = lang_entity:getBestStatements(statement_property)
if statements[1] then
local code = statements[1].mainsnak.datavalue.value
if code == 'hr' then
return 'sh'
elseif code == 'pan' then
return 'pa'
else
return code
end
end
end
end
local function getLexemeLanguageCodeForEtymology(lexeme)
local lang_item_id = lexeme:getLanguage()
if lang_item_id == 'Q56356571' then
return 'fa' -- @TODO: Implement a proper solution
end
return getLexemeLanguageCode(lexeme)
end
-- Return the first form of the lexeme which has exactly the given grammatical feature.
local function formWithSingleGrammaticalFeature( item_id )
for i = 1, #forms do
local grammaticalFeatures = forms[i]:getGrammaticalFeatures()
if #grammaticalFeatures == 1 and grammaticalFeatures[1] == item_id then
return forms[i]
end
end
return nil
end
local function getArticleLinkTemplate(frame, stmt_value)
local template = ''
local sitelink = getEntity(stmt_value):getSitelink(i18n['wikipedia'])
if sitelink then
template = frame:expandTemplate{
title=i18n['template_wikipedia'],
args={sitelink}
}
end
return template
end
local function getArticleLinks(frame, sense )
local article_links = ''
for i, stmt in pairs(sense:getAllStatements('P5137')) do -- এই অর্থের জন্য আইটেম
article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id)
end
for i, stmt in pairs(sense:getAllStatements('P9970')) do -- এই অর্থের জন্য বিধেয়
article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id)
end
return article_links
end
-- @TODO: Generalise
local function expandTemplateForProperty(frame, object, property, template)
local lemmas = {}
local n = 0
for _, stmt in pairs(object:getAllStatements(property)) do
local lex = wb.lexeme.splitLexemeId(stmt.mainsnak.datavalue.value.id)
if lex then
lex = getEntity(lex)
n = n + 1
lemmas[n] = lex:getLemma(lang_code)
end
end
if not lang_code or n == 0 then
return ''
end
-- Build args: first lang_code, then lemmas
local args = {lang_code}
for i = 1, n do
args[#args + 1] = lemmas[i]
end
return frame:expandTemplate{
title = template,
args = args
}
end
local function getExternalLinks( entity ) -- T418639
local external_links = {}
if entity.claims == nil then return external_links end
local formatter_urls = require('মডিউল:আভিধানিক উপাত্ত/urls').formatter_urls
for property_id, statements in pairs(entity.claims) do
local formatter_url = formatter_urls[property_id]
if formatter_url then
local property_source = wb.getBestStatements(property_id, 'P9073')
local source_name
if next(property_source) then
source_name = getLabel(property_source[1].mainsnak.datavalue.value.id)
or property_source[1].mainsnak.datavalue.value.id
else
source_name = getLabel(property_id) or property_id
end
for i = 1, #statements do
local stmt = statements[i]
if stmt.mainsnak.datavalue then
local formatted_link = ustring.gsub(
ustring.gsub(formatter_url, '$1', stmt.mainsnak.datavalue.value),
' ', '+'
)
table.insert(external_links,
'[' .. formatted_link .. ' ' .. source_name .. ']')
end
end
end
end
return external_links
end
p.getExternalLinks = getExternalLinks -- রেখে দিন যাতে ডিবাগিং সম্ভব হয়
local function heading_level(text, level)
return '<h' .. level .. '>' .. ' ' .. text .. ' ' .. '</h' .. level .. '>'
end
local function termSpan( term )
local text = term[1]
local lang = term[2]
local dir = mw_lang.new( lang ):getDir()
local span = html.create( 'span' )
span:attr( 'lang', lang )
:attr( 'dir', dir )
:wikitext( text )
return tostring( span )
end
local function getLemmata( current_lexeme )
local lemma_string = ''
for i, rep in pairs(current_lexeme:getLemmas()) do
if lemma_string == '' then
lemma_string = termSpan(rep)
else
lemma_string = lemma_string .. '/' .. termSpan(rep)
end
end
return lemma_string
end
local function getLinkedLemmata(lexeme, frame)
local lemma_string = ''
local lang
for i, rep in pairs(lexeme:getLemmas()) do
lang = getLexemeLanguageCode(lexeme)
if lang == nil then
lang = string.gsub(rep[2], '-%S+', '')
end
if lemma_string == '' then
lemma_string = frame:expandTemplate{title='link', args={lang, rep[1]}}
else
lemma_string = lemma_string .. '/' .. frame:expandTemplate{title='link', args={lang, rep[1]}}
end
end
return lemma_string
end
local function getExamples( current_lexeme, sense_id, references_seen )
local examples = html.create('dl')
local example_text, example_lang, example_form, example_str
for i, stmt in pairs(current_lexeme:getAllStatements('P5831')) do -- ব্যবহারের উদাহরণ
if stmt.qualifiers and stmt.qualifiers['P6072'] and stmt.qualifiers['P6072'][1].datavalue.value.id == sense_id then -- বিষয়ে লেক্সিমের অর্থ
example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>')
example_lang = stmt.mainsnak.datavalue.value.language
local example_form_strs = {}
if stmt.qualifiers['P1810'] then
table.insert(example_form_strs, stmt.qualifiers['P1810'][1].datavalue.value)
elseif stmt.qualifiers['P5830'] then
example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- বিষয়ে লেক্সিমের রূপ
for _, rep in pairs(example_form:getRepresentations()) do
table.insert(example_form_strs, rep[1])
end
end
for _, example_form_str in pairs(example_form_strs) do
local new_example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''")
if new_example_text ~= example_text then
example_str = termSpan({new_example_text, example_lang})
break
end
example_text = new_example_text
end
if example_str == nil then
example_str = termSpan({example_text, example_lang})
end
local reference_text = ''
if stmt.references then
for j, reference in pairs(stmt.references) do
table.insert(references_seen, reference.hash)
local got_reference = getReference(reference.hash, reference)
reference_text = reference_text .. '\n\n' .. got_reference[2]
end
end
if example_str then
examples:tag('dd'):wikitext("''" .. example_str .. "''")
if reference_text ~= '' then
examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text)
end
end
end
end
for i, stmt in pairs(wb.getAllStatements(sense_id, 'P5831')) do -- ব্যবহারের উদাহরণ
example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>')
example_lang = stmt.mainsnak.datavalue.value.language
local example_form_str = nil
if stmt.qualifiers then
if stmt.qualifiers['P5830'] then
example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- subject lexeme form
end
if stmt.qualifiers['P1810'] then
example_form_str = stmt.qualifiers['P1810'][1].datavalue.value
end
end
if example_form and example_form_str == nil then
example_form_str = example_form:getRepresentation(i18n['content_lang_code'])
end
if example_form and example_form_str == nil then
example_form_str = example_form:getRepresentations()[1][1]
end
if example_form_str then
example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''")
end
example_str = termSpan({example_text, example_lang})
local reference_text = ''
if stmt.references then
for j, reference in pairs(stmt.references) do
table.insert(references_seen, reference.hash)
local got_reference = getReference(reference.hash, reference)
reference_text = reference_text .. '\n\n' .. got_reference[2]
end
end
if example_str then
examples:tag('dd'):wikitext("''" .. example_str .. "''")
if reference_text ~= '' then
examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text)
end
end
end
return { tostring(examples) , references_seen }
end
-- This calls frame:preprocess() instead of :callParserFunction() because the latter does not work for Wikifunctions function calls yet (see https://www.wikifunctions.org/wiki/Wikifunctions:Embedded_function_calls).
local function callWikifunctionsFunction(args, frame)
return frame:preprocess('{{#function:' .. args .. '}}') .. i18n.tocatlink('উইকিফাংশন্স-এর ফাংশন ব্যবহার করা পাতা')
end
local function getOneValueForProperty(object, property)
local val
local stmts = object:getAllStatements(property)
if #stmts ~= 0 then
val = stmts[1].mainsnak.datavalue.value
end
return val
end
local function getLastValueForProperty(object, property)
local val, count
local stmts = object:getAllStatements(property)
for i, j in ipairs(stmts) do
count = i
end
if count then
val = stmts[count].mainsnak.datavalue.value
end
return val
end
local function getTranslations(frame, senses)
if #senses == 0 then
return nil
end
local all_translations = {}
local wmlang, item, label
for _, sense in pairs(senses) do
local translation_set = {}
local gloss = sense:getGloss(i18n['content_lang_code'])
if lex_cat ~= 'Q34698' then
item = getOneValueForProperty(sense, 'P5137')
if item then
item = item.id
label = getLabel(item)
end
end
if item then
wmlang = require("Module:wikimedia languages")
end
for _, stmt in pairs(sense:getAllStatements('P5972')) do
local translation = stmt.mainsnak.datavalue.value.id
local lexeme_id = wb.lexeme.splitLexemeId(translation)
local trans_lexeme = getEntity(lexeme_id)
local lang_name = getLabel(trans_lexeme:getLanguage())
local trans_code = getLexemeLanguageCode(trans_lexeme)
if trans_code then
table.insert(translation_set, lang_name .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={trans_code, getLinkedLemmata(trans_lexeme, frame) .. '<br/>'}})
else
table.insert(translation_set, lang_name .. ': ' .. getLinkedLemmata(trans_lexeme, frame) .. '<br/>' .. i18n.trans_category(lang_name))
end
end
if item then
for _, v in pairs(getEntity(item).labels) do
if string.find(v.language, '-') == nil then -- @TODO: Implement deduplication of translation and get rid of this check
local lang = wmlang.getByCode(v.language)
local wikt = lang:getWiktionaryLanguage()
if wikt:hasType('regular') then
table.insert(translation_set, getLabel(wikt:getWikidataItem()) .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={wikt:getCode(), v.value .. '<br/>'}})
end
end
end
end
if #translation_set > 0 then
local block = frame:expandTemplate{ title = i18n['template_trans-top'], args = { gloss or label } }
block = block .. table.concat(translation_set, '\n') .. frame:expandTemplate{ title = i18n['template_trans-bottom'] }
table.insert(all_translations, block)
end
end
if #all_translations == 0 then
return nil
end
return heading_level(i18n['heading_translation'], 4) .. ' \n' .. table.concat(all_translations, '\n')
end
local createicon = function(langcode, entityID, propertyID)
langcode = langcode or ""
propertyID = propertyID or ""
local icon = " <span class='penicon autoconfirmed-show'>[["
-- " <span data-bridge-edit-flow='overwrite' class='penicon'>[[" -> enable Wikidata Bridge
.. "File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt="
.. i18n['edit_wikidata']
.. "|link=https://www.wikidata.org/entity/" .. entityID
if langcode ~= "" then icon = icon .. "?uselang=" .. langcode end
if propertyID ~= "" then icon = icon .. "#" .. propertyID end
icon = icon .. "|" .. i18n['edit_wikidata'] .. "]]</span>"
return icon
end
local function getMeanings(frame, args, current_lexeme, senses, references_seen, language_name)
if #senses == 0 then
return {createicon(i18n['content_lang_code'], current_lexeme:getId()) .. "''" .. i18n['text_category_rfdef'] .. "''" .. i18n.tocatlink(i18n['category_rfdef']), references_seen}
end
local meanings = html.create( 'ol' )
local idlinkset = {}
for i, sense in pairs(senses) do
local item_label_gloss_parts = {}
local gloss_text_parts = {}
local main_gloss_text = frame:expandTemplate{
title=i18n['template_anchor'],
args={sense:getId()}
}
local specifiers = {}
for k, property_id in ipairs({'P6084', 'P6191', 'P9488'}) do -- অবস্থান যেখানে শব্দার্থ ব্যবহৃত, যে রীতিতে শব্দার্থ ব্যবহৃত হয়, যে ক্ষেত্রে ব্যবহৃত
for _, stmt in pairs(sense:getAllStatements(property_id)) do
local stmt_value = stmt.mainsnak.datavalue.value.id
local reference_text = ''
local refs = stmt.references
if refs then
for j, reference in pairs(refs) do
table.insert(references_seen, reference.hash)
local got_reference = getReference(reference.hash, reference)
reference_text = reference_text .. '\n\n' .. frame:extensionTag('ref', got_reference[2])
end
end
local val = getLabel(stmt_value)
table.insert(specifiers, val .. reference_text)
if property_id == 'P9488' and lang_code ~= nil then
table.insert(item_label_gloss_parts, i18n.tocatlink(lang_code .. ':' .. val))
end
end
end
if #specifiers > 0 then
main_gloss_text = main_gloss_text .. "(''" .. table.concat(specifiers, "'', ''") .. "'') "
end
local gloss = sense:getGloss( i18n['content_lang_code'] )
if gloss then
main_gloss_text = main_gloss_text .. wrapStringInWikilinks(gloss)
if gloss:match('^প্রদত্ত%s*(%S-)%s*নাম$') then -- given names
main_gloss_text = main_gloss_text .. i18n.tocatlink(language_name .. ' ' .. i18n['category_given_names'])
end
else
local other_gloss_text, other_gloss_lang, item_label
local stmt_value = getOneValueForProperty(sense, 'P5137')
if stmt_value then
stmt_value = stmt_value.id
item_label = getLabel(stmt_value)
end
if item_label then
table.insert(item_label_gloss_parts, '[[:d:' .. stmt_value .. '|' .. item_label .. ']]')
end
if #item_label_gloss_parts > 0 then
other_gloss_text = table.concat(item_label_gloss_parts, '; ')
end
if other_gloss_text == nil then
for _, fallback_lang in ipairs(mw_lang.getFallbacksFor( i18n['content_lang_code'] )) do
if sense:getGloss( fallback_lang ) then
other_gloss_text, other_gloss_lang = sense:getGloss( fallback_lang )
end
end
if other_gloss_lang == nil then
local glosses = sense:getGlosses()
for _, gloss in pairs(glosses) do
other_gloss_text = gloss[1]
other_gloss_lang = gloss[2]
break
end
end
main_gloss_text = main_gloss_text .. other_gloss_text .. "<sup><em>" .. mw_lang.fetchLanguageName(other_gloss_lang, i18n['content_lang_code']) .. "</em></sup>"
else
main_gloss_text = main_gloss_text .. "''" .. other_gloss_text .. "''"
end
main_gloss_text = main_gloss_text .. i18n.tocatlink(i18n['category_rfdef_equivalent'])
end
local synonym = expandTemplateForProperty(frame, sense, 'P5973', i18n['template_synonym'])
if synonym ~= '' then
main_gloss_text = main_gloss_text .. ' <br/> ' .. synonym
end
local antonym = expandTemplateForProperty(frame, sense, 'P5974', i18n['template_antonym'])
if antonym ~= '' then
main_gloss_text = main_gloss_text .. ' <br/> ' .. antonym
end
local hypernym = expandTemplateForProperty(frame, sense, 'P6593', i18n['template_hypernym'])
if hypernym ~= '' then
main_gloss_text = main_gloss_text .. ' <br/> ' .. hypernym
end
if lex_cat == 'Q1084' or lex_cat == 'Q147276' then -- noun or proper noun
local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-noun'])
main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym
elseif lex_cat == 'Q34698' then
local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-adj'])
main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym
end
table.insert(gloss_text_parts, main_gloss_text .. createicon(i18n['content_lang_code'], sense:getId()))
for _, stmt in pairs(sense:getAllStatements('P8394')) do -- টিপ্পনীর উদ্ধৃতি
local gloss_quote = termSpan({stmt.mainsnak.datavalue.value.text, stmt.mainsnak.datavalue.value.language})
if stmt.references[1] then
local got_reference = getReference ( stmt.references[1].hash, stmt.references[1] )
gloss_quote = '"' .. gloss_quote .. '" ' .. got_reference[2]
end
table.insert(references_seen, stmt.references[1].hash)
table.insert(gloss_text_parts, frame:extensionTag('ref', gloss_quote))
end
for _, stmt in pairs(sense:getAllStatements('P1343')) do -- বর্ণিত উৎস
-- TODO: do away with making fake reference objects
local fake_reference = { ['snaks'] = {} }
fake_reference.snaks['P248'] = { [1] = stmt.mainsnak }
local qualifiers_order = stmt['qualifiers-order']
if qualifiers_order then
for _, k in ipairs(qualifiers_order) do fake_reference.snaks[k] = stmt.qualifiers[k] end
end
fake_reference.hash = mw.hash.hashValue('sha3-512', serializeTable(fake_reference))
table.insert(references_seen, fake_reference.hash)
local got_reference = getReference(fake_reference.hash, fake_reference)
if got_reference[1] == nil then
table.insert(gloss_text_parts, frame:extensionTag('ref', got_reference[2], {name = fake_reference.hash}))
else
table.insert(gloss_text_parts, frame:extensionTag{name = 'ref', content='', args = {name = got_reference[1]}})
end
end
local first_sense_image = ''
local sense_images = sense:getAllStatements('P18')
if next(sense_images) then
first_sense_image = sense_images[1].mainsnak.datavalue.value
end
if first_sense_image ~= '' then
table.insert(gloss_text_parts, '[[File:' .. first_sense_image .. "|thumb|'''" .. getLemmata(current_lexeme) .. "'''—" .. main_gloss_text .. ']]')
end
local idlinks = getExternalLinks(sense)
if #idlinks > 0 then
local idlinktext = '<small>('
for _, idlink in pairs(idlinks) do
idlinktext = idlinktext .. idlink .. '\n'
end
idlinktext = idlinktext .. ')</small>'
table.insert(gloss_text_parts, idlinktext)
table.insert(idlinkset, idlinks)
end
local externallinks = getArticleLinks(frame, sense)
if externallinks ~= '' then
table.insert(gloss_text_parts, externallinks)
end
local new_notes = {}
local sense_keys = { sense:getId(), string.sub(sense:getId(), string.find(sense:getId(), '-')+1) }
for _, v in ipairs(sense_keys) do
if args[v] then
table.insert(new_notes, args[v])
end
end
if #new_notes > 0 then
for _, v in ipairs(new_notes) do
if i == 1 then
table.insert(gloss_text_parts, '<br/>' .. v)
else
table.insert(gloss_text_parts, v)
end
end
end
local examples
examples, references_seen = unpack(getExamples( current_lexeme, sense:getId(), references_seen ))
local gloss_text = table.concat(gloss_text_parts, '\n')
meanings:tag('li'):wikitext(gloss_text):wikitext(examples)
end
return {meanings, references_seen, idlinkset}
end
local function getPronunciationBaseForm()
local base_form = nil
-- (!) অন্য ভাষার শব্দের যদি অন্য রকম মূল ফর্ম থাকে সেগুলো এখানে নতুন if বিবৃতি দিয়ে যোগ করা যায়।
if lang_code == 'bn' then
if lex_cat == 'Q1084' then -- বিশেষ্য
base_form = formWithSingleGrammaticalFeature( 'Q131105' ) -- কর্তৃকারক
elseif lex_cat == 'Q24905' then -- ক্রিয়া
base_form = formWithSingleGrammaticalFeature( 'Q1350145' ) -- ক্রিয়া বিশেষ্য
end
end
if base_form == nil then
for i, form in pairs(forms) do
base_form = form
break
end
end
return base_form
end
local function getCombines( current_lexeme, frame )
local combines = ''
local index_mappings = {}
for i, stmt in pairs(current_lexeme:getAllStatements('P5238')) do
if stmt.qualifiers and stmt.qualifiers['P1545'] then -- ক্রম
local current_index = tonumber(stmt.qualifiers['P1545'][1].datavalue.value)
index_mappings[current_index] = stmt
end
end
if #index_mappings ~= 0 then
for i, stmt in ipairs(index_mappings) do
if stmt.mainsnak.datavalue then
local part_lexeme_id = stmt.mainsnak.datavalue.value.id
local part_lexeme = getEntity(part_lexeme_id)
local current_substring = getLinkedLemmata(part_lexeme, frame)
local part_etymology = getEtymology(part_lexeme, frame, 'partial')
if part_etymology ~= '' and part_etymology then
current_substring = current_substring .. ' (← ' .. part_etymology .. ')'
end
if combines == '' then
combines = current_substring
else -- @TODO: This should use the 'affix' and 'compound' templates instead.
combines = combines .. ' + ' .. current_substring
end
end
end
end
return combines
end
function getRoots(lexeme, frame)
local stmts = lexeme:getAllStatements('P5920')
if #stmts == 0 then return '', '', '' end
local root_lexeme = getEntity(stmts[1].mainsnak.datavalue.value.id)
return getLexemeLanguageCode(root_lexeme), '√' .. getLinkedLemmata(root_lexeme, frame), root_lexeme:getLemma('ar')
end
function getEtymology( current_lexeme, frame, mode )
-- @TODO: Fix the etymology chains that are not possible to render
local etymology = ''
local current_combines = getCombines(current_lexeme, frame)
local root_lang, current_roots, root_str = getRoots(current_lexeme, frame)
if mode ~= 'partial' and root_str then
--frame:expandTemplate{title=i18n['template_root'], args={lang_code, root_lang, root_str}}
end
local stmts = current_lexeme:getAllStatements('P5191')
local new_etymology_string
if #stmts == 0 then
if current_roots ~= '' and current_combines ~= '' and current_roots then
return current_roots .. '<br/>(' .. current_combines .. ')'
elseif current_roots ~= '' then
if lang_code == 'ar' and mode ~= 'partial' and root_str ~= matched_lemma then
return frame:expandTemplate{title=i18n['template_ar-rootbox'], args={root_str}}
else
return current_roots
end
else
return current_combines
end
end
local origin_lexeme_string
for i, stmt in pairs(stmts) do
local origin_lexeme_dv = stmt.mainsnak.datavalue -- If this is nil, the origin lexeme is not known.
if origin_lexeme_dv then
local origin_lexeme = getEntity(origin_lexeme_dv.value.id)
local origin_lexeme_lang = getLabel(origin_lexeme:getLanguage())
local sitelink = i18n.wplink(origin_lexeme:getLanguage(), origin_lexeme_lang, wb)
if sitelink ~= '' then
origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. sitelink .. ')'
else
origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. origin_lexeme_lang .. ')'
end
if stmt.qualifiers and stmt.qualifiers['P5886'] then
local mode_of_derivation = stmt.qualifiers['P5886'][1].datavalue.value.id
if mode_of_derivation == 'Q1345001' then
-- @TODO: Add support for showing gender
origin_lexeme_string = frame:expandTemplate{title=i18n['template_borrowed'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_borrowing']
elseif mode_of_derivation == 'Q845079' then
origin_lexeme_string = ustring.gsub(i18n['etymology_learned_borrowing'], '$1', origin_lexeme_string)
elseif mode_of_derivation == 'Q56611986' then
origin_lexeme_string = frame:expandTemplate{title=i18n['template_inherited'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_inheritance']
elseif mode_of_derivation == 'Q189743' then
origin_lexeme_string = frame:expandTemplate{title=i18n['template_ellipsis'], args={lang_code, getLemmata(origin_lexeme)}} .. ' ' .. i18n['etymology_ellipsis']
end
end
local origin_origin = getEtymology(origin_lexeme, frame)
if origin_origin ~= '' and origin_origin then
new_etymology_string = origin_lexeme_string .. ' ← ' .. origin_origin
else
new_etymology_string = origin_lexeme_string
end
end
if etymology == '' then
etymology = new_etymology_string
elseif origin_lexeme_string and etymology then
etymology = etymology .. ' ' .. origin_lexeme_string
elseif origin_lexeme_string and etymology == nil then
etymology = origin_lexeme_string
end
end
if current_roots ~= '' and etymology and current_roots then
etymology = etymology .. ' ' .. current_roots
elseif current_roots ~= '' and etymology == nil then
etymology = current_roots
end
if current_combines ~= '' and etymology then
etymology = etymology .. '<br/>(' .. current_combines .. ')'
end
return etymology
end
local function pronunciationBlock(block, value)
return '* ' .. i18n['text_' .. block] .. ' ' .. value
end
local function getPronunciation(frame, current_lexeme, lang_name)
local pronunciations = {}
local base_form = getPronunciationBaseForm()
local iast, iso15919_transcription, itrans, xsampa
if base_form then
for i, stmt in pairs(base_form:getAllStatements('P443')) do -- উচ্চারণের অডিও
local pronunciation_file = stmt.mainsnak.datavalue.value
local specifier_text = ''
local specifiers = {}
if stmt.qualifiers then
for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন
local qual = stmt.qualifiers[property_id]
if qual then
for _, qual in pairs(qual) do
local stmt_value = qual.datavalue.value.id
table.insert(specifiers, getLabel(stmt_value))
end
end
end
end
if #specifiers > 0 then
specifier_text = table.concat(specifiers, "'', ''")
end
local audio_text
if specifier_text ~= '' then
audio_text = i18n['text_audio'] .. ' (' .. specifier_text .. ')'
else
audio_text = i18n['text_audio']
end
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title= i18n['template_audio'],
args = {lang_name, pronunciation_file, audio_text}
})
end
iso15919_transcription = getOneValueForProperty(base_form, 'P5825') -- আইএসও ১৫৯১৯ প্রতিলিপিকরণ
itrans = getOneValueForProperty(base_form, 'P8881') -- ITRANS
iast = getOneValueForProperty(base_form, 'P7581') -- আইএএসটি প্রতিলিপিকরণ
xsampa = getOneValueForProperty(base_form, 'P2859')
local ipa_transcription = base_form:getAllStatements('P898') -- আধ্বব প্রতিলিপিকরণ
-- @TODO: অডিও ও প্রতিলিপিকরণ দুটোই থাকলে একটার ঠিক পরেই আরেকটা দেখানো উচিত
if #ipa_transcription ~= 0 then
for i, stmt in pairs(ipa_transcription) do
local ipa_text = stmt.mainsnak.datavalue.value
local specifier_text = ''
local specifiers = {}
if stmt.qualifiers then
for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন
for l, qual in ipairs(stmt.qualifiers[property_id]) do
table.insert(specifiers, getLabel( qual.datavalue.value.id ))
end
end
end
if #specifiers > 0 then
specifier_text = "(''" .. table.concat(specifiers, "'', ''") .. "'') "
end
local syllable_count
if lang_code == 'tr' then
syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z10029|' .. ipa_text, frame)
else
syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z30837|' .. ipa_text, frame)
end
table.insert(pronunciations, '* ' .. specifier_text .. frame:expandTemplate{
title= i18n['template_ipa'],
args = {lang_name, ipa_text}
} .. '\n* ' .. syllable_count)
end
-- The following checks are ordered based on which one is expected to be true in a higher number of cases.
elseif lang_code == 'bn' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='bn-IPA',
})
elseif lang_code == 'ar' then
local lemma = current_lexeme:getLemma('ar')
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='ar-IPA',
args={lemma}
})
elseif lang_code == 'en' then
table.insert(pronunciations, '* ' .. i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z29940|' .. matched_lemma, frame))
elseif lang_code == 'pl' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='pl-IPA',
})
elseif lang_code == 'ko' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='ko-IPA',
})
elseif lang_code == 'fi' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='fi-IPA',
})
elseif lang_code == 'ta' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='ta-IPA',
})
elseif lang_code == 'fax' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='fax-pron',
})
end
end -- {{আধ্বব|en|/ˈɪntəvjuː/}}
if iso15919_transcription then
table.insert(pronunciations, pronunciationBlock('iso15919', iso15919_transcription))
end
if itrans then
table.insert(pronunciations, pronunciationBlock('itrans', itrans))
end
if iast then
table.insert(pronunciations, pronunciationBlock('iast', iast))
end
if xsampa then
table.insert(pronunciations, pronunciationBlock('xsampa', xsampa))
end
return table.concat(pronunciations, '\n')
end
local function getAlternativeSpellings( current_lexeme, frame )
local alt_spellings = {}
for i, stmt in pairs(current_lexeme:getAllStatements('P11577')) do -- বিকল্প বানান
if stmt.mainsnak.datavalue then
table.insert(alt_spellings, '* ' .. frame:expandTemplate{title=i18n['template_alter'], args={lang_code, getLemmata(getEntity(stmt.mainsnak.datavalue.value.id), frame)}})
end
end
return table.concat(alt_spellings, '\n')
end
function get_any_notes(sections, args, keys)
local notes = {}
for i, v in ipairs(keys) do
if args[v] then
table.insert(notes, args[v])
end
end
return notes
end
function add_specific_notes(sections, notes)
for i, v in ipairs(notes) do
table.insert(sections, v)
end
end
local function add_any_notes(sections, args, keys, heading)
for i, v in ipairs(keys) do
if args[v] then
if heading then
table.insert(sections, heading)
end
table.insert(sections, args[v])
end
end
end
local function getMatchingLemmaForPageTitle(lexeme, title)
local lemmas = lexeme:getLemmas()
local match
for _, lemma_entry in ipairs(lemmas) do
local lemma = lemma_entry[1]
if lemma == title then
match = lemma
break
end
end
if match == nil then
if lang_code == 'ar' then
match = lexeme:getLemma('ar')
elseif lang_code == 'rhg' then
match = lexeme:getLemma('rhg-arab')
elseif lang_id == 'Q11051ur' then
match = lexeme:getLemma('ur')
elseif lang_code == 'arz' then
match = lexeme:getLemma('arz')
end
end
return match
end
-- Returns the grammatical gender of a lexeme
local function getGenderOfLexeme(lexeme)
local gender = ''
local stmts = lexeme:getAllStatements('P5185') -- ব্যাকরণগত লিঙ্গ
if #stmts ~= 0 and stmts[1].mainsnak.datavalue then
if #stmts == 1 then
local gender_qid = stmts[1].mainsnak.datavalue.value.id
if gender_qid == 'Q499327' then
gender = 'm'
elseif gender_qid == 'Q1775415' then
gender = 'f'
elseif gender_qid == 'Q1775461' then
gender = 'n'
elseif gender_qid == 'Q1305037' then
gender = 'c'
end
end
else
for i, stmt in pairs(stmts) do
local qid = stmts[i].mainsnak.datavalue
if qid then
qid = qid.value.id
end
if qid == 'Q499327' then
gender = gender .. 'm'
elseif qid == 'Q1775415' then
gender = gender .. 'f'
end
end
end
if gender == '' then
return nil
end
return gender
end
-- Returns the semantic gender for a sense
-- @TODO: Complete this
local function getGenderForSense(sense)
local gender = ''
local stmts = sense:getAllStatements('P10339') -- semantic gender
if #stmts ~= 0 and stmts[1].mainsnak.datavalue then
if #stmts == 1 then
local gender_qid = stmts[1].mainsnak.datavalue.value.id
if gender_qid == 'Q6581097' then
gender = 'm'
elseif gender_qid == 'Q1775415' then
gender = 'f'
elseif gender_qid == 'Q1775461' then
gender = 'n'
elseif gender_qid == 'Q1305037' then
gender = 'c'
elseif gender_qid == 'Q70853302' then
gender = 'mfbysense'
end
end
else
for i, stmt in pairs(stmts) do
local qid = stmts[i].mainsnak.datavalue
if qid then
qid = qid.value.id
end
if qid == 'Q499327' then
gender = gender .. 'm'
elseif qid == 'Q1775415' then
gender = gender .. 'f'
end
end
end
return gender
end
local function buildLanguageAgnosticInflectionTable()
local has_image = false
local form_images = {}
for i, form in ipairs(forms) do
local form_image = form:getAllStatements('P7407')
if next(form_image) then
form_images[i] = form_image[1].mainsnak.datavalue.value
has_image = true
end
end
local table_class = "wikitable mw-collapsible sortable"
if not has_image then
table_class = table_class .. " mw-collapsed"
end
local text = "{| class='" .. table_class .. "' style='border:solid 1px rgb(80%,80%,100%); text-align:center;'\n"
text = text .. "|+ " .. i18n['heading_inflection_table'] .. "\n"
text = text .. "|- \n"
text = text .. "! " .. i18n['heading_form'] .. " !! " .. i18n['heading_grammatical_features']
if has_image then
text = text .. " !! " .. (i18n['heading_image'])
end
text = text .. " \n"
for i, form in ipairs(forms) do
local rep = form:getRepresentations()
local feat = form:getGrammaticalFeatures()
local rep_text = ""
for j, r in pairs(rep) do
if rep_text == "" then
rep_text = r[1]
else
rep_text = rep_text .. " / " .. r[1]
end
end
local feat_text = ""
if feat then
for j, f in ipairs(feat) do
local label = getLabel(f) or f
if feat_text == "" then
feat_text = label
else
feat_text = feat_text .. ", " .. label
end
end
end
text = text .. "|-\n"
text = text .. "| " .. (rep_text ~= "" and rep_text or "—")
text = text .. " || " .. (feat_text ~= "" and feat_text or "—")
if has_image then
local image_cell = "—"
if form_images[i] then
image_cell = "[[চিত্র:" .. form_images[i] .. "|50px]]"
end
text = text .. " || " .. image_cell
end
text = text .. "\n"
end
text = text .. "|}"
return text
end
function p.all(frame)
local args = getArgs(frame)
local lexeme_id = args[1]
local current_lexeme = getEntity(lexeme_id)
local language = current_lexeme:getLanguage()
lang_id = language
local senses = current_lexeme:getSenses()
local add_heading = true
forms = current_lexeme:getForms()
if args[2] then
local val = mw.text.trim(tostring(args[2]))
if val == "false" or val == "0" or val == "না" then
add_heading = false
end
end
local references_seen = {}
local sections = {}
local title = mw.title.getCurrentTitle().text
local lang_category = getLanguageForCategories(title, true)
local lang_name = getLabel(lang_category)
local conj_class = getLastValueForProperty(current_lexeme, 'P5186')
if conj_class then
conj_class = wb.getLabelByLang(getLastValueForProperty(current_lexeme, 'P5186').id, 'en'):gsub('Form ', '')
end
if add_heading == true then
local lang_heading = heading_level(lang_name, 2)
table.insert(sections, lang_heading)
end
lang_code = getLexemeLanguageCode(current_lexeme)
matched_lemma = getMatchingLemmaForPageTitle(current_lexeme, title)
lex_cat = current_lexeme:getLexicalCategory()
local cat = i18n.lang_category(getLabel(lex_cat), lang_name)
local lex_cat_template, ety_added, pron_added, alt_added
if cat then
table.insert(sections, heading_level(getLabel(lex_cat) .. cat .. frame:expandTemplate{
title = i18n['template_anchor'],
args = { lexeme_id }
}, 3))
table.insert(sections, frame:expandTemplate{
title= i18n['template_lexeme'],
args = {lexeme_id}
})
add_any_notes(sections, args, i18n['manual_category'])
local etymology = getEtymology( current_lexeme, frame )
if etymology ~= '' and etymology then
table.insert(sections, heading_level(i18n['heading_etymology'], 4))
table.insert(sections, tostring(etymology))
ety_added = true
end
if ety_added then
add_any_notes(sections, args, i18n['manual_etymology'])
else
add_any_notes(sections, args, i18n['manual_etymology'], heading_level(i18n['heading_etymology'], 4))
end
local pronunciation = getPronunciation( frame, current_lexeme, lang_name)
if pronunciation ~= '' then
table.insert(sections, heading_level(i18n['heading_pronunciation'], 4))
table.insert(sections, tostring(pronunciation))
pron_added = true
end
if pron_added then
add_any_notes(sections, args, i18n['manual_pronunciation'])
else
add_any_notes(sections, args, i18n['manual_pronunciation'], heading_level(i18n['heading_pronunciation'], 4))
end
local alternative_spellings = getAlternativeSpellings(current_lexeme, frame)
if alternative_spellings ~= '' then
table.insert(sections, heading_level(i18n['heading_alternative_spellings'], 4))
table.insert(sections, alternative_spellings)
alt_added = true
end
if alt_added then
add_any_notes(sections, args, i18n['manual_alternative_spellings'])
else
add_any_notes(sections, args, i18n['manual_alternative_spellings'], heading_level( i18n['heading_alternative_spellings'], 4))
end
local gender = getGenderOfLexeme(current_lexeme)
if lang_code and lang_code ~= 'ksy' and lang_code ~= 'rkt' then -- Skip for Kharia Thar, Rangpuri
if lex_cat == 'Q34698' then -- বিশেষণ
if lang_code == 'en' or lang_code == 'bn' then
if #forms <= 1 then
lex_cat_template = frame:expandTemplate{title= lang_code .. '-বিশেষণ'}
end
else
if lang_code ~= 'fr' then
lex_cat_template = safeExpand(frame, lang_code .. '-adj')
if not lex_cat_template then
lex_cat_template = safeExpand(frame, lang_code .. '-বিশেষণ')
end
end
end
elseif lex_cat == 'Q1084' then -- @TODO: Also check for plural forms
-- The following checks are ordered based on which one is expected to be true in a higher number of cases.
if language == 'Q13955' then
if matched_lemma then
lex_cat_template = safeExpand(frame, 'ar-noun', {matched_lemma,gender})
else
lex_cat_template = frame:expandTemplate{title='ar-noun', args={nil,gender}}
end
elseif language == 'Q29919' then
lex_cat_template = frame:expandTemplate{title='arz-noun', args={g=gender}}
elseif language == 'Q397' then
if matched_lemma then
lex_cat_template = frame:expandTemplate{title='la-noun', args={matched_lemma,g=gender}}
end
elseif language == 'Q11059' then
lex_cat_template = frame:expandTemplate{title='sa-noun', args={g=gender}}
elseif language ~= 'Q1860' then -- These templates require the gender to be passed as the 1st argument.
lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix'], {gender})
if not lex_cat_template then
lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix_fallback'], {gender})
end
end
elseif lex_cat == 'Q24905' then -- ক্রিয়া
if lang_code == 'ar' then
if conj_class then
lex_cat_template = frame:expandTemplate{title='ar-verb', args={conj_class}}
end
else
lex_cat_template = safeExpand(frame, lang_code .. '-verb')
end
end
end
-- elseif lex_cat == 'Q147276' then
-- lex_cat_template = safeExpand(frame, lang_code .. '-proper noun', {gender})
-- if not lex_cat_template then
-- lex_cat_template = safeExpand(frame, lang_code .. '-নামবাচক বিশেষ্য', {gender})
-- end
end
if lex_cat_template then
table.insert(sections, lex_cat_template)
else
if matched_lemma then
table.insert(sections, heading_level(matched_lemma, 4))
else
table.insert(sections, i18n.tocatlink(i18n['category_no_matching_lemma']))
end
end
local meanings, references_seen, sense_extlinks = unpack(getMeanings( frame, args, current_lexeme, senses, references_seen, lang_name))
table.insert(sections, tostring(meanings))
add_any_notes(sections, args, i18n['manual_meaning'])
local instance_of = current_lexeme:getAllStatements('P31') -- সত্ত্বার ধরন
if #instance_of ~= 0 then
local instance_of_entity = instance_of[1].mainsnak.datavalue.value.id
if instance_of_entity == 'Q376431' then -- বর্ণের নাম
table.insert(sections, i18n.tocatlink(lang_code .. ':রং'))
else
table.insert(sections, heading_level(i18n['heading_special_info'], 4) .. i18n['text_instance_of'] .. ' ' .. '[[d:' .. instance_of_entity .. '|' .. getLabel(instance_of_entity) .. ']]' .. i18n['text_sentence_terminator'])
end
end
if lex_cat ~= 'Q9788' then
local translations = getTranslations(frame, senses)
if translations then
table.insert(sections, translations)
end
end
-- (!) বিশেষ ভাষার বিভক্তির সারণি যদি থাকে সেগুলো এখানে নতুন if বিবৃতি যোগ করা যায়।
if next(forms) then
if language == 'Q9610' then -- বাংলা
if lex_cat == 'Q24905' then
local conjTable = require('মডিউল:আভিধানিক উপাত্ত/Q9610').getConjTable(frame, forms)
table.insert(sections, conjTable)
elseif lex_cat == 'Q1084' or lex_cat == 'Q36224' or lex_cat == 'Q147276' or lex_cat == 'Q956030' then
table.insert(sections, callWikifunctionsFunction('Z33243|' .. lexeme_id .. '|', frame))
else
if #forms > 1 then
table.insert(sections, buildLanguageAgnosticInflectionTable())
end
end
--elseif language == 'Q13955' then -- ar
-- if lex_cat == 'Q1084' then
-- table.insert(sections, frame:expandTemplate{title='ar-decl-noun', args={lemma}})
-- end
--elseif lang_code == 'ar' and lex_cat == 'Q24905' then
--table.insert(sections, frame:expandTemplate{title='ar-conj', args={conj_class}})
elseif language == 'Q11051' and lex_cat == 'Q1084' then -- de
if lang_id == "Q11051hi" then
table.insert(sections, callWikifunctionsFunction('Z37337|' .. lexeme_id .. '|', frame))
else
table.insert(sections, callWikifunctionsFunction('Z37346|' .. lexeme_id .. '|', frame))
end
elseif language == 'Q188' and lex_cat == 'Q1084' then -- de
table.insert(sections, callWikifunctionsFunction('Z28602|' .. lexeme_id .. '|', frame))
elseif lang_code == 'as' and lex_cat == 'Q1084' then
table.insert(sections, callWikifunctionsFunction('Z37219|' .. lexeme_id .. '|', frame))
elseif lang_code == 'ml' and lex_cat == 'Q1084' then
table.insert(sections, callWikifunctionsFunction('Z37217|' .. lexeme_id .. '|', frame))
--elseif language == 'Q397' and lex_cat == 'Q1084' then -- la
-- table.insert(sections, callWikifunctionsFunction('Z26333|' .. matched_lemma .. '|', frame))
elseif language == 'Q150' and lex_cat == 'Q34698' then -- fr
table.insert(sections, callWikifunctionsFunction('Z36435|' .. lexeme_id .. '|', frame))
elseif language == 'Q652' and lex_cat == 'Q34698' then -- ইতালীয়
table.insert(sections, callWikifunctionsFunction('Z36407|' .. lexeme_id .. '|', frame))
elseif language == 'Q809' or language == 'Q9058' or language == 'Q6654' or language == 'Q9056' then -- পোলীয়, স্লোভাক, ক্রোয়েশীয়, চেক
table.insert(sections, callWikifunctionsFunction('Z36421|' .. lexeme_id .. '|', frame))
elseif #forms > 1 and language ~= 'Q150' then
table.insert(sections, buildLanguageAgnosticInflectionTable())
end
end
if lex_cat == 'Q134830' then
table.insert(sections, frame:expandTemplate{title='prefixsee', args={lang_code}})
elseif lex_cat == 'Q102047' then
table.insert(sections, frame:expandTemplate{title='suffixsee', args={lang_code}})
-- elseif lex_cat == 'Q111029' then
-- table.insert(sections, frame:expandTemplate{title='rootsee', args={'+', lang_code, matched_lemma}})
end
local reference_notes = get_any_notes(sections, args, i18n['manual_reference'])
if #references_seen > 0 or #reference_notes > 0 then
table.insert(sections, heading_level(i18n['heading_references'], 4))
table.insert(sections, frame:extensionTag('references'))
add_specific_notes(sections, reference_notes)
end
local external_link_table = getExternalLinks ( current_lexeme )
if #external_link_table > 0 then
local external_links = '* ' .. table.concat(external_link_table, '\n* ')
table.insert(sections, heading_level(i18n['heading_external_links'], 4))
table.insert(sections, external_links)
end
add_any_notes(sections, args, i18n['manual_external_link'])
if #references_seen == 0 and #reference_notes == 0 and sense_extlinks and #sense_extlinks == 0 and #external_link_table == 0 and #get_any_notes(sections, args, i18n['manual_external_link']) == 0 then
table.insert(sections, i18n.rfref_category(lang_name))
end
return table.concat(sections,"\n\n")
end
return p
9dogaedf3kcx7rp5xup07jdxkkeowik
514040
514026
2026-07-25T14:32:00Z
Redmin
6857
514040
Scribunto
text/plain
local p = {}
local i18n = require('মডিউল:আভিধানিক উপাত্ত/i18n')
local references = require('মডিউল:উইকিউপাত্ত তথ্যসূত্র বিন্যাসকরণ').format
local getArgs = require('Module:Arguments').getArgs
local wb = mw.wikibase
local ustring = mw.ustring
local html = mw.html
local mw_lang = mw.language
local entity_cache = {}
local reference_cache = {}
local forms
local lang_code
local lex_cat
local matched_lemma
local lang_id
local function wrapStringInWikilinks(str)
local exceptions = i18n.nolinks
local result = str:gsub('(%S+)', function(token)
local word, trailing_char = token:match('^(.-)([;,.:!?]*)$')
local wrapped = word:gsub('[^(-/]+', function(part)
if exceptions[part] then
return part
else
return '[[' .. mw.text.nowiki(part) .. '#' .. i18n['content_lang_name'] .. '|' .. mw.text.nowiki(part) .. ']]'
end
end)
return wrapped .. trailing_char
end)
return result
end
local function serializeTable(val, name, skipnewlines, depth) -- https://stackoverflow.com/a/6081639
skipnewlines = skipnewlines or false
depth = depth or 0
local tmp = string.rep(" ", depth)
if name then tmp = tmp .. name .. " = " end
if type(val) == "table" then
tmp = tmp .. "{" .. (not skipnewlines and "\n" or "")
for k, v in pairs(val) do
tmp = tmp .. serializeTable(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and "\n" or "")
end
tmp = tmp .. string.rep(" ", depth) .. "}"
elseif type(val) == "number" then
tmp = tmp .. tostring(val)
elseif type(val) == "string" then
tmp = tmp .. string.format("%q", val)
elseif type(val) == "boolean" then
tmp = tmp .. (val and "true" or "false")
else
tmp = tmp .. "\"[inserializable datatype:" .. type(val) .. "]\""
end
return tmp
end
-- Use this to safely expand templates when you are not sure that they exist.
local function safeExpand(frame, title, args)
local _, result = pcall(function()
return frame:expandTemplate{ title = title, args = args }
end)
if result:find('does not exist') then -- expandTemplate{} doesn't seem to throw any error that can be handled with pcall() so string search is the only viable option.
return nil
end
return result
end
local function checkTitleCodePointInRange(title, start_point, end_point)
return ustring.find( title, '[' ..ustring.char(start_point) .. '-' .. ustring.char(end_point) .. ']' )
end
local function getLanguageForCategories(title)
-- বিশেষ ভাষার জন্য
if lang_id == 'Q11051' then -- হিন্দি/উর্দু
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- উর্দু
lang_id = 'Q11051ur'
elseif checkTitleCodePointInRange(title, 0x0900, 0x097f) then -- হিন্দি
lang_id = 'Q11051hi'
end
elseif lang_id == 'Q58635' then -- পাঞ্জাবি
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- শাহমুখী
lang_id = 'Q58635pnb'
elseif checkTitleCodePointInRange(title, 0x0a00, 0x0a7f) then -- গুরুমুখী
lang_id = 'Q58635pa'
end
elseif lang_id == 'Q56356571' then -- নয়া ফার্সি ভাষা
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- ফার্সি (ইরান/আফগানিস্তান)
lang_id = 'Q56356571fa'
elseif checkTitleCodePointInRange(title, 0x0400, 0x04ff) then -- তাজিক
lang_id = 'Q56356571tg'
end
elseif lang_id == 'Q256' then
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then
lang_id = 'Q56356571ota'
else
lang_id = 'Q56356571tr'
end
end
return lang_id
end
local function getEntity(id)
if entity_cache[id] == nil then
entity_cache[id] = wb.getEntity(id) or error('Invalid ID provided: ' .. id)
end
return entity_cache[id] ~= false and entity_cache[id] or nil
end
-- Use this function to get the label of an item even if that item does not have any label in the wiki's content language or English.
local function getLabel(id)
if id == 'Q11051hi' then
return 'হিন্দি'
elseif id == 'Q11051ur' then
return 'উর্দু'
elseif id == 'Q56356571fa' then
return 'ফার্সি'
elseif id == 'Q56356571tg' then
return 'তাজিক'
elseif id == 'Q58635pa' or id == 'Q58635pnb' then
return 'পাঞ্জাবি'
elseif id == 'Q256tr' then
return 'তুর্কি'
elseif id == 'Q256ota' then
return 'উসমানীয় তুর্কি'
end
local label = wb.getLabel(id)
if label then
return label
end
local labels = getEntity(id).labels
if not labels then
return id
end
for _, v in pairs(labels) do
if v and v.value then
return v.value
end
end
end
local function getReference(id, reference)
local out_id = nil
local url_value
if reference_cache[id] == nil then
local ref_text = references(reference, wb, mw_lang, i18n['content_lang_code'], i18n['wikipedia'])
if reference.snaks then
if reference.snaks['P248'] then
for _, snak in pairs(reference.snaks['P248']) do
if snak.datavalue and snak.datavalue.value.id == 'Q428' then -- কুরআন
ref_text = ustring.gsub(ref_text, 'নামক অনুচ্ছেদ', 'নং আয়াত')
break
end
end
end
if reference.snaks['P854'] then
local snak = reference.snaks['P854'][1]
if snak.datavalue then
url_value = snak.datavalue.value
end
end
end
if url_value then
ref_text = ref_text .. ', [' .. url_value .. ' সংযোগ]'
end
reference_cache[id] = ref_text
else
out_id = id
end
return {out_id, reference_cache[id]}
end
-- Returns the Wiktionary language code for a lexeme entity or nil, in the latter case, getLemmas() can be relied on to fetch the language code by stripping extraneous bits from the 'language' string as necessary
local function getLexemeLanguageCode(lexeme)
local lang_item_id = lexeme:getLanguage()
local lang_entity = getEntity(lang_item_id)
for i, statement_property in ipairs({'P305','P424', 'P220'}) do -- আইইটিএফ ভাষা ট্যাগ, উইকিমিডিয়া ভাষা কোড, আইএসও ৬৩৯-৩
local statements = lang_entity:getBestStatements(statement_property)
if statements[1] then
local code = statements[1].mainsnak.datavalue.value
if code == 'hr' then
return 'sh'
elseif code == 'pan' then
return 'pa'
else
return code
end
end
end
end
local function getLexemeLanguageCodeForEtymology(lexeme)
local lang_item_id = lexeme:getLanguage()
if lang_item_id == 'Q56356571' then
return 'fa' -- @TODO: Implement a proper solution
end
return getLexemeLanguageCode(lexeme)
end
-- Return the first form of the lexeme which has exactly the given grammatical feature.
local function formWithSingleGrammaticalFeature( item_id )
for i = 1, #forms do
local grammaticalFeatures = forms[i]:getGrammaticalFeatures()
if #grammaticalFeatures == 1 and grammaticalFeatures[1] == item_id then
return forms[i]
end
end
return nil
end
local function getArticleLinkTemplate(frame, stmt_value)
local template = ''
local sitelink = getEntity(stmt_value):getSitelink(i18n['wikipedia'])
if sitelink then
template = frame:expandTemplate{
title=i18n['template_wikipedia'],
args={sitelink}
}
end
return template
end
local function getArticleLinks(frame, sense )
local article_links = ''
for i, stmt in pairs(sense:getAllStatements('P5137')) do -- এই অর্থের জন্য আইটেম
article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id)
end
for i, stmt in pairs(sense:getAllStatements('P9970')) do -- এই অর্থের জন্য বিধেয়
article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id)
end
return article_links
end
-- @TODO: Generalise
local function expandTemplateForProperty(frame, object, property, template)
local lemmas = {}
local n = 0
for _, stmt in pairs(object:getAllStatements(property)) do
local lex = wb.lexeme.splitLexemeId(stmt.mainsnak.datavalue.value.id)
if lex then
lex = getEntity(lex)
n = n + 1
lemmas[n] = lex:getLemma(lang_code)
end
end
if not lang_code or n == 0 then
return ''
end
-- Build args: first lang_code, then lemmas
local args = {lang_code}
for i = 1, n do
args[#args + 1] = lemmas[i]
end
return frame:expandTemplate{
title = template,
args = args
}
end
local function getExternalLinks( entity ) -- T418639
local external_links = {}
if entity.claims == nil then return external_links end
local formatter_urls = require('মডিউল:আভিধানিক উপাত্ত/urls').formatter_urls
for property_id, statements in pairs(entity.claims) do
local formatter_url = formatter_urls[property_id]
if formatter_url then
local property_source = wb.getBestStatements(property_id, 'P9073')
local source_name
if next(property_source) then
source_name = getLabel(property_source[1].mainsnak.datavalue.value.id)
or property_source[1].mainsnak.datavalue.value.id
else
source_name = getLabel(property_id) or property_id
end
for i = 1, #statements do
local stmt = statements[i]
if stmt.mainsnak.datavalue then
local formatted_link = ustring.gsub(
ustring.gsub(formatter_url, '$1', stmt.mainsnak.datavalue.value),
' ', '+'
)
table.insert(external_links,
'[' .. formatted_link .. ' ' .. source_name .. ']')
end
end
end
end
return external_links
end
p.getExternalLinks = getExternalLinks -- রেখে দিন যাতে ডিবাগিং সম্ভব হয়
local function heading_level(text, level)
return '<h' .. level .. '>' .. ' ' .. text .. ' ' .. '</h' .. level .. '>'
end
local function termSpan( term )
local text = term[1]
local lang = term[2]
local dir = mw_lang.new( lang ):getDir()
local span = html.create( 'span' )
span:attr( 'lang', lang )
:attr( 'dir', dir )
:wikitext( text )
return tostring( span )
end
local function getLemmata( current_lexeme )
local lemma_string = ''
for i, rep in pairs(current_lexeme:getLemmas()) do
if lemma_string == '' then
lemma_string = termSpan(rep)
else
lemma_string = lemma_string .. '/' .. termSpan(rep)
end
end
return lemma_string
end
local function getLinkedLemmata(lexeme, frame)
local lemma_string = ''
local lang
for i, rep in pairs(lexeme:getLemmas()) do
lang = getLexemeLanguageCode(lexeme)
if lang == nil then
lang = string.gsub(rep[2], '-%S+', '')
end
if lemma_string == '' then
lemma_string = frame:expandTemplate{title='link', args={lang, rep[1]}}
else
lemma_string = lemma_string .. '/' .. frame:expandTemplate{title='link', args={lang, rep[1]}}
end
end
return lemma_string
end
local function getExamples( current_lexeme, sense_id, references_seen )
local examples = html.create('dl')
local example_text, example_lang, example_form, example_str
for i, stmt in pairs(current_lexeme:getAllStatements('P5831')) do -- ব্যবহারের উদাহরণ
if stmt.qualifiers and stmt.qualifiers['P6072'] and stmt.qualifiers['P6072'][1].datavalue.value.id == sense_id then -- বিষয়ে লেক্সিমের অর্থ
example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>')
example_lang = stmt.mainsnak.datavalue.value.language
local example_form_strs = {}
if stmt.qualifiers['P1810'] then
table.insert(example_form_strs, stmt.qualifiers['P1810'][1].datavalue.value)
elseif stmt.qualifiers['P5830'] then
example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- বিষয়ে লেক্সিমের রূপ
for _, rep in pairs(example_form:getRepresentations()) do
table.insert(example_form_strs, rep[1])
end
end
for _, example_form_str in pairs(example_form_strs) do
local new_example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''")
if new_example_text ~= example_text then
example_str = termSpan({new_example_text, example_lang})
break
end
example_text = new_example_text
end
if example_str == nil then
example_str = termSpan({example_text, example_lang})
end
local reference_text = ''
if stmt.references then
for j, reference in pairs(stmt.references) do
table.insert(references_seen, reference.hash)
local got_reference = getReference(reference.hash, reference)
reference_text = reference_text .. '\n\n' .. got_reference[2]
end
end
if example_str then
examples:tag('dd'):wikitext("''" .. example_str .. "''")
if reference_text ~= '' then
examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text)
end
end
end
end
for i, stmt in pairs(wb.getAllStatements(sense_id, 'P5831')) do -- ব্যবহারের উদাহরণ
example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>')
example_lang = stmt.mainsnak.datavalue.value.language
local example_form_str = nil
if stmt.qualifiers then
if stmt.qualifiers['P5830'] then
example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- subject lexeme form
end
if stmt.qualifiers['P1810'] then
example_form_str = stmt.qualifiers['P1810'][1].datavalue.value
end
end
if example_form and example_form_str == nil then
example_form_str = example_form:getRepresentation(i18n['content_lang_code'])
end
if example_form and example_form_str == nil then
example_form_str = example_form:getRepresentations()[1][1]
end
if example_form_str then
example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''")
end
example_str = termSpan({example_text, example_lang})
local reference_text = ''
if stmt.references then
for j, reference in pairs(stmt.references) do
table.insert(references_seen, reference.hash)
local got_reference = getReference(reference.hash, reference)
reference_text = reference_text .. '\n\n' .. got_reference[2]
end
end
if example_str then
examples:tag('dd'):wikitext("''" .. example_str .. "''")
if reference_text ~= '' then
examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text)
end
end
end
return { tostring(examples) , references_seen }
end
-- This calls frame:preprocess() instead of :callParserFunction() because the latter does not work for Wikifunctions function calls yet (see https://www.wikifunctions.org/wiki/Wikifunctions:Embedded_function_calls).
local function callWikifunctionsFunction(args, frame)
return frame:preprocess('{{#function:' .. args .. '}}') .. i18n.tocatlink('উইকিফাংশন্স-এর ফাংশন ব্যবহার করা পাতা')
end
local function getOneValueForProperty(object, property)
local val
local stmts = object:getAllStatements(property)
if #stmts ~= 0 then
val = stmts[1].mainsnak.datavalue.value
end
return val
end
local function getLastValueForProperty(object, property)
local val, count
local stmts = object:getAllStatements(property)
for i, j in ipairs(stmts) do
count = i
end
if count then
val = stmts[count].mainsnak.datavalue.value
end
return val
end
local function getTranslations(frame, senses)
if #senses == 0 then
return nil
end
local all_translations = {}
local wmlang, item, label
for _, sense in pairs(senses) do
local translation_set = {}
local gloss = sense:getGloss(i18n['content_lang_code'])
if lex_cat ~= 'Q34698' then
item = getOneValueForProperty(sense, 'P5137')
if item then
item = item.id
label = getLabel(item)
end
end
if item then
wmlang = require("Module:wikimedia languages")
end
for _, stmt in pairs(sense:getAllStatements('P5972')) do
local translation = stmt.mainsnak.datavalue.value.id
local lexeme_id = wb.lexeme.splitLexemeId(translation)
local trans_lexeme = getEntity(lexeme_id)
local lang_name = getLabel(trans_lexeme:getLanguage())
local trans_code = getLexemeLanguageCode(trans_lexeme)
if trans_code then
table.insert(translation_set, lang_name .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={trans_code, getLinkedLemmata(trans_lexeme, frame) .. '<br/>'}})
else
table.insert(translation_set, lang_name .. ': ' .. getLinkedLemmata(trans_lexeme, frame) .. '<br/>' .. i18n.trans_category(lang_name))
end
end
if item then
for _, v in pairs(getEntity(item).labels) do
if string.find(v.language, '-') == nil then -- @TODO: Implement deduplication of translation and get rid of this check
local lang = wmlang.getByCode(v.language)
local wikt = lang:getWiktionaryLanguage()
if wikt:hasType('regular') then
table.insert(translation_set, getLabel(wikt:getWikidataItem()) .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={wikt:getCode(), v.value .. '<br/>'}})
end
end
end
end
if #translation_set > 0 then
local block = frame:expandTemplate{ title = i18n['template_trans-top'], args = { gloss or label } }
block = block .. table.concat(translation_set, '\n') .. frame:expandTemplate{ title = i18n['template_trans-bottom'] }
table.insert(all_translations, block)
end
end
if #all_translations == 0 then
return nil
end
return heading_level(i18n['heading_translation'], 4) .. ' \n' .. table.concat(all_translations, '\n')
end
local createicon = function(langcode, entityID, propertyID)
langcode = langcode or ""
propertyID = propertyID or ""
local icon = " <span class='penicon autoconfirmed-show'>[["
-- " <span data-bridge-edit-flow='overwrite' class='penicon'>[[" -> enable Wikidata Bridge
.. "File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt="
.. i18n['edit_wikidata']
.. "|link=https://www.wikidata.org/entity/" .. entityID
if langcode ~= "" then icon = icon .. "?uselang=" .. langcode end
if propertyID ~= "" then icon = icon .. "#" .. propertyID end
icon = icon .. "|" .. i18n['edit_wikidata'] .. "]]</span>"
return icon
end
local function getMeanings(frame, args, current_lexeme, senses, references_seen, language_name)
if #senses == 0 then
return {createicon(i18n['content_lang_code'], current_lexeme:getId()) .. "''" .. i18n['text_category_rfdef'] .. "''" .. i18n.tocatlink(i18n['category_rfdef']), references_seen}
end
local meanings = html.create( 'ol' )
local idlinkset = {}
for i, sense in pairs(senses) do
local item_label_gloss_parts = {}
local gloss_text_parts = {}
local main_gloss_text = frame:expandTemplate{
title=i18n['template_anchor'],
args={sense:getId()}
}
local specifiers = {}
for k, property_id in ipairs({'P6084', 'P6191', 'P9488'}) do -- অবস্থান যেখানে শব্দার্থ ব্যবহৃত, যে রীতিতে শব্দার্থ ব্যবহৃত হয়, যে ক্ষেত্রে ব্যবহৃত
for _, stmt in pairs(sense:getAllStatements(property_id)) do
local stmt_value = stmt.mainsnak.datavalue.value.id
local reference_text = ''
local refs = stmt.references
if refs then
for j, reference in pairs(refs) do
table.insert(references_seen, reference.hash)
local got_reference = getReference(reference.hash, reference)
reference_text = reference_text .. '\n\n' .. frame:extensionTag('ref', got_reference[2])
end
end
local val = getLabel(stmt_value)
table.insert(specifiers, val .. reference_text)
if property_id == 'P9488' and lang_code ~= nil then
table.insert(item_label_gloss_parts, i18n.tocatlink(lang_code .. ':' .. val))
end
end
end
if #specifiers > 0 then
main_gloss_text = main_gloss_text .. "(''" .. table.concat(specifiers, "'', ''") .. "'') "
end
local gloss = sense:getGloss( i18n['content_lang_code'] )
if gloss then
main_gloss_text = main_gloss_text .. wrapStringInWikilinks(gloss)
if gloss:match('^প্রদত্ত%s*(%S-)%s*নাম$') then -- given names
main_gloss_text = main_gloss_text .. i18n.tocatlink(language_name .. ' ' .. i18n['category_given_names'])
end
else
local other_gloss_text, other_gloss_lang, item_label
local stmt_value = getOneValueForProperty(sense, 'P5137')
if stmt_value then
stmt_value = stmt_value.id
item_label = getLabel(stmt_value)
end
if item_label then
table.insert(item_label_gloss_parts, '[[:d:' .. stmt_value .. '|' .. item_label .. ']]')
end
if #item_label_gloss_parts > 0 then
other_gloss_text = table.concat(item_label_gloss_parts, '; ')
end
if other_gloss_text == nil then
for _, fallback_lang in ipairs(mw_lang.getFallbacksFor( i18n['content_lang_code'] )) do
if sense:getGloss( fallback_lang ) then
other_gloss_text, other_gloss_lang = sense:getGloss( fallback_lang )
end
end
if other_gloss_lang == nil then
local glosses = sense:getGlosses()
for _, gloss in pairs(glosses) do
other_gloss_text = gloss[1]
other_gloss_lang = gloss[2]
break
end
end
main_gloss_text = main_gloss_text .. other_gloss_text .. "<sup><em>" .. mw_lang.fetchLanguageName(other_gloss_lang, i18n['content_lang_code']) .. "</em></sup>"
else
main_gloss_text = main_gloss_text .. "''" .. other_gloss_text .. "''"
end
main_gloss_text = main_gloss_text .. i18n.tocatlink(i18n['category_rfdef_equivalent'])
end
local synonym = expandTemplateForProperty(frame, sense, 'P5973', i18n['template_synonym'])
if synonym ~= '' then
main_gloss_text = main_gloss_text .. ' <br/> ' .. synonym
end
local antonym = expandTemplateForProperty(frame, sense, 'P5974', i18n['template_antonym'])
if antonym ~= '' then
main_gloss_text = main_gloss_text .. ' <br/> ' .. antonym
end
local hypernym = expandTemplateForProperty(frame, sense, 'P6593', i18n['template_hypernym'])
if hypernym ~= '' then
main_gloss_text = main_gloss_text .. ' <br/> ' .. hypernym
end
if lex_cat == 'Q1084' or lex_cat == 'Q147276' then -- noun or proper noun
local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-noun'])
main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym
elseif lex_cat == 'Q34698' then
local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-adj'])
main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym
end
table.insert(gloss_text_parts, main_gloss_text .. createicon(i18n['content_lang_code'], sense:getId()))
for _, stmt in pairs(sense:getAllStatements('P8394')) do -- টিপ্পনীর উদ্ধৃতি
local gloss_quote = termSpan({stmt.mainsnak.datavalue.value.text, stmt.mainsnak.datavalue.value.language})
if stmt.references[1] then
local got_reference = getReference ( stmt.references[1].hash, stmt.references[1] )
gloss_quote = '"' .. gloss_quote .. '" ' .. got_reference[2]
end
table.insert(references_seen, stmt.references[1].hash)
table.insert(gloss_text_parts, frame:extensionTag('ref', gloss_quote))
end
for _, stmt in pairs(sense:getAllStatements('P1343')) do -- বর্ণিত উৎস
-- TODO: do away with making fake reference objects
local fake_reference = { ['snaks'] = {} }
fake_reference.snaks['P248'] = { [1] = stmt.mainsnak }
local qualifiers_order = stmt['qualifiers-order']
if qualifiers_order then
for _, k in ipairs(qualifiers_order) do fake_reference.snaks[k] = stmt.qualifiers[k] end
end
fake_reference.hash = mw.hash.hashValue('sha3-512', serializeTable(fake_reference))
table.insert(references_seen, fake_reference.hash)
local got_reference = getReference(fake_reference.hash, fake_reference)
if got_reference[1] == nil then
table.insert(gloss_text_parts, frame:extensionTag('ref', got_reference[2], {name = fake_reference.hash}))
else
table.insert(gloss_text_parts, frame:extensionTag{name = 'ref', content='', args = {name = got_reference[1]}})
end
end
local first_sense_image = ''
local sense_images = sense:getAllStatements('P18')
if next(sense_images) then
first_sense_image = sense_images[1].mainsnak.datavalue.value
end
if first_sense_image ~= '' then
table.insert(gloss_text_parts, '[[File:' .. first_sense_image .. "|thumb|'''" .. getLemmata(current_lexeme) .. "'''—" .. main_gloss_text .. ']]')
end
local idlinks = getExternalLinks(sense)
if #idlinks > 0 then
local idlinktext = '<small>('
for _, idlink in pairs(idlinks) do
idlinktext = idlinktext .. idlink .. '\n'
end
idlinktext = idlinktext .. ')</small>'
table.insert(gloss_text_parts, idlinktext)
table.insert(idlinkset, idlinks)
end
local externallinks = getArticleLinks(frame, sense)
if externallinks ~= '' then
table.insert(gloss_text_parts, externallinks)
end
local new_notes = {}
local sense_keys = { sense:getId(), string.sub(sense:getId(), string.find(sense:getId(), '-')+1) }
for _, v in ipairs(sense_keys) do
if args[v] then
table.insert(new_notes, args[v])
end
end
if #new_notes > 0 then
for _, v in ipairs(new_notes) do
if i == 1 then
table.insert(gloss_text_parts, '<br/>' .. v)
else
table.insert(gloss_text_parts, v)
end
end
end
local examples
examples, references_seen = unpack(getExamples( current_lexeme, sense:getId(), references_seen ))
local gloss_text = table.concat(gloss_text_parts, '\n')
meanings:tag('li'):wikitext(gloss_text):wikitext(examples)
end
return {meanings, references_seen, idlinkset}
end
local function getPronunciationBaseForm()
local base_form = nil
-- (!) অন্য ভাষার শব্দের যদি অন্য রকম মূল ফর্ম থাকে সেগুলো এখানে নতুন if বিবৃতি দিয়ে যোগ করা যায়।
if lang_code == 'bn' then
if lex_cat == 'Q1084' then -- বিশেষ্য
base_form = formWithSingleGrammaticalFeature( 'Q131105' ) -- কর্তৃকারক
elseif lex_cat == 'Q24905' then -- ক্রিয়া
base_form = formWithSingleGrammaticalFeature( 'Q1350145' ) -- ক্রিয়া বিশেষ্য
end
end
if base_form == nil then
for i, form in pairs(forms) do
base_form = form
break
end
end
return base_form
end
local function getCombines( current_lexeme, frame )
local combines = ''
local index_mappings = {}
for i, stmt in pairs(current_lexeme:getAllStatements('P5238')) do
if stmt.qualifiers and stmt.qualifiers['P1545'] then -- ক্রম
local current_index = tonumber(stmt.qualifiers['P1545'][1].datavalue.value)
index_mappings[current_index] = stmt
end
end
if #index_mappings ~= 0 then
for i, stmt in ipairs(index_mappings) do
if stmt.mainsnak.datavalue then
local part_lexeme_id = stmt.mainsnak.datavalue.value.id
local part_lexeme = getEntity(part_lexeme_id)
local current_substring = getLinkedLemmata(part_lexeme, frame)
local part_etymology = getEtymology(part_lexeme, frame, 'partial')
if part_etymology ~= '' and part_etymology then
current_substring = current_substring .. ' (← ' .. part_etymology .. ')'
end
if combines == '' then
combines = current_substring
else -- @TODO: This should use the 'affix' and 'compound' templates instead.
combines = combines .. ' + ' .. current_substring
end
end
end
end
return combines
end
function getRoots(lexeme, frame)
local stmts = lexeme:getAllStatements('P5920')
if #stmts == 0 then return '', '', '' end
local root_lexeme = getEntity(stmts[1].mainsnak.datavalue.value.id)
return getLexemeLanguageCode(root_lexeme), '√' .. getLinkedLemmata(root_lexeme, frame), root_lexeme:getLemma('ar')
end
function getEtymology( current_lexeme, frame, mode )
-- @TODO: Fix the etymology chains that are not possible to render
local etymology = ''
local current_combines = getCombines(current_lexeme, frame)
local root_lang, current_roots, root_str = getRoots(current_lexeme, frame)
if mode ~= 'partial' and root_str then
--frame:expandTemplate{title=i18n['template_root'], args={lang_code, root_lang, root_str}}
end
local stmts = current_lexeme:getAllStatements('P5191')
local new_etymology_string
if #stmts == 0 then
if current_roots ~= '' and current_combines ~= '' and current_roots then
return current_roots .. '<br/>(' .. current_combines .. ')'
elseif current_roots ~= '' then
if lang_code == 'ar' and mode ~= 'partial' and root_str ~= matched_lemma then
return frame:expandTemplate{title=i18n['template_ar-rootbox'], args={root_str}}
else
return current_roots
end
else
return current_combines
end
end
local origin_lexeme_string
for i, stmt in pairs(stmts) do
local origin_lexeme_dv = stmt.mainsnak.datavalue -- If this is nil, the origin lexeme is not known.
if origin_lexeme_dv then
local origin_lexeme = getEntity(origin_lexeme_dv.value.id)
local origin_lexeme_lang = getLabel(origin_lexeme:getLanguage())
local sitelink = i18n.wplink(origin_lexeme:getLanguage(), origin_lexeme_lang, wb)
if sitelink ~= '' then
origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. sitelink .. ')'
else
origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. origin_lexeme_lang .. ')'
end
if stmt.qualifiers and stmt.qualifiers['P5886'] then
local mode_of_derivation = stmt.qualifiers['P5886'][1].datavalue.value.id
if mode_of_derivation == 'Q1345001' then
-- @TODO: Add support for showing gender
origin_lexeme_string = frame:expandTemplate{title=i18n['template_borrowed'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_borrowing']
elseif mode_of_derivation == 'Q845079' then
origin_lexeme_string = ustring.gsub(i18n['etymology_learned_borrowing'], '$1', origin_lexeme_string)
elseif mode_of_derivation == 'Q56611986' then
origin_lexeme_string = frame:expandTemplate{title=i18n['template_inherited'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_inheritance']
elseif mode_of_derivation == 'Q189743' then
origin_lexeme_string = frame:expandTemplate{title=i18n['template_ellipsis'], args={lang_code, getLemmata(origin_lexeme)}} .. ' ' .. i18n['etymology_ellipsis']
end
end
local origin_origin = getEtymology(origin_lexeme, frame)
if origin_origin ~= '' and origin_origin then
new_etymology_string = origin_lexeme_string .. ' ← ' .. origin_origin
else
new_etymology_string = origin_lexeme_string
end
end
if etymology == '' then
etymology = new_etymology_string
elseif origin_lexeme_string and etymology then
etymology = etymology .. ' ' .. origin_lexeme_string
elseif origin_lexeme_string and etymology == nil then
etymology = origin_lexeme_string
end
end
if current_roots ~= '' and etymology and current_roots then
etymology = etymology .. ' ' .. current_roots
elseif current_roots ~= '' and etymology == nil then
etymology = current_roots
end
if current_combines ~= '' and etymology then
etymology = etymology .. '<br/>(' .. current_combines .. ')'
end
return etymology
end
local function pronunciationBlock(block, value)
return '* ' .. i18n['text_' .. block] .. ' ' .. value
end
local function getPronunciation(frame, current_lexeme, lang_name)
local pronunciations = {}
local base_form = getPronunciationBaseForm()
local iast, iso15919_transcription, itrans, xsampa
if base_form then
for i, stmt in pairs(base_form:getAllStatements('P443')) do -- উচ্চারণের অডিও
local pronunciation_file = stmt.mainsnak.datavalue.value
local specifier_text = ''
local specifiers = {}
if stmt.qualifiers then
for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন
local qual = stmt.qualifiers[property_id]
if qual then
for _, qual in pairs(qual) do
local stmt_value = qual.datavalue.value.id
table.insert(specifiers, getLabel(stmt_value))
end
end
end
end
if #specifiers > 0 then
specifier_text = table.concat(specifiers, "'', ''")
end
local audio_text
if specifier_text ~= '' then
audio_text = i18n['text_audio'] .. ' (' .. specifier_text .. ')'
else
audio_text = i18n['text_audio']
end
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title= i18n['template_audio'],
args = {lang_name, pronunciation_file, audio_text}
})
end
iso15919_transcription = getOneValueForProperty(base_form, 'P5825') -- আইএসও ১৫৯১৯ প্রতিলিপিকরণ
itrans = getOneValueForProperty(base_form, 'P8881') -- ITRANS
iast = getOneValueForProperty(base_form, 'P7581') -- আইএএসটি প্রতিলিপিকরণ
xsampa = getOneValueForProperty(base_form, 'P2859')
local ipa_transcription = base_form:getAllStatements('P898') -- আধ্বব প্রতিলিপিকরণ
-- @TODO: অডিও ও প্রতিলিপিকরণ দুটোই থাকলে একটার ঠিক পরেই আরেকটা দেখানো উচিত
if #ipa_transcription ~= 0 then
for i, stmt in pairs(ipa_transcription) do
local ipa_text = stmt.mainsnak.datavalue.value
local specifier_text = ''
local specifiers = {}
if stmt.qualifiers then
for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন
for l, qual in ipairs(stmt.qualifiers[property_id]) do
table.insert(specifiers, getLabel( qual.datavalue.value.id ))
end
end
end
if #specifiers > 0 then
specifier_text = "(''" .. table.concat(specifiers, "'', ''") .. "'') "
end
local syllable_count
if lang_code == 'tr' then
syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z10029|' .. ipa_text, frame)
else
syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z30837|' .. ipa_text, frame)
end
table.insert(pronunciations, '* ' .. specifier_text .. frame:expandTemplate{
title= i18n['template_ipa'],
args = {lang_name, ipa_text}
} .. '\n** ' .. syllable_count)
end
-- The following checks are ordered based on which one is expected to be true in a higher number of cases.
elseif lang_code == 'bn' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='bn-IPA',
})
elseif lang_code == 'ar' then
local lemma = current_lexeme:getLemma('ar')
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='ar-IPA',
args={lemma}
})
elseif lang_code == 'en' then
table.insert(pronunciations, '* ' .. i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z29940|' .. matched_lemma, frame))
elseif lang_code == 'pl' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='pl-IPA',
})
elseif lang_code == 'ko' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='ko-IPA',
})
elseif lang_code == 'fi' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='fi-IPA',
})
elseif lang_code == 'ta' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='ta-IPA',
})
elseif lang_code == 'fax' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='fax-pron',
})
end
end -- {{আধ্বব|en|/ˈɪntəvjuː/}}
if iso15919_transcription then
table.insert(pronunciations, pronunciationBlock('iso15919', iso15919_transcription))
end
if itrans then
table.insert(pronunciations, pronunciationBlock('itrans', itrans))
end
if iast then
table.insert(pronunciations, pronunciationBlock('iast', iast))
end
if xsampa then
table.insert(pronunciations, pronunciationBlock('xsampa', xsampa))
end
return table.concat(pronunciations, '\n')
end
local function getAlternativeSpellings( current_lexeme, frame )
local alt_spellings = {}
for i, stmt in pairs(current_lexeme:getAllStatements('P11577')) do -- বিকল্প বানান
if stmt.mainsnak.datavalue then
table.insert(alt_spellings, '* ' .. frame:expandTemplate{title=i18n['template_alter'], args={lang_code, getLemmata(getEntity(stmt.mainsnak.datavalue.value.id), frame)}})
end
end
return table.concat(alt_spellings, '\n')
end
function get_any_notes(sections, args, keys)
local notes = {}
for i, v in ipairs(keys) do
if args[v] then
table.insert(notes, args[v])
end
end
return notes
end
local function add_specific_notes(sections, notes)
for i, v in ipairs(notes) do
table.insert(sections, v)
end
end
local function add_any_notes(sections, args, keys, heading)
for i, v in ipairs(keys) do
if args[v] then
if heading then
table.insert(sections, heading)
end
table.insert(sections, args[v])
end
end
end
local function getMatchingLemmaForPageTitle(lexeme, title)
local lemmas = lexeme:getLemmas()
local match
for _, lemma_entry in ipairs(lemmas) do
local lemma = lemma_entry[1]
if lemma == title then
match = lemma
break
end
end
if match == nil then
if lang_code == 'ar' then
match = lexeme:getLemma('ar')
elseif lang_code == 'rhg' then
match = lexeme:getLemma('rhg-arab')
elseif lang_id == 'Q11051ur' then
match = lexeme:getLemma('ur')
elseif lang_code == 'arz' then
match = lexeme:getLemma('arz')
end
end
return match
end
-- Returns the grammatical gender of a lexeme
local function getGenderOfLexeme(lexeme)
local gender = ''
local stmts = lexeme:getAllStatements('P5185') -- ব্যাকরণগত লিঙ্গ
if #stmts ~= 0 and stmts[1].mainsnak.datavalue then
if #stmts == 1 then
local gender_qid = stmts[1].mainsnak.datavalue.value.id
if gender_qid == 'Q499327' then
gender = 'm'
elseif gender_qid == 'Q1775415' then
gender = 'f'
elseif gender_qid == 'Q1775461' then
gender = 'n'
elseif gender_qid == 'Q1305037' then
gender = 'c'
end
end
else
for i, stmt in pairs(stmts) do
local qid = stmts[i].mainsnak.datavalue
if qid then
qid = qid.value.id
end
if qid == 'Q499327' then
gender = gender .. 'm'
elseif qid == 'Q1775415' then
gender = gender .. 'f'
end
end
end
if gender == '' then
return nil
end
return gender
end
-- Returns the semantic gender for a sense
-- @TODO: Complete this
local function getGenderForSense(sense)
local gender = ''
local stmts = sense:getAllStatements('P10339') -- semantic gender
if #stmts ~= 0 and stmts[1].mainsnak.datavalue then
if #stmts == 1 then
local gender_qid = stmts[1].mainsnak.datavalue.value.id
if gender_qid == 'Q6581097' then
gender = 'm'
elseif gender_qid == 'Q1775415' then
gender = 'f'
elseif gender_qid == 'Q1775461' then
gender = 'n'
elseif gender_qid == 'Q1305037' then
gender = 'c'
elseif gender_qid == 'Q70853302' then
gender = 'mfbysense'
end
end
else
for i, stmt in pairs(stmts) do
local qid = stmts[i].mainsnak.datavalue
if qid then
qid = qid.value.id
end
if qid == 'Q499327' then
gender = gender .. 'm'
elseif qid == 'Q1775415' then
gender = gender .. 'f'
end
end
end
return gender
end
local function buildLanguageAgnosticInflectionTable()
local has_image = false
local form_images = {}
for i, form in ipairs(forms) do
local form_image = form:getAllStatements('P7407')
if next(form_image) then
form_images[i] = form_image[1].mainsnak.datavalue.value
has_image = true
end
end
local table_class = "wikitable mw-collapsible sortable"
if not has_image then
table_class = table_class .. " mw-collapsed"
end
local text = "{| class='" .. table_class .. "' style='border:solid 1px rgb(80%,80%,100%); text-align:center;'\n"
text = text .. "|+ " .. i18n['heading_inflection_table'] .. "\n"
text = text .. "|- \n"
text = text .. "! " .. i18n['heading_form'] .. " !! " .. i18n['heading_grammatical_features']
if has_image then
text = text .. " !! " .. (i18n['heading_image'])
end
text = text .. " \n"
for i, form in ipairs(forms) do
local rep = form:getRepresentations()
local feat = form:getGrammaticalFeatures()
local rep_text = ""
for j, r in pairs(rep) do
if rep_text == "" then
rep_text = r[1]
else
rep_text = rep_text .. " / " .. r[1]
end
end
local feat_text = ""
if feat then
for j, f in ipairs(feat) do
local label = getLabel(f) or f
if feat_text == "" then
feat_text = label
else
feat_text = feat_text .. ", " .. label
end
end
end
text = text .. "|-\n"
text = text .. "| " .. (rep_text ~= "" and rep_text or "—")
text = text .. " || " .. (feat_text ~= "" and feat_text or "—")
if has_image then
local image_cell = "—"
if form_images[i] then
image_cell = "[[চিত্র:" .. form_images[i] .. "|50px]]"
end
text = text .. " || " .. image_cell
end
text = text .. "\n"
end
text = text .. "|}"
return text
end
function p.all(frame)
local args = getArgs(frame)
local lexeme_id = args[1]
local current_lexeme = getEntity(lexeme_id)
local language = current_lexeme:getLanguage()
lang_id = language
local senses = current_lexeme:getSenses()
local add_heading = true
forms = current_lexeme:getForms()
if args[2] then
local val = mw.text.trim(tostring(args[2]))
if val == "false" or val == "0" or val == "না" then
add_heading = false
end
end
local references_seen = {}
local sections = {}
local title = mw.title.getCurrentTitle().text
local lang_category = getLanguageForCategories(title, true)
local lang_name = getLabel(lang_category)
local conj_class = getLastValueForProperty(current_lexeme, 'P5186')
if conj_class then
conj_class = wb.getLabelByLang(getLastValueForProperty(current_lexeme, 'P5186').id, 'en'):gsub('Form ', '')
end
if add_heading == true then
local lang_heading = heading_level(lang_name, 2)
table.insert(sections, lang_heading)
end
lang_code = getLexemeLanguageCode(current_lexeme)
matched_lemma = getMatchingLemmaForPageTitle(current_lexeme, title)
lex_cat = current_lexeme:getLexicalCategory()
local cat = i18n.lang_category(getLabel(lex_cat), lang_name)
local lex_cat_template, ety_added, pron_added, alt_added
if cat then
table.insert(sections, heading_level(getLabel(lex_cat) .. cat .. frame:expandTemplate{
title = i18n['template_anchor'],
args = { lexeme_id }
}, 3))
table.insert(sections, frame:expandTemplate{
title= i18n['template_lexeme'],
args = {lexeme_id}
})
add_any_notes(sections, args, i18n['manual_category'])
local etymology = getEtymology( current_lexeme, frame )
if etymology ~= '' and etymology then
table.insert(sections, heading_level(i18n['heading_etymology'], 4))
table.insert(sections, tostring(etymology))
ety_added = true
end
if ety_added then
add_any_notes(sections, args, i18n['manual_etymology'])
else
add_any_notes(sections, args, i18n['manual_etymology'], heading_level(i18n['heading_etymology'], 4))
end
local pronunciation = getPronunciation( frame, current_lexeme, lang_name)
if pronunciation ~= '' then
table.insert(sections, heading_level(i18n['heading_pronunciation'], 4))
table.insert(sections, tostring(pronunciation))
pron_added = true
end
if pron_added then
add_any_notes(sections, args, i18n['manual_pronunciation'])
else
add_any_notes(sections, args, i18n['manual_pronunciation'], heading_level(i18n['heading_pronunciation'], 4))
end
local alternative_spellings = getAlternativeSpellings(current_lexeme, frame)
if alternative_spellings ~= '' then
table.insert(sections, heading_level(i18n['heading_alternative_spellings'], 4))
table.insert(sections, alternative_spellings)
alt_added = true
end
if alt_added then
add_any_notes(sections, args, i18n['manual_alternative_spellings'])
else
add_any_notes(sections, args, i18n['manual_alternative_spellings'], heading_level( i18n['heading_alternative_spellings'], 4))
end
local gender = getGenderOfLexeme(current_lexeme)
if lang_code and lang_code ~= 'ksy' and lang_code ~= 'rkt' then -- Skip for Kharia Thar, Rangpuri
if lex_cat == 'Q34698' then -- বিশেষণ
if lang_code == 'en' or lang_code == 'bn' then
if #forms <= 1 then
lex_cat_template = frame:expandTemplate{title= lang_code .. '-বিশেষণ'}
end
else
if lang_code ~= 'fr' then
lex_cat_template = safeExpand(frame, lang_code .. '-adj')
if not lex_cat_template then
lex_cat_template = safeExpand(frame, lang_code .. '-বিশেষণ')
end
end
end
elseif lex_cat == 'Q1084' then -- @TODO: Also check for plural forms
-- The following checks are ordered based on which one is expected to be true in a higher number of cases.
if language == 'Q13955' then
if matched_lemma then
lex_cat_template = safeExpand(frame, 'ar-noun', {matched_lemma,gender})
else
lex_cat_template = frame:expandTemplate{title='ar-noun', args={nil,gender}}
end
elseif language == 'Q29919' then
lex_cat_template = frame:expandTemplate{title='arz-noun', args={g=gender}}
elseif language == 'Q397' then
if matched_lemma then
lex_cat_template = frame:expandTemplate{title='la-noun', args={matched_lemma,g=gender}}
end
elseif language == 'Q11059' then
lex_cat_template = frame:expandTemplate{title='sa-noun', args={g=gender}}
elseif language ~= 'Q1860' then -- These templates require the gender to be passed as the 1st argument.
lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix'], {gender})
if not lex_cat_template then
lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix_fallback'], {gender})
end
end
elseif lex_cat == 'Q24905' then -- ক্রিয়া
if lang_code == 'ar' then
if conj_class then
lex_cat_template = frame:expandTemplate{title='ar-verb', args={conj_class}}
end
else
lex_cat_template = safeExpand(frame, lang_code .. '-verb')
end
end
end
-- elseif lex_cat == 'Q147276' then
-- lex_cat_template = safeExpand(frame, lang_code .. '-proper noun', {gender})
-- if not lex_cat_template then
-- lex_cat_template = safeExpand(frame, lang_code .. '-নামবাচক বিশেষ্য', {gender})
-- end
end
if lex_cat_template then
table.insert(sections, lex_cat_template)
else
if matched_lemma then
table.insert(sections, heading_level(matched_lemma, 4))
else
table.insert(sections, i18n.tocatlink(i18n['category_no_matching_lemma']))
end
end
local meanings, references_seen, sense_extlinks = unpack(getMeanings( frame, args, current_lexeme, senses, references_seen, lang_name))
table.insert(sections, tostring(meanings))
add_any_notes(sections, args, i18n['manual_meaning'])
local instance_of = current_lexeme:getAllStatements('P31') -- সত্ত্বার ধরন
if #instance_of ~= 0 then
local instance_of_entity = instance_of[1].mainsnak.datavalue.value.id
if instance_of_entity == 'Q376431' then -- বর্ণের নাম
table.insert(sections, i18n.tocatlink(lang_code .. ':রং'))
else
table.insert(sections, heading_level(i18n['heading_special_info'], 4) .. i18n['text_instance_of'] .. ' ' .. '[[d:' .. instance_of_entity .. '|' .. getLabel(instance_of_entity) .. ']]' .. i18n['text_sentence_terminator'])
end
end
if lex_cat ~= 'Q9788' then
local translations = getTranslations(frame, senses)
if translations then
table.insert(sections, translations)
end
end
-- (!) বিশেষ ভাষার বিভক্তির সারণি যদি থাকে সেগুলো এখানে নতুন if বিবৃতি যোগ করা যায়।
if next(forms) then
if language == 'Q9610' then -- বাংলা
if lex_cat == 'Q24905' then
local conjTable = require('মডিউল:আভিধানিক উপাত্ত/Q9610').getConjTable(frame, forms)
table.insert(sections, conjTable)
elseif lex_cat == 'Q1084' or lex_cat == 'Q36224' or lex_cat == 'Q147276' or lex_cat == 'Q956030' then
table.insert(sections, callWikifunctionsFunction('Z33243|' .. lexeme_id .. '|', frame))
else
if #forms > 1 then
table.insert(sections, buildLanguageAgnosticInflectionTable())
end
end
--elseif language == 'Q13955' then -- ar
-- if lex_cat == 'Q1084' then
-- table.insert(sections, frame:expandTemplate{title='ar-decl-noun', args={lemma}})
-- end
--elseif lang_code == 'ar' and lex_cat == 'Q24905' then
--table.insert(sections, frame:expandTemplate{title='ar-conj', args={conj_class}})
elseif language == 'Q11051' and lex_cat == 'Q1084' then -- de
if lang_id == "Q11051hi" then
table.insert(sections, callWikifunctionsFunction('Z37337|' .. lexeme_id .. '|', frame))
else
table.insert(sections, callWikifunctionsFunction('Z37346|' .. lexeme_id .. '|', frame))
end
elseif language == 'Q188' and lex_cat == 'Q1084' then -- de
table.insert(sections, callWikifunctionsFunction('Z28602|' .. lexeme_id .. '|', frame))
elseif lang_code == 'as' and lex_cat == 'Q1084' then
table.insert(sections, callWikifunctionsFunction('Z37219|' .. lexeme_id .. '|', frame))
elseif lang_code == 'ml' and lex_cat == 'Q1084' then
table.insert(sections, callWikifunctionsFunction('Z37217|' .. lexeme_id .. '|', frame))
--elseif language == 'Q397' and lex_cat == 'Q1084' then -- la
-- table.insert(sections, callWikifunctionsFunction('Z26333|' .. matched_lemma .. '|', frame))
elseif language == 'Q150' and lex_cat == 'Q34698' then -- fr
table.insert(sections, callWikifunctionsFunction('Z36435|' .. lexeme_id .. '|', frame))
elseif language == 'Q652' and lex_cat == 'Q34698' then -- ইতালীয়
table.insert(sections, callWikifunctionsFunction('Z36407|' .. lexeme_id .. '|', frame))
elseif language == 'Q809' or language == 'Q9058' or language == 'Q6654' or language == 'Q9056' then -- পোলীয়, স্লোভাক, ক্রোয়েশীয়, চেক
table.insert(sections, callWikifunctionsFunction('Z36421|' .. lexeme_id .. '|', frame))
elseif #forms > 1 and language ~= 'Q150' then
table.insert(sections, buildLanguageAgnosticInflectionTable())
end
end
if lex_cat == 'Q134830' then
table.insert(sections, frame:expandTemplate{title='prefixsee', args={lang_code}})
elseif lex_cat == 'Q102047' then
table.insert(sections, frame:expandTemplate{title='suffixsee', args={lang_code}})
-- elseif lex_cat == 'Q111029' then
-- table.insert(sections, frame:expandTemplate{title='rootsee', args={'+', lang_code, matched_lemma}})
end
local reference_notes = get_any_notes(sections, args, i18n['manual_reference'])
if #references_seen > 0 or #reference_notes > 0 then
table.insert(sections, heading_level(i18n['heading_references'], 4))
table.insert(sections, frame:extensionTag('references'))
add_specific_notes(sections, reference_notes)
end
local external_link_table = getExternalLinks ( current_lexeme )
if #external_link_table > 0 then
local external_links = '* ' .. table.concat(external_link_table, '\n* ')
table.insert(sections, heading_level(i18n['heading_external_links'], 4))
table.insert(sections, external_links)
end
add_any_notes(sections, args, i18n['manual_external_link'])
if #references_seen == 0 and #reference_notes == 0 and sense_extlinks and #sense_extlinks == 0 and #external_link_table == 0 and #get_any_notes(sections, args, i18n['manual_external_link']) == 0 then
table.insert(sections, i18n.rfref_category(lang_name))
end
return table.concat(sections,"\n\n")
end
return p
kbf2y32eq9t7z9395sx4b0xtfnxgchq
514046
514040
2026-07-25T14:49:02Z
Redmin
6857
514046
Scribunto
text/plain
local p = {}
local i18n = require('মডিউল:আভিধানিক উপাত্ত/i18n')
local references = require('মডিউল:উইকিউপাত্ত তথ্যসূত্র বিন্যাসকরণ').format
local getArgs = require('Module:Arguments').getArgs
local wb = mw.wikibase
local ustring = mw.ustring
local html = mw.html
local mw_lang = mw.language
local entity_cache = {}
local reference_cache = {}
local forms
local lang_code
local lex_cat
local matched_lemma
local lang_id
local function wrapStringInWikilinks(str)
local exceptions = i18n.nolinks
local result = str:gsub('(%S+)', function(token)
local word, trailing_char = token:match('^(.-)([;,.:!’?]*)$')
local wrapped = word:gsub('[^(-/]+', function(part)
if exceptions[part] then
return part
else
return '[[' .. mw.text.nowiki(part) .. '#' .. i18n['content_lang_name'] .. '|' .. mw.text.nowiki(part) .. ']]'
end
end)
return wrapped .. trailing_char
end)
return result
end
local function serializeTable(val, name, skipnewlines, depth) -- https://stackoverflow.com/a/6081639
skipnewlines = skipnewlines or false
depth = depth or 0
local tmp = string.rep(" ", depth)
if name then tmp = tmp .. name .. " = " end
if type(val) == "table" then
tmp = tmp .. "{" .. (not skipnewlines and "\n" or "")
for k, v in pairs(val) do
tmp = tmp .. serializeTable(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and "\n" or "")
end
tmp = tmp .. string.rep(" ", depth) .. "}"
elseif type(val) == "number" then
tmp = tmp .. tostring(val)
elseif type(val) == "string" then
tmp = tmp .. string.format("%q", val)
elseif type(val) == "boolean" then
tmp = tmp .. (val and "true" or "false")
else
tmp = tmp .. "\"[inserializable datatype:" .. type(val) .. "]\""
end
return tmp
end
-- Use this to safely expand templates when you are not sure that they exist.
local function safeExpand(frame, title, args)
local _, result = pcall(function()
return frame:expandTemplate{ title = title, args = args }
end)
if result:find('does not exist') then -- expandTemplate{} doesn't seem to throw any error that can be handled with pcall() so string search is the only viable option.
return nil
end
return result
end
local function checkTitleCodePointInRange(title, start_point, end_point)
return ustring.find( title, '[' ..ustring.char(start_point) .. '-' .. ustring.char(end_point) .. ']' )
end
local function getLanguageForCategories(title)
-- বিশেষ ভাষার জন্য
if lang_id == 'Q11051' then -- হিন্দি/উর্দু
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- উর্দু
lang_id = 'Q11051ur'
elseif checkTitleCodePointInRange(title, 0x0900, 0x097f) then -- হিন্দি
lang_id = 'Q11051hi'
end
elseif lang_id == 'Q58635' then -- পাঞ্জাবি
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- শাহমুখী
lang_id = 'Q58635pnb'
elseif checkTitleCodePointInRange(title, 0x0a00, 0x0a7f) then -- গুরুমুখী
lang_id = 'Q58635pa'
end
elseif lang_id == 'Q56356571' then -- নয়া ফার্সি ভাষা
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- ফার্সি (ইরান/আফগানিস্তান)
lang_id = 'Q56356571fa'
elseif checkTitleCodePointInRange(title, 0x0400, 0x04ff) then -- তাজিক
lang_id = 'Q56356571tg'
end
elseif lang_id == 'Q256' then
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then
lang_id = 'Q56356571ota'
else
lang_id = 'Q56356571tr'
end
end
return lang_id
end
local function getEntity(id)
if entity_cache[id] == nil then
entity_cache[id] = wb.getEntity(id) or error('Invalid ID provided: ' .. id)
end
return entity_cache[id] ~= false and entity_cache[id] or nil
end
-- Use this function to get the label of an item even if that item does not have any label in the wiki's content language or English.
local function getLabel(id)
if id == 'Q11051hi' then
return 'হিন্দি'
elseif id == 'Q11051ur' then
return 'উর্দু'
elseif id == 'Q56356571fa' then
return 'ফার্সি'
elseif id == 'Q56356571tg' then
return 'তাজিক'
elseif id == 'Q58635pa' or id == 'Q58635pnb' then
return 'পাঞ্জাবি'
elseif id == 'Q256tr' then
return 'তুর্কি'
elseif id == 'Q256ota' then
return 'উসমানীয় তুর্কি'
end
local label = wb.getLabel(id)
if label then
return label
end
local labels = getEntity(id).labels
if not labels then
return id
end
for _, v in pairs(labels) do
if v and v.value then
return v.value
end
end
end
local function getReference(id, reference)
local out_id = nil
local url_value
if reference_cache[id] == nil then
local ref_text = references(reference, wb, mw_lang, i18n['content_lang_code'], i18n['wikipedia'])
if reference.snaks then
if reference.snaks['P248'] then
for _, snak in pairs(reference.snaks['P248']) do
if snak.datavalue and snak.datavalue.value.id == 'Q428' then -- কুরআন
ref_text = ustring.gsub(ref_text, 'নামক অনুচ্ছেদ', 'নং আয়াত')
break
end
end
end
if reference.snaks['P854'] then
local snak = reference.snaks['P854'][1]
if snak.datavalue then
url_value = snak.datavalue.value
end
end
end
if url_value then
ref_text = ref_text .. ', [' .. url_value .. ' সংযোগ]'
end
reference_cache[id] = ref_text
else
out_id = id
end
return {out_id, reference_cache[id]}
end
-- Returns the Wiktionary language code for a lexeme entity or nil, in the latter case, getLemmas() can be relied on to fetch the language code by stripping extraneous bits from the 'language' string as necessary
local function getLexemeLanguageCode(lexeme)
local lang_item_id = lexeme:getLanguage()
local lang_entity = getEntity(lang_item_id)
for i, statement_property in ipairs({'P305','P424', 'P220'}) do -- আইইটিএফ ভাষা ট্যাগ, উইকিমিডিয়া ভাষা কোড, আইএসও ৬৩৯-৩
local statements = lang_entity:getBestStatements(statement_property)
if statements[1] then
local code = statements[1].mainsnak.datavalue.value
if code == 'hr' then
return 'sh'
elseif code == 'pan' then
return 'pa'
else
return code
end
end
end
end
local function getLexemeLanguageCodeForEtymology(lexeme)
local lang_item_id = lexeme:getLanguage()
if lang_item_id == 'Q56356571' then
return 'fa' -- @TODO: Implement a proper solution
end
return getLexemeLanguageCode(lexeme)
end
-- Return the first form of the lexeme which has exactly the given grammatical feature.
local function formWithSingleGrammaticalFeature( item_id )
for i = 1, #forms do
local grammaticalFeatures = forms[i]:getGrammaticalFeatures()
if #grammaticalFeatures == 1 and grammaticalFeatures[1] == item_id then
return forms[i]
end
end
return nil
end
local function getArticleLinkTemplate(frame, stmt_value)
local template = ''
local sitelink = getEntity(stmt_value):getSitelink(i18n['wikipedia'])
if sitelink then
template = frame:expandTemplate{
title=i18n['template_wikipedia'],
args={sitelink}
}
end
return template
end
local function getArticleLinks(frame, sense )
local article_links = ''
for i, stmt in pairs(sense:getAllStatements('P5137')) do -- এই অর্থের জন্য আইটেম
article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id)
end
for i, stmt in pairs(sense:getAllStatements('P9970')) do -- এই অর্থের জন্য বিধেয়
article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id)
end
return article_links
end
-- @TODO: Generalise
local function expandTemplateForProperty(frame, object, property, template)
local lemmas = {}
local n = 0
for _, stmt in pairs(object:getAllStatements(property)) do
local lex = wb.lexeme.splitLexemeId(stmt.mainsnak.datavalue.value.id)
if lex then
lex = getEntity(lex)
n = n + 1
lemmas[n] = lex:getLemma(lang_code)
end
end
if not lang_code or n == 0 then
return ''
end
-- Build args: first lang_code, then lemmas
local args = {lang_code}
for i = 1, n do
args[#args + 1] = lemmas[i]
end
return frame:expandTemplate{
title = template,
args = args
}
end
local function getExternalLinks( entity ) -- T418639
local external_links = {}
if entity.claims == nil then return external_links end
local formatter_urls = require('মডিউল:আভিধানিক উপাত্ত/urls').formatter_urls
for property_id, statements in pairs(entity.claims) do
local formatter_url = formatter_urls[property_id]
if formatter_url then
local property_source = wb.getBestStatements(property_id, 'P9073')
local source_name
if next(property_source) then
source_name = getLabel(property_source[1].mainsnak.datavalue.value.id)
or property_source[1].mainsnak.datavalue.value.id
else
source_name = getLabel(property_id) or property_id
end
for i = 1, #statements do
local stmt = statements[i]
if stmt.mainsnak.datavalue then
local formatted_link = ustring.gsub(
ustring.gsub(formatter_url, '$1', stmt.mainsnak.datavalue.value),
' ', '+'
)
table.insert(external_links,
'[' .. formatted_link .. ' ' .. source_name .. ']')
end
end
end
end
return external_links
end
p.getExternalLinks = getExternalLinks -- রেখে দিন যাতে ডিবাগিং সম্ভব হয়
local function heading_level(text, level)
return '<h' .. level .. '>' .. ' ' .. text .. ' ' .. '</h' .. level .. '>'
end
local function termSpan( term )
local text = term[1]
local lang = term[2]
local dir = mw_lang.new( lang ):getDir()
local span = html.create( 'span' )
span:attr( 'lang', lang )
:attr( 'dir', dir )
:wikitext( text )
return tostring( span )
end
local function getLemmata( current_lexeme )
local lemma_string = ''
for i, rep in pairs(current_lexeme:getLemmas()) do
if lemma_string == '' then
lemma_string = termSpan(rep)
else
lemma_string = lemma_string .. '/' .. termSpan(rep)
end
end
return lemma_string
end
local function getLinkedLemmata(lexeme, frame)
local lemma_string = ''
local lang
for i, rep in pairs(lexeme:getLemmas()) do
lang = getLexemeLanguageCode(lexeme)
if lang == nil then
lang = string.gsub(rep[2], '-%S+', '')
end
if lemma_string == '' then
lemma_string = frame:expandTemplate{title='link', args={lang, rep[1]}}
else
lemma_string = lemma_string .. '/' .. frame:expandTemplate{title='link', args={lang, rep[1]}}
end
end
return lemma_string
end
local function getExamples( current_lexeme, sense_id, references_seen )
local examples = html.create('dl')
local example_text, example_lang, example_form, example_str
for i, stmt in pairs(current_lexeme:getAllStatements('P5831')) do -- ব্যবহারের উদাহরণ
if stmt.qualifiers and stmt.qualifiers['P6072'] and stmt.qualifiers['P6072'][1].datavalue.value.id == sense_id then -- বিষয়ে লেক্সিমের অর্থ
example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>')
example_lang = stmt.mainsnak.datavalue.value.language
local example_form_strs = {}
if stmt.qualifiers['P1810'] then
table.insert(example_form_strs, stmt.qualifiers['P1810'][1].datavalue.value)
elseif stmt.qualifiers['P5830'] then
example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- বিষয়ে লেক্সিমের রূপ
for _, rep in pairs(example_form:getRepresentations()) do
table.insert(example_form_strs, rep[1])
end
end
for _, example_form_str in pairs(example_form_strs) do
local new_example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''")
if new_example_text ~= example_text then
example_str = termSpan({new_example_text, example_lang})
break
end
example_text = new_example_text
end
if example_str == nil then
example_str = termSpan({example_text, example_lang})
end
local reference_text = ''
if stmt.references then
for j, reference in pairs(stmt.references) do
table.insert(references_seen, reference.hash)
local got_reference = getReference(reference.hash, reference)
reference_text = reference_text .. '\n\n' .. got_reference[2]
end
end
if example_str then
examples:tag('dd'):wikitext("''" .. example_str .. "''")
if reference_text ~= '' then
examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text)
end
end
end
end
for i, stmt in pairs(wb.getAllStatements(sense_id, 'P5831')) do -- ব্যবহারের উদাহরণ
example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>')
example_lang = stmt.mainsnak.datavalue.value.language
local example_form_str = nil
if stmt.qualifiers then
if stmt.qualifiers['P5830'] then
example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- subject lexeme form
end
if stmt.qualifiers['P1810'] then
example_form_str = stmt.qualifiers['P1810'][1].datavalue.value
end
end
if example_form and example_form_str == nil then
example_form_str = example_form:getRepresentation(i18n['content_lang_code'])
end
if example_form and example_form_str == nil then
example_form_str = example_form:getRepresentations()[1][1]
end
if example_form_str then
example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''")
end
example_str = termSpan({example_text, example_lang})
local reference_text = ''
if stmt.references then
for j, reference in pairs(stmt.references) do
table.insert(references_seen, reference.hash)
local got_reference = getReference(reference.hash, reference)
reference_text = reference_text .. '\n\n' .. got_reference[2]
end
end
if example_str then
examples:tag('dd'):wikitext("''" .. example_str .. "''")
if reference_text ~= '' then
examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text)
end
end
end
return { tostring(examples) , references_seen }
end
-- This calls frame:preprocess() instead of :callParserFunction() because the latter does not work for Wikifunctions function calls yet (see https://www.wikifunctions.org/wiki/Wikifunctions:Embedded_function_calls).
local function callWikifunctionsFunction(args, frame)
return frame:preprocess('{{#function:' .. args .. '}}') .. i18n.tocatlink('উইকিফাংশন্স-এর ফাংশন ব্যবহার করা পাতা')
end
local function getOneValueForProperty(object, property)
local val
local stmts = object:getAllStatements(property)
if #stmts ~= 0 then
val = stmts[1].mainsnak.datavalue.value
end
return val
end
local function getLastValueForProperty(object, property)
local val, count
local stmts = object:getAllStatements(property)
for i, j in ipairs(stmts) do
count = i
end
if count then
val = stmts[count].mainsnak.datavalue.value
end
return val
end
local function getTranslations(frame, senses)
if #senses == 0 then
return nil
end
local all_translations = {}
local wmlang, item, label
for _, sense in pairs(senses) do
local translation_set = {}
local gloss = sense:getGloss(i18n['content_lang_code'])
if lex_cat ~= 'Q34698' then
item = getOneValueForProperty(sense, 'P5137')
if item then
item = item.id
label = getLabel(item)
end
end
if item then
wmlang = require("Module:wikimedia languages")
end
for _, stmt in pairs(sense:getAllStatements('P5972')) do
local translation = stmt.mainsnak.datavalue.value.id
local lexeme_id = wb.lexeme.splitLexemeId(translation)
local trans_lexeme = getEntity(lexeme_id)
local lang_name = getLabel(trans_lexeme:getLanguage())
local trans_code = getLexemeLanguageCode(trans_lexeme)
if trans_code then
table.insert(translation_set, lang_name .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={trans_code, getLinkedLemmata(trans_lexeme, frame) .. '<br/>'}})
else
table.insert(translation_set, lang_name .. ': ' .. getLinkedLemmata(trans_lexeme, frame) .. '<br/>' .. i18n.trans_category(lang_name))
end
end
if item then
for _, v in pairs(getEntity(item).labels) do
if string.find(v.language, '-') == nil then -- @TODO: Implement deduplication of translation and get rid of this check
local lang = wmlang.getByCode(v.language)
local wikt = lang:getWiktionaryLanguage()
if wikt:hasType('regular') then
table.insert(translation_set, getLabel(wikt:getWikidataItem()) .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={wikt:getCode(), v.value .. '<br/>'}})
end
end
end
end
if #translation_set > 0 then
local block = frame:expandTemplate{ title = i18n['template_trans-top'], args = { gloss or label } }
block = block .. table.concat(translation_set, '\n') .. frame:expandTemplate{ title = i18n['template_trans-bottom'] }
table.insert(all_translations, block)
end
end
if #all_translations == 0 then
return nil
end
return heading_level(i18n['heading_translation'], 4) .. ' \n' .. table.concat(all_translations, '\n')
end
local createicon = function(langcode, entityID, propertyID)
langcode = langcode or ""
propertyID = propertyID or ""
local icon = " <span class='penicon autoconfirmed-show'>[["
-- " <span data-bridge-edit-flow='overwrite' class='penicon'>[[" -> enable Wikidata Bridge
.. "File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt="
.. i18n['edit_wikidata']
.. "|link=https://www.wikidata.org/entity/" .. entityID
if langcode ~= "" then icon = icon .. "?uselang=" .. langcode end
if propertyID ~= "" then icon = icon .. "#" .. propertyID end
icon = icon .. "|" .. i18n['edit_wikidata'] .. "]]</span>"
return icon
end
local function getMeanings(frame, args, current_lexeme, senses, references_seen, language_name)
if #senses == 0 then
return {createicon(i18n['content_lang_code'], current_lexeme:getId()) .. "''" .. i18n['text_category_rfdef'] .. "''" .. i18n.tocatlink(i18n['category_rfdef']), references_seen}
end
local meanings = html.create( 'ol' )
local idlinkset = {}
for i, sense in pairs(senses) do
local item_label_gloss_parts = {}
local gloss_text_parts = {}
local main_gloss_text = frame:expandTemplate{
title=i18n['template_anchor'],
args={sense:getId()}
}
local specifiers = {}
for k, property_id in ipairs({'P6084', 'P6191', 'P9488'}) do -- অবস্থান যেখানে শব্দার্থ ব্যবহৃত, যে রীতিতে শব্দার্থ ব্যবহৃত হয়, যে ক্ষেত্রে ব্যবহৃত
for _, stmt in pairs(sense:getAllStatements(property_id)) do
local stmt_value = stmt.mainsnak.datavalue.value.id
local reference_text = ''
local refs = stmt.references
if refs then
for j, reference in pairs(refs) do
table.insert(references_seen, reference.hash)
local got_reference = getReference(reference.hash, reference)
reference_text = reference_text .. '\n\n' .. frame:extensionTag('ref', got_reference[2])
end
end
local val = getLabel(stmt_value)
table.insert(specifiers, val .. reference_text)
if property_id == 'P9488' and lang_code ~= nil then
table.insert(item_label_gloss_parts, i18n.tocatlink(lang_code .. ':' .. val))
end
end
end
if #specifiers > 0 then
main_gloss_text = main_gloss_text .. "(''" .. table.concat(specifiers, "'', ''") .. "'') "
end
local gloss = sense:getGloss( i18n['content_lang_code'] )
if gloss then
main_gloss_text = main_gloss_text .. wrapStringInWikilinks(gloss)
if gloss:match('^প্রদত্ত%s*(%S-)%s*নাম$') then -- given names
main_gloss_text = main_gloss_text .. i18n.tocatlink(language_name .. ' ' .. i18n['category_given_names'])
end
else
local other_gloss_text, other_gloss_lang, item_label
local stmt_value = getOneValueForProperty(sense, 'P5137')
if stmt_value then
stmt_value = stmt_value.id
item_label = getLabel(stmt_value)
end
if item_label then
table.insert(item_label_gloss_parts, '[[:d:' .. stmt_value .. '|' .. item_label .. ']]')
end
if #item_label_gloss_parts > 0 then
other_gloss_text = table.concat(item_label_gloss_parts, '; ')
end
if other_gloss_text == nil then
for _, fallback_lang in ipairs(mw_lang.getFallbacksFor( i18n['content_lang_code'] )) do
if sense:getGloss( fallback_lang ) then
other_gloss_text, other_gloss_lang = sense:getGloss( fallback_lang )
end
end
if other_gloss_lang == nil then
local glosses = sense:getGlosses()
for _, gloss in pairs(glosses) do
other_gloss_text = gloss[1]
other_gloss_lang = gloss[2]
break
end
end
main_gloss_text = main_gloss_text .. other_gloss_text .. "<sup><em>" .. mw_lang.fetchLanguageName(other_gloss_lang, i18n['content_lang_code']) .. "</em></sup>"
else
main_gloss_text = main_gloss_text .. "''" .. other_gloss_text .. "''"
end
main_gloss_text = main_gloss_text .. i18n.tocatlink(i18n['category_rfdef_equivalent'])
end
local synonym = expandTemplateForProperty(frame, sense, 'P5973', i18n['template_synonym'])
if synonym ~= '' then
main_gloss_text = main_gloss_text .. ' <br/> ' .. synonym
end
local antonym = expandTemplateForProperty(frame, sense, 'P5974', i18n['template_antonym'])
if antonym ~= '' then
main_gloss_text = main_gloss_text .. ' <br/> ' .. antonym
end
local hypernym = expandTemplateForProperty(frame, sense, 'P6593', i18n['template_hypernym'])
if hypernym ~= '' then
main_gloss_text = main_gloss_text .. ' <br/> ' .. hypernym
end
if lex_cat == 'Q1084' or lex_cat == 'Q147276' then -- noun or proper noun
local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-noun'])
main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym
elseif lex_cat == 'Q34698' then
local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-adj'])
main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym
end
table.insert(gloss_text_parts, main_gloss_text .. createicon(i18n['content_lang_code'], sense:getId()))
for _, stmt in pairs(sense:getAllStatements('P8394')) do -- টিপ্পনীর উদ্ধৃতি
local gloss_quote = termSpan({stmt.mainsnak.datavalue.value.text, stmt.mainsnak.datavalue.value.language})
if stmt.references[1] then
local got_reference = getReference ( stmt.references[1].hash, stmt.references[1] )
gloss_quote = '"' .. gloss_quote .. '" ' .. got_reference[2]
end
table.insert(references_seen, stmt.references[1].hash)
table.insert(gloss_text_parts, frame:extensionTag('ref', gloss_quote))
end
for _, stmt in pairs(sense:getAllStatements('P1343')) do -- বর্ণিত উৎস
-- TODO: do away with making fake reference objects
local fake_reference = { ['snaks'] = {} }
fake_reference.snaks['P248'] = { [1] = stmt.mainsnak }
local qualifiers_order = stmt['qualifiers-order']
if qualifiers_order then
for _, k in ipairs(qualifiers_order) do fake_reference.snaks[k] = stmt.qualifiers[k] end
end
fake_reference.hash = mw.hash.hashValue('sha3-512', serializeTable(fake_reference))
table.insert(references_seen, fake_reference.hash)
local got_reference = getReference(fake_reference.hash, fake_reference)
if got_reference[1] == nil then
table.insert(gloss_text_parts, frame:extensionTag('ref', got_reference[2], {name = fake_reference.hash}))
else
table.insert(gloss_text_parts, frame:extensionTag{name = 'ref', content='', args = {name = got_reference[1]}})
end
end
local first_sense_image = ''
local sense_images = sense:getAllStatements('P18')
if next(sense_images) then
first_sense_image = sense_images[1].mainsnak.datavalue.value
end
if first_sense_image ~= '' then
table.insert(gloss_text_parts, '[[File:' .. first_sense_image .. "|thumb|'''" .. getLemmata(current_lexeme) .. "'''—" .. main_gloss_text .. ']]')
end
local idlinks = getExternalLinks(sense)
if #idlinks > 0 then
local idlinktext = '<small>('
for _, idlink in pairs(idlinks) do
idlinktext = idlinktext .. idlink .. '\n'
end
idlinktext = idlinktext .. ')</small>'
table.insert(gloss_text_parts, idlinktext)
table.insert(idlinkset, idlinks)
end
local externallinks = getArticleLinks(frame, sense)
if externallinks ~= '' then
table.insert(gloss_text_parts, externallinks)
end
local new_notes = {}
local sense_keys = { sense:getId(), string.sub(sense:getId(), string.find(sense:getId(), '-')+1) }
for _, v in ipairs(sense_keys) do
if args[v] then
table.insert(new_notes, args[v])
end
end
if #new_notes > 0 then
for _, v in ipairs(new_notes) do
if i == 1 then
table.insert(gloss_text_parts, '<br/>' .. v)
else
table.insert(gloss_text_parts, v)
end
end
end
local examples
examples, references_seen = unpack(getExamples( current_lexeme, sense:getId(), references_seen ))
local gloss_text = table.concat(gloss_text_parts, '\n')
meanings:tag('li'):wikitext(gloss_text):wikitext(examples)
end
return {meanings, references_seen, idlinkset}
end
local function getPronunciationBaseForm()
local base_form = nil
-- (!) অন্য ভাষার শব্দের যদি অন্য রকম মূল ফর্ম থাকে সেগুলো এখানে নতুন if বিবৃতি দিয়ে যোগ করা যায়।
if lang_code == 'bn' then
if lex_cat == 'Q1084' then -- বিশেষ্য
base_form = formWithSingleGrammaticalFeature( 'Q131105' ) -- কর্তৃকারক
elseif lex_cat == 'Q24905' then -- ক্রিয়া
base_form = formWithSingleGrammaticalFeature( 'Q1350145' ) -- ক্রিয়া বিশেষ্য
end
end
if base_form == nil then
for i, form in pairs(forms) do
base_form = form
break
end
end
return base_form
end
local function getCombines( current_lexeme, frame )
local combines = ''
local index_mappings = {}
for i, stmt in pairs(current_lexeme:getAllStatements('P5238')) do
if stmt.qualifiers and stmt.qualifiers['P1545'] then -- ক্রম
local current_index = tonumber(stmt.qualifiers['P1545'][1].datavalue.value)
index_mappings[current_index] = stmt
end
end
if #index_mappings ~= 0 then
for i, stmt in ipairs(index_mappings) do
if stmt.mainsnak.datavalue then
local part_lexeme_id = stmt.mainsnak.datavalue.value.id
local part_lexeme = getEntity(part_lexeme_id)
local current_substring = getLinkedLemmata(part_lexeme, frame)
local part_etymology = getEtymology(part_lexeme, frame, 'partial')
if part_etymology ~= '' and part_etymology then
current_substring = current_substring .. ' (← ' .. part_etymology .. ')'
end
if combines == '' then
combines = current_substring
else -- @TODO: This should use the 'affix' and 'compound' templates instead.
combines = combines .. ' + ' .. current_substring
end
end
end
end
return combines
end
function getRoots(lexeme, frame)
local stmts = lexeme:getAllStatements('P5920')
if #stmts == 0 then return '', '', '' end
local root_lexeme = getEntity(stmts[1].mainsnak.datavalue.value.id)
return getLexemeLanguageCode(root_lexeme), '√' .. getLinkedLemmata(root_lexeme, frame), root_lexeme:getLemma('ar')
end
function getEtymology( current_lexeme, frame, mode )
-- @TODO: Fix the etymology chains that are not possible to render
local etymology = ''
local current_combines = getCombines(current_lexeme, frame)
local root_lang, current_roots, root_str = getRoots(current_lexeme, frame)
if mode ~= 'partial' and root_str then
--frame:expandTemplate{title=i18n['template_root'], args={lang_code, root_lang, root_str}}
end
local stmts = current_lexeme:getAllStatements('P5191')
local new_etymology_string
if #stmts == 0 then
if current_roots ~= '' and current_combines ~= '' and current_roots then
return current_roots .. '<br/>(' .. current_combines .. ')'
elseif current_roots ~= '' then
if lang_code == 'ar' and mode ~= 'partial' and root_str ~= matched_lemma then
return frame:expandTemplate{title=i18n['template_ar-rootbox'], args={root_str}}
else
return current_roots
end
else
return current_combines
end
end
local origin_lexeme_string
for i, stmt in pairs(stmts) do
local origin_lexeme_dv = stmt.mainsnak.datavalue -- If this is nil, the origin lexeme is not known.
if origin_lexeme_dv then
local origin_lexeme = getEntity(origin_lexeme_dv.value.id)
local origin_lexeme_lang = getLabel(origin_lexeme:getLanguage())
local sitelink = i18n.wplink(origin_lexeme:getLanguage(), origin_lexeme_lang, wb)
if sitelink ~= '' then
origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. sitelink .. ')'
else
origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. origin_lexeme_lang .. ')'
end
if stmt.qualifiers and stmt.qualifiers['P5886'] then
local mode_of_derivation = stmt.qualifiers['P5886'][1].datavalue.value.id
if mode_of_derivation == 'Q1345001' then
-- @TODO: Add support for showing gender
origin_lexeme_string = frame:expandTemplate{title=i18n['template_borrowed'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_borrowing']
elseif mode_of_derivation == 'Q845079' then
origin_lexeme_string = ustring.gsub(i18n['etymology_learned_borrowing'], '$1', origin_lexeme_string)
elseif mode_of_derivation == 'Q56611986' then
origin_lexeme_string = frame:expandTemplate{title=i18n['template_inherited'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_inheritance']
elseif mode_of_derivation == 'Q189743' then
origin_lexeme_string = frame:expandTemplate{title=i18n['template_ellipsis'], args={lang_code, getLemmata(origin_lexeme)}} .. ' ' .. i18n['etymology_ellipsis']
end
end
local origin_origin = getEtymology(origin_lexeme, frame)
if origin_origin ~= '' and origin_origin then
new_etymology_string = origin_lexeme_string .. ' ← ' .. origin_origin
else
new_etymology_string = origin_lexeme_string
end
end
if etymology == '' then
etymology = new_etymology_string
elseif origin_lexeme_string and etymology then
etymology = etymology .. ' ' .. origin_lexeme_string
elseif origin_lexeme_string and etymology == nil then
etymology = origin_lexeme_string
end
end
if current_roots ~= '' and etymology and current_roots then
etymology = etymology .. ' ' .. current_roots
elseif current_roots ~= '' and etymology == nil then
etymology = current_roots
end
if current_combines ~= '' and etymology then
etymology = etymology .. '<br/>(' .. current_combines .. ')'
end
return etymology
end
local function pronunciationBlock(block, value)
return '* ' .. i18n['text_' .. block] .. ' ' .. value
end
local function getPronunciation(frame, current_lexeme, lang_name)
local pronunciations = {}
local base_form = getPronunciationBaseForm()
local iast, iso15919_transcription, itrans, xsampa
if base_form then
for i, stmt in pairs(base_form:getAllStatements('P443')) do -- উচ্চারণের অডিও
local pronunciation_file = stmt.mainsnak.datavalue.value
local specifier_text = ''
local specifiers = {}
if stmt.qualifiers then
for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন
local qual = stmt.qualifiers[property_id]
if qual then
for _, quali in pairs(qual) do
local stmt_value = quali.datavalue.value.id
table.insert(specifiers, getLabel(stmt_value))
end
end
end
end
if #specifiers > 0 then
specifier_text = table.concat(specifiers, "'', ''")
end
local audio_text
if specifier_text ~= '' then
audio_text = i18n['text_audio'] .. ' (' .. specifier_text .. ')'
else
audio_text = i18n['text_audio']
end
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title= i18n['template_audio'],
args = {lang_name, pronunciation_file, audio_text}
})
end
iso15919_transcription = getOneValueForProperty(base_form, 'P5825') -- আইএসও ১৫৯১৯ প্রতিলিপিকরণ
itrans = getOneValueForProperty(base_form, 'P8881') -- ITRANS
iast = getOneValueForProperty(base_form, 'P7581') -- আইএএসটি প্রতিলিপিকরণ
xsampa = getOneValueForProperty(base_form, 'P2859')
local ipa_transcription = base_form:getAllStatements('P898') -- আধ্বব প্রতিলিপিকরণ
-- @TODO: অডিও ও প্রতিলিপিকরণ দুটোই থাকলে একটার ঠিক পরেই আরেকটা দেখানো উচিত
if #ipa_transcription ~= 0 then
for i, stmt in pairs(ipa_transcription) do
local ipa_text = stmt.mainsnak.datavalue.value
local specifier_text = ''
local specifiers = {}
if stmt.qualifiers then
for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন
for l, qual in ipairs(stmt.qualifiers[property_id]) do
table.insert(specifiers, getLabel( qual.datavalue.value.id ))
end
end
end
if #specifiers > 0 then
specifier_text = "(''" .. table.concat(specifiers, "'', ''") .. "'') "
end
local syllable_count
if lang_code == 'tr' then
syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z10029|' .. ipa_text, frame)
else
syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z30837|' .. ipa_text, frame)
end
table.insert(pronunciations, '* ' .. specifier_text .. frame:expandTemplate{
title= i18n['template_ipa'],
args = {lang_name, ipa_text}
} .. '\n** ' .. syllable_count)
end
-- The following checks are ordered based on which one is expected to be true in a higher number of cases.
elseif lang_code == 'bn' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='bn-IPA',
})
elseif lang_code == 'ar' then
local lemma = current_lexeme:getLemma('ar')
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='ar-IPA',
args={lemma}
})
elseif lang_code == 'en' then
table.insert(pronunciations, '* ' .. i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z29940|' .. matched_lemma, frame))
elseif lang_code == 'pl' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='pl-IPA',
})
elseif lang_code == 'ko' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='ko-IPA',
})
elseif lang_code == 'fi' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='fi-IPA',
})
elseif lang_code == 'ta' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='ta-IPA',
})
elseif lang_code == 'fax' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='fax-pron',
})
end
end -- {{আধ্বব|en|/ˈɪntəvjuː/}}
if iso15919_transcription then
table.insert(pronunciations, pronunciationBlock('iso15919', iso15919_transcription))
end
if itrans then
table.insert(pronunciations, pronunciationBlock('itrans', itrans))
end
if iast then
table.insert(pronunciations, pronunciationBlock('iast', iast))
end
if xsampa then
table.insert(pronunciations, pronunciationBlock('xsampa', xsampa))
end
return table.concat(pronunciations, '\n')
end
local function getAlternativeSpellings( current_lexeme, frame )
local alt_spellings = {}
for i, stmt in pairs(current_lexeme:getAllStatements('P11577')) do -- বিকল্প বানান
if stmt.mainsnak.datavalue then
table.insert(alt_spellings, '* ' .. frame:expandTemplate{title=i18n['template_alter'], args={lang_code, getLemmata(getEntity(stmt.mainsnak.datavalue.value.id), frame)}})
end
end
return table.concat(alt_spellings, '\n')
end
local function get_any_notes(args, keys)
local notes = {}
for i, v in ipairs(keys) do
if args[v] then
table.insert(notes, args[v])
end
end
return notes
end
local function add_specific_notes(sections, notes)
for i, v in ipairs(notes) do
table.insert(sections, v)
end
end
local function add_any_notes(sections, args, keys, heading)
for i, v in ipairs(keys) do
if args[v] then
if heading then
table.insert(sections, heading)
end
table.insert(sections, args[v])
end
end
end
local function getMatchingLemmaForPageTitle(lexeme, title)
local lemmas = lexeme:getLemmas()
local match
for _, lemma_entry in ipairs(lemmas) do
local lemma = lemma_entry[1]
if lemma == title then
match = lemma
break
end
end
if match == nil then
if lang_code == 'ar' then
match = lexeme:getLemma('ar')
elseif lang_code == 'rhg' then
match = lexeme:getLemma('rhg-arab')
elseif lang_id == 'Q11051ur' then
match = lexeme:getLemma('ur')
elseif lang_code == 'arz' then
match = lexeme:getLemma('arz')
end
end
return match
end
-- Returns the grammatical gender of a lexeme
local function getGenderOfLexeme(lexeme)
local gender = ''
local stmts = lexeme:getAllStatements('P5185') -- ব্যাকরণগত লিঙ্গ
if #stmts ~= 0 and stmts[1].mainsnak.datavalue then
if #stmts == 1 then
local gender_qid = stmts[1].mainsnak.datavalue.value.id
if gender_qid == 'Q499327' then
gender = 'm'
elseif gender_qid == 'Q1775415' then
gender = 'f'
elseif gender_qid == 'Q1775461' then
gender = 'n'
elseif gender_qid == 'Q1305037' then
gender = 'c'
end
end
else
for i, stmt in pairs(stmts) do
local qid = stmts[i].mainsnak.datavalue
if qid then
qid = qid.value.id
end
if qid == 'Q499327' then
gender = gender .. 'm'
elseif qid == 'Q1775415' then
gender = gender .. 'f'
end
end
end
if gender == '' then
return nil
end
return gender
end
-- Returns the semantic gender for a sense
-- @TODO: Complete this
local function getGenderForSense(sense)
local gender = ''
local stmts = sense:getAllStatements('P10339') -- semantic gender
if #stmts ~= 0 and stmts[1].mainsnak.datavalue then
if #stmts == 1 then
local gender_qid = stmts[1].mainsnak.datavalue.value.id
if gender_qid == 'Q6581097' then
gender = 'm'
elseif gender_qid == 'Q1775415' then
gender = 'f'
elseif gender_qid == 'Q1775461' then
gender = 'n'
elseif gender_qid == 'Q1305037' then
gender = 'c'
elseif gender_qid == 'Q70853302' then
gender = 'mfbysense'
end
end
else
for i, stmt in pairs(stmts) do
local qid = stmts[i].mainsnak.datavalue
if qid then
qid = qid.value.id
end
if qid == 'Q499327' then
gender = gender .. 'm'
elseif qid == 'Q1775415' then
gender = gender .. 'f'
end
end
end
return gender
end
local function buildLanguageAgnosticInflectionTable()
local has_image = false
local form_images = {}
for i, form in ipairs(forms) do
local form_image = form:getAllStatements('P7407')
if next(form_image) then
form_images[i] = form_image[1].mainsnak.datavalue.value
has_image = true
end
end
local table_class = "wikitable mw-collapsible sortable"
if not has_image then
table_class = table_class .. " mw-collapsed"
end
local text = "{| class='" .. table_class .. "' style='border:solid 1px rgb(80%,80%,100%); text-align:center;'\n"
text = text .. "|+ " .. i18n['heading_inflection_table'] .. "\n"
text = text .. "|- \n"
text = text .. "! " .. i18n['heading_form'] .. " !! " .. i18n['heading_grammatical_features']
if has_image then
text = text .. " !! " .. (i18n['heading_image'])
end
text = text .. " \n"
for i, form in ipairs(forms) do
local rep = form:getRepresentations()
local feat = form:getGrammaticalFeatures()
local rep_text = ""
for j, r in pairs(rep) do
if rep_text == "" then
rep_text = r[1]
else
rep_text = rep_text .. " / " .. r[1]
end
end
local feat_text = ""
if feat then
for j, f in ipairs(feat) do
local label = getLabel(f) or f
if feat_text == "" then
feat_text = label
else
feat_text = feat_text .. ", " .. label
end
end
end
text = text .. "|-\n"
text = text .. "| " .. (rep_text ~= "" and rep_text or "—")
text = text .. " || " .. (feat_text ~= "" and feat_text or "—")
if has_image then
local image_cell = "—"
if form_images[i] then
image_cell = "[[চিত্র:" .. form_images[i] .. "|50px]]"
end
text = text .. " || " .. image_cell
end
text = text .. "\n"
end
text = text .. "|}"
return text
end
function p.all(frame)
local args = getArgs(frame)
local lexeme_id = args[1]
local current_lexeme = getEntity(lexeme_id)
local language = current_lexeme:getLanguage()
lang_id = language
local senses = current_lexeme:getSenses()
local add_heading = true
forms = current_lexeme:getForms()
if args[2] then
local val = mw.text.trim(tostring(args[2]))
if val == "false" or val == "0" or val == "না" then
add_heading = false
end
end
local references_seen = {}
local sections = {}
local title = mw.title.getCurrentTitle().text
local lang_category = getLanguageForCategories(title, true)
local lang_name = getLabel(lang_category)
local conj_class = getLastValueForProperty(current_lexeme, 'P5186')
if conj_class then
conj_class = wb.getLabelByLang(getLastValueForProperty(current_lexeme, 'P5186').id, 'en'):gsub('Form ', '')
end
if add_heading == true then
local lang_heading = heading_level(lang_name, 2)
table.insert(sections, lang_heading)
end
lang_code = getLexemeLanguageCode(current_lexeme)
matched_lemma = getMatchingLemmaForPageTitle(current_lexeme, title)
lex_cat = current_lexeme:getLexicalCategory()
local cat = i18n.lang_category(getLabel(lex_cat), lang_name)
local lex_cat_template, ety_added, pron_added, alt_added
if cat then
table.insert(sections, heading_level(getLabel(lex_cat) .. cat .. frame:expandTemplate{
title = i18n['template_anchor'],
args = { lexeme_id }
}, 3))
table.insert(sections, frame:expandTemplate{
title= i18n['template_lexeme'],
args = {lexeme_id}
})
add_any_notes(sections, args, i18n['manual_category'])
local etymology = getEtymology( current_lexeme, frame )
if etymology ~= '' and etymology then
table.insert(sections, heading_level(i18n['heading_etymology'], 4))
table.insert(sections, tostring(etymology))
ety_added = true
end
if ety_added then
add_any_notes(sections, args, i18n['manual_etymology'])
else
add_any_notes(sections, args, i18n['manual_etymology'], heading_level(i18n['heading_etymology'], 4))
end
local pronunciation = getPronunciation( frame, current_lexeme, lang_name)
if pronunciation ~= '' then
table.insert(sections, heading_level(i18n['heading_pronunciation'], 4))
table.insert(sections, tostring(pronunciation))
pron_added = true
end
if pron_added then
add_any_notes(sections, args, i18n['manual_pronunciation'])
else
add_any_notes(sections, args, i18n['manual_pronunciation'], heading_level(i18n['heading_pronunciation'], 4))
end
local alternative_spellings = getAlternativeSpellings(current_lexeme, frame)
if alternative_spellings ~= '' then
table.insert(sections, heading_level(i18n['heading_alternative_spellings'], 4))
table.insert(sections, alternative_spellings)
alt_added = true
end
if alt_added then
add_any_notes(sections, args, i18n['manual_alternative_spellings'])
else
add_any_notes(sections, args, i18n['manual_alternative_spellings'], heading_level( i18n['heading_alternative_spellings'], 4))
end
local gender = getGenderOfLexeme(current_lexeme)
if lang_code and lang_code ~= 'ksy' and lang_code ~= 'rkt' then -- Skip for Kharia Thar, Rangpuri
if lex_cat == 'Q34698' then -- বিশেষণ
if lang_code == 'en' or lang_code == 'bn' then
if #forms <= 1 then
lex_cat_template = frame:expandTemplate{title= lang_code .. '-বিশেষণ'}
end
else
if lang_code ~= 'fr' then
lex_cat_template = safeExpand(frame, lang_code .. '-adj')
if not lex_cat_template then
lex_cat_template = safeExpand(frame, lang_code .. '-বিশেষণ')
end
end
end
elseif lex_cat == 'Q1084' then -- @TODO: Also check for plural forms
-- The following checks are ordered based on which one is expected to be true in a higher number of cases.
if language == 'Q13955' then
if matched_lemma then
lex_cat_template = safeExpand(frame, 'ar-noun', {matched_lemma,gender})
else
lex_cat_template = frame:expandTemplate{title='ar-noun', args={nil,gender}}
end
elseif language == 'Q29919' then
lex_cat_template = frame:expandTemplate{title='arz-noun', args={g=gender}}
elseif language == 'Q397' then
if matched_lemma then
lex_cat_template = frame:expandTemplate{title='la-noun', args={matched_lemma,g=gender}}
end
elseif language == 'Q11059' then
lex_cat_template = frame:expandTemplate{title='sa-noun', args={g=gender}}
elseif language ~= 'Q1860' then -- These templates require the gender to be passed as the 1st argument.
lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix'], {gender})
if not lex_cat_template then
lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix_fallback'], {gender})
end
end
elseif lex_cat == 'Q24905' then -- ক্রিয়া
if lang_code == 'ar' then
if conj_class then
lex_cat_template = frame:expandTemplate{title='ar-verb', args={conj_class}}
end
else
lex_cat_template = safeExpand(frame, lang_code .. '-verb')
end
end
end
-- elseif lex_cat == 'Q147276' then
-- lex_cat_template = safeExpand(frame, lang_code .. '-proper noun', {gender})
-- if not lex_cat_template then
-- lex_cat_template = safeExpand(frame, lang_code .. '-নামবাচক বিশেষ্য', {gender})
-- end
end
if lex_cat_template then
table.insert(sections, lex_cat_template)
else
if matched_lemma then
table.insert(sections, heading_level(matched_lemma, 4))
else
table.insert(sections, i18n.tocatlink(i18n['category_no_matching_lemma']))
end
end
local meanings, refs_seen, sense_extlinks = unpack(getMeanings( frame, args, current_lexeme, senses, references_seen, lang_name))
table.insert(sections, tostring(meanings))
add_any_notes(sections, args, i18n['manual_meaning'])
local instance_of = current_lexeme:getAllStatements('P31') -- সত্ত্বার ধরন
if #instance_of ~= 0 then
local instance_of_entity = instance_of[1].mainsnak.datavalue.value.id
if instance_of_entity == 'Q376431' then -- বর্ণের নাম
table.insert(sections, i18n.tocatlink(lang_code .. ':রং'))
else
table.insert(sections, heading_level(i18n['heading_special_info'], 4) .. i18n['text_instance_of'] .. ' ' .. '[[d:' .. instance_of_entity .. '|' .. getLabel(instance_of_entity) .. ']]' .. i18n['text_sentence_terminator'])
end
end
if lex_cat ~= 'Q9788' then
local translations = getTranslations(frame, senses)
if translations then
table.insert(sections, translations)
end
end
-- (!) বিশেষ ভাষার বিভক্তির সারণি যদি থাকে সেগুলো এখানে নতুন if বিবৃতি যোগ করা যায়।
if next(forms) then
if language == 'Q9610' then -- বাংলা
if lex_cat == 'Q24905' then
local conjTable = require('মডিউল:আভিধানিক উপাত্ত/Q9610').getConjTable(frame, forms)
table.insert(sections, conjTable)
elseif lex_cat == 'Q1084' or lex_cat == 'Q36224' or lex_cat == 'Q147276' or lex_cat == 'Q956030' then
table.insert(sections, callWikifunctionsFunction('Z33243|' .. lexeme_id .. '|', frame))
else
if #forms > 1 then
table.insert(sections, buildLanguageAgnosticInflectionTable())
end
end
--elseif language == 'Q13955' then -- ar
-- if lex_cat == 'Q1084' then
-- table.insert(sections, frame:expandTemplate{title='ar-decl-noun', args={lemma}})
-- end
--elseif lang_code == 'ar' and lex_cat == 'Q24905' then
--table.insert(sections, frame:expandTemplate{title='ar-conj', args={conj_class}})
elseif language == 'Q11051' and lex_cat == 'Q1084' then -- de
if lang_id == "Q11051hi" then
table.insert(sections, callWikifunctionsFunction('Z37337|' .. lexeme_id .. '|', frame))
else
table.insert(sections, callWikifunctionsFunction('Z37346|' .. lexeme_id .. '|', frame))
end
elseif language == 'Q188' and lex_cat == 'Q1084' then -- de
table.insert(sections, callWikifunctionsFunction('Z28602|' .. lexeme_id .. '|', frame))
elseif lang_code == 'as' and lex_cat == 'Q1084' then
table.insert(sections, callWikifunctionsFunction('Z37219|' .. lexeme_id .. '|', frame))
elseif lang_code == 'ml' and lex_cat == 'Q1084' then
table.insert(sections, callWikifunctionsFunction('Z37217|' .. lexeme_id .. '|', frame))
--elseif language == 'Q397' and lex_cat == 'Q1084' then -- la
-- table.insert(sections, callWikifunctionsFunction('Z26333|' .. matched_lemma .. '|', frame))
elseif language == 'Q150' and lex_cat == 'Q34698' then -- fr
table.insert(sections, callWikifunctionsFunction('Z36435|' .. lexeme_id .. '|', frame))
elseif language == 'Q652' and lex_cat == 'Q34698' then -- ইতালীয়
table.insert(sections, callWikifunctionsFunction('Z36407|' .. lexeme_id .. '|', frame))
elseif language == 'Q809' or language == 'Q9058' or language == 'Q6654' or language == 'Q9056' then -- পোলীয়, স্লোভাক, ক্রোয়েশীয়, চেক
table.insert(sections, callWikifunctionsFunction('Z36421|' .. lexeme_id .. '|', frame))
elseif #forms > 1 and language ~= 'Q150' then
table.insert(sections, buildLanguageAgnosticInflectionTable())
end
end
if lex_cat == 'Q134830' then
table.insert(sections, frame:expandTemplate{title='prefixsee', args={lang_code}})
elseif lex_cat == 'Q102047' then
table.insert(sections, frame:expandTemplate{title='suffixsee', args={lang_code}})
-- elseif lex_cat == 'Q111029' then
-- table.insert(sections, frame:expandTemplate{title='rootsee', args={'+', lang_code, matched_lemma}})
end
local reference_notes = get_any_notes(args, i18n['manual_reference'])
if #refs_seen > 0 or #reference_notes > 0 then
table.insert(sections, heading_level(i18n['heading_references'], 4))
table.insert(sections, frame:extensionTag('references'))
add_specific_notes(sections, reference_notes)
end
local external_link_table = getExternalLinks ( current_lexeme )
if #external_link_table > 0 then
local external_links = '* ' .. table.concat(external_link_table, '\n* ')
table.insert(sections, heading_level(i18n['heading_external_links'], 4))
table.insert(sections, external_links)
end
add_any_notes(sections, args, i18n['manual_external_link'])
if #refs_seen == 0 and #reference_notes == 0 and sense_extlinks and #sense_extlinks == 0 and #external_link_table == 0 and #get_any_notes(args, i18n['manual_external_link']) == 0 then
table.insert(sections, i18n.rfref_category(lang_name))
end
return table.concat(sections,"\n\n")
end
return p
eqjwh1fnujlkg2uvvohcjkx00b90yr8
514106
514046
2026-07-25T17:29:28Z
Redmin
6857
514106
Scribunto
text/plain
local p = {}
local i18n = require('মডিউল:আভিধানিক উপাত্ত/i18n')
local references = require('মডিউল:উইকিউপাত্ত তথ্যসূত্র বিন্যাসকরণ').format
local getArgs = require('Module:Arguments').getArgs
local wb = mw.wikibase
local ustring = mw.ustring
local html = mw.html
local mw_lang = mw.language
local entity_cache = {}
local reference_cache = {}
local forms
local lang_code
local lex_cat
local matched_lemma
local lang_id
local function wrapStringInWikilinks(str)
local exceptions = i18n.nolinks
local result = str:gsub('(%S+)', function(token)
local word, trailing_char = token:match('^(.-)([;,.:!’?]*)$')
local wrapped = word:gsub('[^(-/]+', function(part)
if exceptions[part] then
return part
else
return '[[' .. mw.text.nowiki(part) .. '#' .. i18n['content_lang_name'] .. '|' .. mw.text.nowiki(part) .. ']]'
end
end)
return wrapped .. trailing_char
end)
return result
end
local function serializeTable(val, name, skipnewlines, depth) -- https://stackoverflow.com/a/6081639
skipnewlines = skipnewlines or false
depth = depth or 0
local tmp = string.rep(" ", depth)
if name then tmp = tmp .. name .. " = " end
if type(val) == "table" then
tmp = tmp .. "{" .. (not skipnewlines and "\n" or "")
for k, v in pairs(val) do
tmp = tmp .. serializeTable(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and "\n" or "")
end
tmp = tmp .. string.rep(" ", depth) .. "}"
elseif type(val) == "number" then
tmp = tmp .. tostring(val)
elseif type(val) == "string" then
tmp = tmp .. string.format("%q", val)
elseif type(val) == "boolean" then
tmp = tmp .. (val and "true" or "false")
else
tmp = tmp .. "\"[inserializable datatype:" .. type(val) .. "]\""
end
return tmp
end
-- Use this to safely expand templates when you are not sure that they exist.
local function safeExpand(frame, title, args)
local _, result = pcall(function()
return frame:expandTemplate{ title = title, args = args }
end)
if result:find('does not exist') then -- expandTemplate{} doesn't seem to throw any error that can be handled with pcall() so string search is the only viable option.
return nil
end
return result
end
local function checkTitleCodePointInRange(title, start_point, end_point)
return ustring.find( title, '[' ..ustring.char(start_point) .. '-' .. ustring.char(end_point) .. ']' )
end
local function getLanguageForCategories(title)
-- বিশেষ ভাষার জন্য
if lang_id == 'Q11051' then -- হিন্দি/উর্দু
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- উর্দু
lang_id = 'Q11051ur'
elseif checkTitleCodePointInRange(title, 0x0900, 0x097f) then -- হিন্দি
lang_id = 'Q11051hi'
end
elseif lang_id == 'Q58635' then -- পাঞ্জাবি
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- শাহমুখী
lang_id = 'Q58635pnb'
elseif checkTitleCodePointInRange(title, 0x0a00, 0x0a7f) then -- গুরুমুখী
lang_id = 'Q58635pa'
end
elseif lang_id == 'Q56356571' then -- নয়া ফার্সি ভাষা
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- ফার্সি (ইরান/আফগানিস্তান)
lang_id = 'Q56356571fa'
elseif checkTitleCodePointInRange(title, 0x0400, 0x04ff) then -- তাজিক
lang_id = 'Q56356571tg'
end
elseif lang_id == 'Q256' then
if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then
lang_id = 'Q56356571ota'
else
lang_id = 'Q56356571tr'
end
end
return lang_id
end
local function getEntity(id)
if entity_cache[id] == nil then
entity_cache[id] = wb.getEntity(id) or error('Invalid ID provided: ' .. id)
end
return entity_cache[id] ~= false and entity_cache[id] or nil
end
-- Use this function to get the label of an item even if that item does not have any label in the wiki's content language or English.
local function getLabel(id)
if id == 'Q11051hi' then
return 'হিন্দি'
elseif id == 'Q11051ur' then
return 'উর্দু'
elseif id == 'Q56356571fa' then
return 'ফার্সি'
elseif id == 'Q56356571tg' then
return 'তাজিক'
elseif id == 'Q58635pa' or id == 'Q58635pnb' then
return 'পাঞ্জাবি'
elseif id == 'Q256tr' then
return 'তুর্কি'
elseif id == 'Q256ota' then
return 'উসমানীয় তুর্কি'
end
local label = wb.getLabel(id)
if label then
return label
end
local labels = getEntity(id).labels
if not labels then
return id
end
for _, v in pairs(labels) do
if v and v.value then
return v.value
end
end
end
local function getReference(id, reference)
local out_id = nil
local url_value
if reference_cache[id] == nil then
local ref_text = references(reference, wb, mw_lang, i18n['content_lang_code'], i18n['wikipedia'])
if reference.snaks then
if reference.snaks['P248'] then
for _, snak in pairs(reference.snaks['P248']) do
if snak.datavalue and snak.datavalue.value.id == 'Q428' then -- কুরআন
ref_text = ustring.gsub(ref_text, 'নামক অনুচ্ছেদ', 'নং আয়াত')
break
end
end
end
if reference.snaks['P854'] then
local snak = reference.snaks['P854'][1]
if snak.datavalue then
url_value = snak.datavalue.value
end
end
end
if url_value then
ref_text = ref_text .. ', [' .. url_value .. ' সংযোগ]'
end
reference_cache[id] = ref_text
else
out_id = id
end
return {out_id, reference_cache[id]}
end
-- Returns the Wiktionary language code for a lexeme entity or nil, in the latter case, getLemmas() can be relied on to fetch the language code by stripping extraneous bits from the 'language' string as necessary
local function getLexemeLanguageCode(lexeme)
local lang_item_id = lexeme:getLanguage()
local lang_entity = getEntity(lang_item_id)
for i, statement_property in ipairs({'P305','P424', 'P220'}) do -- আইইটিএফ ভাষা ট্যাগ, উইকিমিডিয়া ভাষা কোড, আইএসও ৬৩৯-৩
local statements = lang_entity:getBestStatements(statement_property)
if statements[1] then
local code = statements[1].mainsnak.datavalue.value
if code == 'hr' then
return 'sh'
elseif code == 'pan' then
return 'pa'
else
return code
end
end
end
end
local function getLexemeLanguageCodeForEtymology(lexeme)
local lang_item_id = lexeme:getLanguage()
if lang_item_id == 'Q56356571' then
return 'fa' -- @TODO: Implement a proper solution
end
return getLexemeLanguageCode(lexeme)
end
-- Return the first form of the lexeme which has exactly the given grammatical feature.
local function formWithSingleGrammaticalFeature( item_id )
for i = 1, #forms do
local grammaticalFeatures = forms[i]:getGrammaticalFeatures()
if #grammaticalFeatures == 1 and grammaticalFeatures[1] == item_id then
return forms[i]
end
end
return nil
end
local function getArticleLinkTemplate(frame, stmt_value)
local template = ''
local sitelink = getEntity(stmt_value):getSitelink(i18n['wikipedia'])
if sitelink then
template = frame:expandTemplate{
title=i18n['template_wikipedia'],
args={sitelink}
}
end
return template
end
local function getArticleLinks(frame, sense )
local article_links = ''
for i, stmt in pairs(sense:getAllStatements('P5137')) do -- এই অর্থের জন্য আইটেম
article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id)
end
for i, stmt in pairs(sense:getAllStatements('P9970')) do -- এই অর্থের জন্য বিধেয়
article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id)
end
return article_links
end
-- @TODO: Generalise
local function expandTemplateForProperty(frame, object, property, template)
local lemmas = {}
local n = 0
for _, stmt in pairs(object:getAllStatements(property)) do
local lex = wb.lexeme.splitLexemeId(stmt.mainsnak.datavalue.value.id)
if lex then
lex = getEntity(lex)
n = n + 1
lemmas[n] = lex:getLemma(lang_code)
end
end
if not lang_code or n == 0 then
return ''
end
-- Build args: first lang_code, then lemmas
local args = {lang_code}
for i = 1, n do
args[#args + 1] = lemmas[i]
end
return frame:expandTemplate{
title = template,
args = args
}
end
local function getExternalLinks( entity ) -- T418639
local external_links = {}
if entity.claims == nil then return external_links end
local formatter_urls = require('মডিউল:আভিধানিক উপাত্ত/urls').formatter_urls
for property_id, statements in pairs(entity.claims) do
local formatter_url = formatter_urls[property_id]
if formatter_url then
local property_source = wb.getBestStatements(property_id, 'P9073')
local source_name
if next(property_source) then
source_name = getLabel(property_source[1].mainsnak.datavalue.value.id)
or property_source[1].mainsnak.datavalue.value.id
else
source_name = getLabel(property_id) or property_id
end
for i = 1, #statements do
local stmt = statements[i]
if stmt.mainsnak.datavalue then
local formatted_link = ustring.gsub(
ustring.gsub(formatter_url, '$1', stmt.mainsnak.datavalue.value),
' ', '+'
)
table.insert(external_links,
'[' .. formatted_link .. ' ' .. source_name .. ']')
end
end
end
end
return external_links
end
p.getExternalLinks = getExternalLinks -- রেখে দিন যাতে ডিবাগিং সম্ভব হয়
local function heading_level(text, level)
return '<h' .. level .. '>' .. ' ' .. text .. ' ' .. '</h' .. level .. '>'
end
local function termSpan( term )
local text = term[1]
local lang = term[2]
local dir = mw_lang.new( lang ):getDir()
local span = html.create( 'span' )
span:attr( 'lang', lang )
:attr( 'dir', dir )
:wikitext( text )
return tostring( span )
end
local function getLemmata( current_lexeme )
local lemma_string = ''
for i, rep in pairs(current_lexeme:getLemmas()) do
if lemma_string == '' then
lemma_string = termSpan(rep)
else
lemma_string = lemma_string .. '/' .. termSpan(rep)
end
end
return lemma_string
end
local function getLinkedLemmata(lexeme, frame)
local lemma_string = ''
local lang
for i, rep in pairs(lexeme:getLemmas()) do
lang = getLexemeLanguageCode(lexeme)
if lang == nil then
lang = string.gsub(rep[2], '-%S+', '')
end
if lemma_string == '' then
lemma_string = frame:expandTemplate{title='link', args={lang, rep[1]}}
else
lemma_string = lemma_string .. '/' .. frame:expandTemplate{title='link', args={lang, rep[1]}}
end
end
return lemma_string
end
local function getExamples( current_lexeme, sense_id, references_seen )
local examples = html.create('dl')
local example_text, example_lang, example_form, example_str
for i, stmt in pairs(current_lexeme:getAllStatements('P5831')) do -- ব্যবহারের উদাহরণ
if stmt.qualifiers and stmt.qualifiers['P6072'] and stmt.qualifiers['P6072'][1].datavalue.value.id == sense_id then -- বিষয়ে লেক্সিমের অর্থ
example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>')
example_lang = stmt.mainsnak.datavalue.value.language
local example_form_strs = {}
if stmt.qualifiers['P1810'] then
table.insert(example_form_strs, stmt.qualifiers['P1810'][1].datavalue.value)
elseif stmt.qualifiers['P5830'] then
example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- বিষয়ে লেক্সিমের রূপ
for _, rep in pairs(example_form:getRepresentations()) do
table.insert(example_form_strs, rep[1])
end
end
for _, example_form_str in pairs(example_form_strs) do
local new_example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''")
if new_example_text ~= example_text then
example_str = termSpan({new_example_text, example_lang})
break
end
example_text = new_example_text
end
if example_str == nil then
example_str = termSpan({example_text, example_lang})
end
local reference_text = ''
if stmt.references then
for j, reference in pairs(stmt.references) do
table.insert(references_seen, reference.hash)
local got_reference = getReference(reference.hash, reference)
reference_text = reference_text .. '\n\n' .. got_reference[2]
end
end
if example_str then
examples:tag('dd'):wikitext("''" .. example_str .. "''")
if reference_text ~= '' then
examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text)
end
end
end
end
for i, stmt in pairs(wb.getAllStatements(sense_id, 'P5831')) do -- ব্যবহারের উদাহরণ
example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>')
example_lang = stmt.mainsnak.datavalue.value.language
local example_form_str = nil
if stmt.qualifiers then
if stmt.qualifiers['P5830'] then
example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- subject lexeme form
end
if stmt.qualifiers['P1810'] then
example_form_str = stmt.qualifiers['P1810'][1].datavalue.value
end
end
if example_form and example_form_str == nil then
example_form_str = example_form:getRepresentation(i18n['content_lang_code'])
end
if example_form and example_form_str == nil then
example_form_str = example_form:getRepresentations()[1][1]
end
if example_form_str then
example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''")
end
example_str = termSpan({example_text, example_lang})
local reference_text = ''
if stmt.references then
for j, reference in pairs(stmt.references) do
table.insert(references_seen, reference.hash)
local got_reference = getReference(reference.hash, reference)
reference_text = reference_text .. '\n\n' .. got_reference[2]
end
end
if example_str then
examples:tag('dd'):wikitext("''" .. example_str .. "''")
if reference_text ~= '' then
examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text)
end
end
end
return { tostring(examples) , references_seen }
end
-- This calls frame:preprocess() instead of :callParserFunction() because the latter does not work for Wikifunctions function calls yet (see https://www.wikifunctions.org/wiki/Wikifunctions:Embedded_function_calls).
local function callWikifunctionsFunction(args, frame)
return frame:preprocess('{{#function:' .. args .. '}}') .. i18n.tocatlink('উইকিফাংশন্স-এর ফাংশন ব্যবহার করা পাতা')
end
local function getOneValueForProperty(object, property)
local val
local stmts = object:getAllStatements(property)
if #stmts ~= 0 then
val = stmts[1].mainsnak.datavalue.value
end
return val
end
local function getLastValueForProperty(object, property)
local val, count
local stmts = object:getAllStatements(property)
for i, j in ipairs(stmts) do
count = i
end
if count then
val = stmts[count].mainsnak.datavalue.value
end
return val
end
local function getTranslations(frame, senses)
if #senses == 0 then
return nil
end
local all_translations = {}
local wmlang, item, label
for _, sense in pairs(senses) do
local translation_set = {}
local gloss = sense:getGloss(i18n['content_lang_code'])
if lex_cat ~= 'Q34698' then
item = getOneValueForProperty(sense, 'P5137')
if item then
item = item.id
label = getLabel(item)
end
end
if item then
wmlang = require("Module:wikimedia languages")
end
for _, stmt in pairs(sense:getAllStatements('P5972')) do
local translation = stmt.mainsnak.datavalue.value.id
local lexeme_id = wb.lexeme.splitLexemeId(translation)
local trans_lexeme = getEntity(lexeme_id)
local lang_name = getLabel(trans_lexeme:getLanguage())
local trans_code = getLexemeLanguageCode(trans_lexeme)
if trans_code then
table.insert(translation_set, lang_name .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={trans_code, getLinkedLemmata(trans_lexeme, frame) .. '<br/>'}})
else
table.insert(translation_set, lang_name .. ': ' .. getLinkedLemmata(trans_lexeme, frame) .. '<br/>' .. i18n.trans_category(lang_name))
end
end
if item then
for _, v in pairs(getEntity(item).labels) do
if string.find(v.language, '-') == nil then -- @TODO: Implement deduplication of translation and get rid of this check
local lang = wmlang.getByCode(v.language)
local wikt = lang:getWiktionaryLanguage()
if wikt:hasType('regular') then
table.insert(translation_set, getLabel(wikt:getWikidataItem()) .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={wikt:getCode(), v.value .. '<br/>'}})
end
end
end
end
if #translation_set > 0 then
local block = frame:expandTemplate{ title = i18n['template_trans-top'], args = { gloss or label } }
block = block .. table.concat(translation_set, '\n') .. frame:expandTemplate{ title = i18n['template_trans-bottom'] }
table.insert(all_translations, block)
end
end
if #all_translations == 0 then
return nil
end
return heading_level(i18n['heading_translation'], 4) .. ' \n' .. table.concat(all_translations, '\n')
end
local createicon = function(langcode, entityID, propertyID)
langcode = langcode or ""
propertyID = propertyID or ""
local icon = " <span class='penicon autoconfirmed-show'>[["
-- " <span data-bridge-edit-flow='overwrite' class='penicon'>[[" -> enable Wikidata Bridge
.. "File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt="
.. i18n['edit_wikidata']
.. "|link=https://www.wikidata.org/entity/" .. entityID
if langcode ~= "" then icon = icon .. "?uselang=" .. langcode end
if propertyID ~= "" then icon = icon .. "#" .. propertyID end
icon = icon .. "|" .. i18n['edit_wikidata'] .. "]]</span>"
return icon
end
local function getMeanings(frame, args, current_lexeme, senses, references_seen, language_name)
if #senses == 0 then
return {createicon(i18n['content_lang_code'], current_lexeme:getId()) .. "''" .. i18n['text_category_rfdef'] .. "''" .. i18n.tocatlink(i18n['category_rfdef']), references_seen}
end
local meanings = html.create( 'ol' )
local idlinkset = {}
for i, sense in pairs(senses) do
local item_label_gloss_parts = {}
local gloss_text_parts = {}
local main_gloss_text = frame:expandTemplate{
title=i18n['template_anchor'],
args={sense:getId()}
}
local specifiers = {}
for k, property_id in ipairs({'P6084', 'P6191', 'P9488', 'P2341', 'P1535'}) do -- অবস্থান যেখানে শব্দার্থ ব্যবহৃত, language style, field of usage, indigenous to, used by
-- @TODO: Some of these can be used as qualifiers as well, render them
for _, stmt in pairs(sense:getAllStatements(property_id)) do
local stmt_value = stmt.mainsnak.datavalue.value.id
local reference_text = ''
local refs = stmt.references
if refs then
for j, reference in pairs(refs) do
table.insert(references_seen, reference.hash)
local got_reference = getReference(reference.hash, reference)
reference_text = reference_text .. '\n\n' .. frame:extensionTag('ref', got_reference[2])
end
end
local val = getLabel(stmt_value)
table.insert(specifiers, val .. reference_text)
if property_id == 'P9488' and lang_code ~= nil then -- field of usage
table.insert(item_label_gloss_parts, i18n.tocatlink(lang_code .. ':' .. val))
end
end
end
if #specifiers > 0 then
main_gloss_text = main_gloss_text .. "(''" .. table.concat(specifiers, "'', ''") .. "'') "
end
local gloss = sense:getGloss( i18n['content_lang_code'] )
if gloss then
main_gloss_text = main_gloss_text .. wrapStringInWikilinks(gloss)
if gloss:match('^প্রদত্ত%s*(%S-)%s*নাম$') then -- given names
main_gloss_text = main_gloss_text .. i18n.tocatlink(language_name .. ' ' .. i18n['category_given_names'])
end
else
local other_gloss_text, other_gloss_lang, item_label
local stmt_value = getOneValueForProperty(sense, 'P5137')
if stmt_value then
stmt_value = stmt_value.id
item_label = getLabel(stmt_value)
end
if item_label then
table.insert(item_label_gloss_parts, '[[:d:' .. stmt_value .. '|' .. item_label .. ']]')
end
if #item_label_gloss_parts > 0 then
other_gloss_text = table.concat(item_label_gloss_parts, '; ')
end
if other_gloss_text == nil then
for _, fallback_lang in ipairs(mw_lang.getFallbacksFor( i18n['content_lang_code'] )) do
if sense:getGloss( fallback_lang ) then
other_gloss_text, other_gloss_lang = sense:getGloss( fallback_lang )
end
end
if other_gloss_lang == nil then
local glosses = sense:getGlosses()
for _, gloss in pairs(glosses) do
other_gloss_text = gloss[1]
other_gloss_lang = gloss[2]
break
end
end
main_gloss_text = main_gloss_text .. other_gloss_text .. "<sup><em>" .. mw_lang.fetchLanguageName(other_gloss_lang, i18n['content_lang_code']) .. "</em></sup>"
else
main_gloss_text = main_gloss_text .. "''" .. other_gloss_text .. "''"
end
main_gloss_text = main_gloss_text .. i18n.tocatlink(i18n['category_rfdef_equivalent'])
end
local synonym = expandTemplateForProperty(frame, sense, 'P5973', i18n['template_synonym'])
if synonym ~= '' then
main_gloss_text = main_gloss_text .. ' <br/> ' .. synonym
end
local antonym = expandTemplateForProperty(frame, sense, 'P5974', i18n['template_antonym'])
if antonym ~= '' then
main_gloss_text = main_gloss_text .. ' <br/> ' .. antonym
end
local hypernym = expandTemplateForProperty(frame, sense, 'P6593', i18n['template_hypernym'])
if hypernym ~= '' then
main_gloss_text = main_gloss_text .. ' <br/> ' .. hypernym
end
if lex_cat == 'Q1084' or lex_cat == 'Q147276' then -- noun or proper noun
local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-noun'])
main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym
elseif lex_cat == 'Q34698' then
local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-adj'])
main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym
end
table.insert(gloss_text_parts, main_gloss_text .. createicon(i18n['content_lang_code'], sense:getId()))
for _, stmt in pairs(sense:getAllStatements('P8394')) do -- টিপ্পনীর উদ্ধৃতি
local gloss_quote = termSpan({stmt.mainsnak.datavalue.value.text, stmt.mainsnak.datavalue.value.language})
if stmt.references[1] then
local got_reference = getReference ( stmt.references[1].hash, stmt.references[1] )
gloss_quote = '"' .. gloss_quote .. '" ' .. got_reference[2]
end
table.insert(references_seen, stmt.references[1].hash)
table.insert(gloss_text_parts, frame:extensionTag('ref', gloss_quote))
end
for _, stmt in pairs(sense:getAllStatements('P1343')) do -- বর্ণিত উৎস
-- TODO: do away with making fake reference objects
local fake_reference = { ['snaks'] = {} }
fake_reference.snaks['P248'] = { [1] = stmt.mainsnak }
local qualifiers_order = stmt['qualifiers-order']
if qualifiers_order then
for _, k in ipairs(qualifiers_order) do fake_reference.snaks[k] = stmt.qualifiers[k] end
end
fake_reference.hash = mw.hash.hashValue('sha3-512', serializeTable(fake_reference))
table.insert(references_seen, fake_reference.hash)
local got_reference = getReference(fake_reference.hash, fake_reference)
if got_reference[1] == nil then
table.insert(gloss_text_parts, frame:extensionTag('ref', got_reference[2], {name = fake_reference.hash}))
else
table.insert(gloss_text_parts, frame:extensionTag{name = 'ref', content='', args = {name = got_reference[1]}})
end
end
local first_sense_image = ''
local sense_images = sense:getAllStatements('P18')
if next(sense_images) then
first_sense_image = sense_images[1].mainsnak.datavalue.value
end
if first_sense_image ~= '' then
table.insert(gloss_text_parts, '[[File:' .. first_sense_image .. "|thumb|'''" .. getLemmata(current_lexeme) .. "'''—" .. main_gloss_text .. ']]')
end
local idlinks = getExternalLinks(sense)
if #idlinks > 0 then
local idlinktext = '<small>('
for _, idlink in pairs(idlinks) do
idlinktext = idlinktext .. idlink .. '\n'
end
idlinktext = idlinktext .. ')</small>'
table.insert(gloss_text_parts, idlinktext)
table.insert(idlinkset, idlinks)
end
local externallinks = getArticleLinks(frame, sense)
if externallinks ~= '' then
table.insert(gloss_text_parts, externallinks)
end
local new_notes = {}
local sense_keys = { sense:getId(), string.sub(sense:getId(), string.find(sense:getId(), '-')+1) }
for _, v in ipairs(sense_keys) do
if args[v] then
table.insert(new_notes, args[v])
end
end
if #new_notes > 0 then
for _, v in ipairs(new_notes) do
if i == 1 then
table.insert(gloss_text_parts, '<br/>' .. v)
else
table.insert(gloss_text_parts, v)
end
end
end
local examples
examples, references_seen = unpack(getExamples( current_lexeme, sense:getId(), references_seen ))
local gloss_text = table.concat(gloss_text_parts, '\n')
meanings:tag('li'):wikitext(gloss_text):wikitext(examples)
end
return {meanings, references_seen, idlinkset}
end
local function getPronunciationBaseForm()
local base_form = nil
-- (!) অন্য ভাষার শব্দের যদি অন্য রকম মূল ফর্ম থাকে সেগুলো এখানে নতুন if বিবৃতি দিয়ে যোগ করা যায়।
if lang_code == 'bn' then
if lex_cat == 'Q1084' then -- বিশেষ্য
base_form = formWithSingleGrammaticalFeature( 'Q131105' ) -- কর্তৃকারক
elseif lex_cat == 'Q24905' then -- ক্রিয়া
base_form = formWithSingleGrammaticalFeature( 'Q1350145' ) -- ক্রিয়া বিশেষ্য
end
end
if base_form == nil then
for i, form in pairs(forms) do
base_form = form
break
end
end
return base_form
end
local function getCombines( current_lexeme, frame )
local combines = ''
local index_mappings = {}
for i, stmt in pairs(current_lexeme:getAllStatements('P5238')) do
if stmt.qualifiers and stmt.qualifiers['P1545'] then -- ক্রম
local current_index = tonumber(stmt.qualifiers['P1545'][1].datavalue.value)
index_mappings[current_index] = stmt
end
end
if #index_mappings ~= 0 then
for i, stmt in ipairs(index_mappings) do
if stmt.mainsnak.datavalue then
local part_lexeme_id = stmt.mainsnak.datavalue.value.id
local part_lexeme = getEntity(part_lexeme_id)
local current_substring = getLinkedLemmata(part_lexeme, frame)
local part_etymology = getEtymology(part_lexeme, frame, 'partial')
if part_etymology ~= '' and part_etymology then
current_substring = current_substring .. ' (← ' .. part_etymology .. ')'
end
if combines == '' then
combines = current_substring
else -- @TODO: This should use the 'affix' and 'compound' templates instead.
combines = combines .. ' + ' .. current_substring
end
end
end
end
return combines
end
function getRoots(lexeme, frame)
local stmts = lexeme:getAllStatements('P5920')
if #stmts == 0 then return '', '', '' end
local root_lexeme = getEntity(stmts[1].mainsnak.datavalue.value.id)
return getLexemeLanguageCode(root_lexeme), '√' .. getLinkedLemmata(root_lexeme, frame), root_lexeme:getLemma('ar')
end
function getEtymology( current_lexeme, frame, mode )
-- @TODO: Fix the etymology chains that are not possible to render
local etymology = ''
local current_combines = getCombines(current_lexeme, frame)
local root_lang, current_roots, root_str = getRoots(current_lexeme, frame)
if mode ~= 'partial' and root_str then
--frame:expandTemplate{title=i18n['template_root'], args={lang_code, root_lang, root_str}}
end
local stmts = current_lexeme:getAllStatements('P5191')
local new_etymology_string
if #stmts == 0 then
if current_roots ~= '' and current_combines ~= '' and current_roots then
return current_roots .. '<br/>(' .. current_combines .. ')'
elseif current_roots ~= '' then
if lang_code == 'ar' and mode ~= 'partial' and root_str ~= matched_lemma then
return frame:expandTemplate{title=i18n['template_ar-rootbox'], args={root_str}}
else
return current_roots
end
else
return current_combines
end
end
local origin_lexeme_string
for i, stmt in pairs(stmts) do
local origin_lexeme_dv = stmt.mainsnak.datavalue -- If this is nil, the origin lexeme is not known.
if origin_lexeme_dv then
local origin_lexeme = getEntity(origin_lexeme_dv.value.id)
local origin_lexeme_lang = getLabel(origin_lexeme:getLanguage())
local sitelink = i18n.wplink(origin_lexeme:getLanguage(), origin_lexeme_lang, wb)
if sitelink ~= '' then
origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. sitelink .. ')'
else
origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. origin_lexeme_lang .. ')'
end
if stmt.qualifiers and stmt.qualifiers['P5886'] then
local mode_of_derivation = stmt.qualifiers['P5886'][1].datavalue.value.id
if mode_of_derivation == 'Q1345001' then
-- @TODO: Add support for showing gender
origin_lexeme_string = frame:expandTemplate{title=i18n['template_borrowed'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_borrowing']
elseif mode_of_derivation == 'Q845079' then
origin_lexeme_string = ustring.gsub(i18n['etymology_learned_borrowing'], '$1', origin_lexeme_string)
elseif mode_of_derivation == 'Q56611986' then
origin_lexeme_string = frame:expandTemplate{title=i18n['template_inherited'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_inheritance']
elseif mode_of_derivation == 'Q189743' then
origin_lexeme_string = frame:expandTemplate{title=i18n['template_ellipsis'], args={lang_code, getLemmata(origin_lexeme)}} .. ' ' .. i18n['etymology_ellipsis']
end
end
local origin_origin = getEtymology(origin_lexeme, frame)
if origin_origin ~= '' and origin_origin then
new_etymology_string = origin_lexeme_string .. ' ← ' .. origin_origin
else
new_etymology_string = origin_lexeme_string
end
end
if etymology == '' then
etymology = new_etymology_string
elseif origin_lexeme_string and etymology then
etymology = etymology .. ' ' .. origin_lexeme_string
elseif origin_lexeme_string and etymology == nil then
etymology = origin_lexeme_string
end
end
if current_roots ~= '' and etymology and current_roots then
etymology = etymology .. ' ' .. current_roots
elseif current_roots ~= '' and etymology == nil then
etymology = current_roots
end
if current_combines ~= '' and etymology then
etymology = etymology .. '<br/>(' .. current_combines .. ')'
end
return etymology
end
local function pronunciationBlock(block, value)
return '* ' .. i18n['text_' .. block] .. ' ' .. value
end
local function getPronunciation(frame, current_lexeme, lang_name)
local pronunciations = {}
local base_form = getPronunciationBaseForm()
local iast, iso15919_transcription, itrans, xsampa
if base_form then
for i, stmt in pairs(base_form:getAllStatements('P443')) do -- উচ্চারণের অডিও
local pronunciation_file = stmt.mainsnak.datavalue.value
local specifier_text = ''
local specifiers = {}
if stmt.qualifiers then
for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন
local qual = stmt.qualifiers[property_id]
if qual then
for _, quali in pairs(qual) do
local stmt_value = quali.datavalue.value.id
table.insert(specifiers, getLabel(stmt_value))
end
end
end
end
if #specifiers > 0 then
specifier_text = table.concat(specifiers, "'', ''")
end
local audio_text
if specifier_text ~= '' then
audio_text = i18n['text_audio'] .. ' (' .. specifier_text .. ')'
else
audio_text = i18n['text_audio']
end
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title= i18n['template_audio'],
args = {lang_name, pronunciation_file, audio_text}
})
end
iso15919_transcription = getOneValueForProperty(base_form, 'P5825') -- আইএসও ১৫৯১৯ প্রতিলিপিকরণ
itrans = getOneValueForProperty(base_form, 'P8881') -- ITRANS
iast = getOneValueForProperty(base_form, 'P7581') -- আইএএসটি প্রতিলিপিকরণ
xsampa = getOneValueForProperty(base_form, 'P2859')
local ipa_transcription = base_form:getAllStatements('P898') -- আধ্বব প্রতিলিপিকরণ
-- @TODO: অডিও ও প্রতিলিপিকরণ দুটোই থাকলে একটার ঠিক পরেই আরেকটা দেখানো উচিত
if #ipa_transcription ~= 0 then
for i, stmt in pairs(ipa_transcription) do
local ipa_text = stmt.mainsnak.datavalue.value
local specifier_text = ''
local specifiers = {}
if stmt.qualifiers then
for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন
for l, qual in ipairs(stmt.qualifiers[property_id]) do
table.insert(specifiers, getLabel( qual.datavalue.value.id ))
end
end
end
if #specifiers > 0 then
specifier_text = "(''" .. table.concat(specifiers, "'', ''") .. "'') "
end
local syllable_count
if lang_code == 'tr' then
syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z10029|' .. ipa_text, frame)
else
syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z30837|' .. ipa_text, frame)
end
table.insert(pronunciations, '* ' .. specifier_text .. frame:expandTemplate{
title= i18n['template_ipa'],
args = {lang_name, ipa_text}
} .. '\n** ' .. syllable_count)
end
-- The following checks are ordered based on which one is expected to be true in a higher number of cases.
elseif lang_code == 'bn' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='bn-IPA',
})
elseif lang_code == 'ar' then
local lemma = current_lexeme:getLemma('ar')
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='ar-IPA',
args={lemma}
})
elseif lang_code == 'en' then
table.insert(pronunciations, '* ' .. i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z29940|' .. matched_lemma, frame))
elseif lang_code == 'pl' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='pl-IPA',
})
elseif lang_code == 'ko' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='ko-IPA',
})
elseif lang_code == 'fi' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='fi-IPA',
})
elseif lang_code == 'ta' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='ta-IPA',
})
elseif lang_code == 'fax' then
table.insert(pronunciations, '* ' .. frame:expandTemplate{
title='fax-pron',
})
end
end -- {{আধ্বব|en|/ˈɪntəvjuː/}}
if iso15919_transcription then
table.insert(pronunciations, pronunciationBlock('iso15919', iso15919_transcription))
end
if itrans then
table.insert(pronunciations, pronunciationBlock('itrans', itrans))
end
if iast then
table.insert(pronunciations, pronunciationBlock('iast', iast))
end
if xsampa then
table.insert(pronunciations, pronunciationBlock('xsampa', xsampa))
end
return table.concat(pronunciations, '\n')
end
local function getAlternativeSpellings( current_lexeme, frame )
local alt_spellings = {}
for i, stmt in pairs(current_lexeme:getAllStatements('P11577')) do -- বিকল্প বানান
if stmt.mainsnak.datavalue then
table.insert(alt_spellings, '* ' .. frame:expandTemplate{title=i18n['template_alter'], args={lang_code, getLemmata(getEntity(stmt.mainsnak.datavalue.value.id), frame)}})
end
end
return table.concat(alt_spellings, '\n')
end
local function get_any_notes(args, keys)
local notes = {}
for i, v in ipairs(keys) do
if args[v] then
table.insert(notes, args[v])
end
end
return notes
end
local function add_specific_notes(sections, notes)
for i, v in ipairs(notes) do
table.insert(sections, v)
end
end
local function add_any_notes(sections, args, keys, heading)
for i, v in ipairs(keys) do
if args[v] then
if heading then
table.insert(sections, heading)
end
table.insert(sections, args[v])
end
end
end
local function getMatchingLemmaForPageTitle(lexeme, title)
local lemmas = lexeme:getLemmas()
local match
for _, lemma_entry in ipairs(lemmas) do
local lemma = lemma_entry[1]
if lemma == title then
match = lemma
break
end
end
if match == nil then
if lang_code == 'ar' then
match = lexeme:getLemma('ar')
elseif lang_code == 'rhg' then
match = lexeme:getLemma('rhg-arab')
elseif lang_id == 'Q11051ur' then
match = lexeme:getLemma('ur')
elseif lang_code == 'arz' then
match = lexeme:getLemma('arz')
end
end
return match
end
-- Returns the grammatical gender of a lexeme
local function getGenderOfLexeme(lexeme)
local gender = ''
local stmts = lexeme:getAllStatements('P5185') -- ব্যাকরণগত লিঙ্গ
if #stmts ~= 0 and stmts[1].mainsnak.datavalue then
if #stmts == 1 then
local gender_qid = stmts[1].mainsnak.datavalue.value.id
if gender_qid == 'Q499327' then
gender = 'm'
elseif gender_qid == 'Q1775415' then
gender = 'f'
elseif gender_qid == 'Q1775461' then
gender = 'n'
elseif gender_qid == 'Q1305037' then
gender = 'c'
end
end
else
for i, stmt in pairs(stmts) do
local qid = stmts[i].mainsnak.datavalue
if qid then
qid = qid.value.id
end
if qid == 'Q499327' then
gender = gender .. 'm'
elseif qid == 'Q1775415' then
gender = gender .. 'f'
end
end
end
if gender == '' then
return nil
end
return gender
end
-- Returns the semantic gender for a sense
-- @TODO: Complete this
local function getGenderForSense(sense)
local gender = ''
local stmts = sense:getAllStatements('P10339') -- semantic gender
if #stmts ~= 0 and stmts[1].mainsnak.datavalue then
if #stmts == 1 then
local gender_qid = stmts[1].mainsnak.datavalue.value.id
if gender_qid == 'Q6581097' then
gender = 'm'
elseif gender_qid == 'Q1775415' then
gender = 'f'
elseif gender_qid == 'Q1775461' then
gender = 'n'
elseif gender_qid == 'Q1305037' then
gender = 'c'
elseif gender_qid == 'Q70853302' then
gender = 'mfbysense'
end
end
else
for i, stmt in pairs(stmts) do
local qid = stmts[i].mainsnak.datavalue
if qid then
qid = qid.value.id
end
if qid == 'Q499327' then
gender = gender .. 'm'
elseif qid == 'Q1775415' then
gender = gender .. 'f'
end
end
end
return gender
end
local function buildLanguageAgnosticInflectionTable()
local has_image = false
local form_images = {}
for i, form in ipairs(forms) do
local form_image = form:getAllStatements('P7407')
if next(form_image) then
form_images[i] = form_image[1].mainsnak.datavalue.value
has_image = true
end
end
local table_class = "wikitable mw-collapsible sortable"
if not has_image then
table_class = table_class .. " mw-collapsed"
end
local text = "{| class='" .. table_class .. "' style='border:solid 1px rgb(80%,80%,100%); text-align:center;'\n"
text = text .. "|+ " .. i18n['heading_inflection_table'] .. "\n"
text = text .. "|- \n"
text = text .. "! " .. i18n['heading_form'] .. " !! " .. i18n['heading_grammatical_features']
if has_image then
text = text .. " !! " .. (i18n['heading_image'])
end
text = text .. " \n"
for i, form in ipairs(forms) do
local rep = form:getRepresentations()
local feat = form:getGrammaticalFeatures()
local rep_text = ""
for j, r in pairs(rep) do
if rep_text == "" then
rep_text = r[1]
else
rep_text = rep_text .. " / " .. r[1]
end
end
local feat_text = ""
if feat then
for j, f in ipairs(feat) do
local label = getLabel(f) or f
if feat_text == "" then
feat_text = label
else
feat_text = feat_text .. ", " .. label
end
end
end
text = text .. "|-\n"
text = text .. "| " .. (rep_text ~= "" and rep_text or "—")
text = text .. " || " .. (feat_text ~= "" and feat_text or "—")
if has_image then
local image_cell = "—"
if form_images[i] then
image_cell = "[[চিত্র:" .. form_images[i] .. "|50px]]"
end
text = text .. " || " .. image_cell
end
text = text .. "\n"
end
text = text .. "|}"
return text
end
function p.all(frame)
local args = getArgs(frame)
local lexeme_id = args[1]
local current_lexeme = getEntity(lexeme_id)
local language = current_lexeme:getLanguage()
lang_id = language
local senses = current_lexeme:getSenses()
local add_heading = true
forms = current_lexeme:getForms()
if args[2] then
local val = mw.text.trim(tostring(args[2]))
if val == "false" or val == "0" or val == "না" then
add_heading = false
end
end
local references_seen = {}
local sections = {}
local title = mw.title.getCurrentTitle().text
local lang_category = getLanguageForCategories(title, true)
local lang_name = getLabel(lang_category)
local conj_class = getLastValueForProperty(current_lexeme, 'P5186')
if conj_class then
conj_class = wb.getLabelByLang(getLastValueForProperty(current_lexeme, 'P5186').id, 'en'):gsub('Form ', '')
end
if add_heading == true then
local lang_heading = heading_level(lang_name, 2)
table.insert(sections, lang_heading)
end
lang_code = getLexemeLanguageCode(current_lexeme)
matched_lemma = getMatchingLemmaForPageTitle(current_lexeme, title)
lex_cat = current_lexeme:getLexicalCategory()
local cat = i18n.lang_category(getLabel(lex_cat), lang_name)
local lex_cat_template, ety_added, pron_added, alt_added
if cat then
table.insert(sections, heading_level(getLabel(lex_cat) .. cat .. frame:expandTemplate{
title = i18n['template_anchor'],
args = { lexeme_id }
}, 3))
table.insert(sections, frame:expandTemplate{
title= i18n['template_lexeme'],
args = {lexeme_id}
})
add_any_notes(sections, args, i18n['manual_category'])
local etymology = getEtymology( current_lexeme, frame )
if etymology ~= '' and etymology then
table.insert(sections, heading_level(i18n['heading_etymology'], 4))
table.insert(sections, tostring(etymology))
ety_added = true
end
if ety_added then
add_any_notes(sections, args, i18n['manual_etymology'])
else
add_any_notes(sections, args, i18n['manual_etymology'], heading_level(i18n['heading_etymology'], 4))
end
local pronunciation = getPronunciation( frame, current_lexeme, lang_name)
if pronunciation ~= '' then
table.insert(sections, heading_level(i18n['heading_pronunciation'], 4))
table.insert(sections, tostring(pronunciation))
pron_added = true
end
if pron_added then
add_any_notes(sections, args, i18n['manual_pronunciation'])
else
add_any_notes(sections, args, i18n['manual_pronunciation'], heading_level(i18n['heading_pronunciation'], 4))
end
local alternative_spellings = getAlternativeSpellings(current_lexeme, frame)
if alternative_spellings ~= '' then
table.insert(sections, heading_level(i18n['heading_alternative_spellings'], 4))
table.insert(sections, alternative_spellings)
alt_added = true
end
if alt_added then
add_any_notes(sections, args, i18n['manual_alternative_spellings'])
else
add_any_notes(sections, args, i18n['manual_alternative_spellings'], heading_level( i18n['heading_alternative_spellings'], 4))
end
local gender = getGenderOfLexeme(current_lexeme)
if lang_code and lang_code ~= 'ksy' and lang_code ~= 'rkt' then -- Skip for Kharia Thar, Rangpuri
if lex_cat == 'Q34698' then -- বিশেষণ
if lang_code == 'en' or lang_code == 'bn' then
if #forms <= 1 then
lex_cat_template = frame:expandTemplate{title= lang_code .. '-বিশেষণ'}
end
else
if lang_code ~= 'fr' then
lex_cat_template = safeExpand(frame, lang_code .. '-adj')
if not lex_cat_template then
lex_cat_template = safeExpand(frame, lang_code .. '-বিশেষণ')
end
end
end
elseif lex_cat == 'Q1084' then -- @TODO: Also check for plural forms
-- The following checks are ordered based on which one is expected to be true in a higher number of cases.
if language == 'Q13955' then
if matched_lemma then
lex_cat_template = safeExpand(frame, 'ar-noun', {matched_lemma,gender})
else
lex_cat_template = frame:expandTemplate{title='ar-noun', args={nil,gender}}
end
elseif language == 'Q29919' then
lex_cat_template = frame:expandTemplate{title='arz-noun', args={g=gender}}
elseif language == 'Q397' then
if matched_lemma then
lex_cat_template = frame:expandTemplate{title='la-noun', args={matched_lemma,g=gender}}
end
elseif language == 'Q11059' then
lex_cat_template = frame:expandTemplate{title='sa-noun', args={g=gender}}
elseif language ~= 'Q1860' then -- These templates require the gender to be passed as the 1st argument.
lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix'], {gender})
if not lex_cat_template then
lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix_fallback'], {gender})
end
end
elseif lex_cat == 'Q24905' then -- ক্রিয়া
if lang_code == 'ar' then
if conj_class then
lex_cat_template = frame:expandTemplate{title='ar-verb', args={conj_class}}
end
else
lex_cat_template = safeExpand(frame, lang_code .. '-verb')
end
end
end
-- elseif lex_cat == 'Q147276' then
-- lex_cat_template = safeExpand(frame, lang_code .. '-proper noun', {gender})
-- if not lex_cat_template then
-- lex_cat_template = safeExpand(frame, lang_code .. '-নামবাচক বিশেষ্য', {gender})
-- end
end
if lex_cat_template then
table.insert(sections, lex_cat_template)
else
if matched_lemma then
table.insert(sections, heading_level(matched_lemma, 4))
else
table.insert(sections, i18n.tocatlink(i18n['category_no_matching_lemma']))
end
end
local meanings, refs_seen, sense_extlinks = unpack(getMeanings( frame, args, current_lexeme, senses, references_seen, lang_name))
table.insert(sections, tostring(meanings))
add_any_notes(sections, args, i18n['manual_meaning'])
local instance_of = current_lexeme:getAllStatements('P31') -- সত্ত্বার ধরন
if #instance_of ~= 0 then
local instance_of_entity = instance_of[1].mainsnak.datavalue.value.id
if instance_of_entity == 'Q376431' then -- বর্ণের নাম
table.insert(sections, i18n.tocatlink(lang_code .. ':রং'))
else
table.insert(sections, heading_level(i18n['heading_special_info'], 4) .. i18n['text_instance_of'] .. ' ' .. '[[d:' .. instance_of_entity .. '|' .. getLabel(instance_of_entity) .. ']]' .. i18n['text_sentence_terminator'])
end
end
if lex_cat ~= 'Q9788' then
local translations = getTranslations(frame, senses)
if translations then
table.insert(sections, translations)
end
end
-- (!) বিশেষ ভাষার বিভক্তির সারণি যদি থাকে সেগুলো এখানে নতুন if বিবৃতি যোগ করা যায়।
if next(forms) then
if language == 'Q9610' then -- বাংলা
if lex_cat == 'Q24905' then
local conjTable = require('মডিউল:আভিধানিক উপাত্ত/Q9610').getConjTable(frame, forms)
table.insert(sections, conjTable)
elseif lex_cat == 'Q1084' or lex_cat == 'Q36224' or lex_cat == 'Q147276' or lex_cat == 'Q956030' then
table.insert(sections, callWikifunctionsFunction('Z33243|' .. lexeme_id .. '|', frame))
else
if #forms > 1 then
table.insert(sections, buildLanguageAgnosticInflectionTable())
end
end
--elseif language == 'Q13955' then -- ar
-- if lex_cat == 'Q1084' then
-- table.insert(sections, frame:expandTemplate{title='ar-decl-noun', args={lemma}})
-- end
--elseif lang_code == 'ar' and lex_cat == 'Q24905' then
--table.insert(sections, frame:expandTemplate{title='ar-conj', args={conj_class}})
elseif language == 'Q11051' and lex_cat == 'Q1084' then -- de
if lang_id == "Q11051hi" then
table.insert(sections, callWikifunctionsFunction('Z37337|' .. lexeme_id .. '|', frame))
else
table.insert(sections, callWikifunctionsFunction('Z37346|' .. lexeme_id .. '|', frame))
end
elseif language == 'Q188' and lex_cat == 'Q1084' then -- de
table.insert(sections, callWikifunctionsFunction('Z28602|' .. lexeme_id .. '|', frame))
elseif lang_code == 'as' and lex_cat == 'Q1084' then
table.insert(sections, callWikifunctionsFunction('Z37219|' .. lexeme_id .. '|', frame))
elseif lang_code == 'ml' and lex_cat == 'Q1084' then
table.insert(sections, callWikifunctionsFunction('Z37217|' .. lexeme_id .. '|', frame))
--elseif language == 'Q397' and lex_cat == 'Q1084' then -- la
-- table.insert(sections, callWikifunctionsFunction('Z26333|' .. matched_lemma .. '|', frame))
elseif language == 'Q150' and lex_cat == 'Q34698' then -- fr
table.insert(sections, callWikifunctionsFunction('Z36435|' .. lexeme_id .. '|', frame))
elseif language == 'Q652' and lex_cat == 'Q34698' then -- ইতালীয়
table.insert(sections, callWikifunctionsFunction('Z36407|' .. lexeme_id .. '|', frame))
elseif language == 'Q809' or language == 'Q9058' or language == 'Q6654' or language == 'Q9056' then -- পোলীয়, স্লোভাক, ক্রোয়েশীয়, চেক
table.insert(sections, callWikifunctionsFunction('Z36421|' .. lexeme_id .. '|', frame))
elseif #forms > 1 and language ~= 'Q150' then
table.insert(sections, buildLanguageAgnosticInflectionTable())
end
end
if lex_cat == 'Q134830' then
table.insert(sections, frame:expandTemplate{title='prefixsee', args={lang_code}})
elseif lex_cat == 'Q102047' then
table.insert(sections, frame:expandTemplate{title='suffixsee', args={lang_code}})
-- elseif lex_cat == 'Q111029' then
-- table.insert(sections, frame:expandTemplate{title='rootsee', args={'+', lang_code, matched_lemma}})
end
local reference_notes = get_any_notes(args, i18n['manual_reference'])
if #refs_seen > 0 or #reference_notes > 0 then
table.insert(sections, heading_level(i18n['heading_references'], 4))
table.insert(sections, frame:extensionTag('references'))
add_specific_notes(sections, reference_notes)
end
local external_link_table = getExternalLinks ( current_lexeme )
if #external_link_table > 0 then
local external_links = '* ' .. table.concat(external_link_table, '\n* ')
table.insert(sections, heading_level(i18n['heading_external_links'], 4))
table.insert(sections, external_links)
end
add_any_notes(sections, args, i18n['manual_external_link'])
if #refs_seen == 0 and #reference_notes == 0 and sense_extlinks and #sense_extlinks == 0 and #external_link_table == 0 and #get_any_notes(args, i18n['manual_external_link']) == 0 then
table.insert(sections, i18n.rfref_category(lang_name))
end
return table.concat(sections,"\n\n")
end
return p
8ssc0grxyca75e1p1t358ujyvc88zty
হেস্তনেস্ত
0
54095
514092
345844
2026-07-25T16:56:52Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309015-এর সাথে সংযোগ তৈরি করছি
514092
wikitext
text/x-wiki
{{লে|L309015}}
===ভাবার্থ===
{{বাগধারা|bn}}
# যা হবার হবে
# চরম নিস্পত্তি, থাকা না থাকা, হয় কি না হয়, শেষ দেখা
#: {{ux|bn|একটা হেস্তনেস্ত করে ছাড়বো}}
#: {{সমার্থক বাগধারা|bn|এসপার-ওসপার}}
gr03iskrqaeegwiygpprhdd0mvecpgp
ষড়ভুজ
0
60662
514125
344408
2026-07-25T17:51:52Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309126-এর সাথে সংযোগ তৈরি করছি
514125
wikitext
text/x-wiki
{{লে|L309126}}
lu3lig2tslm3wu0z7gorhihx4oq3x5i
514126
514125
2026-07-25T17:52:02Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309125-এর সাথে সংযোগ তৈরি করছি
514126
wikitext
text/x-wiki
{{লে|L309126}}
{{লে|L309125|না}}
5fdxv48mo7ujjbq71xxbigje37u0ukc
ঔষর
0
84599
514143
469665
2026-07-25T17:57:24Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309284-এর সাথে সংযোগ তৈরি করছি
514143
wikitext
text/x-wiki
{{লে|L309284}}
70ewmiucdoy3b6eey9ce2zb1anfefut
ঔষস
0
84600
514144
469666
2026-07-25T17:57:38Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309283-এর সাথে সংযোগ তৈরি করছি
514144
wikitext
text/x-wiki
== {{langname|bn}} ==
=== উচ্চারণ ===
* {{bn-IPA}}
=== বিশেষ্য ===
{{bn-বিশেষ্য}}
# [[সান্ধ্য]] অবসর।
{{লে|L309283|না}}
nrdsc34sosiygvzbl1al0ilfvh7puo8
ঔষ্ট্র
0
84601
514138
469667
2026-07-25T17:56:22Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309280-এর সাথে সংযোগ তৈরি করছি
514138
wikitext
text/x-wiki
{{লে|L309280}}
5nz3zacs68w0rvddt7am8wh3k14r7ho
514139
514138
2026-07-25T17:56:28Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309282-এর সাথে সংযোগ তৈরি করছি
514139
wikitext
text/x-wiki
{{লে|L309280}}
{{লে|L309282|না}}
rewjiwrml4oo8yahxct6lsawzkdme9v
ঔষ্ঠ্য
0
84604
514135
469670
2026-07-25T17:55:50Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309278-এর সাথে সংযোগ তৈরি করছি
514135
wikitext
text/x-wiki
== {{langname|bn}} ==
=== উচ্চারণ ===
* {{bn-IPA}}
=== বিশেষ্য ===
{{bn-বিশেষ্য}}
# ওষ্ঠদ্বারা [[উচ্চার্য]] [[বর্ণ]]।
3
4mdr03hjvst7uhptgsdpxylseexxjue
514136
514135
2026-07-25T17:56:00Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309278-এর সাথে সংযোগ তৈরি করছি
514136
wikitext
text/x-wiki
== {{langname|bn}} ==
=== উচ্চারণ ===
* {{bn-IPA}}
=== বিশেষ্য ===
{{bn-বিশেষ্য}}
# ওষ্ঠদ্বারা [[উচ্চার্য]] [[বর্ণ]]।
{{লে|L309278|না}}
91ikxtieia6j4dzk0eohdo85vz0yti4
ঔষ্ণ
0
84605
514142
469671
2026-07-25T17:57:05Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309276-এর সাথে সংযোগ তৈরি করছি
514142
wikitext
text/x-wiki
{{লে|L309276}}
lgvdc4xzaw29qk489ysulgb5drax43a
ঔষ্ণ্য
0
84607
514141
469673
2026-07-25T17:56:52Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309277-এর সাথে সংযোগ তৈরি করছি
514141
wikitext
text/x-wiki
{{লে|L309277}}
ifvfqakwz4njqe648ebh5yf34xu7p14
ঔষ্ম্য
0
84608
514140
469674
2026-07-25T17:56:42Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309274-এর সাথে সংযোগ তৈরি করছি
514140
wikitext
text/x-wiki
{{লে|L309274}}
rjc9yuknlpmfoav30nvwfaz5bpknvnz
পঞ্চগড়
0
99493
514070
483021
2026-07-25T16:29:16Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308731-এর সাথে সংযোগ তৈরি করছি
514070
wikitext
text/x-wiki
{{লে|L308731|L308731-S1=বাংলাদেশের উত্তরাঞ্চলে পাঁচটি গড় নিয়ে [[গঠিত]] জেলাবিশেষ।}}
oq2ltikuwii92o58w2k2rjnldsjega4
ষট্
0
113939
514132
496402
2026-07-25T17:54:08Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309264-এর সাথে সংযোগ তৈরি করছি
514132
wikitext
text/x-wiki
{{লে|L309264}}
== {{langname|bn}} ==
=== উচ্চারণ ===
* {{bn-IPA}}
=== বিশেষ্য ===
{{bn-বিশেষ্য}}
# [[ছয়]] [[সংখ্যা]]।
=== বিশেষণ ===
{{bn-বিশেষণ}}
# [[ছয়]] সংখ্যক।
ooj4958sqwpq4n97eyakr6ivn1issue
514137
514132
2026-07-25T17:56:15Z
Redmin
6857
514137
wikitext
text/x-wiki
{{লে|L309264}}
=== বিশেষণ ===
{{bn-বিশেষণ}}
# [[ছয়]] সংখ্যক।
3q3kx3hpntltlrjvwwb12ucyfan231e
ষট্পঞ্চাশ
0
113951
514129
496414
2026-07-25T17:53:25Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309233-এর সাথে সংযোগ তৈরি করছি
514129
wikitext
text/x-wiki
== {{langname|bn}} ==
=== উচ্চারণ ===
* {{bn-IPA}}
=== বিশেষ্য ===
{{bn-বিশেষ্য}}
# ৫৬ [[সংখ্যা]]।
{{লে|L309233|না}}
dic61tcnu715314hjqvo7wkib16ucxr
ষট্পঞ্চাশৎ
0
113952
514128
496416
2026-07-25T17:53:08Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309235-এর সাথে সংযোগ তৈরি করছি
514128
wikitext
text/x-wiki
{{লে|L309235}}
=== বিশেষণ ===
{{bn-বিশেষণ}}
# ৫৬ সংখ্যক।
43krhmk0stl74n8m71rygdlgjnkxoew
ষড়্বিধ
0
113972
514127
496434
2026-07-25T17:52:23Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309128-এর সাথে সংযোগ তৈরি করছি
514127
wikitext
text/x-wiki
{{লে|L309128}}
01checm53cuq9az24nzdt9nxw4du5gc
ষত্ববিধি
0
113981
514122
496443
2026-07-25T17:49:25Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309110-এর সাথে সংযোগ তৈরি করছি
514122
wikitext
text/x-wiki
{{লে|L309110|meaning=
# স-স্থলে [[মূর্ধন্য]] ষ-র ব্যবহারবিষয়ক ব্যাকরণনির্দিষ্ট [[বিধান]]।}}
gwjpyeywzs8rlxnbs0n7plzws4ctcxl
হলদি
0
117939
514101
500123
2026-07-25T17:01:19Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309054-এর সাথে সংযোগ তৈরি করছি
514101
wikitext
text/x-wiki
== {{langname|bn}} ==
=== উচ্চারণ ===
* {{bn-IPA}}
=== বিশেষ্য ===
{{bn-বিশেষ্য}}
# এশিয়ার [[ক্রান্তীয়]] অঞ্চলে জাত এবং বর্ষাকালে ফোটে এমন [[সবুজাভ]] হলুদ ফুল ও [[লম্বাটে]] পাতাবিশিষ্ট [[বর্ষজীবী]] [[উদ্ভিদ]] বা তার ভেষজগুণসম্পন্ন তীব্রগন্ধ কটুস্বাদ [[কন্দ]] (যা শুকানোর পর হলুদ [[রং]] [[ধারণ]] করে এবং রান্নার মসলারূপে [[ব্যবহৃত]] হয়), হলুদ।
{{লে|L309054|না}}
oty7i0vj6lm32ldbdudib1am49om1ql
হলদে
0
117940
514102
500124
2026-07-25T17:01:33Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309055-এর সাথে সংযোগ তৈরি করছি
514102
wikitext
text/x-wiki
== {{langname|bn}} ==
=== উচ্চারণ ===
* {{bn-IPA}}
=== বিশেষণ ===
{{bn-বিশেষণ}}
# হলুদবর্ণবিশিষ্ট, পীত।
{{লে|L309055|না}}
5oardwz9le8j6kq08u79mx217jly8t8
হুট
0
118397
514084
404557
2026-07-25T16:48:37Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308868-এর সাথে সংযোগ তৈরি করছি
514084
wikitext
text/x-wiki
{{লে|L308868}}
=== অব্যয় ===
{{bn-অব্যয়|হুট}}
# [[অবিবেচনা]] আকস্মিকতা [[প্রভৃতি]] [[ভাব]] [[প্রকাশক]] [[শব্দ]]। অবজ্ঞাসূচক [[শব্দ]]। [[মৃদু]] খট্[[শব্দ]]।
7igxg3k1x6du1yrd203vc6hko6l7l50
হুড়কো
0
118403
514085
500527
2026-07-25T16:48:54Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308869-এর সাথে সংযোগ তৈরি করছি
514085
wikitext
text/x-wiki
{{লে|L308869}}
e9anebo1b5i5plk1rgfhz6p3v1v2qgd
514086
514085
2026-07-25T16:49:08Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308870-এর সাথে সংযোগ তৈরি করছি
514086
wikitext
text/x-wiki
{{লে|L308869}}
{{লে|L308870|না}}
2pwtxf8nlyx8yty11en1z2fvsrj3ngg
হ্যাজাক
0
118582
514097
500681
2026-07-25T16:59:02Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309021-এর সাথে সংযোগ তৈরি করছি
514097
wikitext
text/x-wiki
== {{langname|bn}} ==
=== বিশেষ্য ===
{{bn-বিশেষ্য}}
# [[কেরোসিন]] গ্যাসের বাতিবিশেষ যাতে [[সংযুক্ত]] বাল্ব-আকৃতির জালের [[মতো]] আবরণ (mantile) [[উত্তপ্ত]] হয়ে [[উজ্জ্বল]] আলো [[বিকিরণ]] করে।
{{লে|L309021|না}}
8xlk052gkio2qgjes2d0q9otu9ih34t
নওগাঁ
0
119295
514036
339563
2026-07-25T14:17:54Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308677-এর সাথে সংযোগ তৈরি করছি
514036
wikitext
text/x-wiki
{{লে|L308677}}
|ব্যুৎপত্তি=
ফারসি [[نو]] এবং বাংলা [[গাঁ]] থেকে।
}}
cy3z2r9s1jm3ng3ifb4v2oun4a0a67n
514037
514036
2026-07-25T14:18:14Z
Redmin
6857
514037
wikitext
text/x-wiki
{{লে|L308677
|ব্যুৎপত্তি=
ফারসি [[نو]] এবং বাংলা [[গাঁ]] থেকে।
}}
5dvtttnppw8eysimlcd1bbw1wvgjw59
কাছাড়
0
125874
514061
352965
2026-07-25T15:35:06Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308712-এর সাথে সংযোগ তৈরি করছি
514061
wikitext
text/x-wiki
=={{langname|bn}}==
=== ব্যুৎপত্তি ===
*[[সংস্কৃত]] জাত
=== উচ্চারণ ===
*কাছা্র
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# সমুদ্র বা নদীর তটভূমি
{{লে|L308712|না}}
3qav9j0esmgi4pyclhr32odmcururc3
কুষ্টিয়া
0
134382
514034
438082
2026-07-25T14:14:53Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308673-এর সাথে সংযোগ তৈরি করছি
514034
wikitext
text/x-wiki
{{লে|L308673
|ব্যুৎপত্তি=
{{com+|bn|কোষ্টা|-ইয়া|alt1=কুষ্টা|t1=jute|pos2=relational suffix}}, named such due to the historical jute production in the area.<ref>{{cite-journal|bn|url=https://www.banglatribune.com/journey/397383/%E0%A6%AA%E0%A6%BE%E0%A6%9F-%E0%A6%A5%E0%A7%87%E0%A6%95%E0%A7%87-%E0%A6%AF%E0%A7%87%E0%A6%AD%E0%A6%BE%E0%A6%AC%E0%A7%87-%E2%80%98%E0%A6%95%E0%A7%81%E0%A6%B7%E0%A7%8D%E0%A6%9F%E0%A6%BF%E0%A7%9F%E0%A6%BE%E2%80%99-%E0%A6%A8%E0%A6%BE%E0%A6%AE%E0%A7%87%E0%A6%B0-%E0%A6%89%E0%A7%8E%E0%A6%AA%E0%A6%A4%E0%A7%8D%E0%A6%A4%E0%A6%BF|title=পাট থেকে যেভাবে 'কুষ্টিয়া' নামের উৎপত্তি|work=[[w:Bangla Tribune|Bangla Tribune]]|accessdate=2023-04-25}}</ref>
}}
<references/>
85tseki6qc6bunjyypqhrm5nemfen83
নোয়াখালী
0
134611
514032
432460
2026-07-25T14:11:58Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308702-এর সাথে সংযোগ তৈরি করছি
514032
wikitext
text/x-wiki
{{লে|L308702|ব্যুৎপত্তি=
A compound of {{compound|bn|নোয়া|খালী|pos1=a dialectal variant of {{m|bn|নয়া||new}}|pos2=a suffixed form of {{m|bn|খাল||canal}}|lit=new canal}}.
}}
====সমার্থক শব্দ====
*{{l|bn|ভুলুয়া}}
====উদ্ভূত শব্দ====
*{{l|bn|নোয়াখাইল্লা}}
*{{l|bn|নোয়াখালী জেলা|tr=nōakhali zela}}
exlr0clg1lr1nf1udgis4fk8qlib043
মডিউল:আভিধানিক উপাত্ত/i18n
828
148710
514041
514011
2026-07-25T14:33:19Z
Redmin
6857
514041
Scribunto
text/plain
local p = {}
p['fallback_wikipedia'] = 'enwiki'
p['content_lang_name'] = 'বাংলা'
p['content_lang_code'] = 'bn' -- The proper way to do this would be to use mw.ustring.gsub(mw.site.wikiId, 'wiktionary', '') but that does mean wasting compute so instead, just use the 'cached' config which isn't really labour-intensive.
p['wikipedia'] = 'bnwiki' -- p['content_lang_code'] .. 'wiki'
p['heading_etymology'] = 'ব্যুৎপত্তি'
p['heading_pronunciation'] = 'উচ্চারণ'
p['heading_translation'] = 'অনুবাদ'
p['heading_references'] = 'তথ্যসূত্র'
p['heading_external_links'] = 'বহিঃসংযোগ'
p['heading_alternative_spellings'] = 'বিকল্প বানান'
p['heading_inflection_table'] = 'বিভক্তির সারণী'
p['heading_form'] = 'রূপ'
p['heading_grammatical_features'] = 'ব্যাকরণিক বৈশিষ্ট্য'
p['heading_image'] = 'চিত্র'
p['heading_alternative_script'] = 'বিকল্প রূপ'
p['heading_special_info'] = 'বিশেষ তথ্য'
p['text_instance_of'] = 'এটি একটি'
p['text_sentence_terminator'] = '।'
p['text_audio'] = 'অডিও'
p['text_iso15919'] = '[[w:আইএসও ১৫৯১৯|আইএসও ১৫৯১৯]]:'
p['text_iast'] = '[[w:সংস্কৃত লিপ্যন্তরের আন্তর্জাতিক বর্ণমালা|সলিআব]]:'
p['text_itrans'] = '[[w:en:ITRANS|ITRANS]]:'
p['text_xsampa'] = '[[w:এক্স-সাম্পা|এক্স-সাম্পা]]:'
p['text_syllable_count'] = '[[w:অক্ষর (সিলেবল)|অক্ষর]] সংখ্যা:'
p['template_lexeme'] = 'উইকিউপাত্ত লেক্সিম' -- Q81739987
p['template_wikipedia'] = 'উইকিপিডিয়া' -- Q6275256
p['template_audio'] = 'অডিও ভাষার নাম' -- Q138620346
p['template_anchor'] = 'anchor' -- Q5412976
p['template_rfdef'] = 'rfdef' -- Q30733154
p['template_ipa'] = 'আধ্বব ভাষার নাম' -- Q138608718
p['template_t'] = 't' -- Q30769953
p['template_trans-top'] = 'অনুবাদ-শীর্ষ' -- Q30528422
p['template_trans-bottom'] = 'অনুবাদ-নিচ' -- Q30528419
p['template_antonym'] = 'বিপরীতার্থক' -- Q35305357
p['template_synonym'] = 'synonyms' -- Q32751230
p['template_hypernym'] = 'hypernyms' -- Q35305454
p['template_demonym-noun'] = 'demonym-noun' -- Q130360250
p['template_demonym-adj'] = 'demonym-adj' -- Q135184225
p['template_homophones'] = 'সমোচ্চারিত' -- Q30557565
p['template_borrowed'] = 'ধারকৃত শব্দ' -- Q30872304
p['template_inherited'] = 'inherited' -- Q30864051
p['template_ar-rootbox'] = 'ar-rootbox' -- Q115627074
p['template_root'] = 'root' -- Q104521645
p['template_ellipsis'] = 'ellipsis' -- Q107037827
p['template_prefixsee'] = 'prefixsee' -- Q47517865
p['template_rootsee'] = 'rootsee' -- Q105987491
p['template_suffixsee'] = 'suffixsee' -- Q47517855
p['template_alter'] = 'alter' -- Q54909435
p['noun_template_suffix'] = '-noun'
p['noun_template_suffix_fallback'] = '-বিশেষ্য'
p['proper noun_template_suffix'] = '-proper noun'
p['proper noun_template_suffix_fallback'] = '-নামবাচক বিশেষ্য'
p['verb_template_suffix'] = '-verb'
p['verb_template_suffix_fallback'] = '-ক্রিয়া'
p['manual_category'] = {'বিষয়শ্রেণী', 'category'}
p['manual_etymology'] = {'ব্যুৎপত্তি', 'etymology'}
p['manual_pronunciation'] = {'উচ্চারণ', 'pronunciation'}
p['manual_meaning'] = {'অর্থ', 'meaning'}
p['manual_reference'] = {'তথ্যসূত্র', 'reference'}
p['manual_external_link'] = {'বহিঃসংযোগ', 'external_link'}
p['manual_alternative_spellings'] = {'বিকল্প বানান', 'বিকল্প', 'alternative spelling', 'alternative form'}
p['etymology_borrowing'] = 'থেকে [[w:ঋণশব্দ|ঋণকৃত]]'
p['etymology_learned_borrowing'] = '$1 থেকে [[d:Q845079|শিক্ষিতভাবে ঋণকৃত]]'
p['etymology_inheritance'] = 'থেকে [[উত্তরলব্ধ]]'
p['etymology_ellipsis'] = '[[w:en:Ellipsis (linguistics)|সংক্ষিপ্ত হয়ে]] উপলব্ধ'
-- অংশচ্ছেদ (ভাষাবিজ্ঞান)
p['edit_wikidata'] = 'উইকিউপাত্তে সম্পাদনা করুন'
-- বিষয়শ্রেণী যেগুলো অন্য উইকিঅভিধানে আছে
p['category_rfdef'] = 'ভাষা অনুযায়ী সংজ্ঞার জন্য অনুরোধ' -- Q33129136
p['category_rfdef_equivalent'] = 'শব্দার্থের বাংলা মানের অনুরোধ' -- [[:wikt:en:Category:Requests for English equivalent term by language]]-এর কাছাকাছি
p['category_no_matching_lemma'] = 'যেসব ভুক্তিতে লেমার হেডিং দেখানো অসম্ভব' -- Entries will be put in this category whenever a lemma heading cannot be rendered because no lemma of the linked lexeme matched the page title.
p['category_given_names'] = 'প্রদত্ত নাম' -- Q8492384
-- বিষয়শ্রেণী যেগুলো অন্য উইকিঅভিধানে নেই
p['text_category_rfdef'] = 'এই শব্দের লেক্সিমে অর্থ প্রয়োজন। দয়া করে লেক্সিম পাতায় গিয়ে একটি অর্থ যোগ করুন, যাতে অন্য পাঠকরা জানতে পারবে এটা মানে কি।'
function p.tocatlink(str)
return '[[বিষয়শ্রেণী:' .. str .. ']]'
end
function p.lang_category(lex_cat, language)
local cat_text = p.tocatlink(language .. ' লেমা')
cat_text = cat_text .. p.tocatlink(language .. ' ' .. lex_cat)
return cat_text
end
function p.trans_category(language)
return p.tocatlink(language .. ' অনুবাদসহ পাতা')
end
function p.wplink(qid, display_text, wb)
local link = wb.getSitelink(qid, p['wikipedia'])
if link == nil then
link = wb.getSitelink(qid, p['fallback_wikipedia'])
if link ~= nil then
return '[[w:en:' .. link .. '|' .. display_text .. ']]'
end
else
return '[[w:' .. link .. '|' .. display_text .. ']]'
end
return ''
end
function p.rfref_category(language)
local cat_text = p.tocatlink('তথ্যসূত্রহীন ' .. language .. ' শব্দ',language)
return cat_text
end
p.nolinks = { -- These are words that are so commonly used that links to entries about them are unnecessary.
['করা'] = true,
['হওয়া'] = true,
['যাওয়া'] = true,
['যে'] = true,
['ও'] = true,
['তার'] = true,
['এবং'] = true,
['যার'] = true,
['যায়'] = true,
['সম্পর্কিত'] = true,
['একটি'] = true,
['যা'] = true,
['এমন'] = true,
['করে'] = true,
}
return p
6v9tul6uxota5rwvxx4208ftyi1ueik
عفو
0
167805
514027
508660
2026-07-25T14:02:40Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L1574989-এর সাথে সংযোগ তৈরি করছি
514027
wikitext
text/x-wiki
{{লে|L1484234}}
{{লে|L1574989|না}}
5l0ujlrejz7lz9sb2s5p37tscd27dxm
হোক্কড়
0
170290
514093
513030
2026-07-25T16:57:16Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309016-এর সাথে সংযোগ তৈরি করছি
514093
wikitext
text/x-wiki
{{লে|L302241}}
{{লে|L309016|না}}
h6lu18agxif4u3oxz5lu9b6o3v4nhoa
গাইবান্ধা
0
170591
514030
2026-07-25T14:10:39Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308674-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514030
wikitext
text/x-wiki
{{লে|L308674}}
4ssa4ixagy4dghuy7li8h2jnzky1jeo
ফেনী
0
170592
514031
2026-07-25T14:11:00Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308704-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514031
wikitext
text/x-wiki
{{লে|L308704}}
e0fefdy3lsc3m2dq6lsr6gyyngg2iir
নরসিংদী
0
170593
514033
2026-07-25T14:12:36Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308700-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514033
wikitext
text/x-wiki
{{লে|L308700}}
foyszdouim6yroj6jgismh6imtsryc1
চুয়াডাঙ্গা
0
170594
514035
2026-07-25T14:15:36Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308675-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514035
wikitext
text/x-wiki
{{লে|L308675}}
sq3wy9n3rl8rau8sjmhenc8gftedeg2
নেত্রকোণা
0
170595
514039
2026-07-25T14:19:32Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308679-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514039
wikitext
text/x-wiki
{{লে|L308679}}
lmvmt96yizu6lklxndu4p8mhmbok9dn
নীলফামারী
0
170596
514043
2026-07-25T14:45:04Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308701-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514043
wikitext
text/x-wiki
{{লে|L308701}}
fni75neqy6exohffbm7y9nv1718bfxq
হিঁসকুড়ে
0
170597
514044
2026-07-25T14:46:06Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308862-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514044
wikitext
text/x-wiki
{{লে|L308862}}
d3nxy96x1sm1trzynyx2psjqb1dm1zy
হিসু
0
170598
514045
2026-07-25T14:46:56Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308865-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514045
wikitext
text/x-wiki
{{লে|L308865}}
de6focji3mre0r471ngsipoccktf3oq
হিসি
0
170599
514047
2026-07-25T14:49:14Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308864-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514047
wikitext
text/x-wiki
{{লে|L308864}}
cd2hei8lq3ncg7ulliok4dh3va2pyry
হিড়িক্কি
0
170600
514048
2026-07-25T14:49:47Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308811-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514048
wikitext
text/x-wiki
{{লে|L308811}}
cv2z8w2vfpvfgm4aczv83wggxcl0inp
হিনটামি
0
170601
514049
2026-07-25T14:50:26Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308814-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514049
wikitext
text/x-wiki
{{লে|L308814}}
kq1ud47w68s5lfxi09a84buwz7rz4ht
হিড়িক্ক
0
170602
514050
2026-07-25T14:50:44Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308812-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514050
wikitext
text/x-wiki
{{লে|L308812}}
guoy7av4guaznalmsk0abcug52vy64v
সুনামগঞ্জ
0
170603
514051
2026-07-25T14:50:50Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308755-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514051
wikitext
text/x-wiki
{{লে|L308755}}
2v2vpzt7f05ko6lpu4nu3qzkejgbffy
হবিগঞ্জ
0
170604
514052
2026-07-25T14:51:02Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308756-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514052
wikitext
text/x-wiki
{{লে|L308756}}
b10th3pf8k9j6uem1mpyfz7r6p67ixu
খাগড়াছড়ি
0
170605
514054
2026-07-25T14:53:54Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308694-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514054
wikitext
text/x-wiki
{{লে|L308694}}
6szzh1rk5no3zdxbgu1dngufm845vf0
পটুয়াখালী
0
170606
514055
2026-07-25T14:54:10Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308703-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514055
wikitext
text/x-wiki
{{লে|L308703}}
fg1nx0ift3dh1uruwpmvm72ijafptcp
চাঁপাইনবাবগঞ্জ
0
170607
514056
2026-07-25T14:54:41Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308720-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514056
wikitext
text/x-wiki
{{লে|L308720}}
j8w6zkvai53zpwa0mpev9bdpaxoi2mo
জামালপুর
0
170608
514057
2026-07-25T14:54:49Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308721-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514057
wikitext
text/x-wiki
{{লে|L308721}}
21uctzpcpioewqh1hld2rnf4b47ofip
জয়পুরহাট
0
170609
514058
2026-07-25T14:54:56Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308722-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514058
wikitext
text/x-wiki
{{লে|L308722}}
3yx3itzh4dtfms8ipa73qoe6i54g39o
রাঙ্গামাটি
0
170610
514059
2026-07-25T14:55:19Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308705-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514059
wikitext
text/x-wiki
{{লে|L308705}}
5x4u8p1sha618nmld9nvkg5v7kleow8
রাজবাড়ী
0
170611
514060
2026-07-25T15:33:45Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308706-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514060
wikitext
text/x-wiki
{{লে|L308706}}
g18g9b3lu4ohw8y9o973e9v4m5dw84a
কিশোরগঞ্জ
0
170612
514062
2026-07-25T15:53:48Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308714-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514062
wikitext
text/x-wiki
{{লে|L308714}}
ntjrjygrlxjvc91u0xz1hnr24jh6nmp
গাজীপুর
0
170613
514064
2026-07-25T16:23:26Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308717-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514064
wikitext
text/x-wiki
{{লে|L308717}}
2bkgc8ef0kft4psykatat5k9p3wok21
গোপালগঞ্জ
0
170614
514065
2026-07-25T16:23:43Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308718-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514065
wikitext
text/x-wiki
{{লে|L308718}}
gsvu2zy2gjevsnvgrjo31cmtcrqe4on
চাঁদপুর
0
170615
514066
2026-07-25T16:24:41Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308719-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514066
wikitext
text/x-wiki
{{লে|L308719}}
2nqa64drzm0d4di2ahqdnnznywr62le
টাঙ্গাইল
0
170616
514067
2026-07-25T16:25:33Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308725-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514067
wikitext
text/x-wiki
{{লে|L308725}}
8i8kta4g7pujjc9brty38vp9guu3nhb
নাটোর
0
170617
514068
2026-07-25T16:26:56Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308728-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514068
wikitext
text/x-wiki
{{লে|L308728}}
3pm5oyji1rfa9wwn04qtxptnn821dec
নড়াইল
0
170618
514069
2026-07-25T16:27:51Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308730-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514069
wikitext
text/x-wiki
{{লে|L308730}}
n85jo9i0pl42s19efgivtdjyw38a46t
পিরোজপুর
0
170619
514071
2026-07-25T16:29:24Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308732-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514071
wikitext
text/x-wiki
{{লে|L308732}}
96k8rb40kktlmimedlfiz5v4ixkyu1o
ফরিদপুর
0
170620
514072
2026-07-25T16:32:00Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308733-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514072
wikitext
text/x-wiki
{{লে|L308733}}
ekos78dw206iqoplo4i2pjxue41mbzt
মাদারীপুর
0
170621
514073
2026-07-25T16:33:57Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308739-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514073
wikitext
text/x-wiki
{{লে|L308739}}
2az3qvf3d1as2zo1snji04zre05earn
মানিকগঞ্জ
0
170622
514074
2026-07-25T16:36:05Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308740-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514074
wikitext
text/x-wiki
{{লে|L308740}}
8xyyur34wu25589nskcp54fbm80j1vv
মুন্সিগঞ্জ
0
170623
514075
2026-07-25T16:37:06Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308741-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514075
wikitext
text/x-wiki
{{লে|L308741}}
8soutel8ubcxifc8kuy9jlp20qkhjyp
মেহেরপুর
0
170624
514076
2026-07-25T16:37:24Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308744-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514076
wikitext
text/x-wiki
{{লে|L308744}}
c3zzk4wgylsnlf2vbq7bdd8d3nj0f9i
মৌলভীবাজার
0
170625
514077
2026-07-25T16:37:32Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308745-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514077
wikitext
text/x-wiki
{{লে|L308745}}
ncgcsou9zlomwv3a6wusw2c4tu4mgpa
শরীয়তপুর
0
170626
514078
2026-07-25T16:39:22Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308751-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514078
wikitext
text/x-wiki
{{লে|L308751}}
5pwo7q9jbdsnjxhg62cujee164dowdt
শেরপুর
0
170627
514079
2026-07-25T16:39:32Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308752-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514079
wikitext
text/x-wiki
{{লে|L308752}}
ptpc2qmhuu94znvbkt2lgltmq3mf2vo
সিরাজগঞ্জ
0
170628
514080
2026-07-25T16:39:40Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308753-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514080
wikitext
text/x-wiki
{{লে|L308753}}
42jaju3s9byff9loez51sk4y7xdrhql
হিনটামিগিরি
0
170629
514081
2026-07-25T16:39:59Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308815-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514081
wikitext
text/x-wiki
{{লে|L308815}}
30f2helcdt0oaxgc2ofvjtd4lcqhapb
হিঁসকুটে
0
170630
514082
2026-07-25T16:40:13Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308863-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514082
wikitext
text/x-wiki
{{লে|L308863}}
g5e6f16bmxruisv9ipmofwp4zhkgobu
হুজ্জুতি
0
170631
514083
2026-07-25T16:41:20Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308867-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514083
wikitext
text/x-wiki
{{লে|L308867}}
82lhn1z6tns1apx8tibupak7i2fbdh4
হুমদো
0
170632
514087
2026-07-25T16:50:44Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308874-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514087
wikitext
text/x-wiki
{{লে|L308874}}
0ruscemyo3gbq95kkjonnj9z721cfq2
হুল্লোড়বাজ
0
170633
514088
2026-07-25T16:51:05Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308876-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514088
wikitext
text/x-wiki
{{লে|L308876}}
h2tur1x6gcusbxs983sy6dkxgyshc3h
হেঁতেল
0
170634
514089
2026-07-25T16:51:46Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309012-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514089
wikitext
text/x-wiki
{{লে|L309012}}
61gjx29vwxslpzelyprl94vnl2yppi7
হেভি
0
170635
514090
2026-07-25T16:52:03Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309013-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514090
wikitext
text/x-wiki
{{লে|L309013}}
g40afzbrb9j52854exba53xvqk2jb94
হেলোপাখি
0
170636
514091
2026-07-25T16:56:32Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309014-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514091
wikitext
text/x-wiki
{{লে|L309014}}
fo20tvmny7gk98c8ue9b4teolfgz1gz
হ্যাংলামো
0
170637
514095
2026-07-25T16:58:30Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309019-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514095
wikitext
text/x-wiki
{{লে|L309019}}
47ndtja4p3mtgauh4sgt2wxfxbr5liy
হ্যাজানো
0
170638
514098
2026-07-25T16:59:11Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309022-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514098
wikitext
text/x-wiki
{{লে|L309022}}
bapm17gqpo3wfnpim2f88e9foyya9so
হ্যাজানে
0
170639
514099
2026-07-25T17:00:09Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309023-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514099
wikitext
text/x-wiki
{{লে|L309023}}
bzkwqn79e9rvo4ociyebk0kz89h5shn
হর্মা
0
170640
514100
2026-07-25T17:00:48Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309051-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514100
wikitext
text/x-wiki
{{লে|L309051}}
4m0ch9kxna10ishrgo55l0zewll21r2
হনুমানজি
0
170641
514103
2026-07-25T17:01:47Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309032-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514103
wikitext
text/x-wiki
{{লে|L309032}}
imz4eafpakdz863dp0a70wwgxoxijhj
হস্তিবাজ
0
170642
514104
2026-07-25T17:02:52Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309056-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514104
wikitext
text/x-wiki
{{লে|L309056}}
qe6y53rmkbgqipxioo4vl7ms69r58vc
হাটি
0
170643
514105
2026-07-25T17:08:16Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309059-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514105
wikitext
text/x-wiki
{{লে|L309059}}
5bgpz0s1wrhbuq0w51fp9kdrzpmovbe
হাতাল
0
170644
514108
2026-07-25T17:30:36Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309070-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514108
wikitext
text/x-wiki
{{লে|L309070}}
r6yb2sel8sv6thlx97yc418iurblvcs
হাততাল
0
170645
514109
2026-07-25T17:30:53Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309071-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514109
wikitext
text/x-wiki
{{লে|L309071}}
pvte4zvqug113doucc66l8l7semsvba
হাতথাল
0
170646
514110
2026-07-25T17:31:11Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309072-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514110
wikitext
text/x-wiki
{{লে|L309072}}
n3qwlmi4yqb8rqguifp0fopstd0v9nx
হারমাত
0
170647
514111
2026-07-25T17:31:30Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309075-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514111
wikitext
text/x-wiki
{{লে|L309075}}
dm4b6akqjhji3gqy7awhkwwvpl3hhkw
ষ্ঠ্যূত
0
170648
514112
2026-07-25T17:32:01Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309076-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514112
wikitext
text/x-wiki
{{লে|L309076}}
6lzlkk2uvsc0vd6j1p3d0py6l8nwap0
ষ্ট্রীট
0
170649
514114
2026-07-25T17:32:47Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309078-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514114
wikitext
text/x-wiki
{{লে|L309078}}
tsvjgskx5qjfvzb230g637ql3s9xtsz
ষ্ট্যাম্প
0
170650
514116
2026-07-25T17:33:02Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309079-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514116
wikitext
text/x-wiki
{{লে|L309079}}
cysktl8wog2yc7e0h3lfb3n6iee255t
ষ্টেশন
0
170651
514117
2026-07-25T17:33:10Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309080-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514117
wikitext
text/x-wiki
{{লে|L309080}}
90g4tii1arba2zw5vhvkxchiiu6td5h
ষ্টীমার
0
170652
514118
2026-07-25T17:33:18Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309081-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514118
wikitext
text/x-wiki
{{লে|L309081}}
lvz6how4irlk5jdekfwt36pjkpirwnj
ষ্টীম
0
170653
514119
2026-07-25T17:33:24Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309082-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514119
wikitext
text/x-wiki
{{লে|L309082}}
19suupwblmoho46ijc5e4l2rtgedqm8
ষাটি
0
170654
514120
2026-07-25T17:34:29Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309097-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514120
wikitext
text/x-wiki
{{লে|L309097}}
0tsw729b0qogliegrtatuozsgeapf07
ষড়রস
0
170655
514124
2026-07-25T17:50:53Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309121-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514124
wikitext
text/x-wiki
{{লে|L309121}}
dfhas1nfc4oc5cmhejamzytj4pwtj5c
ষট্পঞ্চাশত্তমী
0
170656
514130
2026-07-25T17:53:31Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309232-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514130
wikitext
text/x-wiki
{{লে|L309232}}
c0acthynv08me0ut9ijfxt1l2ryd4d1
ষট্ক
0
170657
514131
2026-07-25T17:53:48Z
Redmin
6857
লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309263-এর জন্য একটি নতুন ভুক্তি তৈরি করছি
514131
wikitext
text/x-wiki
{{লে|L309263}}
t08pc8wjzs1psjhswxebtnown01f4io