diff --git a/.travis.yml b/.travis.yml index dd3fa326..f026408e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,13 +7,13 @@ compiler: - g++ - clang before_install: - - sudo add-apt-repository --yes ppa:beineri/opt-qt551-trusty + - sudo add-apt-repository --yes ppa:beineri/opt-qt-5.10.1-trusty - sudo apt-get update -qq - - sudo apt-get install libibus-1.0-dev qt55base qt55declarative - - source /opt/qt55/bin/qt55-env.sh + - sudo apt-get install libibus-1.0-dev qt510base qt510declarative + - source /opt/qt510/bin/qt510-env.sh before_script: - mkdir build - cd build - - cmake .. -DCMAKE_INSTALL_PREFIX='/usr' + - cmake .. script: - make diff --git a/.vscode/settings.json b/.vscode/settings.json index 5daa1ec1..d4886b2a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,6 +5,11 @@ "string_view": "cpp", "array": "cpp", "initializer_list": "cpp", - "chrono": "cpp" + "chrono": "cpp", + "qmessagebox": "cpp", + "qtreewidget": "cpp", + "atomic": "cpp", + "qvariant": "cpp", + "qmap": "cpp" } } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 987c83de..aa6c14c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Change Log ## 1.3.0 - In development +* OpenBangla Keyboard now features a Phonetic AutoCorrect Preference Dialog [#20](https://github.com/OpenBangla/OpenBangla-Keyboard/pull/20). User now can view/edit/add AutoCorrect entries. * Let users turn off candidate box [#11](https://github.com/OpenBangla/OpenBangla-Keyboard/issues/11) * Build system improvement. There is no need to pass `CMAKE_INSTALL_PREFIX` when building. * Now supports RPM packaging. diff --git a/data/autocorrect.json b/data/autocorrect.json index fd440622..30d1d510 100644 --- a/data/autocorrect.json +++ b/data/autocorrect.json @@ -1,2113 +1,2112 @@ -{ - "autocorrect": { - "#-o": "#-o", - "#:-S": "#:-S", - "$-)": "$-)", - "&": "ও", - "(:|": "(:|", - "*)": "*)", - "*-:)": "*-:)", - "0-0": "0-0", - "0:3": "0:3", - "0_o": "0_o", - "0w0": "0w0", - "10th": "১০ম", - "1st": "১ম", - "2nd": "২য়", - "3:-O": "3:-O", - "3rd": "৩য়", - "4th": "৪র্থ", - "5th": "৫ম", - "6th": "৬ষ্ঠ", - "7th": "৭ম", - "8)": "8)", - "8-)": "8-)", - "8->": "8->", - "8-X": "8-X", - "8-|": "8-|", - "8-}": "8-}", - "8D": "8D", - "8O": "8O", - "8th": "৮ম", - "9th": "৯ম", - ":!!": ":!!", - ":\">": ":\">", - ":#": ":#", - ":&": ":&", - ":'(": ":'(", - ":(": ":(", - ":((": ":((", - ":(:)": ":(:)", - ":(|)": ":(|)", - ":)": ":)", - ":))": ":))", - ":)>-": ":)>-", - ":)]": ":)]", - ":)~": ":)~", - ":*": ":*", - ":-\"": ":-\"", - ":-#": ":-#", - ":-$": ":-$", - ":-&": ":-&", - ":-(": ":-(", - ":-)": ":-)", - ":-)>....": ":-)>...।", - ":-*": ":-*", - ":-/": ":-/", - ":-9": ":-9", - ":-<": ":-<", - ":-?": ":-?", - ":-??": ":-??", - ":-@": ":-@", - ":-B": ":-B", - ":-D": ":-D", - ":-L": ":-L", - ":-O": ":-O", - ":-P": ":-P", - ":-S": ":-S", - ":-SS": ":-SS", - ":-X": ":-X", - ":-b": ":-B", - ":-bd": ":-bd", - ":-c": ":-c", - ":-h": ":-h", - ":-j": ":-j", - ":-p": ":-p", - ":-q": ":-q", - ":-t": ":-t", - ":-w": ":-w", - ":/": ":/", - ":3": ":3", - ":<": ":<", - ":>": ":>", - ":@)": ":@)", - ":D": ":D", - ":O": ":O", - ":O)": ":O)", - ":P": ":P", - ":S": ":S", - ":X": ":X", - ":[": ":[", - ":\\": ":\\", - ":]": ":]", - ":^)": ":^)", - ":^o": ":^o", - ":ar!": ":ar!", - ":b": ":b", - ":bz": ":bz", - ":c": ":c", - ":c)": ":c)", - ":o)": ":o)", - ":o3": ":o3", - ":p": ":p", - ":u": ":u", - ":x": ":x", - ":{": ":{", - ":|": ":|", - ":}": ":}", - ":í(": ":í(", - ";(": ";(", - ";)": ";)", - ";))": ";))", - ";*(": ";*(", - ";-)": ";-)", - ";D": ";D", - ";]": ";]", - ";^)": ";^)", - ";o_o;": ";o_o;", - "<):)": "<):)", - "": "=D>", - "=P": "=P", - "=P~": "=P~", - "=p": "=p", - ">.<": ">.<", - ">:(": ">:(", - ">:)": ">:)", - ">:-(": ">:-(", - ">:-)": ">:-)", - ">:/": ">:/", - ">:D<": ">:D<", - ">:P": ">:P", - ">;)": ">;)", - "@}-;-'---": "@}-;-'---", - "B(": "B(", - "B)": "B)", - "B-)": "B-)", - "C:": "C:", - "D-:<": "D-:<", - "D8": "D8", - "D:": "D:", - "D:<": "D:<", - "D;": "D;", - "D<": "D<", - "D=": "D=", - "DR.": "DR.", - "DX": "DX", - "Dogmog": "ডগমগ", - "Dr.": "Dr.", - "I-)": "I-)", - "L-)": "L-)", - "O-O": "O-O", - "O3O": "O3O", - "O:)": "O:)", - "O:-)": "O:-)", - "OK": "ওকে", - "OS": "ওএস", - "O_O": "O_O", - "O_o": "O_o", - "Ojondar": "ওজনদার", - "Ok": "ওকে", - "Okalotnama": "ওকালতনামা", - "Okalotnamate": "ওকালতনামাতে", - "Okalotnamay": "ওকালতনামায়", - "OlTanO": "ওলটানো", - "Olkopi": "ওলকপি", - "Omicronlab": "ওমিক্রনল্যাব", - "Omra": "ওমরা", - "Omrah": "ওমরাহ্‌", - "OwO": "OwO", - "RSS": "আর.এস.এস", - "SOnni": "শোননি", - "ShOloana": "ষোলআনা", - "Sobdaho": "শবদাহ", - "Sobdahok": "শবদাহক", - "Sobdahon": "শবদাহন", - "Sobdeho": "শবদেহ", - "T.T": "T.T", - "TT_TT": "TT_TT", - "T_T": "T_T", - "Takri": "টাকরি", - "Talbahana": "টালবাহানা", - "TalmaTal": "টালমাটাল", - "Thakrun": "ঠাকরুন", - "Thandi": "ঠানদি", - "Thandidi": "ঠানদিদি", - "ThikThik": "ঠিকঠিক", - "Thikmoto": "ঠিকমত", - "ThonThon": "ঠনঠন", - "ThonThone": "ঠনঠনে", - "TikTik": "টিকটিক", - "TikTiki": "টিকটিকি", - "TipTip": "টিপটিপ", - "Tips": "টিপস", - "Tipsohi": "টিপসহি", - "Tipsoi": "টিপসই", - "TokTok": "টকটক", - "TolTol": "টলটল", - "TolTole": "টলটলে", - "Tolmol": "টলমল", - "TonTon": "টনটন", - "TonTonani": "টনটনানি", - "TonTone": "টনটনে", - "TosTos": "টসটস", - "TosTosa": "টসটসা", - "TosTose": "টসটসে", - "TukTak": "টুকটাক", - "TukTuke": "টুকটুকে", - "Tukra": "টুকরা", - "Tukra-Takra": "টুকরা-টাকরা", - "TukraTa": "টুকরাটা", - "TukraTakra": "টুকরাটাকরা", - "TukraTi": "টুকরাটি", - "TukragulO": "টুকরাগুলো", - "Tukri": "টুকরি", - "Tukrite": "টুকরিতে", - "TunTun": "টুনটুন", - "TunTuni": "টুনটুনি", - "TusTus": "টুসটুস", - "TusTusa": "টুসটুসা", - "TusTuse": "টুসটুসে", - "X(": "X(", - "X3": "X3", - "XD": "XD", - "X_X": "X_X", - "[-O<": "[-O<", - "[-X": "[-X", - "[:|]": "[:|]", - "\\,,/": "\\,,‌/", - "\\:D/": "\\:D/", - "\\m/": "\\m/", - "\\o/": "\\o/", - "^#(^": "^#(^", - "^:)^": "^:)^", - "abdomen": "অ্যাবডোমেন", - "academy": "অ্যাকাডেমি", - "access": "অ্যাক্সেস", - "account": "অ্যাকাউন্ট", - "acer": "এসার", - "acharya": "আচার্য", - "action": "অ্যাকশান", - "active": "অ্যাক্টিভ", - "activity": "অ্যাক্টিভিটি", - "adapter": "অ্যাডাপ্টার", - "add": "অ্যাড", - "aditya": "আদিত্য", - "adjust": "অ্যাডজাস্ট", - "adobe": "অ্যাডোব", - "adrita": "আদৃতা", - "adsense": "অ্যাডসেন্স", - "advertisement": "অ্যাডভার্টাইজমেন্ট", - "adwords": "অ্যাডওয়ার্ডস", - "aeroplane": "এরোপ্লেন", - "africa": "আফ্রিকা", - "aids": "এইডস", - "aingoto": "আইনগত", - "ainjIbI": "আইনজীবী", - "ainkanun": "আইনকানুন", - "ainmafik": "আইনমাফিক", - "ainmaphik": "আইনমাফিক", - "ainmontrI": "আইনমন্ত্রী", - "ainmontroNaloy": "আইনমন্ত্রণালয়", - "ainmote": "আইনমতে", - "ainmoto": "আইনমত", - "ainsocib": "আইনসচিব", - "ainsommoto": "আইনসম্মত", - "ainsongoto": "আইনসঙ্গত", - "airport": "এয়ারপোর্ট", - "airtel": "এয়ারটেল", - "airway": "এয়ারওয়ে", - "airways": "এয়ারওয়েজ", - "akbar": "আকবর", - "akkelguRum": "আক্কেলগুড়ুম", - "aktel": "একটেল", - "alhumdulillah": "আলহামদুলিল্লাহ", - "alOkmala": "আলোকমালা", - "alOkmoy": "আলোকময়", - "alOksojja": "আলোকসজ্জা", - "alOksongket": "আলোকসংকেত", - "alOkstombho": "আলোকস্তম্ভ", - "alOkstomvo": "আলোকস্তম্ভ", - "alarm": "অ্যালার্ম", - "album": "অ্যালবাম", - "algOch": "আলগোছ", - "almari": "আলমারি", - "alphabet": "অ্যালফাবেট", - "alpin": "আলপিন", - "alt": "অল্ট", - "amartya": "অমর্ত্য", - "america": "আমেরিকা", - "american": "আমেরিকান", - "amrita": "অমৃতা", - "ananda": "আনন্দ", - "anandabajar": "আনন্দবাজার", - "anandabazar": "আনন্দবাজার", - "anatomy": "অ্যানাটমি", - "and": "অ্যান্ড", - "andhra": "অন্ধ্র", - "angle": "অ্যাঙ্গেল", - "anirban": "অনির্বাণ", - "aniruddha": "অনিরুদ্ধ", - "antenna": "অ্যান্টেনা", - "antivirus": "অ্যান্টিভাইরাস", - "anurima": "অণুরিমা", - "apna": "আপনা", - "apnaapni": "আপনাআপনি", - "aponkar": "আপনকার", - "app": "অ্যাপ", - "apple": "অ্যাপল", - "application": "অ্যাপ্লিকেশান", - "apply": "অ্যাপ্লাই", - "april": "এপ্রিল", - "arab": "আরব", - "arabia": "আরব", - "archive": "আর্কাইভ", - "argentina": "আর্জেন্টিনা", - "army": "আর্মি", - "article": "আর্টিকেল", - "artist": "আর্টিস্ট", - "asbenna": "আসবেননা", - "asenni": "আসেননি", - "ashraful": "আশরাফুল", - "asia": "এশিয়া", - "aslam": "আসলাম", - "asle": "আসলে", - "aslen": "আসলেন", - "asli": "আসলি", - "asma": "আসমা", - "asman": "আসমান", - "asmanI": "আসমানী", - "assistant": "অ্যাসিস্ট্যান্ট", - "association": "অ্যাসোসিয়েশান", - "atm": "এটিএম", - "audio": "অডিও", - "auditorium": "অডিটোরিয়াম", - "august": "অগাস্ট", - "australia": "অস্ট্রেলিয়া", - "authority": "অথরিটি", - "auto": "অটো", - "automatic": "অটোমেটিক", - "automobile": "অটোমোবাইল", - "autopsy": "অটোপ্সি", - "avast": "অ্যাভাস্ট", - "avenue": "অ্যাভেন্যু", - "avro": "অভ্র", - "avroo": "অভ্রও", - "b-(": "b-(", - "babohar": "ব্যবহার", - "back": "ব্যাক", - "background": "ব্যাকগ্রাউন্ড", - "backspace": "ব্যাকস্পেস", - "backup": "ব্যাকআপ", - "badminton": "ব্যাডমিন্টন", - "baksongzom": "বাকসংযম", - "baksongzomI": "বাকসংযমী", - "baksorrboswo": "বাকসর্বস্ব", - "ballot": "ব্যালট", - "ballygunge": "বালিগঞ্জ", - "bamfront": "বামফ্রন্ট", - "bampash": "বামপাশ", - "banasree": "বনশ্রী", - "banerjee": "ব্যানার্জি", - "bank": "ব্যাংক", - "baseball": "বেস্‌বল", - "basu": "বসু", - "basundhara": "বসুন্ধরা", - "battery": "ব্যাটারি", - "beat": "বিট", - "begum": "বেগম", - "bengal": "বেঙ্গল", - "bengali": "বেঙ্গলি", - "bharat": "ভারত", - "bhattacharya": "ভট্টাচার্য", - "bhowmik": "ভৌমিক", - "bicycle": "বাইসাইকেল", - "bidyut": "বিদ্যুৎ", - "bikkhato": "বিখ্যাত", - "bill": "বিল", - "biochemistry": "বায়োকেমিস্ট্রি", - "biology": "বায়োলজি", - "birla": "বিড়লা", - "birthday": "বার্থডে", - "bismilla": "বিসমিল্লা", - "bismillah": "বিসমিল্লাহ", - "bismillahir": "বিসমিল্লাহির", - "bit": "বিট", - "blackberry": "ব্ল্যাকবেরি", - "bloc": "ব্লক", - "block": "ব্লক", - "blogger": "ব্লগার", - "blouse": "ব্লাউজ", - "blue": "ব্লু", - "bluetooth": "ব্লুটুথ", - "board": "বোর্ড", - "bodmaish": "বদমাইশ", - "bodmaishi": "বদমাইশি", - "bodmash": "বদমাশ", - "bodmashi": "বদমাশি", - "bodmayeshi": "বদমায়েশি", - "bodmejaj": "বদমেজাজ", - "bodmejajI": "বদমেজাজী", - "bodrag": "বদরাগ", - "bodragI": "বদরাগী", - "bodrul": "বদরুল", - "bogra": "বগুড়া", - "bolbona": "বলবনা", - "bolenni": "বলেননি", - "bollywood": "বলিউড", - "bonna": "বন্যা", - "boolean": "বুলিয়ান", - "bosenni": "বসেননি", - "botany": "বোটানি", - "brake": "ব্রেক", - "brazil": "ব্রাজিল", - "brb": "একটু পরে আসছি", - "break": "ব্রেক", - "britain": "ব্রিটেন", - "british": "ব্রিটিশ", - "britney": "ব্রিটনি", - "broadband": "ব্রডব্যান্ড", - "browser": "ব্রাউজার", - "brush": "ব্রাশ", - "bsc": "বিএসসি", - "btv": "বিটিভি", - "buddha": "বুদ্ধ", - "buddhadeb": "বুদ্ধদেব", - "building": "বিল্ডিং", - "bulb": "বাল্ব", - "bullet": "বুলেট", - "bus": "বাস", - "business": "বিজনেস", - "button": "বাটন", - "buzz": "বাজ", - "byarrtho": "ব্যর্থ", - "byay": "ব্যয়", - "byrrth": "ব্যর্থ", - "byrrthta": "ব্যর্থতা", - "byrrthtay": "ব্যর্থতায়", - "byte": "বাইট", - "byy": "ব্যয়", - "cable": "কেব্‌ল", - "cadre": "ক্যাডার", - "cake": "কেক", - "cakladar": "চাকলাদার", - "cakranI": "চাকরানী", - "cakri": "চাকরি", - "cakri-bakri": "চাকরি-বাকরি", - "cakribakri": "চাকরিবাকরি", - "cakrihIn": "চাকরিহীন", - "calculator": "ক্যালকুলেটর", - "calcutta": "ক্যালকাটা", - "calendar": "ক্যালেন্ডার", - "calkata": "কলকাতা", - "calkumRO": "চালকুমড়ো", - "calkumRa": "চালকুমড়া", - "call": "কল", - "camera": "ক্যামেরা", - "canada": "কানাডা", - "cancel": "ক্যানসেল", - "canon": "ক্যানন", - "canvas": "ক্যানভাস", - "capacity": "ক্যাপাসিটি", - "capgeminee": "ক্যাপজেমিনি", - "capisna": "চাপিসনা", - "capisne": "চাপিসনে", - "capital": "ক্যাপিটাল", - "caplO": "চাপলো", - "caplam": "চাপলাম", - "caple": "চাপলে", - "caplei": "চাপলেই", - "caplen": "চাপলেন", - "caplo": "চাপল", - "caps": "ক্যাপ্‌স", - "captam": "চাপতাম", - "capte": "চাপতে", - "capten": "চাপতেন", - "capti": "চাপতি", - "captis": "চাপতিস", - "capture": "ক্যাপচার", - "card": "কার্ড", - "cargo": "কার্গো", - "carrier": "ক্যারিয়ার", - "carry": "ক্যারি", - "cartoon": "কার্টুন", - "cassette": "ক্যাসেট", - "castro": "কাস্ত্রো", - "catalog": "ক্যাটালগ", - "catalogue": "ক্যাটালগ", - "cd": "সিডি", - "cell": "সেল", - "cent": "সেন্ট", - "century": "সেঞ্চুরি", - "certificate": "সার্টিফিকেট", - "certification": "সার্টিফিকেশান", - "chair": "চেয়ার", - "chairman": "চেয়ারম্যান", - "chalk": "চক", - "chamber": "চেম্বার", - "chandan": "চন্দন", - "channel": "চ্যানেল", - "character": "ক্যারেক্টার", - "charge": "চার্জ", - "charger": "চার্জার", - "chatterjee": "চ্যাটার্জি", - "check-post": "চেকপোস্ট", - "checkpost": "চেকপোস্ট", - "chemical": "কেমিক্যাল", - "chemistry": "কেমিস্ট্রি", - "chennai": "চেন্নাই", - "chicken": "চিকেন", - "china": "চায়না", - "chinese": "চাইনীজ", - "chittagong": "চট্রগ্রাম", - "chokkaTO": "ছক", - "chokkaTa": "ছককাটা", - "chokkaTun": "ছক", - "chokkagoj": "ছককাগজ", - "chrome": "ক্রোম", - "cikmik": "চিকমিক", - "cikmike": "চিকমিকে", - "cimney": "চিমনি", - "cinema": "সিনেমা", - "circle": "সার্কেল", - "circular": "সার্কুলার", - "circus": "সার্কাস", - "city": "সিটি", - "citycell": "সিটিসেল", - "civil": "সিভিল", - "class": "ক্লাস", - "clear": "ক্লিয়ার", - "click": "ক্লিক", - "clip": "ক্লিপ", - "clipboard": "ক্লিপবোর্ড", - "close": "ক্লোজ", - "close-up": "ক্লোস-আপ", - "club": "ক্লাব", - "cm": "সেমি.", - "coach": "কোচ", - "coal": "কোল", - "code": "কোড", - "coin": "কয়েন", - "college": "কলেজ", - "comilla": "কুমিল্লা", - "comment": "কমেন্ট", - "commerce": "কমার্স", - "commercial": "কমার্শিয়াল", - "commission": "কমিশন", - "committee": "কমিটি", - "community": "কমিউনিটি", - "compaq": "কমপ্যাক", - "complain": "কমপ্লেইন", - "computer": "কম্পিউটার", - "computing": "কম্পিউটিং", - "conductor": "কন্ডাক্টর", - "conference": "কনফারেন্স", - "configuration": "কনফিগারেশন", - "congress": "কংগ্রেস", - "consortium": "কন্সর্টিয়াম", - "control": "কন্ট্রোল", - "convert": "কনভার্ট", - "converter": "কনভার্টার", - "cookie": "কুকি", - "copy": "কপি", - "copyright": "কপিরাইট", - "correct": "কারেক্ট", - "council": "কাউন্সিল", - "courier": "ক্যুরিয়ার", - "court": "কোর্ট", - "courtship": "কোর্টশিপ", - "coxsbajar": "কক্সবাজার", - "cpi": "সিপিআই", - "cpm": "সিপিএম", - "crack": "ক্র্যাক", - "cream": "ক্রিম", - "credit": "ক্রেডিট", - "crest": "ক্রেস্ট", - "cricket": "ক্রিকেট", - "cricketer": "ক্রিকেটার", - "crime": "ক্রাইম", - "criminal": "ক্রিমিনাল", - "cross": "ক্রস", - "crystal": "ক্রিস্টাল", - "css": "সিএসএস", - "cuba": "কিউবা", - "current": "কারেন্ট", - "cursor": "কার্সর", - "custom": "কাস্টম", - "cycle": "সাইকেল", - "d'-'": "d'-'", - "d'-'b": "d'-'d", - "d'_'": "d'_'", - "d'_'b": "d'_'b", - "d:-)": "d:-)", - "dOkandar": "দোকানদার", - "dOkandari": "দোকানদারি", - "dOkla": "দোকলা", - "dairy": "ডেয়ারি", - "darjeeling": "দার্জিলিং", - "dashboard": "ড্যাশবোর্ড", - "dead": "ডেড", - "debbhokti": "দেবভক্তি", - "debbhokto": "দেবভক্ত", - "debit": "ডেবিট", - "debug": "ডিবাগ", - "december": "ডিসেম্বর", - "default": "ডিফল্ট", - "define": "ডিফাইন", - "definite": "ডেফিনিট", - "definitely": "ডেফিনেটলি", - "definition": "ডেফিনেশান", - "defragment": "ডিফ্র্যাগমেন্ট", - "defragmenter": "ডিফ্র্যাগমেন্টার", - "degree": "ডিগ্রি", - "delete": "ডিলিট", - "delhi": "দিল্লি", - "delivery": "ডেলিভারি", - "dell": "ডেল", - "dentist": "ডেন্টিস্ট", - "design": "ডিজাইন", - "designer": "ডিজাইনার", - "desktop": "ডেক্সটপ", - "detective": "ডিটেক্টিভ", - "developar": "ডেভেলপার", - "developer": "ডেভেলপার", - "development": "ডেভেলপমেন্ট", - "device": "ডিভাইস", - "dhUmpan": "ধূমপান", - "dhUmpayI": "ধূমপায়ী", - "dhaka": "ঢাকা", - "dialog": "ডায়লগ", - "dialogue": "ডায়লগ", - "diamond": "ডায়মন্ড", - "diary": "ডায়েরি", - "dictionary": "ডিকশনারী", - "diesel": "ডিজেল", - "digicam": "ডিজিক্যাম", - "digit": "ডিজিট", - "digital": "ডিজিটাল", - "dingoto": "দিনগত", - "dinkal": "দিনকাল", - "dinman": "দিনমান", - "dinmane": "দিনমানে", - "dinmojur": "দিনমজুর", - "dinner": "ডিনার", - "diplay": "ডিসপ্লে", - "director": "ডিরেক্টর", - "directx": "ডিরেক্ট-এক্স", - "disk": "ডিস্ক", - "display": "ডিসপ্লে", - "dissection": "ডিসেকশান", - "dj": "ডিজে", - "djuice": "ডিজ্যুস", - "doSombar": "দশমবার", - "doctor": "ডাক্তার", - "document": "ডকুমেন্ট", - "documents": "ডকুমেন্টস", - "dollar": "ডলার", - "domain": "ডোমেইন", - "dongle": "ডঙ্গল", - "doshombar": "দশমবার", - "download": "ডাউনলোড", - "dr.": "dr.", - "draft": "ড্রাফ্‌ট", - "drawing": "ড্রয়িং", - "dreamweaver": "ড্রিমওয়েভার", - "drive": "ড্রাইভ", - "driver": "ড্রাইভার", - "drug": "ড্রাগ", - "dur": "দূর", - "durga": "দুর্গা", - "dutch": "ডাচ", - "dutt": "দত্ত", - "dutta": "দত্ত", - "dvd": "ডিভিডি", - "e-mail": "ই-মেল", - "earth": "আর্থ", - "east": "ইস্ট", - "easy": "ইজি", - "edit": "এডিট", - "edition": "এডিশন", - "editor": "এডিটর", - "eid": "ঈদ", - "einstein": "আইন্সটাইন", - "ekTa": "একটা", - "ekTaka": "একটাকা", - "ekTana": "একটানা", - "ekTane": "একটানে", - "ekTao": "একটাও", - "ekTi": "একটি", - "ekTu": "একটু", - "ekTuk": "একটুক", - "ekTuku": "একটুকু", - "ekhonkar": "এখনকার", - "ekkal": "এককাল", - "ekkalIn": "এককালীন", - "ekkendrIyo": "এককেন্দ্রীয়", - "ekkotha": "এককথা", - "ekla": "একলা", - "ekmatra": "একমাত্রা", - "ekmatro": "একমাত্র", - "ekmatrrik": "একমাতৃক", - "ekmon": "একমন", - "ekmona": "একমনা", - "ekmot": "একমত", - "ekmotalombI": "একমতালম্বী", - "ekmukh": "একমুখ", - "ekmukhI": "একমুখী", - "ekmukhIkoroN": "একমুখীকরণ", - "ekmukhO": "একমুখো", - "ekrOkha": "একরোখা", - "ekrUp": "একরূপ", - "ekrob": "একরব", - "ekrokom": "একরকম", - "ekrokombhabe": "একরকমভাবে", - "ekrokomvabe": "একরকমভাবে", - "ekrotti": "একরত্তি", - "eksathe": "একসাথে", - "eksonge": "একসঙ্গে", - "eksthan": "একস্থান", - "ektal": "একতাল", - "ektala": "একতালা", - "ektara": "একতারা", - "ektil": "একতিল", - "ektola": "একতলা", - "ektolay": "একতলায়", - "ektomo": "একতম", - "ektontrI": "একতন্ত্রী", - "ektontro": "একতন্ত্র", - "ektoro": "একতর", - "ektorofa": "একতরফা", - "ektoropha": "একতরফা", - "election": "ইলেকশান", - "electric": "ইলেক্ট্রিক", - "electrical": "ইলেক্ট্রিক্যাল", - "electricity": "ইলেক্ট্রিসিটি", - "electronic": "ইলেক্ট্রনিক", - "electronics": "ইলেক্ট্রনিক্স", - "email": "ইমেইল", - "emirates": "এমিরেট্‌স", - "emni": "এমনি", - "emnikore": "এমনিকরে", - "emnitoro": "এমনিতর", - "emnivabe": "এমনিভাবে", - "emonTa": "এমনটা", - "emonTi": "এমনটি", - "emonki": "এমনকি", - "emontoro": "এমনতর", - "empire": "এম্পায়ার", - "encoding": "এনকোডিং", - "end": "এন্ড", - "engine": "ইঞ্জিন", - "engineer": "ইঞ্জিনিয়ার", - "engineering": "ইঞ্জিনিয়ারিং", - "england": "ইংল্যান্ড", - "english": "ইংলিশ", - "enrique": "এনরিক", - "enter": "এন্টার", - "entrance": "এন্ট্রান্স", - "entries": "এন্ট্রিজ্‌", - "entry": "এন্ট্রি", - "epsiode": "এপিসোড", - "epson": "এপসন", - "erricson": "এরিকসান", - "etc": "ইত্যাদি", - "etyadi": "ইত্যাদি", - "euro": "ইউরো", - "europe": "ইউরোপ", - "event": "ইভেন্ট", - "everest": "এভারেস্ট", - "excel": "এক্সেল", - "exchange": "এক্সচেঞ্জ", - "exercise": "এক্সারসাইজ", - "explorer": "এক্সপ্লোরার", - "express": "এক্সপ্রেস", - "extension": "এক্সটেন্সান", - "fa^ktal": "ফাঁকতাল", - "facebook": "ফেইসবুক", - "fantasy": "ফ্যান্টাসি", - "fashion": "ফ্যাশান", - "father": "ফাদার", - "fatna": "ফাতনা", - "february": "ফেব্রুয়ারী", - "fedora": "ফেডোরা", - "feed": "ফীড", - "felbe": "ফেলবে", - "felben": "ফেলবেন", - "felbi": "ফেলবি", - "felbo": "ফেলব", - "fellam": "ফেললাম", - "felle": "ফেললে", - "fellen": "ফেললেন", - "felleo": "ফেললেও", - "felli": "ফেললি", - "fello": "ফেলল", - "feynman": "ফাইনম্যান", - "fiction": "ফিকশান", - "file": "ফাইল", - "filter": "ফিল্টার", - "final": "ফাইনাল", - "finance": "ফাইনান্স", - "find": "ফাইন্ড", - "fine": "ফাইন", - "finki": "ফিনকি", - "firefox": "ফায়ারফক্স", - "firenni": "ফিরেননি", - "firewire": "ফায়ারওয়ার", - "fitna": "ফিতনা", - "fixed": "ফিক্সড", - "flash": "ফ্ল্যাশ", - "flickr": "ফ্লিক্‌র", - "floppy": "ফ্লপি", - "flyover": "ফ্লাইওভার", - "folder": "ফোল্ডার", - "footage": "ফুটেজ", - "football": "ফুটবল", - "forensic": "ফরেন্সিক", - "form": "ফর্ম", - "format": "ফরম্যাট", - "forum": "ফোরাম", - "forward": "ফরওয়ার্ড", - "fossil": "ফসিল", - "fossils": "ফসিল্‌স", - "foundation": "ফাউন্ডেশন", - "fountain": "ফাউন্টেন", - "france": "ফ্রান্স", - "freeware": "ফ্রীওয়্যার", - "friend": "ফ্রেন্ড", - "front": "ফ্রন্ট", - "frontpage": "ফ্রন্টপেজ", - "fulbabu": "ফুলবাবু", - "fulbagan": "ফুলবাগান", - "fulkopi": "ফুলকপি", - "fund": "ফান্ড", - "fuslanO": "ফুসলানো", - "fusle": "ফুসলে", - "fusliye": "ফুসলিয়ে", - "fuzzy": "ফাজি", - "gObre": "গোবরে", - "gOlgal": "গোলগাল", - "gOlmal": "গোলমাল", - "gOlmele": "গোলমেলে", - "gOlmoric": "গোলমরিচ", - "gOlpata": "গোলপাতা", - "galgolpo": "গালগল্প", - "gallery": "গ্যালারি", - "galmondo": "গালমন্দ", - "game": "গেম", - "gamla": "গামলা", - "ganI": "জ্ঞানী", - "gandhi": "গান্ধী", - "ganesh": "গণেশ", - "ganguly": "গাঙ্গুলি", - "gargi": "গার্গী", - "gariahat": "গড়িয়াহাট", - "gatarrthe": "জ্ঞাতার্থে", - "gates": "গেট্‌স", - "gautam": "গৌতম", - "gb": "জিবি", - "generation": "জেনারেশন", - "geography": "জিওগ্রাফি", - "george": "জর্জ", - "german": "জার্মান", - "germany": "জার্মানি", - "ghagra": "ঘাগরা", - "ghapla": "ঘাপলা", - "ghora": "ঘোড়া", - "ghori": "ঘড়ি", - "ghosh": "ঘোষ", - "ghumanni": "ঘুমাননি", - "ghurenni": "ঘুরেননি", - "gilTi": "গিলটি", - "girl": "গার্ল", - "github": "গিটহাব", - "gland": "গ্ল্যান্ড", - "glass": "গ্লাস", - "global": "গ্লোবাল", - "globalisation": "গ্লোবালাইজেশান", - "globalization": "গ্লোবালাইজেশান", - "gmail": "জিমেইল", - "gogoncarI": "গগনচারী", - "gogoncor": "গগনচর", - "gogoncumbI": "গগনচুম্বী", - "gogonsporrshI": "গগনস্পর্শী", - "gomes": "গোমেজ", - "good": "গুড", - "google": "গুগল", - "government": "গভর্নমেন্ট", - "grasnalI": "গ্রাসনালী", - "great": "গ্রেট", - "greece": "গ্রীস", - "greenland": "গ্রীনল্যান্ড", - "group": "গ্রুপ", - "guard": "গার্ড", - "gubre": "গুবরে", - "guharoy": "গুহরায়", - "guhathakurata": "গুহঠাকুরতা", - "guide": "গাইড", - "gujrat": "গুজরাত", - "gunda": "গুন্ডা", - "gynaecology": "গাইনেকোলজি", - "ha^Tenni": "হাঁটেননি", - "hack": "হ্যাক", - "haj": "হজ", - "hall": "হল", - "hamla": "হামলা", - "hanger": "হ্যাঙ্গার", - "haora": "হাওড়া", - "haque": "হক", - "hard": "হার্ড", - "harddisk": "হার্ডডিস্ক", - "hardware": "হার্ডওয়্যার", - "harmonium": "হারমোনিয়াম", - "harry": "হ্যারি", - "hature": "হাতুড়ে", - "head": "হেড", - "health": "হেল্‌থ", - "heart": "হার্ট", - "heatsink": "হিটসিঙ্ক", - "hekmot": "হেকমত", - "hell": "হেল", - "helper": "হেল্পার", - "hertz": "হার্জ", - "hi-fi": "হাই-ফাই", - "hifi": "হাইফাই", - "highfive": "হাইফাইভ", - "history": "হিস্ট্রি", - "hitler": "হিটলার", - "hmm": "হুম", - "hockey": "হকি", - "hokkotha": "হককথা", - "hollywood": "হলিউড", - "home": "হোম", - "hostel": "হোস্টেল", - "hotel": "হোটেল", - "hotkey": "হট-কি", - "howra": "হাওড়া", - "howrah": "হাওড়া", - "hp": "এইচপি", - "html": "এইচটিএমএল", - "human": "হিউম্যান", - "hyderabad": "হায়দেরাবাদ", - "hydrojen": "হাইড্রোজেন", - "hype": "হাইপ", - "ibm": "আইবিএম", - "icon": "আইকন", - "idiot": "ইডিয়ট", - "ie": "আইই", - "image": "ইমেজ", - "imageready": "ইমেজরেডি", - "imageshack": "ইমেজশ্যাক", - "imambaRi": "ইমামবাড়ি", - "imandar": "ইমানদার", - "imandarI": "ইমানদারী", - "imranur": "ইমরানুর", - "inch": "ইঞ্চি", - "inches": "ইঞ্চি", - "include": "ইনক্লুড", - "indhondata": "ইন্ধনদাতা", - "indhondatrI": "ইন্ধনদাত্রী", - "india": "ইন্ডিয়া", - "indian": "ইন্ডিয়ান", - "indradeep": "ইন্দ্রদীপ", - "info": "ইনফো", - "information": "ইনফর্মেশন", - "infrared": "ইনফ্রারেড", - "injection": "ইঞ্জেকশান", - "input": "ইনপুট", - "install": "ইন্সটল", - "institute": "ইন্সিটিউট", - "insurance": "ইনসিওরেন্স", - "insure": "ইন্সিওর", - "interface": "ইন্টারফেস", - "international": "ইন্টারন্যাশনাল", - "internet": "ইন্টারনেট", - "ipad": "আইপ্যাড", - "iphone": "আইফোন", - "ipod": "আইপড", - "iron": "আয়রন", - "islam": "ইসলাম", - "island": "আইল্যান্ড", - "italy": "ইটালি", - "item": "আইটেম", - "itihaslekhok": "ইতিহাসলেখক", - "jOsna": "জ্যোৎস্না", - "jOsnamoy": "জ্যোৎস্নাময়", - "jOsnarat": "জ্যোৎস্নারাত", - "jOsnaratri": "জ্যোৎস্নারাত্রি", - "jZOt``snarater": "জ্যোৎস্নারাতের", - "jabe": "যাবে", - "jalpaiguri": "জলপাইগুড়ি", - "jamrul": "জামরুল", - "janenna": "জানেননা", - "jantam": "জানতাম", - "jante": "জানতে", - "janten": "জানতেন", - "janti": "জানতি", - "janto": "জানত", - "january": "জানুয়ারী", - "je": "যে", - "jeans": "জিন্‌স", - "jedin": "যেদিন", - "jehetu": "যেহেতু", - "jekhan": "যেখান", - "jemon": "যেমন", - "jet": "জেট", - "jholkacche": "ঝলকাচ্ছে", - "jholkacchilo": "ঝলকাচ্ছিল", - "jholkanO": "ঝলকানো", - "jholkani": "ঝলকানি", - "jholmol": "ঝলমল", - "jholmole": "ঝলমলে", - "jibon": "জীবন", - "jodi": "যদি", - "joint": "জয়েন্ট", - "jokhon": "যখন", - "jonno": "জন্য", - "josna": "জ্যোৎস্না", - "josnamoy": "জ্যোৎস্নাময়", - "josnarat": "জ্যোৎস্নারাত", - "josnaratri": "জ্যোৎস্নারাত্রি", - "journalism": "জার্নালিজম", - "journalist": "জার্নালিস্ট", - "jukti": "যুক্তি", - "july": "জুলাই", - "jyatirmay": "জ্যোতির্ময়", - "jyatirmoy": "জ্যোতির্ময়", - "jyoti": "জ্যোতি", - "jyotirmoy": "জ্যোতির্ময়", - "kOmolmoti": "কোমলমতি", - "kOnTa": "কোনটা", - "kOnTi": "কোনটি", - "kaktal": "কাকতাল", - "kaktalIyo": "কাকতালীয়", - "kalbOISakhI": "কালবৈশাখী", - "kalbOIshakhI": "কালবৈশাখী", - "kalbOSekhI": "কালবোশেখী", - "kalbOshekhI": "কালবোশেখী", - "kalbela": "কালবেলা", - "kalbilombe": "কালবিলম্বে", - "kalbilombo": "কালবিলম্ব", - "kalke": "কালকে", - "kalkrome": "কালক্রমে", - "kalprobahe": "কালপ্রবাহে", - "kalprobaho": "কালপ্রবাহ", - "kalprobhab": "কালপ্রভাব", - "kalprovab": "কালপ্রভাব", - "kalpuruSh": "কালপুরুষ", - "kalrat": "কালরাত", - "kalratri": "কালরাত্রি", - "kalratrire": "কালরাত্রিরে", - "kamla": "কামলা", - "kamra": "কামরা", - "kangkhito": "কাঙ্ক্ষিত", - "kankO": "কানকো", - "kankaTa": "কানকাটা", - "kankhaRa": "কানখাড়া", - "kartik": "কার্ত্তিক", - "kasba": "কসবা", - "katranO": "কাতরানো", - "katrani": "কাতরানি", - "kb": "কেবি", - "key": "কী", - "keyboard": "কিবোর্ড", - "keypad": "কী-প্যাড", - "khanni": "খাননি", - "kharagpur": "খড়্গপুর", - "khelenni": "খেলেননি", - "khetre": "ক্ষেত্রে", - "khetro": "ক্ষেত্র", - "khetrobisheSh": "ক্ষেত্রবিশেষ", - "khetrofol": "ক্ষেত্রফল", - "khoda": "খোদা", - "khoma": "ক্ষমা", - "khoti": "ক্ষতি", - "khotibriddhi": "ক্ষতিবৃদ্ধি", - "khotibrriddhi": "ক্ষতিবৃদ্ধি", - "khotikor": "ক্ষতিকর", - "khulbO": "খুলবো", - "khulbe": "খুলবে", - "khulben": "খুলবেন", - "khullam": "খুললাম", - "khulle": "খুললে", - "khullen": "খুললেন", - "khulli": "খুললি", - "kilbil": "কিলবিল", - "kilbile": "কিলবিলে", - "kilo": "কিলো", - "kingdom": "কিংডম", - "kintam": "কিনতাম", - "kinte": "কিনতে", - "kinten": "কিনতেন", - "kinti": "কিনতি", - "kipTa": "কিপটা", - "kipTamO": "কিপটামো", - "kipTami": "কিপটামি", - "kisu": "কিছু", - "kisui": "কিছুই", - "kitchen": "কিচেন", - "km": "কিমি.", - "kobji": "কবজি", - "kolkarkhana": "কলকারখানা", - "kolkata": "কলকাতা", - "kolkobja": "কলকব্জা", - "kolkol": "কলকল", - "kolkollOl": "কলকল্লোল", - "kolkonTh": "কলকন্ঠ", - "kollaN": "কল্যাণ", - "kollaNpur": "কল্যাণপুর", - "kolma": "কলমা", - "kolombaj": "কলমবাজ", - "kolombajI": "কলমবাজী", - "kompokkhe": "কমপক্ষে", - "konjuspona": "কঞ্জুসপনা", - "konkon": "কনকন", - "konkonani": "কনকনানি", - "konkone": "কনকনে", - "konokmoy": "কনকময়", - "konokmukuT": "কনকমুকুট", - "konokmukuTe": "কনকমুকুটে", - "korenni": "করেননি", - "korrtitto": "কর্তৃত্ব", - "korrtobbo": "কর্তব্য", - "kosrot": "কসরত", - "kosrotI": "কসরতী", - "kosrote": "কসরতে", - "kosroter": "কসরতের", - "koththo": "কথ্য", - "kotokTa": "কতকটা", - "kotokkhani": "কতকখানি", - "koyekTa": "কয়েকটা", - "koyekTi": "কয়েকটি", - "kukkhato": "কুখ্যাত", - "kulTa": "কুলটা", - "kulgOUrob": "কুলগৌরব", - "kulgOUrobe": "কুলগৌরবে", - "kulgorima": "কুলগরিমা", - "kulgorrbe": "কুলগর্বে", - "kulgorrbo": "কুলগর্ব", - "kulguru": "কুলগুরু", - "kulkaminI": "কুলকামিনী", - "kulkolonkI": "কুলকলঙ্কী", - "kulkolonker": "কুলকলঙ্কের", - "kulkolonkinI": "কুলকলঙ্কিনী", - "kulkolonko": "কুলকলঙ্ক", - "kulkonya": "কুলকন্যা", - "kulkuc": "কুলকুচ", - "kulkucO": "কুলকুচো", - "kulkuca": "কুলকুচা", - "kulkul": "কুলকুল", - "lab": "ল্যাব", - "lace": "লেস", - "lane": "লেন", - "language": "ল্যাঙ্গুয়েজ", - "lansdown": "ল্যান্সডাউন", - "laptop": "ল্যাপটপ", - "lassi": "লাচ্ছি", - "launch": "লঞ্চ", - "lawrence": "লরেন্স", - "lawyer": "লইয়ার", - "layer": "লেয়ার", - "layout": "লেআউট", - "lbw": "এলবিডব্লিউ", - "lcd": "এলসিডি", - "lecture": "লেকচার", - "legal": "লিগাল", - "lenovo": "লেনোভো", - "letter": "লেটার", - "letterhead": "লেটারহেড", - "lg": "এলজি", - "library": "লাইব্রেরি", - "life": "লাইফ", - "light": "লাইট", - "line": "লাইন", - "linkin": "লিন্‌কিন", - "linux": "লিনাক্স", - "live": "লাইভ", - "llb": "এল.এল.বি", - "lobby": "লবি", - "local": "লোকাল", - "location": "লোকেশান", - "lock": "লক", - "logic": "লজিক", - "logical": "লজিকাল", - "logo": "লোগো", - "loklok": "লকলক", - "london": "লন্ডন", - "lotion": "লোশান্‌", - "lounge": "লাউঞ্জ", - "lunch": "লাঞ্চ", - "luxury": "লাক্সারি", - "m.b.b.s": "এম.বি.বি.এস", - "mac": "ম্যাক", - "machine": "মেশিন", - "macintosh": "ম্যাকিনটোশ", - "macro": "ম্যাক্রো", - "maddox": "ম্যাডক্স", - "magazine": "ম্যাগাজিন", - "magistrate": "ম্যাজিস্ট্রেট", - "maharashtra": "মহারাষ্ট্র", - "mahatma": "মহাত্মা", - "mail": "মেইল", - "maitreyee": "মৈত্রেয়ী", - "majumdar": "মজুমদার", - "maldah": "মালদহ", - "mall": "মল", - "mallik": "মল্লিক", - "mallika": "মল্লিকা", - "mamata": "মমতা", - "mamla": "মামলা", - "mamtaj": "মমতাজ", - "management": "ম্যানেজমেন্ট", - "manager": "ম্যানেজার", - "managing": "ম্যানেজিং", - "mandela": "ম্যান্ডেলা", - "mangOUrob": "মানগৌরব", - "manmohan": "মনমোহন", - "mansommoto": "মানসম্মত", - "mante": "মানতে", - "manten": "মানতেন", - "manti": "মানতি", - "manto": "মানত", - "maradona": "মারাদোনা", - "march": "মার্চ", - "market": "মার্কেট", - "markin": "মার্কিন", - "marksbad": "মার্কসবাদ", - "marx": "মার্ক্স", - "massenger": "মেসেঞ্জার", - "matador": "ম্যাটাডর", - "maths": "ম্যাথ্‌স", - "maximize": "ম্যাক্সিমাইজ", - "maximum": "ম্যাক্সিমাম", - "mb": "এমবি", - "mbbs": "এমবিবিএস", - "md.": "এমডি.", - "mechanic": "মেকানিক", - "mechanical": "মেকানিক্যাল", - "mechanism": "মেকানিজম", - "media": "মিডিয়া", - "medical": "মেডিকেল", - "medicine": "মেডিসিন", - "medinipur": "মেদিনীপুর", - "medium": "মিডিয়াম", - "member": "মেম্বার", - "memory": "মেমোরি", - "mercedes": "মার্সিডিজ", - "mess": "মেস", - "message": "মেসেজ", - "messenger": "মেসেঞ্জার", - "metric": "মেট্রিক", - "mexico": "মেক্সিকো", - "micro": "মাইক্রো", - "microbiology": "মাইক্রোবায়োলজি", - "microphone": "মাইক্রোফোন", - "microscope": "মাইক্রোস্কোপ", - "microsoft": "মাইক্রোসফট", - "military": "মিলিটারি", - "mill": "মিল", - "minimize": "মিনিমাইজ", - "minimum": "মিনিমাম", - "minister": "মিনিস্টার", - "minus": "মাইনাস", - "ml": "মিলি.", - "mm": "মিমি.", - "mms": "এমএমএস", - "mobile": "মোবাইল", - "mohot": "মহৎ", - "money": "মানি", - "mongolbar": "মঙ্গলবার", - "mongolgIt": "মঙ্গলগীত", - "mongolgroh": "মঙ্গলগ্রহ", - "mongolgroho": "মঙ্গলগ্রহ", - "mongolia": "মঙ্গোলিয়া", - "mongolkamI": "মঙ্গলকামী", - "mongolkamona": "মঙ্গলকামনা", - "mongolkarI": "মঙ্গলকারী", - "mongolkariNI": "মঙ্গলকারিণী", - "mongolkor": "মঙ্গলকর", - "mongolmoy": "মঙ্গলময়", - "monitor": "মনিটর", - "morgue": "মর্গ", - "morning": "মর্নিং", - "mother": "মাদার", - "motherboard": "মাদারবোর্ড", - "motor": "মোটর", - "motorolla": "মটোরোলা", - "mou": "মৌ", - "mount": "মাউন্ট", - "mouse": "মাউস", - "mouth": "মাউথ", - "movie": "মুভি", - "mozilla": "মোজিলা", - "mrigoya": "মৃগয়া", - "mrinmoy": "মৃন্ময়", - "ms": "এমএস", - "msn": "এমএসএন", - "muffler": "মাফ্‌লার", - "mukherjee": "মুখার্জি", - "multimedia": "মাল্টিমিডিয়া", - "munmun": "মুনমুন", - "museum": "মিউজিয়াম", - "music": "মিউজিক", - "mutton": "মাটন", - "my": "মাই", - "myanmar": "মায়ানমার", - "mymensingh": "ময়মনসিংহ", - "myspace": "মাইস্পেস", - "nOnta": "নোনতা", - "nakkaTa": "নাককাটা", - "nakkan": "নাককান", - "nakkhot": "নাকখত", - "namaskar": "নমস্কার", - "namenni": "নামেননি", - "nandigram": "নন্দীগ্রাম", - "napkin": "ন্যাপকিন", - "narayan": "নারায়ণ", - "national": "ন্যাশনাল", - "native": "নেটিভ", - "naxal": "নক্সাল", - "naxalbari": "নক্সালবাড়ি", - "nazmun": "নাজমুন", - "negro": "নিগ্রো", - "net": "নেট", - "network": "নেটওয়ার্ক", - "new": "নিউ", - "news": "নিউজ", - "newspaper": "নিউজপেপার", - "newyork": "নিউইয়র্ক", - "next": "নেক্সট", - "nicobar": "নিকোবার", - "nidankal": "নিদানকাল", - "nidankale": "নিদানকালে", - "night": "নাইট", - "nimokharam": "নিমকহারাম", - "nimokharami": "নিমকহারামি", - "niponwave": "নিপনওয়েভ", - "nobel": "নোবেল", - "nobombar": "নবমবার", - "nojrana": "নজরানা", - "nokia": "নোকিয়া", - "nokri": "নকরি", - "nolkUp": "নলকূপ", - "nonsense": "নন্‌সেন্স", - "norokkunDe": "নরককুন্ডে", - "norokkunDo": "নরককুন্ড", - "north": "নর্থ", - "norton": "নরটন", - "norway": "নরওয়ে", - "note": "নোট", - "notebook": "নোটবুক", - "notepad": "নোটপ্যাড", - "notes": "নোট্‌স", - "notification": "নোটিফিকেশান", - "nouka": "নৌকা", - "november": "নভেম্বর", - "noyongOcor": "নয়নগোচর", - "noyonjol": "নয়নজল", - "noyonkON": "নয়নকোণ", - "noyonmoNi": "নয়নমণি", - "noyonronjon": "নয়নরঞ্জন", - "noyonsnigdhokor": "নয়নস্নিগ্ধকর", - "noyontara": "নয়নতারা", - "noyontaray": "নয়নতারায়", - "ntfs": "এনটিএফএস", - "number": "নাম্বার", - "numeric": "নিউমেরিক", - "nurse": "নার্স", - "nylon": "নাইলন", - "o-+": "o-+", - "o->": "o->", - "o...o": "o...o", - "o0o": "o0o", - "o=>": "o=>", - "oShTombar": "অষ্টমবার", - "o_o": "o_o", - "obyrrtho": "অব্যর্থ", - "october": "অক্টোবর", - "odolbodol": "অদলবদল", - "offic": "অফিস", - "office": "অফিস", - "officer": "অফিসার", - "ogganjonito": "অজ্ঞানজনিত", - "oggankrrito": "অজ্ঞানকৃত", - "oggantimir": "অজ্ঞানতিমির", - "ogotta": "অগত্যা", - "ok": "ওকে", - "okaTTo": "অকাট্য", - "okaTmUrrkho": "অকাটমূর্খ", - "okalbarrdhokyo": "অকালবার্ধক্য", - "okalborrShoN": "অকালবর্ষণ", - "okalbrriShTi": "অকালবৃষ্টি", - "okalbrriddho": "অকালবৃদ্ধ", - "okollaN": "অকল্যাণ", - "okorrtobbo": "অকর্তব্য", - "okoththo": "অকথ্য", - "olokmegh": "অলকমেঘ", - "olympic": "অলিম্পিক", - "omicronlab": "ওমিক্রনল্যাব", - "omlanmukh": "অম্লানমুখ", - "omlanmukhe": "অম্লানমুখে", - "oncolprobhab": "অঞ্চলপ্রভাব", - "oncolprovab": "অঞ্চলপ্রভাব", - "onekTa": "অনেকটা", - "onkontuli": "অঙ্কনতুলি", - "onkontulika": "অঙ্কনতুলিকা", - "onolborrShI": "অনলবর্ষী", - "onolborrShoN": "অনলবর্ষণ", - "ononna": "অনন্যা", - "ononno": "অনন্য", - "onudbayI": "অনুদ্বায়ী", - "onudbeg": "অনুদ্বেগ", - "onudbigno": "অনুদ্বিগ্ন", - "onujjol": "অনুজ্জ্বল", - "open": "ওপেন", - "openoffice": "ওপেনঅফিস", - "operating": "অপারেটিং", - "operation": "অপারেশান", - "opomangrostho": "অপমানগ্রস্থ", - "opomanjonok": "অপমানজনক", - "opomanjonokvabe": "অপমানজনকভাবে", - "opomankor": "অপমানকর", - "optical": "অপ্টিকাল", - "option": "অপশন", - "options": "অপশন্‌স", - "optionti": "অপশনটি", - "orange": "অরেঞ্জ", - "original": "অরিজিনাল", - "orkut": "অর্কুট", - "orkutbaj": "অর্কুটবাজ", - "orkuting": "অর্কুটিং", - "orrthat": "অর্থাৎ", - "os": "ওএস", - "osabdhan": "অসাবধান", - "osabdhanI": "অসাবধানী", - "osabdhane": "অসাবধানে", - "osabdhanota": "অসাবধানতা", - "osonkho": "অসংখ্য", - "ostacolgamI": "অস্তাচলগামী", - "ostacolgoto": "অস্তাচলগত", - "otopor": "অতঃপর", - "ounce": "আউন্স", - "out": "আউট", - "outbox": "আউটবক্স", - "outline": "আউটলাইন", - "over": "ওভার", - "overhead": "ওভারহেড", - "ovyasmoto": "অভ্যাসমত", - "oxford": "অক্সফোর্ড", - "oxygen": "অক্সিজেন", - "oyoncolon": "অয়নচলন", - "oyonkal": "অয়নকাল", - "pOkhraj": "পোখরাজ", - "paShaNmoy": "পাষাণময়", - "pack": "প্যাক", - "paediatric": "পেডিয়াট্রিক", - "paediatrics": "পেডিয়াট্রিক্স", - "page": "পেইজ", - "paglI": "পাগলী", - "pagla": "পাগলা", - "paglamO": "পাগলামো", - "paglami": "পাগলামি", - "paint": "পেইন্ট", - "painting": "পেইন্টিং", - "palTa": "পালটা", - "palTanO": "পালটানো", - "palTay": "পালটায়", - "palTe": "পালটে", - "palTi": "পালটি", - "palTiye": "পালটিয়ে", - "palki": "পালকি", - "palki-behara": "পালকি-বেহারা", - "palmtop": "পামটপ", - "palokmata": "পালকমাতা", - "palokmatar": "পালকমাতার", - "palta": "পাল্টা", - "pancayet": "পঞ্চায়েত", - "panel": "প্যানেল", - "panroto": "পানরত", - "pant": "প্যান্ট", - "panty": "প্যান্টি", - "pappUNyo": "পাপপূণ্য", - "pargana": "পরগণা", - "park": "পার্ক", - "parker": "পার্কার", - "partha": "পার্থ", - "partition": "পার্টিশন", - "party": "পার্টি", - "patel": "প্যাটেল", - "patent": "পেটেন্ট", - "pathology": "প্যাথলজি", - "patrika": "পত্রিকা", - "pause": "পজ", - "pc": "পিসি", - "pencil": "পেন্সিল", - "pentagon": "পেন্টাগন", - "perfume": "পারফিউম", - "pervez": "পার্ভেজ", - "petro": "পেট্রো", - "petrol": "পেট্রোল", - "pha^ktal": "ফাঁকতাল", - "pharmacology": "ফার্মাকোলজি", - "pharmacy": "ফার্মেসি", - "phatna": "ফাতনা", - "phelbe": "ফেলবে", - "phelben": "ফেলবেন", - "phelbi": "ফেলবি", - "phelbo": "ফেলব", - "phellam": "ফেললাম", - "phelle": "ফেললে", - "phellen": "ফেললেন", - "phelleo": "ফেললেও", - "phelli": "ফেললি", - "phello": "ফেলল", - "phinki": "ফিনকি", - "phirenni": "ফিরেননি", - "phitna": "ফিতনা", - "phone": "ফোন", - "phonetic": "ফনেটিক", - "photo": "ফটো", - "photocopy": "ফটোকপি", - "photoshop": "ফটোশপ", - "php": "পিএইচপি", - "phulbabu": "ফুলবাবু", - "phulbabura": "ফুলবাবুরা", - "phulbagan": "ফুলবাগান", - "phulkopi": "ফুলকপি", - "phuslanO": "ফুসলানো", - "phusle": "ফুসলে", - "phusliye": "ফুসলিয়ে", - "physics": "ফিজিক্‌স", - "picnic": "পিকনিক", - "picture": "পিকচার", - "piracy": "পাইরেসি", - "pirate": "পাইরেট", - "place": "প্লেস", - "plane": "প্লেন", - "plate": "প্লেট", - "play": "প্লে", - "player": "প্লেয়ার", - "plug": "প্লাগ", - "plus": "প্লাস", - "poRenni": "পড়েননি", - "poScimbongo": "পশ্চিমবঙ্গ", - "point": "পয়েন্ট", - "police": "পুলিশ", - "political": "পলিটিকাল", - "politics": "পলিটিক্স", - "poncombar": "পঞ্চমবার", - "porjonto": "পর্যন্ত", - "poroborti": "পরবর্তী", - "port": "পোর্ট", - "portable": "পোর্টেবল", - "portugal": "পর্তুগাল", - "poshcimbangla": "পশ্চিমবাংলা", - "poshcimbong": "পশ্চিমবঙ্গ", - "poshcimbongo": "পশ্চিমবঙ্গ", - "post": "পোস্ট", - "postmortem": "পোস্টমর্টেম", - "postpaid": "পোস্টপেড", - "potter": "পটার", - "pound": "পাউন্ড", - "power": "পাওয়ার", - "powerpoint": "পাওয়ারপয়েন্ট", - "prabir": "প্রবীর", - "pradesh": "প্রদেশ", - "pranab": "প্রণব", - "pratiti": "প্রতীতি", - "pregnancy": "প্রেগন্যান্সি", - "pregnant": "প্রেগন্যান্ট", - "prepaid": "প্রিপেড", - "presentation": "প্রেজেন্টেশান", - "president": "প্রেসিডেন্ট", - "press": "প্রেস", - "preview": "প্রিভিউ", - "prime": "প্রাইম", - "print": "প্রিন্ট", - "printer": "প্রিন্টার", - "prize": "প্রাইজ", - "processor": "প্রসেসর", - "product": "প্রোডাক্ট", - "production": "প্রোডাকশন", - "professional": "প্রোফেসনাল", - "professor": "প্রোফেসর", - "profile": "প্রোফাইল", - "program": "প্রোগ্রাম", - "programme": "প্রোগ্রাম", - "programming": "প্রোগ্রামিং", - "progress": "প্রোগ্রেস", - "project": "প্রোজেক্ট", - "projector": "প্রোজেক্টর", - "prokaSman": "প্রকাশমান", - "prokashman": "প্রকাশমান", - "properties": "প্রপার্টিজ", - "property": "প্রপার্টি", - "prothombar": "প্রথমবার", - "prottasha": "প্রত্যাশা", - "prottutponnomoti": "প্রত্যুৎপন্নমতি", - "proyOjonmafik": "প্রয়োজনমাফিক", - "proyOjonmaphik": "প্রয়োজনমাফিক", - "proyOjonmoto": "প্রয়োজনমত", - "proyojon": "প্রয়োজন", - "publish": "পাবলিশ", - "publisher": "পাবলিশার", - "pulse": "পাল্‌স", - "qB-)": "qB-)", - "rObbar": "রোববার", - "rOgmukti": "রোগমুক্তি", - "rOgmukto": "রোগমুক্ত", - "race": "রেস", - "racing": "রেসিং", - "rack": "র‍্যাক", - "racket": "র‍্যাকেট", - "radio": "রেডিও", - "ragging": "র‍্যাগিং", - "rail": "রেল", - "railline": "রেললাইন", - "railway": "রেলওয়ে", - "railways": "রেলওয়েজ", - "rajarshi": "রাজর্ষি", - "rajat": "রজত", - "rajpat": "রাজপাট", - "rakhenni": "রাখেননি", - "ranabir": "রণবীর", - "rape": "রেপ", - "rashtrapati": "রাষ্ট্রপতি", - "rastrapati": "রাষ্ট্রপতি", - "raw": "র'", - "reader": "রিডার", - "recent": "রিসেন্ট", - "reception": "রিসেপশান", - "receptionist": "রিসেপশানিস্ট", - "recipe": "রেসিপি", - "recycle": "রিসাইকেল", - "referee": "রেফারী", - "refresh": "রিফ্রেশ", - "register": "রেজিস্টার", - "registration": "রেজিস্ট্রেশান", - "relgaRi": "রেলগাড়ি", - "reliance": "রিলায়েন্স", - "rellain": "রেললাইন", - "relpoth": "রেলপথ", - "relpothe": "রেলপথে", - "relpother": "রেলপথের", - "remote": "রিমোট", - "remove": "রিমুভ", - "repair": "রিপেয়ার", - "replace": "রিপ্লেস", - "resize": "রিসাইজ", - "resolution": "রেজোলিউশান", - "restaurant": "রেস্টুরেন্ট", - "rhombus": "রম্বস", - "richard": "রিচার্ড", - "right": "রাইট", - "rights": "রাইট্‌স", - "ringtone": "রিংটোন", - "rituparna": "ঋতুপর্ণা", - "rizwanur": "রিজওয়ানুর", - "robot": "রোবট", - "rodon": "রোদন", - "rohman": "রহমান", - "ronaldinho": "রোনাল্ডিনহো", - "ronaldo": "রোনাল্ডো", - "rong": "রঙ", - "ronger": "রঙের", - "route": "রুট", - "row": "রো", - "rriNgrahI": "ঋণগ্রাহী", - "rriNgrohIta": "ঋণগ্রহীতা", - "rriNgrohoN": "ঋণগ্রহণ", - "rriNgrostho": "ঋণগ্রস্থ", - "rriNmOcon": "ঋণমোচন", - "rriNmukti": "ঋণমুক্তি", - "rriNmukto": "ঋণমুক্ত", - "rss": "আর.এস.এস", - "rubber": "রাবার", - "rugby": "রাগবি", - "rumpa": "রূম্পা", - "rupam": "রূপম", - "russia": "রাশিয়া", - "sIlmOhor": "সীলমোহর", - "sOmbar": "সোমবার", - "sabdhan": "সাবধান", - "sabdhanI": "সাবধানী", - "sabdhanota": "সাবধানতা", - "sabyasaci": "সব্যসাচী", - "saint": "সেন্ট", - "saltlake": "সল্টলেক", - "samla": "সামলা", - "samlan": "সামলান", - "samlanO": "সামলানো", - "samlao": "সামলাও", - "samna": "সামনা", - "samna-samni": "সামনা-সামনি", - "samnasamni": "সামনাসামনি", - "samne": "সামনে", - "samni": "সামনি", - "samsung": "স্যামসাঙ", - "sanitary": "স্যানিটারি", - "sanjana": "সঞ্জনা", - "saptarshi": "সপ্তর্ষি", - "saraswati": "সরস্বতী", - "saswata": "শাশ্বত", - "satej": "সতেজ", - "sauce": "সস", - "saudi": "সৌদি", - "saurav": "সৌরভ", - "save": "সেভ", - "scanner": "স্ক্যানার", - "scholar": "স্কলার", - "school": "স্কুল", - "science": "সায়েন্স", - "scooter": "স্কুটার", - "scotch": "স্কচ", - "scotland": "স্কটল্যান্ড", - "scrap": "স্ক্র্যাপ", - "screen": "স্ক্রীন", - "scroll": "স্ক্রল", - "scrollbar": "স্ক্রলবার", - "sealda": "শিয়ালদা", - "sealdah": "শিয়ালদহ", - "search": "সার্চ", - "sekhetre": "সেক্ষেত্রে", - "select": "সিলেক্ট", - "semi-final": "সেমি-ফাইনাল", - "sengupta": "সেনগুপ্ত", - "september": "সেপ্টেম্বর", - "serial": "সিরিয়াল", - "series": "সিরিজ", - "service": "সার্ভিস", - "services": "সার্ভিসেস", - "session": "সেশান", - "set": "সেট", - "setting": "সেটিং", - "settings": "সেটিংস্‌", - "sexy": "সেক্সি", - "shOnni": "শোননি", - "shampoo": "শ্যাম্পু", - "shanghai": "সাংহাই", - "shankar": "শঙ্কর", - "shantiniketan": "শান্তিনিকেতন", - "shapla": "শাপলা", - "sharatchandra": "শরৎচন্দ্র", - "share": "শেয়ার", - "sharma": "শর্মা", - "shift": "শিফট", - "shirt": "শার্ট", - "shobdaho": "শবদাহ", - "shobdahok": "শবদাহক", - "shobdahon": "শবদাহন", - "shobdeho": "শবদেহ", - "shock": "শক", - "shocker": "শকার", - "shoe": "শু", - "shopping": "শপিং", - "shortcut": "শর্টকাট", - "shounak": "শৌনক", - "show": "শো", - "shreyasee": "শ্রেয়সী", - "shreyasi": "শ্রেয়সী", - "shunno": "শুন্য", - "shunnota": "শুন্যতা", - "shuntam": "শুনতাম", - "shunte": "শুনতে", - "shunten": "শুনতেন", - "shunti": "শুনতি", - "siddhartha": "সিদ্ধার্থ", - "siemens": "সিমেন্স", - "sign": "সাইন", - "signature": "সিগনেচার", - "siliguri": "শিলিগুড়ি", - "simanto": "সীমান্ত", - "singapore": "সিঙ্গাপুর", - "singh": "সিংহ", - "sir": "স্যার", - "site": "সাইট", - "size": "সাইজ", - "skirt": "স্কার্ট", - "slide": "স্লাইড", - "small": "স্মল", - "smart": "স্মার্ট", - "sms": "এসএমএস", - "sobji": "সবজি", - "sobkhetre": "সবক্ষেত্রে", - "sobkhetro": "সবক্ষেত্র", - "soft": "সফট", - "software": "সফটওয়্যার", - "soldier": "সোলজার", - "somadhanTi": "সমাধানটি", - "somak": "সোমক", - "somen": "সোমেন", - "sommanjonok": "সম্মানজনক", - "sommankor": "সম্মানকর", - "somrat": "সম্রাট", - "sonali": "সোনালি", - "sonar": "সোনার", - "sondha": "সন্ধ্যা", - "sondhamaloti": "সন্ধ্যামালতি", - "sony": "সনি", - "soptombar": "সপ্তমবার", - "sot": "সৎ", - "sotti": "সত্যি", - "sotto": "সত্য", - "soumya": "সৌম্য", - "soumyajyoti": "সৌম্যজ্যোতি", - "sound": "সাউন্ড", - "source": "সোর্স", - "south": "সাউথ", - "space": "স্পেস", - "speaker": "স্পিকার", - "spider": "স্পাইডার", - "sports": "স্পোর্টস", - "spy": "স্পাই", - "spycam": "স্পাইক্যাম", - "spyware": "স্পাইওয়্যার", - "square": "স্কোয়ার", - "sri": "শ্রী", - "srijani": "শ্রীজনী", - "srikanta": "শ্রীকান্ত", - "srilanka": "শ্রীলঙ্কা", - "sriman": "শ্রীমান", - "srimati": "শ্রীমতি", - "srizon": "সৃজন", - "stamp": "স্ট্যাম্প", - "stand": "স্ট্যান্ড", - "standard": "স্ট্যান্ডার্ড", - "star": "স্টার", - "start": "স্টার্ট", - "states": "স্টেট্‌স", - "status": "স্ট্যাটাস", - "steam": "স্টিম", - "steering": "স্টিয়ারিং", - "sthankalpatro": "স্থানকালপাত্র", - "stick": "স্টিক", - "stock": "স্টক", - "stool": "স্টুল", - "street": "স্ট্রিট", - "string": "স্ট্রিং", - "stupid": "স্টুপিড", - "style": "স্টাইল", - "subarna": "সুবর্ণা", - "subhodip": "শুভদীপ", - "subject": "সাবজেক্ট", - "suchitra": "সুচিত্রা", - "sudoku": "সুডোকু", - "suitcase": "সুটকেস", - "suite": "স্যুট", - "suman": "সুমন", - "sumana": "সুমনা", - "superman": "সুপারম্যান", - "support": "সাপোর্ট", - "surf": "সার্ফ", - "surgery": "সার্জারি", - "swarnendu": "স্বর্নেন্দু", - "sweater": "সোয়েটার", - "sweety": "সুইটি", - "swiss": "সুইস", - "switch": "সুইচ", - "sydney": "সিডনি", - "syria": "সিরিয়া", - "system": "সিস্টেম", - "tOmra": "তোমরা", - "tOmrai": "তোমরাই", - "tOmrao": "তোমরাও", - "tOmratO": "তোমরাতো", - "tab": "ট্যাব", - "tabla": "তবলা", - "table": "টেবিল", - "tagore": "টেগোর", - "tajmahal": "তাজমহল", - "talgach": "তালগাছ", - "talk": "টক", - "talkana": "তালকানা", - "talmafik": "তালমাফিক", - "talmaphik": "তালমাফিক", - "talmoto": "তালমত", - "talpata": "তালপাতা", - "talpatar": "তালপাতার", - "talpatay": "তালপাতায়", - "talpotre": "তালপত্রে", - "talpotrer": "তালপত্রের", - "talpotro": "তালপত্র", - "tamali": "তমালি", - "tank": "ট্যাঙ্ক", - "tarzan": "টারজান", - "task": "টাস্ক", - "taskbar": "টাস্কবার", - "tata": "টাটা", - "tax": "ট্যাক্স", - "taxi": "ট্যাক্সি", - "team": "টিম", - "tech": "টেক", - "technician": "টেকনিশিয়ান", - "technology": "টেকনোলজি", - "techpointer": "টেকপয়েন্টার", - "telephone": "টেলিফোন", - "telescope": "টেলিস্কোপ", - "teletalk": "টেলিটক", - "television": "টেলিভিশান", - "temni": "তেমনি", - "temnibhabe": "তেমনিভাবে", - "temnikore": "তেমনিকরে", - "temnivabe": "তেমনিভাবে", - "temporary": "টেম্পোরারি", - "tennis": "টেনিস", - "testimonial": "টেস্টিমোনিয়াল", - "text": "টেক্সট", - "textbox": "টেক্সটবক্স", - "textile": "টেক্সটাইল", - "textmate": "টেক্সটমেট", - "tft": "টিএফটি", - "thakenni": "থাকেননি", - "thaklam": "থাকলাম", - "thakle": "থাকলে", - "thaklo": "থাকল", - "thaktam": "থাকতাম", - "thakte": "থাকতে", - "thakten": "থাকতেন", - "thakti": "থাকতি", - "thakur": "ঠাকুর", - "theater": "থিয়েটার", - "threat": "থ্রেট", - "tilottoma": "তিলোত্তমা", - "time": "টাইম", - "times": "টাইম্‌স", - "tinTa": "তিনটা", - "tinTaka": "তিনটাকা", - "tinTane": "তিনটানে", - "tinTanei": "তিনটানেই", - "tinTi": "তিনটি", - "tingun": "তিনগুন", - "tinjon": "তিনজন", - "tinjona": "তিনজনা", - "tinkal": "তিনকাল", - "tinrokom": "তিনরকম", - "tintin": "টিনটিন", - "titanic": "টাইটানিক", - "tobla": "তবলা", - "tohfa": "তোহফা", - "toirI": "তৈরী", - "tokhonkar": "তখনকার", - "toklif": "তকলিফ", - "tokliph": "তকলিফ", - "tokma": "তকমা", - "toktok": "তকতক", - "toktoke": "তকতকে", - "tokyo": "টোকিয়ো", - "tollygunge": "টালিগঞ্জ", - "tolpeT": "তলপেট", - "tomato": "টমেটো", - "tonic": "টনিক", - "tool": "টুল", - "toolbar": "টুলবার", - "tools": "টুলস", - "torolbuddhi": "তরলবুদ্ধি", - "torolmoti": "তরলমতি", - "torolprokrriti": "তরলপ্রকৃতি", - "torrent": "টরেন্ট", - "total": "টোটাল", - "touchpad": "টাচপ্যাড", - "touchscreen": "টাচস্ক্রীন", - "toufik": "তৌফিক", - "tourism": "ট্যুরিজ্‌ম", - "tourist": "ট্যুরিস্ট", - "tower": "টাওয়ার", - "town": "টাউন", - "toyota": "টয়োটা", - "tractor": "ট্র্যাক্টর", - "trademark": "ট্রেডমার্ক", - "traffic": "ট্রাফিক", - "train": "ট্রেন", - "trapezium": "ট্রাপিজিয়াম", - "tray": "ট্রে", - "trinamul": "তৃণমূল", - "trouser": "ট্রাউজার", - "truck": "ট্রাক", - "tsunami": "সুনামি", - "tube": "টিউব", - "tubelight": "টিউবলাইট", - "tumpa": "টুম্পা", - "tv": "টিভি", - "twitter": "টুইটার", - "type": "টাইপ", - "typing": "টাইপিং", - "tyre": "টায়ার", - "uRonconDI": "উড়নচন্ডী", - "uShno": "উষ্ণ", - "uThenni": "উঠেননি", - "uae": "ইউএই", - "udbayI": "উদ্বায়ী", - "udbek": "উদ্বেক", - "udbigno": "উদ্বিগ্ন", - "uddOg": "উদ্যোগ", - "ujjol": "উজ্জ্বল", - "ulTO": "উলটো", - "ulTOpoth": "উলটোপথ", - "ulTOroth": "উলটোরথ", - "ulTa": "উলটা", - "ulTanO": "উলটানো", - "ulTapalTa": "উলটাপালটা", - "ulTapiTh": "উলটাপিঠ", - "ulTapiThe": "উলটাপিঠে", - "ulTaroth": "উলটারথ", - "ulTarothe": "উলটারথে", - "ulTe": "উলটে", - "under": "আন্ডার", - "underpant": "আন্ডারপ্যান্ট", - "unibijoy": "ইউনিবিজয়", - "unicode": "ইউনিকোড", - "uninstall": "আনইন্সটল", - "union": "ইউনিয়ন", - "unit": "ইউনিট", - "united": "ইউনাইটেড", - "university": "ইউনিভার্সিটি", - "update": "আপডেট", - "uponyaskar": "উপন্যাসকার", - "uponyaslekhok": "উপন্যাসলেখক", - "uponyasrocoyita": "উপন্যাসরচয়িতা", - "ups": "ইউপিএস", - "urine": "ইউরিন", - "usb": "ইউএসবি", - "user": "ইউজার", - "utkoT": "উৎকট", - "utrai": "উতরাই", - "utralO": "উতরালো", - "utralam": "উতরালাম", - "utralen": "উতরালেন", - "utrali": "উতরালি", - "utranO": "উতরানো", - "utse": "উৎসে", - "utser": "উৎসের", - "utso": "উৎস", - "uttamkumar": "উত্তমকুমার", - "v.v": "v.v", - "valobastam": "ভালবাসতাম", - "valobaste": "ভালবাসতে", - "valobasten": "ভালবাসতেন", - "valobasti": "ভালবাসতি", - "valobasto": "ভালবাসত", - "vasha": "ভাষা", - "version": "ভার্সন", - "victoria": "ভিক্টোরিয়া", - "video": "ভিডিও", - "view": "ভিউ", - "violin": "ভায়োলিন", - "virtual": "ভার্চুয়াল", - "vodafone": "ভোডাফোন", - "volume": "ভলিউম", - "voumik": "ভৌমিক", - "wait": "ওয়েট", - "wallpaper": "ওয়ালপেপার", - "warming": "ওয়ার্মিং", - "warning": "ওয়ার্নিং", - "webcam": "ওয়েবক্যাম", - "webmaster": "ওয়েবমাস্টার", - "webpage": "ওয়েবপেজ", - "website": "ওয়েবসাইট", - "weight": "ওয়েট", - "wellington": "ওয়েলিংটন", - "west": "ওয়েস্ট", - "wheel": "হুইল", - "whisky": "হুইস্কি", - "wifi": "ওয়াইফাই", - "wiki": "উইকি", - "wikipedia": "উইকিপেডিয়া", - "winamp": "উইনঅ্যাম্প", - "window": "উইন্ডো", - "windows": "উইন্ডোজ", - "windscreen": "উইন্ডস্ক্রীন", - "wine": "ওয়াইন", - "wipro": "উইপ্রো", - "wireless": "ওয়ারলেস", - "with": "উইথ", - "word": "ওয়ার্ড", - "wordpad": "ওয়ার্ডপ্যাড", - "wordpress": "ওয়ার্ডপ্রেস", - "world": "ওয়ার্ল্ড", - "wow": "ওয়াও", - "writer": "রাইটার", - "x-(": "X-(", - "xD": "xD", - "xcode": "এক্সকোড", - "xerox": "জেরক্স", - "xhtml": "এক্সএইচটিএমএল", - "xml": "এক্সএমএল", - "xp": "এক্সপি", - "yard": "ইয়ার্ড", - "year": "ইয়ার", - "youtube": "ইউটিউব", - "zOgandar": "যোগানদার", - "zOgandarI": "যোগানদারী", - "zaman": "জামান", - "zanni": "যাননি", - "zemni": "যেমনি", - "zemnibhabe": "যেমনিভাবে", - "zemnikore": "যেমনিকরে", - "zemnivabe": "যেমনিভাবে", - "zia": "জিয়া", - "zitu": "জিতু", - "zokhonkar": "যখনকার", - "zokhontokhon": "যখনতখন", - "zompUrI": "যমপূরী", - "~:>": "~:>", - "~O)": "~O)", - "~X(": "~X(" - } -} +{ + "autocorrect":{ + "#:-S":"#:-S", + "#-o":"#-o", + "$-)":"$-)", + "&":"O", + "(:|":"(:|", + "*)":"*)", + "*-:)":"*-:)", + ":!!":":!!", + ":-\"":":-\"", + ":\">":":\">", + ":#":":#", + ":-#":":-#", + ":-$":":-$", + ":&":":&", + ":-&":":-&", + ":(":":(", + ":'(":":'(", + ":-(":":-(", + ":((":":((", + ":(:)":":(:)", + ":(|)":":(|)", + ":)":":)", + ":-)":":-)", + ":))":":))", + ":)]":":)]", + ":)~":":)~", + ":)>-":":)>-", + ":-)>....":":-)>....", + ":*":":*", + ":-*":":-*", + ":\/":":\/", + ":-\/":":-\/", + ":-?":":-?", + ":-??":":-??", + ":-@":":-@", + ":@)":":@)", + ":[":":[", + ":\\":":\\", + ":]":":]", + ":^)":":^)", + ":^o":":^o", + ":{":":{", + ":|":":|", + ":}":":}", + ":\u00ed(":":\u00ed(", + ":<":":<", + ":-<":":-<", + ":>":":>", + ":3":":3", + ":-9":":-9", + ":ar!":":ar!", + ":b":":b", + ":-b":":-b", + ":-B":":-B", + ":-bd":":-bd", + ":bz":":bz", + ":c":":c", + ":-c":":-c", + ":c)":":c)", + ":D":":D", + ":-D":":-D", + ":-h":":-h", + ":-j":":-j", + ":-L":":-L", + ":O":":O", + ":-O":":-O", + ":o)":":o)", + ":O)":":O)", + ":o3":":o3", + ":p":":p", + ":-p":":-p", + ":P":":P", + ":-P":":-P", + ":-q":":-q", + ":S":":S", + ":-S":":-S", + ":-SS":":-SS", + ":-t":":-t", + ":u":":u", + ":-w":":-w", + ":x":":x", + ":X":":X", + ":-X":":-X", + ";(":";(", + ";)":";)", + ";-)":";-)", + ";))":";))", + ";*(":";*(", + ";]":";]", + ";^)":";^)", + ";D":";D", + ";o_o;":";o_o;", + "@}-;-'---":"@}-;-'---", + "[:|]":"[:|]", + "[-O<":"[-O<", + "[-X":"[-X", + "\\,,\/":"\\,,\/", + "\\:D\/":"\\:D\/", + "\\m\/":"\\m\/", + "\\o\/":"\\o\/", + "^#(^":"^#(^", + "^:)^":"^:)^", + "~:>":"~:>", + "~O)":"~O)", + "~X(":"~X(", + "<):)":"<):)", + "<\/3":"<\/3", + "<:-P":"<:-P", + "<=3":"<=3", + "<=8":"<=8", + "<3":"<3", + "<333":"<333", + "=:)":"=:)", + "=3":"=3", + "=D":"=D", + "=D>":"=D>", + "=p":"=p", + "=P":"=P", + "=P~":"=P~", + ">.<":">.<", + ">:(":">:(", + ">:-(":">:-(", + ">:)":">:)", + ">:-)":">:-)", + ">:\/":">:\/", + ">:D<":">:D<", + ">:P":">:P", + ">;)":">;)", + "0:3":"0:3", + "0_o":"0_o", + "0-0":"0-0", + "0w0":"0w0", + "10th":"10m", + "1st":"1m", + "2nd":"2y", + "3:-O":"3:-O", + "3rd":"3y", + "4th":"4rrth", + "5th":"5m", + "6th":"6ShTh", + "7th":"7m", + "8)":"8)", + "8-)":"8-)", + "8-|":"8-|", + "8-}":"8-}", + "8->":"8->", + "8D":"8D", + "8O":"8O", + "8th":"8m", + "8-X":"8-X", + "9th":"9m", + "abdomen":"oZabDOmen", + "academy":"oZakaDemi", + "access":"oZaxes", + "account":"oZakaunT", + "acer":"esar", + "acharya":"acarrz", + "action":"oZakSan", + "active":"oZakTiv", + "activity":"oZakTiviTi", + "adapter":"oZaDapTar", + "add":"oZaD", + "aditya":"adity", + "adjust":"oZaDjasT", + "adobe":"oZaDOb", + "adrita":"adrrita", + "adsense":"aZDsens", + "advertisement":"oZaDvarrTaijmenT", + "adwords":"oZaD`OyarrDs", + "aeroplane":"erOplen", + "africa":"afrika", + "aids":"eiDs", + "aingoto":"ain`goto", + "ainjIbI":"ain`jIbI", + "ainkanun":"ain`kanun", + "ainmafik":"ain`mafik", + "ainmaphik":"ain`maphik", + "ainmontrI":"ain`montrI", + "ainmontroNaloy":"ain`montroNaloy", + "ainmote":"ain`mote", + "ainmoto":"ain`moto", + "ainsocib":"ain`socib", + "ainsommoto":"ain`sommoto", + "ainsongoto":"ain`songoto", + "airport":"eyarpOrrT", + "airtel":"eyarTel", + "airway":"ear`we", + "airways":"ear`wej", + "akbar":"akbor", + "akkelguRum":"akkel`guRum", + "aktel":"ekoTel", + "alarm":"aZlarrm", + "album":"oZal`bam", + "algOch":"al`gOch", + "almari":"al`mari", + "alOkmala":"alOk`mala", + "alOkmoy":"alOk`moy", + "alOksojja":"alOk`sojja", + "alOksongket":"alOk`songket", + "alOkstombho":"alOk`stombho", + "alOkstomvo":"alOk`stomvo", + "alphabet":"oZalfabeT", + "alpin":"al`pin", + "alt":"olT", + "amartya":"omorrtyo", + "america":"amerika", + "american":"amerikan", + "amrita":"omrrita", + "ananda":"anond", + "anandabajar":"anondobajar", + "anandabazar":"anondobajar", + "anatomy":"oZanaTomi", + "and":"oZanD", + "andhra":"ondhro", + "angle":"oZangel", + "anirban":"onirrbaN", + "aniruddha":"oniruddho", + "antenna":"oZanTena", + "antivirus":"aZnTivairas", + "anurima":"oNurima", + "apna":"ap`na", + "apnaapni":"ap`naap`ni", + "aponkar":"apon`kar", + "app":"oZap", + "apple":"oZapol", + "application":"oZaplikeSan", + "apply":"aZplai", + "april":"epril", + "arab":"arb", + "arabia":"arob", + "archive":"arrkaiv", + "argentina":"arrjenTina", + "army":"arrmi", + "article":"arrTikel", + "artist":"arrTisT", + "asbenna":"asben`na", + "asenni":"asen`ni", + "ashraful":"ash`raful", + "asia":"eSia", + "aslam":"as`lam", + "asle":"as`le", + "aslen":"as`len", + "asli":"as`li", + "asma":"as`ma", + "asman":"as`man", + "asmanI":"as`manI", + "assistant":"oZasisTyanT", + "association":"oZasOsiyeSan", + "atm":"eTiem", + "audio":"oDiO", + "auditorium":"oDiTOriam", + "august":"ogasT", + "australia":"osTreliya", + "authority":"othoriTi", + "auto":"oTO", + "automatic":"oTOmeTik", + "automobile":"oTOmObail", + "autopsy":"oTOpsi", + "avast":"oZavasT", + "avenue":"oZavenyu", + "avro":"ovro", + "avroo":"ovroO", + "b-(":"b-(", + "B(":"B(", + "B)":"B)", + "B-)":"B-)", + "babohar":"bybohar", + "back":"byak", + "background":"byakgraunD", + "backspace":"byak`spes", + "backup":"byak`ap", + "badminton":"byaDminTon", + "baksongzom":"bak`songzom", + "baksongzomI":"bak`songzomI", + "baksorrboswo":"bak`sorrboswo", + "ballot":"byaloT", + "ballygunge":"baligonj", + "bamfront":"bam`fronT", + "bampash":"bam`pash", + "banasree":"bonSrI", + "banerjee":"byanarrji", + "bank":"byangk", + "baseball":"bes,,bol", + "basu":"bosu", + "basundhara":"bosundhora", + "battery":"byaTari", + "beat":"biT", + "begum":"begom", + "bengal":"bengol", + "bengali":"bengoli", + "bharat":"bharot", + "bhattacharya":"voTTacarrz", + "bhowmik":"vOUmik", + "bicycle":"baisaikel", + "bidyut":"bidyut``", + "bikkhato":"bikhyato", + "bill":"bil", + "biochemistry":"bayOkemisTri", + "biology":"bayOlji", + "birla":"biRla", + "birthday":"barrthDe", + "bismilla":"bis`milla", + "bismillah":"bis`millah", + "bismillahir":"bis`millahir", + "bit":"biT", + "blackberry":"blyakberi", + "bloc":"blok", + "block":"blok", + "blogger":"blogar", + "blouse":"blauj", + "blue":"blu", + "bluetooth":"bluTuth", + "board":"bOrrD", + "bodmaish":"bod`maish", + "bodmaishi":"bod`maishi", + "bodmash":"bod`mash", + "bodmashi":"bod`mashi", + "bodmayeshi":"bod`mayeshi", + "bodmejaj":"bod`mejaj", + "bodmejajI":"bod`mejajI", + "bodrag":"bod`rag", + "bodragI":"bod`ragI", + "bodrul":"bod`rul", + "bogra":"boguRa", + "bolbona":"bol`bona", + "bolenni":"bolen`ni", + "bollywood":"boliuD", + "bonna":"bonya", + "boolean":"bulian", + "bosenni":"bosen`ni", + "botany":"bOTani", + "brake":"brek", + "brazil":"brajil", + "brb":"ekTu pore aschi", + "break":"brek", + "britain":"briTen", + "british":"briTiS", + "britney":"briTni", + "broadband":"broDbyanD", + "browser":"braujar", + "brush":"brash", + "bsc":"bi`es`si", + "btv":"biTivi", + "buddha":"buddho", + "buddhadeb":"buddhodeb", + "building":"bilDing", + "bulb":"balb", + "bullet":"buleT", + "bus":"bas", + "business":"bijnes", + "button":"baTon", + "buzz":"baj", + "byarrtho":"by`rrtho", + "byay":"by`Y", + "byrrth":"by`rrth", + "byrrthta":"by`rrthta", + "byrrthtay":"by`rrthtay", + "byte":"baiT", + "byy":"by`Y", + "C:":"C:", + "cable":"keb,,l", + "cadre":"kyaDar", + "cake":"kek", + "cakladar":"cak`ladar", + "cakranI":"cak`ranI", + "cakri":"cak`ri", + "cakribakri":"cak`ribak`ri", + "cakri-bakri":"cak`ri-bak`ri", + "cakrihIn":"cak`rihIn", + "calculator":"kyal`kuleTor", + "calcutta":"kyal`kaTa", + "calendar":"kyalenDar", + "calkata":"kol`kata", + "calkumRa":"cal`kumRa", + "calkumRO":"cal`kumRO", + "call":"kol", + "camera":"kyamera", + "canada":"kanaDa", + "cancel":"kyan`sel", + "canon":"kyanon", + "canvas":"kyanvas", + "capacity":"kyapasiTi", + "capgeminee":"kyapjemini", + "capisna":"capis`na", + "capisne":"capis`ne", + "capital":"kyapiTal", + "caplam":"cap`lam", + "caple":"cap`le", + "caplei":"cap`lei", + "caplen":"cap`len", + "caplo":"cap`lo", + "caplO":"cap`lO", + "caps":"kyap,,s", + "captam":"cap`tam", + "capte":"cap`te", + "capten":"cap`ten", + "capti":"cap`ti", + "captis":"cap`tis", + "capture":"kyapcar", + "card":"karrD", + "cargo":"karrgO", + "carrier":"kyariyar", + "carry":"kyari", + "cartoon":"karrTun", + "cassette":"kyaseT", + "castro":"kastrO", + "catalog":"kyaTalog", + "catalogue":"kyaTalog", + "cd":"siDi", + "cell":"sel", + "cent":"senT", + "century":"sencuri", + "certificate":"sarrTifikeT", + "certification":"sarrTifikeSan", + "chair":"ceyar", + "chairman":"ceyarmyan", + "chalk":"cok", + "chamber":"cembar", + "chandan":"condon", + "channel":"cyanel", + "character":"kyarekTar", + "charge":"carrj", + "charger":"carrjar", + "chatterjee":"cyaTarrji", + "checkpost":"cekpOsT", + "check-post":"cekpOsT", + "chemical":"kemikyal", + "chemistry":"kemisTri", + "chennai":"cennai", + "chicken":"ciken", + "china":"cayna", + "chinese":"cainIj", + "chittagong":"cTrgram", + "chokkagoj":"chok`kagoj", + "chokkaTa":"chok`kaTa", + "chokkaTO":"chok", + "chokkaTun":"chok", + "chrome":"krOm", + "cikmik":"cik`mik", + "cikmike":"cik`mike", + "cimney":"cim`ni", + "cinema":"sinema", + "circle":"sarrkel", + "circular":"sarrkular", + "circus":"sarrkas", + "city":"siTi", + "citycell":"siTisel", + "civil":"sivil", + "class":"klas", + "clear":"kliyar", + "click":"klik", + "clip":"klip", + "clipboard":"klipbOrrD", + "close":"klOj", + "close-up":"klOs-ap", + "club":"klab", + "cm":"semi.`", + "coach":"kOc", + "coal":"kOl", + "code":"kOD", + "coin":"koyen", + "college":"kolej", + "comilla":"kumilla", + "comment":"komenT", + "commerce":"komarrs", + "commercial":"komarrshial", + "commission":"komish`n", + "committee":"komiTi", + "community":"komiuniTi", + "compaq":"kom`pyak", + "complain":"kom`plein", + "computer":"kompiuTar", + "computing":"kompiuTing", + "conductor":"konDakTor", + "conference":"konfarens", + "configuration":"konfigareshon", + "congress":"kong`gres", + "consortium":"konsorrTiam", + "control":"konTrOl", + "convert":"konvarrT", + "converter":"konvarrTar", + "cookie":"kuki", + "copy":"kpi", + "copyright":"kpiraiT", + "correct":"karekT", + "council":"kaunsil", + "courier":"kZuriyar", + "court":"kOrrT", + "courtship":"kOrrTSip", + "coxsbajar":"koxbajar", + "cpi":"sipi`ai", + "cpm":"sipiem", + "crack":"kryak", + "cream":"krim", + "credit":"kreDiT", + "crest":"kresT", + "cricket":"krikeT", + "cricketer":"krikeTar", + "crime":"kraim", + "criminal":"kriminal", + "cross":"kros", + "crystal":"krisTal", + "css":"sies`es", + "cuba":"kiuba", + "current":"karenT", + "cursor":"karrsor", + "custom":"kasTm", + "cycle":"saikel", + "d'-'":"d'-'", + "D:":"D:", + "d:-)":"d:-)", + "D:<":"D:<", + "D-:<":"D-:<", + "D;":"D;", + "d'_'":"d'_'", + "d'_'b":"d'_'b", + "D<":"D<", + "D=":"D=", + "D8":"D8", + "dairy":"Deyari", + "darjeeling":"darrjiling", + "dashboard":"DyaSbOrrD", + "d'-'b":"d'-'b", + "dead":"DeD", + "debbhokti":"deb`bhokti", + "debbhokto":"deb`bhokto", + "debit":"DebiT", + "debug":"Dibag", + "december":"Disembor", + "default":"DifolT", + "define":"Difain", + "definite":"DefiniT", + "definitely":"DefineTli", + "definition":"DefineSan", + "defragment":"Difryag`menT", + "defragmenter":"Difryag`menTar", + "degree":"Digri", + "delete":"DiliT", + "delhi":"dilli", + "delivery":"Delivari", + "dell":"Del", + "dentist":"DenTisT", + "design":"Dijain", + "designer":"Dijainar", + "desktop":"DeksTp", + "detective":"DiTekTiv", + "developar":"Developar", + "developer":"Developar", + "development":"DevelopmenT", + "device":"Divais", + "dhaka":"Dhaka", + "dhUmpan":"dhUm`pan", + "dhUmpayI":"dhUm`payI", + "dialog":"Daylog", + "dialogue":"Daylog", + "diamond":"DaymonD", + "diary":"Dayeri", + "dictionary":"Dik`shonarI", + "diesel":"Dijel", + "digicam":"Dijikyam", + "digit":"DijiT", + "digital":"DijiTal", + "dingoto":"din`goto", + "dinkal":"din`kal", + "dinman":"din`man", + "dinmane":"din`mane", + "dinmojur":"din`mojur", + "dinner":"Dinar", + "diplay":"Disople", + "director":"DirekTor", + "directx":"DirekT-x", + "disk":"Disk", + "display":"Dis`ple", + "dissection":"DisekSan", + "dj":"Dije", + "djuice":"Dijyus", + "doctor":"Daktar", + "document":"DokumenT", + "documents":"DokumenTs", + "Dogmog":"Dog`mog", + "dOkandar":"dOkan`dar", + "dOkandari":"dOkan`dari", + "dOkla":"dOk`la", + "dollar":"Dolar", + "domain":"DOmein", + "dongle":"Dongol", + "doshombar":"doshom`bar", + "doSombar":"doSom`bar", + "download":"DaunlOD", + "dr.":"dr.", + "Dr.":"Dr.", + "DR.":"DR.", + "draft":"Draf,,T", + "drawing":"Droying", + "dreamweaver":"Drim`wevar", + "drive":"Draiv", + "driver":"Draivar", + "drug":"Drag", + "dur":"dUr", + "durga":"durrga", + "dutch":"Dac", + "dutt":"dotto", + "dutta":"dotto", + "dvd":"DiviDi", + "DX":"DX", + "earth":"arrth", + "east":"isT", + "easy":"iji", + "edit":"eDiT", + "edition":"eDishon", + "editor":"eDiTor", + "eid":"Id", + "einstein":"ainsTain", + "ekhonkar":"ekhon`kar", + "ekkal":"ek`kal", + "ekkalIn":"ek`kalIn", + "ekkendrIyo":"ek`kendrIyo", + "ekkotha":"ek`kotha", + "ekla":"ek`la", + "ekmatra":"ek`matra", + "ekmatro":"ek`matro", + "ekmatrrik":"ek`matrrik", + "ekmon":"ek`mon", + "ekmona":"ek`mona", + "ekmot":"ek`mot", + "ekmotalombI":"ek`motalombI", + "ekmukh":"ek`mukh", + "ekmukhI":"ek`mukhI", + "ekmukhIkoroN":"ek`mukhIkoroN", + "ekmukhO":"ek`mukhO", + "ekrob":"ek`rob", + "ekrOkha":"ek`rOkha", + "ekrokom":"ek`rokom", + "ekrokombhabe":"ek`rokom`bhabe", + "ekrokomvabe":"ek`rokom`vabe", + "ekrotti":"ek`rotti", + "ekrUp":"ek`rUp", + "eksathe":"ek`sathe", + "eksonge":"ek`songe", + "eksthan":"ek`sthan", + "ekTa":"ek`Ta", + "ekTaka":"ek`Taka", + "ektal":"ek`tal", + "ektala":"ek`tala", + "ekTana":"ek`Tana", + "ekTane":"ek`Tane", + "ekTao":"ek`Tao", + "ektara":"ek`tara", + "ekTi":"ek`Ti", + "ektil":"ek`til", + "ektola":"ek`tola", + "ektolay":"ek`tolay", + "ektomo":"ek`tomo", + "ektontrI":"ek`tontrI", + "ektontro":"ek`tontro", + "ektoro":"ek`toro", + "ektorofa":"ek`torofa", + "ektoropha":"ek`toropha", + "ekTu":"ek`Tu", + "ekTuk":"ek`Tuk", + "ekTuku":"ek`Tuku", + "election":"ilekSan", + "electric":"ilekTrik", + "electrical":"ilekTrikyal", + "electricity":"ilekTrisiTi", + "electronic":"ilekTronik", + "electronics":"ilekTroniks", + "email":"imeil", + "e-mail":"i-mel", + "emirates":"emireT,,s", + "emni":"em`ni", + "emnikore":"em`nikore", + "emnitoro":"em`nitoro", + "emnivabe":"em`nivabe", + "emonki":"emon`ki", + "emonTa":"emon`Ta", + "emonTi":"emon`Ti", + "emontoro":"emon`toro", + "empire":"empayar", + "encoding":"en`kODing", + "end":"enD", + "engine":"injin", + "engineer":"injiniyar", + "engineering":"injiniyaring", + "england":"inglyanD", + "english":"inglish", + "enrique":"en`rik", + "enter":"enTar", + "entrance":"enTrans", + "entries":"enTrij,,", + "entry":"enTri", + "epsiode":"episOD", + "epson":"ep`son", + "erricson":"erik`san", + "etc":"ityadi", + "etyadi":"ityadi", + "euro":"iurO", + "europe":"iurOp", + "event":"ivenT", + "everest":"evaresT", + "excel":"exel", + "exchange":"xcenj", + "exercise":"exarsaij", + "explorer":"explOrar", + "express":"xpres", + "extension":"xTensan", + "fa^ktal":"fa^k`tal", + "facebook":"feisbuk", + "fantasy":"fyanTasi", + "fashion":"fyashan", + "father":"fadar", + "fatna":"fat`na", + "february":"februarI", + "fedora":"feDOra", + "feed":"feeD", + "felbe":"fel`be", + "felben":"fel`ben", + "felbi":"fel`bi", + "felbo":"fel`bo", + "fellam":"fel`lam", + "felle":"fel`le", + "fellen":"fel`len", + "felleo":"fel`leo", + "felli":"fel`li", + "fello":"fel`lo", + "feynman":"fain`myan", + "fiction":"fikSan", + "file":"fail", + "filter":"filTar", + "final":"fainal", + "finance":"fainans", + "find":"fainD", + "fine":"fain", + "finki":"fin`ki", + "firefox":"fayarfox", + "firenni":"firen`ni", + "firewire":"fayar`war", + "fitna":"fit`na", + "fixed":"fixD", + "flash":"flyaS", + "flickr":"flik,,r", + "floppy":"flopi", + "flyover":"flaiOvar", + "folder":"fOlDar", + "footage":"fuTej", + "football":"fuTbol", + "forensic":"forensik", + "form":"forrm", + "format":"formyaT", + "forum":"fOram", + "forward":"for`warrD", + "fossil":"fosil", + "fossils":"fosil,,s", + "foundation":"faunDeshon", + "fountain":"faunTen", + "france":"frans", + "freeware":"freeOyZar", + "friend":"frenD", + "front":"fronT", + "frontpage":"fronTpej", + "fulbabu":"ful`babu", + "fulbagan":"ful`bagan", + "fulkopi":"ful`kopi", + "fund":"fanD", + "fuslanO":"fus`lanO", + "fusle":"fus`le", + "fusliye":"fus`liye", + "fuzzy":"faji", + "galgolpo":"gal`golpo", + "gallery":"gyalari", + "galmondo":"gal`mondo", + "game":"gem", + "gamla":"gam`la", + "gandhi":"gandhI", + "ganesh":"goNeS", + "ganguly":"ganguli", + "ganI":"gganI", + "gargi":"garrgI", + "gariahat":"goRiahaT", + "gatarrthe":"ggatarrthe", + "gates":"geT,,s", + "gautam":"gOUtom", + "gb":"jibi", + "generation":"jenareSon", + "geography":"jiografi", + "george":"jorrj", + "german":"jarrman", + "germany":"jarrmani", + "ghagra":"ghag`ra", + "ghapla":"ghap`la", + "ghora":"ghORa", + "ghori":"ghoRi", + "ghosh":"ghOSh", + "ghumanni":"ghuman`ni", + "ghurenni":"ghuren`ni", + "gilTi":"gil`Ti", + "girl":"garrl", + "github":"giT`hab", + "gland":"glyanD", + "glass":"glas", + "global":"glObal", + "globalisation":"glObalaijeSan", + "globalization":"glObalaijeSan", + "gmail":"jimeil", + "gObre":"gOb`re", + "gogoncarI":"gogon`carI", + "gogoncor":"gogon`cor", + "gogoncumbI":"gogon`cumbI", + "gogonsporrshI":"gogon`sporrshI", + "gOlgal":"gOl`gal", + "gOlmal":"gOl`mal", + "gOlmele":"gOl`mele", + "gOlmoric":"gOl`moric", + "gOlpata":"gOl`pata", + "gomes":"gOmej", + "good":"gooD", + "google":"googol", + "government":"govorrn`menT", + "grasnalI":"gras`nalI", + "great":"greT", + "greece":"grIs", + "greenland":"grInlyanD", + "group":"grup", + "guard":"garrD", + "gubre":"gub`re", + "guharoy":"guhoray", + "guhathakurata":"guhThakurota", + "guide":"gaiD", + "gujrat":"guj`rat", + "gunda":"gunDa", + "gynaecology":"gainekOloji", + "ha^Tenni":"ha^Ten`ni", + "hack":"hyak", + "haj":"hoj", + "hall":"hol", + "hamla":"ham`la", + "hanger":"hyaNggar", + "haora":"haORa", + "haque":"hok", + "hard":"harrD", + "harddisk":"harrDoDisk", + "hardware":"harrD`OyZar", + "harmonium":"harmOniam", + "harry":"hyari", + "hature":"hatuRe", + "head":"heD", + "health":"hel,,th", + "heart":"harrT", + "heatsink":"hiTsink", + "hekmot":"hek`mot", + "hell":"hel", + "helper":"helpar", + "hertz":"harrj", + "hi-fi":"hai-fai", + "hifi":"haifai", + "highfive":"haifaiv", + "history":"hisTri", + "hitler":"hiTlar", + "hmm":"hum", + "hockey":"hoki", + "hokkotha":"hok`kotha", + "hollywood":"holiuD", + "home":"hOm", + "hostel":"hOsTel", + "hotel":"hOTel", + "hotkey":"hoT-ki", + "howra":"haORa", + "howrah":"haORa", + "hp":"eicpi", + "html":"eicTiem`el", + "human":"hiumyan", + "hyderabad":"hayderabad", + "hydrojen":"haiDrOjen", + "hype":"haip", + "I-)":"I-)", + "ibm":"aibiem", + "icon":"aikon", + "idiot":"iDiyoT", + "ie":"aii", + "image":"imej", + "imageready":"imej`reDi", + "imageshack":"imejSyak", + "imambaRi":"imam`baRi", + "imandar":"iman`dar", + "imandarI":"iman`darI", + "imranur":"im`ranur", + "inch":"inci", + "inches":"inci", + "include":"inokluD", + "indhondata":"indhon`data", + "indhondatrI":"indhon`datrI", + "india":"inDia", + "indian":"inDian", + "indradeep":"indrodIp", + "info":"infO", + "information":"inforrmeSon", + "infrared":"infrareD", + "injection":"injekshan", + "input":"inpuT", + "install":"insTol", + "institute":"insiTiuT", + "insurance":"in`siOrens", + "insure":"insiOr", + "interface":"inTarfes", + "international":"inTarnyashonal", + "internet":"inTarneT", + "iphone":"aifOn", + "ipod":"aipoD", + "ipad":"aipyaD", + "plus":"plas", + "iron":"ayron", + "islam":"is`lam", + "island":"ailyanD", + "italy":"iTali", + "item":"aiTem", + "itihaslekhok":"itihas`lekhok", + "jabe":"zabe", + "jalpaiguri":"jol`paiguRi", + "jamrul":"jam`rul", + "janenna":"janen`na", + "jantam":"jan`tam", + "jante":"jan`te", + "janten":"jan`ten", + "janti":"jan`ti", + "janto":"jan`to", + "january":"januarI", + "je":"ze", + "jeans":"jin,,s", + "jedin":"zedin", + "jehetu":"zehetu", + "jekhan":"zekhan", + "jemon":"zemon", + "jet":"jeT", + "jholkacche":"jhol`kacche", + "jholkacchilo":"jhol`kacchilo", + "jholkani":"jhol`kani", + "jholkanO":"jhol`kanO", + "jholmol":"jhol`mol", + "jholmole":"jhol`mole", + "jibon":"jIbon", + "jodi":"zodi", + "joint":"joyenT", + "jokhon":"zokhon", + "jonno":"jonyo", + "jOsna":"jZOt``sna", + "josna":"jZOt``sna", + "jOsnamoy":"jZOt``snamoy", + "josnamoy":"jZOt``snamoy", + "jOsnarat":"jZOt``snarat", + "josnarat":"jZOt``snarat", + "jOsnaratri":"jZOt``snaratri", + "josnaratri":"jZOt``snaratri", + "journalism":"jarrnalijm", + "journalist":"jarrnalisT", + "jukti":"zukti", + "july":"julai", + "jyoti":"jyOti", + "jyotirmoy":"jyOtirrmoy", + "jyatirmoy":"jyOtirrmoy", + "jyatirmay":"jyOtirrmoy", + "jZOt``snarater":"jZOt``snarater", + "kaktal":"kak`tal", + "kaktalIyo":"kak`talIyo", + "kalbela":"kal`bela", + "kalbilombe":"kal`bilombe", + "kalbilombo":"kal`bilombo", + "kalbOISakhI":"kal`bOISakhI", + "kalbOIshakhI":"kal`bOIshakhI", + "kalbOSekhI":"kal`bOSekhI", + "kalbOshekhI":"kal`bOshekhI", + "kalke":"kal`ke", + "kalkrome":"kal`krome", + "kalprobahe":"kal`probahe", + "kalprobaho":"kal`probaho", + "kalprobhab":"kal`probhab", + "kalprovab":"kal`provab", + "kalpuruSh":"kal`puruSh", + "kalrat":"kal`rat", + "kalratri":"kal`ratri", + "kalratrire":"kal`ratrire", + "kamla":"kam`la", + "kamra":"kam`ra", + "kangkhito":"kaNgkkhito", + "kankaTa":"kan`kaTa", + "kankhaRa":"kan`khaRa", + "kankO":"kan`kO", + "kartik":"karrttik", + "kasba":"kosba", + "katrani":"kat`rani", + "katranO":"kat`ranO", + "kb":"kebi", + "key":"kee", + "keyboard":"kibOrrD", + "keypad":"kI-pyaD", + "khanni":"khan`ni", + "kharagpur":"khoRgpur", + "khelenni":"khelen`ni", + "khetre":"kkhetre", + "khetro":"kkhetro", + "khetrobisheSh":"kkhetrobisheSh", + "khetrofol":"kxetrofol", + "khoda":"khOda", + "khoma":"kxoma", + "khoti":"kkhoti", + "khotibriddhi":"kkhotibrriddhi", + "khotibrriddhi":"kkhotibrriddhi", + "khotikor":"kkhotikor", + "khulbe":"khul`be", + "khulben":"khul`ben", + "khulbO":"khul`bO", + "khullam":"khul`lam", + "khulle":"khul`le", + "khullen":"khul`len", + "khulli":"khul`li", + "kilbil":"kil`bil", + "kilbile":"kil`bile", + "kilo":"kilO", + "kingdom":"kingDom", + "kintam":"kin`tam", + "kinte":"kin`te", + "kinten":"kin`ten", + "kinti":"kin`ti", + "kipTa":"kip`Ta", + "kipTami":"kip`Tami", + "kipTamO":"kip`TamO", + "kisu":"kichu", + "kisui":"kichui", + "kitchen":"kicen", + "km":"kimi.`", + "kobji":"kob`ji", + "kolkarkhana":"kol`karkhana", + "kolkata":"kol`kata", + "kolkobja":"kol`kobja", + "kolkol":"kol`kol", + "kolkollOl":"kol`kollOl", + "kolkonTh":"kol`konTh", + "kollaN":"kolyaN", + "kollaNpur":"kolyaNpur", + "kolma":"kol`ma", + "kolombaj":"kolom`baj", + "kolombajI":"kolom`bajI", + "kOmolmoti":"kOmol`moti", + "kompokkhe":"kom`pokkhe", + "konjuspona":"konjus`pona", + "konkon":"kon`kon", + "konkonani":"kon`konani", + "konkone":"kon`kone", + "konokmoy":"konok`moy", + "konokmukuT":"konok`mukuT", + "konokmukuTe":"konok`mukuTe", + "kOnTa":"kOn`Ta", + "kOnTi":"kOn`Ti", + "korenni":"koren`ni", + "korrtitto":"korrtrritwo", + "korrtobbo":"korrtobyo", + "kosrot":"kos`rot", + "kosrote":"kos`rote", + "kosroter":"kos`roter", + "kosrotI":"kos`rotI", + "koththo":"kothyo", + "kotokkhani":"kotok`khani", + "kotokTa":"kotok`Ta", + "koyekTa":"koyek`Ta", + "koyekTi":"koyek`Ti", + "kukkhato":"kukhyato", + "kulgorima":"kul`gorima", + "kulgorrbe":"kul`gorrbe", + "kulgorrbo":"kul`gorrbo", + "kulgOUrob":"kul`gOUrob", + "kulgOUrobe":"kul`gOUrobe", + "kulguru":"kul`guru", + "kulkaminI":"kul`kaminI", + "kulkolonker":"kul`kolonker", + "kulkolonkI":"kul`kolonkI", + "kulkolonkinI":"kul`kolonkinI", + "kulkolonko":"kul`kolonko", + "kulkonya":"kul`konya", + "kulkuc":"kul`kuc", + "kulkuca":"kul`kuca", + "kulkucO":"kul`kucO", + "kulkul":"kul`kul", + "kulTa":"kul`Ta", + "L-)":"L-)", + "lab":"lyab", + "lace":"les", + "lane":"len", + "language":"lyanguyej", + "lansdown":"lyansDaun", + "laptop":"lyap`Top", + "lassi":"lacchi", + "launch":"lonc", + "lawrence":"lorens", + "lawyer":"loiyar", + "layer":"leyar", + "layout":"le`auT", + "lbw":"el`biDobliu", + "lcd":"elsiDi", + "lecture":"lekcar", + "legal":"ligal", + "lenovo":"lenOvO", + "letter":"leTar", + "letterhead":"leTarheD", + "lg":"elji", + "library":"laibreri", + "life":"laif", + "light":"laiT", + "line":"lain", + "linkin":"lin,,kin", + "linux":"linax", + "live":"laiv", + "llb":"el.`el.`bi", + "lobby":"lobi", + "local":"lOkal", + "location":"lOkeSan", + "lock":"lok", + "logic":"lojik", + "logical":"lojikal", + "logo":"lOgO", + "loklok":"lok`lok", + "london":"lonDon", + "lotion":"lOSan,,", + "lounge":"launj", + "lunch":"lanc", + "luxury":"laxari", + "m.b.b.s":"em.`bi.`bi.`es", + "mac":"myak", + "macintosh":"myakin`TOsh", + "machine":"meSin", + "macro":"myakrO", + "maddox":"myaDox", + "magazine":"myagajin", + "magistrate":"myajisTreT", + "maharashtra":"moharaShTr", + "mahatma":"mhatma", + "mail":"meil", + "maitreyee":"mOItreyI", + "majumdar":"mojumdar", + "maldah":"maldoh", + "mall":"mol", + "mallik":"mollik", + "mallika":"mollika", + "mamata":"momota", + "mamla":"mam`la", + "mamtaj":"momtaj", + "management":"myanejmenT", + "manager":"myanejar", + "managing":"myanejing", + "mandela":"myanDela", + "mangOUrob":"man`gOUrob", + "manmohan":"mon`mOhon", + "mansommoto":"man`sommoto", + "mante":"man`te", + "manten":"man`ten", + "manti":"man`ti", + "manto":"man`to", + "maradona":"maradOna", + "march":"marrc", + "market":"marrkeT", + "markin":"marrkin", + "marksbad":"marrk`sbad", + "marx":"marrks", + "massenger":"mesenjar", + "matador":"myaTaDor", + "maths":"myath,,s", + "maximize":"myaximaij", + "maximum":"myaximam", + "mb":"em`bi", + "mbbs":"em`bi`bi`es", + "md.":"emDi.`", + "mechanic":"mekanik", + "mechanical":"mekanikyal", + "mechanism":"mekanijm", + "media":"miDia", + "medical":"meDikel", + "medicine":"meDisin", + "medinipur":"medinIpur", + "medium":"miDiam", + "member":"membar", + "memory":"memOri", + "mercedes":"marrsiDij", + "mess":"mes", + "message":"mesej", + "messenger":"mesenjar", + "metric":"meTrik", + "mexico":"mexikO", + "micro":"maikrO", + "microbiology":"maikrObayOloji", + "microphone":"maikrOfOn", + "microscope":"maikrOskOp", + "microsoft":"maikrOsofT", + "military":"miliTari", + "mill":"mil", + "minimize":"minimaij", + "minimum":"minimam", + "minister":"minisTar", + "minus":"mainas", + "ml":"mili.`", + "mm":"mimi.`", + "mms":"em`em`es", + "mobile":"mObail", + "mohot":"mohot``", + "money":"mani", + "monitor":"moniTor", + "mongolbar":"mongol`bar", + "mongolgIt":"mongol`gIt", + "mongolgroh":"mongol`groh", + "mongolgroho":"mongol`groho", + "mongolia":"mongOlia", + "mongolkamI":"mongol`kamI", + "mongolkamona":"mongol`kamona", + "mongolkarI":"mongol`karI", + "mongolkariNI":"mongol`kariNI", + "mongolkor":"mongol`kor", + "mongolmoy":"mongol`moy", + "morgue":"morrg", + "morning":"morrning", + "mother":"madar", + "motherboard":"madarbOrrD", + "motor":"mOTor", + "motorolla":"moTOrOla", + "mou":"mOU", + "mount":"maunT", + "mouse":"maus", + "mouth":"mauth", + "movie":"mubhi", + "mozilla":"mOjila", + "mrigoya":"mrrigoya", + "mrinmoy":"mrrinmoy", + "ms":"em`es", + "msn":"em`es`en", + "muffler":"maf,,lar", + "mukherjee":"mukharrji", + "multimedia":"malTimiDia", + "munmun":"mun`mun", + "museum":"miujiam", + "music":"miujik", + "mutton":"maTn", + "my":"mai", + "myanmar":"mayan`mar", + "mymensingh":"moymonosing`h", + "myspace":"maispes", + "nakkan":"nak`kan", + "nakkaTa":"nak`kaTa", + "nakkhot":"nak`khot", + "namaskar":"nomoskar", + "namenni":"namen`ni", + "nandigram":"nondIgram", + "napkin":"nyapkin", + "narayan":"narayN", + "national":"nyashonal", + "native":"neTiv", + "naxal":"noxal", + "naxalbari":"noxal`baRi", + "nazmun":"najmun", + "negro":"nigrO", + "net":"neT", + "network":"neT`warrk", + "new":"niu", + "news":"niuj", + "newspaper":"niujpepar", + "newyork":"niuiyorrk", + "next":"nexT", + "nicobar":"nikObar", + "nidankal":"nidan`kal", + "nidankale":"nidan`kale", + "night":"naiT", + "nimokharam":"nimok`haram", + "nimokharami":"nimok`harami", + "niponwave":"nipon`Oyebh", + "nobel":"nObel", + "nobombar":"nobom`bar", + "nojrana":"noj`rana", + "nokia":"nOkia", + "nokri":"nok`ri", + "nolkUp":"nol`kUp", + "nonsense":"non,,sens", + "nOnta":"nOn`ta", + "norokkunDe":"norok`kunDe", + "norokkunDo":"norok`kunDo", + "north":"norrth", + "norton":"norTn", + "norway":"nor`we", + "note":"nOT", + "notebook":"nOTbuk", + "notepad":"nOTpyaD", + "notes":"nOT,,s", + "notification":"nOTifikeSan", + "nouka":"nOUka", + "november":"novembor", + "noyongOcor":"noyon`gOcor", + "noyonjol":"noyon`jol", + "noyonkON":"noyon`kON", + "noyonmoNi":"noyon`moNi", + "noyonronjon":"noyon`ronjon", + "noyonsnigdhokor":"noyon`snigdhokor", + "noyontara":"noyon`tara", + "noyontaray":"noyon`taray", + "ntfs":"en`Ti`ef`es", + "number":"nambar", + "numeric":"niumerik", + "nurse":"narrs", + "nylon":"nailon", + "o...o":"o...o", + "O:)":"O:)", + "O:-)":"O:-)", + "o_o":"o_o", + "O_o":"O_o", + "O_O":"O_O", + "o-+":"o-+", + "o=>":"o=>", + "o->":"o->", + "o0o":"o0o", + "O3O":"O3O", + "obyrrtho":"oby`rrtho", + "october":"okTObor", + "odolbodol":"odol`bodol", + "offic":"ofis", + "office":"ofis", + "officer":"ofisar", + "ogganjonito":"oggan`jonito", + "oggankrrito":"oggan`krrito", + "oggantimir":"oggan`timir", + "ogotta":"ogotya", + "Ojondar":"Ojon`dar", + "ok":"Oke", + "Ok":"Oke", + "OK":"Oke", + "okalbarrdhokyo":"okal`barrdhokyo", + "okalborrShoN":"okal`borrShoN", + "okalbrriddho":"okal`brriddho", + "okalbrriShTi":"okal`brriShTi", + "Okalotnama":"Okalot`nama", + "Okalotnamate":"Okalot`namate", + "Okalotnamay":"Okalot`namay", + "okaTmUrrkho":"okaT`mUrrkho", + "okaTTo":"okaTyo", + "okollaN":"okolyaN", + "okorrtobbo":"okorrtobyo", + "okoththo":"okothyo", + "Olkopi":"Ol`kopi", + "olokmegh":"olok`megh", + "OlTanO":"Ol`TanO", + "olympic":"olimpik", + "omicronlab":"Omikronlyab", + "Omicronlab":"Omikronlyab", + "omlanmukh":"omlan`mukh", + "omlanmukhe":"omlan`mukhe", + "Omra":"Om`ra", + "Omrah":"Om`rah,,", + "oncolprobhab":"oncol`probhab", + "oncolprovab":"oncol`provab", + "onekTa":"onek`Ta", + "onkontuli":"onkon`tuli", + "onkontulika":"onkon`tulika", + "onolborrShI":"onol`borrShI", + "onolborrShoN":"onol`borrShoN", + "ononna":"ononya", + "ononno":"ononyo", + "onudbayI":"onudwayI", + "onudbeg":"onudweg", + "onudbigno":"onudwigno", + "onujjol":"onujjwol", + "O-O":"O-O", + "open":"Open", + "openoffice":"Open`ofis", + "operating":"opareTing", + "operation":"opareSan", + "opomangrostho":"opoman`grostho", + "opomanjonok":"opoman`jonok", + "opomanjonokvabe":"opoman`jonokvabe", + "opomankor":"opoman`kor", + "optical":"opTikal", + "option":"op`shon", + "options":"op`shon,,s", + "optionti":"op`shon`Ti", + "orange":"orenj", + "original":"orijinal", + "orkut":"orrkuT", + "orkutbaj":"orrkuTbaj", + "orkuting":"orrkuTing", + "orrthat":"orrthat``", + "os":"Oes", + "OS":"Oes", + "osabdhan":"osab`dhan", + "osabdhane":"osab`dhane", + "osabdhanI":"osab`dhanI", + "osabdhanota":"osab`dhanota", + "oShTombar":"oShTom`bar", + "osonkho":"osongkhyo", + "ostacolgamI":"ostacol`gamI", + "ostacolgoto":"ostacol`goto", + "otopor":"ot:por", + "ounce":"auns", + "out":"auT", + "outbox":"auTbox", + "outline":"auTlain", + "over":"Obhar", + "overhead":"OvarheD", + "ovyasmoto":"ovyas`moto", + "OwO":"OwO", + "oxford":"oxfOrrD", + "oxygen":"oxijen", + "oyoncolon":"oyon`colon", + "oyonkal":"oyon`kal", + "pack":"pyak", + "paediatric":"peDiaTrik", + "paediatrics":"peDiaTriks", + "page":"peij", + "pagla":"pag`la", + "paglami":"pag`lami", + "paglamO":"pag`lamO", + "paglI":"pag`lI", + "paint":"peinT", + "painting":"peinTing", + "palki":"pal`ki", + "palki-behara":"pal`ki-behara", + "palmtop":"pamTp", + "palokmata":"palok`mata", + "palokmatar":"palok`matar", + "palta":"palTa", + "palTa":"pal`Ta", + "palTanO":"pal`TanO", + "palTay":"pal`Tay", + "palTe":"pal`Te", + "palTi":"pal`Ti", + "palTiye":"pal`Tiye", + "pancayet":"poncayet", + "panel":"pyanel", + "panroto":"pan`roto", + "pant":"pyanT", + "panty":"pyanTi", + "pappUNyo":"pap`pUNyo", + "pargana":"porgoNa", + "park":"parrk", + "parker":"parrkar", + "partha":"parrth", + "partition":"parrTiSon", + "party":"parrTi", + "paShaNmoy":"paShaN`moy", + "patel":"pyaTel", + "patent":"peTenT", + "pathology":"pyatholoji", + "patrika":"potrika", + "pause":"poj", + "pc":"pisi", + "pencil":"pensil", + "pentagon":"penTagon", + "perfume":"parfium", + "pervez":"parrvej", + "petro":"peTrO", + "petrol":"peTrOl", + "pha^ktal":"pha^k`tal", + "pharmacology":"farrmakOloji", + "pharmacy":"farrmesi", + "phatna":"phat`na", + "phelbe":"phel`be", + "phelben":"phel`ben", + "phelbi":"phel`bi", + "phelbo":"phel`bo", + "phellam":"phel`lam", + "phelle":"phel`le", + "phellen":"phel`len", + "phelleo":"phel`leo", + "phelli":"phel`li", + "phello":"phel`lo", + "phinki":"phin`ki", + "phirenni":"phiren`ni", + "phitna":"phit`na", + "phone":"fOn", + "phonetic":"phoneTik", + "photo":"phTO", + "photocopy":"fTOkpi", + "photoshop":"fTOshop", + "php":"pieicpi", + "phulbabu":"phul`babu", + "phulbabura":"phul`babura", + "phulbagan":"phul`bagan", + "phulkopi":"phul`kopi", + "phuslanO":"phus`lanO", + "phusle":"phus`le", + "phusliye":"phus`liye", + "physics":"fijik,,s", + "picnic":"piknik", + "picture":"pikcar", + "piracy":"pairesi", + "pirate":"paireT", + "place":"ples", + "plane":"plen", + "plate":"pleT", + "play":"ple", + "player":"plear", + "plug":"plag", + "point":"poyenT", + "pOkhraj":"pOkh`raj", + "police":"puliS", + "political":"poliTikal", + "politics":"poliTix", + "poncombar":"poncom`bar", + "poRenni":"poRen`ni", + "porjonto":"porrzonto", + "poroborti":"poroborrtI", + "port":"pOrrT", + "portable":"pOrrTeb`l", + "portugal":"porrtugal", + "poScimbongo":"poScim`bongo", + "poshcimbangla":"poshcim`bangla", + "poshcimbongo":"poshcim`bongo", + "poshcimbong":"poshcim`bongo", + "post":"pOsT", + "postmortem":"pOsTmorrTem", + "postpaid":"pOsTpeD", + "potter":"poTar", + "pound":"paunD", + "power":"paOyar", + "powerpoint":"paOyarpoyenT", + "prabir":"probIr", + "pradesh":"prodeS", + "pranab":"pr`N`b", + "pratiti":"protIti", + "pregnancy":"preg`nyansi", + "pregnant":"preg`nyanT", + "prepaid":"pripeD", + "presentation":"prejenTeSan", + "president":"presiDenT", + "press":"pres", + "preview":"priviu", + "prime":"praim", + "print":"prinT", + "printer":"prinTar", + "prize":"praij", + "processor":"prosesor", + "product":"prODakT", + "production":"prODakshn", + "professional":"prOfes`nal", + "professor":"prOfesor", + "profile":"prOfail", + "program":"prOgram", + "programme":"prOgram", + "programming":"prOgraming", + "progress":"prOgres", + "project":"prOjekT", + "projector":"prOjekTor", + "prokashman":"prokash`man", + "prokaSman":"prokaS`man", + "properties":"proparrTij", + "property":"proparrTi", + "prothombar":"prothom`bar", + "prottasha":"protyasha", + "prottutponnomoti":"protyut``ponnomoti", + "proyojon":"proyOjon", + "proyOjonmafik":"proyOjon`mafik", + "proyOjonmaphik":"proyOjon`maphik", + "proyOjonmoto":"proyOjon`moto", + "publish":"pab`liS", + "publisher":"pab`liSar", + "pulse":"pal,,s", + "qB-)":"qB-)", + "race":"res", + "racing":"resing", + "rack":"ryak", + "racket":"ryakeT", + "radio":"reDiO", + "ragging":"ryaging", + "rail":"rel", + "railline":"rel`lain", + "railway":"rel`we", + "railways":"rel`wej", + "rajarshi":"rajorrShi", + "rajat":"rojot", + "rajpat":"rajpaT", + "rakhenni":"rakhen`ni", + "ranabir":"roNobIr", + "rape":"rep", + "rashtrapati":"raShTrpoti", + "rastrapati":"raShTrpoti", + "raw":"r'", + "reader":"riDar", + "recent":"risenT", + "reception":"risepSan", + "receptionist":"risepSanisT", + "recipe":"resipi", + "recycle":"risaikel", + "referee":"refaree", + "refresh":"rifreS", + "register":"rejisTar", + "registration":"rejisTreSan", + "relgaRi":"rel`gaRi", + "reliance":"rilayens", + "rellain":"rel`lain", + "relpoth":"rel`poth", + "relpothe":"rel`pothe", + "relpother":"rel`pother", + "remote":"rimOT", + "remove":"rimuv", + "repair":"ripeyar", + "replace":"riples", + "resize":"risaij", + "resolution":"rejOliuSan", + "restaurant":"resTurenT", + "rhombus":"rombos", + "richard":"ricarrD", + "right":"raiT", + "rights":"raiT,,s", + "ringtone":"ringTOn", + "rituparna":"rrituporrNa", + "rizwanur":"rij`wanur", + "rObbar":"rOb`bar", + "robot":"rOboT", + "rodon":"rOdon", + "rOgmukti":"rOg`mukti", + "rOgmukto":"rOg`mukto", + "rohman":"roh`man", + "ronaldinho":"rOnalDinhO", + "ronaldo":"rOnalDO", + "rong":"roNg", + "ronger":"roNger", + "route":"ruT", + "row":"rO", + "rriNgrahI":"rriN`grahI", + "rriNgrohIta":"rriN`grohIta", + "rriNgrohoN":"rriN`grohoN", + "rriNgrostho":"rriN`grostho", + "rriNmOcon":"rriN`mOcon", + "rriNmukti":"rriN`mukti", + "rriNmukto":"rriN`mukto", + "rss":"ar.`es.`es", + "RSS":"ar.`es.`es", + "rubber":"rabar", + "rugby":"ragbi", + "rumpa":"rUmpa", + "rupam":"rUpom", + "russia":"raSia", + "sabdhan":"sab`dhan", + "sabdhanI":"sab`dhanI", + "sabdhanota":"sab`dhanota", + "sabyasaci":"sobysacI", + "saint":"senT", + "saltlake":"solTlek", + "samla":"sam`la", + "samlan":"sam`lan", + "samlanO":"sam`lanO", + "samlao":"sam`lao", + "samna":"sam`na", + "samnasamni":"sam`nasam`ni", + "samna-samni":"sam`na-sam`ni", + "samne":"sam`ne", + "samni":"sam`ni", + "samsung":"syamsaNg", + "sanitary":"syaniTari", + "sanjana":"sonjona", + "saptarshi":"soptorrShi", + "saraswati":"soroswtI", + "saswata":"SaSwot", + "satej":"sotej", + "sauce":"sos", + "saudi":"sOUdi", + "saurav":"sOUrobh", + "save":"sev", + "scanner":"skyanar", + "scholar":"skolar", + "school":"skul", + "science":"sayens", + "scooter":"skuTar", + "scotch":"skoc", + "scotland":"skoTlyanD", + "scrap":"skryap", + "screen":"skreen", + "scroll":"skrol", + "scrollbar":"skrol`bar", + "sealda":"Sialda", + "sealdah":"Sialdoh", + "search":"sarrc", + "sekhetre":"sekkhetre", + "select":"silekT", + "semi-final":"semi-fainal", + "sengupta":"sen`gupt", + "september":"sepTembor", + "serial":"sirial", + "series":"sirij", + "service":"sarrvis", + "services":"sarrvises", + "session":"seSan", + "set":"seT", + "setting":"seTing", + "settings":"seTings,,", + "sexy":"sexi", + "shampoo":"shyampu", + "shanghai":"sang`hai", + "shankar":"Sonkor", + "shantiniketan":"Santiniketon", + "shapla":"shap`la", + "sharatchandra":"Sorot``condro", + "share":"sheyar", + "sharma":"Sorrma", + "shift":"shifT", + "shirt":"sharrT", + "shobdaho":"shob`daho", + "shobdahok":"shob`dahok", + "shobdahon":"shob`dahon", + "shobdeho":"shob`deho", + "shock":"Sk", + "shocker":"Skar", + "shoe":"Su", + "ShOloana":"ShOlo`ana", + "shOnni":"shOn`ni", + "shopping":"Soping", + "shortcut":"SorrTkaT", + "shounak":"SOUnok", + "show":"SO", + "shreyasee":"SreysI", + "shreyasi":"SreysI", + "shunno":"shunyo", + "shunnota":"shunyota", + "shuntam":"shun`tam", + "shunte":"shun`te", + "shunten":"shun`ten", + "shunti":"shun`ti", + "siddhartha":"siddharrth", + "siemens":"simens", + "sign":"sain", + "signature":"sig`necar", + "siliguri":"SiliguRi", + "sIlmOhor":"sIl`mOhor", + "simanto":"sImant", + "singapore":"singapur", + "singh":"sing`h", + "sir":"syar", + "site":"saiT", + "size":"saij", + "skirt":"skarrT", + "slide":"slaiD", + "small":"smol", + "smart":"smarrT", + "sms":"es`em`es", + "Sobdaho":"Sob`daho", + "Sobdahok":"Sob`dahok", + "Sobdahon":"Sob`dahon", + "Sobdeho":"Sob`deho", + "sobji":"sob`ji", + "sobkhetre":"sobkxetre", + "sobkhetro":"sobkxetro", + "soft":"sofT", + "software":"sofT`OyZar", + "soldier":"sOljar", + "somadhanTi":"somadhan`Ti", + "somak":"sOmok", + "sOmbar":"sOm`bar", + "somen":"sOmen", + "sommanjonok":"somman`jonok", + "sommankor":"somman`kor", + "somrat":"somraT", + "sonali":"sOnali", + "sonar":"sOnar", + "sondha":"sondhya", + "sondhamaloti":"sondhyamaloti", + "SOnni":"SOn`ni", + "sony":"soni", + "soptombar":"soptom`bar", + "sot":"sot``", + "sotti":"sotyi", + "sotto":"sotyo", + "soumya":"sOUmyo", + "soumyajyoti":"sOUmyjyOti", + "sound":"saunD", + "source":"sOrrs", + "south":"sauth", + "space":"spes", + "speaker":"spikar", + "spider":"spaiDar", + "sports":"spOrrTs", + "spy":"spai", + "spycam":"spaikyam", + "spyware":"spaiOyZar", + "square":"skOyar", + "sri":"shrI", + "srijani":"SrIjonI", + "srikanta":"SrIkant", + "srilanka":"SrIlonka", + "sriman":"shrIman", + "srimati":"shrImti", + "srizon":"srrijon", + "stamp":"sTyamp", + "stand":"sTyanD", + "standard":"sTZanDarrD", + "star":"sTar", + "start":"sTarrT", + "states":"sTeT,,s", + "status":"sTyaTas", + "steam":"sTim", + "steering":"sTiaring", + "sthankalpatro":"sthan`kal`patro", + "stick":"sTik", + "stock":"sTk", + "stool":"sTul", + "street":"sTriT", + "string":"sTring", + "stupid":"sTupiD", + "style":"sTail", + "subarna":"suborrNa", + "subhodip":"shuvodIp", + "subject":"sab`jekT", + "suchitra":"sucitra", + "sudoku":"suDOku", + "suitcase":"suTkes", + "suite":"sZuT", + "suman":"sumon", + "sumana":"sumona", + "superman":"suparmyan", + "support":"sapOrrT", + "surf":"sarrf", + "surgery":"sarrjari", + "swarnendu":"sworrnendu", + "sweater":"sOyeTar", + "sweety":"suiTi", + "swiss":"suis", + "switch":"suic", + "sydney":"siDni", + "syria":"siria", + "system":"sisTem", + "T.T":"T.T", + "T_T":"T_T", + "tab":"Tyab", + "tabla":"tob`la", + "table":"Tebil", + "tagore":"TegOr", + "tajmahal":"tajmohol", + "Takri":"Tak`ri", + "Talbahana":"Tal`bahana", + "talgach":"tal`gach", + "talk":"Tk", + "talkana":"tal`kana", + "talmafik":"tal`mafik", + "talmaphik":"tal`maphik", + "TalmaTal":"Tal`maTal", + "talmoto":"tal`moto", + "talpata":"tal`pata", + "talpatar":"tal`patar", + "talpatay":"tal`patay", + "talpotre":"tal`potre", + "talpotrer":"tal`potrer", + "talpotro":"tal`potro", + "tamali":"tomali", + "tank":"Tyank", + "tarzan":"Tarjan", + "task":"Task", + "taskbar":"Taskbar", + "tata":"TaTa", + "tax":"Tyax", + "taxi":"Tyaxi", + "team":"Tim", + "tech":"Tek", + "technician":"TekniSian", + "technology":"TeknOlji", + "techpointer":"TekpoyenTar", + "telephone":"TeliphOn", + "telescope":"TeliskOp", + "teletalk":"TeliTk", + "television":"TeliviSan", + "temni":"tem`ni", + "temnibhabe":"tem`nibhabe", + "temnikore":"tem`nikore", + "temnivabe":"tem`nivabe", + "temporary":"TempOrari", + "tennis":"Tenis", + "testimonial":"TesTimOniyal", + "text":"TexT", + "textmate":"TexT`meT", + "textbox":"TexTbox", + "textile":"TexTail", + "tft":"TiefTi", + "thakenni":"thaken`ni", + "thaklam":"thak`lam", + "thakle":"thak`le", + "thaklo":"thak`lo", + "Thakrun":"Thak`run", + "thaktam":"thak`tam", + "thakte":"thak`te", + "thakten":"thak`ten", + "thakti":"thak`ti", + "thakur":"Thakur", + "Thandi":"Than`di", + "Thandidi":"Than`didi", + "theater":"thiyeTar", + "Thikmoto":"Thik`moto", + "ThikThik":"Thik`Thik", + "ThonThon":"Thon`Thon", + "ThonThone":"Thon`Thone", + "threat":"threT", + "TikTik":"Tik`Tik", + "TikTiki":"Tik`Tiki", + "tilottoma":"tilOttoma", + "time":"Taim", + "times":"Taim,,s", + "tingun":"tin`gun", + "tinjon":"tin`jon", + "tinjona":"tin`jona", + "tinkal":"tin`kal", + "tinrokom":"tin`rokom", + "tinTa":"tin`Ta", + "tinTaka":"tin`Taka", + "tinTane":"tin`Tane", + "tinTanei":"tin`Tanei", + "tinTi":"tin`Ti", + "tintin":"Tin`Tin", + "Tips":"Tip`s", + "Tipsohi":"Tip`sohi", + "Tipsoi":"Tip`soi", + "TipTip":"Tip`Tip", + "titanic":"TaiTanik", + "tobla":"tob`la", + "tohfa":"tOhfa", + "toirI":"tOIrI", + "tokhonkar":"tokhon`kar", + "toklif":"tok`lif", + "tokliph":"tok`liph", + "tokma":"tok`ma", + "toktok":"tok`tok", + "TokTok":"Tok`Tok", + "toktoke":"tok`toke", + "tokyo":"TOkiyO", + "tollygunge":"Taligonj", + "Tolmol":"Tol`mol", + "tolpeT":"tol`peT", + "TolTol":"Tol`Tol", + "TolTole":"Tol`Tole", + "tomato":"TomeTO", + "tOmra":"tOm`ra", + "tOmrai":"tOm`rai", + "tOmrao":"tOm`rao", + "tOmratO":"tOm`ratO", + "tonic":"Tnik", + "TonTon":"Ton`Ton", + "TonTonani":"Ton`Tonani", + "TonTone":"Ton`Tone", + "tool":"Tool", + "toolbar":"Tul`bar", + "tools":"Tuls", + "torolbuddhi":"torol`buddhi", + "torolmoti":"torol`moti", + "torolprokrriti":"torol`prokrriti", + "torrent":"TorenT", + "TosTos":"Tos`Tos", + "TosTosa":"Tos`Tosa", + "TosTose":"Tos`Tose", + "total":"TOTal", + "touchpad":"TacpyaD", + "touchscreen":"TacskrIn", + "toufik":"tOUfik", + "tourism":"Tyurij,,m", + "tourist":"TyurisT", + "town":"Taun", + "tower":"TaoYar", + "toyota":"ToyOTa", + "tractor":"TryakTor", + "trademark":"TreDmarrk", + "traffic":"Trafik", + "train":"Tren", + "trapezium":"Trapijiam", + "tray":"Tre", + "trinamul":"trriNomUl", + "trouser":"Traujar", + "truck":"Trak", + "tsunami":"sunami", + "TT_TT":"TT_TT", + "tube":"Tiub", + "tubelight":"Tiub`laiT", + "Tukra":"Tuk`ra", + "TukragulO":"Tuk`ragulO", + "TukraTa":"Tuk`raTa", + "TukraTakra":"Tuk`raTak`ra", + "Tukra-Takra":"Tuk`ra-Tak`ra", + "TukraTi":"Tuk`raTi", + "Tukri":"Tuk`ri", + "Tukrite":"Tuk`rite", + "TukTak":"Tuk`Tak", + "TukTuke":"Tuk`Tuke", + "tumpa":"Tumpa", + "TunTun":"Tun`Tun", + "TunTuni":"Tun`Tuni", + "TusTus":"Tus`Tus", + "TusTusa":"Tus`Tusa", + "TusTuse":"Tus`Tuse", + "tv":"Tivi", + "twitter":"TuiTar", + "type":"Taip", + "typing":"Taiping", + "tyre":"Tayar", + "uae":"iuei", + "udbayI":"udwayI", + "udbek":"udwek", + "udbigno":"udwigno", + "uddOg":"udyOg", + "ujjol":"ujjwol", + "ulTa":"ul`Ta", + "ulTanO":"ul`TanO", + "ulTapalTa":"ul`Tapal`Ta", + "ulTapiTh":"ul`TapiTh", + "ulTapiThe":"ul`TapiThe", + "ulTaroth":"ul`Taroth", + "ulTarothe":"ul`Tarothe", + "ulTe":"ul`Te", + "ulTO":"ul`TO", + "ulTOpoth":"ul`TOpoth", + "ulTOroth":"ul`TOroth", + "under":"anDar", + "underpant":"anDarpyanT", + "unibijoy":"iunibijoy", + "unicode":"iunikOD", + "uninstall":"an`insTl", + "union":"iuniyon", + "unit":"iuniT", + "united":"iunaiTeD", + "university":"iunivarrsiTi", + "update":"apDeT", + "uponyaskar":"uponyas`kar", + "uponyaslekhok":"uponyas`lekhok", + "uponyasrocoyita":"uponyas`rocoyita", + "ups":"iupies", + "urine":"iurin", + "uRonconDI":"uRon`conDI", + "usb":"iuesbi", + "user":"iujar", + "uShno":"uShNo", + "uThenni":"uThen`ni", + "utkoT":"ut``koT", + "utrai":"ut`rai", + "utralam":"ut`ralam", + "utralen":"ut`ralen", + "utrali":"ut`rali", + "utralO":"ut`ralO", + "utranO":"ut`ranO", + "utse":"ut``se", + "utser":"ut``ser", + "utso":"ut``so", + "uttamkumar":"uttomkumar", + "v.v":"v.v", + "valobastam":"valobas`tam", + "valobaste":"valobas`te", + "valobasten":"valobas`ten", + "valobasti":"valobas`ti", + "valobasto":"valobas`to", + "vasha":"vaSha", + "version":"varrson", + "victoria":"vikTOriya", + "video":"viDio", + "view":"viu", + "violin":"vayOlin", + "virtual":"varrcuyal", + "vodafone":"vODafOn", + "volume":"volium", + "voumik":"vOUmik", + "wait":"weT", + "wallpaper":"wal`pepar", + "warming":"warrming", + "warning":"warrning", + "webcam":"Oyebkyam", + "webmaster":"webmasTar", + "webpage":"Oyebpej", + "website":"websaiT", + "weight":"weT", + "wellington":"welingTon", + "west":"wesT", + "wheel":"huil", + "whisky":"huiski", + "wifi":"waifai", + "wiki":"uiki", + "wikipedia":"uikipeDia", + "winamp":"uinaZmp", + "window":"uinDO", + "windows":"uinDOj", + "windscreen":"uinDskrIn", + "wine":"wain", + "wipro":"uiprO", + "wireless":"warles", + "with":"uith", + "word":"OarrD", + "wordpad":"OarrDpyaD", + "wordpress":"warrDpres", + "world":"warrlD", + "wow":"waw", + "writer":"raiTar", + "x-(":"x-(", + "X(":"X(", + "X_X":"X_X", + "X3":"X3", + "xD":"xD", + "XD":"XD", + "xerox":"jerox", + "xhtml":"x`eicTiem`el", + "xml":"x`em`el", + "xcode":"xkOD", + "xp":"xpi", + "yard":"yarrD", + "year":"iyar", + "youtube":"iuTiub", + "zaman":"jaman", + "zanni":"zan`ni", + "zemni":"zem`ni", + "zemnibhabe":"zem`nibhabe", + "zemnikore":"zem`nikore", + "zemnivabe":"zem`nivabe", + "zia":"jia", + "zitu":"jitu", + "zOgandar":"zOgan`dar", + "zOgandarI":"zOgan`darI", + "zokhonkar":"zokhon`kar", + "zokhontokhon":"zokhon`tokhon", + "zompUrI":"zom`pUrI" + } +} \ No newline at end of file diff --git a/src/engine/SpecialFolders.h b/src/engine/SpecialFolders.h index cf6fccc8..1cae4361 100644 --- a/src/engine/SpecialFolders.h +++ b/src/engine/SpecialFolders.h @@ -41,6 +41,10 @@ class SpecialFolders { QString getUserLayoutPath() { return path + "/Layouts/"; } + + QString getUserAutoCorrectFile() { + return path + "/autocorrect.json"; + } }; #endif /* end of include guard: SPECIAL_FOLDER_H */ diff --git a/src/engine/libengine/AutoCorrect.cpp b/src/engine/libengine/AutoCorrect.cpp new file mode 100644 index 00000000..dcb0e87f --- /dev/null +++ b/src/engine/libengine/AutoCorrect.cpp @@ -0,0 +1,113 @@ +/* + * OpenBangla Keyboard + * Copyright (C) 2015-2018 Muhammad Mominul Huque + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include +#include +#include +#include "AutoCorrect.h" +#include "log.h" + +AutoCorrect::AutoCorrect() { + QFile dictFile(PKGDATADIR "/data/autocorrect.json"); + if (!dictFile.open(QIODevice::ReadOnly)) { + LOG_ERROR("[AutoCorrect]: Error: Couldn't open autocorrect dictionary file!\n"); + } + QByteArray data = dictFile.readAll(); + QJsonDocument json(QJsonDocument::fromJson(data)); + + dict = json.object().value("autocorrect").toObject(); + dictFile.close(); + + // Now load user specific AutoCorrect file + dictFile.setFileName(folders.getUserAutoCorrectFile()); + if (!dictFile.open(QIODevice::ReadOnly)) { + LOG_ERROR("[AutoCorrect]: Error: Couldn't open user specific AutoCorrect file!\n"); + } + + data = dictFile.readAll(); + json = QJsonDocument::fromJson(data); + usrDict = json.object(); + dictFile.close(); +} + +QString AutoCorrect::getCorrected(QString word) { + // Always prefer user edited Autocorrect file + QJsonValue corrected = usrDict.value(word); + + if(corrected.type() != QJsonValue::Undefined) { + return corrected.toString(); + } else { + // Not found in user's AutoCorrect file. So use the + // default AutoCorrect file. + corrected = dict.value(word); + if(corrected.type() != QJsonValue::Undefined) { + return corrected.toString(); + } else { + return QString(""); + } + } +} + +QVariantMap AutoCorrect::getEntries() { + QVariantMap dct = dict.toVariantMap(); + + /* Insert user's AutoCorrect entries. + * If a conflict is found, we prefer user's entry. + */ + QJsonObject::const_iterator iter = usrDict.constBegin(); + while(iter != usrDict.constEnd()) { + dct.insert(iter.key(), iter.value()); + + ++iter; + } + + return dct; +} + +void AutoCorrect::loadAvroPhonetic() { + // Now load Avro Phonetic + QFile layoutFile(PKGDATADIR "/layouts/avrophonetic.json"); + if (!layoutFile.open(QIODevice::ReadOnly)) { + LOG_ERROR("[AutoCorrect]: Error: Couldn't open Avro Phonetic layout file!\n"); + } + + QByteArray data = layoutFile.readAll(); + QJsonDocument json = QJsonDocument::fromJson(data); + parser.setLayout(json.object().value("layout").toObject()); + layoutFile.close(); +} + +QString AutoCorrect::convertBanglish(QString text) { + return parser.parse(text); +} + +void AutoCorrect::setEntry(QString replace, QString with) { + usrDict.insert(replace, with); +} + +void AutoCorrect::saveUserAutoCorrectFile() { + QFile saveFile(folders.getUserAutoCorrectFile()); + if(!saveFile.open(QIODevice::WriteOnly)) { + LOG_ERROR("[AutoCorrect:Save]: Error couldn't open save file.\n"); + return; + } + + QJsonDocument json(usrDict); + saveFile.write(json.toJson()); + + saveFile.close(); +} diff --git a/src/engine/libengine/autocorrect.h b/src/engine/libengine/AutoCorrect.h similarity index 63% rename from src/engine/libengine/autocorrect.h rename to src/engine/libengine/AutoCorrect.h index 64c2effc..1ab1dbea 100644 --- a/src/engine/libengine/autocorrect.h +++ b/src/engine/libengine/AutoCorrect.h @@ -1,6 +1,6 @@ /* * OpenBangla Keyboard - * Copyright (C) 2015-2016 Muhammad Mominul Huque + * Copyright (C) 2015-2018 Muhammad Mominul Huque * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,14 +20,29 @@ #include #include +#include +#include #include "phoneticparser.h" +#include "SpecialFolders.h" class AutoCorrect { QJsonObject dict; + QJsonObject usrDict; PhoneticParser parser; + SpecialFolders folders; public: AutoCorrect(); QString getCorrected(QString word); + /* Get AutoCorrect entries */ + QVariantMap getEntries(); + /* Load Avro Phonetic to convert Banglish to Bangla */ + void loadAvroPhonetic(); + /* Convert Banglish to Avro Phonetic */ + QString convertBanglish(QString text); + /* Add an entry into users's AutoCorrect dictionary */ + void setEntry(QString replace, QString with); + /* Save user specific AutoCorrect file */ + void saveUserAutoCorrectFile(); }; #endif /* end of include guard: AUTO_CORRECT_H */ diff --git a/src/engine/libengine/CMakeLists.txt b/src/engine/libengine/CMakeLists.txt index 518f0e4b..5ac8bb2b 100644 --- a/src/engine/libengine/CMakeLists.txt +++ b/src/engine/libengine/CMakeLists.txt @@ -10,8 +10,8 @@ add_library(libEngine FixedLayoutParser.cpp regexparser.cpp regexparser.h - autocorrect.cpp - autocorrect.h + AutoCorrect.cpp + AutoCorrect.h Database.cpp Database.h cachemanager.cpp diff --git a/src/engine/libengine/PhoneticSuggestion.cpp b/src/engine/libengine/PhoneticSuggestion.cpp index 33c96e9c..eea87dd3 100644 --- a/src/engine/libengine/PhoneticSuggestion.cpp +++ b/src/engine/libengine/PhoneticSuggestion.cpp @@ -42,18 +42,18 @@ QStringList PhoneticSuggestion::getDictionarySuggestion(QMap s QString PhoneticSuggestion::getAutocorrect(QString word, QMap splitWord) { QString corrected; - QString autoCorrect = autodict.getCorrected(word); + QString autoCorrect = autodict.getCorrected(parser.fixString(word)); if (autoCorrect != "") { if (autoCorrect == word) { corrected = word; } else { - corrected = autoCorrect; + corrected = parser.parse(autoCorrect); } } else { QString withCorrection = autodict.getCorrected(splitWord["middle"]); if (withCorrection != "") { - corrected = withCorrection; + corrected = parser.parse(withCorrection); } } diff --git a/src/engine/libengine/PhoneticSuggestion.h b/src/engine/libengine/PhoneticSuggestion.h index be54e0cf..4906f96d 100644 --- a/src/engine/libengine/PhoneticSuggestion.h +++ b/src/engine/libengine/PhoneticSuggestion.h @@ -15,7 +15,7 @@ #include #include "phoneticparser.h" #include "Database.h" -#include "autocorrect.h" +#include "AutoCorrect.h" #include "cachemanager.h" struct Cache { diff --git a/src/engine/libengine/autocorrect.cpp b/src/engine/libengine/autocorrect.cpp deleted file mode 100644 index 6ea78817..00000000 --- a/src/engine/libengine/autocorrect.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - * OpenBangla Keyboard - * Copyright (C) 2015-2016 Muhammad Mominul Huque - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include -#include -#include -#include "autocorrect.h" -#include "log.h" - -AutoCorrect::AutoCorrect() { - QFile dictFile(PKGDATADIR "/data/autocorrect.json"); - if (!dictFile.open(QIODevice::ReadOnly)) { - LOG_ERROR("[AutoCorrect]: Error: Couldn't open autocorrect dictionary file!\n"); - } - QByteArray data = dictFile.readAll(); - QJsonDocument json(QJsonDocument::fromJson(data)); - - dict = json.object().value("autocorrect").toObject(); - dictFile.close(); -} - -QString AutoCorrect::getCorrected(QString word) { - QString fixed = parser.fixString(word); - QJsonValue corrected = dict.value(fixed); - if(!(corrected.type() == QJsonValue::Undefined)) { - return corrected.toString(); - } else { - return QString(""); - } -} diff --git a/src/frontend/AutoCorrectDialog.cpp b/src/frontend/AutoCorrectDialog.cpp new file mode 100644 index 00000000..57a41b10 --- /dev/null +++ b/src/frontend/AutoCorrectDialog.cpp @@ -0,0 +1,159 @@ +/* + * OpenBangla Keyboard + * Copyright (C) 2018 Muhammad Mominul Huque + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include "AutoCorrectDialog.h" +#include "ui_AutoCorrectDialog.h" + +AutoCorrectDialog::AutoCorrectDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::AutoCorrectDialog) +{ + ui->setupUi(this); + + this->setFixedSize(QSize(this->width(), this->height())); + + ui->autoCorrect->setColumnCount(2); + ui->autoCorrect->setHeaderLabels({"Replace", "With"}); + + ui->btnClear->setEnabled(false); + ui->btnUpdate->setEnabled(false); + + dict.loadAvroPhonetic(); + + loadEntries(); +} + +AutoCorrectDialog::~AutoCorrectDialog() +{ + delete ui; +} + +void AutoCorrectDialog::loadEntries() { + int items = 0; + /* Block any signals for the treelist. + * Otherwise it causes a Segmentation fault. + */ + const QSignalBlocker blocker(ui->autoCorrect); + // Clear the treelist + ui->autoCorrect->clearSelection(); + ui->autoCorrect->clear(); + + QVariantMap acList = dict.getEntries(); + QVariantMap::const_iterator iter = acList.constBegin(); + while(iter != acList.constEnd()) { + addEntries(iter.key(), iter.value().toString()); + ++iter; + ++items; + } + + // Sort list + ui->autoCorrect->sortItems(0, Qt::SortOrder::AscendingOrder); + // Update + ui->lblEntries->setText("Total entries: " + QString::number(items)); +} + +void AutoCorrectDialog::addEntries(QString replace, QString with) { + QTreeWidgetItem *item = new QTreeWidgetItem(ui->autoCorrect); + item->setText(0, replace); + item->setText(1, with); +} + +void AutoCorrectDialog::on_buttonBox_accepted() +{ + dict.saveUserAutoCorrectFile(); + + /* OpenBangla-Engine needs to be restarted to load autocorrect file + * again and produce suggestions based on the modifications made by + * the user. To restart OpenBangla-Engine, we have to restart ibus + * itself. + */ + QProcess *process = new QProcess(this); + process->start("/usr/bin/ibus", {"restart"}); + connect(process, QOverload::of(&QProcess::finished), + [=](int exitCode, QProcess::ExitStatus exitStatus){ + if(exitStatus == QProcess::CrashExit) { + // TODO: View a messagebox + } + }); +} + +void AutoCorrectDialog::on_buttonBox_rejected() +{ + AutoCorrectDialog::close(); +} + +void AutoCorrectDialog::on_btnUpdate_clicked() +{ + dict.setEntry(ui->txtReplace->text().trimmed(), ui->txtWith->text().trimmed()); + loadEntries(); +} + +void AutoCorrectDialog::on_btnClear_clicked() +{ + ui->txtReplace->setText(""); + ui->txtWith->setText(""); +} + +void AutoCorrectDialog::on_txtReplace_textChanged(const QString &arg1) +{ + if(arg1 != "") { + ui->lblPreviewR->setText(dict.convertBanglish(arg1)); + if(!ui->btnClear->isEnabled()) ui->btnClear->setEnabled(true); + if(ui->txtWith->text() != "") { + ui->btnUpdate->setEnabled(true); + } else { + ui->btnUpdate->setEnabled(false); + } + } else { + ui->lblPreviewR->setText(""); + ui->btnClear->setEnabled(false); + ui->btnUpdate->setEnabled(false); + } +} + +void AutoCorrectDialog::on_txtWith_textChanged(const QString &arg1) +{ + if(arg1 != "") { + // smiley rule + if(ui->txtReplace->text() == arg1) { + ui->lblPreviewW->setText(arg1); + } else { + ui->lblPreviewW->setText(dict.convertBanglish(arg1)); + } + + if(!ui->btnClear->isEnabled()) ui->btnClear->setEnabled(true); + if(ui->txtReplace->text() != "") { + ui->btnUpdate->setEnabled(true); + } else { + ui->btnUpdate->setEnabled(false); + } + } else { + ui->lblPreviewW->setText(""); + ui->btnClear->setEnabled(false); + ui->btnUpdate->setEnabled(false); + } +} + +void AutoCorrectDialog::on_autoCorrect_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) +{ + ui->txtReplace->setText(current->text(0)); + ui->txtWith->setText(current->text(1)); +} diff --git a/src/frontend/AutoCorrectDialog.h b/src/frontend/AutoCorrectDialog.h new file mode 100644 index 00000000..1672d328 --- /dev/null +++ b/src/frontend/AutoCorrectDialog.h @@ -0,0 +1,62 @@ +/* + * OpenBangla Keyboard + * Copyright (C) 2018 Muhammad Mominul Huque + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef AUTOCORRECTDIALOG_H +#define AUTOCORRECTDIALOG_H + +#include +#include "AutoCorrect.h" + +class QTreeWidgetItem; + +namespace Ui { +class AutoCorrectDialog; +} + +class AutoCorrectDialog : public QDialog +{ + Q_OBJECT + +public: + explicit AutoCorrectDialog(QWidget *parent = 0); + ~AutoCorrectDialog(); + +private slots: + void on_buttonBox_accepted(); + + void on_buttonBox_rejected(); + + void on_btnUpdate_clicked(); + + void on_btnClear_clicked(); + + void on_txtReplace_textChanged(const QString &arg1); + + void on_txtWith_textChanged(const QString &arg1); + + void on_autoCorrect_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); + +private: + Ui::AutoCorrectDialog *ui; + AutoCorrect dict; + + void loadEntries(); + void addEntries(QString replace, QString with); +}; + +#endif // AUTOCORRECTDIALOG_H diff --git a/src/frontend/AutoCorrectDialog.ui b/src/frontend/AutoCorrectDialog.ui new file mode 100644 index 00000000..8ce135bc --- /dev/null +++ b/src/frontend/AutoCorrectDialog.ui @@ -0,0 +1,228 @@ + + + AutoCorrectDialog + + + + 0 + 0 + 371 + 420 + + + + Edit Phonetic AutoCorrect entries + + + + + 20 + 380 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Save + + + + + + 10 + 170 + 351 + 171 + + + + + 1 + + + + + + + 260 + 130 + 105 + 33 + + + + Add/Update + + + + + + 10 + 70 + 351 + 51 + + + + + + + QFrame::Box + + + QFrame::Raised + + + + + 10 + 10 + 161 + 31 + + + + QFrame::Box + + + QFrame::Raised + + + + + + + + + 180 + 10 + 161 + 31 + + + + QFrame::Box + + + QFrame::Raised + + + + + + + + + + 20 + 10 + 67 + 17 + + + + Replace: + + + + + + 20 + 30 + 161 + 31 + + + + + + + 190 + 10 + 41 + 17 + + + + With: + + + + + + 190 + 30 + 161 + 33 + + + + + + + 6 + 350 + 351 + 20 + + + + Total + + + Qt::AlignCenter + + + + + + 10 + 130 + 105 + 33 + + + + Clear + + + + + + + buttonBox + accepted() + AutoCorrectDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + AutoCorrectDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/frontend/CMakeLists.txt b/src/frontend/CMakeLists.txt index 1a9199da..eac1aab3 100644 --- a/src/frontend/CMakeLists.txt +++ b/src/frontend/CMakeLists.txt @@ -1,4 +1,4 @@ -include_directories(../engine/ ../shared) +include_directories(../engine/ ../shared ../engine/libengine) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) @@ -9,6 +9,7 @@ set(SRC_GUI TopBar.cpp AboutFile.cpp LayoutViewer.cpp SettingsDialog.cpp + AutoCorrectDialog.cpp images.qrc) set(SRC_MAIN main.cpp @@ -18,7 +19,7 @@ set(SRC_MAIN main.cpp SingleInstance.cpp) add_executable(OpenBangla-Keyboard ${SRC_MAIN} ${SRC_GUI}) -target_link_libraries(OpenBangla-Keyboard libShared Qt5::Widgets Qt5::Xml Qt5::Network) +target_link_libraries(OpenBangla-Keyboard libEngine libShared Qt5::Widgets Qt5::Xml Qt5::Network) install(TARGETS OpenBangla-Keyboard RUNTIME DESTINATION ${PROJECT_DATADIR}) diff --git a/src/frontend/OpenBanglaKeyboardFrontendUI.pro b/src/frontend/OpenBanglaKeyboardFrontendUI.pro index 2c90fc40..c220015e 100644 --- a/src/frontend/OpenBanglaKeyboardFrontendUI.pro +++ b/src/frontend/OpenBanglaKeyboardFrontendUI.pro @@ -13,21 +13,24 @@ SOURCES += \ AboutFile.cpp \ LayoutViewer.cpp \ SettingsDialog.cpp \ - AboutDialog.cpp + AboutDialog.cpp \ + AutoCorrectDialog.cpp HEADERS += \ TopBar.h \ AboutFile.h \ LayoutViewer.h \ SettingsDialog.h \ - AboutDialog.h + AboutDialog.h \ + AutoCorrectDialog.h FORMS += \ TopBar.ui \ AboutFile.ui \ LayoutViewer.ui \ SettingsDialog.ui \ - AboutDialog.ui + AboutDialog.ui \ + AutoCorrectDialog.ui RESOURCES += \ images.qrc diff --git a/src/frontend/TopBar.cpp b/src/frontend/TopBar.cpp index 007c1206..5346de5f 100644 --- a/src/frontend/TopBar.cpp +++ b/src/frontend/TopBar.cpp @@ -1,6 +1,6 @@ /* * OpenBangla Keyboard - * Copyright (C) 2016 Muhammad Mominul Huque + * Copyright (C) 2016-2018 Muhammad Mominul Huque * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,7 +22,6 @@ #include #include #include -#include #include "TopBar.h" #include "Layout.h" #include "Settings.h" @@ -31,6 +30,7 @@ #include "AboutFile.h" #include "SettingsDialog.h" #include "LayoutConverter.h" +#include "AutoCorrectDialog.h" #include "ui_TopBar.h" TopBar::TopBar(QWidget *parent) : @@ -46,6 +46,7 @@ TopBar::TopBar(QWidget *parent) : aboutDialog = new AboutDialog(this); layoutViewer = new LayoutViewer(this); settingsDialog = new SettingsDialog(this); + autoCorrectDialog = new AutoCorrectDialog(this); ui->buttonIcon->installEventFilter(this); @@ -60,6 +61,7 @@ TopBar::~TopBar() delete layoutViewer; delete settingsDialog; delete aboutDialog; + delete autoCorrectDialog; delete gLayout; delete gSettings; @@ -126,8 +128,12 @@ void TopBar::SetupPopupMenus() { settingsMenuShowDialog = new QAction("Settings", this); connect(settingsMenuShowDialog, SIGNAL(triggered()), this, SLOT(settingsMenuShowDialog_clicked())); + settingsMenuAutoCorrect = new QAction("Edit Phonetic AutoCorrect entries", this); + connect(settingsMenuAutoCorrect, SIGNAL(triggered()), this, SLOT(settingsMenuAutoCorrect_clicked())); + settingsMenu = new QMenu(this); settingsMenu->addMenu(settingsMenuFixedLayout); + settingsMenu->addAction(settingsMenuAutoCorrect); settingsMenu->addSeparator(); settingsMenu->addAction(settingsMenuShowDialog); @@ -256,6 +262,10 @@ void TopBar::settingsMenuFixedLayoutNumberPad_clicked() { gSettings->setNumberPadFixed(settingsMenuFixedLayoutNumberPad->isChecked()); } +void TopBar::settingsMenuAutoCorrect_clicked() { + autoCorrectDialog->show(); +} + void TopBar::settingsMenuShowDialog_clicked() { settingsDialog->updateSettings(); settingsDialog->show(); diff --git a/src/frontend/TopBar.h b/src/frontend/TopBar.h index 079063a3..a5aab6c8 100644 --- a/src/frontend/TopBar.h +++ b/src/frontend/TopBar.h @@ -1,6 +1,6 @@ /* * OpenBangla Keyboard - * Copyright (C) 2016 Muhammad Mominul Huque + * Copyright (C) 2016-2018 Muhammad Mominul Huque * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,6 +34,7 @@ class LayoutViewer; class AboutDialog; class AboutFile; class SettingsDialog; +class AutoCorrectDialog; class TopBar : public QMainWindow { @@ -51,6 +52,7 @@ class TopBar : public QMainWindow private slots: void layoutMenuLayouts_clicked(); void layoutMenuInstall_clicked(); + void settingsMenuAutoCorrect_clicked(); void settingsMenuFixedLayoutAutoVForm_clicked(); void settingsMenuFixedLayoutAutoChandra_clicked(); void settingsMenuFixedLayoutOldReph_clicked(); @@ -84,6 +86,7 @@ private slots: AboutDialog *aboutDialog; LayoutViewer *layoutViewer; SettingsDialog *settingsDialog; + AutoCorrectDialog *autoCorrectDialog; /* Layout Popup Menu */ QMenu *layoutMenu; @@ -93,6 +96,7 @@ private slots: QAction *layoutMenuInstall; /* Settings Popup Menu */ QMenu *settingsMenu; + QAction *settingsMenuAutoCorrect; QAction *settingsMenuShowDialog; QMenu *settingsMenuFixedLayout; QAction *settingsMenuFixedLayoutAutoVForm;