ইউনিকোডের Zero Width Joiner (ZWJ) ও Zero Width Non-Joiner (ZWNJ), যাদের সম্পর্কে আমরা অনেকেই জানি না। অথচ ক্যারেক্টারগুলোর অনেক উপযোগিতা রয়েছে প্রতিদিনের ব্যবহারে। ফেসবুকে ইমোজি কোডগুলো ইমোজিতে রূপান্তর না করে লেখা, টেলিগ্রামে সাধারণ আকারের নন-এনিমেটেড ইমোজি পাঠানো, বাংলায় র্য লেখা কিংবা যুক্তবর্ণে পরিণত না করে মাঝখানে ্ যুক্ত করাসহ অনেক প্রয়োজন পূর্ণ করতে পারে এই ক্যারেক্টারদুটো।
Zero Width থেকে বোঝা যাচ্ছে, ক্যারেক্টারগুলোর প্রস্থ শূন্য, অর্থাৎ, এটা বাড়তি কোন স্পেস নেয় না। বাংলাসহ ইন্দো-আর্য ভাষাগুলোসহ আরো কিছু ভাষাতে এদের ব্যবহার লক্ষ্যণীয়। যদি সাধারণভাবে ষ+্+ম লেখা হয়, তবে তা ষ্ম হিসেবে দেখায়। অন্যদিকে ষ+্+ZWJ+ম আর ষ+্+ZWNJ+ম একইরকম দেখায়- ষ্ম, ষ্ম। কয়েকটি আলাদা ফন্টে এটি নিচে দেখানো হলো-
বাংলায় র্ দিয়ে রেফ লেখা হয়, আবার ্য দিয়ে ্য লেখা হয়। তাই র্য লিখতে চাইলে তা র্য হয়ে যায়। কিছু সফটওয়্যারে এজন্য বিকল্প পদ্ধতি আছে- যেমন রিদ্মিক কীবোর্ড র্য একটি বাটন রয়েছে, অভ্র কীবোর্ড শুরুতে র্+য লিখলে তা র্য অটোমেটিকলি নিয়ে নেয়, ফোনেটিকের ক্ষেত্রে সাজেশন ব্যবহার করা যায়। তবে যেখানে এরকম কিছু নেই, বা সবক্ষেত্রে প্রযোজ্য স্ট্যান্ডার্ড একটি উপায় হলো র+ZWJ+্+য এভাবে লেখা। অথবা ZWNJ-ও ব্যবহার করা যেতে পারে, দৃশ্যত পার্থক্য নেই। একইভাবে হু, শু, হৃ, ভ্র এর পরিবর্তে হু, শু, হৃ, ভ্র লিখতে পারেন বর্ণের পর, কারের আগে ZWJ বা ZWNJ ব্যবহার করে।
এর আরেকটা ইউজফুল ব্যবহার আছে- একটা অতিরিক্ত অদৃশ্য ক্যারেক্টার হিসেবে ব্যবহার করা। এখানে ZWSP বা ZWNBSP ক্যারেক্টার ইউজ করা যায়, তবে ওটার আলোচনায় আমরা যাবো না, কেননা বাংলা কীবোর্ড লেআউটগুলোতে ZWJ বা ZWNJ সহজলভ্য এবং দিনশেষে, ইফ ইট ওয়ার্কস, ইট ওয়ার্কস।
যদি ফেসবুকে, এমনকি নিয়নবাতিতে আমি :P বা :o লিখে পোস্ট করি, তা স্বয়ংক্রিয়ভাবে ? বা ? -তে রূপান্তর হয়ে যাবে। কিন্তু আমি সিমপ্লি ‘:’ আর ‘P’ এর মাঝে একটি ZWJ অথবা ZWNJ যুক্ত করে দিতে পারি। তাহলে :P এভাবেই দেখাবে।
একইভাবে টেলিগ্রামে একটি ইমোজি মেসেজ পাঠালে বেশিরভাগ ইমোজির ক্ষেত্রে তা এনিমেটেড ইমোজিতে পরিণত করে নেয়। সেটিংস থেকে নিজের জন্য Large Emoji বন্ধ করার সুযোগ আছে, কিন্তু অপরপ্রান্তে সেটিংসটি এনাবল না থাকলে সেখানে তা এনিমেটেড-ই দেখা যাবে। অনেক সময় লার্জ এনিমেটেড ইমোজির পরিবর্তে সাধারণ ইমোজি পাঠাতে চাইতে পারেন। সমাধান সহজ, ইমোজিটির সাথে একটি ZWJ অথবা ZWNJ যুক্ত করে দেয়া।
ZWJ ও ZWNJ লেখার পদ্ধতি
এখন ZWJ আর ZWNJ-এর ব্যবহার তো জানলাম, কিন্তু এটা লিখবো কীভাবে? ইউনিকোডে ‘U+200C’ Zero Width Non-Joiner ও ‘U+200D’ হলো Zero Width Joiner। সিস্টেম, সফটওয়্যার ও লেআউটভেদে এটা লেখার পদ্ধতি ভিন্ন, ইংরেজিসহ সব ভাষায় মূলত ব্যবহার না থাকায় অনেক ক্ষেত্রে সরাসরি সম্ভবও নয়। সার্বজনীন পদ্ধতি হিসেবে এই লিঙ্কগুলো থেকে ক্যারেক্টারটি কপি করে পেস্ট করতে পারেন: Zero Width Non-Joiner (U+200C), Zero Width Joiner (U+200C)
সিস্টেমভিত্তিক কিছু সফটওয়্যার ও লেআউটে ZWJ ও ZWNJ লেখার পদ্ধতি যুক্ত করে দেয়া হলো:
অ্যান্ড্রয়েড
Gboard
Gboard-এ ডিফল্ট বাংলা লেআউটটিতে
অভ্র কীবোর্ড
প্রথমে ?123, এরপর =\< চাপলে
বর্ণ কীবোর্ড
?123 বা ?১২৩ চাপলে ZWNJ (
লিনাক্স
ইউনিকোড ক্যারেক্টার
লিনাক্সে ইংরেজি লেআউটে ctrl ও shift উভয়টি চেপে রেখে u200C (ZWNJ এর জন্য) অথবা u200D (ZWJ এর জন্য) লিখে ctrl ও shift ছেড়ে দিতে হবে। যেকোন ইউনিকোড ক্যারেক্টার কোড জানা থাকলে তা একইভাবে লেখা যায়।
বাংলা লেআউট
লিনাক্সে সাধারণত প্রি-ইনক্লুডেড ‘বাংলা’ লেআউটটিতে – ও = বাটনের তৃতীয় লেভেল কী হিসেবে ZWNJ ও ZWJ রয়েছে। তার আগের প্রশ্ন হলো, তৃতীয় লেভেল কী বলতে কী বোঝাচ্ছে? কীবোর্ডে সাধারণভাবে যা লেখা হয়, তা প্রথম লেভেল, এরপর ‘শিফট’ মডিফায়ার কী চেপে লিখলে দ্বিতীয় লেভেল। এমনই তুলনামূলক কম ব্যবহৃত কী নিয়ে তৃতীয় ও চতুর্থ লেভেল আছে। তৃতীয় লেভেল মডিফায়ার কী হিসেবে সাধারণত AltGr বা Right Alt ব্যবহার হয় (বা যেটি সেট করা থাকবে)। এর সাথে শিফট ব্যবহার করলে সেটি চতুর্থ লেভেল।
অর্থাৎ, তৃতীয় লেভেল মডিফায়ার কী হিসেবে Right Alt সেট করা থাকলে Right Alt চেপে রেখে – চাপলে ZWNJ ও = চাপলে ZWJ লেখা হবে।
প্রভাত লেআউট
প্রভাত লেআউটে Tab-এর ওপরের এবং 1-এর বামপাশের ` কী-টি ZWJ হিসেবে অ্যাসাইন করা রয়েছে। এখানে শুধু বাটনটি চাপতে হবে, সাথে AltGr বা কোন মডিফায়ার কী নয়।
ওপেনবাংলা কীবোর্ড
এখানে সকল ফিক্সড লেআউটে Tab-এর ওপরের `-এর জায়গায় ZWNJ, ও একই কী শিফটসহ প্রেস করলে তথা ~ এর জায়গায় ZWJ অ্যাসাইন করা আছে।
উইন্ডোজ
ইউনিকোড ক্যারেক্টার
উইন্ডোজে Character Map অ্যাপ থেকে স্ক্রল করলে সব ইউনিকোড ক্যারেক্টারগুলো পাওয়া যাবে। কোন ক্যারেক্টারে ক্লিক করলে নিচে ক্যারেক্টারটির ইউনিকোড ভ্যালু ও নাম দেখাবে। এখানে সার্চ অপশন নেই, কাজেই স্ক্রল করে ক্যারেক্টারটি বের করতে হবে। কাঙ্ক্ষিত ক্যারেক্টারটি ক্লিক করে তারপর সিলেক্ট করে কপি করে প্রয়োজনীয় স্থানে পেস্ট করতে হবে। খুব সুবিধাজনক নয় অবশ্যই…
এছাড়া UnicodeInput Utility-ও ব্যবহার করতে পারেন। এটা সম্ভবত Windows XP বা আরো পুরনো কোন উইন্ডোজ ভার্সনের জন্য বানানো হয়েছিলো, তবে Windows 11-এও কাজ করছে অন্তত। প্রসঙ্গত আবারো, U+200C কোডটি ZWNJ ও U+200D কোডটি ZWJ-এর জন্য।
অভ্র কীবোর্ড
সকল ফিক্সড লেআউটে Tab-এর ওপরের `-এর জায়গায় ZWNJ, ও একই কী শিফটসহ প্রেস করলে তথা ~ এর জায়গায় ZWJ অ্যাসাইন করা আছে।
একুশের স্বাধীনতা প্রভাত/জাতীয়/ইউনিজয় লেআউট
ইউনিজয় লেআউট/জাতীয় লেআউট: ZWNJ-এর জন্য `, এবং ZWJ এর জন্য Shift+` (অর্থাৎ ~)
প্রভাত লেআউট: ZWJ-এর জন্য `
একটি নিয়নবাতি পরিবেশনা
আরো দেখুন: টেলিগ্রামের ১২টি টিপস, যার কিছু হয়ত অজানা-ই ছিলো!