উইকিসংকলন
bnwikisource
https://bn.wikisource.org/wiki/%E0%A6%89%E0%A6%87%E0%A6%95%E0%A6%BF%E0%A6%B8%E0%A6%82%E0%A6%95%E0%A6%B2%E0%A6%A8:%E0%A6%AA%E0%A7%8D%E0%A6%B0%E0%A6%A7%E0%A6%BE%E0%A6%A8_%E0%A6%AA%E0%A6%BE%E0%A6%A4%E0%A6%BE
MediaWiki 1.47.0-wmf.17
first-letter
মিডিয়া
বিশেষ
আলাপ
ব্যবহারকারী
ব্যবহারকারী আলাপ
উইকিসংকলন
উইকিসংকলন আলোচনা
চিত্র
চিত্র আলোচনা
মিডিয়াউইকি
মিডিয়াউইকি আলোচনা
টেমপ্লেট
টেমপ্লেট আলোচনা
সাহায্য
সাহায্য আলোচনা
বিষয়শ্রেণী
বিষয়শ্রেণী আলোচনা
লেখক
লেখক আলাপ
নির্ঘণ্ট
নির্ঘণ্ট আলাপ
পাতা
পাতা আলাপ
প্রবেশদ্বার
প্রবেশদ্বার আলাপ
প্রকাশক
প্রকাশক আলোচনা
রচনা
রচনা আলাপ
অনুবাদ
অনুবাদ আলোচনা
TimedText
TimedText talk
মডিউল
মডিউল আলাপ
ইভেন্ট
ইভেন্ট আলোচনা
উইকিসংকলন:লিপিশালা
4
140
1996959
1996672
2026-08-31T10:59:17Z
ROCKY
2687
/* সিলেটী নাগরী লিপিতে রচিত বাংলা বইগুলির জন্য লিপ্যন্তর চালুর প্রস্তাব */ উত্তর
1996959
wikitext
text/x-wiki
{{প্রক্রিয়ার শীর্ষক
| শিরোনাম = লিপিশালা
| অনুচ্ছেদ =
| পূর্ববর্তী = [[উইকিসংকলন:সম্প্রদায়ের প্রবেশদ্বার|সম্প্রদায়ের প্রবেশদ্বার]]
| পরবর্তী = [[উইকিসংকলন:লিপিশালা/মহাফেজখানা|মহাফেজখানা]]
| সংক্ষিপ্ত = [[WS:S]]<br/>[[WS:আলোচনাসভা]]
| টীকা = লিপিশালা উইকিসংকলন সম্প্রদায় আলোচনা পৃষ্ঠা। যে কোন প্রশ্ন বা জিজ্ঞাসা মন্তব্য করুন মুক্ত মনে। আপনি যেকোন বর্তমান আলোচনায় মন্তব্য করতে পারেন অথবা একটি নতুন শুরু করতে পারেন।<!--প্রকল্প সদস্যরা প্রায়ই #wikisource IRC চ্যানেল webclient পাওয়া যাবে।--> এছাড়া এটি উইকিসংকলনের প্রশাসন সংক্রান্ত বিষয়ে আলোচনার জন্য নিবেদিত পাতা। এখানে প্রশাসন সংক্রান্ত বিষয়ে যেকোনো প্রসঙ্গ তুলে ধরতে পারেন। উইকিসংকলনের যেকোন সদস্য প্রশাসন সংক্রান্ত বিষয়ে এখানে মন্তব্য রাখতে পারেন।
}}
{{উইকিসংকলন:লিপিশালা/দিকনির্দেশ}}
__TOC__
__NEWSECTIONLINK__
[[বিষয়শ্রেণী:উইকিসংকলন প্রশাসন]]
== সার্বজনীন আচরণবিধি ও প্রয়োগ নির্দেশিকার বার্ষিক পর্যালোচনা ==
<section begin="announcement-content" />
আপনাকে জানানো হচ্ছে যে, সার্বজনীন আচরণবিধি ও প্রয়োগ নির্দেশিকার বার্ষিক পর্যালোচনার সময়কাল শুরু হয়েছে। আপনি ৯ ফেব্রুয়ারি ২০২৬ পর্যন্ত যেকোন পরিবর্তনের প্রস্তাব দিতে পারেন। বার্ষিক পর্যালোচনার নির্ধারিত ধাপগুলোর মধ্যে এটিই প্রথম। [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2026|আরও বিস্তারিত জানতে এবং মেটা-উইকির UCoC পাতায় চলমান আলোচনায় অংশ গ্রহণ করতে এখানে ক্লিক করুন]]।
[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|সার্বজনীন আচরণবিধি সমন্বয় কমিটি]] (ইউ৪সি) একটি বৈশ্বিক দল, যা সার্বজনীন আচরণবিধির ন্যায্য ও ধারাবাহিক প্রয়োগ নিশ্চিত করতে কাজ করে। এই বার্ষিক পর্যালোচনাটি ইউ৪সি কর্তৃক পরিকল্পিত ও বাস্তবায়িত হচ্ছে। ইউ৪সি এবং এর দায়িত্বসমূহ সম্পর্কে আরও বিস্তারিত জানতে, আপনি [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|ইউ৪সি সনদ দেখতে পারেন]]।
দয়া করে এই তথ্যটি আপনার সম্প্রদায়ের অন্যান্য সদস্যদের সাথে এবং অন্য যে কোনও উপযুক্ত স্থানে শেয়ার করুন।
-- ইউ৪সি-এর সহযোগিতায়, [[m:User:Keegan (WMF)|কিগান (WMF)]] ([[m:User talk:Keegan (WMF)|আলাপ]])<section end="announcement-content" />
২১:০২, ১৯ জানুয়ারি ২০২৬ (ইউটিসি)
(এই বার্তাটি [[:উইকিসংকলন:প্রশাসকদের আলোচনাসভা]] পাতায় পাঠানো হয়েছিল ও একটি পুনর্নির্দেশের কারণে এখানে পোস্ট করা হচ্ছে।)
<!-- https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29905753-এর তালিকা ব্যবহার করে বার্তাটি ব্যবহারকারী:Keegan (WMF)@metawiki পাঠিয়েছেন -->
== PageImages এক্সটেনশন যোগ ==
{{tracked|T416800}}
সুধী, উইকিসংকলনে [[:mw:Extension:PageImages|PageImages এক্সটেনশন]] যোগ করার জন্য সম্প্রদায়ের মতামত ও সমর্থন চাওয়া হচ্ছে। এই এক্সটেনশন যোগ করলে উইকিসংকলনের পাতায় যুক্ত ছবির থাম্বনেল তৈরি করে বাইরের বিভিন্ন ওয়েবসাইটে তা প্রদর্শিত হবে। উল্লেখ্য সকল উইকিপিডিয়া প্রকল্পে এই এক্সটেনশন ইতিমধ্যে অনেকদিন ধরেই যুক্ত। -- [[ব্যবহারকারী:Bodhisattwa|বোধিসত্ত্ব]] ([[ব্যবহারকারী আলাপ:Bodhisattwa|আলাপ]]) ১৫:০৩, ৮ ফেব্রুয়ারি ২০২৬ (ইউটিসি)
:{{সমর্থন}} -- [[ব্যবহারকারী:Hrishikes|হৃষীকেশ]] ([[ব্যবহারকারী আলাপ:Hrishikes|আলাপ]]) ১৫:২০, ৮ ফেব্রুয়ারি ২০২৬ (ইউটিসি)
:{{support}} - [[ব্যবহারকারী:Bodhisattwa|বোধিসত্ত্ব]] ([[ব্যবহারকারী আলাপ:Bodhisattwa|আলাপ]]) ১৫:৫৫, ৮ ফেব্রুয়ারি ২০২৬ (ইউটিসি)
:{{সমর্থন}} [[ব্যবহারকারী:জয়শ্রীরাম সরকার|জয়শ্রীরাম সরকার]] ([[ব্যবহারকারী আলাপ:জয়শ্রীরাম সরকার|আলাপ]]) ১৬:৫১, ৮ ফেব্রুয়ারি ২০২৬ (ইউটিসি)
:{{সমর্থন}} [[ব্যবহারকারী:Nettime Sujata|Nettime Sujata]] ([[ব্যবহারকারী আলাপ:Nettime Sujata|আলাপ]]) ১১:১৪, ৯ ফেব্রুয়ারি ২০২৬ (ইউটিসি)
:{{সমর্থন}} [[ব্যবহারকারী:Mahir256|মাহির২৫৬]] ([[ব্যবহারকারী আলাপ:Mahir256|আলাপ]]) ১৪:৫৩, ৯ ফেব্রুয়ারি ২০২৬ (ইউটিসি)
:{{সমর্থন}} – [[User:Tarunno|<span style="display:inline-block;color:#008329;font-weight:bold; transform: scale(-1,1);text-shadow:0 1px 2px #ddd">তারুণ্য</span>]]<span style="font-size:10px;vertical-align:text-top;"> [[ব্যবহারকারী আলাপ:Tarunno|আলাপ]]</span> • ১৫:০৬, ৯ ফেব্রুয়ারি ২০২৬ (ইউটিসি)
:{{সমর্থন}} [[ব্যবহারকারী:Tausheef Hassan|Tausheef Hassan]] ([[ব্যবহারকারী আলাপ:Tausheef Hassan|আলাপ]]) ১৫:৩৭, ১৭ মার্চ ২০২৬ (ইউটিসি)
== ২০০০-পূর্ব বাংলাদেশি কর্মের কপিরাইট মেয়াদ ==
সুধী,
আশা করি আপনারা সকলেই ভালো আছেন। বাংলাদেশে <small>(ও তৎকালীন পূর্ব পাকিস্তানে)</small> প্রকাশিত কর্ম এবং বাংলাদেশি <small>(ও তৎকালীন পূর্ব পাকিস্তানি)</small> লেখকদের কপিরাইট মেয়াদ সম্পর্কিত একটি প্রস্তাবনা আমরা উত্থাপন করছি।
প্রস্তাবনা: বাংলাদেশি/পূর্ব পাকিস্তানি নাগরিকের বা বাংলাদেশে/পূর্ব পাকিস্তানে প্রকাশিত কর্মের ক্ষেত্রে
# ২০০০ খ্রিস্টাব্দের পূর্বে প্রকাশিত '''সাহিত্যিক''' কর্মের ক্ষেত্রে কপিরাইট মেয়াদ: '''লেখকের মৃত্যু + ৫০ বছর''';
# ২০০০ খ্রিস্টাব্দের পূর্বে প্রকাশিত '''সরকারি''' কর্মের ক্ষেত্রে: '''প্রকাশ + ৫০ বছর''';
# ২০০০ খ্রিস্টাব্দের পূর্বে প্রকাশিত '''ছবি''' কর্মের ক্ষেত্রে: '''প্রকাশ + ৫০ বছর''';
# এবং ২০০০ খ্রিস্টাব্দের পূর্বে প্রকাশিত কর্মের ক্ষেত্রে [https://www.wipo.int/wipolex/en/legislation/details/5047 কপিরাইট অধ্যাদেশ, ১৯৬২]-এর অধ্যায় ৩ কর্তৃক প্রণীত [[#মেয়াদ ৬২|অন্যান্য মেয়াদ সমূহ]]।
এই প্রস্তাবনা লিখিতভাবে উপস্থাপনে সার্বিক সহায়তার জন্য [[ব্যবহারকারী:MS Sakib|MS Sakib]]কে আন্তরিকভাবে ধন্যবাদ।
=== আইনি বিশ্লেষণ ও যৌক্তিকতা ===
বর্তমান বাংলাদেশি ভূখণ্ডে কপিরাইট আইনসমূহের ক্রম নিচে উল্লেখ করা হলো:
{| class="wikitable" style="margin: auto;"
!আইন
!সময়কাল
!সাধারণ মেয়াদ
|-
|[https://www.wipo.int/wipolex/en/legislation/details/15848 ভারতীয় কপিরাইট আইন ১৯১৪]
|১৯১৪ - ১৯৬২
|৫০ বছর
|-
|[https://www.wipo.int/wipolex/en/legislation/details/5047 কপিরাইট অধ্যাদেশ, ১৯৬২]<br>(১৯৭৮ সাল পর্যন্ত সংশোধিত)
|১৯৬২ - ২০০০
|৫০ বছর
|-
|[http://bdlaws.minlaw.gov.bd/act-details-846.html কপিরাইট আইন, ২০০০]<br>(২০০৫ সাল পর্যন্ত সংশোধিত)
|২০০০ - ২০২৩
|৬০ বছর
|-
|[http://bdlaws.minlaw.gov.bd/act-1452.html কপিরাইট আইন, ২০২৩]
|২০২৩ - বর্তমান
|৬০ বছর
|-
| colspan="3" |যেকোনো আইন রহিতকরণের ক্ষেত্রে:<br>[http://bdlaws.minlaw.gov.bd/act-details-73.html দ্য জেনেরাল ক্লজেজ অ্যাক্ট, ১৮৯৬]<br>(২০১৮ সাল পর্যন্ত সংশোধিত)
|}
অর্থাৎ ২০০০ সালের আইনে কপিরাইটের সাধারণ মেয়াদ প্রথমবারের মতো ৫০ বছর থেকে বৃদ্ধি করে ৬০ বছরে উন্নীত করা হয় এবং ২০২৩ সালের আইনেও তা চলমান থাকে।
স্বাভাবিকভাবেই প্রশ্ন জাগতে পারে যে, ২০০০ সালের পূর্বে প্রকাশিত যে কর্মগুলোর কপিরাইট মেয়াদ তখনো শেষ হয়নি (যেমন, ১৯৯০ সালের একটি প্রকাশনা), সেগুলো কি স্বয়ংক্রিয়ভাবে এই বর্ধিত ৬০ বছরের মেয়াদের আওতায় চলে আসবে? শুরুতে মনে হতে পারে, যেহেতু নতুন আইনে সাধারণ মেয়াদ ৬০ বছর, তাই পুরনো সব বিদ্যমান কর্মও হয়তো এই সুবিধা পাবে। কিন্তু আইনের '''আক্ষরিক ব্যাখ্যা''' অনুসরণ করলে আমরা বিপরীত চিত্র দেখতে পাওয়া যায়।
[http://bdlaws.minlaw.gov.bd/act-details-73.html দ্য জেনেরাল ক্লজেজ অ্যাক্ট, ১৮৯৬] ও সাধারণ আইনি কর্যধারা অনুযায়ী, কোনো আইনে সুস্পষ্টভাবে উল্লেখ না থাকলে নতুন কোনো বিধান ভূতাপেক্ষভাবে (Retroactively) পেছনের কর্মের ওপর কার্যকর হয় না। ২০০০ সালের আইনের কোথাও স্পষ্টভাবে বলা নেই যে, পূর্বের কর্মগুলোর মেয়াদও ভূতাপেক্ষভাবে বৃদ্ধি পাবে। বরং এই <mark>আইনের ১০৫ নং ধারা অনুযায়ী ১৮ জুলাই, ২০০০ খ্রিস্টাব্দের পূর্বে যেকোনো কর্মের মেয়াদ বর্ধিত করা হয়নি।</mark>
<div style="float: right; margin-left: 15px; margin-bottom: 5px; border: 2px solid yellow">
{{show
|1= আইন দেখুন
|2={{Collapse top|{{url|http://bdlaws.minlaw.gov.bd/act-846/section-30242.html|ধারা ১০৪|}}<br>ইংরেজীতে অনূদিত পাঠ প্রকাশ<br>{{url|http://bdlaws.minlaw.gov.bd/act-details-846.html|কপিরাইট আইন, ২০০০}}}}
১০৪। এই আইন প্রবর্তনের পর সরকার, সরকারী গেজেটে প্রজ্ঞাপন দ্বারা, এই আইনের ইংরেজীতে অনূদিত একটি পাঠ প্রকাশ করিবে যাহা এই আইনের অনূদিত ইংরেজী পাঠ (Authentic English Text) নামে অভিহিত হইবে:
তবে শর্ত থাকে যে, এই আইন ও উক্ত ইংরেজী পাঠের মধ্যে বিরোধের ক্ষেত্রে এই আইন প্রাধান্য পাইবে।
{{Collapse bottom|}}
}}
</div>
উল্লেখ্য, ধারা ১০৪ অনুযায়ী বাংলাদেশ সরকার একটি নির্ভরযোগ্য অনূদিত পাঠ প্রদান করেছে। ইংরেজি ও বাংলা পাঠের সাথে সংঘর্ষ হলে, বাংলা পাঠ প্রাধান্য পাবে। সেক্ষেত্রে সিদ্ধান্ত বাংলা পাঠ হতে আসতে হবে। তবে ইংরেজি পাঠ সংযুক্ত রাখা হয়েছে বোঝার সুবিধার্থে এবং আইনের ইন্টেন্ট বা উদ্দেশ্য পরিষ্কার করার জন্য।
<div style="display:flex; flex-wrap:wrap; gap:10px;">
<div style="flex:1; min-width:300px; padding:10px;">
{{Collapse top|{{url|http://bdlaws.minlaw.gov.bd/act-846/section-30242.html|ধারা ১০৫|}}<br>রহিতকরণ, হেফাজত এবং ক্রান্তিকালীন বিধান<br>{{url|http://bdlaws.minlaw.gov.bd/act-details-846.html|কপিরাইট আইন, ২০০০}}}}
১০৫। (১) The Copyright Ordinance, 1962 (Ordinance no XXXIV of 1962) এতদ্বারা রহিত করা হইল।
(২) যেক্ষেত্রে কোন ব্যক্তি এই আইন কার্যকর হওয়ার পূর্বে এমন কোন কাজ করিয়া থাকেন যা দ্বারা তিনি সংশ্লিষ্ট সময়ে আইন মোতাবেক কোন কর্মের পুনরুৎপাদন বা সম্পাদনের জন্য অথবা এই আইন কার্যকর না হইলে ঐরূপ পুনরুৎপাদন বা সম্পাদন বৈধ হইত এমন কোন কর্মের পুনরুৎপাদন বা সম্পাদনের জন্য কোন প্রকার ব্যয় বা দায় এর জন্য দায়ী হন, সেক্ষেত্রে এই ধারার কোন কিছুই ঐরূপ কাজ হইতে বা তৎসূত্রে উদ্ভূত কোন অধিকার বা স্বার্থ খর্ব বা ক্ষুণ্ণ করিবে না, যদি না এই আইনবলে পুনরুৎপাদন বা সম্পাদন করিবার অধিকারী ব্যক্তি চুক্তিভঙ্গের দরুণ বোর্ড যেরূপ নির্ধারণ করে ঐরূপ ক্ষতিপূরণ প্রদান করিতে সম্মত না হন।
(৩) উপ-ধারা (১) এর অধীন রহিত আইনের অধীন কোন কর্মের কপিরাইট ছিল না এমন কোন কর্মের ক্ষেত্রে এই আইনের অধীন কপিরাইট থাকিবে না।
(৪) এই আইন কার্যকর হওয়ার অব্যবহিত পূর্বে যেক্ষেত্রে কোন কর্মের কপিরাইট বিদ্যমান ছিল ঐরূপ কপিরাইটের অন্তর্ভুক্ত অধিকার, এই আইন কার্যকর হওয়ার তারিখ হইতে, কর্মটি যে শ্রেণীর অন্তর্ভুক্ত ঐ শ্রেণী সম্বন্ধে ধারা ১৪-এ উলি্লখিত অধিকার হইবে এবং যদি উক্ত ধারা দ্বারা কোন নতুন অধিকার প্রদত্ত হয়, তাহা হইলে উক্ত অধিকারের মালিক-
:(ক) এই আইন কার্যকর হওয়ার পূর্বে কর্মটির কপিরাইটের সম্পূর্ণ স্বত্ব-নিয়োগ হইয়া থাকিলে, উক্ত নিয়োগপ্রাপ্ত স্বত্বাধিকারী স্বার্থের উত্তরাধিকারী হইবেন।
:(খ) অন্যান্য ক্ষেত্রে, ঐ ব্যক্তি হইবেন যিনি উপ-ধারা (১) এর অধীন বাতিলকৃত আইনে কর্মটির কপিরাইটের প্রথম স্বত্বাধিকারী ছিলেন।
<mark>(৫) এই আইনে ভিন্নরূপ বিধান না থাকিলে, কোন ব্যক্তি এই আইন কার্যকর হওয়ার অব্যবহিত পূর্বে কোন কর্মের কপিরাইট অথবা কোন অধিকার বা অধিকারের অন্তর্গত কোন স্বার্থের অধিকারী থাকিলে, তাহার ক্ষেত্রে এই আইন কার্যকর না হইলে যে সময়ের জন্য তিনি ঐরূপ অধিকার বা স্বার্থের অধিকারী হইতেন তাহা অব্যাহত থাকিবে।</mark>
<br>(৬) এই আইনের কোন কিছুই উহা কার্যকর হওয়ার পূর্বে কৃত কোন কাজ কপিরাইট লঙ্ঘনজনিত কাজ হিসাবে ব্যাখ্যায়িত হিসাবে গণ্য হইবে না, যদি ঐ কাজ অন্যভাবে ঐরূপ অধিকারলঙ্ঘন গঠন না করিয়া থাকে।
<br>(৭) এই ধারায় ভিন্নরূপ কিছু না থাকিলে, রহিতকরণের ফলাফলের বিষয়ে ১৮৯৭ সনের জেনারেল ক্লজেস এ্যাক্ট (১৮৯৭ সনের ১০নং আইন) প্রযোজ্য হইবে।
{{Collapse bottom|}}
</div>
<div style="flex:1; min-width:300px; padding:10px;">
{{Collapse top|Section 105<br>Repeals, savings and transitional provisions<br>{{url|http://bdlaws.minlaw.gov.bd/upload/act/2021-11-17-10-44-05-32.-The-Copyright-Act-2000.pdf|Authentic English Text of Copyright Act, 2000 }}}}
105. (1) The Copyright Ordinance, 1962, (Ordinance no XXXIV of 1962) is hereby repealed.
(2) Where any person has, before the commencement of this Act, taken any action whereby he has incurred any expenditure or liabilities in connection with the reproduction or performance of any work in a manner which at that time was lawful or for the purpose of or with a view to the reproduction or performance of a work at a time when such reproduction or performance would, but for the coming into force of this Act, have been lawful, nothing in this section shall diminish or prejudice any rights or interests arising from or in connection with such action which are subsisting and valuable at the said date, unless the person who, by virtue of this Act, becomes entitled to restrain such reproduction or performance agrees to pay such compensation as, failing agreement, may be determined by the Board.
(3) Copyright shall not subsist by virtue of this Act in any work in which copyright did not subsist immediately before the commencement of this Act under any Act or Ordinance repealed by sub-section (1).
(4) Where copyright subsisted in any work immediately before the commencement of this Act, the rights comprising such copyright shall, as from the date of such commencement, be the rights specified in section 14 in relation to the class of works to which such work belongs, and where any new rights are conferred by that section, the owner of such rights shall be⎯
:(a) in any case where copyright in the work was wholly assigned before the commencement of this Act, the appointed assignee; and
:(b) in any other case, the person who was the first owner of the copyright in the work under any Act or Ordinance repealed by sub-section (1) or his legal representatives.
<mark>(5) Except as otherwise provided in this Act, where any person was entitled immediately before the commencement of this Act to copyright in any work or any right in such copyright or to an interest in any such right, he shall continue to be entitled to such right or interest for the period for which he would have been entitled thereto, if this Act had not come into force.</mark>
(6) Nothing contained in this Act shall be deemed to render any act done before its commencement an infringement of copyright if that act would not otherwise have constituted such an infringement.
(7) If there is nothing otherwise provided by this section, the General Clauses Act, 1897 (Act X of 1897) shall apply with respect to the effect of repeals.
{{Collapse bottom|}}
</div>
</div>
উপরের ধারা ১০৫(৫) অনুসারে সিদ্ধান্তে আসা যায়, নতুন আইন প্রবর্তনের পূর্বে যে কর্মগুলোর কপিরাইট বহাল ছিল, সেগুলোর মেয়াদকাল নির্ধারণের ক্ষেত্রে ধরে নিতে হবে যেন ২০০০ সালের আইনটি পাসই হয়নি। অর্থাৎ, পুরোনো কর্মগুলোর ক্ষেত্রে ১৯৬২ সালের অধ্যাদেশ অনুযায়ী পূর্বনির্ধারিত ৫০ বছরের মেয়াদই বলবৎ থাকবে।
ধারা ১০৫(৫) এর একটি ব্যাখ্যা দেওয়া হলো:
{| class="wikitable"
|+
!বিষয়
!বাংলা
!ইংরেজি
!ব্যাখ্যা
|-
|'''দ্বন্দ্ব'''
|এই আইনে ভিন্নরূপ বিধান না থাকিলে
|Except as otherwise provided in this Act
|সাধারণ হেফাজত। আইনে ভিন্ন কিছু উল্লেখ নেই।
|-
|'''কে?'''
|কোন ব্যক্তি
|where any person
|বাংলাদেশি কর্মের প্রণেতা
|-
|'''কখনকার কর্ম?'''
|এই আইন কার্যকর হওয়ার অব্যবহিত পূর্বে
|was entitled immediately before the commencement of this Act
|১৮ জুলাই, ২০০০ এর পূর্বে
|-
|'''কী?'''
|কোন কর্মের কপিরাইট অথবা কোন অধিকার বা অধিকারের অন্তর্গত কোন স্বার্থের অধিকারী থাকিলে
|to copyright in any work or any right in such copyright or to an interest in any such right
|কপিরাইট সুরক্ষা
|-
|'''সময়কাল'''
|তাহার ক্ষেত্রে এই আইন কার্যকর না হইলে যে সময়ের জন্য তিনি ঐরূপ অধিকার বা স্বার্থের অধিকারী হইতেন
|such right or interest for the period for which he would have been entitled thereto, if this Act had not come into force.
|২০০০ এর আইন না থাকলে ৫০ বছর মেয়াদি সুরক্ষা থাকতো।
|-
|'''ক্রিয়া'''
|তাহা অব্যাহত থাকিবে
|he shall continue to be entitled to
|৫০ বছর সুরক্ষা পাবে
|}
১. '''দ্বন্দ্ব''': ''"এই আইনে ভিন্নরূপ বিধান না থাকিলে"'' - এই বাক্যাংশটি "দ্বন্দ্ব নিরোধ" হিসেবে পরিচিত। বাক্যাংশটি মূলত একই বা ভিন্ন আইনের সাথে দ্বন্দ্ব রোধে ঢালাওভাবে ব্যবহৃত হয়। ধারা ১০৫(৫) চাচ্ছে পূর্বের প্রদত্ত আইনি সুরক্ষার মেয়াদ অব্যাহত রাখতে। এই মেয়াদের অব্যাহতি ঢালাওভাবে সকল বাংলাদেশি কর্মের ক্ষেত্রে প্রযোজ্য। কিন্তু এই ঢালাওভাবে প্রয়োগ সহজেই অপ্রত্যাশিত দ্বন্দ্ব তৈরি করতে পারে। এই দ্বন্দ্ব বর্তমানে প্রতীয়মান না হলেও, ভবিষ্যতে কোনো মামলায় আবিষ্কৃত হতে পারে। ফলে আপাত দৃষ্টিতে দ্বন্দ্ব না থাকলেও, সুরক্ষার খাতিরে এই দ্বন্দ্ব নিরোধ অংশ যুক্ত করেন আইন প্রণেতারা।
এখন প্রশ্ন হতে পারে দ্বন্দ্ব আছে নাকি নেই? এই উপধারার সাথে কী প্রকারের দ্বন্দ্ব হওয়ার সুযোগ আছে? উদাহরণ স্বরূপ ধরি, ৬২-এর আইনে লোকসংস্কৃতির মেয়াদ ছিল ২৫ বছর কিন্তু নতুন আইন সেটাকে অসীম সুরক্ষা দিয়েছে। যেহেতু লোক সংস্কৃতির প্রকাশকাল নেই বা থাকলেও সেটি ২০০০ সালের পরে প্রকাশিত হলে সেটি আর লোকসংস্কৃতি বলে বিবেচিত হবে না। তাহলে এখানে দ্বন্দ্ব প্রতীয়মান হওয়ার সুযোগ আছে। পুরাতন আইনের অধীনে থাকলে, আইনের ইচ্ছা অনুযায়ী এরা অসীম সুরক্ষা পাবে না। তাই এক্ষেত্রে আইনের মূল অংশ প্রাধান্য পাবে। উল্লেখ্য এটি একটু উদাহরণ মাত্র এবং বাস্তবতার সাথে মিল নেই।
আমাদের আলোচ্য বিষয় হলো সাধারণ সাহিত্যকর্ম, ছবি, সরকারি কর্ম ইত্যাদি। এই বিষয়সমূহে এরূপ কোনো দ্বন্দ্ব নেই আইনে।
এখন প্রশ্ন উঠতে পারে, আইনে তো নতুন ৬০ বছর মেয়াদ দেওয়া হয়েছে। কিন্তু এই ধারা চাচ্ছে আগের মেয়াদ অব্যাহত রাখতে, তাহলে এটা কি দ্বন্দ্ব?
আইনি ব্যাখ্যার সুপ্রতিষ্ঠিত 'অপ্রয়োজনীয়তার বিরুদ্ধে নীতি' (Rule Against Redundancy) অনুযায়ী এই ধারণাটি পুরোপুরি যৌক্তিক নয়। আইনে কখনোই কোনো অর্থহীন বা অপ্রয়োজনীয় ধারা যুক্ত করা হয় না। যদি ২৪ থেকে ৩৩ ধারার সাধারণ ৬০ বছরের নিয়মটিকেই ১০৫(৫) ধারায় উল্লেখকৃত 'ভিন্নরূপ বিধান' হিসেবে ধরে নেওয়া হয়, তবে ১০৫(৫) ধারাটির কোনো প্রয়োগই অবশিষ্ট থাকে না। আইনশাস্ত্রে একটি প্রতিষ্ঠিত নীতি হলো, 'বিশেষ বিধান সাধারণ বিধানের ওপর প্রাধান্য পায়' (Lex specialis derogat legi generali)। আইনের ২৪ থেকে ৩৩ ধারা হলো কপিরাইট মেয়াদের একটি General Provision, যা আইন পাসের পর থেকে নতুন কর্মের জন্য প্রযোজ্য। অন্যদিকে ১০৫(৫) ধারা হলো পুরোনো কর্মের জন্য একটি সুনির্দিষ্ট বিশেষ বিধান।
প্রকৃতপক্ষে <mark>এখানে "ভিন্নরূপ বিধান" বলতে বোঝানো হয়েছে: যদি আইনের অন্য কোথাও স্পষ্টভাবে লেখা থাকত যে "পুরোনো 'কোনও' কর্মের মেয়াদও ভূতাপেক্ষভাবে বৃদ্ধি পাবে", কেবল তখনই সেটি কার্যকর হতো।</mark>
২. '''কে?''': ''"কোন ব্যক্তি"'' - বাংলাদেশি কর্মের প্রণেতাকে বুঝানো হয়েছে। কপিরাইট আইন, ২০০০ এর ২(২৭) ধারা অনুযায়ী:
(২৭) "বাংলাদেশী কর্ম" অর্থ এমন সাহিত্য, নাট্য, সংগীত বা শিল্প কর্ম-
(ক) যাহার প্রণেতা বাংলাদেশের নাগরিক; বা
(খ) যাহা প্রথম বাংলাদেশে প্রকাশিত হইয়াছে; বা
(গ) অপ্রকাশিত কর্মের ক্ষেত্রে, যাহার প্রণেতা উহা তৈরীর সময় বাংলাদেশের নাগরিক ছিলেন;
৩. '''কখনকার কর্ম?''': ''"এই আইন কার্যকর হওয়ার অব্যবহিত পূর্বে"'' - কপিরাইট আইন, ২০০০ কার্যকর হয়েছে ১৮ জুলাই, ২০০০ খ্রিস্টাব্দে। অর্থাৎ উক্ত তারিখের পূর্বে প্রকাশিত যেকোনো কর্মের ক্ষেত্রে এই ধারা প্রযোজ্য।
৪. '''কী?''': ''"কোন কর্মের কপিরাইট অথবা কোন অধিকার বা অধিকারের অন্তর্গত কোন স্বার্থের অধিকারী থাকিলে"'' - সাধারণ কপিরাইট সুরক্ষা।
৫. '''সময়কাল''': ''"তাহার ক্ষেত্রে এই আইন কার্যকর না হইলে যে সময়ের জন্য তিনি ঐরূপ অধিকার বা স্বার্থের অধিকারী হইতেন" / "such right or interest for the period for which he would have been entitled thereto, if this Act had not come into force."'' -
এই অংশে বলা আছে যে, ''এই আইন কার্যকর না হইলে'' কিন্তু আইন যেহেতু কার্যকর হয়েছে, এখানে প্রশ্ন উঠতে পারে যে, তাই এই অংশ প্রযোজ্য নয়। এখানে আমাদের পূর্ববর্তী 'অপ্রয়োজনীয়তার বিরুদ্ধে নীতি' যুক্তি প্রযোজ্য। আর এই বাক্যাংশটি শর্তমূলক (conditional clause) নয়। এখানে ''"এই আইন কার্যকর না হইলে"'' ("''if this Act had not come into force''") একটি counterfactual / irrealis / hypothetical / unreal conditional clause.
আরও নির্দিষ্টভাবে, এটি হলো:
* একটি শর্তবাচক উপবাক্য
* যা past perfect রূপে আছে
* এবং একটি অবাস্তব অতীত শর্ত প্রকাশ করছে
* ব্যাকরণ আলোচনায় একে প্রায়ই প্রতিবাস্তব (counterfactual), অবাস্তব (irrealis), বা কাল্পনিক (hypothetical) বলা হয়
এতে এই অর্থ নেই যে আইনটি সত্যিই কার্যকর হয়নি। এর অর্থ হলো যে এই অধিকার বা স্বার্থ নির্ধারণের উদ্দেশ্যে এমন একটি অবস্থা কল্পনা করতে হবে, যেখানে এই আইন কখনোই কার্যকর হয়নি; এবং সেই অবস্থায় সংশ্লিষ্ট ব্যক্তি কত সময়ের জন্য ওই অধিকার বা স্বার্থের অধিকারী হতেন, তা নির্ধারণ করতে হবে।
অতএব বাক্যটি একটি আইনগত-কাল্পনিক তুলনা ব্যবহার করছে:
বাস্তব অবস্থা: আইনটি কার্যকর আছে।
কল্পিত অবস্থা: আইনটি কার্যকর হয়নি।
তারপর আইনটি জিজ্ঞেস করছে: এই কল্পিত অবস্থায় ব্যক্তি কোন সময়কাল পর্যন্ত অধিকারী হতেন?
এটি আইন প্রণয়নে খুবই সাধারণ একটি কৌশল। এখানে “অসম্ভব” কথাটির অর্থ গোঁজামিল বা অযৌক্তিক নয়; বরং এটি অধিকার নির্ণয়ের জন্য একটি প্রতিবাস্তব মানদণ্ড।
৬. '''ক্রিয়া''': ''"তাহা অব্যাহত থাকিবে"'' (''"he shall continue to be entitled to"''): এখানে "আব্যাহত"কে বাংলাদেশ সরকার ইংরেজিতে continue শব্দ ব্যাবহার করা হয়েছে।
{{url|http://bdlaws.minlaw.gov.bd/act-details-1123.html|বাংলা একাডেমি আইন, ২০১৩}} দ্বারা কার্যরত বাংলা ভাষা বিষয়ক বাংলাদেশি রাষ্ট্রীয় সংস্থা বাংলা একাডেমি। বাংলাদেশ সরকার তার নিজের সরকারি কাজে বাংলা ব্যবহারে বাংলা একাডেমির নিয়ম মানতে নির্দেশনা দেয়।<sup>[https://file-rajshahi.portal.gov.bd/files/bscic.rajshahi.gov.bd/files/62628c74_11b2_48a4_98e3_e694fdb18021/604f94fbbfa1ac882cb826c1fe5a2784.pdf]</sup> তাদের প্রকাশিত [https://web.archive.org/web/20210117115141/https://xeroxtree.com/pdf/adhunik_bangla_ovidhan.pdf আধুনিক বাংলা অভিধান] অনুযায়ী নকশা, মডেল ও ডিজাইনের সংজ্ঞা নিচে দেওয়া হলো। উল্লেখ্য, এই সংজ্ঞাসমূহ মানতে আইন {{color|red|বাধ্য (binding) নয়}}।
অব্যাহত <small>/অব্ব্যাহতো/</small> [স. 7+| 17 + sqrt(27) + 5 ] বিণ, ১ অপ্রতিহত, অবাধ (অব্যাহত গতি)। ২ অব্যর্থ। ৩ অপ্রতিবন্ধ।
অপ্রতিহত অর্থ বাধাহীনভাবে।
অর্থাৎ, এই অংশ দ্বারা বলা হয়েছে। তার আগের মেয়াদ continue করবে। আগে যা ছিল তাই থাকবে। এবং তার মেয়াদে কোনো বাধা থাকবে না। অনেকে প্রায়োগিক অর্থ ভেবে বলতে পারেন যে, এই আইন শুধু চাচ্ছে যে অধিকার খর্বকারী মেয়াদ না কমাতে। কিন্তু অব্যাহত-এর বুৎপত্তিগত এবং সকল সংজ্ঞা অনুযায়ী, মেয়াদে বাধা দেবে না। এটি উভয়দিকে কাজ করে। শুধুমাত্র একদিকে নয়। সংজ্ঞার ক্ষেত্রে প্রয়োগ ভিন্ন মানুষ ভিন্নভাবে নিতে পারে। এজন্য বুৎপত্তিগত ব্যাখ্যা মেনে নেওয়া শ্রেয়। আইনের ইন্টেন্ট বুঝার জন্য ইংরেজি অনুবাদ ব্যাবহার করা যেতে পারে। ইংরেজিতে "continue" শব্দ ব্যাবহার করা হয়েছে। যা বুঝায়, আগে যা ছিল তাই থাকবে। অর্থাৎ আগের ৫০ বছর মেয়াদ বলবৎ থাকবে।
'''ধারা ১০৫(১)''': কপিরাইট অধ্যাদেশ, ১৯৬২ রহিত করা হয়েছে। এখানে উল্লেখযোগ্য বিষয়। ধারা ১০৫, আগের আইনের অধীন প্রকাশিত কর্মসমূহ নিজ নতুন আইনের আওতায় আত্তীকরণ করেনি, যেমনটা কপিরাইট আইন, ২০২৩ করেছে। অর্থাৎ, আগের কর্মসমূহের লাইসেন্স বিবেচনা কপিরাইট অধ্যাদেশ, ১৯৬২ এর আলোকে করতে হবে।
'''ধারা ১০৫(২)''': কোন মামলা বা অপরাধ ২০০০ এর আগে সংঘটিত হলে, তা আগের আইনের অধীনে বিচার হবে।
'''ধারা ১০৫(৩)''': কপিরাইট অধ্যাদেশ, ১৯৬২ এর অধীন বিবেচিত কপিরাইটহীন অসুরক্ষিত কর্ম নতুন করে সুরক্ষা পাবে না।
'''ধারা ১০৫(৪)''': এই ধারায় "অধিকারের পরিধি বা প্রকৃতি" ব্যাখ্যা করা হয়ছে; "মেয়াদ" নয়। ১০৫(৪)-এর আশ্রয় নিয়ে প্রস্তাবের আরেকটা বিরোধিতা করা যেতে পারে যে ''ধারা ১০৫(৪)-এ বলা হয়েছে, পুরোনো কর্মগুলো নতুন আইনের "ধারা ১৪-এ উল্লিখিত অধিকার" পাবে। ফলে, যেহেতু কর্মটি নতুন আইনের (১৪ ধারার) অধীনে চলে আসছে, তাই এর মেয়াদও নতুন আইনের ৬০ বছর হওয়া উচিত।''
উ: আইনের দৃষ্টিতে "অধিকারের পরিধি বা প্রকৃতি" এবং "অধিকারের মেয়াদ" সম্পূর্ণ ভিন্ন দুটি বিষয়। ধারা ১০৫(৪) অত্যন্ত সতর্কতার সাথে শুধুমাত্র "ধারা ১৪"-এর কথা উল্লেখ করেছে, যেখানে কপিরাইটের মেয়াদ নিয়ে একটি শব্দও নেই। ধারা ১৪ কেবল সংজ্ঞায়িত করেছে কপিরাইট বলতে কী কী 'কর্ম' বোঝায় এবং সেসব 'কর্ম'-এর কোন কোন অধিকার একচেটিয়াভাবে পাওয়া যায়। অর্থাৎ, ধারা ১০৫(৪) পুরোনো কর্মগুলোকে কেবল ধারা ১৪-তে থাকা নতুন ধরনের অধিকার ব্যবহারের সুযোগ দিয়েছে। কিন্তু সেই অধিকারটি কতদিন বজায় থাকবে, অর্থাৎ সময়কাল বা মেয়াদের বিষয়টি ঠিক তার পরের উপধারা ১০৫(৫)-এ নির্দিষ্ট করে দেওয়া হয়েছে। <mark>১০৫(৫)-এ পরিষ্কার বলা হয়েছে, অধিকার যা-ই হোক না কেন, ব্যক্তি ঠিক সেই "সময়ের জন্য" অধিকার ভোগ করবেন, যা তিনি এই নতুন আইন না এলে পেতেন (অর্থাৎ ৫০ বছর)।</mark>
'''ধারা ১০৫(৫)''': ব্যাখ্যা করা হয়েছে।
'''ধারা ১০৫(৬)''': ধরুন এক প্রকারের পুনঃব্যবহার অনুমতি ১৯৬২ সালের আইনে দেওয়া হলেও, ২০০০ সালের আইনে দেওয়া হয়নি। তাহলে ২০০০ সালের আগে সেই কর্ম কেউ পুনঃব্যবহার করে থাকলে, সেটি নতুন আইনের আওতায় দণ্ডনীয় নয়।
'''ধারা ১০৫(৭)''': [http://bdlaws.minlaw.gov.bd/act-details-73.html দ্য জেনেরাল ক্লজেজ অ্যাক্ট, ১৮৯৬] এর ৬ষ্ঠ ধারা বাংলাদেশের যেকোনো আইনের রহিতকরণের প্রভাব নির্ধারণ করে। কপিরাইট আইন, ২০০০-এর ১০৫(৭)-এ তা উল্লেখ করা আছে। ১০৫(৭)-এ উল্লেখ করা না থাকলেও, এই আইন বলবৎ থাকতো। কপিরাইট বাদেও এই ধারা অনুযায়ী বাংলাদেশের সকল আইন অ-ভূতাপেক্ষ (Non-retroactive) যদিনা নতুন আইনে আলাদা করে উল্লেখ না থাকে।
[http://bdlaws.minlaw.gov.bd/act-details-73.html দ্য জেনেরাল ক্লজেজ অ্যাক্ট, ১৮৯৬] এর ৬(গ) ধারা অনুযায়ী, নতুন আইনে অন্যথায় উল্লেখ না থাকলে, নতুন আইন নাগরিকের পূর্ব আইনের আওতায় প্রাপ্ত রাইট (অধিকার)কে প্রভাবিত করবে না। কপিরাইট এর নামানুসারেই একপ্রকারের রাইট বা অধিকার। কপিরাইট আইন, ২০০০ এর ধারা ১০৫ এই অংশের সাথে সাংঘর্ষিক নয়। affect অর্থ প্রভাবিত করা। সেটা অধিকার বৃদ্ধি বা হ্রাস উভয় ক্ষেত্রে প্রযোজ্য। ১৯৬৩ সালের প্রকাশিত কোনো প্রকাশনার ক্ষেত্রে, কর্মের স্রষ্টা ৫০ বছরের অধিকার পেয়েছিলেন তার কর্মের উপর। আমি জনগণ, ৫০ বছর পর এটি মুক্তভাবে ব্যাবহারের অধিকার পেয়েছিলাম। নতুন আইন যেহেতু পূর্বের কর্মের ব্যাপারে কিছু বলেনি; শুধু নতুন কর্মের জন্য নতুন বর্ধিত অধিকার দিয়েছে। তাই এই আইন অনুযায়ী নতুন আইন আমার পূর্বে প্রাপ্ত অধিকারকে প্রভাবিত করবে না। সেটা যেকারো লাভ বা ক্ষতি যেজন্যই হোক না কেনো। ২০০০ এর আইনের ১০৫(৫)-এ এই আইনের নীতিমালাকে প্রয়োগ করা হয়েছে।
{{Collapse top|{{url|http://bdlaws.minlaw.gov.bd/act-73/section-19978.html|Section 6}}<br>Effect of repeal<br>{{url|http://bdlaws.minlaw.gov.bd/act-details-73.html|The General Clauses Act, 1897}}}}
6. Where this Act, or any Act of Parliament or Regulation made after the commencement of this Act, repeals any enactment hitherto made or hereafter to be made, then, unless a different intention appears, the repeal shall not-
:(a) revive anything not in force or existing at the time at which the repeal takes effect; or
:(b) affect the previous operation of any enactment so repealed or anything duly done or suffered thereunder; or
:<mark>(c) affect any right, privilege, obligation or liability acquired, accrued or incurred under any enactment so repealed;</mark> or
:(d) affect any penalty, forfeiture or punishment incurred in respect of any offence committed against any enactment so repealed; or
:(e) affect any investigation, legal proceeding or remedy in respect of any such right, privilege, obligation, liability, penalty, forfeiture or punishment as aforesaid;
and any such investigation, legal proceeding or remedy may be instituted, continued or enforced, and any such penalty, forfeiture or punishment may be imposed as if the repealing Act or Regulation had not been passed.
{{Collapse bottom|}}
'''কপিরাইট আইন, ২০২৩''':
এবার বর্তমানে বলবৎ 'কপিরাইট আইন, ২০২৩'-এ আসি। বলা যেতে পারে, নতুন আইনের ১২৭(২)(ক) ধারায় যেহেতু (২০০০-এর আইনে থাকা) পুরোনো অধিকারগুলো বহাল রাখার কথা বলা হয়েছে, তাই পুরোনো কর্মগুলোও ৬০ বছর মেয়াদ পাবে। কিন্তু ১৮৯৭ সালের জেনারেল ক্লজেস অ্যাক্টের ৬(c) ধারা অনুযায়ী, রহিতকৃত আইনের অধীনে নির্ধারিত অধিকারের কাঠামো (যেমন ৫০ বছরের সীমা) অপরিবর্তিত থাকে। ফলে ২০২৩ সালের আইনটি কেবল সেই অবস্থাকেই সংরক্ষণ করে, যা ২০০০ সালের আইনের অধীনে অর্জিত হয়েছিল। যেহেতু ২০০০ সালের আইনটি ১০৫(৫) ধারার মাধ্যমে পুরোনো কর্মগুলোর মেয়াদকে সুনির্দিষ্টভাবে ৫০ বছরেই আটকে দিয়েছিল এবং অতিরিক্ত দশ বছর যুক্ত করার পক্ষে স্পষ্ট কোনও বিধান রাখেনি, তাই ২০২৩ সালের আইনও সেটিকে নতুন করে ৬০ বছরে উন্নীত করেনি। নিচে ২০২৩ সালের আইনের রহিতকরণ ধারাটি দেওয়া হলো:
{{Collapse top|{{url|http://bdlaws.minlaw.gov.bd/act-1452/section-52753.html|ধারা ১২৭|}}<br>রহিতকরণ ও হেফাজত<br>{{url|http://bdlaws.minlaw.gov.bd/act-details-1452.html|কপিরাইট আইন, ২০২৩}}}}
১২৭। (১) কপিরাইট আইন, ২০০০ (২০০০ সনের ২৮ নং আইন), অতঃপর উক্ত আইন বলিয়া উল্লিখিত, এতদ্বারা রহিত করা হইল।
(২) উক্তরূপ রহিতকরণ সত্ত্বেও উক্ত আইনের অধীন-
:(ক) <mark>কৃত কোনো কাজ-কর্ম</mark>, গৃহীত কোনো ব্যবস্থা, প্রণীত কোনো বিধি, জারীকৃত প্রজ্ঞাপন বা নোটিশ বা বিজ্ঞপ্তি, প্রদত্ত আদেশ, স্বত্বনিয়োগ, <mark>নিবন্ধন বা লাইসেন্স</mark>, এই আইনের বিধানাবলির সহিত সামঞ্জস্যপূর্ণ হওয়া সাপেক্ষে, রহিত বা সংশোধিত না হওয়া পর্যন্ত, বলবৎ থাকিবে, এবং এই আইনের সংশ্লিষ্ট ধারার অধীন কৃত, গৃহীত, প্রণীত, জারীকৃত বা প্রদত্ত বলিয়া গণ্য হইবে;
:(খ) উক্ত আইনের অধীন সূচিত কোনো কার্যধারা অসম্পূর্ণ থাকিলে উহা উক্ত আইন অনুযায়ী এইরূপে সমাপ্ত করা হইবে, যেন উক্ত আইন রহিত হয় নাই;
:(গ) দায়েরকৃত কোনো মামলা বা মোকদ্দমা কোনো আদালতে চলমান থাকিলে উহা এমনভাবে নিষ্পত্তি করিতে হইবে যেন উক্ত আইন রহিত হয় নাই;
:(ঘ) উক্ত আইনের অধীন প্রতিষ্ঠিত বোর্ড এইরূপে বহাল থাকিবে যেন উহা এই আইনের অধীন প্রতিষ্ঠিত হইয়াছে; এবং
:(ঙ) কপিরাইট অফিসে নিযুক্ত কর্মকর্তা ও কর্মচারীগণ এই আইন প্রবর্তনের অব্যবহিতপূর্বে যে শর্তাধীনে চাকুরিতে নিয়োজিত ছিলেন, এই আইনের বিধান অনুযায়ী পরিবর্তিত না হওয়া পর্যন্ত, সেই একই শর্তে চাকুরিতে নিয়োজিত থাকিবেন এবং পূর্বের নিয়মে বেতন, ভাতা ও অন্যান্য সুবিধাদি প্রাপ্য হইবেন।
{{Collapse bottom|}}
উল্লেখ্য যে কপিরাইট আইন, ২০২৩ তার পূর্বসূরী আইন (শুধুমাত্র ২০০০ এর আইন)-এর অধীন প্রকাশিত কর্ম ১২৭(২)(ক) দ্বারা নিজের মধ্যে আত্তীকরণ করে। কিন্তু ২০০০ এর আইন, তার পূর্বসূরি ১৯৬২এর আইনের জন্য তা করে না। ফলে ১৯৬২ এর অধীন প্রকাশিত কর্ম ২০০০ বা ২০২৩ এর আইন আত্তীকরণ করে না এবং উত্তরসূরি আইনসমূহ তাদের নিজ নিজ হেফাজত ধারা অনুযায়ী ১৯৬২ এর অধীন কর্মগুলোতে ১৯৬২ এর আইন বলবৎ রাখে। ১৯৬২ হতে ২০০০ এর আইনে মেয়াদ বৃদ্ধি করা হয়েছিল কিন্তু ২০০০ থেকে ২০২৩ এর আইনে করা হয়নি/ তাই পূর্ববর্তী কর্মের মেয়াদ অপরিবর্তিত রাখার বিষয়ে কোনো ধারা যুক্ত করা হয়নি বা যুক্ত করার প্রয়োজনীয়তা ছিল না। কিন্তু আইনের ইচ্ছা অনুযায়ী মেয়াদ বৃদ্ধি করতে হলে, তা আলাদা ভাবে যুক্ত করতে হতো, যা করা হয়নি।
<mark>নিরপেক্ষভাবে বিচার করলে, আইনের এই আক্ষরিক ও অ-ভূতাপেক্ষ (Non-retroactive) ব্যাখ্যাটিই আইনিভাবে অধিকতর নিরাপদ ও প্রচলিত।</mark> কারণ, কোনো অধিকারের মেয়াদ বা ব্যাপ্তি যদি পেছনের তারিখ থেকে বাড়াতে হয়, তবে আইনে তা অত্যন্ত স্পষ্টভাবে লিখে দিতে হয়।
'''আন্তর্জাতিক উদাহরণ'''
আন্তর্জাতিক রীতির দিকে তাকালেও অ-ভূতাপেক্ষতার প্রমাণ মেলে। উদাহরণস্বরূপ, যুক্তরাষ্ট্রের কপিরাইট মেয়াদ বৃদ্ধির আইন, ''Sonny Bono Copyright Term Extension Act ([https://www.copyright.gov/legislation/s505.pdf CTEA 1998]'')-এর 102(b) ধারায় বিদ্যমান কপিরাইটগুলোর মেয়াদও ভূতাপেক্ষভাবে বৃদ্ধি পাওয়ার বিষয়টি স্পষ্টভাবে উল্লেখ করা ছিল। একইভাবে, ইউরোপীয় ইউনিয়নের কপিরাইট মেয়াদ নির্দেশিকা '''('''[https://eur-lex.europa.eu/legal-content/en/TXT/?uri=CELEX:31993L0098#:~:text=regulating%20moral%20rights.-,Article%2010,-Application%20in%20time Directive 93/98/EEC]''')'''-এর Article 10-এ (Application in time) অত্যন্ত দ্ব্যর্থহীন ভাষায় বলা হয়েছিল যে, এই নির্দেশিকা পাসের দিন যেসব কর্ম কপিরাইট দ্বারা সুরক্ষিত আছে, সেগুলোর মেয়াদ বৃদ্ধি পাবে। এছাড়া, যুক্তরাজ্যের '[https://www.legislation.gov.uk/uksi/1995/3297/contents The Duration of Copyright and Rights in Performances Regulations 1995]-এ যখন মেয়াদ বাড়ানো হয়, তখন এর পার্ট-৩ (Transitional Provisions)-এ '[https://www.legislation.gov.uk/uksi/1995/3297/regulation/17 Extended and revived copyright]' শিরোনামে বিদ্যমান কর্মের মেয়াদ বৃদ্ধির কথা সুনির্দিষ্টভাবে উল্লেখ করা হয়েছিল। বাংলাদেশের আইনে বিদ্যমান কর্মের মেয়াদ বৃদ্ধির পক্ষে এমন কোনো স্পষ্ট ঘোষণা বা আইনি ভাষ্য নেই।
'''কপিরাইট অধ্যাদেশ, ১৯৬২''':
আমাদের চূড়ান্ত গন্তব্য ১৯৬২ সালের কপিরাইট অধ্যাদেশ। কপিরাইট আইন, ২০০০ পূর্ববর্তী আইনের মেয়াদসমূহ সংরক্ষণ করে। কপিরাইট অধ্যাদেশ, ১৯৬২-এর মেয়াদসমূহ নিচে দেওয়া হলো:
{{Collapse top|{{anchor|মেয়াদ ৬২}}CHAPTER III<br>TERM OF COPYRIGHT<br>{{url|https://www.wipo.int/wipolex/en/legislation/details/5047|The Copyright Ordinance, 1962}}}}
18. Term of copyright in published <mark>literary, dramatic, musical and artistic works.</mark>-
:Except as otherwise hereinafter provided, copyright shall subsist in any literary, dramatic, musical or artistic work (other than a photograph) published within the life-time of the author until <mark>fifty years</mark> from the beginning of the calendar year next following the year in which the <mark>author dies</mark>. Explanation-In this section, the reference to the author shall, in the case of a work of joint authorship, be construed as a reference to the author who dies last.
19. Term of copyright in posthumous work.-
:(1) In the case of a literary, dramatic or musical work or an engraving, in which copyright subsists at the date of the death of the author or, in the case of any such work of joint authorship, at or immediately before the date of the- death of the author who dies last, but which or any adaptation of which, has not been published before that date, copyright shall subsist until fifty years from the beginning of the calendar year next following the year in which the work is first published or, where an adaptation of the work is published in any earlier year, from the beginning of the calendar year next following that year.
:(2) For this purposes of this section, a literary, dramatic or musical work or an adaptation of any such work shall be deemed to have been published, if it has been performed in public or if any records made in respect of the work have been sold, or offered for sale, to the public.
20. Term of copyright in cinematographic works, records and photographs.
:(1) In the case of a cinematographic work, copyright shall subsist until fifty years fro.n the beginning of the calendar year next following the year in which the work is published.
:(2) In the case of a record, copyright shall subsist until fifty years from the beginning of the calendar year next following the year in which the record is published.
:(3) In the case of a photograph, copyright shall subsist until fifty years from "the beginning of the calendar year next following the year in which the photograph is published.
20A. Term of copyright in broadcast.-
:In the case of a broadcast, copyright shall subsist until twenty-five years from the beginning of the calendar year next following the year in which the broadcast first took place.
21. Term of copyright in anonymous and pseudonymous work.-
:(1) In the case of a literary, dramatic, musical or artistic work (other than a photograph), which is published anonymously or pseudonymously, copyright shall subsist until fifty years from the beginning of the calendar year next following the year in which the work is first published.<br>Provided that where the identity of the author is disclosed before the expiry of the said period, copyright shall subsist until fifty years from the beginning of the calendar year next following the year in which the author dies.
:(2) In sub-section (1), references to the author shall, in the case of an anonymous work of joint authorship be construed,
::(a) where the identity of one of the authors is disclosed as references to that author;
::(b) where the identity of more authors than one is disclosed, as references to the author who dies last from amongst such authors.
:(3) In sub-section (1), references to the author shall, in the case of a pseudonymous work of joint authorship, be construed,
::(a) where the names of one or more (but not all) of the authors are pseudonym and his or their identity is not disclosed, as references to the author whose name is not a pseudonym, or, if the names of two or more of the authors are not pseudonyms, as references to such one of those authors who dies last;
::(b) where the names of one or more (but not all ) of the authors are pseudonyms and the identity of one or more of them is disclosed, as references to the author who dies last from amongst the authors whose names are not pseudonyms and the authors whose names are pseudonyms and are disclosed; and
::(c) where the names of all the authors are pseudonyms and the identity of one of them is disclosed, as references to the author whose identity is disclosed or, if the identity of two or, more of such authors is disclosed as references to such one of those authors who dies last. Explanation-s-Pot the purposes of this section, the identity of an author shall be deemed to have been disclosed, if either the identity of the author is disclosed publicly by both the author and the publisher or is otherwise established to the satisfaction of the Board by that author.
22. Term of copyright in <mark>Government works</mark> and in works of International Organisations.-
:(l) Copyright in a Government work shall, where government is the first owner of the copyright therein, subsist until <mark>fifty years</mark> from the beginning of the calendar year next following the year in which the work is first published.
:(2) In the case of a work of an international organisation to which the provisions of section 53 apply, copyright shall subsist shall until fifty years from the beginning of the calendar year next following the year in which the work is first published.
23. Term of copyright in unpublished work.-
:(1) If a work, whose author's identity is known, is not published posthumously within fifty years after the death of the author, such work shall fall into the public domain after fifty years from the beginning of the calendar year next following the year in which the author dies.
:(2) If a work, whose author's identity is not known, is not published within fifty years of its creation, such work shall fall into the public domain after fifty years from the beginning of the calendar year next following the year in which the work is created.
{{Collapse bottom|}}
=== সংশোধন বনাম রহিতকরণ ===
কপিরাইটের মেয়াদ বৃদ্ধির ক্ষেত্রে প্রতিবেশী দেশ ভারতের একটি সুপরিচিত নজির রয়েছে, যা আপাতদৃষ্টিতে আমাদের প্রস্তাবনার বিরুদ্ধে যাচ্ছে বলে মনে হতে পারে। স্বাধীন ভারতে ১৯৯২ সালের সংশোধনী আইনের ([[:en:Indian_Copyright_Act_(3rd_Amendment)_1992|The Copyright Amendment Act, 1992]]) মাধ্যমে কপিরাইটের সাধারণ মেয়াদ ৫০ থেকে বাড়িয়ে ৬০ বছর করা হয়। এই সংশোধনী পাসের সময় ভারতে যে কর্মগুলোর কপিরাইট তখনো বিদ্যমান (Alive) ছিল, সেগুলো স্বয়ংক্রিয়ভাবে নতুন বর্ধিত ৬০ বছরের সুবিধা পেয়েছিল। প্রশ্ন আসতে পারে, ভারতে যদি বিদ্যমান কর্মের মেয়াদ বেড়ে থাকে, তবে বাংলাদেশে ২০০০ সালের নতুন আইন পাসের সময় বিদ্যমান কর্মগুলোর মেয়াদ কেন ৬০ বছর হবে না?
এর উত্তর লুকিয়ে আছে দুই দেশের আইন প্রণয়নের কাঠামোগত পার্থক্যের (''Amendment'' বনাম ''Repeal'') মধ্যে। ভারতের এই মেয়াদ বৃদ্ধির পেছনে সবচেয়ে বড় অনুঘটক ছিল বিশ্বকবি রবীন্দ্রনাথ ঠাকুরের কর্মের কপিরাইট। ১৯৪১ সালে তাঁর মৃত্যু হওয়ায় তৎকালীন আইন অনুযায়ী তাঁর কর্মের কপিরাইট ১৯৯১ সালের ৩১ ডিসেম্বর শেষ হওয়ার কথা ছিল। এই মেয়াদ শেষ হওয়ার মাত্র তিন দিন আগে ভারত সরকার তড়িঘড়ি করে একটি অধ্যাদেশ জারি করে মেয়াদ [https://www.telegraphindia.com/india/tagore-copyright-freedom-at-midnight/cid/910127?utm_source=chatgpt.com ১০ বছর বাড়িয়ে দেয়]। পরবর্তীতে ১৯৯২ সালে যখন এটিকে স্থায়ী আইন হিসেবে পাস করা হয়, তখন ভারত ১৯৯১ সালের সাময়িক অধ্যাদেশটি রেটিফাই করা সাপেক্ষে রহিত করলেও তাদের ১৯৫৭ সালের মূল আইনটিকে রহিত (Repeal) করেনি, বরং কেবল মূল একটি 'সংশোধনী' (Amendment) এনেছিল।
এই সংশোধনীর মাধ্যমে মূল আইনের পঞ্চম অধ্যায়ে 'fifty years'-এর স্থলে 'sixty years' প্রতিস্থাপিত করা হয় এবং নতুন আইনটিকে ভূতাপেক্ষভাবে (Retroactively) ঠিক সেই ২৮ ডিসেম্বর ১৯৯১ তারিখ থেকেই কার্যকর ঘোষণা করা হয়। ফলে চলমান মূল আইন যখন 'সংশোধিত' হয়, তখন আইনের অধীনে থাকা সমস্ত বিদ্যমান বা 'অ্যালাইভ' অধিকারগুলো স্বয়ংক্রিয়ভাবে নতুন সংশোধিত অবস্থার সুবিধা পায়।
বিপরীতে, বাংলাদেশ সরকার ১৯৬২ সালের মূল আইনটিকে (অধ্যাদেশ) 'সংশোধন' করেনি, বরং ২০০০ সালের আইনের ১০৫(১) ধারা দিয়ে তা সম্পূর্ণরূপে রহিত (Repeal) করে একটি নতুন আইন প্রবর্তন করে। যখন কোনো পুরোনো আইন বাতিল করে নতুন আইন আনা হয়, তখন স্বয়ংক্রিয়ভাবে পুরোনো আইনের অধীনে থাকা কর্মগুলো নতুন আইনের সুবিধা পায় না। কারণ, '''The General Clauses Act, 1897'''-এর ধারা ৬(c) অনুযায়ী, কোনো আইন রহিত (Repeal) হলে নতুন আইনে স্পষ্ট 'ভিন্নরূপ কোনো উদ্দেশ্য' (Different intention) না থাকলে, বাতিলকৃত আইনের অধীন অর্জিত অধিকার বা মেয়াদের কাঠামো (যেমন- ৫০ বছরের সীমা) ক্ষুণ্ণ বা পরিবর্তিত হয় না।
বাংলাদেশ যদি ভারতের মতো শুধু "মৃত কর্মগুলো আর জ্যান্ত হবে না" (ধারা ১০৫(৩)) লিখেই ক্ষান্ত হতো, তবে হয়তো বিতর্কের সুযোগ থাকত। কিন্তু আইনে ১০৫(৫) ধারায় অত্যন্ত সুনির্দিষ্টভাবে বলা হয়েছে: ''"...তাহার ক্ষেত্রে এই আইন কার্যকর না হইলে যে সময়ের জন্য তিনি ঐরূপ অধিকার বা স্বার্থের অধিকারী হইতেন তাহা অব্যাহত থাকিবে।"''
অর্থাৎ, আইনসভা পরিষ্কার করে দিয়েছে যে, মেয়াদের ক্ষেত্রে নতুন আইনে তাদের 'ভিন্নরূপ কোনো উদ্দেশ্য' নেই। তারা পুরোনো আইনটি বাতিল করলেও, বিদ্যমান কর্মগুলোর মেয়াদ পুরোনো আইন (৫০ বছর) অনুসারেই চলবে। অধিকন্তু, ১০৫(৭) ধারায় 'জেনারেল ক্লজেস অ্যাক্ট'-এর প্রয়োগ নিশ্চিত করে এই মেয়াদের সুরক্ষাকে সম্পূর্ণ নিশ্ছিদ্র করা হয়েছে।
=== সার্বিক উপসংহার ===
উপরের বিস্তারিত আইনি পর্যালোচনা, ভারত ও অন্যান্য আন্তর্জাতিক নজিরের তুলনামূলক বিশ্লেষণের ভিত্তিতে এটি সন্দেহাতীতভাবে প্রমাণিত হয় যে, ২০০০ সালের ১৮ জুলাইয়ের পূর্বে প্রকাশিত কোনো কর্ম নতুন আইনের সাধারণ ৬০ বছরের মেয়াদের সুবিধা পাবে না। ভারতের আইনটি ছিল চলমান আইনের একটি 'সংশোধনী' হওয়ায় আতা বাংলাদেশের ২০০০ সালের সম্পূর্ণ নতুন আইনের সঙ্গে প্রাসঙ্গিক হয় না।) তাই ২০০০-এর আইনের ১০৫(৫) ধারার মাধ্যমে এবং ২০২৩ আইনে তা কন্টিনিউ করার মাধ্যমে ২০০০-পূর্ব কর্মের কপিরাইটের মেয়াদ '''প্রকাশ বা লেখকের মৃত্যু + ৫০ বছর''' হিসেবেই আইনিভাবে নির্ধারিত হবে। ফলে আজকের তারিখ: {{#time: j F Y}} হিসেবে ৫০ বছর তথা {{#time: j F Y | -50 years }}-এর আগের সরকারি বা প্রাতিষ্ঠানিক কর্ম কিংবা মৃত্যুবরণকারী লেখকের কর্ম উইকিসংকলনে আপলোড দিয়ে মুদ্রণ সংশোধন করতে কোনও আইনি বাধা নেই। [[ব্যবহারকারী:Tausheef Hassan|Tausheef Hassan]] ([[ব্যবহারকারী আলাপ:Tausheef Hassan|আলাপ]]) ১৫:০৯, ২০ মার্চ ২০২৬ (ইউটিসি)
* {{সমর্থন}}: প্রস্তাবকারী হিসেবে। [[ব্যবহারকারী:Tausheef Hassan|Tausheef Hassan]] ([[ব্যবহারকারী আলাপ:Tausheef Hassan|আলাপ]]) ১৭:০২, ২০ মার্চ ২০২৬ (ইউটিসি)
* {{সমর্থন}} [[ব্যবহারকারী:Mehedi Abedin|Mehedi Abedin]] ([[ব্যবহারকারী আলাপ:Mehedi Abedin|আলাপ]]) ১৮:১৪, ২০ মার্চ ২০২৬ (ইউটিসি)
* সহ-প্রস্তাবক হিসেবে {{দৃঢ় সমর্থন}}। শুরুতে আমি বরং বিরোধিতাকারী হিসেবেই প্রস্তাবককে নানান যুক্তি দেওয়ার চেষ্টা করেছিলাম। কিন্তু দুজনে মিলে দীর্ঘ আলোচলা, ব্যাখ্যা বিশ্লেষণ ও ক্রসচেক শেষে শেষপর্যন্ত এই ব্যাখ্যাতেই উপনীত হতে সক্ষম হই। ২০০০-পূর্ব প্রকাশনার জন্য এটাই এই আইনের সবচেয়ে যৌক্তিক ব্যাখ্যা। সবশেষে, বেশ কিছুদিন ধরে নিরলসভাবে বাংলাদেশের কপিরাইট আইনের খুঁটিনাটি বিশ্লেষণ করে আইনে লুকিয়ে থাকা এই বিধান এবং কমন্সে [[C:Commons:Village pump/Copyright#FoP in Bangladesh|বাংলাদেশের ভবনের ছবির কপিরাইট-অযোগ্যতা]]র বিষয়টি খুঁজে বের করার জন্য প্রস্তাবকে অসংখ্য ধন্যবাদ। ≈ <b style="border:2px solid#103;font-family:georgia;font-variant:small-caps">[[User:MS_Sakib|<b style="background-color:#1E816F;color:#fff"> MS Sakib </b>]] [[User talk:MS Sakib|📩]] <b>·</b>[[Special:Contributions/MS Sakib|📝]]</b> ১১:৩৮, ২১ মার্চ ২০২৬ (ইউটিসি)
* {{সমর্থন}} [[ব্যবহারকারী:Yahya|Yahya]] ([[ব্যবহারকারী আলাপ:Yahya|আলাপ]]) ০৭:০৫, ২৩ মার্চ ২০২৬ (ইউটিসি)
:{{Comment}} — উপরে দেওয়া ব্যাখ্যার সঙ্গে আমার কিছু মতপার্থক্য আছে। নিচে তার আলোচনা করছি:—
* '''ভূতাপেক্ষিতা''' — উপরে বলা হয়েছে যে নতুন আইনে পুরনো বইয়ের কপিরাইটের মেয়াদ বৃদ্ধি পেলে তা ভূতাপেক্ষ (retrospective), যা কিনা General Clauses Act অনুযায়ী হওয়ার কথা নয়; ফলে নতুন আইন দিয়ে পুরনো আইনের অধীনে প্রকাশিত বইয়ের কপিরাইটের মেয়াদ বাড়তে পারে না। আমার তা মনে হয় না। যে বইয়ের কপিরাইট জীবিত আছে, সেই জীবিত কপিরাইটের জীবৎকাল বাড়ানোকে ভূতাপেক্ষ বলা যায় কি? যদি তা হয়, তবে কবে থেকে ভূতাপেক্ষ? যদি পুরনো আইনের জন্মলগ্ন থেকে ভূতাপেক্ষ হয়, তবে যেসব বইয়ের কপিরাইট অধুনা শেষ হয়ে গেছে কিন্তু পুরনো আইনের আমলে কিছুকাল আগে কপিরাইটে ছিল, সেই বইগুলিও এই ভূতাপেক্ষিতার সুযোগ লাভ করত এবং তাদের কপিরাইট পুনর্জীবিত হত। কিন্তু তা হয় না। কপিরাইট শেষ হয়ে গেলে এই তথাকথিত ভূতাপেক্ষ প্রাবধান দিয়ে কপিরাইট আর ফিরে আসে না। এতেই প্রমাণিত হয় যে এটা ভূতাপেক্ষ নয়; নতুন আইনে পুরনো বইয়ের কপিরাইটের মেয়াদ বাড়লে তা ভূতকাল থেকে বাড়ে না, বরং বর্তমান কাল থেকে বাড়ে। সেজন্যেই বিগত-কপিরাইট বইগুলি এর সুবিধা পায় না। ফলে এর সঙ্গে General Clauses Act-এর কোনই সংঘাত নেই।
* '''রবীন্দ্রসাহিত্য ও ভারতীয় আইন''' — ১৯৯২ সালে ভারতীয় কপিরাইট আইন সংশোধন করে কপিরাইটের মেয়াদ লেখকের মরণোত্তর ৫০ বছর থেকে বাড়িয়ে ৬০ বছর করা হয়। সেসময় রবীন্দ্রসাহিত্যের কপিরাইট ছিল কেন্দ্রীয় সরকারের অধীন বিশ্বভারতীর কাছে। তাই এই অতীব লাভজনক কপিরাইটের মেয়াদবৃদ্ধিই ছিল আইন-সংশোধনের মূল কারণ। প্রস্তাবকের মতে এমনটা হওয়া ভূতাপেক্ষ, তাহলে কিভাবে হল? প্রস্তাবকের দেওয়া ব্যাখ্যা অনুযায়ী ১৯৯২-তে নতুন আইন না বানিয়ে চলমান আইনের সংশোধন হয়েছিল, তাই এটা ভূতাপেক্ষ নয়; নতুন আইন বানালে ভূতাপেক্ষ হত। বেশ, কিন্তু রবীন্দ্রনাথের লেখাগুলো তো চলমান ১৯৫৭-এর আইনের অধীনে প্রকাশিতই হয় নি। রবীন্দ্রনাথের প্রথম দিককার লেখাগুলি প্রকাশিত হয়েছিল ১৮৪৭-এর আইনের অধীনে (তাতে লেখকের মরণোত্তর সাত বছর কপিরাইট থাকত), আর পরের দিকের বইগুলি প্রকাশিত হয় ১৯১৪-এর আইনের অধীনে (তাতে মরণোত্তর ৫০ বছরের বিধান ছিল)। ১৮৪৭ এবং ১৯১৪-এর সাপেক্ষে ১৯৫৭-এর আইন হচ্ছে নতুন আইন। এই নতুন আইন দিয়ে কিভাবে রবীন্দ্রসাহিত্যের মেয়াদবৃদ্ধি করা গেল? এটা কি ভূতাপেক্ষ হচ্ছে না? প্রস্তাবক দেখাতে চেয়েছেন যে বাংলাদেশের ২০০০-এর আইনের ১০৫(৫) ধারা একটা ভূতাপেক্ষিতা-প্রতিরোধক ব্যবস্থা, যার কারণে ২০০০-এর আইন দিয়ে আগের বইগুলির কপিরাইটের মেয়াদবৃদ্ধি ঘটেনি। কিন্তু একই ব্যবস্থা তো ভারতীয় আইনেও ছিল। ভারতের ১৯৫৭-এর আইনের ৭৯(৫) ধারা এবং বাংলাদেশের ২০০০-এর আইনের ১০৫(৫) ধারা অবিকল এক ধারা, শুধু ধারার নম্বর আলাদা। কাজেই একই নিয়মের উপস্থিতিতে ভারতে যদি কপিরাইটের মেয়াদবৃদ্ধি ঘটে থাকে, তবে বাংলাদেশে তা ঘটেনি বলে কেন আমরা ধরে নেব?
* '''ভারতীয় ও বাংলাদেশি আইনের তুলনাযোগ্যতা''' — এখানে মনে পারে, ভারতীয় ও বাংলাদেশি আইন ভিন্নপথগামী, তাই পরিণতিও ভিন্ন। কিন্তু ব্যাপারটা সেরকম নয়। দুদেশেরই আইনি পরিকাঠামো, বিভিন্ন স্থানীয় সংশোধনী সহ, কলোনিয়াল লেগ্যাসি। ব্রিটিশদের বানানো General Clauses Act, স্থানীয় সংশোধনী সহ, দুদেশেই চালু আছে। কাজেই একটার সঙ্গে অন্যটা তুলনাযোগ্য। কাজেই ভারতীয় আইনে যদি কপিরাইটের মেয়াদ বাড়তে পারে, তবে একই ব্যবস্থাযুক্ত বাংলাদেশি আইনে তা না বাড়ার কোন কারণ নেই। তাহলে ১০৫(৫) ধারার উপযোগিতা কী রইল? হ্যাঁ, উপযোগিতা আছে বৈকি, কিন্তু তা প্রস্তাবকের ব্যাখ্যার অনুসারী নয়। নিচে অন্যভাবে ব্যাখ্যার চেষ্টা করছি।
* '''রহিতকরণ ধারা ও তার তাৎপর্য''' — যখন পুরনো আইন বাতিল করে নতুন আইন রচিত হয়, তখন নতুন আইনের শেষদিকে একটা রহিতকরণ ধারা (repeal section) থাকে। ভারত ও বাংলাদেশ দুদেশেই এই দস্তুর। পুরনো আইনের সুবিধাপ্রাপকরা নতুন আইন দিয়ে যাতে ক্ষতিগ্রস্ত না হন, সেটা নিশ্চিত করতে এই ধারায় কয়েকটা উপধারা থাকে। নতুন আইনে কি সুবিধা পাওয়া যাবে বা যাবে না, সেসব এই ধারায় থাকে না, শুধু পুরনো আইনই এর ফোকাস। বাংলাদেশি আইনের ১০৫(৫) ধারা এই রহিতকরণ ধারার একটা উপধারা। এই ধারা দিয়ে পুরনো আইনের সুবিধাপ্রাপকদের লেখকের মরণোত্তর ৫০ বছর কপিরাইটের অধিকার অক্ষুণ্ণ রাখা হয়েছে। অর্থাৎ নতুন আইনে মেয়াদ যদি ৫০ থেকে কমিয়ে ৪০ বছর করা হত, তাহলেও পুরনো আইনের সুবিধাপ্রাপকদের, এই ধারার কারণে, ৫০ বছরের অধিকার অক্ষুণ্ণ থাকত। কিন্তু নতুন আইনের সুবিধা-অসুবিধার জন্য এই ধারা নয়। অর্থাৎ, পুরনো আইনের সুবিধাপ্রাপকরা এই ধারা অনুযায়ী ৫০ বছরের অধিকার পাওয়ার পর, নতুন আইনের উপযুক্ত ধারা অনুযায়ী আরও অতিরিক্ত ১০ বছর পেতে পারেন। তাতে কোনই বাধা নেই।
* '''নতুন আইনে পুরনো কপিরাইটের আত্তীকরণ''' — দেশে নতুন রাজা হলে পুরনো রাজার বিদ্যমান প্রজারা স্বতস্ক্রিয়ভাবে নতুন রাজার প্রজা হয়ে যায়। সেইরকম, নতুন কপিরাইট আইন হলে আগে থেকে কপিরাইটে থাকা বইগুলি স্বতস্ক্রিয়ভাবে নতুন আইনের আওতায় চলে আসে, ফলে তাদের কপিরাইটের মেয়াদ কমানো না গেলেও বাড়ানো যায়। এই কারণেই ভারতে রবীন্দ্রসাহিত্যের কপিরাইটের মেয়াদবৃদ্ধি ঘটেছিল।
* '''ব্যবহারিক উদাহরণ''' — এটা সবারই জানা যে বিখ্যাত বইয়ের কপিরাইটের মেয়াদ শেষ হওয়ামাত্রই অন্যান্য প্রকাশকরা সেগুলি ছেপে বাজারে ছাড়তে থাকে। রবীন্দ্রসাহিত্যের বেলাতেও এই ব্যাপার ঘটেছিল। যদি বাংলাদেশে ২০০০ সালের আইনে পুরনো বইয়ের কপিরাইটের মেয়াদ না বেড়ে থাকে, তবে ১৯৫০ ও পরবর্তীতে মৃত লেখকদের বইগুলি এর সুবিধা পায় নি। সেক্ষেত্রে লেখকমৃত্যুর পর ৫০ পেরোনো কিন্তু ৬০-অনুত্তীর্ণ বিভিন্ন বিখ্যাত বই অবশ্যই অন্যান্য প্রকাশকরা বাজারে ছেড়ে থাকবেন। প্রস্তাবকের কাছ থেকে এমন কিছু ব্যবহারিক উদাহরণ আশা করছি, যাতে এই কপিরাইট না বাড়াটা পরিষ্কারভাবে প্রতিপন্ন হয়। — [[ব্যবহারকারী:Hrishikes|হৃষীকেশ]] ([[ব্যবহারকারী আলাপ:Hrishikes|আলাপ]]) ১২:৪২, ২৩ মার্চ ২০২৬ (ইউটিসি)
*:{{ping|Hrishikes}} প্রথমেই উপরোক্ত প্রস্তাবনাসমূহ সময় নিয়ে পড়ার এবং একটি গঠনমূলক সমালোচনার জন্য আপনাকে আন্তরিকভাবে ধন্যবাদ জানাই। শিক্ষাগত কারণে উত্তর দিতে দেরি হওয়ায় আমি দুঃখিত।
*:<br>১। '''ভূতাপেক্ষিতা''' — ভূতাপেক্ষিতা কী? ভূতাপেক্ষিতা বলতে সাধারণত যা বুঝায় যে, ধরুন "জনাব 'ক' কাউকে খুন করলো"। কিন্তু তৎকালীন সময়ে আইনানুযায়ী খুন করা অবৈধ ছিলো না। কিন্তু পরে নতুন আইন সৃষ্টির মাধ্যমে খুন করাকে অপরাধ হিসেবে ঘোষণা করা হয়। যেহেতু খুন করার কার্য, আইন প্রণয়নের আগে সংঘটিত হয়েছিল, তাই জনাব 'ক'কে শাস্তি দেওয়া যাবে না। এখানে "জনাব 'ক' তো বেঁচে আছেন" বলে তাকে আদালতে নেওয়ার সুযোগ নেই।
*:<br>আমি মানছি যে, কপিরাইটের ক্ষেত্রে বিষয়টা একটু জটিল। একটি কর্মের কপিরাইট শুরু হয় তার প্রকাশকাল থেকে। একটি কর্মকে কপিরাইট অফিসে লাইসেন্স রেজিস্টার করা হয়, বা প্রকাশকাল থেকে একটি অটো লাইসেন্স স্বয়ংক্রিয়ভাবে প্রদান করা হয় (রেজিস্টার করা না হলেও)। এই লাইসেন্সটি কপিরাইট মেয়াদ পর্যন্ত বৈধ অথবা লাইসেন্সে বলা আছে যে আপনি "X" বছর অধিকার পাবেন। এখন নতুন আইন এলো। ফলে আইনের পরবর্তী নতুন প্রকাশিত বই বা কর্মসমূহ নতুন আইনের অধীনে নতুন লাইসেন্স নতুন মেয়াদ সময়ের জন্য প্রাপ্ত হবে। কিন্তু পুরাতন কর্মের মেয়াদ বৃদ্ধির জন্য আপনাকে সময়ে পিছনে যেতে হবে এবং সেই লাইসেন্সকে পরিবর্তন করতে হবে; অথবা বিদ্যমান লাইসেন্সকে আপডেট করতে হবে। এইটাই ভুতাপেক্ষতা। আইন সাধারণত সম্মুখমুখী বা তার সামনের কর্মে affect করে, পিছনের বা বিদ্যমান কর্মকে না। বিদ্যমান মামলা যেমন পুরাতন আইনেই চালাতে হয়।
*:<br>ধরুন বাংলাদেশের সংবিধানে ইন্টারনেট সংযোগ মৌলিক অধিকার বলে স্বীকৃত নয়। কিন্তু পরে সংশোধনী করে একে মৌলিক অধিকার ঘোষণা করা হয়েছে। এখন আপনার যুক্তি অনুসারে, আমি, তাওসীফ হাসান, তো জীবিত আছি। তাহলে কি আমাকে অনেককাল আগে ইন্টারনেট থেকে বঞ্চিত করার জন্য, আমি সরকারের বিরুদ্ধে এখন বর্তমানে মামলা দিতে পারব? কপিরাইটও এক প্রকার অধিকার। কপিরাইট জীবিত থাকে না; বরং তার লাইসেন্স চলমান থাকে। আর লাইসেন্সের পরিবর্তন করতে হলে, সেটি অবশ্যই উল্লেখ করতে হবে। স্পষ্ট উল্লেখ না থাকলে আইন শুধু সামনের কর্মকে affect করে।
*:<br>এখন মূল যুক্তিতে আসি। আমার উত্তরের প্রথমাংশের সব কথাই মোটামুটি অপ্রাসঙ্গিক। আপনি মূল প্রস্তাবনায় উদ্ধৃতিকৃত সকল আইন পড়ে দেখতে পারেন। কোথাও "ভূতাপেক্ষিতা" বা "retroactivity' শব্দটি উচ্চারিত হয়নি। আপনার সমালোচনা মূলত "ভূতাপেক্ষিতা" শব্দটি কেন্দ্র করে। এই শব্দ আইনের কোথাও নেই। বরং আইনে কিছু শর্ত দেওয়া হয়েছে। এই শর্তের ভিত্তিতে আমরা আইনকে ভূতাপেক্ষ বলছি। এই উল্টো; "ভূতাপেক্ষিতা" শব্দের ভিত্তিতে আমরা শর্ত প্রতিপাদন করছি না। আইনে কি কি শর্ত আছে? ১০৫(২) বলে পূর্বের মামলা পূর্বের আইনে চলবে। ১০৫(৩) বলে কপিরাইট অধ্যাদেশ, ১৯৬২ এর অধীন বিবেচিত কপিরাইটহীন অসুরক্ষিত কর্ম নতুন করে সুরক্ষা পাবে না। ১০৫(৪) বলে পূর্ববর্তী কর্ম নতুন অধিকার পাবে না। ১০৫(৫) মেয়াদ বৃদ্ধি আটকায়। ১০৫(৬) পুনঃব্যবহার অনুমতি বহাল রাখে। এই সকল শর্তের ভিত্তিতে আমরা বলছি আইনটি ভুতাপেক্ষ। এর উল্টোটি নয়।
*:<br>আপনি লক্ষ্য করে দেখবেন যে, এই ধারাসমূহে বলা নেই যে মেয়াদ পার হয়ে যাওয়া পুরাতন কর্ম নতুন করে কপিরাইট পাবে না; কেননা ১০৫(৫) দ্বারা আগেই মেয়াদ বৃদ্ধি আটকানো হয়েছে। মূল প্রস্তাবনার 'অপ্রয়োজনীয়তার বিরুদ্ধে নীতি' (Rule Against Redundancy)-এর কারণেই তা আলাদা করে উল্লেখ করা হয়নি।
<div style="float: right; margin-left: 15px; margin-bottom: 5px; border: 2px solid yellow">
{{show
|1= আন্তর্জাতিক উদাহরণ
|2=আন্তর্জাতিক রীতির দিকে তাকালেও অ-ভূতাপেক্ষতার প্রমাণ মেলে। উদাহরণস্বরূপ, যুক্তরাষ্ট্রের কপিরাইট মেয়াদ বৃদ্ধির আইন, ''Sonny Bono Copyright Term Extension Act ([https://www.copyright.gov/legislation/s505.pdf CTEA 1998]'')-এর 102(b) ধারায় বিদ্যমান কপিরাইটগুলোর মেয়াদও ভূতাপেক্ষভাবে বৃদ্ধি পাওয়ার বিষয়টি স্পষ্টভাবে উল্লেখ করা ছিল। একইভাবে, ইউরোপীয় ইউনিয়নের কপিরাইট মেয়াদ নির্দেশিকা '''('''[https://eur-lex.europa.eu/legal-content/en/TXT/?uri=CELEX:31993L0098#:~:text=regulating%20moral%20rights.-,Article%2010,-Application%20in%20time Directive 93/98/EEC]''')'''-এর Article 10-এ (Application in time) অত্যন্ত দ্ব্যর্থহীন ভাষায় বলা হয়েছিল যে, এই নির্দেশিকা পাসের দিন যেসব কর্ম কপিরাইট দ্বারা সুরক্ষিত আছে, সেগুলোর মেয়াদ বৃদ্ধি পাবে। এছাড়া, যুক্তরাজ্যের '[https://www.legislation.gov.uk/uksi/1995/3297/contents The Duration of Copyright and Rights in Performances Regulations 1995]-এ যখন মেয়াদ বাড়ানো হয়, তখন এর পার্ট-৩ (Transitional Provisions)-এ '[https://www.legislation.gov.uk/uksi/1995/3297/regulation/17 Extended and revived copyright]' শিরোনামে বিদ্যমান কর্মের মেয়াদ বৃদ্ধির কথা সুনির্দিষ্টভাবে উল্লেখ করা হয়েছিল। বাংলাদেশের আইনে বিদ্যমান কর্মের মেয়াদ বৃদ্ধির পক্ষে এমন কোনো স্পষ্ট ঘোষণা বা আইনি ভাষ্য নেই
}}</div>
*:<br>এই বিষয়ে আমি আন্তর্জাতিক উদাহরণ মূল প্রস্তাবনায় টেনেছি। আমি আবার উল্লেখ করছি।
*:<br>এই অংশে আমি বেশ কিছু দাবি করেছেন। যদিও আমি মনে করি দাবিসমূহ আইনের ভিত্তিতে নয়, আপনি চাইলে আপনার দাবির আইনি উৎস ব্যক্ত করতে পারেন।
*:<br>২। '''রবীন্দ্রসাহিত্য ও ভারতীয় আইন''': রবীন্দ্রনাথের কিছু কর্ম ১৮৬৭ সালের আইনের অধীন প্রকাশিত হয়েছে। ১৯১৪ এর আইনের [https://ipindia.gov.in/writereaddata/Portal/Images/pdf/The_Copyright_Act__1914.pdf সর্বশেষ পাতা] অনুযায়ী এটি স্পষ্টত অভূতাপেক্ষি। ১৯১৪-এর আইন নিজেই ১৮৬৭ সালের একটি রেজিস্ট্রেশনের আইনকে সংশোধন করে। যার মাধ্যমে রেজিস্টারকৃত সকল কর্মকে ১৯১৪-এর আইন আত্তীকরণ করে। উল্লেখ্য তৎকালীন যুগে শুধুমাত্র রেজিস্টারকৃত কর্ম কপিরাইট সুরক্ষা পেত। ১৯১৪-এর আইনে নতুন আইনের মতো ভুতাপেক্ষতার কোনো ধারা নেই। ফলে ১৮৪৭ সালের আইনের অধীনের যেসকল কর্ম যা প্রকাশিত হয়েছিল, ১৯১৪-এর আইন তাদের মেয়াদ বৃদ্ধি করে। সব কপিরাইট আইনকেই ভুতাপেক্ষ মনে করা একটি ভ্রান্ত ধারণা। ১৯৫৭ সালের আইনের ১৯৯২ সালের সংশোধন নিয়ে আমি নিচে আলোচনা করছি।
*:<br>৩। '''ভারতীয় ও বাংলাদেশি আইনের তুলনাযোগ্যতা''': বাংলাদেশ ''কপিরাইট আইন, ২০০০'' এবং ভারতীয় ''কপিরাইট আইন, ১৯৫৭'' তুলনাযোগ্য এটা সত্য, কিন্তু এদের প্রেক্ষাপট সম্পূর্ণ আলাদা। বাংলাদেশের কপিরাইট সুরক্ষার মেয়াদ বৃদ্ধি করা হয়েছে, ''কপিরাইট আইন, ২০০০'' দ্বারা যা সরাসরি পূর্ববর্তী আইনকে রহিত করে। কিন্তু ভারতের কপিরাইট সুরক্ষার মেয়াদের বৃদ্ধি ''কপিরাইট আইন, ১৯৫৭'' দ্বারা করা হয়নি। ভারতে বৃদ্ধি করা হয়েছে ভিন্ন একটা সংশোধনী আইন দ্বারা। ১৯৯২ সালের ১৩ নং আইন - ''কপিরাইট (সংশোধনী) আইন, ১৯৯২'' দ্বারা ভারতের কপিরাইট মেয়াদ মেয়াদ বৃদ্ধি করা হয়েছে। এই আইনটি ''কপিরাইট আইন, ১৯৫৭'' থেকে আলাদা একটি আইন। ১৯৯২ সালের এই আইনের ভুতাপেক্ষিতার ব্যাপারে ধারা আছে। ''কপিরাইট (সংশোধনী) আইন, ১৯৯২''-এর ৩ নং ধারা শুধু পাবলিক ডোমেইনে চলে যাওয়া কর্মকে কপিরাইটেড হওয়া থেকে আটকায়। এই আইনে মেয়াদ বৃদ্ধি আটকানোর ব্যাপারে কিছু লেখা নেই। ফলে কপিরাইট মেয়াদ বৃদ্ধি সম্ভব হয়েছে। বাংলাদেশের মেয়াদ বৃদ্ধিকারী আইন ''কপিরাইট আইন, ২০০০'' পাবলিক ডোমেইনে চলে যাওয়া কর্মকে কপিরাইটেড হওয়া থেকে আটকানোর পাশাপাশি মেয়াদও আটকানো হয়েছে ১০৫(৫) দ্বারা।
*:<br>আমি আমার প্রস্তাবনায় যুক্তি দিয়েছি যে, ২০২৩-এর আইনের মতো করে স্পষ্ট করে না বলায়, কপিরাইট আইন, ২০০০ তার পূর্ববর্তী কর্মকে আত্তীকরণ করেনি। আমার কাছে সেটাই গ্রহণযোগ্য বেশি। তবে আপনি চাইলে ২০০০-এর আইনের ১০৫(৩) ও ১০৫(৪) এবং ভারতীয় বর্তমান আইনের ৭৯(৩) ও ৭৯(৪) দ্বারা বলার সুযোগ আছে যে এই আইন দুটি পূর্ববর্তী কর্মসমূহকে আংশিক আত্তীকরণ করেছে। যেহেতু ১০৫(৫) দ্বারা সরাসরি মেয়াদ বৃদ্ধি আটকানো হয়েছে, তাই এই নিয়ে আমি বেশি কিছু বলতে চাইনি। কিন্তু ভারতীয় আইনে আপনি চাইলে উক্ত ধারা সমূহকে সতর্কতার নীতিমালার দোহাই দিয়ে বলতে পারেন যে, বর্তমান ভারতীয় আইন তার পূর্ববর্তী কর্মকে আত্তীকরণ করেছে এবং পরবর্তীতে ''কপিরাইট (সংশোধনী) আইন, ১৯৯২'' এর মেয়াদ বৃদ্ধি করেছে। ভারতীয় মেয়াদ বৃদ্ধিকারী আইনে বাংলাদেশি ১০৫(৫) বা ভারতীয় ৭৯(৫) এর মতো কোনো মেয়াদ আটকানোর ধারা নেই। বাংলাদেশি আইনে যা আছে।
*:<br>আইনের আদালতে আইনের হুবুহু বাক্য এবং পূর্ববর্তী মামলার উদাহরণ ব্যতীত কিছুই প্রামণ্য নয়। আপনার, আমার, আইনজীবীর, সংবাদপত্রের সাংবাদিকের, আইন প্রণেতার, সরকারি কর্মচারীর, কর্মের প্রকাশকের মতামতকে সাধারণত আমলে নেওয়া হয় না ([http://bdlaws.minlaw.gov.bd/act-details-24.html The Evidence Act, 1872]) এবং উচিতও না (বাংলাদেশের যুদ্ধাপরাধীদের বিচার একটি বিশেষ ক্ষেত্র যেখানে এইসকল প্রকাশনাকে আলামত হিসেবে নেওয়া হয়েছিল<sup>[https://www.cambridge.org/core/books/abs/trials-for-international-crimes-in-asia/trials-for-international-crimes-in-bangladesh/995CD8AA54604F855E32F031EF19E2D4]</sup> <small><sub>[http://bdlaws.minlaw.gov.bd/act-435/section-12495.html ধারা ১৯(৫) The International Crimes (Tribunals) Act, 1973])</sub></small>। ফলে ভারতীয় আইন প্রণয়নের ব্যাপারে শুধু আইনের মূল পাঠ্য ও আদালতের উদাহরণকে আমলে নিতে হবে। কারো মতামত বা ভিন্ন কোন মাধ্যমের তথ্য আমলে নেওয়ার প্রয়োজনীয়তা নেই। সেকারণে আমি আমার প্রস্তাবনায় আইনের আক্ষরিক পাঠ্যের আশ্রয় নিয়েছি শুধু। আরেকটি বিষয় হলো, বিশ্বের বিচারব্যবস্থার সবচেয়ে বড় সমালোচনা হলো, আদালতে রায় সত্যের পক্ষে যায় না; যায় তার পক্ষে যে সবচেয়ে ভালো যুক্তি উপস্থাপন করতে পেরেছে।
*:<br>সাধারণত কোনো দেশের কপিরাইট মেয়াদ বাড়ানোর জন্য প্রতিটি দেশ আলাদা করে আইন প্রণয়ন করে অথবা আইনে সরাসরি উল্লেখ করা থাকে যে, মেয়াদ বৃদ্ধি পূর্ববর্তী কর্মের উপর লাগু হবে। এই বিষয়ে আমি আগেই আন্তর্জাতিক উদাহরণ দিয়েছি। আমেরিকায় "মেয়াদ বৃদ্ধি" নাম দিয়েই আলাদা আইন পাশ করানো হয়েছে। মেয়াদ বৃদ্ধি একটি সংবেদনশীল, গুরুত্বপূর্ণ এবং delicate বিষয়। তাই প্রতিটি দেশ অনেক বিচার বিবেচনা করে আইন প্রণয়ন করে। একটি আইন সাধারণত কমপক্ষে এক থেকে দেড় বছর খসড়া পর্যায়ে থাকে। সরকার stakeholder-দের সাথে আলোচনা করে, আইনজীবীদের মতামত নেয়, আইন মন্ত্রণালয় শুদ্ধিকরণ করে ইত্যাদি। বাংলাদেশের "মুক্ত সরকারি তথ্য আইন"-এর খসড়া ২০১৫ সাল হতে লেখা হচ্ছে।<sup>[https://objectstorage.ap-dcc-gazipur-1.oraclecloud15.com/n/axvjbnqprylg/b/V2Ministry/o/office-sid/2024/12/bad818b033344c2faa5ad1276e9ad0d9.pdf]</sup> কিন্তু ভারতের তৎকালীন আইন প্রণয়নকারী সংস্থার অধিবেশনের বিতর্ক<sup>[https://obhanmason.com/blog/copyright-in-perpetuity/]</sup> ঘেঁটে বুঝা যায়, মাত্র তিন দিন আগে, আইন প্রণয়নকারী সংস্থা কার্যকর থাকা সত্ত্বেও, অধ্যাদেশ জারি করা হয়েছে। এখানে উপরোক্ত আইন প্রণয়নের সাধারণ প্র্যাকটিস মানা হয়নি। ফলে অনেক সমস্যা থেকে গেছে আইনে। এইভাবে ৫০ এর বদলে ৬০ বসিয়ে মেয়াদ বৃদ্ধি করা sloppy কাজ, অনেক খুঁটিনাটি বিষয় বাকি থেকে যায়। মেয়াদ বৃদ্ধির মতো সূক্ষ্ম সংবেদনশীল কাজ আন্তর্জাতিক উদাহরণের মতে আলাদা আইনেই করা হয়। বাংলাদেশের বর্তমান আইনে সরকারের কর্তৃক একটি নির্দিষ্ট কর্মের মেয়াদ বৃদ্ধির সুযোগ রাখা হয়েছে ([http://bdlaws.minlaw.gov.bd/act-1452/section-52693.html ধারা ৬৭])। আমি যতদূর দেখলাম ভারতে সে ব্যবস্থা নেই। ফলে তাড়াহুড়ো হয়েছে বলে একটি যুক্তি দেওয়া সম্ভব। আমার মতে স্বল্প সময়ে সম্মানিত তৎকালীন ভারতীয় আইন প্রণেতাদের এই সিদ্ধান্তই সবচেয়ে উপযুক্ত ছিল। কিন্তু এই কারণে ভারতের এই মেয়াদ বৃদ্ধি মূল আইনের অনেক কিছুর সাথেই সাংঘর্ষিক। তাই আমার মূল প্রস্তাবনার ভারতীয় আইনে অংশকে তার মাতৃ উৎসের মতোই খানকিটা সাংঘর্ষিক মনে হওয়ার সুযোগ আছে। ফলে উপরোক্ত কারণসমূহের কারণে মেয়াদ বৃদ্ধির ক্ষেত্রে <u>বাংলাদেশেরসহ যেকোনো দেশের কপিরাইট আইনের ব্যাখ্যার নজির টানার ক্ষেত্রে ভারতীয় আইন ব্যবহার না করাই শ্রেয়;</u> কেননা যথাযথ কারণে এই নজির প্রশ্নবিদ্ধ। তাহলে প্রশ্ন উঠতে পারে, এই বিষয়ে ভারতে কোনো মামলা হয়নি কেনো? আমার মতে ভারতে কপিরাইটের সুবিধাভোগীদের লবিং অনেক বেশি। ধরুন কেউ মামলা করলো, ভারত সরকার আইনের সংশোধনী করে একটি ব্যাখ্যা যুক্ত করে দিলো। সংশোধনী করে আইনের Footer এ ব্যাখ্যা যুক্ত করা সাধারণ চর্চা। যেহেতু ৭৯(৫) এর শুরুতেই লেখা আছে ''"এই আইনে ভিন্নরূপ বিধান না থাকিলে"'', তাই সংঘর্ষ সৃষ্টি হবে না এবং মেয়াদ বৃদ্ধি বৈধ থাকবে। এই কারণে মামলা করা সময় ও শ্রমের অপচয় হবে শুধু। বাংলাদেশি আইনের মেয়াদ বৃদ্ধি rigid এবং সুগঠিত। ফলে বাংলাদেশি আলাদত আইনের আক্ষরিক ব্যাখ্যায় থেকে যেতে পারে। যদি আলাদা কোনো রায় না হয়, তাহলে শুধুমাত্র বাংলাদেশি আইনের আক্ষরিক ব্যাখ্যার মধ্যে সীমাবদ্ধ থাকাই শ্রেয়।
*:<br>৪। '''রহিতকরণ ধারা ও তার তাৎপর্য''': আমি আগে ভূতাপেক্ষিতা অংশে বলেছি, আইনের নাম, ধারার নাম অথবা ধারার সাধারণ নাম কোনো নীতি নির্ধারণ করতে পারে না। পারে শুধুমাত্র আইনের মূল পাঠ্য। আপনার প্রদত্ত মতামতে আইনের কোনো ধারা উল্লেখ করে তার আক্ষরিক বিশ্লেষণ নেই। বরং আপনার মতামত বাংলাদেশের আইনের ধারার সঙ্গে সাংঘর্ষিক। আমাদের আইনের প্রতিটি শব্দের থেকে এক চুলও নড়বার সুযোগ নেই। আমি ১০৫(৫) ধারা শব্দ ধরে ধরে ব্যাখ্যা করেছি। এই ধারার ব্যাখ্যায় আমার কোন যুক্তি কেন ভুল, তা তুলে ধরুন। ধারায় বলা আছে, ''"তাহা অব্যাহত থাকিবে"'' এবং এর ইংরেজি অনুবাদে বলা আছে, ''"shall continue to be entitled to".'' এখানে "অব্যাহত" এবং "continue" এর অর্থ কি কোনো অভিধানে বলা আছে যে, "কর্মের স্রষ্টার অধিকার কমলে নতুন নিয়ম চলবে এবং বেশি থাকলে আগের নিয়ম থাকবে"? কোনো অভিধানে এই ব্যাখ্যা পাবেন না আপনি। আমি মূল প্রস্তাবনায় অভিধানিক অর্ধ দিয়েছি। অব্যাহত এবং continue অর্থ, আগে যা ছিল, তাই থাকবে। এখানে লাভ-ক্ষতির বা কমা-বাড়ার কোনো হিসেব নেই এবং থাকারও সুযোগ নেই। অব্যাহত শব্দ দ্বারা আপনি যদি ভিন্ন কিছু বুঝে থাকেন তাহলে অনুগ্রহ করে তা ব্যক্ত করুন। উল্লেখ্য একটি শব্দ একেকজন একেকভাবে বুঝতে পারে। তাই অভিধানিক ব্যাখ্যা বেছে নেওয়া বেশি শ্রেয়। আবার এই ধারাটি সম্পূর্ণ হুবুহু ঔপনেবেশিক আইনের ইংরেজি বাক্যের অনুবাদ। এর উৎস ইংরেজিতে "continue" শব্দ ব্যাবহার করা হয়েছে, এর অর্থ universally accepted "আগে যা ছিল তা"; এর সাথে বাড়া-কমা বা লাভ-ক্ষতির হিসেব নেই। যদিও ১০৪নং ধারা অনুযায়ী বাংলা সংস্করণ থেকে সিদ্ধান্তে আসা উচিত, ইংরেজি এই উৎস আইনের ইচ্ছা বুঝতে সাহায্য করবে। আইনের বাহিরে গিয়ে আমরা কেউ মনগড়া ব্যাখ্যা দাড়া করাতে পারি না। কোনো ব্যাখ্যা দিতে হলে আইনের ধারার পাঠ্য ধরে শব্দ ধরে আক্ষরিক ব্যাখ্যা দিতে হবে। বস্তুত আপনার ব্যাখ্যা "শর্ত সাপেক্ষে অধিকারের মেয়াদ সংরক্ষণ" যদি আইন করতে চাইতো, তাহলে আইন আলাদা করে তা বলতে পারতো। কিন্তু তা করা হয়নি। অধিকারের ক্ষেত্রে ১০৪(৪) ধারা রয়েছে। এবং ১০৫(৫) দ্বারা মেয়াদ অক্ষুণ্ণ রাখা হয়েছে। শর্ত প্রয়োগ করলে তা উল্লেখ করে দিতো আইন। ১০৫(৪) সরাসরি ''সুবিধা-অসুবিধা'' (অধিকার স্থানান্তর)-এর কথা বলা আছে। তাই "এই ধারা ''সুবিধা-অসুবিধার'' জন্য না" বলাটা আইনের স্পষ্ট পরিপন্থী।
*:<br>৫। '''নতুন আইনে পুরনো কপিরাইটের আত্তীকরণ''': আপনি বারংবার আইনের পাঠ্য বাদ দিয়ে, আইনের নাম, সাধারণ নাম এবং কনসেপ্ট ধরে ব্যাখ্যা প্রকাশ করছেন। আপনার এই দাবির আইনি ভিত্তি কি? আমি আইনের লেখা ও আদালতের রায় ব্যতীত এক চুলও সরার পক্ষপাতি নই। আগের আইনের কর্ম নতুন আইনে আনতে হলে সেটা স্পষ্ট করে উল্লেখ করতে হবে, যেমনটি করেছে ভারতীয় ''কপিরাইট আইন, ১৯১৪''([https://ipindia.gov.in/writereaddata/Portal/Images/pdf/The_Copyright_Act__1914.pdf সর্বশেষ পাতা]) এবং বাংলাদেশ ''কপিরাইট আইন, ২০২৩'' ([http://bdlaws.minlaw.gov.bd/act-1452/section-52753.html ধারা ১২৭])। নতুন আইনের আওতায় কী শর্তে পুরাতন কর্ম এসেছে, সেটাও উল্লেখ করা আছে এই আইন সমূহে।<sup>[http://bdlaws.minlaw.gov.bd/act-1452/section-52753.html]</sup> আগের আইনের কী বহাল থাকবে এবং কী থাকবে না তাও বলা আছে। কপিরাইট আইন, ২০০০-ও বলে দিয়েছে আগের কর্মের কী কী হবে। তন্মদ্ধে ১০৫(৫) বলেছে মেয়াদ অক্ষুণ্ণ থাকবে।
*:<br>৬। '''ব্যবহারিক উদাহরণ''': অন্যান্য প্রকাশকরা লাইসেন্স ফির বিনিময়ে বই প্রকাশ করেছে নাকি পাবলিক ডোমেইন বলে বই প্রকাশ করেছে তা প্রমাণ করবেন কিভাবে। আমি লক্ষ লক্ষ বই উদাহরণ দিলাম। কিন্তু আপনার বলার সুযোগ থাকবে, এরা লাইসেন্স করে অর্থের বিনিময়ে পুনঃপ্রকাশ করেছে। আলাদা করে বইয়ের গায়ে লেখা থাকে না এই বিষয়। ব্যবহারিক উদাহরণ আইনের আদালতে কোনো সিধান্ত গ্রহণকারী ফ্যাক্টর হতে পারে না।([http://bdlaws.minlaw.gov.bd/act-details-24.html The Evidence Act, 1872]) কপিরাইট একটি কঠোর ও জটিল আইন। তাই এখানে ''Chilling Effect'' কাজ করতে পারে। Chilling Effect এমন একটি মানসিক বা সামাজিক অবস্থা যেখানে মানুষ আইনি জটিলতা বা কঠোর শাস্তির ভয়ে নিজের ওপর অঘোষিত বিধিনিষেধ আরোপ করে। যুক্তরাষ্ট্রের ফ্লোরিডাতে বর্তমানে এই পরিস্থিতি বিরাজমান।<sup>[https://www.npr.org/2022/03/30/1089462508/teachers-fear-the-chilling-effect-of-floridas-so-called-dont-say-gay-law]</sup> তাই আলদালতে ব্যবহারিক উদাহরণকে আমলে নেওয়া হয় না। আবার, যদি এই ১০ বছর সময়কালে কোন বিখ্যাত বা পুনঃপ্রকাশ যোগ্য কর্ম না থাকে বা প্রকাশকদের অনীহা থাকে তাহলে কি করবেন? তাও আমি উদাহরণ দিচ্ছি। [[:w:সৈয়দ মুজতবা আলী|সৈয়দ মুজতবা আলী]]র মৃত্যু ১৯৭৪ সালে বা ৫২ বছর আগে। তার বিখ্যাত গ্রন্থ [[:w:দেশে বিদেশে|দেশে বিদেশে]]। এই বইটি [https://www.rokomari.com/book/80412/deshe-bideshe বিশ্বসাহিত্য কেন্দ্র], [https://www.prothoma.com/shop/deshe-bideshe-31138 প্রথমা প্রকাশনা], [https://www.rokomari.com/book/25566/desh-bedeshe স্টুডেন্ট ওয়েজ], [https://www.rokomari.com/book/318056/deshe-bideshe নিউ এজ পাবলিশার্স] প্রকাশ করছে বর্তমানে। আমি নিশ্চিত যে আপনি খুঁজলে বা বইয়ের দোকানে গেলে আরও উদাহরণ পাবেন। কিন্তু এরা পাবলিক ডোমেইন বলে মুক্তভাবে প্রকাশ করছে নাকি লাইসেন্স ফির বিনময়ে তা জানার জন্য তাদের সাথে আলাদা আলাদ করে যোগাযোগ করতে হবে। যেহেতু আইনে স্পষ্টভাবে বলা আছে, তাই আলাদা কওরে যোগাযোগের প্রয়োজন নেই বলে মনে করি আমি।
*:<br>আমি আপনার মতামতের প্রতিটি বাক্য ধরে ধরে ব্যাখ্যা করেছি। এরপর মতবিরোধের জায়গা থাকলে আইনের পাঠ্য ধরে করুন এবং আমার যুক্তি কেন অসন্তোষজনক সেটি উল্লেখ করে আইনি ভিত্তিতে প্রতিযুক্তি দিন। ধন্যবাদ।
*:[[ব্যবহারকারী:Tausheef Hassan|Tausheef Hassan]] ([[ব্যবহারকারী আলাপ:Tausheef Hassan|আলাপ]]) ০৭:০৩, ৩০ মার্চ ২০২৬ (ইউটিসি)
::আপনার যা বক্তব্য, “আইনের আদালতে আইনের হুবুহু বাক্য এবং পূর্ববর্তী মামলার উদাহরণ ব্যতীত কোনো কিছুর মূল্য নেই।”; এটা একটা ইজ্ম, যাকে বলে textualism. আইনের দুটো দিক, letter of law এবং spirit of law. শুধু letter of law আইনের সব কথা নয়, শেষ কথাও নয়। মার্কিন সংবিধানের ব্যাখ্যা নিয়ে লেটার-বাদী আর স্পিরিট-বাদীদের মধ্যে বিতর্ক আছে, তা ইংরেজি উইকিপিডিয়ায় পাবেন। তবে আমার পক্ষে ভারতীয় উদাহরণ দেওয়া সহজ। Spirit of law অনুযায়ী সুপ্রিম কোর্টের দেওয়া ভাষ্য অনুযায়ী ভারতীয় সংবিধানের একটা spirit তথা basic tenets আছে, সংসদ এর বাইরে গিয়ে আইন বানালে সুপ্রিম কোর্ট তা নাকচ করে দিতে পারে। ভারতে Public Interest Litigation নামে একটা সিস্টেম আছে, সেটা সংসদে পাশ হওয়া কোন আইন থেকে আসে নি, বরং সুপ্রিম কোর্টের spirit of law বিষয়ক ভাষ্য থেকে এসেছে। সমলিঙ্গ সম্পর্কের ওপর “বেআইনি” তকমা (৩৭৭ IPC) আদালতের spirit of law ব্যাখ্যায় সরে গিয়েছিল। সেই কারণে আইনের হুবহু পাঠই শেষ কথা নয়, আইনের সাধারণ প্রবণতা, পরম্পরা, আইনের কোন্ অধ্যায়ে ধারা বা উপধারাটা আছে, ধারার হেডিং কি, এসবও গুরুত্বপূর্ণ।
* ভূতাপেক্ষ শব্দটা আলোচনায় আমি আমদানি করিনি, আপনার বক্তব্য থেকেই শব্দটা নেওয়া। এটা যে ব্যাখ্যামূলক শব্দ, এবং সরাসরি আইনে থাকে না, সেটাও আমার জানা আছে। কপিরাইটের জীবিত থাকার ব্যাপারটা যে biological অর্থে বলা হয় নি, সেটা বুঝতে সাধারণ কাণ্ডজ্ঞানই যথেষ্ট। যেসব আন্তর্জাতিক উদাহরণ আপনি দিয়েছেন, তার সবেতেই নতুন আইনে মেয়াদ বাড়লে কপিরাইটভুক্ত পুরনো বইগুলোরও মেয়াদ বেড়েছে। ঐসব আইনের বাচনভঙ্গি পুরনো ব্রিটিশ লেগ্যাসিভুক্ত উপমহাদেশীয় আইনগুলির বাচনভঙ্গি থেকে আলাদা হতেই পারে, কিন্তু ধারণাটা একই, যে, নতুন আইনে কপিরাইটভুক্ত পুরনো বইয়ের মেয়াদবৃদ্ধি ঘটে থাকে।
* আপনার বক্তব্য অনুযায়ী ১০৫(৫) দ্বারা সরাসরি মেয়াদ বৃদ্ধি আটকানো হয়েছে। আমার কাছে এমন কিছু প্রতিভাত হয় নি। অব্যাহত শব্দের অর্থ আপনি ভুল বুঝেছেন। অভিধান খুললে দেখবেন, ব্যাহত মানে বাধাপ্রাপ্ত। কোন কিছুর প্রবাহ আটকে দিলে তা ব্যাহত বা বাধাপ্রাপ্ত হয়। প্রবহমানতা বাড়িয়ে দিলে ব্যাহত হওয়ার কোন ব্যাপারই নেই। কাজেই ১০৫(৫)-এ শুধু মেয়াদ-হ্রাসই আটকানো হয়েছে, মেয়াদ-বৃদ্ধি নয় (এ-ব্যাপারটা নিচে বিশদে দেখাচ্ছি)।
* ভারতের আইনকে sloppy বলাটা শিষ্টাচার-বিরুদ্ধ হয়েছে। “আইন প্রণয়নকারী সংস্থা কার্যকর থাকা সত্ত্বেও, অধ্যাদেশ জারি করা হয়েছে।” — এটা অজ্ঞতা-প্রসূত মন্তব্য। ভারতের এই সাময়িক অধ্যাদেশগুলি সংসদের অধিবেশন চলাকালীন জারি করা যায় না। সংসদ যখন অধিবেশনে থাকে না, তখন আইন প্রণয়ণ করার আপৎকালীন প্রয়োজন অনুভূত হলে অধ্যাদেশ জারি হয়। কিন্তু অধ্যাদেশ সাময়িক হওয়ায় এর সময়সীমার মধ্যে সংসদীয় আইন দিয়ে অধ্যাদেশ জারির দিন থেকে তা আত্তীকরণ করতে হয়, নইলে তা তামাদি হয়ে যায়। আপনি একটা ব্লগ থেকে সংসদীয় বিতর্কের যে আংশিক রূপ পেয়েছেন (সম্পূর্ণটা অফিসিয়াল সাইটে আছে) তা অধ্যাদেশ নিয়ে নয়, বরং পরবর্তী প্রতিস্থাপক আইন নিয়ে। সেটা সাংসদদের রাজনৈতিক বিতর্ক (সংসদে যেটা হয়ে থাকে), আইনের টেকনিক্যাল খুঁটিনাটি নিয়ে নয়। সেই আইনটা তার সংশোধন কার্য সম্পন্ন করার পর Repealing and Amending Act, 2001 দ্বারা রহিত হয়ে গেছে। যাই হোক, আইনটা জারি হয়েছে ১৯৯২-এর এপ্রিলে, কাজেই বিষয়বস্তু পর্যালোচনার জন্য আইন মন্ত্রকের বিশেষজ্ঞদের কাছে সময় ছিল। আপনার ভিন্নমত সত্ত্বেও, ১৯৫৭-র আইন সংশোধন করে যে পুরনো আইনের অধীনে প্রকাশিত কিন্তু তখনও কপিরাইটে থাকা বইয়ের মেয়াদ বাড়ানো সম্ভব, তা নিয়ে বিশেষজ্ঞ আইনবিদদের মনে সন্দেহ ছিল না বলেই বিল বানিয়ে সংসদে পাঠানো হয়েছিল, নইলে অধ্যাদেশটাকে তামাদি হতে দেওয়া হত। কাজেই এটা কোন sloppy কাজ নয়।
* বাংলাদেশের ২০২৩-এর আইন কিছুটা অন্য পথে গেছে ঠিকই, কিন্তু ২০০০-এর আইনটা গতানুগতিকতার মধ্যেই আছে। ভারতের ১৯৫৭-র আইন ও বাংলাদেশের ২০০০-এর আইন — এদুটোকে পাশাপাশি রেখে পড়লে স্বতই মনে হয় একটার অনুপ্রেরণায় অন্যটা রচিত (আসলেই কপি করা হয়েছে সেকথা বলছি না)। যেটাকে উইকিতে আমরা Edict-Gov বলি, অর্থাৎ ভারতীয় আইনের ধারা ৫২ আর বাংলাদেশের ধারা ৭২, এদুটো পাশাপাশি রাখলেই মিলটা বোঝা যাবে। সেজন্যেই ভারতীয় আইনকে sloppy বলে পাশ কাটিয়ে বাংলাদেশি আইনের ব্যাখ্যা মার্কিন আর ইউরোপীয় আইন দেখিয়ে করা যায় না।
* এবার আপনার “আইনের ধারার পাঠ্য ধরে শব্দ ধরে আক্ষরিক ব্যাখ্যা দিতে হবে” এই textualist দাবির বিষয়ে দেখছি।
** বাংলাদেশের ১০৫(৪) অনুসারে আগের বইগুলোর কপিরাইটের অধিকার নতুন আইন চালু হওয়ার পর থেকে নতুন আইনের ধারা ১৪ অনুসারে প্রযুক্ত হবে, এমনকি নতুন আইনে নতুন অধিকার থাকলে সেগুলিও পুরনো বইতে বর্তাবে। এতদ্বারা পুরনো বইগুলো নতুন আইনের আওতায় এসেছে। তবে এতে মেয়াদ সম্পর্কে কিছু বলা নেই।
** ১০৫(৩) অনুসারে নতুন আইন আগের আইনের অধীনে প্রকাশিত বিগত-কপিরাইট বইয়ের কপিরাইট পুনরুদ্ধার করবে না। বিগত-কপিরাইট বইয়ের জন্য এই exclusion principle থাকায় কপিরাইটভুক্ত বইগুলি স্বতই অন্তর্ভুক্ত হয়।
** ধারা ১৩ অনুসারে কপিরাইট শুধু নতুন আইন অনুসারেই চলতে পারবে। অর্থাৎ রহিত আইন অনুসারে কপিরাইট চলতে পারবে না (বলা বাহুল্য, আগে যা অধিকার দেওয়া হয়ে গেছে, সেটার কাটছাঁট না করে, তথা “অব্যাহত” রেখে)।
** কপিরাইট নতুন আইন অনুযায়ী চলতে হলে ধারা ২৪ অনুযায়ী মরণোত্তর ৬০ বছরের বিধানও লাগু হবে। এই ধারায় আগের বইগুলোর জন্য কোন exclusion principle দেওয়া নেই, ফলে এটা generic ভাবে সর্বত্র প্রযোজ্য।
** এবার General Clauses Act, যাকে পাশ কাটিয়ে উপমহাদেশে কোন আইন রচনা করা যায় না।
*** প্রথমে ৬ নম্বর ধারা দেখা যাক, যার বক্তব্য ২০০০-এর আইনের ১০৫ ধারায় বিধৃত। ১০৫(৩) এসেছে GC আইনের 6(a) থেকে। ১০৫-এর (২) এবং (৫) আগেকার অধিকার ও দায় (rights and liabilities) সম্পর্কিত, যা এসেছে GC আইনের 6(c) থেকে। ক্রিয়াপদ হিসাবে ১০৫(২)-তে আছে “খর্ব বা ক্ষুণ্ণ করিবে না” (nothing in this section shall diminish or prejudice) এবং ১০৫(৫)-এ আছে “অব্যাহত থাকিবে” (shall continue to be entitled to)। GC আইনের 6(b) থেকে 6(e)-তে একটাই ক্রিয়াপদ: to affect. আভিধানিক অর্থে বাড়ানো বা কমানো দুটোতেই affect হয়। কিন্তু এটা উনিশ শতকের শেষদিকের আইন। সেযুগে আইনের পরিভাষায় affect বলতে কি বোঝাত? ১৯১০ সালে প্রকাশিত [[:en:Page:Black's Law Dictionary (Second Edition).djvu/54|ব্ল্যাকের আইন অভিধান]] অনুসারে “This word is often used in the sense of acting injuriously upon persons and things.” অর্থাৎ সেযুগের আইনি ব্যবহারে affect দিয়ে কমানো বোঝায়, বাড়ানো নয়। সেজন্যেই ১০৫ ধারায় “খর্ব বা ক্ষুণ্ণ করিবে না” লিখেছে। “অব্যাহত থাকিবে”-কেও এভাবেই বুঝতে হবে, কারণ GC আইনে দুটোই affect.
*** এবার অন্য ধারা দেখা যাক। ধারা ২৪ অনুসারে এক আইন রহিত হয়ে একই বিষয়ে পরিবর্তনসহ বা অপরিবর্তিত ভাবে নতুন আইন হলে, পুরনো আইনের অধীনে জারি করা ব্যবস্থাগুলি চলতে থাকবে, যদি না তা নতুন আইনের সঙ্গে অসামঞ্জস্যপূর্ণ (inconsistent) হয়, এবং ধরে নেওয়া হবে যে নতুন আইন অনুসারে এই ব্যবস্থাগুলি চলছে; এবং পরে নতুন আইনের কোন ব্যবস্থা পরিবর্তিত (superseded) হলে পুরনো ব্যবস্থাগুলিও পরিবর্তিত হবে।
*** GC আইনের ৬ ও ২৪ নং ধারা থেকে এই ব্যাখ্যাই দাঁড়ায় যে কপিরাইটের মেয়াদ সংক্রান্ত আগের আইনের ব্যবস্থা পুরনো বইয়ের জন্য নতুন আইন অনুসারে চলতে থাকবে কিন্তু সময়টা নতুন আইনের সঙ্গে সামঞ্জস্যপূর্ণ করার জন্য ৫০-এর জায়গায় ৬০ বছর হবে।
* ব্যবহারিক উদাহরণ বিষয়ে লক্ষ লক্ষ উদাহরণের নামে আপনি দিয়েছেন শুধু ভারতীয় বইয়ের উদাহরণ (''দেশে বিদেশে'' ১৯৪৮ সালে কলকাতা থেকে প্রথম প্রকাশিত)। বড় বড় প্রকাশকদের আইনি টিম থাকে, ফলে তারা আইনি পরামর্শ সহজেই পেতে পারে, chilling effect-এর কোন সম্ভাবনাই নেই। মূল কোম্পানি বইয়ের প্রকাশ ও বিক্রি চালাতে থাকলে একই দেশে অন্য কোম্পানিকে লাইসেন্স দেয় না, দিলেও একসঙ্গে অনেক কোম্পানিকে দেয় না। License fee, chilling effect, বিখ্যাত বই না থাকা, এসব শুধুই অযুক্তি। পুরনো বইয়ের কপিরাইটের মেয়াদ যে বাড়ে নি, সেটা বাংলাদেশের প্রকাশকরা বুঝতে পারল না, আর আপনি শুধু একাই বুঝতে পারলেন? আর এটা আদালত নয়, একটা আলোচনাসভা। এখানে এভিডেন্স অ্যাক্ট দেখিয়ে ব্যবহারিক উদাহরণকে পাশ কাটানো যায় না।
* যাক, প্রকাশকরা না হয় নাই বুঝল, বাংলাদেশের বিদ্বজ্জনরাও কি বোঝে নি? বাংলাপিডিয়া একটা সরকারি প্রকাশনা। সেখানে [https://en.banglapedia.org/index.php?title=Copyright কপিরাইট] নিবন্ধে লিখেছে “In the Bangladesh Copyright Act 2000, the period has been fixed at 60 years.” কপিরাইটের দুরকম ব্যবস্থা থাকলে এখানে লিখল না কেন? এছাড়া [https://www.universepg.com/public/img/storage/journal-pdf/Sketch%20of%20the%20copyright%20act,%202000%20in%20Bangladesh%20enforcement,%20impediments%20and%20solutions.pdf এই নিবন্ধটা] দেখুন। বাংলাদেশের বিশ্ববিদ্যালয়-স্তরের আইনবিদদের লেখা, ২০০০-এর আইনের ওপরে। এখানেও ৬০ বছর দিয়েছে, পুরনো বইয়ের জন্য আলাদা ব্যবস্থার কথা কিছু লেখেনি। এরকম আরও কিছু লেখা পড়লাম, কোথাও দুরকম ব্যবস্থার কথা (৬০ ও ৫০) লেখা নেই। বাংলাদেশের ৬০-অনুত্তীর্ণ পুরনো বইয়ের সংখ্যা এখনও বিশাল। সেইসব বইয়ের আলাদা কপিরাইট মেয়াদের কথা কেউ কিছু লিখছে না কেন? কেউ কি এটা জানে না?
সব দেখেশুনে আমি যা বুঝলাম, এই দুরকম কপিরাইট-মেয়াদের ব্যবস্থা শুধু আপনার কল্পনাতেই আছে, আর কোথাও নেই। উইকিমিডিয়া প্রকল্পগুলিতে বক্তব্য-প্রতিষ্ঠার জন্য secondary ও tertiary source-এর কদর আছে, কিন্তু আইনগুলি সবই primary source. কাজেই আপনার বক্তব্যটাকে অরিজিন্যাল রিসার্চের পর্যায়ে ফেলা যেতে পারে। আমি একজন সাধারণ বুদ্ধিসম্পন্ন সাধারণ সম্পাদক, কোন আইনজ্ঞ নই। কিন্তু এটুকু বলতে পারি যে অরিজিন্যাল রিসার্চের উপর ভিত্তি করে (যেটা আদৌ আমার কাছে convincing মনে হয়নি) কপিরাইটের মত জটিল বিষয়ে উইকিসংকলনে এত বড় একটা সিদ্ধান্ত নেওয়া যেতে পারে না। আপনি আপনার এই রিসার্চ কোন প্রতিষ্ঠিত আইনের জার্নালে প্রকাশ করতে পারেন। তারপর peer review-তে যদি দেখা যায় যে প্রতিষ্ঠিত আইন-বিশারদরা আপনার বক্তব্যকে সমর্থন করছেন, তখন আপনার নিবন্ধকে রেফারেন্স হিসেবে দেখিয়ে উইকিসংকলনে পরবর্তী পদক্ষেপ করা যেতে পারে।
আমাদের বিতর্ক অনেক হলো, এবার দেখা যাক, অন্য সম্পাদকরা কি বলেন। [[ব্যবহারকারী:Hrishikes|হৃষীকেশ]] ([[ব্যবহারকারী আলাপ:Hrishikes|আলাপ]]) ১৩:২৯, ৩০ মার্চ ২০২৬ (ইউটিসি)
:ব্যস্ততার জন্য শুধুমাত্র কিছু পয়েন্ট উল্লেখ করছি
:১। "অব্যাহত" এর সাথে এর সময়কালও বলা আছে "তাহার ক্ষেত্রে এই আইন কার্যকর না হইলে যে সময়ের জন্য তিনি ঐরূপ অধিকার বা স্বার্থের অধিকারী হইতেন", অর্থাৎ এইখানে সময়কাল দেওয়া আছে, যে পূর্বের সময়কাল বজায় থাকবে। আইনসভা যখন পরিষ্কার করে বলছে ‘আইন পাস না হলে যা হতো, তা-ই থাকবে’, তখন তারা মূলত একটি Time-lock বা মেয়াদের সীমা টেনে দিয়েছে।
:২। কপিরাইট কোনো ‘প্রাকৃতিক অধিকার’ বা ‘সংবিধানের মৌলিক কাঠামো’র অংশ নয়। এটি একটি Statutory Right বা আইন দ্বারা সৃষ্ট অধিকার। বিধিবদ্ধ আইনের ক্ষেত্রে বিচারিক ব্যাখ্যা তখনই ‘Spirit’ খোঁজে, যখন আইনের ভাষা অস্পষ্ট থাকে। বাংলাদেশের ২০০০ সালের আইনের ১০৫(৫) ধারার ভাষা অত্যন্ত গাণিতিক এবং স্বচ্ছ। যেখানে ভাষা স্পষ্ট, সেখানে ‘Spirit’-এর দোহাই দিয়ে অতিরিক্ত ১০ বছর যোগ করা আইনসভার ক্ষমতার ওপর হস্তক্ষেপের শামিল।
:৩। GCA-এর ২৪ নম্বর ধারা প্রযোজ্য হয় তখন, যখন নতুন আইন পুরোনো আইনের কোনো প্রবিধান বা আদেশ সম্পর্কে নীরব থাকে। কিন্তু বাংলাদেশের ২০০০ সালের আইনের ১০৫(৫) ধারাটি একটি Explicit Saving Clause। GCA-এর ৬ নম্বর ধারা অনুযায়ী, যখন কোনো আইন রহিত হয়, তখন নতুন আইনে ‘ভিন্নরূপ উদ্দেশ্য’ (Different intention) না থাকলে পুরোনো মেয়াদের কাঠামোই বজায় থাকে। ১০৫(৫) ধারাটিই হলো সেই ‘ভিন্নরূপ উদ্দেশ্য’ যা নিশ্চিত করেছে যে পুরোনো কর্মগুলো নতুন আইনের ‘৬০ বছর’ মেয়াদের ছাঁচে পড়বে না।
:৪। একাডেমিক নিবন্ধ বা এনসাইক্লোপিডিয়া সাধারণত আইনের মূল সুর (General Rule) নিয়ে আলোচনা করে, তারা প্রতিটি আইনের Transitional Provisions বা ‘সংক্রমণকালীন বিধান’ নিয়ে চুলচেরা বিশ্লেষণ করে না। ল জার্নালের সাধারণ আলোচনা কখনোই আইনের বিধিবদ্ধ ধারাকে বাতিল করতে পারে না। নীরবতা মানেই এই নয় যে আইনটি পরিবর্তিত হয়ে গেছে।
:৫। আইনের কোনো ধারা নিয়ে যদি দুটি ব্যাখ্যার সুযোগ থাকে, তবে আদালত সবসময় কোন ব্যাখ্যাটি বেছে নেবে? যা জনসাধারণের তথ্য পাওয়ার অধিকারকে (Public Access) প্রসারিত করে নাকি স্রষ্টার একচেটিয়া অধিকার। ১০৫(৫) ধারা যেহেতু পুরোনো মেয়াদের (৫০ বছর) দিকে সরাসরি নির্দেশ করছে, তাই একে টেনে বড় করার কোনো আইনি বাধ্যবাধকতা বা যৌক্তিকতা নেই।
:৬। বাংলাদেশে কপিরাইট লঙ্ঘনের হাজারো মামলা কেন হচ্ছে না? কারণ কপিরাইট এনফোর্সমেন্ট এমনিতেই দুর্বল। এই দুর্বলতাকে আইনের ‘বৈধতা’ হিসেবে চালিয়ে দেওয়া যায় না। আবার এই ১০ বছরের সময়কালের বাংলাদেশে প্রথম প্রকাশ বই খোঁজা কষ্টকর।
:৭। ভারতীয় মেয়াদ "সংশোধনী" আইন দ্বারা বেড়েছে। এই আলাদা আইনটি খুলে দেখতে পারেন। সেখানে ভুতাপেক্ষিতার যে ধারা আছে সেখানে মেয়াদের ধারাটি নেই।
:৮।আবার ১০৫(৫)কে যদি আপনি না মানেন তাহলে ১৯৯০-২০০০ যে বই পাবলিক ডোমেইনে ঢুকেছে, সেটা আবার ফেরত আসার কথা।
:আমার বাসা থেকে কপিরাইট অফিস দূরে নয়। এই মাসের মঝামাঝি সময়ে আবার যাবো। তবে তাদের থেকে লিখিত কিছু আশা করা বৃথা। [[ব্যবহারকারী:Tausheef Hassan|Tausheef Hassan]] ([[ব্যবহারকারী আলাপ:Tausheef Hassan|আলাপ]]) ১৭:১০, ৪ এপ্রিল ২০২৬ (ইউটিসি)
::আপনার যুক্তিগুলো বেশিটাই অযুক্তি। কপিরাইট আইন আপনি বুঝতে পারেন নি, কারণ আপনি এই আইনের উদ্দেশ্যটাই জানেন না। কপিরাইট আইন ''জনসাধারণের তথ্য পাওয়ার অধিকার''-এর জন্য তৈরি হয় না, কপিরাইট-হোল্ডারদের সুরক্ষা নিশ্চিত করা এবং কপিরাইট-ভঙ্গকারীদের শাস্তির ব্যবস্থা করাই এই আইনগুলির লক্ষ্য। বাংলাদেশের কপিরাইট আইন নিয়ে লেখা [https://www.universepg.com/public/img/storage/journal-pdf/Sketch%20of%20the%20copyright%20act,%202000%20in%20Bangladesh%20enforcement,%20impediments%20and%20solutions.pdf এই নিবন্ধে] Objectives of the Copyright Law অনুচ্ছেদ লক্ষ্য করুন: The motive of this law is to save the proprietor of the work from an unlawful reproduction or exploitation of his work by others. অর্থাৎ এখানে জনসাধারণের অধিকারের কোন গল্পই নেই। বরং জনসাধারণকে কিভাবে অধিকার না দেওয়া যায় এবং দিলেও কিভাবে তাতে যতটা সম্ভব দেরি করা যায় সেটা দেখাই কপিরাইট আইনের লক্ষ্য। সেজন্যই সারা পৃথিবী জুড়ে দিন কে দিন কপিরাইটের মেয়াদ বেড়েই চলেছে। বার্ন কনভেনশনে মরণোত্তর অন্তত ৫০ বছরের ব্যবস্থা থাকলেও সদস্য দেশগুলি যে যতটা পারে বাড়িয়ে নিয়েছে। আমেরিকা করেছে ৭০ বছর, মেক্সিকো ১০০ বছর। WTO-র চুক্তির দরুণ যেসব দেশ বিদেশি বইয়ের কপিরাইট মানত না, তাদেরকেও মানতে হচ্ছে। বাংলাদেশ তো আরও এককাঠি ওপরে। সচরাচর অধিকাংশ দেশই সরকারি কর্মের ওপর কিছু না কিছু Edict-Gov provisions দিয়ে থাকে, কিন্তু বাংলাদেশ সেটাও তুলে নিয়েছে তাদের ২০২৩-এর আইনে।
* এই কারণেই কপিরাইট আইনের ব্যাখ্যা এমন ভাবে করতে হয় যাতে তা কপিরাইট-হোল্ডারদের পক্ষে যায়। তা না করলেই সেই ব্যাখ্যা ভুল পথে যাবে।
* ''বিধিবদ্ধ আইনের ক্ষেত্রে বিচারিক ব্যাখ্যা তখনই ‘Spirit’ খোঁজে, যখন আইনের ভাষা অস্পষ্ট থাকে।'' — এটাও ভুল কথা। এজন্যেই আপনাকে ওপরে ভারতের 377 IPC-র উদাহরণ দিয়েছি, যা ভারতের সুপ্রিম কোর্ট নাকচ করে দিয়েছে।
* ''GCA-এর ২৪ নম্বর ধারা প্রযোজ্য হয় তখন, যখন নতুন আইন পুরোনো আইনের কোনো প্রবিধান বা আদেশ সম্পর্কে নীরব থাকে।'' — এটাও ভুল কথা। কারণ ঐ ধারায় “unless it is otherwise expressly provided” — এই বাক্যবন্ধ আছে। ফলে শুধু নীরব থাকলে হবে না, বরং উল্টো কথা বলতে হবে।
* ১০৫(৫) ধারা কোন ''ভিন্নরূপ উদ্দেশ্য'' নয়, তার উদ্দেশ্য কপিরাইটভোগীর “অধিকার বা অধিকারের অন্তর্গত কোন স্বার্থের” বিষয়ে; ফলে এটা GCA 6(c)-এর “the repeal shall not affect any right, privilege,”-এর আওতায় পড়ে। বরং এই উপধারায় উক্ত “এই আইনে ভিন্নরূপ বিধান না থাকিলে” বক্তব্য অনুযায়ী ভিন্নরূপ বিধান আছে, তা হলো নতুন আইনের ধারা ২৪।
* ভারতীয় সংশোধনী আইন অন্য আইনকে রহিত করেনি, কাজেই তাতে রহিতকরণ ধারা কারণ ছাড়া কেন থাকবে? শুধু মূল আইন চালু হওয়ার পর বিগত-কপিরাইট বইয়ের কপিরাইট ফেরত না আসার উপধারাটা দরকার ছিল, তাই আছে। বাকি ব্যবস্থা তো মূল আইনেই আছে।
* ভারতের ১৯৫৭ আর বাংলাদেশের ২০০০-এর আইনে যে ছত্রে ছত্রে মিল, তা পাশাপাশি পড়লেই বোঝা যায়। কাজেই সম্পূর্ণ একরকম ব্যবস্থা থাকা সত্ত্বেও ভারতে কপিরাইটের মেয়াদ বাড়তে পারলে বাংলাদেশে না বাড়ার কোন কারণই নেই। এর ব্যাখ্যায় ভারতের ব্যবস্থাকে sloppy বলা আর সংশোধনী আইনে রহিতকরণ ধারা নেই বলে কপিরাইট বেড়েছে বলা অযুক্তি আর কুযুক্তি ছাড়া কিছু নয়।
* ''ল জার্নালের সাধারণ আলোচনা কখনোই আইনের বিধিবদ্ধ ধারাকে বাতিল করতে পারে না।'' — এটাও কুযুক্তি, কারণ আপনি প্রমাণই তো করতে পারেননি যে আপনার বক্তব্যটা বিধিবদ্ধ।
* এখন এই বিতর্কের যা পরিস্থিতি, আপনার একার বক্তব্যে আর এই প্রস্তাব দাঁড়াবে না। কাজেই এক্ষেত্রে বিশেষজ্ঞদের সমর্থন লাগবে, প্রকাশিত বই বা জার্নাল থেকে। আপনি যদি এই অবস্থান নেন যে বিশেষজ্ঞরা এ-জাতীয় ''চুলচেরা বিশ্লেষণ করে না'', তাহলে তো প্রস্তাবের সেখানেই ইতি।
[[ব্যবহারকারী:Hrishikes|হৃষীকেশ]] ([[ব্যবহারকারী আলাপ:Hrishikes|আলাপ]]) ১২:০৯, ৬ এপ্রিল ২০২৬ (ইউটিসি)
== বাংলার প্রেমে উইকি ২০২৬ শুরু হয়েছে, এখনই অংশ নিন! ==
<div style="padding:15px; font-size:120%; line-height:1.6; margin:10px 0; border:2px solid #c90023; background-color:#FFFFFF; border-radius:8px;">
সুধী,
[[File:বাংলার প্রেমে উইকি লোগো.svg|right|100px|frameless|link=Commons:Wiki Loves Bangla 2025]]
আমরা আনন্দের সাথে জানাচ্ছি যে [[c:Commons:Wiki Loves Bangla 2026|বাংলার প্রেমে উইকি ২০২৬]] শুরু হয়েছে! এ বছরের প্রতিযোগিতার বিষয় '''বাংলার উৎসব''', যেখানে অংশগ্রহণকারীদের বাংলার বিভিন্ন সাংস্কৃতিক উৎসবের ছবি ও ভিডিও ধারণ করে শেয়ার করার জন্য আহ্বান জানানো হচ্ছে।
'''[[c:Commons:Wiki Loves Bangla|বাংলার প্রেমে উইকি]]''' হলো উইকিমিডিয়া কমন্সে আয়োজিত একটি আন্তর্জাতিক আলোকচিত্র প্রতিযোগিতা, যার লক্ষ্য বিশ্বব্যাপী বাংলা সংস্কৃতি ও ঐতিহ্য নথিভুক্ত করা। এটি [[meta:Bangla Culture and Heritage Collation Program|বাংলা সংস্কৃতি ও ঐতিহ্য সংরক্ষণ কর্মসূচীর]] অংশ হিসেবে প্রতি বছর নির্দিষ্ট প্রতিপাদ্য নিয়ে আয়োজিত হয়।
'''আপনি কিভাবে অংশ নেবেন''', প্রক্রিয়াটি সহজ—আপনার প্রতিটি অবদান বিশ্বের সবচেয়ে বড় মুক্ত জ্ঞানভাণ্ডারকে সমৃদ্ধ করবে:
[[File:পাতি মাছরাঙ্গা (Alcedo atthis), জাতীয় উদ্ভিদ উদ্যান ঢাকা.jpg|thumb|right|250px|link=Commons:Wiki Loves Bangla 2025|বাংলার প্রেমে উইকি ২০২৫-এর বিজয়ী ছবি]]
* '''ছবি তুলুন''': বাংলার উৎসবের ছবি তুলুন বা ভিডিও ধারণ করুন।
* '''আপলোড করুন''': আপনার ফাইলগুলো '''১৪ এপ্রিল থেকে ১৫ মে ২০২৬''' তারিখের মধ্যে উইকিমিডিয়া কমন্সে আপলোড করুন।
* '''জিতুন''': মোট '''১,১০০ মার্কিন ডলার''' পুরস্কার।
শুরু করতে প্রস্তুত? [https://commons.wikimedia.org/w/index.php?title=Special:UploadWizard&uselang=bn&campaign=Wlbangla এখানে ক্লিক করে আপনার মিডিয়া আপলোড করুন], অথবা বিস্তারিত জানতে [[c:Commons:Wiki Loves Bangla 2026|প্রতিযোগিতার মূল পাতা]] দেখুন।
আপনার অবদান বাংলার সমৃদ্ধ সংস্কৃতি ও ঐতিহ্যকে বিশ্বব্যাপী সংরক্ষণ ও উপস্থাপনে গুরুত্বপূর্ণ ভূমিকা রাখবে।
কোনো প্রশ্ন থাকলে আমাদের ইমেইল করুন অথবা আমাদের [https://t.me/WikiLovesBangla টেলিগ্রাম গ্রুপে] যুক্ত হোন।
শুভেচ্ছান্তে,<br>
'''বাংলার প্রেমে উইকি দল'''<br>
<nowiki>#WikiLovesBangla</nowiki><br>
</div> [[User:Moheen Reeyad|<span style="text-shadow:#8b9dc3 3px 3px 2px;"><font color="#3b5998">~ <b>মহীন</b></font></span>]] [[User Talk:Moheen Reeyad|<span style="text-shadow:gray 3px 3px 2px;"><sup>(আলাপ)</sup></span>]] ২০:১৯, ২১ এপ্রিল ২০২৬ (ইউটিসি)
== Request for comment (global AI policy) ==
<bdi lang="en" dir="ltr" class="mw-content-ltr">
Apologies for writing in English. {{int:Please-translate}}
A [[:m:Requests for comment/Artificial intelligence policy|request for comment]] is currently being held to decide on a global AI policy. {{int:Feedback-thanks-title}}
[[ব্যবহারকারী:MediaWiki message delivery|MediaWiki message delivery]] ([[ব্যবহারকারী আলাপ:MediaWiki message delivery|আলাপ]]) ০০:৫৮, ২৬ এপ্রিল ২০২৬ (ইউটিসি)
</bdi>
(এই বার্তাটি [[:উইকিসংকলন:প্রশাসকদের আলোচনাসভা]] পাতায় পাঠানো হয়েছিল ও একটি পুনর্নির্দেশের কারণে এখানে পোস্ট করা হচ্ছে।)
<!-- https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30424282-এর তালিকা ব্যবহার করে বার্তাটি ব্যবহারকারী:Codename Noreste@metawiki পাঠিয়েছেন -->
== [স্বেচ্ছাসেবক আহ্বান] বাংলা উইকিসম্মেলন ২০২৬-এর আয়োজক দলে যোগ দিন! ==
সুপ্রিয় উইকিমিডিয়ান ও শুভানুধ্যায়ী,
আশা করি ভালো আছেন।
আনন্দের সাথে জানাচ্ছি যে, আমরা আমাদের আসন্ন '''‘বাংলা উইকিসম্মেলন ২০২৬’''' সফলভাবে আয়োজনের প্রস্তুতি শুরু করেছি। উইকিমিডিয়া আন্দোলনের এই বৃহত্তর আয়োজনকে সফল করতে আমরা একদল উৎসাহী এবং নিবেদিতপ্রাণ স্বেচ্ছাসেবক খুঁজছি।
আপনি যদি এই সম্মেলনের নেপথ্যে থেকে গুরুত্বপূর্ণ ভূমিকা পালন করতে আগ্রহী হন, তবে আমরা আপনাকে নিচের যেকোনো একটি দলে যুক্ত হওয়ার জন্য আমন্ত্রণ জানাচ্ছি:
=== আমরা মূলত তিনটি দলের জন্য স্বেচ্ছাসেবক খুঁজছি: ===
# '''অনুষ্ঠান বিন্যাস দল:''' সেশন পরিকল্পনা, স্পিকারদের সাথে সমন্বয় এবং ইভেন্টের সার্বিক এজেন্ডা ব্যবস্থাপনা।
# '''কার্য পরিচালন দল:''' লজিস্টিকস, ভেন্যু ব্যবস্থাপনা, রেজিস্ট্রেশন এবং অনুষ্ঠানের সার্বিক পরিচালনা।
# '''বৃত্তি পর্যালোচনা দল:''' অংশগ্রহণকারীদের বৃত্তির আবেদনগুলো যাচাই-বাছাই ও মূল্যায়ন।
=== আবেদন করবেন যেভাবে: ===
আপনি যদি এই চ্যালেঞ্জ গ্রহণ করতে প্রস্তুত থাকেন, তবে অনুগ্রহ করে আগামী '''২০ মে ২০২৬''' তারিখের মধ্যে নিচের লিঙ্কে গিয়ে আবেদন ফর্মটি পূরণ করুন: '''https://docs.google.com/forms/u/5/d/e/1FAIpQLSdlX3Bm-A2zyBDFbeawk5rSjYuGCGjdOcsSBeP_pd03BWZkJA/viewform?usp=send_form'''
আপনার শ্রম ও মেধা বাংলা উইকিসম্মেলনকে আরও প্রাণবন্ত ও সফল করে তুলবে বলে আমাদের বিশ্বাস।
আয়োজক দলের পক্ষে, [[ব্যবহারকারী:MdsShakil|MdsShakil]] ([[ব্যবহারকারী আলাপ:MdsShakil|আলাপ]]) ০৬:২৬, ১১ মে ২০২৬ (ইউটিসি)
== ২০২৬ সালের ইউ৪সি নির্বাচনে এখনই ভোট দিন ==
<section begin="announcement-content" />
যোগ্য ভোটারদের ২০২৬ সালের [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|সর্বজনীন আচরণবিধি সমন্বয় কমিটির]] নির্বাচনে অংশগ্রহণের জন্য আহ্বান জানানো হচ্ছে। যোগ্যতা যাচাই, ভোটদান প্রক্রিয়া, প্রার্থীদের তথ্য এবং ভোটদানের লিঙ্কসহ আরও তথ্য মেটার [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|২০২৬ সালের নির্বাচনী তথ্যপাতায়]] পাওয়া যাবে। ভোটগ্রহণ ২০২৬ সালের ২ জুন [https://zonestamp.toolforge.org/1780358400 ০০:০০ ইউটিসিতে] শেষ হবে।
আপনার অ্যাকাউন্ট যোগ্যতার মানদণ্ড পূরণ করে থাকলে অনুগ্রহ করে ভোট দিন। ফলাফল ১৪ জুন ২০২৬-এর মধ্যে প্রকাশ করা হবে। -- ইউ৪সির পক্ষে,<section end="announcement-content" />
[[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) ১৭:১৫, ২৭ মে ২০২৬ (ইউটিসি)
(এই বার্তাটি [[:উইকিসংকলন:প্রশাসকদের আলোচনাসভা]] পাতায় পাঠানো হয়েছিল ও একটি পুনর্নির্দেশের কারণে এখানে পোস্ট করা হচ্ছে।)
<!-- https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860-এর তালিকা ব্যবহার করে বার্তাটি ব্যবহারকারী:Keegan (WMF)@metawiki পাঠিয়েছেন -->
== [[Special:Import]] ==
*[[:en:Index:1865 Durgeshnandini.pdf]]
*[[:en:Page:1865 Durgeshnandini.pdf/1]]
*[[:en:Page:1865 Durgeshnandini.pdf/6]]
*[[:en:Page:1865 Durgeshnandini.pdf/7]]
Sorry for English. :/ [[ব্যবহারকারী:Koavf|Koavf]] ([[ব্যবহারকারী আলাপ:Koavf|আলাপ]]) ০৯:২৬, ১১ জুন ২০২৬ (ইউটিসি)
:{{ping|Koavf}}, we already have the same edition available here. You can delete the index and pages from English Wikisource. -- [[ব্যবহারকারী:Bodhisattwa|বোধিসত্ত্ব]] ([[ব্যবহারকারী আলাপ:Bodhisattwa|আলাপ]]) ১২:৫৩, ১১ জুন ২০২৬ (ইউটিসি)
::Thanks. I did check before I posted and [[নির্ঘণ্ট:1865 Durgeshnandini.pdf]] is a redlink and the file at [[:c:File:1865 Durgeshnandini.pdf]] is not used on bn.ws. Where is this work? [[ব্যবহারকারী:Koavf|Koavf]] ([[ব্যবহারকারী আলাপ:Koavf|আলাপ]]) ১৩:০২, ১১ জুন ২০২৬ (ইউটিসি)
:::{{ping|Koavf}}, apologies for the delay to reply. I missed your second message. The file you are looking for is [[নির্ঘণ্ট:দুর্গেশনন্দিনী বঙ্কিমচন্দ্র চট্টোপাধ্যায়.djvu|here]] on bn.ws. It is actually a 1924 edition and not 1865 edition as claimed in the title of the newly uploaded file. -- [[ব্যবহারকারী:Bodhisattwa|বোধিসত্ত্ব]] ([[ব্যবহারকারী আলাপ:Bodhisattwa|আলাপ]]) ০২:২৬, ১৭ জুন ২০২৬ (ইউটিসি)
::::<span lang="en-US">I see.</span> ধন্যবাদ. [[ব্যবহারকারী:Koavf|Koavf]] ([[ব্যবহারকারী আলাপ:Koavf|আলাপ]]) ০৯:০৬, ১৭ জুন ২০২৬ (ইউটিসি)
== বাংলা উইকিসম্মেলন ২০২৬: ভ্রমণ বৃত্তির আবেদন প্রক্রিয়া শুরু হয়েছে! ==
[[File:Bangla WikiConference 2026 logo.svg|ডান|250px|link=]]
সুপ্রিয় সুধী,
আনন্দের সাথে জানাচ্ছি যে, উইকিমিডিয়া বাংলাদেশের উদ্যোগে আগামী '''৩০ অক্টোবর - ১ নভেম্বর ২০২৬''' তারিখে বাংলাদেশে [[wmbd:বিশেষ:আমার_ভাষা/বাংলা_উইকিসম্মেলন_২০২৬|'''বাংলা উইকিসম্মেলন ২০২৬''']] অনুষ্ঠিত হতে যাচ্ছে।
এই সম্মেলনকে সফল ও প্রাণবন্ত করে তুলতে বাংলাদেশ, ভারত ও নেপালে অবস্থানরত আগ্রহী উইকিমিডিয়ানদের জন্য ভ্রমণ বৃত্তির ব্যবস্থা করা হয়েছে। এই বৃত্তির অধীনে নির্বাচিত অংশগ্রহণকারীদের যাতায়াত ভাতা এবং সম্মেলনে থাকা-খাওয়ার ব্যবস্থা করা হবে। সম্মেলনে অংশগ্রহণে আগ্রহী প্রত্যেককেই এই বৃত্তির জন্য আবেদন করতে হবে এবং আবেদন সফল হওয়া অংশগ্রহণকারীগণই সম্মেলনে অংশ নিতে পারবেন।
=== বৃত্তি আবেদনের প্রাথমিক যোগ্যতা ===
নিম্নলিখিত শর্তাবলি পূরণ না করলে আবেদনটি সরাসরি অযোগ্য বলে গণ্য হবে:
# উইকিমিডিয়া অ্যাকাউন্টটি কমপক্ষে ৬ মাস পুরোনো হতে হবে (অর্থাৎ '''১৯ ডিসেম্বর ২০২৫''' বা এর পূর্বে তৈরি অ্যাকাউন্ট)।
# আবেদনকারীর বৈশ্বিক মোট সম্পাদনা সংখ্যা কমপক্ষে '''২৫০''' হতে হবে।
# আবেদনের সময় আবেদনকারীর অ্যাকাউন্ট কোনো বাংলা প্রকল্পে অবরুদ্ধ থাকা যাবে না।
=== কীভাবে বৃত্তির জন্য আবেদন করবেন? ===
বৃত্তির আবেদন করার জন্য আপনাকে একটি নির্দিষ্ট অনলাইন ফর্ম পূরণ করতে হবে। ফর্মটি বিস্তারিতভাবে পূরণ করতে ৩০ থেকে ৪০ মিনিট সময় প্রয়োজন হতে পারে। আপনার দেওয়া তথ্যের ভিত্তিতে বৃত্তি নির্ধারণী উপদল যাচাই করবেন আপনি বৃত্তির জন্য উপযুক্ত কি না। ফর্ম পূরণ ও আবেদন প্রক্রিয়া সম্পর্কে আরও জানার জন্য অনুগ্রহ করে [[wmbd:বাংলা_উইকিসম্মেলন_২০২৬/বৃত্তি|'''বৃত্তি সংক্রান্ত পাতাটি''']] পড়ে দেখুন।
=== গুরুত্বপূর্ণ সময়রেখা ===
* '''আবেদন শুরু:''' ১৯ জুন, ২০২৬ (বাংলাদেশ সময়)
* '''আবেদন শেষ:''' ১৯ জুলাই, ২০২৬ (বাংলাদেশ সময়)
''নির্দিষ্ট সময়সীমার পর কোনো আবেদন গ্রহণ করা হবে না। তাই শেষ মুহূর্তের জটিলতা এড়াতে সময়সীমার অন্তত কয়েক দিন পূর্বেই আবেদন জমা দেওয়ার পরামর্শ দেওয়া হচ্ছে।''
বৃত্তি সম্পর্কে আরও জানতে যেকোনো জিজ্ঞাসা বা পরামর্শের জন্য নির্দ্বিধায় আমাদের সাথে আলাপ পাতা কিংবা [mailto:bnwikiconference@wikimedia.org.bd bnwikiconference@wikimedia.org.bd] ঠিকানায় ইমেইল করার মাধ্যমে যোগাযোগ করতে পারেন।
শুভেচ্ছান্তে,<br>
বাংলা উইকিসম্মেলন ২০২৬ আয়োজক দল<br>
১৮:১৫, ১৮ জুন ২০২৬ (ইউটিসি)
== RFC about AI-generated content in Wikimedia Commons ==
<bdi lang="en" dir="ltr">Apologies for writing in English, please help translate this message to your language. You are invited to participate in a [[c:Commons:Requests for comment/Policy update for AI content|request for comment on Wikimedia Commons about a policy update for AI content]]. This may affect files that are uploaded to Wikimedia Commons for use on this project. Thank you. [[m:User:Codename Noreste|Codename Noreste]] ([[m:User talk:Codename Noreste|আলোচনা]])</bdi> ১৭:১২, ২৩ জুন ২০২৬ (ইউটিসি)
(এই বার্তাটি [[:উইকিসংকলন:প্রশাসকদের আলোচনাসভা]] পাতায় পাঠানো হয়েছিল ও একটি পুনর্নির্দেশের কারণে এখানে পোস্ট করা হচ্ছে।)
<!-- https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860-এর তালিকা ব্যবহার করে বার্তাটি ব্যবহারকারী:Codename Noreste@metawiki পাঠিয়েছেন -->
== <span lang="en" dir="ltr">Deployment of Legal and Safety Contacts Link in the Footer of Your Wiki</span> ==
<div lang="en" dir="ltr">
<section begin="Message"/>
'''Legal & Safety Contacts'''
Hello community, the Wikimedia Foundation has provided a [[wmf:Special:MyLanguage/Legal:Wikimedia Foundation Legal and Safety Contact Information|single legal and safety contact page]], to be linked in the footer of your wiki, to ensure access to accurate legal information. This is a regulatory requirement. We have already rolled out links to English, German, Italian, Spanish and other wikis and we will deploy to your wiki soon. [[m:Special:MyLanguage/Wikimedia_Foundation_Legal_and_Safety_Contacts_FAQ|Please read more on the project page]] and leave any comments in this thread or on the [[m:Special:MyLanguage/Talk:Wikimedia Foundation Legal and Safety Contacts FAQ|talk page]].
<section end="Message"/>
</div>
-- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) ১৩:৩০, ২৫ জুন ২০২৬ (ইউটিসি)
(এই বার্তাটি [[:উইকিসংকলন:প্রশাসকদের আলোচনাসভা]] পাতায় পাঠানো হয়েছিল ও একটি পুনর্নির্দেশের কারণে এখানে পোস্ট করা হচ্ছে।)
<!-- https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=30731267-এর তালিকা ব্যবহার করে বার্তাটি ব্যবহারকারী:Sannita (WMF)@metawiki পাঠিয়েছেন -->
== Request for comment (the future of Abstract Wikipedia) ==
<bdi lang="en" dir="ltr" class="mw-content-ltr">
Apologies if this has not yet been translated into your wiki's language. {{int:Please-translate}}
You are invited to voice your opinions in a [[:m:Requests for comment/The future of Abstract Wikipedia|request for comment about the future of Abstract Wikipedia]]. {{Int:Feedback-thanks-title}}
[[:m:User:Kowal2701|Kowal2701]] ([[:m:User talk:Kowal2701|talk]]) ১২:২৫, ২৪ জুলাই ২০২৬ (ইউটিসি)
</bdi>
(এই বার্তাটি [[:উইকিসংকলন:প্রশাসকদের আলোচনাসভা]] পাতায় পাঠানো হয়েছিল ও একটি পুনর্নির্দেশের কারণে এখানে পোস্ট করা হচ্ছে।)
<!-- https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860-এর তালিকা ব্যবহার করে বার্তাটি ব্যবহারকারী:DreamRimmer@metawiki পাঠিয়েছেন -->
== <span lang="en" dir="ltr">Migration to Parsoid</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
<em>[[m:Special:MyLanguage/Wikimedia Foundation/Product and Technology/Parsoid Read Views/Read View Announcement|Read this in another language]]</em>
Hello everyone! I am glad to inform you that as the next step in the [[mw:Special:MyLanguage/Parsoid/Parser Unification|Parser Unification]] project, Parsoid will soon be turned on as the default article renderer on your wiki. We are gradually increasing the number of wikis using Parsoid, with the intention of making it the default wikitext parser for MediaWiki's next long-term support release. This will make our wikis more reliable and consistent for editors, readers, and tools to use, as well as making the development of future wikitext features easier.
If this disrupts your workflow, don’t worry! You can still opt out through a user preference or turn Parsoid off on the current page using the Tools submenu, as described in the [[mw:Special:MyLanguage/Help:Extension:ParserMigration|Extension:ParserMigration]] documentation.
There is [[mw:Special:MyLanguage/Parsoid/Parser Unification/Confidence Framework|more information about our roll-out strategy]] available, including the testing done before we turn on Parsoid for a new wiki.
To report bugs and issues, please look at our [[mw:Special:MyLanguage/Parsoid/Parser Unification/Known Issues|known issues]] documentation and if you found a new bug please create a phab ticket and tag the [[phab:project/view/5846|Content Transform Team in Phabricator]].
<section end="announcement-content" />
</div>
[[mw:User:MSantos (WMF)|Content Transform Team]] ১৬:৩১, ৩ আগস্ট ২০২৬ (ইউটিসি)
(এই বার্তাটি [[:উইকিসংকলন:প্রশাসকদের আলোচনাসভা]] পাতায় পাঠানো হয়েছিল ও একটি পুনর্নির্দেশের কারণে এখানে পোস্ট করা হচ্ছে।)
<!-- https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery/Wikisource&oldid=28221043-এর তালিকা ব্যবহার করে বার্তাটি ব্যবহারকারী:MSantos (WMF)@metawiki পাঠিয়েছেন -->
== সিলেটী নাগরী লিপিতে রচিত বাংলা বইগুলির জন্য লিপ্যন্তর চালুর প্রস্তাব ==
সুধী, উইকিসংকলনে বেশ কয়েকটি বাংলা রয়েছে যেগুলি সিলেটি নাগরীতে লিপিতে রচিত, যেমন [[নির্ঘণ্ট:চন্দ্রমুখীর পুথী - মুহম্মদ খলিল (১৮৭৭).pdf|এই বইটি]]। Language converter সরঞ্জাম ব্যবহার করে এই সমস্ত বইগুলির সিলেটী নাগরীতে রচিত লেখাগুলি বাংলা লিপিতে লিপ্যন্তর করা যেতে পারে, যাতে বাংলা লিপিতে অভ্যস্ত পাঠকেরা সেই বইগুলি পড়ে বুঝতে পারেন। এই কারণে আমি উইকিসংকলনে সিলেটী নাগরী হতে বাংলা লিপিতে লিপ্যন্তর করার ব্যবস্থা চালু করতে প্রস্তাব করছি। সম্প্রদায়ের মতামত ও সমর্থন কাম্য। -- [[ব্যবহারকারী:Bodhisattwa|বোধিসত্ত্ব]] ([[ব্যবহারকারী আলাপ:Bodhisattwa|আলাপ]]) ০৭:০২, ২৯ আগস্ট ২০২৬ (ইউটিসি)
:খুবই ভালো এবং সময়োপযোগী প্রস্তাব। সমর্থন করি। [[ব্যবহারকারী:Dr. Bir|Dr. Bir]] ([[ব্যবহারকারী আলাপ:Dr. Bir|আলাপ]]) ০৯:৫২, ২৯ আগস্ট ২০২৬ (ইউটিসি)
:{{সমর্থন}} [[ব্যবহারকারী:Tausheef Hassan|Tausheef Hassan]] ([[ব্যবহারকারী আলাপ:Tausheef Hassan|আলাপ]]) ১১:২৫, ২৯ আগস্ট ২০২৬ (ইউটিসি)
:{{সমর্থন}} ≈ <b style="border:2px solid#103;font-family:georgia;font-variant:small-caps">[[User:MS_Sakib|<b style="background-color:#1E816F;color:#fff"> MS Sakib </b>]] [[User talk:MS Sakib|📩]] <b>·</b>[[Special:Contributions/MS Sakib|📝]]</b> ২০:৪০, ২৯ আগস্ট ২০২৬ (ইউটিসি)
:ভালো উদ্যোগ, {{সমর্থন}} জানাচ্ছি। -- [[ব্যবহারকারী:ROCKY|রকি]] ([[ব্যবহারকারী আলাপ:ROCKY|আলাপ]]) ১০:৫৯, ৩১ আগস্ট ২০২৬ (ইউটিসি)
2b58zbmgw5o3c8lvnkkeqy9obsh8rmw
টেমপ্লেট:PAGES NOT PROOFREAD
10
9620
1996903
1996717
2026-08-31T07:02:38Z
SodiumBot
19245
বট টেমপ্লেট হালনাগাদ করছে
1996903
wikitext
text/x-wiki
443431
5g41qlcz00svz8is2h7cv10esuewnlm
টেমপ্লেট:ALL PAGES
10
9621
1996904
1996718
2026-08-31T07:02:48Z
SodiumBot
19245
বট টেমপ্লেট হালনাগাদ করছে
1996904
wikitext
text/x-wiki
557959
12s0chc1ov6s17nxu7ngc4xkqhlqaat
টেমপ্লেট:PR TEXTS
10
9622
1996905
1996488
2026-08-31T07:02:58Z
SodiumBot
19245
বট টেমপ্লেট হালনাগাদ করছে
1996905
wikitext
text/x-wiki
19865
ssblxaezy3mmdfs9yd23iyjqkj2poxm
টেমপ্লেট:ALL TEXTS
10
9623
1996906
1996489
2026-08-31T07:03:08Z
SodiumBot
19245
বট টেমপ্লেট হালনাগাদ করছে
1996906
wikitext
text/x-wiki
19865
ssblxaezy3mmdfs9yd23iyjqkj2poxm
পাতা:গীতাঞ্জলি - রবীন্দ্রনাথ ঠাকুর.djvu/১৫১
104
25923
1996957
1794792
2026-08-31T10:19:20Z
জয়শ্রীরাম সরকার
13864
/* মুদ্রণ সংশোধন করা হয়েছে */
1996957
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="জয়শ্রীরাম সরকার" />{{rh||গীতাঞ্জলি|১৩৯}}
{{block center/s}}</noinclude>{{block center|<poem>
::::তিনি গেছেন যেথায় মাটি ভেঙে
::::::করচে চাষা চাষ,-
::::পাথর ভেঙে কাট্চে যেথায় পথ
::::::খাট্ চে বারাে মাস।
::::রৌদ্রে জলে আছেন সবার সাথে,
::::ধূলা তাঁহার লেগেছে দুই হাতে;
::::তাঁরি মতন শুচি বসন ছাড়ি
::::::::আয়রে ধূলার পরে।
:মুক্তি? ওরে মুক্তি কোথায় পাবি,
:::মুক্তি কোথায় আছে?
:আপ্নি প্রভু সৃষ্টিবাঁধন পরে’
:::বাঁধা সবার কাছে।
:রাখােরে ধ্যান, থাকরে ফুলের ডালি,
:ছিঁড়ুক বস্ত্র, লাগুক্ ধূলাবালি,
:কর্ম্মযােগে তাঁর সাথে এক হয়ে
:::ঘর্ম্ম পড়ুক্ ঝরে॥
</poem>
২৭ আষাঢ় ১৩১৭}}<noinclude>{{block center/e}}</noinclude>
dfjds8pb18qfst834z0eq91u8xkr3uz
1996958
1996957
2026-08-31T10:20:38Z
জয়শ্রীরাম সরকার
13864
1996958
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="জয়শ্রীরাম সরকার" />{{rh||গীতাঞ্জলি|১৩৯}}
{{block center/s}}</noinclude>{{block center|<poem>
::::তিনি গেছেন যেথায় মাটি ভেঙে
::::::করচে চাষা চাষ,-
::::পাথর ভেঙে কাট্চে যেথায় পথ
::::::খাট্চে বারাে মাস।
::::রৌদ্রে জলে আছেন সবার সাথে,
::::ধূলা তাঁহার লেগেছে দুই হাতে;
::::তাঁরি মতন শুচি বসন ছাড়ি
::::::::আয়রে ধূলার পরে।
:মুক্তি? ওরে মুক্তি কোথায় পাবি,
:::মুক্তি কোথায় আছে?
:আপ্নি প্রভু সৃষ্টিবাঁধন পরে’
:::বাঁধা সবার কাছে।
:রাখােরে ধ্যান, থাকরে ফুলের ডালি,
:ছিঁড়ুক বস্ত্র, লাগুক্ ধূলাবালি,
:কর্ম্মযােগে তাঁর সাথে এক হয়ে
:::ঘর্ম্ম পড়ুক্ ঝরে॥
</poem>
২৭ আষাঢ় ১৩১৭}}<noinclude>{{block center/e}}</noinclude>
79yow8a4fc1fvtdu1bx8iqq5i0xkpzd
ব্যবহারকারী:Bodhisattwa/common.js
2
57979
1996887
1996574
2026-08-31T03:17:07Z
Bodhisattwa
2549
1996887
javascript
text/javascript
mw.loader.load('//www.wikidata.org/w/index.php?title=User:Tpt/interproject.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=User:Inductiveload/Running header.js&action=raw&ctype=text/javascript');
//mw.loader.load('//en.wikisource.org/w/index.php?title=User:Inductiveload/ColourBackground.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=User:Inductiveload/Visibility.js&action=raw&ctype=text/javascript');
//mw.loader.load('//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js');
//mw.loader.load('//wikisource.org/w/index.php?title=User:Alex brollo/common.js&action=raw&ctype=text/javascript');
// [[File:Krinkle_WhatLeavesHere.js]]
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Krinkle/Tools/WhatLeavesHere.js&action=raw&ctype=text/javascript');
// [[File:Krinkle_OneClickCommoniser.js]]
importScript("MediaWiki:OneClickCommoniser.js");
//mw.loader.load('//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-GlobalUsageUI.js&action=raw&ctype=text/javascript');
//mw.loader.load('//it.wikisource.org/w/index.php?title=User:Alex brollo/livePreview.js&action=raw&ctype=text/javascript');
//mw.loader.load('//bn.wikisource.org/w/index.php?title=User:Bodhisattwa/common.js/typoscan.js&action=raw&ctype=text/javascript');
//mw.loader.load('//en.wikisource.org/w/index.php?title=User:Ineuw/common.js/Gadget-NopInserter.js&action=raw&ctype=text/javascript');
//without text (script enables clear and save of Page: ns pages)
mw.loader.load('//en.wikisource.org/w/index.php?title=MediaWiki:Gadget-Without text.js&action=raw&ctype=text/javascript');
// this loads the WIP eis.js (Edit In Sequence), only running in edit mode
//mw.loader.load('//it.wikisource.org/w/index.php?title=User:Alex brollo/eis.js&action=raw&ctype=text/javascript');
importScript("MediaWiki:Wikisource.citeBox.js");
mw.loader.load('//en.wikisource.org/w/index.php?title=User:User:Alex brollo/t.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=User:User:Alex brollo/IDB.js&action=raw&ctype=text/javascript');
// mw.loader.load('//commons.wikimedia.org/wiki/MediaWiki:Gadget-AjaxQuickDelete.js&action=raw&ctype=text/javascript');
// mw.loader.load('//commons.wikimedia.org/wiki/User:Perhelion/massrename.js&action=raw&ctype=text/javascript');
//mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Splarka/ajaxfilemove.js&action=raw&ctype=text/javascript');
//mw.loader.load('https://wikisource.org/w/index.php?title=MediaWiki:OCR.js&action=raw&ctype=text/javascript');
// mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Indic-TechCom/Script/MoveAndReplace.js&action=raw&ctype=text/javascript');
// Remove "Auteur:" prefix in category, see https://fr.wikisource.org/wiki/Cat%C3%A9gorie:Philosophes
$(function () {
if (mw.config.get('wgNamespaceNumber') == 14) {
$("li a[href^='/wiki/Author:']").each(function () {
$(this).text($(this).text().substr("Author:".length));
});
}
});
//mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Urvaxhi/speechToText.js&action=raw&ctype=text/javascript');
//mw.loader.load('//bn.wikisource.org/w/index.php?title=MediaWiki:Gadget-dictionaryLookupHover.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Daduxing/familytree.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Joeytje50/JWB.js/load.js&action=raw&ctype=text/javascript');
mw.loader.load('//bn.wikipedia.org/w/index.php?title=ব্যবহারকারী:আফতাবুজ্জামান/পুনঃনামকরণ২.js&action=raw&ctype=text/javascript');
// mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Jnanaranjan_sahu/WikiQuickTrans.js&action=raw&ctype=text/javascript');
mw.loader.load( '//bn.wikisource.org/w/index.php?title=ব্যবহারকারী:Mahir256/leximap.js&action=raw&ctype=text/javascript' );
et8rcvs5gjqhbr27fji43hf54mln17d
পাতা:বিদ্যাসাগর (বিহারীলাল সরকার).pdf/১২
104
487930
1996889
1796172
2026-08-31T03:19:41Z
Bodhisattwa
2549
1996889
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Kazimizanur" /></noinclude>{{C|{{xxx-larger|আমার নিবেদন।}}}}
{{gap}}“বিদ্যাসাগরের” তৃতীয় সংস্করণ প্রকাশিত হইল। আমার কোন কোন বন্ধু বলেন যে, “বিদ্যাসাগরে”র আরও বেশী সংস্করণ হওয়া উচিত ছিল। আমার লেখার গুণে নহে, বিদ্যাসাগরের নামের গুণে। ইহর আরও বেশী সংস্করণ দেখিয়া যাইব, আমারও এইরূপ আশা ছিল; কিন্তু আশা ফলবতী হয় নাই। তবে দেশে পাঠকবৃন্দের যেরূপ অবস্থা, তাহা ভাবিলে এই যে তৃতীয় সংস্করণ হইল, ইহাকেই আমার ও আমার দেশের সৌভাগ্য বলিয়া মানি।
{{gap}}তৃতীয় সংস্করণ আরও কিছু পূর্ব্বে প্রকাশিত হইবার কথা ছিল; কিন্তু দুর্ভাগ্যবশতঃ আমার শারীরিক অবস্থা সে পক্ষে কক্ত কটা পরিপন্থী হইয়া দাঁড়ায়। এই সংস্করণে অনেক জ্ঞাতব্য নুতন বিষয় সংযোজিত করিবার ইচ্ছা ছিল। কতক কতক নূতন বিষয় সংযোজিত হইয়াছে। তাহ বোধ হয়, পাঠকদিগকে পক্ষে অপাঠ্য হইবে না, এমন ভরসা আছে। তবে, যতগুলি বিষয় সংগ্রহ করিবার সঙ্কল্প ছিল, শারীরিক অপটুতাবশতঃ তাহা করিতে পারি নাই। যদি ভগবৎকৃপায় ইহার চতুর্থ সংস্করণ দেখিয়া যাইবার সৌভাগ্য আমার ঘটে, তাহা হইলে, মনের বাসনা অপূর্ণ না থাকিলেও থাকিতে পারে।
{{nop}}<noinclude></noinclude>
o7dj54sh6o0wrqhsor8aakn7iyd8e2b
ব্যবহারকারী:Mahir256/common.js
2
637035
1996848
1949706
2026-08-30T16:29:15Z
Mahir256
1096
1996848
javascript
text/javascript
//mw.loader.load('//bn.wikisource.org/w/index.php?title=ব্যবহারকারী:Mahir256/Gadget-EIS.js&action=raw&ctype=text/javascript');
mw.loader.load('//bn.wikisource.org/w/index.php?title=ব্যবহারকারী:Mahir256/Gadget-BanglaDate.js&action=raw&ctype=text/javascript');
//mw.loader.load('//bn.wikisource.org/w/index.php?title=মিডিয়াউইকি:Gadget-dictionaryLookupHover.js&action=raw&ctype=text/javascript');
mw.loader.load('//commons.wikimedia.org/w/index.php?title=User:Rillke/bigChunkedUpload.js&action=raw&ctype=text/javascript');
mw.loader.load('//bn.wikisource.org/w/index.php?title=মিডিয়াউইকি:Gadget-massdelete.js&action=raw&ctype=text/javascript');
mw.loader.load('//bn.wikisource.org/w/index.php?title=ব্যবহারকারী:Mahir256/massmove.js&action=raw&ctype=text/javascript');
mw.loader.load('//bn.wikisource.org/w/index.php?title=ব্যবহারকারী:Mahir256/getEditionInfo.js&action=raw&ctype=text/javascript');
mw.loader.load('//bn.wikisource.org/w/index.php?title=ব্যবহারকারী:Mahir256/wikidatalist.js&action=raw&ctype=text/javascript');
mw.util.addPortletLink("p-tb", "//bn.wikisource.org/wiki/Special:Massmove", "গণহারে স্থানান্তর", "p-massmove", "গণহারে স্থানান্তর");
mw.util.addPortletLink("p-tb", "//listeria.toolforge.org/index.php?action=update&project=wikisource&lang=bn&page="+mw.config.get('wgPageName'), "লিস্টেরিয়া হালনাগাদ", "p-listeriaupdate", "লিস্টেরিয়া তালিকা হালনাগাদ করুন, যদি এই পাতায় তালিকা থাকে");
mw.loader.load( '//meta.wikimedia.org/w/index.php?title=User:Dagmawi-M/leximap.js&action=raw&ctype=text/javascript' );
/*
mw.loader.using(['mediawiki.api'], function () {
if($("#subheader").has(".footertemplate").length == 0){
var mwapi = new mw.Api();
// console.log($("#ca-proofread-source>span>a").attr("href"));
mwapi.get( {
action: 'query',
prop: 'revisions',
titles: decodeURI($(mw.config.get("proofreadpage_source_href")).attr("href")).substring(6),
formatversion: 2,
rvprop:"content"
}).done( function ( data ) {
// console.log(data);
$.ajax({
url: mw.util.wikiScript( 'api' ),
data: {
format: 'json',
action: 'parse',
contentmodel: 'proofread-page',
summary: "ajax preview",
text: data['query']['pages'][0]['revisions'][0]['content'],
time: $.now()
},
dataType: 'json',
type: 'POST',
success: function( data ) {
var desiredlink = $("div#remarks a", data["parse"]["text"]["*"])[0];
var footertemplatetext = '<div class="footertemplate ws-noexport"><div class="footertemplate-content"><div class="footertemplate-prev"><span id="headerprevious"></span></div><div class="footertemplate-cur" itemprop="name"></div><div class="footertemplate-next"><span id="headernext"><span itemprop="nextItem" itemscope="" itemtype="http://schema.org/Thing"></span><span style="color:#808080"> ►</span></span></div></div><div style="clear:both"></div></div>';
var footertemplate = $(footertemplatetext);
$(".footertemplate-next #headernext>span:first-child", footertemplate).prepend(desiredlink);
$("#subheader").prepend(footertemplate);
}
});
});
}
});
*/
inp5ppb9krvs1bfd3ymicw0ojrxb3tz
1996851
1996848
2026-08-30T16:35:22Z
Mahir256
1096
1996851
javascript
text/javascript
//mw.loader.load('//bn.wikisource.org/w/index.php?title=ব্যবহারকারী:Mahir256/Gadget-EIS.js&action=raw&ctype=text/javascript');
mw.loader.load('//bn.wikisource.org/w/index.php?title=ব্যবহারকারী:Mahir256/Gadget-BanglaDate.js&action=raw&ctype=text/javascript');
//mw.loader.load('//bn.wikisource.org/w/index.php?title=মিডিয়াউইকি:Gadget-dictionaryLookupHover.js&action=raw&ctype=text/javascript');
mw.loader.load('//commons.wikimedia.org/w/index.php?title=User:Rillke/bigChunkedUpload.js&action=raw&ctype=text/javascript');
mw.loader.load('//bn.wikisource.org/w/index.php?title=মিডিয়াউইকি:Gadget-massdelete.js&action=raw&ctype=text/javascript');
mw.loader.load('//bn.wikisource.org/w/index.php?title=ব্যবহারকারী:Mahir256/massmove.js&action=raw&ctype=text/javascript');
mw.loader.load('//bn.wikisource.org/w/index.php?title=ব্যবহারকারী:Mahir256/getEditionInfo.js&action=raw&ctype=text/javascript');
mw.loader.load('//bn.wikisource.org/w/index.php?title=ব্যবহারকারী:Mahir256/wikidatalist.js&action=raw&ctype=text/javascript');
mw.util.addPortletLink("p-tb", "//bn.wikisource.org/wiki/Special:Massmove", "গণহারে স্থানান্তর", "p-massmove", "গণহারে স্থানান্তর");
mw.util.addPortletLink("p-tb", "//listeria.toolforge.org/index.php?action=update&project=wikisource&lang=bn&page="+mw.config.get('wgPageName'), "লিস্টেরিয়া হালনাগাদ", "p-listeriaupdate", "লিস্টেরিয়া তালিকা হালনাগাদ করুন, যদি এই পাতায় তালিকা থাকে");
mw.loader.load( '//bn.wikisource.org/w/index.php?title=ব্যবহারকারী:Mahir256/leximap.js&action=raw&ctype=text/javascript' );
/*
mw.loader.using(['mediawiki.api'], function () {
if($("#subheader").has(".footertemplate").length == 0){
var mwapi = new mw.Api();
// console.log($("#ca-proofread-source>span>a").attr("href"));
mwapi.get( {
action: 'query',
prop: 'revisions',
titles: decodeURI($(mw.config.get("proofreadpage_source_href")).attr("href")).substring(6),
formatversion: 2,
rvprop:"content"
}).done( function ( data ) {
// console.log(data);
$.ajax({
url: mw.util.wikiScript( 'api' ),
data: {
format: 'json',
action: 'parse',
contentmodel: 'proofread-page',
summary: "ajax preview",
text: data['query']['pages'][0]['revisions'][0]['content'],
time: $.now()
},
dataType: 'json',
type: 'POST',
success: function( data ) {
var desiredlink = $("div#remarks a", data["parse"]["text"]["*"])[0];
var footertemplatetext = '<div class="footertemplate ws-noexport"><div class="footertemplate-content"><div class="footertemplate-prev"><span id="headerprevious"></span></div><div class="footertemplate-cur" itemprop="name"></div><div class="footertemplate-next"><span id="headernext"><span itemprop="nextItem" itemscope="" itemtype="http://schema.org/Thing"></span><span style="color:#808080"> ►</span></span></div></div><div style="clear:both"></div></div>';
var footertemplate = $(footertemplatetext);
$(".footertemplate-next #headernext>span:first-child", footertemplate).prepend(desiredlink);
$("#subheader").prepend(footertemplate);
}
});
});
}
});
*/
hha8qiqmtxrn6p8n58zi6w6fsmrd99t
নির্ঘণ্ট:প্রাকৃতিকী.pdf
102
766420
1996954
1855439
2026-08-31T08:46:48Z
Bodhisattwa
2549
1996954
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q110015080
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=6
|Progress=C
|Pages=<pagelist 1to11="—" 4="শিরোনাম" 6="প্রচ্ছদ" 7="প্রকাশক" 8="উৎসর্গ" 10="নিবেদন" 12to13="সূচীপত্র" 14to15="চিত্রসূচী" 16="1" 28="চিত্র" 29="—" 30="13" 32="—" 33="চিত্র" 34="15" 40="চিত্র" 41="—" 42="21" 104="—" 105="চিত্র" 106="83" 117="চিত্র" 156="—" 157="চিত্র" 158="133" 218="চিত্র" 219="—" 220="193" 222="চিত্র" 223="—" 224="195" 230="চিত্র" 231="—" 232="201" 272="চিত্র" 273="—" 274="241" 278="—" 279="চিত্র" 280="245" 282="—" 283="চিত্র" 284="247" 286="চিত্র" 287="—" 288="249" 290="চিত্র" 291="—" 292="251" 298="চিত্র" 299="—" 300="257" 314="—" 315="চিত্র" 316="271" 349to352="—" />
|Volumes=
|Remarks={{পাতা:প্রাকৃতিকী.pdf/১২}}
{{পাতা:প্রাকৃতিকী.pdf/১৩}}
|Notes=
|Header=
|Footer=
}}
lf4kujqhhh75amry7uz9olqsnaj5nx8
প্রাকৃতিকী (১৯১৪)/শুক্র-ভ্রমণ
0
766514
1996951
1758623
2026-08-31T08:43:32Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/শুক্র-ভ্রমণ]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/শুক্র-ভ্রমণ]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1758623
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=318 to=352 header=1/>
l5ck92camzobn9wfyo7ij6v5nflepl0
ব্যবহারকারী:Nettime Sujata/খেলাঘর
2
777842
1996913
1995119
2026-08-31T08:09:21Z
Nettime Sujata
5470
/* ১ */
1996913
wikitext
text/x-wiki
==১==
{{কেন্দ্র|{{rotate|180|{{x-larger|'''সুজাতা'''}}}}}}
{{sfrac|২|১|২}}{{ফাঁক}} {{sfrac|২|৩}}{{ফাঁক}} {{sfrac|১|২}}</br> [https://w.wiki/EdhD পাতা:বিবিধ-বঙ্কিমচন্দ্র চট্টোপাধ্যায় (১৯৩৯).pdf/৩৫০], </br>[https://w.wiki/EdhE পাতা:বিবিধ-বঙ্কিমচন্দ্র চট্টোপাধ্যায় (১৯৩৯).pdf/৩৫০পাতা:বিবিধ-বঙ্কিমচন্দ্র চট্টোপাধ্যায় (১৯৩৯).pdf/৩৫১]</br>
[https://w.wiki/Evoi পেশবাদিগের রাজ্যশাসন-পদ্ধতি ১২৯]</br>
[https://w.wiki/Evoo পেশবাদিগের রাজ্যশাসন-পদ্ধতি ১৩০]</br>
[https://w.wiki/FwsH প্রাণের হিসাব ২৬]</br>
[https://w.wiki/JFV7 টেমপ্লেট:Multicol]
<nowiki>{{smallrefs|columns=2}}</nowiki>
{{Playscript|gap=6|গঙ্গা।—|হেৰ গোলাই অ! এই চিঠিখন বেগতে ডাক-ঘৰত দি আহগৈচোন, যাহি। তই বাটত আকৌ কাকো দেখুৱাই নিনিবি।}}
{{di|I|image=Works of Jules Verne, Volume Six - Initial I.png|imgsize=60px}}T
{{sp|হজবরল}}
==২==
{{rvh|{{{pagenum}}}|অধ্যায়|প্রবাস-চিত্র}}
{{rvh|120|CHAPTER|FROM IMMIGRANT TO INVENTOR}}
{{c|{{{pagenum}}}}}
{{rvh|{{{pagenum}}}|পেশবাদিগের রাজ্যশাসন-পদ্ধতি}}
{{rvh|{{{pagenum}}}|||আমার দেখা তুরস্ক}}
{{rh|{{{pagenum}}}|টল্ষ্টয়ের গল্প|{{{pagenum}}}}}
{{rvh|{{{pagenum}}}|পুষ্পাঞ্জলি}}
{{rh|{{u|}}||{{u|প্রীতি উপহার।}}}}
{{Overline|overlined}}
{{Overline|{{u|প্রীতি উপহার।}}}}
{{u|{{xxxx-larger|{{u|'''তারপর'''}}}}}}
[https://w.wiki/5AGD Category:Formatting templates]
==৩==
{{Left margin|5em|জাতির সহিত সারসেরা যুদ্ধ করে (হোমরও এইরূপ বর্ণনা করিয়াছেন), তিতির পক্ষীও যুদ্ধ করে, এগুলি রাজহংসের ন্যায় বৃহৎ।||5em}}
needs to span a page break in the Page namespace
{{left margin/s|3em}}
{{lorem ipsum}}
{{left margin/e}}
==৪==
{{block center/s}}
{|style=text-align:center
|-
|width=200px;|<poem>কলিকাতা বিশ্ববিদ্যালয়
১২ই মে, ১৯২৪</poem>||{{brace2|4}}||width=200px|শ্রীদীনেশচন্দ্র সেন
|}
{{block center/e}}
{|
| {{ফাঁক}}৮। মাণিকনাক বিন রাজনাক
| rowspan=2|{{brace2|2|r}} মহার
|
|-
| {{ফাঁক}}৯। য়েশনাক বিন নিম্বনাক
|}
{|
| {{overfloat left|depth=.2em|duct}} || rowspan=2 |{{brace2|3|r}} || rowspan=2 | রজন-নলী
|-
| {{overfloat left|depth=.2em|passage}}
|}
{|style=text-align:center
|-
|width=200px;|<poem>পি. ৭১এ, ধানমণ্ডি, ঢাকা
জুলাই, ১৯৫৫</poem>||{{brace2|4}}||width=200px|{{ফাঁক|5em}}{{x-larger|'''শামসুন নাহার'''}}
|}
{|style=text-align:center
|-
|width=200px;|<poem>চুঁচুড়া
১লা বৈশাখ,
১৬২৯।
</poem>||{{brace2|4}}||width=400px|<poem>বিনীত
{{x-larger|'''শ্রীদুর্গামোহন মুখোপাধ্যায়'''}}</poem>
|}
{{multicol}}
{{Block left|{{কেন্দ্র|<poem>শরৎ-স্মৃতি-মন্দির
২৪, অশ্বিনী দত্ত রোড
কলিকাতা—২৯
১৯শে ফাল্গুন, ১৩৬৩</poem>}}}}
{{multicol-break}}
[[File:শরৎ-সাহিত্য-সংগ্রহ (দশম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৬) (page 11 crop).jpg|250px|right]]
{{multicol-end}}
==৫==
{| width=450px {{ts|mc|vtt}}
|| ১৯৯৭ সনে লোকসংখ্যা ছিল {{gap}} ... || ... {{gap}} ... {{gap}} || ১৩,০০ লক্ষ
|-
|| ১৯২৬ {{ditto|সনে|”}} {{ditto|লোকসংখ্যা|”}} {{ditto|ছিল|”}} {{gap}} ... || ... {{gap}} ... || ১৪,৯০ {{ditto|লক্ষ|”}}
|-
|| ১৯২৯ {{ditto|সনে|”}} {{ditto|লোকসংখ্যা|”}} {{ditto|ছিল|”}} {{gap}} ... || ... {{gap}} ... || ১৫,৪০ {{ditto|লক্ষ|”}}
|-
|| ১৯৩০ {{ditto|সনে|”}} {{ditto|লোকসংখ্যা|”}} {{ditto|ছিল|”}} {{gap}} ... || ... {{gap}} ... || ১৫,৮০ {{ditto|লক্ষ|”}}
|-
|| ১৯৩০ {{ditto|সনে|”}} (বসন্তকালের গৃহীত হিসাবে) || ... {{gap}} ... || ১৬,৫০ {{ditto|লক্ষ|”}}
|}
{{dhr}}{{dhr}}
{| width=450px {{ts|mc|vtt}}
|| খোন্দকার সাহেব || আনুমানিক কাল || খৃঃ ১৭১৯, সাধনা, জ্যৈষ্ঠ ১৩২৭
|-
|| ফৌজদার সাহেব || {{ditto|আনুমানিক|”}} {{ditto|কাল|”}}১৭৪০, || মানসী ও মর্ম্মবাণী পৌষ ১৩২০
|-
|| ত্রিবেণী|| {{ditto|আনুমানিক|”}} {{ditto|কাল|”}}১৭৫০, || চৈত্র ১৩২৬
|}
==৬==
{| {{ts|mc|vtt}}
|| ১৯২৫ সনে || : || মাত্র ৬টি আধুনিক বিদ্যালয়।
|-
|| ১৯২৬ সনের শেষে || : || ১১৩টি বিদ্যালয়, ২৩০০ জন ছাত্র।
|-
|| ১৯২৯ সনে || : || ৫০০টি বিদ্যালয়।
|-
|| ১৯৩২ সনে || : || শিক্ষায়তনের সংখ্যা ২,০০০ এরও উপরে, ছাত্রদের সংখ্যা ১,২০,০০০-এরও বেশি।
|}
==৭==
{{Block center|{{columns |bgcol=beige |width=5em |gap=3.25em
|col1 =
<br />প্রথমা <br />দ্বিতীয়া<br />সম্বোধন
|col2 =
একবচন<br />পিতা <br />পিতরম্<br />পিতঃ<br />
|col3 =
দ্বিবচন<br />পিতরৌ<br />পিতরৌ<br />পিতরৌ
|col4 =
বহুবচন<br />পিতরঃ<br /><br />পিতরঃ
}}}}
==৮==
{| {{ts|mc|al|w100}}
|-{{ts|ac}}
| colspan="2" | {{larger|পুরুষ}}
|-
|| জ্যোতির্ম্ময় মতিলাল || চিত্রকর।
|-
|| হরেন মল্লিক || ঐ বন্ধু।
|-
|| রাজা রূপচাঁদ রায় || জমিদার; আর্টের উৎসাহদাতা।
|-
|| চন্দ্রপ্রকাশ চম্পটি || “মুন্লাইট্” কোম্পানীর স্বত্বাধিকারী
|-
|| রোহিণীকান্ত শ্রীমানি || “মুন্লাইট্” কোম্পানীর একাধারে ম্যানেজার, কেরানী ও অফিস্-বয়।
|-
|| রামচন্দ্র || জ্যোতির্ম্ময়ের ভৃত্য।
|-
|| চিন্তামণি || জনৈক ভাবুক ভদ্রলোক (আধ্পাগ্লা)।
|-{{ts|ac}}
| colspan="2" | {{larger|স্ত্রী}}
|-
|| মিস্ বিজলী মজুমদার || লাহোরের ভূতপূর্ব্ব এড্ভোকেট্ মিষ্টার মজুমদারের কন্যা।
|-
|| মিস্ কঙ্কাবতী কাঞ্জিলাল, এম, ডি (বার্লিন) || লেডী ডাক্তার; বিজলীর মাসী।
|}
==৮==
{| {{ts|mc|vtt|ac}}
|| কোন্ সনের প্রথম তিনমাস || মোট আমদানি || মোট রপ্তানি || আমদানি-রপ্তানির মোট পরিমাণ
|-
|| ১৯২৯ || ৭৯৭২ || ৭৩১৭ || ১৫২৮৯
|-
|| ১৯৩০ || ৭৩৬৪ || ৬৫২০ || ১৩৮৮৪
|-
|| ১৯৩১ || ৫১৫৪ || ৪৫৩১ || ৯৬৮৫
|-
|| ১৯৩২ || ৩৪৩৪ || ৩০২৭ || ৬৪৬১
|-
|| ১৯৩৩ || ২৮২৯ || ২৫৫২ || ৫৩৮১
|}
{{rule}}
{{ফাঁক}}মন্ট সেনিস্ এবং ব্রিন্দিসি দিয়া রেল ও ষ্টীমারে
{{TOC begin|width=35em}}
{{TOC row 1-c-1|{{ফাঁক}}লণ্ডন হইতে সুয়েজ বন্দর|... {{gap}} ... {{gap}}|৭ দিন}}
{{TOC row 1-c-1|{{ফাঁক}}ষ্টীমারে সুয়েজ হইতে বোম্বাই|... {{gap}} ... {{gap}}|১৩ দিন}}
{{TOC row 1-c-1|{{ফাঁক}}রেলে বোম্বাই হইতে কলিকাতা|... {{gap}} ... {{gap}}|৩ দিন}}
{{TOC row 1-c-1|{{ফাঁক}}ষ্টীমারে কলিকাতা হইতে হংকং|... {{gap}} ... {{gap}}|১৩ দিন}}
{{TOC row 1-c-1|{{ফাঁক}}ষ্টীমারে হংকং হইতে ইয়োকোহামা|... {{gap}} ... {{gap}}|৬ দিন}}
{{TOC row 1-c-1|{{ফাঁক}}ষ্টীমারে ইয়োকোহামা হইতে সানফ্রান্সিস্কো|... {{gap}} ... {{gap}}|২২ দিন}}
{{TOC row 1-c-1|{{ফাঁক}}রেলে সানফ্রান্সিসকো হইতে নিউইয়র্ক|... {{gap}} ... {{gap}}|৭ দিন}}
{{TOC row 1-c-1|{{ফাঁক}}রেল ও ষ্টিনারে নিউইয়র্ক হইতে লণ্ডন|... {{gap}} ... {{gap}}|৯ দিন}}
{{TOC row 1-c-1|||______}}
{{TOC row 1-c-1||মোট|৮০ দিন}}
{{TOC end}}
==৯==
নির্বাচিত রচনাবলী সম্পর্কে উল্লেখযোগ্য তথ্যাদি রচনার সন্নিবেশক্রম অনুসরণ করিয়া নিম্নে মুদ্রিত হইল ৷ প্রত্যেক প্রসঙ্গেই এই গ্রন্থের পত্রাঙ্ক এবং কাব্য বা কবিতার নাম উল্লিখিত হইয়াছে।
<div class="prose">
{{overfloat left|depth=4em|২৯-৩১}}ভানুসিংহের পদাবলী -রচনার কাহিনী জীবনস্মৃতিতে কবি স্বয়ং লিখিয়াছেন। ইহার অধিকাংশ রচনা সন্ধ্যাসংগীতের পূর্ববর্তী। ‘মরণ’ ভারতী পত্রিকার ১২৮৮ শ্রাবণ সংখ্যায় এবং ছবি ও গানের প্রথম সংস্করণে প্রথম প্রকাশিত। ‘প্রশ্ন’ ১২৯২ সালের প্রচার পত্রিকায় এবং কড়ি ও কোমলের প্রথম সংস্করণে প্রথম প্রকাশিত। এই দুটি পরে ‘ভানুসিংহ ঠাকুরের পদাবলী’ গ্রন্থে স্থান পায়।
{{overfloat left|depth=4em|৩২}}দৃষ্টি। ইহা সন্ধ্যাসংগীত কাব্যের ‘উপহার’ কবিতার প্রথম স্তবক হইতে সংকলিত; বর্জিত প্রথম কয় ছত্র এই—
</div>
{{blockquote|{{ফাঁক}}{{smaller|তুমিই ব্রাহ্মণকুলে জন্মিয়া, ধর্ম্মশাস্ত্র প্রণয়ন করিয়াছিলে, সন্দেহ নাই, নহিলে নবমীতে লাউ খাইতে নাই কেন? তুমিই আলঙ্কারিক, সাহিত্যদর্পণাদি তোমারই সৃষ্টি। কিঞ্চিৎ ঘাস খাও।}}}}
==১০==
ছি ছি{{bar|3}}শরমটুটে,
==১১==
{{sidenotes begin}}
{{Outside R|{{smaller|কাহিনীর ভারতময় ব্যাপ্তি}}}}{{gap}}মাতা ময়নামতীর চেষ্টা ও উদ্যোগে হাড়িপা বা জলন্দরি গুরুর শিষ্যত্বে নবীন নৃপতি গোপীচন্দ্রের যোগী বা সন্ন্যাসী হইয়া গৃহত্যাগই এই সকল গাথার বর্ণনীয় বিষয়। গোপীচন্দ্র বাঙ্গালার রাজা ছিলেন। কিন্তু বাঙ্গালার বাহিরে ভারতের প্রায় সৰ্ব্বত্রই তাঁহার কাহিনী প্রচলিত। “ধম্মানন্দ মহাভারতী মহাশয় তাঁহার “বঙ্গের ব্রাহ্মণ রাজবংশ” নামক পুস্তকে লিখিয়া গিয়াছেন ‘ভারতবর্ষের প্রায় সর্ব্বত্র প্রাচীন কাল
{{sidenotes end}}
==১২==
{{gap}}উড়িষ্যায় প্রাপ্ত গাথা অনুসারে বংশ তালিকা নিম্নরূপ:—
{{Tree chart/start|align=center}}
{{Tree chart|border=0| সুরচন্দ্র | সুরচন্দ্র=সুরচন্দ্র}}
{{Tree chart|border=0| !}}
{{Tree chart|border=0| তারাচন্দ্র | তারাচন্দ্র=তারাচন্দ্র}}
{{Tree chart|border=0| !}}
{{Tree chart|border=0| ব্রহ্মাচন্দ্র | ব্রহ্মাচন্দ্র=ব্রহ্মাচন্দ্র}}
{{Tree chart|border=0| !}}
{{Tree chart|border=0| গোপীচন্দ্র | গোপীচন্দ্র=গোপীচন্দ্র}}
{{Tree chart|border=0| !}}
{{Tree chart|border=0| মেহুচন্দ্র | মেহুচন্দ্র=মেহুচন্দ্র}}
{{Tree chart|border=0| !}}
{{Tree chart|border=0| বিষ্ণুচন্দ্র | বিষ্ণুচন্দ্র=বিষ্ণুচন্দ্র}}
{{Tree chart|border=0| !}}
{{Tree chart|border=0| রূপচন্দ্র | রূপচন্দ্র=রূপচন্দ্র}}
{{Tree chart|border=0| !}}
{{Tree chart|border=0| গোবিন্দচন্দ্র | গোবিন্দচন্দ্র=গোবিন্দচন্দ্র}}
{{Tree chart/end}}
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | | | | | | | | | RR | | | | | | | | RR = {{larger|রঘুনাথ রাও (আদি পুরুষ)}} |border=0}}
{{Tree chart| | | | | |, | - | - | - | - | - | - | - | - | ^ | - | - | - | - | - | - | - | - | . | |}}
{{Tree chart| | | | | KR | | | | | | | | | | | | | | | | DR | KR = খণ্ডে রাও | DR =দামোদর রাও | border=0}}
{{Tree chart| | | | | |! | | | | | | | | | |, | - | - | - | - | - | - | - | ^ | - | - | - | - | - | . |}}
{{Tree chart| | | | | RR | | | | | | | | HP | | | | | | | | || | | SS | | RR = রামচন্দ্র রাও | HP = হরি পন্ত | SS = সদাশিব | border=0}}
{{Tree chart| | | | | |! | | | | | | | |, | - | ^ | - | - | - | - | - | - | v | - | - | - | - | - | - | . |}}
{{Tree chart| | | | | AR | | | | | | RR2 | | | | | | | SR | | | | | LR | | AR = আনন্দ রাও | RR2 = {{larger|রঘুনাথ রাও (২)}} </br> (ঝাঁশীর প্রথম সুভেদার) | SR = {{larger|শিব রাও ভাউ}}</br>(খৃঃ ১৭৯৬-১৮১৬) | LR= লক্ষ্মণ রাও | border=0}}
{{Tree chart| |, | - | - | - | ^ | - | - | . | | | | | | |, | - | - | - | - | - | - | + | - | - | - | - | - | . |}}
{{Tree chart| HV | | | | | SR | | | | | KR | | | | | RR3 | | | | GR | | HV = হরি ভাউ | SR = সখারাম | KR = কৃষ্ণ রাও | RR3 = {{larger|রঘুনাথ রাও (৩)}}</br>(খৃঃ ১৮৩৫-৩৮) | GR = {{larger|গঙ্গাধর রাও}}</br>মহারাণী লক্ষ্মী বাঈ</br>(খৃঃ ১৮৩৮-১৮৫৩) | border=0}}
{{Tree chart| |! | | | | | | |! | | | | | | |! | | | | | | | | | | | | |! |}}
{{Tree chart| KN | | | | | BRN | | | | | RR | | | | | | | | | | | DR | | KN = কাশীনাথ </br> (ইনি ১৮৫২ খৃঃ ঝাঁশীর তহশীলদার ছিলেন)। | BRN = বাসুদেব রাও নেওয়ালকর | RR = {{larger|রামচন্দ্র রাও}} </br> (খৃঃ ১৮১৬-১৮৩৫) | DR = {{larger|দামোদর রাও}} </br> (দত্তক) | border=0}}
{{Tree chart| | | | | | | | |! | | | | | | | | | | | | | | | | | | | |! |}}
{{Tree chart| | | | | | | | AR | | | | | | | | | | | | | | | | | | LR | | | AR = {{larger|আনন্দ রাও}} </br> ওরফে </br> {{larger|দামোদর রাও}} </br>
(মহারাজ গঙ্গাধর রাওয়ের দত্তক পুত্র)। | LR = লক্ষ্মণ রাও | border=0}}
{{Tree chart/end}}
==১৩==
{{block center/s}}
{| style="border-spacing: 2px; border: 1px solid black;"
|-
|
|-
|style="align:center;" colspan="3"|{{xx-larger|'''গ্রন্থকারের অন্যান্য পুস্তক'''}}
|-
|বাঙ্গালায় প্রবেশ
|style="width: 80px;" |...||॥৹
|-
|রাণী ভবানী||...||॥৶৹
|-
|আশী দিনে ভূ-প্রদক্ষিণ||...||১৷৹
|-
|বেলুনে পাঁচসপ্তাহ||...||১৲
|-
|পাতালে||...||১৷৹
|-
|বাঙ্গালীর বল||...||৪৲
|-
|পল্লী-সমাজ||...||১৶৹
|-
|
|}
{{block center/e}}
{{block center/s}}
{| style="border-spacing: 2px; border: 1px solid black;"
|-
|
|-
|style="align:center;" colspan="3"|{{x-larger|গ্রন্থকারের অন্যান্য গ্রন্থ}}
|-
|দূর্ব্বাদল
|style="width: 80px;" |...||...||॥৹
|-
|বিল্বদল||...||...||॥৹
|-
|
|}
{{block center/e}}
{{border|maxwidth=30em|bstyle=dashed|bthickness=5px|color=black|align=center|
{{কেন্দ্র|{{larger|BENGALI FAMILY LIBRARY.}}}}
{{কেন্দ্র|{{x-larger|গার্হস্থ্য বাঙ্গালা পুস্তক সঙ্গ্রহ।}}}}
{{Custom rule|w|160}}
{{কেন্দ্র|{{x-larger|ছোট কৈলাশ এবং বড় কৈলাশ।}}}}
{{Block center|{{কেন্দ্র|{{larger|শ্রীযুক্ত মধুসূদন মুখোপাধ্যায়}}
কর্ত্তৃক
ইংরাজী ভাষা হইতে
অনুবাদিত।}}}}
}}
==১৪==
{{hi|কোশল—যুক্তপ্রদেশে অযোধ্যার নিকটবর্তী ফয়জাবাদ গণ্ডা ও বরৈচ জেলায় অবস্থিত দেশ; উত্তর ও দক্ষিণ-কোশল এই দুই অংশে বিভক্ত। পরে দক্ষিণ বা মহা-কোশল মধ্যপ্রদেশে ছত্রিশগড় জেলায়।}}
{{hi|alcohol কোহল}}
{{hi|{{ditto|alcohol|—}} absolute নির্জল কোহল}}
==১৫==
{{Custom rule|sp|50|col|6|sp|5|c|6|sp|5|col|6|sp|50}}
{{border|maxwidth=300px|bthickness=3px|align=center|{{x-larger|'''নিউ এজ পাবলিশার্স লিমিটেড'''
}}}}
{{border|maxwidth=35em|bstyle=dashed|bthickness=3px|color=black|align=center|
{{larger|'''কৃতজ্ঞতা স্বীকার'''
শ্রীযুক্ত মণি মুখােপাধ্যায় * কৃষ্ণবাগান এ্যাথ্লেটিক্ ক্লাব
নান্ এণ্ড কোং লিঃ * দি গ্র্যামো রেডিও ষ্টোরস}}}}
==১৬==
{{di|কা}}লচক্রের শোচনীয় পরিবর্তনগুণে
==১৭==
{{playscript
| “Romeo.
| Farewell! I will omit no opportunity that may convey my greeting, love to thee.}}
{{playscript
| Juliet.
| Oh I thinkest thou, we shall ever meet again?}}
==১৮==
{{Block center|{{কেন্দ্র|{{xxxx-larger|'''উৎসর্গ'''}}
তুলসীপত্রটি ক্ষুদ্র হইয়াও যেরূপ দেবপূজায় উপহৃত
হয়, এই সামান্য বৈষ্ণব-আখ্যায়িকাটিও সেরূপ
প্রীতির অর্ধস্বরূপ স্যর আশুতোষ
মুখোপাধ্যায় মহাশয়ের
{{x-larger|করকমলে}}
নিবেদিত
হইল}}{{ডান|গ্রন্থকার।}}}}
==১৯==
{{ফাঁক}}যে সময়ে বালাজী বিশ্বনাথ ধনাজী যাদবের অধীনতায় কর্ম্মলাভ করেন, সেই সময়ে মহারাষ্ট্ৰীয়দিগের পুনঃ পুনঃ আক্রমণে{{float left|পদোন্নতি।|1|2}} নিতান্ত ব্যতিব্যস্ত হইয়া মোগলেরা সাম্ভাজীর পুত্র শাহুকে মুক্তিদান করিলেন। কেবল তাহাই নহে, মহারাষ্ট্রীয়দিগকে শান্ত করিবার জন্য তাঁহারা তাঁহাকে দক্ষিণাপথের সরদেশমুখী (সমগ্র রাজস্বের দশমাংশ) স্বত্বের সনন্দও প্রদান করেন।
{| width=500px {{ts|mc|vtt}}
|| পৃষ্ঠা || পঙ্ক্তি || অশুদ্ধ || শুদ্ধ
|-
|| উননব্বই || ৭ || মঘাইয়া || মগহিয়া
|-
|| {{ditto|উননব্বই|”}} || {{ditto|৭|”}} || খড়ি || খড়ী
|-
|| {{ditto|একশত|”}} {{ditto|উনিশ|”}} || ফুটনোট || মীরাবাইকা || মীরাবাইকী
|-
|এরপর পাদটীকায়
{{nopt}}
|}
পরের পাতার শীর্ষকে
{| width=500px {{ts|mc|vtt}}
{{nopt}}
|-
|| একশত সাতাত্তর || ৬ || বংশীমে || বংশীমেঁ
|-
|| {{ditto|একশত|”}} {{ditto|একশত|”}} || ২২ || বাচ্চা || বচ্চা
|-
|| {{ditto|একশত|”}} আঠাত্তর || ১৭ || নারগীস || নরগীস
|-
|| {{ditto|একশত|”}} ঊনআশী || ৫ || গুলসানের || গুলসনের
|}
ত্রিবিঘস্ত জাতির সহিত সারসেরা যুদ্ধ করে (হোমরও এইরূপ বর্ণনা করিয়াছেন), তিতির পক্ষীও যুদ্ধ করে, এগুলি রাজহংসের ন্যায় বৃহৎ।<ref>ক্টাসিয়সও (ভারতবিবরণ। ১১) বলেন, বামনজাতি ভারত-বর্ষবাসী। ভারতবাসীদিগের মতে এই বামনেরা কিরাত জাতি, তাহার সুস্পষ্ট প্রমাণ এই যে কিরাত বলিতেই বামন বুঝায়। প্রবাদ এই যে তাহারা গূধ্র ও গরুড়ের (ঈগলের) সহিত যুদ্ধ করে, এজন্য বিষ্ণুর বাহন গরুড়ের একটি নাম কিরাতাশী{{ref|১}}। কিরাতগণ মঙ্গোলীয় জাতি, এজন্য ভারতবর্ষীয়েরা ইহাদিগকে মঙ্গোলীয় জাতির ন্যায় বর্ণনা করিতে যাইয়া অঙ্গপ্রত্যঙ্গের কদর্যতা অত্যন্ত বাড়াইয়া তুলিয়াছে। ‘মুখ-বিহীন’ প্রভৃতি অভিধানের ইহাই মূল।— Schwanbeck.
</br>
{{note||১}}আদিপর্ব্বের ২৮ অধ্যায়ে গরুড়ের প্রতি বিনতার উক্তি—
{{Block center|<poem>সমুদ্রকুক্ষাবেকান্তে নিষাদালয়মুত্তমম্।
নিষাদানাং সহস্রাণি তান্ ভুক্ত্বাঽমৃতমানয়॥</poem>}}</ref> ইহারা সারসদিগের ডিম্ব সংগ্রহ করিয়া বিনষ্ট করে, কারণ সারসেরা ইহাদিগেরই দেশে ডিম্ব প্রসব করে; এজন্য আর কোথায়ও সারসের ডিম্ব ও শাবক দৃষ্ট হয় না। এদেশে প্রায়শ সারস আহত হয় ও দেহে নিবদ্ধ ধাতবাস্ত্রের সূক্ষ্মাগ্র লইয়া পলায়ন করে। কর্ণপ্রাবরণ (Enoctokoitai) বনমানুষ ও অন্যান্য রাক্ষসের বৃত্তান্তও এইরূপ।<ref>Enoctokoitai—ইহাদিগের কর্ণ এত বৃহৎ যে তাহাতে শয়ন করা যায়। মহাভারতোক্ত কর্ণপ্রাবরণ জাতি।</ref> বনমানুষগুলিকে
==২০==
{{Scrollpane|height=200px|
{{AuxTOC|
{{c|{{xx-larger|'''সূচীপত্র'''}}}}
{{Table| title=পরিচ্ছেদ| page=পৃষ্ঠা}}
{{c|{{larger|[[শরৎ-সাহিত্য-সংগ্রহ (দশম সম্ভার)/ষোড়শী|ষোড়শী]]}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (দশম সম্ভার)/ষোড়শী/প্রথম অঙ্ক/প্রথম দৃশ্য|প্রথম অঙ্ক — প্রথম দৃশ্য]]| page={{pli|4|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (দশম সম্ভার)/ষোড়শী/প্রথম অঙ্ক/দ্বিতীয় দৃশ্য|প্রথম অঙ্ক — দ্বিতীয় দৃশ্য]]| page={{pli|8|14}}}}
}}}}
{{c|{{larger|সূচীপত্র}}}}
{{block center|width=500px|
{{dtpl||দেনা-পাওনা|{{nowrap|১—২২০}}|dottext=...{{gap|5em}}...{{gap|5em}}}}
{{dtpl||পরিণীতা|{{nowrap|২২১—২৮০}}|dottext=...{{gap|5em}}...{{gap|5em}}}}
{{dtpl||দর্প-চূর্ণ|{{nowrap|২৮১—৩২০}}|dottext=...{{gap|5em}}...{{gap|5em}}}}
{{dtpl||বোঝা|{{nowrap|৩২১—৩৪২}}|dottext=...{{gap|5em}}...{{gap|5em}}}}
{{dtpl||বাল্য-স্মৃতি|{{nowrap|৩৪৩—৩৫৪}}|dottext=...{{gap|5em}}...{{gap|5em}}}}
{{dtpl||পরেশ|{{nowrap|৩৫৫—৩৬৮}}|dottext=...{{gap|5em}}...{{gap|5em}}}}
{{dtpl||হরিচরণ|{{nowrap|৩৬৯—৩৭৪}}|dottext=...{{gap|5em}}...{{gap|5em}}}}
{{dtpl||আগামী কাল (অপ্রকাশিত)|{{nowrap|৩৭৫—৪০০}}|dottext=...{{gap|5em}}...{{gap|5em}}}}
{{dtpl||গ্রন্থ-পরিচয়|{{nowrap|৪০১—৪০২}}|dottext=...{{gap|5em}}...{{gap|5em}}}}
}}
==২১==
English historian,{{Authority reference | title=Memoirs of celebrated women of all countries (IA memoirsofcelebra00abra).pdf | page=159 | ref=7.1 | display=1 | transclude={{#section:Page:Memoirs of celebrated women of all countries (IA memoirsofcelebra00abra).pdf/159|7.1}}}} “contains so much nature and even elegance,
1qkcew2a5yneaf6xp43chfepd0qj1fo
বিদ্যাসাগর
0
778346
1996888
1681338
2026-08-31T03:18:08Z
Bodhisattwa
2549
1996888
wikitext
text/x-wiki
<pages index="বিদ্যাসাগর (বিহারীলাল সরকার).pdf" from=1 to=4 header=প্রচ্ছদ/>
{{ppb}}
<pages index="বিদ্যাসাগর (বিহারীলাল সরকার).pdf" from=5 to=6/>
{{ppb}}
<pages index="বিদ্যাসাগর (বিহারীলাল সরকার).pdf" from=7 to=7/>
{{ppb}}
<pages index="বিদ্যাসাগর (বিহারীলাল সরকার).pdf" from=8 to=9/>
{{ppb}}
<pages index="বিদ্যাসাগর (বিহারীলাল সরকার).pdf" from=10 to=11/>
{{ppb}}
<pages index="বিদ্যাসাগর (বিহারীলাল সরকার).pdf" from=12 to=15/>
{{ppb}}
<pages index="বিদ্যাসাগর (বিহারীলাল সরকার).pdf" from=16 to=17/>
{{ppb}}
<pages index="বিদ্যাসাগর (বিহারীলাল সরকার).pdf" from=18 to=25/>
{{PD-old}}
dtgl9yx1mstk09ts2qb33bc02ydsk62
পাতা:প্রাকৃতিকী.pdf/১২
104
833357
1996952
1948249
2026-08-31T08:45:31Z
Bodhisattwa
2549
1996952
proofread-page
text/x-wiki
<noinclude><pagequality level="4" user="Bodhisattwa" />{{dhr|3em}}</noinclude>{{C|{{xx-larger|সূচীপত্র}}}}
{{block center/s|width=450px}}
{{dotted TOC page listing|entrytext={{gap|4em}}{{smaller|বিষয়}}|pagetext={{smaller|পৃষ্ঠা}}|dottext=}}
{{dotted TOC page listing|chaptertext=১।|entrytext=[[প্রাকৃতিকী (১৯১৪)/বৈজ্ঞানিকের স্বপ্ন|বৈজ্ঞানিকের স্বপ্ন]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/১৬|১]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=২।|entrytext=[[প্রাকৃতিকী (১৯১৪)/পরশ-পাথর|পরশ-পাথর]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/২৪|৯]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=৩।|entrytext=[[প্রাকৃতিকী (১৯১৪)/রসায়নীবিদ্যার উন্নতি|রসায়নীবিদ্যার উন্নতি]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/৩৬|১৭]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=৪।|entrytext=[[প্রাকৃতিকী (১৯১৪)/ধাতুর কয়েকটি গুণ|ধাতুর কয়েকটি গুণ]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/৪৯|২৮]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=৫।|entrytext=[[প্রাকৃতিকী (১৯১৪)/বর্ণচ্ছত্র|বর্ণচ্ছত্র]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/৫৯|৩৮]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=৬।|entrytext=[[প্রাকৃতিকী (১৯১৪)/নূতন বিশ্লেষণ-প্রথা|নূতন বিশ্লেষণ-প্রথা]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/৬৭|৪৬]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=৭।|entrytext=[[প্রাকৃতিকী (১৯১৪)/অদৃশ্য কিরণ|অদৃশ্য কিরণ]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/৭৭|৫৬]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=৮।|entrytext=[[প্রাকৃতিকী (১৯১৪)/ডপ্লার সাহেবের সিদ্ধান্ত|ডপ্লার সাহেবের সিদ্ধান্ত]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/৮৩|৬২]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=৯।|entrytext=[[প্রাকৃতিকী (১৯১৪)/ভূমি-কম্প|ভূমি-কম্প]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/৯৩|৭২]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=১০।|entrytext=[[প্রাকৃতিকী (১৯১৪)/বিম্ব|বিম্ব]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/৯৯|৭৮]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=১১।|entrytext=[[প্রাকৃতিকী (১৯১৪)/লর্ড কেলভিন্|লর্ড কেলভিন্]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/১০৬|৮৩]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=১২।|entrytext=[[প্রাকৃতিকী (১৯১৪)/মনুষ্যসৃষ্ট|মনুষ্যসৃষ্ট]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/১১৫|৯২]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=১৩।|entrytext=[[প্রাকৃতিকী (১৯১৪)/জীবনটা কি?|জীবনটা কি?]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/১৩২|১০৯]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=১৪।|entrytext=[[প্রাকৃতিকী (১৯১৪)/প্রাণিদেহের উত্তাপ|প্রাণিদেহের উত্তাপ]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/১৪২|১১৯]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=১৫।|entrytext=[[প্রাকৃতিকী (১৯১৪)/আলোক ও বর্ণজ্ঞান|আলোক ও বর্ণজ্ঞান]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/১৫৪|১৩১]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=১৬।|entrytext=[[প্রাকৃতিকী (১৯১৪)/ঘ্রাণতত্ত্ব|ঘ্রাণতত্ত্ব]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/১৬২|১৩৭]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=১৭।|entrytext=[[প্রাকৃতিকী (১৯১৪)/প্রাণী ও উদ্ভিদের বিষ|প্রাণী ও উদ্ভিদের বিষ]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/১৬৮|১৪৩]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=১৮।|entrytext=[[প্রাকৃতিকী (১৯১৪)/অমৃত ও গরল|অমৃত ও গরল]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/১৭৮|১৫৩]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=১৯।|entrytext=[[প্রাকৃতিকী (১৯১৪)/প্রকৃতির বর্ণ-বৈচিত্র্য|প্রকৃতির বর্ণ-বৈচিত্র্য]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/১৮৮|১৬৩]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=২০।|entrytext=[[প্রাকৃতিকী (১৯১৪)/বৃক্ষের চক্ষু|বৃক্ষের চক্ষু]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/১৯৭|১৭২]]|dottext={{***|3|4em|char=···}}}}<noinclude>{{block center/e}}</noinclude>
0o2jrbevoiiyw7lsqqgvajz2kg6t3qh
পাতা:প্রাকৃতিকী.pdf/১৩
104
833364
1996953
1966596
2026-08-31T08:46:23Z
Bodhisattwa
2549
1996953
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Salil Kumar Mukherjee" />{{center|৷৷৵৹}}
{{block center/s|width=450px}}
{{dotted TOC page listing|entrytext={{gap|4em}}{{smaller|বিষয়}}|pagetext={{smaller|পৃষ্ঠা}}|dottext= }}</noinclude>{{dotted TOC page listing|chaptertext=২১।|entrytext=[[প্রাকৃতিকী (১৯১৪)/মৃত্যুর নবরূপ|মৃত্যুর নবরূপ]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/২০১|১৭৬]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=২২।|entrytext=[[প্রাকৃতিকী (১৯১৪)/একটি নূতন আবিষ্কার|একটি নূতন আবিষ্কার]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/২০৬|১৮১]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=২৩।|entrytext=[[প্রাকৃতিকী (১৯১৪)/কেরোসিন তৈল|কেরোসিন তৈল]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/২১৫|১৯০]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=২৪।|entrytext=[[প্রাকৃতিকী (১৯১৪)/দধি|দধি]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/২২৬|১৯৭]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=২৫।|entrytext=[[প্রাকৃতিকী (১৯১৪)/চা-পান|চা-পান]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/২৩৫|২০৪]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=২৬।|entrytext=[[প্রাকৃতিকী (১৯১৪)/বাবিলোনীয় জ্যোতিষিগণ|বাবিলোনীয় জ্যোতিষিগণ]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/২৪৩|২১২]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=২৭।|entrytext=[[প্রাকৃতিকী (১৯১৪)/পৃথিবীর শৈশব|পৃথিবীর শৈশব]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/২৫৫|২২৪]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=২৮।|entrytext=[[প্রাকৃতিকী (১৯১৪)/মঙ্গল গ্রহ|মঙ্গল গ্রহ]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/২৬৭|২৩৬]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=২৯।|entrytext=[[প্রাকৃতিকী (১৯১৪)/নূতন নীহারিকাবাদ|নূতন নীহারিকাবাদ]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/২৭৭|২৪৪]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=৩০।|entrytext=[[প্রাকৃতিকী (১৯১৪)/গ্রহদিগের কক্ষা|গ্রহদিগের কক্ষা]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/২৯৪|২৫৩]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=৩১।|entrytext=[[প্রাকৃতিকী (১৯১৪)/বিজ্ঞানে সূক্ষ্মগণনা|বিজ্ঞানে সূক্ষ্মগণনা]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/৩০৬|২৬৩]]|dottext={{***|3|4em|char=···}}}}
{{dotted TOC page listing|chaptertext=৩২।|entrytext=[[প্রাকৃতিকী (১৯১৪)/শুক্র-ভ্রমণ|শুক্র ভ্রমণ]]|pagetext=[[পাতা:প্রাকৃতিকী.pdf/৩১৮|২৭৩]]|dottext={{***|3|4em|char=···}}}}
{{block center/e}}
{{dhr|5em}}
{{rule|4em}}<noinclude></noinclude>
mlj8dqf2c7vkbahi6lcus1xo3vhudfy
প্রাকৃতিকী (১৯১৪)/চা-পান
0
833439
1996927
1772018
2026-08-31T08:43:16Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/চা-পান]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/চা-পান]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1772018
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=235 to=242 header=1/>
s0qsizgdx29pptuqro0fnsksaubk6w6
প্রাকৃতিকী (১৯১৪)/কেরোসিন তৈল
0
833476
1996924
1772462
2026-08-31T08:43:14Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/কেরোসিন তৈল]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/কেরোসিন তৈল]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1772462
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=215 to=225 header=1/>
gzszxxb30raeswbz1vsq1ry35p7x2ns
প্রাকৃতিকী (১৯১৪)/দধি
0
833923
1996930
1775932
2026-08-31T08:43:18Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/দধি]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/দধি]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1775932
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=226 to=234 header=1/>
k6qmksyjen7u4c2zeujzt2d2v7rs7fu
প্রাকৃতিকী (১৯১৪)/বৃক্ষের চক্ষু
0
833924
1996943
1775933
2026-08-31T08:43:26Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/বৃক্ষের চক্ষু]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/বৃক্ষের চক্ষু]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1775933
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=197 to=200 header=1/>
hvyx5k3g2flpol6htey369fly8vdlzd
প্রাকৃতিকী (১৯১৪)/মৃত্যুর নবরূপ
0
833951
1996948
1775990
2026-08-31T08:43:30Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/মৃত্যুর নবরূপ]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/মৃত্যুর নবরূপ]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1775990
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=201 to=205 header=1/>
c3z64oslx0ldzierzle5bedrr03nqdf
প্রাকৃতিকী (১৯১৪)/বৈজ্ঞানিকের স্বপ্ন
0
834068
1996944
1776259
2026-08-31T08:43:27Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/বৈজ্ঞানিকের স্বপ্ন]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/বৈজ্ঞানিকের স্বপ্ন]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1776259
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=16 to=23 header=1/>
jzvn5jehkm4he9rgxnuasustpubcf9x
প্রাকৃতিকী (১৯১৪)/পরশ-পাথর
0
835047
1996934
1779283
2026-08-31T08:43:21Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/পরশ-পাথর]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/পরশ-পাথর]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1779283
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=24 to=35 header=1/>
20kyp6m2gnhihho776pj9sx2q105rkp
প্রাকৃতিকী (১৯১৪)/রসায়নীবিদ্যার উন্নতি
0
836099
1996949
1781508
2026-08-31T08:43:30Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/রসায়নীবিদ্যার উন্নতি]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/রসায়নীবিদ্যার উন্নতি]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1781508
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=36 to=48 header=1/>
rywgdzaaae7nxwgkv14699zvyus6r01
প্রাকৃতিকী (১৯১৪)/ধাতুর কয়েকটি গুণ
0
836129
1996931
1782289
2026-08-31T08:43:19Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/ধাতুর কয়েকটি গুণ]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/ধাতুর কয়েকটি গুণ]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1782289
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=49 to=58 header=1/>
tp01mezpm25ipvb566tec6g911mi4p2
প্রাকৃতিকী (১৯১৪)/বর্ণচ্ছত্র
0
836130
1996939
1782291
2026-08-31T08:43:24Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/বর্ণচ্ছত্র]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/বর্ণচ্ছত্র]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1782291
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=59 to=66 header=1/>
4vqg2b9w7nmgbgxd2qrhqjns9vj6suk
প্রাকৃতিকী (১৯১৪)/নূতন বিশ্লেষণ-প্রথা
0
836131
1996933
1782294
2026-08-31T08:43:20Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/নূতন বিশ্লেষণ-প্রথা]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/নূতন বিশ্লেষণ-প্রথা]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1782294
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=67 to=76 header=1/>
0h4tzi3ufecuk1j9b2nx4lofo79a1sn
প্রাকৃতিকী (১৯১৪)/অদৃশ্য কিরণ
0
836134
1996920
1782390
2026-08-31T08:43:11Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/অদৃশ্য কিরণ]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/অদৃশ্য কিরণ]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1782390
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=77 to=82 header=1/>
sx2kndmdze6vcjyk9d23bikuk9diowe
প্রাকৃতিকী (১৯১৪)/ডপ্লার সাহেবের সিদ্ধান্ত
0
836135
1996929
1782391
2026-08-31T08:43:17Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/ডপ্লার সাহেবের সিদ্ধান্ত]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/ডপ্লার সাহেবের সিদ্ধান্ত]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1782391
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=83 to=92 header=1/>
t8hhftdq3g1eu58ug6l2ardwbs6ybdj
প্রাকৃতিকী (১৯১৪)/বিম্ব
0
836176
1996942
1784096
2026-08-31T08:43:26Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/বিম্ব]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/বিম্ব]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1784096
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=99 to=104 header=1/>
gfuqp9uoontxce3quqgym5ytkin23uh
প্রাকৃতিকী (১৯১৪)/লর্ড কেলভিন্
0
836177
1996950
1784097
2026-08-31T08:43:31Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/লর্ড কেলভিন্]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/লর্ড কেলভিন্]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1784097
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=105 to=114 header=1/>
7vhfbvcloq9ojshcgen1psm85ijjadx
প্রাকৃতিকী (১৯১৪)/ভূমি-কম্প
0
836193
1996945
1784160
2026-08-31T08:43:27Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/ভূমি-কম্প]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/ভূমি-কম্প]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1784160
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=93 to=98 header=1/>
axucstwzqn5co81a4r5vzzifdoyob91
প্রাকৃতিকী (১৯১৪)/জীবনটা কি?
0
836194
1996928
1784162
2026-08-31T08:43:17Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/জীবনটা কি?]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/জীবনটা কি?]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1784162
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=132 to=141 header=1/>
amfahennmfp0gvgta637cmo68o6m7sz
প্রাকৃতিকী (১৯১৪)/প্রাণিদেহের উত্তাপ
0
836206
1996937
1784206
2026-08-31T08:43:23Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/প্রাণিদেহের উত্তাপ]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/প্রাণিদেহের উত্তাপ]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1784206
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=142 to=153 header=1/>
n588jb8jejcjje6mck3ku7onvkre1iu
প্রাকৃতিকী (১৯১৪)/আলোক ও বর্ণজ্ঞান
0
836238
1996922
1788814
2026-08-31T08:43:12Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/আলোক ও বর্ণজ্ঞান]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/আলোক ও বর্ণজ্ঞান]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1788814
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=154 to=161 header=1/>
7aum9parv991t0q3e60kwizu28iz54a
প্রাকৃতিকী (১৯১৪)/ঘ্রাণতত্ত্ব
0
836239
1996926
1788815
2026-08-31T08:43:15Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/ঘ্রাণতত্ত্ব]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/ঘ্রাণতত্ত্ব]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1788815
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=162 to=167 header=1/>
ljoo7arlvmrvykyi2bk75h3oond496e
প্রাকৃতিকী (১৯১৪)/প্রাণী ও উদ্ভিদের বিষ
0
836240
1996938
1788817
2026-08-31T08:43:23Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/প্রাণী ও উদ্ভিদের বিষ]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/প্রাণী ও উদ্ভিদের বিষ]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1788817
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=168 to=177 header=1/>
92kkkpmzvdy6e6e1ghrdqj5rh2d0ybf
প্রাকৃতিকী (১৯১৪)/একটি নূতন আবিষ্কার
0
836241
1996923
1788818
2026-08-31T08:43:13Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/একটি নূতন আবিষ্কার]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/একটি নূতন আবিষ্কার]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1788818
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=206 to=214 header=1/>
6ll0fxkbpfqyshgocjukiinyf26earo
প্রাকৃতিকী (১৯১৪)/অমৃত ও গরল
0
836429
1996921
1790294
2026-08-31T08:43:12Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/অমৃত ও গরল]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/অমৃত ও গরল]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1790294
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=178 to=187 header=1/>
5kc0u3s6d7kjdnnk72ex3u0urcixdy8
প্রাকৃতিকী (১৯১৪)/প্রকৃতির বর্ণ-বৈচিত্র্য
0
836430
1996936
1790295
2026-08-31T08:43:22Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/প্রকৃতির বর্ণ-বৈচিত্র্য]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/প্রকৃতির বর্ণ-বৈচিত্র্য]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1790295
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=188 to=196 header=1/>
alh5r5yu8fah1rncpsyw8tdwz9nlg7m
প্রাকৃতিকী (১৯১৪)/বাবিলোনীয় জ্যোতিষিগণ
0
836495
1996940
1790389
2026-08-31T08:43:24Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/বাবিলোনীয় জ্যোতিষিগণ]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/বাবিলোনীয় জ্যোতিষিগণ]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1790389
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=243 to=254 header=1/>
mc6vew5io55ivpz3710nhduzbzco8fa
প্রাকৃতিকী (১৯১৪)/পৃথিবীর শৈশব
0
836496
1996935
1790390
2026-08-31T08:43:21Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/পৃথিবীর শৈশব]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/পৃথিবীর শৈশব]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1790390
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=255 to=266 header=1/>
cy5zwmy8tjkcnrfqz52x40brpbc4vv1
প্রাকৃতিকী (১৯১৪)/মঙ্গল গ্রহ
0
836497
1996946
1790391
2026-08-31T08:43:28Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/মঙ্গল গ্রহ]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/মঙ্গল গ্রহ]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1790391
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=267 to=276 header=1/>
f08sw2epz5dku8nrklq2mnoabuhb3ve
প্রাকৃতিকী (১৯১৪)/নূতন নীহারিকাবাদ
0
836498
1996932
1790392
2026-08-31T08:43:19Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/নূতন নীহারিকাবাদ]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/নূতন নীহারিকাবাদ]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1790392
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=277 to=293 header=1/>
fadmwkifsmlpnvsjmb7ktb8cd8bt719
প্রাকৃতিকী (১৯১৪)/গ্রহদিগের কক্ষা
0
836499
1996925
1790393
2026-08-31T08:43:15Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/গ্রহদিগের কক্ষা]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/গ্রহদিগের কক্ষা]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1790393
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=294 to=305 header=1/>
ejfxd47uoks5kmrwv6owygy5lvrv453
প্রাকৃতিকী (১৯১৪)/বিজ্ঞানে সূক্ষ্মগণনা
0
836500
1996941
1790395
2026-08-31T08:43:25Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/বিজ্ঞানে সূক্ষ্মগণনা]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/বিজ্ঞানে সূক্ষ্মগণনা]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1790395
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=306 to=317 header=1/>
eqdb07pycj0859ih11g6bgnwhrjmpcm
প্রাকৃতিকী (১৯১৪)
0
836549
1996918
1955257
2026-08-31T08:43:10Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1955257
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=1 to=5 header=প্রচ্ছদ/>
{{page break|label=}}
<pages index="প্রাকৃতিকী.pdf" from=6 to=6/>
{{page break|label=}}
<pages index="প্রাকৃতিকী.pdf" from=7 to=7/>
{{page break|label=}}
<pages index="প্রাকৃতিকী.pdf" from=8 to=9/>
{{page break|label=}}
<pages index="প্রাকৃতিকী.pdf" from=10 to=11/>
{{page break|label=}}
<pages index="প্রাকৃতিকী.pdf" from=12 to=13/>
{{page break|label=}}
<pages index="প্রাকৃতিকী.pdf" from=14 to=15/>
{{page break|label=}}
{{PD-India}}
3mbm4qtrxel1gcrk5b5n3zxwahlpzol
আলাপ:প্রাকৃতিকী (১৯১৪)
1
836551
1996919
1790666
2026-08-31T08:43:11Z
Bodhisattwa
2549
Bodhisattwa [[আলাপ:প্রাকৃতিকী]] পাতাটিকে [[আলাপ:প্রাকৃতিকী (১৯১৪)]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1790666
wikitext
text/x-wiki
{{বার্ষিক পাঠকসংখ্যা}}
5xvah9jgjbjn85szdf4sae857va760a
প্রাকৃতিকী (১৯১৪)/মনুষ্যসৃষ্ট
0
852351
1996947
1855435
2026-08-31T08:43:29Z
Bodhisattwa
2549
Bodhisattwa [[প্রাকৃতিকী/মনুষ্যসৃষ্ট]] পাতাটিকে [[প্রাকৃতিকী (১৯১৪)/মনুষ্যসৃষ্ট]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1855435
wikitext
text/x-wiki
<pages index="প্রাকৃতিকী.pdf" from=115 to=131 header=1/>
gi6jqmjkdw4kpl7u4fbr828lobj0xyt
নির্ঘণ্ট:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf
102
855643
1996833
1996365
2026-08-30T14:52:40Z
Nettime Sujata
5470
1996833
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q133513929
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=7
|Progress=X
|Pages=<pagelist 1="মলাট" 2to4="—" 5="শিরোনাম" 6="—" 7="প্রচ্ছদ" 8="প্রকাশক" 9="চিত্র" 10="—" 11="নিবেদন" 12="—" 13="সূচীপত্র" 14="—" 15="1" 415to416="গ্রন্থ-পরিচয়" 417to420="—" />
|Volumes=
|Remarks={{Scrollpane|height=1000px|
{{AuxTOC|
{{c|{{xx-larger|'''সূচীপত্র'''}}}}
{{Table| title=পরিচ্ছেদ| page=পৃষ্ঠা}}
{{c|{{larger|[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা|দেনা-পাওনা]]}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/১|১]]| page={{pli|3|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/২|২]]| page={{pli|12|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/৩|৩]]| page={{pli|17|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/৪|৪]]| page={{pli|23|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/৫|৫]]| page={{pli|28|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/৬|৬]]| page={{pli|35|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/৭|৭]]| page={{pli|41|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/৮|৮]]| page={{pli|51|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/৯|৯]]| page={{pli|62|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/১০|১০]]| page={{pli|73|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/১১|১১]]| page={{pli|78|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/১২|১২]]| page={{pli|88|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/১৩|১৩]]| page={{pli|98|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/১৪|১৪]]| page={{pli|108|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/১৫|১৫]]| page={{pli|114|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/১৬|১৬]]| page={{pli|118|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/১৭|১৭]]| page={{pli|123|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/১৮|১৮]]| page={{pli|131|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/১৯|১৯]]| page={{pli|139|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/২০|২০]]| page={{pli|146|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/২১|২১]]| page={{pli|154|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/২২|২২]]| page={{pli|163|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/২৩|২৩]]| page={{pli|173|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/২৪|২৪]]| page={{pli|182|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/২৫|২৫]]| page={{pli|193|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/২৬|২৬]]| page={{pli|201|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/২৭|২৭]]| page={{pli|208|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দেনা-পাওনা/২৮|২৮]]| page={{pli|217|14}}}}
{{c|{{larger|[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা|পরিণীতা]]}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা/প্রথম পরিচ্ছেদ|প্রথম পরিচ্ছেদ]]| page={{pli|223|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা/দ্বিতীয় পরিচ্ছেদ|দ্বিতীয় পরিচ্ছেদ]]| page={{pli|227|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা/তৃতীয় পরিচ্ছেদ|তৃতীয় পরিচ্ছেদ]]| page={{pli|233|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা/চতুর্থ পরিচ্ছেদ|চতুর্থ পরিচ্ছেদ]]| page={{pli|237|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা/পঞ্চম পরিচ্ছেদ|পঞ্চম পরিচ্ছেদ]]| page={{pli|243|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা/ষষ্ঠ পরিচ্ছেদ|ষষ্ঠ পরিচ্ছেদ]]| page={{pli|248|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা/সপ্তম পরিচ্ছেদ|সপ্তম পরিচ্ছেদ]]| page={{pli|253|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা/অষ্টম পরিচ্ছেদ|অষ্টম পরিচ্ছেদ]]| page={{pli|259|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা/নবম পরিচ্ছেদ|নবম পরিচ্ছেদ]]| page={{pli|264|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা/দশম পরিচ্ছেদ|দশম পরিচ্ছেদ]]| page={{pli|267|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা/একাদশ পরিচ্ছেদ|একাদশ পরিচ্ছেদ]]| page={{pli|273|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/পরিণীতা/দ্বাদশ পরিচ্ছেদ|দ্বাদশ পরিচ্ছেদ]]| page={{pli|276|14}}}}
{{c|{{larger|[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দর্প-চূর্ণ|দর্প-চূর্ণ]]}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দর্প-চূর্ণ/১|১]]| page={{pli|283|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দর্প-চূর্ণ/২|২]]| page={{pli|288|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দর্প-চূর্ণ/৩|৩]]| page={{pli|292|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দর্প-চূর্ণ/৪|৪]]| page={{pli|297|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দর্প-চূর্ণ/৫|৫]]| page={{pli|302|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দর্প-চূর্ণ/৬|৬]]| page={{pli|306|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দর্প-চূর্ণ/৭|৭]]| page={{pli|310|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দর্প-চূর্ণ/৮|৮]]| page={{pli|314|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/দর্প-চূর্ণ/৯|৯]]| page={{pli|317|14}}}}
{{c|{{larger|[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা|বোঝা]]}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/প্রথম পরিচ্ছেদ|প্রথম পরিচ্ছেদ]]| page={{pli|323|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/দ্বিতীয় পরিচ্ছেদ|দ্বিতীয় পরিচ্ছেদ]]| page={{pli|324|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/তৃতীয় পরিচ্ছেদ|তৃতীয় পরিচ্ছেদ]]| page={{pli|327|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/চতুর্থ পরিচ্ছেদ|চতুর্থ পরিচ্ছেদ]]| page={{pli|329|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/পঞ্চম পরিচ্ছেদ|পঞ্চম পরিচ্ছেদ]]| page={{pli|331|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/ষষ্ঠ পরিচ্ছেদ|ষষ্ঠ পরিচ্ছেদ]]| page={{pli|333|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/সপ্তম পরিচ্ছেদ|সপ্তম পরিচ্ছেদ]]| page={{pli|336|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/অষ্টম পরিচ্ছেদ|অষ্টম পরিচ্ছেদ]]| page={{pli|338|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/নবম পরিচ্ছেদ|নবম পরিচ্ছেদ]]| page={{pli|341|14}}}}
{{c|{{larger|[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বাল্য-স্মৃতি|বাল্য-স্মৃতি]]}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বাল্য-স্মৃতি/১|১]]| page={{pli|345|14}}}}
}}}}
|Notes={{RLFRR}}
|Header={{কেন্দ্র|শরৎ-সাহিত্য-সংগ্রহ}}
|Footer={{c|{{{pagenum}}}}}
}}
bpwepsvkdi0z0eabp133i2ied4vrj23
রচনা:পাঁচালী
110
867321
1996900
1911284
2026-08-31T04:00:31Z
Bodhisattwa
2549
Bodhisattwa [[রচনা:দাশরথি রায়ের পাঁচালী]] পাতাটিকে [[রচনা:পাঁচালী]] শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন
1911284
wikitext
text/x-wiki
{{রচনা শীর্ষক}}
;সংস্করণ
{{Talikak list|sparql=
SELECT ?item WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "bn". }
?item wdt:P31 wd:Q3331189;
wdt:P629 wd:{{#invoke:Wikibase|id}};
wdt:P407 wd:Q9610.
{?item wdt:P1957 [].} UNION {?item wdt:P1433 ?item2. ?item2 wdt:P1957 [].}
optional { ?item rdfs:label ?label_ . filter(lang(?label_)="bn") bind(concat(":d:",strafter(str(?item),str(wd:)),"{","{!}","}",?label_) as ?label1) }
optional
{
[] schema:about ?item; schema:isPartOf <https://bn.wikisource.org/>; schema:name ?label__ .
?item rdfs:label ?label_ . filter(lang(?label_)="bn") bind(concat(?label__,"{","{!}","}",?label_) as ?label2)
}
bind(coalesce(?label2,?label1) as ?label)
}
|columns=item,label,P577,P655,P98,P1433,P1957,P123
|row_template=রচনা সংস্করণ সারি
|skip_table=1
|freq=30
|sort=P577
}}
{{রচনা সংস্করণ সারি|item = [[:d:Q116232278|Q116232278]]|label = ''[[d:Q116232278|দাশরথি রায়ের পাঁচালী (দ্বিতীয় খণ্ড)]]''|P577 = 1901|P98 = [[লেখক:হরিমোহন মুখোপাধ্যায়|হরিমোহন মুখোপাধ্যায়]]|P1957 = https://bn.wikisource.org/wiki/নির্ঘণ্ট:দাশরথি_রায়ের_পাঁচালী_দ্বিতীয়_খণ্ড.djvu}}
{{রচনা সংস্করণ সারি|item = [[:d:Q116232192|Q116232192]]|label = ''[[d:Q116232192|দাশরথি রায়ের পাঁচালী]]''|P577 = 1902|P98 = [[লেখক:হরিমোহন মুখোপাধ্যায়|হরিমোহন মুখোপাধ্যায়]]|P1957 = https://bn.wikisource.org/wiki/নির্ঘণ্ট:দাশরথি_রায়ের_পাঁচালী.djvu}}
{{Talikak list end}}
ga4p891n1wq1s5dwc28ni1nrwfk2yjg
নির্ঘণ্ট:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf
102
883928
1996775
1996770
2026-08-30T12:30:01Z
BabulB
2144
1996775
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q140996466
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=1
|Progress=X
|Pages=<pagelist 1="প্রচ্ছদ" 2="—" 3="প্রকাশন" 4="—" 5="1"/>
|Volumes=
|Remarks={{AuxTOC|
{{c|{{xx-larger|'''সূচীপত্র'''}}}}
{{Table|title=[[মোহনলাল/প্রথম পরিচ্ছেদ|প্রথম পরিচ্ছেদ]]|page={{pli|1|4}}}}
{{Table|title=[[মোহনলাল/দ্বিতীয় পরিচ্ছেদ|দ্বিতীয় পরিচ্ছেদ]]|page={{pli|25|4}}}}
{{Table|title=[[মোহনলাল/তৃতীয় পরিচ্ছেদ|তৃতীয় পরিচ্ছেদ]]|page={{pli|42|4}}}}
{{Table|title=[[মোহনলাল/চতুর্থ পরিচ্ছেদ|চতুর্থ পরিচ্ছেদ]]|page={{pli|59|4}}}}
}}
|Notes={{RPL}}
|Header={{rvh|{{{pagenum}}}|মোহনলাল}}{{rule}}
|Footer=
}}
tsd1628jpcklf5balzasq64lgcqo45s
1996781
1996775
2026-08-30T12:35:01Z
BabulB
2144
1996781
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q140996466
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=1
|Progress=X
|Pages=<pagelist 1="প্রচ্ছদ" 2="—" 3="প্রকাশন" 4="—" 5="5"/>
|Volumes=
|Remarks={{AuxTOC|
{{c|{{xx-larger|'''সূচীপত্র'''}}}}
{{Table|title=[[মোহনলাল/প্রথম পরিচ্ছেদ|প্রথম পরিচ্ছেদ]]|page={{pli|1|4}}}}
{{Table|title=[[মোহনলাল/দ্বিতীয় পরিচ্ছেদ|দ্বিতীয় পরিচ্ছেদ]]|page={{pli|25|4}}}}
{{Table|title=[[মোহনলাল/তৃতীয় পরিচ্ছেদ|তৃতীয় পরিচ্ছেদ]]|page={{pli|42|4}}}}
{{Table|title=[[মোহনলাল/চতুর্থ পরিচ্ছেদ|চতুর্থ পরিচ্ছেদ]]|page={{pli|59|4}}}}
}}
|Notes={{RPL}}
|Header={{rvh|{{{pagenum}}}|মোহনলাল}}{{rule}}
|Footer=
}}
78gdb8mb2glja5x14hi954b9rsvcpgv
1996829
1996781
2026-08-30T14:49:48Z
Bodhisattwa
2549
1996829
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q140996466
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=1
|Progress=X
|Pages=<pagelist 1="প্রচ্ছদ" 2="—" 3="প্রকাশন" 4="—" 5="5"/>
|Volumes=
|Remarks={{AuxTOC|
{{c|{{xx-larger|'''সূচীপত্র'''}}}}
{{Table|title=[[মোহনলাল/প্রথম পরিচ্ছেদ|প্রথম পরিচ্ছেদ]]|page={{pli|5|0}}}}
{{Table|title=[[মোহনলাল/দ্বিতীয় পরিচ্ছেদ|দ্বিতীয় পরিচ্ছেদ]]|page={{pli|25|0}}}}
{{Table|title=[[মোহনলাল/তৃতীয় পরিচ্ছেদ|তৃতীয় পরিচ্ছেদ]]|page={{pli|42|0}}}}
{{Table|title=[[মোহনলাল/চতুর্থ পরিচ্ছেদ|চতুর্থ পরিচ্ছেদ]]|page={{pli|59|0}}}}
}}
|Notes={{RPL}}
|Header={{rvh|{{{pagenum}}}|মোহনলাল}}{{rule}}
|Footer=
}}
mjooq35fser5eo3jz0pnn03owpuplvm
পাতা:মানসাঙ্ক (প্রথম ভাগ) - গোপালচন্দ্র বন্দ্যোপাধ্যায় (১৮৭৩).pdf/৪
104
884653
1996901
1995313
2026-08-31T04:18:27Z
Bodhisattwa
2549
1996901
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Bodhisattwa" />{{c|৵৹}}</noinclude>বিদ্যালয়ে সংখ্যাঘটিত প্রথম উপদেশ দিবার সময়ে গণনক ব্যবহৃত হইয়া থাকে। সেই গণনক অবলম্বন করিয়া যেরূপে সংখ্যার উপদেশ দিতে হয় এই গ্রন্থে তাহা লিখিত হইয়াছে। যে যে বিষয় অপেক্ষাকৃত ক্ষুদ্রাকারের অক্ষরে মুদ্রিত হইয়াছে সে সকল কেবল শিক্ষক বা উপশিক্ষকের ব্যবহারযোগ্য। এই গ্রন্থে এক অবধি দশ পর্য্যন্ত সংখ্যা এবং যে যে যোগ বা বিয়োগ স্থলে তদূর্দ্ধ সংখ্যা নাই তাহাদিগেরই আলোচনা হইয়াছে। সকলের নিকট বিনয় বচনে প্রার্থনা করি যে, কেবল দশ পর্য্যন্ত সংখ্যা শিখিবার জন্য অধিক সময় ব্যয় ও এই সকল আড়ম্বর বৃথা বোধ করিয়া, যেন কোন মহাশয় এই গ্রন্থে উপেক্ষা না করেন। মূলপত্তন যত দৃঢ় হয় তদুপরি তত উচ্চতর ও স্থায়িতর অট্টালিকা নির্ম্মিত হইতে পারে। যদি এই ক্ষুদ্র গ্রন্থ দ্বারা শিশুদিগের গণিত শিক্ষার অথবা শিক্ষাদান কার্য্যের কোন অংশে কিছু উপকার হয় তাহা হইলে পরিশ্রম সফল জ্ঞান করিব।
{{dhr|2em}}
{| {{ts|wa|mc}}
| width=50% |{{কেন্দ্র|<poem>কলিকাতা
সন ১২৭১ সাল।
২০ শ্রাবণ।</poem>}}
| width=3% rowspan=2| {{brace2|4|r}}
| {{ts|ar}} |{{c|{{larger|শ্রীগোপালচন্দ্র বন্দ্যোপাধ্যায়।}}}}{{gap|1em}}
|}<noinclude></noinclude>
qewysltx7opcjo649cfwf6x2ktghmv7
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৩৮
104
885021
1996830
1996373
2026-08-30T14:50:08Z
Nettime Sujata
5470
1996830
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" />{{কেন্দ্র|শরৎ-সাহিত্য-সংগ্রহ}}</noinclude><section begin="A" />হরদেববাবুর সহিত কথা কহিত, এমন কি সত্যেন্দ্র উপস্থিত থাকিলেও সে শ্বশ্রুঠাকুরাণীর সহিত কথা বলিত, গৃহিণীর তাহাতে সুখ ভিন্ন অসুখ ছিল না।
{{ফাঁক}}কিছুদিন পরে কামাখ্যাবাবু সরলাকে একবার বাটী লইয়া গেলেন, তাহার দুই-এক মাস পরে সত্যেন্দ্র একদিন রাগ করিয়া বলিয়াছিল, বইগুলোতে ছাতা ধরেচে, দোয়াতের কালি শুকিয়ে গেছে, এমন একজন নেই যে, এগুলো দেখে!
{{ফাঁক}}কথাটা মা বুঝিলেন, হরদেববাবুরও কানে গেল; তিনি হাসিয়া বৌ আনিতে পাঠাইলেন; লিখিলেন, আমার বাটীতে বড় গোলযোগ উপস্থিত হইতেছে, মা ভিন্ন বোধ হয় থামিবে না। সুতরাং মাকে পাঠাইয়া দিবেন।
{{ফাঁক}}আবার সরলা আসিল। সত্যর ছোট-খাট কাজগুলি সে-ই করিত। বইগুলি ঝাড়িয়া মুছিয়া সাজাইয়া রাখা, কলেজের কাপড়-জামাগুলি ঠিক করিয়া রাখা, অর্থাৎ তাড়াতাড়িতে দুই হাতে দুই রকমের বোতাম, কিংবা আহার করিতে অত্যন্ত বিলম্ব হইয়া গিয়াছে, কলেজের এক ঘণ্টা যায় যায় সময়ে, এক পায় কার্পেটের অপর পায় বার্ণিস-করা জুতা সে না পরিয়া ফেলে, ফর্সা জামার উপর রজক-ভবনে শুভাগমনের জন্য প্রস্তুত চাদরের জুলুম না হয়, এইসব কাজগুলা সরলাই দেখিত, সরলা না থাকিলে এ-সব গণ্ডগোল তাহার প্রায়ই ঘটিত। এমন অন্যমনস্ক লোক কেহ কখনও দেখে নাই। এ-সকল কাজ সরলা ভিন্ন অপর কাহারও দ্বারা হইতও না বটে, আর হইলেও সত্যেন্দ্রর পছন্দ হইত না বলিয়াও বটে, কাজগুলি সরলাই করিত।
<section end="A" />
<section begin="B" />{{কেন্দ্র|{{larger|'''দ্বিতীয় পরিচ্ছেদ'''}}}}
{{কেন্দ্র|সুশীলার ছেলের অন্নপ্রাশন}}
{{ফাঁক}}সুশীলা সরলার বড়দিদি। তাহার ছেলের ভাত। সুতরাং কামাখ্যাবাবু দৌহিত্রের অন্নপ্রাশন-উপলক্ষে সরলাকে বাটী লইয়া যাইবার জন্য কলিকাতায় আসিলেন।
{{ফাঁক}}সরলার দিদি, সরলা ও সত্যেন্দ্রকে যাইবার জন্য বিশেষ অনুরোধ করিয়া পত্র লিখিয়াছে। বিশেষ, সরলা প্রায় তিন বৎসর যাবৎ দিলজানপুরে যায় নাই। সত্যেন্দ্রও যখন যাইতে সম্মত হইল, তখন কামাখ্যাবাবু পরমানন্দে জামাতা-কন্যা লইয়া দেশে আসিলেন।
{{nop}}<section end="B" /><noinclude>{{c|৩২৪}}</noinclude>
kezsuchhhjojcmpgad5xdtrsdrgkam9
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৬
104
885156
1996778
1996772
2026-08-30T12:31:10Z
BabulB
2144
1996778
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|২|মোহনলাল}}{{rule}}</noinclude>তাহা হইলে নিশ্চিতই বুঝিতে পারিবেন যে, ইহাতে আশ্চর্য্য হইবার কিছুই নাই। প্রথম, আমি নেহাৎ গরীব লোকের · ছেলে নই,—ঘরে অন্নের বিশেষ অভাব ছিল না। দ্বিতীয়, আমি মায়ের একমাত্র সন্তান,—আব্দারের সীমা ছিল না। তৃতীয়, নিতান্ত শিশু অবস্থায় আমি পিতৃহীন হই, শাসন করিবার কেহই ছিল না। সুতরাং এরূপ সুযোগের মধ্যে পড়িলে, কোন্ বালকই বা বার বৎসরের পূর্ব্বে স্কুলে ভৰ্ত্তি হয়? আমি মায়ের আদুরে গোপাল হইয়া হাসিয়া খেলিয়া দিন কাটাইতাম ৷ মাকে বেলা দুপুর পর্য্যন্ত ফাঁকি দিয়া, বাগানে বাগানে পাখীর ছানা খুঁজিয়া বেড়াইতাম; কখন<noinclude></noinclude>
4onpnsbb78ipsfn4y2oorzlt1vebbs2
1996779
1996778
2026-08-30T12:33:08Z
BabulB
2144
1996779
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৬|মোহনলাল}}{{rule}}</noinclude>তাহা হইলে নিশ্চিতই বুঝিতে পারিবেন যে, ইহাতে আশ্চর্য্য হইবার কিছুই নাই। প্রথম, আমি নেহাৎ গরীব লোকের · ছেলে নই,—ঘরে অন্নের বিশেষ অভাব ছিল না। দ্বিতীয়, আমি মায়ের একমাত্র সন্তান,—আব্দারের সীমা ছিল না। তৃতীয়, নিতান্ত শিশু অবস্থায় আমি পিতৃহীন হই, শাসন করিবার কেহই ছিল না। সুতরাং এরূপ সুযোগের মধ্যে পড়িলে, কোন্ বালকই বা বার বৎসরের পূর্ব্বে স্কুলে ভৰ্ত্তি হয়? আমি মায়ের আদুরে গোপাল হইয়া হাসিয়া খেলিয়া দিন কাটাইতাম ৷ মাকে বেলা দুপুর পর্য্যন্ত ফাঁকি দিয়া, বাগানে বাগানে পাখীর ছানা খুঁজিয়া বেড়াইতাম; কখন<noinclude></noinclude>
te4qmtjhhy0corxb81ldskdci087akv
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৭
104
885157
1996776
2026-08-30T12:30:27Z
BabulB
2144
/* মুদ্রণ সংশোধন করা হয়নি */ "প্রথম পরিচ্ছেদ সমবয়সীদের সঙ্গে জুটিয়া প্রতিবাসীর १ বাগানে পাকা কুল, বাতাবি লেবু, কাঁচা আম, কচি শশা প্রভৃতি চুরি করিতে বাইতাম ৷ কখন জেলের ছেলেদের সঙ্গে মিশিয়া, ঝড়-বৃষ্ট..." দিয়ে পাতা তৈরি
1996776
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|৩|মোহনলাল}}{{rule}}</noinclude>প্রথম পরিচ্ছেদ
সমবয়সীদের সঙ্গে জুটিয়া
প্রতিবাসীর
१
বাগানে পাকা কুল, বাতাবি লেবু, কাঁচা
আম, কচি শশা প্রভৃতি চুরি করিতে
বাইতাম ৷ কখন জেলের ছেলেদের
সঙ্গে মিশিয়া, ঝড়-বৃষ্টি মাথায় করিয়াও
গাঙ্গে নৌকা চড়িয়া বেড়াইতাম ; কখনও
বা গাঙ্গের চড়ায় গিয়া চড়িভাতি
করিতাম ৷ একদণ্ড আমাকে বাড়ীতে
কেহ স্থির হইয়া থাকিতে দেখে নাই ৷
দুপুরবেলা মা আমাকে 'হাসি খুসি' ও
প্লেট্-পেন্সিল দিয়া বসাইয়া দিতেন,
কিন্তু ‘আমি তাঁহার চক্ষে ধূলা দিয়া,
পাড়ার ছেলেদের সঙ্গে গিয়া মিশিতাম
এবং দাণ্ডা-গুলি ও কপাটি খেলায়
সারাদিন কাটাইয়া সন্ধ্যার সময় ঘরে
ফিরিতাম ৷<noinclude></noinclude>
che95rw23sfjvdk7hah641mubbvxmgi
1996777
1996776
2026-08-30T12:30:54Z
BabulB
2144
1996777
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|৩|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>
সমবয়সীদের সঙ্গে জুটিয়া
প্রতিবাসীর
१
বাগানে পাকা কুল, বাতাবি লেবু, কাঁচা
আম, কচি শশা প্রভৃতি চুরি করিতে
বাইতাম ৷ কখন জেলের ছেলেদের
সঙ্গে মিশিয়া, ঝড়-বৃষ্টি মাথায় করিয়াও
গাঙ্গে নৌকা চড়িয়া বেড়াইতাম ; কখনও
বা গাঙ্গের চড়ায় গিয়া চড়িভাতি
করিতাম ৷ একদণ্ড আমাকে বাড়ীতে
কেহ স্থির হইয়া থাকিতে দেখে নাই ৷
দুপুরবেলা মা আমাকে 'হাসি খুসি' ও
প্লেট্-পেন্সিল দিয়া বসাইয়া দিতেন,
কিন্তু ‘আমি তাঁহার চক্ষে ধূলা দিয়া,
পাড়ার ছেলেদের সঙ্গে গিয়া মিশিতাম
এবং দাণ্ডা-গুলি ও কপাটি খেলায়
সারাদিন কাটাইয়া সন্ধ্যার সময় ঘরে
ফিরিতাম ৷<noinclude></noinclude>
lajb4exnmwn8wpkkn2i4ckli6kq19eg
1996780
1996777
2026-08-30T12:33:30Z
BabulB
2144
1996780
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|৭|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>
সমবয়সীদের সঙ্গে জুটিয়া
প্রতিবাসীর
१
বাগানে পাকা কুল, বাতাবি লেবু, কাঁচা
আম, কচি শশা প্রভৃতি চুরি করিতে
বাইতাম ৷ কখন জেলের ছেলেদের
সঙ্গে মিশিয়া, ঝড়-বৃষ্টি মাথায় করিয়াও
গাঙ্গে নৌকা চড়িয়া বেড়াইতাম ; কখনও
বা গাঙ্গের চড়ায় গিয়া চড়িভাতি
করিতাম ৷ একদণ্ড আমাকে বাড়ীতে
কেহ স্থির হইয়া থাকিতে দেখে নাই ৷
দুপুরবেলা মা আমাকে 'হাসি খুসি' ও
প্লেট্-পেন্সিল দিয়া বসাইয়া দিতেন,
কিন্তু ‘আমি তাঁহার চক্ষে ধূলা দিয়া,
পাড়ার ছেলেদের সঙ্গে গিয়া মিশিতাম
এবং দাণ্ডা-গুলি ও কপাটি খেলায়
সারাদিন কাটাইয়া সন্ধ্যার সময় ঘরে
ফিরিতাম ৷<noinclude></noinclude>
h0yvcr63g9bvwi978ddj2wp06qc116b
1996782
1996780
2026-08-30T12:39:01Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996782
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৭|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>সমবয়সীদের সঙ্গে জুটিয়া প্রতিবাসীর বাগানে পাকা কুল, বাতাবি লেবু, কাঁচা আম, কচি শশা প্রভৃতি চুরি করিতে যাইতাম ৷ কখন জেলের ছেলেদের সঙ্গে মিশিয়া, ঝড়-বৃষ্টি মাথায় করিয়াও গাঙ্গে নৌকা চড়িয়া বেড়াইতাম; কখনও বা গাঙ্গের চড়ায় গিয়া চড়িভাতি করিতাম। একদণ্ড আমাকে বাড়ীতে কেহ স্থির হইয়া থাকিতে দেখে নাই ৷ দুপুরবেলা মা আমাকে 'হাসি খুসি' ও প্লেট্-পেন্সিল দিয়া বসাইয়া দিতেন, কিন্তু ‘আমি তাঁহার চক্ষে ধূলা দিয়া, পাড়ার ছেলেদের সঙ্গে গিয়া মিশিতাম এবং দাণ্ডা-গুলি ও কপাটি খেলায় সারাদিন কাটাইয়া সন্ধ্যার সময় ঘরে ফিরিতাম।<noinclude></noinclude>
savrws4q4we2ex1htxntuiyknf2ry6p
1996784
1996782
2026-08-30T12:39:59Z
BabulB
2144
1996784
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৭|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>সমবয়সীদের সঙ্গে জুটিয়া প্রতিবাসীর বাগানে পাকা কুল, বাতাবি লেবু, কাঁচা আম, কচি শশা প্রভৃতি চুরি করিতে যাইতাম ৷ কখন জেলের ছেলেদের সঙ্গে মিশিয়া, ঝড়-বৃষ্টি মাথায় করিয়াও গাঙ্গে নৌকা চড়িয়া বেড়াইতাম; কখনও বা গাঙ্গের চড়ায় গিয়া চড়িভাতি করিতাম। একদণ্ড আমাকে বাড়ীতে কেহ স্থির হইয়া থাকিতে দেখে নাই ৷ দুপুরবেলা মা আমাকে 'হাসি খুসি' ও প্লেট্-পেন্সিল দিয়া বসাইয়া দিতেন, কিন্তু ‘আমি তাঁহার চক্ষে ধূলা দিয়া, পাড়ার ছেলেদের সঙ্গে গিয়া মিশিতাম এবং দাণ্ডা-গুলি ও কপাটি খেলায় সারাদিন কাটাইয়া সন্ধ্যার সময় ঘরে ফিরিতাম।{{nop}}<noinclude></noinclude>
fpe4srfvne9zmxeyrs1c3lv22a7o6tv
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৮
104
885158
1996783
2026-08-30T12:39:40Z
BabulB
2144
/* মুদ্রণ সংশোধন করা হয়নি */ "{{ফাঁক}}আমি আরও কয়েক বৎসর হাসিয়া খেলিয়া কাটাইতে পারিতাম ; কিন্তু পাড়ার কয়েকটি দুষ্ট ছেলের সহিত আমার কিছু বেশী ঘনিষ্ঠতা হওয়াতে, মা বড়ই ভীত হইলেন ; এবং স্কুলে যাইতে আরম..." দিয়ে পাতা তৈরি
1996783
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|৮|মোহনলাল}}{{rule}}</noinclude>{{ফাঁক}}আমি আরও কয়েক বৎসর হাসিয়া
খেলিয়া কাটাইতে পারিতাম ; কিন্তু
পাড়ার কয়েকটি দুষ্ট ছেলের সহিত
আমার কিছু বেশী ঘনিষ্ঠতা হওয়াতে, মা
বড়ই ভীত হইলেন ; এবং স্কুলে যাইতে
আরম্ভ করিলে, তাহাদের সঙ্গে আমার
বেড়ান বন্ধ হইবে, এই ধারণায় তিনি
পরদিনই আমাকে স্কুলে ভর্তি করিয়া
দিলেন। কিন্তু মায়ের বুঝিবার নিতান্তই
ভুল হইয়াছিল । স্কুলে গিয়া অতি অল্প-
দিনের মধ্যেই আমি অনেকগুলি কুসঙ্গী
পাইলাম, এবং তাহাদের সঙ্গে মিশিয়া
স্কুল হইতে পলাইয়া, বাগানে বাগানে
ঘুরিয়া, পাখীর ছানা ও ফল-মূল চুরি
করিয়া বেড়াইতে লাগিলাম ৷
{{ফাঁক}}স্কুলেও আমার মন্দ স্বভাবের কথা<noinclude></noinclude>
lnwykihde3b4ij8s1zzn8kb1a2nwg5j
1996785
1996783
2026-08-30T12:42:26Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996785
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৮|মোহনলাল}}{{rule}}</noinclude>{{ফাঁক}}আমি আরও কয়েক বৎসর হাসিয়া খেলিয়া কাটাইতে পারিতাম; কিন্তু পাড়ার কয়েকটি দুষ্ট ছেলের সহিত আমার কিছু বেশী ঘনিষ্ঠতা হওয়াতে, মা বড়ই ভীত হইলেন; এবং স্কুলে যাইতে আরম্ভ করিলে, তাহাদের সঙ্গে আমার বেড়ান বন্ধ হইবে, এই ধারণায় তিনি পরদিনই আমাকে স্কুলে ভর্তি করিয়া দিলেন। কিন্তু মায়ের বুঝিবার নিতান্তই ভুল হইয়াছিল। স্কুলে গিয়া অতি অল্পদিনের মধ্যেই আমি অনেকগুলি কুসঙ্গী পাইলাম, এবং তাহাদের সঙ্গে মিশিয়া স্কুল হইতে পলাইয়া, বাগানে বাগানে ঘুরিয়া, পাখীর ছানা ও ফল-মূল চুরি করিয়া বেড়াইতে লাগিলাম।
{{ফাঁক}}স্কুলেও আমার মন্দ স্বভাবের কথা<noinclude></noinclude>
m8bujgcbm0u94ve7a56erjjxz3n6fqw
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৯
104
885159
1996786
2026-08-30T12:45:37Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996786
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৯|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>প্রকাশ হইয়া পড়িল; আমাদের ক্লাসে নেপাল ও মণিরাম নামে দুইটি ছেলে ছিল। নেপাল আমার সমবয়স্ক, মণিরামের বয়স নিতান্ত অল্প। এই দুই জনের সঙ্গে আমার একেবারেই বনিত না—প্রায় ঝগড়া-বিবাদ হইত। মণিরাম বয়সে ছোট বলিয়া অনেক সময়, বিনা দোষেও, আমি তাহাকে প্রহার করিতাম। কিন্তু মনে মনে খুব রাগ থাকিলেও, নেপালের উপর কোন অত্যাচার করি, এমন সাহস আমার ছিল না।
{{ফাঁক}}ক্লাসের প্রায় সকলেই আমাকে ও নেপালকে ভয় করিত। তাহার কারণ, নেপালের ভালবাসা ও আমার অত্যাচার। নেপাল সকলকে এত ভালবাসিত যে, তাহার সন্মুখে কোন অন্যায় কাজ<noinclude></noinclude>
7y7hrd38hp6r9pbl5odt0smm6irss51
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/১০
104
885160
1996787
2026-08-30T12:46:15Z
BabulB
2144
/* মুদ্রণ সংশোধন করা হয়নি */ "করিতে কাহারও সাহস হইত না ; আর আমার অত্যাচার-প্রবৃত্তি এমনই প্রবল ছিল যে, আমাকে ভয় না করিত, এমন ছেলে ক্লাসে কেহ ছিল না ৷ এমন কি, আমি কোন অত্যাচার করিলেও শিক্ষককে বলিয়া দিতে ক..." দিয়ে পাতা তৈরি
1996787
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|১০|মোহনলাল}}{{rule}}</noinclude>করিতে কাহারও সাহস হইত না ;
আর আমার অত্যাচার-প্রবৃত্তি এমনই
প্রবল ছিল যে, আমাকে ভয় না করিত,
এমন ছেলে ক্লাসে কেহ ছিল না ৷
এমন কি, আমি কোন অত্যাচার
করিলেও শিক্ষককে বলিয়া দিতে কেহ
সাহস করিত না !
{{ফাঁক}}অভ্যাস মত একদিন আমি মণিরামকে
ধরিয়া দু চারি ঘা দিতেছি, এমন সময়
নেপাল আসিয়া বলিল, “দেখ ভাই,
মণিরাম একে ছোট, তাতে আবার
ভারি রোগা। আর তুমি কত বড় !
মণিকে মারা কি
তোমার ভাল
দেখায় !”
{{ফাঁক}}“আচ্ছা, আচ্ছা, এ বিষয়ে তোমার
কোন কথা বলার দরকার নেই।<noinclude></noinclude>
jbpwcsrrlijfhvmrc3b8o1on8cqnst0
1996788
1996787
2026-08-30T12:48:08Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996788
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১০|মোহনলাল}}{{rule}}</noinclude>করিতে কাহারও সাহস হইত না; আর আমার অত্যাচার-প্রবৃত্তি এমনই প্রবল ছিল যে, আমাকে ভয় না করিত, এমন ছেলে ক্লাসে কেহ ছিল না। এমন কি, আমি কোন অত্যাচার করিলেও শিক্ষককে বলিয়া দিতে কেহ সাহস করিত না!
{{ফাঁক}}অভ্যাস মত একদিন আমি মণিরামকে ধরিয়া দু চারি ঘা দিতেছি, এমন সময় নেপাল আসিয়া বলিল, “দেখ ভাই, মণিরাম একে ছোট, তাতে আবার ভারি রোগা। আর তুমি কত বড়! মণিকে মারা কি তোমার ভাল দেখায়!”
{{ফাঁক}}“আচ্ছা, আচ্ছা, এ বিষয়ে তোমার কোন কথা বলার দরকার নেই।<noinclude></noinclude>
g9c03612rmnxzlfpyds2kcy4jfg1qzb
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/১১
104
885161
1996789
2026-08-30T12:50:52Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996789
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১১|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>জ্যেষ্ঠতাতের মত উপদেশ দিচ্ছ কেন? মণিকে মার্ছি—সে বুঝবে, মাঝখান থেকে তোমায় ফোড়ন দিতে ডাক্লে কে?”—এই বলিয়া রাগের চোটে আমি মণিরামের ঘাড় ধরিয়া ঠেলিয়া দিলাম। আমার অভদ্র ব্যবহারে বিরক্ত হইয়া, নেপাল সেখান হইতে চলিয়া গেল। কিন্তু আমার কথার কোন উত্তর না দিয়া, তাহাকে চলিয়া যাইতে দেখিয়া, ভাবিলাম, নেপাল নিশ্চিতই ভীরু। ভীরু না হইলে সে কখনই চুপ করিয়া চলিয়া যাইত না ৷
{{ফাঁক}}সেই দিন হইতে নেপালের উপর আমার রাগ দ্বিগুণ বাড়িয়া গেল। ক্লাসের অন্যান্য বালকের উপর আমি এত দিন যেরূপ প্রভুত্ব করিয়াছি, মিথ্যা ভয়ে<noinclude></noinclude>
jnl3tzfij11twtcknl0ie1zfem4nd1o
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/১২
104
885162
1996790
2026-08-30T12:53:15Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996790
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১২|মোহনলাল}}{{rule}}</noinclude>নেপালের উপর সেরূপ করিতে সাহস করি নাই বলিয়া, মনে মনে খুব কষ্ট হইতে লাগিল। ভাবিলাম, এবার সুবিধা পাইলেই নেপালকে উত্তম-মধ্যম যা কতক দিতে হইবে। তখন হইতে নেপাল যাহাতে চটে, আমি বাছিয়া বাছিয়া সেইরূপ কাজ করিতে লাগিলাম।
{{ফাঁক}}ঝগড়া বাধাইবার জন্য বড় বেশী দিন অপেক্ষা করিতে হইল না। আমাদের স্কুলে যাইবার পথে, এক কৃষকের বাগানে কয়েকটা লিচু গাছ ছিল। তখন জ্যৈষ্ঠ মাস। গাছগুলি লিচুতে ভরিয়া গিয়াছিল। একদিন স্কুলে আমরা কয়েকজনে পরামর্শ করিলাম যে, সেই বাগানের লিচু খাইতে হইবে। আমাদের মধ্যে<noinclude></noinclude>
jvv3q60je9v04z58op7t6xwoyjfswak
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/১৩
104
885163
1996791
2026-08-30T12:56:17Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996791
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১৩|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>মণিরাম বেশ গাছে উঠিতে পারিত। আমি তাহাকে ডাকিয়া বলিলাম, “দ্যাখ্ মণি, আজ লিচু পেড়ে খাবো, তুই গাছে উঠ্বি, কেমন?” মণিরাম ঘাড় নাড়িয়া বলিল, “আচ্ছা।”
{{ফাঁক}}স্কুলের ছুটি হইলে আমরা দল বাঁধিয়া, কৃষকের লিচু গাছের তলায় উপস্থিত হইলাম। কৃষক তখন বাড়ীতে ছিল না। আমি মণিরামকে গাছে তুলিয়া দিয়া সকলকে পাহারা দিতে বলিলাম। মণিরাম সবেমাত্র দশ বারটা লিচু পাড়িয়াছে, এমন সময় বৈদ্যনাথ আসিয়া বলিল, “ওহে মোহনলাল, ব্যাপার বড় সহজ নয়! নেপাল দলবল নিয়ে এই দিকে আস্চে। বোধ হয়, মারামারি হ’তে পারে।” আমি বলিলাম,<noinclude></noinclude>
r4lawkao3bp76j21msas424xbejwa6s
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/১৪
104
885164
1996792
2026-08-30T12:58:51Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996792
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১৪|মোহনলাল}}{{rule}}</noinclude>“কি, নেপাল আস্ছে? আসুক, আজ তাকে একবার দেখে নেবো! তোমরা এই দিকে থাকো, আমি ঐ গাছের আড়ালে লুকিয়ে থাকি। খবরদার, তোমরা ভয় পেও না। আমি ঠিক সময়ে বাইরে এসে নেপালকে দু' চার ঘা লাগিয়ে দেবো। তোমরা তার চেলাদের মাথায় চড়্টা-আস্টা দিতে ভুলো না।” আমার কথায় সকলে রাজী হইল; আমি গাছের আড়ালে গিয়া লুকাইলাম। একটু পরেই নেপালের দল গাছতলায় আসিয়া উপস্থিত হইল। মণিরাম তখন ভয়ে নামিয়া আসিবার উদ্যোগ করিতেছিল ৷ তাহাকে দেখিয়া নেপাল বলিল, “ছিঃ মণিরাম, তোমার এই কাজ! আমি তোমার মাকে ব'লে দেব।”<noinclude></noinclude>
mbrxs9f9pg4l9ntau0uyxh4xslbowrv
1996794
1996792
2026-08-30T13:00:01Z
BabulB
2144
1996794
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১৪|মোহনলাল}}{{rule}}</noinclude>“কি, নেপাল আস্ছে? আসুক, আজ তাকে একবার দেখে নেবো! তোমরা এই দিকে থাকো, আমি ঐ গাছের আড়ালে লুকিয়ে থাকি। খবরদার, তোমরা ভয় পেও না। আমি ঠিক সময়ে বাইরে এসে নেপালকে দু' চার ঘা লাগিয়ে দেবো। তোমরা তার চেলাদের মাথায় চড়্টা-আস্টা দিতে ভুলো না।” আমার কথায় সকলে রাজী হইল; আমি গাছের আড়ালে গিয়া লুকাইলাম। একটু পরেই নেপালের দল গাছতলায় আসিয়া উপস্থিত হইল। মণিরাম তখন ভয়ে নামিয়া আসিবার উদ্যোগ করিতেছিল ৷ তাহাকে দেখিয়া নেপাল বলিল, “ছিঃ মণিরাম, তোমার এই কাজ! আমি তোমার মাকে ব'লে দেব।”{{nop}}<noinclude></noinclude>
4ffv4e6kw45h410vprancwomycp8jyy
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/১৫
104
885165
1996793
2026-08-30T12:59:43Z
BabulB
2144
/* মুদ্রণ সংশোধন করা হয়নি */ "মণিরাম ভয়ে কাঁপিতে কাঁপিতে বলিল, “না ভাই, আমার কোন দোষ নেই। তুমি ত জান, শুধু মার খাবার ভয়েই আমি এ কাজ হয়েছি।” ক'রতে রাজী নেপাল । তা জানি, আসল ব্যাপার বুঝতে আমার বাকি নেই। ছি..." দিয়ে পাতা তৈরি
1996793
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|১৫|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>মণিরাম ভয়ে কাঁপিতে কাঁপিতে
বলিল, “না ভাই, আমার কোন দোষ
নেই। তুমি ত জান, শুধু মার খাবার
ভয়েই আমি এ কাজ
হয়েছি।”
ক'রতে রাজী
নেপাল । তা জানি, আসল ব্যাপার
বুঝতে আমার বাকি নেই। ছিঃ!
ছিঃ! এর চেয়ে লজ্জার বিষয় আর
কি আছে !
নেপালের কথা শেষ হইতে না।
হইতে বৈদ্যনাথ সগৰ্ব্বে বলিয়া উঠিল,
“সাবধানে কথা বল, অত বাড়াবাড়ি
* ভাল নয়।”
নেপালের দলে গোপীনাথ নামে
একটি ছেলে ছিল। তাহার চেহারা
যেমন গুণ্ডার মত, তাহার গায়ের জোরও<noinclude></noinclude>
4p693e2tepvsh7prc24wz3wvkj4thpw
1996795
1996793
2026-08-30T13:06:56Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996795
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১৫|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>{{ফাঁক}}মণিরাম ভয়ে কাঁপিতে কাঁপিতে বলিল, “না ভাই, আমার কোন দোষ নেই। তুমি ত জান, শুধু মার খাবার ভয়েই আমি এ কাজ ক'রতে রাজী হয়েছি।”
{{ফাঁক}}নেপাল। তা জানি, আসল ব্যাপার বুঝ্তে আমার বাকি নেই। ছিঃ! ছিঃ! এর চেয়ে লজ্জার বিষয় আর কি আছে!
{{ফাঁক}}নেপালের কথা শেষ হইতে না হইতে বৈদ্যনাথ সগৰ্ব্বে বলিয়া উঠিল, “সাবধানে কথা বল, অত বাড়াবাড়ি ভাল নয়।”
{{ফাঁক}}নেপালের দলে গোপীনাথ নামে একটি ছেলে ছিল। তাহার চেহারা যেমন গুণ্ডার মত, তাহার গায়ের জোরও<noinclude></noinclude>
d7a9zx1cpbhpjpatsnz0vx3ziqvy01w
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/২৪
104
885166
1996796
2026-08-30T13:07:26Z
BabulB
2144
/* লিখা নথকা */
1996796
proofread-page
text/x-wiki
<noinclude><pagequality level="0" user="BabulB" />{{rvh|২৪|মোহনলাল}}{{rule}}</noinclude><noinclude></noinclude>
gq0vt5v518dcwxkacb64ikkzpqz7vdp
1996831
1996796
2026-08-30T14:50:10Z
Bodhisattwa
2549
/* লেখাবিহীন */
1996831
proofread-page
text/x-wiki
<noinclude><pagequality level="0" user="BabulB" /></noinclude><noinclude></noinclude>
b43rr2jowf39j7n00bvknd5piln9lww
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/২৩
104
885167
1996797
2026-08-30T13:09:27Z
BabulB
2144
/* মুদ্রণ সংশোধন করা হয়নি */ "জীবন রক্ষা করিল, সেজন্য কৃতজ্ঞ হওয়া দূরে থাক, বরং অপমানে যেন আমি মরিয়া গেলাম! নেপাল এই ঘটনা লইয়া যেখানে সেখানে গর্ব করিবে, আর সকলের কাছে আমার মাথা হেঁট হইবে, ইহা অপেক্ষা ল..." দিয়ে পাতা তৈরি
1996797
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|২৩|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>জীবন রক্ষা করিল, সেজন্য কৃতজ্ঞ হওয়া দূরে থাক, বরং অপমানে যেন আমি মরিয়া গেলাম! নেপাল এই ঘটনা লইয়া যেখানে সেখানে গর্ব করিবে, আর সকলের কাছে আমার মাথা হেঁট হইবে, ইহা অপেক্ষা লজ্জা ও অপমানের বিষয় আর কি আছে? নদীর জলে ডুবিয়া মরাই বরং আমার পক্ষে সহস্র গুণে ভাল ছিল! এই ভাবিতে ভাবিতে আমি বাড়ী চলিয়া গেলাম।
{{dhr}}
{{rule|4em}}<noinclude></noinclude>
2on1ykd40x533fwfsms3xndofhwm5ih
1996798
1996797
2026-08-30T13:11:04Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996798
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|২৩|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>জীবন রক্ষা করিল, সেজন্য কৃতজ্ঞ হওয়া দূরে থাক, বরং অপমানে যেন আমি মরিয়া গেলাম! নেপাল এই ঘটনা লইয়া যেখানে সেখানে গর্ব করিবে, আর সকলের কাছে আমার মাথা হেঁট হইবে, ইহা অপেক্ষা লজ্জা ও অপমানের বিষয় আর কি আছে? নদীর জলে ডুবিয়া মরাই বরং আমার পক্ষে সহস্র গুণে ভাল ছিল! এই ভাবিতে ভাবিতে আমি বাড়ী চলিয়া গেলাম।
{{dhr}}
{{rule|4em}}<noinclude></noinclude>
rnhnolv3is92bh44r92tis826oylhms
মোহনলাল/প্রথম পরিচ্ছেদ
0
885168
1996799
2026-08-30T13:11:23Z
BabulB
2144
"<pages index="মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf" from=5 to=23 header=1/>" দিয়ে পাতা তৈরি
1996799
wikitext
text/x-wiki
<pages index="মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf" from=5 to=23 header=1/>
kvfof6xkfaqpw2v1tlcslx4r0g61yly
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/১৬
104
885169
1996800
2026-08-30T13:14:37Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996800
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১৬|মোহনলাল}}{{rule}}</noinclude>তেমনি ভয়ানক। সে বৈদ্যনাথের দিকে মুখ ফিরাইয়া বলিল, “কি, সাবধান হব? কেন, এত ভয় কিসের? আয় না, কা’র ঘাড়ে ক’টা মাথা, দেখি!” এই বলিয়া গোপীনাথ যেই একটু অগ্রসর হইল, লিখিতে লজ্জা হয়, আমার দলের সকলেই অমনি প্রাণভয়ে দৌড় দিল। দলের ছেলেদের কাণ্ড দেখিয়া আমি যারপরনাই দুঃখিত হইলাম। এক একবার ভাবিলাম, ছুটিয়া গিয়া নেপালের মুখে এক ঘুসী লাগাই। কিন্তু গোপীনাথের ভয়ে আমারও সে সাহস হইল না। আমি যেমন লুকাইয়া ছিলাম, তেমনি রহিলাম। তখন নেপাল মণিরামকে ডাকিয়া বলিল, “নেমে এস, এমন কাজ আর কখনো করো না।”<noinclude></noinclude>
sv4x6ej9xxswwrennw76i6wh7fzyzhh
1996801
1996800
2026-08-30T13:15:34Z
BabulB
2144
1996801
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১৬|মোহনলাল}}{{rule}}</noinclude>তেমনি ভয়ানক। সে বৈদ্যনাথের দিকে মুখ ফিরাইয়া বলিল, “কি, সাবধান হব? কেন, এত ভয় কিসের? আয় না, কা’র ঘাড়ে ক’টা মাথা, দেখি!” এই বলিয়া গোপীনাথ যেই একটু অগ্রসর হইল, লিখিতে লজ্জা হয়, আমার দলের সকলেই অমনি প্রাণভয়ে দৌড় দিল। দলের ছেলেদের কাণ্ড দেখিয়া আমি যারপরনাই দুঃখিত হইলাম। এক একবার ভাবিলাম, ছুটিয়া গিয়া নেপালের মুখে এক ঘুসী লাগাই। কিন্তু গোপীনাথের ভয়ে আমারও সে সাহস হইল না। আমি যেমন লুকাইয়া ছিলাম, তেমনি রহিলাম। তখন নেপাল মণিরামকে ডাকিয়া বলিল, “নেমে এস, এমন কাজ আর কখনো করো না।”{{nop}}<noinclude></noinclude>
a414hbfjgi612xaxubjf0hhi0pmvmwx
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/১৭
104
885170
1996802
2026-08-30T13:17:53Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996802
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১৭|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>{{ফাঁক}}মণিরাম ধীরে ধীরে নামিয়া বাড়ীর দিকে চলিল। নেপালের দলও অন্য একটি রাস্তা দিয়া চলিয়া গেল। তাহারা অনেক দূর যাইলে পর, আমি তাড়াতাড়ি বাড়ী চলিলাম। সেই দিন আমি মনে মনে প্রতিজ্ঞা করিলাম যে, নেপালকে ইহার প্রতিশোধ দিবই দিব। তাহা যদি না পারি, আমার মোহনলাল নাম মিথ্যা!
{{ফাঁক}}ইহার পর কয়েক দিনের মধ্যেই নেপালকে মারিবার সুযোগ উপস্থিত হইল। একদিন স্কুলের ছুটির পর, নদীর ধার দিয়া যাইতে যাইতে, আমি নীচে বই রাখিয়া, একটা গাছে পাখীর ছানা পাড়িতে উঠিয়াছি, এমন সময় নেপাল, মণিরাম এবং আমাদের ক্লাসের আরও<noinclude></noinclude>
gegbtozaknjq20f26nb0w0hqcxia7dk
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/১৮
104
885171
1996803
2026-08-30T13:20:43Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996803
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১৮|মোহনলাল}}{{rule}}</noinclude>কয়েকটি ছেলে সেখানে আসিল। গাছের তলায় বই দেখিয়া নেপাল বলিয়া উঠিল, “এই দেখ্, কোন্ হতভাগা ছেলে বই ফেলে গেছে! কার নাম লেখা আছে খুলে দেখ্ত?”
{{ফাঁক}}আমি গাছের উপর হইতে বলিলাম, “কি, এত বড় আস্পর্দ্ধা ! তুই আমাকে হতভাগা বলার কে? দাঁড়া, তোকে দেখাচ্ছি!” এই বলিয়া আমি তিন চারিটা ডিম শুদ্ধ একটি পাখীর বাসা নেপালের মুখের উপর ছুড়িয়া দিলাম। ডিমগুলা ভাঙ্গিয়া তাহার নাক, মুখ রসে ভরিয়া গেল; নেপালের মুখের শ্রী দেখিয়া সকলে হো হো করিয়া হাসিয়া উঠিল। আমি তাড়াতাড়ি নামিয়া তাহার কাছে গিয়া বলিলাম, “এখন তোর<noinclude></noinclude>
40lagezgs64o7v81yt0mz4zhsd6juhb
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/১৯
104
885172
1996804
2026-08-30T13:23:08Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996804
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১৯|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>‘গুপে’কোথায়? সে দিন যে বড় মারামারি ক’রতে চেয়েছিলি! আয়, তিন ঘুসীতে এখনই তোর দাঁত উড়িয়ে দেবো।”
{{ফাঁক}}“মারামারি করা ভদ্রলোকের কাজ নয়! যতক্ষণ ভাল কথায় চলে, ততক্ষণ মারামারি না করাই উচিত, কিন্তু তুমি ক্রমেই যে রকম বাড়িয়ে তুল্ছ, তোমাকে একটু শিক্ষা দেওয়া দরকার। আমি মিষ্ট কথা ব'লে দেখেছি, ভাল ব্যবহার ক'রে দেখেছি, তুমি কিছুতেই শুনলে না। যেন মারামারি করাই তোমার উদ্দেশ্য! যদি তাই হয়, এস, দেখা যাক্!” এই বলিয়া, নেপাল জামার আস্তিন গুটাইতে লাগিল। আমি আর কালবিলম্ব না করিয়া,<noinclude></noinclude>
c0tvjpjog56jw24q8aygvhmxyw2ea58
1996812
1996804
2026-08-30T13:39:38Z
BabulB
2144
1996812
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|১৯|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>‘গুপে’কোথায়? সে দিন যে বড় মারামারি ক’রতে চেয়েছিলি! আয়, তিন ঘুসীতে এখনই তোর দাঁত উড়িয়ে দেবো।”
{{ফাঁক}}“মারামারি করা ভদ্রলোকের কাজ নয়! যতক্ষণ ভাল কথায় চলে, ততক্ষণ মারামারি না করাই উচিত, কিন্তু তুমি ক্রমেই যে রকম বাড়িয়ে তুল্ছ, তোমাকে একটু শিক্ষা দেওয়া দরকার। আমি মিষ্ট কথা ব'লে দেখেছি, ভাল ব্যবহার ক'রে দেখেছি, তুমি কিছুতেই শুনলে না। যেন মারামারি করাই তোমার উদ্দেশ্য! যদি তাই হয়, এস, দেখা যাক্!” এই বলিয়া, নেপাল জামার আস্তিন গুটাইতে লাগিল।
{{ফাঁক}}আমি আর কালবিলম্ব না করিয়া,<noinclude></noinclude>
6574ch2yvhuvmietfh0o8clja3jgx47
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/২০
104
885173
1996805
2026-08-30T13:25:22Z
BabulB
2144
/* মুদ্রণ সংশোধন করা হয়নি */ "মোহনলাল ৷ নেপালের মুখ লক্ষ্য করিয়া সজোরে এক ঘুসী চালাইলাম । সে হঠাৎ মাথা সরাইয়া সেই ঘুসী এড়াইল। তখনই আবার আর একটা ঘুসী মারিলাম, সেটাও তাহার গায়ে লাগিল না । রাগে ও ঘৃণায..." দিয়ে পাতা তৈরি
1996805
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|২০|মোহনলাল}}{{rule}}</noinclude>মোহনলাল
৷
নেপালের মুখ লক্ষ্য করিয়া সজোরে এক
ঘুসী চালাইলাম । সে হঠাৎ মাথা
সরাইয়া সেই ঘুসী এড়াইল। তখনই
আবার আর একটা ঘুসী মারিলাম,
সেটাও তাহার গায়ে লাগিল না । রাগে
ও ঘৃণায় উত্তেজিত হইয়া, আমি আবার
তাহাকে মারিবার উপক্রম করিতেছি,
এমন সময়, নেপালের প্রকাণ্ড এক ঘুসী
ঠিক আমার নাকের উপর আসিয়া
পড়িল ! সে ত ঘুসী নয়, যেন লোহার
মুগুর! আমি চারিদিক অন্ধকার দেখিতে
লাগিলাম ৷ মাথা ঝাঁ ঝাঁ করিতে
লাগিল ৷ আমি বেশ বুঝিতে পারিলাম
যে, নেপালের সহিত ঘুসীতে আঁটিয়া
উঠা সহজ নয়। সে একজন রীতিমত
পালোয়ান । তখন আমি—‘যাক্ প্রাণ,<noinclude></noinclude>
mv7myh5d9sideo2ojd0p7u6t8gk5eu3
1996806
1996805
2026-08-30T13:27:33Z
BabulB
2144
1996806
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|২০|মোহনলাল}}{{rule}}</noinclude>নেপালের মুখ লক্ষ্য করিয়া সজোরে এক ঘুসী চালাইলাম। সে হঠাৎ মাথা সরাইয়া সেই ঘুসী এড়াইল। তখনই আবার আর একটা ঘুসী মারিলাম, সেটাও তাহার গায়ে লাগিল না। রাগে ও ঘৃণায় উত্তেজিত হইয়া, আমি আবার তাহাকে মারিবার উপক্রম করিতেছি, এমন সময়, নেপালের প্রকাণ্ড এক ঘুসী ঠিক আমার নাকের উপর আসিয়া পড়িল! সে ত ঘুসী নয়, যেন লোহার মুগুর! আমি চারিদিক অন্ধকার দেখিতে লাগিলাম। মাথা ঝাঁ ঝাঁ করিতে লাগিল। আমি বেশ বুঝিতে পারিলাম যে, নেপালের সহিত ঘুসীতে আঁটিয়া উঠা সহজ নয়। সে একজন রীতিমত পালোয়ান। তখন আমি—‘যাক্ প্রাণ,<noinclude></noinclude>
p7vi70oatjgizncompyseayx55p2138
1996807
1996806
2026-08-30T13:27:50Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996807
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|২০|মোহনলাল}}{{rule}}</noinclude>নেপালের মুখ লক্ষ্য করিয়া সজোরে এক ঘুসী চালাইলাম। সে হঠাৎ মাথা সরাইয়া সেই ঘুসী এড়াইল। তখনই আবার আর একটা ঘুসী মারিলাম, সেটাও তাহার গায়ে লাগিল না। রাগে ও ঘৃণায় উত্তেজিত হইয়া, আমি আবার তাহাকে মারিবার উপক্রম করিতেছি, এমন সময়, নেপালের প্রকাণ্ড এক ঘুসী ঠিক আমার নাকের উপর আসিয়া পড়িল! সে ত ঘুসী নয়, যেন লোহার মুগুর! আমি চারিদিক অন্ধকার দেখিতে লাগিলাম। মাথা ঝাঁ ঝাঁ করিতে লাগিল। আমি বেশ বুঝিতে পারিলাম যে, নেপালের সহিত ঘুসীতে আঁটিয়া উঠা সহজ নয়। সে একজন রীতিমত পালোয়ান। তখন আমি—‘যাক্ প্রাণ,<noinclude></noinclude>
botyq2k9d0v4na1cr02se5345jh24vd
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/২১
104
885174
1996808
2026-08-30T13:30:29Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996808
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|২১|প্রথম পরিচ্ছেদ}}{{rule}}</noinclude>থাক মান’—মন্ত্র জপিতে জপিতে, একেবারে মরিয়া হইয়া তাহার দিকে ছুটিয়া গেলাম। নেপাল চক্ষুর নিমিষে অমনি একধারে একটু সরিয়া দাড়াইল, আর বেগ সাম্লাইতে না পারিয়া আমি সম্মুখের নদীতে পড়িয়া গেলাম। নদীটা বড় না হইলেও গভীর ছিল। আমি সাঁতার জানিতাম না; নদীতে পড়িয়া আঁকুর-পাকুর করিতে করিতে ভাসিতে চেষ্টা করিলাম; কিন্তু আমার সকল চেষ্টাই ব্যর্থ হইল! আমার এই আসন্ন বিপদে নেপাল স্থির থাকিতে পারিল না—তাড়াতাড়ি লাফাইয়া পড়িয়া আমাকে ধরিয়া ফেলিল। আমিও তাহার কাপড় ধরিলাম। নেপাল বলিল, “তোমার কোন ভয় নেই; আমার<noinclude></noinclude>
0hj01d2p6d0unukt2zse1mbbfg6ming
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/২২
104
885175
1996809
2026-08-30T13:33:00Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996809
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|২২|মোহনলাল}}{{rule}}</noinclude>কাপড় ছেড়ে দেও, আমি তোমাকে এখনি উঠাচ্ছি।” কিন্তু তাহার কাপড় ছাড়িতে আমার সাহস হইল না; কি জানি, শত্ৰু ভাবিয়া সে যদি আমাকে ফেলিয়া চলিয়া যায়। আমার নিৰ্ব্বুদ্ধিতায়, লাভের মধ্যে এই হইল যে, আমরা দুই জনেই ডুবিতে লাগিলাম। শেষে নেপাল জোর করিয়া আমার হাত হইতে তাহার কাপড় ছাড়াইয়া লইল এবং অনেক কষ্টে আমাকে লইয়া ভাসিতে ভাসিতে তীরে আসিয়া উঠিল। এইরূপে আমি সে যাত্রা বাঁচিয়া গেলাম।
{{ফাঁক}}কিন্তু কুশিক্ষার এমনই দোষ যে, সে সময়েও আমি নেপালকে ভাল চক্ষে দেখিতে পারিলাম না! সে যে আপনাকে এত বিপদে ফেলিয়া, আমার<noinclude></noinclude>
8tzp1zb2i06wwutllj4p0s3r6j6fx5v
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৭৮
104
885176
1996810
2026-08-30T13:36:43Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996810
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৭৮|মোহনলাল}}{{rule}}</noinclude>সম্পন্ন হইল। দেবত্বের কাছে পশুত্ব পরাজিত হইল! আমি পরিষ্কাররূপেই বুঝিতে পারিলাম, এ জগতে
{{কেন্দ্র|<poem>{{larger|'''সাধুতার জয়'''}}
এবং
{{larger|'''অসাধুতার পরাজয়'''}}</poem>}}
অবশ্যম্ভাবী!
{{dhr}}
{{কেন্দ্র|সমাপ্ত।}}<noinclude></noinclude>
q1mxv7dgrnev4f1oqxs1j730n8wvbyo
1996811
1996810
2026-08-30T13:37:13Z
BabulB
2144
1996811
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৭৮|মোহনলাল}}{{rule}}</noinclude>সম্পন্ন হইল। দেবত্বের কাছে পশুত্ব পরাজিত হইল! আমি পরিষ্কাররূপেই বুঝিতে পারিলাম, এ জগতে
{{কেন্দ্র|<poem>{{larger|'''সাধুতার জয়'''}}
এবং
{{larger|'''অসাধুতার পরাজয়'''}}</poem>}}
অবশ্যম্ভাবী!
{{dhr|2em}}
{{কেন্দ্র|সমাপ্ত।}}<noinclude></noinclude>
gg4oo9ef7hs7ls7lj2x1maze8un4kv1
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৪৭
104
885177
1996813
2026-08-30T13:57:12Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996813
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" />{{কেন্দ্র|বোঝা}}</noinclude><section begin="A" />{{ফাঁক}}কে আসিল? হেম বুঝি? আর ভাবিতে হইল না। বিষম কোলাহল করিতে করিতে হেমাঙ্গিনী আসিয়া উপস্থিত হইল। হেমা আসিয়া একেবারে নলিনীর চুল ধরিল, কহিল, আর লেখা-পড়ার দরকার নেই, ওঠ, আমাদের বাড়ি চল, কাল দাদার বৌ এসেচে।
{{ফাঁক}}নলিনী কহিল, বৌ এসেচে সঙ্গে আনলে না কেন?
{{ফাঁক}}হেম কহিল, তা কি হয়? নূতন এসেচে, হঠাৎ তোর এখানে আসবে কেন?
{{ফাঁক}}নলিনী কহিল, আমিই বা তবে যাব কেন?
{{ফাঁক}}হেমাঙ্গিনী হাসিয়া বলিল, তোর ঘাড় যাবে, এই আমি টেনে নিয়ে যাচ্ছি।
{{ফাঁক}}চুল ধরিয়া টানিয়া লইয়া যাইলে নলিনী কেন, অনেককেই যাইতে হইত। নলিনীকেও যাইতে হইল।
{{ফাঁক}}যাইতে নলিনীর বিশেষ আপত্তি ছিল, কারণ তাহাদের বাটী যাইলে ফিরিয়া আসিতে বিলম্ব হইত। দুই-এক দিন নলিনীর বাটী ফিরিবার পূর্ব্বেই সত্যেন্দ্রনাথ কাছারী হইতে ফিরিয়াছিলেন। সেরূপ অবস্থায় সত্যেন্দ্রর বড় অসুবিধা হইত। তিনি কিছু মনে করুন আর নাই করুন, নলিনীর বড় লজ্জা করিত, কারণ সে জানিত, কাছারী হইতে ফিরিয়া আসিয়া তাহার হাতের বাতাস না খাইলে স্বামীর গরম ছুটিত না। বিধাতার ইচ্ছা—বহু চেষ্টায় আজও নলিনী সাতটার পূর্ব্বে ফিরিতে পারিল না। আসিয়া সে দেখিল, সত্যেন্দ্র সংবাদপত্র পাঠ করিতেছে, তখনও কিছু আহার করে নাই। খাওয়াইবার ভার নলিনী আপন হস্তেই রাখিয়াছিল। কাছে আসিলে সত্যেন্দ্র হাসিল, কিন্তু সে হাসি নলিনীর ভাল বোধ হইল না। সে অন্তরে শিহরিয়া উঠিল। আসন পাতিয়া নলিনী জলখাবার খাওয়াইতে চেষ্টা করিল, কিন্তু সত্যেন্দ্র কিছু স্পর্শ করিল না। ক্ষুধা একেবারেই নাই। বহু সাধ্যসাধনাতেও সে কিছু খাইল না। নলিনী বুঝিল, এ অভিমান কেন!
<section end="A" />
<section begin="B" />{{কেন্দ্র|{{larger|'''ষষ্ঠ পরিচ্ছেদ'''}}}}
{{কেন্দ্র|কপাল ভাঙ্গিয়াছে কি?}}
{{ফাঁক}}আজ হেমাঙ্গিনী শ্বশুরবাড়ী যাইবে। তাহার স্বামী উপেন্দ্রবাবু তাহাকে লইতে আসিয়াছেন। নলিনী বহু দিবস হেমার সহিত দেখা করিতে যায় নাই। তাই আজ হেমা অনেক দুঃখ করিয়া তাহাকে যাইতে লিখিয়াছে।
{{nop}}<section end="B" /><noinclude>{{c|৩৩৩}}</noinclude>
gm2txychwes6hd32he4mto08rjmsj1f
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৪৮
104
885178
1996814
2026-08-30T14:01:29Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996814
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" />{{কেন্দ্র|শরৎ-সাহিত্য-সংগ্রহ}}</noinclude>{{ফাঁক}}নলিনী প্রতিজ্ঞা করিয়াছিল, স্বামীর অনুমতি বিনা সে আর কোথাও যাইবে না; কিন্তু আজ সে প্রতিজ্ঞা রক্ষা করিতে গেলে প্রিয়-সখীর সহিত আর দেখা হয় না। নলিনী বড় বিপদে পড়িল। হেমা লিখিয়াছে, তাহারা তিনটার ট্রেনে রওনা হইবে। তাহা হইলে স্বামীর অনুমতি লওয়া কি করিয়া হয়? বহু কু-তর্কের পর নলিনী যাওয়াই স্থির করিল। যাইবার সময় দাসীকে সে বলিয়া দিল, যেন ঠিক তিনটার সময় রায়েদের বাড়িতে গাড়ী পাঠান হয়। গাড়ী পাঠানও হয়েছিল, কিন্তু হেমার তিনটার ট্রেনে যাওয়া হইল না। সুতরাং সে নলিনীকে কিছুতেই ছাড়িয়া দিল না। অনেক জিদ করিয়াও সে হেমার হাত এড়াইতে পারিল না। হেমা আজ অনেক দিনের জন্য চলিয়া যাইতেছে। কত কাল আর দেখা হইবে না—সহজে কে ছাড়িয়া দেয়?
{{ফাঁক}}বাটী ফিরিতে বিলম্ব হইলে স্বামী রাগ করিবেন, এ-কথা বলিতে নলিনীর লজ্জা হইতেছিল—সহজে এ-কথা কে বলিতে চাহে? এ হীনতা কে স্বীকার করে? বিশেষ এই বয়সে! অবশেষে সে-কথাও সে বলিল, কিন্তু হেমা তাহা বিশ্বাস করিল না। সে হাসিয়া বলিল, বোকা বুঝিও না। রাগারাগির ব্যাপার আমি ঢের বুঝি। উপেনবাবুও অনেক রাগ করতে জানেন।
{{ফাঁক}}কথাটা হেমা হাসিয়া উড়াইয়া দিল; কিন্তু নলিনী মর্ম্মে পীড়া পাইল। সকলের স্বামী কি এক ছাঁচে গড়া? সকলেই কি উপেনবাবুর মত?
{{ফাঁক}}নলিনী যখন ফিরিয়া আসিল, তখন রাত্রি দশটা বাজিয়া গিয়াছে। আসিয়া সে শুনিল, বাবু বাহিরে শয়ন করিয়াছে।
{{ফাঁক}}মাতঙ্গিনী ওরফে মাতু, নলিনীর বাপের বাড়ির ঝি, সে নলিনীর সহিত আসিয়াছিল। অনেক দিনের লোক, বিশেষ সে নলিনীকে অত্যন্ত স্নেহ করিত; তাই সে নলিনীকে আজ বিলক্ষণ দশ কথা জানাইয়া দিল। বাটীর মধ্যে সেই কেবল জানিত, সত্যবাবু বিলক্ষণ রাগ করিয়াই বাহিরে শয্যা রচনা করিবার আদেশ দিয়াছিলেন।
{{ফাঁক}}গভীর রাত্রে যখন শয্যায় শয়ন করিয়া চক্ষু মুদ্রিত করিয়া সত্যেন্দ্রনাথ পূর্ব্ব স্মৃতি জাগাইয়া তুলিবার চেষ্টা করিতেছিল, যখন সেই বহুদিনগত প্রফুল্ল-কমল-সদৃশ সরলার মুখের সহিত নলিনীর মুখের ঈষৎ সাদৃশ্য আছে কি না বিবেচনা করিতেছিল, যখন সরলার ভালবাসার নিকট নলিনীর ভালবাসা, সাগরের নিকট গোষ্পদের জল, ধারণা করিবার জন্য মনের মধ্যে বিষম ঝটিকার উৎপত্তি করিতেছিল, তখন ধীরে ধীরে দ্বার খুলিয়া নলিনী সে গৃহে প্রবেশ করিল। সত্যেন্দ্র চাহিয়া দেখিল নলিনী।<noinclude>{{c|৩৩৪}}</noinclude>
bqzkkzz5ohwbdyd7yx5m071otwaedfi
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৪৯
104
885179
1996815
2026-08-30T14:04:49Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996815
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" />{{কেন্দ্র|বোঝা}}</noinclude>নলিনী আসিয়া সত্যেন্দ্রর পদতলে বসিল। সত্যেন্দ্র চক্ষু মুদ্রিত করিল। বহুক্ষণ এইভাবেই কাটিয়া গেল দেখিয়া সত্যেন্দ্রনাথ বিরক্ত হইল, পার্শ্ব পরিবর্ত্তন করিয়া পরুষভাবে স্পষ্ট-স্বরে কহিল, তুমি এখানে কেন?
{{ফাঁক}}নলিনী কাঁদিতেছিল, কথা কহিতে পারিল না। কান্না দেখিয়া ডেপুটিবাবু আর একটু ক্রুদ্ধভাবে বলিল, রাত হয়েছে, যাও, ভিতরে গিয়ে শোওগে। নলিনী কাঁদিতেছিল; এবার চক্ষের জল মুছিয়া সে বলিল, তুমি শোবে চল।
{{ফাঁক}}সত্য ঘাড় নাড়িল, বলিল, আমার বড় ঘুম পেয়েচে, আর উঠতে পারব না।
{{ফাঁক}}কাঁদিলে সত্যেন্দ্র বিরক্ত হয়। নলিনী চক্ষের জল মুছিয়াছে; স্বামীর কাছে আর সে কাঁদিবে না। ধীরে ধীরে পায়ের উপর হাত রাখিয়া নলিনী বলিল, এবার আমাকে ক্ষমা কর। এখানে তোমার বড় কষ্ট হবে, ভিতরে চল।
{{ফাঁক}}সত্যেন্দ্র আর ভিতরে যাইবে না প্রতিজ্ঞা করিয়াছে। সে বলিল, কষ্টের কথা এত রাত্রে আর ভেবে কাজ নেই; তুমি শোওগে, আমিও ঘুমোই।
{{ফাঁক}}নলিনী সত্যেন্দ্রকে চিনিত। সমস্ত রাত্রি সে আপনার ঘরে বসিয়া কাঁদিয়া কাটাইল। বলি, ও হেমাঙ্গিনী, একবার দেখিয়া গেলে না? রাগারাগির ব্যাপার তুমি বোঝ ভাল—একবার মিটাইয়া দিবে না কি? পরদিনও সত্যেন্দ্র বাটীর ভিতর আসিল না, বা নলিনীর সহিত সাক্ষাৎ করিল না।
{{ফাঁক}}নলিনীর একখানা পত্র মাতু সত্যেন্দ্রর হাতে দিয়াছিল। সে সেখানা না পড়িয়াই মাতঙ্গিনীর সম্মুখে ছিঁড়িয়া ফেলিয়া দিয়া বলিল, এ-সব আর এনো না।
{{ফাঁক}}চারি-পাঁচদিন পরে একদিন নলিনীর বড় দাদা শ্রীযুক্ত নরেন্দ্রবাবু পাবনায় আসিয়া পৌঁছিলেন। হঠাৎ দাদাকে দেখিয়া নলিনী অতিশয় সন্তুষ্ট হইল, কিন্তু ততোধিক বিস্মিত হইল।
{{ফাঁক}}দাদা যে?
{{ফাঁক}}নরেন্দ্রবাবু নলিনীর সহিত সাক্ষাৎ করিয়া হাসিয়া বলিলেন, বাড়ি যাবার জন্য এত ব্যস্ত হয়েচিস্ কেন বোন?
{{ফাঁক}}ব্যস্ত! কথাটার অর্থ নলিনী তখনই বুঝিয়া ফেলিল। হাসিয়া সে বলিল, তোমাদের যে অনেক দিন দেখিনি।
{{nop}}<noinclude>{{c|৩৩৫}}</noinclude>
epf6l09fdfkem5hi4bty8ntoxj9i2f7
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৫০
104
885180
1996816
2026-08-30T14:08:29Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996816
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" />{{কেন্দ্র|শরৎ-সাহিত্য-সংগ্রহ}}</noinclude>{{dhr}}
{{কেন্দ্র|{{larger|'''সপ্তম পরিচ্ছেদ'''}}}}
{{কেন্দ্র|ভাঙ্গিয়াছে}}
{{ফাঁক}}যেদিন স্বামীর চরণে প্রণিপাত করিয়া নলিনী দাদার সহিত গাড়ীতে উঠিল, সে রাত্রে সত্যেন্দ্রনাথ একটুও ঘুমাইতে পারিল না। সমস্ত রাত্রি ধরিয়া সত্যেন্দ্র ভাবিতেছিল, এতটা না করিলেও চলিতে পারিত। অনেকবার সত্যর মনে হইয়াছিল, এখনও সময় আছে, এসময়ও গাড়ী ফিরাইয়া আনি। কিন্তু হায় রে অভিমান! তাহারই জন্য নলিনীকে ফিরাইয়া আনা হইল না।
{{ফাঁক}}যাইবার সময় মাতুও সঙ্গে গিয়াছিল। সেই কেবল যাইবার যথার্থ কারণ জানিত। নলিনী মাতুকে বিশেষ করিয়া বলিয়া দিয়াছিল, যেন সে বাটীতে কোন কথা না বলে। নলিনী মনে করিল, এ-কথা প্রকাশ করিলে স্বামীর অপযশ করা হইবে। ভাল হউক আর মন্দ হউক, তাহার স্বামীকে লোকে মন্দ বলিবার কে?
{{ফাঁক}}পিতৃ-গৃহে যাইয়া নলিনী পিতামাতার চরণে প্রণাম করিল, ছোট ভাইটিকে কোলে লইল, শুধু সে হাসিতে পারিল না।
{{ফাঁক}}মা বলিলেন, নলিনী আমার একদিনের গাড়ীর পরিশ্রমে একেবারে শুকিয়ে গেছে। কিন্তু সে শুষ্ক মুখ আর প্রফুল্ল হইল না।
{{ফাঁক}}পৃথিবীতে প্রায়ই দেখা যায়, একটা সামান্য কারণ হইতে গুরুতর অনিষ্টের উৎপত্তি হয়। শূর্পণখার ঈষৎ চিত্ত-চাঞ্চল্যই স্বর্ণ-লঙ্কা ধ্বংসের হেতু হইয়াছিল। অকিঞ্চিৎকর রূপলালসার জন্য শুধু ট্রয় নগর ধ্বংস হইয়া গেল। মহানুভব রাজা হরিশ্চন্দ্র অতি সামান্য কারণেই অমন বিপদ্গ্রস্ত হইয়াছিলেন; জগতে এরূপ দৃষ্টান্ত বিরল নহে। এখানেও একটা সামান্য অভিমানে বিষম বিপত্তি ঘটিয়া উঠিল। সত্যেন্দ্রনাথের দোষ দেব কি?
{{ফাঁক}}নলিনী কখনো অভিমান করে নাই, স্বামীর কষ্টের কথা মনে করিয়া সে নীরবে সমস্ত সহ্য করিত—আর পারিল না। সে ভাবিল, এই ক্ষুদ্র কারণে যে স্বামী-কর্ত্তৃক পরিত্যক্ত হয়, সে মরে না কেন?
{{ফাঁক}}দারুণ অভিযানে নলিনী শুকাইতে লাগিল; ওদিকে সত্যেন্দ্রর অভিমান ফুরাইয়া গিয়াছে; একদণ্ড না থাকিলে যাহার চলে না, তাহার এ মিছা অভিমান কতদিন থাকে? অভিমান দারুণ কষ্টের কারণ হইয়া দাঁড়াইয়াছে। সত্যেন্দ্র প্রত্যহ চাহিয়া থাকে—আজ হয়ত নলিনীর পত্র আসিবে, হয়ত সে লিখিবে, আমায় লইয়া<noinclude>{{c|৩৩৬}}</noinclude>
fbk7neo6sdusdbgsy541ppl96zmuz2e
1996826
1996816
2026-08-30T14:44:36Z
Nettime Sujata
5470
1996826
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" /></noinclude>{{dhr}}
{{কেন্দ্র|{{larger|'''সপ্তম পরিচ্ছেদ'''}}}}
{{কেন্দ্র|ভাঙ্গিয়াছে}}
{{ফাঁক}}যেদিন স্বামীর চরণে প্রণিপাত করিয়া নলিনী দাদার সহিত গাড়ীতে উঠিল, সে রাত্রে সত্যেন্দ্রনাথ একটুও ঘুমাইতে পারিল না। সমস্ত রাত্রি ধরিয়া সত্যেন্দ্র ভাবিতেছিল, এতটা না করিলেও চলিতে পারিত। অনেকবার সত্যর মনে হইয়াছিল, এখনও সময় আছে, এসময়ও গাড়ী ফিরাইয়া আনি। কিন্তু হায় রে অভিমান! তাহারই জন্য নলিনীকে ফিরাইয়া আনা হইল না।
{{ফাঁক}}যাইবার সময় মাতুও সঙ্গে গিয়াছিল। সেই কেবল যাইবার যথার্থ কারণ জানিত। নলিনী মাতুকে বিশেষ করিয়া বলিয়া দিয়াছিল, যেন সে বাটীতে কোন কথা না বলে। নলিনী মনে করিল, এ-কথা প্রকাশ করিলে স্বামীর অপযশ করা হইবে। ভাল হউক আর মন্দ হউক, তাহার স্বামীকে লোকে মন্দ বলিবার কে?
{{ফাঁক}}পিতৃ-গৃহে যাইয়া নলিনী পিতামাতার চরণে প্রণাম করিল, ছোট ভাইটিকে কোলে লইল, শুধু সে হাসিতে পারিল না।
{{ফাঁক}}মা বলিলেন, নলিনী আমার একদিনের গাড়ীর পরিশ্রমে একেবারে শুকিয়ে গেছে। কিন্তু সে শুষ্ক মুখ আর প্রফুল্ল হইল না।
{{ফাঁক}}পৃথিবীতে প্রায়ই দেখা যায়, একটা সামান্য কারণ হইতে গুরুতর অনিষ্টের উৎপত্তি হয়। শূর্পণখার ঈষৎ চিত্ত-চাঞ্চল্যই স্বর্ণ-লঙ্কা ধ্বংসের হেতু হইয়াছিল। অকিঞ্চিৎকর রূপলালসার জন্য শুধু ট্রয় নগর ধ্বংস হইয়া গেল। মহানুভব রাজা হরিশ্চন্দ্র অতি সামান্য কারণেই অমন বিপদ্গ্রস্ত হইয়াছিলেন; জগতে এরূপ দৃষ্টান্ত বিরল নহে। এখানেও একটা সামান্য অভিমানে বিষম বিপত্তি ঘটিয়া উঠিল। সত্যেন্দ্রনাথের দোষ দেব কি?
{{ফাঁক}}নলিনী কখনো অভিমান করে নাই, স্বামীর কষ্টের কথা মনে করিয়া সে নীরবে সমস্ত সহ্য করিত—আর পারিল না। সে ভাবিল, এই ক্ষুদ্র কারণে যে স্বামী-কর্ত্তৃক পরিত্যক্ত হয়, সে মরে না কেন?
{{ফাঁক}}দারুণ অভিযানে নলিনী শুকাইতে লাগিল; ওদিকে সত্যেন্দ্রর অভিমান ফুরাইয়া গিয়াছে; একদণ্ড না থাকিলে যাহার চলে না, তাহার এ মিছা অভিমান কতদিন থাকে? অভিমান দারুণ কষ্টের কারণ হইয়া দাঁড়াইয়াছে। সত্যেন্দ্র প্রত্যহ চাহিয়া থাকে—আজ হয়ত নলিনীর পত্র আসিবে, হয়ত সে লিখিবে, আমায় লইয়া<noinclude>{{c|৩৩৬}}</noinclude>
erf1bga7fi0m42gfyrby9zgm9py4ukn
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৫১
104
885181
1996817
2026-08-30T14:10:38Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996817
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" />{{কেন্দ্র|বোঝা}}</noinclude>যাও, সত্যেন্দ্র ভাবে, তাহা হইলে মাথায় করিয়া লইয়া আসিব, আর কখনও এরূপ অন্যায় ব্যবহার করিব না; কিন্তু ভবিতব্য কে অতিক্রম করিবে? যাহা হইবার তাহা হইবেই। তুমি আমি ক্ষুদ্র প্রাণী মাত্র, আজ কাল করিয়া ছয় মাস কাটিয়া গেল, হতভাগিনী কোন কথা লিখিল না। পাপিষ্ঠ সত্যেন্দ্রনাথ ভাঙ্গিল, কিন্তু মচকাইল না। ছয় মাস কাটিয়া গেল। ক্রমশ সত্যেন্দ্রনাথের অসহ্য হইল। লুপ্ত অভিমান আবার দৃপ্ত হইয়া উঠিল, ক্রোধ আসিয়া তাহাতে যোগ দিল । হিতাহিত-রহিত সত্যেন্দ্রনাথ নিজের দোষ দেখিল না, ভাবিল, যাহার অহঙ্কার এত, তাহার প্রতিশোধও তদ্রূপ প্রয়োজন।
{{ফাঁক}}কেহই নিজের দোষ দেখিল না। সেই অর্দ্ধ-মিলিত হৃদয় দুইটি আবার চিরকালের জন্য বিভিন্ন হইয়া চলিল। যৌবনের প্রারম্ভে সঙ্কুচিতা লতাকে টানিয়া বাড়াইয়াছিল, কিন্তু আর সহে না, এবার ছিঁড়িবার উপক্রম হইল।
{{ফাঁক}}সত্যেন্দ্রনাথ! তোমার দোষ দিই না, তাহারও দিই না। দুই জনেই ভুল করিয়াছ, দোষ কর নাই। ভুল দেখাইতে পারিলে আত্মগ্লানি কাহার যে অধিক হইত, তাহা ভগবানই জানেন। আমরাও বুঝিতে পারিতাম না, তোমরাও পারিতে না। বুঝিতে পারি না—কি আকাঙ্ক্ষায়, কি সাধ পূর্ণ করিতে তোমরা এতটা করিলে!
{{ফাঁক}}সাধ মিটে না; মিটাইবার ইচ্ছাও নাই। কি সাধ তাহাও হয়ত ভাল বুঝিতে পারি না। তথাপি কাতর হৃদয় কি একটা অতৃপ্ত আকাঙ্ক্ষায় সকল সময়ই হা হা করিয়া উঠে। কি যে হয়, কেন যে অদৃশ্য গতি ঐ লক্ষ্যহীন প্রান্তে পরিচালিত হয়, কিছুতেই তাহা নির্ণয় করা যায় না।
{{ফাঁক}}যাহা ঘটিবার, তাহা ঘটিবে। ইচ্ছা হইলেও মনের সহিত দ্বন্দ্বযুদ্ধ করিয়াও তোমাকে অপরাধ হইতে অব্যাহতি দিব। দিব কি?
{{nop}}<noinclude>{{c|৩৩৭}}</noinclude>
jes9nmxss41z7mar8kycab677v8mxlb
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৫২
104
885182
1996818
2026-08-30T14:16:59Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996818
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" />{{কেন্দ্র|শরৎ-সাহিত্য-সংগ্রহ}}</noinclude>{{dhr}}
{{কেন্দ্র|{{larger|'''অষ্টম পরিচ্ছেদ'''}}}}
{{কেন্দ্র|ফুলশয্যা}}
{{ফাঁক}}অমন রূপে-গুণে বৌ, পুত্রের পছন্দ হয় না! গৃহিণীর বড় দুঃখ। অমন চাঁদপানা বৌ লইয়া ঘর করিতে পাইলেন না ভাবিয়া গৃহিণী অত্যন্ত বিমর্ষ হইয়া আছেন। জননীর শত চেষ্টাতেও পুত্রের মত ফিরিল না। এখন আর উপায় কি? ছেলেরই যদি পছন্দ হইল না, তখন কিসের বৌ? ছেলের আদরেই ত বৌয়ের আদর! আর আমারই বা হাত কি? নিজে দেখিয়া শুনিয়া বিবাহ করিলে আমি কি আটকাইতে পারি? ইত্যাদি মৃদু বচন আওড়াইতে আওড়াইতে অভ্যাসানুসারে গৃহিণী বরণ-ডালা সাজাইতে বসিলেন।
{{ফাঁক}}দুই বৎসর পূর্ব্বে হরদেববাবুর মৃত্যু হইয়াছিল। সে কথা স্মরণ হইল—চক্ষে জল আসিল, আবার নলিনীর কথা মনে পড়িলে—জলবেগ আরও বর্দ্ধিত হইল। কি জানি কেমন বৌ আসিবে? কর্ত্তা বাঁচিয়া থাকিলে বোধ হয় পোড়াকপালির এ দুরবস্থা দেখিতে হইত না।
{{ফাঁক}}সত্যেন্দ্র বিবাহ করিয়া আসিল। মা বৌ বরণ করিয়া ঘরে তুলিলেন। আবার পোড়া চোখে জল আসিল। জল মুছিতে মুছিতে তিনি বলিলেন, চোখে কি পড়েছে, কেবল জল আসচে। গিরিবালা বড় মুখফোঁড় মেয়ে—বিশেষ নলিনীর সহিত তাহার বেহান পাতান ছিল, সে বলিয়া ফেলিল, এই বয়সে তিনবার, আরও কতবার চোখে কি পড়বে কে জানে! কথাটা গৃহিণী শুনিলেন, সত্যরও কানে গেল। কাল সাধের ফুলশয্যা।
{{ফাঁক}}কোথা হইতে একটা ভারি জমকাল রকম তত্ত্ব আসিয়াছে। বর-কনের ঢাকাই শাড়ি, ধুতি, চাদর ইত্যাদি বড় সুন্দর রকমের। কনের বারাণসী চেলিখানির মত সুন্দর চেলি গ্রামে ইতিপূর্ব্বে কেহ দেখে নাই। সকলেই জিজ্ঞাসা করিতেছে, কোথাকার তত্ত্ব? মা এক-একবার ঢোক গিলিয়া বলিতেছেন, সত্যর কে একজন বন্ধু পাঠিয়েছে।
{{ফাঁক}}গৃহিণী চক্ষের জল চাপিয়া, যথার্থ সংবাদ চাপিয়া হাসিকান্নামিশ্রিত মুখে তত্ত্বের মিষ্টান্নাদি বণ্টন করিলেন।
{{ফাঁক}}সকলে যে যাহার ভাগ লইয়া চলিয়া গেল। যাইবার সময় রাজবালা বলিল, বেশ তত্ত্ব করেচে! নৃত্যকালী বলিল, তা আর হবে না? বড়লোক তত্ত্ব পাঠালে<noinclude>{{c|৩৩৮}}</noinclude>
jybv2vejl155u140q5krnvwu1ra4sjh
1996827
1996818
2026-08-30T14:45:27Z
Nettime Sujata
5470
1996827
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" /></noinclude>{{dhr}}
{{কেন্দ্র|{{larger|'''অষ্টম পরিচ্ছেদ'''}}}}
{{কেন্দ্র|ফুলশয্যা}}
{{ফাঁক}}অমন রূপে-গুণে বৌ, পুত্রের পছন্দ হয় না! গৃহিণীর বড় দুঃখ। অমন চাঁদপানা বৌ লইয়া ঘর করিতে পাইলেন না ভাবিয়া গৃহিণী অত্যন্ত বিমর্ষ হইয়া আছেন। জননীর শত চেষ্টাতেও পুত্রের মত ফিরিল না। এখন আর উপায় কি? ছেলেরই যদি পছন্দ হইল না, তখন কিসের বৌ? ছেলের আদরেই ত বৌয়ের আদর! আর আমারই বা হাত কি? নিজে দেখিয়া শুনিয়া বিবাহ করিলে আমি কি আটকাইতে পারি? ইত্যাদি মৃদু বচন আওড়াইতে আওড়াইতে অভ্যাসানুসারে গৃহিণী বরণ-ডালা সাজাইতে বসিলেন।
{{ফাঁক}}দুই বৎসর পূর্ব্বে হরদেববাবুর মৃত্যু হইয়াছিল। সে কথা স্মরণ হইল—চক্ষে জল আসিল, আবার নলিনীর কথা মনে পড়িলে—জলবেগ আরও বর্দ্ধিত হইল। কি জানি কেমন বৌ আসিবে? কর্ত্তা বাঁচিয়া থাকিলে বোধ হয় পোড়াকপালির এ দুরবস্থা দেখিতে হইত না।
{{ফাঁক}}সত্যেন্দ্র বিবাহ করিয়া আসিল। মা বৌ বরণ করিয়া ঘরে তুলিলেন। আবার পোড়া চোখে জল আসিল। জল মুছিতে মুছিতে তিনি বলিলেন, চোখে কি পড়েছে, কেবল জল আসচে। গিরিবালা বড় মুখফোঁড় মেয়ে—বিশেষ নলিনীর সহিত তাহার বেহান পাতান ছিল, সে বলিয়া ফেলিল, এই বয়সে তিনবার, আরও কতবার চোখে কি পড়বে কে জানে! কথাটা গৃহিণী শুনিলেন, সত্যরও কানে গেল। কাল সাধের ফুলশয্যা।
{{ফাঁক}}কোথা হইতে একটা ভারি জমকাল রকম তত্ত্ব আসিয়াছে। বর-কনের ঢাকাই শাড়ি, ধুতি, চাদর ইত্যাদি বড় সুন্দর রকমের। কনের বারাণসী চেলিখানির মত সুন্দর চেলি গ্রামে ইতিপূর্ব্বে কেহ দেখে নাই। সকলেই জিজ্ঞাসা করিতেছে, কোথাকার তত্ত্ব? মা এক-একবার ঢোক গিলিয়া বলিতেছেন, সত্যর কে একজন বন্ধু পাঠিয়েছে।
{{ফাঁক}}গৃহিণী চক্ষের জল চাপিয়া, যথার্থ সংবাদ চাপিয়া হাসিকান্নামিশ্রিত মুখে তত্ত্বের মিষ্টান্নাদি বণ্টন করিলেন।
{{ফাঁক}}সকলে যে যাহার ভাগ লইয়া চলিয়া গেল। যাইবার সময় রাজবালা বলিল, বেশ তত্ত্ব করেচে! নৃত্যকালী বলিল, তা আর হবে না? বড়লোক তত্ত্ব পাঠালে<noinclude>{{c|৩৩৮}}</noinclude>
0og12wb1r83bb8dsga3u5wnd0sq27be
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৫৩
104
885183
1996819
2026-08-30T14:24:11Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996819
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" />{{কেন্দ্র|বোঝা}}</noinclude>এমনই পাঠায়। ক্রমশ এ কথা চাপা পড়িল। তখন যোগমায়া বলিল, আচ্ছা, আবার বিয়ে করলে কেন? জ্ঞানদা কহিল, কি জানি বোন, অমন রূপে-গুণে বৌ! কে জানে, ও-সব বোঝা যায় না।
{{ফাঁক}}রামমণি জাতিতে নাপিতের কন্যা; তবে অবস্থা ভাল, দেখিতেও মন্দ নহে, এই নাকটি সামান্য চাপা মাত্র। কোন কোন পরশ্রীকাতর লোক তাহার চক্ষেরও দোষ দিত, বলিত, হাতীর চোখের চেয়েও ছোট।
{{ফাঁক}}যাক, এ নিন্দাবাদে আমাদের প্রয়োজন নাই। রামমণি একটু হাসিয়া বলিল, তোমাদের ঘটে যদি বুদ্ধি থাকত তা হলে কি আর ও কথা বল? ছুঁড়ী সদা-সর্ব্বদা যে ফিক্ ফিক্ করে হেসে কথা বলত, তাতেই আমার সন্দেহ হয়েছিল, স্বভাব-চরিত্র মন্দ লো, স্বভাব-চরিত্র মন্দ। না হলে চাকরি-স্থান থেকে তাড়িয়ে দেয়? আবার বে করে? মুখে কিছু না বলিলেও কথাটা অনেকের মতের সহিত মিলিল।
{{ফাঁক}}ইহার দুই-একদিন পরে, গ্রামের প্রায় সকলেই জানিল যে, রামমণি জমিদারের বাটীর গূঢ় রহস্য ভেদ করিয়াছে। নাপিতের মেয়ে না হইলে এত বুদ্ধি কি বামুনকায়েতের মেয়ের হয়? কথাটা অনেকেই স্বীকার করিল।
{{ফাঁক}}এবার গৃহিণীর পালা। এ কথা যখন তাঁহার কানে গেল, তিনি ঘরের কপাট বন্ধ করিয়া একেবারে ভূমে লুটাইয়া পড়িলেন। আমার নলিনী কুলটা! কি জানি কেন গৃহিণী সরলা অপেক্ষা নলিনীকে অধিক ভালবাসিয়াছিলেন। জন্মের মত সেই নলিনীর কপাল ভাঙ্গিয়া গিয়াছে। গৃহিণী মনে মনে ভাবিলেন, সত্য হয় ভালই—না হয় আমি নলিনীকে লইয়া কাশীবাসী হইব। পোড়াকপালির এ-জন্মের মত সব সাধই ত মিটিয়াছে!
{{ফাঁক}}তখন তিনি দ্বার খুলিয়া মাতুকে ডাকিয়া আনিয়া আবার দ্বার বন্ধ করিলেন। মাতুই তত্ত্ব লইয়া আসিয়াছিল।
{{ফাঁক}}দুইজনের চক্ষুজলের বহু বিনিময় হইল। কেমন করিয়া নলিনীর সোনার বর্ণ কালি হইয়াছে, কি অপরাধে সত্যেন্দ্র তাহাকে পায়ে ঠেলিয়াছে, কত কাতর বচনে সে ঠাকুরাণীকে প্রণাম জানাইয়াছে ইত্যাদি বিবরণ মাতঙ্গিনী বেশ করিয়া বিনাইয়া বিনাইয়া চক্ষু মুছিতে মুছিতে গৃহিণীকে শুানাইল। শুনিতে শুনিতে গৃহিণীর পূর্ব্ব স্নেহ শতগুণ বর্দ্ধিত হইয়া উঠিল, পুত্রের উপর দারুণ অভিমান জন্মিল। মনে মনে তিনি ভাবিলেন, আমি কি সত্যর কেহ নহি? সকল কথাই কি আমার উপেক্ষার যোগ্য? আমার কি একটা কথাও থাকিবে না? আমি আবার নলিনীকে গৃহে<noinclude>{{c|৩৩৯}}</noinclude>
djee2h7la0ndkfbq7heqonboc2jbwz0
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৫৪
104
885184
1996820
2026-08-30T14:27:38Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996820
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" />{{কেন্দ্র|শরৎ-সাহিত্য-সংগ্রহ}}</noinclude>আনিব। অমন লক্ষ্মীর কি এ দশা করিতে আছে? সেইদিন সন্ধ্যার সময় জননী পুত্রকে ডাকিয়া বলিলেন, নলিনীকে নিয়ে এস।
{{ফাঁক}}পুত্র ঘাড় নাড়িয়া বলিল, না।
{{ফাঁক}}জননী কাঁদিয়া ফেলিলেন, বলিলেন, ওরে আমার নলিনীর নামে গ্রামময় কলঙ্ক রটচে যে, তুই তার স্বামী—তার মান রাখবিনি।
{{ফাঁক}}কিসের কলঙ্ক?
{{ফাঁক}}অমন করে তাড়িয়ে দিয়ে আর একটা বিয়ে করলে আমি কার মুখ বন্ধ করব?
{{ফাঁক}}মুখ বন্ধ করে কি হবে?
{{ফাঁক}}তবু আনবিনি?
{{ফাঁক}}না।
{{ফাঁক}}জননী অতিশয় ক্রুদ্ধা হইলেন, কিরূপ ক্রুদ্ধা হইতে হইবে এবং তখন কি কথা বলিতে হইবে, তাহা তিনি পূর্ব্ব হইতেই স্থির করিয়া আসিয়াছিলেন, সুতরাং কিছু ভাবিতে হইল না, বলিলেন, তবে কালই আমাকে কাশী পাঠিয়ে দাও। আমি এখানে একদণ্ডও আর থাকতে চাই না।
{{ফাঁক}}সত্য আর সে সত্য নাই। সরলার আদরের ধন, ক্রীড়ার দ্রব্য সখের জিনিস— অন্যমনস্ক, উচ্চমনা, সরল-হৃদয়, প্রফুল্লবদন স্বামী, নলিনীর বহু যত্নের বহু ক্লেশের, মনের মত সত্যেন্দ্রনাথ আর নাই। সেও বুকে পাষাণ চাপাইয়াছে, লজ্জা-সরম হিতাহিত জ্ঞান সকলই হারাইয়াছে—সে অনায়াসে বলিল, তোমার যেখানে ইচ্ছা হয় যাও। আমি আর কা’কেও আনতে পারব না।
{{ফাঁক}}সত্যর মুখে একথা শুনিবেন, মা তাহা স্বপ্নেও ভাবেন নাই—কাঁদিতে কাঁদিতে চলিয়া গেলেন। যাইবার সময় একবার বলিলেন, বৌ আমার কুলটা নয় তা বেশ জেনো। গ্রামের লোকে যা ইচ্ছা হয় বলে, কিন্তু আমি কখনও তা বিশ্বাস করব না।
{{ফাঁক}}পরদিন পিসিমা সত্যেন্দ্রকে ডাকিয়া বলিলেন, তোমার এক বন্ধু তোমাকে তত্ত্ব করেচে, দেখেছ কি?
{{ফাঁক}}সত্য ঘাড় নাড়িল। বলিল, না, কে বন্ধু?
{{ফাঁক}}জানি না। ব’স, কাপড়গুলো নিয়ে আসি।
{{ফাঁক}}অল্পক্ষণ পরে পিসিমা একতাড়া কাপড় লইয়া আসিলেন। সত্য দেখিল, বেশ মূল্যবান বস্ত্র; সে বিস্মিত হইল। কোন্ বন্ধু পাঠাইয়াছে? চেলিখানি বেশ করিয়া দেখিতে দেখিতে সে লক্ষ্য করিল, এক কোণে কি একটা বাঁধা আছে। খুলিয়া দেখিল, একখানা ক্ষুদ্র পত্র।
{{nop}}<noinclude>{{c|৩৪০}}</noinclude>
a7ex82ikhqh7szh0vit7cte7g4bap50
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৫৫
104
885185
1996821
2026-08-30T14:32:47Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996821
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" />{{কেন্দ্র|বোঝা}}</noinclude><section begin="A" />{{ফাঁক}}হস্তাক্ষর দেখিয়া সত্যেন্দ্রর মাথা ঝাঁৎ করিয়া উঠিল।
লেখা আছে—
{{ফাঁক}}ভগিনী, স্নেহের উপহার প্রত্যাখ্যান করিতে নাই। তোমার দিদি যাহা পাঠাইল, গ্রহণ করিও।
{{***|4|7em}}
{{ফাঁক}}সে-রাত্রের ফুলশয্যা সত্যেন্দ্রর পক্ষে কণ্টকশয্যা হইল।
<section end="A" />
<section begin="B" />{{কেন্দ্র|{{larger|'''নবম পরিচ্ছেদ'''}}}}
{{কেন্দ্র|নরেন্দ্রবাবুর পত্র}}
{{ফাঁক}}যুবার অভিমান কোন বালকে দেখিয়াছ কি? সত্যেন্দ্রর ন্যায় অভিমান করিয়া এতটা অনর্থপাত করিতে কোন বালককে দেখিয়াছ কি? ছেলে-বেলায় পুস্তক লইয়া খেলা করিতাম বলিয়া পিতার নিকট শাস্তি ভোগ করিয়াছি। সত্যেন্দ্রনাথ! তুমি হৃদয় লইয়া খেলা করিয়াছ, শাস্তি পাইবে ভয় হয় কি?
{{ফাঁক}}তোমরা যুবা; সমস্ত সংসারটাই তোমাদের সুখের নিকেতন; কিন্তু বল দেখি, তোমাদের কাহারও কি এমন একটা সময় আসে নাই—যখন প্রাণটা বাস্তবিকই ভার বোধ হইয়াছে? যখন জীবনের প্রত্যেক গ্রন্থিগুলি শ্লথ হইয়া ক্লান্তভাবে ঢলিয়া পড়িবার উপক্রম করিয়াছে? না হইয়া থাকে একবার সত্যেন্দ্রনাথকে দেখ। ঘৃণা করিতে ইচ্ছা হয় স্বচ্ছন্দে ঘৃণা কর। ঘৃণা কর, সহানুভূতি প্রকাশ করিও না। ঘৃণা কর, কিছু বলিবে না; দয়া করিও না, মরিয়া যাইবে।
{{ফাঁক}}পাপী যদি মরিয়া যায়, প্রায়শ্চিত্ত ভোগ করিবে কে? সত্যেন্দ্র শ্রান্ত জীবনের প্রত্যেক দিন এক একটা দুঃসহ বোঝা লইয়া আসে। সমস্ত দিন ছটফট করিয়াও যেন সে বোঝা আর নামাইতে পারে না।
{{ফাঁক}}সত্যেন্দ্রর মাঝে মাঝে বোধ হয় যেন সে তাহার অতীত জীবন সমস্ত বিস্মৃত হইয়া গিয়াছে; শুধু কিছুতেই ভুলিতে পারে না তাহার সাধের নলিনী পাবনায় চরিত্রহীনা হইয়াছিল, তাই সে তাহার স্বামী-কর্ত্তৃক পরিত্যক্ত হইয়াছে।
{{ফাঁক}}প্রায় দুই মাস গত হইল, সত্যেন্দ্রনাথের বিবাহ হইয়াছে, আজ একখানা পত্র ও একটী ছোট পার্শ্বেল আসিয়া সত্যেন্দ্রর নিকট পৌছিল।
{{nop}}<section end="B" /><noinclude>{{c|৩৪১}}</noinclude>
7ss4q41uivm9vl67yzux7ais9a64fm5
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৫৭
104
885186
1996822
2026-08-30T14:33:14Z
Nettime Sujata
5470
/* লেখাবিহীন */
1996822
proofread-page
text/x-wiki
<noinclude><pagequality level="0" user="Nettime Sujata" /></noinclude><noinclude></noinclude>
pao581rm9gbrxxpsq3pdbcv5hnr8uvg
1996823
1996822
2026-08-30T14:34:39Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996823
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" /></noinclude>{{dhr}}
{{কেন্দ্র|{{xxxx-larger|'''বাল্য-স্মৃতি'''}}}}<noinclude>{{dhr|30em}}</noinclude>
e452q3gwn2otsn0piqzx8omd1jxegun
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৫৮
104
885187
1996824
2026-08-30T14:34:56Z
Nettime Sujata
5470
/* লেখাবিহীন */
1996824
proofread-page
text/x-wiki
<noinclude><pagequality level="0" user="Nettime Sujata" /></noinclude><noinclude></noinclude>
pao581rm9gbrxxpsq3pdbcv5hnr8uvg
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৫৬
104
885188
1996825
2026-08-30T14:37:37Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996825
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" />{{কেন্দ্র|শরৎ-সাহিত্য-সংগ্রহ}}</noinclude>{{ফাঁক}}পত্রটি নলিনীর দাদা নরেন্দ্রবাবুর, সেখানি এই—
{{ফাঁক}}সত্যেন্দ্রবাবু,
{{ফাঁক}}অতি অনিচ্ছাসত্ত্বেও যে আপনাকে পত্র লিখিতেছি, সে কেবল আমার প্রাণাধিকা ভগিনী নলিনীর জন্য। মৃত্যুর পূর্ব্বে সে অনেক করিয়া বলিয়া গিয়াছে, যেন এই অঙ্গুরীয়টি আপনার নিকট পুনঃ প্রেরিত হয়। আপনার নামাঙ্কিত অঙ্গুরীয়টি পাঠাইলাম। ভগিনীর ইচ্ছা ছিল এইটি আপনার নূতন স্ত্রীকে পরাইয়া দেন, ভরসা করি তাহার আশা পুরিবে। আর মৃত্যুর পূর্ব্বে সে আপনাকে বিশেষ করিয়া অনুনয় করিয়া গিয়াছে, যেন তাহার ছোট ভগিনীটি ক্লেশ না পায়।
{{ডান|শ্রীনরেন্দ্রনাথ{{ফাঁক}}}}
{{ফাঁক}}নলিনীর যখন একটি ছোট পুত্র-সন্তান হইয়া মরিয়া যায়, সত্যেন্দ্রনাথ এই অঙ্গুরীয়টি তাহার হস্তে পরাইয়া দিয়াছিলেন; সে কথা মনে পড়িয়াছিল কি?
{{***|4|7em}}
{{ফাঁক}}সত্যেন্দ্রনাথ আর পাবনায় যান নাই। যে কারণেই হৌক মাতাঠাকুরাণী আর কাশীবাসী হইতে পারিলেন না। নূতন বধুর নাম ছিল বিধু। বিধু বোধ হয় পূর্ব্বজন্মে নলিনীর ভগিনী ছিল।
{{dhr}}
{{কেন্দ্র|{{larger|'''সমাপ্ত'''}}}}<noinclude>{{c|৩৪২}}</noinclude>
s4ti8k5wblkpl26ooe26ot9k55dhglm
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/২৫
104
885189
1996828
2026-08-30T14:48:36Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996828
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" /></noinclude>{{কেন্দ্র|{{x-larger|দ্বিতীয় পরিচ্ছেদ}}}}
বাড়ী আসিলে, নেপালের প্রতি আমার অন্যায় ব্যবহারের কথা শুনিয়া, মা আমাকে যারপরনাই তিরস্কার করিলেন। তারপর কয়েকজন আত্মীয়-স্বজনের সহিত পরামর্শ করিয়া আমাকে কলিকাতায় পাঠান স্থির করিলেন । ১২৮২ সালের জ্যৈষ্ঠ মাসে, ১৫ বৎসর বয়সের সময় আমি মামার সহিত কলিকাতায় আসিয়া উপস্থিত হইলাম ৷ এত বয়স পর্য্যন্ত আমি কখনও বাড়ীর বাহির হই নাই। সেই জন্য ট্রেণে উঠিয়া প্রথম প্রথম আমার খুব কষ্ট হইয়াছিল বটে, কিন্তু কলিকাতায় পৌঁছিবার পরে, দিন কয়েক মামার সঙ্গে চিড়িয়াখানা, যাদুঘর, গড়ের<noinclude></noinclude>
btv8mif6o9dkdmfqo33yck7pjfjtn9j
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/২৬
104
885190
1996832
2026-08-30T14:52:43Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996832
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|২৬|মোহনলাল}}{{rule}}</noinclude>মাঠ, কেল্লা প্রভৃতি দেখিয়া, সে কষ্টের অবসান হইল। রোজ সকালে বিকালে চারিদিক থেকে কত বাঁশী বাজে, কত হারমোনিয়ম্ বাজে, কত গোরার বাজ্না বাজাইয়া, রোস্নাই করিয়া বিয়ে যায়, এই সব আমার কাছে খুব নূতন বোধ হইতে লাগিল। মামা আমাকে একটি বোর্ডিং স্কুলে ভর্ত্তি করিয়া দিয়া, এক সপ্তাহ পরে দেশে ফিরিয়া গেলেন। আমি বোর্ডিংএর ভাল ছেলেদের ত্রিসীমানায়ও ঘেঁসিতাম না। কয়েকটা ওঁচা ছেলে আমার সঙ্গী হইল! আমি তাহাদের সঙ্গে মিশিয়া, লুকাইয়া লুকাইয়া চুরুট খাইতে শিখিলাম। বড় বড় ‘হনি সোপ্’ কিনিয়া গায়ে মাখিতাম, আর প্রত্যহ একঘণ্টা ধরিয়া, ঝাঁঝ্রা কলের নীচে মাথা<noinclude></noinclude>
1fdw6gz5idwp3okpkbrrhp4p0oiv3ep
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/২৭
104
885191
1996834
2026-08-30T14:56:24Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996834
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|২৭|দ্বিতীয় পরিচ্ছেদ}}{{rule}}</noinclude>পাতিয়া আনন্দে স্নান করিতাম। তার পর আর্সি-ব্ৰুশ্ লইয়া, আলবাট্ কাটিয়া চুল ফিরাইতাম। ভাল ভাল চুনট্ করা কামিজ, চিনের বাড়ীর বার্ণিস্ করা হাপ্ জুতা, হাপ্ মোজার উপর গার্টার, এই সব অষ্টপ্রহর পরিয়া বাবুগিরি করিতাম। বোর্ডিংএ আমার স্বেচ্ছাচারিতা ক্রমশঃই বাধা পাইতে লাগিল। বোর্ডিং স্কুলের বাঁধাবাঁধি নিয়মের মধ্যে বাস করা যে কি ভয়ানক কষ্টকর, তাহা মনে হইলে এখনও আমার হৃৎকম্প উপস্থিত হয়। এক মাস যাইতে না যাইতে, আমি পুনঃ পুনঃ সাত বার নিয়মভঙ্গ অপরাধে তিরস্কৃত হই। বোর্ডিংএ আমার সমবয়স্ক আরও কয়েকটি বালক ছিল। তাহাদের মধ্যে রমানাথ দুষ্টামীতে সৰ্ব্বাপেক্ষা পাকা। তাহার<noinclude></noinclude>
95x4grcf839lxf0ip6t5fkt46xvw6yn
রচনা:অঙ্ক পুস্তক
110
885192
1996835
2026-08-30T15:00:17Z
Bodhisattwa
2549
"{{রচনা শীর্ষক}} ;সংস্করণ {{Talikak list|sparql= SELECT ?item WHERE { SERVICE wikibase:label { bd:serviceParam wikibase:language "bn". } ?item wdt:P31 wd:Q3331189; wdt:P629 wd:{{#invoke:Wikibase|id}}; wdt:P407 wd:Q9610. {?item wdt:P1957 [].} UNION {?item wdt:P1433 ?item2. ?item2 wdt:P1957 [].} optional { ?item rdfs:label ?label_ . filter(lang(?label_)="bn") bind(concat(":d:",strafter(str(?item),str(wd:)),"{","{!}..." দিয়ে পাতা তৈরি
1996835
wikitext
text/x-wiki
{{রচনা শীর্ষক}}
;সংস্করণ
{{Talikak list|sparql=
SELECT ?item WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "bn". }
?item wdt:P31 wd:Q3331189;
wdt:P629 wd:{{#invoke:Wikibase|id}};
wdt:P407 wd:Q9610.
{?item wdt:P1957 [].} UNION {?item wdt:P1433 ?item2. ?item2 wdt:P1957 [].}
optional { ?item rdfs:label ?label_ . filter(lang(?label_)="bn") bind(concat(":d:",strafter(str(?item),str(wd:)),"{","{!}","}",?label_) as ?label1) }
optional
{
[] schema:about ?item; schema:isPartOf <https://bn.wikisource.org/>; schema:name ?label__ .
?item rdfs:label ?label_ . filter(lang(?label_)="bn") bind(concat(?label__,"{","{!}","}",?label_) as ?label2)
}
bind(coalesce(?label2,?label1) as ?label)
}
|columns=item,label,P577,P655,P98,P1433,P1957,P123
|row_template=রচনা সংস্করণ সারি
|skip_table=1
|sort=P577
}}
{{Talikak list end}}
35i4rkupcvn2xevs30qu3lsz3v8na19
1996836
1996835
2026-08-30T15:00:45Z
Bodhisattwa
2549
1996836
wikitext
text/x-wiki
{{রচনা শীর্ষক}}
;সংস্করণ
{{Talikak list|sparql=
SELECT ?item WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "bn". }
?item wdt:P31 wd:Q3331189;
wdt:P629 wd:{{#invoke:Wikibase|id}};
wdt:P407 wd:Q9610.
{?item wdt:P1957 [].} UNION {?item wdt:P1433 ?item2. ?item2 wdt:P1957 [].}
optional { ?item rdfs:label ?label_ . filter(lang(?label_)="bn") bind(concat(":d:",strafter(str(?item),str(wd:)),"{","{!}","}",?label_) as ?label1) }
optional
{
[] schema:about ?item; schema:isPartOf <https://bn.wikisource.org/>; schema:name ?label__ .
?item rdfs:label ?label_ . filter(lang(?label_)="bn") bind(concat(?label__,"{","{!}","}",?label_) as ?label2)
}
bind(coalesce(?label2,?label1) as ?label)
}
|columns=item,label,P577,P655,P98,P1433,P1957,P123
|row_template=রচনা সংস্করণ সারি
|skip_table=1
|sort=P577
}}
{{রচনা সংস্করণ সারি|item = [[:d:Q141222785|Q141222785]]|label = ''[[d:Q141222785|অঙ্ক পুস্তক]]''|P577 = 1852|P1957 = https://bn.wikisource.org/wiki/নির্ঘণ্ট:অঙ্ক_পুস্তক_-_রবার্ট_মে_(১৮৫২).pdf}}
{{রচনা সংস্করণ সারি|item = [[:d:Q110245399|Q110245399]]|label = ''[[d:Q110245399|অঙ্ক পুস্তক]]''|P577 = 1857|P1957 = https://bn.wikisource.org/wiki/নির্ঘণ্ট:অঙ্ক_পুস্তক.pdf}}
{{Talikak list end}}
1upqxfw912frcosu9dfwdlljyo43m77
নির্ঘণ্ট:অঙ্ক পুস্তক - রবার্ট মে (১৮৫২).pdf
102
885193
1996837
2026-08-30T15:06:19Z
Bodhisattwa
2549
"" দিয়ে পাতা তৈরি
1996837
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q141222785
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=1
|Progress=X
|Pages=<pagelist />
|Volumes=
|Remarks=
|Notes={{BL-TCIP}}
|Header=
|Footer=
}}
e5wdm08knvobni04obka2kjajfp6mzu
1996838
1996837
2026-08-30T15:06:48Z
Bodhisattwa
2549
1996838
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q141222785
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=6
|Progress=X
|Pages=<pagelist />
|Volumes=
|Remarks=
|Notes={{BL-TCIP}}
|Header=
|Footer=
}}
c5ob5r9xab6tz1nglppbxtfehe3f8n8
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/২৮
104
885194
1996839
2026-08-30T15:17:46Z
BabulB
2144
/* মুদ্রণ সংশোধন করা হয়নি */ "সহিত আমার খুব ভাব হইল । আমাদের পরস্পরের মধ্যে এত ভাব দেখিয়া, হেড্- মাষ্টার মহাশয় নিয়ম করিয়া দিলেন যে, আমরা কেহ কাহারও সহিত কথা বলিতে পারিব না । কিন্তু মাষ্টারের চক্ষে ধ..." দিয়ে পাতা তৈরি
1996839
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|২৮|মোহনলাল}}{{rule}}</noinclude>সহিত আমার খুব ভাব হইল । আমাদের
পরস্পরের মধ্যে এত ভাব দেখিয়া, হেড্-
মাষ্টার মহাশয় নিয়ম করিয়া দিলেন যে,
আমরা কেহ কাহারও সহিত কথা বলিতে
পারিব না । কিন্তু মাষ্টারের চক্ষে ধূলি
দিবার শক্তি আমাদের যথেষ্ট ছিল।
আমরা গোপনে সর্ব্বপ্রকার দুষ্টামীর
মলব আঁটিতে লাগিলাম । লেখাপড়াও
যে কিছুই শিখিলাম না, এমন নয়।
তখন আমি গড় গড় করিয়া—‘রয়েল্
রীডার 'থ্রি'—পড়িতে পারিতাম! এক
টানে আমার নাম লিখিতে পারিতাম ;
অঙ্কশাস্ত্রের জ্ঞানও নিতান্ত কম হয় নাই,
—হড় হড় করিয়া কুড়ির কোটা পর্য্যন্ত
-
নাম্তা মুখস্থ বলিতে পারিতাম ।
এই-
রূপে একটু লেখাপড়া এবং অনেক নূতন<noinclude></noinclude>
dbkq87vc1j9pnkqmkv2846lqx4at131
1996840
1996839
2026-08-30T15:20:55Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996840
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|২৮|মোহনলাল}}{{rule}}</noinclude>সহিত আমার খুব ভাব হইল। আমাদের পরস্পরের মধ্যে এত ভাব দেখিয়া, হেড্মাষ্টার মহাশয় নিয়ম করিয়া দিলেন যে, আমরা কেহ কাহারও সহিত কথা বলিতে পারিব না। কিন্তু মাষ্টারের চক্ষে ধূলি দিবার শক্তি আমাদের যথেষ্ট ছিল। আমরা গোপনে সর্ব্বপ্রকার দুষ্টামীর মৎলব আঁটিতে লাগিলাম। লেখাপড়াও যে কিছুই শিখিলাম না, এমন নয়। তখন আমি গড় গড় করিয়া—‘রয়েল্ রীডার 'থ্রি'—পড়িতে পারিতাম! এক টানে আমার নাম লিখিতে পারিতাম; অঙ্কশাস্ত্রের জ্ঞানও নিতান্ত কম হয় নাই,—হড় হড় করিয়া কুড়ির কোটা পর্য্যন্ত নাম্তা মুখস্থ বলিতে পারিতাম। এইরূপে একটু লেখাপড়া এবং অনেক নূতন<noinclude></noinclude>
eivo4qs55y8umpewlq7lyvwjmrosizl
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/২৯
104
885195
1996841
2026-08-30T15:44:58Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996841
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|২৯|দ্বিতীয় পরিচ্ছেদ}}{{rule}}</noinclude>দুষ্টামী শিখিয়া আমি পূজার ছুটির সময় বাড়ীতে আসিলাম। পূজার কয়দিন বেশ কাটিয়া গেল, মা কিছুই বলিলেন না। কিন্তু বিজয়ার পরদিনই মা আমাকে ডাকিয়া বলিলেন, “মোহনলাল, এই ক’ মাস কল্কাতায় গিয়ে তুমি তোমার শিক্ষকের এবং বোর্ডিংএর ছেলেদের সঙ্গে যেরূপ ব্যবহার ক’রেছ, তা সবই আমি শুনেছি। তোমার মামাকে মাষ্টার মশাই যে চিঠি লিখেছেন, তাও আমি দেখেছি। তুমি এখন আর ছেলেমানুষ নও, বড় হয়েছ; কিন্তু কি দুঃখের বিষয়, এখনও তুমি কুসংসর্গ ছাড়তে পারলে না! যা হ’ক, আমি আর তোমাকে কিছু ব'লতে চাই না। তোমার যা ইচ্ছে তাই করো।” এই বলিয়া মা চক্ষে<noinclude></noinclude>
fk56r01b3us3o0s3ulpy921myissral
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৩০
104
885196
1996842
2026-08-30T15:45:28Z
BabulB
2144
/* মুদ্রণ সংশোধন করা হয়নি */ "কাপড় দিয়া কাঁদিতে লাগিলেন ৷ মাকে কাঁদিতে দেখিয়া আমার বড় কষ্ট হইল ; আমি মনে মনে প্রতিজ্ঞা করিলাম, মা যাহাতে কষ্ট পান এমন কাজ আর কখনও করিব না। আমার ভাবগতিক দেখিয়া মা-ও বো..." দিয়ে পাতা তৈরি
1996842
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|৩০|মোহনলাল}}{{rule}}</noinclude>কাপড় দিয়া কাঁদিতে লাগিলেন ৷ মাকে
কাঁদিতে দেখিয়া আমার বড় কষ্ট হইল ;
আমি মনে মনে প্রতিজ্ঞা করিলাম, মা
যাহাতে কষ্ট পান এমন কাজ আর
কখনও করিব না। আমার ভাবগতিক
দেখিয়া মা-ও বোধ করি ভাবিলেন যে,
আমার সুমতি হইবার উপক্রম হইয়াছে।
তারপর যে কয়দিন বাড়ীতে ছিলাম,
আমার সে কয়দিনের ব্যবহার দেখিয়া মা
যারপরনাই সন্তুষ্ট হইলেন । অবশেষে
ছুটি ফুরাইয়া আসিলে, মা আমাকে
আদর করিয়া, নানা প্রকার সদুপদেশ
দিয়া, আবার কলিকাতায় পাঠাইয়া
দিলেন ৷
ছুটির পর বোর্ডিংএ ফিরিয়া আসিয়া
দেখি, সব যেন
যেন উলট্-পালট্ হইয়া<noinclude></noinclude>
qwedo6ix75ms0xjzsisetgvhj4zsgk9
1996843
1996842
2026-08-30T15:47:46Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996843
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৩০|মোহনলাল}}{{rule}}</noinclude>কাপড় দিয়া কাঁদিতে লাগিলেন। মাকে কাঁদিতে দেখিয়া আমার বড় কষ্ট হইল; আমি মনে মনে প্রতিজ্ঞা করিলাম, মা যাহাতে কষ্ট পান এমন কাজ আর কখনও করিব না। আমার ভাবগতিক দেখিয়া মা-ও বোধ করি ভাবিলেন যে, আমার সুমতি হইবার উপক্রম হইয়াছে। তারপর যে কয়দিন বাড়ীতে ছিলাম, আমার সে কয়দিনের ব্যবহার দেখিয়া মা যারপরনাই সন্তুষ্ট হইলেন। অবশেষে ছুটি ফুরাইয়া আসিলে, মা আমাকে আদর করিয়া, নানা প্রকার সদুপদেশ দিয়া, আবার কলিকাতায় পাঠাইয়া দিলেন।
{{ফাঁক}}ছুটির পর বোর্ডিংএ ফিরিয়া আসিয়া দেখি, সব যেন উলট্-পালট্ হইয়া<noinclude></noinclude>
o8l5jvy07uxvj8bv6cs5e6lxu1qqds6
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৩১
104
885197
1996844
2026-08-30T15:50:47Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996844
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৩১|দ্বিতীয় পরিচ্ছেদ}}{{rule}}</noinclude>গিয়াছে। আমি যে ঘরটাতে থাকিতাম, সে ঘর মেরামত হইতেছে, আমার জন্য অন্য একটা ঘরে স্থান নির্দ্দিষ্ট হইয়াছে। অন্যান্য কয়েক জন বালকের ঘরও বদলাইয়া গিয়াছিল। রমানাথ আমার আসিবার একদিন পূর্ব্বে বোর্ডিংএ ফিরিয়া আসিয়াছিল। আমি যেদিন আসি, সেই দিন বিকালে রমানাথ আসিয়া বলিল, “দেখ, মোহনলাল, আজ একটা মজা ক’রতে হবে, তাতে তোমার সাহায্য চাই। তুমি বোধ হয় জান, ছোট কুঞ্জ রাক্ষসের কথা শুন্লে বড় ভয় পায়। কেহ রাক্ষসের গল্প বলে কুঞ্জ তাহার কাছেও যায় না। আজ রাত্তিরে কুঞ্জকে নিয়ে এক্টু মজা করবো। আমি দুটো রাক্ষসের মুখোস্ কিনে<noinclude></noinclude>
epdzs5gng5pk1yydg1hv1v0qjt03zz4
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৩২
104
885198
1996845
2026-08-30T15:53:31Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996845
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৩২|মোহনলাল}}{{rule}}</noinclude>এনেছি। কুঞ্জ ঘুমুলে, আমরা রাক্ষস সেজে তাকে গিয়ে ভয় দেখাবো। কেমন, তুমি রাজি আছ ত?”
{{ফাঁক}}রমানাথের কথার কোন উত্তর দিবার পূর্ব্বেই মায়ের চক্ষের জলের কথা আমার মনে পড়িল ৷ কিন্তু পরক্ষণেই ভাবিলাম, ইহা ত দুষ্টামী নয়, একটু মজা করা মাত্র। সুতরাং এরূপ করাতে দোষ কি? এই ভাবিয়া রমানাথকে বলিলাম, “আচ্ছা, আমি রাক্ষস সাজবো, কিন্তু ভাই, খুব সাবধান—মাষ্টার মশাই যেন টের না পান।”
{{ফাঁক}}“আরে সে ভাবনা নেই। মাষ্টার মশাই আমাদের কোন্ কাজটাই বা জান্তে পারেন!” এই বলিতে বলিতে রমানাথ অন্যত্র চলিয়া গেল।{{nop}}<noinclude></noinclude>
jlrjg151y38dvrvzp1mxko75yojo8ef
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৩৩
104
885199
1996846
2026-08-30T15:56:16Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996846
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৩৩|দ্বিতীয় পরিচ্ছেদ}}{{rule}}</noinclude>{{ফাঁক}}রাত প্রায় বারটা বাজিলে, ক্লাসের কয়েক জন ছেলে আমাদের দুই জনকে বেশ ভাল করিয়া রাক্ষস সাজাইয়া দিল। পূর্ব্বেই বলিয়াছি, আমাদের বোর্ডিং-গৃহ মেরামত হইতেছিল, বাড়ীতে অনেক খড়ের দড়ী ছিল। সুতরাং আমাদের এক একটি লেজেরও অভাব হইল না। আমরা বিকট মূর্ত্তি ধরিয়া বাতি হস্তে পা টিপিতে টিপিতে ছোট কুঞ্জর ঘরের সম্মুখে গিয়া উপস্থিত হইলাম। রমানাথ চাবি ঘুরাইবামাত্র দরজা খুলিয়া গেল। তখন বাতি নিভাইয়া, ভূতের মত অন্ধকারের সহিত মিশিয়া গিয়া, আমরা ঘরের মধ্যে প্রবেশ করিলাম। তারপর পশ্চিম দিকের জানালা খুলিয়া দিলাম। ঘরে বেশ চাঁদের আলো আসিয়া পড়িল।<noinclude></noinclude>
9wgmwnvujdoaz63k9kul87esg98hlow
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৪১
104
885200
1996847
2026-08-30T15:59:05Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996847
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৪১|দ্বিতীয় পরিচ্ছেদ}}{{rule}}</noinclude>{{ফাঁক}}আমাদের ইচ্ছা পূর্ণ হইতে বড় বেশী দেরী হইল না। পাঁচ ছয় দিন পরে একদিন সামান্য দোষে আমরা পঞ্চাননকে বেশ করিয়া প্রহার করিলাম। হেড্মাষ্টার মহাশয় তাহা শুনিয়া, আমাদের দুই জনকে বোর্ডিং হইতে তাড়াইয়া দিলেন।
{{dhr}}
{{rule|4em}}<noinclude></noinclude>
svj4og6qql2vi3xrjc3c8soz52vzlxi
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৩৪
104
885201
1996849
2026-08-30T16:32:27Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996849
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৩৪|মোহনলাল}}{{rule}}</noinclude>কুঞ্জর বিছানা ঘরের এক কোণে ছিল বলিয়া, কেবল সেই খানে আলো পৌঁছিল না। আমরা কুঞ্জর নাক ডাকার শব্দে বুঝিলাম, সে গাঢ় নিদ্রায় অভিভূত।
{{ফাঁক}}পূর্ব্বের বন্দোবস্ত অনুসারে রমানাথ ও আমি লাফাইয়া একেবারে কুঞ্জর উপরে গিয়া পড়িলাম। সে হাউমাউ করিয়া চীৎকার করিয়া উঠিল। ভয়ে তাহার কণ্ঠের স্বর একেবারে বদ্লাইয়া গিয়াছিল। সে যতই চীৎকার করিতে লাগিল, আমরাও ততই তাহাকে লেজের বাড়ি মারিতে মারিতে, বিকট শব্দ করিয়া বলিলাম, “আমরা রাক্ষস, তোঁকে গিলে খাঁবো!”
{{ফাঁক}}আমাদের কথা শেষ হইতে না<noinclude></noinclude>
nahxv71dt1s7z1hmsf9cn8dk25e5py7
ব্যবহারকারী:Mahir256/leximap.js
2
885202
1996850
2026-08-30T16:34:50Z
Mahir256
1096
"/** * Leximap gadget — highlights words on Wikisource pages by Wikidata lexeme * category, using the Leximap API (https://leximap.toolforge.org). */ ( function () { 'use strict'; if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ) { return; } var css = '.mw-parser-output .lx-w {\n' + ' color: inherit;\n' + '}\n' + '.mw-parser-output.lx-active .lx-w.lx-match,\n' + '.mw-parser-output.lx-active .lx-w.lx-mixed {\n' + ' color: var(..." দিয়ে পাতা তৈরি
1996850
javascript
text/javascript
/**
* Leximap gadget — highlights words on Wikisource pages by Wikidata lexeme
* category, using the Leximap API (https://leximap.toolforge.org).
*/
( function () {
'use strict';
if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ) {
return;
}
var css = '.mw-parser-output .lx-w {\n' +
' color: inherit;\n' +
'}\n' +
'.mw-parser-output.lx-active .lx-w.lx-match,\n' +
'.mw-parser-output.lx-active .lx-w.lx-mixed {\n' +
' color: var( --lx-color, #4b4453 );\n' +
' cursor: pointer;\n' +
' border-bottom: 1px dotted currentColor;\n' +
'}\n' +
'.mw-parser-output.lx-active .lx-w.lx-gap {\n' +
' background: rgba( 255, 212, 0, 0.3 );\n' +
' background: color-mix( in srgb, var( --lx-color, #ffd400 ) 30%, transparent );\n' +
' border-bottom: 2px solid var( --lx-color, #ffd400 );\n' +
' border-radius: 2px;\n' +
'}\n' +
'/* Unmatched words are only clickable when they link out to Wikidata. */\n' +
'body.lx-links-gaps .mw-parser-output.lx-active .lx-w.lx-gap {\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-btn {\n' +
' display: inline-flex;\n' +
' align-items: stretch;\n' +
' height: 2rem;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
' background: #f8f9fa;\n' +
' overflow: hidden;\n' +
' font-size: 0.875rem;\n' +
' line-height: 1;\n' +
' vertical-align: middle;\n' +
'}\n' +
'.lx-btn-main,\n' +
'.lx-btn-caret {\n' +
' display: inline-flex;\n' +
' align-items: center;\n' +
' border: 0;\n' +
' background: transparent;\n' +
' color: #202122;\n' +
' cursor: pointer;\n' +
' font: inherit;\n' +
' padding: 0 0.7rem;\n' +
'}\n' +
'.lx-btn-main:hover,\n' +
'.lx-btn-caret:hover {\n' +
' background: #eef2f7;\n' +
'}\n' +
'.lx-btn-main:focus,\n' +
'.lx-btn-caret:focus {\n' +
' outline: 2px solid #3b5a85;\n' +
' outline-offset: -2px;\n' +
'}\n' +
'.lx-btn-icon {\n' +
' display: inline-flex;\n' +
' align-items: center;\n' +
' margin-right: 0.4rem;\n' +
'}\n' +
'.lx-btn-icon svg {\n' +
' display: block;\n' +
' width: 15px;\n' +
' height: 15px;\n' +
'}\n' +
'.lx-btn-label {\n' +
' white-space: nowrap;\n' +
'}\n' +
'.lx-btn-caret {\n' +
' padding: 0 0.55rem;\n' +
' border-left: 1px solid #a2a9b1;\n' +
' color: #54595d;\n' +
' font-size: 0.7rem;\n' +
'}\n' +
'.lx-btn.lx-indicator-active {\n' +
' border-color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-indicator-active .lx-btn-main {\n' +
' background: #e3ebf3;\n' +
' color: #3b5a85;\n' +
' font-weight: 600;\n' +
'}\n' +
'.lx-btn.lx-indicator-active .lx-btn-caret {\n' +
' border-left-color: #b7c6d8;\n' +
' color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-loading {\n' +
' border-color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-loading .lx-btn-main {\n' +
' color: #3b5a85;\n' +
' font-variant-numeric: tabular-nums;\n' +
'}\n' +
'.lx-btn-main:disabled,\n' +
'.lx-btn-caret:disabled {\n' +
' cursor: progress;\n' +
'}\n' +
'.lx-btn-icon svg {\n' +
' transition: transform 0.6s linear;\n' +
'}\n' +
'.lx-btn.lx-loading .lx-btn-icon svg {\n' +
' animation: lx-spin 1s linear infinite;\n' +
'}\n' +
'@keyframes lx-spin {\n' +
' from { transform: rotate( 0deg ); }\n' +
' to { transform: rotate( 360deg ); }\n' +
'}\n' +
'.lx-progress {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' gap: 0.4rem;\n' +
' margin-top: 0.25rem;\n' +
' font-size: 0.72rem;\n' +
' line-height: 1;\n' +
' color: #54595d;\n' +
'}\n' +
'.lx-progress-bar {\n' +
' flex: 1 1 auto;\n' +
' min-width: 60px;\n' +
' height: 6px;\n' +
' border-radius: 3px;\n' +
' background: #eaecf0;\n' +
' overflow: hidden;\n' +
'}\n' +
'.lx-progress-fill {\n' +
' height: 100%;\n' +
' width: 0;\n' +
' border-radius: 3px;\n' +
' background: #3b5a85;\n' +
' transition: width 0.4s ease, background-color 0.4s ease;\n' +
'}\n' +
'.lx-progress-complete .lx-progress-fill {\n' +
' background: #14866d;\n' +
'}\n' +
'.lx-progress-label {\n' +
' white-space: nowrap;\n' +
' font-variant-numeric: tabular-nums;\n' +
'}\n' +
'.lx-progress-complete .lx-progress-label {\n' +
' color: #14866d;\n' +
' font-weight: 600;\n' +
'}\n' +
'.lx-confetti {\n' +
' position: fixed;\n' +
' inset: 0;\n' +
' pointer-events: none;\n' +
' z-index: 10000;\n' +
' overflow: hidden;\n' +
'}\n' +
'.lx-confetti-piece {\n' +
' position: absolute;\n' +
' top: -12px;\n' +
' width: 8px;\n' +
' height: 12px;\n' +
' border-radius: 1px;\n' +
' opacity: 0.9;\n' +
' animation-name: lx-fall;\n' +
' animation-timing-function: linear;\n' +
' animation-fill-mode: forwards;\n' +
'}\n' +
'@keyframes lx-fall {\n' +
' 0% {\n' +
' transform: translateY( -12px ) rotate( 0deg );\n' +
' opacity: 1;\n' +
' }\n' +
' 100% {\n' +
' transform: translateY( 105vh ) rotate( 720deg );\n' +
' opacity: 0.9;\n' +
' }\n' +
'}\n' +
'@media ( prefers-reduced-motion: reduce ) {\n' +
' .lx-progress-fill {\n' +
' transition: none;\n' +
' }\n' +
'}\n' +
'.lx-panel {\n' +
' position: absolute;\n' +
' z-index: 1000;\n' +
' width: 280px;\n' +
' max-width: calc( 100vw - 1.5rem );\n' +
' max-height: 80vh;\n' +
' overflow-y: auto;\n' +
' background: #fff;\n' +
' border: 1px solid #c8ccd1;\n' +
' border-radius: 6px;\n' +
' box-shadow: 0 4px 16px rgba( 0, 0, 0, 0.15 );\n' +
' padding: 0.85rem 1rem;\n' +
' font-size: 0.85rem;\n' +
' color: #202122;\n' +
'}\n' +
'@media ( max-width: 480px ) {\n' +
' .lx-panel-cat-grid {\n' +
' grid-template-columns: 1fr;\n' +
' }\n' +
'}\n' +
'.lx-panel-count {\n' +
' margin: -0.85rem -1rem 0.7rem;\n' +
' padding: 0.55rem 1rem;\n' +
' border-bottom: 1px solid #eaecf0;\n' +
' background: #f8f9fa;\n' +
' border-radius: 6px 6px 0 0;\n' +
' color: #54595d;\n' +
' font-size: 0.78rem;\n' +
'}\n' +
'.lx-panel-row {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' justify-content: space-between;\n' +
' gap: 0.5rem;\n' +
' margin-bottom: 0.55rem;\n' +
'}\n' +
'.lx-panel-row input[ type="number" ] {\n' +
' width: 4.5rem;\n' +
' padding: 0.15rem 0.35rem;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
'}\n' +
'.lx-panel-row input[ type="checkbox" ] {\n' +
' margin: 0;\n' +
'}\n' +
'.lx-panel-cat-label {\n' +
' margin: 0.6rem 0 0.4rem;\n' +
' padding-top: 0.55rem;\n' +
' border-top: 1px solid #eaecf0;\n' +
' color: #54595d;\n' +
' font-size: 0.78rem;\n' +
'}\n' +
'.lx-panel-cat-grid {\n' +
' display: grid;\n' +
' grid-template-columns: 1fr 1fr;\n' +
' gap: 0.3rem 0.5rem;\n' +
' margin-bottom: 0.7rem;\n' +
'}\n' +
'.lx-panel-cat {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' gap: 0.35rem;\n' +
' font-size: 0.8rem;\n' +
'}\n' +
'.lx-panel-cat input {\n' +
' margin: 0;\n' +
'}\n' +
'.lx-panel-color-row {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' justify-content: space-between;\n' +
' gap: 0.5rem;\n' +
' margin-bottom: 0.3rem;\n' +
' font-size: 0.8rem;\n' +
' text-transform: capitalize;\n' +
'}\n' +
'.lx-panel-color-row input[ type="color" ] {\n' +
' width: 1.8rem;\n' +
' height: 1.4rem;\n' +
' padding: 0;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
' background: none;\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-panel-apply {\n' +
' width: 100%;\n' +
' padding: 0.45rem;\n' +
' border: 1px solid #3b5a85;\n' +
' border-radius: 3px;\n' +
' background: #3b5a85;\n' +
' color: #fff;\n' +
' font-size: 0.85rem;\n' +
' font-weight: 600;\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-panel-apply:hover {\n' +
' background: #2e4568;\n' +
' border-color: #2e4568;\n' +
'}\n' +
'.lx-popover {\n' +
' position: absolute;\n' +
' z-index: 1000;\n' +
' max-width: 320px;\n' +
' max-height: 340px;\n' +
' overflow-y: auto;\n' +
' background: #fff;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 4px;\n' +
' box-shadow: 0 2px 8px rgba( 0, 0, 0, 0.2 );\n' +
' padding: 0.5rem 0.75rem;\n' +
' font-size: 0.9rem;\n' +
'}\n' +
'.lx-popover .lx-entry {\n' +
' border-top: 1px solid #eaecf0;\n' +
' padding: 0.5rem 0;\n' +
'}\n' +
'.lx-popover .lx-entry:first-child {\n' +
' border-top: 0;\n' +
'}\n' +
'.lx-popover .lx-entry a {\n' +
' font-weight: 600;\n' +
' text-decoration: none;\n' +
'}\n' +
'.lx-popover .lx-cat {\n' +
' font-size: 0.8rem;\n' +
' color: #72777d;\n' +
' margin-left: 0.4rem;\n' +
'}\n' +
'.lx-popover .lx-gloss {\n' +
' margin: 0.2rem 0 0;\n' +
' font-size: 0.85rem;\n' +
' color: #54595d;\n' +
'}\n';
var styleEl = document.createElement( 'style' );
styleEl.textContent = css;
document.head.appendChild( styleEl );
var API_BASE = 'https://leximap.toolforge.org';
// Look words up in the wiki's own language (unknown ones fall back to
// English server-side).
var LANG = mw.config.get( 'wgContentLanguage' ) || 'en';
// Wikidata language items, mirroring the server's config.LANGUAGES. Used to
// prefill the language on Wikidata's lexeme creation form.
var LANG_QIDS = {
en: 'Q1860', fr: 'Q150', de: 'Q188', es: 'Q1321', it: 'Q652', pt: 'Q5146',
ru: 'Q7737', nl: 'Q7411', pl: 'Q809', sv: 'Q9027', la: 'Q397'
};
var WORD_RE = /[\p{L}']+/gu;
var BATCH_SIZE = 40;
var CATEGORIES = [
'noun', 'proper noun', 'verb', 'adjective', 'adverb', 'pronoun',
'preposition', 'conjunction', 'determiner', 'definite article',
'indefinite article', 'interjection', 'numeral', 'prefix', 'suffix',
'infinitive marker'
];
// Base palette matches colorize.py's CATEGORY_COLORS; extra categories
// (seen in real Wikidata lexeme data but not in the server's fixed list)
// get sensible defaults here since the gadget colors client-side.
var DEFAULT_CATEGORY_COLORS = {
noun: '#a4161a',
'proper noun': '#8a4b8a',
verb: '#1b7a3d',
adjective: '#5c3a21',
adverb: '#1959b8',
pronoun: '#7d2ae8',
preposition: '#067a6f',
conjunction: '#c2540c',
determiner: '#4b4453',
'definite article': '#5c6b73',
'indefinite article': '#7a8b93',
interjection: '#c2185b',
numeral: '#2a3f8f',
prefix: '#a0785a',
suffix: '#c99a5b',
'infinitive marker': '#3d8b8b'
};
var DEFAULT_GAP_COLOR = '#ffd400'; // bright yellow -- no lexeme match
var DEFAULT_MIXED_COLOR = '#5d6d7e'; // word matches more than one category
var DEFAULT_OTHER_COLOR = '#4b4453'; // category outside the customizable list
var options = {
glosses: 1,
max_glosses: 3,
limit: null, // null = every unique word on the page
categories: null, // null = all
categoryColors: Object.assign( {}, DEFAULT_CATEGORY_COLORS ),
gapColor: DEFAULT_GAP_COLOR,
mixedColor: DEFAULT_MIXED_COLOR,
otherColor: DEFAULT_OTHER_COLOR,
colorsEnabled: 1,
linkGaps: 1, // clicking an unmatched word opens Wikidata's lexeme form
customColors: 0 // 0 = use default palette, hide the color pickers
};
var STORAGE_KEY = 'leximap-gadget-options';
function loadStoredOptions() {
try {
var raw = localStorage.getItem( STORAGE_KEY );
if ( !raw ) {
return;
}
var stored = JSON.parse( raw );
if ( stored && typeof stored === 'object' ) {
Object.assign( options, stored );
if ( options.categoryColors ) {
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS, options.categoryColors );
}
if ( typeof options.limit === 'number' ) {
limitTouched = true;
}
}
} catch ( e ) {
// Storage unavailable (private browsing, disabled, etc.) -- fall back to defaults.
}
}
function saveOptions() {
try {
localStorage.setItem( STORAGE_KEY, JSON.stringify( options ) );
} catch ( e ) {
// Ignore -- persistence is a nicety, not a requirement.
}
}
var active = false;
var loaded = false;
var limitTouched = false;
var wordMap = null; // lowercase word -> { status: 'match'|'mixed'|'gap', categories: [...] }
var $content = null;
var popoverEl = null;
var panelEl = null;
var progressEl = null;
var indicatorWrapper = null;
loadStoredOptions();
function syncGapLinkClass() {
if ( document.body ) {
document.body.classList.toggle( 'lx-links-gaps', !!options.linkGaps );
}
}
syncGapLinkClass();
function colorForWord( info ) {
if ( !options.colorsEnabled ) {
return null;
}
if ( info.status === 'gap' ) {
return options.gapColor;
}
if ( info.status === 'mixed' ) {
return options.mixedColor;
}
var cat = info.categories[ 0 ].toLowerCase();
return options.categoryColors[ cat ] || options.otherColor;
}
function extractWords( root ) {
var text = root.textContent;
var counts = {};
var order = [];
var match;
WORD_RE.lastIndex = 0;
while ( ( match = WORD_RE.exec( text ) ) ) {
var w = match[ 0 ].toLowerCase();
if ( !( w in counts ) ) {
counts[ w ] = 0;
order.push( w );
}
counts[ w ]++;
}
return order
.map( function ( w ) {
return { word: w, count: counts[ w ] };
} )
.sort( function ( a, b ) {
return b.count - a.count;
} );
}
function mergeLookupIntoWordMap( data ) {
Object.keys( data ).forEach( function ( word ) {
var entries = data[ word ];
if ( !entries || !entries.length ) {
wordMap[ word ] = { status: 'gap', lexemes: [], categories: [] };
return;
}
var cats = [];
entries.forEach( function ( e ) {
if ( cats.indexOf( e.category ) === -1 ) {
cats.push( e.category );
}
} );
wordMap[ word ] = {
status: cats.length > 1 ? 'mixed' : 'match',
lexemes: entries,
categories: cats
};
} );
}
function fetchLookupBatch( words ) {
var body = {
words: words,
glosses: options.glosses,
max_glosses: options.max_glosses,
lang: LANG
};
if ( options.categories && options.categories.length ) {
body.categories = options.categories;
}
return fetch( API_BASE + '/api/lookup', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify( body )
} ).then( function ( res ) {
return res.json();
} );
}
function highlightContainer( root ) {
var walker = document.createTreeWalker(
root,
NodeFilter.SHOW_TEXT,
{
acceptNode: function ( node ) {
var parent = node.parentElement;
if ( !parent || parent.closest( 'script, style, .mw-editsection, .lx-w' ) ) {
return NodeFilter.FILTER_REJECT;
}
return NodeFilter.FILTER_ACCEPT;
}
}
);
var textNodes = [];
var node;
while ( ( node = walker.nextNode() ) ) {
textNodes.push( node );
}
textNodes.forEach( function ( textNode ) {
var text = textNode.nodeValue;
WORD_RE.lastIndex = 0;
var match;
var lastIndex = 0;
var frag = null;
while ( ( match = WORD_RE.exec( text ) ) ) {
var word = match[ 0 ];
var lower = word.toLowerCase();
var info = wordMap[ lower ];
if ( !info ) {
continue;
}
if ( !frag ) {
frag = document.createDocumentFragment();
}
frag.appendChild( document.createTextNode( text.slice( lastIndex, match.index ) ) );
var span = document.createElement( 'span' );
span.className = 'lx-w lx-' + info.status;
span.dataset.lxWord = lower;
// Show the category on hover, so it isn't down to color alone.
span.title = info.status === 'gap' ?
( options.linkGaps ?
'No Wikidata lexeme yet -- click to create one' :
'No Wikidata lexeme yet' ) :
info.categories.join( ', ' );
var color = colorForWord( info );
if ( color ) {
span.style.setProperty( '--lx-color', color );
}
span.textContent = word;
frag.appendChild( span );
lastIndex = match.index + word.length;
}
if ( frag ) {
frag.appendChild( document.createTextNode( text.slice( lastIndex ) ) );
textNode.parentNode.replaceChild( frag, textNode );
}
} );
}
function positionNear( el, anchor ) {
// Append first (off-screen) so offsetWidth/offsetHeight are measurable.
document.body.appendChild( el );
var rect = anchor.getBoundingClientRect();
var margin = 8;
var maxLeft = window.scrollX + document.documentElement.clientWidth - el.offsetWidth - margin;
var left = Math.max( window.scrollX + margin, Math.min( window.scrollX + rect.left, maxLeft ) );
var top = window.scrollY + rect.bottom + 4;
var maxTop = window.scrollY + document.documentElement.clientHeight - el.offsetHeight - margin;
if ( top > maxTop && rect.top - el.offsetHeight - 4 > 0 ) {
// Not enough room below -- flip above the anchor instead.
top = window.scrollY + rect.top - el.offsetHeight - 4;
}
el.style.left = left + 'px';
el.style.top = top + 'px';
}
function hidePopover() {
if ( popoverEl ) {
popoverEl.remove();
popoverEl = null;
}
}
function showPopover( span, info ) {
hidePopover();
popoverEl = document.createElement( 'div' );
popoverEl.className = 'lx-popover';
info.lexemes.forEach( function ( l ) {
var entry = document.createElement( 'div' );
entry.className = 'lx-entry';
var link = document.createElement( 'a' );
link.href = 'https://www.wikidata.org/wiki/Lexeme:' + l.lexeme;
link.target = '_blank';
link.rel = 'noopener';
link.textContent = l.lexeme;
entry.appendChild( link );
var cat = document.createElement( 'span' );
cat.className = 'lx-cat';
cat.textContent = ' ' + l.category;
entry.appendChild( cat );
if ( l.glosses && l.glosses.length ) {
var gloss = document.createElement( 'p' );
gloss.className = 'lx-gloss';
gloss.textContent = l.glosses[ 0 ];
entry.appendChild( gloss );
}
popoverEl.appendChild( entry );
} );
positionNear( popoverEl, span );
}
// Wikidata's lexeme form, with the word and its language filled in. The
// category is left blank -- that's the bit the editor has to decide.
function newLexemeUrl( word ) {
return 'https://www.wikidata.org/wiki/Special:NewLexeme?' + new URLSearchParams( {
lemma: word,
'spelling-variant': LANG,
language: LANG_QIDS[ LANG ] || LANG_QIDS.en
} );
}
document.addEventListener( 'click', function ( e ) {
var span = e.target.closest( '.lx-w' );
if ( span && ( span.classList.contains( 'lx-match' ) || span.classList.contains( 'lx-mixed' ) ) ) {
e.preventDefault();
showPopover( span, wordMap[ span.dataset.lxWord ] );
} else if ( span && span.classList.contains( 'lx-gap' ) && options.linkGaps ) {
e.preventDefault();
hidePopover();
window.open( newLexemeUrl( span.dataset.lxWord ), '_blank', 'noopener' );
} else if ( !e.target.closest( '.lx-popover' ) ) {
hidePopover();
}
} );
function unwrapContainer( root ) {
var spans = root.querySelectorAll( '.lx-w' );
spans.forEach( function ( span ) {
var text = document.createTextNode( span.textContent );
span.parentNode.replaceChild( text, span );
} );
}
function repaintColors() {
if ( !$content || !$content.length || !wordMap ) {
return;
}
var spans = $content[ 0 ].querySelectorAll( '.lx-w' );
spans.forEach( function ( span ) {
var info = wordMap[ span.dataset.lxWord ];
if ( !info ) {
return;
}
var color = colorForWord( info );
if ( color ) {
span.style.setProperty( '--lx-color', color );
} else {
span.style.removeProperty( '--lx-color' );
}
if ( info.status === 'gap' ) {
span.title = options.linkGaps ?
'No Wikidata lexeme yet -- click to create one' :
'No Wikidata lexeme yet';
}
} );
syncGapLinkClass();
}
// Share of looked-up words that have a lexeme. No gaps means fully mapped.
function computeStats() {
if ( !wordMap ) {
return null;
}
var total = 0, gaps = 0;
Object.keys( wordMap ).forEach( function ( w ) {
total++;
if ( wordMap[ w ].status === 'gap' ) {
gaps++;
}
} );
if ( !total ) {
return null;
}
var matched = total - gaps;
return { total: total, matched: matched, gaps: gaps, pct: Math.round( matched / total * 100 ) };
}
function updateProgress() {
var stats = ( active && loaded ) ? computeStats() : null;
if ( !stats || !indicatorWrapper ) {
if ( progressEl ) {
progressEl.remove();
progressEl = null;
}
return;
}
if ( !progressEl ) {
progressEl = document.createElement( 'div' );
progressEl.className = 'lx-progress';
var bar = document.createElement( 'div' );
bar.className = 'lx-progress-bar';
var fill = document.createElement( 'div' );
fill.className = 'lx-progress-fill';
bar.appendChild( fill );
var label = document.createElement( 'span' );
label.className = 'lx-progress-label';
progressEl.appendChild( bar );
progressEl.appendChild( label );
indicatorWrapper.appendChild( progressEl );
}
progressEl.querySelector( '.lx-progress-fill' ).style.width = stats.pct + '%';
progressEl.classList.toggle( 'lx-progress-complete', stats.gaps === 0 );
progressEl.querySelector( '.lx-progress-label' ).textContent = stats.gaps === 0 ?
stats.matched + '/' + stats.total + ' mapped ✓' :
stats.pct + '% · ' + stats.gaps + ' to fill';
progressEl.title = stats.matched + ' of ' + stats.total +
' words mapped to Wikidata lexemes' +
( stats.gaps ? ', ' + stats.gaps + ' still unmatched (red)' : '' );
}
function celebrate( stats ) {
mw.notify( 'Page fully mapped — all ' + stats.total + ' words matched! 🎉', { type: 'success' } );
if ( window.matchMedia && window.matchMedia( '(prefers-reduced-motion: reduce)' ).matches ) {
return;
}
var layer = document.createElement( 'div' );
layer.className = 'lx-confetti';
var colors = [ '#a4161a', '#1b7a3d', '#1959b8', '#c2540c', '#7d2ae8', '#ffd400' ];
for ( var i = 0; i < 60; i++ ) {
var piece = document.createElement( 'span' );
piece.className = 'lx-confetti-piece';
piece.style.left = ( Math.random() * 100 ) + 'vw';
piece.style.background = colors[ i % colors.length ];
piece.style.animationDelay = ( Math.random() * 0.4 ) + 's';
piece.style.animationDuration = ( 1.8 + Math.random() * 1.2 ) + 's';
layer.appendChild( piece );
}
document.body.appendChild( layer );
setTimeout( function () {
layer.remove();
}, 3600 );
}
function setActive( isActive, button ) {
active = isActive;
if ( $content ) {
$content.toggleClass( 'lx-active', active );
}
if ( button ) {
button.classList.toggle( 'lx-indicator-active', active );
}
updateProgress();
}
function setButtonBusy( button, isBusy ) {
if ( !button ) {
return;
}
var main = button.querySelector( '.lx-btn-main' );
var caret = button.querySelector( '.lx-btn-caret' );
if ( main ) {
main.disabled = isBusy;
}
if ( caret ) {
caret.disabled = isBusy;
}
button.classList.toggle( 'lx-loading', isBusy );
}
function loadAndHighlight( button ) {
$content = $( '#mw-content-text .mw-parser-output' );
if ( !$content.length ) {
return;
}
var root = $content[ 0 ];
var allWords = extractWords( root );
var limit = ( options.limit === null ) ? Math.min( allWords.length, 150 ) : options.limit;
var toFetch = allWords.slice( 0, limit ).map( function ( w ) {
return w.word;
} );
if ( !toFetch.length ) {
return;
}
wordMap = {};
var labelEl = button ? button.querySelector( '.lx-btn-label' ) : null;
var originalLabel = labelEl ? labelEl.textContent : null;
setButtonBusy( button, true );
var batches = [];
for ( var i = 0; i < toFetch.length; i += BATCH_SIZE ) {
batches.push( toFetch.slice( i, i + BATCH_SIZE ) );
}
var doneCount = 0;
var chain = Promise.resolve();
batches.forEach( function ( batch ) {
chain = chain.then( function () {
return fetchLookupBatch( batch ).then( function ( data ) {
if ( data.error ) {
throw new Error( data.error );
}
mergeLookupIntoWordMap( data.result );
highlightContainer( root );
doneCount += batch.length;
if ( labelEl ) {
labelEl.textContent = doneCount + ' / ' + toFetch.length;
}
if ( active && loaded ) {
updateProgress();
}
} );
} );
} );
chain.then( function () {
if ( labelEl ) {
labelEl.textContent = originalLabel;
}
setButtonBusy( button, false );
loaded = true;
setActive( true, button );
var stats = computeStats();
if ( stats && stats.gaps === 0 ) {
celebrate( stats );
}
} ).catch( function ( err ) {
if ( labelEl ) {
labelEl.textContent = originalLabel;
}
setButtonBusy( button, false );
mw.notify( 'Leximap: request failed (' + err + ')', { type: 'error' } );
} );
}
function toggle( button ) {
if ( !loaded ) {
loadAndHighlight( button );
return;
}
setActive( !active, button );
}
function reload( button ) {
hidePopover();
if ( $content && $content.length ) {
unwrapContainer( $content[ 0 ] );
}
loaded = false;
wordMap = null;
active = false;
if ( button ) {
button.classList.remove( 'lx-indicator-active' );
}
updateProgress();
loadAndHighlight( button );
}
function hidePanel() {
if ( panelEl ) {
panelEl.remove();
panelEl = null;
}
}
function showPanel( anchor, button ) {
if ( panelEl ) {
hidePanel();
return;
}
panelEl = document.createElement( 'div' );
panelEl.className = 'lx-panel';
var root = ( $content && $content.length ) ? $content[ 0 ] : document.querySelector( '#mw-content-text .mw-parser-output' );
var uniqueCount = root ? extractWords( root ).length : null;
if ( uniqueCount !== null ) {
var countLabel = document.createElement( 'div' );
countLabel.className = 'lx-panel-count';
countLabel.textContent = 'This page has ' + uniqueCount + ' unique word' + ( uniqueCount === 1 ? '' : 's' ) + '.';
panelEl.appendChild( countLabel );
if ( !limitTouched ) {
options.limit = Math.min( uniqueCount, 150 );
}
}
function numberField( labelText, value, min, max ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-row';
var span = document.createElement( 'span' );
span.textContent = labelText;
var input = document.createElement( 'input' );
input.type = 'number';
input.min = min;
input.max = max;
input.value = value;
row.appendChild( span );
row.appendChild( input );
panelEl.appendChild( row );
return input;
}
function checkboxField( labelText, checked ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-row';
var input = document.createElement( 'input' );
input.type = 'checkbox';
input.checked = checked;
var span = document.createElement( 'span' );
span.textContent = labelText;
row.appendChild( input );
row.appendChild( span );
panelEl.appendChild( row );
return input;
}
function colorField( labelText, value ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-color-row';
var span = document.createElement( 'span' );
span.textContent = labelText;
var input = document.createElement( 'input' );
input.type = 'color';
input.value = value;
row.appendChild( span );
row.appendChild( input );
panelEl.appendChild( row );
return input;
}
var maxAllowed = uniqueCount !== null ? uniqueCount : 999;
var limitInput = numberField( 'Words to check', options.limit, 0, maxAllowed );
var maxGlossesInput = numberField( 'Glosses per word', options.max_glosses, 0, 10 );
var glossesInput = checkboxField( 'Show glosses', options.glosses === 1 );
var linkGapsInput = checkboxField( 'Link unmatched words to Wikidata', options.linkGaps === 1 );
var colorsEnabledInput = checkboxField( 'Colored highlighting', options.colorsEnabled === 1 );
var customColorsInput = checkboxField( 'Customize colors', options.customColors === 1 );
var catLabel = document.createElement( 'div' );
catLabel.className = 'lx-panel-cat-label';
catLabel.textContent = 'Categories (none checked = all)';
panelEl.appendChild( catLabel );
var catGrid = document.createElement( 'div' );
catGrid.className = 'lx-panel-cat-grid';
var catInputs = {};
CATEGORIES.forEach( function ( cat ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-cat';
var input = document.createElement( 'input' );
input.type = 'checkbox';
input.checked = !!( options.categories && options.categories.indexOf( cat ) !== -1 );
var span = document.createElement( 'span' );
span.textContent = cat;
row.appendChild( input );
row.appendChild( span );
catGrid.appendChild( row );
catInputs[ cat ] = input;
} );
panelEl.appendChild( catGrid );
// Group the pickers so the "Customize colors" checkbox can hide them.
// colorField() appends to panelEl, so point panelEl here while we build.
var colorSection = document.createElement( 'div' );
colorSection.className = 'lx-panel-colors';
var realPanelEl = panelEl;
panelEl = colorSection;
var colorLabel = document.createElement( 'div' );
colorLabel.className = 'lx-panel-cat-label';
colorLabel.textContent = 'Colors';
colorSection.appendChild( colorLabel );
var colorInputs = {};
CATEGORIES.forEach( function ( cat ) {
colorInputs[ cat ] = colorField( cat, options.categoryColors[ cat ] || DEFAULT_OTHER_COLOR );
} );
var mixedColorInput = colorField( 'Multiple categories', options.mixedColor );
var otherColorInput = colorField( 'Other categories', options.otherColor );
var gapColorInput = colorField( 'No match', options.gapColor );
panelEl = realPanelEl;
panelEl.appendChild( colorSection );
function syncColorSection() {
colorSection.style.display = customColorsInput.checked ? '' : 'none';
}
syncColorSection();
customColorsInput.addEventListener( 'change', syncColorSection );
var applyButton = document.createElement( 'button' );
applyButton.type = 'button';
applyButton.className = 'lx-panel-apply';
applyButton.textContent = 'Apply';
applyButton.addEventListener( 'click', function () {
var newLimit = Math.max( 0, Math.min( parseInt( limitInput.value, 10 ) || 0, maxAllowed ) );
var newMaxGlosses = parseInt( maxGlossesInput.value, 10 ) || 0;
var newGlosses = glossesInput.checked ? 1 : 0;
var checkedCats = CATEGORIES.filter( function ( cat ) {
return catInputs[ cat ].checked;
} );
var newCategories = checkedCats.length ? checkedCats : null;
var needsRefetch = loaded && (
newLimit !== options.limit ||
newMaxGlosses !== options.max_glosses ||
newGlosses !== options.glosses ||
JSON.stringify( newCategories ) !== JSON.stringify( options.categories )
);
limitTouched = true;
options.limit = newLimit;
options.max_glosses = newMaxGlosses;
options.glosses = newGlosses;
options.categories = newCategories;
options.linkGaps = linkGapsInput.checked ? 1 : 0;
options.colorsEnabled = colorsEnabledInput.checked ? 1 : 0;
options.customColors = customColorsInput.checked ? 1 : 0;
if ( options.customColors ) {
CATEGORIES.forEach( function ( cat ) {
options.categoryColors[ cat ] = colorInputs[ cat ].value;
} );
options.mixedColor = mixedColorInput.value;
options.otherColor = otherColorInput.value;
options.gapColor = gapColorInput.value;
} else {
// Not customizing -- fall back to the built-in palette.
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS );
options.mixedColor = DEFAULT_MIXED_COLOR;
options.otherColor = DEFAULT_OTHER_COLOR;
options.gapColor = DEFAULT_GAP_COLOR;
}
saveOptions();
syncGapLinkClass();
hidePanel();
if ( needsRefetch ) {
reload( button );
} else if ( loaded ) {
repaintColors();
}
} );
panelEl.appendChild( applyButton );
positionNear( panelEl, anchor );
}
document.addEventListener( 'click', function ( e ) {
if ( panelEl && !e.target.closest( '.lx-panel' ) && !e.target.closest( '.lx-btn-caret' ) ) {
hidePanel();
}
} );
var ICON_SVG = '<svg viewBox="0 0 32 32" aria-hidden="true" focusable="false">' +
'<rect x="3" y="7" width="12" height="5" rx="2.5" fill="#2f6b45"/>' +
'<rect x="17" y="7" width="12" height="5" rx="2.5" fill="#3b5a85"/>' +
'<rect x="3" y="14" width="8" height="5" rx="2.5" fill="#8a651b"/>' +
'<rect x="13" y="14" width="9" height="5" rx="2.5" fill="#b32424"/>' +
'<rect x="24" y="14" width="5" height="5" rx="2.5" fill="#6b4a86"/>' +
'<rect x="3" y="21" width="15" height="5" rx="2.5" fill="#3a7a7a"/>' +
'<rect x="20" y="21" width="9" height="5" rx="2.5" fill="#8b3a3a"/>' +
'</svg>';
function addIndicatorButton() {
var indicators = document.querySelector( '.mw-indicators' );
if ( !indicators ) {
// Fall back to the toolbox if this skin/page has no indicators row.
mw.loader.using( [ 'mediawiki.util' ] ).then( function () {
mw.util.addPortletLink(
'p-tb',
'#',
'Leximap',
'ca-leximap',
'Highlight words by Wikidata lexeme category'
).addEventListener( 'click', function ( e ) {
e.preventDefault();
toggle( null );
} );
} );
return;
}
var wrapper = document.createElement( 'div' );
wrapper.id = 'mw-indicator-lx-leximap';
wrapper.className = 'mw-indicator';
indicatorWrapper = wrapper;
var group = document.createElement( 'div' );
group.className = 'lx-btn';
var main = document.createElement( 'button' );
main.type = 'button';
main.className = 'lx-btn-main';
main.title = 'Highlight words by Wikidata lexeme category';
var icon = document.createElement( 'span' );
icon.className = 'lx-btn-icon';
// Static, trusted markup (matches the Leximap app logo mark) -- not user data.
icon.innerHTML = ICON_SVG;
main.appendChild( icon );
var label = document.createElement( 'span' );
label.className = 'lx-btn-label';
label.textContent = 'Leximap';
main.appendChild( label );
var caret = document.createElement( 'button' );
caret.type = 'button';
caret.className = 'lx-btn-caret';
caret.title = 'Leximap settings';
caret.setAttribute( 'aria-label', 'Leximap settings' );
caret.textContent = '▾';
group.appendChild( main );
group.appendChild( caret );
wrapper.appendChild( group );
main.addEventListener( 'click', function ( e ) {
e.preventDefault();
toggle( group );
} );
caret.addEventListener( 'click', function ( e ) {
e.preventDefault();
e.stopPropagation();
showPanel( group, group );
} );
indicators.appendChild( wrapper );
}
// Take the default palette from the backend so we're not keeping our own
// copy. Anyone who's customized their colors keeps them.
function applyServerPalette( p ) {
if ( !p || typeof p !== 'object' || p.error ) {
return;
}
if ( p.categoryColors && typeof p.categoryColors === 'object' ) {
Object.assign( DEFAULT_CATEGORY_COLORS, p.categoryColors );
}
if ( p.gapColor ) {
DEFAULT_GAP_COLOR = p.gapColor;
}
if ( p.mixedColor ) {
DEFAULT_MIXED_COLOR = p.mixedColor;
}
if ( p.otherColor ) {
DEFAULT_OTHER_COLOR = p.otherColor;
}
if ( !options.customColors ) {
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS );
options.gapColor = DEFAULT_GAP_COLOR;
options.mixedColor = DEFAULT_MIXED_COLOR;
options.otherColor = DEFAULT_OTHER_COLOR;
repaintColors();
}
}
function fetchPalette() {
fetch( API_BASE + '/api/palette' )
.then( function ( res ) {
return res.json();
} )
.then( applyServerPalette )
.catch( function () {
// Offline / API down -- keep the built-in defaults.
} );
}
fetchPalette();
addIndicatorButton();
}() );
4f9lrk4wyybaadaxknaupq0ymut7vhz
1996855
1996850
2026-08-30T16:38:36Z
Mahir256
1096
1996855
javascript
text/javascript
/**
* Leximap gadget — highlights words on Wikisource pages by Wikidata lexeme
* category, using the Leximap API (https://leximap.toolforge.org).
*/
( function () {
'use strict';
if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ) {
return;
}
var css = '.mw-parser-output .lx-w {\n' +
' color: inherit;\n' +
'}\n' +
'.mw-parser-output.lx-active .lx-w.lx-match,\n' +
'.mw-parser-output.lx-active .lx-w.lx-mixed {\n' +
' color: var( --lx-color, #4b4453 );\n' +
' cursor: pointer;\n' +
' border-bottom: 1px dotted currentColor;\n' +
'}\n' +
'.mw-parser-output.lx-active .lx-w.lx-gap {\n' +
' background: rgba( 255, 212, 0, 0.3 );\n' +
' background: color-mix( in srgb, var( --lx-color, #ffd400 ) 30%, transparent );\n' +
' border-bottom: 2px solid var( --lx-color, #ffd400 );\n' +
' border-radius: 2px;\n' +
'}\n' +
'/* Unmatched words are only clickable when they link out to Wikidata. */\n' +
'body.lx-links-gaps .mw-parser-output.lx-active .lx-w.lx-gap {\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-btn {\n' +
' display: inline-flex;\n' +
' align-items: stretch;\n' +
' height: 2rem;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
' background: #f8f9fa;\n' +
' overflow: hidden;\n' +
' font-size: 0.875rem;\n' +
' line-height: 1;\n' +
' vertical-align: middle;\n' +
'}\n' +
'.lx-btn-main,\n' +
'.lx-btn-caret {\n' +
' display: inline-flex;\n' +
' align-items: center;\n' +
' border: 0;\n' +
' background: transparent;\n' +
' color: #202122;\n' +
' cursor: pointer;\n' +
' font: inherit;\n' +
' padding: 0 0.7rem;\n' +
'}\n' +
'.lx-btn-main:hover,\n' +
'.lx-btn-caret:hover {\n' +
' background: #eef2f7;\n' +
'}\n' +
'.lx-btn-main:focus,\n' +
'.lx-btn-caret:focus {\n' +
' outline: 2px solid #3b5a85;\n' +
' outline-offset: -2px;\n' +
'}\n' +
'.lx-btn-icon {\n' +
' display: inline-flex;\n' +
' align-items: center;\n' +
' margin-right: 0.4rem;\n' +
'}\n' +
'.lx-btn-icon svg {\n' +
' display: block;\n' +
' width: 15px;\n' +
' height: 15px;\n' +
'}\n' +
'.lx-btn-label {\n' +
' white-space: nowrap;\n' +
'}\n' +
'.lx-btn-caret {\n' +
' padding: 0 0.55rem;\n' +
' border-left: 1px solid #a2a9b1;\n' +
' color: #54595d;\n' +
' font-size: 0.7rem;\n' +
'}\n' +
'.lx-btn.lx-indicator-active {\n' +
' border-color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-indicator-active .lx-btn-main {\n' +
' background: #e3ebf3;\n' +
' color: #3b5a85;\n' +
' font-weight: 600;\n' +
'}\n' +
'.lx-btn.lx-indicator-active .lx-btn-caret {\n' +
' border-left-color: #b7c6d8;\n' +
' color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-loading {\n' +
' border-color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-loading .lx-btn-main {\n' +
' color: #3b5a85;\n' +
' font-variant-numeric: tabular-nums;\n' +
'}\n' +
'.lx-btn-main:disabled,\n' +
'.lx-btn-caret:disabled {\n' +
' cursor: progress;\n' +
'}\n' +
'.lx-btn-icon svg {\n' +
' transition: transform 0.6s linear;\n' +
'}\n' +
'.lx-btn.lx-loading .lx-btn-icon svg {\n' +
' animation: lx-spin 1s linear infinite;\n' +
'}\n' +
'@keyframes lx-spin {\n' +
' from { transform: rotate( 0deg ); }\n' +
' to { transform: rotate( 360deg ); }\n' +
'}\n' +
'.lx-progress {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' gap: 0.4rem;\n' +
' margin-top: 0.25rem;\n' +
' font-size: 0.72rem;\n' +
' line-height: 1;\n' +
' color: #54595d;\n' +
'}\n' +
'.lx-progress-bar {\n' +
' flex: 1 1 auto;\n' +
' min-width: 60px;\n' +
' height: 6px;\n' +
' border-radius: 3px;\n' +
' background: #eaecf0;\n' +
' overflow: hidden;\n' +
'}\n' +
'.lx-progress-fill {\n' +
' height: 100%;\n' +
' width: 0;\n' +
' border-radius: 3px;\n' +
' background: #3b5a85;\n' +
' transition: width 0.4s ease, background-color 0.4s ease;\n' +
'}\n' +
'.lx-progress-complete .lx-progress-fill {\n' +
' background: #14866d;\n' +
'}\n' +
'.lx-progress-label {\n' +
' white-space: nowrap;\n' +
' font-variant-numeric: tabular-nums;\n' +
'}\n' +
'.lx-progress-complete .lx-progress-label {\n' +
' color: #14866d;\n' +
' font-weight: 600;\n' +
'}\n' +
'.lx-confetti {\n' +
' position: fixed;\n' +
' inset: 0;\n' +
' pointer-events: none;\n' +
' z-index: 10000;\n' +
' overflow: hidden;\n' +
'}\n' +
'.lx-confetti-piece {\n' +
' position: absolute;\n' +
' top: -12px;\n' +
' width: 8px;\n' +
' height: 12px;\n' +
' border-radius: 1px;\n' +
' opacity: 0.9;\n' +
' animation-name: lx-fall;\n' +
' animation-timing-function: linear;\n' +
' animation-fill-mode: forwards;\n' +
'}\n' +
'@keyframes lx-fall {\n' +
' 0% {\n' +
' transform: translateY( -12px ) rotate( 0deg );\n' +
' opacity: 1;\n' +
' }\n' +
' 100% {\n' +
' transform: translateY( 105vh ) rotate( 720deg );\n' +
' opacity: 0.9;\n' +
' }\n' +
'}\n' +
'@media ( prefers-reduced-motion: reduce ) {\n' +
' .lx-progress-fill {\n' +
' transition: none;\n' +
' }\n' +
'}\n' +
'.lx-panel {\n' +
' position: absolute;\n' +
' z-index: 1000;\n' +
' width: 280px;\n' +
' max-width: calc( 100vw - 1.5rem );\n' +
' max-height: 80vh;\n' +
' overflow-y: auto;\n' +
' background: #fff;\n' +
' border: 1px solid #c8ccd1;\n' +
' border-radius: 6px;\n' +
' box-shadow: 0 4px 16px rgba( 0, 0, 0, 0.15 );\n' +
' padding: 0.85rem 1rem;\n' +
' font-size: 0.85rem;\n' +
' color: #202122;\n' +
'}\n' +
'@media ( max-width: 480px ) {\n' +
' .lx-panel-cat-grid {\n' +
' grid-template-columns: 1fr;\n' +
' }\n' +
'}\n' +
'.lx-panel-count {\n' +
' margin: -0.85rem -1rem 0.7rem;\n' +
' padding: 0.55rem 1rem;\n' +
' border-bottom: 1px solid #eaecf0;\n' +
' background: #f8f9fa;\n' +
' border-radius: 6px 6px 0 0;\n' +
' color: #54595d;\n' +
' font-size: 0.78rem;\n' +
'}\n' +
'.lx-panel-row {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' justify-content: space-between;\n' +
' gap: 0.5rem;\n' +
' margin-bottom: 0.55rem;\n' +
'}\n' +
'.lx-panel-row input[ type="number" ] {\n' +
' width: 4.5rem;\n' +
' padding: 0.15rem 0.35rem;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
'}\n' +
'.lx-panel-row input[ type="checkbox" ] {\n' +
' margin: 0;\n' +
'}\n' +
'.lx-panel-cat-label {\n' +
' margin: 0.6rem 0 0.4rem;\n' +
' padding-top: 0.55rem;\n' +
' border-top: 1px solid #eaecf0;\n' +
' color: #54595d;\n' +
' font-size: 0.78rem;\n' +
'}\n' +
'.lx-panel-cat-grid {\n' +
' display: grid;\n' +
' grid-template-columns: 1fr 1fr;\n' +
' gap: 0.3rem 0.5rem;\n' +
' margin-bottom: 0.7rem;\n' +
'}\n' +
'.lx-panel-cat {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' gap: 0.35rem;\n' +
' font-size: 0.8rem;\n' +
'}\n' +
'.lx-panel-cat input {\n' +
' margin: 0;\n' +
'}\n' +
'.lx-panel-color-row {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' justify-content: space-between;\n' +
' gap: 0.5rem;\n' +
' margin-bottom: 0.3rem;\n' +
' font-size: 0.8rem;\n' +
' text-transform: capitalize;\n' +
'}\n' +
'.lx-panel-color-row input[ type="color" ] {\n' +
' width: 1.8rem;\n' +
' height: 1.4rem;\n' +
' padding: 0;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
' background: none;\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-panel-apply {\n' +
' width: 100%;\n' +
' padding: 0.45rem;\n' +
' border: 1px solid #3b5a85;\n' +
' border-radius: 3px;\n' +
' background: #3b5a85;\n' +
' color: #fff;\n' +
' font-size: 0.85rem;\n' +
' font-weight: 600;\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-panel-apply:hover {\n' +
' background: #2e4568;\n' +
' border-color: #2e4568;\n' +
'}\n' +
'.lx-popover {\n' +
' position: absolute;\n' +
' z-index: 1000;\n' +
' max-width: 320px;\n' +
' max-height: 340px;\n' +
' overflow-y: auto;\n' +
' background: #fff;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 4px;\n' +
' box-shadow: 0 2px 8px rgba( 0, 0, 0, 0.2 );\n' +
' padding: 0.5rem 0.75rem;\n' +
' font-size: 0.9rem;\n' +
'}\n' +
'.lx-popover .lx-entry {\n' +
' border-top: 1px solid #eaecf0;\n' +
' padding: 0.5rem 0;\n' +
'}\n' +
'.lx-popover .lx-entry:first-child {\n' +
' border-top: 0;\n' +
'}\n' +
'.lx-popover .lx-entry a {\n' +
' font-weight: 600;\n' +
' text-decoration: none;\n' +
'}\n' +
'.lx-popover .lx-cat {\n' +
' font-size: 0.8rem;\n' +
' color: #72777d;\n' +
' margin-left: 0.4rem;\n' +
'}\n' +
'.lx-popover .lx-gloss {\n' +
' margin: 0.2rem 0 0;\n' +
' font-size: 0.85rem;\n' +
' color: #54595d;\n' +
'}\n';
var styleEl = document.createElement( 'style' );
styleEl.textContent = css;
document.head.appendChild( styleEl );
var API_BASE = 'https://leximap.toolforge.org';
// Look words up in the wiki's own language (unknown ones fall back to
// English server-side).
var LANG = mw.config.get( 'wgContentLanguage' ) || 'en';
// Wikidata language items, mirroring the server's config.LANGUAGES. Used to
// prefill the language on Wikidata's lexeme creation form.
var LANG_QIDS = {
en: 'Q1860', fr: 'Q150', de: 'Q188', es: 'Q1321', it: 'Q652', pt: 'Q5146',
ru: 'Q7737', nl: 'Q7411', pl: 'Q809', sv: 'Q9027', la: 'Q397'
};
var WORD_RE = /[\p{L}']+/gu;
var BATCH_SIZE = 40;
var CATEGORIES = [
"Q1084", "Q147276", "Q24905", "Q34698", "Q380057", "Q36224", "Q4833830", "Q36484", "Q576271", "Q2865743", "Q3813849", "Q103184", "Q83034", "Q63116", "Q134830", "Q102047", "Q10535365"
];
// Base palette matches colorize.py's CATEGORY_COLORS; extra categories
// (seen in real Wikidata lexeme data but not in the server's fixed list)
// get sensible defaults here since the gadget colors client-side.
var DEFAULT_CATEGORY_COLORS = {
"Q1084": "#a4161a", # noun
"Q147276": "#8a4b8a", # proper noun
"Q24905": "#1b7a3d", # verb
"Q34698": "#5c3a21", # adjective
"Q380057": "#1959b8", # adverb
"Q36224": "#7d2ae8", # pronoun
"Q4833830": "#067a6f", # preposition
"Q36484": "#c2540c", # conjunction
"Q576271": "#4b4453", # determiner
"Q2865743": "#5c6b73", # definite article
"Q3813849": "#7a8b93", # indefinite article
"Q103184": "#4b4453", # article
"Q83034": "#c2185b", # interjection
"Q63116": "#2a3f8f", # numeral
"Q134830": "#a0785a", # prefix
"Q102047": "#c99a5b", # suffix
"Q10535365": "#3d8b8b", # infinitive marker
};
var DEFAULT_GAP_COLOR = '#ffd400'; // bright yellow -- no lexeme match
var DEFAULT_MIXED_COLOR = '#5d6d7e'; // word matches more than one category
var DEFAULT_OTHER_COLOR = '#4b4453'; // category outside the customizable list
var options = {
glosses: 1,
max_glosses: 3,
limit: null, // null = every unique word on the page
categories: null, // null = all
categoryColors: Object.assign( {}, DEFAULT_CATEGORY_COLORS ),
gapColor: DEFAULT_GAP_COLOR,
mixedColor: DEFAULT_MIXED_COLOR,
otherColor: DEFAULT_OTHER_COLOR,
colorsEnabled: 1,
linkGaps: 1, // clicking an unmatched word opens Wikidata's lexeme form
customColors: 0 // 0 = use default palette, hide the color pickers
};
var STORAGE_KEY = 'leximap-gadget-options';
function loadStoredOptions() {
try {
var raw = localStorage.getItem( STORAGE_KEY );
if ( !raw ) {
return;
}
var stored = JSON.parse( raw );
if ( stored && typeof stored === 'object' ) {
Object.assign( options, stored );
if ( options.categoryColors ) {
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS, options.categoryColors );
}
if ( typeof options.limit === 'number' ) {
limitTouched = true;
}
}
} catch ( e ) {
// Storage unavailable (private browsing, disabled, etc.) -- fall back to defaults.
}
}
function saveOptions() {
try {
localStorage.setItem( STORAGE_KEY, JSON.stringify( options ) );
} catch ( e ) {
// Ignore -- persistence is a nicety, not a requirement.
}
}
var active = false;
var loaded = false;
var limitTouched = false;
var wordMap = null; // lowercase word -> { status: 'match'|'mixed'|'gap', categories: [...] }
var $content = null;
var popoverEl = null;
var panelEl = null;
var progressEl = null;
var indicatorWrapper = null;
loadStoredOptions();
function syncGapLinkClass() {
if ( document.body ) {
document.body.classList.toggle( 'lx-links-gaps', !!options.linkGaps );
}
}
syncGapLinkClass();
function colorForWord( info ) {
if ( !options.colorsEnabled ) {
return null;
}
if ( info.status === 'gap' ) {
return options.gapColor;
}
if ( info.status === 'mixed' ) {
return options.mixedColor;
}
var cat = info.categories[ 0 ].toLowerCase();
return options.categoryColors[ cat ] || options.otherColor;
}
function extractWords( root ) {
var text = root.textContent;
var counts = {};
var order = [];
var match;
WORD_RE.lastIndex = 0;
while ( ( match = WORD_RE.exec( text ) ) ) {
var w = match[ 0 ].toLowerCase();
if ( !( w in counts ) ) {
counts[ w ] = 0;
order.push( w );
}
counts[ w ]++;
}
return order
.map( function ( w ) {
return { word: w, count: counts[ w ] };
} )
.sort( function ( a, b ) {
return b.count - a.count;
} );
}
function mergeLookupIntoWordMap( data ) {
Object.keys( data ).forEach( function ( word ) {
var entries = data[ word ];
if ( !entries || !entries.length ) {
wordMap[ word ] = { status: 'gap', lexemes: [], categories: [] };
return;
}
var cats = [];
entries.forEach( function ( e ) {
if ( cats.indexOf( e.category ) === -1 ) {
cats.push( e.category );
}
} );
wordMap[ word ] = {
status: cats.length > 1 ? 'mixed' : 'match',
lexemes: entries,
categories: cats
};
} );
}
function fetchLookupBatch( words ) {
var body = {
words: words,
glosses: options.glosses,
max_glosses: options.max_glosses,
lang: LANG
};
if ( options.categories && options.categories.length ) {
body.categories = options.categories;
}
return fetch( API_BASE + '/api/lookup', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify( body )
} ).then( function ( res ) {
return res.json();
} );
}
function highlightContainer( root ) {
var walker = document.createTreeWalker(
root,
NodeFilter.SHOW_TEXT,
{
acceptNode: function ( node ) {
var parent = node.parentElement;
if ( !parent || parent.closest( 'script, style, .mw-editsection, .lx-w' ) ) {
return NodeFilter.FILTER_REJECT;
}
return NodeFilter.FILTER_ACCEPT;
}
}
);
var textNodes = [];
var node;
while ( ( node = walker.nextNode() ) ) {
textNodes.push( node );
}
textNodes.forEach( function ( textNode ) {
var text = textNode.nodeValue;
WORD_RE.lastIndex = 0;
var match;
var lastIndex = 0;
var frag = null;
while ( ( match = WORD_RE.exec( text ) ) ) {
var word = match[ 0 ];
var lower = word.toLowerCase();
var info = wordMap[ lower ];
if ( !info ) {
continue;
}
if ( !frag ) {
frag = document.createDocumentFragment();
}
frag.appendChild( document.createTextNode( text.slice( lastIndex, match.index ) ) );
var span = document.createElement( 'span' );
span.className = 'lx-w lx-' + info.status;
span.dataset.lxWord = lower;
// Show the category on hover, so it isn't down to color alone.
span.title = info.status === 'gap' ?
( options.linkGaps ?
'No Wikidata lexeme yet -- click to create one' :
'No Wikidata lexeme yet' ) :
info.categories.join( ', ' );
var color = colorForWord( info );
if ( color ) {
span.style.setProperty( '--lx-color', color );
}
span.textContent = word;
frag.appendChild( span );
lastIndex = match.index + word.length;
}
if ( frag ) {
frag.appendChild( document.createTextNode( text.slice( lastIndex ) ) );
textNode.parentNode.replaceChild( frag, textNode );
}
} );
}
function positionNear( el, anchor ) {
// Append first (off-screen) so offsetWidth/offsetHeight are measurable.
document.body.appendChild( el );
var rect = anchor.getBoundingClientRect();
var margin = 8;
var maxLeft = window.scrollX + document.documentElement.clientWidth - el.offsetWidth - margin;
var left = Math.max( window.scrollX + margin, Math.min( window.scrollX + rect.left, maxLeft ) );
var top = window.scrollY + rect.bottom + 4;
var maxTop = window.scrollY + document.documentElement.clientHeight - el.offsetHeight - margin;
if ( top > maxTop && rect.top - el.offsetHeight - 4 > 0 ) {
// Not enough room below -- flip above the anchor instead.
top = window.scrollY + rect.top - el.offsetHeight - 4;
}
el.style.left = left + 'px';
el.style.top = top + 'px';
}
function hidePopover() {
if ( popoverEl ) {
popoverEl.remove();
popoverEl = null;
}
}
function showPopover( span, info ) {
hidePopover();
popoverEl = document.createElement( 'div' );
popoverEl.className = 'lx-popover';
info.lexemes.forEach( function ( l ) {
var entry = document.createElement( 'div' );
entry.className = 'lx-entry';
var link = document.createElement( 'a' );
link.href = 'https://www.wikidata.org/wiki/Lexeme:' + l.lexeme;
link.target = '_blank';
link.rel = 'noopener';
link.textContent = l.lexeme;
entry.appendChild( link );
var cat = document.createElement( 'span' );
cat.className = 'lx-cat';
cat.textContent = ' ' + l.category;
entry.appendChild( cat );
if ( l.glosses && l.glosses.length ) {
var gloss = document.createElement( 'p' );
gloss.className = 'lx-gloss';
gloss.textContent = l.glosses[ 0 ];
entry.appendChild( gloss );
}
popoverEl.appendChild( entry );
} );
positionNear( popoverEl, span );
}
// Wikidata's lexeme form, with the word and its language filled in. The
// category is left blank -- that's the bit the editor has to decide.
function newLexemeUrl( word ) {
return 'https://www.wikidata.org/wiki/Special:NewLexeme?' + new URLSearchParams( {
lemma: word,
'spelling-variant': LANG,
language: LANG_QIDS[ LANG ] || LANG_QIDS.en
} );
}
document.addEventListener( 'click', function ( e ) {
var span = e.target.closest( '.lx-w' );
if ( span && ( span.classList.contains( 'lx-match' ) || span.classList.contains( 'lx-mixed' ) ) ) {
e.preventDefault();
showPopover( span, wordMap[ span.dataset.lxWord ] );
} else if ( span && span.classList.contains( 'lx-gap' ) && options.linkGaps ) {
e.preventDefault();
hidePopover();
window.open( newLexemeUrl( span.dataset.lxWord ), '_blank', 'noopener' );
} else if ( !e.target.closest( '.lx-popover' ) ) {
hidePopover();
}
} );
function unwrapContainer( root ) {
var spans = root.querySelectorAll( '.lx-w' );
spans.forEach( function ( span ) {
var text = document.createTextNode( span.textContent );
span.parentNode.replaceChild( text, span );
} );
}
function repaintColors() {
if ( !$content || !$content.length || !wordMap ) {
return;
}
var spans = $content[ 0 ].querySelectorAll( '.lx-w' );
spans.forEach( function ( span ) {
var info = wordMap[ span.dataset.lxWord ];
if ( !info ) {
return;
}
var color = colorForWord( info );
if ( color ) {
span.style.setProperty( '--lx-color', color );
} else {
span.style.removeProperty( '--lx-color' );
}
if ( info.status === 'gap' ) {
span.title = options.linkGaps ?
'No Wikidata lexeme yet -- click to create one' :
'No Wikidata lexeme yet';
}
} );
syncGapLinkClass();
}
// Share of looked-up words that have a lexeme. No gaps means fully mapped.
function computeStats() {
if ( !wordMap ) {
return null;
}
var total = 0, gaps = 0;
Object.keys( wordMap ).forEach( function ( w ) {
total++;
if ( wordMap[ w ].status === 'gap' ) {
gaps++;
}
} );
if ( !total ) {
return null;
}
var matched = total - gaps;
return { total: total, matched: matched, gaps: gaps, pct: Math.round( matched / total * 100 ) };
}
function updateProgress() {
var stats = ( active && loaded ) ? computeStats() : null;
if ( !stats || !indicatorWrapper ) {
if ( progressEl ) {
progressEl.remove();
progressEl = null;
}
return;
}
if ( !progressEl ) {
progressEl = document.createElement( 'div' );
progressEl.className = 'lx-progress';
var bar = document.createElement( 'div' );
bar.className = 'lx-progress-bar';
var fill = document.createElement( 'div' );
fill.className = 'lx-progress-fill';
bar.appendChild( fill );
var label = document.createElement( 'span' );
label.className = 'lx-progress-label';
progressEl.appendChild( bar );
progressEl.appendChild( label );
indicatorWrapper.appendChild( progressEl );
}
progressEl.querySelector( '.lx-progress-fill' ).style.width = stats.pct + '%';
progressEl.classList.toggle( 'lx-progress-complete', stats.gaps === 0 );
progressEl.querySelector( '.lx-progress-label' ).textContent = stats.gaps === 0 ?
stats.matched + '/' + stats.total + ' mapped ✓' :
stats.pct + '% · ' + stats.gaps + ' to fill';
progressEl.title = stats.matched + ' of ' + stats.total +
' words mapped to Wikidata lexemes' +
( stats.gaps ? ', ' + stats.gaps + ' still unmatched (red)' : '' );
}
function celebrate( stats ) {
mw.notify( 'Page fully mapped — all ' + stats.total + ' words matched! 🎉', { type: 'success' } );
if ( window.matchMedia && window.matchMedia( '(prefers-reduced-motion: reduce)' ).matches ) {
return;
}
var layer = document.createElement( 'div' );
layer.className = 'lx-confetti';
var colors = [ '#a4161a', '#1b7a3d', '#1959b8', '#c2540c', '#7d2ae8', '#ffd400' ];
for ( var i = 0; i < 60; i++ ) {
var piece = document.createElement( 'span' );
piece.className = 'lx-confetti-piece';
piece.style.left = ( Math.random() * 100 ) + 'vw';
piece.style.background = colors[ i % colors.length ];
piece.style.animationDelay = ( Math.random() * 0.4 ) + 's';
piece.style.animationDuration = ( 1.8 + Math.random() * 1.2 ) + 's';
layer.appendChild( piece );
}
document.body.appendChild( layer );
setTimeout( function () {
layer.remove();
}, 3600 );
}
function setActive( isActive, button ) {
active = isActive;
if ( $content ) {
$content.toggleClass( 'lx-active', active );
}
if ( button ) {
button.classList.toggle( 'lx-indicator-active', active );
}
updateProgress();
}
function setButtonBusy( button, isBusy ) {
if ( !button ) {
return;
}
var main = button.querySelector( '.lx-btn-main' );
var caret = button.querySelector( '.lx-btn-caret' );
if ( main ) {
main.disabled = isBusy;
}
if ( caret ) {
caret.disabled = isBusy;
}
button.classList.toggle( 'lx-loading', isBusy );
}
function loadAndHighlight( button ) {
$content = $( '#mw-content-text .mw-parser-output' );
if ( !$content.length ) {
return;
}
var root = $content[ 0 ];
var allWords = extractWords( root );
var limit = ( options.limit === null ) ? Math.min( allWords.length, 150 ) : options.limit;
var toFetch = allWords.slice( 0, limit ).map( function ( w ) {
return w.word;
} );
if ( !toFetch.length ) {
return;
}
wordMap = {};
var labelEl = button ? button.querySelector( '.lx-btn-label' ) : null;
var originalLabel = labelEl ? labelEl.textContent : null;
setButtonBusy( button, true );
var batches = [];
for ( var i = 0; i < toFetch.length; i += BATCH_SIZE ) {
batches.push( toFetch.slice( i, i + BATCH_SIZE ) );
}
var doneCount = 0;
var chain = Promise.resolve();
batches.forEach( function ( batch ) {
chain = chain.then( function () {
return fetchLookupBatch( batch ).then( function ( data ) {
if ( data.error ) {
throw new Error( data.error );
}
mergeLookupIntoWordMap( data.result );
highlightContainer( root );
doneCount += batch.length;
if ( labelEl ) {
labelEl.textContent = doneCount + ' / ' + toFetch.length;
}
if ( active && loaded ) {
updateProgress();
}
} );
} );
} );
chain.then( function () {
if ( labelEl ) {
labelEl.textContent = originalLabel;
}
setButtonBusy( button, false );
loaded = true;
setActive( true, button );
var stats = computeStats();
if ( stats && stats.gaps === 0 ) {
celebrate( stats );
}
} ).catch( function ( err ) {
if ( labelEl ) {
labelEl.textContent = originalLabel;
}
setButtonBusy( button, false );
mw.notify( 'Leximap: request failed (' + err + ')', { type: 'error' } );
} );
}
function toggle( button ) {
if ( !loaded ) {
loadAndHighlight( button );
return;
}
setActive( !active, button );
}
function reload( button ) {
hidePopover();
if ( $content && $content.length ) {
unwrapContainer( $content[ 0 ] );
}
loaded = false;
wordMap = null;
active = false;
if ( button ) {
button.classList.remove( 'lx-indicator-active' );
}
updateProgress();
loadAndHighlight( button );
}
function hidePanel() {
if ( panelEl ) {
panelEl.remove();
panelEl = null;
}
}
function showPanel( anchor, button ) {
if ( panelEl ) {
hidePanel();
return;
}
panelEl = document.createElement( 'div' );
panelEl.className = 'lx-panel';
var root = ( $content && $content.length ) ? $content[ 0 ] : document.querySelector( '#mw-content-text .mw-parser-output' );
var uniqueCount = root ? extractWords( root ).length : null;
if ( uniqueCount !== null ) {
var countLabel = document.createElement( 'div' );
countLabel.className = 'lx-panel-count';
countLabel.textContent = 'This page has ' + uniqueCount + ' unique word' + ( uniqueCount === 1 ? '' : 's' ) + '.';
panelEl.appendChild( countLabel );
if ( !limitTouched ) {
options.limit = Math.min( uniqueCount, 150 );
}
}
function numberField( labelText, value, min, max ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-row';
var span = document.createElement( 'span' );
span.textContent = labelText;
var input = document.createElement( 'input' );
input.type = 'number';
input.min = min;
input.max = max;
input.value = value;
row.appendChild( span );
row.appendChild( input );
panelEl.appendChild( row );
return input;
}
function checkboxField( labelText, checked ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-row';
var input = document.createElement( 'input' );
input.type = 'checkbox';
input.checked = checked;
var span = document.createElement( 'span' );
span.textContent = labelText;
row.appendChild( input );
row.appendChild( span );
panelEl.appendChild( row );
return input;
}
function colorField( labelText, value ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-color-row';
var span = document.createElement( 'span' );
span.textContent = labelText;
var input = document.createElement( 'input' );
input.type = 'color';
input.value = value;
row.appendChild( span );
row.appendChild( input );
panelEl.appendChild( row );
return input;
}
var maxAllowed = uniqueCount !== null ? uniqueCount : 999;
var limitInput = numberField( 'Words to check', options.limit, 0, maxAllowed );
var maxGlossesInput = numberField( 'Glosses per word', options.max_glosses, 0, 10 );
var glossesInput = checkboxField( 'Show glosses', options.glosses === 1 );
var linkGapsInput = checkboxField( 'Link unmatched words to Wikidata', options.linkGaps === 1 );
var colorsEnabledInput = checkboxField( 'Colored highlighting', options.colorsEnabled === 1 );
var customColorsInput = checkboxField( 'Customize colors', options.customColors === 1 );
var catLabel = document.createElement( 'div' );
catLabel.className = 'lx-panel-cat-label';
catLabel.textContent = 'Categories (none checked = all)';
panelEl.appendChild( catLabel );
var catGrid = document.createElement( 'div' );
catGrid.className = 'lx-panel-cat-grid';
var catInputs = {};
CATEGORIES.forEach( function ( cat ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-cat';
var input = document.createElement( 'input' );
input.type = 'checkbox';
input.checked = !!( options.categories && options.categories.indexOf( cat ) !== -1 );
var span = document.createElement( 'span' );
span.textContent = cat;
row.appendChild( input );
row.appendChild( span );
catGrid.appendChild( row );
catInputs[ cat ] = input;
} );
panelEl.appendChild( catGrid );
// Group the pickers so the "Customize colors" checkbox can hide them.
// colorField() appends to panelEl, so point panelEl here while we build.
var colorSection = document.createElement( 'div' );
colorSection.className = 'lx-panel-colors';
var realPanelEl = panelEl;
panelEl = colorSection;
var colorLabel = document.createElement( 'div' );
colorLabel.className = 'lx-panel-cat-label';
colorLabel.textContent = 'Colors';
colorSection.appendChild( colorLabel );
var colorInputs = {};
CATEGORIES.forEach( function ( cat ) {
colorInputs[ cat ] = colorField( cat, options.categoryColors[ cat ] || DEFAULT_OTHER_COLOR );
} );
var mixedColorInput = colorField( 'Multiple categories', options.mixedColor );
var otherColorInput = colorField( 'Other categories', options.otherColor );
var gapColorInput = colorField( 'No match', options.gapColor );
panelEl = realPanelEl;
panelEl.appendChild( colorSection );
function syncColorSection() {
colorSection.style.display = customColorsInput.checked ? '' : 'none';
}
syncColorSection();
customColorsInput.addEventListener( 'change', syncColorSection );
var applyButton = document.createElement( 'button' );
applyButton.type = 'button';
applyButton.className = 'lx-panel-apply';
applyButton.textContent = 'Apply';
applyButton.addEventListener( 'click', function () {
var newLimit = Math.max( 0, Math.min( parseInt( limitInput.value, 10 ) || 0, maxAllowed ) );
var newMaxGlosses = parseInt( maxGlossesInput.value, 10 ) || 0;
var newGlosses = glossesInput.checked ? 1 : 0;
var checkedCats = CATEGORIES.filter( function ( cat ) {
return catInputs[ cat ].checked;
} );
var newCategories = checkedCats.length ? checkedCats : null;
var needsRefetch = loaded && (
newLimit !== options.limit ||
newMaxGlosses !== options.max_glosses ||
newGlosses !== options.glosses ||
JSON.stringify( newCategories ) !== JSON.stringify( options.categories )
);
limitTouched = true;
options.limit = newLimit;
options.max_glosses = newMaxGlosses;
options.glosses = newGlosses;
options.categories = newCategories;
options.linkGaps = linkGapsInput.checked ? 1 : 0;
options.colorsEnabled = colorsEnabledInput.checked ? 1 : 0;
options.customColors = customColorsInput.checked ? 1 : 0;
if ( options.customColors ) {
CATEGORIES.forEach( function ( cat ) {
options.categoryColors[ cat ] = colorInputs[ cat ].value;
} );
options.mixedColor = mixedColorInput.value;
options.otherColor = otherColorInput.value;
options.gapColor = gapColorInput.value;
} else {
// Not customizing -- fall back to the built-in palette.
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS );
options.mixedColor = DEFAULT_MIXED_COLOR;
options.otherColor = DEFAULT_OTHER_COLOR;
options.gapColor = DEFAULT_GAP_COLOR;
}
saveOptions();
syncGapLinkClass();
hidePanel();
if ( needsRefetch ) {
reload( button );
} else if ( loaded ) {
repaintColors();
}
} );
panelEl.appendChild( applyButton );
positionNear( panelEl, anchor );
}
document.addEventListener( 'click', function ( e ) {
if ( panelEl && !e.target.closest( '.lx-panel' ) && !e.target.closest( '.lx-btn-caret' ) ) {
hidePanel();
}
} );
var ICON_SVG = '<svg viewBox="0 0 32 32" aria-hidden="true" focusable="false">' +
'<rect x="3" y="7" width="12" height="5" rx="2.5" fill="#2f6b45"/>' +
'<rect x="17" y="7" width="12" height="5" rx="2.5" fill="#3b5a85"/>' +
'<rect x="3" y="14" width="8" height="5" rx="2.5" fill="#8a651b"/>' +
'<rect x="13" y="14" width="9" height="5" rx="2.5" fill="#b32424"/>' +
'<rect x="24" y="14" width="5" height="5" rx="2.5" fill="#6b4a86"/>' +
'<rect x="3" y="21" width="15" height="5" rx="2.5" fill="#3a7a7a"/>' +
'<rect x="20" y="21" width="9" height="5" rx="2.5" fill="#8b3a3a"/>' +
'</svg>';
function addIndicatorButton() {
var indicators = document.querySelector( '.mw-indicators' );
if ( !indicators ) {
// Fall back to the toolbox if this skin/page has no indicators row.
mw.loader.using( [ 'mediawiki.util' ] ).then( function () {
mw.util.addPortletLink(
'p-tb',
'#',
'Leximap',
'ca-leximap',
'Highlight words by Wikidata lexeme category'
).addEventListener( 'click', function ( e ) {
e.preventDefault();
toggle( null );
} );
} );
return;
}
var wrapper = document.createElement( 'div' );
wrapper.id = 'mw-indicator-lx-leximap';
wrapper.className = 'mw-indicator';
indicatorWrapper = wrapper;
var group = document.createElement( 'div' );
group.className = 'lx-btn';
var main = document.createElement( 'button' );
main.type = 'button';
main.className = 'lx-btn-main';
main.title = 'Highlight words by Wikidata lexeme category';
var icon = document.createElement( 'span' );
icon.className = 'lx-btn-icon';
// Static, trusted markup (matches the Leximap app logo mark) -- not user data.
icon.innerHTML = ICON_SVG;
main.appendChild( icon );
var label = document.createElement( 'span' );
label.className = 'lx-btn-label';
label.textContent = 'Leximap';
main.appendChild( label );
var caret = document.createElement( 'button' );
caret.type = 'button';
caret.className = 'lx-btn-caret';
caret.title = 'Leximap settings';
caret.setAttribute( 'aria-label', 'Leximap settings' );
caret.textContent = '▾';
group.appendChild( main );
group.appendChild( caret );
wrapper.appendChild( group );
main.addEventListener( 'click', function ( e ) {
e.preventDefault();
toggle( group );
} );
caret.addEventListener( 'click', function ( e ) {
e.preventDefault();
e.stopPropagation();
showPanel( group, group );
} );
indicators.appendChild( wrapper );
}
// Take the default palette from the backend so we're not keeping our own
// copy. Anyone who's customized their colors keeps them.
function applyServerPalette( p ) {
if ( !p || typeof p !== 'object' || p.error ) {
return;
}
if ( p.categoryColors && typeof p.categoryColors === 'object' ) {
Object.assign( DEFAULT_CATEGORY_COLORS, p.categoryColors );
}
if ( p.gapColor ) {
DEFAULT_GAP_COLOR = p.gapColor;
}
if ( p.mixedColor ) {
DEFAULT_MIXED_COLOR = p.mixedColor;
}
if ( p.otherColor ) {
DEFAULT_OTHER_COLOR = p.otherColor;
}
if ( !options.customColors ) {
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS );
options.gapColor = DEFAULT_GAP_COLOR;
options.mixedColor = DEFAULT_MIXED_COLOR;
options.otherColor = DEFAULT_OTHER_COLOR;
repaintColors();
}
}
function fetchPalette() {
fetch( API_BASE + '/api/palette' )
.then( function ( res ) {
return res.json();
} )
.then( applyServerPalette )
.catch( function () {
// Offline / API down -- keep the built-in defaults.
} );
}
fetchPalette();
addIndicatorButton();
}() );
kde3vvmh8269ob8ylyq1utgspiqfwjn
1996857
1996855
2026-08-30T16:39:38Z
Mahir256
1096
1996857
javascript
text/javascript
/**
* Leximap gadget — highlights words on Wikisource pages by Wikidata lexeme
* category, using the Leximap API (https://leximap.toolforge.org).
*/
( function () {
'use strict';
if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ) {
return;
}
var css = '.mw-parser-output .lx-w {\n' +
' color: inherit;\n' +
'}\n' +
'.mw-parser-output.lx-active .lx-w.lx-match,\n' +
'.mw-parser-output.lx-active .lx-w.lx-mixed {\n' +
' color: var( --lx-color, #4b4453 );\n' +
' cursor: pointer;\n' +
' border-bottom: 1px dotted currentColor;\n' +
'}\n' +
'.mw-parser-output.lx-active .lx-w.lx-gap {\n' +
' background: rgba( 255, 212, 0, 0.3 );\n' +
' background: color-mix( in srgb, var( --lx-color, #ffd400 ) 30%, transparent );\n' +
' border-bottom: 2px solid var( --lx-color, #ffd400 );\n' +
' border-radius: 2px;\n' +
'}\n' +
'/* Unmatched words are only clickable when they link out to Wikidata. */\n' +
'body.lx-links-gaps .mw-parser-output.lx-active .lx-w.lx-gap {\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-btn {\n' +
' display: inline-flex;\n' +
' align-items: stretch;\n' +
' height: 2rem;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
' background: #f8f9fa;\n' +
' overflow: hidden;\n' +
' font-size: 0.875rem;\n' +
' line-height: 1;\n' +
' vertical-align: middle;\n' +
'}\n' +
'.lx-btn-main,\n' +
'.lx-btn-caret {\n' +
' display: inline-flex;\n' +
' align-items: center;\n' +
' border: 0;\n' +
' background: transparent;\n' +
' color: #202122;\n' +
' cursor: pointer;\n' +
' font: inherit;\n' +
' padding: 0 0.7rem;\n' +
'}\n' +
'.lx-btn-main:hover,\n' +
'.lx-btn-caret:hover {\n' +
' background: #eef2f7;\n' +
'}\n' +
'.lx-btn-main:focus,\n' +
'.lx-btn-caret:focus {\n' +
' outline: 2px solid #3b5a85;\n' +
' outline-offset: -2px;\n' +
'}\n' +
'.lx-btn-icon {\n' +
' display: inline-flex;\n' +
' align-items: center;\n' +
' margin-right: 0.4rem;\n' +
'}\n' +
'.lx-btn-icon svg {\n' +
' display: block;\n' +
' width: 15px;\n' +
' height: 15px;\n' +
'}\n' +
'.lx-btn-label {\n' +
' white-space: nowrap;\n' +
'}\n' +
'.lx-btn-caret {\n' +
' padding: 0 0.55rem;\n' +
' border-left: 1px solid #a2a9b1;\n' +
' color: #54595d;\n' +
' font-size: 0.7rem;\n' +
'}\n' +
'.lx-btn.lx-indicator-active {\n' +
' border-color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-indicator-active .lx-btn-main {\n' +
' background: #e3ebf3;\n' +
' color: #3b5a85;\n' +
' font-weight: 600;\n' +
'}\n' +
'.lx-btn.lx-indicator-active .lx-btn-caret {\n' +
' border-left-color: #b7c6d8;\n' +
' color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-loading {\n' +
' border-color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-loading .lx-btn-main {\n' +
' color: #3b5a85;\n' +
' font-variant-numeric: tabular-nums;\n' +
'}\n' +
'.lx-btn-main:disabled,\n' +
'.lx-btn-caret:disabled {\n' +
' cursor: progress;\n' +
'}\n' +
'.lx-btn-icon svg {\n' +
' transition: transform 0.6s linear;\n' +
'}\n' +
'.lx-btn.lx-loading .lx-btn-icon svg {\n' +
' animation: lx-spin 1s linear infinite;\n' +
'}\n' +
'@keyframes lx-spin {\n' +
' from { transform: rotate( 0deg ); }\n' +
' to { transform: rotate( 360deg ); }\n' +
'}\n' +
'.lx-progress {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' gap: 0.4rem;\n' +
' margin-top: 0.25rem;\n' +
' font-size: 0.72rem;\n' +
' line-height: 1;\n' +
' color: #54595d;\n' +
'}\n' +
'.lx-progress-bar {\n' +
' flex: 1 1 auto;\n' +
' min-width: 60px;\n' +
' height: 6px;\n' +
' border-radius: 3px;\n' +
' background: #eaecf0;\n' +
' overflow: hidden;\n' +
'}\n' +
'.lx-progress-fill {\n' +
' height: 100%;\n' +
' width: 0;\n' +
' border-radius: 3px;\n' +
' background: #3b5a85;\n' +
' transition: width 0.4s ease, background-color 0.4s ease;\n' +
'}\n' +
'.lx-progress-complete .lx-progress-fill {\n' +
' background: #14866d;\n' +
'}\n' +
'.lx-progress-label {\n' +
' white-space: nowrap;\n' +
' font-variant-numeric: tabular-nums;\n' +
'}\n' +
'.lx-progress-complete .lx-progress-label {\n' +
' color: #14866d;\n' +
' font-weight: 600;\n' +
'}\n' +
'.lx-confetti {\n' +
' position: fixed;\n' +
' inset: 0;\n' +
' pointer-events: none;\n' +
' z-index: 10000;\n' +
' overflow: hidden;\n' +
'}\n' +
'.lx-confetti-piece {\n' +
' position: absolute;\n' +
' top: -12px;\n' +
' width: 8px;\n' +
' height: 12px;\n' +
' border-radius: 1px;\n' +
' opacity: 0.9;\n' +
' animation-name: lx-fall;\n' +
' animation-timing-function: linear;\n' +
' animation-fill-mode: forwards;\n' +
'}\n' +
'@keyframes lx-fall {\n' +
' 0% {\n' +
' transform: translateY( -12px ) rotate( 0deg );\n' +
' opacity: 1;\n' +
' }\n' +
' 100% {\n' +
' transform: translateY( 105vh ) rotate( 720deg );\n' +
' opacity: 0.9;\n' +
' }\n' +
'}\n' +
'@media ( prefers-reduced-motion: reduce ) {\n' +
' .lx-progress-fill {\n' +
' transition: none;\n' +
' }\n' +
'}\n' +
'.lx-panel {\n' +
' position: absolute;\n' +
' z-index: 1000;\n' +
' width: 280px;\n' +
' max-width: calc( 100vw - 1.5rem );\n' +
' max-height: 80vh;\n' +
' overflow-y: auto;\n' +
' background: #fff;\n' +
' border: 1px solid #c8ccd1;\n' +
' border-radius: 6px;\n' +
' box-shadow: 0 4px 16px rgba( 0, 0, 0, 0.15 );\n' +
' padding: 0.85rem 1rem;\n' +
' font-size: 0.85rem;\n' +
' color: #202122;\n' +
'}\n' +
'@media ( max-width: 480px ) {\n' +
' .lx-panel-cat-grid {\n' +
' grid-template-columns: 1fr;\n' +
' }\n' +
'}\n' +
'.lx-panel-count {\n' +
' margin: -0.85rem -1rem 0.7rem;\n' +
' padding: 0.55rem 1rem;\n' +
' border-bottom: 1px solid #eaecf0;\n' +
' background: #f8f9fa;\n' +
' border-radius: 6px 6px 0 0;\n' +
' color: #54595d;\n' +
' font-size: 0.78rem;\n' +
'}\n' +
'.lx-panel-row {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' justify-content: space-between;\n' +
' gap: 0.5rem;\n' +
' margin-bottom: 0.55rem;\n' +
'}\n' +
'.lx-panel-row input[ type="number" ] {\n' +
' width: 4.5rem;\n' +
' padding: 0.15rem 0.35rem;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
'}\n' +
'.lx-panel-row input[ type="checkbox" ] {\n' +
' margin: 0;\n' +
'}\n' +
'.lx-panel-cat-label {\n' +
' margin: 0.6rem 0 0.4rem;\n' +
' padding-top: 0.55rem;\n' +
' border-top: 1px solid #eaecf0;\n' +
' color: #54595d;\n' +
' font-size: 0.78rem;\n' +
'}\n' +
'.lx-panel-cat-grid {\n' +
' display: grid;\n' +
' grid-template-columns: 1fr 1fr;\n' +
' gap: 0.3rem 0.5rem;\n' +
' margin-bottom: 0.7rem;\n' +
'}\n' +
'.lx-panel-cat {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' gap: 0.35rem;\n' +
' font-size: 0.8rem;\n' +
'}\n' +
'.lx-panel-cat input {\n' +
' margin: 0;\n' +
'}\n' +
'.lx-panel-color-row {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' justify-content: space-between;\n' +
' gap: 0.5rem;\n' +
' margin-bottom: 0.3rem;\n' +
' font-size: 0.8rem;\n' +
' text-transform: capitalize;\n' +
'}\n' +
'.lx-panel-color-row input[ type="color" ] {\n' +
' width: 1.8rem;\n' +
' height: 1.4rem;\n' +
' padding: 0;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
' background: none;\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-panel-apply {\n' +
' width: 100%;\n' +
' padding: 0.45rem;\n' +
' border: 1px solid #3b5a85;\n' +
' border-radius: 3px;\n' +
' background: #3b5a85;\n' +
' color: #fff;\n' +
' font-size: 0.85rem;\n' +
' font-weight: 600;\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-panel-apply:hover {\n' +
' background: #2e4568;\n' +
' border-color: #2e4568;\n' +
'}\n' +
'.lx-popover {\n' +
' position: absolute;\n' +
' z-index: 1000;\n' +
' max-width: 320px;\n' +
' max-height: 340px;\n' +
' overflow-y: auto;\n' +
' background: #fff;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 4px;\n' +
' box-shadow: 0 2px 8px rgba( 0, 0, 0, 0.2 );\n' +
' padding: 0.5rem 0.75rem;\n' +
' font-size: 0.9rem;\n' +
'}\n' +
'.lx-popover .lx-entry {\n' +
' border-top: 1px solid #eaecf0;\n' +
' padding: 0.5rem 0;\n' +
'}\n' +
'.lx-popover .lx-entry:first-child {\n' +
' border-top: 0;\n' +
'}\n' +
'.lx-popover .lx-entry a {\n' +
' font-weight: 600;\n' +
' text-decoration: none;\n' +
'}\n' +
'.lx-popover .lx-cat {\n' +
' font-size: 0.8rem;\n' +
' color: #72777d;\n' +
' margin-left: 0.4rem;\n' +
'}\n' +
'.lx-popover .lx-gloss {\n' +
' margin: 0.2rem 0 0;\n' +
' font-size: 0.85rem;\n' +
' color: #54595d;\n' +
'}\n';
var styleEl = document.createElement( 'style' );
styleEl.textContent = css;
document.head.appendChild( styleEl );
var API_BASE = 'https://leximap.toolforge.org';
// Look words up in the wiki's own language (unknown ones fall back to
// English server-side).
var LANG = mw.config.get( 'wgContentLanguage' ) || 'en';
// Wikidata language items, mirroring the server's config.LANGUAGES. Used to
// prefill the language on Wikidata's lexeme creation form.
var LANG_QIDS = {
en: 'Q1860', fr: 'Q150', de: 'Q188', es: 'Q1321', it: 'Q652', pt: 'Q5146',
ru: 'Q7737', nl: 'Q7411', pl: 'Q809', sv: 'Q9027', la: 'Q397'
};
var WORD_RE = /[\p{L}']+/gu;
var BATCH_SIZE = 40;
var CATEGORIES = [
"Q1084", "Q147276", "Q24905", "Q34698", "Q380057", "Q36224", "Q4833830", "Q36484", "Q576271", "Q2865743", "Q3813849", "Q103184", "Q83034", "Q63116", "Q134830", "Q102047", "Q10535365"
];
// Base palette matches colorize.py's CATEGORY_COLORS; extra categories
// (seen in real Wikidata lexeme data but not in the server's fixed list)
// get sensible defaults here since the gadget colors client-side.
var DEFAULT_CATEGORY_COLORS = {
"Q1084": "#a4161a", // noun
"Q147276": "#8a4b8a", // proper noun
"Q24905": "#1b7a3d", // verb
"Q34698": "#5c3a21", // adjective
"Q380057": "#1959b8", // adverb
"Q36224": "#7d2ae8", // pronoun
"Q4833830": "#067a6f", // preposition
"Q36484": "#c2540c", // conjunction
"Q576271": "#4b4453", // determiner
"Q2865743": "#5c6b73", // definite article
"Q3813849": "#7a8b93", // indefinite article
"Q103184": "#4b4453", // article
"Q83034": "#c2185b", // interjection
"Q63116": "#2a3f8f", // numeral
"Q134830": "#a0785a", // prefix
"Q102047": "#c99a5b", // suffix
"Q10535365": "#3d8b8b", // infinitive marker
};
var DEFAULT_GAP_COLOR = '#ffd400'; // bright yellow -- no lexeme match
var DEFAULT_MIXED_COLOR = '#5d6d7e'; // word matches more than one category
var DEFAULT_OTHER_COLOR = '#4b4453'; // category outside the customizable list
var options = {
glosses: 1,
max_glosses: 3,
limit: null, // null = every unique word on the page
categories: null, // null = all
categoryColors: Object.assign( {}, DEFAULT_CATEGORY_COLORS ),
gapColor: DEFAULT_GAP_COLOR,
mixedColor: DEFAULT_MIXED_COLOR,
otherColor: DEFAULT_OTHER_COLOR,
colorsEnabled: 1,
linkGaps: 1, // clicking an unmatched word opens Wikidata's lexeme form
customColors: 0 // 0 = use default palette, hide the color pickers
};
var STORAGE_KEY = 'leximap-gadget-options';
function loadStoredOptions() {
try {
var raw = localStorage.getItem( STORAGE_KEY );
if ( !raw ) {
return;
}
var stored = JSON.parse( raw );
if ( stored && typeof stored === 'object' ) {
Object.assign( options, stored );
if ( options.categoryColors ) {
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS, options.categoryColors );
}
if ( typeof options.limit === 'number' ) {
limitTouched = true;
}
}
} catch ( e ) {
// Storage unavailable (private browsing, disabled, etc.) -- fall back to defaults.
}
}
function saveOptions() {
try {
localStorage.setItem( STORAGE_KEY, JSON.stringify( options ) );
} catch ( e ) {
// Ignore -- persistence is a nicety, not a requirement.
}
}
var active = false;
var loaded = false;
var limitTouched = false;
var wordMap = null; // lowercase word -> { status: 'match'|'mixed'|'gap', categories: [...] }
var $content = null;
var popoverEl = null;
var panelEl = null;
var progressEl = null;
var indicatorWrapper = null;
loadStoredOptions();
function syncGapLinkClass() {
if ( document.body ) {
document.body.classList.toggle( 'lx-links-gaps', !!options.linkGaps );
}
}
syncGapLinkClass();
function colorForWord( info ) {
if ( !options.colorsEnabled ) {
return null;
}
if ( info.status === 'gap' ) {
return options.gapColor;
}
if ( info.status === 'mixed' ) {
return options.mixedColor;
}
var cat = info.categories[ 0 ].toLowerCase();
return options.categoryColors[ cat ] || options.otherColor;
}
function extractWords( root ) {
var text = root.textContent;
var counts = {};
var order = [];
var match;
WORD_RE.lastIndex = 0;
while ( ( match = WORD_RE.exec( text ) ) ) {
var w = match[ 0 ].toLowerCase();
if ( !( w in counts ) ) {
counts[ w ] = 0;
order.push( w );
}
counts[ w ]++;
}
return order
.map( function ( w ) {
return { word: w, count: counts[ w ] };
} )
.sort( function ( a, b ) {
return b.count - a.count;
} );
}
function mergeLookupIntoWordMap( data ) {
Object.keys( data ).forEach( function ( word ) {
var entries = data[ word ];
if ( !entries || !entries.length ) {
wordMap[ word ] = { status: 'gap', lexemes: [], categories: [] };
return;
}
var cats = [];
entries.forEach( function ( e ) {
if ( cats.indexOf( e.category ) === -1 ) {
cats.push( e.category );
}
} );
wordMap[ word ] = {
status: cats.length > 1 ? 'mixed' : 'match',
lexemes: entries,
categories: cats
};
} );
}
function fetchLookupBatch( words ) {
var body = {
words: words,
glosses: options.glosses,
max_glosses: options.max_glosses,
lang: LANG
};
if ( options.categories && options.categories.length ) {
body.categories = options.categories;
}
return fetch( API_BASE + '/api/lookup', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify( body )
} ).then( function ( res ) {
return res.json();
} );
}
function highlightContainer( root ) {
var walker = document.createTreeWalker(
root,
NodeFilter.SHOW_TEXT,
{
acceptNode: function ( node ) {
var parent = node.parentElement;
if ( !parent || parent.closest( 'script, style, .mw-editsection, .lx-w' ) ) {
return NodeFilter.FILTER_REJECT;
}
return NodeFilter.FILTER_ACCEPT;
}
}
);
var textNodes = [];
var node;
while ( ( node = walker.nextNode() ) ) {
textNodes.push( node );
}
textNodes.forEach( function ( textNode ) {
var text = textNode.nodeValue;
WORD_RE.lastIndex = 0;
var match;
var lastIndex = 0;
var frag = null;
while ( ( match = WORD_RE.exec( text ) ) ) {
var word = match[ 0 ];
var lower = word.toLowerCase();
var info = wordMap[ lower ];
if ( !info ) {
continue;
}
if ( !frag ) {
frag = document.createDocumentFragment();
}
frag.appendChild( document.createTextNode( text.slice( lastIndex, match.index ) ) );
var span = document.createElement( 'span' );
span.className = 'lx-w lx-' + info.status;
span.dataset.lxWord = lower;
// Show the category on hover, so it isn't down to color alone.
span.title = info.status === 'gap' ?
( options.linkGaps ?
'No Wikidata lexeme yet -- click to create one' :
'No Wikidata lexeme yet' ) :
info.categories.join( ', ' );
var color = colorForWord( info );
if ( color ) {
span.style.setProperty( '--lx-color', color );
}
span.textContent = word;
frag.appendChild( span );
lastIndex = match.index + word.length;
}
if ( frag ) {
frag.appendChild( document.createTextNode( text.slice( lastIndex ) ) );
textNode.parentNode.replaceChild( frag, textNode );
}
} );
}
function positionNear( el, anchor ) {
// Append first (off-screen) so offsetWidth/offsetHeight are measurable.
document.body.appendChild( el );
var rect = anchor.getBoundingClientRect();
var margin = 8;
var maxLeft = window.scrollX + document.documentElement.clientWidth - el.offsetWidth - margin;
var left = Math.max( window.scrollX + margin, Math.min( window.scrollX + rect.left, maxLeft ) );
var top = window.scrollY + rect.bottom + 4;
var maxTop = window.scrollY + document.documentElement.clientHeight - el.offsetHeight - margin;
if ( top > maxTop && rect.top - el.offsetHeight - 4 > 0 ) {
// Not enough room below -- flip above the anchor instead.
top = window.scrollY + rect.top - el.offsetHeight - 4;
}
el.style.left = left + 'px';
el.style.top = top + 'px';
}
function hidePopover() {
if ( popoverEl ) {
popoverEl.remove();
popoverEl = null;
}
}
function showPopover( span, info ) {
hidePopover();
popoverEl = document.createElement( 'div' );
popoverEl.className = 'lx-popover';
info.lexemes.forEach( function ( l ) {
var entry = document.createElement( 'div' );
entry.className = 'lx-entry';
var link = document.createElement( 'a' );
link.href = 'https://www.wikidata.org/wiki/Lexeme:' + l.lexeme;
link.target = '_blank';
link.rel = 'noopener';
link.textContent = l.lexeme;
entry.appendChild( link );
var cat = document.createElement( 'span' );
cat.className = 'lx-cat';
cat.textContent = ' ' + l.category;
entry.appendChild( cat );
if ( l.glosses && l.glosses.length ) {
var gloss = document.createElement( 'p' );
gloss.className = 'lx-gloss';
gloss.textContent = l.glosses[ 0 ];
entry.appendChild( gloss );
}
popoverEl.appendChild( entry );
} );
positionNear( popoverEl, span );
}
// Wikidata's lexeme form, with the word and its language filled in. The
// category is left blank -- that's the bit the editor has to decide.
function newLexemeUrl( word ) {
return 'https://www.wikidata.org/wiki/Special:NewLexeme?' + new URLSearchParams( {
lemma: word,
'spelling-variant': LANG,
language: LANG_QIDS[ LANG ] || LANG_QIDS.en
} );
}
document.addEventListener( 'click', function ( e ) {
var span = e.target.closest( '.lx-w' );
if ( span && ( span.classList.contains( 'lx-match' ) || span.classList.contains( 'lx-mixed' ) ) ) {
e.preventDefault();
showPopover( span, wordMap[ span.dataset.lxWord ] );
} else if ( span && span.classList.contains( 'lx-gap' ) && options.linkGaps ) {
e.preventDefault();
hidePopover();
window.open( newLexemeUrl( span.dataset.lxWord ), '_blank', 'noopener' );
} else if ( !e.target.closest( '.lx-popover' ) ) {
hidePopover();
}
} );
function unwrapContainer( root ) {
var spans = root.querySelectorAll( '.lx-w' );
spans.forEach( function ( span ) {
var text = document.createTextNode( span.textContent );
span.parentNode.replaceChild( text, span );
} );
}
function repaintColors() {
if ( !$content || !$content.length || !wordMap ) {
return;
}
var spans = $content[ 0 ].querySelectorAll( '.lx-w' );
spans.forEach( function ( span ) {
var info = wordMap[ span.dataset.lxWord ];
if ( !info ) {
return;
}
var color = colorForWord( info );
if ( color ) {
span.style.setProperty( '--lx-color', color );
} else {
span.style.removeProperty( '--lx-color' );
}
if ( info.status === 'gap' ) {
span.title = options.linkGaps ?
'No Wikidata lexeme yet -- click to create one' :
'No Wikidata lexeme yet';
}
} );
syncGapLinkClass();
}
// Share of looked-up words that have a lexeme. No gaps means fully mapped.
function computeStats() {
if ( !wordMap ) {
return null;
}
var total = 0, gaps = 0;
Object.keys( wordMap ).forEach( function ( w ) {
total++;
if ( wordMap[ w ].status === 'gap' ) {
gaps++;
}
} );
if ( !total ) {
return null;
}
var matched = total - gaps;
return { total: total, matched: matched, gaps: gaps, pct: Math.round( matched / total * 100 ) };
}
function updateProgress() {
var stats = ( active && loaded ) ? computeStats() : null;
if ( !stats || !indicatorWrapper ) {
if ( progressEl ) {
progressEl.remove();
progressEl = null;
}
return;
}
if ( !progressEl ) {
progressEl = document.createElement( 'div' );
progressEl.className = 'lx-progress';
var bar = document.createElement( 'div' );
bar.className = 'lx-progress-bar';
var fill = document.createElement( 'div' );
fill.className = 'lx-progress-fill';
bar.appendChild( fill );
var label = document.createElement( 'span' );
label.className = 'lx-progress-label';
progressEl.appendChild( bar );
progressEl.appendChild( label );
indicatorWrapper.appendChild( progressEl );
}
progressEl.querySelector( '.lx-progress-fill' ).style.width = stats.pct + '%';
progressEl.classList.toggle( 'lx-progress-complete', stats.gaps === 0 );
progressEl.querySelector( '.lx-progress-label' ).textContent = stats.gaps === 0 ?
stats.matched + '/' + stats.total + ' mapped ✓' :
stats.pct + '% · ' + stats.gaps + ' to fill';
progressEl.title = stats.matched + ' of ' + stats.total +
' words mapped to Wikidata lexemes' +
( stats.gaps ? ', ' + stats.gaps + ' still unmatched (red)' : '' );
}
function celebrate( stats ) {
mw.notify( 'Page fully mapped — all ' + stats.total + ' words matched! 🎉', { type: 'success' } );
if ( window.matchMedia && window.matchMedia( '(prefers-reduced-motion: reduce)' ).matches ) {
return;
}
var layer = document.createElement( 'div' );
layer.className = 'lx-confetti';
var colors = [ '#a4161a', '#1b7a3d', '#1959b8', '#c2540c', '#7d2ae8', '#ffd400' ];
for ( var i = 0; i < 60; i++ ) {
var piece = document.createElement( 'span' );
piece.className = 'lx-confetti-piece';
piece.style.left = ( Math.random() * 100 ) + 'vw';
piece.style.background = colors[ i % colors.length ];
piece.style.animationDelay = ( Math.random() * 0.4 ) + 's';
piece.style.animationDuration = ( 1.8 + Math.random() * 1.2 ) + 's';
layer.appendChild( piece );
}
document.body.appendChild( layer );
setTimeout( function () {
layer.remove();
}, 3600 );
}
function setActive( isActive, button ) {
active = isActive;
if ( $content ) {
$content.toggleClass( 'lx-active', active );
}
if ( button ) {
button.classList.toggle( 'lx-indicator-active', active );
}
updateProgress();
}
function setButtonBusy( button, isBusy ) {
if ( !button ) {
return;
}
var main = button.querySelector( '.lx-btn-main' );
var caret = button.querySelector( '.lx-btn-caret' );
if ( main ) {
main.disabled = isBusy;
}
if ( caret ) {
caret.disabled = isBusy;
}
button.classList.toggle( 'lx-loading', isBusy );
}
function loadAndHighlight( button ) {
$content = $( '#mw-content-text .mw-parser-output' );
if ( !$content.length ) {
return;
}
var root = $content[ 0 ];
var allWords = extractWords( root );
var limit = ( options.limit === null ) ? Math.min( allWords.length, 150 ) : options.limit;
var toFetch = allWords.slice( 0, limit ).map( function ( w ) {
return w.word;
} );
if ( !toFetch.length ) {
return;
}
wordMap = {};
var labelEl = button ? button.querySelector( '.lx-btn-label' ) : null;
var originalLabel = labelEl ? labelEl.textContent : null;
setButtonBusy( button, true );
var batches = [];
for ( var i = 0; i < toFetch.length; i += BATCH_SIZE ) {
batches.push( toFetch.slice( i, i + BATCH_SIZE ) );
}
var doneCount = 0;
var chain = Promise.resolve();
batches.forEach( function ( batch ) {
chain = chain.then( function () {
return fetchLookupBatch( batch ).then( function ( data ) {
if ( data.error ) {
throw new Error( data.error );
}
mergeLookupIntoWordMap( data.result );
highlightContainer( root );
doneCount += batch.length;
if ( labelEl ) {
labelEl.textContent = doneCount + ' / ' + toFetch.length;
}
if ( active && loaded ) {
updateProgress();
}
} );
} );
} );
chain.then( function () {
if ( labelEl ) {
labelEl.textContent = originalLabel;
}
setButtonBusy( button, false );
loaded = true;
setActive( true, button );
var stats = computeStats();
if ( stats && stats.gaps === 0 ) {
celebrate( stats );
}
} ).catch( function ( err ) {
if ( labelEl ) {
labelEl.textContent = originalLabel;
}
setButtonBusy( button, false );
mw.notify( 'Leximap: request failed (' + err + ')', { type: 'error' } );
} );
}
function toggle( button ) {
if ( !loaded ) {
loadAndHighlight( button );
return;
}
setActive( !active, button );
}
function reload( button ) {
hidePopover();
if ( $content && $content.length ) {
unwrapContainer( $content[ 0 ] );
}
loaded = false;
wordMap = null;
active = false;
if ( button ) {
button.classList.remove( 'lx-indicator-active' );
}
updateProgress();
loadAndHighlight( button );
}
function hidePanel() {
if ( panelEl ) {
panelEl.remove();
panelEl = null;
}
}
function showPanel( anchor, button ) {
if ( panelEl ) {
hidePanel();
return;
}
panelEl = document.createElement( 'div' );
panelEl.className = 'lx-panel';
var root = ( $content && $content.length ) ? $content[ 0 ] : document.querySelector( '#mw-content-text .mw-parser-output' );
var uniqueCount = root ? extractWords( root ).length : null;
if ( uniqueCount !== null ) {
var countLabel = document.createElement( 'div' );
countLabel.className = 'lx-panel-count';
countLabel.textContent = 'This page has ' + uniqueCount + ' unique word' + ( uniqueCount === 1 ? '' : 's' ) + '.';
panelEl.appendChild( countLabel );
if ( !limitTouched ) {
options.limit = Math.min( uniqueCount, 150 );
}
}
function numberField( labelText, value, min, max ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-row';
var span = document.createElement( 'span' );
span.textContent = labelText;
var input = document.createElement( 'input' );
input.type = 'number';
input.min = min;
input.max = max;
input.value = value;
row.appendChild( span );
row.appendChild( input );
panelEl.appendChild( row );
return input;
}
function checkboxField( labelText, checked ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-row';
var input = document.createElement( 'input' );
input.type = 'checkbox';
input.checked = checked;
var span = document.createElement( 'span' );
span.textContent = labelText;
row.appendChild( input );
row.appendChild( span );
panelEl.appendChild( row );
return input;
}
function colorField( labelText, value ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-color-row';
var span = document.createElement( 'span' );
span.textContent = labelText;
var input = document.createElement( 'input' );
input.type = 'color';
input.value = value;
row.appendChild( span );
row.appendChild( input );
panelEl.appendChild( row );
return input;
}
var maxAllowed = uniqueCount !== null ? uniqueCount : 999;
var limitInput = numberField( 'Words to check', options.limit, 0, maxAllowed );
var maxGlossesInput = numberField( 'Glosses per word', options.max_glosses, 0, 10 );
var glossesInput = checkboxField( 'Show glosses', options.glosses === 1 );
var linkGapsInput = checkboxField( 'Link unmatched words to Wikidata', options.linkGaps === 1 );
var colorsEnabledInput = checkboxField( 'Colored highlighting', options.colorsEnabled === 1 );
var customColorsInput = checkboxField( 'Customize colors', options.customColors === 1 );
var catLabel = document.createElement( 'div' );
catLabel.className = 'lx-panel-cat-label';
catLabel.textContent = 'Categories (none checked = all)';
panelEl.appendChild( catLabel );
var catGrid = document.createElement( 'div' );
catGrid.className = 'lx-panel-cat-grid';
var catInputs = {};
CATEGORIES.forEach( function ( cat ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-cat';
var input = document.createElement( 'input' );
input.type = 'checkbox';
input.checked = !!( options.categories && options.categories.indexOf( cat ) !== -1 );
var span = document.createElement( 'span' );
span.textContent = cat;
row.appendChild( input );
row.appendChild( span );
catGrid.appendChild( row );
catInputs[ cat ] = input;
} );
panelEl.appendChild( catGrid );
// Group the pickers so the "Customize colors" checkbox can hide them.
// colorField() appends to panelEl, so point panelEl here while we build.
var colorSection = document.createElement( 'div' );
colorSection.className = 'lx-panel-colors';
var realPanelEl = panelEl;
panelEl = colorSection;
var colorLabel = document.createElement( 'div' );
colorLabel.className = 'lx-panel-cat-label';
colorLabel.textContent = 'Colors';
colorSection.appendChild( colorLabel );
var colorInputs = {};
CATEGORIES.forEach( function ( cat ) {
colorInputs[ cat ] = colorField( cat, options.categoryColors[ cat ] || DEFAULT_OTHER_COLOR );
} );
var mixedColorInput = colorField( 'Multiple categories', options.mixedColor );
var otherColorInput = colorField( 'Other categories', options.otherColor );
var gapColorInput = colorField( 'No match', options.gapColor );
panelEl = realPanelEl;
panelEl.appendChild( colorSection );
function syncColorSection() {
colorSection.style.display = customColorsInput.checked ? '' : 'none';
}
syncColorSection();
customColorsInput.addEventListener( 'change', syncColorSection );
var applyButton = document.createElement( 'button' );
applyButton.type = 'button';
applyButton.className = 'lx-panel-apply';
applyButton.textContent = 'Apply';
applyButton.addEventListener( 'click', function () {
var newLimit = Math.max( 0, Math.min( parseInt( limitInput.value, 10 ) || 0, maxAllowed ) );
var newMaxGlosses = parseInt( maxGlossesInput.value, 10 ) || 0;
var newGlosses = glossesInput.checked ? 1 : 0;
var checkedCats = CATEGORIES.filter( function ( cat ) {
return catInputs[ cat ].checked;
} );
var newCategories = checkedCats.length ? checkedCats : null;
var needsRefetch = loaded && (
newLimit !== options.limit ||
newMaxGlosses !== options.max_glosses ||
newGlosses !== options.glosses ||
JSON.stringify( newCategories ) !== JSON.stringify( options.categories )
);
limitTouched = true;
options.limit = newLimit;
options.max_glosses = newMaxGlosses;
options.glosses = newGlosses;
options.categories = newCategories;
options.linkGaps = linkGapsInput.checked ? 1 : 0;
options.colorsEnabled = colorsEnabledInput.checked ? 1 : 0;
options.customColors = customColorsInput.checked ? 1 : 0;
if ( options.customColors ) {
CATEGORIES.forEach( function ( cat ) {
options.categoryColors[ cat ] = colorInputs[ cat ].value;
} );
options.mixedColor = mixedColorInput.value;
options.otherColor = otherColorInput.value;
options.gapColor = gapColorInput.value;
} else {
// Not customizing -- fall back to the built-in palette.
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS );
options.mixedColor = DEFAULT_MIXED_COLOR;
options.otherColor = DEFAULT_OTHER_COLOR;
options.gapColor = DEFAULT_GAP_COLOR;
}
saveOptions();
syncGapLinkClass();
hidePanel();
if ( needsRefetch ) {
reload( button );
} else if ( loaded ) {
repaintColors();
}
} );
panelEl.appendChild( applyButton );
positionNear( panelEl, anchor );
}
document.addEventListener( 'click', function ( e ) {
if ( panelEl && !e.target.closest( '.lx-panel' ) && !e.target.closest( '.lx-btn-caret' ) ) {
hidePanel();
}
} );
var ICON_SVG = '<svg viewBox="0 0 32 32" aria-hidden="true" focusable="false">' +
'<rect x="3" y="7" width="12" height="5" rx="2.5" fill="#2f6b45"/>' +
'<rect x="17" y="7" width="12" height="5" rx="2.5" fill="#3b5a85"/>' +
'<rect x="3" y="14" width="8" height="5" rx="2.5" fill="#8a651b"/>' +
'<rect x="13" y="14" width="9" height="5" rx="2.5" fill="#b32424"/>' +
'<rect x="24" y="14" width="5" height="5" rx="2.5" fill="#6b4a86"/>' +
'<rect x="3" y="21" width="15" height="5" rx="2.5" fill="#3a7a7a"/>' +
'<rect x="20" y="21" width="9" height="5" rx="2.5" fill="#8b3a3a"/>' +
'</svg>';
function addIndicatorButton() {
var indicators = document.querySelector( '.mw-indicators' );
if ( !indicators ) {
// Fall back to the toolbox if this skin/page has no indicators row.
mw.loader.using( [ 'mediawiki.util' ] ).then( function () {
mw.util.addPortletLink(
'p-tb',
'#',
'Leximap',
'ca-leximap',
'Highlight words by Wikidata lexeme category'
).addEventListener( 'click', function ( e ) {
e.preventDefault();
toggle( null );
} );
} );
return;
}
var wrapper = document.createElement( 'div' );
wrapper.id = 'mw-indicator-lx-leximap';
wrapper.className = 'mw-indicator';
indicatorWrapper = wrapper;
var group = document.createElement( 'div' );
group.className = 'lx-btn';
var main = document.createElement( 'button' );
main.type = 'button';
main.className = 'lx-btn-main';
main.title = 'Highlight words by Wikidata lexeme category';
var icon = document.createElement( 'span' );
icon.className = 'lx-btn-icon';
// Static, trusted markup (matches the Leximap app logo mark) -- not user data.
icon.innerHTML = ICON_SVG;
main.appendChild( icon );
var label = document.createElement( 'span' );
label.className = 'lx-btn-label';
label.textContent = 'Leximap';
main.appendChild( label );
var caret = document.createElement( 'button' );
caret.type = 'button';
caret.className = 'lx-btn-caret';
caret.title = 'Leximap settings';
caret.setAttribute( 'aria-label', 'Leximap settings' );
caret.textContent = '▾';
group.appendChild( main );
group.appendChild( caret );
wrapper.appendChild( group );
main.addEventListener( 'click', function ( e ) {
e.preventDefault();
toggle( group );
} );
caret.addEventListener( 'click', function ( e ) {
e.preventDefault();
e.stopPropagation();
showPanel( group, group );
} );
indicators.appendChild( wrapper );
}
// Take the default palette from the backend so we're not keeping our own
// copy. Anyone who's customized their colors keeps them.
function applyServerPalette( p ) {
if ( !p || typeof p !== 'object' || p.error ) {
return;
}
if ( p.categoryColors && typeof p.categoryColors === 'object' ) {
Object.assign( DEFAULT_CATEGORY_COLORS, p.categoryColors );
}
if ( p.gapColor ) {
DEFAULT_GAP_COLOR = p.gapColor;
}
if ( p.mixedColor ) {
DEFAULT_MIXED_COLOR = p.mixedColor;
}
if ( p.otherColor ) {
DEFAULT_OTHER_COLOR = p.otherColor;
}
if ( !options.customColors ) {
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS );
options.gapColor = DEFAULT_GAP_COLOR;
options.mixedColor = DEFAULT_MIXED_COLOR;
options.otherColor = DEFAULT_OTHER_COLOR;
repaintColors();
}
}
function fetchPalette() {
fetch( API_BASE + '/api/palette' )
.then( function ( res ) {
return res.json();
} )
.then( applyServerPalette )
.catch( function () {
// Offline / API down -- keep the built-in defaults.
} );
}
fetchPalette();
addIndicatorButton();
}() );
kj775i6csmcgvn3gpgfhrck2kmdbl5v
1996858
1996857
2026-08-30T16:40:09Z
Mahir256
1096
1996858
javascript
text/javascript
/**
* Leximap gadget — highlights words on Wikisource pages by Wikidata lexeme
* category, using the Leximap API (https://leximap.toolforge.org).
*/
( function () {
'use strict';
if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ) {
return;
}
var css = '.mw-parser-output .lx-w {\n' +
' color: inherit;\n' +
'}\n' +
'.mw-parser-output.lx-active .lx-w.lx-match,\n' +
'.mw-parser-output.lx-active .lx-w.lx-mixed {\n' +
' color: var( --lx-color, #4b4453 );\n' +
' cursor: pointer;\n' +
' border-bottom: 1px dotted currentColor;\n' +
'}\n' +
'.mw-parser-output.lx-active .lx-w.lx-gap {\n' +
' background: rgba( 255, 212, 0, 0.3 );\n' +
' background: color-mix( in srgb, var( --lx-color, #ffd400 ) 30%, transparent );\n' +
' border-bottom: 2px solid var( --lx-color, #ffd400 );\n' +
' border-radius: 2px;\n' +
'}\n' +
'/* Unmatched words are only clickable when they link out to Wikidata. */\n' +
'body.lx-links-gaps .mw-parser-output.lx-active .lx-w.lx-gap {\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-btn {\n' +
' display: inline-flex;\n' +
' align-items: stretch;\n' +
' height: 2rem;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
' background: #f8f9fa;\n' +
' overflow: hidden;\n' +
' font-size: 0.875rem;\n' +
' line-height: 1;\n' +
' vertical-align: middle;\n' +
'}\n' +
'.lx-btn-main,\n' +
'.lx-btn-caret {\n' +
' display: inline-flex;\n' +
' align-items: center;\n' +
' border: 0;\n' +
' background: transparent;\n' +
' color: #202122;\n' +
' cursor: pointer;\n' +
' font: inherit;\n' +
' padding: 0 0.7rem;\n' +
'}\n' +
'.lx-btn-main:hover,\n' +
'.lx-btn-caret:hover {\n' +
' background: #eef2f7;\n' +
'}\n' +
'.lx-btn-main:focus,\n' +
'.lx-btn-caret:focus {\n' +
' outline: 2px solid #3b5a85;\n' +
' outline-offset: -2px;\n' +
'}\n' +
'.lx-btn-icon {\n' +
' display: inline-flex;\n' +
' align-items: center;\n' +
' margin-right: 0.4rem;\n' +
'}\n' +
'.lx-btn-icon svg {\n' +
' display: block;\n' +
' width: 15px;\n' +
' height: 15px;\n' +
'}\n' +
'.lx-btn-label {\n' +
' white-space: nowrap;\n' +
'}\n' +
'.lx-btn-caret {\n' +
' padding: 0 0.55rem;\n' +
' border-left: 1px solid #a2a9b1;\n' +
' color: #54595d;\n' +
' font-size: 0.7rem;\n' +
'}\n' +
'.lx-btn.lx-indicator-active {\n' +
' border-color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-indicator-active .lx-btn-main {\n' +
' background: #e3ebf3;\n' +
' color: #3b5a85;\n' +
' font-weight: 600;\n' +
'}\n' +
'.lx-btn.lx-indicator-active .lx-btn-caret {\n' +
' border-left-color: #b7c6d8;\n' +
' color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-loading {\n' +
' border-color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-loading .lx-btn-main {\n' +
' color: #3b5a85;\n' +
' font-variant-numeric: tabular-nums;\n' +
'}\n' +
'.lx-btn-main:disabled,\n' +
'.lx-btn-caret:disabled {\n' +
' cursor: progress;\n' +
'}\n' +
'.lx-btn-icon svg {\n' +
' transition: transform 0.6s linear;\n' +
'}\n' +
'.lx-btn.lx-loading .lx-btn-icon svg {\n' +
' animation: lx-spin 1s linear infinite;\n' +
'}\n' +
'@keyframes lx-spin {\n' +
' from { transform: rotate( 0deg ); }\n' +
' to { transform: rotate( 360deg ); }\n' +
'}\n' +
'.lx-progress {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' gap: 0.4rem;\n' +
' margin-top: 0.25rem;\n' +
' font-size: 0.72rem;\n' +
' line-height: 1;\n' +
' color: #54595d;\n' +
'}\n' +
'.lx-progress-bar {\n' +
' flex: 1 1 auto;\n' +
' min-width: 60px;\n' +
' height: 6px;\n' +
' border-radius: 3px;\n' +
' background: #eaecf0;\n' +
' overflow: hidden;\n' +
'}\n' +
'.lx-progress-fill {\n' +
' height: 100%;\n' +
' width: 0;\n' +
' border-radius: 3px;\n' +
' background: #3b5a85;\n' +
' transition: width 0.4s ease, background-color 0.4s ease;\n' +
'}\n' +
'.lx-progress-complete .lx-progress-fill {\n' +
' background: #14866d;\n' +
'}\n' +
'.lx-progress-label {\n' +
' white-space: nowrap;\n' +
' font-variant-numeric: tabular-nums;\n' +
'}\n' +
'.lx-progress-complete .lx-progress-label {\n' +
' color: #14866d;\n' +
' font-weight: 600;\n' +
'}\n' +
'.lx-confetti {\n' +
' position: fixed;\n' +
' inset: 0;\n' +
' pointer-events: none;\n' +
' z-index: 10000;\n' +
' overflow: hidden;\n' +
'}\n' +
'.lx-confetti-piece {\n' +
' position: absolute;\n' +
' top: -12px;\n' +
' width: 8px;\n' +
' height: 12px;\n' +
' border-radius: 1px;\n' +
' opacity: 0.9;\n' +
' animation-name: lx-fall;\n' +
' animation-timing-function: linear;\n' +
' animation-fill-mode: forwards;\n' +
'}\n' +
'@keyframes lx-fall {\n' +
' 0% {\n' +
' transform: translateY( -12px ) rotate( 0deg );\n' +
' opacity: 1;\n' +
' }\n' +
' 100% {\n' +
' transform: translateY( 105vh ) rotate( 720deg );\n' +
' opacity: 0.9;\n' +
' }\n' +
'}\n' +
'@media ( prefers-reduced-motion: reduce ) {\n' +
' .lx-progress-fill {\n' +
' transition: none;\n' +
' }\n' +
'}\n' +
'.lx-panel {\n' +
' position: absolute;\n' +
' z-index: 1000;\n' +
' width: 280px;\n' +
' max-width: calc( 100vw - 1.5rem );\n' +
' max-height: 80vh;\n' +
' overflow-y: auto;\n' +
' background: #fff;\n' +
' border: 1px solid #c8ccd1;\n' +
' border-radius: 6px;\n' +
' box-shadow: 0 4px 16px rgba( 0, 0, 0, 0.15 );\n' +
' padding: 0.85rem 1rem;\n' +
' font-size: 0.85rem;\n' +
' color: #202122;\n' +
'}\n' +
'@media ( max-width: 480px ) {\n' +
' .lx-panel-cat-grid {\n' +
' grid-template-columns: 1fr;\n' +
' }\n' +
'}\n' +
'.lx-panel-count {\n' +
' margin: -0.85rem -1rem 0.7rem;\n' +
' padding: 0.55rem 1rem;\n' +
' border-bottom: 1px solid #eaecf0;\n' +
' background: #f8f9fa;\n' +
' border-radius: 6px 6px 0 0;\n' +
' color: #54595d;\n' +
' font-size: 0.78rem;\n' +
'}\n' +
'.lx-panel-row {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' justify-content: space-between;\n' +
' gap: 0.5rem;\n' +
' margin-bottom: 0.55rem;\n' +
'}\n' +
'.lx-panel-row input[ type="number" ] {\n' +
' width: 4.5rem;\n' +
' padding: 0.15rem 0.35rem;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
'}\n' +
'.lx-panel-row input[ type="checkbox" ] {\n' +
' margin: 0;\n' +
'}\n' +
'.lx-panel-cat-label {\n' +
' margin: 0.6rem 0 0.4rem;\n' +
' padding-top: 0.55rem;\n' +
' border-top: 1px solid #eaecf0;\n' +
' color: #54595d;\n' +
' font-size: 0.78rem;\n' +
'}\n' +
'.lx-panel-cat-grid {\n' +
' display: grid;\n' +
' grid-template-columns: 1fr 1fr;\n' +
' gap: 0.3rem 0.5rem;\n' +
' margin-bottom: 0.7rem;\n' +
'}\n' +
'.lx-panel-cat {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' gap: 0.35rem;\n' +
' font-size: 0.8rem;\n' +
'}\n' +
'.lx-panel-cat input {\n' +
' margin: 0;\n' +
'}\n' +
'.lx-panel-color-row {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' justify-content: space-between;\n' +
' gap: 0.5rem;\n' +
' margin-bottom: 0.3rem;\n' +
' font-size: 0.8rem;\n' +
' text-transform: capitalize;\n' +
'}\n' +
'.lx-panel-color-row input[ type="color" ] {\n' +
' width: 1.8rem;\n' +
' height: 1.4rem;\n' +
' padding: 0;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
' background: none;\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-panel-apply {\n' +
' width: 100%;\n' +
' padding: 0.45rem;\n' +
' border: 1px solid #3b5a85;\n' +
' border-radius: 3px;\n' +
' background: #3b5a85;\n' +
' color: #fff;\n' +
' font-size: 0.85rem;\n' +
' font-weight: 600;\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-panel-apply:hover {\n' +
' background: #2e4568;\n' +
' border-color: #2e4568;\n' +
'}\n' +
'.lx-popover {\n' +
' position: absolute;\n' +
' z-index: 1000;\n' +
' max-width: 320px;\n' +
' max-height: 340px;\n' +
' overflow-y: auto;\n' +
' background: #fff;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 4px;\n' +
' box-shadow: 0 2px 8px rgba( 0, 0, 0, 0.2 );\n' +
' padding: 0.5rem 0.75rem;\n' +
' font-size: 0.9rem;\n' +
'}\n' +
'.lx-popover .lx-entry {\n' +
' border-top: 1px solid #eaecf0;\n' +
' padding: 0.5rem 0;\n' +
'}\n' +
'.lx-popover .lx-entry:first-child {\n' +
' border-top: 0;\n' +
'}\n' +
'.lx-popover .lx-entry a {\n' +
' font-weight: 600;\n' +
' text-decoration: none;\n' +
'}\n' +
'.lx-popover .lx-cat {\n' +
' font-size: 0.8rem;\n' +
' color: #72777d;\n' +
' margin-left: 0.4rem;\n' +
'}\n' +
'.lx-popover .lx-gloss {\n' +
' margin: 0.2rem 0 0;\n' +
' font-size: 0.85rem;\n' +
' color: #54595d;\n' +
'}\n';
var styleEl = document.createElement( 'style' );
styleEl.textContent = css;
document.head.appendChild( styleEl );
var API_BASE = 'https://leximap.toolforge.org';
// Look words up in the wiki's own language (unknown ones fall back to
// English server-side).
var LANG = mw.config.get( 'wgContentLanguage' ) || 'en';
// Wikidata language items, mirroring the server's config.LANGUAGES. Used to
// prefill the language on Wikidata's lexeme creation form.
var LANG_QIDS = {
en: 'Q1860', fr: 'Q150', de: 'Q188', es: 'Q1321', it: 'Q652', pt: 'Q5146',
ru: 'Q7737', nl: 'Q7411', pl: 'Q809', sv: 'Q9027', la: 'Q397'
};
var WORD_RE = /[\p{L}']+/gu;
var BATCH_SIZE = 40;
var CATEGORIES = [
"Q1084", "Q147276", "Q24905", "Q34698", "Q380057", "Q36224", "Q4833830", "Q36484", "Q576271", "Q2865743", "Q3813849", "Q103184", "Q83034", "Q63116", "Q134830", "Q102047", "Q10535365"
];
// Base palette matches colorize.py's CATEGORY_COLORS; extra categories
// (seen in real Wikidata lexeme data but not in the server's fixed list)
// get sensible defaults here since the gadget colors client-side.
var DEFAULT_CATEGORY_COLORS = {
"Q1084": "#a4161a", // noun
"Q147276": "#8a4b8a", // proper noun
"Q24905": "#1b7a3d", // verb
"Q34698": "#5c3a21", // adjective
"Q380057": "#1959b8", // adverb
"Q36224": "#7d2ae8", // pronoun
"Q4833830": "#067a6f", // preposition
"Q36484": "#c2540c", // conjunction
"Q576271": "#4b4453", // determiner
"Q2865743": "#5c6b73", // definite article
"Q3813849": "#7a8b93", // indefinite article
"Q103184": "#4b4453", // article
"Q83034": "#c2185b", // interjection
"Q63116": "#2a3f8f", // numeral
"Q134830": "#a0785a", // prefix
"Q102047": "#c99a5b", // suffix
"Q10535365": "#3d8b8b" // infinitive marker
};
var DEFAULT_GAP_COLOR = '#ffd400'; // bright yellow -- no lexeme match
var DEFAULT_MIXED_COLOR = '#5d6d7e'; // word matches more than one category
var DEFAULT_OTHER_COLOR = '#4b4453'; // category outside the customizable list
var options = {
glosses: 1,
max_glosses: 3,
limit: null, // null = every unique word on the page
categories: null, // null = all
categoryColors: Object.assign( {}, DEFAULT_CATEGORY_COLORS ),
gapColor: DEFAULT_GAP_COLOR,
mixedColor: DEFAULT_MIXED_COLOR,
otherColor: DEFAULT_OTHER_COLOR,
colorsEnabled: 1,
linkGaps: 1, // clicking an unmatched word opens Wikidata's lexeme form
customColors: 0 // 0 = use default palette, hide the color pickers
};
var STORAGE_KEY = 'leximap-gadget-options';
function loadStoredOptions() {
try {
var raw = localStorage.getItem( STORAGE_KEY );
if ( !raw ) {
return;
}
var stored = JSON.parse( raw );
if ( stored && typeof stored === 'object' ) {
Object.assign( options, stored );
if ( options.categoryColors ) {
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS, options.categoryColors );
}
if ( typeof options.limit === 'number' ) {
limitTouched = true;
}
}
} catch ( e ) {
// Storage unavailable (private browsing, disabled, etc.) -- fall back to defaults.
}
}
function saveOptions() {
try {
localStorage.setItem( STORAGE_KEY, JSON.stringify( options ) );
} catch ( e ) {
// Ignore -- persistence is a nicety, not a requirement.
}
}
var active = false;
var loaded = false;
var limitTouched = false;
var wordMap = null; // lowercase word -> { status: 'match'|'mixed'|'gap', categories: [...] }
var $content = null;
var popoverEl = null;
var panelEl = null;
var progressEl = null;
var indicatorWrapper = null;
loadStoredOptions();
function syncGapLinkClass() {
if ( document.body ) {
document.body.classList.toggle( 'lx-links-gaps', !!options.linkGaps );
}
}
syncGapLinkClass();
function colorForWord( info ) {
if ( !options.colorsEnabled ) {
return null;
}
if ( info.status === 'gap' ) {
return options.gapColor;
}
if ( info.status === 'mixed' ) {
return options.mixedColor;
}
var cat = info.categories[ 0 ].toLowerCase();
return options.categoryColors[ cat ] || options.otherColor;
}
function extractWords( root ) {
var text = root.textContent;
var counts = {};
var order = [];
var match;
WORD_RE.lastIndex = 0;
while ( ( match = WORD_RE.exec( text ) ) ) {
var w = match[ 0 ].toLowerCase();
if ( !( w in counts ) ) {
counts[ w ] = 0;
order.push( w );
}
counts[ w ]++;
}
return order
.map( function ( w ) {
return { word: w, count: counts[ w ] };
} )
.sort( function ( a, b ) {
return b.count - a.count;
} );
}
function mergeLookupIntoWordMap( data ) {
Object.keys( data ).forEach( function ( word ) {
var entries = data[ word ];
if ( !entries || !entries.length ) {
wordMap[ word ] = { status: 'gap', lexemes: [], categories: [] };
return;
}
var cats = [];
entries.forEach( function ( e ) {
if ( cats.indexOf( e.category ) === -1 ) {
cats.push( e.category );
}
} );
wordMap[ word ] = {
status: cats.length > 1 ? 'mixed' : 'match',
lexemes: entries,
categories: cats
};
} );
}
function fetchLookupBatch( words ) {
var body = {
words: words,
glosses: options.glosses,
max_glosses: options.max_glosses,
lang: LANG
};
if ( options.categories && options.categories.length ) {
body.categories = options.categories;
}
return fetch( API_BASE + '/api/lookup', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify( body )
} ).then( function ( res ) {
return res.json();
} );
}
function highlightContainer( root ) {
var walker = document.createTreeWalker(
root,
NodeFilter.SHOW_TEXT,
{
acceptNode: function ( node ) {
var parent = node.parentElement;
if ( !parent || parent.closest( 'script, style, .mw-editsection, .lx-w' ) ) {
return NodeFilter.FILTER_REJECT;
}
return NodeFilter.FILTER_ACCEPT;
}
}
);
var textNodes = [];
var node;
while ( ( node = walker.nextNode() ) ) {
textNodes.push( node );
}
textNodes.forEach( function ( textNode ) {
var text = textNode.nodeValue;
WORD_RE.lastIndex = 0;
var match;
var lastIndex = 0;
var frag = null;
while ( ( match = WORD_RE.exec( text ) ) ) {
var word = match[ 0 ];
var lower = word.toLowerCase();
var info = wordMap[ lower ];
if ( !info ) {
continue;
}
if ( !frag ) {
frag = document.createDocumentFragment();
}
frag.appendChild( document.createTextNode( text.slice( lastIndex, match.index ) ) );
var span = document.createElement( 'span' );
span.className = 'lx-w lx-' + info.status;
span.dataset.lxWord = lower;
// Show the category on hover, so it isn't down to color alone.
span.title = info.status === 'gap' ?
( options.linkGaps ?
'No Wikidata lexeme yet -- click to create one' :
'No Wikidata lexeme yet' ) :
info.categories.join( ', ' );
var color = colorForWord( info );
if ( color ) {
span.style.setProperty( '--lx-color', color );
}
span.textContent = word;
frag.appendChild( span );
lastIndex = match.index + word.length;
}
if ( frag ) {
frag.appendChild( document.createTextNode( text.slice( lastIndex ) ) );
textNode.parentNode.replaceChild( frag, textNode );
}
} );
}
function positionNear( el, anchor ) {
// Append first (off-screen) so offsetWidth/offsetHeight are measurable.
document.body.appendChild( el );
var rect = anchor.getBoundingClientRect();
var margin = 8;
var maxLeft = window.scrollX + document.documentElement.clientWidth - el.offsetWidth - margin;
var left = Math.max( window.scrollX + margin, Math.min( window.scrollX + rect.left, maxLeft ) );
var top = window.scrollY + rect.bottom + 4;
var maxTop = window.scrollY + document.documentElement.clientHeight - el.offsetHeight - margin;
if ( top > maxTop && rect.top - el.offsetHeight - 4 > 0 ) {
// Not enough room below -- flip above the anchor instead.
top = window.scrollY + rect.top - el.offsetHeight - 4;
}
el.style.left = left + 'px';
el.style.top = top + 'px';
}
function hidePopover() {
if ( popoverEl ) {
popoverEl.remove();
popoverEl = null;
}
}
function showPopover( span, info ) {
hidePopover();
popoverEl = document.createElement( 'div' );
popoverEl.className = 'lx-popover';
info.lexemes.forEach( function ( l ) {
var entry = document.createElement( 'div' );
entry.className = 'lx-entry';
var link = document.createElement( 'a' );
link.href = 'https://www.wikidata.org/wiki/Lexeme:' + l.lexeme;
link.target = '_blank';
link.rel = 'noopener';
link.textContent = l.lexeme;
entry.appendChild( link );
var cat = document.createElement( 'span' );
cat.className = 'lx-cat';
cat.textContent = ' ' + l.category;
entry.appendChild( cat );
if ( l.glosses && l.glosses.length ) {
var gloss = document.createElement( 'p' );
gloss.className = 'lx-gloss';
gloss.textContent = l.glosses[ 0 ];
entry.appendChild( gloss );
}
popoverEl.appendChild( entry );
} );
positionNear( popoverEl, span );
}
// Wikidata's lexeme form, with the word and its language filled in. The
// category is left blank -- that's the bit the editor has to decide.
function newLexemeUrl( word ) {
return 'https://www.wikidata.org/wiki/Special:NewLexeme?' + new URLSearchParams( {
lemma: word,
'spelling-variant': LANG,
language: LANG_QIDS[ LANG ] || LANG_QIDS.en
} );
}
document.addEventListener( 'click', function ( e ) {
var span = e.target.closest( '.lx-w' );
if ( span && ( span.classList.contains( 'lx-match' ) || span.classList.contains( 'lx-mixed' ) ) ) {
e.preventDefault();
showPopover( span, wordMap[ span.dataset.lxWord ] );
} else if ( span && span.classList.contains( 'lx-gap' ) && options.linkGaps ) {
e.preventDefault();
hidePopover();
window.open( newLexemeUrl( span.dataset.lxWord ), '_blank', 'noopener' );
} else if ( !e.target.closest( '.lx-popover' ) ) {
hidePopover();
}
} );
function unwrapContainer( root ) {
var spans = root.querySelectorAll( '.lx-w' );
spans.forEach( function ( span ) {
var text = document.createTextNode( span.textContent );
span.parentNode.replaceChild( text, span );
} );
}
function repaintColors() {
if ( !$content || !$content.length || !wordMap ) {
return;
}
var spans = $content[ 0 ].querySelectorAll( '.lx-w' );
spans.forEach( function ( span ) {
var info = wordMap[ span.dataset.lxWord ];
if ( !info ) {
return;
}
var color = colorForWord( info );
if ( color ) {
span.style.setProperty( '--lx-color', color );
} else {
span.style.removeProperty( '--lx-color' );
}
if ( info.status === 'gap' ) {
span.title = options.linkGaps ?
'No Wikidata lexeme yet -- click to create one' :
'No Wikidata lexeme yet';
}
} );
syncGapLinkClass();
}
// Share of looked-up words that have a lexeme. No gaps means fully mapped.
function computeStats() {
if ( !wordMap ) {
return null;
}
var total = 0, gaps = 0;
Object.keys( wordMap ).forEach( function ( w ) {
total++;
if ( wordMap[ w ].status === 'gap' ) {
gaps++;
}
} );
if ( !total ) {
return null;
}
var matched = total - gaps;
return { total: total, matched: matched, gaps: gaps, pct: Math.round( matched / total * 100 ) };
}
function updateProgress() {
var stats = ( active && loaded ) ? computeStats() : null;
if ( !stats || !indicatorWrapper ) {
if ( progressEl ) {
progressEl.remove();
progressEl = null;
}
return;
}
if ( !progressEl ) {
progressEl = document.createElement( 'div' );
progressEl.className = 'lx-progress';
var bar = document.createElement( 'div' );
bar.className = 'lx-progress-bar';
var fill = document.createElement( 'div' );
fill.className = 'lx-progress-fill';
bar.appendChild( fill );
var label = document.createElement( 'span' );
label.className = 'lx-progress-label';
progressEl.appendChild( bar );
progressEl.appendChild( label );
indicatorWrapper.appendChild( progressEl );
}
progressEl.querySelector( '.lx-progress-fill' ).style.width = stats.pct + '%';
progressEl.classList.toggle( 'lx-progress-complete', stats.gaps === 0 );
progressEl.querySelector( '.lx-progress-label' ).textContent = stats.gaps === 0 ?
stats.matched + '/' + stats.total + ' mapped ✓' :
stats.pct + '% · ' + stats.gaps + ' to fill';
progressEl.title = stats.matched + ' of ' + stats.total +
' words mapped to Wikidata lexemes' +
( stats.gaps ? ', ' + stats.gaps + ' still unmatched (red)' : '' );
}
function celebrate( stats ) {
mw.notify( 'Page fully mapped — all ' + stats.total + ' words matched! 🎉', { type: 'success' } );
if ( window.matchMedia && window.matchMedia( '(prefers-reduced-motion: reduce)' ).matches ) {
return;
}
var layer = document.createElement( 'div' );
layer.className = 'lx-confetti';
var colors = [ '#a4161a', '#1b7a3d', '#1959b8', '#c2540c', '#7d2ae8', '#ffd400' ];
for ( var i = 0; i < 60; i++ ) {
var piece = document.createElement( 'span' );
piece.className = 'lx-confetti-piece';
piece.style.left = ( Math.random() * 100 ) + 'vw';
piece.style.background = colors[ i % colors.length ];
piece.style.animationDelay = ( Math.random() * 0.4 ) + 's';
piece.style.animationDuration = ( 1.8 + Math.random() * 1.2 ) + 's';
layer.appendChild( piece );
}
document.body.appendChild( layer );
setTimeout( function () {
layer.remove();
}, 3600 );
}
function setActive( isActive, button ) {
active = isActive;
if ( $content ) {
$content.toggleClass( 'lx-active', active );
}
if ( button ) {
button.classList.toggle( 'lx-indicator-active', active );
}
updateProgress();
}
function setButtonBusy( button, isBusy ) {
if ( !button ) {
return;
}
var main = button.querySelector( '.lx-btn-main' );
var caret = button.querySelector( '.lx-btn-caret' );
if ( main ) {
main.disabled = isBusy;
}
if ( caret ) {
caret.disabled = isBusy;
}
button.classList.toggle( 'lx-loading', isBusy );
}
function loadAndHighlight( button ) {
$content = $( '#mw-content-text .mw-parser-output' );
if ( !$content.length ) {
return;
}
var root = $content[ 0 ];
var allWords = extractWords( root );
var limit = ( options.limit === null ) ? Math.min( allWords.length, 150 ) : options.limit;
var toFetch = allWords.slice( 0, limit ).map( function ( w ) {
return w.word;
} );
if ( !toFetch.length ) {
return;
}
wordMap = {};
var labelEl = button ? button.querySelector( '.lx-btn-label' ) : null;
var originalLabel = labelEl ? labelEl.textContent : null;
setButtonBusy( button, true );
var batches = [];
for ( var i = 0; i < toFetch.length; i += BATCH_SIZE ) {
batches.push( toFetch.slice( i, i + BATCH_SIZE ) );
}
var doneCount = 0;
var chain = Promise.resolve();
batches.forEach( function ( batch ) {
chain = chain.then( function () {
return fetchLookupBatch( batch ).then( function ( data ) {
if ( data.error ) {
throw new Error( data.error );
}
mergeLookupIntoWordMap( data.result );
highlightContainer( root );
doneCount += batch.length;
if ( labelEl ) {
labelEl.textContent = doneCount + ' / ' + toFetch.length;
}
if ( active && loaded ) {
updateProgress();
}
} );
} );
} );
chain.then( function () {
if ( labelEl ) {
labelEl.textContent = originalLabel;
}
setButtonBusy( button, false );
loaded = true;
setActive( true, button );
var stats = computeStats();
if ( stats && stats.gaps === 0 ) {
celebrate( stats );
}
} ).catch( function ( err ) {
if ( labelEl ) {
labelEl.textContent = originalLabel;
}
setButtonBusy( button, false );
mw.notify( 'Leximap: request failed (' + err + ')', { type: 'error' } );
} );
}
function toggle( button ) {
if ( !loaded ) {
loadAndHighlight( button );
return;
}
setActive( !active, button );
}
function reload( button ) {
hidePopover();
if ( $content && $content.length ) {
unwrapContainer( $content[ 0 ] );
}
loaded = false;
wordMap = null;
active = false;
if ( button ) {
button.classList.remove( 'lx-indicator-active' );
}
updateProgress();
loadAndHighlight( button );
}
function hidePanel() {
if ( panelEl ) {
panelEl.remove();
panelEl = null;
}
}
function showPanel( anchor, button ) {
if ( panelEl ) {
hidePanel();
return;
}
panelEl = document.createElement( 'div' );
panelEl.className = 'lx-panel';
var root = ( $content && $content.length ) ? $content[ 0 ] : document.querySelector( '#mw-content-text .mw-parser-output' );
var uniqueCount = root ? extractWords( root ).length : null;
if ( uniqueCount !== null ) {
var countLabel = document.createElement( 'div' );
countLabel.className = 'lx-panel-count';
countLabel.textContent = 'This page has ' + uniqueCount + ' unique word' + ( uniqueCount === 1 ? '' : 's' ) + '.';
panelEl.appendChild( countLabel );
if ( !limitTouched ) {
options.limit = Math.min( uniqueCount, 150 );
}
}
function numberField( labelText, value, min, max ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-row';
var span = document.createElement( 'span' );
span.textContent = labelText;
var input = document.createElement( 'input' );
input.type = 'number';
input.min = min;
input.max = max;
input.value = value;
row.appendChild( span );
row.appendChild( input );
panelEl.appendChild( row );
return input;
}
function checkboxField( labelText, checked ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-row';
var input = document.createElement( 'input' );
input.type = 'checkbox';
input.checked = checked;
var span = document.createElement( 'span' );
span.textContent = labelText;
row.appendChild( input );
row.appendChild( span );
panelEl.appendChild( row );
return input;
}
function colorField( labelText, value ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-color-row';
var span = document.createElement( 'span' );
span.textContent = labelText;
var input = document.createElement( 'input' );
input.type = 'color';
input.value = value;
row.appendChild( span );
row.appendChild( input );
panelEl.appendChild( row );
return input;
}
var maxAllowed = uniqueCount !== null ? uniqueCount : 999;
var limitInput = numberField( 'Words to check', options.limit, 0, maxAllowed );
var maxGlossesInput = numberField( 'Glosses per word', options.max_glosses, 0, 10 );
var glossesInput = checkboxField( 'Show glosses', options.glosses === 1 );
var linkGapsInput = checkboxField( 'Link unmatched words to Wikidata', options.linkGaps === 1 );
var colorsEnabledInput = checkboxField( 'Colored highlighting', options.colorsEnabled === 1 );
var customColorsInput = checkboxField( 'Customize colors', options.customColors === 1 );
var catLabel = document.createElement( 'div' );
catLabel.className = 'lx-panel-cat-label';
catLabel.textContent = 'Categories (none checked = all)';
panelEl.appendChild( catLabel );
var catGrid = document.createElement( 'div' );
catGrid.className = 'lx-panel-cat-grid';
var catInputs = {};
CATEGORIES.forEach( function ( cat ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-cat';
var input = document.createElement( 'input' );
input.type = 'checkbox';
input.checked = !!( options.categories && options.categories.indexOf( cat ) !== -1 );
var span = document.createElement( 'span' );
span.textContent = cat;
row.appendChild( input );
row.appendChild( span );
catGrid.appendChild( row );
catInputs[ cat ] = input;
} );
panelEl.appendChild( catGrid );
// Group the pickers so the "Customize colors" checkbox can hide them.
// colorField() appends to panelEl, so point panelEl here while we build.
var colorSection = document.createElement( 'div' );
colorSection.className = 'lx-panel-colors';
var realPanelEl = panelEl;
panelEl = colorSection;
var colorLabel = document.createElement( 'div' );
colorLabel.className = 'lx-panel-cat-label';
colorLabel.textContent = 'Colors';
colorSection.appendChild( colorLabel );
var colorInputs = {};
CATEGORIES.forEach( function ( cat ) {
colorInputs[ cat ] = colorField( cat, options.categoryColors[ cat ] || DEFAULT_OTHER_COLOR );
} );
var mixedColorInput = colorField( 'Multiple categories', options.mixedColor );
var otherColorInput = colorField( 'Other categories', options.otherColor );
var gapColorInput = colorField( 'No match', options.gapColor );
panelEl = realPanelEl;
panelEl.appendChild( colorSection );
function syncColorSection() {
colorSection.style.display = customColorsInput.checked ? '' : 'none';
}
syncColorSection();
customColorsInput.addEventListener( 'change', syncColorSection );
var applyButton = document.createElement( 'button' );
applyButton.type = 'button';
applyButton.className = 'lx-panel-apply';
applyButton.textContent = 'Apply';
applyButton.addEventListener( 'click', function () {
var newLimit = Math.max( 0, Math.min( parseInt( limitInput.value, 10 ) || 0, maxAllowed ) );
var newMaxGlosses = parseInt( maxGlossesInput.value, 10 ) || 0;
var newGlosses = glossesInput.checked ? 1 : 0;
var checkedCats = CATEGORIES.filter( function ( cat ) {
return catInputs[ cat ].checked;
} );
var newCategories = checkedCats.length ? checkedCats : null;
var needsRefetch = loaded && (
newLimit !== options.limit ||
newMaxGlosses !== options.max_glosses ||
newGlosses !== options.glosses ||
JSON.stringify( newCategories ) !== JSON.stringify( options.categories )
);
limitTouched = true;
options.limit = newLimit;
options.max_glosses = newMaxGlosses;
options.glosses = newGlosses;
options.categories = newCategories;
options.linkGaps = linkGapsInput.checked ? 1 : 0;
options.colorsEnabled = colorsEnabledInput.checked ? 1 : 0;
options.customColors = customColorsInput.checked ? 1 : 0;
if ( options.customColors ) {
CATEGORIES.forEach( function ( cat ) {
options.categoryColors[ cat ] = colorInputs[ cat ].value;
} );
options.mixedColor = mixedColorInput.value;
options.otherColor = otherColorInput.value;
options.gapColor = gapColorInput.value;
} else {
// Not customizing -- fall back to the built-in palette.
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS );
options.mixedColor = DEFAULT_MIXED_COLOR;
options.otherColor = DEFAULT_OTHER_COLOR;
options.gapColor = DEFAULT_GAP_COLOR;
}
saveOptions();
syncGapLinkClass();
hidePanel();
if ( needsRefetch ) {
reload( button );
} else if ( loaded ) {
repaintColors();
}
} );
panelEl.appendChild( applyButton );
positionNear( panelEl, anchor );
}
document.addEventListener( 'click', function ( e ) {
if ( panelEl && !e.target.closest( '.lx-panel' ) && !e.target.closest( '.lx-btn-caret' ) ) {
hidePanel();
}
} );
var ICON_SVG = '<svg viewBox="0 0 32 32" aria-hidden="true" focusable="false">' +
'<rect x="3" y="7" width="12" height="5" rx="2.5" fill="#2f6b45"/>' +
'<rect x="17" y="7" width="12" height="5" rx="2.5" fill="#3b5a85"/>' +
'<rect x="3" y="14" width="8" height="5" rx="2.5" fill="#8a651b"/>' +
'<rect x="13" y="14" width="9" height="5" rx="2.5" fill="#b32424"/>' +
'<rect x="24" y="14" width="5" height="5" rx="2.5" fill="#6b4a86"/>' +
'<rect x="3" y="21" width="15" height="5" rx="2.5" fill="#3a7a7a"/>' +
'<rect x="20" y="21" width="9" height="5" rx="2.5" fill="#8b3a3a"/>' +
'</svg>';
function addIndicatorButton() {
var indicators = document.querySelector( '.mw-indicators' );
if ( !indicators ) {
// Fall back to the toolbox if this skin/page has no indicators row.
mw.loader.using( [ 'mediawiki.util' ] ).then( function () {
mw.util.addPortletLink(
'p-tb',
'#',
'Leximap',
'ca-leximap',
'Highlight words by Wikidata lexeme category'
).addEventListener( 'click', function ( e ) {
e.preventDefault();
toggle( null );
} );
} );
return;
}
var wrapper = document.createElement( 'div' );
wrapper.id = 'mw-indicator-lx-leximap';
wrapper.className = 'mw-indicator';
indicatorWrapper = wrapper;
var group = document.createElement( 'div' );
group.className = 'lx-btn';
var main = document.createElement( 'button' );
main.type = 'button';
main.className = 'lx-btn-main';
main.title = 'Highlight words by Wikidata lexeme category';
var icon = document.createElement( 'span' );
icon.className = 'lx-btn-icon';
// Static, trusted markup (matches the Leximap app logo mark) -- not user data.
icon.innerHTML = ICON_SVG;
main.appendChild( icon );
var label = document.createElement( 'span' );
label.className = 'lx-btn-label';
label.textContent = 'Leximap';
main.appendChild( label );
var caret = document.createElement( 'button' );
caret.type = 'button';
caret.className = 'lx-btn-caret';
caret.title = 'Leximap settings';
caret.setAttribute( 'aria-label', 'Leximap settings' );
caret.textContent = '▾';
group.appendChild( main );
group.appendChild( caret );
wrapper.appendChild( group );
main.addEventListener( 'click', function ( e ) {
e.preventDefault();
toggle( group );
} );
caret.addEventListener( 'click', function ( e ) {
e.preventDefault();
e.stopPropagation();
showPanel( group, group );
} );
indicators.appendChild( wrapper );
}
// Take the default palette from the backend so we're not keeping our own
// copy. Anyone who's customized their colors keeps them.
function applyServerPalette( p ) {
if ( !p || typeof p !== 'object' || p.error ) {
return;
}
if ( p.categoryColors && typeof p.categoryColors === 'object' ) {
Object.assign( DEFAULT_CATEGORY_COLORS, p.categoryColors );
}
if ( p.gapColor ) {
DEFAULT_GAP_COLOR = p.gapColor;
}
if ( p.mixedColor ) {
DEFAULT_MIXED_COLOR = p.mixedColor;
}
if ( p.otherColor ) {
DEFAULT_OTHER_COLOR = p.otherColor;
}
if ( !options.customColors ) {
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS );
options.gapColor = DEFAULT_GAP_COLOR;
options.mixedColor = DEFAULT_MIXED_COLOR;
options.otherColor = DEFAULT_OTHER_COLOR;
repaintColors();
}
}
function fetchPalette() {
fetch( API_BASE + '/api/palette' )
.then( function ( res ) {
return res.json();
} )
.then( applyServerPalette )
.catch( function () {
// Offline / API down -- keep the built-in defaults.
} );
}
fetchPalette();
addIndicatorButton();
}() );
1tnefj1qj0nufq18w495zcfve8ty2g6
1996861
1996858
2026-08-30T16:45:01Z
Mahir256
1096
1996861
javascript
text/javascript
/**
* Leximap gadget — highlights words on Wikisource pages by Wikidata lexeme
* category, using the Leximap API (https://leximap.toolforge.org).
*/
( function () {
'use strict';
if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ) {
return;
}
var css = '.mw-parser-output .lx-w {\n' +
' color: inherit;\n' +
'}\n' +
'.mw-parser-output.lx-active .lx-w.lx-match,\n' +
'.mw-parser-output.lx-active .lx-w.lx-mixed {\n' +
' color: var( --lx-color, #4b4453 );\n' +
' cursor: pointer;\n' +
' border-bottom: 1px dotted currentColor;\n' +
'}\n' +
'.mw-parser-output.lx-active .lx-w.lx-gap {\n' +
' background: rgba( 255, 212, 0, 0.3 );\n' +
' background: color-mix( in srgb, var( --lx-color, #ffd400 ) 30%, transparent );\n' +
' border-bottom: 2px solid var( --lx-color, #ffd400 );\n' +
' border-radius: 2px;\n' +
'}\n' +
'/* Unmatched words are only clickable when they link out to Wikidata. */\n' +
'body.lx-links-gaps .mw-parser-output.lx-active .lx-w.lx-gap {\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-btn {\n' +
' display: inline-flex;\n' +
' align-items: stretch;\n' +
' height: 2rem;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
' background: #f8f9fa;\n' +
' overflow: hidden;\n' +
' font-size: 0.875rem;\n' +
' line-height: 1;\n' +
' vertical-align: middle;\n' +
'}\n' +
'.lx-btn-main,\n' +
'.lx-btn-caret {\n' +
' display: inline-flex;\n' +
' align-items: center;\n' +
' border: 0;\n' +
' background: transparent;\n' +
' color: #202122;\n' +
' cursor: pointer;\n' +
' font: inherit;\n' +
' padding: 0 0.7rem;\n' +
'}\n' +
'.lx-btn-main:hover,\n' +
'.lx-btn-caret:hover {\n' +
' background: #eef2f7;\n' +
'}\n' +
'.lx-btn-main:focus,\n' +
'.lx-btn-caret:focus {\n' +
' outline: 2px solid #3b5a85;\n' +
' outline-offset: -2px;\n' +
'}\n' +
'.lx-btn-icon {\n' +
' display: inline-flex;\n' +
' align-items: center;\n' +
' margin-right: 0.4rem;\n' +
'}\n' +
'.lx-btn-icon svg {\n' +
' display: block;\n' +
' width: 15px;\n' +
' height: 15px;\n' +
'}\n' +
'.lx-btn-label {\n' +
' white-space: nowrap;\n' +
'}\n' +
'.lx-btn-caret {\n' +
' padding: 0 0.55rem;\n' +
' border-left: 1px solid #a2a9b1;\n' +
' color: #54595d;\n' +
' font-size: 0.7rem;\n' +
'}\n' +
'.lx-btn.lx-indicator-active {\n' +
' border-color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-indicator-active .lx-btn-main {\n' +
' background: #e3ebf3;\n' +
' color: #3b5a85;\n' +
' font-weight: 600;\n' +
'}\n' +
'.lx-btn.lx-indicator-active .lx-btn-caret {\n' +
' border-left-color: #b7c6d8;\n' +
' color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-loading {\n' +
' border-color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-loading .lx-btn-main {\n' +
' color: #3b5a85;\n' +
' font-variant-numeric: tabular-nums;\n' +
'}\n' +
'.lx-btn-main:disabled,\n' +
'.lx-btn-caret:disabled {\n' +
' cursor: progress;\n' +
'}\n' +
'.lx-btn-icon svg {\n' +
' transition: transform 0.6s linear;\n' +
'}\n' +
'.lx-btn.lx-loading .lx-btn-icon svg {\n' +
' animation: lx-spin 1s linear infinite;\n' +
'}\n' +
'@keyframes lx-spin {\n' +
' from { transform: rotate( 0deg ); }\n' +
' to { transform: rotate( 360deg ); }\n' +
'}\n' +
'.lx-progress {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' gap: 0.4rem;\n' +
' margin-top: 0.25rem;\n' +
' font-size: 0.72rem;\n' +
' line-height: 1;\n' +
' color: #54595d;\n' +
'}\n' +
'.lx-progress-bar {\n' +
' flex: 1 1 auto;\n' +
' min-width: 60px;\n' +
' height: 6px;\n' +
' border-radius: 3px;\n' +
' background: #eaecf0;\n' +
' overflow: hidden;\n' +
'}\n' +
'.lx-progress-fill {\n' +
' height: 100%;\n' +
' width: 0;\n' +
' border-radius: 3px;\n' +
' background: #3b5a85;\n' +
' transition: width 0.4s ease, background-color 0.4s ease;\n' +
'}\n' +
'.lx-progress-complete .lx-progress-fill {\n' +
' background: #14866d;\n' +
'}\n' +
'.lx-progress-label {\n' +
' white-space: nowrap;\n' +
' font-variant-numeric: tabular-nums;\n' +
'}\n' +
'.lx-progress-complete .lx-progress-label {\n' +
' color: #14866d;\n' +
' font-weight: 600;\n' +
'}\n' +
'.lx-confetti {\n' +
' position: fixed;\n' +
' inset: 0;\n' +
' pointer-events: none;\n' +
' z-index: 10000;\n' +
' overflow: hidden;\n' +
'}\n' +
'.lx-confetti-piece {\n' +
' position: absolute;\n' +
' top: -12px;\n' +
' width: 8px;\n' +
' height: 12px;\n' +
' border-radius: 1px;\n' +
' opacity: 0.9;\n' +
' animation-name: lx-fall;\n' +
' animation-timing-function: linear;\n' +
' animation-fill-mode: forwards;\n' +
'}\n' +
'@keyframes lx-fall {\n' +
' 0% {\n' +
' transform: translateY( -12px ) rotate( 0deg );\n' +
' opacity: 1;\n' +
' }\n' +
' 100% {\n' +
' transform: translateY( 105vh ) rotate( 720deg );\n' +
' opacity: 0.9;\n' +
' }\n' +
'}\n' +
'@media ( prefers-reduced-motion: reduce ) {\n' +
' .lx-progress-fill {\n' +
' transition: none;\n' +
' }\n' +
'}\n' +
'.lx-panel {\n' +
' position: absolute;\n' +
' z-index: 1000;\n' +
' width: 280px;\n' +
' max-width: calc( 100vw - 1.5rem );\n' +
' max-height: 80vh;\n' +
' overflow-y: auto;\n' +
' background: #fff;\n' +
' border: 1px solid #c8ccd1;\n' +
' border-radius: 6px;\n' +
' box-shadow: 0 4px 16px rgba( 0, 0, 0, 0.15 );\n' +
' padding: 0.85rem 1rem;\n' +
' font-size: 0.85rem;\n' +
' color: #202122;\n' +
'}\n' +
'@media ( max-width: 480px ) {\n' +
' .lx-panel-cat-grid {\n' +
' grid-template-columns: 1fr;\n' +
' }\n' +
'}\n' +
'.lx-panel-count {\n' +
' margin: -0.85rem -1rem 0.7rem;\n' +
' padding: 0.55rem 1rem;\n' +
' border-bottom: 1px solid #eaecf0;\n' +
' background: #f8f9fa;\n' +
' border-radius: 6px 6px 0 0;\n' +
' color: #54595d;\n' +
' font-size: 0.78rem;\n' +
'}\n' +
'.lx-panel-row {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' justify-content: space-between;\n' +
' gap: 0.5rem;\n' +
' margin-bottom: 0.55rem;\n' +
'}\n' +
'.lx-panel-row input[ type="number" ] {\n' +
' width: 4.5rem;\n' +
' padding: 0.15rem 0.35rem;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
'}\n' +
'.lx-panel-row input[ type="checkbox" ] {\n' +
' margin: 0;\n' +
'}\n' +
'.lx-panel-cat-label {\n' +
' margin: 0.6rem 0 0.4rem;\n' +
' padding-top: 0.55rem;\n' +
' border-top: 1px solid #eaecf0;\n' +
' color: #54595d;\n' +
' font-size: 0.78rem;\n' +
'}\n' +
'.lx-panel-cat-grid {\n' +
' display: grid;\n' +
' grid-template-columns: 1fr 1fr;\n' +
' gap: 0.3rem 0.5rem;\n' +
' margin-bottom: 0.7rem;\n' +
'}\n' +
'.lx-panel-cat {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' gap: 0.35rem;\n' +
' font-size: 0.8rem;\n' +
'}\n' +
'.lx-panel-cat input {\n' +
' margin: 0;\n' +
'}\n' +
'.lx-panel-color-row {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' justify-content: space-between;\n' +
' gap: 0.5rem;\n' +
' margin-bottom: 0.3rem;\n' +
' font-size: 0.8rem;\n' +
' text-transform: capitalize;\n' +
'}\n' +
'.lx-panel-color-row input[ type="color" ] {\n' +
' width: 1.8rem;\n' +
' height: 1.4rem;\n' +
' padding: 0;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
' background: none;\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-panel-apply {\n' +
' width: 100%;\n' +
' padding: 0.45rem;\n' +
' border: 1px solid #3b5a85;\n' +
' border-radius: 3px;\n' +
' background: #3b5a85;\n' +
' color: #fff;\n' +
' font-size: 0.85rem;\n' +
' font-weight: 600;\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-panel-apply:hover {\n' +
' background: #2e4568;\n' +
' border-color: #2e4568;\n' +
'}\n' +
'.lx-popover {\n' +
' position: absolute;\n' +
' z-index: 1000;\n' +
' max-width: 320px;\n' +
' max-height: 340px;\n' +
' overflow-y: auto;\n' +
' background: #fff;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 4px;\n' +
' box-shadow: 0 2px 8px rgba( 0, 0, 0, 0.2 );\n' +
' padding: 0.5rem 0.75rem;\n' +
' font-size: 0.9rem;\n' +
'}\n' +
'.lx-popover .lx-entry {\n' +
' border-top: 1px solid #eaecf0;\n' +
' padding: 0.5rem 0;\n' +
'}\n' +
'.lx-popover .lx-entry:first-child {\n' +
' border-top: 0;\n' +
'}\n' +
'.lx-popover .lx-entry a {\n' +
' font-weight: 600;\n' +
' text-decoration: none;\n' +
'}\n' +
'.lx-popover .lx-cat {\n' +
' font-size: 0.8rem;\n' +
' color: #72777d;\n' +
' margin-left: 0.4rem;\n' +
'}\n' +
'.lx-popover .lx-gloss {\n' +
' margin: 0.2rem 0 0;\n' +
' font-size: 0.85rem;\n' +
' color: #54595d;\n' +
'}\n';
var styleEl = document.createElement( 'style' );
styleEl.textContent = css;
document.head.appendChild( styleEl );
var API_BASE = 'https://leximap.toolforge.org';
// Look words up in the wiki's own language (unknown ones fall back to
// English server-side).
var LANG = mw.config.get( 'wgContentLanguage' ) || 'en';
// Wikidata language items, mirroring the server's config.LANGUAGES. Used to
// prefill the language on Wikidata's lexeme creation form.
var LANG_QIDS = {
en: 'Q1860', fr: 'Q150', de: 'Q188', es: 'Q1321', it: 'Q652', pt: 'Q5146',
ru: 'Q7737', nl: 'Q7411', pl: 'Q809', sv: 'Q9027', la: 'Q397'
};
var WORD_RE = /[\p{L}\p{M}']+/gu;
var BATCH_SIZE = 40;
var CATEGORIES = [
"Q1084", "Q147276", "Q24905", "Q34698", "Q380057", "Q36224", "Q4833830", "Q36484", "Q576271", "Q2865743", "Q3813849", "Q103184", "Q83034", "Q63116", "Q134830", "Q102047", "Q10535365"
];
// Base palette matches colorize.py's CATEGORY_COLORS; extra categories
// (seen in real Wikidata lexeme data but not in the server's fixed list)
// get sensible defaults here since the gadget colors client-side.
var DEFAULT_CATEGORY_COLORS = {
"Q1084": "#a4161a", // noun
"Q147276": "#8a4b8a", // proper noun
"Q24905": "#1b7a3d", // verb
"Q34698": "#5c3a21", // adjective
"Q380057": "#1959b8", // adverb
"Q36224": "#7d2ae8", // pronoun
"Q4833830": "#067a6f", // preposition
"Q36484": "#c2540c", // conjunction
"Q576271": "#4b4453", // determiner
"Q2865743": "#5c6b73", // definite article
"Q3813849": "#7a8b93", // indefinite article
"Q103184": "#4b4453", // article
"Q83034": "#c2185b", // interjection
"Q63116": "#2a3f8f", // numeral
"Q134830": "#a0785a", // prefix
"Q102047": "#c99a5b", // suffix
"Q10535365": "#3d8b8b" // infinitive marker
};
var DEFAULT_GAP_COLOR = '#ffd400'; // bright yellow -- no lexeme match
var DEFAULT_MIXED_COLOR = '#5d6d7e'; // word matches more than one category
var DEFAULT_OTHER_COLOR = '#4b4453'; // category outside the customizable list
var options = {
glosses: 1,
max_glosses: 3,
limit: null, // null = every unique word on the page
categories: null, // null = all
categoryColors: Object.assign( {}, DEFAULT_CATEGORY_COLORS ),
gapColor: DEFAULT_GAP_COLOR,
mixedColor: DEFAULT_MIXED_COLOR,
otherColor: DEFAULT_OTHER_COLOR,
colorsEnabled: 1,
linkGaps: 1, // clicking an unmatched word opens Wikidata's lexeme form
customColors: 0 // 0 = use default palette, hide the color pickers
};
var STORAGE_KEY = 'leximap-gadget-options';
function loadStoredOptions() {
try {
var raw = localStorage.getItem( STORAGE_KEY );
if ( !raw ) {
return;
}
var stored = JSON.parse( raw );
if ( stored && typeof stored === 'object' ) {
Object.assign( options, stored );
if ( options.categoryColors ) {
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS, options.categoryColors );
}
if ( typeof options.limit === 'number' ) {
limitTouched = true;
}
}
} catch ( e ) {
// Storage unavailable (private browsing, disabled, etc.) -- fall back to defaults.
}
}
function saveOptions() {
try {
localStorage.setItem( STORAGE_KEY, JSON.stringify( options ) );
} catch ( e ) {
// Ignore -- persistence is a nicety, not a requirement.
}
}
var active = false;
var loaded = false;
var limitTouched = false;
var wordMap = null; // lowercase word -> { status: 'match'|'mixed'|'gap', categories: [...] }
var $content = null;
var popoverEl = null;
var panelEl = null;
var progressEl = null;
var indicatorWrapper = null;
loadStoredOptions();
function syncGapLinkClass() {
if ( document.body ) {
document.body.classList.toggle( 'lx-links-gaps', !!options.linkGaps );
}
}
syncGapLinkClass();
function colorForWord( info ) {
if ( !options.colorsEnabled ) {
return null;
}
if ( info.status === 'gap' ) {
return options.gapColor;
}
if ( info.status === 'mixed' ) {
return options.mixedColor;
}
var cat = info.categories[ 0 ].toLowerCase();
return options.categoryColors[ cat ] || options.otherColor;
}
function extractWords( root ) {
var text = root.textContent;
var counts = {};
var order = [];
var match;
WORD_RE.lastIndex = 0;
while ( ( match = WORD_RE.exec( text ) ) ) {
var w = match[ 0 ].toLowerCase();
if ( !( w in counts ) ) {
counts[ w ] = 0;
order.push( w );
}
counts[ w ]++;
}
return order
.map( function ( w ) {
return { word: w, count: counts[ w ] };
} )
.sort( function ( a, b ) {
return b.count - a.count;
} );
}
function mergeLookupIntoWordMap( data ) {
Object.keys( data ).forEach( function ( word ) {
var entries = data[ word ];
if ( !entries || !entries.length ) {
wordMap[ word ] = { status: 'gap', lexemes: [], categories: [] };
return;
}
var cats = [];
entries.forEach( function ( e ) {
if ( cats.indexOf( e.category ) === -1 ) {
cats.push( e.category );
}
} );
wordMap[ word ] = {
status: cats.length > 1 ? 'mixed' : 'match',
lexemes: entries,
categories: cats
};
} );
}
function fetchLookupBatch( words ) {
var body = {
words: words,
glosses: options.glosses,
max_glosses: options.max_glosses,
lang: LANG
};
if ( options.categories && options.categories.length ) {
body.categories = options.categories;
}
return fetch( API_BASE + '/api/lookup', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify( body )
} ).then( function ( res ) {
return res.json();
} );
}
function highlightContainer( root ) {
var walker = document.createTreeWalker(
root,
NodeFilter.SHOW_TEXT,
{
acceptNode: function ( node ) {
var parent = node.parentElement;
if ( !parent || parent.closest( 'script, style, .mw-editsection, .lx-w' ) ) {
return NodeFilter.FILTER_REJECT;
}
return NodeFilter.FILTER_ACCEPT;
}
}
);
var textNodes = [];
var node;
while ( ( node = walker.nextNode() ) ) {
textNodes.push( node );
}
textNodes.forEach( function ( textNode ) {
var text = textNode.nodeValue;
WORD_RE.lastIndex = 0;
var match;
var lastIndex = 0;
var frag = null;
while ( ( match = WORD_RE.exec( text ) ) ) {
var word = match[ 0 ];
var lower = word.toLowerCase();
var info = wordMap[ lower ];
if ( !info ) {
continue;
}
if ( !frag ) {
frag = document.createDocumentFragment();
}
frag.appendChild( document.createTextNode( text.slice( lastIndex, match.index ) ) );
var span = document.createElement( 'span' );
span.className = 'lx-w lx-' + info.status;
span.dataset.lxWord = lower;
// Show the category on hover, so it isn't down to color alone.
span.title = info.status === 'gap' ?
( options.linkGaps ?
'No Wikidata lexeme yet -- click to create one' :
'No Wikidata lexeme yet' ) :
info.categories.join( ', ' );
var color = colorForWord( info );
if ( color ) {
span.style.setProperty( '--lx-color', color );
}
span.textContent = word;
frag.appendChild( span );
lastIndex = match.index + word.length;
}
if ( frag ) {
frag.appendChild( document.createTextNode( text.slice( lastIndex ) ) );
textNode.parentNode.replaceChild( frag, textNode );
}
} );
}
function positionNear( el, anchor ) {
// Append first (off-screen) so offsetWidth/offsetHeight are measurable.
document.body.appendChild( el );
var rect = anchor.getBoundingClientRect();
var margin = 8;
var maxLeft = window.scrollX + document.documentElement.clientWidth - el.offsetWidth - margin;
var left = Math.max( window.scrollX + margin, Math.min( window.scrollX + rect.left, maxLeft ) );
var top = window.scrollY + rect.bottom + 4;
var maxTop = window.scrollY + document.documentElement.clientHeight - el.offsetHeight - margin;
if ( top > maxTop && rect.top - el.offsetHeight - 4 > 0 ) {
// Not enough room below -- flip above the anchor instead.
top = window.scrollY + rect.top - el.offsetHeight - 4;
}
el.style.left = left + 'px';
el.style.top = top + 'px';
}
function hidePopover() {
if ( popoverEl ) {
popoverEl.remove();
popoverEl = null;
}
}
function showPopover( span, info ) {
hidePopover();
popoverEl = document.createElement( 'div' );
popoverEl.className = 'lx-popover';
info.lexemes.forEach( function ( l ) {
var entry = document.createElement( 'div' );
entry.className = 'lx-entry';
var link = document.createElement( 'a' );
link.href = 'https://www.wikidata.org/wiki/Lexeme:' + l.lexeme;
link.target = '_blank';
link.rel = 'noopener';
link.textContent = l.lexeme;
entry.appendChild( link );
var cat = document.createElement( 'span' );
cat.className = 'lx-cat';
cat.textContent = ' ' + l.category;
entry.appendChild( cat );
if ( l.glosses && l.glosses.length ) {
var gloss = document.createElement( 'p' );
gloss.className = 'lx-gloss';
gloss.textContent = l.glosses[ 0 ];
entry.appendChild( gloss );
}
popoverEl.appendChild( entry );
} );
positionNear( popoverEl, span );
}
// Wikidata's lexeme form, with the word and its language filled in. The
// category is left blank -- that's the bit the editor has to decide.
function newLexemeUrl( word ) {
return 'https://www.wikidata.org/wiki/Special:NewLexeme?' + new URLSearchParams( {
lemma: word,
'spelling-variant': LANG,
language: LANG_QIDS[ LANG ] || LANG_QIDS.en
} );
}
document.addEventListener( 'click', function ( e ) {
var span = e.target.closest( '.lx-w' );
if ( span && ( span.classList.contains( 'lx-match' ) || span.classList.contains( 'lx-mixed' ) ) ) {
e.preventDefault();
showPopover( span, wordMap[ span.dataset.lxWord ] );
} else if ( span && span.classList.contains( 'lx-gap' ) && options.linkGaps ) {
e.preventDefault();
hidePopover();
window.open( newLexemeUrl( span.dataset.lxWord ), '_blank', 'noopener' );
} else if ( !e.target.closest( '.lx-popover' ) ) {
hidePopover();
}
} );
function unwrapContainer( root ) {
var spans = root.querySelectorAll( '.lx-w' );
spans.forEach( function ( span ) {
var text = document.createTextNode( span.textContent );
span.parentNode.replaceChild( text, span );
} );
}
function repaintColors() {
if ( !$content || !$content.length || !wordMap ) {
return;
}
var spans = $content[ 0 ].querySelectorAll( '.lx-w' );
spans.forEach( function ( span ) {
var info = wordMap[ span.dataset.lxWord ];
if ( !info ) {
return;
}
var color = colorForWord( info );
if ( color ) {
span.style.setProperty( '--lx-color', color );
} else {
span.style.removeProperty( '--lx-color' );
}
if ( info.status === 'gap' ) {
span.title = options.linkGaps ?
'No Wikidata lexeme yet -- click to create one' :
'No Wikidata lexeme yet';
}
} );
syncGapLinkClass();
}
// Share of looked-up words that have a lexeme. No gaps means fully mapped.
function computeStats() {
if ( !wordMap ) {
return null;
}
var total = 0, gaps = 0;
Object.keys( wordMap ).forEach( function ( w ) {
total++;
if ( wordMap[ w ].status === 'gap' ) {
gaps++;
}
} );
if ( !total ) {
return null;
}
var matched = total - gaps;
return { total: total, matched: matched, gaps: gaps, pct: Math.round( matched / total * 100 ) };
}
function updateProgress() {
var stats = ( active && loaded ) ? computeStats() : null;
if ( !stats || !indicatorWrapper ) {
if ( progressEl ) {
progressEl.remove();
progressEl = null;
}
return;
}
if ( !progressEl ) {
progressEl = document.createElement( 'div' );
progressEl.className = 'lx-progress';
var bar = document.createElement( 'div' );
bar.className = 'lx-progress-bar';
var fill = document.createElement( 'div' );
fill.className = 'lx-progress-fill';
bar.appendChild( fill );
var label = document.createElement( 'span' );
label.className = 'lx-progress-label';
progressEl.appendChild( bar );
progressEl.appendChild( label );
indicatorWrapper.appendChild( progressEl );
}
progressEl.querySelector( '.lx-progress-fill' ).style.width = stats.pct + '%';
progressEl.classList.toggle( 'lx-progress-complete', stats.gaps === 0 );
progressEl.querySelector( '.lx-progress-label' ).textContent = stats.gaps === 0 ?
stats.matched + '/' + stats.total + ' mapped ✓' :
stats.pct + '% · ' + stats.gaps + ' to fill';
progressEl.title = stats.matched + ' of ' + stats.total +
' words mapped to Wikidata lexemes' +
( stats.gaps ? ', ' + stats.gaps + ' still unmatched (red)' : '' );
}
function celebrate( stats ) {
mw.notify( 'Page fully mapped — all ' + stats.total + ' words matched! 🎉', { type: 'success' } );
if ( window.matchMedia && window.matchMedia( '(prefers-reduced-motion: reduce)' ).matches ) {
return;
}
var layer = document.createElement( 'div' );
layer.className = 'lx-confetti';
var colors = [ '#a4161a', '#1b7a3d', '#1959b8', '#c2540c', '#7d2ae8', '#ffd400' ];
for ( var i = 0; i < 60; i++ ) {
var piece = document.createElement( 'span' );
piece.className = 'lx-confetti-piece';
piece.style.left = ( Math.random() * 100 ) + 'vw';
piece.style.background = colors[ i % colors.length ];
piece.style.animationDelay = ( Math.random() * 0.4 ) + 's';
piece.style.animationDuration = ( 1.8 + Math.random() * 1.2 ) + 's';
layer.appendChild( piece );
}
document.body.appendChild( layer );
setTimeout( function () {
layer.remove();
}, 3600 );
}
function setActive( isActive, button ) {
active = isActive;
if ( $content ) {
$content.toggleClass( 'lx-active', active );
}
if ( button ) {
button.classList.toggle( 'lx-indicator-active', active );
}
updateProgress();
}
function setButtonBusy( button, isBusy ) {
if ( !button ) {
return;
}
var main = button.querySelector( '.lx-btn-main' );
var caret = button.querySelector( '.lx-btn-caret' );
if ( main ) {
main.disabled = isBusy;
}
if ( caret ) {
caret.disabled = isBusy;
}
button.classList.toggle( 'lx-loading', isBusy );
}
function loadAndHighlight( button ) {
$content = $( '#mw-content-text .mw-parser-output' );
if ( !$content.length ) {
return;
}
var root = $content[ 0 ];
var allWords = extractWords( root );
var limit = ( options.limit === null ) ? Math.min( allWords.length, 150 ) : options.limit;
var toFetch = allWords.slice( 0, limit ).map( function ( w ) {
return w.word;
} );
if ( !toFetch.length ) {
return;
}
wordMap = {};
var labelEl = button ? button.querySelector( '.lx-btn-label' ) : null;
var originalLabel = labelEl ? labelEl.textContent : null;
setButtonBusy( button, true );
var batches = [];
for ( var i = 0; i < toFetch.length; i += BATCH_SIZE ) {
batches.push( toFetch.slice( i, i + BATCH_SIZE ) );
}
var doneCount = 0;
var chain = Promise.resolve();
batches.forEach( function ( batch ) {
chain = chain.then( function () {
return fetchLookupBatch( batch ).then( function ( data ) {
if ( data.error ) {
throw new Error( data.error );
}
mergeLookupIntoWordMap( data.result );
highlightContainer( root );
doneCount += batch.length;
if ( labelEl ) {
labelEl.textContent = doneCount + ' / ' + toFetch.length;
}
if ( active && loaded ) {
updateProgress();
}
} );
} );
} );
chain.then( function () {
if ( labelEl ) {
labelEl.textContent = originalLabel;
}
setButtonBusy( button, false );
loaded = true;
setActive( true, button );
var stats = computeStats();
if ( stats && stats.gaps === 0 ) {
celebrate( stats );
}
} ).catch( function ( err ) {
if ( labelEl ) {
labelEl.textContent = originalLabel;
}
setButtonBusy( button, false );
mw.notify( 'Leximap: request failed (' + err + ')', { type: 'error' } );
} );
}
function toggle( button ) {
if ( !loaded ) {
loadAndHighlight( button );
return;
}
setActive( !active, button );
}
function reload( button ) {
hidePopover();
if ( $content && $content.length ) {
unwrapContainer( $content[ 0 ] );
}
loaded = false;
wordMap = null;
active = false;
if ( button ) {
button.classList.remove( 'lx-indicator-active' );
}
updateProgress();
loadAndHighlight( button );
}
function hidePanel() {
if ( panelEl ) {
panelEl.remove();
panelEl = null;
}
}
function showPanel( anchor, button ) {
if ( panelEl ) {
hidePanel();
return;
}
panelEl = document.createElement( 'div' );
panelEl.className = 'lx-panel';
var root = ( $content && $content.length ) ? $content[ 0 ] : document.querySelector( '#mw-content-text .mw-parser-output' );
var uniqueCount = root ? extractWords( root ).length : null;
if ( uniqueCount !== null ) {
var countLabel = document.createElement( 'div' );
countLabel.className = 'lx-panel-count';
countLabel.textContent = 'This page has ' + uniqueCount + ' unique word' + ( uniqueCount === 1 ? '' : 's' ) + '.';
panelEl.appendChild( countLabel );
if ( !limitTouched ) {
options.limit = Math.min( uniqueCount, 150 );
}
}
function numberField( labelText, value, min, max ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-row';
var span = document.createElement( 'span' );
span.textContent = labelText;
var input = document.createElement( 'input' );
input.type = 'number';
input.min = min;
input.max = max;
input.value = value;
row.appendChild( span );
row.appendChild( input );
panelEl.appendChild( row );
return input;
}
function checkboxField( labelText, checked ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-row';
var input = document.createElement( 'input' );
input.type = 'checkbox';
input.checked = checked;
var span = document.createElement( 'span' );
span.textContent = labelText;
row.appendChild( input );
row.appendChild( span );
panelEl.appendChild( row );
return input;
}
function colorField( labelText, value ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-color-row';
var span = document.createElement( 'span' );
span.textContent = labelText;
var input = document.createElement( 'input' );
input.type = 'color';
input.value = value;
row.appendChild( span );
row.appendChild( input );
panelEl.appendChild( row );
return input;
}
var maxAllowed = uniqueCount !== null ? uniqueCount : 999;
var limitInput = numberField( 'Words to check', options.limit, 0, maxAllowed );
var maxGlossesInput = numberField( 'Glosses per word', options.max_glosses, 0, 10 );
var glossesInput = checkboxField( 'Show glosses', options.glosses === 1 );
var linkGapsInput = checkboxField( 'Link unmatched words to Wikidata', options.linkGaps === 1 );
var colorsEnabledInput = checkboxField( 'Colored highlighting', options.colorsEnabled === 1 );
var customColorsInput = checkboxField( 'Customize colors', options.customColors === 1 );
var catLabel = document.createElement( 'div' );
catLabel.className = 'lx-panel-cat-label';
catLabel.textContent = 'Categories (none checked = all)';
panelEl.appendChild( catLabel );
var catGrid = document.createElement( 'div' );
catGrid.className = 'lx-panel-cat-grid';
var catInputs = {};
CATEGORIES.forEach( function ( cat ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-cat';
var input = document.createElement( 'input' );
input.type = 'checkbox';
input.checked = !!( options.categories && options.categories.indexOf( cat ) !== -1 );
var span = document.createElement( 'span' );
span.textContent = cat;
row.appendChild( input );
row.appendChild( span );
catGrid.appendChild( row );
catInputs[ cat ] = input;
} );
panelEl.appendChild( catGrid );
// Group the pickers so the "Customize colors" checkbox can hide them.
// colorField() appends to panelEl, so point panelEl here while we build.
var colorSection = document.createElement( 'div' );
colorSection.className = 'lx-panel-colors';
var realPanelEl = panelEl;
panelEl = colorSection;
var colorLabel = document.createElement( 'div' );
colorLabel.className = 'lx-panel-cat-label';
colorLabel.textContent = 'Colors';
colorSection.appendChild( colorLabel );
var colorInputs = {};
CATEGORIES.forEach( function ( cat ) {
colorInputs[ cat ] = colorField( cat, options.categoryColors[ cat ] || DEFAULT_OTHER_COLOR );
} );
var mixedColorInput = colorField( 'Multiple categories', options.mixedColor );
var otherColorInput = colorField( 'Other categories', options.otherColor );
var gapColorInput = colorField( 'No match', options.gapColor );
panelEl = realPanelEl;
panelEl.appendChild( colorSection );
function syncColorSection() {
colorSection.style.display = customColorsInput.checked ? '' : 'none';
}
syncColorSection();
customColorsInput.addEventListener( 'change', syncColorSection );
var applyButton = document.createElement( 'button' );
applyButton.type = 'button';
applyButton.className = 'lx-panel-apply';
applyButton.textContent = 'Apply';
applyButton.addEventListener( 'click', function () {
var newLimit = Math.max( 0, Math.min( parseInt( limitInput.value, 10 ) || 0, maxAllowed ) );
var newMaxGlosses = parseInt( maxGlossesInput.value, 10 ) || 0;
var newGlosses = glossesInput.checked ? 1 : 0;
var checkedCats = CATEGORIES.filter( function ( cat ) {
return catInputs[ cat ].checked;
} );
var newCategories = checkedCats.length ? checkedCats : null;
var needsRefetch = loaded && (
newLimit !== options.limit ||
newMaxGlosses !== options.max_glosses ||
newGlosses !== options.glosses ||
JSON.stringify( newCategories ) !== JSON.stringify( options.categories )
);
limitTouched = true;
options.limit = newLimit;
options.max_glosses = newMaxGlosses;
options.glosses = newGlosses;
options.categories = newCategories;
options.linkGaps = linkGapsInput.checked ? 1 : 0;
options.colorsEnabled = colorsEnabledInput.checked ? 1 : 0;
options.customColors = customColorsInput.checked ? 1 : 0;
if ( options.customColors ) {
CATEGORIES.forEach( function ( cat ) {
options.categoryColors[ cat ] = colorInputs[ cat ].value;
} );
options.mixedColor = mixedColorInput.value;
options.otherColor = otherColorInput.value;
options.gapColor = gapColorInput.value;
} else {
// Not customizing -- fall back to the built-in palette.
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS );
options.mixedColor = DEFAULT_MIXED_COLOR;
options.otherColor = DEFAULT_OTHER_COLOR;
options.gapColor = DEFAULT_GAP_COLOR;
}
saveOptions();
syncGapLinkClass();
hidePanel();
if ( needsRefetch ) {
reload( button );
} else if ( loaded ) {
repaintColors();
}
} );
panelEl.appendChild( applyButton );
positionNear( panelEl, anchor );
}
document.addEventListener( 'click', function ( e ) {
if ( panelEl && !e.target.closest( '.lx-panel' ) && !e.target.closest( '.lx-btn-caret' ) ) {
hidePanel();
}
} );
var ICON_SVG = '<svg viewBox="0 0 32 32" aria-hidden="true" focusable="false">' +
'<rect x="3" y="7" width="12" height="5" rx="2.5" fill="#2f6b45"/>' +
'<rect x="17" y="7" width="12" height="5" rx="2.5" fill="#3b5a85"/>' +
'<rect x="3" y="14" width="8" height="5" rx="2.5" fill="#8a651b"/>' +
'<rect x="13" y="14" width="9" height="5" rx="2.5" fill="#b32424"/>' +
'<rect x="24" y="14" width="5" height="5" rx="2.5" fill="#6b4a86"/>' +
'<rect x="3" y="21" width="15" height="5" rx="2.5" fill="#3a7a7a"/>' +
'<rect x="20" y="21" width="9" height="5" rx="2.5" fill="#8b3a3a"/>' +
'</svg>';
function addIndicatorButton() {
var indicators = document.querySelector( '.mw-indicators' );
if ( !indicators ) {
// Fall back to the toolbox if this skin/page has no indicators row.
mw.loader.using( [ 'mediawiki.util' ] ).then( function () {
mw.util.addPortletLink(
'p-tb',
'#',
'Leximap',
'ca-leximap',
'Highlight words by Wikidata lexeme category'
).addEventListener( 'click', function ( e ) {
e.preventDefault();
toggle( null );
} );
} );
return;
}
var wrapper = document.createElement( 'div' );
wrapper.id = 'mw-indicator-lx-leximap';
wrapper.className = 'mw-indicator';
indicatorWrapper = wrapper;
var group = document.createElement( 'div' );
group.className = 'lx-btn';
var main = document.createElement( 'button' );
main.type = 'button';
main.className = 'lx-btn-main';
main.title = 'Highlight words by Wikidata lexeme category';
var icon = document.createElement( 'span' );
icon.className = 'lx-btn-icon';
// Static, trusted markup (matches the Leximap app logo mark) -- not user data.
icon.innerHTML = ICON_SVG;
main.appendChild( icon );
var label = document.createElement( 'span' );
label.className = 'lx-btn-label';
label.textContent = 'Leximap';
main.appendChild( label );
var caret = document.createElement( 'button' );
caret.type = 'button';
caret.className = 'lx-btn-caret';
caret.title = 'Leximap settings';
caret.setAttribute( 'aria-label', 'Leximap settings' );
caret.textContent = '▾';
group.appendChild( main );
group.appendChild( caret );
wrapper.appendChild( group );
main.addEventListener( 'click', function ( e ) {
e.preventDefault();
toggle( group );
} );
caret.addEventListener( 'click', function ( e ) {
e.preventDefault();
e.stopPropagation();
showPanel( group, group );
} );
indicators.appendChild( wrapper );
}
// Take the default palette from the backend so we're not keeping our own
// copy. Anyone who's customized their colors keeps them.
function applyServerPalette( p ) {
if ( !p || typeof p !== 'object' || p.error ) {
return;
}
if ( p.categoryColors && typeof p.categoryColors === 'object' ) {
Object.assign( DEFAULT_CATEGORY_COLORS, p.categoryColors );
}
if ( p.gapColor ) {
DEFAULT_GAP_COLOR = p.gapColor;
}
if ( p.mixedColor ) {
DEFAULT_MIXED_COLOR = p.mixedColor;
}
if ( p.otherColor ) {
DEFAULT_OTHER_COLOR = p.otherColor;
}
if ( !options.customColors ) {
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS );
options.gapColor = DEFAULT_GAP_COLOR;
options.mixedColor = DEFAULT_MIXED_COLOR;
options.otherColor = DEFAULT_OTHER_COLOR;
repaintColors();
}
}
function fetchPalette() {
fetch( API_BASE + '/api/palette' )
.then( function ( res ) {
return res.json();
} )
.then( applyServerPalette )
.catch( function () {
// Offline / API down -- keep the built-in defaults.
} );
}
fetchPalette();
addIndicatorButton();
}() );
b0oj0fobenrgettr91fur2ic8eu76rx
1996863
1996861
2026-08-30T16:48:24Z
Mahir256
1096
1996863
javascript
text/javascript
/**
* Leximap gadget — highlights words on Wikisource pages by Wikidata lexeme
* category, using the Leximap API (https://leximap.toolforge.org).
*/
( function () {
'use strict';
if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ) {
return;
}
var css = '.mw-parser-output .lx-w {\n' +
' color: inherit;\n' +
'}\n' +
'.mw-parser-output.lx-active .lx-w.lx-match,\n' +
'.mw-parser-output.lx-active .lx-w.lx-mixed {\n' +
' color: var( --lx-color, #4b4453 );\n' +
' cursor: pointer;\n' +
' border-bottom: 1px dotted currentColor;\n' +
'}\n' +
'.mw-parser-output.lx-active .lx-w.lx-gap {\n' +
' background: rgba( 255, 212, 0, 0.3 );\n' +
' background: color-mix( in srgb, var( --lx-color, #ffd400 ) 30%, transparent );\n' +
' border-bottom: 2px solid var( --lx-color, #ffd400 );\n' +
' border-radius: 2px;\n' +
'}\n' +
'/* Unmatched words are only clickable when they link out to Wikidata. */\n' +
'body.lx-links-gaps .mw-parser-output.lx-active .lx-w.lx-gap {\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-btn {\n' +
' display: inline-flex;\n' +
' align-items: stretch;\n' +
' height: 2rem;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
' background: #f8f9fa;\n' +
' overflow: hidden;\n' +
' font-size: 0.875rem;\n' +
' line-height: 1;\n' +
' vertical-align: middle;\n' +
'}\n' +
'.lx-btn-main,\n' +
'.lx-btn-caret {\n' +
' display: inline-flex;\n' +
' align-items: center;\n' +
' border: 0;\n' +
' background: transparent;\n' +
' color: #202122;\n' +
' cursor: pointer;\n' +
' font: inherit;\n' +
' padding: 0 0.7rem;\n' +
'}\n' +
'.lx-btn-main:hover,\n' +
'.lx-btn-caret:hover {\n' +
' background: #eef2f7;\n' +
'}\n' +
'.lx-btn-main:focus,\n' +
'.lx-btn-caret:focus {\n' +
' outline: 2px solid #3b5a85;\n' +
' outline-offset: -2px;\n' +
'}\n' +
'.lx-btn-icon {\n' +
' display: inline-flex;\n' +
' align-items: center;\n' +
' margin-right: 0.4rem;\n' +
'}\n' +
'.lx-btn-icon svg {\n' +
' display: block;\n' +
' width: 15px;\n' +
' height: 15px;\n' +
'}\n' +
'.lx-btn-label {\n' +
' white-space: nowrap;\n' +
'}\n' +
'.lx-btn-caret {\n' +
' padding: 0 0.55rem;\n' +
' border-left: 1px solid #a2a9b1;\n' +
' color: #54595d;\n' +
' font-size: 0.7rem;\n' +
'}\n' +
'.lx-btn.lx-indicator-active {\n' +
' border-color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-indicator-active .lx-btn-main {\n' +
' background: #e3ebf3;\n' +
' color: #3b5a85;\n' +
' font-weight: 600;\n' +
'}\n' +
'.lx-btn.lx-indicator-active .lx-btn-caret {\n' +
' border-left-color: #b7c6d8;\n' +
' color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-loading {\n' +
' border-color: #3b5a85;\n' +
'}\n' +
'.lx-btn.lx-loading .lx-btn-main {\n' +
' color: #3b5a85;\n' +
' font-variant-numeric: tabular-nums;\n' +
'}\n' +
'.lx-btn-main:disabled,\n' +
'.lx-btn-caret:disabled {\n' +
' cursor: progress;\n' +
'}\n' +
'.lx-btn-icon svg {\n' +
' transition: transform 0.6s linear;\n' +
'}\n' +
'.lx-btn.lx-loading .lx-btn-icon svg {\n' +
' animation: lx-spin 1s linear infinite;\n' +
'}\n' +
'@keyframes lx-spin {\n' +
' from { transform: rotate( 0deg ); }\n' +
' to { transform: rotate( 360deg ); }\n' +
'}\n' +
'.lx-progress {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' gap: 0.4rem;\n' +
' margin-top: 0.25rem;\n' +
' font-size: 0.72rem;\n' +
' line-height: 1;\n' +
' color: #54595d;\n' +
'}\n' +
'.lx-progress-bar {\n' +
' flex: 1 1 auto;\n' +
' min-width: 60px;\n' +
' height: 6px;\n' +
' border-radius: 3px;\n' +
' background: #eaecf0;\n' +
' overflow: hidden;\n' +
'}\n' +
'.lx-progress-fill {\n' +
' height: 100%;\n' +
' width: 0;\n' +
' border-radius: 3px;\n' +
' background: #3b5a85;\n' +
' transition: width 0.4s ease, background-color 0.4s ease;\n' +
'}\n' +
'.lx-progress-complete .lx-progress-fill {\n' +
' background: #14866d;\n' +
'}\n' +
'.lx-progress-label {\n' +
' white-space: nowrap;\n' +
' font-variant-numeric: tabular-nums;\n' +
'}\n' +
'.lx-progress-complete .lx-progress-label {\n' +
' color: #14866d;\n' +
' font-weight: 600;\n' +
'}\n' +
'.lx-confetti {\n' +
' position: fixed;\n' +
' inset: 0;\n' +
' pointer-events: none;\n' +
' z-index: 10000;\n' +
' overflow: hidden;\n' +
'}\n' +
'.lx-confetti-piece {\n' +
' position: absolute;\n' +
' top: -12px;\n' +
' width: 8px;\n' +
' height: 12px;\n' +
' border-radius: 1px;\n' +
' opacity: 0.9;\n' +
' animation-name: lx-fall;\n' +
' animation-timing-function: linear;\n' +
' animation-fill-mode: forwards;\n' +
'}\n' +
'@keyframes lx-fall {\n' +
' 0% {\n' +
' transform: translateY( -12px ) rotate( 0deg );\n' +
' opacity: 1;\n' +
' }\n' +
' 100% {\n' +
' transform: translateY( 105vh ) rotate( 720deg );\n' +
' opacity: 0.9;\n' +
' }\n' +
'}\n' +
'@media ( prefers-reduced-motion: reduce ) {\n' +
' .lx-progress-fill {\n' +
' transition: none;\n' +
' }\n' +
'}\n' +
'.lx-panel {\n' +
' position: absolute;\n' +
' z-index: 1000;\n' +
' width: 280px;\n' +
' max-width: calc( 100vw - 1.5rem );\n' +
' max-height: 80vh;\n' +
' overflow-y: auto;\n' +
' background: #fff;\n' +
' border: 1px solid #c8ccd1;\n' +
' border-radius: 6px;\n' +
' box-shadow: 0 4px 16px rgba( 0, 0, 0, 0.15 );\n' +
' padding: 0.85rem 1rem;\n' +
' font-size: 0.85rem;\n' +
' color: #202122;\n' +
'}\n' +
'@media ( max-width: 480px ) {\n' +
' .lx-panel-cat-grid {\n' +
' grid-template-columns: 1fr;\n' +
' }\n' +
'}\n' +
'.lx-panel-count {\n' +
' margin: -0.85rem -1rem 0.7rem;\n' +
' padding: 0.55rem 1rem;\n' +
' border-bottom: 1px solid #eaecf0;\n' +
' background: #f8f9fa;\n' +
' border-radius: 6px 6px 0 0;\n' +
' color: #54595d;\n' +
' font-size: 0.78rem;\n' +
'}\n' +
'.lx-panel-row {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' justify-content: space-between;\n' +
' gap: 0.5rem;\n' +
' margin-bottom: 0.55rem;\n' +
'}\n' +
'.lx-panel-row input[ type="number" ] {\n' +
' width: 4.5rem;\n' +
' padding: 0.15rem 0.35rem;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
'}\n' +
'.lx-panel-row input[ type="checkbox" ] {\n' +
' margin: 0;\n' +
'}\n' +
'.lx-panel-cat-label {\n' +
' margin: 0.6rem 0 0.4rem;\n' +
' padding-top: 0.55rem;\n' +
' border-top: 1px solid #eaecf0;\n' +
' color: #54595d;\n' +
' font-size: 0.78rem;\n' +
'}\n' +
'.lx-panel-cat-grid {\n' +
' display: grid;\n' +
' grid-template-columns: 1fr 1fr;\n' +
' gap: 0.3rem 0.5rem;\n' +
' margin-bottom: 0.7rem;\n' +
'}\n' +
'.lx-panel-cat {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' gap: 0.35rem;\n' +
' font-size: 0.8rem;\n' +
'}\n' +
'.lx-panel-cat input {\n' +
' margin: 0;\n' +
'}\n' +
'.lx-panel-color-row {\n' +
' display: flex;\n' +
' align-items: center;\n' +
' justify-content: space-between;\n' +
' gap: 0.5rem;\n' +
' margin-bottom: 0.3rem;\n' +
' font-size: 0.8rem;\n' +
' text-transform: capitalize;\n' +
'}\n' +
'.lx-panel-color-row input[ type="color" ] {\n' +
' width: 1.8rem;\n' +
' height: 1.4rem;\n' +
' padding: 0;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 2px;\n' +
' background: none;\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-panel-apply {\n' +
' width: 100%;\n' +
' padding: 0.45rem;\n' +
' border: 1px solid #3b5a85;\n' +
' border-radius: 3px;\n' +
' background: #3b5a85;\n' +
' color: #fff;\n' +
' font-size: 0.85rem;\n' +
' font-weight: 600;\n' +
' cursor: pointer;\n' +
'}\n' +
'.lx-panel-apply:hover {\n' +
' background: #2e4568;\n' +
' border-color: #2e4568;\n' +
'}\n' +
'.lx-popover {\n' +
' position: absolute;\n' +
' z-index: 1000;\n' +
' max-width: 320px;\n' +
' max-height: 340px;\n' +
' overflow-y: auto;\n' +
' background: #fff;\n' +
' border: 1px solid #a2a9b1;\n' +
' border-radius: 4px;\n' +
' box-shadow: 0 2px 8px rgba( 0, 0, 0, 0.2 );\n' +
' padding: 0.5rem 0.75rem;\n' +
' font-size: 0.9rem;\n' +
'}\n' +
'.lx-popover .lx-entry {\n' +
' border-top: 1px solid #eaecf0;\n' +
' padding: 0.5rem 0;\n' +
'}\n' +
'.lx-popover .lx-entry:first-child {\n' +
' border-top: 0;\n' +
'}\n' +
'.lx-popover .lx-entry a {\n' +
' font-weight: 600;\n' +
' text-decoration: none;\n' +
'}\n' +
'.lx-popover .lx-cat {\n' +
' font-size: 0.8rem;\n' +
' color: #72777d;\n' +
' margin-left: 0.4rem;\n' +
'}\n' +
'.lx-popover .lx-gloss {\n' +
' margin: 0.2rem 0 0;\n' +
' font-size: 0.85rem;\n' +
' color: #54595d;\n' +
'}\n';
var styleEl = document.createElement( 'style' );
styleEl.textContent = css;
document.head.appendChild( styleEl );
var API_BASE = 'https://leximap.toolforge.org';
// Look words up in the wiki's own language (unknown ones fall back to
// English server-side).
var LANG = mw.config.get( 'wgContentLanguage' ) || 'en';
// Wikidata language items, mirroring the server's config.LANGUAGES. Used to
// prefill the language on Wikidata's lexeme creation form.
var LANG_QIDS = {
en: 'Q1860', fr: 'Q150', de: 'Q188', es: 'Q1321', it: 'Q652', pt: 'Q5146',
ru: 'Q7737', nl: 'Q7411', pl: 'Q809', sv: 'Q9027', la: 'Q397'
};
var WORD_RE = /[\p{L}\p{M}']+/gu;
var BATCH_SIZE = 40;
var CATEGORIES = [
"Q1084", "Q147276", "Q24905", "Q34698", "Q380057", "Q36224", "Q4833830", "Q36484", "Q576271", "Q2865743", "Q3813849", "Q103184", "Q83034", "Q63116", "Q134830", "Q102047", "Q10535365"
];
// Base palette matches colorize.py's CATEGORY_COLORS; extra categories
// (seen in real Wikidata lexeme data but not in the server's fixed list)
// get sensible defaults here since the gadget colors client-side.
var DEFAULT_CATEGORY_COLORS = {
"Q1084": "#a4161a", // noun
"Q147276": "#8a4b8a", // proper noun
"Q24905": "#1b7a3d", // verb
"Q34698": "#5c3a21", // adjective
"Q380057": "#1959b8", // adverb
"Q36224": "#7d2ae8", // pronoun
"Q4833830": "#067a6f", // preposition
"Q36484": "#c2540c", // conjunction
"Q576271": "#4b4453", // determiner
"Q2865743": "#5c6b73", // definite article
"Q3813849": "#7a8b93", // indefinite article
"Q103184": "#4b4453", // article
"Q83034": "#c2185b", // interjection
"Q63116": "#2a3f8f", // numeral
"Q134830": "#a0785a", // prefix
"Q102047": "#c99a5b", // suffix
"Q10535365": "#3d8b8b" // infinitive marker
};
var DEFAULT_GAP_COLOR = '#ffd400'; // bright yellow -- no lexeme match
var DEFAULT_MIXED_COLOR = '#5d6d7e'; // word matches more than one category
var DEFAULT_OTHER_COLOR = '#4b4453'; // category outside the customizable list
var options = {
glosses: 1,
max_glosses: 3,
limit: null, // null = every unique word on the page
categories: null, // null = all
categoryColors: Object.assign( {}, DEFAULT_CATEGORY_COLORS ),
gapColor: DEFAULT_GAP_COLOR,
mixedColor: DEFAULT_MIXED_COLOR,
otherColor: DEFAULT_OTHER_COLOR,
colorsEnabled: 1,
linkGaps: 1, // clicking an unmatched word opens Wikidata's lexeme form
customColors: 0 // 0 = use default palette, hide the color pickers
};
var STORAGE_KEY = 'leximap-gadget-options';
function loadStoredOptions() {
try {
var raw = localStorage.getItem( STORAGE_KEY );
if ( !raw ) {
return;
}
var stored = JSON.parse( raw );
if ( stored && typeof stored === 'object' ) {
Object.assign( options, stored );
if ( options.categoryColors ) {
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS, options.categoryColors );
}
if ( typeof options.limit === 'number' ) {
limitTouched = true;
}
}
} catch ( e ) {
// Storage unavailable (private browsing, disabled, etc.) -- fall back to defaults.
}
}
function saveOptions() {
try {
localStorage.setItem( STORAGE_KEY, JSON.stringify( options ) );
} catch ( e ) {
// Ignore -- persistence is a nicety, not a requirement.
}
}
var active = false;
var loaded = false;
var limitTouched = false;
var wordMap = null; // lowercase word -> { status: 'match'|'mixed'|'gap', categories: [...] }
var $content = null;
var popoverEl = null;
var panelEl = null;
var progressEl = null;
var indicatorWrapper = null;
loadStoredOptions();
function syncGapLinkClass() {
if ( document.body ) {
document.body.classList.toggle( 'lx-links-gaps', !!options.linkGaps );
}
}
syncGapLinkClass();
function colorForWord( info ) {
if ( !options.colorsEnabled ) {
return null;
}
if ( info.status === 'gap' ) {
return options.gapColor;
}
if ( info.status === 'mixed' ) {
return options.mixedColor;
}
var cat = info.categories[ 0 ];
return options.categoryColors[ cat ] || options.otherColor;
}
function extractWords( root ) {
var text = root.textContent;
var counts = {};
var order = [];
var match;
WORD_RE.lastIndex = 0;
while ( ( match = WORD_RE.exec( text ) ) ) {
var w = match[ 0 ].toLowerCase();
if ( !( w in counts ) ) {
counts[ w ] = 0;
order.push( w );
}
counts[ w ]++;
}
return order
.map( function ( w ) {
return { word: w, count: counts[ w ] };
} )
.sort( function ( a, b ) {
return b.count - a.count;
} );
}
function mergeLookupIntoWordMap( data ) {
Object.keys( data ).forEach( function ( word ) {
var entries = data[ word ];
if ( !entries || !entries.length ) {
wordMap[ word ] = { status: 'gap', lexemes: [], categories: [] };
return;
}
var cats = [];
entries.forEach( function ( e ) {
if ( cats.indexOf( e.category ) === -1 ) {
cats.push( e.category );
}
} );
wordMap[ word ] = {
status: cats.length > 1 ? 'mixed' : 'match',
lexemes: entries,
categories: cats
};
} );
}
function fetchLookupBatch( words ) {
var body = {
words: words,
glosses: options.glosses,
max_glosses: options.max_glosses,
lang: LANG
};
if ( options.categories && options.categories.length ) {
body.categories = options.categories;
}
return fetch( API_BASE + '/api/lookup', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify( body )
} ).then( function ( res ) {
return res.json();
} );
}
function highlightContainer( root ) {
var walker = document.createTreeWalker(
root,
NodeFilter.SHOW_TEXT,
{
acceptNode: function ( node ) {
var parent = node.parentElement;
if ( !parent || parent.closest( 'script, style, .mw-editsection, .lx-w' ) ) {
return NodeFilter.FILTER_REJECT;
}
return NodeFilter.FILTER_ACCEPT;
}
}
);
var textNodes = [];
var node;
while ( ( node = walker.nextNode() ) ) {
textNodes.push( node );
}
textNodes.forEach( function ( textNode ) {
var text = textNode.nodeValue;
WORD_RE.lastIndex = 0;
var match;
var lastIndex = 0;
var frag = null;
while ( ( match = WORD_RE.exec( text ) ) ) {
var word = match[ 0 ];
var lower = word.toLowerCase();
var info = wordMap[ lower ];
if ( !info ) {
continue;
}
if ( !frag ) {
frag = document.createDocumentFragment();
}
frag.appendChild( document.createTextNode( text.slice( lastIndex, match.index ) ) );
var span = document.createElement( 'span' );
span.className = 'lx-w lx-' + info.status;
span.dataset.lxWord = lower;
// Show the category on hover, so it isn't down to color alone.
span.title = info.status === 'gap' ?
( options.linkGaps ?
'No Wikidata lexeme yet -- click to create one' :
'No Wikidata lexeme yet' ) :
info.categories.join( ', ' );
var color = colorForWord( info );
if ( color ) {
span.style.setProperty( '--lx-color', color );
}
span.textContent = word;
frag.appendChild( span );
lastIndex = match.index + word.length;
}
if ( frag ) {
frag.appendChild( document.createTextNode( text.slice( lastIndex ) ) );
textNode.parentNode.replaceChild( frag, textNode );
}
} );
}
function positionNear( el, anchor ) {
// Append first (off-screen) so offsetWidth/offsetHeight are measurable.
document.body.appendChild( el );
var rect = anchor.getBoundingClientRect();
var margin = 8;
var maxLeft = window.scrollX + document.documentElement.clientWidth - el.offsetWidth - margin;
var left = Math.max( window.scrollX + margin, Math.min( window.scrollX + rect.left, maxLeft ) );
var top = window.scrollY + rect.bottom + 4;
var maxTop = window.scrollY + document.documentElement.clientHeight - el.offsetHeight - margin;
if ( top > maxTop && rect.top - el.offsetHeight - 4 > 0 ) {
// Not enough room below -- flip above the anchor instead.
top = window.scrollY + rect.top - el.offsetHeight - 4;
}
el.style.left = left + 'px';
el.style.top = top + 'px';
}
function hidePopover() {
if ( popoverEl ) {
popoverEl.remove();
popoverEl = null;
}
}
function showPopover( span, info ) {
hidePopover();
popoverEl = document.createElement( 'div' );
popoverEl.className = 'lx-popover';
info.lexemes.forEach( function ( l ) {
var entry = document.createElement( 'div' );
entry.className = 'lx-entry';
var link = document.createElement( 'a' );
link.href = 'https://www.wikidata.org/wiki/Lexeme:' + l.lexeme;
link.target = '_blank';
link.rel = 'noopener';
link.textContent = l.lexeme;
entry.appendChild( link );
var cat = document.createElement( 'span' );
cat.className = 'lx-cat';
cat.textContent = ' ' + l.category;
entry.appendChild( cat );
if ( l.glosses && l.glosses.length ) {
var gloss = document.createElement( 'p' );
gloss.className = 'lx-gloss';
gloss.textContent = l.glosses[ 0 ];
entry.appendChild( gloss );
}
popoverEl.appendChild( entry );
} );
positionNear( popoverEl, span );
}
// Wikidata's lexeme form, with the word and its language filled in. The
// category is left blank -- that's the bit the editor has to decide.
function newLexemeUrl( word ) {
return 'https://www.wikidata.org/wiki/Special:NewLexeme?' + new URLSearchParams( {
lemma: word,
'spelling-variant': LANG,
language: LANG_QIDS[ LANG ] || LANG_QIDS.en
} );
}
document.addEventListener( 'click', function ( e ) {
var span = e.target.closest( '.lx-w' );
if ( span && ( span.classList.contains( 'lx-match' ) || span.classList.contains( 'lx-mixed' ) ) ) {
e.preventDefault();
showPopover( span, wordMap[ span.dataset.lxWord ] );
} else if ( span && span.classList.contains( 'lx-gap' ) && options.linkGaps ) {
e.preventDefault();
hidePopover();
window.open( newLexemeUrl( span.dataset.lxWord ), '_blank', 'noopener' );
} else if ( !e.target.closest( '.lx-popover' ) ) {
hidePopover();
}
} );
function unwrapContainer( root ) {
var spans = root.querySelectorAll( '.lx-w' );
spans.forEach( function ( span ) {
var text = document.createTextNode( span.textContent );
span.parentNode.replaceChild( text, span );
} );
}
function repaintColors() {
if ( !$content || !$content.length || !wordMap ) {
return;
}
var spans = $content[ 0 ].querySelectorAll( '.lx-w' );
spans.forEach( function ( span ) {
var info = wordMap[ span.dataset.lxWord ];
if ( !info ) {
return;
}
var color = colorForWord( info );
if ( color ) {
span.style.setProperty( '--lx-color', color );
} else {
span.style.removeProperty( '--lx-color' );
}
if ( info.status === 'gap' ) {
span.title = options.linkGaps ?
'No Wikidata lexeme yet -- click to create one' :
'No Wikidata lexeme yet';
}
} );
syncGapLinkClass();
}
// Share of looked-up words that have a lexeme. No gaps means fully mapped.
function computeStats() {
if ( !wordMap ) {
return null;
}
var total = 0, gaps = 0;
Object.keys( wordMap ).forEach( function ( w ) {
total++;
if ( wordMap[ w ].status === 'gap' ) {
gaps++;
}
} );
if ( !total ) {
return null;
}
var matched = total - gaps;
return { total: total, matched: matched, gaps: gaps, pct: Math.round( matched / total * 100 ) };
}
function updateProgress() {
var stats = ( active && loaded ) ? computeStats() : null;
if ( !stats || !indicatorWrapper ) {
if ( progressEl ) {
progressEl.remove();
progressEl = null;
}
return;
}
if ( !progressEl ) {
progressEl = document.createElement( 'div' );
progressEl.className = 'lx-progress';
var bar = document.createElement( 'div' );
bar.className = 'lx-progress-bar';
var fill = document.createElement( 'div' );
fill.className = 'lx-progress-fill';
bar.appendChild( fill );
var label = document.createElement( 'span' );
label.className = 'lx-progress-label';
progressEl.appendChild( bar );
progressEl.appendChild( label );
indicatorWrapper.appendChild( progressEl );
}
progressEl.querySelector( '.lx-progress-fill' ).style.width = stats.pct + '%';
progressEl.classList.toggle( 'lx-progress-complete', stats.gaps === 0 );
progressEl.querySelector( '.lx-progress-label' ).textContent = stats.gaps === 0 ?
stats.matched + '/' + stats.total + ' mapped ✓' :
stats.pct + '% · ' + stats.gaps + ' to fill';
progressEl.title = stats.matched + ' of ' + stats.total +
' words mapped to Wikidata lexemes' +
( stats.gaps ? ', ' + stats.gaps + ' still unmatched (red)' : '' );
}
function celebrate( stats ) {
mw.notify( 'Page fully mapped — all ' + stats.total + ' words matched! 🎉', { type: 'success' } );
if ( window.matchMedia && window.matchMedia( '(prefers-reduced-motion: reduce)' ).matches ) {
return;
}
var layer = document.createElement( 'div' );
layer.className = 'lx-confetti';
var colors = [ '#a4161a', '#1b7a3d', '#1959b8', '#c2540c', '#7d2ae8', '#ffd400' ];
for ( var i = 0; i < 60; i++ ) {
var piece = document.createElement( 'span' );
piece.className = 'lx-confetti-piece';
piece.style.left = ( Math.random() * 100 ) + 'vw';
piece.style.background = colors[ i % colors.length ];
piece.style.animationDelay = ( Math.random() * 0.4 ) + 's';
piece.style.animationDuration = ( 1.8 + Math.random() * 1.2 ) + 's';
layer.appendChild( piece );
}
document.body.appendChild( layer );
setTimeout( function () {
layer.remove();
}, 3600 );
}
function setActive( isActive, button ) {
active = isActive;
if ( $content ) {
$content.toggleClass( 'lx-active', active );
}
if ( button ) {
button.classList.toggle( 'lx-indicator-active', active );
}
updateProgress();
}
function setButtonBusy( button, isBusy ) {
if ( !button ) {
return;
}
var main = button.querySelector( '.lx-btn-main' );
var caret = button.querySelector( '.lx-btn-caret' );
if ( main ) {
main.disabled = isBusy;
}
if ( caret ) {
caret.disabled = isBusy;
}
button.classList.toggle( 'lx-loading', isBusy );
}
function loadAndHighlight( button ) {
$content = $( '#mw-content-text .mw-parser-output' );
if ( !$content.length ) {
return;
}
var root = $content[ 0 ];
var allWords = extractWords( root );
var limit = ( options.limit === null ) ? Math.min( allWords.length, 150 ) : options.limit;
var toFetch = allWords.slice( 0, limit ).map( function ( w ) {
return w.word;
} );
if ( !toFetch.length ) {
return;
}
wordMap = {};
var labelEl = button ? button.querySelector( '.lx-btn-label' ) : null;
var originalLabel = labelEl ? labelEl.textContent : null;
setButtonBusy( button, true );
var batches = [];
for ( var i = 0; i < toFetch.length; i += BATCH_SIZE ) {
batches.push( toFetch.slice( i, i + BATCH_SIZE ) );
}
var doneCount = 0;
var chain = Promise.resolve();
batches.forEach( function ( batch ) {
chain = chain.then( function () {
return fetchLookupBatch( batch ).then( function ( data ) {
if ( data.error ) {
throw new Error( data.error );
}
mergeLookupIntoWordMap( data.result );
highlightContainer( root );
doneCount += batch.length;
if ( labelEl ) {
labelEl.textContent = doneCount + ' / ' + toFetch.length;
}
if ( active && loaded ) {
updateProgress();
}
} );
} );
} );
chain.then( function () {
if ( labelEl ) {
labelEl.textContent = originalLabel;
}
setButtonBusy( button, false );
loaded = true;
setActive( true, button );
var stats = computeStats();
if ( stats && stats.gaps === 0 ) {
celebrate( stats );
}
} ).catch( function ( err ) {
if ( labelEl ) {
labelEl.textContent = originalLabel;
}
setButtonBusy( button, false );
mw.notify( 'Leximap: request failed (' + err + ')', { type: 'error' } );
} );
}
function toggle( button ) {
if ( !loaded ) {
loadAndHighlight( button );
return;
}
setActive( !active, button );
}
function reload( button ) {
hidePopover();
if ( $content && $content.length ) {
unwrapContainer( $content[ 0 ] );
}
loaded = false;
wordMap = null;
active = false;
if ( button ) {
button.classList.remove( 'lx-indicator-active' );
}
updateProgress();
loadAndHighlight( button );
}
function hidePanel() {
if ( panelEl ) {
panelEl.remove();
panelEl = null;
}
}
function showPanel( anchor, button ) {
if ( panelEl ) {
hidePanel();
return;
}
panelEl = document.createElement( 'div' );
panelEl.className = 'lx-panel';
var root = ( $content && $content.length ) ? $content[ 0 ] : document.querySelector( '#mw-content-text .mw-parser-output' );
var uniqueCount = root ? extractWords( root ).length : null;
if ( uniqueCount !== null ) {
var countLabel = document.createElement( 'div' );
countLabel.className = 'lx-panel-count';
countLabel.textContent = 'This page has ' + uniqueCount + ' unique word' + ( uniqueCount === 1 ? '' : 's' ) + '.';
panelEl.appendChild( countLabel );
if ( !limitTouched ) {
options.limit = Math.min( uniqueCount, 150 );
}
}
function numberField( labelText, value, min, max ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-row';
var span = document.createElement( 'span' );
span.textContent = labelText;
var input = document.createElement( 'input' );
input.type = 'number';
input.min = min;
input.max = max;
input.value = value;
row.appendChild( span );
row.appendChild( input );
panelEl.appendChild( row );
return input;
}
function checkboxField( labelText, checked ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-row';
var input = document.createElement( 'input' );
input.type = 'checkbox';
input.checked = checked;
var span = document.createElement( 'span' );
span.textContent = labelText;
row.appendChild( input );
row.appendChild( span );
panelEl.appendChild( row );
return input;
}
function colorField( labelText, value ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-color-row';
var span = document.createElement( 'span' );
span.textContent = labelText;
var input = document.createElement( 'input' );
input.type = 'color';
input.value = value;
row.appendChild( span );
row.appendChild( input );
panelEl.appendChild( row );
return input;
}
var maxAllowed = uniqueCount !== null ? uniqueCount : 999;
var limitInput = numberField( 'Words to check', options.limit, 0, maxAllowed );
var maxGlossesInput = numberField( 'Glosses per word', options.max_glosses, 0, 10 );
var glossesInput = checkboxField( 'Show glosses', options.glosses === 1 );
var linkGapsInput = checkboxField( 'Link unmatched words to Wikidata', options.linkGaps === 1 );
var colorsEnabledInput = checkboxField( 'Colored highlighting', options.colorsEnabled === 1 );
var customColorsInput = checkboxField( 'Customize colors', options.customColors === 1 );
var catLabel = document.createElement( 'div' );
catLabel.className = 'lx-panel-cat-label';
catLabel.textContent = 'Categories (none checked = all)';
panelEl.appendChild( catLabel );
var catGrid = document.createElement( 'div' );
catGrid.className = 'lx-panel-cat-grid';
var catInputs = {};
CATEGORIES.forEach( function ( cat ) {
var row = document.createElement( 'label' );
row.className = 'lx-panel-cat';
var input = document.createElement( 'input' );
input.type = 'checkbox';
input.checked = !!( options.categories && options.categories.indexOf( cat ) !== -1 );
var span = document.createElement( 'span' );
span.textContent = cat;
row.appendChild( input );
row.appendChild( span );
catGrid.appendChild( row );
catInputs[ cat ] = input;
} );
panelEl.appendChild( catGrid );
// Group the pickers so the "Customize colors" checkbox can hide them.
// colorField() appends to panelEl, so point panelEl here while we build.
var colorSection = document.createElement( 'div' );
colorSection.className = 'lx-panel-colors';
var realPanelEl = panelEl;
panelEl = colorSection;
var colorLabel = document.createElement( 'div' );
colorLabel.className = 'lx-panel-cat-label';
colorLabel.textContent = 'Colors';
colorSection.appendChild( colorLabel );
var colorInputs = {};
CATEGORIES.forEach( function ( cat ) {
colorInputs[ cat ] = colorField( cat, options.categoryColors[ cat ] || DEFAULT_OTHER_COLOR );
} );
var mixedColorInput = colorField( 'Multiple categories', options.mixedColor );
var otherColorInput = colorField( 'Other categories', options.otherColor );
var gapColorInput = colorField( 'No match', options.gapColor );
panelEl = realPanelEl;
panelEl.appendChild( colorSection );
function syncColorSection() {
colorSection.style.display = customColorsInput.checked ? '' : 'none';
}
syncColorSection();
customColorsInput.addEventListener( 'change', syncColorSection );
var applyButton = document.createElement( 'button' );
applyButton.type = 'button';
applyButton.className = 'lx-panel-apply';
applyButton.textContent = 'Apply';
applyButton.addEventListener( 'click', function () {
var newLimit = Math.max( 0, Math.min( parseInt( limitInput.value, 10 ) || 0, maxAllowed ) );
var newMaxGlosses = parseInt( maxGlossesInput.value, 10 ) || 0;
var newGlosses = glossesInput.checked ? 1 : 0;
var checkedCats = CATEGORIES.filter( function ( cat ) {
return catInputs[ cat ].checked;
} );
var newCategories = checkedCats.length ? checkedCats : null;
var needsRefetch = loaded && (
newLimit !== options.limit ||
newMaxGlosses !== options.max_glosses ||
newGlosses !== options.glosses ||
JSON.stringify( newCategories ) !== JSON.stringify( options.categories )
);
limitTouched = true;
options.limit = newLimit;
options.max_glosses = newMaxGlosses;
options.glosses = newGlosses;
options.categories = newCategories;
options.linkGaps = linkGapsInput.checked ? 1 : 0;
options.colorsEnabled = colorsEnabledInput.checked ? 1 : 0;
options.customColors = customColorsInput.checked ? 1 : 0;
if ( options.customColors ) {
CATEGORIES.forEach( function ( cat ) {
options.categoryColors[ cat ] = colorInputs[ cat ].value;
} );
options.mixedColor = mixedColorInput.value;
options.otherColor = otherColorInput.value;
options.gapColor = gapColorInput.value;
} else {
// Not customizing -- fall back to the built-in palette.
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS );
options.mixedColor = DEFAULT_MIXED_COLOR;
options.otherColor = DEFAULT_OTHER_COLOR;
options.gapColor = DEFAULT_GAP_COLOR;
}
saveOptions();
syncGapLinkClass();
hidePanel();
if ( needsRefetch ) {
reload( button );
} else if ( loaded ) {
repaintColors();
}
} );
panelEl.appendChild( applyButton );
positionNear( panelEl, anchor );
}
document.addEventListener( 'click', function ( e ) {
if ( panelEl && !e.target.closest( '.lx-panel' ) && !e.target.closest( '.lx-btn-caret' ) ) {
hidePanel();
}
} );
var ICON_SVG = '<svg viewBox="0 0 32 32" aria-hidden="true" focusable="false">' +
'<rect x="3" y="7" width="12" height="5" rx="2.5" fill="#2f6b45"/>' +
'<rect x="17" y="7" width="12" height="5" rx="2.5" fill="#3b5a85"/>' +
'<rect x="3" y="14" width="8" height="5" rx="2.5" fill="#8a651b"/>' +
'<rect x="13" y="14" width="9" height="5" rx="2.5" fill="#b32424"/>' +
'<rect x="24" y="14" width="5" height="5" rx="2.5" fill="#6b4a86"/>' +
'<rect x="3" y="21" width="15" height="5" rx="2.5" fill="#3a7a7a"/>' +
'<rect x="20" y="21" width="9" height="5" rx="2.5" fill="#8b3a3a"/>' +
'</svg>';
function addIndicatorButton() {
var indicators = document.querySelector( '.mw-indicators' );
if ( !indicators ) {
// Fall back to the toolbox if this skin/page has no indicators row.
mw.loader.using( [ 'mediawiki.util' ] ).then( function () {
mw.util.addPortletLink(
'p-tb',
'#',
'Leximap',
'ca-leximap',
'Highlight words by Wikidata lexeme category'
).addEventListener( 'click', function ( e ) {
e.preventDefault();
toggle( null );
} );
} );
return;
}
var wrapper = document.createElement( 'div' );
wrapper.id = 'mw-indicator-lx-leximap';
wrapper.className = 'mw-indicator';
indicatorWrapper = wrapper;
var group = document.createElement( 'div' );
group.className = 'lx-btn';
var main = document.createElement( 'button' );
main.type = 'button';
main.className = 'lx-btn-main';
main.title = 'Highlight words by Wikidata lexeme category';
var icon = document.createElement( 'span' );
icon.className = 'lx-btn-icon';
// Static, trusted markup (matches the Leximap app logo mark) -- not user data.
icon.innerHTML = ICON_SVG;
main.appendChild( icon );
var label = document.createElement( 'span' );
label.className = 'lx-btn-label';
label.textContent = 'Leximap';
main.appendChild( label );
var caret = document.createElement( 'button' );
caret.type = 'button';
caret.className = 'lx-btn-caret';
caret.title = 'Leximap settings';
caret.setAttribute( 'aria-label', 'Leximap settings' );
caret.textContent = '▾';
group.appendChild( main );
group.appendChild( caret );
wrapper.appendChild( group );
main.addEventListener( 'click', function ( e ) {
e.preventDefault();
toggle( group );
} );
caret.addEventListener( 'click', function ( e ) {
e.preventDefault();
e.stopPropagation();
showPanel( group, group );
} );
indicators.appendChild( wrapper );
}
// Take the default palette from the backend so we're not keeping our own
// copy. Anyone who's customized their colors keeps them.
function applyServerPalette( p ) {
if ( !p || typeof p !== 'object' || p.error ) {
return;
}
if ( p.categoryColors && typeof p.categoryColors === 'object' ) {
Object.assign( DEFAULT_CATEGORY_COLORS, p.categoryColors );
}
if ( p.gapColor ) {
DEFAULT_GAP_COLOR = p.gapColor;
}
if ( p.mixedColor ) {
DEFAULT_MIXED_COLOR = p.mixedColor;
}
if ( p.otherColor ) {
DEFAULT_OTHER_COLOR = p.otherColor;
}
if ( !options.customColors ) {
options.categoryColors = Object.assign( {}, DEFAULT_CATEGORY_COLORS );
options.gapColor = DEFAULT_GAP_COLOR;
options.mixedColor = DEFAULT_MIXED_COLOR;
options.otherColor = DEFAULT_OTHER_COLOR;
repaintColors();
}
}
function fetchPalette() {
fetch( API_BASE + '/api/palette' )
.then( function ( res ) {
return res.json();
} )
.then( applyServerPalette )
.catch( function () {
// Offline / API down -- keep the built-in defaults.
} );
}
fetchPalette();
addIndicatorButton();
}() );
1vjfdo281pf0f7n8tldxmqy86gbhkv6
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৩৫
104
885203
1996852
2026-08-30T16:35:28Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996852
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৩৫|দ্বিতীয় পরিচ্ছেদ}}{{rule}}</noinclude>হইতেই, কুঞ্জ জানালার ধারে জ্যোৎস্নাতে আসিয়া দাঁড়াইল।—ও মা, কি সৰ্ব্বনাশ! এ কি ব্যাপার! সহস্র বজ্র যেন হঠাৎ আমাদের মাথার উপরে পড়িল! চারিদিক অন্ধকার বোধ হইতে লাগিল! এ ত কুঞ্জ নয়! এ যে দেখি, আমাদের হেড্মাষ্টার! হেডমাষ্টারকে দেখিয়া, আমাদের হাত-পা আড়ষ্ট হইয়া গেল! কিন্তু তবুও আমরা প্রাণভয়ে ছুটিয়া ঘরে আসিয়া লুকাইলাম।
{{ফাঁক}}বাকি রাতটা যে কি ভাবে কাটিল, তাহা লিখিয়া জানাইতে পারি না। এমন কোন ভাষা নাই, যাহাতে ঠিক আমাদের তখনকার মনের ভাবটি প্রকাশ হয়। সকাল হইলে কি করিব, ভাবিয়া কিছুই ঠিক করিতে পারিলাম না।<noinclude></noinclude>
bjgeje8c2bxd7plbngrt8abqe9e333a
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৩৬
104
885204
1996853
2026-08-30T16:37:51Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996853
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৩৬|মোহনলাল}}{{rule}}</noinclude>যাহা হউক শেষে গায়ের রং ধুইয়া, দুটিতে মৃতবৎ পড়িয়া রহিলাম। মুখোস্ পূৰ্ব্বেই পুড়াইয়া ফেলিয়াছিলাম।
{{ফাঁক}}সকাল না হইতেই, বোর্ডিংময় রাষ্ট্র হইল যে, দুটি বালক মুখোস্ পরিয়া রাত্রে হেডমাষ্টারকে খুন করিতে আসিয়াছিল। সেই বালক দুটি কে কে, জানিবার জন্য মাষ্টার মহাশয় বোর্ডিংএর সকল বালককে একত্র হইতে বলিলেন। আমরা যতদূর সম্ভব মনের ভাব গোপন করিয়া সকলের সঙ্গে গিয়া বসিলাম; এবং যাহারা আমাদের কীৰ্ত্তি জানিত, ইঙ্গিতে তাহাদিগকে কোনও কথা প্রকাশ করিতে নিষেধ করিয়া, নিতান্ত নিরীহ বালকের ন্যায় মাষ্টার মহাশয়ের আগমন প্রতীক্ষা করিতে লাগিলাম।<noinclude></noinclude>
q140cuqnhnb33m2d2oq2re6f074iwyt
1996856
1996853
2026-08-30T16:38:53Z
BabulB
2144
1996856
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৩৬|মোহনলাল}}{{rule}}</noinclude>যাহা হউক শেষে গায়ের রং ধুইয়া, দুটিতে মৃতবৎ পড়িয়া রহিলাম। মুখোস্ পূৰ্ব্বেই পুড়াইয়া ফেলিয়াছিলাম।
{{ফাঁক}}সকাল না হইতেই, বোর্ডিংময় রাষ্ট্র হইল যে, দুটি বালক মুখোস্ পরিয়া রাত্রে হেডমাষ্টারকে খুন করিতে আসিয়াছিল। সেই বালক দুটি কে কে, জানিবার জন্য মাষ্টার মহাশয় বোর্ডিংএর সকল বালককে একত্র হইতে বলিলেন। আমরা যতদূর সম্ভব মনের ভাব গোপন করিয়া সকলের সঙ্গে গিয়া বসিলাম; এবং যাহারা আমাদের কীৰ্ত্তি জানিত, ইঙ্গিতে তাহাদিগকে কোনও কথা প্রকাশ করিতে নিষেধ করিয়া, নিতান্ত নিরীহ বালকের ন্যায় মাষ্টার মহাশয়ের আগমন প্রতীক্ষা করিতে লাগিলাম।{{nop}}<noinclude></noinclude>
m0gy0aq5vfyklg1eeb3v1xrxucdfkno
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৩৭
104
885205
1996854
2026-08-30T16:38:29Z
BabulB
2144
/* মুদ্রণ সংশোধন করা হয়নি */ "{{ফাঁক}}কিছু পরেই বোর্ডিংএর সম্পাদক ও হেডমাষ্টার মহাশয় সেখানে আসিয়া উপস্থিত হইলেন, এবং কে কে এরূপ অসমসাহসিক কাৰ্য্য করিয়াছে, জানিতে চাহিলেন। কিন্তু বালকদিগের মধ্যে কে..." দিয়ে পাতা তৈরি
1996854
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|৩৭|দ্বিতীয় পরিচ্ছেদ .}}{{rule}}</noinclude>{{ফাঁক}}কিছু পরেই বোর্ডিংএর সম্পাদক ও
হেডমাষ্টার মহাশয় সেখানে আসিয়া
উপস্থিত হইলেন, এবং কে কে এরূপ
অসমসাহসিক কাৰ্য্য করিয়াছে, জানিতে
চাহিলেন। কিন্তু বালকদিগের মধ্যে
কেহই তাঁহাদের কথার উত্তর দিল না।
তাঁহারা আবার জিজ্ঞাসা করিলেন ;
সেবারেও কেহ কোন উত্তর দিল না ।
তখন তাঁহারা এক এক জন করিয়া এক-
দিক হইতে সকলকে জিজ্ঞাসা করিতে
লাগিলেন । প্রথম চার পাঁচটি ছেলে
উত্তর দিল যে, তাহারা ইহার কিছুই
জানে না। তারপর মাষ্টার মহাশয়
পঞ্চানন নামে একটি ছেলেকে জিজ্ঞাসা
করিলেন। পঞ্চাননের সহিত রমানাথের -
খুব শত্রুতা ছিল। আমিও পঞ্চাননকে<noinclude></noinclude>
rvb5jd2gffzej24eims8s2r4qyu0fk7
1996859
1996854
2026-08-30T16:41:31Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996859
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৩৭|দ্বিতীয় পরিচ্ছেদ .}}{{rule}}</noinclude>{{ফাঁক}}কিছু পরেই বোর্ডিংএর সম্পাদক ও হেডমাষ্টার মহাশয় সেখানে আসিয়া উপস্থিত হইলেন, এবং কে কে এরূপ অসমসাহসিক কাৰ্য্য করিয়াছে, জানিতে চাহিলেন। কিন্তু বালকদিগের মধ্যে কেহই তাঁহাদের কথার উত্তর দিল না। তাঁহারা আবার জিজ্ঞাসা করিলেন; সেবারেও কেহ কোন উত্তর দিল না। তখন তাঁহারা এক এক জন করিয়া একদিক হইতে সকলকে জিজ্ঞাসা করিতে লাগিলেন। প্রথম চার পাঁচটি ছেলে উত্তর দিল যে, তাহারা ইহার কিছুই জানে না। তারপর মাষ্টার মহাশয় পঞ্চানন নামে একটি ছেলেকে জিজ্ঞাসা করিলেন। পঞ্চাননের সহিত রমানাথের খুব শত্রুতা ছিল। আমিও পঞ্চাননকে<noinclude></noinclude>
542ge3pkwy4aaa5rdz6qdgvl0j9o0st
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৩৮
104
885206
1996860
2026-08-30T16:44:08Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996860
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৩৮|মোহনলাল}}{{rule}}</noinclude>মনে মনে ঘৃণা করিতাম। মাষ্টার মহাশয়ের প্রশ্নের উত্তরে পঞ্চানন দাঁড়াইয়া বলিল, “আমার বোধ হয়, রমানাথ এর মধ্যে ছিল! কাল বিকেলে তাকে দুটো মুখোস কিনে আনতে দেখেছি।” পঞ্চাননের কথা শুনিয়া, ভয়ে আমাদের মুখ শুকাইয়া গেল, বুক গুর্-গুর্ করিতে লাগিল। বোর্ডিংএর সম্পাদক মহাশয় তখনই রমানাথের হাত ধরিয়া হিড় হিড়্ করিয়া টানিতে টানিতে জিজ্ঞাসা করিলেন, “তুমি এই কাজ করেছ?”
{{ফাঁক}}“আজ্ঞে না, আমি কিছুই জানি না, বলিয়া রমানাথ আত্মদোষ গোপন করিতে চেষ্টা করিল। কিন্তু সে চেষ্টা বৃথা। প্রহারের যন্ত্রণায় দুই তিন মিনিটের মধ্যেই রমানাথ তাহার দোষ স্বীকার<noinclude></noinclude>
cs0n5nytsg1lt3jegdsukze605ckj7c
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৩৯
104
885207
1996862
2026-08-30T16:46:32Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996862
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৩৯|দ্বিতীয় পরিচ্ছেদ}}{{rule}}</noinclude>করিল; এবং আমার নামও প্রকাশ করিয়া দিল। হেডমাষ্টার মহাশয় আমাকেও টানিতে টানিতে, সম্পাদকের কাছে লইয়া গেলেন। নরহত্যাকারীকে ফাঁসি দিবার সময় তাহার মনের ভাব কিরূপ হয়, এই সময়ে আমি তাহা ভাল করিয়া বুঝিতে পারিয়াছিলাম। আমরা কোন রকমে দোষ গোপন করিতে না পারিয়া, প্রকৃত ঘটনাটা কি, তাহা তাঁহাদিগকে বুঝাইতে চেষ্টা করিলাম। কিন্তু তাঁহারা কিছুতেই আমাদের কথায় বিশ্বাস করিলেন না। মনের সাধ মিটাইয়া প্রহার করিতে লাগিলেন। চাবুকের আঘাতে যখন আমাদের সর্ব্বাঙ্গ ফুলিয়া লাল হইয়া উঠিল, তখন তাঁহারা আমাদের দুই জনকে দুই ঘরে বন্ধ<noinclude></noinclude>
kwwi2oldpz0hk0dne7xakrux70oxd0a
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৪০
104
885208
1996864
2026-08-30T16:48:30Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996864
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৪০|মোহনলাল}}{{rule}}</noinclude>করিয়া রাখিলেন। এইখানেই যে আমাদের শাস্তির শেষ হইল, তাহা নহে ; দশটার পর মাষ্টার মহাশয় আমাদের দুই জনের মাথায় দুটা গাধার টুপী পরাইয়া ক্লাসে ক্লাসে ঘুরাইয়া আনিলেন এবং ভবিষ্যতে আর কখনও কোন প্রকার দুষ্টামী করিলে, বোর্ডিং হইতে তাড়াইয়া দিবেন বলিয়া ভয় দেখাইলেন। এইরূপে সেই দিনের গোলযোগ এক রকম থামিয়া গেল। গোলমাল চুকিয়া গেল বটে, কিন্তু নীচাশয় পঞ্চাননের শত্রুতার কথা ভুলিতে পারিলাম না। আমরা গোপনে পরামর্শ করিলাম যে, বোর্ডিং ছাড়িতে হয় তাও স্বীকার, পঞ্চাননকে একবার ভাল করিয়া শিক্ষা দিতে হইবে!<noinclude></noinclude>
8bvcrg25g1hrtwbdfwzfc6od2tdjb8d
1996865
1996864
2026-08-30T16:49:01Z
BabulB
2144
1996865
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৪০|মোহনলাল}}{{rule}}</noinclude>করিয়া রাখিলেন। এইখানেই যে আমাদের শাস্তির শেষ হইল, তাহা নহে ; দশটার পর মাষ্টার মহাশয় আমাদের দুই জনের মাথায় দুটা গাধার টুপী পরাইয়া ক্লাসে ক্লাসে ঘুরাইয়া আনিলেন এবং ভবিষ্যতে আর কখনও কোন প্রকার দুষ্টামী করিলে, বোর্ডিং হইতে তাড়াইয়া দিবেন বলিয়া ভয় দেখাইলেন। এইরূপে সেই দিনের গোলযোগ এক রকম থামিয়া গেল। গোলমাল চুকিয়া গেল বটে, কিন্তু নীচাশয় পঞ্চাননের শত্রুতার কথা ভুলিতে পারিলাম না। আমরা গোপনে পরামর্শ করিলাম যে, বোর্ডিং ছাড়িতে হয় তাও স্বীকার, পঞ্চাননকে একবার ভাল করিয়া শিক্ষা দিতে হইবে!{{nop}}<noinclude></noinclude>
ry184fh7vtku9yuszvo6rtk9heapqob
মোহনলাল/দ্বিতীয় পরিচ্ছেদ
0
885209
1996866
2026-08-30T16:50:06Z
BabulB
2144
"<pages index="মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf" from=24 to=41 header=1/>" দিয়ে পাতা তৈরি
1996866
wikitext
text/x-wiki
<pages index="মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf" from=24 to=41 header=1/>
rglg493j6t3a0pvoutgjxfz87qc7wua
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৫৯
104
885210
1996867
2026-08-30T16:52:09Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996867
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" /></noinclude>{{dhr}}
{{কেন্দ্র|{{xxx-larger|'''বাল্য-স্মৃতি'''}}}}
{{কেন্দ্র|{{larger|'''১'''}}}}
{{ফাঁক}}অন্ন-প্রাশনের সময় যখন আমাদের নামকরণ হয় তখন আমি ঠিক হইয়া উঠিতে পারি নাই বলিয়াই হৌক, আর ঠাকুর্দ্দা মহাশয়ের জ্যোতিষ শাস্ত্রে বিশেষ দখল না থাকাতেই হৌক, আমি ‘সুকুমার’। অধিক দিন নহে, ঠিক দুই-চারি বৎসরে ঠাকুর্দ্দা মহাশয় বুঝিলেন যে, নামটার সহিত আমার তেমন মিশ খায় না। এখন বার-তের বৎসর পরের কথা বলি। অবশ্য আমার আত্ম-পরিচয়ের কথা কেউ ভাল বুঝিতে পারিবে না—তবুও—
{{ফাঁক}}দেখুন, পাড়াগাঁয়ে আমাদের বাড়ি। সেখানে আমি ছেলে-বেলা হইতেই আছি। পিতা মহাশয় পশ্চিমাঞ্চলে চাকুরী করিতেন। আমি বড় একটা সেখানে যাইতাম না। ঠাকুরমার নিকট দেশেই থাকিতাম। বাটীতে আমার উপদ্রবের সীমা ছিল না। এক কথায় একটি ক্ষুদ্র রাবণ ছিলাম। বৃদ্ধ ঠাকুর্দ্দা যখন বলিতেন, তুই হলি কি? কারও কথা শুনিস্নে। এইবার তোর বাপকে চিঠি লিখব। আমি অল্প হাসিয়া বলিতাম, ঠাকুর্দ্দা সে দিন-কাল আর নেই, বাপের বাপকে আমি ভয় করিনে। ঠাকুরমা কাছে থাকিলে আর ভয় কি? ঠাকুর্দ্দাকে তিনিই বলিতেন, কেমন উত্তর দিয়েচে—আর লাগবে?
{{ফাঁক}}ঠাকুর্দ্দা মহাশয় যদি বড় বিরক্ত হইয়া আমার পিতাকে পত্র লিখিতেন, আমি তখনই তাঁর আফিমের কৌটা লুকাইয়া ফেলিতাম। পরে পত্রখানি না ছিঁড়িয়া ফেলিলে আর কৌটা বাহির করিতাম না। এই সকল উপদ্রবের ভয়ে বিশেষত মৌতাত সম্বন্ধে বিভ্রাট ঘটে দেখিয়া তিনি আমাকে আর কিছু বলিতেন না। আমিও বেশ ছিলাম।
{{ফাঁক}}হইলে কি হয়? সকল সুখেরই একটা সীমা নির্দ্দিষ্ট আছে। আমারও তাহাই হইল। ঠাকুর্দ্দার খুড়তুত ভাই গোবিন্দবাবু বরাবর এলাহাবাদে চাকুরী করিতেন; এখন পেনসন লইয়া তিনি দেশে আসিলেন। তাঁহার পৌত্র শ্রীযুক্ত রজনীনাথ বি. এ. পাশ করিয়া তাঁহার সহিত ফিরিয়া আসিলেন। আমি তাঁকে সেজদাদা বলি। পূর্ব্বে আমার সহিত তাঁহার বিশেষ জানা-শুনা ছিল না। তিনি বড় একটা এ অঞ্চলে<noinclude>{{c|৩৪৫}}</noinclude>
q282ja08ravd2o6fh8n7naug3yg86ml
1996869
1996867
2026-08-30T16:59:29Z
Nettime Sujata
5470
1996869
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" /></noinclude>{{dhr}}
{{কেন্দ্র|{{xx-larger|'''বাল্য-স্মৃতি'''}}}}
{{কেন্দ্র|{{larger|'''১'''}}}}
{{ফাঁক}}অন্ন-প্রাশনের সময় যখন আমাদের নামকরণ হয় তখন আমি ঠিক হইয়া উঠিতে পারি নাই বলিয়াই হৌক, আর ঠাকুর্দ্দা মহাশয়ের জ্যোতিষ শাস্ত্রে বিশেষ দখল না থাকাতেই হৌক, আমি ‘সুকুমার’। অধিক দিন নহে, ঠিক দুই-চারি বৎসরে ঠাকুর্দ্দা মহাশয় বুঝিলেন যে, নামটার সহিত আমার তেমন মিশ খায় না। এখন বার-তের বৎসর পরের কথা বলি। অবশ্য আমার আত্ম-পরিচয়ের কথা কেউ ভাল বুঝিতে পারিবে না—তবুও—
{{ফাঁক}}দেখুন, পাড়াগাঁয়ে আমাদের বাড়ি। সেখানে আমি ছেলে-বেলা হইতেই আছি। পিতা মহাশয় পশ্চিমাঞ্চলে চাকুরী করিতেন। আমি বড় একটা সেখানে যাইতাম না। ঠাকুরমার নিকট দেশেই থাকিতাম। বাটীতে আমার উপদ্রবের সীমা ছিল না। এক কথায় একটি ক্ষুদ্র রাবণ ছিলাম। বৃদ্ধ ঠাকুর্দ্দা যখন বলিতেন, তুই হলি কি? কারও কথা শুনিস্নে। এইবার তোর বাপকে চিঠি লিখব। আমি অল্প হাসিয়া বলিতাম, ঠাকুর্দ্দা সে দিন-কাল আর নেই, বাপের বাপকে আমি ভয় করিনে। ঠাকুরমা কাছে থাকিলে আর ভয় কি? ঠাকুর্দ্দাকে তিনিই বলিতেন, কেমন উত্তর দিয়েচে—আর লাগবে?
{{ফাঁক}}ঠাকুর্দ্দা মহাশয় যদি বড় বিরক্ত হইয়া আমার পিতাকে পত্র লিখিতেন, আমি তখনই তাঁর আফিমের কৌটা লুকাইয়া ফেলিতাম। পরে পত্রখানি না ছিঁড়িয়া ফেলিলে আর কৌটা বাহির করিতাম না। এই সকল উপদ্রবের ভয়ে বিশেষত মৌতাত সম্বন্ধে বিভ্রাট ঘটে দেখিয়া তিনি আমাকে আর কিছু বলিতেন না। আমিও বেশ ছিলাম।
{{ফাঁক}}হইলে কি হয়? সকল সুখেরই একটা সীমা নির্দ্দিষ্ট আছে। আমারও তাহাই হইল। ঠাকুর্দ্দার খুড়তুত ভাই গোবিন্দবাবু বরাবর এলাহাবাদে চাকুরী করিতেন; এখন পেনসন লইয়া তিনি দেশে আসিলেন। তাঁহার পৌত্র শ্রীযুক্ত রজনীনাথ বি. এ. পাশ করিয়া তাঁহার সহিত ফিরিয়া আসিলেন। আমি তাঁকে সেজদাদা বলি। পূর্ব্বে আমার সহিত তাঁহার বিশেষ জানা-শুনা ছিল না। তিনি বড় একটা এ অঞ্চলে<noinclude>{{c|৩৪৫}}</noinclude>
50uup59pntufnxxpxr4j9g7l91fgzli
পাতা:শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf/৩৬০
104
885211
1996868
2026-08-30T16:58:17Z
Nettime Sujata
5470
/* মুদ্রণ সংশোধন করা হয়েছে */
1996868
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Nettime Sujata" />{{কেন্দ্র|শরৎ-সাহিত্য-সংগ্রহ}}</noinclude>আসিতেন না; বিশেষত তাঁদের আলাদা বাড়ি; আসিলেও আমার বিশেষ খোঁজ লইতেন না। কখনও দেখা হইলে-কি রে কেমন আছিস্? কি পড়িস? এই পর্য্যন্ত।
{{ফাঁক}}এবার তিনি জাঁকিয়া আসিয়া দেশে বসিলেন। কাজে কাজেই আমার বিশেষ খোঁজ হইল। দুই-চারি দিবসের আলাপেই তিনি আমাকে এরূপ বশীভূত করিয়া ফেলিলেন যে, তাঁহাকে দেখিলেই আমার ভয় হইত, মুখ শুকাইয়া যাইত, বুক ধড়াস ধড়াস করিত—যেন কত দোষই করিয়াছি, কত শাস্তি পাইব। আর যথার্থ আমি তখন প্রায়ই দোষী থাকিতাম। সর্ব্বদা একটা না একটা অন্যায় করা আমার চাই। দুই-চারিটা অকর্ম্ম, দুই-চারি বার উপদ্রব করা আমার নিত্যকর্ম্ম। ভয় করিলেও আমি দাদাকে বড় ভালবাসিতাম। ভাই ভাইকে যে এত ভালবাসিতে পারে, পূর্ব্বে আমি তাহা জানিতাম না। তিনিও আমাকে বড় ভালবাসিতেন। তাঁর কাছেও কত দোষ করিয়াছি, কিন্তু কিছু বলিতেন না; আর বলিলেও মনে করিতাম, সেজদাদা ত, একটু পরে আর কিছুই মনে থাকিবে না।
{{ফাঁক}}ইচ্ছা করিলে হয়ত তিনি আমার চরিত্র সংশোধন করিতে পারিতেন, কিন্তু কিছুই করিলেন না। তাঁর দেশে আসাতে আমি পূর্ব্বের মত স্বাধীন নয় বটে, কিন্তু তথাপি যাহা আছি, বেশ আছি।
{{ফাঁক}}রোজ ঠাকুর্দ্দার এক পয়সার তামাক খাইয়া ফেলি। বুড়ো বেচারী আমার ভয়ে খাটের খুরোর পাশে, তক্তপোশের পেটের সিন্দুকে, চালার বাতায়, যেখানে তামাক রাখিতেন, আমি খুঁজিয়া খুঁজিয়া সবটুকু টানিয়া আনিয়া খাইয়া ফেলিতাম। খাই দাই ঘুড়ি ওড়াই, বেশ আছি। কোনও জঞ্জাল নাই; পড়া-শুনা একরকম ছাড়িয়াই দিয়াছি। পাখী মারিতাম, কাঠবেড়াল মারিয়া পোড়াইয়া খাইতাম, বনে বনে গর্ত্তে গর্ত্তে খরগোস খুঁজিয়া বেড়াইতাম, কোনও ভাবনা ছিল না।
{{ফাঁক}}বাবা বক্সারে চাকুরী করিতেন। সে স্থান হইতে আমাকে দেখিতেও আসিতেন না; মারিতেও আসিতেন না। ঠাকুরমা ও ঠাকুর্দ্দার হাল পূর্ব্বেই বিবৃত করিয়াছি। সুতরাং এক কথায় আমি বেশ ছিলাম।
{{ফাঁক}}একদিন দুপুর-বেলা বাড়ি আসিয়া ঠাকুরমার নিকট শুনিলাম, আমাকে সেজদার সহিত কলিকাতায় থাকিয়া পড়া-শুনা করিতে হইবে। আহারাদি সমাপ্ত করিয়া এক ছিলিম তামাক হাতে করিয়া আসিয়া ঠাকুর্দ্দাকে বলিলাম, আমাকে কলকাতায় যেতে হবে? ঠাকুর্দ্দা বলিলেন, হাঁ। আমি পূর্ব্ব হইতেই ভাবিয়া রাখিয়াছিলাম, এ সকল ঠাকুর্দ্দার চালাকী। বলিলাম, যদি যেতে হয় আজই যাব। ঠাকুর্দ্দা<noinclude>{{c|৩৪৬}}</noinclude>
4iistiw5o8dkx0lmci697j5dqvk6upq
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৪২
104
885212
1996870
2026-08-30T17:26:28Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996870
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" /></noinclude>{{কেন্দ্র|{{x-larger|তৃতীয় পরিচ্ছেদ}}}}
বোর্ডিং হইতে বাহির হইয়া, আমি ও রমানাথ একটা চেনা মুদির দোকানে জিনিষপত্র রাখিয়া, গড়ের মাঠের দিকে চলিলাম। রাগে, দুঃখে ও অপমানে তখন উভয়ের মন এত উত্তেজিত ছিল যে, ভবিষ্যতে কি করিব, কোথায় যাইব, সে কথা আমাদের মনেই আসিল না। গড়ের মাঠের নির্ম্মল বায়ু সেবনে শরীর ও মন কতক শীতল হইলে, একটা গাছতলায় বসিয়া আমরা আমাদের ভবিষ্যৎ কাৰ্য্য-কলাপের বিষয় আলোচনা করিতে লাগিলাম। রমানাথ জিজ্ঞাসা করিল, “বাড়ী গিয়ে তোমার মাকে এ সব কথা ব’ল্বে না কি?” রমানাথের<noinclude></noinclude>
9okp0uhijny1v1bofzum3qir46w3000
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৪৩
104
885213
1996871
2026-08-30T17:26:57Z
BabulB
2144
/* লিখা নথকা */
1996871
proofread-page
text/x-wiki
<noinclude><pagequality level="0" user="BabulB" /></noinclude><noinclude></noinclude>
b43rr2jowf39j7n00bvknd5piln9lww
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৪৪
104
885214
1996872
2026-08-30T17:29:27Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996872
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৪৪|মোহনলাল}}{{rule}}</noinclude>প্রশ্ন শুনিয়া হঠাৎ মায়ের কথা আমার মনে হইল । মায়ের সেই মলিন মুখ, সেই বেদনাব্যঞ্জক চক্ষের জল, সেই স্নেহভরা আদর, সেই সুমধুর উপদেশ—একে একে সকল কথাই আমার মনে পড়িতে লাগিল। আমি বলিলাম, “ভাই, কোন্ মুখে আর মা'র কাছে যাব! এ সব কথা শুনলে তিনি বিষ খেয়ে ম’র্বেন!”
{{ফাঁক}}রমানাথ বলিল, “আচ্ছা, এখন তবে বরিশালে চল; সেখানে আমার কাকা থাকেন।”
{{ফাঁক}}আমার কাছে টাকা কড়ি যাহা ছিল, তাহাতে পাঁচ ছয় মাস বেশ সুখে স্বচ্ছন্দে কাটাইতে পারিতাম। কিন্তু কলিকাতায় থাকিতে আমার ইচ্ছা ছিল না এবং<noinclude></noinclude>
aflvb4h2l2ryivd186vw0e3gvo4zx63
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৪৫
104
885215
1996873
2026-08-30T17:32:59Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996873
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৪৫|তৃতীয় পরিচ্ছেদ}}{{rule}}</noinclude>বাড়ীতে যাইতেও সাহস হইল না। সুতরাং রমানাথের সহিত বরিশালে যাওয়াই স্থির করিলাম। তারপর রাত্রি আন্দাজ দশটার সময় সেই মুদির দোকানে ফিরিয়া আসিয়া কিঞ্চিৎ জলযোগ করিয়া দুই জনে শয়ন করিলাম; কিছুক্ষণ পরে, আমার বেশ তন্দ্রা আসিয়াছে, এমন সময়, রমানাথ আমার গা টিপিয়া আস্তে আস্তে জিজ্ঞাসা করিল, “তোমার কাছে কত টাকা আছে? সাবধানে রেখেছ ত?”
{{ফাঁক}}“আমার মানিব্যাগে নোটে ও টাকায় মিলিয়ে প্রায় দেড় শ' আছে।”—এই বলিতে বলিতে পাশ ফিরিয়া শুইয়া আমি ঘুমাইয়া পড়িলাম।
{{ফাঁক}}পরদিন সকালে উঠিয়া দেখি, রমা-<noinclude></noinclude>
bzu0cgghslie24t4pendm8tbfkweuqr
1996874
1996873
2026-08-30T17:34:14Z
BabulB
2144
1996874
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৪৫|তৃতীয় পরিচ্ছেদ}}{{rule}}</noinclude>বাড়ীতে যাইতেও সাহস হইল না। সুতরাং রমানাথের সহিত বরিশালে যাওয়াই স্থির করিলাম। তারপর রাত্রি আন্দাজ দশটার সময় সেই মুদির দোকানে ফিরিয়া আসিয়া কিঞ্চিৎ জলযোগ করিয়া দুই জনে শয়ন করিলাম; কিছুক্ষণ পরে, আমার বেশ তন্দ্রা আসিয়াছে, এমন সময়, রমানাথ আমার গা টিপিয়া আস্তে আস্তে জিজ্ঞাসা করিল, “তোমার কাছে কত টাকা আছে? সাবধানে রেখেছ ত?”
{{ফাঁক}}“আমার মানিব্যাগে নোটে ও টাকায় মিলিয়ে প্রায় দেড় শ' আছে।”—এই বলিতে বলিতে পাশ ফিরিয়া শুইয়া আমি ঘুমাইয়া পড়িলাম।
{{ফাঁক}}পরদিন সকালে উঠিয়া দেখি, {{hws|রমা|রমানাথ}}<noinclude></noinclude>
j2xvmst2qayrlga9vvq3sjfnd0yo29m
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৪৬
104
885216
1996875
2026-08-30T17:36:34Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996875
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৪৬|মোহনলাল}}{{rule}}</noinclude>{{hwe|নাথ|রমানাথ}} নাই ৷ মুদিকে জিজ্ঞাসা করিলাম। সে বলিল, “তিনি. একটু আগে বাইরে গেছেন।” তখন পকেটে হাত দিয়া দেখি, আমার মানিব্যাগটি নাই! আমি মাথায় হাত দিয়া বসিয়া পড়িলাম। কি সর্ব্বনাশ! রমানাথ শেষে এই করিল! এই জন্যই বুঝি কাল রাত্রে টাকার কথা জিজ্ঞাসা করিয়াছিল? ওঃ, কি ভয়ানক !—আমি একেবারে অস্থির হইয়া নানা বিপদের আশঙ্কা করিতে লাগিলাম। ভাবিতে ভাবিতে হঠাৎ সোণার ঘড়ী ও চেইনের কথা মনে পড়িল। সেগুলি আমার বাক্সের মধ্যে ছিল। তাড়াতাড়ি বাক্স খুলিয়া দেখিলাম, ঘড়ী ও চেইন লইতে পারে নাই।
{{ফাঁক}}আমি তখনই আবার বাক্স বন্ধ<noinclude></noinclude>
antk7l14wu2lq87zkhvbxfol9tau4ps
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৪৭
104
885217
1996876
2026-08-30T17:38:56Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996876
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৪৭|তৃতীয় পরিচ্ছেদ}}{{rule}}</noinclude>করিয়া, রমানাথের অন্বেষণে বাহির হইলাম। বেলা প্রায় বারটা পর্য্যন্ত নানা স্থানে খুঁ জিলাম, কোথাও তাহার সন্ধান পাওয়া গেল না। পকেটে কয়েক আনা পয়সা ছিল। একটা হোটেলে কিছু আহার করিয়া, আবার রমানাথের অন্বেষণে বাহির হইলাম। এইরূপে দুই তিন দিন ধরিয়া ক্রমাগত নানা স্থানে খুঁজিলাম, তবুও তাহার সন্ধান করিতে পারিলাম না। ক্রমে পকেটের পয়সা কয়টিও ফুরাইয়া আসিল, আমি তখন মহা বিপদে পড়িয়া গেলাম। বাড়ী যাইতে সাহায্য করা দূরে থাক্, এক বেলা খাইতে দিবে, এমন আত্মীয়ও আমার কেহ ছিল না! শেষে অনাহারে মরিতে হইবে ভাবিয়া, আমি চারিদিক<noinclude></noinclude>
g2f6hoxhqc1kegqbdgpkzv3cejtfoz7
1996877
1996876
2026-08-30T17:39:24Z
BabulB
2144
1996877
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৪৭|তৃতীয় পরিচ্ছেদ}}{{rule}}</noinclude>করিয়া, রমানাথের অন্বেষণে বাহির হইলাম। বেলা প্রায় বারটা পর্য্যন্ত নানা স্থানে খুঁজিলাম, কোথাও তাহার সন্ধান পাওয়া গেল না। পকেটে কয়েক আনা পয়সা ছিল। একটা হোটেলে কিছু আহার করিয়া, আবার রমানাথের অন্বেষণে বাহির হইলাম। এইরূপে দুই তিন দিন ধরিয়া ক্রমাগত নানা স্থানে খুঁজিলাম, তবুও তাহার সন্ধান করিতে পারিলাম না। ক্রমে পকেটের পয়সা কয়টিও ফুরাইয়া আসিল, আমি তখন মহা বিপদে পড়িয়া গেলাম। বাড়ী যাইতে সাহায্য করা দূরে থাক্, এক বেলা খাইতে দিবে, এমন আত্মীয়ও আমার কেহ ছিল না! শেষে অনাহারে মরিতে হইবে ভাবিয়া, আমি চারিদিক<noinclude></noinclude>
3odwz9a9has6816x66gdpz0ceh56g50
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৪৮
104
885218
1996878
2026-08-30T17:46:45Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996878
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৪৮|মোহনলাল}}{{rule}}</noinclude>অন্ধকার দেখিতে লাগিলাম! এই সময়ে একদিন সন্ধ্যাকালে হঠাৎ পঞ্চাননের সহিত আমার দেখা হইল। আমাকে দেখিতে পাইয়া পঞ্চানন জিজ্ঞাসা করিল, “কি হে মোহনলাল, তুমি এখনও বাড়ী যাও নি? হেড্মাষ্টার মশাই তোমার মাকে পত্র লিখেছিলেন। শুন্লাম, তিনি খাওয়া দাওয়া ছেড়ে শুধু প'ড়ে প'ড়ে কাঁদছেন।”
{{ফাঁক}}কয়েক দিন পূর্ব্বে যে পঞ্চাননের উপর নানা অত্যাচার করিয়াছি, তাহার এরূপ ভদ্র ব্যবহারে, লজ্জা ও অনুতাপে আমার মস্তক নত হইয়া পড়িল! আমি মনে মনে আপনাকে ধিক্কার দিতে লাগিলাম! আমাকে চুপ করিয়া থাকিতে দেখিয়া, পঞ্চানন বলিল, “মোহনলাল,<noinclude></noinclude>
le21nwmxvmokw2jwyvga68wfr1zlss8
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৪৯
104
885219
1996879
2026-08-30T17:49:07Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996879
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৪৯|তৃতীয় পরিচ্ছেদ}}{{rule}}</noinclude>তোমার মুখ দেখে বেশ বুঝ্তে পার্ছি যে, লজ্জায় তুমি কথা ব’ল্তে পারছ না; কিন্তু সত্যি ব’ল্ছি, তোমার উপর আমার এক বিন্দুও রাগ নেই। দুষ্টু লোকের কুপরামর্শে চ’ল্লে মানুষ অনেক সময় পশুর চেয়েও হীন হ'য়ে পড়ে। যা হ’ক, সেদিনকার কথা তুমি ভুলে যাও।” পঞ্চাননের মিষ্ট কথায় আমি আরও লজ্জিত হইলাম এবং চক্ষের জল মুছিতে মুছিতে বলিলাম, “ভাই, যা হবার হ'য়ে গেছে, তুমি আমাকে ক্ষমা কর।” এই বলিয়া বোর্ডিং ছাড়িবার পর হইতে যাহা যাহা ঘটিয়াছিল, একে একে সকল কথা তাহাকে বলিলাম। রমানাথ আমার দেড়শত টাকা ফাঁকি দিয়াছে শুনিয়া, রাগে পঞ্চাননের চক্ষু লাল হইয়া<noinclude></noinclude>
7yvoxn88te1tq92b6rv6nwrjja8zfqq
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৫৮
104
885220
1996880
2026-08-30T17:54:33Z
BabulB
2144
/* মুদ্রণ সংশোধন করা হয়নি */ "ছিল; সেই ঘৃণা হইতেই যে এই স্বপ্নের উৎপত্তি, ইহাতে আর কোন সন্দেহ নাই ৷ আমি জিনিষপত্র লইয়া ষ্টেশনে নামিয়া পড়িলাম এবং সেই অদ্ভুত স্বপ্নের বিষয় ভাবিতে ভাবিতে, একখানি গাড়ী..." দিয়ে পাতা তৈরি
1996880
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="BabulB" />{{rvh|৫৮|মোহনলাল}}{{rule}}</noinclude>ছিল; সেই ঘৃণা হইতেই যে এই স্বপ্নের
উৎপত্তি, ইহাতে আর কোন সন্দেহ
নাই ৷ আমি জিনিষপত্র লইয়া ষ্টেশনে
নামিয়া পড়িলাম এবং সেই অদ্ভুত স্বপ্নের
বিষয় ভাবিতে ভাবিতে, একখানি গাড়ী
করিয়া, বাড়ী রওনা হইলাম।
{{dhr}}
{{rule|4em}}<noinclude></noinclude>
l1qknh98vvj8hxhtq5jxiqsst31xzqy
1996881
1996880
2026-08-30T17:56:05Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996881
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৫৮|মোহনলাল}}{{rule}}</noinclude>ছিল; সেই ঘৃণা হইতেই যে এই স্বপ্নের উৎপত্তি, ইহাতে আর কোন সন্দেহ নাই ৷ আমি জিনিষপত্র লইয়া ষ্টেশনে নামিয়া পড়িলাম এবং সেই অদ্ভুত স্বপ্নের বিষয় ভাবিতে ভাবিতে, একখানি গাড়ী করিয়া, বাড়ী রওনা হইলাম।
{{dhr}}
{{rule|4em}}<noinclude></noinclude>
oea0375zeizwpceeinw9fx00tpz92eu
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৫০
104
885221
1996882
2026-08-30T17:59:40Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996882
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৫০|মোহনলাল}}{{rule}}</noinclude>উঠিল। সে বলিল, “রমানাথের প্রকৃতি যে অতি নীচ, তা আমি আগেই জান্তাম; কিন্তু সে যে এত বড় পাকা চোর, তা আমার জানা ছিল না। যা হ’ক, এখন আর দুঃখ করা মিছে। আমি তোমাকে পাঁচটি টাকা দিচ্ছি, তুমি আজই বাড়ী চলে যাও।” আমি আর দ্বিরুক্তি না করিয়া পঞ্চাননের নিকট হইতে পাঁচ টাকা লইলাম এবং সেই রাত্রেই বাড়ী যাইবার জন্য ট্রেণে উঠিলাম ৷ ট্রেণে উঠিয়া পঞ্চাননের মহত্ত্বের কথা ভাবিতে ভাবিতে আমি আশ্চৰ্য্য হইয়া গেলাম! মানুষ এমন করিয়াও ক্ষমা করিতে পারে! যাহার কুমন্ত্রণায় আমি পঞ্চাননকে প্রহার পর্য্যন্ত করিয়াছি, আজ সেই ধূর্ত রমানাথ কোথায়! প্রবঞ্চক সুবিধা পাইয়া<noinclude></noinclude>
boxic6575psvhy7zp2snqhfyepz7nug
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৫১
104
885222
1996883
2026-08-30T18:04:05Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996883
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৫১|তৃতীয় পরিচ্ছেদ}}{{rule}}</noinclude>আমার সর্বনাশ করিয়াছে! আর পঞ্চানন আমার সকল অপরাধ ক্ষমা করিয়া অযাচিতভাবে আমাকে সাহায্য করিল! এই অসময়ে তাহার সাহায্য না পাইলে, আমার কি দুর্দশাই না হইত! এইরূপ নানা কথা ভাবিতে ভাবিতে আমি ঘুমাইয়া পড়িলাম। ঘুমাইবার পূর্ব্বে ঘড়ী ও চেইন সাবধানে বাক্সের ভিতরে তুলিয়া রাখিতে ভুলি নাই। তারপর, কতক্ষণ ঘুমাইয়া ছিলাম জানি না, হঠাৎ বোধ হইল, যেন গুঁড়ি গুঁড়ি বৃষ্টির ফোঁটা আমার মুখে আসিয়া পড়িতেছে। উঠিয়া দরজা জানালাগুলি বন্ধ করিয়া দিবার ইচ্ছা হইল, কিন্তু উঠি উঠি করিয়া আবার ঘুমাইয়া পড়িলাম। কিছু ক্ষণ পরে বড় বড় কয়েকটা ফোঁটা মুখে আসিয়া<noinclude></noinclude>
nqi9vg361aqt5uxrx4v3r4v2lef8odh
পাতা:মোহনলাল - যোগীন্দ্রনাথ সরকার (১৯২৩).pdf/৫২
104
885223
1996884
2026-08-30T18:07:03Z
BabulB
2144
/* মুদ্ৰণ সংশোধন কৰা হৈছে */
1996884
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="BabulB" />{{rvh|৫২|মোহনলাল}}{{rule}}</noinclude>পড়াতে, আবার আমার ঘুম ভাঙ্গিয়া গেল। তখন আমার সহযাত্রিগণের মধ্যে প্রায় সকলেই নামিয়া গিয়াছিল। সমস্ত গাড়ীখানাতে আর দুইজন মাত্র যাত্রী ছিল। ক্ষীণ আলোকে তাহাদিগকে ভাল করিয়া দেখিবার সুবিধা হইল না বটে, কিন্তু আমার ভয় হইতে লাগিল, কি জানি, যদি তাহাদের মনে কোন কুঅভিসন্ধি থাকে! যদি আমার ঘড়ী, চেইনের সন্ধান পাইয়াই তাহারা আসিয়া থাকে! তাহা হইলে কি উপায়ে সেই গুলি রক্ষা করিব, এবং কি উপায়েই বা প্ৰাণ বাঁচাইব! আমি এইরূপ ভাবিতেছি, এমন সময় তাহাদের একজন বলিয়া উঠিল, “আর দেরী কেন? তুমি ক্লোরোফর্মের শিশি বের কর।”<noinclude></noinclude>
618x5t0tflzogp0rs1s4ohsw1qou7or
পাতা:পূর্ব পাকিস্তানে শিক্ষা.pdf/২
104
885224
1996885
2026-08-30T19:01:34Z
ROCKY
2687
/* মুদ্রণ সংশোধন করা হয়নি */
1996885
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="ROCKY" /></noinclude>{{Img float
| file = পূর্ব পাকিস্তানে শিক্ষা (page 2 crop).jpg
| width = 500px
| align = center
| cap = ঢাকা বিশ্ববিদ্যালয়ের লাইব্রেরী ভবন।}}
{{dhr|5em}}
{| {{ts|mc|ac|wa}}
|-
| {{ts|w30|vmi}} | ঢাকা বিশ্ববিদ্যালয়ের<br/>লাইব্রেরীর একটি<br/>অভ্যন্তরীণ দৃশ্য। || {{ts|w70}} | [[File:পূর্ব পাকিস্তানে শিক্ষা (page 2 crop)-a.jpg|350px]]
|}<noinclude></noinclude>
8g6i9rf3rwrg9adnphjz03zgu1s3csu
1996886
1996885
2026-08-31T02:48:31Z
ROCKY
2687
/* মুদ্রণ সংশোধন করা হয়েছে */
1996886
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="ROCKY" /></noinclude>{{Img float
| file = পূর্ব পাকিস্তানে শিক্ষা (page 2 crop).jpg
| width = 500px
| align = center
| cap = ঢাকা বিশ্ববিদ্যালয়ের লাইব্রেরী ভবন।}}
{{dhr|5em}}
{| {{ts|mc|ac|wa}}
|-
| {{ts|w70|vmi}} | [[File:পূর্ব পাকিস্তানে শিক্ষা (page 2 crop)-a.jpg|350px]] || {{ts|w30}} | ঢাকা বিশ্ববিদ্যালয়ের<br/>লাইব্রেরীর একটি<br/>অভ্যন্তরীণ দৃশ্য।
|}<noinclude></noinclude>
equhvauzm6lhc6bwgnihg0xge84i68z
শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/প্রথম পরিচ্ছেদ
0
885225
1996890
2026-08-31T03:21:17Z
Bodhisattwa
2549
"<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=337 to=338 tosection=A header=1/>" দিয়ে পাতা তৈরি
1996890
wikitext
text/x-wiki
<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=337 to=338 tosection=A header=1/>
7ku4rtpcv4mdmw0c4c6yolxmg9ul47m
শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/দ্বিতীয় পরিচ্ছেদ
0
885226
1996891
2026-08-31T03:21:46Z
Bodhisattwa
2549
"<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=338 to=341 fromsection=B tosection=A header=1/>" দিয়ে পাতা তৈরি
1996891
wikitext
text/x-wiki
<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=338 to=341 fromsection=B tosection=A header=1/>
aq20qqyftsti7uzhydgtb4oqgiee57e
শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/তৃতীয় পরিচ্ছেদ
0
885227
1996892
2026-08-31T03:22:10Z
Bodhisattwa
2549
"<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=341 to=343 fromsection=B tosection=A header=1/>" দিয়ে পাতা তৈরি
1996892
wikitext
text/x-wiki
<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=341 to=343 fromsection=B tosection=A header=1/>
8fxjwfh9oi16pzbbvy07ng8gxrov2q7
শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/চতুর্থ পরিচ্ছেদ
0
885228
1996893
2026-08-31T03:22:36Z
Bodhisattwa
2549
"<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=343 to=345 fromsection=B tosection=A header=1/>" দিয়ে পাতা তৈরি
1996893
wikitext
text/x-wiki
<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=343 to=345 fromsection=B tosection=A header=1/>
p0kqx39d2se4h9pmzgkoqzu7u9b4crl
শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/পঞ্চম পরিচ্ছেদ
0
885229
1996894
2026-08-31T03:22:53Z
Bodhisattwa
2549
"<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=345 to=347 fromsection=B tosection=A header=1/>" দিয়ে পাতা তৈরি
1996894
wikitext
text/x-wiki
<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=345 to=347 fromsection=B tosection=A header=1/>
msxddgylxit4mjcani0725vy97kxuo3
শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/ষষ্ঠ পরিচ্ছেদ
0
885230
1996895
2026-08-31T03:23:42Z
Bodhisattwa
2549
"<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=347 to=349 fromsection=B header=1/>" দিয়ে পাতা তৈরি
1996895
wikitext
text/x-wiki
<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=347 to=349 fromsection=B header=1/>
63fp1gml114m3yb3pjrxm7n1cogk9kv
শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/সপ্তম পরিচ্ছেদ
0
885231
1996896
2026-08-31T03:24:43Z
Bodhisattwa
2549
"<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=350 to=351 header=1/>" দিয়ে পাতা তৈরি
1996896
wikitext
text/x-wiki
<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=350 to=351 header=1/>
m524fr07krrzxb0pcnvt4iewe1dzvcc
শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/অষ্টম পরিচ্ছেদ
0
885232
1996897
2026-08-31T03:25:39Z
Bodhisattwa
2549
"<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=352 to=355 tosection=A header=1/>" দিয়ে পাতা তৈরি
1996897
wikitext
text/x-wiki
<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=352 to=355 tosection=A header=1/>
93xvu12czk2vmja11qwj1xc3me9galj
শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/নবম পরিচ্ছেদ
0
885233
1996898
2026-08-31T03:26:16Z
Bodhisattwa
2549
"<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=355 to=356 fromsection=B header=1/>" দিয়ে পাতা তৈরি
1996898
wikitext
text/x-wiki
<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=355 to=356 fromsection=B header=1/>
6vzeysly17pdwjdo5y4yo662ompbysl
শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা
0
885234
1996899
2026-08-31T03:27:38Z
Bodhisattwa
2549
"<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=335 to=336 header=1/> {{AuxTOC| {{c|{{xx-larger|'''সূচীপত্র'''}}}} {{Table| title=পরিচ্ছেদ| page=পৃষ্ঠা}} {{Table| title=শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)..." দিয়ে পাতা তৈরি
1996899
wikitext
text/x-wiki
<pages index="শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার) - শরৎচন্দ্র চট্টোপাধ্যায় (১৯৫৪).pdf" from=335 to=336 header=1/>
{{AuxTOC|
{{c|{{xx-larger|'''সূচীপত্র'''}}}}
{{Table| title=পরিচ্ছেদ| page=পৃষ্ঠা}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/প্রথম পরিচ্ছেদ|প্রথম পরিচ্ছেদ]]| page={{pli|323|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/দ্বিতীয় পরিচ্ছেদ|দ্বিতীয় পরিচ্ছেদ]]| page={{pli|324|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/তৃতীয় পরিচ্ছেদ|তৃতীয় পরিচ্ছেদ]]| page={{pli|327|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/চতুর্থ পরিচ্ছেদ|চতুর্থ পরিচ্ছেদ]]| page={{pli|329|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/পঞ্চম পরিচ্ছেদ|পঞ্চম পরিচ্ছেদ]]| page={{pli|331|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/ষষ্ঠ পরিচ্ছেদ|ষষ্ঠ পরিচ্ছেদ]]| page={{pli|333|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/সপ্তম পরিচ্ছেদ|সপ্তম পরিচ্ছেদ]]| page={{pli|336|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/অষ্টম পরিচ্ছেদ|অষ্টম পরিচ্ছেদ]]| page={{pli|338|14}}}}
{{Table| title=[[শরৎ-সাহিত্য-সংগ্রহ (পঞ্চম সম্ভার)/বোঝা/নবম পরিচ্ছেদ|নবম পরিচ্ছেদ]]| page={{pli|341|14}}}}
}}
5bybwz6lintwwic6vpkc1i96ndpyund
নির্ঘণ্ট:প্রথম ভাগ পাঁঁচালি - দাশরথি রায় (১৮৫৫).pdf
102
885235
1996902
2026-08-31T04:20:20Z
Bodhisattwa
2549
"" দিয়ে পাতা তৈরি
1996902
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q141229506
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=1
|Progress=X
|Pages=<pagelist />
|Volumes=
|Remarks=
|Notes={{BL-TCIP}}
|Header=
|Footer=
}}
5z45m0q57nzdx57pup7cd8fg9e3xz1f
লেখক:গোপালচন্দ্র বসাক
100
885237
1996908
2026-08-31T07:26:07Z
Bodhisattwa
2549
"{{লেখক}} {{Talikak list|special=author|target={{#invoke:Wikibase|id}}|row_template=লেখক সংস্করণ সারি}} {{Talikak list end}} {{PD-India}}" দিয়ে পাতা তৈরি
1996908
wikitext
text/x-wiki
{{লেখক}}
{{Talikak list|special=author|target={{#invoke:Wikibase|id}}|row_template=লেখক সংস্করণ সারি}}
{{Talikak list end}}
{{PD-India}}
kzijlajw0x8y0roj6h1yqedm4fjroyi
1996911
1996908
2026-08-31T07:48:30Z
Bodhisattwa
2549
1996911
wikitext
text/x-wiki
{{লেখক}}
{{Talikak list|special=author|target={{#invoke:Wikibase|id}}|row_template=লেখক সংস্করণ সারি}}
=== অন্যান্য ===
{{লেখক রচনা সারি|work = ''[[d:Q141235755|কৌতুক দর্পণ]]''|item = Q141235755}}
{{লেখক সংস্করণ সারি|item = Q141235360|label = ''[[d:Q141235360|কৌতুক দর্পণ]]''|p1957 = https://bn.wikisource.org/wiki/নির্ঘণ্ট:কৌতুক_দর্পণ_-_গোপালচন্দ্র_বসাক_(১৮৭৪).pdf|p577 = 1874}}{{Talikak list end}}
{{PD-India}}
e134sbv7nwr9b01vqdo59vydkfpjrq7
নির্ঘণ্ট:কৌতুক দর্পণ - গোপালচন্দ্র বসাক (১৮৭৪).pdf
102
885238
1996909
2026-08-31T07:29:12Z
Bodhisattwa
2549
"" দিয়ে পাতা তৈরি
1996909
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q141235360
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=1
|Progress=X
|Pages=<pagelist />
|Volumes=
|Remarks=
|Notes={{BL-TCIP}}
|Header=
|Footer=
}}
nn1jendybozuhqao6axx57ek5sfu7n9
নির্ঘণ্ট:বিসূচিকার নিগূঢ় তত্ত্ব - লালমাধব মুখোপাধ্যায় (১৮৭১).pdf
102
885239
1996910
2026-08-31T07:48:26Z
Bodhisattwa
2549
"" দিয়ে পাতা তৈরি
1996910
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q141235746
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=1
|Progress=X
|Pages=<pagelist />
|Volumes=
|Remarks=
|Notes={{BL-TCIP}}
|Header=
|Footer=
}}
qvdx4wpul74l11glildne5s5uvm0rfk
নির্ঘণ্ট:জ্যোতির্বীজ - শ্যামাচরণ চট্টোপাধ্যায় (১৮৬৫).pdf
102
885240
1996912
2026-08-31T08:01:56Z
Bodhisattwa
2549
"" দিয়ে পাতা তৈরি
1996912
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q141235835
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=1
|Progress=X
|Pages=<pagelist />
|Volumes=
|Remarks=
|Notes={{BL-TCIP}}
|Header=
|Footer=
}}
rx2ox9vy2xt4wyeutfivur1x7x0flef
নির্ঘণ্ট:বঙ্গদর্শন (ষষ্ঠ খণ্ড) - সঞ্জীবচন্দ্র চট্টোপাধ্যায় (১৯৩৯).pdf
102
885241
1996914
2026-08-31T08:28:51Z
Bodhisattwa
2549
"" দিয়ে পাতা তৈরি
1996914
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q141236703
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=6
|Progress=X
|Pages=<pagelist />
|Volumes=
|Remarks=
|Notes={{RPL}}
|Header=
|Footer=
}}
8psezq8ioj6avxqy2cs5mt3fwmwb84m
1996915
1996914
2026-08-31T08:30:07Z
Bodhisattwa
2549
1996915
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q141236703
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=8
|Progress=X
|Pages=<pagelist />
|Volumes=
|Remarks=
|Notes={{RPL}}
|Header=
|Footer=
}}
4wrf7t0r8vmxf38terxjak0k5lpax35
নির্ঘণ্ট:পথ ও পাথেয় - শেখ ফজলল করিম (১৯৫৫).pdf
102
885242
1996916
2026-08-31T08:37:31Z
Bodhisattwa
2549
"" দিয়ে পাতা তৈরি
1996916
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q141236785
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=1
|Progress=X
|Pages=<pagelist />
|Volumes=
|Remarks=
|Notes={{RPL}}
|Header=
|Footer=
}}
jd64yrntrzb5nv4wo32lc5bemf2vwok
নির্ঘণ্ট:প্রাকৃতিকী - জগদানন্দ রায় (১৯২৩).pdf
102
885243
1996917
2026-08-31T08:41:36Z
Bodhisattwa
2549
"" দিয়ে পাতা তৈরি
1996917
proofread-index
text/x-wiki
{{:MediaWiki:Proofreadpage_index_template
|wikidata_item=Q141236797
|Title=
|Subtitle=
|Volume=
|Issue=
|Edition=
|Author=
|Foreword_Author=
|Translator=
|Editor=
|Illustrator=
|Publisher=
|Address=
|Printer=
|Year=
|Source=pdf
|Image=1
|Progress=X
|Pages=<pagelist />
|Volumes=
|Remarks=
|Notes={{RPL}}
|Header=
|Footer=
}}
c4ri0b7m99735idv1ckp1lcgjrect6k