উইকিঅভিধান
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.39.0-wmf.23
case-sensitive
মিডিয়া
বিশেষ
আলাপ
ব্যবহারকারী
ব্যবহারকারী আলাপ
উইকিঅভিধান
উইকিঅভিধান আলোচনা
চিত্র
চিত্র আলোচনা
মিডিয়াউইকি
মিডিয়াউইকি আলোচনা
টেমপ্লেট
টেমপ্লেট আলোচনা
সাহায্য
সাহায্য আলোচনা
বিষয়শ্রেণী
বিষয়শ্রেণী আলোচনা
উইকিসরাস
উইকিসরাস আলোচনা
TimedText
TimedText talk
মডিউল
মডিউল আলাপ
গ্যাজেট
গ্যাজেট আলোচনা
গ্যাজেট সংজ্ঞা
গ্যাজেট সংজ্ঞার আলোচনা
ব্যবহারকারী আলাপ:আফতাবুজ্জামান
3
6027
132157
132141
2022-08-09T02:57:00Z
আফতাবুজ্জামান
2263
/* টেমপ্লেট */
wikitext
text/x-wiki
<div style="background-color: #fff; border: 1px ridge #006a4e; padding: 10px;">
'''স্বাগতম!'''
{| border="0" class="plainlinks"
|-valign="top"
উইকিঅভিধানে, বাংলা ভাষায় এই মুক্ত অভিধান গড়ার এই প্রকল্পে [[বিশেষ:Contributions/Aftab1995|আপনার প্রচেষ্টাকে]] স্বাগত জানাচ্ছি। আশা করছি এই প্রচেষ্টাকে সফল করতে আপনার সাহায্য অব্যাহত থাকবে, এবং এই সম্প্রদায়ে আপনার অবস্থান আনন্দপূর্ণ হবে। যেকোনো প্রকার প্রশ্নে নিঃসঙ্কোচে [[User talk:Pratyya Ghosh|আমার আলাপ পাতায়]] বার্তা রাখার অনুরোধ। উইকিঅভিধানে লেখার ক্ষেত্রে কিছু বিষয় মনে রাখা উত্তম:
|-
|
* [[উইকিঅভিধান:নীতিমালা ও নির্দেশাবলী|নীতিমালা ও নির্দেশাবলী]] — উইকিঅভিধানের মূল নীতিমালাগুলোতে একবার চোখ বুলিয়ে নিন, ও মেনে চলার চেষ্টা করুন।
* [[উইকিঅভিধান:ভুক্তির কাঠামো ব্যাখ্যা|ভুক্তির কাঠামো ব্যাখ্যা]] — অর্থাৎ একটি ভুক্তিতে যে বিষয়গুলো যোগ করার মাধ্যমে আপনি ভুক্তিটির উন্নয়ন ঘটাতে পারেন।
* [[উইকিঅভিধান:কপিরাইট|কপিরাইট নীতিমালা]] — উইকিঅভিধান আইনের প্রতি শ্রদ্ধাশীল। তাই কপিরাইটের মূল বিষয়গুলো অনুগ্রহপূর্বক একটু দেখে নিন।
উইকিঅভিধানে আপনাকে আবারও স্বাগতম!
'''[[ব্যবহারকারী:Pratyya Ghosh|<span style="color:green;font-family:Verdana">প্র<font color="red">ত্য</font><font color="blue">য়</font></span>]]''' [[ব্যবহারকারী আলাপ:Pratyya Ghosh|<span style="color:orange;font-family:Verdana">(স্বাগতম)</span>]] ০৬:৩৭, ৩০ মে ২০১৩ (ইউটিসি)</div>
|}</div>
== টেমপ্লেট ==
আফতাব, তোমাকে অনুরোধ এখনই টেমপ্লেটগুলো পরিবর্তন কোরো না। টেমপ্লেটগুলো এখন পরীক্ষামূলক স্তরে রয়েছে, এখনো অনেক কাজ বাকি রয়েছে। আমি, সুজয়দা আর একজন তামিল উইকিপিডিয়ান তিন জন মিলে ধীরে ধীরে টেমপ্লেটগুলোকে তৈরী করছি। একটা বড় প্রকল্পের চেষ্টা চলছে, এটা তারই অংশ। কিছু গোলমাল থাকতে পারে, সেটা ধীরে ধীরে পরিবর্তন করা হবে। -- [[User:Bodhisattwa|Bodhisattwa]] ([[User talk:Bodhisattwa|আলাপ]]) ২০:৪৪, ৩ মার্চ ২০১৫ (ইউটিসি)
== টুইংকল টুলস ==
আফতাব, উইকিঅভিধানের টুইংকল টুলস কাজ করছে না। যদি একটু সময় করে দেখো তাহলে খুব ভাল হয়।--[[User:Sujay25|সুজয় চন্দ্র]] ([[User talk:Sujay25|আলাপ]]) ১১:৫৮, ১৫ মার্চ ২০১৫ (ইউটিসি)
== আদর্শ ভুক্তি তৈরি প্রসঙ্গে ==
সুপ্রিয় আফতাব ভাই,
আমার মনে হয় বাংলা উইকিঅভিধানের জন্য কিছু আদর্শ ভুক্তি তৈরি করা উচিত যেন তা দেখে অন্য আরও ভুক্তি তৈরি করা যায়। উইকিপিডিয়াতে যেমন নির্বাচিত নিবন্ধ থাকে এবং অন্য নিবন্ধসমূহ সেইসব নিবন্ধ দেখে তৈরি করা যায়। তেমনি এখানে কিছু নির্বাচিত ভুক্তি তৈরি করা উচিত যেন তা অনুসরণ করে নতুন ভুক্তি তৈরি সম্ভব হয়। এ বিষয়ে আপনার মতামত কী?[[User:Tahmid02016|বাউন্ডুলে দার্শনিক]] ([[User talk:Tahmid02016|আলাপ]]) ১২:০৫, ৬ আগস্ট ২০১৭ (ইউটিসি)
:{{ping|Tahmid02016}} হ্যাঁ, করা যায়। এই রকম ভুক্তি খুঁজে বের করতে হবে। --[[User:Aftabuzzaman|Aftabuzzaman]] ([[User talk:Aftabuzzaman|আলাপ]]) ১৮:১৯, ৬ আগস্ট ২০১৭ (ইউটিসি)
== খুরদান ==
[[https://bn.m.wiktionary.org/wiki/%D8%AE%D9%88%D8%B1%D8%AF%D9%86 খুরদান]] [[ব্যবহারকারী:A Bangladeshi Boy|A Bangladeshi Boy]] ([[ব্যবহারকারী আলাপ:A Bangladeshi Boy|আলাপ]]) ২২:৪৯, ২০ মার্চ ২০২০ (ইউটিসি)
:[[ব্যবহারকারী:A Bangladeshi Boy|A Bangladeshi Boy]] ঠিক আছে। --[[ব্যবহারকারী:আফতাবুজ্জামান|আফতাব]] ([[ব্যবহারকারী আলাপ:আফতাবুজ্জামান#top|আলাপ]]) ০৩:৪২, ২১ মার্চ ২০২০ (ইউটিসি)
== প্লিজ দেখুন ==
[[https://bn.m.wiktionary.org/w/index.php?title=%D7%A0%D7%97%D7%9E%D7%93&redlink=1#%E0%A6%B9%E0%A6%BF%E0%A6%AC%E0%A7%8D%E0%A6%B0%E0%A7%81 এ নিবন্ধ]] প্লিজ দেখুন। [[ব্যবহারকারী:Dhakabashi Chowdhury|Dhakabashi Chowdhury]] ([[ব্যবহারকারী আলাপ:Dhakabashi Chowdhury|আলাপ]]) ১৪:৩০, ১৩ এপ্রিল ২০২০ (ইউটিসি)
:[[ব্যবহারকারী:Dhakabashi Chowdhury|Dhakabashi Chowdhury]] হয়েছে। তবে [https://bn.m.wiktionary.org/wiki/%E0%A6%AC%E0%A6%BF%E0%A6%B6%E0%A7%87%E0%A6%B7:%E0%A6%AE%E0%A7%8B%E0%A6%AC%E0%A6%BE%E0%A6%87%E0%A6%B2_%E0%A6%AA%E0%A6%BE%E0%A6%B0%E0%A7%8D%E0%A6%A5%E0%A6%95%E0%A7%8D%E0%A6%AF/66154 এই রকম করে] টেমপ্লেট যোগ করতে ভুলবেন না।[[ব্যবহারকারী:আফতাবুজ্জামান|আফতাব]] ([[ব্যবহারকারী আলাপ:আফতাবুজ্জামান#top|আলাপ]]) ১৫:১৬, ১৩ এপ্রিল ২০২০ (ইউটিসি)
==বট পরিচালনার অনুরোধ==
সুধী, [[ব্যবহারকারী:Aishik Rehman|Aishik Rehman]] সম্প্রতি অনেক ভুক্তি তৈরি করেছে যেগুলোতে তিনি <code><nowiki>{{-bn-}}</nowiki></code> কোডের পরিবর্তে হয়তো না জেনেই মূল টেমপ্লেটের কোড <code><nowiki>=={{ভাষার নাম|bn}}==
<noinclude>
[[বিষয়শ্রেণী:ভাষা টেমপ্লেট - শব্দ]]
</noinclude></nowiki></code> ব্যবহার করেছে। তার সম্পাদনাসমূহ আপনার AftabBot দ্বারা সংশোধনের অনুরোধ করতেছি, কেননা এগুলো হাতদ্বারা করতে অনেক সময় লাগবে। — [[ব্যবহারকারী:Al Riaz Uddin Ripon|Al Riaz Uddin ]] ([[ব্যবহারকারী আলাপ:Al Riaz Uddin Ripon|আলাপ]]) ০৬:৩৭, ৯ সেপ্টেম্বর ২০২০ (ইউটিসি)
:[[ব্যবহারকারী:Al Riaz Uddin Ripon|Al Riaz Uddin]], করেছি। --[[ব্যবহারকারী:আফতাবুজ্জামান|আফতাব]] ([[ব্যবহারকারী আলাপ:আফতাবুজ্জামান#top|আলাপ]]) ২০:০০, ৯ সেপ্টেম্বর ২০২০ (ইউটিসি)
== টেমপ্লেট ==
টেমপ্লেট:এর বহুবচন -এ কি সমস্যা হচ্ছে দয়া করে দেখুন।[[ব্যবহারকারী:Szilard|Szilard]] ([[ব্যবহারকারী আলাপ:Szilard|আলাপ]]) ০৮:০৫, ৮ আগস্ট ২০২২ (ইউটিসি)
:{{উত্তর|Szilard}} ভুক্তির লিঙ্ক? [[ব্যবহারকারী:আফতাবুজ্জামান|আফতাবুজ্জামান]] ([[ব্যবহারকারী আলাপ:আফতাবুজ্জামান#top|আলাপ]]) ০২:৫৭, ৯ আগস্ট ২০২২ (ইউটিসি)
ip3l73d1iibi0u1lvv343uvwaqe278r
132191
132157
2022-08-09T08:36:43Z
Szilard
4981
/* টেমপ্লেট */
wikitext
text/x-wiki
<div style="background-color: #fff; border: 1px ridge #006a4e; padding: 10px;">
'''স্বাগতম!'''
{| border="0" class="plainlinks"
|-valign="top"
উইকিঅভিধানে, বাংলা ভাষায় এই মুক্ত অভিধান গড়ার এই প্রকল্পে [[বিশেষ:Contributions/Aftab1995|আপনার প্রচেষ্টাকে]] স্বাগত জানাচ্ছি। আশা করছি এই প্রচেষ্টাকে সফল করতে আপনার সাহায্য অব্যাহত থাকবে, এবং এই সম্প্রদায়ে আপনার অবস্থান আনন্দপূর্ণ হবে। যেকোনো প্রকার প্রশ্নে নিঃসঙ্কোচে [[User talk:Pratyya Ghosh|আমার আলাপ পাতায়]] বার্তা রাখার অনুরোধ। উইকিঅভিধানে লেখার ক্ষেত্রে কিছু বিষয় মনে রাখা উত্তম:
|-
|
* [[উইকিঅভিধান:নীতিমালা ও নির্দেশাবলী|নীতিমালা ও নির্দেশাবলী]] — উইকিঅভিধানের মূল নীতিমালাগুলোতে একবার চোখ বুলিয়ে নিন, ও মেনে চলার চেষ্টা করুন।
* [[উইকিঅভিধান:ভুক্তির কাঠামো ব্যাখ্যা|ভুক্তির কাঠামো ব্যাখ্যা]] — অর্থাৎ একটি ভুক্তিতে যে বিষয়গুলো যোগ করার মাধ্যমে আপনি ভুক্তিটির উন্নয়ন ঘটাতে পারেন।
* [[উইকিঅভিধান:কপিরাইট|কপিরাইট নীতিমালা]] — উইকিঅভিধান আইনের প্রতি শ্রদ্ধাশীল। তাই কপিরাইটের মূল বিষয়গুলো অনুগ্রহপূর্বক একটু দেখে নিন।
উইকিঅভিধানে আপনাকে আবারও স্বাগতম!
'''[[ব্যবহারকারী:Pratyya Ghosh|<span style="color:green;font-family:Verdana">প্র<font color="red">ত্য</font><font color="blue">য়</font></span>]]''' [[ব্যবহারকারী আলাপ:Pratyya Ghosh|<span style="color:orange;font-family:Verdana">(স্বাগতম)</span>]] ০৬:৩৭, ৩০ মে ২০১৩ (ইউটিসি)</div>
|}</div>
== টেমপ্লেট ==
আফতাব, তোমাকে অনুরোধ এখনই টেমপ্লেটগুলো পরিবর্তন কোরো না। টেমপ্লেটগুলো এখন পরীক্ষামূলক স্তরে রয়েছে, এখনো অনেক কাজ বাকি রয়েছে। আমি, সুজয়দা আর একজন তামিল উইকিপিডিয়ান তিন জন মিলে ধীরে ধীরে টেমপ্লেটগুলোকে তৈরী করছি। একটা বড় প্রকল্পের চেষ্টা চলছে, এটা তারই অংশ। কিছু গোলমাল থাকতে পারে, সেটা ধীরে ধীরে পরিবর্তন করা হবে। -- [[User:Bodhisattwa|Bodhisattwa]] ([[User talk:Bodhisattwa|আলাপ]]) ২০:৪৪, ৩ মার্চ ২০১৫ (ইউটিসি)
== টুইংকল টুলস ==
আফতাব, উইকিঅভিধানের টুইংকল টুলস কাজ করছে না। যদি একটু সময় করে দেখো তাহলে খুব ভাল হয়।--[[User:Sujay25|সুজয় চন্দ্র]] ([[User talk:Sujay25|আলাপ]]) ১১:৫৮, ১৫ মার্চ ২০১৫ (ইউটিসি)
== আদর্শ ভুক্তি তৈরি প্রসঙ্গে ==
সুপ্রিয় আফতাব ভাই,
আমার মনে হয় বাংলা উইকিঅভিধানের জন্য কিছু আদর্শ ভুক্তি তৈরি করা উচিত যেন তা দেখে অন্য আরও ভুক্তি তৈরি করা যায়। উইকিপিডিয়াতে যেমন নির্বাচিত নিবন্ধ থাকে এবং অন্য নিবন্ধসমূহ সেইসব নিবন্ধ দেখে তৈরি করা যায়। তেমনি এখানে কিছু নির্বাচিত ভুক্তি তৈরি করা উচিত যেন তা অনুসরণ করে নতুন ভুক্তি তৈরি সম্ভব হয়। এ বিষয়ে আপনার মতামত কী?[[User:Tahmid02016|বাউন্ডুলে দার্শনিক]] ([[User talk:Tahmid02016|আলাপ]]) ১২:০৫, ৬ আগস্ট ২০১৭ (ইউটিসি)
:{{ping|Tahmid02016}} হ্যাঁ, করা যায়। এই রকম ভুক্তি খুঁজে বের করতে হবে। --[[User:Aftabuzzaman|Aftabuzzaman]] ([[User talk:Aftabuzzaman|আলাপ]]) ১৮:১৯, ৬ আগস্ট ২০১৭ (ইউটিসি)
== খুরদান ==
[[https://bn.m.wiktionary.org/wiki/%D8%AE%D9%88%D8%B1%D8%AF%D9%86 খুরদান]] [[ব্যবহারকারী:A Bangladeshi Boy|A Bangladeshi Boy]] ([[ব্যবহারকারী আলাপ:A Bangladeshi Boy|আলাপ]]) ২২:৪৯, ২০ মার্চ ২০২০ (ইউটিসি)
:[[ব্যবহারকারী:A Bangladeshi Boy|A Bangladeshi Boy]] ঠিক আছে। --[[ব্যবহারকারী:আফতাবুজ্জামান|আফতাব]] ([[ব্যবহারকারী আলাপ:আফতাবুজ্জামান#top|আলাপ]]) ০৩:৪২, ২১ মার্চ ২০২০ (ইউটিসি)
== প্লিজ দেখুন ==
[[https://bn.m.wiktionary.org/w/index.php?title=%D7%A0%D7%97%D7%9E%D7%93&redlink=1#%E0%A6%B9%E0%A6%BF%E0%A6%AC%E0%A7%8D%E0%A6%B0%E0%A7%81 এ নিবন্ধ]] প্লিজ দেখুন। [[ব্যবহারকারী:Dhakabashi Chowdhury|Dhakabashi Chowdhury]] ([[ব্যবহারকারী আলাপ:Dhakabashi Chowdhury|আলাপ]]) ১৪:৩০, ১৩ এপ্রিল ২০২০ (ইউটিসি)
:[[ব্যবহারকারী:Dhakabashi Chowdhury|Dhakabashi Chowdhury]] হয়েছে। তবে [https://bn.m.wiktionary.org/wiki/%E0%A6%AC%E0%A6%BF%E0%A6%B6%E0%A7%87%E0%A6%B7:%E0%A6%AE%E0%A7%8B%E0%A6%AC%E0%A6%BE%E0%A6%87%E0%A6%B2_%E0%A6%AA%E0%A6%BE%E0%A6%B0%E0%A7%8D%E0%A6%A5%E0%A6%95%E0%A7%8D%E0%A6%AF/66154 এই রকম করে] টেমপ্লেট যোগ করতে ভুলবেন না।[[ব্যবহারকারী:আফতাবুজ্জামান|আফতাব]] ([[ব্যবহারকারী আলাপ:আফতাবুজ্জামান#top|আলাপ]]) ১৫:১৬, ১৩ এপ্রিল ২০২০ (ইউটিসি)
==বট পরিচালনার অনুরোধ==
সুধী, [[ব্যবহারকারী:Aishik Rehman|Aishik Rehman]] সম্প্রতি অনেক ভুক্তি তৈরি করেছে যেগুলোতে তিনি <code><nowiki>{{-bn-}}</nowiki></code> কোডের পরিবর্তে হয়তো না জেনেই মূল টেমপ্লেটের কোড <code><nowiki>=={{ভাষার নাম|bn}}==
<noinclude>
[[বিষয়শ্রেণী:ভাষা টেমপ্লেট - শব্দ]]
</noinclude></nowiki></code> ব্যবহার করেছে। তার সম্পাদনাসমূহ আপনার AftabBot দ্বারা সংশোধনের অনুরোধ করতেছি, কেননা এগুলো হাতদ্বারা করতে অনেক সময় লাগবে। — [[ব্যবহারকারী:Al Riaz Uddin Ripon|Al Riaz Uddin ]] ([[ব্যবহারকারী আলাপ:Al Riaz Uddin Ripon|আলাপ]]) ০৬:৩৭, ৯ সেপ্টেম্বর ২০২০ (ইউটিসি)
:[[ব্যবহারকারী:Al Riaz Uddin Ripon|Al Riaz Uddin]], করেছি। --[[ব্যবহারকারী:আফতাবুজ্জামান|আফতাব]] ([[ব্যবহারকারী আলাপ:আফতাবুজ্জামান#top|আলাপ]]) ২০:০০, ৯ সেপ্টেম্বর ২০২০ (ইউটিসি)
== টেমপ্লেট ==
টেমপ্লেট:এর বহুবচন -এ কি সমস্যা হচ্ছে দয়া করে দেখুন।[[ব্যবহারকারী:Szilard|Szilard]] ([[ব্যবহারকারী আলাপ:Szilard|আলাপ]]) ০৮:০৫, ৮ আগস্ট ২০২২ (ইউটিসি)
:{{উত্তর|Szilard}} ভুক্তির লিঙ্ক? [[ব্যবহারকারী:আফতাবুজ্জামান|আফতাবুজ্জামান]] ([[ব্যবহারকারী আলাপ:আফতাবুজ্জামান#top|আলাপ]]) ০২:৫৭, ৯ আগস্ট ২০২২ (ইউটিসি)
::[[sacriledges]]-এ টেমপ্লেটটি ব্যবহার করার সময় দেখলাম সেখানে "of" শব্দটি আসছে। যদিও এখন আর নেই। ঠিক করার জন্য ধন্যবাদ। সম্ভব হলে যদি এমন কিছু করা যায় যাতে টেমপ্লেটটি ব্যবহার করলে "-এর বহুবচন" ইংরেজি শব্দের পরে আসে তাহলে সবচেয়ে ভালো হতো। যেমনঃ sacriledge-এর বহুবচন।
962dq7crfpky8aaocw9ly7o7djkg34i
132195
132191
2022-08-09T09:01:11Z
Szilard
4981
/* টেমপ্লেট */
wikitext
text/x-wiki
<div style="background-color: #fff; border: 1px ridge #006a4e; padding: 10px;">
'''স্বাগতম!'''
{| border="0" class="plainlinks"
|-valign="top"
উইকিঅভিধানে, বাংলা ভাষায় এই মুক্ত অভিধান গড়ার এই প্রকল্পে [[বিশেষ:Contributions/Aftab1995|আপনার প্রচেষ্টাকে]] স্বাগত জানাচ্ছি। আশা করছি এই প্রচেষ্টাকে সফল করতে আপনার সাহায্য অব্যাহত থাকবে, এবং এই সম্প্রদায়ে আপনার অবস্থান আনন্দপূর্ণ হবে। যেকোনো প্রকার প্রশ্নে নিঃসঙ্কোচে [[User talk:Pratyya Ghosh|আমার আলাপ পাতায়]] বার্তা রাখার অনুরোধ। উইকিঅভিধানে লেখার ক্ষেত্রে কিছু বিষয় মনে রাখা উত্তম:
|-
|
* [[উইকিঅভিধান:নীতিমালা ও নির্দেশাবলী|নীতিমালা ও নির্দেশাবলী]] — উইকিঅভিধানের মূল নীতিমালাগুলোতে একবার চোখ বুলিয়ে নিন, ও মেনে চলার চেষ্টা করুন।
* [[উইকিঅভিধান:ভুক্তির কাঠামো ব্যাখ্যা|ভুক্তির কাঠামো ব্যাখ্যা]] — অর্থাৎ একটি ভুক্তিতে যে বিষয়গুলো যোগ করার মাধ্যমে আপনি ভুক্তিটির উন্নয়ন ঘটাতে পারেন।
* [[উইকিঅভিধান:কপিরাইট|কপিরাইট নীতিমালা]] — উইকিঅভিধান আইনের প্রতি শ্রদ্ধাশীল। তাই কপিরাইটের মূল বিষয়গুলো অনুগ্রহপূর্বক একটু দেখে নিন।
উইকিঅভিধানে আপনাকে আবারও স্বাগতম!
'''[[ব্যবহারকারী:Pratyya Ghosh|<span style="color:green;font-family:Verdana">প্র<font color="red">ত্য</font><font color="blue">য়</font></span>]]''' [[ব্যবহারকারী আলাপ:Pratyya Ghosh|<span style="color:orange;font-family:Verdana">(স্বাগতম)</span>]] ০৬:৩৭, ৩০ মে ২০১৩ (ইউটিসি)</div>
|}</div>
== টেমপ্লেট ==
আফতাব, তোমাকে অনুরোধ এখনই টেমপ্লেটগুলো পরিবর্তন কোরো না। টেমপ্লেটগুলো এখন পরীক্ষামূলক স্তরে রয়েছে, এখনো অনেক কাজ বাকি রয়েছে। আমি, সুজয়দা আর একজন তামিল উইকিপিডিয়ান তিন জন মিলে ধীরে ধীরে টেমপ্লেটগুলোকে তৈরী করছি। একটা বড় প্রকল্পের চেষ্টা চলছে, এটা তারই অংশ। কিছু গোলমাল থাকতে পারে, সেটা ধীরে ধীরে পরিবর্তন করা হবে। -- [[User:Bodhisattwa|Bodhisattwa]] ([[User talk:Bodhisattwa|আলাপ]]) ২০:৪৪, ৩ মার্চ ২০১৫ (ইউটিসি)
== টুইংকল টুলস ==
আফতাব, উইকিঅভিধানের টুইংকল টুলস কাজ করছে না। যদি একটু সময় করে দেখো তাহলে খুব ভাল হয়।--[[User:Sujay25|সুজয় চন্দ্র]] ([[User talk:Sujay25|আলাপ]]) ১১:৫৮, ১৫ মার্চ ২০১৫ (ইউটিসি)
== আদর্শ ভুক্তি তৈরি প্রসঙ্গে ==
সুপ্রিয় আফতাব ভাই,
আমার মনে হয় বাংলা উইকিঅভিধানের জন্য কিছু আদর্শ ভুক্তি তৈরি করা উচিত যেন তা দেখে অন্য আরও ভুক্তি তৈরি করা যায়। উইকিপিডিয়াতে যেমন নির্বাচিত নিবন্ধ থাকে এবং অন্য নিবন্ধসমূহ সেইসব নিবন্ধ দেখে তৈরি করা যায়। তেমনি এখানে কিছু নির্বাচিত ভুক্তি তৈরি করা উচিত যেন তা অনুসরণ করে নতুন ভুক্তি তৈরি সম্ভব হয়। এ বিষয়ে আপনার মতামত কী?[[User:Tahmid02016|বাউন্ডুলে দার্শনিক]] ([[User talk:Tahmid02016|আলাপ]]) ১২:০৫, ৬ আগস্ট ২০১৭ (ইউটিসি)
:{{ping|Tahmid02016}} হ্যাঁ, করা যায়। এই রকম ভুক্তি খুঁজে বের করতে হবে। --[[User:Aftabuzzaman|Aftabuzzaman]] ([[User talk:Aftabuzzaman|আলাপ]]) ১৮:১৯, ৬ আগস্ট ২০১৭ (ইউটিসি)
== খুরদান ==
[[https://bn.m.wiktionary.org/wiki/%D8%AE%D9%88%D8%B1%D8%AF%D9%86 খুরদান]] [[ব্যবহারকারী:A Bangladeshi Boy|A Bangladeshi Boy]] ([[ব্যবহারকারী আলাপ:A Bangladeshi Boy|আলাপ]]) ২২:৪৯, ২০ মার্চ ২০২০ (ইউটিসি)
:[[ব্যবহারকারী:A Bangladeshi Boy|A Bangladeshi Boy]] ঠিক আছে। --[[ব্যবহারকারী:আফতাবুজ্জামান|আফতাব]] ([[ব্যবহারকারী আলাপ:আফতাবুজ্জামান#top|আলাপ]]) ০৩:৪২, ২১ মার্চ ২০২০ (ইউটিসি)
== প্লিজ দেখুন ==
[[https://bn.m.wiktionary.org/w/index.php?title=%D7%A0%D7%97%D7%9E%D7%93&redlink=1#%E0%A6%B9%E0%A6%BF%E0%A6%AC%E0%A7%8D%E0%A6%B0%E0%A7%81 এ নিবন্ধ]] প্লিজ দেখুন। [[ব্যবহারকারী:Dhakabashi Chowdhury|Dhakabashi Chowdhury]] ([[ব্যবহারকারী আলাপ:Dhakabashi Chowdhury|আলাপ]]) ১৪:৩০, ১৩ এপ্রিল ২০২০ (ইউটিসি)
:[[ব্যবহারকারী:Dhakabashi Chowdhury|Dhakabashi Chowdhury]] হয়েছে। তবে [https://bn.m.wiktionary.org/wiki/%E0%A6%AC%E0%A6%BF%E0%A6%B6%E0%A7%87%E0%A6%B7:%E0%A6%AE%E0%A7%8B%E0%A6%AC%E0%A6%BE%E0%A6%87%E0%A6%B2_%E0%A6%AA%E0%A6%BE%E0%A6%B0%E0%A7%8D%E0%A6%A5%E0%A6%95%E0%A7%8D%E0%A6%AF/66154 এই রকম করে] টেমপ্লেট যোগ করতে ভুলবেন না।[[ব্যবহারকারী:আফতাবুজ্জামান|আফতাব]] ([[ব্যবহারকারী আলাপ:আফতাবুজ্জামান#top|আলাপ]]) ১৫:১৬, ১৩ এপ্রিল ২০২০ (ইউটিসি)
==বট পরিচালনার অনুরোধ==
সুধী, [[ব্যবহারকারী:Aishik Rehman|Aishik Rehman]] সম্প্রতি অনেক ভুক্তি তৈরি করেছে যেগুলোতে তিনি <code><nowiki>{{-bn-}}</nowiki></code> কোডের পরিবর্তে হয়তো না জেনেই মূল টেমপ্লেটের কোড <code><nowiki>=={{ভাষার নাম|bn}}==
<noinclude>
[[বিষয়শ্রেণী:ভাষা টেমপ্লেট - শব্দ]]
</noinclude></nowiki></code> ব্যবহার করেছে। তার সম্পাদনাসমূহ আপনার AftabBot দ্বারা সংশোধনের অনুরোধ করতেছি, কেননা এগুলো হাতদ্বারা করতে অনেক সময় লাগবে। — [[ব্যবহারকারী:Al Riaz Uddin Ripon|Al Riaz Uddin ]] ([[ব্যবহারকারী আলাপ:Al Riaz Uddin Ripon|আলাপ]]) ০৬:৩৭, ৯ সেপ্টেম্বর ২০২০ (ইউটিসি)
:[[ব্যবহারকারী:Al Riaz Uddin Ripon|Al Riaz Uddin]], করেছি। --[[ব্যবহারকারী:আফতাবুজ্জামান|আফতাব]] ([[ব্যবহারকারী আলাপ:আফতাবুজ্জামান#top|আলাপ]]) ২০:০০, ৯ সেপ্টেম্বর ২০২০ (ইউটিসি)
== টেমপ্লেট ==
টেমপ্লেট:এর বহুবচন -এ কি সমস্যা হচ্ছে দয়া করে দেখুন।[[ব্যবহারকারী:Szilard|Szilard]] ([[ব্যবহারকারী আলাপ:Szilard|আলাপ]]) ০৮:০৫, ৮ আগস্ট ২০২২ (ইউটিসি)
:{{উত্তর|Szilard}} ভুক্তির লিঙ্ক? [[ব্যবহারকারী:আফতাবুজ্জামান|আফতাবুজ্জামান]] ([[ব্যবহারকারী আলাপ:আফতাবুজ্জামান#top|আলাপ]]) ০২:৫৭, ৯ আগস্ট ২০২২ (ইউটিসি)
::[[sacriledges]]-এ টেমপ্লেটটি ব্যবহার করার সময় দেখলাম সেখানে "of" শব্দটি আসছে। যদিও এখন আর নেই। ঠিক করার জন্য ধন্যবাদ। সম্ভব হলে যদি এমন কিছু করা যায় যাতে টেমপ্লেটটি ব্যবহার করলে "-এর বহুবচন" ইংরেজি শব্দের পরে আসে তাহলে সবচেয়ে ভালো হতো। যেমনঃ sacriledge-এর বহুবচন।
::এছাড়া "টেমপ্লেট:অন্ত্যমিল" ব্যবহার করা যাচ্ছে না। [[sacrilegious]] দেখলে হয়তো বুঝবেন কোথায় সমস্যা হচ্ছে।[[ব্যবহারকারী:Szilard|Szilard]] ([[ব্যবহারকারী আলাপ:Szilard|আলাপ]]) ০৯:০১, ৯ আগস্ট ২০২২ (ইউটিসি)
q3zr639guvi3ndzbzf29l396g92o5ab
মডিউল:form of
828
7326
132154
73686
2022-08-09T02:13:38Z
আফতাবুজ্জামান
2263
Scribunto
text/plain
local m_links = require("Module:links")
local m_table = require("Module:table")
local m_pos = mw.loadData("Module:form of/pos")
local m_functions = require("Module:form of/functions")
local ulen = mw.ustring.len
local rsubn = mw.ustring.gsub
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local export = {}
--[=[
This module implements the underlying processing of {{form of}},
{{inflection of}} and specific variants such as {{past participle of}}
and {{alternative spelling of}}. Most of the logic in this file is to
handle tags in {{inflection of}}. Other related files:
* [[Module:form of/templates]] contains the majority of the logic that
implements the templates themselves.
* [[Module:form of/data]] is a data-only file containing information on
the more common inflection tags, listing the tags, their shortcuts,
the category they belong to (tense-aspect, case, gender, voice-valence,
etc.), the appropriate glossary link and the wikidata ID.
* [[Module:form of/data2]] is a data-only file containing information on
the less common inflection tags, in the same format as
[[Module:form of/data]].
* [[Module:form of/cats]] is a data-only file listing the
language-specific categories that are added when the appropriate
combinations of tags are seen for a given language.
* [[Module:form of/pos]] is a data-only file listing the recognized
parts of speech and their abbreviations, used for categorization.
FIXME: This should be unified with the parts of speech listed in
[[Module:links]].
* [[Module:form of/functions]] contains functions for use with
[[Module:form of/data]] and [[Module:form of/cats]]. They are
contained in this module because data-only modules can't contain
code. The functions in this file are of two types:
(1) Display handlers allow for customization of the display of
multipart tags (see below). Currently there is only one
such handler, for handling multipart person tags such as
'1//2//3'.
(2) Cat functions allow for more complex categorization logic,
and are referred to by name in [[Module:form of/cats]].
Currently no such functions exist.
The following terminology is used in conjunction with {{inflection of}}:
* A TAG is a single grammatical item, as specified in a single numbered
parameter of {{inflection of}}. Examples are 'masculine', 'nominative',
or 'first-person'. Tags may be abbreviated, e.g. 'm' for 'masculine',
'nom' for 'nominative', or '1' for 'first-person'. Such abbreviations
are called SHORTCUTS, and some tags have multiple equivalent shortcuts
(e.g. 'p' or 'pl' for 'plural'). The full, non-abbreviated form of
a tag is called its CANONICAL FORM.
* The DISPLAY FORM of a tag is the way it's displayed to the user. Usually
the displayed text of the tag is the same as its canonical form, and it
normally functions as a link to a glossary entry explaining the tag.
Usually the link is to an entry in [[Appendix:Glossary]], but sometimes
the tag is linked to an individual dictionary entry or to a Wikipedia
entry. Occasionally, the display text differs from the canonical form of
the tag. An example is the tag 'comparative case', which has the display
text read as simply 'comparative'. Normally, tags referring to cases don't
have the word "case" in them, but in this case the tag 'comparative' was
already used as a shortcut for the tag 'comparative degree', so the tag was
named 'comparative case' to avoid clashing. A similar situation occurs
with 'adverbial case' vs. the grammar tag 'adverbial' (as in 'adverbial
participle').
* A TAG SET is an ordered list of tags, which together express a single
inflection, for example, '1|s|pres|ind', which can be expanded to
canonical-form tags as 'first-person|singular|present|indicative'.
Multiple tag sets can be specified in a single call to {{inflection of}}
by separating the individual tag sets with a semicolon, e.g.
'1|s|pres|ind|;|2|s|imp', which specifies two tag sets, '1|s|pres|ind'
as above and '2|s|imp' (in canonical form,
'second-person|singular|imperative').
* A MULTIPART TAG is a tag that embeds multiple tags within it, such as
'f//n' or 'nom//acc//voc'. These are used in the case of [[syncretism]],
when the same form applies to multiple inflections. Examples are the
Spanish present subjunctive, where the first-person and third-person
singular have the same form (e.g. [[siga]] from [[seguir]] "to follow"),
or Latin third-declension adjectives, where the dative and ablative
plural of all genders have the same form (e.g. [[omnibus]] from [[omnis]]
"all"). These would be expressed respectively as '1//3|s|pres|sub'
and 'dat//abl|m//f//n|p', where the use of the multipart tag compactly
encodes the syncretism and avoids the need to individually list out
all of the inflections. Multipart tags currently display as a list
separated by "and", ''dative and ablative'' or
''masculine, feminine and neuter'' where each individual word is linked
appropriately. As a special case, multipart tags involving persons display
specially; for example, the multipart tag ''1//2//3'' displays as
''first-, second- and third-person'', with the word "person" occurring
only once.
* A TWO-LEVEL MULTIPART TAG is a special type of multipart tag that
joins two or more tag sets instead of joining individual tags. The tags
within the tag set are joined by a colon, e.g. '1:s//3:p', which is
displayed as ''first-person singular and third-person plural'', e.g.
for use with the form [[μέλλον]] of the verb [[μέλλω]] "to intend",
which uses the tag set '1:s//3:p|impf|actv|indc|unaugmented' to express
the syncretism between the first singular and third plural forms of the
imperfect active indicative unaugmented conjugation. Two-level multipart
tags should be used sparingly; if in doubt, list out the inflections
separately.
* A MULTIPART TAG SHORTCUT is a shortcut that expands into a multipart
tag, for example '123', which expands to the multipart tag '1//2//3'.
Only the most common such combinations exist as shortcuts.
* A LIST TAG SHORTCUT is a special type of shortcut that expands to a list
of tags instead of a single tag. For example, the shortcut '1s' expands to
'1|s' (first-person singular). Only the most common such combinations
exist as shortcuts.
]=]
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
local retval = rsubn(term, foo, bar)
return retval
end
local function wrap_in_span(text, classes)
return ("<span class='%s'>%s</span>"):format(classes, text)
end
function export.format_form_of(data)
if type(data) ~= "table" then
error("Internal error: First argument must now be a table of arguments")
end
-- FIXME: Change the callers to send in .terminfos instead of .terminfo and remove
-- the following compatibility code.
if data.terminfo and data.terminfos then
error("Internal error: Can't specify both .terminfo and .terminfos")
end
local terminfos = data.terminfos
if data.terminfo then
if type(data.terminfo) == "string" then
terminfos = data.terminfo
else
terminfos = {data.terminfo}
end
end
local text_classes = data.text_classes or "form-of-definition use-with-mention"
local terminfo_classes = data.text_classes or "form-of-definition-link"
local parts = {}
table.insert(parts, "<span class='" .. text_classes .. "'>")
table.insert(parts, data.text)
if data.text ~= "" and terminfos then
table.insert(parts, " ")
end
if terminfos then
if type(terminfos) == "string" then
table.insert(parts, wrap_in_span(terminfos, terminfo_classes))
else
local formatted_terms = {}
for _, terminfo in ipairs(terminfos) do
table.insert(formatted_terms, wrap_in_span(
m_links.full_link(terminfo, data.terminfo_face, false), terminfo_classes
))
end
table.insert(parts, m_table.serialCommaJoin(formatted_terms))
end
end
if data.posttext then
table.insert(parts, data.posttext)
end
table.insert(parts, "</span>")
return table.concat(parts)
end
-- Add tracking category for PAGE when called from {{inflection of}} or
-- similar TEMPLATE. The tracking category linked to is
-- [[Template:tracking/inflection of/PAGE]].
local function infl_track(page)
require("Module:debug").track("inflection of/" ..
-- avoid including links in pages (may cause error)
page:gsub("%[", "("):gsub("%]", ")"):gsub("|", "!"))
end
local function is_link_or_html(tag)
return tag:find("[[", nil, true) or tag:find("|", nil, true) or
tag:find("<", nil, true)
end
-- Look up a tag (either a shortcut of any sort of a canonical long-form tag)
-- and return its expansion. The expansion will be a string unless the
-- shortcut is a list-tag shortcut such as "1s"; in that case, the expansion
-- will be a list. The caller must handle both cases. Only one level of
-- expansion happens; hence, "acc" expands to "accusative", "1s" expands to
-- {"1", "s"} (not to {"first", "singular"}) and "123" expands to "1//2//3".
-- The expansion will be the same as the passed-in tag in the following
-- circumstances:
--
-- 1. The tag is ";" (this is special-cased, and no lookup is done).
-- 2. The tag is a multipart tag such as "nom//acc" (this is special-cased,
-- and no lookup is done).
-- 3. The tag contains a raw link (this is special-cased, and no lookup is
-- done).
-- 4. The tag contains HTML (this is special-cased, and no lookup is done).
-- 5. The tag is already a canonical long-form tag.
-- 6. The tag is unrecognized.
--
-- This function first looks up in [[Module:form of/data]] (which includes
-- more common tags) and then (only if the tag is not recognized as a
-- shortcut or canonical tag, and is not of types 1-4 above) in
-- [[Module:form of/data2]].
--
-- If the expansion is a string and is different from the tag, track it if
-- DO_TRACK is true.
function export.lookup_shortcut(tag, do_track)
-- If there is HTML or a link in the tag, return it directly; don't try
-- to look it up, which will fail.
if tag == ";" or tag:find("//", nil, true) or is_link_or_html(tag) then
return tag
end
local m_data = mw.loadData("Module:form of/data")
-- If this is a canonical long-form tag, just return it, and don't
-- check for shortcuts (which will cause [[Module:form of/data2]] to be
-- loaded).
if m_data.tags[tag] then
return tag
end
local expansion = m_data.shortcuts[tag]
if not expansion then
local m_data2 = mw.loadData("Module:form of/data2")
expansion = m_data2.shortcuts[tag]
end
if not expansion then
return tag
end
-- Maybe track the expansion if it's not the same as the raw tag.
if do_track and expansion ~= tag and type(expansion) == "string" then
infl_track("tag/" .. tag)
end
return expansion
end
-- Look up a normalized/canonicalized tag and return the data object
-- associated with it. If the tag isn't found, return nil. This first looks up
-- in [[Module:form of/data]] (which includes more common tags) and then in
-- [[Module:form of/data2]].
function export.lookup_tag(tag)
local m_data = mw.loadData("Module:form of/data")
local tagobj = m_data.tags[tag]
if tagobj then
return tagobj
end
local m_data2 = mw.loadData("Module:form of/data2")
local tagobj2 = m_data2.tags[tag]
if tagobj2 then
return tagobj2
end
return nil
end
-- Normalize a single tag, which may be a shortcut but should not be a
-- multipart tag, a multipart-tag shortcut or a list-tag shortcut.
local function normalize_single_tag(tag, do_track)
local expansion = export.lookup_shortcut(tag, do_track)
if type(expansion) ~= "string" then
error("Tag '" .. tag .. "' is a list-tag shortcut, which is not allowed here")
end
tag = expansion
if not export.lookup_tag(tag) and do_track then
-- If after all expansions and normalizations we don't recognize
-- the canonical tag, track it.
infl_track("unknown")
infl_track("unknown/" .. tag)
end
return tag
end
-- Normalize a component of a multipart tag. This should not have any // in it,
-- but may join multiple individual tags with a colon, and may be a single
-- list-tag shortcut, which is treates as if colon-separated. If
-- RECOMBINE_TAGS isn't given, the return value may be a list of tags;
-- otherwise, it will always be a string, and multiple tags will be
-- represented as canonical-form tags joined by ":".
local function normalize_multipart_component(tag, recombine_tags, do_track)
-- If there is HTML or a link in the tag, don't try to split on colon.
-- A colon may legitimately occur in either one, and we don't want
-- these things parsed. Note that we don't do this check before splitting
-- on //, which we don't expect to occur in links or HTML; see comment
-- in normalize_tag().
if is_link_or_html(tag) then
return tag
end
local components = rsplit(tag, ":", true)
if #components == 1 then
-- We allow list-tag shortcuts inside of multipart tags, e.g.
-- '1s//3p'. Check for this now.
tag = export.lookup_shortcut(tag, do_track)
if type(tag) == "table" then
-- We found a list-tag shortcut; treat as if colon-separated.
components = tag
else
return normalize_single_tag(tag, do_track)
end
end
local normtags = {}
for _, component in ipairs(components) do
if do_track then
-- There are multiple components; track each of the individual
-- raw tags.
infl_track("tag/" .. component)
end
table.insert(normtags, normalize_single_tag(component, do_track))
end
if recombine_tags then
return table.concat(normtags, ":")
else
return normtags
end
end
-- Normalize a single tag. If RECOMBINE_TAGS isn't given, the return value
-- may be a list (in the case of multipart tags), which will contain nested
-- lists in the case of two-level multipart tags; otherwise, it will always
-- be a string, and multipart tags will be represented as canonical-form tags
-- joined by "//" and/or ":".
local function normalize_tag(tag, recombine_multitags, do_track)
-- We don't check for links or HTML before splitting on //, which we
-- don't expect to occur in links or HTML. Doing it this way allows for
-- a tag like '{{lb|grc|Epic}}//{{lb|grc|Ionic}}' to function correctly
-- (the template calls will be expanded before we process the tag, and
-- will contain links and HTML). The only check we do is for a URL,
-- which shouldn't normally occur, but might if the user tries to put
-- an external link into the tag. URL's with // normally have the
-- sequence ://, which should never normally occur when // and : are
-- used in their normal ways.
if tag:find("://", nil, true) then
return tag
end
local split_tags = rsplit(tag, "//", true)
if #split_tags == 1 then
local retval = normalize_multipart_component(tag, recombine_multitags,
do_track)
if type(retval) == "table" then
-- The user gave a tag like '1:s', i.e. with colon but without
-- //. Allow this, but we need to return a nested list. Note,
-- this will never happen when RECOMBINE_TAGS is given.
return {retval}
end
return retval
end
local normtags = {}
for _, single_tag in ipairs(split_tags) do
if do_track then
-- If the tag was a multipart tag, track each of individual raw tags.
infl_track("tag/" .. single_tag)
end
table.insert(normtags, normalize_multipart_component(single_tag,
recombine_multitags, do_track))
end
if recombine_multitags then
return table.concat(normtags, "//")
else
return normtags
end
end
-- Normalize a tag set (a list of tags) into a list of canonical-form tags
-- (which -- may be larger due to the possibility of list-tag shortcuts).
-- If RECOMBINE_TAGS isn't given, the return list may itself contains lists;
-- in particular, multipart tags will be represented as lists. Specifically,
-- the list will consist of the elements of the multipart tag, which will
-- either be canonical-form strings or (in the case of two-level multipart
-- tags) nested lists of canonical-form strings. For example, the multipart
-- tag ''nom//acc//voc'' will expand to
-- {"nominative", "accusative", "vocative"}
-- and the two-level multipart tag ''1:s//3:p'' will expand to
-- {{"first-person", "singular"}, {"third-person", "plural"}}.
-- If RECOMBINE_TAGS is given, multipart tags will be represented in string
-- form, i.e. as canonical-form tags joined by "//" and/or ":".
function export.normalize_tags(tags, recombine_multitags, do_track)
-- We track usage of shortcuts, normalized forms and (in the case of
-- multipart tags or list tags) intermediate forms. For example,
-- if the tags 1s|mn|gen|indefinite are passed in, we track the following:
-- [[Template:tracking/inflection of/tag/1s]]
-- [[Template:tracking/inflection of/tag/1]]
-- [[Template:tracking/inflection of/tag/s]]
-- [[Template:tracking/inflection of/tag/first-person]]
-- [[Template:tracking/inflection of/tag/singular]]
-- [[Template:tracking/inflection of/tag/mn]]
-- [[Template:tracking/inflection of/tag/m//n]]
-- [[Template:tracking/inflection of/tag/m]]
-- [[Template:tracking/inflection of/tag/n]]
-- [[Template:tracking/inflection of/tag/masculine]]
-- [[Template:tracking/inflection of/tag/neuter]]
-- [[Template:tracking/inflection of/tag/gen]]
-- [[Template:tracking/inflection of/tag/genitive]]
-- [[Template:tracking/inflection of/tag/indefinite]]
local ntags = {}
for _, tag in ipairs(tags) do
if do_track then
-- Track the raw tag.
infl_track("tag/" .. tag)
end
-- Expand the tag, which may generate a new tag (either a
-- fully canonicalized tag, a multipart tag, or a list of tags).
tag = export.lookup_shortcut(tag, do_track)
if type(tag) == "table" then
for _, t in ipairs(tag) do
if do_track then
-- If the tag expands to a list of raw tags, track each of
-- those.
infl_track("tag/" .. t)
end
table.insert(ntags, normalize_tag(t, recombine_multitags,
do_track))
end
else
table.insert(ntags, normalize_tag(tag, recombine_multitags,
do_track))
end
end
return ntags
end
-- Split a tag set containing two-level multipart tags into one or more tag sets not containing such tags.
-- Single-level multipart tags are left alone. (If we need to, a slight modification of the following code
-- will also split single-level multipart tags.) This assumes that multipart tags are represented as lists
-- and two-level multipart tags are represented as lists of lists, as is output by normalize_tags().
-- NOTE: We have to be careful to properly handle imbalanced two-level multipart tags such as
-- <code>def:s//p</code> (or the reverse, <code>s//def:p</code>).
function export.split_two_level_multipart_tag_set(tag_set)
-- This would be a whole lot easier in Python, with built-in support for
-- slicing and array concatenation.
for i, tag in ipairs(tag_set) do
if type(tag) == "table" then
-- We saw a multipart tag. Check if any of the parts are two-level.
local saw_two_level_tag = false
for _, first_level_tag in ipairs(tag) do
if type(first_level_tag) == "table" then
saw_two_level_tag = true
break
end
end
if saw_two_level_tag then
-- We found a two-level multipart tag.
-- (1) Extract the preceding tags.
local pre_tags = {}
for j=1,i-1 do
table.insert(pre_tags, tag_set[j])
end
-- (2) Extract the following tags.
local post_tags = {}
for j=i+1,#tag_set do
table.insert(post_tags, tag_set[j])
end
-- (3) Loop over each tag set alternant in the two-level multipart tag.
-- For each alternant, form the tag set consisting of pre_tags + alternant + post_tags,
-- and recursively split that tag set.
local resulting_tag_sets = {}
for _, first_level_tag_set in ipairs(tag) do
local expanded_tag_set = {}
for _, pre_tag in ipairs(pre_tags) do
table.insert(expanded_tag_set, pre_tag)
end
-- The second level may have a string or a list.
if type(first_level_tag_set) == "table" then
for _, second_level_tag in ipairs(first_level_tag_set) do
table.insert(expanded_tag_set, second_level_tag)
end
else
table.insert(expanded_tag_set, first_level_tag_set)
end
for _, post_tag in ipairs(post_tags) do
table.insert(expanded_tag_set, post_tag)
end
for _, split_tag_set in ipairs(export.split_two_level_multipart_tag_set(expanded_tag_set)) do
table.insert(resulting_tag_sets, split_tag_set)
end
end
return resulting_tag_sets
end
end
end
return {tag_set}
end
-- Given a list of tags, split into tag sets (separated by semicolons in the initial list of tags).
function export.split_tags_into_tag_sets(tags)
local tag_set_group = {}
local cur_tag_set = {}
for _, tag in ipairs(tags) do
if tag == ";" then
if #cur_tag_set > 0 then
table.insert(tag_set_group, cur_tag_set)
end
cur_tag_set = {}
else
table.insert(cur_tag_set, tag)
end
end
if #cur_tag_set > 0 then
table.insert(tag_set_group, cur_tag_set)
end
return tag_set_group
end
-- Given a list of tags, split into tag sets (separated by semicolons in the initial list of tags).
-- Then, potentially split each tag set into multiple tag sets if there are any two-level multipart
-- tags in those tag sets.
function export.split_tags_into_tag_sets_and_expand_two_level_multipart_tags(tags)
-- First, split into tag sets.
local tag_sets = export.split_tags_into_tag_sets(tags)
-- Now split any two-level multipart tags.
local resulting_tag_sets = {}
for _, tag_set in ipairs(tag_sets) do
for _, resulting_tag_set in ipairs(export.split_two_level_multipart_tag_set(tag_set)) do
table.insert(resulting_tag_sets, resulting_tag_set)
end
end
return resulting_tag_sets
end
function export.normalize_pos(pos)
return m_pos[pos] or pos
end
-- Return the display form of a single canonical-form tag. The value
-- passed in must be a string (i.e. it cannot be a list describing a
-- multipart tag). To handle multipart tags, use get_tag_display_form().
local function get_single_tag_display_form(normtag)
local data = export.lookup_tag(normtag)
-- If the tag has a special display form, use it
if data and data.display then
normtag = data.display
end
-- If there is a nonempty glossary index, then show a link to it
if data and data.glossary then
if data.glossary_type == "wikt" then
normtag = "[[" .. data.glossary .. "|" .. normtag .. "]]"
elseif data.glossary_type == "wp" then
normtag = "[[w:" .. data.glossary .. "|" .. normtag .. "]]"
else
normtag = "[[Appendix:Glossary#" .. mw.uri.anchorEncode(data.glossary) .. "|" .. normtag .. "]]"
end
end
return normtag
end
-- Turn a canonicalized tag spec (which describes a single, possibly
-- multipart tag) into the displayed form. The tag spec may be a string
-- (a canonical-form tag), or a list of canonical-form tags (in the
-- case of a simple multipart tag), or a list of mixed canonical-form
-- tags and lists of such tags (in the case of a two-level multipart tag).
-- JOINER indicates how to join the parts of a multipart tag, and can
-- be either "and" ("foo and bar", or "foo, bar and baz" for 3 or more),
-- "slash" ("foo/bar"), "en-dash" ("foo–bar") or nil, which uses the
-- global default found in multipart_join_strategy() in
-- [[Module:form of/functions]].
function export.get_tag_display_form(tagspec, joiner)
if type(tagspec) == "string" then
return get_single_tag_display_form(tagspec)
end
-- We have a multipart tag. See if there's a display handler to
-- display them specially.
for _, handler in ipairs(m_functions.display_handlers) do
local displayval = handler(tagspec, joiner)
if displayval then
return displayval
end
end
-- No display handler.
local displayed_tags = {}
for _, first_level_tag in ipairs(tagspec) do
if type(first_level_tag) == "string" then
table.insert(displayed_tags, get_single_tag_display_form(first_level_tag))
else
-- A first-level element of a two-level multipart tag.
-- Currently we just separate the individual components
-- with spaces, but other ways are possible, e.g. using
-- an underscore, colon, parens or braces.
local components = {}
for _, component in ipairs(first_level_tag) do
table.insert(components, get_single_tag_display_form(component))
end
table.insert(displayed_tags, table.concat(components, " "))
end
end
return m_functions.join_multiparts(displayed_tags, joiner)
end
-- Return true if the list `tags1`, treated as a set, is a subset of the list `tags2`, also
-- treated as a set.
local function is_subset(tags1, tags2)
tags1 = m_table.listToSet(tags1)
tags2 = m_table.listToSet(tags2)
for tag, _ in pairs(tags1) do
if not tags2[tag] then
return false
end
end
return true
end
-- Compute and return the appropriate categories for the tags in `tags` (user-specified tags,
-- which may consist of multiple tag sets separated by semicolons) and the language in `lang`.
-- This checks both language-specific and language-agnostic category specs in [[Module:form of/cats]].
-- `POS` is the user-specified part of speech, if any, and `terminfos` is currently unused.
function export.fetch_lang_categories(lang, tags, terminfos, POS)
local m_cats = mw.loadData("Module:form of/cats")
local categories = {}
local normalized_tags = export.normalize_tags(tags)
local split_tag_sets = export.split_tags_into_tag_sets_and_expand_two_level_multipart_tags(normalized_tags)
POS = export.normalize_pos(POS)
-- Loop over each tag set and compute categories for each one.
for _, tag_set in ipairs(split_tag_sets) do
local function make_function_table()
return {
lang=lang,
tags=normalized_tags,
term=term,
p=POS
}
end
-- Given a tag from the current tag set (which may be a list in case of a multipart tag),
-- and a tag from a categorization spec, check that the two match.
-- (1) If both are strings, we just check for equality.
-- (2) If the spec tag is a string and the tag set tag is a list (i.e. it originates from a
-- multipart tag), we check that the spec tag is in the list. This is because we want to treat
-- multipart tags in user-specified tag sets as if the user had specified multiple tag sets.
-- For example, if the user said "1//3|s|pres|ind" and the categorization spec says {"has", "1"},
-- we want this to match, because "1//3|s|pres|ind" should be treated equivalently to two tag
-- sets "1|s|pres|ind" and "3|s|pres|ind", and the former matches the categorization spec.
-- (3) If the spec tag is a list (i.e. it originates from a multipart tag), we check that the
-- tag set tag is also a list and is a superset of the spec tag. For example, if the categorization
-- spec says {"has", "1//3"}, then the tag set tag must be a multipart tag that has both "1" and "3"
-- in it. "1//3" works, as does "1//2//3".
local function tag_set_tag_matches_spec_tag(tag_set_tag, spec_tag)
if type(spec_tag) == "table" then
if type(tag_set_tag) == "table" and is_subset(spec_tag, tag_set_tag) then
return true
end
elseif type(tag_set_tag) == "table" then
if m_table.contains(tag_set_tag, spec_tag) then
return true
end
elseif tag_set_tag == spec_tag then
return true
end
return false
end
-- Check that the current tag set matches the given spec tag. This means that any of the tags
-- in the current tag set match, according to tag_set_tag_matches_spec_tag(); see above. If the
-- current tag set contains only string tags (i.e. no multipart tags), and the spec tag is a
-- string (i.e. not a multipart tag), this boils down to list containment, but it gets more
-- complex when multipart tags are present.
local function tag_set_matches_spec_tag(spec_tag)
spec_tag = normalize_tag(spec_tag)
for _, tag_set_tag in ipairs(tag_set) do
if tag_set_tag_matches_spec_tag(tag_set_tag, spec_tag) then
return true
end
end
return false
end
-- Check whether the given spec matches the current tag set. Two values are returned:
-- (1) whether the spec matches the tag set; (2) the index of the category to add if
-- the spec matches.
local function check_condition(spec)
if type(spec) == "boolean" then
return spec
elseif type(spec) ~= "table" then
error("Wrong type of condition " .. spec .. ": " .. type(spec))
end
local predicate = spec[1]
if predicate == "has" then
return tag_set_matches_spec_tag(spec[2]), 3
elseif predicate == "hasall" then
for _, tag in ipairs(spec[2]) do
if not tag_set_matches_spec_tag(tag) then
return false, 3
end
end
return true, 3
elseif predicate == "hasany" then
for _, tag in ipairs(spec[2]) do
if tag_set_matches_spec_tag(tag) then
return true, 3
end
end
return false, 3
elseif predicate == "tags=" then
local normalized_spec_tags = export.normalize_tags(spec[2])
-- Allow tags to be in different orders, and multipart tags to
-- be in different orders. To handle this, we first check that
-- both tag set tags and spec tags have the same length. If so,
-- we sort the multipart tags in the tag set tags and spec tags,
-- and then check that all tags in the spec tags are in the
-- tag set tags.
if #tag_set ~= #normalized_spec_tags then
return false, 3
end
local tag_set_tags = m_table.deepcopy(tag_set)
for i=1,#tag_set_tags do
if type(tag_set_tags[i]) == "table" then
table.sort(tag_set_tags[i])
end
if type(normalized_spec_tags[i]) == "table" then
table.sort(normalized_spec_tags[i])
end
end
for i=1,#tag_set_tags do
if not m_table.contains(tag_set_tags, normalized_spec_tags[i], "deepCompare") then
return false, 3
end
end
return true, 3
elseif predicate == "p=" then
return POS == export.normalize_pos(spec[2]), 3
elseif predicate == "pany" then
for _, specpos in ipairs(spec[2]) do
if POS == export.normalize_pos(specpos) then
return true, 3
end
end
return false, 3
elseif predicate == "pexists" then
return POS ~= nil, 2
elseif predicate == "not" then
local condval = check_condition(spec[2])
return not condval, 3
elseif predicate == "and" then
local condval = check_condition(spec[2])
if condval then
condval = check_condition(spec[3])
end
return condval, 4
elseif predicate == "or" then
local condval = check_condition(spec[2])
if not condval then
condval = check_condition(spec[3])
end
return condval, 4
elseif predication == "call" then
local fn = m_functions.cat_functions[spec[2]]
if not fn then
error("No condition function named '" .. spec[2] .. "'")
end
return fn(make_function_table()), 3
else
error("Unrecognized predicate: " .. predicate)
end
end
-- Process a given spec. This checks any conditions in the spec against the
-- tag set, and insert any resulting categories into `categories`. Return value
-- is true if the outermost condition evaluated to true and a category was inserted
-- (this is used in {"cond" ...} conditions, which stop when a subcondition evaluates
-- to true).
local function process_spec(spec)
if not spec then
return false
elseif type(spec) == "string" then
-- Substitute POS request with user-specified part of speech
-- or default
spec = rsub(spec, "<<p=(.-)>>", function(default)
return POS or export.normalize_pos(default)
end)
table.insert(categories, lang:getCanonicalName() .. " " .. spec)
return true
elseif type(spec) ~= "table" then
error("Wrong type of specification " .. spec .. ": " .. type(spec))
end
local predicate = spec[1]
if predicate == "multi" then
-- WARNING! #spec doesn't work for objects loaded from loadData()
for i, sp in ipairs(spec) do
if i > 1 then
process_spec(sp)
end
end
return true
elseif predicate == "cond" then
-- WARNING! #spec doesn't work for objects loaded from loadData()
for i, sp in ipairs(spec) do
if i > 1 and process_spec(sp) then
return true
end
end
return false
elseif predicate == "call" then
local fn = m_functions.cat_functions[spec[2]]
if not fn then
error("No spec function named '" .. spec[2] .. "'")
end
return process_spec(fn(make_function_table()))
else
local condval, ifspec = check_condition(spec)
if condval then
process_spec(spec[ifspec])
return true
else
process_spec(spec[ifspec + 1])
-- FIXME: Are we sure this is correct?
return false
end
end
end
local langspecs = m_cats[lang:getCode()]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec)
end
end
if lang:getCode() ~= "und" then
local langspecs = m_cats["und"]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec)
end
end
end
end
return categories
end
function export.tagged_inflections(data)
if not data.tags then
error("First argument must now be a table of arguments")
end
local cur_infl = {}
local inflections = {}
local ntags = export.normalize_tags(data.tags, nil, "do-track")
for i, tagspec in ipairs(ntags) do
if tagspec == ";" then
if #cur_infl > 0 then
table.insert(inflections, table.concat(cur_infl))
end
cur_infl = {}
else
local to_insert = export.get_tag_display_form(tagspec, data.joiner)
-- Maybe insert a space before inserting the display form
-- of the tag. We insert a space if
-- (a) we're not the first tag; and
-- (b) the tag we're about to insert doesn't have the
-- "no_space_on_left" property; and
-- (c) the preceding tag doesn't have the "no_space_on_right"
-- property.
-- NOTE: We depend here on the fact that
-- (1) all tags with either of the above properties set have the
-- same display form as canonical form, and
-- (2) all tags with either of the above properties set are
-- single-character tags.
-- The second property is an optimization to avoid looking up
-- display forms resulting from multipart tags, which won't be
-- found and which will trigger loading of [[Module:form of/data2]].
-- If multichar punctuation is added in the future, it's ok to
-- change the == 1 below to <= 2 or <= 3.
--
-- If the first property above fails to hold in the future, we
-- need to track the canonical form of each tag (including the
-- previous one) as well as the display form. This would also
-- avoid the need for the == 1 check.
if #cur_infl > 0 then
local most_recent_tagobj = ulen(cur_infl[#cur_infl]) == 1 and
export.lookup_tag(cur_infl[#cur_infl])
local to_insert_tagobj = ulen(to_insert) == 1 and
export.lookup_tag(to_insert)
if (
(not most_recent_tagobj or
not most_recent_tagobj.no_space_on_right) and
(not to_insert_tagobj or
not to_insert_tagobj.no_space_on_left)
) then
table.insert(cur_infl, " ")
end
end
table.insert(cur_infl, to_insert)
end
end
if #cur_infl > 0 then
table.insert(inflections, table.concat(cur_infl))
end
local format_data = m_table.shallowcopy(data)
local of_text = (data.terminfos or data.terminfo) and " of" or ""
if #inflections == 1 then
format_data.text =
data.notext and "" or ((data.capfirst and require("Module:string utilities").ucfirst(inflections[1]) or inflections[1])
.. of_text)
return export.format_form_of(format_data)
else
format_data.text = data.notext and "" or ((data.capfirst and "Inflection" or "inflection") .. of_text)
format_data.posttext = (data.posttext or "") .. ":"
local link = export.format_form_of(format_data)
local text_classes = data.text_classes or "form-of-definition use-with-mention"
return link .."\n## <span class='" .. text_classes .. "'>" ..
table.concat(inflections, "</span>\n## <span class='" .. text_classes .. "'>") .. "</span>"
end
end
function export.to_Wikidata_IDs(tags, skip_tags_without_ids)
if type(tags) == "string" then
tags = mw.text.split(tags, "|", true)
end
local ret = {}
local function get_wikidata_id(tag)
if tag == ";" and not skip_tags_without_ids then
error("Semicolon is not supported for Wikidata IDs")
else
return nil
end
local data = export.lookup_tag(tag)
if not data or not data.wikidata then
if not skip_tags_without_ids then
error("The tag \"" .. tag .. "\" does not have a Wikidata ID defined in [[Module:form of/data]]")
else
return nil
end
else
return data.wikidata
end
end
for i, tag in ipairs(export.normalize_tags(tags)) do
if type(tag) == "table" then
local ids = {}
for _, onetag in ipairs(tag) do
table.insert(ids, get_wikidata_id(onetag))
end
table.insert(ret, ids)
else
table.insert(ret, get_wikidata_id(tag))
end
end
return ret
end
function export.dump_form_of_data(frame)
local data = {
data = require("Module:form of/data"),
data2 = require("Module:form of/data2")
}
return require("Module:JSON").toJSON(data)
end
return export
pybybghz681c1re1yg2zjn6axn5888h
132155
132154
2022-08-09T02:31:35Z
আফতাবুজ্জামান
2263
Scribunto
text/plain
local m_links = require("Module:links")
local m_table = require("Module:table")
local m_pos = mw.loadData("Module:form of/pos")
local m_functions = require("Module:form of/functions")
local ulen = mw.ustring.len
local rsubn = mw.ustring.gsub
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local export = {}
--[=[
This module implements the underlying processing of {{form of}},
{{inflection of}} and specific variants such as {{past participle of}}
and {{alternative spelling of}}. Most of the logic in this file is to
handle tags in {{inflection of}}. Other related files:
* [[Module:form of/templates]] contains the majority of the logic that
implements the templates themselves.
* [[Module:form of/data]] is a data-only file containing information on
the more common inflection tags, listing the tags, their shortcuts,
the category they belong to (tense-aspect, case, gender, voice-valence,
etc.), the appropriate glossary link and the wikidata ID.
* [[Module:form of/data2]] is a data-only file containing information on
the less common inflection tags, in the same format as
[[Module:form of/data]].
* [[Module:form of/cats]] is a data-only file listing the
language-specific categories that are added when the appropriate
combinations of tags are seen for a given language.
* [[Module:form of/pos]] is a data-only file listing the recognized
parts of speech and their abbreviations, used for categorization.
FIXME: This should be unified with the parts of speech listed in
[[Module:links]].
* [[Module:form of/functions]] contains functions for use with
[[Module:form of/data]] and [[Module:form of/cats]]. They are
contained in this module because data-only modules can't contain
code. The functions in this file are of two types:
(1) Display handlers allow for customization of the display of
multipart tags (see below). Currently there is only one
such handler, for handling multipart person tags such as
'1//2//3'.
(2) Cat functions allow for more complex categorization logic,
and are referred to by name in [[Module:form of/cats]].
Currently no such functions exist.
The following terminology is used in conjunction with {{inflection of}}:
* A TAG is a single grammatical item, as specified in a single numbered
parameter of {{inflection of}}. Examples are 'masculine', 'nominative',
or 'first-person'. Tags may be abbreviated, e.g. 'm' for 'masculine',
'nom' for 'nominative', or '1' for 'first-person'. Such abbreviations
are called SHORTCUTS, and some tags have multiple equivalent shortcuts
(e.g. 'p' or 'pl' for 'plural'). The full, non-abbreviated form of
a tag is called its CANONICAL FORM.
* The DISPLAY FORM of a tag is the way it's displayed to the user. Usually
the displayed text of the tag is the same as its canonical form, and it
normally functions as a link to a glossary entry explaining the tag.
Usually the link is to an entry in [[Appendix:Glossary]], but sometimes
the tag is linked to an individual dictionary entry or to a Wikipedia
entry. Occasionally, the display text differs from the canonical form of
the tag. An example is the tag 'comparative case', which has the display
text read as simply 'comparative'. Normally, tags referring to cases don't
have the word "case" in them, but in this case the tag 'comparative' was
already used as a shortcut for the tag 'comparative degree', so the tag was
named 'comparative case' to avoid clashing. A similar situation occurs
with 'adverbial case' vs. the grammar tag 'adverbial' (as in 'adverbial
participle').
* A TAG SET is an ordered list of tags, which together express a single
inflection, for example, '1|s|pres|ind', which can be expanded to
canonical-form tags as 'first-person|singular|present|indicative'.
Multiple tag sets can be specified in a single call to {{inflection of}}
by separating the individual tag sets with a semicolon, e.g.
'1|s|pres|ind|;|2|s|imp', which specifies two tag sets, '1|s|pres|ind'
as above and '2|s|imp' (in canonical form,
'second-person|singular|imperative').
* A MULTIPART TAG is a tag that embeds multiple tags within it, such as
'f//n' or 'nom//acc//voc'. These are used in the case of [[syncretism]],
when the same form applies to multiple inflections. Examples are the
Spanish present subjunctive, where the first-person and third-person
singular have the same form (e.g. [[siga]] from [[seguir]] "to follow"),
or Latin third-declension adjectives, where the dative and ablative
plural of all genders have the same form (e.g. [[omnibus]] from [[omnis]]
"all"). These would be expressed respectively as '1//3|s|pres|sub'
and 'dat//abl|m//f//n|p', where the use of the multipart tag compactly
encodes the syncretism and avoids the need to individually list out
all of the inflections. Multipart tags currently display as a list
separated by "and", ''dative and ablative'' or
''masculine, feminine and neuter'' where each individual word is linked
appropriately. As a special case, multipart tags involving persons display
specially; for example, the multipart tag ''1//2//3'' displays as
''first-, second- and third-person'', with the word "person" occurring
only once.
* A TWO-LEVEL MULTIPART TAG is a special type of multipart tag that
joins two or more tag sets instead of joining individual tags. The tags
within the tag set are joined by a colon, e.g. '1:s//3:p', which is
displayed as ''first-person singular and third-person plural'', e.g.
for use with the form [[μέλλον]] of the verb [[μέλλω]] "to intend",
which uses the tag set '1:s//3:p|impf|actv|indc|unaugmented' to express
the syncretism between the first singular and third plural forms of the
imperfect active indicative unaugmented conjugation. Two-level multipart
tags should be used sparingly; if in doubt, list out the inflections
separately.
* A MULTIPART TAG SHORTCUT is a shortcut that expands into a multipart
tag, for example '123', which expands to the multipart tag '1//2//3'.
Only the most common such combinations exist as shortcuts.
* A LIST TAG SHORTCUT is a special type of shortcut that expands to a list
of tags instead of a single tag. For example, the shortcut '1s' expands to
'1|s' (first-person singular). Only the most common such combinations
exist as shortcuts.
]=]
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
local retval = rsubn(term, foo, bar)
return retval
end
local function wrap_in_span(text, classes)
return ("<span class='%s'>%s</span>"):format(classes, text)
end
function export.format_form_of(data)
if type(data) ~= "table" then
error("Internal error: First argument must now be a table of arguments")
end
-- FIXME: Change the callers to send in .terminfos instead of .terminfo and remove
-- the following compatibility code.
if data.terminfo and data.terminfos then
error("Internal error: Can't specify both .terminfo and .terminfos")
end
local terminfos = data.terminfos
if data.terminfo then
if type(data.terminfo) == "string" then
terminfos = data.terminfo
else
terminfos = {data.terminfo}
end
end
local text_classes = data.text_classes or "form-of-definition use-with-mention"
local terminfo_classes = data.text_classes or "form-of-definition-link"
local parts = {}
table.insert(parts, "<span class='" .. text_classes .. "'>")
table.insert(parts, data.text)
if data.text ~= "" and terminfos then
table.insert(parts, " ")
end
if terminfos then
if type(terminfos) == "string" then
table.insert(parts, wrap_in_span(terminfos, terminfo_classes))
else
local formatted_terms = {}
for _, terminfo in ipairs(terminfos) do
table.insert(formatted_terms, wrap_in_span(
m_links.full_link(terminfo, data.terminfo_face, false), terminfo_classes
))
end
table.insert(parts, m_table.serialCommaJoin(formatted_terms))
end
end
if data.posttext then
table.insert(parts, data.posttext)
end
table.insert(parts, "</span>")
return table.concat(parts)
end
-- Add tracking category for PAGE when called from {{inflection of}} or
-- similar TEMPLATE. The tracking category linked to is
-- [[Template:tracking/inflection of/PAGE]].
local function infl_track(page)
require("Module:debug").track("inflection of/" ..
-- avoid including links in pages (may cause error)
page:gsub("%[", "("):gsub("%]", ")"):gsub("|", "!"))
end
local function is_link_or_html(tag)
return tag:find("[[", nil, true) or tag:find("|", nil, true) or
tag:find("<", nil, true)
end
-- Look up a tag (either a shortcut of any sort of a canonical long-form tag)
-- and return its expansion. The expansion will be a string unless the
-- shortcut is a list-tag shortcut such as "1s"; in that case, the expansion
-- will be a list. The caller must handle both cases. Only one level of
-- expansion happens; hence, "acc" expands to "accusative", "1s" expands to
-- {"1", "s"} (not to {"first", "singular"}) and "123" expands to "1//2//3".
-- The expansion will be the same as the passed-in tag in the following
-- circumstances:
--
-- 1. The tag is ";" (this is special-cased, and no lookup is done).
-- 2. The tag is a multipart tag such as "nom//acc" (this is special-cased,
-- and no lookup is done).
-- 3. The tag contains a raw link (this is special-cased, and no lookup is
-- done).
-- 4. The tag contains HTML (this is special-cased, and no lookup is done).
-- 5. The tag is already a canonical long-form tag.
-- 6. The tag is unrecognized.
--
-- This function first looks up in [[Module:form of/data]] (which includes
-- more common tags) and then (only if the tag is not recognized as a
-- shortcut or canonical tag, and is not of types 1-4 above) in
-- [[Module:form of/data2]].
--
-- If the expansion is a string and is different from the tag, track it if
-- DO_TRACK is true.
function export.lookup_shortcut(tag, do_track)
-- If there is HTML or a link in the tag, return it directly; don't try
-- to look it up, which will fail.
if tag == ";" or tag:find("//", nil, true) or is_link_or_html(tag) then
return tag
end
local m_data = mw.loadData("Module:form of/data")
-- If this is a canonical long-form tag, just return it, and don't
-- check for shortcuts (which will cause [[Module:form of/data2]] to be
-- loaded).
if m_data.tags[tag] then
return tag
end
local expansion = m_data.shortcuts[tag]
if not expansion then
local m_data2 = mw.loadData("Module:form of/data2")
expansion = m_data2.shortcuts[tag]
end
if not expansion then
return tag
end
-- Maybe track the expansion if it's not the same as the raw tag.
if do_track and expansion ~= tag and type(expansion) == "string" then
infl_track("tag/" .. tag)
end
return expansion
end
-- Look up a normalized/canonicalized tag and return the data object
-- associated with it. If the tag isn't found, return nil. This first looks up
-- in [[Module:form of/data]] (which includes more common tags) and then in
-- [[Module:form of/data2]].
function export.lookup_tag(tag)
local m_data = mw.loadData("Module:form of/data")
local tagobj = m_data.tags[tag]
if tagobj then
return tagobj
end
local m_data2 = mw.loadData("Module:form of/data2")
local tagobj2 = m_data2.tags[tag]
if tagobj2 then
return tagobj2
end
return nil
end
-- Normalize a single tag, which may be a shortcut but should not be a
-- multipart tag, a multipart-tag shortcut or a list-tag shortcut.
local function normalize_single_tag(tag, do_track)
local expansion = export.lookup_shortcut(tag, do_track)
if type(expansion) ~= "string" then
error("Tag '" .. tag .. "' is a list-tag shortcut, which is not allowed here")
end
tag = expansion
if not export.lookup_tag(tag) and do_track then
-- If after all expansions and normalizations we don't recognize
-- the canonical tag, track it.
infl_track("unknown")
infl_track("unknown/" .. tag)
end
return tag
end
-- Normalize a component of a multipart tag. This should not have any // in it,
-- but may join multiple individual tags with a colon, and may be a single
-- list-tag shortcut, which is treates as if colon-separated. If
-- RECOMBINE_TAGS isn't given, the return value may be a list of tags;
-- otherwise, it will always be a string, and multiple tags will be
-- represented as canonical-form tags joined by ":".
local function normalize_multipart_component(tag, recombine_tags, do_track)
-- If there is HTML or a link in the tag, don't try to split on colon.
-- A colon may legitimately occur in either one, and we don't want
-- these things parsed. Note that we don't do this check before splitting
-- on //, which we don't expect to occur in links or HTML; see comment
-- in normalize_tag().
if is_link_or_html(tag) then
return tag
end
local components = rsplit(tag, ":", true)
if #components == 1 then
-- We allow list-tag shortcuts inside of multipart tags, e.g.
-- '1s//3p'. Check for this now.
tag = export.lookup_shortcut(tag, do_track)
if type(tag) == "table" then
-- We found a list-tag shortcut; treat as if colon-separated.
components = tag
else
return normalize_single_tag(tag, do_track)
end
end
local normtags = {}
for _, component in ipairs(components) do
if do_track then
-- There are multiple components; track each of the individual
-- raw tags.
infl_track("tag/" .. component)
end
table.insert(normtags, normalize_single_tag(component, do_track))
end
if recombine_tags then
return table.concat(normtags, ":")
else
return normtags
end
end
-- Normalize a single tag. If RECOMBINE_TAGS isn't given, the return value
-- may be a list (in the case of multipart tags), which will contain nested
-- lists in the case of two-level multipart tags; otherwise, it will always
-- be a string, and multipart tags will be represented as canonical-form tags
-- joined by "//" and/or ":".
local function normalize_tag(tag, recombine_multitags, do_track)
-- We don't check for links or HTML before splitting on //, which we
-- don't expect to occur in links or HTML. Doing it this way allows for
-- a tag like '{{lb|grc|Epic}}//{{lb|grc|Ionic}}' to function correctly
-- (the template calls will be expanded before we process the tag, and
-- will contain links and HTML). The only check we do is for a URL,
-- which shouldn't normally occur, but might if the user tries to put
-- an external link into the tag. URL's with // normally have the
-- sequence ://, which should never normally occur when // and : are
-- used in their normal ways.
if tag:find("://", nil, true) then
return tag
end
local split_tags = rsplit(tag, "//", true)
if #split_tags == 1 then
local retval = normalize_multipart_component(tag, recombine_multitags,
do_track)
if type(retval) == "table" then
-- The user gave a tag like '1:s', i.e. with colon but without
-- //. Allow this, but we need to return a nested list. Note,
-- this will never happen when RECOMBINE_TAGS is given.
return {retval}
end
return retval
end
local normtags = {}
for _, single_tag in ipairs(split_tags) do
if do_track then
-- If the tag was a multipart tag, track each of individual raw tags.
infl_track("tag/" .. single_tag)
end
table.insert(normtags, normalize_multipart_component(single_tag,
recombine_multitags, do_track))
end
if recombine_multitags then
return table.concat(normtags, "//")
else
return normtags
end
end
-- Normalize a tag set (a list of tags) into a list of canonical-form tags
-- (which -- may be larger due to the possibility of list-tag shortcuts).
-- If RECOMBINE_TAGS isn't given, the return list may itself contains lists;
-- in particular, multipart tags will be represented as lists. Specifically,
-- the list will consist of the elements of the multipart tag, which will
-- either be canonical-form strings or (in the case of two-level multipart
-- tags) nested lists of canonical-form strings. For example, the multipart
-- tag ''nom//acc//voc'' will expand to
-- {"nominative", "accusative", "vocative"}
-- and the two-level multipart tag ''1:s//3:p'' will expand to
-- {{"first-person", "singular"}, {"third-person", "plural"}}.
-- If RECOMBINE_TAGS is given, multipart tags will be represented in string
-- form, i.e. as canonical-form tags joined by "//" and/or ":".
function export.normalize_tags(tags, recombine_multitags, do_track)
-- We track usage of shortcuts, normalized forms and (in the case of
-- multipart tags or list tags) intermediate forms. For example,
-- if the tags 1s|mn|gen|indefinite are passed in, we track the following:
-- [[Template:tracking/inflection of/tag/1s]]
-- [[Template:tracking/inflection of/tag/1]]
-- [[Template:tracking/inflection of/tag/s]]
-- [[Template:tracking/inflection of/tag/first-person]]
-- [[Template:tracking/inflection of/tag/singular]]
-- [[Template:tracking/inflection of/tag/mn]]
-- [[Template:tracking/inflection of/tag/m//n]]
-- [[Template:tracking/inflection of/tag/m]]
-- [[Template:tracking/inflection of/tag/n]]
-- [[Template:tracking/inflection of/tag/masculine]]
-- [[Template:tracking/inflection of/tag/neuter]]
-- [[Template:tracking/inflection of/tag/gen]]
-- [[Template:tracking/inflection of/tag/genitive]]
-- [[Template:tracking/inflection of/tag/indefinite]]
local ntags = {}
for _, tag in ipairs(tags) do
if do_track then
-- Track the raw tag.
infl_track("tag/" .. tag)
end
-- Expand the tag, which may generate a new tag (either a
-- fully canonicalized tag, a multipart tag, or a list of tags).
tag = export.lookup_shortcut(tag, do_track)
if type(tag) == "table" then
for _, t in ipairs(tag) do
if do_track then
-- If the tag expands to a list of raw tags, track each of
-- those.
infl_track("tag/" .. t)
end
table.insert(ntags, normalize_tag(t, recombine_multitags,
do_track))
end
else
table.insert(ntags, normalize_tag(tag, recombine_multitags,
do_track))
end
end
return ntags
end
-- Split a tag set containing two-level multipart tags into one or more tag sets not containing such tags.
-- Single-level multipart tags are left alone. (If we need to, a slight modification of the following code
-- will also split single-level multipart tags.) This assumes that multipart tags are represented as lists
-- and two-level multipart tags are represented as lists of lists, as is output by normalize_tags().
-- NOTE: We have to be careful to properly handle imbalanced two-level multipart tags such as
-- <code>def:s//p</code> (or the reverse, <code>s//def:p</code>).
function export.split_two_level_multipart_tag_set(tag_set)
-- This would be a whole lot easier in Python, with built-in support for
-- slicing and array concatenation.
for i, tag in ipairs(tag_set) do
if type(tag) == "table" then
-- We saw a multipart tag. Check if any of the parts are two-level.
local saw_two_level_tag = false
for _, first_level_tag in ipairs(tag) do
if type(first_level_tag) == "table" then
saw_two_level_tag = true
break
end
end
if saw_two_level_tag then
-- We found a two-level multipart tag.
-- (1) Extract the preceding tags.
local pre_tags = {}
for j=1,i-1 do
table.insert(pre_tags, tag_set[j])
end
-- (2) Extract the following tags.
local post_tags = {}
for j=i+1,#tag_set do
table.insert(post_tags, tag_set[j])
end
-- (3) Loop over each tag set alternant in the two-level multipart tag.
-- For each alternant, form the tag set consisting of pre_tags + alternant + post_tags,
-- and recursively split that tag set.
local resulting_tag_sets = {}
for _, first_level_tag_set in ipairs(tag) do
local expanded_tag_set = {}
for _, pre_tag in ipairs(pre_tags) do
table.insert(expanded_tag_set, pre_tag)
end
-- The second level may have a string or a list.
if type(first_level_tag_set) == "table" then
for _, second_level_tag in ipairs(first_level_tag_set) do
table.insert(expanded_tag_set, second_level_tag)
end
else
table.insert(expanded_tag_set, first_level_tag_set)
end
for _, post_tag in ipairs(post_tags) do
table.insert(expanded_tag_set, post_tag)
end
for _, split_tag_set in ipairs(export.split_two_level_multipart_tag_set(expanded_tag_set)) do
table.insert(resulting_tag_sets, split_tag_set)
end
end
return resulting_tag_sets
end
end
end
return {tag_set}
end
-- Given a list of tags, split into tag sets (separated by semicolons in the initial list of tags).
function export.split_tags_into_tag_sets(tags)
local tag_set_group = {}
local cur_tag_set = {}
for _, tag in ipairs(tags) do
if tag == ";" then
if #cur_tag_set > 0 then
table.insert(tag_set_group, cur_tag_set)
end
cur_tag_set = {}
else
table.insert(cur_tag_set, tag)
end
end
if #cur_tag_set > 0 then
table.insert(tag_set_group, cur_tag_set)
end
return tag_set_group
end
-- Given a list of tags, split into tag sets (separated by semicolons in the initial list of tags).
-- Then, potentially split each tag set into multiple tag sets if there are any two-level multipart
-- tags in those tag sets.
function export.split_tags_into_tag_sets_and_expand_two_level_multipart_tags(tags)
-- First, split into tag sets.
local tag_sets = export.split_tags_into_tag_sets(tags)
-- Now split any two-level multipart tags.
local resulting_tag_sets = {}
for _, tag_set in ipairs(tag_sets) do
for _, resulting_tag_set in ipairs(export.split_two_level_multipart_tag_set(tag_set)) do
table.insert(resulting_tag_sets, resulting_tag_set)
end
end
return resulting_tag_sets
end
function export.normalize_pos(pos)
return m_pos[pos] or pos
end
-- Return the display form of a single canonical-form tag. The value
-- passed in must be a string (i.e. it cannot be a list describing a
-- multipart tag). To handle multipart tags, use get_tag_display_form().
local function get_single_tag_display_form(normtag)
local data = export.lookup_tag(normtag)
-- If the tag has a special display form, use it
if data and data.display then
normtag = data.display
end
-- If there is a nonempty glossary index, then show a link to it
if data and data.glossary then
if data.glossary_type == "wikt" then
normtag = "[[" .. data.glossary .. "|" .. normtag .. "]]"
elseif data.glossary_type == "wp" then
normtag = "[[w:" .. data.glossary .. "|" .. normtag .. "]]"
else
normtag = "[[Appendix:Glossary#" .. mw.uri.anchorEncode(data.glossary) .. "|" .. normtag .. "]]"
end
end
return normtag
end
-- Turn a canonicalized tag spec (which describes a single, possibly
-- multipart tag) into the displayed form. The tag spec may be a string
-- (a canonical-form tag), or a list of canonical-form tags (in the
-- case of a simple multipart tag), or a list of mixed canonical-form
-- tags and lists of such tags (in the case of a two-level multipart tag).
-- JOINER indicates how to join the parts of a multipart tag, and can
-- be either "and" ("foo and bar", or "foo, bar and baz" for 3 or more),
-- "slash" ("foo/bar"), "en-dash" ("foo–bar") or nil, which uses the
-- global default found in multipart_join_strategy() in
-- [[Module:form of/functions]].
function export.get_tag_display_form(tagspec, joiner)
if type(tagspec) == "string" then
return get_single_tag_display_form(tagspec)
end
-- We have a multipart tag. See if there's a display handler to
-- display them specially.
for _, handler in ipairs(m_functions.display_handlers) do
local displayval = handler(tagspec, joiner)
if displayval then
return displayval
end
end
-- No display handler.
local displayed_tags = {}
for _, first_level_tag in ipairs(tagspec) do
if type(first_level_tag) == "string" then
table.insert(displayed_tags, get_single_tag_display_form(first_level_tag))
else
-- A first-level element of a two-level multipart tag.
-- Currently we just separate the individual components
-- with spaces, but other ways are possible, e.g. using
-- an underscore, colon, parens or braces.
local components = {}
for _, component in ipairs(first_level_tag) do
table.insert(components, get_single_tag_display_form(component))
end
table.insert(displayed_tags, table.concat(components, " "))
end
end
return m_functions.join_multiparts(displayed_tags, joiner)
end
-- Return true if the list `tags1`, treated as a set, is a subset of the list `tags2`, also
-- treated as a set.
local function is_subset(tags1, tags2)
tags1 = m_table.listToSet(tags1)
tags2 = m_table.listToSet(tags2)
for tag, _ in pairs(tags1) do
if not tags2[tag] then
return false
end
end
return true
end
-- Compute and return the appropriate categories for the tags in `tags` (user-specified tags,
-- which may consist of multiple tag sets separated by semicolons) and the language in `lang`.
-- This checks both language-specific and language-agnostic category specs in [[Module:form of/cats]].
-- `POS` is the user-specified part of speech, if any, and `terminfos` is currently unused.
function export.fetch_lang_categories(lang, tags, terminfos, POS)
local m_cats = mw.loadData("Module:form of/cats")
local categories = {}
local normalized_tags = export.normalize_tags(tags)
local split_tag_sets = export.split_tags_into_tag_sets_and_expand_two_level_multipart_tags(normalized_tags)
POS = export.normalize_pos(POS)
-- Loop over each tag set and compute categories for each one.
for _, tag_set in ipairs(split_tag_sets) do
local function make_function_table()
return {
lang=lang,
tags=normalized_tags,
term=term,
p=POS
}
end
-- Given a tag from the current tag set (which may be a list in case of a multipart tag),
-- and a tag from a categorization spec, check that the two match.
-- (1) If both are strings, we just check for equality.
-- (2) If the spec tag is a string and the tag set tag is a list (i.e. it originates from a
-- multipart tag), we check that the spec tag is in the list. This is because we want to treat
-- multipart tags in user-specified tag sets as if the user had specified multiple tag sets.
-- For example, if the user said "1//3|s|pres|ind" and the categorization spec says {"has", "1"},
-- we want this to match, because "1//3|s|pres|ind" should be treated equivalently to two tag
-- sets "1|s|pres|ind" and "3|s|pres|ind", and the former matches the categorization spec.
-- (3) If the spec tag is a list (i.e. it originates from a multipart tag), we check that the
-- tag set tag is also a list and is a superset of the spec tag. For example, if the categorization
-- spec says {"has", "1//3"}, then the tag set tag must be a multipart tag that has both "1" and "3"
-- in it. "1//3" works, as does "1//2//3".
local function tag_set_tag_matches_spec_tag(tag_set_tag, spec_tag)
if type(spec_tag) == "table" then
if type(tag_set_tag) == "table" and is_subset(spec_tag, tag_set_tag) then
return true
end
elseif type(tag_set_tag) == "table" then
if m_table.contains(tag_set_tag, spec_tag) then
return true
end
elseif tag_set_tag == spec_tag then
return true
end
return false
end
-- Check that the current tag set matches the given spec tag. This means that any of the tags
-- in the current tag set match, according to tag_set_tag_matches_spec_tag(); see above. If the
-- current tag set contains only string tags (i.e. no multipart tags), and the spec tag is a
-- string (i.e. not a multipart tag), this boils down to list containment, but it gets more
-- complex when multipart tags are present.
local function tag_set_matches_spec_tag(spec_tag)
spec_tag = normalize_tag(spec_tag)
for _, tag_set_tag in ipairs(tag_set) do
if tag_set_tag_matches_spec_tag(tag_set_tag, spec_tag) then
return true
end
end
return false
end
-- Check whether the given spec matches the current tag set. Two values are returned:
-- (1) whether the spec matches the tag set; (2) the index of the category to add if
-- the spec matches.
local function check_condition(spec)
if type(spec) == "boolean" then
return spec
elseif type(spec) ~= "table" then
error("Wrong type of condition " .. spec .. ": " .. type(spec))
end
local predicate = spec[1]
if predicate == "has" then
return tag_set_matches_spec_tag(spec[2]), 3
elseif predicate == "hasall" then
for _, tag in ipairs(spec[2]) do
if not tag_set_matches_spec_tag(tag) then
return false, 3
end
end
return true, 3
elseif predicate == "hasany" then
for _, tag in ipairs(spec[2]) do
if tag_set_matches_spec_tag(tag) then
return true, 3
end
end
return false, 3
elseif predicate == "tags=" then
local normalized_spec_tags = export.normalize_tags(spec[2])
-- Allow tags to be in different orders, and multipart tags to
-- be in different orders. To handle this, we first check that
-- both tag set tags and spec tags have the same length. If so,
-- we sort the multipart tags in the tag set tags and spec tags,
-- and then check that all tags in the spec tags are in the
-- tag set tags.
if #tag_set ~= #normalized_spec_tags then
return false, 3
end
local tag_set_tags = m_table.deepcopy(tag_set)
for i=1,#tag_set_tags do
if type(tag_set_tags[i]) == "table" then
table.sort(tag_set_tags[i])
end
if type(normalized_spec_tags[i]) == "table" then
table.sort(normalized_spec_tags[i])
end
end
for i=1,#tag_set_tags do
if not m_table.contains(tag_set_tags, normalized_spec_tags[i], "deepCompare") then
return false, 3
end
end
return true, 3
elseif predicate == "p=" then
return POS == export.normalize_pos(spec[2]), 3
elseif predicate == "pany" then
for _, specpos in ipairs(spec[2]) do
if POS == export.normalize_pos(specpos) then
return true, 3
end
end
return false, 3
elseif predicate == "pexists" then
return POS ~= nil, 2
elseif predicate == "not" then
local condval = check_condition(spec[2])
return not condval, 3
elseif predicate == "and" then
local condval = check_condition(spec[2])
if condval then
condval = check_condition(spec[3])
end
return condval, 4
elseif predicate == "or" then
local condval = check_condition(spec[2])
if not condval then
condval = check_condition(spec[3])
end
return condval, 4
elseif predication == "call" then
local fn = m_functions.cat_functions[spec[2]]
if not fn then
error("No condition function named '" .. spec[2] .. "'")
end
return fn(make_function_table()), 3
else
error("Unrecognized predicate: " .. predicate)
end
end
-- Process a given spec. This checks any conditions in the spec against the
-- tag set, and insert any resulting categories into `categories`. Return value
-- is true if the outermost condition evaluated to true and a category was inserted
-- (this is used in {"cond" ...} conditions, which stop when a subcondition evaluates
-- to true).
local function process_spec(spec)
if not spec then
return false
elseif type(spec) == "string" then
-- Substitute POS request with user-specified part of speech
-- or default
spec = rsub(spec, "<<p=(.-)>>", function(default)
return POS or export.normalize_pos(default)
end)
table.insert(categories, lang:getCanonicalName() .. " " .. spec)
return true
elseif type(spec) ~= "table" then
error("Wrong type of specification " .. spec .. ": " .. type(spec))
end
local predicate = spec[1]
if predicate == "multi" then
-- WARNING! #spec doesn't work for objects loaded from loadData()
for i, sp in ipairs(spec) do
if i > 1 then
process_spec(sp)
end
end
return true
elseif predicate == "cond" then
-- WARNING! #spec doesn't work for objects loaded from loadData()
for i, sp in ipairs(spec) do
if i > 1 and process_spec(sp) then
return true
end
end
return false
elseif predicate == "call" then
local fn = m_functions.cat_functions[spec[2]]
if not fn then
error("No spec function named '" .. spec[2] .. "'")
end
return process_spec(fn(make_function_table()))
else
local condval, ifspec = check_condition(spec)
if condval then
process_spec(spec[ifspec])
return true
else
process_spec(spec[ifspec + 1])
-- FIXME: Are we sure this is correct?
return false
end
end
end
local langspecs = m_cats[lang:getCode()]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec)
end
end
if lang:getCode() ~= "und" then
local langspecs = m_cats["und"]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec)
end
end
end
end
return categories
end
function export.tagged_inflections(data)
if not data.tags then
error("First argument must now be a table of arguments")
end
local cur_infl = {}
local inflections = {}
local ntags = export.normalize_tags(data.tags, nil, "do-track")
for i, tagspec in ipairs(ntags) do
if tagspec == ";" then
if #cur_infl > 0 then
table.insert(inflections, table.concat(cur_infl))
end
cur_infl = {}
else
local to_insert = export.get_tag_display_form(tagspec, data.joiner)
-- Maybe insert a space before inserting the display form
-- of the tag. We insert a space if
-- (a) we're not the first tag; and
-- (b) the tag we're about to insert doesn't have the
-- "no_space_on_left" property; and
-- (c) the preceding tag doesn't have the "no_space_on_right"
-- property.
-- NOTE: We depend here on the fact that
-- (1) all tags with either of the above properties set have the
-- same display form as canonical form, and
-- (2) all tags with either of the above properties set are
-- single-character tags.
-- The second property is an optimization to avoid looking up
-- display forms resulting from multipart tags, which won't be
-- found and which will trigger loading of [[Module:form of/data2]].
-- If multichar punctuation is added in the future, it's ok to
-- change the == 1 below to <= 2 or <= 3.
--
-- If the first property above fails to hold in the future, we
-- need to track the canonical form of each tag (including the
-- previous one) as well as the display form. This would also
-- avoid the need for the == 1 check.
if #cur_infl > 0 then
local most_recent_tagobj = ulen(cur_infl[#cur_infl]) == 1 and
export.lookup_tag(cur_infl[#cur_infl])
local to_insert_tagobj = ulen(to_insert) == 1 and
export.lookup_tag(to_insert)
if (
(not most_recent_tagobj or
not most_recent_tagobj.no_space_on_right) and
(not to_insert_tagobj or
not to_insert_tagobj.no_space_on_left)
) then
table.insert(cur_infl, " ")
end
end
table.insert(cur_infl, to_insert)
end
end
if #cur_infl > 0 then
table.insert(inflections, table.concat(cur_infl))
end
local format_data = m_table.shallowcopy(data)
local of_text = (data.terminfos or data.terminfo) and "-এর " or ""
if #inflections == 1 then
format_data.text =
data.notext and "" or ((data.capfirst and require("Module:string utilities").ucfirst(inflections[1]) or inflections[1])
.. of_text)
return export.format_form_of(format_data)
else
format_data.text = data.notext and "" or ((data.capfirst and "Inflection" or "inflection") .. of_text)
format_data.posttext = (data.posttext or "") .. ":"
local link = export.format_form_of(format_data)
local text_classes = data.text_classes or "form-of-definition use-with-mention"
return link .."\n## <span class='" .. text_classes .. "'>" ..
table.concat(inflections, "</span>\n## <span class='" .. text_classes .. "'>") .. "</span>"
end
end
function export.to_Wikidata_IDs(tags, skip_tags_without_ids)
if type(tags) == "string" then
tags = mw.text.split(tags, "|", true)
end
local ret = {}
local function get_wikidata_id(tag)
if tag == ";" and not skip_tags_without_ids then
error("Semicolon is not supported for Wikidata IDs")
else
return nil
end
local data = export.lookup_tag(tag)
if not data or not data.wikidata then
if not skip_tags_without_ids then
error("The tag \"" .. tag .. "\" does not have a Wikidata ID defined in [[Module:form of/data]]")
else
return nil
end
else
return data.wikidata
end
end
for i, tag in ipairs(export.normalize_tags(tags)) do
if type(tag) == "table" then
local ids = {}
for _, onetag in ipairs(tag) do
table.insert(ids, get_wikidata_id(onetag))
end
table.insert(ret, ids)
else
table.insert(ret, get_wikidata_id(tag))
end
end
return ret
end
function export.dump_form_of_data(frame)
local data = {
data = require("Module:form of/data"),
data2 = require("Module:form of/data2")
}
return require("Module:JSON").toJSON(data)
end
return export
4puilspcij7j8fwbzae2bpj617e39cv
ব্যবহারকারী আলাপ:আফতাবুজ্জামান/খেলাঘর
3
13165
132156
61384
2022-08-09T02:38:37Z
আফতাবুজ্জামান
2263
wikitext
text/x-wiki
Current: <nowiki>{{plural of|en|saccharin}}</nowiki> → {{plural of|en|saccharin}}
Wanted: saccharin''-এর বহুবচন''
l15c6tnhkmykqxqt46bnlp1xbz7h1x5
মডিউল:Unicode data/images/01F
828
51021
132153
124658
2022-08-09T00:52:44Z
Kwamikagami
1014
Scribunto
text/plain
return {
[ 0x1F000 ] = "U+1F000 MJEastwind.svg",
[ 0x1F001 ] = "U+1F001 MJSouthwind.svg",
[ 0x1F002 ] = "U+1F002 MJWestwind.svg",
[ 0x1F003 ] = "U+1F003 MJNorthwind.svg",
[ 0x1F004 ] = "U+1F004 MJReddragon.svg",
[ 0x1F005 ] = "U+1F005 MJGreendragon.svg",
[ 0x1F006 ] = "U+1F006 MJWhitedragon.svg",
[ 0x1F007 ] = "U+1F007 MJ1wan.svg",
[ 0x1F008 ] = "U+1F008 MJ2wan.svg",
[ 0x1F009 ] = "U+1F009 MJ3wan.svg",
[ 0x1F00A ] = "U+1F00A MJ4wan.svg",
[ 0x1F00B ] = "U+1F00B MJ5wan.svg",
[ 0x1F00C ] = "U+1F00C MJ6wan.svg",
[ 0x1F00D ] = "U+1F00D MJ7wan.svg",
[ 0x1F00E ] = "U+1F00E MJ8wan.svg",
[ 0x1F00F ] = "U+1F00F MJ9wan.svg",
[ 0x1F010 ] = "U+1F010 MJ1tiao.svg",
[ 0x1F011 ] = "U+1F011 MJ2tiao.svg",
[ 0x1F012 ] = "U+1F012 MJ3tiao.svg",
[ 0x1F013 ] = "U+1F013 MJ4tiao.svg",
[ 0x1F014 ] = "U+1F014 MJ5tiao.svg",
[ 0x1F015 ] = "U+1F015 MJ6tiao.svg",
[ 0x1F016 ] = "U+1F016 MJ7tiao.svg",
[ 0x1F017 ] = "U+1F017 MJ8tiao.svg",
[ 0x1F018 ] = "U+1F018 MJ9tiao.svg",
[ 0x1F019 ] = "U+1F019 MJ1bing.svg",
[ 0x1F01A ] = "U+1F01A MJ2bing.svg",
[ 0x1F01B ] = "U+1F01B MJ3bing.svg",
[ 0x1F01C ] = "U+1F01C MJ4bing.svg",
[ 0x1F01D ] = "U+1F01D MJ5bing.svg",
[ 0x1F01E ] = "U+1F01E MJ6bing.svg",
[ 0x1F01F ] = "U+1F01F MJ7bing.svg",
[ 0x1F020 ] = "U+1F020 MJ8bing.svg",
[ 0x1F021 ] = "U+1F021 MJ9bing.svg",
[ 0x1F022 ] = "U+1F022 MJmei.svg",
[ 0x1F023 ] = "U+1F023 MJlan.svg",
[ 0x1F024 ] = "U+1F024 MJzhu.svg",
[ 0x1F025 ] = "U+1F025 MJju.svg",
[ 0x1F026 ] = "U+1F026 MJspring.svg",
[ 0x1F027 ] = "U+1F027 MJsummer.svg",
[ 0x1F028 ] = "U+1F028 MJautumn.svg",
[ 0x1F029 ] = "U+1F029 MJwinter.svg",
[ 0x1F02A ] = "U+1F02A MJbaida.svg",
[ 0x1F02B ] = "U+1F02B MJback.svg",
[ 0x1F030 ] = "DOMINO TILE HORIZONTAL BACK.svg",
[ 0x1F031 ] = "DOMINO TILE HORIZONTAL-00-00.svg",
[ 0x1F032 ] = "DOMINO TILE HORIZONTAL-00-01.svg",
[ 0x1F033 ] = "DOMINO TILE HORIZONTAL-00-02.svg",
[ 0x1F034 ] = "DOMINO TILE HORIZONTAL-00-03.svg",
[ 0x1F035 ] = "DOMINO TILE HORIZONTAL-00-04.svg",
[ 0x1F036 ] = "DOMINO TILE HORIZONTAL-00-05.svg",
[ 0x1F037 ] = "DOMINO TILE HORIZONTAL-00-06.svg",
[ 0x1F038 ] = "DOMINO TILE HORIZONTAL-01-00.svg",
[ 0x1F039 ] = "DOMINO TILE HORIZONTAL-01-01.svg",
[ 0x1F03A ] = "DOMINO TILE HORIZONTAL-01-02.svg",
[ 0x1F03B ] = "DOMINO TILE HORIZONTAL-01-03.svg",
[ 0x1F03C ] = "DOMINO TILE HORIZONTAL-01-04.svg",
[ 0x1F03D ] = "DOMINO TILE HORIZONTAL-01-05.svg",
[ 0x1F03E ] = "DOMINO TILE HORIZONTAL-01-06.svg",
[ 0x1F03F ] = "DOMINO TILE HORIZONTAL-02-00.svg",
[ 0x1F040 ] = "DOMINO TILE HORIZONTAL-02-01.svg",
[ 0x1F041 ] = "DOMINO TILE HORIZONTAL-02-02.svg",
[ 0x1F042 ] = "DOMINO TILE HORIZONTAL-02-03.svg",
[ 0x1F043 ] = "DOMINO TILE HORIZONTAL-02-04.svg",
[ 0x1F044 ] = "DOMINO TILE HORIZONTAL-02-05.svg",
[ 0x1F045 ] = "DOMINO TILE HORIZONTAL-02-06.svg",
[ 0x1F046 ] = "DOMINO TILE HORIZONTAL-03-00.svg",
[ 0x1F047 ] = "DOMINO TILE HORIZONTAL-03-01.svg",
[ 0x1F048 ] = "DOMINO TILE HORIZONTAL-03-02.svg",
[ 0x1F049 ] = "DOMINO TILE HORIZONTAL-03-03.svg",
[ 0x1F04A ] = "DOMINO TILE HORIZONTAL-03-04.svg",
[ 0x1F04B ] = "DOMINO TILE HORIZONTAL-03-05.svg",
[ 0x1F04C ] = "DOMINO TILE HORIZONTAL-03-06.svg",
[ 0x1F04D ] = "DOMINO TILE HORIZONTAL-04-00.svg",
[ 0x1F04E ] = "DOMINO TILE HORIZONTAL-04-01.svg",
[ 0x1F04F ] = "DOMINO TILE HORIZONTAL-04-02.svg",
[ 0x1F050 ] = "DOMINO TILE HORIZONTAL-04-03.svg",
[ 0x1F051 ] = "DOMINO TILE HORIZONTAL-04-04.svg",
[ 0x1F052 ] = "DOMINO TILE HORIZONTAL-04-05.svg",
[ 0x1F053 ] = "DOMINO TILE HORIZONTAL-04-06.svg",
[ 0x1F054 ] = "DOMINO TILE HORIZONTAL-05-00.svg",
[ 0x1F055 ] = "DOMINO TILE HORIZONTAL-05-01.svg",
[ 0x1F056 ] = "DOMINO TILE HORIZONTAL-05-02.svg",
[ 0x1F057 ] = "DOMINO TILE HORIZONTAL-05-03.svg",
[ 0x1F058 ] = "DOMINO TILE HORIZONTAL-05-04.svg",
[ 0x1F059 ] = "DOMINO TILE HORIZONTAL-05-05.svg",
[ 0x1F05A ] = "DOMINO TILE HORIZONTAL-05-06.svg",
[ 0x1F05B ] = "DOMINO TILE HORIZONTAL-06-00.svg",
[ 0x1F05C ] = "DOMINO TILE HORIZONTAL-06-01.svg",
[ 0x1F05D ] = "DOMINO TILE HORIZONTAL-06-02.svg",
[ 0x1F05E ] = "DOMINO TILE HORIZONTAL-06-03.svg",
[ 0x1F05F ] = "DOMINO TILE HORIZONTAL-06-04.svg",
[ 0x1F060 ] = "DOMINO TILE HORIZONTAL-06-05.svg",
[ 0x1F061 ] = "DOMINO TILE HORIZONTAL-06-06.svg",
[ 0x1F062 ] = "DOMINO TILE VERTICAL BACK.svg",
[ 0x1F063 ] = "DOMINO TILE VERTICAL-00-00.svg",
[ 0x1F064 ] = "DOMINO TILE VERTICAL-00-01.svg",
[ 0x1F065 ] = "DOMINO TILE VERTICAL-00-02.svg",
[ 0x1F066 ] = "DOMINO TILE VERTICAL-00-03.svg",
[ 0x1F067 ] = "DOMINO TILE VERTICAL-00-04.svg",
[ 0x1F068 ] = "DOMINO TILE VERTICAL-00-05.svg",
[ 0x1F069 ] = "DOMINO TILE VERTICAL-00-06.svg",
[ 0x1F06A ] = "DOMINO TILE VERTICAL-01-00.svg",
[ 0x1F06B ] = "DOMINO TILE VERTICAL-01-01.svg",
[ 0x1F06C ] = "DOMINO TILE VERTICAL-01-02.svg",
[ 0x1F06D ] = "DOMINO TILE VERTICAL-01-03.svg",
[ 0x1F06E ] = "DOMINO TILE VERTICAL-01-04.svg",
[ 0x1F06F ] = "DOMINO TILE VERTICAL-01-05.svg",
[ 0x1F070 ] = "DOMINO TILE VERTICAL-01-06.svg",
[ 0x1F071 ] = "DOMINO TILE VERTICAL-02-00.svg",
[ 0x1F072 ] = "DOMINO TILE VERTICAL-02-01.svg",
[ 0x1F073 ] = "DOMINO TILE VERTICAL-02-02.svg",
[ 0x1F074 ] = "DOMINO TILE VERTICAL-02-03.svg",
[ 0x1F075 ] = "DOMINO TILE VERTICAL-02-04.svg",
[ 0x1F076 ] = "DOMINO TILE VERTICAL-02-05.svg",
[ 0x1F077 ] = "DOMINO TILE VERTICAL-02-06.svg",
[ 0x1F078 ] = "DOMINO TILE VERTICAL-03-00.svg",
[ 0x1F079 ] = "DOMINO TILE VERTICAL-03-01.svg",
[ 0x1F07A ] = "DOMINO TILE VERTICAL-03-02.svg",
[ 0x1F07B ] = "DOMINO TILE VERTICAL-03-03.svg",
[ 0x1F07C ] = "DOMINO TILE VERTICAL-03-04.svg",
[ 0x1F07D ] = "DOMINO TILE VERTICAL-03-05.svg",
[ 0x1F07E ] = "DOMINO TILE VERTICAL-03-06.svg",
[ 0x1F07F ] = "DOMINO TILE VERTICAL-04-00.svg",
[ 0x1F080 ] = "DOMINO TILE VERTICAL-04-01.svg",
[ 0x1F081 ] = "DOMINO TILE VERTICAL-04-02.svg",
[ 0x1F082 ] = "DOMINO TILE VERTICAL-04-03.svg",
[ 0x1F083 ] = "DOMINO TILE VERTICAL-04-04.svg",
[ 0x1F084 ] = "DOMINO TILE VERTICAL-04-05.svg",
[ 0x1F085 ] = "DOMINO TILE VERTICAL-04-06.svg",
[ 0x1F086 ] = "DOMINO TILE VERTICAL-05-00.svg",
[ 0x1F087 ] = "DOMINO TILE VERTICAL-05-01.svg",
[ 0x1F088 ] = "DOMINO TILE VERTICAL-05-02.svg",
[ 0x1F089 ] = "DOMINO TILE VERTICAL-05-03.svg",
[ 0x1F08A ] = "DOMINO TILE VERTICAL-05-04.svg",
[ 0x1F08B ] = "DOMINO TILE VERTICAL-05-05.svg",
[ 0x1F08C ] = "DOMINO TILE VERTICAL-05-06.svg",
[ 0x1F08D ] = "DOMINO TILE VERTICAL-06-00.svg",
[ 0x1F08E ] = "DOMINO TILE VERTICAL-06-01.svg",
[ 0x1F08F ] = "DOMINO TILE VERTICAL-06-02.svg",
[ 0x1F090 ] = "DOMINO TILE VERTICAL-06-03.svg",
[ 0x1F091 ] = "DOMINO TILE VERTICAL-06-04.svg",
[ 0x1F092 ] = "DOMINO TILE VERTICAL-06-05.svg",
[ 0x1F093 ] = "DOMINO TILE VERTICAL-06-06.svg",
[ 0x1F0A0 ] = "PLAYING CARD BACK.svg",
[ 0x1F0A1 ] = "PLAYING CARD ACE OF SPADES.svg",
[ 0x1F0A2 ] = "PLAYING CARD TWO OF SPADES.svg",
[ 0x1F0A3 ] = "PLAYING CARD THREE OF SPADES.svg",
[ 0x1F0A4 ] = "PLAYING CARD FOUR OF SPADES.svg",
[ 0x1F0A5 ] = "PLAYING CARD FIVE OF SPADES.svg",
[ 0x1F0A6 ] = "PLAYING CARD SIX OF SPADES.svg",
[ 0x1F0A7 ] = "PLAYING CARD SEVEN OF SPADES.svg",
[ 0x1F0A8 ] = "PLAYING CARD EIGHT OF SPADES.svg",
[ 0x1F0A9 ] = "PLAYING CARD NINE OF SPADES.svg",
[ 0x1F0AA ] = "PLAYING CARD TEN OF SPADES.svg",
[ 0x1F0AB ] = "PLAYING CARD JACK OF SPADES.svg",
[ 0x1F0AC ] = "PLAYING CARD KNIGHT OF SPADES.svg",
[ 0x1F0AD ] = "PLAYING CARD QUEEN OF SPADES.svg",
[ 0x1F0AE ] = "PLAYING CARD KING OF SPADES.svg",
[ 0x1F0B1 ] = "PLAYING CARD ACE OF HEARTS.svg",
[ 0x1F0B2 ] = "PLAYING CARD TWO OF HEARTS.svg",
[ 0x1F0B3 ] = "PLAYING CARD THREE OF HEARTS.svg",
[ 0x1F0B4 ] = "PLAYING CARD FOUR OF HEARTS.svg",
[ 0x1F0B5 ] = "PLAYING CARD FIVE OF HEARTS.svg",
[ 0x1F0B6 ] = "PLAYING CARD SIX OF HEARTS.svg",
[ 0x1F0B7 ] = "PLAYING CARD SEVEN OF HEARTS.svg",
[ 0x1F0B8 ] = "PLAYING CARD EIGHT OF HEARTS.svg",
[ 0x1F0B9 ] = "PLAYING CARD NINE OF HEARTS.svg",
[ 0x1F0BA ] = "PLAYING CARD TEN OF HEARTS.svg",
[ 0x1F0BB ] = "PLAYING CARD JACK OF HEARTS.svg",
[ 0x1F0BC ] = "PLAYING CARD KNIGHT OF HEARTS.svg",
[ 0x1F0BD ] = "PLAYING CARD QUEEN OF HEARTS.svg",
[ 0x1F0BE ] = "PLAYING CARD KING OF HEARTS.svg",
[ 0x1F0BF ] = "PLAYING CARD RED JOKER.svg",
[ 0x1F0C1 ] = "PLAYING CARD ACE OF DIAMONDS.svg",
[ 0x1F0C2 ] = "PLAYING CARD TWO OF DIAMONDS.svg",
[ 0x1F0C3 ] = "PLAYING CARD THREE OF DIAMONDS.svg",
[ 0x1F0C4 ] = "PLAYING CARD FOUR OF DIAMONDS.svg",
[ 0x1F0C5 ] = "PLAYING CARD FIVE OF DIAMONDS.svg",
[ 0x1F0C6 ] = "PLAYING CARD SIX OF DIAMONDS.svg",
[ 0x1F0C7 ] = "PLAYING CARD SEVEN OF DIAMONDS.svg",
[ 0x1F0C8 ] = "PLAYING CARD EIGHT OF DIAMONDS.svg",
[ 0x1F0C9 ] = "PLAYING CARD NINE OF DIAMONDS.svg",
[ 0x1F0CA ] = "PLAYING CARD TEN OF DIAMONDS.svg",
[ 0x1F0CB ] = "PLAYING CARD JACK OF DIAMONDS.svg",
[ 0x1F0CC ] = "PLAYING CARD KNIGHT OF DIAMONDS.svg",
[ 0x1F0CD ] = "PLAYING CARD QUEEN OF DIAMONDS.svg",
[ 0x1F0CE ] = "PLAYING CARD KING OF DIAMONDS.svg",
[ 0x1F0CF ] = "PLAYING CARD BLACK JOKER.svg",
[ 0x1F0D1 ] = "PLAYING CARD ACE OF CLUBS.svg",
[ 0x1F0D2 ] = "PLAYING CARD TWO OF CLUBS.svg",
[ 0x1F0D3 ] = "PLAYING CARD THREE OF CLUBS.svg",
[ 0x1F0D4 ] = "PLAYING CARD FOUR OF CLUBS.svg",
[ 0x1F0D5 ] = "PLAYING CARD FIVE OF CLUBS.svg",
[ 0x1F0D6 ] = "PLAYING CARD SIX OF CLUBS.svg",
[ 0x1F0D7 ] = "PLAYING CARD SEVEN OF CLUBS.svg",
[ 0x1F0D8 ] = "PLAYING CARD EIGHT OF CLUBS.svg",
[ 0x1F0D9 ] = "PLAYING CARD NINE OF CLUBS.svg",
[ 0x1F0DA ] = "PLAYING CARD TEN OF CLUBS.svg",
[ 0x1F0DB ] = "PLAYING CARD JACK OF CLUBS.svg",
[ 0x1F0DC ] = "PLAYING CARD KNIGHT OF CLUBS.svg",
[ 0x1F0DD ] = "PLAYING CARD QUEEN OF CLUBS.svg",
[ 0x1F0DE ] = "PLAYING CARD KING OF CLUBS.svg",
[ 0x1F0DF ] = "PLAYING CARD WHITE JOKER.svg",
[ 0x1F0E0 ] = "PLAYING CARD FOOL.svg",
[ 0x1F0E1 ] = "PLAYING CARD TRUMP-1.svg",
[ 0x1F0E2 ] = "PLAYING CARD TRUMP-2.svg",
[ 0x1F0E3 ] = "PLAYING CARD TRUMP-3.svg",
[ 0x1F0E4 ] = "PLAYING CARD TRUMP-4.svg",
[ 0x1F0E5 ] = "PLAYING CARD TRUMP-5.svg",
[ 0x1F0E6 ] = "PLAYING CARD TRUMP-6.svg",
[ 0x1F0E7 ] = "PLAYING CARD TRUMP-7.svg",
[ 0x1F0E8 ] = "PLAYING CARD TRUMP-8.svg",
[ 0x1F0E9 ] = "PLAYING CARD TRUMP-9.svg",
[ 0x1F0EA ] = "PLAYING CARD TRUMP-10.svg",
[ 0x1F0EB ] = "PLAYING CARD TRUMP-11.svg",
[ 0x1F0EC ] = "PLAYING CARD TRUMP-12.svg",
[ 0x1F0ED ] = "PLAYING CARD TRUMP-13.svg",
[ 0x1F0EE ] = "PLAYING CARD TRUMP-14.svg",
[ 0x1F0EF ] = "PLAYING CARD TRUMP-15.svg",
[ 0x1F0F0 ] = "PLAYING CARD TRUMP-16.svg",
[ 0x1F0F1 ] = "PLAYING CARD TRUMP-17.svg",
[ 0x1F0F2 ] = "PLAYING CARD TRUMP-18.svg",
[ 0x1F0F3 ] = "PLAYING CARD TRUMP-19.svg",
[ 0x1F0F4 ] = "PLAYING CARD TRUMP-20.svg",
[ 0x1F0F5 ] = "PLAYING CARD TRUMP-21.svg",
[ 0x1F12F ] = "Copyleft.svg",
[ 0x1F18E ] = "Emoji u1f18e.svg",
[ 0x1F192 ] = "Emoji u1f192.svg",
[ 0x1F196 ] = "Emoji u1f196.svg",
[ 0x1F199 ] = "Emoji u1f199.svg",
[ 0x1F201 ] = "Emoji u1f201.svg",
[ 0x1F202 ] = "Emoji u1f202.svg",
[ 0x1F21A ] = "Emoji u1f21a.svg",
[ 0x1F22F ] = "Emoji u1f22f.svg",
[ 0x1F232 ] = "Emoji u1f232.svg",
[ 0x1F233 ] = "Emoji u1f233.svg",
[ 0x1F234 ] = "Emoji u1f234.svg",
[ 0x1F235 ] = "Emoji u1f235.svg",
[ 0x1F236 ] = "Emoji u1f236.svg",
[ 0x1F237 ] = "Emoji u1f237.svg",
[ 0x1F238 ] = "Emoji u1f238.svg",
[ 0x1F239 ] = "Emoji u1f239.svg",
[ 0x1F23A ] = "Emoji u1f23a.svg",
[ 0x1F250 ] = "Emoji u1f250.svg",
[ 0x1F251 ] = "Emoji u1f251.svg",
[ 0x1F260 ] = "U1f260.svg",
[ 0x1F261 ] = "U1f261.svg",
[ 0x1F262 ] = "U1f262.svg",
[ 0x1F263 ] = "U1f263.svg",
[ 0x1F264 ] = "U1f264.svg",
[ 0x1F265 ] = "U1f265.svg",
[ 0x1F300 ] = "Noto Project Cyclone Emoji.svg",
[ 0x1F301 ] = "Emoji u1f301.svg",
[ 0x1F302 ] = "Noto Project Closed Umbrella Emoji.svg",
[ 0x1F303 ] = "Emoji u1f303.svg",
[ 0x1F304 ] = "Emoji u1f304.svg",
[ 0x1F305 ] = "Emoji u1f305.svg",
[ 0x1F306 ] = "Emoji u1f306.svg",
[ 0x1F307 ] = "Emoji u1f307.svg",
[ 0x1F308 ] = "Noto Project Rainbow Emoji.svg",
[ 0x1F309 ] = "Emoji u1f309.svg",
[ 0x1F30A ] = "Noto Project Wave Emoji.svg",
[ 0x1F30B ] = "Noto Project Volcano Emoji.svg",
[ 0x1F30D ] = "Noto Project Earth Europe Africa Emoji.svg",
[ 0x1F30E ] = "Noto Project Earth Americas Emoji.svg",
[ 0x1F30F ] = "Noto Project Earth Asia Australia Emoji.svg",
[ 0x1F310 ] = "Noto Project Globe Emoji.svg",
[ 0x1F311 ] = "New moon symbol.svg",
[ 0x1F312 ] = "Waxing crescent moon (fixed width).svg",
[ 0x1F313 ] = "First quarter moon symbol.svg",
[ 0x1F314 ] = "Waxing gibbous moon (fixed width).svg",
[ 0x1F315 ] = "Full moon symbol.svg",
[ 0x1F316 ] = "Waning gibbous moon (fixed width).svg",
[ 0x1F317 ] = "Last quarter moon symbol.svg",
[ 0x1F318 ] = "Waning crescent moon (fixed width).svg",
[ 0x1F319 ] = "Sunset crescent moon symbol.svg",
[ 0x1F31A ] = "New moon with face.svg",
[ 0x1F31B ] = "First-quarter moon with face.svg",
[ 0x1F31C ] = "Last-quarter moon with face.svg",
[ 0x1F31D ] = "Full moon with face.svg",
[ 0x1F31E ] = "Sun with face.svg",
[ 0x1F31F ] = "Noto Project Glowing Star Emoji.svg",
[ 0x1F320 ] = "Noto Project Shooting Star Emoji.svg",
[ 0x1F323 ] = "White sun with rays (fixed width).svg",
[ 0x1F324 ] = "Partly cloudy (fixed width).svg",
[ 0x1F325 ] = "Sun behind cloud (fixed width).svg",
[ 0x1F326 ] = "Sun behind rain cloud (fixed width).svg",
[ 0x1F327 ] = "Rain cloud (fixed width).svg",
[ 0x1F328 ] = "Snowstorm (fixed width).svg",
[ 0x1F329 ] = "Thunderstorm (fixed width).svg",
[ 0x1F32A ] = "Tornado cloud (fixed width).svg",
[ 0x1F330 ] = "Emoji u1f330.svg",
[ 0x1F331 ] = "Emoji u1f331.svg",
[ 0x1F332 ] = "Emoji u1f332.svg",
[ 0x1F333 ] = "Emoji u1f333.svg",
[ 0x1F334 ] = "Emoji u1f334.svg",
[ 0x1F335 ] = "Emoji u1f335.svg",
[ 0x1F337 ] = "Emoji u1f337.svg",
[ 0x1F338 ] = "Emoji u1f338.svg",
[ 0x1F339 ] = "Emoji u1f339.svg",
[ 0x1F33A ] = "Emoji u1f33a.svg",
[ 0x1F33B ] = "Emoji u1f33b.svg",
[ 0x1F33C ] = "Emoji u1f33c.svg",
[ 0x1F33D ] = "Noto Project Corn Emoji.svg",
[ 0x1F33E ] = "Emoji u1f33e.svg",
[ 0x1F33F ] = "Emoji u1f33f.svg",
[ 0x1F340 ] = "Emoji u1f340.svg",
[ 0x1F341 ] = "Emoji u1f341.svg",
[ 0x1F342 ] = "Emoji u1f342.svg",
[ 0x1F343 ] = "Emoji u1f343.svg",
[ 0x1F344 ] = "Emoji u1f344.svg",
[ 0x1F346 ] = "Noto Project Eggplant Emoji.svg",
[ 0x1F347 ] = "Noto Project Grapes Emoji.svg",
[ 0x1F348 ] = "Emoji u1f348.svg",
[ 0x1F349 ] = "Noto Project Watermelon Emoji.svg",
[ 0x1F34A ] = "Emoji u1f34a.svg",
[ 0x1F34B ] = "Emoji u1f34b.svg",
[ 0x1F34C ] = "Emoji u1f34c.svg",
[ 0x1F34D ] = "Noto Project Pineapple Emoji.svg",
[ 0x1F34E ] = "Emoji u1f34e.svg",
[ 0x1F34F ] = "Emoji u1f34f.svg",
[ 0x1F350 ] = "Emoji u1f350.svg",
[ 0x1F351 ] = "Emoji u1f351.svg",
[ 0x1F352 ] = "Noto Project Cherries Emoji.svg",
[ 0x1F353 ] = "Noto Project Strawberry Emoji.svg",
[ 0x1F354 ] = "Noto Project Hamburger Emoji.svg",
[ 0x1F355 ] = "Noto Project Pizza Slice Emoji.svg",
[ 0x1F356 ] = "Emoji u1f356.svg",
[ 0x1F357 ] = "Noto Project Poultry Leg Emoji.svg",
[ 0x1F358 ] = "Noto Project Rice Cracker Emoji.svg",
[ 0x1F359 ] = "Noto Project Rice Ball Emoji.svg",
[ 0x1F35A ] = "Emoji u1f35a.svg",
[ 0x1F35B ] = "Emoji u1f35b.svg",
[ 0x1F35C ] = "Emoji u1f35c.svg",
[ 0x1F35D ] = "Emoji u1f35d.svg",
[ 0x1F35E ] = "Noto Project Bread Emoji.svg",
[ 0x1F35F ] = "Emoji u1f35f.svg",
[ 0x1F360 ] = "Emoji u1f360.svg",
[ 0x1F361 ] = "Emoji u1f361.svg",
[ 0x1F362 ] = "Emoji u1f362.svg",
[ 0x1F363 ] = "Noto Project Sushi Emoji.svg",
[ 0x1F364 ] = "Noto Project Fried Shrimp Emoji.svg",
[ 0x1F365 ] = "Emoji u1f365.svg",
[ 0x1F366 ] = "Emoji u1f366.svg",
[ 0x1F367 ] = "Emoji u1f367.svg",
[ 0x1F368 ] = "Emoji u1f368.svg",
[ 0x1F369 ] = "Noto Project Doughnut Emoji.svg",
[ 0x1F36A ] = "Emoji u1f36a.svg",
[ 0x1F36B ] = "Noto Project Chocolate Emoji.svg",
[ 0x1F36C ] = "Emoji u1f36c.svg",
[ 0x1F36D ] = "Emoji u1f36d.svg",
[ 0x1F36E ] = "Emoji u1f36e.svg",
[ 0x1F36F ] = "Emoji u1f36f.svg",
[ 0x1F370 ] = "Emoji u1f370.svg",
[ 0x1F371 ] = "Emoji u1f371.svg",
[ 0x1F372 ] = "Emoji u1f372.svg",
[ 0x1F373 ] = "Emoji u1f373.svg",
[ 0x1F374 ] = "Emoji u1f374.svg",
[ 0x1F375 ] = "Emoji u1f375.svg",
[ 0x1F376 ] = "Emoji u1f376.svg",
[ 0x1F377 ] = "Emoji u1f377.svg",
[ 0x1F378 ] = "Emoji u1f378.svg",
[ 0x1F379 ] = "Emoji u1f379.svg",
[ 0x1F37A ] = "Noto Project Beer Emoji.svg",
[ 0x1F37B ] = "Noto Project Clinking Beer Emoji.svg",
[ 0x1F37C ] = "Emoji u1f37c.svg",
[ 0x1F380 ] = "Emoji u1f380.svg",
[ 0x1F381 ] = "Noto Project Gift Emoji.svg",
[ 0x1F382 ] = "Noto Project Birthday Cake Emoji.svg",
[ 0x1F383 ] = "Emoji u1f383.svg",
[ 0x1F384 ] = "Noto Project Christmas Tree Emoji.svg",
[ 0x1F385 ] = "Noto Project Santa Claus Emoji.svg",
[ 0x1F386 ] = "Noto Project Fireworks Emoji.svg",
[ 0x1F387 ] = "Noto Project Firework Sparkler Emoji.svg",
[ 0x1F388 ] = "Noto Project Balloon Emoji.svg",
[ 0x1F389 ] = "Noto Project Party Popper Emoji.svg",
[ 0x1F38A ] = "Emoji u1f38a.svg",
[ 0x1F38B ] = "Emoji u1f38b.svg",
[ 0x1F38C ] = "Emoji u1f38c.svg",
[ 0x1F38D ] = "Emoji u1f38d.svg",
[ 0x1F38E ] = "Emoji u1f38e.svg",
[ 0x1F38F ] = "Emoji u1f38f.svg",
[ 0x1F390 ] = "Emoji u1f390.svg",
[ 0x1F391 ] = "Emoji u1f391.svg",
[ 0x1F392 ] = "Emoji u1f392.svg",
[ 0x1F393 ] = "Noto Project Graduation Cap Emoji.svg",
[ 0x1F3A0 ] = "Emoji u1f3a0.svg",
[ 0x1F3A1 ] = "Emoji u1f3a1.svg",
[ 0x1F3A2 ] = "Emoji u1f3a2.svg",
[ 0x1F3A3 ] = "Emoji u1f3a3.svg",
[ 0x1F3A4 ] = "Emoji u1f3a4.svg",
[ 0x1F3A5 ] = "Noto Project Movie Camera Emoji.svg",
[ 0x1F3A6 ] = "Emoji u1f3a6.svg",
[ 0x1F3A7 ] = "Noto Project Headphone Emoji.svg",
[ 0x1F3A9 ] = "Emoji u1f3a9.svg",
[ 0x1F3AA ] = "Noto Project Circus Emoji.svg",
[ 0x1F3AB ] = "Noto Project Ticket Emoji.svg",
[ 0x1F3AC ] = "Noto Project Clapper Board Emoji.svg",
[ 0x1F3AD ] = "Emoji u1f3ad.svg",
[ 0x1F3AF ] = "Emoji u1f3af.svg",
[ 0x1F3B0 ] = "Emoji u1f3b0.svg",
[ 0x1F3B1 ] = "Noto Project Billiards Emoji.svg",
[ 0x1F3B2 ] = "Emoji u1f3b2.svg",
[ 0x1F3B3 ] = "Noto Project Bowling Emoji.svg",
[ 0x1F3B4 ] = "Emoji u1f3b4.svg",
[ 0x1F3B5 ] = "Emoji u1f3b5.svg",
[ 0x1F3B6 ] = "Emoji u1f3b6.svg",
[ 0x1F3B7 ] = "Emoji u1f3b7.svg",
[ 0x1F3B8 ] = "Emoji u1f3b8.svg",
[ 0x1F3B9 ] = "Emoji u1f3b9.svg",
[ 0x1F3BA ] = "Emoji u1f3ba.svg",
[ 0x1F3BB ] = "Emoji u1f3bb.svg",
[ 0x1F3BC ] = "Emoji u1f3bc.svg",
[ 0x1F3BD ] = "Emoji u1f3bd.svg",
[ 0x1F3BE ] = "Emoji u1f3be.svg",
[ 0x1F3BF ] = "Emoji u1f3bf.svg",
[ 0x1F3C0 ] = "Emoji u1f3c0.svg",
[ 0x1F3C1 ] = "Emoji u1f3c1.svg",
[ 0x1F3C2 ] = "Emoji u1f3c2.svg",
[ 0x1F3C3 ] = "Emoji u1f3c3.svg",
[ 0x1F3C4 ] = "Emoji u1f3c4.svg",
[ 0x1F3C6 ] = "Emoji u1f3c6.svg",
[ 0x1F3C7 ] = "Emoji u1f3c7.svg",
[ 0x1F3C8 ] = "Emoji u1f3c8.svg",
[ 0x1F3C9 ] = "Emoji u1f3c9.svg",
[ 0x1F3CA ] = "Emoji u1f3ca.svg",
[ 0x1F3E0 ] = "Emoji u1f3e0.svg",
[ 0x1F3E1 ] = "Emoji u1f3e1.svg",
[ 0x1F3E2 ] = "Emoji u1f3e2.svg",
[ 0x1F3E3 ] = "Emoji u1f3e3.svg",
[ 0x1F3E4 ] = "Emoji u1f3e4.svg",
[ 0x1F3E5 ] = "Emoji u1f3e5.svg",
[ 0x1F3E6 ] = "Emoji u1f3e6.svg",
[ 0x1F3E7 ] = "Emoji u1f3e7.svg",
[ 0x1F3E8 ] = "Emoji u1f3e8.svg",
[ 0x1F3E9 ] = "Emoji u1f3e9.svg",
[ 0x1F3EA ] = "Emoji u1f3ea.svg",
[ 0x1F3EB ] = "Emoji u1f3eb.svg",
[ 0x1F3EC ] = "Emoji u1f3ec.svg",
[ 0x1F3ED ] = "Emoji u1f3ed.svg",
[ 0x1F3EE ] = "Emoji u1f3ee.svg",
[ 0x1F3EF ] = "Emoji u1f3ef.svg",
[ 0x1F3F0 ] = "Emoji u1f3f0.svg",
[ 0x1F400 ] = "Emoji u1f400.svg",
[ 0x1F401 ] = "Emoji u1f401.svg",
[ 0x1F402 ] = "Emoji u1f402.svg",
[ 0x1F403 ] = "Emoji u1f403.svg",
[ 0x1F404 ] = "Emoji u1f404.svg",
[ 0x1F405 ] = "Emoji u1f405.svg",
[ 0x1F406 ] = "Emoji u1f406.svg",
[ 0x1F407 ] = "Emoji u1f407.svg",
[ 0x1F408 ] = "Emoji u1f408.svg",
[ 0x1F409 ] = "Emoji u1f409.svg",
[ 0x1F40A ] = "Emoji u1f40a.svg",
[ 0x1F40B ] = "Emoji u1f40b.svg",
[ 0x1F40C ] = "Emoji u1f40c.svg",
[ 0x1F40D ] = "Emoji u1f40d.svg",
[ 0x1F40E ] = "Emoji u1f40e.svg",
[ 0x1F40F ] = "Emoji u1f40f.svg",
[ 0x1F410 ] = "Emoji u1f410.svg",
[ 0x1F411 ] = "Emoji u1f411.svg",
[ 0x1F412 ] = "Emoji u1f412.svg",
[ 0x1F413 ] = "Emoji u1f413.svg",
[ 0x1F414 ] = "Emoji u1f414.svg",
[ 0x1F415 ] = "Emoji u1f415.svg",
[ 0x1F416 ] = "Emoji u1f416.svg",
[ 0x1F417 ] = "Emoji u1f417.svg",
[ 0x1F418 ] = "Emoji u1f418.svg",
[ 0x1F419 ] = "Emoji u1f419.svg",
[ 0x1F41A ] = "Emoji u1f41a.svg",
[ 0x1F41B ] = "Emoji u1f41b.svg",
[ 0x1F41C ] = "Emoji u1f41c.svg",
[ 0x1F41D ] = "Emoji u1f41d.svg",
[ 0x1F41E ] = "Emoji u1f41e.svg",
[ 0x1F41F ] = "Emoji u1f41f.svg",
[ 0x1F420 ] = "Emoji u1f420.svg",
[ 0x1F421 ] = "Emoji u1f421.svg",
[ 0x1F422 ] = "Emoji u1f422.svg",
[ 0x1F423 ] = "Emoji u1f423.svg",
[ 0x1F424 ] = "Emoji u1f424.svg",
[ 0x1F425 ] = "Emoji u1f425.svg",
[ 0x1F426 ] = "Emoji u1f426.svg",
[ 0x1F427 ] = "Emoji u1f427.svg",
[ 0x1F428 ] = "Emoji u1f428.svg",
[ 0x1F429 ] = "Emoji u1f429.svg",
[ 0x1F42A ] = "Emoji u1f42a.svg",
[ 0x1F42B ] = "Emoji u1f42b.svg",
[ 0x1F42C ] = "Emoji u1f42c.svg",
[ 0x1F42D ] = "Emoji u1f42d.svg",
[ 0x1F42E ] = "Emoji u1f42e.svg",
[ 0x1F42F ] = "Emoji u1f42f.svg",
[ 0x1F430 ] = "Emoji u1f430.svg",
[ 0x1F431 ] = "Emoji u1f431.svg",
[ 0x1F432 ] = "Emoji u1f432.svg",
[ 0x1F433 ] = "Emoji u1f433.svg",
[ 0x1F434 ] = "Emoji u1f434.svg",
[ 0x1F435 ] = "Emoji u1f435.svg",
[ 0x1F436 ] = "Emoji u1f436.svg",
[ 0x1F437 ] = "Emoji u1f437.svg",
[ 0x1F438 ] = "Emoji u1f438.svg",
[ 0x1F439 ] = "Emoji u1f439.svg",
[ 0x1F43A ] = "Emoji u1f43a.svg",
[ 0x1F43B ] = "Emoji u1f43b.svg",
[ 0x1F43C ] = "Emoji u1f43c.svg",
[ 0x1F43D ] = "Emoji u1f43d.svg",
[ 0x1F43E ] = "Emoji u1f43e.svg",
[ 0x1F440 ] = "Emoji u1f440.svg",
[ 0x1F442 ] = "Emoji u1f442.svg",
[ 0x1F443 ] = "Emoji u1f443.svg",
[ 0x1F444 ] = "Emoji u1f444.svg",
[ 0x1F445 ] = "Emoji u1f445.svg",
[ 0x1F446 ] = "Emoji u1f446.svg",
[ 0x1F447 ] = "Emoji u1f447.svg",
[ 0x1F448 ] = "Emoji u1f448.svg",
[ 0x1F449 ] = "Emoji u1f449.svg",
[ 0x1F44A ] = "Emoji u1f44a.svg",
[ 0x1F44B ] = "Emoji u1f44b.svg",
[ 0x1F44C ] = "Emoji u1f44c.svg",
[ 0x1F44D ] = "Emoji u1f44d.svg",
[ 0x1F44E ] = "Emoji u1f44e.svg",
[ 0x1F44F ] = "Emoji u1f44f.svg",
[ 0x1F450 ] = "Emoji u1f450.svg",
[ 0x1F451 ] = "Emoji u1f451.svg",
[ 0x1F452 ] = "Emoji u1f452.svg",
[ 0x1F453 ] = "Emoji u1f453.svg",
[ 0x1F454 ] = "Emoji u1f454.svg",
[ 0x1F455 ] = "Emoji u1f455.svg",
[ 0x1F456 ] = "Emoji u1f456.svg",
[ 0x1F457 ] = "Emoji u1f457.svg",
[ 0x1F458 ] = "Emoji u1f458.svg",
[ 0x1F459 ] = "Emoji u1f459.svg",
[ 0x1F45A ] = "Emoji u1f45a.svg",
[ 0x1F45B ] = "Emoji u1f45b.svg",
[ 0x1F45C ] = "Emoji u1f45c.svg",
[ 0x1F45D ] = "Emoji u1f45d.svg",
[ 0x1F45E ] = "Emoji u1f45e.svg",
[ 0x1F45F ] = "Emoji u1f45f.svg",
[ 0x1F460 ] = "Emoji u1f460.svg",
[ 0x1F461 ] = "Emoji u1f461.svg",
[ 0x1F462 ] = "Emoji u1f462.svg",
[ 0x1F463 ] = "Emoji u1f463.svg",
[ 0x1F464 ] = "Emoji u1f464.svg",
[ 0x1F465 ] = "Emoji u1f465.svg",
[ 0x1F466 ] = "Emoji u1f466.svg",
[ 0x1F467 ] = "Emoji u1f467.svg",
[ 0x1F468 ] = "Emoji u1f468.svg",
[ 0x1F469 ] = "Emoji u1f469.svg",
[ 0x1F46A ] = "Emoji u1f46a.svg",
[ 0x1F46B ] = "Emoji u1f46b.svg",
[ 0x1F46C ] = "Emoji u1f46c.svg",
[ 0x1F46D ] = "Emoji u1f46d.svg",
[ 0x1F46E ] = "Emoji u1f46e.svg",
[ 0x1F46F ] = "Emoji u1f46f.svg",
[ 0x1F470 ] = "Emoji u1f470.svg",
[ 0x1F471 ] = "Emoji u1f471.svg",
[ 0x1F472 ] = "Emoji u1f472.svg",
[ 0x1F473 ] = "Emoji u1f473.svg",
[ 0x1F474 ] = "Emoji u1f474.svg",
[ 0x1F475 ] = "Emoji u1f475.svg",
[ 0x1F476 ] = "Emoji u1f476.svg",
[ 0x1F477 ] = "Emoji u1f477.svg",
[ 0x1F478 ] = "Emoji u1f478.svg",
[ 0x1F479 ] = "Emoji u1f479.svg",
[ 0x1F47A ] = "Emoji u1f47a.svg",
[ 0x1F47B ] = "Emoji u1f47b.svg",
[ 0x1F47C ] = "Emoji u1f47c.svg",
[ 0x1F47D ] = "Emoji u1f47d.svg",
[ 0x1F47E ] = "Emoji u1f47e.svg",
[ 0x1F47F ] = "Emoji u1f47f.svg",
[ 0x1F480 ] = "Emoji u1f480.svg",
[ 0x1F481 ] = "Emoji u1f481.svg",
[ 0x1F482 ] = "Emoji u1f482.svg",
[ 0x1F483 ] = "Emoji u1f483.svg",
[ 0x1F484 ] = "Emoji u1f484.svg",
[ 0x1F485 ] = "Emoji u1f485.svg",
[ 0x1F486 ] = "Emoji u1f486.svg",
[ 0x1F487 ] = "Emoji u1f487.svg",
[ 0x1F488 ] = "Emoji u1f488.svg",
[ 0x1F489 ] = "Emoji u1f489.svg",
[ 0x1F48A ] = "Emoji u1f48a.svg",
[ 0x1F48B ] = "Emoji u1f48b.svg",
[ 0x1F48C ] = "Emoji u1f48c.svg",
[ 0x1F48D ] = "Emoji u1f48d.svg",
[ 0x1F48E ] = "Emoji u1f48e.svg",
[ 0x1F48F ] = "Emoji u1f48f.svg",
[ 0x1F490 ] = "Emoji u1f490.svg",
[ 0x1F491 ] = "Emoji u1f491.svg",
[ 0x1F492 ] = "Emoji u1f492.svg",
[ 0x1F493 ] = "Emoji u1f493.svg",
[ 0x1F494 ] = "Emoji u1f494.svg",
[ 0x1F495 ] = "Emoji u1f495.svg",
[ 0x1F496 ] = "Emoji u1f496.svg",
[ 0x1F497 ] = "Emoji u1f497.svg",
[ 0x1F498 ] = "Emoji u1f498.svg",
[ 0x1F499 ] = "Emoji u1f499.svg",
[ 0x1F49A ] = "Emoji u1f49a.svg",
[ 0x1F49B ] = "Emoji u1f49b.svg",
[ 0x1F49C ] = "Emoji u1f49c.svg",
[ 0x1F49D ] = "Emoji u1f49d.svg",
[ 0x1F49E ] = "Emoji u1f49e.svg",
[ 0x1F49F ] = "Emoji u1f49f.svg",
[ 0x1F4A0 ] = "Emoji u1f4a0.svg",
[ 0x1F4A1 ] = "Emoji u1f4a1.svg",
[ 0x1F4A2 ] = "Emoji u1f4a2.svg",
[ 0x1F4A3 ] = "Emoji u1f4a3.svg",
[ 0x1F4A4 ] = "Emoji u1f4a4.svg",
[ 0x1F4A5 ] = "Emoji u1f4a5.svg",
[ 0x1F4A6 ] = "Emoji u1f4a6.svg",
[ 0x1F4A7 ] = "Emoji u1f4a7.svg",
[ 0x1F4A8 ] = "Emoji u1f4a8.svg",
[ 0x1F4A9 ] = "Emoji u1f4a9.svg",
[ 0x1F4AA ] = "Emoji u1f4aa.svg",
[ 0x1F4AB ] = "Emoji u1f4ab.svg",
[ 0x1F4AC ] = "Emoji u1f4ac.svg",
[ 0x1F4AD ] = "Emoji u1f4ad.svg",
[ 0x1F4AE ] = "Emoji u1f4ae.svg",
[ 0x1F4AF ] = "Emoji u1f4af.svg",
[ 0x1F4B0 ] = "Emoji u1f4b0.svg",
[ 0x1F4B1 ] = "Emoji u1f4b1.svg",
[ 0x1F4B2 ] = "Emoji u1f4b2.svg",
[ 0x1F4B3 ] = "Emoji u1f4b3.svg",
[ 0x1F4B4 ] = "Emoji u1f4b4.svg",
[ 0x1F4B5 ] = "Emoji u1f4b5.svg",
[ 0x1F4B6 ] = "Emoji u1f4b6.svg",
[ 0x1F4B7 ] = "Emoji u1f4b7.svg",
[ 0x1F4B8 ] = "Emoji u1f4b8.svg",
[ 0x1F4B9 ] = "Emoji u1f4b9.svg",
[ 0x1F4BA ] = "Emoji u1f4ba.svg",
[ 0x1F4BB ] = "Emoji u1f4bb.svg",
[ 0x1F4BC ] = "Emoji u1f4bc.svg",
[ 0x1F4BD ] = "Emoji u1f4bd.svg",
[ 0x1F4BE ] = "Emoji u1f4be.svg",
[ 0x1F4BF ] = "Emoji u1f4bf.svg",
[ 0x1F4C0 ] = "Emoji u1f4c0.svg",
[ 0x1F4C1 ] = "Emoji u1f4c1.svg",
[ 0x1F4C2 ] = "Emoji u1f4c2.svg",
[ 0x1F4C3 ] = "Emoji u1f4c3.svg",
[ 0x1F4C4 ] = "Emoji u1f4c4.svg",
[ 0x1F4C5 ] = "Emoji u1f4c5.svg",
[ 0x1F4C6 ] = "Emoji u1f4c6.svg",
[ 0x1F4C7 ] = "Emoji u1f4c7.svg",
[ 0x1F4C8 ] = "Emoji u1f4c8.svg",
[ 0x1F4C9 ] = "Emoji u1f4c9.svg",
[ 0x1F4CA ] = "Emoji u1f4ca.svg",
[ 0x1F4CB ] = "Emoji u1f4cb.svg",
[ 0x1F4CC ] = "Emoji u1f4cc.svg",
[ 0x1F4CD ] = "Emoji u1f4cd.svg",
[ 0x1F4CE ] = "Emoji u1f4ce.svg",
[ 0x1F4CF ] = "Emoji u1f4cf.svg",
[ 0x1F4D0 ] = "Emoji u1f4d0.svg",
[ 0x1F4D1 ] = "Emoji u1f4d1.svg",
[ 0x1F4D2 ] = "Emoji u1f4d2.svg",
[ 0x1F4D3 ] = "Emoji u1f4d3.svg",
[ 0x1F4D4 ] = "Emoji u1f4d4.svg",
[ 0x1F4D5 ] = "Emoji u1f4d5.svg",
[ 0x1F4D6 ] = "Emoji u1f4d6.svg",
[ 0x1F4D7 ] = "Emoji u1f4d7.svg",
[ 0x1F4D8 ] = "Emoji u1f4d8.svg",
[ 0x1F4D9 ] = "Emoji u1f4d9.svg",
[ 0x1F4DA ] = "Emoji u1f4da.svg",
[ 0x1F4DB ] = "Emoji u1f4db.svg",
[ 0x1F4DC ] = "Emoji u1f4dc.svg",
[ 0x1F4DD ] = "Emoji u1f4dd.svg",
[ 0x1F4DE ] = "Emoji u1f4de.svg",
[ 0x1F4DF ] = "Emoji u1f4df.svg",
[ 0x1F4E0 ] = "Emoji u1f4e0.svg",
[ 0x1F4E1 ] = "Emoji u1f4e1.svg",
[ 0x1F4E2 ] = "Emoji u1f4e2.svg",
[ 0x1F4E3 ] = "Emoji u1f4e3.svg",
[ 0x1F4E4 ] = "Emoji u1f4e4.svg",
[ 0x1F4E5 ] = "Emoji u1f4e5.svg",
[ 0x1F4E6 ] = "Emoji u1f4e6.svg",
[ 0x1F4E7 ] = "Emoji u1f4e7.svg",
[ 0x1F4E8 ] = "Emoji u1f4e8.svg",
[ 0x1F4E9 ] = "Emoji u1f4e9.svg",
[ 0x1F4EA ] = "Emoji u1f4ea.svg",
[ 0x1F4EB ] = "Emoji u1f4eb.svg",
[ 0x1F4EC ] = "Emoji u1f4ec.svg",
[ 0x1F4ED ] = "Emoji u1f4ed.svg",
[ 0x1F4EE ] = "Emoji u1f4ee.svg",
[ 0x1F4EF ] = "Emoji u1f4ef.svg",
[ 0x1F4F0 ] = "Emoji u1f4f0.svg",
[ 0x1F4F1 ] = "Emoji u1f4f1.svg",
[ 0x1F4F2 ] = "Emoji u1f4f2.svg",
[ 0x1F4F3 ] = "Emoji u1f4f3.svg",
[ 0x1F4F4 ] = "Emoji u1f4f4.svg",
[ 0x1F4F5 ] = "Emoji u1f4f5.svg",
[ 0x1F4F6 ] = "Emoji u1f4f6.svg",
[ 0x1F4F7 ] = "Emoji u1f4f7.svg",
[ 0x1F4F9 ] = "Emoji u1f4f9.svg",
[ 0x1F4FA ] = "Emoji u1f4fa.svg",
[ 0x1F4FB ] = "Emoji u1f4fb.svg",
[ 0x1F4FC ] = "Emoji u1f4fc.svg",
[ 0x1F4FD ] = "Noto Project Movie Camera Emoji.svg",
[ 0x1F500 ] = "Emoji u1f500.svg",
[ 0x1F501 ] = "Emoji u1f501.svg",
[ 0x1F502 ] = "Emoji u1f502.svg",
[ 0x1F503 ] = "Emoji u1f503.svg",
[ 0x1F504 ] = "Emoji u1f504.svg",
[ 0x1F505 ] = "Emoji u1f505.svg",
[ 0x1F506 ] = "Emoji u1f506.svg",
[ 0x1F507 ] = "Emoji u1f507.svg",
[ 0x1F508 ] = "Emoji u1f508.svg",
[ 0x1F509 ] = "Emoji u1f509.svg",
[ 0x1F50A ] = "Emoji u1f50a.svg",
[ 0x1F50B ] = "Emoji u1f50b.svg",
[ 0x1F50C ] = "Emoji u1f50c.svg",
[ 0x1F50D ] = "Emoji u1f50d.svg",
[ 0x1F50E ] = "Emoji u1f50e.svg",
[ 0x1F50F ] = "Emoji u1f50f.svg",
[ 0x1F510 ] = "Emoji u1f510.svg",
[ 0x1F511 ] = "Emoji u1f511.svg",
[ 0x1F512 ] = "Emoji u1f512.svg",
[ 0x1F513 ] = "Emoji u1f513.svg",
[ 0x1F514 ] = "Emoji u1f514.svg",
[ 0x1F515 ] = "Emoji u1f515.svg",
[ 0x1F516 ] = "Emoji u1f516.svg",
[ 0x1F517 ] = "Emoji u1f517.svg",
[ 0x1F518 ] = "Emoji u1f518.svg",
[ 0x1F519 ] = "Emoji u1f519.svg",
[ 0x1F51A ] = "Emoji u1f51a.svg",
[ 0x1F51B ] = "Emoji u1f51b.svg",
[ 0x1F51C ] = "Emoji u1f51c.svg",
[ 0x1F51D ] = "Emoji u1f51d.svg",
[ 0x1F51E ] = "Emoji u1f51e.svg",
[ 0x1F51F ] = "Emoji u1f51f.svg",
[ 0x1F520 ] = "Emoji u1f520.svg",
[ 0x1F521 ] = "Emoji u1f521.svg",
[ 0x1F522 ] = "Emoji u1f522.svg",
[ 0x1F523 ] = "Emoji u1f523.svg",
[ 0x1F524 ] = "Emoji u1f524.svg",
[ 0x1F525 ] = "Emoji u1f525.svg",
[ 0x1F526 ] = "Emoji u1f526.svg",
[ 0x1F527 ] = "Emoji u1f527.svg",
[ 0x1F528 ] = "Emoji u1f528.svg",
[ 0x1F529 ] = "Emoji u1f529.svg",
[ 0x1F52A ] = "Emoji u1f52a.svg",
[ 0x1F52B ] = "Emoji u1f52b.svg",
[ 0x1F52C ] = "Emoji u1f52c.svg",
[ 0x1F52D ] = "Emoji u1f52d.svg",
[ 0x1F52E ] = "Emoji u1f52e.svg",
[ 0x1F52F ] = "Emoji u1f52f.svg",
[ 0x1F530 ] = "Emoji u1f530.svg",
[ 0x1F531 ] = "Emoji u1f531.svg",
[ 0x1F532 ] = "Emoji u1f532.svg",
[ 0x1F533 ] = "Emoji u1f533.svg",
[ 0x1F534 ] = "Emoji u1f534.svg",
[ 0x1F535 ] = "Emoji u1f535.svg",
[ 0x1F536 ] = "Emoji u1f536.svg",
[ 0x1F537 ] = "Emoji u1f537.svg",
[ 0x1F538 ] = "Emoji u1f538.svg",
[ 0x1F539 ] = "Emoji u1f539.svg",
[ 0x1F53A ] = "Emoji u1f53a.svg",
[ 0x1F53B ] = "Emoji u1f53b.svg",
[ 0x1F53C ] = "Emoji u1f53c.svg",
[ 0x1F53D ] = "Emoji u1f53d.svg",
[ 0x1F550 ] = "Emoji u1f550.svg",
[ 0x1F551 ] = "Emoji u1f551.svg",
[ 0x1F552 ] = "Emoji u1f552.svg",
[ 0x1F553 ] = "Emoji u1f553.svg",
[ 0x1F554 ] = "Emoji u1f554.svg",
[ 0x1F555 ] = "Emoji u1f555.svg",
[ 0x1F556 ] = "Emoji u1f556.svg",
[ 0x1F557 ] = "Emoji u1f557.svg",
[ 0x1F558 ] = "Emoji u1f558.svg",
[ 0x1F559 ] = "Emoji u1f559.svg",
[ 0x1F55A ] = "Emoji u1f55a.svg",
[ 0x1F55B ] = "Emoji u1f55b.svg",
[ 0x1F55C ] = "Emoji u1f55c.svg",
[ 0x1F55D ] = "Emoji u1f55d.svg",
[ 0x1F55E ] = "Emoji u1f55e.svg",
[ 0x1F55F ] = "Emoji u1f55f.svg",
[ 0x1F560 ] = "Emoji u1f560.svg",
[ 0x1F561 ] = "Emoji u1f561.svg",
[ 0x1F562 ] = "Emoji u1f562.svg",
[ 0x1F563 ] = "Emoji u1f563.svg",
[ 0x1F564 ] = "Emoji u1f564.svg",
[ 0x1F565 ] = "Emoji u1f565.svg",
[ 0x1F566 ] = "Emoji u1f566.svg",
[ 0x1F567 ] = "Emoji u1f567.svg",
[ 0x1F5FB ] = "Emoji u1f5fb.svg",
[ 0x1F5FC ] = "Emoji u1f5fc.svg",
[ 0x1F5FD ] = "Emoji u1f5fd.svg",
[ 0x1F5FE ] = "Emoji u1f5fe.svg",
[ 0x1F5FF ] = "Emoji u1f5ff.svg",
[ 0x1F600 ] = "Emoji u1f600.svg",
[ 0x1F601 ] = "Emoji u1f601.svg",
[ 0x1F602 ] = "Emoji u1f602.svg",
[ 0x1F603 ] = "Emoji u1f603.svg",
[ 0x1F604 ] = "Emoji u1f604.svg",
[ 0x1F605 ] = "Emoji u1f605.svg",
[ 0x1F606 ] = "Emoji u1f606.svg",
[ 0x1F607 ] = "Emoji u1f607.svg",
[ 0x1F608 ] = "Emoji u1f608.svg",
[ 0x1F609 ] = "Emoji u1f609.svg",
[ 0x1F60A ] = "Emoji u1f60a.svg",
[ 0x1F60B ] = "Emoji u1f60b.svg",
[ 0x1F60C ] = "Emoji u1f60c.svg",
[ 0x1F60D ] = "Emoji u1f60d.svg",
[ 0x1F60E ] = "Emoji u1f60e.svg",
[ 0x1F60F ] = "Emoji u1f60f.svg",
[ 0x1F610 ] = "Emoji u1f610.svg",
[ 0x1F611 ] = "Emoji u1f611.svg",
[ 0x1F612 ] = "Emoji u1f612.svg",
[ 0x1F613 ] = "Emoji u1f613.svg",
[ 0x1F614 ] = "Emoji u1f614.svg",
[ 0x1F615 ] = "Emoji u1f615.svg",
[ 0x1F616 ] = "Emoji u1f616.svg",
[ 0x1F617 ] = "Emoji u1f617.svg",
[ 0x1F618 ] = "Emoji u1f618.svg",
[ 0x1F619 ] = "Emoji u1f619.svg",
[ 0x1F61A ] = "Emoji u1f61a.svg",
[ 0x1F61B ] = "Emoji u1f61b.svg",
[ 0x1F61C ] = "Emoji u1f61c.svg",
[ 0x1F61D ] = "Emoji u1f61d.svg",
[ 0x1F61E ] = "Emoji u1f61e.svg",
[ 0x1F61F ] = "Emoji u1f61f.svg",
[ 0x1F620 ] = "Emoji u1f620.svg",
[ 0x1F621 ] = "Emoji u1f621.svg",
[ 0x1F622 ] = "Emoji u1f622.svg",
[ 0x1F623 ] = "Emoji u1f623.svg",
[ 0x1F624 ] = "Emoji u1f624.svg",
[ 0x1F625 ] = "Emoji u1f625.svg",
[ 0x1F626 ] = "Emoji u1f626.svg",
[ 0x1F627 ] = "Emoji u1f627.svg",
[ 0x1F628 ] = "Emoji u1f628.svg",
[ 0x1F629 ] = "Emoji u1f629.svg",
[ 0x1F62A ] = "Emoji u1f62a.svg",
[ 0x1F62B ] = "Emoji u1f62b.svg",
[ 0x1F62C ] = "Emoji u1f62c.svg",
[ 0x1F62D ] = "Emoji u1f62d.svg",
[ 0x1F62E ] = "Emoji u1f62e.svg",
[ 0x1F62F ] = "Emoji u1f62f.svg",
[ 0x1F630 ] = "Emoji u1f630.svg",
[ 0x1F631 ] = "Emoji u1f631.svg",
[ 0x1F632 ] = "Emoji u1f632.svg",
[ 0x1F633 ] = "Emoji u1f633.svg",
[ 0x1F634 ] = "Emoji u1f634.svg",
[ 0x1F635 ] = "Emoji u1f635.svg",
[ 0x1F636 ] = "Emoji u1f636.svg",
[ 0x1F637 ] = "Emoji u1f637.svg",
[ 0x1F638 ] = "Emoji u1f638.svg",
[ 0x1F639 ] = "Emoji u1f639.svg",
[ 0x1F63A ] = "Emoji u1f63a.svg",
[ 0x1F63B ] = "Emoji u1f63b.svg",
[ 0x1F63C ] = "Emoji u1f63c.svg",
[ 0x1F63D ] = "Emoji u1f63d.svg",
[ 0x1F63E ] = "Emoji u1f63e.svg",
[ 0x1F63F ] = "Emoji u1f63f.svg",
[ 0x1F640 ] = "Emoji u1f640.svg",
[ 0x1F645 ] = "Emoji u1f645.svg",
[ 0x1F646 ] = "Emoji u1f646.svg",
[ 0x1F647 ] = "Emoji u1f647.svg",
[ 0x1F648 ] = "Emoji u1f648.svg",
[ 0x1F649 ] = "Emoji u1f649.svg",
[ 0x1F64B ] = "Emoji u1f64b.svg",
[ 0x1F64C ] = "Emoji u1f64c.svg",
[ 0x1F64D ] = "Emoji u1f64d.svg",
[ 0x1F64E ] = "Emoji u1f64e.svg",
[ 0x1F64F ] = "Emoji u1f64f.svg",
[ 0x1F64A ] = "Emoji u1f64a.svg",
[ 0x1F680 ] = "Emoji u1f680.svg",
[ 0x1F681 ] = "Emoji u1f681.svg",
[ 0x1F682 ] = "Emoji u1f682.svg",
[ 0x1F683 ] = "Emoji u1f683.svg",
[ 0x1F684 ] = "Emoji u1f684.svg",
[ 0x1F685 ] = "Emoji u1f685.svg",
[ 0x1F686 ] = "Emoji u1f686.svg",
[ 0x1F687 ] = "Emoji u1f687.svg",
[ 0x1F688 ] = "Emoji u1f688.svg",
[ 0x1F689 ] = "Emoji u1f689.svg",
[ 0x1F68A ] = "Emoji u1f68a.svg",
[ 0x1F68B ] = "Emoji u1f68b.svg",
[ 0x1F68C ] = "Emoji u1f68c.svg",
[ 0x1F68D ] = "Emoji u1f68d.svg",
[ 0x1F68E ] = "Emoji u1f68e.svg",
[ 0x1F68F ] = "Emoji u1f68f.svg",
[ 0x1F690 ] = "Emoji u1f690.svg",
[ 0x1F691 ] = "Emoji u1f691.svg",
[ 0x1F692 ] = "Emoji u1f692.svg",
[ 0x1F693 ] = "Emoji u1f693.svg",
[ 0x1F694 ] = "Emoji u1f694.svg",
[ 0x1F695 ] = "Emoji u1f695.svg",
[ 0x1F696 ] = "Emoji u1f696.svg",
[ 0x1F697 ] = "Emoji u1f697.svg",
[ 0x1F698 ] = "Emoji u1f698.svg",
[ 0x1F699 ] = "Emoji u1f699.svg",
[ 0x1F69A ] = "Emoji u1f69a.svg",
[ 0x1F69B ] = "Emoji u1f69b.svg",
[ 0x1F69C ] = "Emoji u1f69c.svg",
[ 0x1F69D ] = "Emoji u1f69d.svg",
[ 0x1F69E ] = "Emoji u1f69e.svg",
[ 0x1F69F ] = "Emoji u1f69f.svg",
[ 0x1F6A0 ] = "Emoji u1f6a0.svg",
[ 0x1F6A1 ] = "Emoji u1f6a1.svg",
[ 0x1F6A2 ] = "Emoji u1f6a2.svg",
[ 0x1F6A3 ] = "Emoji u1f6a3.svg",
[ 0x1F6A4 ] = "Emoji u1f6a4.svg",
[ 0x1F6A5 ] = "Emoji u1f6a5.svg",
[ 0x1F6A6 ] = "Emoji u1f6a6.svg",
[ 0x1F6A7 ] = "Emoji u1f6a7.svg",
[ 0x1F6A8 ] = "Emoji u1f6a8.svg",
[ 0x1F6A9 ] = "Emoji u1f6a9.svg",
[ 0x1F6AA ] = "Emoji u1f6aa.svg",
[ 0x1F6AB ] = "Emoji u1f6ab.svg",
[ 0x1F6AC ] = "Emoji u1f6ac.svg",
[ 0x1F6AD ] = "Emoji u1f6ad.svg",
[ 0x1F6AE ] = "Emoji u1f6ae.svg",
[ 0x1F6AF ] = "Emoji u1f6af.svg",
[ 0x1F6B0 ] = "Emoji u1f6b0.svg",
[ 0x1F6B1 ] = "Emoji u1f6b1.svg",
[ 0x1F6B2 ] = "Emoji u1f6b2.svg",
[ 0x1F6B3 ] = "Emoji u1f6b3.svg",
[ 0x1F6B4 ] = "Emoji u1f6b4.svg",
[ 0x1F6B5 ] = "Emoji u1f6b5.svg",
[ 0x1F6B6 ] = "Emoji u1f6b6.svg",
[ 0x1F6B7 ] = "Emoji u1f6b7.svg",
[ 0x1F6B8 ] = "Emoji u1f6b8.svg",
[ 0x1F6B9 ] = "Emoji u1f6b9.svg",
[ 0x1F6BA ] = "Emoji u1f6ba.svg",
[ 0x1F6BB ] = "Emoji u1f6bb.svg",
[ 0x1F6BC ] = "Emoji u1f6bc.svg",
[ 0x1F6BD ] = "Emoji u1f6bd.svg",
[ 0x1F6BE ] = "Emoji u1f6be.svg",
[ 0x1F6BF ] = "Emoji u1f6bf.svg",
[ 0x1F6C0 ] = "Emoji u1f6c0.svg",
[ 0x1F6C1 ] = "Emoji u1f6c1.svg",
[ 0x1F6C2 ] = "Emoji u1f6c2.svg",
[ 0x1F6C3 ] = "Emoji u1f6c3.svg",
[ 0x1F6C4 ] = "Emoji u1f6c4.svg",
[ 0x1F6C5 ] = "Emoji u1f6c5.svg",
[ 0x1F6C7 ] = "ProhibitionSign2.svg",
[ 0x1F700 ] = "U+1F700.svg",
[ 0x1F701 ] = "Air symbol (alchemical).svg",
[ 0x1F702 ] = "Fire symbol (alchemical).svg",
[ 0x1F703 ] = "Earth symbol (alchemical).svg",
[ 0x1F704 ] = "Water symbol (alchemical).svg",
[ 0x1F705 ] = "U+1F705.svg",
[ 0x1F706 ] = "U+1F706.svg",
[ 0x1F707 ] = "U+1F707.svg",
[ 0x1F708 ] = "U+1F708.svg",
[ 0x1F709 ] = "U+1F709.svg",
[ 0x1F70A ] = "U+1F70A.svg",
[ 0x1F70B ] = "U+1F70B.svg",
[ 0x1F70C ] = "U+1F70C.svg",
[ 0x1F70D ] = "Sulphur symbol (fixed width).svg",
[ 0x1F70E ] = "U+1F70E.svg",
[ 0x1F70F ] = "Black sulfur symbol (fixed width).svg",
[ 0x1F710 ] = "U+1F710.svg",
[ 0x1F711 ] = "U+1F711.svg",
[ 0x1F712 ] = "U+1F712.svg",
[ 0x1F713 ] = "U+1F713.svg",
[ 0x1F714 ] = "Salt symbol (alchemical).svg",
[ 0x1F715 ] = "Nitrogen symbol (Dalton).svg",
[ 0x1F716 ] = "U+1F716.svg",
[ 0x1F717 ] = "U+1F717.svg",
[ 0x1F718 ] = "Taurus symbol (Moskowitz, fixed width).svg",
[ 0x1F719 ] = "U+1F719.svg",
[ 0x1F71A ] = "Old symbol for sun.svg",
[ 0x1F71B ] = "U+1F71B.svg",
[ 0x1F71C ] = "U+1F71C.svg",
[ 0x1F71D ] = "U+1F71D.svg",
[ 0x1F71E ] = "U+1F71E.svg",
[ 0x1F71F ] = "U+1F71F.svg",
[ 0x1F720 ] = "U+1F720.svg",
[ 0x1F721 ] = "U+1F721.svg",
[ 0x1F722 ] = "U+1F722.svg",
[ 0x1F723 ] = "U+1F723.svg",
[ 0x1F724 ] = "U+1F724.svg",
[ 0x1F725 ] = "U+1F725.svg",
[ 0x1F726 ] = "U+1F726.svg",
[ 0x1F727 ] = "U+1F727.svg",
[ 0x1F728 ] = "Earth symbol (fixed width).svg",
[ 0x1F729 ] = "U+1F729.svg",
[ 0x1F72A ] = "U+1F72A.svg",
[ 0x1F72B ] = "U+1F72B.svg",
[ 0x1F72C ] = "U+1F72C.svg",
[ 0x1F72D ] = "U+1F72D.svg",
[ 0x1F72E ] = "U+1F72E.svg",
[ 0x1F72F ] = "Atira symbol (fixed width).svg",
[ 0x1F730 ] = "U+1F730.svg",
[ 0x1F731 ] = "U+1F731.svg",
[ 0x1F732 ] = "U+1F732.svg",
[ 0x1F733 ] = "U+1F733.svg",
[ 0x1F734 ] = "U+1F734.svg",
[ 0x1F735 ] = "U+1F735.svg",
[ 0x1F736 ] = "U+1F736.svg",
[ 0x1F737 ] = "U+1F737.svg",
[ 0x1F738 ] = "U+1F738.svg",
[ 0x1F739 ] = "U+1F739.svg",
[ 0x1F73A ] = "Arsenic symbol.svg",
[ 0x1F73B ] = "U+1F73B.svg",
[ 0x1F73C ] = "U+1F73C.svg",
[ 0x1F73D ] = "U+1F73D.svg",
[ 0x1F73E ] = "U+1F73E.svg",
[ 0x1F73F ] = "U+1F73F.svg",
[ 0x1F740 ] = "U+1F740.svg",
[ 0x1F741 ] = "Neptune symbol (fixed width).svg",
[ 0x1F742 ] = "U+1F742.svg",
[ 0x1F743 ] = "U+1F743.svg",
[ 0x1F744 ] = "U+1F744.svg",
[ 0x1F745 ] = "U+1F745.svg",
[ 0x1F746 ] = "U+1F746.svg",
[ 0x1F747 ] = "U+1F747.svg",
[ 0x1F748 ] = "U+1F748.svg",
[ 0x1F749 ] = "U+1F749.svg",
[ 0x1F74A ] = "U+1F74A.svg",
[ 0x1F74B ] = "U+1F74B.svg",
[ 0x1F74C ] = "U+1F74C.svg",
[ 0x1F74D ] = "U+1F74D.svg",
[ 0x1F74E ] = "Caput mortuum.svg",
[ 0x1F74F ] = "U+1F74F.svg",
[ 0x1F750 ] = "U+1F750.svg",
[ 0x1F751 ] = "U+1F751.svg",
[ 0x1F752 ] = "U+1F752.svg",
[ 0x1F753 ] = "U+1F753.svg",
[ 0x1F754 ] = "U+1F754.svg",
[ 0x1F755 ] = "U+1F755.svg",
[ 0x1F756 ] = "U+1F756.svg",
[ 0x1F757 ] = "U+1F757.svg",
[ 0x1F758 ] = "U+1F758.svg",
[ 0x1F759 ] = "U+1F759.svg",
[ 0x1F75A ] = "U+1F75A.svg",
[ 0x1F75B ] = "U+1F75B.svg",
[ 0x1F75C ] = "U+1F75C.svg",
[ 0x1F75D ] = "U+1F75D.svg",
[ 0x1F75E ] = "Libra symbol (Moskowitz, fixed width).svg",
[ 0x1F75F ] = "U+1F75F.svg",
[ 0x1F760 ] = "U+1F760.svg",
[ 0x1F761 ] = "U+1F761.svg",
[ 0x1F762 ] = "U+1F762.svg",
[ 0x1F763 ] = "U+1F763.svg",
[ 0x1F764 ] = "U+1F764.svg",
[ 0x1F765 ] = "U+1F765.svg",
[ 0x1F766 ] = "U+1F766.svg",
[ 0x1F767 ] = "U+1F767.svg",
[ 0x1F768 ] = "U+1F768.svg",
[ 0x1F769 ] = "U+1F769.svg",
[ 0x1F76A ] = "Russian astrological symbol quintile.svg",
[ 0x1F76B ] = "U+1F76B.svg",
[ 0x1F76C ] = "U+1F76C.svg",
[ 0x1F76D ] = "U+1F76D.svg",
[ 0x1F76E ] = "U+1F76E.svg",
[ 0x1F76F ] = "U+1F76F.svg",
[ 0x1F770 ] = "U+1F770.svg",
[ 0x1F771 ] = "U+1F771.svg",
[ 0x1F772 ] = "U+1F772.svg",
[ 0x1F773 ] = "U+1F773.svg",
[ 0x1F774 ] = "Part of Fortune symbol.svg",
[ 0x1F775 ] = "Occultation symbol.svg",
[ 0x1F776 ] = "Lunar eclipse symbol.svg",
[ 0x1F77B ] = "Haumea symbol (fixed width).svg",
[ 0x1F77C ] = "Makemake symbol (fixed width).svg",
[ 0x1F77D ] = "Gonggong symbol (fixed width).svg",
[ 0x1F77E ] = "Quaoar symbol (fixed width).svg",
[ 0x1F77F ] = "Orcus symbol (fixed width).svg",
[ 0x1F860 ] = "U+1F860 WIDE-HEADED LEFTWARDS LIGHT BARB ARROW.svg",
[ 0x1F861 ] = "U+1F861 WIDE-HEADED UPWARDS LIGHT BARB ARROW.svg",
[ 0x1F862 ] = "U+1F862 WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW.svg",
[ 0x1F863 ] = "U+1F863 WIDE-HEADED DOWNWARDS LIGHT BARB ARROW.svg",
[ 0x1FB1C ] = "U+1FB1C.svg",
[ 0x1FBF0 ] = "Seven segment display 0 digit (black).svg",
[ 0x1FBF1 ] = "Seven segment display 1 digit (black).svg",
[ 0x1FBF2 ] = "Seven segment display 2 digit (black).svg",
[ 0x1FBF3 ] = "Seven segment display 3 digit (black).svg",
[ 0x1FBF4 ] = "Seven segment display 4 digit (black).svg",
[ 0x1FBF5 ] = "Seven segment display 5 digit (black).svg",
[ 0x1FBF6 ] = "Seven segment display 6 digit (black).svg",
[ 0x1FBF7 ] = "Seven segment display 7 digit (black).svg",
[ 0x1FBF8 ] = "Seven segment display 8 digit (black).svg",
[ 0x1FBF9 ] = "Seven segment display 9 digit (black).svg",
}
sed8a1yx39hhhmjb0ta8a9gcmvaxgle
পদ্মনাথ
0
51214
132162
131804
2022-08-09T04:04:38Z
Salil Kumar Mukherjee
7406
লিঙ্ক যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== ব্যুৎপত্তি ===
* [[সংস্কৃত]] জাত;
* [[পদ্ম]] + [[নাথ]]।
===উচ্চারণ===
* পদ্দোঁনাথ্।
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# সূর্য।
[[বিষয়শ্রেণী:৩-অক্ষর বিশিষ্ট বাংলা শব্দ]]
088abqh5nuf04vjl1am06sub0wiybft
পদ্মাকর
0
51231
132163
131805
2022-08-09T04:05:18Z
Salil Kumar Mukherjee
7406
লিঙ্ক যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== ব্যুৎপত্তি ===
* [[সংস্কৃত]] জাত;
* [[পদ্ম]] + [[আকর]]।
===উচ্চারণ===
* পদ্দাঁকর্।
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# যে জলাশয়ে অনেক [[পদ্ম]] ফোটে।
[[বিষয়শ্রেণী:৩-অক্ষর বিশিষ্ট বাংলা শব্দ]]
5zeaqucsubsmn3b1g9vc9ddfp8m60ui
পয়মন্ত
0
51242
132167
131808
2022-08-09T04:51:20Z
Salil Kumar Mukherjee
7406
লিঙ্ক যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== ব্যুৎপত্তি ===
* [[বাংলা]] জাত।
===উচ্চারণ===
* পয়োমন্তো।
=== বিশেষণ ===
{{বিশেষণ|bn}}
# ভাগ্যবান;
# লক্ষ্মীমন্ত;
# [[শুভ]] লক্ষণযুক্ত।
[[বিষয়শ্রেণী:৩-অক্ষর বিশিষ্ট বাংলা শব্দ]]
j5ty8ejbaf0r2me8113u6ryzzqfbw4n
পয়মাল
0
51243
132170
131809
2022-08-09T05:15:06Z
Salil Kumar Mukherjee
7406
লিঙ্ক যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== ব্যুৎপত্তি ===
* [[ফারসি]] জাত।
===উচ্চারণ===
* পয়্মাল্।
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# [[বরবাদ]];
# ধ্বংস।
[[বিষয়শ্রেণী:৩-অক্ষর বিশিষ্ট বাংলা শব্দ]]
698ht3r99yarmklaun0jpoklno5dkhw
পয়স্বিনী
0
51245
132173
131810
2022-08-09T05:21:32Z
Salil Kumar Mukherjee
7406
লিঙ্ক যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== ব্যুৎপত্তি ===
* [[সংস্কৃত]] জাত;
* পয়স্ + বিন্ + ঈ।
===উচ্চারণ===
* পয়োশ্শিনি।
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# [[প্রচুর]] দুধ দেয় এমন গাভি;
# [[নদী]]।
[[বিষয়শ্রেণী:৩-অক্ষর বিশিষ্ট বাংলা শব্দ]]
medc6o5q12tsew61cou5zdajcl4epyo
পরবাদ
0
51249
132174
131811
2022-08-09T05:22:44Z
Salil Kumar Mukherjee
7406
লিঙ্ক যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== ব্যুৎপত্তি ===
* [[সংস্কৃত]] জাত;
* [[পর]] + বাদ।
===উচ্চারণ===
* পরোবাদ্।
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# নিন্দা;
# [[অপবাদ]];
# [[অখ্যাতি]]।
[[বিষয়শ্রেণী:৩-অক্ষর বিশিষ্ট বাংলা শব্দ]]
94m9fwm0us7s8qbjf5xtpmdiudur1xn
পরিশেষ
0
51288
132190
131814
2022-08-09T05:47:54Z
Salil Kumar Mukherjee
7406
লিঙ্ক যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== ব্যুৎপত্তি ===
* [[সংস্কৃত]] জাত;
* পরি + [[শেষ]]।
===উচ্চারণ===
* পোরিশেশ্।
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# [[অবশেষ]];
# [[অবসান]];
# সমাপ্তি;
# উপসংহার।
[[বিষয়শ্রেণী:৩-অক্ষর বিশিষ্ট বাংলা শব্দ]]
r4xwjn647jci1omkxkdwwa4gcib4idh
পরিতাপ
0
51360
132185
131813
2022-08-09T05:40:15Z
Salil Kumar Mukherjee
7406
লিঙ্ক যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== ব্যুৎপত্তি ===
* [[সংস্কৃত]] জাত;
* পরি + তাপ।
===উচ্চারণ===
* পোরিতাপ্।
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# [[মনস্তাপ]];
# [[দুঃখ]];
# [[খেদ]]।
[[বিষয়শ্রেণী:৩-অক্ষর বিশিষ্ট বাংলা শব্দ]]
64pulrxkitr6xmiad62eya3acj0xjhm
পরাক্রম
0
52990
132181
131812
2022-08-09T05:34:29Z
Salil Kumar Mukherjee
7406
লিঙ্ক যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
===ব্যুৎপত্তি===
* [[সংস্কৃত]] জাত;
* পরা + √ক্রম্ + অ।
=== উচ্চারণ ===
* পরাক্ক্রোম্।
===বিশেষ্য===
{{বিশেষ্য|bn}}
# [[বল]];
# [[শক্তি]];
# [[বিক্রম]];
# বীরত্ব;
# প্রতাপ।
[[বিষয়শ্রেণী:৩-অক্ষর বিশিষ্ট বাংলা শব্দ]]
m0zy1m01q5650km263l3rb22omv0980
sacrilegious
0
53060
132192
132113
2022-08-09T08:56:02Z
Szilard
4981
/* উচ্চারণ */
wikitext
text/x-wiki
==ইংরেজি==
===উচ্চারণ===
* {{a|RP}} {{IPA|en|/sæk.ɹəˈlɪdʒ.əs/}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-sacrilegious.wav|Audio (Southern England)}}
* {{a|GA}} {{IPA|en|/sæk.ɹəˈlɪdʒ.əs/|/sæk.ɹəˈlidʒəs/}}
* {{rhymes|en|ɪdʒəs|iːdʒəs|s=4}}
===বিশেষণ===
{{en-বিশেষণ}}
#কোন পবিত্র ব্যক্তি, বস্তু ইত্যাদির অসম্মানকারী
kdu60jk4x7n9fkvs5zn42qqy08at7ns
132194
132192
2022-08-09T08:57:28Z
Szilard
4981
/* উচ্চারণ */
wikitext
text/x-wiki
==ইংরেজি==
===উচ্চারণ===
* {{a|RP}} {{IPA|en|/sæk.ɹəˈlɪdʒ.əs/}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-sacrilegious.wav|অডিও (দক্ষিণ ইংল্যান্ড)}}
* {{a|GA}} {{IPA|en|/sæk.ɹəˈlɪdʒ.əs/|/sæk.ɹəˈlidʒəs/}}
* {{rhymes|en|ɪdʒəs|iːdʒəs|s=4}}
===বিশেষণ===
{{en-বিশেষণ}}
#কোন পবিত্র ব্যক্তি, বস্তু ইত্যাদির অসম্মানকারী
csvvp99o95lhy4da81i4ud1gxhmlvkj
sacrosanct
0
53061
132196
132114
2022-08-09T09:03:54Z
Szilard
4981
wikitext
text/x-wiki
==ইংরেজি==
===উচ্চারণ===
* {{a|US}} {{IPA|en|/ˈsæk.ɹoʊˌsæŋkt/}}
** {{audio|en|LL-Q1860 (eng)-Vealhurl-sacrosanct.wav|অডিও (যুক্তরাজ্য)}}
===বিশেষণ===
{{en-বিশেষণ}}
#অতিপবিত্র
#অলঙ্ঘনীয়
fraa0alxnox9s2h2cp09d08h9f3dyja
sadden
0
53062
132198
132116
2022-08-09T09:05:40Z
Szilard
4981
/* ইংরেজি */
wikitext
text/x-wiki
==ইংরেজি==
===উচ্চারণ===
* {{IPA|en|/ˈsædən/}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-sadden.wav|অডিও (যুক্তরাজ্য)}}
* {{rhymes|en|ædən|s=2}}
===ক্রিয়া===
{{en-ক্রিয়া}}
#দুঃখিত করা
#দুঃখিত হওয়া
10bl37np3s0thfef8liyxkf7zdr9mn0
নাথ
0
53077
132158
2022-08-09T03:58:36Z
Salil Kumar Mukherjee
7406
ভুক্তি তৈরি
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# স্বামী।
81o4zug63nmndbaqfn24l5g0stzgot9
132159
132158
2022-08-09T04:01:03Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# স্বামী;
# প্রভু।
pd4h43mzxfm42jrjohqfqxqkgaa6eq1
132160
132159
2022-08-09T04:02:47Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# স্বামী;
# প্রভু;
# পালনকর্তা।
0kaeypfz2zvp2g7bl6b33w8scl6s02l
132161
132160
2022-08-09T04:03:57Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# স্বামী;
# প্রভু;
# পালনকর্তা;
# পদবিবিশেষ।
4g2672ir96w0sxm1nudfxugnwmmxnox
শুভ
0
53078
132164
2022-08-09T04:19:28Z
Salil Kumar Mukherjee
7406
ভুক্তি তৈরি
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
===বিশেষ্য===
{{বিশেষ্য|bn}}
# মঙ্গল।
mk6bjsvv32ynibp7b98l3s12mwpi4p0
132165
132164
2022-08-09T04:49:41Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
===বিশেষ্য===
{{বিশেষ্য|bn}}
# মঙ্গল;
# কল্যাণ।
dopq88nq9c5lx2s35l0e5kk8ngct8g3
132166
132165
2022-08-09T04:50:36Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
===বিশেষ্য===
{{বিশেষ্য|bn}}
# মঙ্গল;
# কল্যাণ;
# সৌভাগ্য।
c8dbdghj1rdd601xa2bjfvc5h8sgi4e
বরবাদ
0
53079
132168
2022-08-09T04:56:43Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষণ ===
{{বিশেষণ|bn}}
# পণ্ড;
# বিধ্বস্ত।
paj0094kkkdhvjf3o582ho7i7u3fu4g
132169
132168
2022-08-09T05:12:52Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষণ ===
{{বিশেষণ|bn}}
# পণ্ড;
# বিধ্বস্ত;
# ব্যবহারের অযোগ্য।
a67s4xlvjpryi2tm2k6rmefthim9gj0
প্রচুর
0
53080
132171
2022-08-09T05:19:56Z
Salil Kumar Mukherjee
7406
ভুক্তি তৈরি
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষণ ===
{{বিশেষণ|bn}}
# ঢের;
nm6v9pq3s9681ujkh6k44yg8c7mwhph
132172
132171
2022-08-09T05:20:58Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষণ ===
{{বিশেষণ|bn}}
# ঢের;
# পর্যাপ্ত।
fwd3d2fc6xedsa3abgvbh1xfsexc9cs
বিক্রম
0
53081
132175
2022-08-09T05:27:02Z
Salil Kumar Mukherjee
7406
ভুক্তি তৈরি
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
===বিশেষ্য===
{{বিশেষ্য|bn}}
# বল;
px0iz3bo3vyx0wxedndrwh0it7kt4pa
132176
132175
2022-08-09T05:27:37Z
Salil Kumar Mukherjee
7406
লিঙ্ক যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
===বিশেষ্য===
{{বিশেষ্য|bn}}
# [[বল]];
jur6504qfxuhasupqhapkh98pr8fs1u
132177
132176
2022-08-09T05:31:57Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
===বিশেষ্য===
{{বিশেষ্য|bn}}
# [[বল]];
# শক্তি।
iwgi1gvr1owjykh5cxjee4a8400js5g
132178
132177
2022-08-09T05:32:17Z
Salil Kumar Mukherjee
7406
লিঙ্ক যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
===বিশেষ্য===
{{বিশেষ্য|bn}}
# [[বল]];
# [[শক্তি]]।
i1a2cathm3305tx3jojvfmup3n2n76p
132179
132178
2022-08-09T05:33:10Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
===বিশেষ্য===
{{বিশেষ্য|bn}}
# [[বল]];
# [[শক্তি]];
# বীরত্ব।
h26fdh1zxwiip3zi00ldl3ca0hgoy81
132180
132179
2022-08-09T05:33:52Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
===বিশেষ্য===
{{বিশেষ্য|bn}}
# [[বল]];
# [[শক্তি]];
# বীরত্ব;
# প্রতাপ।
edn35k35q6xso4l0k3q2k1pmh92lyz6
খেদ
0
53082
132182
2022-08-09T05:38:01Z
Salil Kumar Mukherjee
7406
ভুক্তি তৈরি
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# আক্ষেপ;
fmrcptbfqpyp9oz0om8mpq9y2s98xhd
132183
132182
2022-08-09T05:39:04Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# আক্ষেপ;
# অনুতাপ।
pftidkbw84vc5bjdu4mw2erxac7mu2v
132184
132183
2022-08-09T05:39:40Z
Salil Kumar Mukherjee
7406
লিঙ্ক যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# আক্ষেপ;
# [[অনুতাপ]]।
povo340a704xvl7yhimxzjniptoes34
শেষ
0
53083
132186
2022-08-09T05:43:46Z
Salil Kumar Mukherjee
7406
ভুক্তি তৈরি
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# সমাপ্তি;
hbchmtjrtrfitcsi9xf38oe3vuu6lov
132187
132186
2022-08-09T05:44:46Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# সমাপ্তি;
# অবসান;
ew2xqp4xb7obxl3usuheb1qsslt7yrb
132188
132187
2022-08-09T05:45:56Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# সমাপ্তি;
# [[অবসান]];
# বিনাশ।
k7cw2kvtf50t5d55dm589kgbpdhleke
132189
132188
2022-08-09T05:46:59Z
Salil Kumar Mukherjee
7406
অর্থ যোগ
wikitext
text/x-wiki
== {{ভাষা|bn}} ==
=== বিশেষ্য ===
{{বিশেষ্য|bn}}
# সমাপ্তি;
# [[অবসান]];
# বিনাশ;
# সীমা।
2dtq0fz2cegos94fufwl4g48e96wncm
আলাপ:sacrilegious
1
53084
132193
2022-08-09T08:56:28Z
Szilard
4981
"{{আলাপ পাতা}}" দিয়ে পাতা তৈরি
wikitext
text/x-wiki
{{আলাপ পাতা}}
i154alzgrogbpha40792inz5hdkh7xx
আলাপ:sacrosanct
1
53085
132197
2022-08-09T09:04:13Z
Szilard
4981
"{{আলাপ পাতা}}" দিয়ে পাতা তৈরি
wikitext
text/x-wiki
{{আলাপ পাতা}}
i154alzgrogbpha40792inz5hdkh7xx
আলাপ:sadden
1
53086
132199
2022-08-09T09:06:11Z
Szilard
4981
"{{আলাপ পাতা}}" দিয়ে পাতা তৈরি
wikitext
text/x-wiki
{{আলাপ পাতা}}
i154alzgrogbpha40792inz5hdkh7xx