├── avro-bangla.png
├── utf8.js
├── evars.js.in
├── .gitignore
├── configure.ac
├── ibus-avro.xml.in
├── com.omicronlab.avro.gschema.xml
├── levenshtein.js
├── README.md
├── pref.js
├── Makefile.am
├── dbsearch.js
├── database-compiler.js
├── avropref.ui
├── main-gjs.js
├── suggestionbuilder.js
├── MPL-1.1.txt
├── suffixdict.js
└── avroregexlib.js
/avro-bangla.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omicronlab/ibus-avro/HEAD/avro-bangla.png
--------------------------------------------------------------------------------
/utf8.js:
--------------------------------------------------------------------------------
1 | function utf8Decode(str) {
2 | return decodeURIComponent( escape( str ) );
3 | }
4 |
--------------------------------------------------------------------------------
/evars.js.in:
--------------------------------------------------------------------------------
1 | function get_pkgdatadir(){
2 | return \"${pkgdatadir}\";
3 | }
4 | function get_libexecdir(){
5 | return \"${libexecdir}\";
6 | }
7 |
8 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ibus-avro.xml
2 | Makefile
3 | evars.js
4 | autom4te.cache/
5 | aclocal.m4
6 | config.log
7 | config.status
8 | configure
9 | Makefile.in
10 | install-sh
11 | missing
12 |
--------------------------------------------------------------------------------
/configure.ac:
--------------------------------------------------------------------------------
1 | # -*- Autoconf -*-
2 | # Process this file with autoconf to produce a configure script.
3 |
4 | AC_PREREQ([2.68])
5 | AC_INIT([ibus-avro], [1.0], [sarim2005@gmail.com])
6 | AM_INIT_AUTOMAKE(ibus-avro, 1.0)
7 | AC_OUTPUT(Makefile)
8 | # Checks for programs.
9 |
10 | # Checks for libraries.
11 | PKG_CHECK_MODULES(ibus, ibus-1.0)
12 |
13 | # Checks for header files.
14 |
15 | # Checks for typedefs, structures, and compiler characteristics.
16 |
17 | # Checks for library functions.
18 |
19 | AC_OUTPUT
20 |
--------------------------------------------------------------------------------
/ibus-avro.xml.in:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | org.freedesktop.IBus.Avro
5 | Avro Phonetic
6 | /usr/bin/env gjs --include-path=${pkgdatadir} ${pkgdatadir}/main-gjs.js --ibus > /dev/null
7 | 1.0
8 | Sarim Khan <sarim2005@gmail.com>
9 | MPL 1.1
10 | https://github.com/sarim/ibus-avro
11 | ibus-avro
12 |
13 |
14 |
15 | ibus-avro
16 | bn
17 | MPL
18 | Sarim Khan <sarim2005@gmail.com>
19 | ${pkgdatadir}/avro-bangla.png
20 | bn
21 | Avro Phonetic
22 | Avro Phonetic Input Method
23 | /usr/bin/env gjs --include-path=${pkgdatadir} ${pkgdatadir}/pref.js --standalone
24 | 0
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/com.omicronlab.avro.gschema.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | true
6 | switch-preview
7 | Whether Preview window (auxiliary text, suggestions) will be shown
8 |
9 |
10 | true
11 | switch-dict
12 | Whether dictionary suggestions will be shown
13 |
14 |
15 | false
16 | switch-newline
17 | Whether enter key should commit newline after applying candidate
18 |
19 |
20 | 16
21 | lutable-size
22 | Dictionary suggestion lookup table size
23 |
24 |
25 | 0
26 | cboxorient
27 | Orientation of Lookup Table
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/levenshtein.js:
--------------------------------------------------------------------------------
1 | /*
2 | Javascript Implementation Of Damerau-Levenshtein Distance
3 |
4 | Source:
5 | 1. http://www.dzone.com/snippets/javascript-implementation
6 |
7 | Based on:
8 | 1. http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Levenshtein_distance
9 | 2. http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance
10 |
11 | */
12 |
13 | function levenshtein( a, b )
14 | {
15 | var i;
16 | var j;
17 | var cost;
18 | var d = new Array();
19 |
20 | if ( a.length == 0 )
21 | {
22 | return b.length;
23 | }
24 |
25 | if ( b.length == 0 )
26 | {
27 | return a.length;
28 | }
29 |
30 | for ( i = 0; i <= a.length; i++ )
31 | {
32 | d[ i ] = new Array();
33 | d[ i ][ 0 ] = i;
34 | }
35 |
36 | for ( j = 0; j <= b.length; j++ )
37 | {
38 | d[ 0 ][ j ] = j;
39 | }
40 |
41 | for ( i = 1; i <= a.length; i++ )
42 | {
43 | for ( j = 1; j <= b.length; j++ )
44 | {
45 | if ( a.charAt( i - 1 ) == b.charAt( j - 1 ) )
46 | {
47 | cost = 0;
48 | }
49 | else
50 | {
51 | cost = 1;
52 | }
53 |
54 | d[ i ][ j ] = Math.min( d[ i - 1 ][ j ] + 1, d[ i ][ j - 1 ] + 1, d[ i - 1 ][ j - 1 ] + cost );
55 |
56 | if(
57 | i > 1 &&
58 | j > 1 &&
59 | a.charAt(i - 1) == b.charAt(j-2) &&
60 | a.charAt(i-2) == b.charAt(j-1)
61 | ){
62 | d[i][j] = Math.min(
63 | d[i][j],
64 | d[i - 2][j - 2] + cost
65 | )
66 |
67 | }
68 | }
69 | }
70 |
71 | return d[ a.length ][ b.length ];
72 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Avro phonetic for Linux in IBus
2 | Avro phonetic implementation for Linux in IBus.
3 |
4 | ## Installation
5 |
6 | 1. Open terminal/package manager and install following packages:
7 |
8 | git
9 | libibus-1.0-0
10 | libibus-1.0-dev
11 | ibus
12 | automake
13 | autoconf
14 | gjs
15 | gir1.2-gjsdbus-1.0
16 | gir1.2-ibus-1.0
17 |
18 | __For Ubuntu 12.04__
19 |
20 | sudo apt-get install git ibus libibus-1.0-dev automake autoconf gjs gir1.2-gjsdbus-1.0 gir1.2-ibus-1.0
21 |
22 |
23 | __For other linux distributions__
24 |
25 | You'll need all related build tools like `automake`, `autoconf` etc...
26 | and Latest __IBus__ from _git_ compiled with _gobject-introspection_ support enabled.
27 |
28 | 2. Now give the following commands step-by-step:
29 |
30 | git clone git://github.com/sarim/ibus-avro.git
31 | cd ibus-avro
32 | aclocal && autoconf && automake --add-missing
33 | ./configure --prefix=/usr
34 | sudo make install
35 |
36 |
37 | ## Usage
38 | 1. Run __IBus__ (`Applications -> System Tools -> IBus`) from _Dash_
39 | 2. Open __IBus__ `Preferences` from the top panel icon
40 | 3. Go to `Input method`
41 | 4. `Select an input method -> Bengali -> Avro`
42 | 5. Now Click `Add` button to add __Avro__ to the list
43 | 6. Now restart __IBus__ from the top panel icon (`Right Click -> Restart`)
44 | 7. Now Press `Ctrl+Space` to toggle between _English_ and _Avro_ (Bengali)
45 | 8. Enjoy __Avro Phonetic!__
46 |
47 |
48 | ## Contributors
49 |
50 | __IBus Engine__ by __Sarim Khan__
51 |
52 | [__Avro JavaScript Phonetic Library__](https://github.com/torifat/jsAvroPhonetic) by [__Rifat Nabi__](https://github.com/torifat)
53 |
54 | __Avro Phonetic Dictionary Search Library__ by [__Mehdi Hasan Khan__](https://github.com/omicronlab)
55 |
56 | _Licensed under Mozilla Public License 1.1 ("MPL"), an open source/free software license._
--------------------------------------------------------------------------------
/pref.js:
--------------------------------------------------------------------------------
1 | /*
2 | =============================================================================
3 | *****************************************************************************
4 | The contents of this file are subject to the Mozilla Public License
5 | Version 1.1 (the "License"); you may not use this file except in
6 | compliance with the License. You may obtain a copy of the License at
7 | http://www.mozilla.org/MPL/
8 |
9 | Software distributed under the License is distributed on an "AS IS"
10 | basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
11 | License for the specific language governing rights and limitations
12 | under the License.
13 |
14 | The Original Code is ibus-avro
15 |
16 | The Initial Developer of the Original Code is
17 | Sarim Khan
18 |
19 | Copyright (C) Sarim Khan (http://www.sarimkhan.com). All Rights Reserved.
20 |
21 |
22 | Contributor(s): ______________________________________.
23 |
24 | *****************************************************************************
25 | =============================================================================
26 | */
27 |
28 | imports.searchPath.unshift('.');
29 | const Gio = imports.gi.Gio;
30 | const Gtk = imports.gi.Gtk;
31 | const GLib = imports.gi.GLib;
32 | const eevars = imports.evars;
33 |
34 | var prefwindow, switch_preview, switch_newline, switch_dict, lutable_size, cboxorient, scale1;
35 |
36 | function runpref() {
37 |
38 | Gtk.init(null, 0);
39 | let builder = new Gtk.Builder();
40 | builder.add_from_file(eevars.get_pkgdatadir() + "/avropref.ui");
41 |
42 | prefwindow = builder.get_object("window1");
43 | switch_preview = builder.get_object("switch_preview");
44 | switch_newline = builder.get_object("switch_newline");
45 | switch_dict = builder.get_object("switch_dict");
46 | lutable_size = builder.get_object("lutable_size");
47 | scale1 = builder.get_object("scale1");
48 | cboxorient = builder.get_object("cboxorient");
49 |
50 | switch_preview.connect("notify::active", validate);
51 | switch_newline.connect("notify::active", validate);
52 | switch_dict.connect("notify::active", validate);
53 |
54 |
55 | let setting = Gio.Settings.new("com.omicronlab.avro")
56 | setting.bind("switch-preview", switch_preview, "active", Gio.SettingsBindFlags.DEFAULT)
57 | setting.bind("switch-dict", switch_dict, "active", Gio.SettingsBindFlags.DEFAULT)
58 | setting.bind("switch-newline", switch_newline, "active", Gio.SettingsBindFlags.DEFAULT)
59 | setting.bind("lutable-size", lutable_size, "value", Gio.SettingsBindFlags.DEFAULT)
60 | setting.bind("cboxorient", cboxorient, "active", Gio.SettingsBindFlags.DEFAULT)
61 |
62 | validate();
63 |
64 | prefwindow.connect ("destroy", function(){Gtk.main_quit()});
65 | prefwindow.show_all();
66 |
67 | Gtk.main();
68 | }
69 |
70 | function validate(){
71 | if (!switch_preview.get_active()){
72 | switch_newline.set_active(false);
73 | switch_dict.set_active(false);
74 |
75 | switch_dict.sensitive = false;
76 | switch_newline.sensitive = false;
77 | scale1.sensitive = false;
78 | cboxorient.sensitive = false;
79 | } else {
80 | switch_dict.sensitive = true;
81 | switch_newline.sensitive = true;
82 | scale1.sensitive = true;
83 | cboxorient.sensitive = true;
84 | }
85 | }
86 |
87 | //check if running standalone
88 | if(ARGV[0] == '--standalone'){
89 | //running standalone, so no one to call me,calling myself
90 | runpref();
91 | }
92 |
--------------------------------------------------------------------------------
/Makefile.am:
--------------------------------------------------------------------------------
1 | AUTOMAKE_OPTIONS = foreign
2 | FILES = autocorrect.js avro-bangla.png avrodict.js avrolib.js avropref.ui avroregexlib.js changeloggen.sh com.omicronlab.avro.gschema.xml configure.ac database-compiler.js Database.db3 dbsearch.js evars.js.in ibus-avro.xml.in levenshtein.js main-gjs.js Makefile.am pref.js README.md suffixdict.js suggestionbuilder.js utf8.js
3 |
4 | all: build
5 | @:
6 |
7 | build: evars.js ibus-avro.xml main-gjs.js avrolib.js utf8.js avro-bangla.png avrodict.js suffixdict.js dbsearch.js avroregexlib.js suggestionbuilder.js levenshtein.js autocorrect.js
8 | @:
9 |
10 | ibus-avro.xml: ibus-avro.xml.in
11 | $(AM_V_GEN) \
12 | ( \
13 | libexecdir=${libexecdir}; \
14 | pkgdatadir=${pkgdatadir}; \
15 | s=`cat $<`; \
16 | eval "echo \"$${s}\""; \
17 | ) > $@
18 |
19 |
20 | evars.js: evars.js.in
21 | $(AM_V_GEN) \
22 | ( \
23 | libexecdir=${libexecdir}; \
24 | pkgdatadir=${pkgdatadir}; \
25 | s=`cat $<`; \
26 | eval "echo \"$${s}\""; \
27 | ) > $@
28 |
29 | install: all
30 | mkdir -p $(pkgdatadir)/
31 | mkdir -p $(libexecdir)/
32 | mkdir -p ${pkgdatadir}/../glib-2.0/schemas/
33 | mkdir -p ${pkgdatadir}/../ibus/component/
34 | ${INSTALL} -m 644 evars.js ${pkgdatadir}/evars.js
35 | ${INSTALL} -m 755 main-gjs.js ${pkgdatadir}/main-gjs.js
36 | ${INSTALL} -m 644 avrolib.js ${pkgdatadir}/avrolib.js
37 | ${INSTALL} -m 644 utf8.js ${pkgdatadir}/utf8.js
38 | ${INSTALL} -m 644 avrodict.js ${pkgdatadir}/avrodict.js
39 | ${INSTALL} -m 644 suffixdict.js ${pkgdatadir}/suffixdict.js
40 | ${INSTALL} -m 644 dbsearch.js ${pkgdatadir}/dbsearch.js
41 | ${INSTALL} -m 644 avroregexlib.js ${pkgdatadir}/avroregexlib.js
42 | ${INSTALL} -m 644 suggestionbuilder.js ${pkgdatadir}/suggestionbuilder.js
43 | ${INSTALL} -m 644 levenshtein.js ${pkgdatadir}/levenshtein.js
44 | ${INSTALL} -m 644 autocorrect.js ${pkgdatadir}/autocorrect.js
45 | ${INSTALL} -m 755 pref.js ${pkgdatadir}/pref.js
46 | ${INSTALL} -m 644 avropref.ui ${pkgdatadir}/avropref.ui
47 | ${INSTALL} -m 644 avro-bangla.png ${pkgdatadir}/avro-bangla.png
48 | ${INSTALL} -m 644 ibus-avro.xml ${pkgdatadir}/../ibus/component/ibus-avro.xml
49 | ${INSTALL} -m 644 com.omicronlab.avro.gschema.xml ${pkgdatadir}/../glib-2.0/schemas/com.omicronlab.avro.gschema.xml
50 | glib-compile-schemas ${pkgdatadir}/../glib-2.0/schemas/
51 |
52 | installdeb: all
53 | mkdir -p $(DESTDIR)$(pkgdatadir)/
54 | mkdir -p $(DESTDIR)$(libexecdir)/
55 | mkdir -p $(DESTDIR)${pkgdatadir}/../glib-2.0/schemas/
56 | mkdir -p $(DESTDIR)${pkgdatadir}/../ibus/component/
57 | ${INSTALL} -m 644 evars.js $(DESTDIR)${pkgdatadir}/evars.js
58 | ${INSTALL} -m 755 main-gjs.js $(DESTDIR)${pkgdatadir}/main-gjs.js
59 | ${INSTALL} -m 644 avrolib.js $(DESTDIR)${pkgdatadir}/avrolib.js
60 | ${INSTALL} -m 644 utf8.js $(DESTDIR)${pkgdatadir}/utf8.js
61 | ${INSTALL} -m 644 avrodict.js $(DESTDIR)${pkgdatadir}/avrodict.js
62 | ${INSTALL} -m 644 suffixdict.js $(DESTDIR)${pkgdatadir}/suffixdict.js
63 | ${INSTALL} -m 644 dbsearch.js $(DESTDIR)${pkgdatadir}/dbsearch.js
64 | ${INSTALL} -m 644 avroregexlib.js $(DESTDIR)${pkgdatadir}/avroregexlib.js
65 | ${INSTALL} -m 644 suggestionbuilder.js $(DESTDIR)${pkgdatadir}/suggestionbuilder.js
66 | ${INSTALL} -m 644 levenshtein.js $(DESTDIR)${pkgdatadir}/levenshtein.js
67 | ${INSTALL} -m 644 autocorrect.js $(DESTDIR)${pkgdatadir}/autocorrect.js
68 | ${INSTALL} -m 755 pref.js $(DESTDIR)${pkgdatadir}/pref.js
69 | ${INSTALL} -m 644 avropref.ui $(DESTDIR)${pkgdatadir}/avropref.ui
70 | ${INSTALL} -m 644 avro-bangla.png $(DESTDIR)${pkgdatadir}/avro-bangla.png
71 | ${INSTALL} -m 644 ibus-avro.xml $(DESTDIR)${pkgdatadir}/../ibus/component/ibus-avro.xml
72 | ${INSTALL} -m 644 com.omicronlab.avro.gschema.xml $(DESTDIR)${pkgdatadir}/../glib-2.0/schemas/com.omicronlab.avro.gschema.xml
73 |
74 | uninstall:
75 | rm ${pkgdatadir}/../ibus/component/ibus-avro.xml
76 | rm ${pkgdatadir}/../glib-2.0/schemas/com.omicronlab.avro.gschema.xml
77 | glib-compile-schemas ${pkgdatadir}/../glib-2.0/schemas/
78 | rm -rf ${pkgdatadir}
79 |
80 | clean:
81 | @:
82 | cleanup:
83 | rm -r evars.js ibus-avro.xml Makefile autom4te.cache/ aclocal.m4 config.log config.status configure Makefile.in install-sh missing
84 | .PHONY: all build clean
85 |
--------------------------------------------------------------------------------
/dbsearch.js:
--------------------------------------------------------------------------------
1 | /*
2 | =============================================================================
3 | *****************************************************************************
4 | The contents of this file are subject to the Mozilla Public License
5 | Version 1.1 (the "License"); you may not use this file except in
6 | compliance with the License. You may obtain a copy of the License at
7 | http://www.mozilla.org/MPL/
8 |
9 | Software distributed under the License is distributed on an "AS IS"
10 | basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
11 | License for the specific language governing rights and limitations
12 | under the License.
13 |
14 | The Original Code is jsAvroPhonetic
15 |
16 | The Initial Developer of the Original Code is
17 | Mehdi Hasan Khan
18 |
19 | Copyright (C) OmicronLab (http://www.omicronlab.com). All Rights Reserved.
20 |
21 |
22 | Contributor(s): ______________________________________.
23 |
24 | *****************************************************************************
25 | =============================================================================
26 | */
27 |
28 |
29 | const db = imports.avrodict;
30 | const RegexServer = imports.avroregexlib;
31 | const utfconv = imports.utf8;
32 |
33 | function DBSearch () {
34 | this._init();
35 | }
36 |
37 | DBSearch.prototype = {
38 |
39 | search: function (enText) {
40 |
41 | var lmc = enText.toLowerCase().charAt(0);
42 | var tableList = [];
43 | switch (lmc) {
44 | case 'a':
45 | tableList = ["a", "aa", "e", "oi", "o", "nya", "y"];
46 | break;
47 | case 'b':
48 | tableList = ["b", "bh"];
49 | break;
50 | case 'c':
51 | tableList = ["c", "ch", "k"];
52 | break;
53 | case 'd':
54 | tableList = ["d", "dh", "dd", "ddh"];
55 | break;
56 | case 'e':
57 | tableList = ["i", "ii", "e", "y"];
58 | break;
59 | case 'f':
60 | tableList = ["ph"];
61 | break;
62 | case 'g':
63 | tableList = ["g", "gh", "j"];
64 | break;
65 | case 'h':
66 | tableList = ["h"];
67 | break;
68 | case 'i':
69 | tableList = ["i", "ii", "y"];
70 | break;
71 | case 'j':
72 | tableList = ["j", "jh", "z"];
73 | break;
74 | case 'k':
75 | tableList = ["k", "kh"];
76 | break;
77 | case 'l':
78 | tableList = ["l"];
79 | break;
80 | case 'm':
81 | tableList = ["h", "m"];
82 | break;
83 | case 'n':
84 | tableList = ["n", "nya", "nga", "nn"];
85 | break;
86 | case 'o':
87 | tableList = ["a", "u", "uu", "oi", "o", "ou", "y"];
88 | break;
89 | case 'p':
90 | tableList = ["p", "ph"];
91 | break;
92 | case 'q':
93 | tableList = ["k"];
94 | break;
95 | case 'r':
96 | tableList = ["rri", "h", "r", "rr", "rrh"];
97 | break;
98 | case 's':
99 | tableList = ["s", "sh", "ss"];
100 | break;
101 | case 't':
102 | tableList = ["t", "th", "tt", "tth", "khandatta"];
103 | break;
104 | case 'u':
105 | tableList = ["u", "uu", "y"];
106 | break;
107 | case 'v':
108 | tableList = ["bh"];
109 | break;
110 | case 'w':
111 | tableList = ["o"];
112 | break;
113 | case 'x':
114 | tableList = ["e", "k"];
115 | break;
116 | case 'y':
117 | tableList = ["i", "y"];
118 | break;
119 | case 'z':
120 | tableList = ["h", "j", "jh", "z"];
121 | break;
122 | default:
123 | break;
124 | }
125 |
126 | var pattern = this._regex.parse(enText);
127 | pattern = '^' + pattern + '$';
128 |
129 | var retWords = [];
130 |
131 | for(i in tableList) {
132 | var table = 'w_' + tableList[i];
133 | retWords = retWords.concat(this._searchInArray(pattern, db.tables[table]));
134 | }
135 |
136 | return retWords;
137 | },
138 |
139 |
140 | _searchInArray: function(pattern, wArray){
141 | var retWords = [];
142 | var word = '';
143 | var re = new RegExp(pattern);
144 |
145 | for (w in wArray){
146 | word = wArray[w];
147 | if (re.test(word)){
148 | retWords.push(word);
149 | }
150 | }
151 | return retWords;
152 | },
153 |
154 |
155 | _printWords: function (enText) {
156 | var words = this.search(enText);
157 | for (w in words){
158 | print(words[w]);
159 | }
160 | },
161 |
162 |
163 | _init: function () {
164 | this._regex = new RegexServer.AvroRegex();
165 | }
166 | }
167 |
168 |
169 | /* --------- */
170 | /* Test code */
171 | /* --------- */
172 | // var __dbSearch = new DBSearch ();
173 | // __dbSearch._printWords('onirban');
174 |
--------------------------------------------------------------------------------
/database-compiler.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env gjs
2 |
3 | /*
4 | =============================================================================
5 | *****************************************************************************
6 | The contents of this file are subject to the Mozilla Public License
7 | Version 1.1 (the "License"); you may not use this file except in
8 | compliance with the License. You may obtain a copy of the License at
9 | http://www.mozilla.org/MPL/
10 |
11 | Software distributed under the License is distributed on an "AS IS"
12 | basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
13 | License for the specific language governing rights and limitations
14 | under the License.
15 |
16 | The Original Code is jsAvroPhonetic
17 |
18 | The Initial Developer of the Original Code is
19 | Mehdi Hasan Khan
20 |
21 | Copyright (C) OmicronLab (http://www.omicronlab.com). All Rights Reserved.
22 |
23 |
24 | Contributor(s): ______________________________________.
25 |
26 | *****************************************************************************
27 | =============================================================================
28 | */
29 |
30 | const gio = imports.gi.Gio;
31 | const GLib = imports.gi.GLib;
32 | const Gda = imports.gi.Gda;
33 |
34 | function DB () {}
35 |
36 | var database = {};
37 | var suffixDict = {};
38 |
39 | DB.prototype = {
40 |
41 | loadDb: function () {
42 | this._init();
43 | //TODO: Change path
44 | this.connection = new Gda.Connection ({provider: Gda.Config.get_provider("SQLite"),
45 | cnc_string:"DB_DIR=" + GLib.get_current_dir() + ";DB_NAME=Database.db3"});
46 | this.connection.open ();
47 | //Vowels
48 | this._loadOneTable('A', database.w_a);
49 | this._loadOneTable('AA', database.w_aa);
50 | this._loadOneTable('I', database.w_i);
51 | this._loadOneTable('II', database.w_ii);
52 | this._loadOneTable('U', database.w_u);
53 | this._loadOneTable('UU', database.w_uu);
54 | this._loadOneTable('RRI', database.w_rri);
55 | this._loadOneTable('E', database.w_e);
56 | this._loadOneTable('OI', database.w_oi);
57 | this._loadOneTable('O', database.w_o);
58 | this._loadOneTable('OU', database.w_ou);
59 | //Consonants
60 | this._loadOneTable('B', database.w_b);
61 | this._loadOneTable('BH', database.w_bh);
62 | this._loadOneTable('C', database.w_c);
63 | this._loadOneTable('CH', database.w_ch);
64 | this._loadOneTable('D', database.w_d);
65 | this._loadOneTable('Dd', database.w_dd);
66 | this._loadOneTable('Dh', database.w_dh);
67 | this._loadOneTable('Ddh', database.w_ddh);
68 | this._loadOneTable('G', database.w_g);
69 | this._loadOneTable('Gh', database.w_gh);
70 | this._loadOneTable('H', database.w_h);
71 | this._loadOneTable('J', database.w_j);
72 | this._loadOneTable('Jh', database.w_jh);
73 | this._loadOneTable('K', database.w_k);
74 | this._loadOneTable('Kh', database.w_kh);
75 | this._loadOneTable('L', database.w_l);
76 | this._loadOneTable('M', database.w_m);
77 | this._loadOneTable('N', database.w_n);
78 | this._loadOneTable('NN', database.w_nn);
79 | this._loadOneTable('NGA', database.w_nga);
80 | this._loadOneTable('NYA', database.w_nya);
81 | this._loadOneTable('P', database.w_p);
82 | this._loadOneTable('Ph', database.w_ph);
83 | this._loadOneTable('R', database.w_r);
84 | this._loadOneTable('Rr', database.w_rr);
85 | this._loadOneTable('Rrh', database.w_rrh);
86 | this._loadOneTable('S', database.w_s);
87 | this._loadOneTable('Sh', database.w_sh);
88 | this._loadOneTable('Ss', database.w_ss);
89 | this._loadOneTable('T', database.w_t);
90 | this._loadOneTable('TT', database.w_tt);
91 | this._loadOneTable('TH', database.w_th);
92 | this._loadOneTable('TTH', database.w_tth);
93 | this._loadOneTable('Y', database.w_y);
94 | this._loadOneTable('Z', database.w_z);
95 | this._loadOneTable('Khandatta', database.w_khandatta);
96 |
97 | this._loadSuffix();
98 |
99 | this.connection.close ();
100 | },
101 |
102 |
103 | unloadDb: function () {
104 | this._init();
105 | },
106 |
107 |
108 | _loadSuffix: function(){
109 | if (this.connection){
110 | if (this.connection.is_opened){
111 | var dm = this.connection.execute_select_command ("select * from Suffix");
112 | var iter = dm.create_iter();
113 |
114 | while (iter.move_next ()) {
115 | suffixDict[Gda.value_stringify (iter.get_value_at (0))] = Gda.value_stringify (iter.get_value_at (1));
116 | }
117 | }
118 | }
119 | },
120 |
121 | _loadOneTable: function (tableName, wArray) {
122 | if (this.connection){
123 | if (this.connection.is_opened){
124 | var dm = this.connection.execute_select_command ("select * from " + tableName);
125 | var iter = dm.create_iter();
126 |
127 | while (iter.move_next ()) {
128 | var w = Gda.value_stringify (iter.get_value_at (0));
129 | wArray.push(w);
130 | }
131 | }
132 | }
133 | },
134 |
135 |
136 | _init: function () {
137 |
138 | database = {};
139 | suffixDict = {};
140 |
141 | database.w_a = [];
142 | database.w_aa = [];
143 | database.w_i = [];
144 | database.w_ii = [];
145 | database.w_u = [];
146 | database.w_uu = [];
147 | database.w_rri = [];
148 | database.w_e = [];
149 | database.w_oi = [];
150 | database.w_o = [];
151 | database.w_ou = [];
152 |
153 | database.w_b = [];
154 | database.w_bh = [];
155 | database.w_c = [];
156 | database.w_ch = [];
157 | database.w_d = [];
158 | database.w_dh = [];
159 | database.w_dd = [];
160 | database.w_ddh = [];
161 | database.w_g = [];
162 | database.w_gh = [];
163 | database.w_h = [];
164 | database.w_j = [];
165 | database.w_jh = [];
166 | database.w_k = [];
167 | database.w_kh = [];
168 | database.w_l = [];
169 | database.w_m = [];
170 | database.w_n = [];
171 | database.w_nga = [];
172 | database.w_nya = [];
173 | database.w_nn = [];
174 | database.w_p = [];
175 | database.w_ph = [];
176 | database.w_r = [];
177 | database.w_rr = [];
178 | database.w_rrh = [];
179 | database.w_s = [];
180 | database.w_sh = [];
181 | database.w_ss = [];
182 | database.w_t = [];
183 | database.w_th = [];
184 | database.w_tt = [];
185 | database.w_tth = [];
186 | database.w_y = [];
187 | database.w_z = [];
188 | database.w_khandatta = [];
189 | }
190 | }
191 |
192 | function _convertToUnicodeValue(input){
193 | var output = '';
194 |
195 | for (var i = 0; i < input.length; i++){
196 | var charCode = input.charCodeAt(i);
197 | if (charCode >= 255){
198 | output += '\\u0' + charCode.toString(16);
199 | } else {
200 | output += input.charAt(i);
201 | }
202 | }
203 | return output;
204 | }
205 |
206 |
207 | function saveSuffix () {
208 | try {
209 | var file = gio.File.new_for_path ("suffixdict.js");
210 |
211 | if (file.query_exists (null)) {
212 | file.delete (null);
213 | }
214 |
215 | // Create a new file with this name
216 | var file_stream = file.create (gio.FileCreateFlags.NONE, null);
217 |
218 | var json = JSON.stringify(suffixDict);
219 | json = "var db = " + _convertToUnicodeValue(json) + ";";
220 |
221 | // Write text data to file
222 | var data_stream = gio.DataOutputStream.new (file_stream);
223 | data_stream.put_string (json, null);
224 |
225 | } catch (e) {
226 | print ("Error: " + e.message);
227 | }
228 | }
229 |
230 |
231 | function saveData () {
232 | try {
233 | var file = gio.File.new_for_path ("avrodict.js");
234 |
235 | if (file.query_exists (null)) {
236 | file.delete (null);
237 | }
238 |
239 | // Create a new file with this name
240 | var file_stream = file.create (gio.FileCreateFlags.NONE, null);
241 |
242 | var json = JSON.stringify(database);
243 | json = "var tables = " + _convertToUnicodeValue(json) + ";";
244 |
245 | // Write text data to file
246 | var data_stream = gio.DataOutputStream.new (file_stream);
247 | data_stream.put_string (json, null);
248 |
249 | } catch (e) {
250 | print ("Error: " + e.message);
251 | }
252 | }
253 |
254 | var __db = new DB ();
255 | __db.loadDb();
256 | saveData();
257 | saveSuffix();
--------------------------------------------------------------------------------
/avropref.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
197 |
198 |
--------------------------------------------------------------------------------
/main-gjs.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env gjs
2 |
3 | /*
4 | =============================================================================
5 | *****************************************************************************
6 | The contents of this file are subject to the Mozilla Public License
7 | Version 1.1 (the "License"); you may not use this file except in
8 | compliance with the License. You may obtain a copy of the License at
9 | http://www.mozilla.org/MPL/
10 |
11 | Software distributed under the License is distributed on an "AS IS"
12 | basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
13 | License for the specific language governing rights and limitations
14 | under the License.
15 |
16 | The Original Code is ibus-avro
17 |
18 | The Initial Developer of the Original Code is
19 | Sarim Khan
20 |
21 | Copyright (C) Sarim Khan (http://www.sarimkhan.com). All Rights Reserved.
22 |
23 |
24 | Contributor(s): Mehdi Hasan Khan
25 |
26 | *****************************************************************************
27 | =============================================================================
28 | */
29 |
30 |
31 | const IBus = imports.gi.IBus;
32 | imports.searchPath.unshift('.');
33 | const eevars = imports.evars;
34 | const suggestion = imports.suggestionbuilder;
35 | const Gio = imports.gi.Gio;
36 | const prefwindow = imports.pref;
37 |
38 | //check if running from ibus
39 | exec_by_ibus = (ARGV[0] == '--ibus')
40 |
41 | // Let's initialize ibus
42 | IBus.init();
43 |
44 | //get the ibus bus
45 | var bus = new IBus.Bus();
46 |
47 | if (bus.is_connected()) {
48 |
49 | /* =========================================================================== */
50 | /* =========================================================================== */
51 | /* IBus Engine */
52 | /* =========================================================================== */
53 | /* =========================================================================== */
54 |
55 | var id = 0;
56 |
57 | function _create_engine_cb(factory, engine_name) {
58 |
59 | id += 1;
60 | var engine = new IBus.Engine({
61 | engine_name: engine_name,
62 | object_path: '/org/freedesktop/IBus/Engine/' + id,
63 | connection: bus.get_connection()
64 | });
65 |
66 | engine.connect('process-key-event', function (engine, keyval, keycode, state) {
67 |
68 | //print keypress infos, helpful for debugging
69 | print(keyval + " " + keycode + " " + state);
70 |
71 | //ignore release event
72 | if (!(state == 0 || state == 1 || state == 16 || state == 17)) {
73 | return false;
74 | }
75 |
76 | // capture the shift key
77 | if (keycode == 42) {
78 | return true;
79 | }
80 |
81 | // process letter key events
82 | if ((keyval >= 33 && keyval <= 126) ||
83 | (keyval >= IBus.KP_0 && keyval <= IBus.KP_9) ||
84 | keyval == IBus.KP_Add ||
85 | keyval == IBus.KP_Decimal ||
86 | keyval == IBus.KP_Divide ||
87 | keyval == IBus.KP_Multiply ||
88 | keyval == IBus.KP_Divide ||
89 | keyval == IBus.KP_Subtract) {
90 |
91 | engine.buffertext += IBus.keyval_to_unicode(keyval);
92 | updateCurrentSuggestions(engine);
93 | return true;
94 |
95 | } else if (keyval == IBus.Return || keyval == IBus.space || keyval == IBus.Tab) {
96 | if (engine.buffertext.length > 0){
97 | if ((keyval == IBus.Return) && engine.setting_switch_newline && engine.setting_switch_preview && (engine.buffertext.length > 0)){
98 | commitCandidate(engine);
99 | return true;
100 | } else {
101 | commitCandidate(engine);
102 | }
103 | }
104 |
105 | } else if (keyval == IBus.BackSpace) {
106 | if (engine.buffertext.length > 0) {
107 | engine.buffertext = engine.buffertext.substr(0, engine.buffertext.length - 1);
108 | updateCurrentSuggestions(engine);
109 |
110 | if (engine.buffertext.length <= 0) {
111 | resetAll(engine);
112 | }
113 | return true;
114 | }
115 | } else if (keyval == IBus.Left || keyval == IBus.KP_Left || keyval == IBus.Right || keyval == IBus.KP_Right) {
116 | if (engine.currentSuggestions.length <= 0 || engine.lookuptable.get_orientation() == 1){
117 | commitCandidate(engine);
118 | } else {
119 | if (keyval == IBus.Left || keyval == IBus.KP_Left) {
120 | decSelection(engine);
121 | }
122 | else if (keyval == IBus.Right || keyval == IBus.KP_Right) {
123 | incSelection(engine);
124 | }
125 |
126 | return true;
127 | }
128 |
129 | } else if (keyval == IBus.Up || keyval == IBus.KP_Up || keyval == IBus.Down || keyval == IBus.KP_Down) {
130 | print (engine.lookuptable.get_orientation());
131 | if (engine.currentSuggestions.length <= 0 || engine.lookuptable.get_orientation() == 0){
132 | commitCandidate(engine);
133 | } else {
134 | if (keyval == IBus.Up) {
135 | decSelection(engine);
136 | }
137 | else if (keyval == IBus.Down) {
138 | incSelection(engine);
139 | }
140 |
141 | return true;
142 | }
143 |
144 | } else if (keyval == IBus.Control_L ||
145 | keyval == IBus.Control_R ||
146 | keyval == IBus.Insert ||
147 | keyval == IBus.KP_Insert ||
148 | keyval == IBus.Delete ||
149 | keyval == IBus.KP_Delete ||
150 | keyval == IBus.Home ||
151 | keyval == IBus.KP_Home ||
152 | keyval == IBus.Page_Up ||
153 | keyval == IBus.KP_Page_Up ||
154 | keyval == IBus.Page_Down ||
155 | keyval == IBus.KP_Page_Down ||
156 | keyval == IBus.End ||
157 | keyval == IBus.KP_End ||
158 | keyval == IBus.Alt_L ||
159 | keyval == IBus.Alt_R ||
160 | keyval == IBus.Super_L ||
161 | keyval == IBus.Super_R ||
162 | keyval == IBus.Return ||
163 | keyval == IBus.space ||
164 | keyval == IBus.Tab ||
165 | keyval == IBus.KP_Enter) {
166 |
167 | commitCandidate(engine);
168 | }
169 | return false;
170 | });
171 |
172 | engine.connect('candidate-clicked', function (engine,index,button,state) {
173 | if (engine.buffertext.length > 0) {
174 | engine.currentSelection = index;
175 | preeditCandidate(engine);
176 | suggestionBuilder.updateCandidateSelection(engine.buffertext, engine.currentSuggestions[engine.currentSelection]);
177 | print("candidate clicked: " + index + " " + button + " " + state);
178 | }
179 |
180 | });
181 |
182 | engine.connect('focus-out', function () {
183 | if (engine.buffertext.length > 0) {
184 | commitCandidate(engine);
185 | }
186 | });
187 |
188 | engine.connect('focus-in', function () {
189 | engine.register_properties(proplist);
190 | });
191 |
192 | engine.connect('property-activate', function () {
193 | runPreferences();
194 | });
195 |
196 | var proplist = new IBus.PropList();
197 | var propp = new IBus.Property.new(
198 | 'setup',
199 | IBus.PropType.NORMAL,
200 | IBus.Text.new_from_string("Preferences - Avro"),
201 | 'gtk-preferences',
202 | IBus.Text.new_from_string("Configure Avro"),
203 | true,
204 | true,
205 | IBus.PropState.UNCHECKED,
206 | null
207 | );
208 |
209 | proplist.append(propp);
210 | engine.lookuptable = IBus.LookupTable.new(16, 0, true, true);
211 | resetAll(engine);
212 | initSetting(engine);
213 | return engine;
214 | }
215 |
216 | /* =========================================================================== */
217 | /* =========================================================================== */
218 | /* Engine Utility Functions */
219 | /* =========================================================================== */
220 | /* =========================================================================== */
221 |
222 | var suggestionBuilder = new suggestion.SuggestionBuilder();
223 |
224 | function initSetting(engine){
225 | engine.setting = Gio.Settings.new("com.omicronlab.avro");
226 |
227 | //set up a asynchronous callback for instant change later
228 | engine.setting.connect('changed',
229 | function(){
230 | readSetting(engine);
231 | });
232 |
233 | //read manually first time
234 | readSetting(engine);
235 | }
236 |
237 |
238 | function readSetting(engine){
239 | engine.setting_switch_preview = engine.setting.get_boolean('switch-preview');
240 | engine.setting_switch_dict = engine.setting.get_boolean('switch-dict');
241 | engine.setting_switch_newline = engine.setting.get_boolean('switch-newline');
242 | engine.lookuptable.set_orientation(engine.setting.get_int('cboxorient'));
243 | engine.setting_lutable_size = engine.setting.get_int('lutable-size');
244 | engine.lookuptable.set_page_size(engine.setting_lutable_size);
245 |
246 | if (!engine.setting_switch_preview){
247 | engine.setting_switch_dict = false;
248 | engine.setting_switch_newline = false;
249 | }
250 |
251 | var dictPref = suggestionBuilder.getPref();
252 | dictPref.dictEnable = engine.setting_switch_dict;
253 | suggestionBuilder.setPref(dictPref);
254 | }
255 |
256 |
257 | function resetAll(engine){
258 | engine.currentSuggestions = [];
259 | engine.currentSelection = 0;
260 |
261 | engine.buffertext = "";
262 | engine.lookuptable.clear();
263 | engine.hide_preedit_text();
264 | engine.hide_auxiliary_text();
265 | engine.hide_lookup_table();
266 | }
267 |
268 |
269 | function updateCurrentSuggestions(engine){
270 | var suggestion = suggestionBuilder.suggest(engine.buffertext);
271 | engine.currentSuggestions = suggestion['words'].slice(0, engine.setting_lutable_size);
272 | engine.currentSelection = suggestion['prevSelection'];
273 |
274 | fillLookupTable (engine);
275 | }
276 |
277 |
278 | function fillLookupTable (engine){
279 |
280 | if (engine.setting_switch_preview){
281 | var auxiliaryText = IBus.Text.new_from_string(engine.buffertext);
282 | engine.update_auxiliary_text(auxiliaryText, true);
283 |
284 | if (engine.setting_switch_dict){
285 | engine.lookuptable.clear();
286 |
287 | engine.currentSuggestions.forEach(function(word){
288 | let wtext = IBus.Text.new_from_string(word);
289 | //default, ibus sets "1,2,3,4...." as label, i didn't find how to hide it,but a empty string can partially hide it
290 | let wlabel = IBus.Text.new_from_string('');;
291 | engine.lookuptable.append_candidate(wtext);
292 | engine.lookuptable.append_label(wlabel);
293 | });
294 | }
295 | }
296 |
297 | preeditCandidate(engine);
298 | }
299 |
300 |
301 | function preeditCandidate(engine){
302 | if (engine.setting_switch_preview){
303 | if (engine.setting_switch_dict){
304 | engine.lookuptable.set_cursor_pos(engine.currentSelection);
305 | engine.update_lookup_table_fast(engine.lookuptable,true);
306 | }
307 | }
308 |
309 | var preeditText = IBus.Text.new_from_string(engine.currentSuggestions[engine.currentSelection]);
310 | engine.update_preedit_text(preeditText, engine.currentSuggestions[engine.currentSelection].length, true);
311 | }
312 |
313 | function commitCandidate(engine){
314 | if (engine.buffertext.length > 0){
315 | var commitText = IBus.Text.new_from_string(engine.currentSuggestions[engine.currentSelection]);
316 | engine.commit_text(commitText);
317 | }
318 |
319 | suggestionBuilder.stringCommitted(engine.buffertext, engine.currentSuggestions[engine.currentSelection]);
320 |
321 | resetAll(engine);
322 | }
323 |
324 | function incSelection(engine){
325 | var lastIndex = engine.currentSuggestions.length - 1;
326 |
327 | if ((engine.currentSelection + 1) > lastIndex){
328 | engine.currentSelection = -1;
329 | }
330 | ++engine.currentSelection;
331 | preeditCandidate(engine);
332 |
333 | suggestionBuilder.updateCandidateSelection(engine.buffertext, engine.currentSuggestions[engine.currentSelection]);
334 | }
335 |
336 | function decSelection(engine){
337 | if ((engine.currentSelection - 1) < 0){
338 | engine.currentSelection = engine.currentSuggestions.length;
339 | }
340 | --engine.currentSelection;
341 | preeditCandidate(engine);
342 |
343 | suggestionBuilder.updateCandidateSelection(engine.buffertext, engine.currentSuggestions[engine.currentSelection]);
344 | }
345 |
346 | function runPreferences(){
347 | //code for running preferences windows will be here
348 | prefwindow.runpref();
349 | }
350 | /* =========================================================================== */
351 | /* =========================================================================== */
352 | /* IBus Factory */
353 | /* =========================================================================== */
354 | /* =========================================================================== */
355 |
356 | var factory = IBus.Factory.new(bus.get_connection());
357 | factory.connect('create-engine', _create_engine_cb);
358 |
359 | // property 'exec' is changed to 'command-line' in recent ibus,the try-catch block is here for supporting both.
360 | var component = null;
361 | try {
362 | component = new IBus.Component({
363 | name: "org.freedesktop.IBus.Avro",
364 | description: "Avro Phonetic",
365 | version: "1.0",
366 | license: "MPL 1.1",
367 | author: "Sarim Khan ",
368 | homepage: "https://github.com/sarim/ibus-avro",
369 | command_line: eevars.get_libexecdir() + "/main-gjs.js",
370 | textdomain: "avro-phonetic"
371 | });
372 | } catch (error) {
373 | component = new IBus.Component({
374 | name: "org.freedesktop.IBus.Avro",
375 | description: "Avro Phonetic",
376 | version: "1.0",
377 | license: "MPL 1.1",
378 | author: "Sarim Khan ",
379 | homepage: "https://github.com/sarim/ibus-avro",
380 | exec: eevars.get_libexecdir() + "/main-gjs.js",
381 | textdomain: "avro-phonetic"
382 | });
383 | }
384 |
385 | //opensuse's ibus supports only Property(Menu) but ubuntu only supports "setup" param for Preferences Button, try-catch in rescue
386 | try {
387 | var avroenginedesc = new IBus.EngineDesc({
388 | name: "avro-phonetic",
389 | longname: "Avro Phonetic",
390 | description: "Avro Phonetic Engine",
391 | language: "bn",
392 | license: "MPL 1.1",
393 | author: "Sarim Khan ",
394 | icon: eevars.get_pkgdatadir() + "/avro-bangla.png",
395 | layout: "bn",
396 | setup: "/usr/bin/env gjs --include-path=" + eevars.get_pkgdatadir() + " " + eevars.get_pkgdatadir() + "/pref.js --standalone"
397 | });
398 | } catch (error) {
399 | var avroenginedesc = new IBus.EngineDesc({
400 | name: "avro-phonetic",
401 | longname: "Avro Phonetic",
402 | description: "Avro Phonetic Engine",
403 | language: "bn",
404 | license: "MPL 1.1",
405 | author: "Sarim Khan ",
406 | icon: eevars.get_pkgdatadir() + "/avro-bangla.png",
407 | layout: "bn"
408 | });
409 |
410 | }
411 |
412 | component.add_engine(avroenginedesc);
413 |
414 | if (exec_by_ibus) {
415 | bus.request_name("org.freedesktop.IBus.Avro", 0);
416 | } else {
417 | bus.register_component(component);
418 | }
419 | IBus.main();
420 | }
421 | else
422 | print("Exiting because IBus Bus not found, maybe the daemon is not running ?");
423 |
--------------------------------------------------------------------------------
/suggestionbuilder.js:
--------------------------------------------------------------------------------
1 | /*
2 | =============================================================================
3 | *****************************************************************************
4 | The contents of this file are subject to the Mozilla Public License
5 | Version 1.1 (the "License"); you may not use this file except in
6 | compliance with the License. You may obtain a copy of the License at
7 | http://www.mozilla.org/MPL/
8 |
9 | Software distributed under the License is distributed on an "AS IS"
10 | basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
11 | License for the specific language governing rights and limitations
12 | under the License.
13 |
14 | The Original Code is jsAvroPhonetic
15 |
16 | The Initial Developer of the Original Code is
17 | Mehdi Hasan Khan
18 |
19 | Copyright (C) OmicronLab (http://www.omicronlab.com). All Rights Reserved.
20 |
21 |
22 | Contributor(s): ______________________________________.
23 |
24 | *****************************************************************************
25 | =============================================================================
26 | */
27 |
28 | const gio = imports.gi.Gio;
29 | const GLib = imports.gi.GLib;
30 |
31 | const dictsearch = imports.dbsearch;
32 | const autocorrectdb = imports.autocorrect.db;
33 | const Avroparser = imports.avrolib.OmicronLab.Avro.Phonetic;
34 | const utfconv = imports.utf8;
35 | const EditDistance = imports.levenshtein;
36 | const suffixDict = imports.suffixdict.db;
37 |
38 | function SuggestionBuilder(){
39 | this._init();
40 | }
41 |
42 | SuggestionBuilder.prototype = {
43 |
44 | _init: function(){
45 | this._dbSearch = new dictsearch.DBSearch ();
46 | this._candidateSelections = {};
47 | this._phoneticCache = {};
48 | this._loadCandidateSelectionsFromFile();
49 | this._tempCache = {};
50 | this._pref = this._defaultPref();
51 | },
52 |
53 |
54 | _defaultPref: function(){
55 | var pref = {};
56 | pref.dictEnable = true;
57 |
58 | return pref;
59 | },
60 |
61 |
62 | _getDictionarySuggestion: function(splitWord){
63 | var words = [];
64 |
65 | var key = splitWord['middle'].toLowerCase();
66 |
67 | if (this._phoneticCache[key]){
68 | words = this._phoneticCache[key].slice(0);
69 | } else {
70 | words = this._dbSearch.search(key);
71 | }
72 | return words;
73 | },
74 |
75 |
76 | _getClassicPhonetic: function(banglish){
77 | return utfconv.utf8Decode(Avroparser.parse(banglish));
78 | },
79 |
80 |
81 | _correctCase:function (banglish){
82 | return Avroparser.fixString(banglish);
83 | },
84 |
85 |
86 | _getAutocorrect: function(word, splitWord){
87 | var corrected = {};
88 |
89 | //Search for whole match
90 | if(autocorrectdb[word]){
91 | // [smiley rule]
92 | if (autocorrectdb[word] == word){
93 | corrected['corrected'] = word;
94 | corrected['exact'] = true;
95 | } else {
96 | corrected['corrected'] = this._getClassicPhonetic(autocorrectdb[word]);
97 | corrected['exact'] = false;
98 | }
99 | } else {
100 | //Whole word is not present, search without padding
101 | var correctedMiddle = this._correctCase(splitWord['middle']);
102 | if(autocorrectdb[correctedMiddle]){
103 | corrected['corrected'] = this._getClassicPhonetic(autocorrectdb[correctedMiddle]);
104 | corrected['exact'] = false;
105 | }
106 | }
107 |
108 | return corrected;
109 | },
110 |
111 |
112 | _separatePadding: function(word){
113 | // Feeling lost? Ask Rifat :D
114 | var match = word.match(/(^(?::`|\.`|[\-\]~!@#%&*()_=+[{}'";<>\/?|.,])*?(?=(?:,{2,}))|^(?::`|\.`|[\-\]~!@#%&*()_=+[{}'";<>\/?|.,])*)(.*?(?:,,)*)((?::`|\.`|[\-\]~!@#%&*()_=+[{}'";<>\/?|.,])*$)/);
115 |
116 | var splitWord = {};
117 | splitWord['begin'] = match[1];
118 | splitWord['middle'] = match[2];
119 | splitWord['end'] = match[3];
120 |
121 | return splitWord;
122 | },
123 |
124 |
125 | _sortByPhoneticRelevance: function (phonetic, dictSuggestion){
126 | //Copy array
127 | var sortedSuggestion = dictSuggestion.slice(0);
128 |
129 | sortedSuggestion.sort(function(a, b){
130 | var da = EditDistance.levenshtein(phonetic, a);
131 | var db = EditDistance.levenshtein(phonetic, b);
132 |
133 | if (da < db){
134 | return -1;
135 | } else if (da > db){
136 | return 1;
137 | } else{
138 | return 0;
139 | }
140 | });
141 |
142 | return sortedSuggestion;
143 | },
144 |
145 | _addToArray: function (arr,item) {
146 | if (arr.indexOf(item) == -1){
147 | arr.push(item);
148 | }
149 | },
150 |
151 |
152 | _convertToUnicodeValue: function(input){
153 | var output = '';
154 |
155 | for (var i = 0; i < input.length; i++){
156 | var charCode = input.charCodeAt(i);
157 | if (charCode >= 255){
158 | output += '\\u0' + charCode.toString(16);
159 | } else {
160 | output += input.charAt(i);
161 | }
162 | }
163 | return output;
164 | },
165 |
166 |
167 | _isKar: function(input){
168 | if (input.length < 1){
169 | return false;
170 | }
171 | var cInput = input.charAt(0);
172 | return /^[\u09be\u09bf\u09c0\u09c1\u09c2\u09c3\u09c7\u09c8\u09cb\u09cc\u09c4]$/.test(cInput);
173 | },
174 |
175 |
176 | _isVowel: function(input){
177 | if (input.length < 1){
178 | return false;
179 | }
180 | var cInput = input.charAt(0);
181 | return /^[\u0985\u0986\u0987\u0988\u0989\u098a\u098b\u098f\u0990\u0993\u0994\u098c\u09e1\u09be\u09bf\u09c0\u09c1\u09c2\u09c3\u09c7\u09c8\u09cb\u09cc]$/.test(cInput);
182 | },
183 |
184 |
185 | _addToTempCache: function(full, base, eng){
186 | //Don't overwrite
187 | if (!this._tempCache[full]){
188 | this._tempCache[full] = {};
189 | this._tempCache[full].base = base;
190 | this._tempCache[full].eng = eng;
191 | }
192 | },
193 |
194 |
195 | _addSuffix: function(splitWord){
196 | var tempList = [];
197 | var fullWord = '';
198 | var word = splitWord['middle'].toLowerCase();
199 | var len = word.length;
200 |
201 | var rList = [];
202 | if (this._phoneticCache[word]){
203 | rList = this._phoneticCache[word].slice(0);
204 | }
205 |
206 | this._tempCache = {};
207 |
208 | if (len >= 2){
209 | for (var j = 1; j <= len; j++){
210 | var testSuffix = word.substr(j, len);
211 |
212 | var suffix = suffixDict[testSuffix];
213 | if (suffix){
214 | var key = word.substr(0, word.length - testSuffix.length);
215 | if (this._phoneticCache[key]){
216 | for (var k = 0; k < this._phoneticCache[key].length; k++){
217 | var cacheItem = this._phoneticCache[key][k];
218 | var cacheRightChar = cacheItem.substr(-1);
219 | var suffixLeftChar = suffix.substr(0, 1);
220 | if (this._isVowel(cacheRightChar) && this._isKar(suffixLeftChar)){
221 | fullWord = cacheItem + "\u09df" + suffix; // \u09df = B_Y
222 | tempList.push(fullWord);
223 | this._addToTempCache(fullWord, cacheItem, key);
224 | } else {
225 | if (cacheRightChar == "\u09ce"){ // \u09ce = b_Khandatta
226 | fullWord = cacheItem.substr(0, cacheItem.length - 1) + "\u09a4" + suffix; // \u09a4 = b_T
227 | tempList.push(fullWord);
228 | this._addToTempCache(fullWord, cacheItem, key);
229 | } else if (cacheRightChar == "\u0982"){ // \u0982 = b_Anushar
230 | fullWord = cacheItem.substr(0, cacheItem.length - 1) + "\u0999" + suffix; // \u09a4 = b_NGA
231 | tempList.push(fullWord);
232 | } else {
233 | fullWord = cacheItem + suffix;
234 | tempList.push(fullWord);
235 | this._addToTempCache(fullWord, cacheItem, key);
236 | }
237 | }
238 | }
239 |
240 | for (i in tempList){
241 | rList.push(tempList[i]);
242 | }
243 | }
244 | }
245 | }
246 | }
247 |
248 | return rList;
249 | },
250 |
251 |
252 | _joinSuggestion: function(autoCorrect, dictSuggestion, phonetic, splitWord){
253 | var words = [];
254 |
255 | if (!this._pref.dictEnable){
256 | words.push(phonetic);
257 | words[0] = splitWord['begin'] + words[0] + splitWord['end'];
258 |
259 | var suggestion = {};
260 | suggestion['words'] = words;
261 | suggestion['prevSelection'] = 0;
262 | } else {
263 |
264 | /* 1st Item: Autocorrect */
265 | if (autoCorrect['corrected']){
266 | words.push(autoCorrect['corrected']);
267 | //Add autocorrect entry to dictSuggestion for suffix support
268 | if (!autoCorrect['exact']){
269 | dictSuggestion.push(autoCorrect['corrected']);
270 | }
271 | }
272 |
273 |
274 | /* 2rd Item: Dictionary Avro Phonetic */
275 | //Update Phonetic Cache
276 | if(!this._phoneticCache[splitWord['middle'].toLowerCase()]){
277 | if (dictSuggestion.length > 0){
278 | this._phoneticCache[splitWord['middle'].toLowerCase()] = dictSuggestion.slice(0);
279 | }
280 | }
281 | //Add Suffix
282 | var dictSuggestionWithSuffix = this._addSuffix(splitWord);
283 |
284 | var sortedWords = this._sortByPhoneticRelevance(phonetic, dictSuggestionWithSuffix);
285 | for (i in sortedWords){
286 | this._addToArray(words, sortedWords[i]);
287 | }
288 |
289 | /* 3rd Item: Classic Avro Phonetic */
290 | this._addToArray(words, phonetic);
291 |
292 | var suggestion = {};
293 |
294 | //Is there any previous custom selection of the user?
295 | suggestion['prevSelection'] = this._getPreviousSelection(splitWord, words);
296 |
297 | //Add padding to all, except exact autocorrect
298 | for (i in words){
299 | if (autoCorrect['exact']){
300 | if (autoCorrect['corrected'] != words[i]){
301 | words[i] = splitWord['begin'] + words[i] + splitWord['end'];
302 | }
303 | } else {
304 | words[i] = splitWord['begin'] + words[i] + splitWord['end'];
305 | }
306 | }
307 |
308 | suggestion['words'] = words;
309 |
310 | }
311 |
312 | return suggestion;
313 | },
314 |
315 |
316 | _getPreviousSelection: function (splitWord, suggestionWords){
317 | var word = splitWord['middle'];
318 | var len = word.length;
319 | var selectedWord = '';
320 |
321 | if (this._candidateSelections[word]){
322 | selectedWord = this._candidateSelections[word];
323 | } else {
324 | //Full word was not found, try checking without suffix
325 | if (len >= 2){
326 | for (var j = 1; j < len; j++){
327 | var testSuffix = word.substr(-j).toLowerCase();
328 |
329 | var suffix = suffixDict[testSuffix];
330 | if (suffix){
331 | var key = word.substr(0, word.length - testSuffix.length);
332 |
333 | if (this._candidateSelections[key]){
334 |
335 | //Get possible words for key
336 | var keyWord = this._candidateSelections[key];
337 |
338 | var kwRightChar = keyWord.substr(-1);
339 | var suffixLeftChar = suffix.substr(0, 1);
340 |
341 | var selectedWord = '';
342 |
343 | if (this._isVowel(kwRightChar) && this._isKar(suffixLeftChar)){
344 | selectedWord = keyWord + "\u09df" + suffix; // \u09df = B_Y
345 | } else {
346 | if (kwRightChar == "\u09ce"){ // \u09ce = b_Khandatta
347 | selectedWord = keyWord.substr(0, keyWord.length - 1) + "\u09a4" + suffix; // \u09a4 = b_T
348 | } else if (kwRightChar == "\u0982"){ // \u0982 = b_Anushar
349 | selectedWord = keyWord.substr(0, keyWord.length - 1) + "\u0999" + suffix; // \u09a4 = b_NGA
350 | } else {
351 | selectedWord = keyWord + suffix;
352 | }
353 | }
354 |
355 | //Save this referrence
356 | this._updateCandidateSelection(word, selectedWord);
357 | break;
358 | }
359 | }
360 | }
361 | }
362 | }
363 |
364 | var i = suggestionWords.indexOf(selectedWord);
365 | return (i < 0) ? i = 0 : i;
366 | },
367 |
368 |
369 | _loadCandidateSelectionsFromFile: function(){
370 | try {
371 | var file = gio.File.new_for_path(GLib.get_home_dir() + "/.candidate-selections.json");
372 |
373 | if (file.query_exists (null)) {
374 |
375 | var file_stream = file.read(null);
376 | var data_stream = gio.DataInputStream.new(file_stream);
377 | var json = data_stream.read_until("", null);
378 | this._candidateSelections = JSON.parse(json[0]);
379 |
380 | /*
381 | file.read_async(0, null,
382 | function(source, result){
383 | var file_stream = source.read_finish(result);
384 |
385 | if (file_stream){
386 | var data_stream = gio.DataInputStream.new(file_stream);
387 | var json = data_stream.read_until("", null);
388 | this._candidateSelections = JSON.parse(json[0]);
389 | } else {
390 | this._logger(e, 'Error in _loadCandidateSelectionsFromFile');
391 | }
392 | });
393 | */
394 | } else {
395 | this._candidateSelections = {};
396 | }
397 | } catch (e){
398 | this._candidateSelections = {};
399 | this._logger(e, 'Error in _loadCandidateSelectionsFromFile');
400 | }
401 | },
402 |
403 |
404 | _saveCandidateSelectionsToFile: function(){
405 | try {
406 | var file = gio.File.new_for_path ( GLib.get_home_dir() + "/.candidate-selections.json");
407 |
408 | if (file.query_exists (null)) {
409 | file.delete (null);
410 | }
411 | /*
412 | var file_stream = file.create (gio.FileCreateFlags.NONE, null);
413 | var json = JSON.stringify(this._candidateSelections);
414 | json = this._convertToUnicodeValue(json);
415 | // Write text data to file
416 | var data_stream = gio.DataOutputStream.new (file_stream);
417 | data_stream.put_string (json, null);
418 | */
419 | var that = this;
420 | // Create a new file with this name
421 | file.create_async(gio.FileCreateFlags.NONE, 0, null,
422 | function(source, result){
423 | var file_stream = source.create_finish(result);
424 |
425 | if (file_stream){
426 | var json = JSON.stringify(that._candidateSelections);
427 | json = that._convertToUnicodeValue(json);
428 |
429 | // Write text data to file
430 | var data_stream = gio.DataOutputStream.new (file_stream);
431 | data_stream.put_string (json, null);
432 | } else {
433 | this._logger(e, 'Error in _saveCandidateSelectionsToFile');
434 | }
435 | });
436 | } catch (e) {
437 | this._logger(e, '_saveCandidateSelectionsToFile Error');
438 | }
439 | },
440 |
441 |
442 | _updateCandidateSelection: function(word, candidate){
443 | this._candidateSelections[word] = candidate;
444 | },
445 |
446 |
447 |
448 | _logger: function (obj, msg){
449 | print ((msg || 'Log') + ': ' + JSON.stringify(obj, null, '\t'));
450 | },
451 |
452 |
453 | getPref: function(){
454 | return this._pref;
455 | },
456 |
457 |
458 | setPref: function(pref){
459 | //TODO: Add Validation
460 | this._pref = pref;
461 | },
462 |
463 |
464 | stringCommitted: function(word, candidate){
465 | if (!this._pref.dictEnable){
466 | return;
467 | }
468 |
469 | //If it is called, user made the final decision here
470 |
471 | //Check and save selection without suffix if that is not present
472 | if (this._tempCache[candidate]){
473 | var base = this._tempCache[candidate].base;
474 | var eng = this._tempCache[candidate].eng;
475 | //Don't overwrite existing value
476 | if (!this._candidateSelections[eng]){
477 | this._candidateSelections[eng] = base;
478 | this._saveCandidateSelectionsToFile();
479 | }
480 | }
481 |
482 | this._saveCandidateSelectionsToFile();
483 | },
484 |
485 |
486 | updateCandidateSelection: function(word, candidate){
487 | if (!this._pref.dictEnable){
488 | return;
489 | }
490 |
491 | //Seperate begining and trailing padding characters, punctuations etc. from whole word
492 | var splitWord = this._separatePadding(word);
493 | this._updateCandidateSelection(splitWord['middle'], candidate);
494 | },
495 |
496 |
497 | suggest: function(word){
498 | //Seperate begining and trailing padding characters, punctuations etc. from whole word
499 | var splitWord = this._separatePadding(word);
500 |
501 | //Convert begining and trailing padding text to phonetic Bangla
502 | splitWord['begin'] = this._getClassicPhonetic(splitWord['begin']);
503 | splitWord['end'] = this._getClassicPhonetic(splitWord['end']);
504 |
505 | //Convert the word to Bangla using 3 separate methods
506 | var phonetic = this._getClassicPhonetic(splitWord['middle']);
507 |
508 | if (this._pref.dictEnable){
509 | var dictSuggestion = this._getDictionarySuggestion(splitWord);
510 | var autoCorrect = this._getAutocorrect(word, splitWord);
511 | }
512 |
513 | //Prepare suggestion object
514 | var suggestion = this._joinSuggestion(autoCorrect, dictSuggestion, phonetic, splitWord);
515 |
516 | return suggestion;
517 | }
518 | }
519 |
--------------------------------------------------------------------------------
/MPL-1.1.txt:
--------------------------------------------------------------------------------
1 | MOZILLA PUBLIC LICENSE
2 | Version 1.1
3 |
4 | ---------------
5 |
6 | 1. Definitions.
7 |
8 | 1.0.1. "Commercial Use" means distribution or otherwise making the
9 | Covered Code available to a third party.
10 |
11 | 1.1. "Contributor" means each entity that creates or contributes to
12 | the creation of Modifications.
13 |
14 | 1.2. "Contributor Version" means the combination of the Original
15 | Code, prior Modifications used by a Contributor, and the Modifications
16 | made by that particular Contributor.
17 |
18 | 1.3. "Covered Code" means the Original Code or Modifications or the
19 | combination of the Original Code and Modifications, in each case
20 | including portions thereof.
21 |
22 | 1.4. "Electronic Distribution Mechanism" means a mechanism generally
23 | accepted in the software development community for the electronic
24 | transfer of data.
25 |
26 | 1.5. "Executable" means Covered Code in any form other than Source
27 | Code.
28 |
29 | 1.6. "Initial Developer" means the individual or entity identified
30 | as the Initial Developer in the Source Code notice required by Exhibit
31 | A.
32 |
33 | 1.7. "Larger Work" means a work which combines Covered Code or
34 | portions thereof with code not governed by the terms of this License.
35 |
36 | 1.8. "License" means this document.
37 |
38 | 1.8.1. "Licensable" means having the right to grant, to the maximum
39 | extent possible, whether at the time of the initial grant or
40 | subsequently acquired, any and all of the rights conveyed herein.
41 |
42 | 1.9. "Modifications" means any addition to or deletion from the
43 | substance or structure of either the Original Code or any previous
44 | Modifications. When Covered Code is released as a series of files, a
45 | Modification is:
46 | A. Any addition to or deletion from the contents of a file
47 | containing Original Code or previous Modifications.
48 |
49 | B. Any new file that contains any part of the Original Code or
50 | previous Modifications.
51 |
52 | 1.10. "Original Code" means Source Code of computer software code
53 | which is described in the Source Code notice required by Exhibit A as
54 | Original Code, and which, at the time of its release under this
55 | License is not already Covered Code governed by this License.
56 |
57 | 1.10.1. "Patent Claims" means any patent claim(s), now owned or
58 | hereafter acquired, including without limitation, method, process,
59 | and apparatus claims, in any patent Licensable by grantor.
60 |
61 | 1.11. "Source Code" means the preferred form of the Covered Code for
62 | making modifications to it, including all modules it contains, plus
63 | any associated interface definition files, scripts used to control
64 | compilation and installation of an Executable, or source code
65 | differential comparisons against either the Original Code or another
66 | well known, available Covered Code of the Contributor's choice. The
67 | Source Code can be in a compressed or archival form, provided the
68 | appropriate decompression or de-archiving software is widely available
69 | for no charge.
70 |
71 | 1.12. "You" (or "Your") means an individual or a legal entity
72 | exercising rights under, and complying with all of the terms of, this
73 | License or a future version of this License issued under Section 6.1.
74 | For legal entities, "You" includes any entity which controls, is
75 | controlled by, or is under common control with You. For purposes of
76 | this definition, "control" means (a) the power, direct or indirect,
77 | to cause the direction or management of such entity, whether by
78 | contract or otherwise, or (b) ownership of more than fifty percent
79 | (50%) of the outstanding shares or beneficial ownership of such
80 | entity.
81 |
82 | 2. Source Code License.
83 |
84 | 2.1. The Initial Developer Grant.
85 | The Initial Developer hereby grants You a world-wide, royalty-free,
86 | non-exclusive license, subject to third party intellectual property
87 | claims:
88 | (a) under intellectual property rights (other than patent or
89 | trademark) Licensable by Initial Developer to use, reproduce,
90 | modify, display, perform, sublicense and distribute the Original
91 | Code (or portions thereof) with or without Modifications, and/or
92 | as part of a Larger Work; and
93 |
94 | (b) under Patents Claims infringed by the making, using or
95 | selling of Original Code, to make, have made, use, practice,
96 | sell, and offer for sale, and/or otherwise dispose of the
97 | Original Code (or portions thereof).
98 |
99 | (c) the licenses granted in this Section 2.1(a) and (b) are
100 | effective on the date Initial Developer first distributes
101 | Original Code under the terms of this License.
102 |
103 | (d) Notwithstanding Section 2.1(b) above, no patent license is
104 | granted: 1) for code that You delete from the Original Code; 2)
105 | separate from the Original Code; or 3) for infringements caused
106 | by: i) the modification of the Original Code or ii) the
107 | combination of the Original Code with other software or devices.
108 |
109 | 2.2. Contributor Grant.
110 | Subject to third party intellectual property claims, each Contributor
111 | hereby grants You a world-wide, royalty-free, non-exclusive license
112 |
113 | (a) under intellectual property rights (other than patent or
114 | trademark) Licensable by Contributor, to use, reproduce, modify,
115 | display, perform, sublicense and distribute the Modifications
116 | created by such Contributor (or portions thereof) either on an
117 | unmodified basis, with other Modifications, as Covered Code
118 | and/or as part of a Larger Work; and
119 |
120 | (b) under Patent Claims infringed by the making, using, or
121 | selling of Modifications made by that Contributor either alone
122 | and/or in combination with its Contributor Version (or portions
123 | of such combination), to make, use, sell, offer for sale, have
124 | made, and/or otherwise dispose of: 1) Modifications made by that
125 | Contributor (or portions thereof); and 2) the combination of
126 | Modifications made by that Contributor with its Contributor
127 | Version (or portions of such combination).
128 |
129 | (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
130 | effective on the date Contributor first makes Commercial Use of
131 | the Covered Code.
132 |
133 | (d) Notwithstanding Section 2.2(b) above, no patent license is
134 | granted: 1) for any code that Contributor has deleted from the
135 | Contributor Version; 2) separate from the Contributor Version;
136 | 3) for infringements caused by: i) third party modifications of
137 | Contributor Version or ii) the combination of Modifications made
138 | by that Contributor with other software (except as part of the
139 | Contributor Version) or other devices; or 4) under Patent Claims
140 | infringed by Covered Code in the absence of Modifications made by
141 | that Contributor.
142 |
143 | 3. Distribution Obligations.
144 |
145 | 3.1. Application of License.
146 | The Modifications which You create or to which You contribute are
147 | governed by the terms of this License, including without limitation
148 | Section 2.2. The Source Code version of Covered Code may be
149 | distributed only under the terms of this License or a future version
150 | of this License released under Section 6.1, and You must include a
151 | copy of this License with every copy of the Source Code You
152 | distribute. You may not offer or impose any terms on any Source Code
153 | version that alters or restricts the applicable version of this
154 | License or the recipients' rights hereunder. However, You may include
155 | an additional document offering the additional rights described in
156 | Section 3.5.
157 |
158 | 3.2. Availability of Source Code.
159 | Any Modification which You create or to which You contribute must be
160 | made available in Source Code form under the terms of this License
161 | either on the same media as an Executable version or via an accepted
162 | Electronic Distribution Mechanism to anyone to whom you made an
163 | Executable version available; and if made available via Electronic
164 | Distribution Mechanism, must remain available for at least twelve (12)
165 | months after the date it initially became available, or at least six
166 | (6) months after a subsequent version of that particular Modification
167 | has been made available to such recipients. You are responsible for
168 | ensuring that the Source Code version remains available even if the
169 | Electronic Distribution Mechanism is maintained by a third party.
170 |
171 | 3.3. Description of Modifications.
172 | You must cause all Covered Code to which You contribute to contain a
173 | file documenting the changes You made to create that Covered Code and
174 | the date of any change. You must include a prominent statement that
175 | the Modification is derived, directly or indirectly, from Original
176 | Code provided by the Initial Developer and including the name of the
177 | Initial Developer in (a) the Source Code, and (b) in any notice in an
178 | Executable version or related documentation in which You describe the
179 | origin or ownership of the Covered Code.
180 |
181 | 3.4. Intellectual Property Matters
182 | (a) Third Party Claims.
183 | If Contributor has knowledge that a license under a third party's
184 | intellectual property rights is required to exercise the rights
185 | granted by such Contributor under Sections 2.1 or 2.2,
186 | Contributor must include a text file with the Source Code
187 | distribution titled "LEGAL" which describes the claim and the
188 | party making the claim in sufficient detail that a recipient will
189 | know whom to contact. If Contributor obtains such knowledge after
190 | the Modification is made available as described in Section 3.2,
191 | Contributor shall promptly modify the LEGAL file in all copies
192 | Contributor makes available thereafter and shall take other steps
193 | (such as notifying appropriate mailing lists or newsgroups)
194 | reasonably calculated to inform those who received the Covered
195 | Code that new knowledge has been obtained.
196 |
197 | (b) Contributor APIs.
198 | If Contributor's Modifications include an application programming
199 | interface and Contributor has knowledge of patent licenses which
200 | are reasonably necessary to implement that API, Contributor must
201 | also include this information in the LEGAL file.
202 |
203 | (c) Representations.
204 | Contributor represents that, except as disclosed pursuant to
205 | Section 3.4(a) above, Contributor believes that Contributor's
206 | Modifications are Contributor's original creation(s) and/or
207 | Contributor has sufficient rights to grant the rights conveyed by
208 | this License.
209 |
210 | 3.5. Required Notices.
211 | You must duplicate the notice in Exhibit A in each file of the Source
212 | Code. If it is not possible to put such notice in a particular Source
213 | Code file due to its structure, then You must include such notice in a
214 | location (such as a relevant directory) where a user would be likely
215 | to look for such a notice. If You created one or more Modification(s)
216 | You may add your name as a Contributor to the notice described in
217 | Exhibit A. You must also duplicate this License in any documentation
218 | for the Source Code where You describe recipients' rights or ownership
219 | rights relating to Covered Code. You may choose to offer, and to
220 | charge a fee for, warranty, support, indemnity or liability
221 | obligations to one or more recipients of Covered Code. However, You
222 | may do so only on Your own behalf, and not on behalf of the Initial
223 | Developer or any Contributor. You must make it absolutely clear than
224 | any such warranty, support, indemnity or liability obligation is
225 | offered by You alone, and You hereby agree to indemnify the Initial
226 | Developer and every Contributor for any liability incurred by the
227 | Initial Developer or such Contributor as a result of warranty,
228 | support, indemnity or liability terms You offer.
229 |
230 | 3.6. Distribution of Executable Versions.
231 | You may distribute Covered Code in Executable form only if the
232 | requirements of Section 3.1-3.5 have been met for that Covered Code,
233 | and if You include a notice stating that the Source Code version of
234 | the Covered Code is available under the terms of this License,
235 | including a description of how and where You have fulfilled the
236 | obligations of Section 3.2. The notice must be conspicuously included
237 | in any notice in an Executable version, related documentation or
238 | collateral in which You describe recipients' rights relating to the
239 | Covered Code. You may distribute the Executable version of Covered
240 | Code or ownership rights under a license of Your choice, which may
241 | contain terms different from this License, provided that You are in
242 | compliance with the terms of this License and that the license for the
243 | Executable version does not attempt to limit or alter the recipient's
244 | rights in the Source Code version from the rights set forth in this
245 | License. If You distribute the Executable version under a different
246 | license You must make it absolutely clear that any terms which differ
247 | from this License are offered by You alone, not by the Initial
248 | Developer or any Contributor. You hereby agree to indemnify the
249 | Initial Developer and every Contributor for any liability incurred by
250 | the Initial Developer or such Contributor as a result of any such
251 | terms You offer.
252 |
253 | 3.7. Larger Works.
254 | You may create a Larger Work by combining Covered Code with other code
255 | not governed by the terms of this License and distribute the Larger
256 | Work as a single product. In such a case, You must make sure the
257 | requirements of this License are fulfilled for the Covered Code.
258 |
259 | 4. Inability to Comply Due to Statute or Regulation.
260 |
261 | If it is impossible for You to comply with any of the terms of this
262 | License with respect to some or all of the Covered Code due to
263 | statute, judicial order, or regulation then You must: (a) comply with
264 | the terms of this License to the maximum extent possible; and (b)
265 | describe the limitations and the code they affect. Such description
266 | must be included in the LEGAL file described in Section 3.4 and must
267 | be included with all distributions of the Source Code. Except to the
268 | extent prohibited by statute or regulation, such description must be
269 | sufficiently detailed for a recipient of ordinary skill to be able to
270 | understand it.
271 |
272 | 5. Application of this License.
273 |
274 | This License applies to code to which the Initial Developer has
275 | attached the notice in Exhibit A and to related Covered Code.
276 |
277 | 6. Versions of the License.
278 |
279 | 6.1. New Versions.
280 | Netscape Communications Corporation ("Netscape") may publish revised
281 | and/or new versions of the License from time to time. Each version
282 | will be given a distinguishing version number.
283 |
284 | 6.2. Effect of New Versions.
285 | Once Covered Code has been published under a particular version of the
286 | License, You may always continue to use it under the terms of that
287 | version. You may also choose to use such Covered Code under the terms
288 | of any subsequent version of the License published by Netscape. No one
289 | other than Netscape has the right to modify the terms applicable to
290 | Covered Code created under this License.
291 |
292 | 6.3. Derivative Works.
293 | If You create or use a modified version of this License (which you may
294 | only do in order to apply it to code which is not already Covered Code
295 | governed by this License), You must (a) rename Your license so that
296 | the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
297 | "MPL", "NPL" or any confusingly similar phrase do not appear in your
298 | license (except to note that your license differs from this License)
299 | and (b) otherwise make it clear that Your version of the license
300 | contains terms which differ from the Mozilla Public License and
301 | Netscape Public License. (Filling in the name of the Initial
302 | Developer, Original Code or Contributor in the notice described in
303 | Exhibit A shall not of themselves be deemed to be modifications of
304 | this License.)
305 |
306 | 7. DISCLAIMER OF WARRANTY.
307 |
308 | COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
309 | WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
310 | WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
311 | DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
312 | THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
313 | IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
314 | YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
315 | COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
316 | OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
317 | ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
318 |
319 | 8. TERMINATION.
320 |
321 | 8.1. This License and the rights granted hereunder will terminate
322 | automatically if You fail to comply with terms herein and fail to cure
323 | such breach within 30 days of becoming aware of the breach. All
324 | sublicenses to the Covered Code which are properly granted shall
325 | survive any termination of this License. Provisions which, by their
326 | nature, must remain in effect beyond the termination of this License
327 | shall survive.
328 |
329 | 8.2. If You initiate litigation by asserting a patent infringement
330 | claim (excluding declatory judgment actions) against Initial Developer
331 | or a Contributor (the Initial Developer or Contributor against whom
332 | You file such action is referred to as "Participant") alleging that:
333 |
334 | (a) such Participant's Contributor Version directly or indirectly
335 | infringes any patent, then any and all rights granted by such
336 | Participant to You under Sections 2.1 and/or 2.2 of this License
337 | shall, upon 60 days notice from Participant terminate prospectively,
338 | unless if within 60 days after receipt of notice You either: (i)
339 | agree in writing to pay Participant a mutually agreeable reasonable
340 | royalty for Your past and future use of Modifications made by such
341 | Participant, or (ii) withdraw Your litigation claim with respect to
342 | the Contributor Version against such Participant. If within 60 days
343 | of notice, a reasonable royalty and payment arrangement are not
344 | mutually agreed upon in writing by the parties or the litigation claim
345 | is not withdrawn, the rights granted by Participant to You under
346 | Sections 2.1 and/or 2.2 automatically terminate at the expiration of
347 | the 60 day notice period specified above.
348 |
349 | (b) any software, hardware, or device, other than such Participant's
350 | Contributor Version, directly or indirectly infringes any patent, then
351 | any rights granted to You by such Participant under Sections 2.1(b)
352 | and 2.2(b) are revoked effective as of the date You first made, used,
353 | sold, distributed, or had made, Modifications made by that
354 | Participant.
355 |
356 | 8.3. If You assert a patent infringement claim against Participant
357 | alleging that such Participant's Contributor Version directly or
358 | indirectly infringes any patent where such claim is resolved (such as
359 | by license or settlement) prior to the initiation of patent
360 | infringement litigation, then the reasonable value of the licenses
361 | granted by such Participant under Sections 2.1 or 2.2 shall be taken
362 | into account in determining the amount or value of any payment or
363 | license.
364 |
365 | 8.4. In the event of termination under Sections 8.1 or 8.2 above,
366 | all end user license agreements (excluding distributors and resellers)
367 | which have been validly granted by You or any distributor hereunder
368 | prior to termination shall survive termination.
369 |
370 | 9. LIMITATION OF LIABILITY.
371 |
372 | UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
373 | (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
374 | DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
375 | OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
376 | ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
377 | CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
378 | WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
379 | COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
380 | INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
381 | LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
382 | RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
383 | PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
384 | EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
385 | THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
386 |
387 | 10. U.S. GOVERNMENT END USERS.
388 |
389 | The Covered Code is a "commercial item," as that term is defined in
390 | 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
391 | software" and "commercial computer software documentation," as such
392 | terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
393 | C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
394 | all U.S. Government End Users acquire Covered Code with only those
395 | rights set forth herein.
396 |
397 | 11. MISCELLANEOUS.
398 |
399 | This License represents the complete agreement concerning subject
400 | matter hereof. If any provision of this License is held to be
401 | unenforceable, such provision shall be reformed only to the extent
402 | necessary to make it enforceable. This License shall be governed by
403 | California law provisions (except to the extent applicable law, if
404 | any, provides otherwise), excluding its conflict-of-law provisions.
405 | With respect to disputes in which at least one party is a citizen of,
406 | or an entity chartered or registered to do business in the United
407 | States of America, any litigation relating to this License shall be
408 | subject to the jurisdiction of the Federal Courts of the Northern
409 | District of California, with venue lying in Santa Clara County,
410 | California, with the losing party responsible for costs, including
411 | without limitation, court costs and reasonable attorneys' fees and
412 | expenses. The application of the United Nations Convention on
413 | Contracts for the International Sale of Goods is expressly excluded.
414 | Any law or regulation which provides that the language of a contract
415 | shall be construed against the drafter shall not apply to this
416 | License.
417 |
418 | 12. RESPONSIBILITY FOR CLAIMS.
419 |
420 | As between Initial Developer and the Contributors, each party is
421 | responsible for claims and damages arising, directly or indirectly,
422 | out of its utilization of rights under this License and You agree to
423 | work with Initial Developer and Contributors to distribute such
424 | responsibility on an equitable basis. Nothing herein is intended or
425 | shall be deemed to constitute any admission of liability.
426 |
427 | 13. MULTIPLE-LICENSED CODE.
428 |
429 | Initial Developer may designate portions of the Covered Code as
430 | "Multiple-Licensed". "Multiple-Licensed" means that the Initial
431 | Developer permits you to utilize portions of the Covered Code under
432 | Your choice of the NPL or the alternative licenses, if any, specified
433 | by the Initial Developer in the file described in Exhibit A.
434 |
435 | EXHIBIT A -Mozilla Public License.
436 |
437 | ``The contents of this file are subject to the Mozilla Public License
438 | Version 1.1 (the "License"); you may not use this file except in
439 | compliance with the License. You may obtain a copy of the License at
440 | http://www.mozilla.org/MPL/
441 |
442 | Software distributed under the License is distributed on an "AS IS"
443 | basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
444 | License for the specific language governing rights and limitations
445 | under the License.
446 |
447 | The Original Code is ibus-avro.
448 |
449 | The Initial Developer of the Original Code is
450 | Sarim Khan
451 |
452 | Copyright (C) Sarim Khan, unless otherwise stated. All Rights Reserved.
453 |
454 |
455 | Contributor(s): Mehdi Hasan , Rifat Nabi "
456 |
457 |
--------------------------------------------------------------------------------
/suffixdict.js:
--------------------------------------------------------------------------------
1 | var db = {"e":"\u09c7","r":"\u09b0","y":"\u09df","o":"\u0993","i":"\u0987","eo":"\u09c7\u0993","ei":"\u09c7\u0987","er":"\u09c7\u09b0","gon":"\u0997\u09a3","ke":"\u0995\u09c7","ro":"\u09b0\u0993","ri":"\u09b0\u0987","ra":"\u09b0\u09be","re":"\u09b0\u09c7","te":"\u09a4\u09c7","yo":"\u09df\u0993","yi":"\u09df\u0987","ye":"\u09df\u09c7","shob":"\u09b8\u09ac","sob":"\u09b8\u09ac","ta":"\u099f\u09be","ti":"\u099f\u09bf","shoho":"\u09b8\u09b9","soho":"\u09b8\u09b9","der":"\u09a6\u09c7\u09b0","digo":"\u09a6\u09bf\u0997","ero":"\u09c7\u09b0\u0993","eri":"\u09c7\u09b0\u0987","era":"\u09c7\u09b0\u09be","ere":"\u09c7\u09b0\u09c7","ete":"\u09c7\u09a4\u09c7","gono":"\u0997\u09a3\u0993","goni":"\u0997\u09a3\u0987","gone":"\u0997\u09a3\u09c7","keo":"\u0995\u09c7\u0993","kei":"\u0995\u09c7\u0987","rao":"\u09b0\u09be\u0993","rai":"\u09b0\u09be\u0987","reo":"\u09b0\u09c7\u0993","rei":"\u09b0\u09c7\u0987","teo":"\u09a4\u09c7\u0993","tei":"\u09a4\u09c7\u0987","yeo":"\u09df\u09c7\u0993","yei":"\u09df\u09c7\u0987","yer":"\u09df\u09c7\u09b0","kul":"\u0995\u09c1\u09b2","shobo":"\u09b8\u09ac\u0993","shobi":"\u09b8\u09ac\u0987","shobe":"\u09b8\u09ac\u09c7","shokol":"\u09b8\u0995\u09b2","sobo":"\u09b8\u09ac\u0993","sobi":"\u09b8\u09ac\u0987","sobe":"\u09b8\u09ac\u09c7","sokol":"\u09b8\u0995\u09b2","tao":"\u099f\u09be\u0993","tai":"\u099f\u09be\u0987","tar":"\u099f\u09be\u09b0","tay":"\u099f\u09be\u09df","tio":"\u099f\u09bf\u0993","tii":"\u099f\u09bf\u0987","tir":"\u099f\u09bf\u09b0","shohoo":"\u09b8\u09b9\u0993","shohoi":"\u09b8\u09b9\u0987","sohoo":"\u09b8\u09b9\u0993","sohoi":"\u09b8\u09b9\u0987","tuk":"\u099f\u09c1\u0995","gun":"\u0997\u09c1\u09a3","dero":"\u09a6\u09c7\u09b0\u0993","deri":"\u09a6\u09c7\u09b0\u0987","dige":"\u09a6\u09bf\u0997\u09c7","digoo":"\u09a6\u09bf\u0997\u0993","digoi":"\u09a6\u09bf\u0997\u0987","erao":"\u09c7\u09b0\u09be\u0993","erai":"\u09c7\u09b0\u09be\u0987","ereo":"\u09c7\u09b0\u09c7\u0993","erei":"\u09c7\u09b0\u09c7\u0987","eteo":"\u09c7\u09a4\u09c7\u0993","etei":"\u09c7\u09a4\u09c7\u0987","goneo":"\u0997\u09a3\u09c7\u0993","gonei":"\u0997\u09a3\u09c7\u0987","goner":"\u0997\u09a3\u09c7\u09b0","gonke":"\u0997\u09a3\u0995\u09c7","gula":"\u0997\u09c1\u09b2\u09be","guli":"\u0997\u09c1\u09b2\u09bf","gulo":"\u0997\u09c1\u09b2\u09cb","yero":"\u09df\u09c7\u09b0\u0993","yeri":"\u09df\u09c7\u09b0\u0987","yera":"\u09df\u09c7\u09b0\u09be","yere":"\u09df\u09c7\u09b0\u09c7","yete":"\u09df\u09c7\u09a4\u09c7","borgo":"\u09ac\u09b0\u09cd\u0997","borrgo":"\u09ac\u09b0\u09cd\u0997","gonra":"\u0997\u09a3\u09b0\u09be","khana":"\u0996\u09be\u09a8\u09be","khani":"\u0996\u09be\u09a8\u09bf","kulo":"\u0995\u09c1\u09b2\u0993","kuli":"\u0995\u09c1\u09b2\u0987","kule":"\u0995\u09c1\u09b2\u09c7","mala":"\u09ae\u09be\u09b2\u09be","raji":"\u09b0\u09be\u099c\u09bf","razi":"\u09b0\u09be\u099c\u09bf","shobeo":"\u09b8\u09ac\u09c7\u0993","shobei":"\u09b8\u09ac\u09c7\u0987","shober":"\u09b8\u09ac\u09c7\u09b0","shobke":"\u09b8\u09ac\u0995\u09c7","shokolo":"\u09b8\u0995\u09b2\u0993","shokoli":"\u09b8\u0995\u09b2\u0987","shokole":"\u09b8\u0995\u09b2\u09c7","shomuho":"\u09b8\u09ae\u09c2\u09b9","sobeo":"\u09b8\u09ac\u09c7\u0993","sobei":"\u09b8\u09ac\u09c7\u0987","sober":"\u09b8\u09ac\u09c7\u09b0","sobke":"\u09b8\u09ac\u0995\u09c7","sokolo":"\u09b8\u0995\u09b2\u0993","sokoli":"\u09b8\u0995\u09b2\u0987","sokole":"\u09b8\u0995\u09b2\u09c7","somuho":"\u09b8\u09ae\u09c2\u09b9","take":"\u099f\u09be\u0995\u09c7","taro":"\u099f\u09be\u09b0\u0993","tari":"\u099f\u09be\u09b0\u0987","tare":"\u099f\u09be\u09b0\u09c7","tate":"\u099f\u09be\u09a4\u09c7","tayo":"\u099f\u09be\u09df\u0993","tayi":"\u099f\u09be\u09df\u0987","tike":"\u099f\u09bf\u0995\u09c7","tiro":"\u099f\u09bf\u09b0\u0993","tiri":"\u099f\u09bf\u09b0\u0987","tire":"\u099f\u09bf\u09b0\u09c7","tite":"\u099f\u09bf\u09a4\u09c7","mulok":"\u09ae\u09c2\u09b2\u0995","shuchok":"\u09b8\u09c2\u099a\u0995","shucok":"\u09b8\u09c2\u099a\u0995","suchok":"\u09b8\u09c2\u099a\u0995","sucok":"\u09b8\u09c2\u099a\u0995","gaca":"\u0997\u09be\u099b\u09be","gacha":"\u0997\u09be\u099b\u09be","gachha":"\u0997\u09be\u099b\u09be","gachhi":"\u0997\u09be\u099b\u09bf","gachi":"\u0997\u09be\u099b\u09bf","gaci":"\u0997\u09be\u099b\u09bf","tuko":"\u099f\u09c1\u0995\u0993","tuki":"\u099f\u09c1\u0995\u0987","tuke":"\u099f\u09c1\u0995\u09c7","tuku":"\u099f\u09c1\u0995\u09c1","guno":"\u0997\u09c1\u09a3\u0993","guni":"\u0997\u09c1\u09a3\u0987","derke":"\u09a6\u09c7\u09b0\u0995\u09c7","digeo":"\u09a6\u09bf\u0997\u09c7\u0993","digei":"\u09a6\u09bf\u0997\u09c7\u0987","diger":"\u09a6\u09bf\u0997\u09c7\u09b0","digoke":"\u09a6\u09bf\u0997\u0995\u09c7","digore":"\u09a6\u09bf\u0997\u09b0\u09c7","gonero":"\u0997\u09a3\u09c7\u09b0\u0993","goneri":"\u0997\u09a3\u09c7\u09b0\u0987","gonkeo":"\u0997\u09a3\u0995\u09c7\u0993","gonkei":"\u0997\u09a3\u0995\u09c7\u0987","gulao":"\u0997\u09c1\u09b2\u09be\u0993","gulai":"\u0997\u09c1\u09b2\u09be\u0987","gulan":"\u0997\u09c1\u09b2\u09be\u09a8","gular":"\u0997\u09c1\u09b2\u09be\u09b0","gulio":"\u0997\u09c1\u09b2\u09bf\u0993","gulii":"\u0997\u09c1\u09b2\u09bf\u0987","gulir":"\u0997\u09c1\u09b2\u09bf\u09b0","guloo":"\u0997\u09c1\u09b2\u09cb\u0993","guloi":"\u0997\u09c1\u09b2\u09cb\u0987","gulor":"\u0997\u09c1\u09b2\u09cb\u09b0","yerao":"\u09df\u09c7\u09b0\u09be\u0993","yerai":"\u09df\u09c7\u09b0\u09be\u0987","yereo":"\u09df\u09c7\u09b0\u09c7\u0993","yerei":"\u09df\u09c7\u09b0\u09c7\u0987","yeteo":"\u09df\u09c7\u09a4\u09c7\u0993","yetei":"\u09df\u09c7\u09a4\u09c7\u0987","borge":"\u09ac\u09b0\u09cd\u0997\u09c7","borgoo":"\u09ac\u09b0\u09cd\u0997\u0993","borgoi":"\u09ac\u09b0\u09cd\u0997\u0987","borrge":"\u09ac\u09b0\u09cd\u0997\u09c7","borrgoo":"\u09ac\u09b0\u09cd\u0997\u0993","borrgoi":"\u09ac\u09b0\u09cd\u0997\u0987","brindo":"\u09ac\u09c3\u09a8\u09cd\u09a6","brrindo":"\u09ac\u09c3\u09a8\u09cd\u09a6","gonrao":"\u0997\u09a3\u09b0\u09be\u0993","gonrai":"\u0997\u09a3\u09b0\u09be\u0987","khanao":"\u0996\u09be\u09a8\u09be\u0993","khanai":"\u0996\u09be\u09a8\u09be\u0987","khanar":"\u0996\u09be\u09a8\u09be\u09b0","khanay":"\u0996\u09be\u09a8\u09be\u09df","khaner":"\u0996\u09be\u09a8\u09c7\u09b0","khanio":"\u0996\u09be\u09a8\u09bf\u0993","khanii":"\u0996\u09be\u09a8\u09bf\u0987","khanir":"\u0996\u09be\u09a8\u09bf\u09b0","kuleo":"\u0995\u09c1\u09b2\u09c7\u0993","kulei":"\u0995\u09c1\u09b2\u09c7\u0987","kuler":"\u0995\u09c1\u09b2\u09c7\u09b0","kulke":"\u0995\u09c1\u09b2\u0995\u09c7","malao":"\u09ae\u09be\u09b2\u09be\u0993","malai":"\u09ae\u09be\u09b2\u09be\u0987","malar":"\u09ae\u09be\u09b2\u09be\u09b0","malay":"\u09ae\u09be\u09b2\u09be\u09df","punjo":"\u09aa\u09c1\u099e\u09cd\u099c","rajio":"\u09b0\u09be\u099c\u09bf\u0993","rajii":"\u09b0\u09be\u099c\u09bf\u0987","rajir":"\u09b0\u09be\u099c\u09bf\u09b0","razio":"\u09b0\u09be\u099c\u09bf\u0993","razii":"\u09b0\u09be\u099c\u09bf\u0987","shobero":"\u09b8\u09ac\u09c7\u09b0\u0993","shoberi":"\u09b8\u09ac\u09c7\u09b0\u0987","shobkeo":"\u09b8\u09ac\u0995\u09c7\u0993","shobkei":"\u09b8\u09ac\u0995\u09c7\u0987","shokoleo":"\u09b8\u0995\u09b2\u09c7\u0993","shokolei":"\u09b8\u0995\u09b2\u09c7\u0987","shokoler":"\u09b8\u0995\u09b2\u09c7\u09b0","shokolke":"\u09b8\u0995\u09b2\u0995\u09c7","shokolre":"\u09b8\u0995\u09b2\u09b0\u09c7","shomuhe":"\u09b8\u09ae\u09c2\u09b9\u09c7","shomuhoo":"\u09b8\u09ae\u09c2\u09b9\u0993","shomuhoi":"\u09b8\u09ae\u09c2\u09b9\u0987","sobero":"\u09b8\u09ac\u09c7\u09b0\u0993","soberi":"\u09b8\u09ac\u09c7\u09b0\u0987","sobkeo":"\u09b8\u09ac\u0995\u09c7\u0993","sobkei":"\u09b8\u09ac\u0995\u09c7\u0987","sokoleo":"\u09b8\u0995\u09b2\u09c7\u0993","sokolei":"\u09b8\u0995\u09b2\u09c7\u0987","sokoler":"\u09b8\u0995\u09b2\u09c7\u09b0","sokolke":"\u09b8\u0995\u09b2\u0995\u09c7","sokolre":"\u09b8\u0995\u09b2\u09b0\u09c7","somuhe":"\u09b8\u09ae\u09c2\u09b9\u09c7","somuhoo":"\u09b8\u09ae\u09c2\u09b9\u0993","somuhoi":"\u09b8\u09ae\u09c2\u09b9\u0987","takeo":"\u099f\u09be\u0995\u09c7\u0993","takei":"\u099f\u09be\u0995\u09c7\u0987","tareo":"\u099f\u09be\u09b0\u09c7\u0993","tarei":"\u099f\u09be\u09b0\u09c7\u0987","tateo":"\u099f\u09be\u09a4\u09c7\u0993","tatei":"\u099f\u09be\u09a4\u09c7\u0987","tikeo":"\u099f\u09bf\u0995\u09c7\u0993","tikei":"\u099f\u09bf\u0995\u09c7\u0987","tireo":"\u099f\u09bf\u09b0\u09c7\u0993","tirei":"\u099f\u09bf\u09b0\u09c7\u0987","titeo":"\u099f\u09bf\u09a4\u09c7\u0993","titei":"\u099f\u09bf\u09a4\u09c7\u0987","bises":"\u09ac\u09bf\u09b6\u09c7\u09b7","bishesh":"\u09ac\u09bf\u09b6\u09c7\u09b7","jatio":"\u099c\u09be\u09a4\u09c0\u09df","jatiyo":"\u099c\u09be\u09a4\u09c0\u09df","muloko":"\u09ae\u09c2\u09b2\u0995\u0993","muloki":"\u09ae\u09c2\u09b2\u0995\u0987","shuchoko":"\u09b8\u09c2\u099a\u0995\u0993","shuchoki":"\u09b8\u09c2\u099a\u0995\u0987","shucoko":"\u09b8\u09c2\u099a\u0995\u0993","shucoki":"\u09b8\u09c2\u099a\u0995\u0987","suchoko":"\u09b8\u09c2\u099a\u0995\u0993","suchoki":"\u09b8\u09c2\u099a\u0995\u0987","sucoko":"\u09b8\u09c2\u099a\u0995\u0993","sucoki":"\u09b8\u09c2\u099a\u0995\u0987","gacao":"\u0997\u09be\u099b\u09be\u0993","gacai":"\u0997\u09be\u099b\u09be\u0987","gacar":"\u0997\u09be\u099b\u09be\u09b0","gachao":"\u0997\u09be\u099b\u09be\u0993","gachai":"\u0997\u09be\u099b\u09be\u0987","gachar":"\u0997\u09be\u099b\u09be\u09b0","gachhao":"\u0997\u09be\u099b\u09be\u0993","gachhai":"\u0997\u09be\u099b\u09be\u0987","gachhar":"\u0997\u09be\u099b\u09be\u09b0","gachhio":"\u0997\u09be\u099b\u09bf\u0993","gachhii":"\u0997\u09be\u099b\u09bf\u0987","gachhir":"\u0997\u09be\u099b\u09bf\u09b0","gachio":"\u0997\u09be\u099b\u09bf\u0993","gachii":"\u0997\u09be\u099b\u09bf\u0987","gachir":"\u0997\u09be\u099b\u09bf\u09b0","gacio":"\u0997\u09be\u099b\u09bf\u0993","gacii":"\u0997\u09be\u099b\u09bf\u0987","gacir":"\u0997\u09be\u099b\u09bf\u09b0","tukeo":"\u099f\u09c1\u0995\u09c7\u0993","tukei":"\u099f\u09c1\u0995\u09c7\u0987","tuker":"\u099f\u09c1\u0995\u09c7\u09b0","tukke":"\u099f\u09c1\u0995\u0995\u09c7","tukre":"\u099f\u09c1\u0995\u09b0\u09c7","tukte":"\u099f\u09c1\u0995\u09a4\u09c7","tukuo":"\u099f\u09c1\u0995\u09c1\u0993","tukui":"\u099f\u09c1\u0995\u09c1\u0987","tukun":"\u099f\u09c1\u0995\u09c1\u09a8","tukur":"\u099f\u09c1\u0995\u09c1\u09b0","guner":"\u0997\u09c1\u09a3\u09c7\u09b0","gunke":"\u0997\u09c1\u09a3\u0995\u09c7","gunre":"\u0997\u09c1\u09a3\u09b0\u09c7","dara":"\u09a6\u09cd\u09ac\u09be\u09b0\u09be","derkeo":"\u09a6\u09c7\u09b0\u0995\u09c7\u0993","derkei":"\u09a6\u09c7\u09b0\u0995\u09c7\u0987","digero":"\u09a6\u09bf\u0997\u09c7\u09b0\u0993","digeri":"\u09a6\u09bf\u0997\u09c7\u09b0\u0987","digere":"\u09a6\u09bf\u0997\u09c7\u09b0\u09c7","digete":"\u09a6\u09bf\u0997\u09c7\u09a4\u09c7","digokeo":"\u09a6\u09bf\u0997\u0995\u09c7\u0993","digokei":"\u09a6\u09bf\u0997\u0995\u09c7\u0987","digoreo":"\u09a6\u09bf\u0997\u09b0\u09c7\u0993","digorei":"\u09a6\u09bf\u0997\u09b0\u09c7\u0987","dwara":"\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gulake":"\u0997\u09c1\u09b2\u09be\u0995\u09c7","gulano":"\u0997\u09c1\u09b2\u09be\u09a8\u0993","gulani":"\u0997\u09c1\u09b2\u09be\u09a8\u0987","gularo":"\u0997\u09c1\u09b2\u09be\u09b0\u0993","gulari":"\u0997\u09c1\u09b2\u09be\u09b0\u0987","gulate":"\u0997\u09c1\u09b2\u09be\u09a4\u09c7","gulike":"\u0997\u09c1\u09b2\u09bf\u0995\u09c7","guliro":"\u0997\u09c1\u09b2\u09bf\u09b0\u0993","guliri":"\u0997\u09c1\u09b2\u09bf\u09b0\u0987","gulite":"\u0997\u09c1\u09b2\u09bf\u09a4\u09c7","guloke":"\u0997\u09c1\u09b2\u09cb\u0995\u09c7","guloro":"\u0997\u09c1\u09b2\u09cb\u09b0\u0993","gulori":"\u0997\u09c1\u09b2\u09cb\u09b0\u0987","gulote":"\u0997\u09c1\u09b2\u09cb\u09a4\u09c7","korrtrrik":"\u0995\u09b0\u09cd\u09a4\u09c3\u0995","kortrik":"\u0995\u09b0\u09cd\u09a4\u09c3\u0995","borgeo":"\u09ac\u09b0\u09cd\u0997\u09c7\u0993","borgei":"\u09ac\u09b0\u09cd\u0997\u09c7\u0987","borger":"\u09ac\u09b0\u09cd\u0997\u09c7\u09b0","borgoke":"\u09ac\u09b0\u09cd\u0997\u0995\u09c7","borrgeo":"\u09ac\u09b0\u09cd\u0997\u09c7\u0993","borrgei":"\u09ac\u09b0\u09cd\u0997\u09c7\u0987","borrger":"\u09ac\u09b0\u09cd\u0997\u09c7\u09b0","borrgoke":"\u09ac\u09b0\u09cd\u0997\u0995\u09c7","brinde":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7","brindoo":"\u09ac\u09c3\u09a8\u09cd\u09a6\u0993","brindoi":"\u09ac\u09c3\u09a8\u09cd\u09a6\u0987","brrinde":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7","brrindoo":"\u09ac\u09c3\u09a8\u09cd\u09a6\u0993","brrindoi":"\u09ac\u09c3\u09a8\u09cd\u09a6\u0987","khanake":"\u0996\u09be\u09a8\u09be\u0995\u09c7","khanaro":"\u0996\u09be\u09a8\u09be\u09b0\u0993","khanari":"\u0996\u09be\u09a8\u09be\u09b0\u0987","khanare":"\u0996\u09be\u09a8\u09be\u09b0\u09c7","khanate":"\u0996\u09be\u09a8\u09be\u09a4\u09c7","khanayo":"\u0996\u09be\u09a8\u09be\u09df\u0993","khanayi":"\u0996\u09be\u09a8\u09be\u09df\u0987","khanero":"\u0996\u09be\u09a8\u09c7\u09b0\u0993","khaneri":"\u0996\u09be\u09a8\u09c7\u09b0\u0987","khanete":"\u0996\u09be\u09a8\u09c7\u09a4\u09c7","khanike":"\u0996\u09be\u09a8\u09bf\u0995\u09c7","khaniro":"\u0996\u09be\u09a8\u09bf\u09b0\u0993","khaniri":"\u0996\u09be\u09a8\u09bf\u09b0\u0987","khanire":"\u0996\u09be\u09a8\u09bf\u09b0\u09c7","khanite":"\u0996\u09be\u09a8\u09bf\u09a4\u09c7","kulero":"\u0995\u09c1\u09b2\u09c7\u09b0\u0993","kuleri":"\u0995\u09c1\u09b2\u09c7\u09b0\u0987","kulkeo":"\u0995\u09c1\u09b2\u0995\u09c7\u0993","kulkei":"\u0995\u09c1\u09b2\u0995\u09c7\u0987","malake":"\u09ae\u09be\u09b2\u09be\u0995\u09c7","malaro":"\u09ae\u09be\u09b2\u09be\u09b0\u0993","malari":"\u09ae\u09be\u09b2\u09be\u09b0\u0987","malara":"\u09ae\u09be\u09b2\u09be\u09b0\u09be","malate":"\u09ae\u09be\u09b2\u09be\u09a4\u09c7","malayo":"\u09ae\u09be\u09b2\u09be\u09df\u0993","malayi":"\u09ae\u09be\u09b2\u09be\u09df\u0987","mondoli":"\u09ae\u09a3\u09cd\u09a1\u09b2\u09c0","punje":"\u09aa\u09c1\u099e\u09cd\u099c\u09c7","punjoo":"\u09aa\u09c1\u099e\u09cd\u099c\u0993","punjoi":"\u09aa\u09c1\u099e\u09cd\u099c\u0987","rajike":"\u09b0\u09be\u099c\u09bf\u0995\u09c7","rajiro":"\u09b0\u09be\u099c\u09bf\u09b0\u0993","rajiri":"\u09b0\u09be\u099c\u09bf\u09b0\u0987","rajira":"\u09b0\u09be\u099c\u09bf\u09b0\u09be","rajite":"\u09b0\u09be\u099c\u09bf\u09a4\u09c7","shokolero":"\u09b8\u0995\u09b2\u09c7\u09b0\u0993","shokoleri":"\u09b8\u0995\u09b2\u09c7\u09b0\u0987","shokolera":"\u09b8\u0995\u09b2\u09c7\u09b0\u09be","shokolkeo":"\u09b8\u0995\u09b2\u0995\u09c7\u0993","shokolkei":"\u09b8\u0995\u09b2\u0995\u09c7\u0987","shokolreo":"\u09b8\u0995\u09b2\u09b0\u09c7\u0993","shokolrei":"\u09b8\u0995\u09b2\u09b0\u09c7\u0987","shomuheo":"\u09b8\u09ae\u09c2\u09b9\u09c7\u0993","shomuhei":"\u09b8\u09ae\u09c2\u09b9\u09c7\u0987","shomuher":"\u09b8\u09ae\u09c2\u09b9\u09c7\u09b0","shomuhoke":"\u09b8\u09ae\u09c2\u09b9\u0995\u09c7","shomuhore":"\u09b8\u09ae\u09c2\u09b9\u09b0\u09c7","shomuhote":"\u09b8\u09ae\u09c2\u09b9\u09a4\u09c7","sokolero":"\u09b8\u0995\u09b2\u09c7\u09b0\u0993","sokoleri":"\u09b8\u0995\u09b2\u09c7\u09b0\u0987","sokolera":"\u09b8\u0995\u09b2\u09c7\u09b0\u09be","sokolkeo":"\u09b8\u0995\u09b2\u0995\u09c7\u0993","sokolkei":"\u09b8\u0995\u09b2\u0995\u09c7\u0987","sokolreo":"\u09b8\u0995\u09b2\u09b0\u09c7\u0993","sokolrei":"\u09b8\u0995\u09b2\u09b0\u09c7\u0987","somuheo":"\u09b8\u09ae\u09c2\u09b9\u09c7\u0993","somuhei":"\u09b8\u09ae\u09c2\u09b9\u09c7\u0987","somuher":"\u09b8\u09ae\u09c2\u09b9\u09c7\u09b0","somuhoke":"\u09b8\u09ae\u09c2\u09b9\u0995\u09c7","somuhore":"\u09b8\u09ae\u09c2\u09b9\u09b0\u09c7","somuhote":"\u09b8\u09ae\u09c2\u09b9\u09a4\u09c7","biseso":"\u09ac\u09bf\u09b6\u09c7\u09b7\u0993","bisesi":"\u09ac\u09bf\u09b6\u09c7\u09b7\u0987","bishesho":"\u09ac\u09bf\u09b6\u09c7\u09b7\u0993","bisheshi":"\u09ac\u09bf\u09b6\u09c7\u09b7\u0987","jatioo":"\u099c\u09be\u09a4\u09c0\u09df\u0993","jatioi":"\u099c\u09be\u09a4\u09c0\u09df\u0987","jatiyoo":"\u099c\u09be\u09a4\u09c0\u09df\u0993","jatiyoi":"\u099c\u09be\u09a4\u09c0\u09df\u0987","shorup":"\u09b8\u09cd\u09ac\u09b0\u09c2\u09aa","shworup":"\u09b8\u09cd\u09ac\u09b0\u09c2\u09aa","sorup":"\u09b8\u09cd\u09ac\u09b0\u09c2\u09aa","sworup":"\u09b8\u09cd\u09ac\u09b0\u09c2\u09aa","gacake":"\u0997\u09be\u099b\u09be\u0995\u09c7","gacaro":"\u0997\u09be\u099b\u09be\u09b0\u0993","gacari":"\u0997\u09be\u099b\u09be\u09b0\u0987","gacare":"\u0997\u09be\u099b\u09be\u09b0\u09c7","gacate":"\u0997\u09be\u099b\u09be\u09a4\u09c7","gachake":"\u0997\u09be\u099b\u09be\u0995\u09c7","gacharo":"\u0997\u09be\u099b\u09be\u09b0\u0993","gachari":"\u0997\u09be\u099b\u09be\u09b0\u0987","gachare":"\u0997\u09be\u099b\u09be\u09b0\u09c7","gachate":"\u0997\u09be\u099b\u09be\u09a4\u09c7","gachhake":"\u0997\u09be\u099b\u09be\u0995\u09c7","gachharo":"\u0997\u09be\u099b\u09be\u09b0\u0993","gachhari":"\u0997\u09be\u099b\u09be\u09b0\u0987","gachhare":"\u0997\u09be\u099b\u09be\u09b0\u09c7","gachhate":"\u0997\u09be\u099b\u09be\u09a4\u09c7","gachhike":"\u0997\u09be\u099b\u09bf\u0995\u09c7","gachhiro":"\u0997\u09be\u099b\u09bf\u09b0\u0993","gachhiri":"\u0997\u09be\u099b\u09bf\u09b0\u0987","gachhire":"\u0997\u09be\u099b\u09bf\u09b0\u09c7","gachhite":"\u0997\u09be\u099b\u09bf\u09a4\u09c7","gachike":"\u0997\u09be\u099b\u09bf\u0995\u09c7","gachiro":"\u0997\u09be\u099b\u09bf\u09b0\u0993","gachiri":"\u0997\u09be\u099b\u09bf\u09b0\u0987","gachire":"\u0997\u09be\u099b\u09bf\u09b0\u09c7","gachite":"\u0997\u09be\u099b\u09bf\u09a4\u09c7","gacike":"\u0997\u09be\u099b\u09bf\u0995\u09c7","gaciro":"\u0997\u09be\u099b\u09bf\u09b0\u0993","gaciri":"\u0997\u09be\u099b\u09bf\u09b0\u0987","gacire":"\u0997\u09be\u099b\u09bf\u09b0\u09c7","gacite":"\u0997\u09be\u099b\u09bf\u09a4\u09c7","tukero":"\u099f\u09c1\u0995\u09c7\u09b0\u0993","tukeri":"\u099f\u09c1\u0995\u09c7\u09b0\u0987","tukkeo":"\u099f\u09c1\u0995\u0995\u09c7\u0993","tukkei":"\u099f\u09c1\u0995\u0995\u09c7\u0987","tukreo":"\u099f\u09c1\u0995\u09b0\u09c7\u0993","tukrei":"\u099f\u09c1\u0995\u09b0\u09c7\u0987","tukteo":"\u099f\u09c1\u0995\u09a4\u09c7\u0993","tuktei":"\u099f\u09c1\u0995\u09a4\u09c7\u0987","tukuke":"\u099f\u09c1\u0995\u09c1\u0995\u09c7","tukuno":"\u099f\u09c1\u0995\u09c1\u09a8\u0993","tukuni":"\u099f\u09c1\u0995\u09c1\u09a8\u0987","tukune":"\u099f\u09c1\u0995\u09c1\u09a8\u09c7","tukuro":"\u099f\u09c1\u0995\u09c1\u09b0\u0993","tukuri":"\u099f\u09c1\u0995\u09c1\u09b0\u0987","tukure":"\u099f\u09c1\u0995\u09c1\u09b0\u09c7","tukute":"\u099f\u09c1\u0995\u09c1\u09a4\u09c7","gunero":"\u0997\u09c1\u09a3\u09c7\u09b0\u0993","guneri":"\u0997\u09c1\u09a3\u09c7\u09b0\u0987","gunkeo":"\u0997\u09c1\u09a3\u0995\u09c7\u0993","gunkei":"\u0997\u09c1\u09a3\u0995\u09c7\u0987","gunreo":"\u0997\u09c1\u09a3\u09b0\u09c7\u0993","gunrei":"\u0997\u09c1\u09a3\u09b0\u09c7\u0987","darao":"\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","darai":"\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","digereo":"\u09a6\u09bf\u0997\u09c7\u09b0\u09c7\u0993","digerei":"\u09a6\u09bf\u0997\u09c7\u09b0\u09c7\u0987","digeteo":"\u09a6\u09bf\u0997\u09c7\u09a4\u09c7\u0993","digetei":"\u09a6\u09bf\u0997\u09c7\u09a4\u09c7\u0987","dwarao":"\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","dwarai":"\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","gulakeo":"\u0997\u09c1\u09b2\u09be\u0995\u09c7\u0993","gulakei":"\u0997\u09c1\u09b2\u09be\u0995\u09c7\u0987","gulaner":"\u0997\u09c1\u09b2\u09be\u09a8\u09c7\u09b0","gulateo":"\u0997\u09c1\u09b2\u09be\u09a4\u09c7\u0993","gulatei":"\u0997\u09c1\u09b2\u09be\u09a4\u09c7\u0987","gulikeo":"\u0997\u09c1\u09b2\u09bf\u0995\u09c7\u0993","gulikei":"\u0997\u09c1\u09b2\u09bf\u0995\u09c7\u0987","guliteo":"\u0997\u09c1\u09b2\u09bf\u09a4\u09c7\u0993","gulitei":"\u0997\u09c1\u09b2\u09bf\u09a4\u09c7\u0987","gulokeo":"\u0997\u09c1\u09b2\u09cb\u0995\u09c7\u0993","gulokei":"\u0997\u09c1\u09b2\u09cb\u0995\u09c7\u0987","guloteo":"\u0997\u09c1\u09b2\u09cb\u09a4\u09c7\u0993","gulotei":"\u0997\u09c1\u09b2\u09cb\u09a4\u09c7\u0987","korrtrriko":"\u0995\u09b0\u09cd\u09a4\u09c3\u0995\u0993","korrtrriki":"\u0995\u09b0\u09cd\u09a4\u09c3\u0995\u0987","kortriko":"\u0995\u09b0\u09cd\u09a4\u09c3\u0995\u0993","kortriki":"\u0995\u09b0\u09cd\u09a4\u09c3\u0995\u0987","borgero":"\u09ac\u09b0\u09cd\u0997\u09c7\u09b0\u0993","borgeri":"\u09ac\u09b0\u09cd\u0997\u09c7\u09b0\u0987","borgera":"\u09ac\u09b0\u09cd\u0997\u09c7\u09b0\u09be","borgokeo":"\u09ac\u09b0\u09cd\u0997\u0995\u09c7\u0993","borgokei":"\u09ac\u09b0\u09cd\u0997\u0995\u09c7\u0987","borrgero":"\u09ac\u09b0\u09cd\u0997\u09c7\u09b0\u0993","borrgeri":"\u09ac\u09b0\u09cd\u0997\u09c7\u09b0\u0987","borrgera":"\u09ac\u09b0\u09cd\u0997\u09c7\u09b0\u09be","borrgokeo":"\u09ac\u09b0\u09cd\u0997\u0995\u09c7\u0993","borrgokei":"\u09ac\u09b0\u09cd\u0997\u0995\u09c7\u0987","brindeo":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u0993","brindei":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u0987","brinder":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u09b0","brindoke":"\u09ac\u09c3\u09a8\u09cd\u09a6\u0995\u09c7","brindora":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09b0\u09be","brrindeo":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u0993","brrindei":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u0987","brrinder":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u09b0","brrindoke":"\u09ac\u09c3\u09a8\u09cd\u09a6\u0995\u09c7","brrindora":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09b0\u09be","khanakeo":"\u0996\u09be\u09a8\u09be\u0995\u09c7\u0993","khanakei":"\u0996\u09be\u09a8\u09be\u0995\u09c7\u0987","khanareo":"\u0996\u09be\u09a8\u09be\u09b0\u09c7\u0993","khanarei":"\u0996\u09be\u09a8\u09be\u09b0\u09c7\u0987","khanateo":"\u0996\u09be\u09a8\u09be\u09a4\u09c7\u0993","khanatei":"\u0996\u09be\u09a8\u09be\u09a4\u09c7\u0987","khaneteo":"\u0996\u09be\u09a8\u09c7\u09a4\u09c7\u0993","khanetei":"\u0996\u09be\u09a8\u09c7\u09a4\u09c7\u0987","khanikeo":"\u0996\u09be\u09a8\u09bf\u0995\u09c7\u0993","khanikei":"\u0996\u09be\u09a8\u09bf\u0995\u09c7\u0987","khanireo":"\u0996\u09be\u09a8\u09bf\u09b0\u09c7\u0993","khanirei":"\u0996\u09be\u09a8\u09bf\u09b0\u09c7\u0987","khaniteo":"\u0996\u09be\u09a8\u09bf\u09a4\u09c7\u0993","khanitei":"\u0996\u09be\u09a8\u09bf\u09a4\u09c7\u0987","malakeo":"\u09ae\u09be\u09b2\u09be\u0995\u09c7\u0993","malakei":"\u09ae\u09be\u09b2\u09be\u0995\u09c7\u0987","malarao":"\u09ae\u09be\u09b2\u09be\u09b0\u09be\u0993","malarai":"\u09ae\u09be\u09b2\u09be\u09b0\u09be\u0987","malateo":"\u09ae\u09be\u09b2\u09be\u09a4\u09c7\u0993","malatei":"\u09ae\u09be\u09b2\u09be\u09a4\u09c7\u0987","mondolio":"\u09ae\u09a3\u09cd\u09a1\u09b2\u09c0\u0993","mondolii":"\u09ae\u09a3\u09cd\u09a1\u09b2\u09c0\u0987","mondolir":"\u09ae\u09a3\u09cd\u09a1\u09b2\u09c0\u09b0","punjeo":"\u09aa\u09c1\u099e\u09cd\u099c\u09c7\u0993","punjei":"\u09aa\u09c1\u099e\u09cd\u099c\u09c7\u0987","punjer":"\u09aa\u09c1\u099e\u09cd\u099c\u09c7\u09b0","punjoke":"\u09aa\u09c1\u099e\u09cd\u099c\u0995\u09c7","punjora":"\u09aa\u09c1\u099e\u09cd\u099c\u09b0\u09be","punjote":"\u09aa\u09c1\u099e\u09cd\u099c\u09a4\u09c7","rajikeo":"\u09b0\u09be\u099c\u09bf\u0995\u09c7\u0993","rajikei":"\u09b0\u09be\u099c\u09bf\u0995\u09c7\u0987","rajirao":"\u09b0\u09be\u099c\u09bf\u09b0\u09be\u0993","rajirai":"\u09b0\u09be\u099c\u09bf\u09b0\u09be\u0987","rajiteo":"\u09b0\u09be\u099c\u09bf\u09a4\u09c7\u0993","rajitei":"\u09b0\u09be\u099c\u09bf\u09a4\u09c7\u0987","shokolerao":"\u09b8\u0995\u09b2\u09c7\u09b0\u09be\u0993","shokolerai":"\u09b8\u0995\u09b2\u09c7\u09b0\u09be\u0987","shomuhero":"\u09b8\u09ae\u09c2\u09b9\u09c7\u09b0\u0993","shomuheri":"\u09b8\u09ae\u09c2\u09b9\u09c7\u09b0\u0987","shomuhokeo":"\u09b8\u09ae\u09c2\u09b9\u0995\u09c7\u0993","shomuhokei":"\u09b8\u09ae\u09c2\u09b9\u0995\u09c7\u0987","shomuhoreo":"\u09b8\u09ae\u09c2\u09b9\u09b0\u09c7\u0993","shomuhorei":"\u09b8\u09ae\u09c2\u09b9\u09b0\u09c7\u0987","shomuhoteo":"\u09b8\u09ae\u09c2\u09b9\u09a4\u09c7\u0993","shomuhotei":"\u09b8\u09ae\u09c2\u09b9\u09a4\u09c7\u0987","sokolerao":"\u09b8\u0995\u09b2\u09c7\u09b0\u09be\u0993","sokolerai":"\u09b8\u0995\u09b2\u09c7\u09b0\u09be\u0987","somuhero":"\u09b8\u09ae\u09c2\u09b9\u09c7\u09b0\u0993","somuheri":"\u09b8\u09ae\u09c2\u09b9\u09c7\u09b0\u0987","somuhokeo":"\u09b8\u09ae\u09c2\u09b9\u0995\u09c7\u0993","somuhokei":"\u09b8\u09ae\u09c2\u09b9\u0995\u09c7\u0987","somuhoreo":"\u09b8\u09ae\u09c2\u09b9\u09b0\u09c7\u0993","somuhorei":"\u09b8\u09ae\u09c2\u09b9\u09b0\u09c7\u0987","somuhoteo":"\u09b8\u09ae\u09c2\u09b9\u09a4\u09c7\u0993","somuhotei":"\u09b8\u09ae\u09c2\u09b9\u09a4\u09c7\u0987","bishishto":"\u09ac\u09bf\u09b6\u09bf\u09b7\u09cd\u099f","bisisto":"\u09ac\u09bf\u09b6\u09bf\u09b7\u09cd\u099f","shorupo":"\u09b8\u09cd\u09ac\u09b0\u09c2\u09aa\u0993","shorupi":"\u09b8\u09cd\u09ac\u09b0\u09c2\u09aa\u0987","shworupo":"\u09b8\u09cd\u09ac\u09b0\u09c2\u09aa\u0993","shworupi":"\u09b8\u09cd\u09ac\u09b0\u09c2\u09aa\u0987","sorupo":"\u09b8\u09cd\u09ac\u09b0\u09c2\u09aa\u0993","sorupi":"\u09b8\u09cd\u09ac\u09b0\u09c2\u09aa\u0987","sworupo":"\u09b8\u09cd\u09ac\u09b0\u09c2\u09aa\u0993","sworupi":"\u09b8\u09cd\u09ac\u09b0\u09c2\u09aa\u0987","gacakeo":"\u0997\u09be\u099b\u09be\u0995\u09c7\u0993","gacakei":"\u0997\u09be\u099b\u09be\u0995\u09c7\u0987","gacareo":"\u0997\u09be\u099b\u09be\u09b0\u09c7\u0993","gacarei":"\u0997\u09be\u099b\u09be\u09b0\u09c7\u0987","gacateo":"\u0997\u09be\u099b\u09be\u09a4\u09c7\u0993","gacatei":"\u0997\u09be\u099b\u09be\u09a4\u09c7\u0987","gachakeo":"\u0997\u09be\u099b\u09be\u0995\u09c7\u0993","gachakei":"\u0997\u09be\u099b\u09be\u0995\u09c7\u0987","gachareo":"\u0997\u09be\u099b\u09be\u09b0\u09c7\u0993","gacharei":"\u0997\u09be\u099b\u09be\u09b0\u09c7\u0987","gachateo":"\u0997\u09be\u099b\u09be\u09a4\u09c7\u0993","gachatei":"\u0997\u09be\u099b\u09be\u09a4\u09c7\u0987","gachhakeo":"\u0997\u09be\u099b\u09be\u0995\u09c7\u0993","gachhakei":"\u0997\u09be\u099b\u09be\u0995\u09c7\u0987","gachhareo":"\u0997\u09be\u099b\u09be\u09b0\u09c7\u0993","gachharei":"\u0997\u09be\u099b\u09be\u09b0\u09c7\u0987","gachhateo":"\u0997\u09be\u099b\u09be\u09a4\u09c7\u0993","gachhatei":"\u0997\u09be\u099b\u09be\u09a4\u09c7\u0987","gachhikeo":"\u0997\u09be\u099b\u09bf\u0995\u09c7\u0993","gachhikei":"\u0997\u09be\u099b\u09bf\u0995\u09c7\u0987","gachhireo":"\u0997\u09be\u099b\u09bf\u09b0\u09c7\u0993","gachhirei":"\u0997\u09be\u099b\u09bf\u09b0\u09c7\u0987","gachhiteo":"\u0997\u09be\u099b\u09bf\u09a4\u09c7\u0993","gachhitei":"\u0997\u09be\u099b\u09bf\u09a4\u09c7\u0987","gachikeo":"\u0997\u09be\u099b\u09bf\u0995\u09c7\u0993","gachikei":"\u0997\u09be\u099b\u09bf\u0995\u09c7\u0987","gachireo":"\u0997\u09be\u099b\u09bf\u09b0\u09c7\u0993","gachirei":"\u0997\u09be\u099b\u09bf\u09b0\u09c7\u0987","gachiteo":"\u0997\u09be\u099b\u09bf\u09a4\u09c7\u0993","gachitei":"\u0997\u09be\u099b\u09bf\u09a4\u09c7\u0987","gacikeo":"\u0997\u09be\u099b\u09bf\u0995\u09c7\u0993","gacikei":"\u0997\u09be\u099b\u09bf\u0995\u09c7\u0987","gacireo":"\u0997\u09be\u099b\u09bf\u09b0\u09c7\u0993","gacirei":"\u0997\u09be\u099b\u09bf\u09b0\u09c7\u0987","gaciteo":"\u0997\u09be\u099b\u09bf\u09a4\u09c7\u0993","gacitei":"\u0997\u09be\u099b\u09bf\u09a4\u09c7\u0987","tukukeo":"\u099f\u09c1\u0995\u09c1\u0995\u09c7\u0993","tukukei":"\u099f\u09c1\u0995\u09c1\u0995\u09c7\u0987","tukuneo":"\u099f\u09c1\u0995\u09c1\u09a8\u09c7\u0993","tukunei":"\u099f\u09c1\u0995\u09c1\u09a8\u09c7\u0987","tukuner":"\u099f\u09c1\u0995\u09c1\u09a8\u09c7\u09b0","tukunke":"\u099f\u09c1\u0995\u09c1\u09a8\u0995\u09c7","tukunre":"\u099f\u09c1\u0995\u09c1\u09a8\u09b0\u09c7","tukureo":"\u099f\u09c1\u0995\u09c1\u09b0\u09c7\u0993","tukurei":"\u099f\u09c1\u0995\u09c1\u09b0\u09c7\u0987","tukuteo":"\u099f\u09c1\u0995\u09c1\u09a4\u09c7\u0993","tukutei":"\u099f\u09c1\u0995\u09c1\u09a4\u09c7\u0987","gulanero":"\u0997\u09c1\u09b2\u09be\u09a8\u09c7\u09b0\u0993","gulaneri":"\u0997\u09c1\u09b2\u09be\u09a8\u09c7\u09b0\u0987","borgerao":"\u09ac\u09b0\u09cd\u0997\u09c7\u09b0\u09be\u0993","borgerai":"\u09ac\u09b0\u09cd\u0997\u09c7\u09b0\u09be\u0987","borrgerao":"\u09ac\u09b0\u09cd\u0997\u09c7\u09b0\u09be\u0993","borrgerai":"\u09ac\u09b0\u09cd\u0997\u09c7\u09b0\u09be\u0987","brindero":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u09b0\u0993","brinderi":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u09b0\u0987","brindera":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u09b0\u09be","brindokeo":"\u09ac\u09c3\u09a8\u09cd\u09a6\u0995\u09c7\u0993","brindokei":"\u09ac\u09c3\u09a8\u09cd\u09a6\u0995\u09c7\u0987","brindorao":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09b0\u09be\u0993","brindorai":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09b0\u09be\u0987","brrindero":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u09b0\u0993","brrinderi":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u09b0\u0987","brrindera":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u09b0\u09be","brrindokeo":"\u09ac\u09c3\u09a8\u09cd\u09a6\u0995\u09c7\u0993","brrindokei":"\u09ac\u09c3\u09a8\u09cd\u09a6\u0995\u09c7\u0987","brrindorao":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09b0\u09be\u0993","brrindorai":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09b0\u09be\u0987","mondolike":"\u09ae\u09a3\u09cd\u09a1\u09b2\u09c0\u0995\u09c7","mondoliro":"\u09ae\u09a3\u09cd\u09a1\u09b2\u09c0\u09b0\u0993","mondoliri":"\u09ae\u09a3\u09cd\u09a1\u09b2\u09c0\u09b0\u0987","mondolira":"\u09ae\u09a3\u09cd\u09a1\u09b2\u09c0\u09b0\u09be","punjero":"\u09aa\u09c1\u099e\u09cd\u099c\u09c7\u09b0\u0993","punjeri":"\u09aa\u09c1\u099e\u09cd\u099c\u09c7\u09b0\u0987","punjokeo":"\u09aa\u09c1\u099e\u09cd\u099c\u0995\u09c7\u0993","punjokei":"\u09aa\u09c1\u099e\u09cd\u099c\u0995\u09c7\u0987","punjorao":"\u09aa\u09c1\u099e\u09cd\u099c\u09b0\u09be\u0993","punjorai":"\u09aa\u09c1\u099e\u09cd\u099c\u09b0\u09be\u0987","punjoteo":"\u09aa\u09c1\u099e\u09cd\u099c\u09a4\u09c7\u0993","punjotei":"\u09aa\u09c1\u099e\u09cd\u099c\u09a4\u09c7\u0987","bishishtoo":"\u09ac\u09bf\u09b6\u09bf\u09b7\u09cd\u099f\u0993","bishishtoi":"\u09ac\u09bf\u09b6\u09bf\u09b7\u09cd\u099f\u0987","bisistoo":"\u09ac\u09bf\u09b6\u09bf\u09b7\u09cd\u099f\u0993","bisistoi":"\u09ac\u09bf\u09b6\u09bf\u09b7\u09cd\u099f\u0987","tukunero":"\u099f\u09c1\u0995\u09c1\u09a8\u09c7\u09b0\u0993","tukuneri":"\u099f\u09c1\u0995\u09c1\u09a8\u09c7\u09b0\u0987","tukunkeo":"\u099f\u09c1\u0995\u09c1\u09a8\u0995\u09c7\u0993","tukunkei":"\u099f\u09c1\u0995\u09c1\u09a8\u0995\u09c7\u0987","tukunreo":"\u099f\u09c1\u0995\u09c1\u09a8\u09b0\u09c7\u0993","tukunrei":"\u099f\u09c1\u0995\u09c1\u09a8\u09b0\u09c7\u0987","brinderao":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u09b0\u09be\u0993","brinderai":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u09b0\u09be\u0987","brrinderao":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u09b0\u09be\u0993","brrinderai":"\u09ac\u09c3\u09a8\u09cd\u09a6\u09c7\u09b0\u09be\u0987","mondolikeo":"\u09ae\u09a3\u09cd\u09a1\u09b2\u09c0\u0995\u09c7\u0993","mondolikei":"\u09ae\u09a3\u09cd\u09a1\u09b2\u09c0\u0995\u09c7\u0987","mondolirao":"\u09ae\u09a3\u09cd\u09a1\u09b2\u09c0\u09b0\u09be\u0993","mondolirai":"\u09ae\u09a3\u09cd\u09a1\u09b2\u09c0\u09b0\u09be\u0987","shombondhio":"\u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c0\u09df","shombondhiyo":"\u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c0\u09df","shongkranto":"\u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4","shonkanto":"\u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4","sombondhio":"\u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c0\u09df","sombondhiyo":"\u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c0\u09df","songkranto":"\u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4","sonkanto":"\u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4","tukdara":"\u099f\u09c1\u0995\u09a6\u09cd\u09ac\u09be\u09b0\u09be","tukdwara":"\u099f\u09c1\u0995\u09a6\u09cd\u09ac\u09be\u09b0\u09be","shombondhioo":"\u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c0\u09df\u0993","shombondhioi":"\u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c0\u09df\u0987","shombondhiyoo":"\u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c0\u09df\u0993","shombondhiyoi":"\u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c0\u09df\u0987","shongkrantoo":"\u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u0993","shongkrantoi":"\u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u0987","shonkantoo":"\u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u0993","shonkantoi":"\u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u0987","sombondhioo":"\u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c0\u09df\u0993","sombondhioi":"\u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c0\u09df\u0987","sombondhiyoo":"\u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c0\u09df\u0993","sombondhiyoi":"\u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c0\u09df\u0987","songkrantoo":"\u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u0993","songkrantoi":"\u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u0987","sonkantoo":"\u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u0993","sonkantoi":"\u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u0987","gacadara":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gacadwara":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gachadara":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gachadwara":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gachhadara":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gachhadwara":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gachhidara":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gachhidwara":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gachidara":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gachidwara":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gacidara":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gacidwara":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be","tukdarao":"\u099f\u09c1\u0995\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","tukdarai":"\u099f\u09c1\u0995\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","tukdwarao":"\u099f\u09c1\u0995\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","tukdwarai":"\u099f\u09c1\u0995\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","tukudara":"\u099f\u09c1\u0995\u09c1\u09a6\u09cd\u09ac\u09be\u09b0\u09be","tukudwara":"\u099f\u09c1\u0995\u09c1\u09a6\u09cd\u09ac\u09be\u09b0\u09be","gacadarao":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","gacadarai":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","gacadwarao":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","gacadwarai":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","gachadarao":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","gachadarai":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","gachadwarao":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","gachadwarai":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","gachhadarao":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","gachhadarai":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","gachhadwarao":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","gachhadwarai":"\u0997\u09be\u099b\u09be\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","gachhidarao":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","gachhidarai":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","gachhidwarao":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","gachhidwarai":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","gachidarao":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","gachidarai":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","gachidwarao":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","gachidwarai":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","gacidarao":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","gacidarai":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","gacidwarao":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","gacidwarai":"\u0997\u09be\u099b\u09bf\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","tukudarao":"\u099f\u09c1\u0995\u09c1\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","tukudarai":"\u099f\u09c1\u0995\u09c1\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","tukudwarao":"\u099f\u09c1\u0995\u09c1\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","tukudwarai":"\u099f\u09c1\u0995\u09c1\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","tukundara":"\u099f\u09c1\u0995\u09c1\u09a8\u09a6\u09cd\u09ac\u09be\u09b0\u09be","tukundwara":"\u099f\u09c1\u0995\u09c1\u09a8\u09a6\u09cd\u09ac\u09be\u09b0\u09be","tukundarao":"\u099f\u09c1\u0995\u09c1\u09a8\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","tukundarai":"\u099f\u09c1\u0995\u09c1\u09a8\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987","tukundwarao":"\u099f\u09c1\u0995\u09c1\u09a8\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0993","tukundwarai":"\u099f\u09c1\u0995\u09c1\u09a8\u09a6\u09cd\u09ac\u09be\u09b0\u09be\u0987"};
--------------------------------------------------------------------------------
/avroregexlib.js:
--------------------------------------------------------------------------------
1 | /*
2 | =============================================================================
3 | *****************************************************************************
4 | The contents of this file are subject to the Mozilla Public License
5 | Version 1.1 (the "License"); you may not use this file except in
6 | compliance with the License. You may obtain a copy of the License at
7 | http://www.mozilla.org/MPL/
8 |
9 | Software distributed under the License is distributed on an "AS IS"
10 | basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
11 | License for the specific language governing rights and limitations
12 | under the License.
13 |
14 | The Original Code is jsAvroPhonetic
15 |
16 | The Initial Developer of the Original Code is
17 | Mehdi Hasan Khan
18 | Rifat Nabi
19 |
20 | Copyright (C) OmicronLab (http://www.omicronlab.com). All Rights Reserved.
21 |
22 |
23 | Contributor(s): ______________________________________.
24 |
25 | *****************************************************************************
26 | =============================================================================
27 | */
28 |
29 | const utfconv = imports.utf8;
30 |
31 | function AvroRegex () {}
32 |
33 | AvroRegex.prototype = {
34 | parse: function(input) {
35 | var fixed = this._fixString(input);
36 | var output = "";
37 | for(var cur = 0; cur < fixed.length; ++cur) {
38 | var start = cur, end = cur + 1, prev = start - 1;
39 | var matched = false;
40 |
41 | for(var i = 0; i < this.data.patterns.length; ++i) {
42 | var pattern = this.data.patterns[i];
43 | end = cur + pattern.find.length;
44 | if(end <= fixed.length && fixed.substring(start, end) == pattern.find) {
45 | prev = start - 1;
46 | if(typeof pattern.rules !== 'undefined') {
47 | for(var j = 0; j < pattern.rules.length; ++j) {
48 | var rule = pattern.rules[j];
49 | var replace = true;
50 |
51 | var chk = 0;
52 | for(var k=0; k < rule.matches.length; ++k) {
53 | var match = rule.matches[k];
54 |
55 | if(match.type === "suffix") {
56 | chk = end;
57 | }
58 | // Prefix
59 | else {
60 | chk = prev;
61 | }
62 |
63 | // Handle Negative
64 | if(typeof match.negative === 'undefined') {
65 | match.negative = false;
66 | if(match.scope.charAt(0) === '!') {
67 | match.negative = true;
68 | match.scope = match.scope.substring(1);
69 | }
70 | }
71 |
72 | // Handle empty value
73 | if(typeof match.value === 'undefined') match.value = '';
74 |
75 | // Beginning
76 | if(match.scope === "punctuation") {
77 | if(
78 | ! (
79 | ((chk < 0) && (match.type === "prefix")) ||
80 | ((chk >= fixed.length) && (match.type === "suffix")) ||
81 | this._isPunctuation(fixed.charAt(chk))
82 | ) ^ match.negative
83 | ) {
84 | replace = false;
85 | break;
86 | }
87 | }
88 | // Vowel
89 | else if(match.scope === "vowel") {
90 | if(
91 | ! (
92 | (
93 | (chk >= 0 && (match.type === "prefix")) ||
94 | (chk < fixed.length && (match.type === "suffix"))
95 | ) &&
96 | this._isVowel(fixed.charAt(chk))
97 | ) ^ match.negative
98 | ) {
99 | replace = false;
100 | break;
101 | }
102 | }
103 | // Consonant
104 | else if(match.scope === "consonant") {
105 | if(
106 | ! (
107 | (
108 | (chk >= 0 && (match.type === "prefix")) ||
109 | (chk < fixed.length && match.type === ("suffix"))
110 | ) &&
111 | this._isConsonant(fixed.charAt(chk))
112 | ) ^ match.negative
113 | ) {
114 | replace = false;
115 | break;
116 | }
117 | }
118 | // Exact
119 | else if(match.scope === "exact") {
120 | var s, e;
121 | if(match.type === "suffix") {
122 | s = end;
123 | e = end + match.value.length;
124 | }
125 | // Prefix
126 | else {
127 | s = start - match.value.length;
128 | e = start;
129 | }
130 | if(!this._isExact(match.value, fixed, s, e, match.negative)) {
131 | replace = false;
132 | break;
133 | }
134 | }
135 | }
136 |
137 | if(replace) {
138 | output += rule.replace + "(্[যবম])?(্?)([ঃঁ]?)";
139 | cur = end - 1;
140 | matched = true;
141 | break;
142 | }
143 |
144 | }
145 | }
146 | if(matched == true) break;
147 |
148 | // Default
149 | output += pattern.replace + "(্[যবম])?(্?)([ঃঁ]?)";
150 | cur = end - 1;
151 | matched = true;
152 | break;
153 | }
154 | }
155 |
156 | if(!matched) {
157 | output += fixed.charAt(cur);
158 | }
159 | }
160 | return this._convertToUnicodeValue(output);
161 | },
162 |
163 |
164 | _convertToUnicodeValue: function(input){
165 | var output = '';
166 | input = utfconv.utf8Decode(input);
167 |
168 | for (var i = 0; i < input.length; i++){
169 | var charCode = input.charCodeAt(i);
170 | if (charCode >= 255){
171 | output += '\\u0' + charCode.toString(16);
172 | } else {
173 | output += input.charAt(i);
174 | }
175 | }
176 | return output;
177 | },
178 |
179 |
180 | _fixString: function(input) {
181 | var fixed = '';
182 | for(var i=0; i < input.length; ++i) {
183 | var cChar = input.charAt(i);
184 | if(!this._isIgnore(cChar)) {
185 | fixed += cChar.toLowerCase();
186 | }
187 | }
188 | return fixed;
189 | },
190 |
191 |
192 | _isVowel: function(c) {
193 | return (this.data.vowel.indexOf(c.toLowerCase()) >= 0);
194 | },
195 |
196 |
197 | _isConsonant: function(c) {
198 | return (this.data.consonant.indexOf(c.toLowerCase()) >= 0);
199 | },
200 |
201 |
202 | _isPunctuation: function(c) {
203 | return (!(this._isVowel(c) || this._isConsonant(c)));
204 | },
205 |
206 |
207 | _isExact: function(needle, heystack, start, end, not) {
208 | return ((start >= 0 && end < heystack.length && (heystack.substring(start, end) === needle)) ^ not);
209 | },
210 |
211 |
212 | _isIgnore: function(c) {
213 | return (this.data.ignore.indexOf(c.toLowerCase()) >= 0);
214 | },
215 |
216 |
217 | data: {
218 | "patterns":
219 | [
220 | {
221 | "find":"aa",
222 | "replace":"(আ|(য়া)|া|((([অএ]্যা?)|[আএ]|([]?(্য)?া)|(য়া))((([অএ]্যা?)|[আএ]|([]?(্য)?া)|(য়া)))?))",
223 | "rules":
224 | [
225 | ]
226 | },
227 | {
228 | "find":"au",
229 | "replace":"(ঔ|ৌ(([অএ]্যা?)|[আএ]|([]?(্য)?া)|(য়া))([উঊুূ]|(য়[ুূ])))",
230 | "rules":
231 | [
232 | ]
233 | },
234 | {
235 | "find":"az",
236 | "replace":"((([অএ]্যা?)|[আএ]|([]?(্য)?া)|(য়া))((জ|য|(জ়)|([]?্য)))?)",
237 | "rules":
238 | [
239 | ]
240 | },
241 | {
242 | "find":"ai",
243 | "replace":"(ঐ|ৈ|(([অএ]্যা?)|[আএ]|([]?(্য)?া)|(য়া))([ইঈিী]|(য়[িী])))",
244 | "rules":
245 | [
246 | ]
247 | },
248 | {
249 | "find":"a",
250 | "replace":"(([অএ]্যা?)|[অআএ]|([]?(্য)?া)|(য়া))",
251 | "rules":
252 | [
253 | ]
254 | },
255 | {
256 | "find":"bdh",
257 | "replace":"((ব(্?)(ধ|ঢ|([দড](্?)(হ|ঃ|(হ্?)))))|((ব(্?)[দড])(্?)(হ|ঃ|(হ্?)))|(ব(্?)[দড](্?)(হ|ঃ|(হ্?))))",
258 | "rules":
259 | [
260 | ]
261 | },
262 | {
263 | "find":"bhl",
264 | "replace":"(((ভ|(ব(্?)(হ|ঃ|(হ্?))))(্?)ল)|(ব(্?)((হ|ঃ|(হ্?))(্?)ল))|(ব(্?)(হ|ঃ|(হ্?))(্?)ল))",
265 | "rules":
266 | [
267 | ]
268 | },
269 | {
270 | "find":"bh",
271 | "replace":"(ভ|(ব(্?)(হ|ঃ|(হ্?))))",
272 | "rules":
273 | [
274 | ]
275 | },
276 | {
277 | "find":"bb",
278 | "replace":"(ব(্?)ব?)",
279 | "rules":
280 | [
281 | ]
282 | },
283 | {
284 | "find":"bd",
285 | "replace":"(ব(্?)[দড])",
286 | "rules":
287 | [
288 | ]
289 | },
290 | {
291 | "find":"bv",
292 | "replace":"(ব?(্?)ভ)",
293 | "rules":
294 | [
295 | ]
296 | },
297 | {
298 | "find":"b",
299 | "replace":"ব",
300 | "rules":
301 | [
302 | ]
303 | },
304 | {
305 | "find":"chchh",
306 | "replace":"((চ্ছ)|((চ|ছ|([চছ](্?)(হ|ঃ|(হ্?))))(্?)(((চ|ছ|([চছ](্?)(হ|ঃ|(হ্?))))(্?)((হ|ঃ|(হ্?)))?)|([চছ](্?)((হ|ঃ|(হ্?))(্?)(হ|ঃ|(হ্?))))|([চছ](্?)(হ|ঃ|(হ্?))(্?)(হ|ঃ|(হ্?)))))|((চ|ছ|([চছ](্?)(হ|ঃ|(হ্?))))(্?)(চ|ছ|([চছ](্?)(হ|ঃ|(হ্?))))(্?)(হ|ঃ|(হ্?)))|([চছ](্?)(হ|ঃ|(হ্?))(্?)[চছ](্?)(হ|ঃ|(হ্?))(্?)(হ|ঃ|(হ্?))))",
307 | "rules":
308 | [
309 | ]
310 | },
311 | {
312 | "find":"cch",
313 | "replace":"(([চছ](্?)(চ|ছ|([চছ](্?)(হ|ঃ|(হ্?)))))|([চছ](্?)[চছ](্?)(হ|ঃ|(হ্?))))",
314 | "rules":
315 | [
316 | ]
317 | },
318 | {
319 | "find":"chh",
320 | "replace":"(((চ|ছ|([চছ](্?)(হ|ঃ|(হ্?))))(্?)((হ|ঃ|(হ্?)))?)|([চছ](্?)((হ|ঃ|(হ্?))(্?)(হ|ঃ|(হ্?))))|([চছ](্?)(হ|ঃ|(হ্?))(্?)(হ|ঃ|(হ্?))))",
321 | "rules":
322 | [
323 | ]
324 | },
325 | {
326 | "find":"cng",
327 | "replace":"((চ্ঞ)|([চছ](্?)(ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ)))))|([চছ](্?)[নণঁঙঞং](্?)(গ|(জ্ঞ)))|(([চছ](্?)[নণঁঙঞং])(্?)(গ|(জ্ঞ))))",
328 | "rules":
329 | [
330 | ]
331 | },
332 | {
333 | "find":"ch",
334 | "replace":"(চ|ছ|([চছ](্?)(হ|ঃ|(হ্?))))",
335 | "rules":
336 | [
337 | ]
338 | },
339 | {
340 | "find":"ck",
341 | "replace":"(ক|([চছ](্?)ক))",
342 | "rules":
343 | [
344 | ]
345 | },
346 | {
347 | "find":"cc",
348 | "replace":"([চছ](্?)[চছ]?)",
349 | "rules":
350 | [
351 | ]
352 | },
353 | {
354 | "find":"cn",
355 | "replace":"([চছ](্?)[নণঁঙঞং])",
356 | "rules":
357 | [
358 | ]
359 | },
360 | {
361 | "find":"c",
362 | "replace":"[চছ]",
363 | "rules":
364 | [
365 | ]
366 | },
367 | {
368 | "find":"dhm",
369 | "replace":"((([দড](্?)(গ|(জ্ঞ)))(্?)ম)|([দড](্?)((হ|ঃ|(হ্?))(্?)ম))|([দড](্?)(হ|ঃ|(হ্?))(্?)ম))",
370 | "rules":
371 | [
372 | ]
373 | },
374 | {
375 | "find":"dhn",
376 | "replace":"(((ধ|ঢ|([দড](্?)(হ|ঃ|(হ্?))))(্?)[নণঁঙঞং])|([দড](্?)((হ|ঃ|(হ্?))(্?)[নণঁঙঞং]))|([দড](্?)(হ|ঃ|(হ্?))(্?)[নণঁঙঞং]))",
377 | "rules":
378 | [
379 | ]
380 | },
381 | {
382 | "find":"dbh",
383 | "replace":"(([দড](্?)(ভ|(ব(্?)(হ|ঃ|(হ্?)))))|(([দড](্?)ব)(্?)(হ|ঃ|(হ্?)))|([দড](্?)ব(্?)(হ|ঃ|(হ্?))))",
384 | "rules":
385 | [
386 | ]
387 | },
388 | {
389 | "find":"ddh",
390 | "replace":"(([দড]?(্?)([দড](্?)(গ|(জ্ঞ))))|(([দড](্?)[দড]?)(্?)(হ|ঃ|(হ্?)))|([দড](্?)[দড](্?)(হ|ঃ|(হ্?))))",
391 | "rules":
392 | [
393 | ]
394 | },
395 | {
396 | "find":"dgh",
397 | "replace":"(([দড](্?)(ঘ|((গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?)))))|(([দড](্?)(গ|(জ্ঞ)))(্?)(হ|ঃ|(হ্?)))|([দড](্?)(গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?))))",
398 | "rules":
399 | [
400 | ]
401 | },
402 | {
403 | "find":"db",
404 | "replace":"([দড](্?)ব)",
405 | "rules":
406 | [
407 | ]
408 | },
409 | {
410 | "find":"dd",
411 | "replace":"([দড](্?)[দড]?)",
412 | "rules":
413 | [
414 | ]
415 | },
416 | {
417 | "find":"dg",
418 | "replace":"([দড](্?)(গ|(জ্ঞ)))",
419 | "rules":
420 | [
421 | ]
422 | },
423 | {
424 | "find":"dh",
425 | "replace":"(ধ|ঢ|([দড](্?)(হ|ঃ|(হ্?))))",
426 | "rules":
427 | [
428 | ]
429 | },
430 | {
431 | "find":"d",
432 | "replace":"[দড]",
433 | "rules":
434 | [
435 | ]
436 | },
437 | {
438 | "find":"ey",
439 | "replace":"(এ|ই|ে|(েই)|(এই)|ঈ|ী|(((এ্যা?)|[এে]|([]?(্য)া)|(য়ে))(য়|(ইয়)|([]?্য))))",
440 | "rules":
441 | [
442 | ]
443 | },
444 | {
445 | "find":"ee",
446 | "replace":"(ই|ঈ|ি|ী|(য়েই)|(((এ্যা?)|[এে]|([]?(্য)া)|(য়ে))((এ্যা?)|[এে]|([]?(্য)া)|(য়ে))))",
447 | "rules":
448 | [
449 | ]
450 | },
451 | {
452 | "find":"e",
453 | "replace":"((এ্যা?)|[এে]|([]?(্য)া)|(য়ে))",
454 | "rules":
455 | [
456 | ]
457 | },
458 | {
459 | "find":"ff",
460 | "replace":"(ফ(্?)ফ?)",
461 | "rules":
462 | [
463 | ]
464 | },
465 | {
466 | "find":"f",
467 | "replace":"ফ",
468 | "rules":
469 | [
470 | ]
471 | },
472 | {
473 | "find":"ggh",
474 | "replace":"((((জ্ঞ)|((গ|(জ্ঞ))(্?)((গ|(জ্ঞ)))?))(্?)(হ|ঃ|(হ্?)))|((গ|(জ্ঞ))(্?)(ঘ|((গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?)))))|((গ|(জ্ঞ))(্?)(গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?))))",
475 | "rules":
476 | [
477 | ]
478 | },
479 | {
480 | "find":"gdh",
481 | "replace":"(((গ|(জ্ঞ))(্?)(ধ|ঢ|([দড](্?)(হ|ঃ|(হ্?)))))|((গ|(জ্ঞ))(্?)[দড](্?)(হ|ঃ|(হ্?))))",
482 | "rules":
483 | [
484 | ]
485 | },
486 | {
487 | "find":"ghn",
488 | "replace":"(((ঘ|((গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?))))(্?)[নণঁঙঞং])|((গ|(জ্ঞ))(্?)((হ|ঃ|(হ্?))(্?)[নণঁঙঞং]))|((গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?))(্?)[নণঁঙঞং]))",
489 | "rules":
490 | [
491 | ]
492 | },
493 | {
494 | "find":"gh",
495 | "replace":"(ঘ|((গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?))))",
496 | "rules":
497 | [
498 | ]
499 | },
500 | {
501 | "find":"gg",
502 | "replace":"((জ্ঞ)|((গ|(জ্ঞ))(্?)((গ|(জ্ঞ)))?))",
503 | "rules":
504 | [
505 | ]
506 | },
507 | {
508 | "find":"g",
509 | "replace":"(গ|(জ্ঞ))",
510 | "rules":
511 | [
512 | ]
513 | },
514 | {
515 | "find":"hl",
516 | "replace":"((হ|ঃ|(হ্?))(্?)ল)",
517 | "rules":
518 | [
519 | ]
520 | },
521 | {
522 | "find":"hh",
523 | "replace":"((হ|ঃ|(হ্?))(্?)(হ|ঃ|(হ্?)))",
524 | "rules":
525 | [
526 | ]
527 | },
528 | {
529 | "find":"hm",
530 | "replace":"((হ|ঃ|(হ্?))(্?)ম)",
531 | "rules":
532 | [
533 | ]
534 | },
535 | {
536 | "find":"hn",
537 | "replace":"((হ|ঃ|(হ্?))(্?)[নণঁঙঞং])",
538 | "rules":
539 | [
540 | ]
541 | },
542 | {
543 | "find":"h",
544 | "replace":"(হ|ঃ|(হ্?))",
545 | "rules":
546 | [
547 | ]
548 | },
549 | {
550 | "find":"ia",
551 | "replace":"((ঞা)|(([ইঈিী]|(য়[িী]))(([অএ]্যা?)|[আএ]|([]?(্য)?া)|(য়া))))",
552 | "rules":
553 | [
554 | ]
555 | },
556 | {
557 | "find":"i",
558 | "replace":"([ইঈিী]|(য়[িী]))",
559 | "rules":
560 | [
561 | ]
562 | },
563 | {
564 | "find":"jng",
565 | "replace":"((জ্ঞ)|(([জয]|(জ়))(্?)(ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ)))))|(([জয]|(জ়))(্?)[নণঁঙঞং](্?)(গ|(জ্ঞ))))",
566 | "rules":
567 | [
568 | ]
569 | },
570 | {
571 | "find":"jjh",
572 | "replace":"(((([জয]|(জ়)))?(্?)(ঝ|(([জয]|(জ়))(্?)(হ|ঃ|(হ্?)))))|(হ্য)|(((হ্য)|(([জয]|(জ়))(্?)(([জয]|(জ়)))?))(্?)(হ|ঃ|(হ্?)))|(([জয]|(জ়))(্?)([জয]|(জ়))(্?)(হ|ঃ|(হ্?))))",
573 | "rules":
574 | [
575 | ]
576 | },
577 | {
578 | "find":"jj",
579 | "replace":"((হ্য)|(([জয]|(জ়))(্?)(([জয]|(জ়)))?))",
580 | "rules":
581 | [
582 | ]
583 | },
584 | {
585 | "find":"jh",
586 | "replace":"(ঝ|(([জয]|(জ়))(্?)(হ|ঃ|(হ্?))))",
587 | "rules":
588 | [
589 | ]
590 | },
591 | {
592 | "find":"j",
593 | "replace":"([জয]|(জ়))",
594 | "rules":
595 | [
596 | ]
597 | },
598 | {
599 | "find":"kshm",
600 | "replace":"((((ক(্?)(স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?)))))|((ক(্?)[সশষ])(্?)(হ|ঃ|(হ্?)))|(ক(্?)[সশষ](্?)(হ|ঃ|(হ্?))))(্?)ম)|(ক(্?)(((স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?))))(্?)ম)|([সশষ](্?)((হ|ঃ|(হ্?))(্?)ম))|([সশষ](্?)(হ|ঃ|(হ্?))(্?)ম)))|((ক(্?)[সশষ])(্?)((হ|ঃ|(হ্?))(্?)ম))|(ক(্?)(স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?))))(্?)ম)|(ক(্?)[সশষ](্?)(হ|ঃ|(হ্?))(্?)ম))",
601 | "rules":
602 | [
603 | ]
604 | },
605 | {
606 | "find":"kkhm",
607 | "replace":"((((ক্ষ)|((ক(্?)ক?)(্?)(হ|ঃ|(হ্?)))|(ক?(্?)(খ|(ক্ষ)|(ক(্?)(হ|ঃ|(হ্?)))))|(ক(্?)ক(্?)(হ|ঃ|(হ্?))))(্?)ম)|((ক(্?)ক?)(্?)((হ|ঃ|(হ্?))(্?)ম))|(ক(্?)ক(্?)(হ|ঃ|(হ্?))(্?)ম)|(ক(্?)(খ|(ক্ষ)|(ক(্?)(হ|ঃ|(হ্?))))(্?)ম))",
608 | "rules":
609 | [
610 | ]
611 | },
612 | {
613 | "find":"kshn",
614 | "replace":"((((ক(্?)(স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?)))))|((ক(্?)[সশষ])(্?)(হ|ঃ|(হ্?)))|(ক(্?)[সশষ](্?)(হ|ঃ|(হ্?))))(্?)[নণঁঙঞং])|(ক(্?)(((স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?))))(্?)[নণঁঙঞং])|([সশষ](্?)((হ|ঃ|(হ্?))(্?)[নণঁঙঞং]))|([সশষ](্?)(হ|ঃ|(হ্?))(্?)[নণঁঙঞং])))|((ক(্?)[সশষ])(্?)((হ|ঃ|(হ্?))(্?)[নণঁঙঞং]))|(ক(্?)(স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?))))(্?)[নণঁঙঞং])|(ক(্?)[সশষ](্?)(হ|ঃ|(হ্?))(্?)[নণঁঙঞং]))",
615 | "rules":
616 | [
617 | ]
618 | },
619 | {
620 | "find":"kkhn",
621 | "replace":"((((ক্ষ)|((ক(্?)ক?)(্?)(হ|ঃ|(হ্?)))|(ক?(্?)(খ|(ক্ষ)|(ক(্?)(হ|ঃ|(হ্?)))))|(ক(্?)ক(্?)(হ|ঃ|(হ্?))))(্?)[নণঁঙঞং])|((ক(্?)ক?)(্?)((হ|ঃ|(হ্?))(্?)[নণঁঙঞং]))|(ক(্?)ক(্?)(হ|ঃ|(হ্?))(্?)[নণঁঙঞং])|(ক(্?)(খ|(ক্ষ)|(ক(্?)(হ|ঃ|(হ্?))))(্?)[নণঁঙঞং]))",
622 | "rules":
623 | [
624 | ]
625 | },
626 | {
627 | "find":"ksh",
628 | "replace":"((ক(্?)(স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?)))))|((ক(্?)[সশষ])(্?)(হ|ঃ|(হ্?)))|(ক(্?)[সশষ](্?)(হ|ঃ|(হ্?))))",
629 | "rules":
630 | [
631 | ]
632 | },
633 | {
634 | "find":"kkh",
635 | "replace":"((ক্ষ)|((ক(্?)ক?)(্?)(হ|ঃ|(হ্?)))|(ক?(্?)(খ|(ক্ষ)|(ক(্?)(হ|ঃ|(হ্?)))))|(ক(্?)ক(্?)(হ|ঃ|(হ্?))))",
636 | "rules":
637 | [
638 | ]
639 | },
640 | {
641 | "find":"kxm",
642 | "replace":"((((ক্ষ)|(ক(্?)((ক্স)|(এক্স)|ষ)))(্?)ম)|(ক(্?)(((ক্স)|(এক্স)|ষ)(্?)ম))|(ক(্?)((ক্স)|(এক্স)|ষ)(্?)ম))",
643 | "rules":
644 | [
645 | ]
646 | },
647 | {
648 | "find":"kxn",
649 | "replace":"((((ক্ষ)|(ক(্?)((ক্স)|(এক্স)|ষ)))(্?)[নণঁঙঞং])|(ক(্?)(((ক্স)|(এক্স)|ষ)(্?)[নণঁঙঞং]))|(ক(্?)((ক্স)|(এক্স)|ষ)(্?)[নণঁঙঞং]))",
650 | "rules":
651 | [
652 | ]
653 | },
654 | {
655 | "find":"kh",
656 | "replace":"(খ|(ক্ষ)|(ক(্?)(হ|ঃ|(হ্?))))",
657 | "rules":
658 | [
659 | ]
660 | },
661 | {
662 | "find":"kk",
663 | "replace":"(ক(্?)ক?)",
664 | "rules":
665 | [
666 | ]
667 | },
668 | {
669 | "find":"ks",
670 | "replace":"(ক(্?)[সশষ])",
671 | "rules":
672 | [
673 | ]
674 | },
675 | {
676 | "find":"kx",
677 | "replace":"((ক্ষ)|(ক(্?)((ক্স)|(এক্স)|ষ)))",
678 | "rules":
679 | [
680 | ]
681 | },
682 | {
683 | "find":"k",
684 | "replace":"ক",
685 | "rules":
686 | [
687 | ]
688 | },
689 | {
690 | "find":"lkh",
691 | "replace":"((ল(্?)(খ|(ক্ষ)|(ক(্?)(হ|ঃ|(হ্?)))))|((ল(্?)ক)(্?)(হ|ঃ|(হ্?)))|(ল(্?)ক(্?)(হ|ঃ|(হ্?))))",
692 | "rules":
693 | [
694 | ]
695 | },
696 | {
697 | "find":"lgh",
698 | "replace":"((ল(্?)(ঘ|((গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?)))))|((ল(্?)(গ|(জ্ঞ)))(্?)(হ|ঃ|(হ্?)))|(ল(্?)(গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?))))",
699 | "rules":
700 | [
701 | ]
702 | },
703 | {
704 | "find":"lph",
705 | "replace":"((ল(্?)(ফ|(প(্?)(হ|ঃ|(হ্?)))))|((ল(্?)প)(্?)(হ|ঃ|(হ্?)))|(ল(্?)প(্?)(হ|ঃ|(হ্?))))",
706 | "rules":
707 | [
708 | ]
709 | },
710 | {
711 | "find":"ldh",
712 | "replace":"((ল(্?)(ধ|ঢ|([দড](্?)(হ|ঃ|(হ্?)))))|((ল(্?)[দড])(্?)(হ|ঃ|(হ্?)))|(ল(্?)[দড](্?)(হ|ঃ|(হ্?))))",
713 | "rules":
714 | [
715 | ]
716 | },
717 | {
718 | "find":"lbh",
719 | "replace":"((ল(্?)(ভ|(ব(্?)(হ|ঃ|(হ্?)))))|((ল(্?)ব)(্?)(হ|ঃ|(হ্?)))|(ল(্?)ব(্?)(হ|ঃ|(হ্?))))",
720 | "rules":
721 | [
722 | ]
723 | },
724 | {
725 | "find":"ll",
726 | "replace":"((হ্ল)|(ল?(্?)ল)|(ল(্?)ল))",
727 | "rules":
728 | [
729 | ]
730 | },
731 | {
732 | "find":"lk",
733 | "replace":"(ল(্?)ক)",
734 | "rules":
735 | [
736 | ]
737 | },
738 | {
739 | "find":"lg",
740 | "replace":"(ল(্?)(গ|(জ্ঞ)))",
741 | "rules":
742 | [
743 | ]
744 | },
745 | {
746 | "find":"lp",
747 | "replace":"(ল(্?)প)",
748 | "rules":
749 | [
750 | ]
751 | },
752 | {
753 | "find":"ld",
754 | "replace":"(ল(্?)[দড])",
755 | "rules":
756 | [
757 | ]
758 | },
759 | {
760 | "find":"lb",
761 | "replace":"(ল(্?)ব)",
762 | "rules":
763 | [
764 | ]
765 | },
766 | {
767 | "find":"l",
768 | "replace":"ল",
769 | "rules":
770 | [
771 | ]
772 | },
773 | {
774 | "find":"mbh",
775 | "replace":"((ম(্?)(ভ|(ব(্?)(হ|ঃ|(হ্?)))))|((ম(্?)ব)(্?)(হ|ঃ|(হ্?)))|(ম(্?)ব(্?)(হ|ঃ|(হ্?))))",
776 | "rules":
777 | [
778 | ]
779 | },
780 | {
781 | "find":"mph",
782 | "replace":"((ম(্?)(ফ|(প(্?)(হ|ঃ|(হ্?)))))|((ম(্?)প)(্?)(হ|ঃ|(হ্?)))|(ম(্?)প(্?)(হ|ঃ|(হ্?))))",
783 | "rules":
784 | [
785 | ]
786 | },
787 | {
788 | "find":"mth",
789 | "replace":"((ম(্?)(থ|ঠ|([তটৎ](্?)(হ|ঃ|(হ্?)))))|((ম(্?)[তটৎ])(্?)(হ|ঃ|(হ্?)))|(ম(্?)[তটৎ](্?)(হ|ঃ|(হ্?))))",
790 | "rules":
791 | [
792 | ]
793 | },
794 | {
795 | "find":"mm",
796 | "replace":"((হ্ম)|(ম(্?)ম?))",
797 | "rules":
798 | [
799 | ]
800 | },
801 | {
802 | "find":"mb",
803 | "replace":"(ম(্?)ব)",
804 | "rules":
805 | [
806 | ]
807 | },
808 | {
809 | "find":"mp",
810 | "replace":"(ম(্?)প)",
811 | "rules":
812 | [
813 | ]
814 | },
815 | {
816 | "find":"mt",
817 | "replace":"(ম(্?)[তটৎ])",
818 | "rules":
819 | [
820 | ]
821 | },
822 | {
823 | "find":"m",
824 | "replace":"ম",
825 | "rules":
826 | [
827 | ]
828 | },
829 | {
830 | "find":"ngksh",
831 | "replace":"(((((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)ক)|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)ক))(্?)(স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?)))))|((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)ক(্?)(স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?)))))|((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)((ক(্?)(স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?)))))|((ক(্?)[সশষ])(্?)(হ|ঃ|(হ্?)))|(ক(্?)[সশষ](্?)(হ|ঃ|(হ্?)))))|((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)(ক(্?)[সশষ])(্?)(হ|ঃ|(হ্?)))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)ক(্?)[সশষ](্?)(হ|ঃ|(হ্?))))",
832 | "rules":
833 | [
834 | ]
835 | },
836 | {
837 | "find":"ngkkh",
838 | "replace":"(((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)((ক্ষ)|((ক(্?)ক?)(্?)(হ|ঃ|(হ্?)))|(ক?(্?)(খ|(ক্ষ)|(ক(্?)(হ|ঃ|(হ্?)))))|(ক(্?)ক(্?)(হ|ঃ|(হ্?)))))|((((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)ক)|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)ক))(্?)(খ|(ক্ষ)|(ক(্?)(হ|ঃ|(হ্?)))))|((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)ক(্?)(খ|(ক্ষ)|(ক(্?)(হ|ঃ|(হ্?)))))|((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)(ক(্?)ক?)(্?)(হ|ঃ|(হ্?)))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)ক(্?)ক(্?)(হ|ঃ|(হ্?))))",
839 | "rules":
840 | [
841 | ]
842 | },
843 | {
844 | "find":"ngch",
845 | "replace":"(((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)(চ|ছ|([চছ](্?)(হ|ঃ|(হ্?)))))|((((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)[চছ])|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)[চছ]))(্?)(হ|ঃ|(হ্?)))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)[চছ](্?)(হ|ঃ|(হ্?))))",
846 | "rules":
847 | [
848 | ]
849 | },
850 | {
851 | "find":"nggh",
852 | "replace":"(((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)(ঘ|((গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?)))))|([নণঁঙঞং](্?)((জ্ঞ)|((গ|(জ্ঞ))(্?)((গ|(জ্ঞ)))?))(্?)(হ|ঃ|(হ্?)))|([নণঁঙঞং](্?)((((জ্ঞ)|((গ|(জ্ঞ))(্?)((গ|(জ্ঞ)))?))(্?)(হ|ঃ|(হ্?)))|((গ|(জ্ঞ))(্?)(ঘ|((গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?)))))|((গ|(জ্ঞ))(্?)(গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?)))))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)(গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?)))|((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)(গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?)))|(((ঙ্গ)|((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)(গ|(জ্ঞ)))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)(গ|(জ্ঞ))))(্?)(হ|ঃ|(হ্?))))",
853 | "rules":
854 | [
855 | ]
856 | },
857 | {
858 | "find":"ngkx",
859 | "replace":"(((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)((ক্ষ)|(ক(্?)((ক্স)|(এক্স)|ষ))))|((((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)ক)|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)ক))(্?)((ক্স)|(এক্স)|ষ))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)((ক্ষ)|(ক(্?)((ক্স)|(এক্স)|ষ))))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)ক(্?)((ক্স)|(এক্স)|ষ)))",
860 | "rules":
861 | [
862 | ]
863 | },
864 | {
865 | "find":"ngjh",
866 | "replace":"(((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)(ঝ|(([জয]|(জ়))(্?)(হ|ঃ|(হ্?)))))|((((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)([জয]|(জ়)))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)([জয]|(জ়))))(্?)(হ|ঃ|(হ্?)))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)([জয]|(জ়))(্?)(হ|ঃ|(হ্?))))",
867 | "rules":
868 | [
869 | ]
870 | },
871 | {
872 | "find":"ngkh",
873 | "replace":"(((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)(খ|(ক্ষ)|(ক(্?)(হ|ঃ|(হ্?)))))|((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)ক(্?)(হ|ঃ|(হ্?)))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)ক(্?)(হ|ঃ|(হ্?)))|((((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)ক)|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)ক))(্?)(হ|ঃ|(হ্?))))",
874 | "rules":
875 | [
876 | ]
877 | },
878 | {
879 | "find":"nsh",
880 | "replace":"(([নণঁঙঞং](্?)(স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?)))))|([নণঁঙঞং](্?)[সশষ](্?)(হ|ঃ|(হ্?))))",
881 | "rules":
882 | [
883 | ]
884 | },
885 | {
886 | "find":"ndh",
887 | "replace":"(([নণঁঙঞং](্?)(ধ|ঢ|([দড](্?)(হ|ঃ|(হ্?)))))|(([নণঁঙঞং](্?)[দড])(্?)(হ|ঃ|(হ্?)))|([নণঁঙঞং](্?)[দড](্?)(হ|ঃ|(হ্?))))",
888 | "rules":
889 | [
890 | ]
891 | },
892 | {
893 | "find":"nkh",
894 | "replace":"(([নণঁঙঞং](্?)(খ|(ক্ষ)|(ক(্?)(হ|ঃ|(হ্?)))))|(((ঙ্ক)|([নণঁঙঞং](্?)ক))(্?)(হ|ঃ|(হ্?)))|([নণঁঙঞং](্?)ক(্?)(হ|ঃ|(হ্?))))",
895 | "rules":
896 | [
897 | ]
898 | },
899 | {
900 | "find":"nth",
901 | "replace":"(([নণঁঙঞং](্?)(থ|ঠ|([তটৎ](্?)(হ|ঃ|(হ্?)))))|(([নণঁঙঞং](্?)[তটৎ])(্?)(হ|ঃ|(হ্?)))|([নণঁঙঞং](্?)[তটৎ](্?)(হ|ঃ|(হ্?))))",
902 | "rules":
903 | [
904 | ]
905 | },
906 | {
907 | "find":"ngj",
908 | "replace":"(((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)([জয]|(জ়)))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)([জয]|(জ়))))",
909 | "rules":
910 | [
911 | ]
912 | },
913 | {
914 | "find":"ngm",
915 | "replace":"(((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)ম)|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)ম))",
916 | "rules":
917 | [
918 | ]
919 | },
920 | {
921 | "find":"ngg",
922 | "replace":"((ঙ্গ)|((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)(গ|(জ্ঞ)))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)(গ|(জ্ঞ))))",
923 | "rules":
924 | [
925 | ]
926 | },
927 | {
928 | "find":"ngx",
929 | "replace":"(((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)((ক্স)|(এক্স)|ষ))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)((ক্স)|(এক্স)|ষ)))",
930 | "rules":
931 | [
932 | ]
933 | },
934 | {
935 | "find":"ngk",
936 | "replace":"(((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)ক)|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)ক))",
937 | "rules":
938 | [
939 | ]
940 | },
941 | {
942 | "find":"ngh",
943 | "replace":"((ঙ্ঘ)|([নণঁঙঞং](্?)(ঘ|((গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?)))))|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)(হ|ঃ|(হ্?))))",
944 | "rules":
945 | [
946 | ]
947 | },
948 | {
949 | "find":"nch",
950 | "replace":"(([নণঁঙঞং](্?)(চ|ছ|([চছ](্?)(হ|ঃ|(হ্?)))))|(((ঞ্চ)|([নণঁঙঞং](্?)[চছ]))(্?)(হ|ঃ|(হ্?)))|([নণঁঙঞং](্?)[চছ](্?)(হ|ঃ|(হ্?))))",
951 | "rules":
952 | [
953 | ]
954 | },
955 | {
956 | "find":"njh",
957 | "replace":"(([নণঁঙঞং](্?)(ঝ|(([জয]|(জ়))(্?)(হ|ঃ|(হ্?)))))|(((ঞ্জ)|([নণঁঙঞং](্?)([জয]|(জ়))))(্?)(হ|ঃ|(হ্?)))|([নণঁঙঞং](্?)([জয]|(জ়))(্?)(হ|ঃ|(হ্?))))",
958 | "rules":
959 | [
960 | ]
961 | },
962 | {
963 | "find":"ngc",
964 | "replace":"(((ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))(্?)[চছ])|([নণঁঙঞং](্?)(গ|(জ্ঞ))(্?)[চছ]))",
965 | "rules":
966 | [
967 | ]
968 | },
969 | {
970 | "find":"nc",
971 | "replace":"((ঞ্চ)|([নণঁঙঞং](্?)[চছ]))",
972 | "rules":
973 | [
974 | ]
975 | },
976 | {
977 | "find":"nn",
978 | "replace":"((হ্ণ)|(হ্ন)|([নণঁঙঞং](্?)[নণঁঙঞং]?))",
979 | "rules":
980 | [
981 | ]
982 | },
983 | {
984 | "find":"ng",
985 | "replace":"(ঙ|ং|ঞ|(ঙ্গ)|([নণঁঙঞং](্?)(গ|(জ্ঞ))))",
986 | "rules":
987 | [
988 | ]
989 | },
990 | {
991 | "find":"nk",
992 | "replace":"((ঙ্ক)|([নণঁঙঞং](্?)ক))",
993 | "rules":
994 | [
995 | ]
996 | },
997 | {
998 | "find":"nj",
999 | "replace":"((ঞ্জ)|([নণঁঙঞং](্?)([জয]|(জ়))))",
1000 | "rules":
1001 | [
1002 | ]
1003 | },
1004 | {
1005 | "find":"nd",
1006 | "replace":"([নণঁঙঞং](্?)[দড])",
1007 | "rules":
1008 | [
1009 | ]
1010 | },
1011 | {
1012 | "find":"nt",
1013 | "replace":"([নণঁঙঞং](্?)[তটৎ])",
1014 | "rules":
1015 | [
1016 | ]
1017 | },
1018 | {
1019 | "find":"n",
1020 | "replace":"[নণঁঙঞং]",
1021 | "rules":
1022 | [
1023 | ]
1024 | },
1025 | {
1026 | "find":"oo",
1027 | "replace":"((([উঊুূ]|(য়[ুূ])))|(([ওোঅ]|(অ্য)|(য়ো?))?([ওোঅ]|(অ্য)|(য়ো?))?))",
1028 | "rules":
1029 | [
1030 | ]
1031 | },
1032 | {
1033 | "find":"oi",
1034 | "replace":"(ঐ|ৈ|(([ওোঅ]|(অ্য)|(য়ো?))?([ইঈিী]|(য়[িী]))))",
1035 | "rules":
1036 | [
1037 | ]
1038 | },
1039 | {
1040 | "find":"ou",
1041 | "replace":"(ঔ|ৌ|(([ওোঅ]|(অ্য)|(য়ো?))?([উঊুূ]|(য়[ুূ]))))",
1042 | "rules":
1043 | [
1044 | ]
1045 | },
1046 | {
1047 | "find":"o",
1048 | "replace":"([ওোঅ]|(অ্য)|(য়ো?))?",
1049 | "rules":
1050 | [
1051 | {
1052 | "matches":
1053 | [
1054 | {
1055 | "type":"prefix",
1056 | "scope":"punctuation",
1057 | "value":"",
1058 | "negative":"FALSE"
1059 | }
1060 | ],
1061 | "replace":"([ওোঅ]|(অ্য)|(য়ো?))"
1062 | }
1063 | ]
1064 | },
1065 | {
1066 | "find":"phl",
1067 | "replace":"(((ফ|(প(্?)(হ|ঃ|(হ্?))))(্?)ল)|(প(্?)((হ|ঃ|(হ্?))(্?)ল))|(প(্?)(হ|ঃ|(হ্?))(্?)ল))",
1068 | "rules":
1069 | [
1070 | ]
1071 | },
1072 | {
1073 | "find":"ph",
1074 | "replace":"(ফ|(প(্?)(হ|ঃ|(হ্?))))",
1075 | "rules":
1076 | [
1077 | ]
1078 | },
1079 | {
1080 | "find":"pp",
1081 | "replace":"(প(্?)প?)",
1082 | "rules":
1083 | [
1084 | ]
1085 | },
1086 | {
1087 | "find":"p",
1088 | "replace":"প",
1089 | "rules":
1090 | [
1091 | ]
1092 | },
1093 | {
1094 | "find":"qq",
1095 | "replace":"(ক(্?)ক?)",
1096 | "rules":
1097 | [
1098 | ]
1099 | },
1100 | {
1101 | "find":"q",
1102 | "replace":"ক",
1103 | "rules":
1104 | [
1105 | ]
1106 | },
1107 | {
1108 | "find":"rri",
1109 | "replace":"(ঋ|ৃ|(([রড়ঢ়]|(হ্র))([রড়ঢ়]|(হ্র))([ইঈিী]|(য়[িী]))))",
1110 | "rules":
1111 | [
1112 | ]
1113 | },
1114 | {
1115 | "find":"ri",
1116 | "replace":"(ঋ|ৃ|(হৃ)|(([রড়ঢ়]|(হ্র))([ইঈিী]|(য়[িী]))))",
1117 | "rules":
1118 | [
1119 | ]
1120 | },
1121 | {
1122 | "find":"rh",
1123 | "replace":"((([রড়ঢ়]|(হ্র)))|(([রড়ঢ়]|(হ্র))(্?)(হ|ঃ|(হ্?))))",
1124 | "rules":
1125 | [
1126 | ]
1127 | },
1128 | {
1129 | "find":"r",
1130 | "replace":"([রড়ঢ়]|(হ্র))",
1131 | "rules":
1132 | [
1133 | ]
1134 | },
1135 | {
1136 | "find":"shsh",
1137 | "replace":"((((স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?)))))?(্?)(স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?)))))|([সশষ](্?)(হ|ঃ|(হ্?))(্?)[সশষ](্?)(হ|ঃ|(হ্?))))",
1138 | "rules":
1139 | [
1140 | ]
1141 | },
1142 | {
1143 | "find":"ssh",
1144 | "replace":"(([সশষ]?(্?)(স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?)))))|([সশষ](্?)[সশষ](্?)(হ|ঃ|(হ্?))))",
1145 | "rules":
1146 | [
1147 | ]
1148 | },
1149 | {
1150 | "find":"shm",
1151 | "replace":"(((স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?))))(্?)ম)|([সশষ](্?)((হ|ঃ|(হ্?))(্?)ম))|([সশষ](্?)(হ|ঃ|(হ্?))(্?)ম))",
1152 | "rules":
1153 | [
1154 | ]
1155 | },
1156 | {
1157 | "find":"shn",
1158 | "replace":"(((স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?))))(্?)[নণঁঙঞং])|([সশষ](্?)((হ|ঃ|(হ্?))(্?)[নণঁঙঞং]))|([সশষ](্?)(হ|ঃ|(হ্?))(্?)[নণঁঙঞং]))",
1159 | "rules":
1160 | [
1161 | ]
1162 | },
1163 | {
1164 | "find":"ss",
1165 | "replace":"([সশষ](্?)[সশষ]?)",
1166 | "rules":
1167 | [
1168 | ]
1169 | },
1170 | {
1171 | "find":"sh",
1172 | "replace":"(স|শ|ষ|([সশষ](্?)(হ|ঃ|(হ্?))))",
1173 | "rules":
1174 | [
1175 | ]
1176 | },
1177 | {
1178 | "find":"s",
1179 | "replace":"[সশষ]",
1180 | "rules":
1181 | [
1182 | ]
1183 | },
1184 | {
1185 | "find":"thth",
1186 | "replace":"((ত্থ)|(((থ|ঠ|([তটৎ](্?)(হ|ঃ|(হ্?)))))?(্?)(থ|ঠ|([তটৎ](্?)(হ|ঃ|(হ্?)))))|([তটৎ](্?)(হ|ঃ|(হ্?))(্?)[তটৎ](্?)(হ|ঃ|(হ্?))))",
1187 | "rules":
1188 | [
1189 | ]
1190 | },
1191 | {
1192 | "find":"tth",
1193 | "replace":"(([তটৎ]?(্?)(থ|ঠ|([তটৎ](্?)(হ|ঃ|(হ্?)))))|(([তটৎ](্?)[তটৎ]?)(্?)(হ|ঃ|(হ্?)))|([তটৎ](্?)[তটৎ](্?)(হ|ঃ|(হ্?))))",
1194 | "rules":
1195 | [
1196 | ]
1197 | },
1198 | {
1199 | "find":"t``",
1200 | "replace":"ৎ",
1201 | "rules":
1202 | [
1203 | ]
1204 | },
1205 | {
1206 | "find":"tth",
1207 | "replace":"(([তটৎ]?(্?)(থ|ঠ|([তটৎ](্?)(হ|ঃ|(হ্?)))))|(([তটৎ](্?)[তটৎ]?)(্?)(হ|ঃ|(হ্?)))|([তটৎ](্?)[তটৎ](্?)(হ|ঃ|(হ্?))))",
1208 | "rules":
1209 | [
1210 | ]
1211 | },
1212 | {
1213 | "find":"tt",
1214 | "replace":"([তটৎ](্?)[তটৎ]?)",
1215 | "rules":
1216 | [
1217 | ]
1218 | },
1219 | {
1220 | "find":"th",
1221 | "replace":"(থ|ঠ|([তটৎ](্?)(হ|ঃ|(হ্?))))",
1222 | "rules":
1223 | [
1224 | ]
1225 | },
1226 | {
1227 | "find":"t",
1228 | "replace":"[তটৎ]",
1229 | "rules":
1230 | [
1231 | ]
1232 | },
1233 | {
1234 | "find":"uu",
1235 | "replace":"(ঊ|ূ|(([উঊুূ]|(য়[ুূ]))(([উঊুূ]|(য়[ুূ])))?))",
1236 | "rules":
1237 | [
1238 | ]
1239 | },
1240 | {
1241 | "find":"u",
1242 | "replace":"([উঊুূ]|(য়[ুূ]))",
1243 | "rules":
1244 | [
1245 | ]
1246 | },
1247 | {
1248 | "find":"vv",
1249 | "replace":"(ভ(্?)ভ?)",
1250 | "rules":
1251 | [
1252 | ]
1253 | },
1254 | {
1255 | "find":"v",
1256 | "replace":"ভ",
1257 | "rules":
1258 | [
1259 | ]
1260 | },
1261 | {
1262 | "find":"w",
1263 | "replace":"(ও|(ওয়)|(্ব))",
1264 | "rules":
1265 | [
1266 | ]
1267 | },
1268 | {
1269 | "find":"xm",
1270 | "replace":"(((ক্স)|(এক্স)|ষ)(্?)ম)",
1271 | "rules":
1272 | [
1273 | ]
1274 | },
1275 | {
1276 | "find":"xn",
1277 | "replace":"(((ক্স)|(এক্স)|ষ)(্?)[নণঁঙঞং])",
1278 | "rules":
1279 | [
1280 | ]
1281 | },
1282 | {
1283 | "find":"x",
1284 | "replace":"((ক্স)|(এক্স)|ষ)",
1285 | "rules":
1286 | [
1287 | ]
1288 | },
1289 | {
1290 | "find":"y",
1291 | "replace":"(য়|(ইয়)|([]?্য))",
1292 | "rules":
1293 | [
1294 | ]
1295 | },
1296 | {
1297 | "find":"zzh",
1298 | "replace":"((হ্য)|((জ|য|(জ়)|([]?্য))(্?)(ঝ|(([জয]|(জ়))(্?)(হ|ঃ|(হ্?)))))|(((হ্য)|((জ|য|(জ়)|([]?্য))(্?)((জ|য|(জ়)|([]?্য)))?))(্?)(হ|ঃ|(হ্?)))|((জ|য|(জ়)|([]?্য))(্?)(জ|য|(জ়)|([]?্য))(্?)(হ|ঃ|(হ্?))))",
1299 | "rules":
1300 | [
1301 | ]
1302 | },
1303 | {
1304 | "find":"zh",
1305 | "replace":"(ঝ|(([জয]|(জ়))(্?)(হ|ঃ|(হ্?))))",
1306 | "rules":
1307 | [
1308 | ]
1309 | },
1310 | {
1311 | "find":"zz",
1312 | "replace":"((হ্য)|((জ|য|(জ়)|([]?্য))(্?)((জ|য|(জ়)|([]?্য)))?))",
1313 | "rules":
1314 | [
1315 | ]
1316 | },
1317 | {
1318 | "find":"z",
1319 | "replace":"(জ|য|(জ়)|([]?্য))",
1320 | "rules":
1321 | [
1322 | ]
1323 | },
1324 | {
1325 | "find":"0",
1326 | "replace":"(০|(0)|(শূন্য))",
1327 | "rules":
1328 | [
1329 | ]
1330 | },
1331 | {
1332 | "find":"1",
1333 | "replace":"(১|(1)|(এক))",
1334 | "rules":
1335 | [
1336 | ]
1337 | },
1338 | {
1339 | "find":"2",
1340 | "replace":"(২|(2)|(দুই))",
1341 | "rules":
1342 | [
1343 | ]
1344 | },
1345 | {
1346 | "find":"3",
1347 | "replace":"(৩|(3)|(তিন))",
1348 | "rules":
1349 | [
1350 | ]
1351 | },
1352 | {
1353 | "find":"4",
1354 | "replace":"(৪|(4)|(চার))",
1355 | "rules":
1356 | [
1357 | ]
1358 | },
1359 | {
1360 | "find":"5",
1361 | "replace":"(৫|(5)|(পাঁচ))",
1362 | "rules":
1363 | [
1364 | ]
1365 | },
1366 | {
1367 | "find":"6",
1368 | "replace":"((6)|৬|(ছয়))",
1369 | "rules":
1370 | [
1371 | ]
1372 | },
1373 | {
1374 | "find":"7",
1375 | "replace":"(৭|(7)|(সাত))",
1376 | "rules":
1377 | [
1378 | ]
1379 | },
1380 | {
1381 | "find":"8",
1382 | "replace":"(৮|(8)|(আট))",
1383 | "rules":
1384 | [
1385 | ]
1386 | },
1387 | {
1388 | "find":"9",
1389 | "replace":"(৯|(9)|(নয়))",
1390 | "rules":
1391 | [
1392 | ]
1393 | },
1394 | {
1395 | "find":"`",
1396 | "replace":"",
1397 | "rules":
1398 | [
1399 | ]
1400 | }
1401 | ],
1402 | "vowel":"aeiou",
1403 | "consonant":"bcdfghjklmnpqrstvwxyz",
1404 | "ignore":"|()[]{}^$*+?.~!@#%&-_='\";<>/\\,:`"
1405 | }
1406 | }
1407 |
1408 | /* --------- */
1409 | /* Test code */
1410 | /* --------- */
1411 | //var __avroRegex = new AvroRegex ();
1412 | //print(__avroRegex.parse('a(!k)'));
--------------------------------------------------------------------------------