summaryrefslogtreecommitdiffstats
path: root/input-methods/sulekha/src
diff options
context:
space:
mode:
authorSanthosh Thottingal <santhosh00@gmail.com>2007-10-27 15:36:57 -0400
committerSanthosh Thottingal <santhosh00@gmail.com>2007-10-27 15:36:57 -0400
commit49580bf92860d0e2df036cf2e294f6b26528a5d2 (patch)
tree3707190eb3779de32081d939f03e2dd3efe713af /input-methods/sulekha/src
parent40cdac44fe89856c3f068ddd9dd911d88da97eb4 (diff)
downloadRachana.git-49580bf92860d0e2df036cf2e294f6b26528a5d2.tar.gz
Rachana.git-49580bf92860d0e2df036cf2e294f6b26528a5d2.tar.xz
Rachana.git-49580bf92860d0e2df036cf2e294f6b26528a5d2.zip
Rearranged the code , config , make files preapred, addon to gtktextview added
transliteration completed. TODO: GUI coding and integration
Diffstat (limited to 'input-methods/sulekha/src')
-rw-r--r--input-methods/sulekha/src/.deps/sulekha.Po1139
-rw-r--r--input-methods/sulekha/src/.deps/sulekhaspell.Po1151
-rw-r--r--input-methods/sulekha/src/.deps/transliteration.Po86
-rw-r--r--input-methods/sulekha/src/Makefile398
-rw-r--r--input-methods/sulekha/src/Makefile.am8
-rw-r--r--input-methods/sulekha/src/Makefile.am~8
-rw-r--r--input-methods/sulekha/src/Makefile.in398
-rw-r--r--input-methods/sulekha/src/googliterate.c~83
-rw-r--r--input-methods/sulekha/src/suggestions.c~71
-rw-r--r--input-methods/sulekha/src/sulekha.c381
-rw-r--r--input-methods/sulekha/src/sulekha.c~380
-rw-r--r--input-methods/sulekha/src/sulekhaspell.c859
-rw-r--r--input-methods/sulekha/src/sulekhaspell.c~842
-rw-r--r--input-methods/sulekha/src/sulekhaspell.h64
-rw-r--r--input-methods/sulekha/src/sulekhaspell.h~45
-rw-r--r--input-methods/sulekha/src/trans.c231
-rw-r--r--input-methods/sulekha/src/trans.c~231
-rw-r--r--input-methods/sulekha/src/transliteration.c906
-rw-r--r--input-methods/sulekha/src/transliteration.c~906
-rw-r--r--input-methods/sulekha/src/transliteration.h31
-rw-r--r--input-methods/sulekha/src/transliteration.h~31
21 files changed, 8249 insertions, 0 deletions
diff --git a/input-methods/sulekha/src/.deps/sulekha.Po b/input-methods/sulekha/src/.deps/sulekha.Po
new file mode 100644
index 0000000..92ad61e
--- /dev/null
+++ b/input-methods/sulekha/src/.deps/sulekha.Po
@@ -0,0 +1,1139 @@
+sulekha.o sulekha.o: sulekha.c /usr/include/gtk-2.0/gtk/gtk.h \
+ /usr/include/gtk-2.0/gdk/gdk.h /usr/include/gtk-2.0/gdk/gdkcairo.h \
+ /usr/include/gtk-2.0/gdk/gdkcolor.h /usr/include/cairo/cairo.h \
+ /usr/include/cairo/cairo-features.h \
+ /usr/include/cairo/cairo-deprecated.h \
+ /usr/include/gtk-2.0/gdk/gdktypes.h /usr/include/glib-2.0/glib.h \
+ /usr/include/glib-2.0/glib/galloca.h \
+ /usr/include/glib-2.0/glib/gtypes.h \
+ /usr/lib/glib-2.0/include/glibconfig.h \
+ /usr/include/glib-2.0/glib/gmacros.h \
+ /usr/lib/gcc/i486-linux-gnu/4.1.2/include/stddef.h \
+ /usr/lib/gcc/i486-linux-gnu/4.1.2/include/limits.h \
+ /usr/lib/gcc/i486-linux-gnu/4.1.2/include/syslimits.h \
+ /usr/include/limits.h /usr/include/features.h /usr/include/sys/cdefs.h \
+ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
+ /usr/include/gnu/stubs-32.h /usr/include/bits/posix1_lim.h \
+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
+ /usr/include/bits/posix2_lim.h \
+ /usr/lib/gcc/i486-linux-gnu/4.1.2/include/float.h \
+ /usr/include/glib-2.0/glib/garray.h \
+ /usr/include/glib-2.0/glib/gasyncqueue.h \
+ /usr/include/glib-2.0/glib/gthread.h \
+ /usr/include/glib-2.0/glib/gerror.h /usr/include/glib-2.0/glib/gquark.h \
+ /usr/include/glib-2.0/glib/gutils.h \
+ /usr/lib/gcc/i486-linux-gnu/4.1.2/include/stdarg.h \
+ /usr/include/glib-2.0/glib/gatomic.h \
+ /usr/include/glib-2.0/glib/gbacktrace.h \
+ /usr/include/glib-2.0/glib/gbase64.h \
+ /usr/include/glib-2.0/glib/gbookmarkfile.h /usr/include/time.h \
+ /usr/include/bits/time.h /usr/include/bits/types.h \
+ /usr/include/bits/typesizes.h /usr/include/glib-2.0/glib/gcache.h \
+ /usr/include/glib-2.0/glib/glist.h /usr/include/glib-2.0/glib/gmem.h \
+ /usr/include/glib-2.0/glib/gslice.h \
+ /usr/include/glib-2.0/glib/gcompletion.h \
+ /usr/include/glib-2.0/glib/gconvert.h \
+ /usr/include/glib-2.0/glib/gdataset.h \
+ /usr/include/glib-2.0/glib/gdate.h /usr/include/glib-2.0/glib/gdir.h \
+ /usr/include/glib-2.0/glib/gfileutils.h \
+ /usr/include/glib-2.0/glib/ghash.h /usr/include/glib-2.0/glib/ghook.h \
+ /usr/include/glib-2.0/glib/giochannel.h \
+ /usr/include/glib-2.0/glib/gmain.h /usr/include/glib-2.0/glib/gslist.h \
+ /usr/include/glib-2.0/glib/gstring.h \
+ /usr/include/glib-2.0/glib/gunicode.h \
+ /usr/include/glib-2.0/glib/gkeyfile.h \
+ /usr/include/glib-2.0/glib/gmappedfile.h \
+ /usr/include/glib-2.0/glib/gmarkup.h \
+ /usr/include/glib-2.0/glib/gmessages.h \
+ /usr/include/glib-2.0/glib/gnode.h /usr/include/glib-2.0/glib/goption.h \
+ /usr/include/glib-2.0/glib/gpattern.h \
+ /usr/include/glib-2.0/glib/gprimes.h \
+ /usr/include/glib-2.0/glib/gqsort.h /usr/include/glib-2.0/glib/gqueue.h \
+ /usr/include/glib-2.0/glib/grand.h /usr/include/glib-2.0/glib/grel.h \
+ /usr/include/glib-2.0/glib/gregex.h \
+ /usr/include/glib-2.0/glib/gscanner.h \
+ /usr/include/glib-2.0/glib/gsequence.h \
+ /usr/include/glib-2.0/glib/gshell.h /usr/include/glib-2.0/glib/gspawn.h \
+ /usr/include/glib-2.0/glib/gstrfuncs.h \
+ /usr/include/glib-2.0/glib/gthreadpool.h \
+ /usr/include/glib-2.0/glib/gtimer.h /usr/include/glib-2.0/glib/gtree.h \
+ /usr/include/pango-1.0/pango/pango.h \
+ /usr/include/pango-1.0/pango/pango-attributes.h \
+ /usr/include/pango-1.0/pango/pango-font.h \
+ /usr/include/pango-1.0/pango/pango-coverage.h \
+ /usr/include/pango-1.0/pango/pango-types.h \
+ /usr/include/glib-2.0/glib-object.h \
+ /usr/include/glib-2.0/gobject/gboxed.h \
+ /usr/include/glib-2.0/gobject/gtype.h \
+ /usr/include/glib-2.0/gobject/genums.h \
+ /usr/include/glib-2.0/gobject/gobject.h \
+ /usr/include/glib-2.0/gobject/gvalue.h \
+ /usr/include/glib-2.0/gobject/gparam.h \
+ /usr/include/glib-2.0/gobject/gclosure.h \
+ /usr/include/glib-2.0/gobject/gsignal.h \
+ /usr/include/glib-2.0/gobject/gmarshal.h \
+ /usr/include/glib-2.0/gobject/gparamspecs.h \
+ /usr/include/glib-2.0/gobject/gsourceclosure.h \
+ /usr/include/glib-2.0/gobject/gtypemodule.h \
+ /usr/include/glib-2.0/gobject/gtypeplugin.h \
+ /usr/include/glib-2.0/gobject/gvaluearray.h \
+ /usr/include/glib-2.0/gobject/gvaluetypes.h \
+ /usr/include/pango-1.0/pango/pango-gravity.h \
+ /usr/include/pango-1.0/pango/pango-matrix.h \
+ /usr/include/pango-1.0/pango/pango-script.h \
+ /usr/include/pango-1.0/pango/pango-language.h \
+ /usr/include/pango-1.0/pango/pango-break.h \
+ /usr/include/pango-1.0/pango/pango-item.h \
+ /usr/include/pango-1.0/pango/pango-context.h \
+ /usr/include/pango-1.0/pango/pango-fontmap.h \
+ /usr/include/pango-1.0/pango/pango-fontset.h \
+ /usr/include/pango-1.0/pango/pango-engine.h \
+ /usr/include/pango-1.0/pango/pango-glyph.h \
+ /usr/include/pango-1.0/pango/pango-enum-types.h \
+ /usr/include/pango-1.0/pango/pango-features.h \
+ /usr/include/pango-1.0/pango/pango-glyph-item.h \
+ /usr/include/pango-1.0/pango/pango-layout.h \
+ /usr/include/pango-1.0/pango/pango-tabs.h \
+ /usr/include/pango-1.0/pango/pango-renderer.h \
+ /usr/include/pango-1.0/pango/pango-utils.h /usr/include/stdio.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/include/bits/wchar.h /usr/include/gconv.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h /usr/lib/gtk-2.0/include/gdkconfig.h \
+ /usr/include/gtk-2.0/gdk/gdkpixbuf.h /usr/include/gtk-2.0/gdk/gdkrgb.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-features.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-core.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-transform.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-animation.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-simple-anim.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-io.h \
+ /usr/include/glib-2.0/gmodule.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-loader.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h \
+ /usr/include/pango-1.0/pango/pangocairo.h \
+ /usr/include/gtk-2.0/gdk/gdkcursor.h \
+ /usr/include/gtk-2.0/gdk/gdkdisplay.h \
+ /usr/include/gtk-2.0/gdk/gdkevents.h /usr/include/gtk-2.0/gdk/gdkdnd.h \
+ /usr/include/gtk-2.0/gdk/gdkinput.h \
+ /usr/include/gtk-2.0/gdk/gdkdrawable.h /usr/include/gtk-2.0/gdk/gdkgc.h \
+ /usr/include/gtk-2.0/gdk/gdkenumtypes.h \
+ /usr/include/gtk-2.0/gdk/gdkfont.h /usr/include/gtk-2.0/gdk/gdkimage.h \
+ /usr/include/gtk-2.0/gdk/gdkkeys.h \
+ /usr/include/gtk-2.0/gdk/gdkdisplaymanager.h \
+ /usr/include/gtk-2.0/gdk/gdkpango.h \
+ /usr/include/gtk-2.0/gdk/gdkpixmap.h \
+ /usr/include/gtk-2.0/gdk/gdkproperty.h \
+ /usr/include/gtk-2.0/gdk/gdkregion.h \
+ /usr/include/gtk-2.0/gdk/gdkscreen.h \
+ /usr/include/gtk-2.0/gdk/gdkselection.h \
+ /usr/include/gtk-2.0/gdk/gdkspawn.h \
+ /usr/include/gtk-2.0/gdk/gdkvisual.h \
+ /usr/include/gtk-2.0/gdk/gdkwindow.h \
+ /usr/include/gtk-2.0/gtk/gtkaboutdialog.h \
+ /usr/include/gtk-2.0/gtk/gtkdialog.h \
+ /usr/include/gtk-2.0/gtk/gtkwindow.h \
+ /usr/include/gtk-2.0/gtk/gtkaccelgroup.h \
+ /usr/include/gtk-2.0/gtk/gtkenums.h /usr/include/gtk-2.0/gtk/gtkbin.h \
+ /usr/include/gtk-2.0/gtk/gtkcontainer.h \
+ /usr/include/gtk-2.0/gtk/gtkwidget.h \
+ /usr/include/gtk-2.0/gtk/gtkobject.h \
+ /usr/include/gtk-2.0/gtk/gtktypeutils.h \
+ /usr/include/gtk-2.0/gtk/gtktypebuiltins.h \
+ /usr/include/gtk-2.0/gtk/gtkdebug.h \
+ /usr/include/gtk-2.0/gtk/gtkadjustment.h \
+ /usr/include/gtk-2.0/gtk/gtkstyle.h \
+ /usr/include/gtk-2.0/gtk/gtksettings.h /usr/include/gtk-2.0/gtk/gtkrc.h \
+ /usr/include/atk-1.0/atk/atkobject.h \
+ /usr/include/atk-1.0/atk/atkstate.h \
+ /usr/include/atk-1.0/atk/atkrelationtype.h \
+ /usr/include/gtk-2.0/gtk/gtkaccellabel.h \
+ /usr/include/gtk-2.0/gtk/gtklabel.h /usr/include/gtk-2.0/gtk/gtkmisc.h \
+ /usr/include/gtk-2.0/gtk/gtkmenu.h \
+ /usr/include/gtk-2.0/gtk/gtkmenushell.h \
+ /usr/include/gtk-2.0/gtk/gtkaccelmap.h \
+ /usr/include/gtk-2.0/gtk/gtkaccessible.h /usr/include/atk-1.0/atk/atk.h \
+ /usr/include/atk-1.0/atk/atkaction.h \
+ /usr/include/atk-1.0/atk/atkcomponent.h \
+ /usr/include/atk-1.0/atk/atkutil.h \
+ /usr/include/atk-1.0/atk/atkdocument.h \
+ /usr/include/atk-1.0/atk/atkeditabletext.h \
+ /usr/include/atk-1.0/atk/atktext.h \
+ /usr/include/atk-1.0/atk/atkgobjectaccessible.h \
+ /usr/include/atk-1.0/atk/atkhyperlink.h \
+ /usr/include/atk-1.0/atk/atkhyperlinkimpl.h \
+ /usr/include/atk-1.0/atk/atkhypertext.h \
+ /usr/include/atk-1.0/atk/atkimage.h \
+ /usr/include/atk-1.0/atk/atknoopobject.h \
+ /usr/include/atk-1.0/atk/atknoopobjectfactory.h \
+ /usr/include/atk-1.0/atk/atkobjectfactory.h \
+ /usr/include/atk-1.0/atk/atkregistry.h \
+ /usr/include/atk-1.0/atk/atkobjectfactory.h \
+ /usr/include/atk-1.0/atk/atkrelation.h \
+ /usr/include/atk-1.0/atk/atkrelationset.h \
+ /usr/include/atk-1.0/atk/atkselection.h \
+ /usr/include/atk-1.0/atk/atkstateset.h \
+ /usr/include/atk-1.0/atk/atkstreamablecontent.h \
+ /usr/include/atk-1.0/atk/atktable.h /usr/include/atk-1.0/atk/atkmisc.h \
+ /usr/include/atk-1.0/atk/atkvalue.h \
+ /usr/include/gtk-2.0/gtk/gtkaction.h \
+ /usr/include/gtk-2.0/gtk/gtkactiongroup.h \
+ /usr/include/gtk-2.0/gtk/gtkitemfactory.h \
+ /usr/include/gtk-2.0/gtk/gtkalignment.h \
+ /usr/include/gtk-2.0/gtk/gtkarrow.h \
+ /usr/include/gtk-2.0/gtk/gtkaspectframe.h \
+ /usr/include/gtk-2.0/gtk/gtkframe.h \
+ /usr/include/gtk-2.0/gtk/gtkassistant.h \
+ /usr/include/gtk-2.0/gtk/gtkbbox.h /usr/include/gtk-2.0/gtk/gtkbox.h \
+ /usr/include/gtk-2.0/gtk/gtkbindings.h \
+ /usr/include/gtk-2.0/gtk/gtkbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkimage.h \
+ /usr/include/gtk-2.0/gtk/gtkcalendar.h \
+ /usr/include/gtk-2.0/gtk/gtksignal.h \
+ /usr/include/gtk-2.0/gtk/gtkmarshal.h \
+ /usr/include/gtk-2.0/gtk/gtkcelllayout.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrenderer.h \
+ /usr/include/gtk-2.0/gtk/gtkcelleditable.h \
+ /usr/include/gtk-2.0/gtk/gtktreeviewcolumn.h \
+ /usr/include/gtk-2.0/gtk/gtktreemodel.h \
+ /usr/include/gtk-2.0/gtk/gtktreesortable.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrendereraccel.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrenderertext.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrenderercombo.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrenderertext.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrendererprogress.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrendererspin.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrenderertoggle.h \
+ /usr/include/gtk-2.0/gtk/gtkcellview.h \
+ /usr/include/gtk-2.0/gtk/gtkcheckbutton.h \
+ /usr/include/gtk-2.0/gtk/gtktogglebutton.h \
+ /usr/include/gtk-2.0/gtk/gtkcheckmenuitem.h \
+ /usr/include/gtk-2.0/gtk/gtkmenuitem.h \
+ /usr/include/gtk-2.0/gtk/gtkitem.h \
+ /usr/include/gtk-2.0/gtk/gtkclipboard.h \
+ /usr/include/gtk-2.0/gtk/gtkselection.h \
+ /usr/include/gtk-2.0/gtk/gtktextiter.h \
+ /usr/include/gtk-2.0/gtk/gtktexttag.h \
+ /usr/include/gtk-2.0/gtk/gtktextchild.h \
+ /usr/include/gtk-2.0/gtk/gtkclist.h \
+ /usr/include/gtk-2.0/gtk/gtkhscrollbar.h \
+ /usr/include/gtk-2.0/gtk/gtkscrollbar.h \
+ /usr/include/gtk-2.0/gtk/gtkrange.h \
+ /usr/include/gtk-2.0/gtk/gtkvscrollbar.h \
+ /usr/include/gtk-2.0/gtk/gtkcolorbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkcolorsel.h \
+ /usr/include/gtk-2.0/gtk/gtkvbox.h \
+ /usr/include/gtk-2.0/gtk/gtkcolorseldialog.h \
+ /usr/include/gtk-2.0/gtk/gtkcombo.h /usr/include/gtk-2.0/gtk/gtkhbox.h \
+ /usr/include/gtk-2.0/gtk/gtkcombobox.h \
+ /usr/include/gtk-2.0/gtk/gtktreeview.h \
+ /usr/include/gtk-2.0/gtk/gtkdnd.h /usr/include/gtk-2.0/gtk/gtkentry.h \
+ /usr/include/gtk-2.0/gtk/gtkeditable.h \
+ /usr/include/gtk-2.0/gtk/gtkimcontext.h \
+ /usr/include/gtk-2.0/gtk/gtkentrycompletion.h \
+ /usr/include/gtk-2.0/gtk/gtkliststore.h \
+ /usr/include/gtk-2.0/gtk/gtktreemodelfilter.h \
+ /usr/include/gtk-2.0/gtk/gtkcomboboxentry.h \
+ /usr/include/gtk-2.0/gtk/gtkctree.h /usr/include/gtk-2.0/gtk/gtkcurve.h \
+ /usr/include/gtk-2.0/gtk/gtkdrawingarea.h \
+ /usr/include/gtk-2.0/gtk/gtkeventbox.h \
+ /usr/include/gtk-2.0/gtk/gtkexpander.h \
+ /usr/include/gtk-2.0/gtk/gtkfilesel.h \
+ /usr/include/gtk-2.0/gtk/gtkfixed.h \
+ /usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkfilechooser.h \
+ /usr/include/gtk-2.0/gtk/gtkfilefilter.h \
+ /usr/include/gtk-2.0/gtk/gtkfilechooserdialog.h \
+ /usr/include/gtk-2.0/gtk/gtkfilechooser.h \
+ /usr/include/gtk-2.0/gtk/gtkfilechooserwidget.h \
+ /usr/include/gtk-2.0/gtk/gtkfontbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkfontsel.h \
+ /usr/include/gtk-2.0/gtk/gtkgamma.h /usr/include/gtk-2.0/gtk/gtkgc.h \
+ /usr/include/gtk-2.0/gtk/gtkhandlebox.h \
+ /usr/include/gtk-2.0/gtk/gtkhbbox.h \
+ /usr/include/gtk-2.0/gtk/gtkhpaned.h \
+ /usr/include/gtk-2.0/gtk/gtkpaned.h \
+ /usr/include/gtk-2.0/gtk/gtkhruler.h \
+ /usr/include/gtk-2.0/gtk/gtkruler.h \
+ /usr/include/gtk-2.0/gtk/gtkhscale.h \
+ /usr/include/gtk-2.0/gtk/gtkscale.h \
+ /usr/include/gtk-2.0/gtk/gtkhseparator.h \
+ /usr/include/gtk-2.0/gtk/gtkseparator.h \
+ /usr/include/gtk-2.0/gtk/gtkiconfactory.h \
+ /usr/include/gtk-2.0/gtk/gtkicontheme.h \
+ /usr/include/gtk-2.0/gtk/gtkiconview.h \
+ /usr/include/gtk-2.0/gtk/gtkimagemenuitem.h \
+ /usr/include/gtk-2.0/gtk/gtkimcontextsimple.h \
+ /usr/include/gtk-2.0/gtk/gtkimmulticontext.h \
+ /usr/include/gtk-2.0/gtk/gtkinputdialog.h \
+ /usr/include/gtk-2.0/gtk/gtkinvisible.h \
+ /usr/include/gtk-2.0/gtk/gtklayout.h \
+ /usr/include/gtk-2.0/gtk/gtklinkbutton.h \
+ /usr/include/gtk-2.0/gtk/gtklist.h \
+ /usr/include/gtk-2.0/gtk/gtklistitem.h \
+ /usr/include/gtk-2.0/gtk/gtkmain.h \
+ /usr/include/gtk-2.0/gtk/gtkmenubar.h \
+ /usr/include/gtk-2.0/gtk/gtkmenutoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkmenu.h \
+ /usr/include/gtk-2.0/gtk/gtktoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtktoolitem.h \
+ /usr/include/gtk-2.0/gtk/gtktooltips.h \
+ /usr/include/gtk-2.0/gtk/gtkmessagedialog.h \
+ /usr/include/gtk-2.0/gtk/gtkmodules.h \
+ /usr/include/gtk-2.0/gtk/gtknotebook.h \
+ /usr/include/gtk-2.0/gtk/gtkoldeditable.h \
+ /usr/include/gtk-2.0/gtk/gtkoptionmenu.h \
+ /usr/include/gtk-2.0/gtk/gtkpixmap.h /usr/include/gtk-2.0/gtk/gtkplug.h \
+ /usr/include/gtk-2.0/gtk/gtksocket.h \
+ /usr/include/gtk-2.0/gtk/gtkpreview.h \
+ /usr/include/gtk-2.0/gtk/gtkprintoperation.h \
+ /usr/include/gtk-2.0/gtk/gtkmain.h /usr/include/gtk-2.0/gtk/gtkenums.h \
+ /usr/include/gtk-2.0/gtk/gtkwindow.h \
+ /usr/include/gtk-2.0/gtk/gtkpagesetup.h \
+ /usr/include/gtk-2.0/gtk/gtkpapersize.h \
+ /usr/include/gtk-2.0/gtk/gtkprintsettings.h \
+ /usr/include/gtk-2.0/gtk/gtkprintcontext.h \
+ /usr/include/gtk-2.0/gtk/gtkprintoperationpreview.h \
+ /usr/include/gtk-2.0/gtk/gtkprogress.h \
+ /usr/include/gtk-2.0/gtk/gtkprogressbar.h \
+ /usr/include/gtk-2.0/gtk/gtkradioaction.h \
+ /usr/include/gtk-2.0/gtk/gtktoggleaction.h \
+ /usr/include/gtk-2.0/gtk/gtkradiobutton.h \
+ /usr/include/gtk-2.0/gtk/gtkradiomenuitem.h \
+ /usr/include/gtk-2.0/gtk/gtkradiotoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtktoggletoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtktoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentchooser.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentmanager.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentfilter.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentchooserdialog.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentchooser.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentchoosermenu.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentchooserwidget.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentfilter.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentmanager.h \
+ /usr/include/gtk-2.0/gtk/gtkscrolledwindow.h \
+ /usr/include/gtk-2.0/gtk/gtkviewport.h \
+ /usr/include/gtk-2.0/gtk/gtkseparatormenuitem.h \
+ /usr/include/gtk-2.0/gtk/gtkseparatortoolitem.h \
+ /usr/include/gtk-2.0/gtk/gtksizegroup.h \
+ /usr/include/gtk-2.0/gtk/gtkspinbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkstatusbar.h \
+ /usr/include/gtk-2.0/gtk/gtkstatusicon.h \
+ /usr/include/gtk-2.0/gtk/gtkstock.h /usr/include/gtk-2.0/gtk/gtktable.h \
+ /usr/include/gtk-2.0/gtk/gtktearoffmenuitem.h \
+ /usr/include/gtk-2.0/gtk/gtktext.h \
+ /usr/include/gtk-2.0/gtk/gtktextbuffer.h \
+ /usr/include/gtk-2.0/gtk/gtktexttagtable.h \
+ /usr/include/gtk-2.0/gtk/gtktextmark.h \
+ /usr/include/gtk-2.0/gtk/gtktextbufferrichtext.h \
+ /usr/include/gtk-2.0/gtk/gtktextview.h \
+ /usr/include/gtk-2.0/gtk/gtktipsquery.h \
+ /usr/include/gtk-2.0/gtk/gtktoggletoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtktoolbar.h \
+ /usr/include/gtk-2.0/gtk/gtktoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtktoolitem.h \
+ /usr/include/gtk-2.0/gtk/gtktree.h \
+ /usr/include/gtk-2.0/gtk/gtktreednd.h \
+ /usr/include/gtk-2.0/gtk/gtktreeitem.h \
+ /usr/include/gtk-2.0/gtk/gtktreemodelsort.h \
+ /usr/include/gtk-2.0/gtk/gtktreeselection.h \
+ /usr/include/gtk-2.0/gtk/gtktreestore.h \
+ /usr/include/gtk-2.0/gtk/gtkuimanager.h \
+ /usr/include/gtk-2.0/gtk/gtkvbbox.h \
+ /usr/include/gtk-2.0/gtk/gtkversion.h \
+ /usr/include/gtk-2.0/gtk/gtkvpaned.h \
+ /usr/include/gtk-2.0/gtk/gtkvruler.h \
+ /usr/include/gtk-2.0/gtk/gtkvscale.h \
+ /usr/include/gtk-2.0/gtk/gtkvseparator.h ../config.h sulekhaspell.h
+
+/usr/include/gtk-2.0/gtk/gtk.h:
+
+/usr/include/gtk-2.0/gdk/gdk.h:
+
+/usr/include/gtk-2.0/gdk/gdkcairo.h:
+
+/usr/include/gtk-2.0/gdk/gdkcolor.h:
+
+/usr/include/cairo/cairo.h:
+
+/usr/include/cairo/cairo-features.h:
+
+/usr/include/cairo/cairo-deprecated.h:
+
+/usr/include/gtk-2.0/gdk/gdktypes.h:
+
+/usr/include/glib-2.0/glib.h:
+
+/usr/include/glib-2.0/glib/galloca.h:
+
+/usr/include/glib-2.0/glib/gtypes.h:
+
+/usr/lib/glib-2.0/include/glibconfig.h:
+
+/usr/include/glib-2.0/glib/gmacros.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.1.2/include/stddef.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.1.2/include/limits.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.1.2/include/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/features.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-32.h:
+
+/usr/include/bits/posix1_lim.h:
+
+/usr/include/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/bits/posix2_lim.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.1.2/include/float.h:
+
+/usr/include/glib-2.0/glib/garray.h:
+
+/usr/include/glib-2.0/glib/gasyncqueue.h:
+
+/usr/include/glib-2.0/glib/gthread.h:
+
+/usr/include/glib-2.0/glib/gerror.h:
+
+/usr/include/glib-2.0/glib/gquark.h:
+
+/usr/include/glib-2.0/glib/gutils.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.1.2/include/stdarg.h:
+
+/usr/include/glib-2.0/glib/gatomic.h:
+
+/usr/include/glib-2.0/glib/gbacktrace.h:
+
+/usr/include/glib-2.0/glib/gbase64.h:
+
+/usr/include/glib-2.0/glib/gbookmarkfile.h:
+
+/usr/include/time.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/glib-2.0/glib/gcache.h:
+
+/usr/include/glib-2.0/glib/glist.h:
+
+/usr/include/glib-2.0/glib/gmem.h:
+
+/usr/include/glib-2.0/glib/gslice.h:
+
+/usr/include/glib-2.0/glib/gcompletion.h:
+
+/usr/include/glib-2.0/glib/gconvert.h:
+
+/usr/include/glib-2.0/glib/gdataset.h:
+
+/usr/include/glib-2.0/glib/gdate.h:
+
+/usr/include/glib-2.0/glib/gdir.h:
+
+/usr/include/glib-2.0/glib/gfileutils.h:
+
+/usr/include/glib-2.0/glib/ghash.h:
+
+/usr/include/glib-2.0/glib/ghook.h:
+
+/usr/include/glib-2.0/glib/giochannel.h:
+
+/usr/include/glib-2.0/glib/gmain.h:
+
+/usr/include/glib-2.0/glib/gslist.h:
+
+/usr/include/glib-2.0/glib/gstring.h:
+
+/usr/include/glib-2.0/glib/gunicode.h:
+
+/usr/include/glib-2.0/glib/gkeyfile.h:
+
+/usr/include/glib-2.0/glib/gmappedfile.h:
+
+/usr/include/glib-2.0/glib/gmarkup.h:
+
+/usr/include/glib-2.0/glib/gmessages.h:
+
+/usr/include/glib-2.0/glib/gnode.h:
+
+/usr/include/glib-2.0/glib/goption.h:
+
+/usr/include/glib-2.0/glib/gpattern.h:
+
+/usr/include/glib-2.0/glib/gprimes.h:
+
+/usr/include/glib-2.0/glib/gqsort.h:
+
+/usr/include/glib-2.0/glib/gqueue.h:
+
+/usr/include/glib-2.0/glib/grand.h:
+
+/usr/include/glib-2.0/glib/grel.h:
+
+/usr/include/glib-2.0/glib/gregex.h:
+
+/usr/include/glib-2.0/glib/gscanner.h:
+
+/usr/include/glib-2.0/glib/gsequence.h:
+
+/usr/include/glib-2.0/glib/gshell.h:
+
+/usr/include/glib-2.0/glib/gspawn.h:
+
+/usr/include/glib-2.0/glib/gstrfuncs.h:
+
+/usr/include/glib-2.0/glib/gthreadpool.h:
+
+/usr/include/glib-2.0/glib/gtimer.h:
+
+/usr/include/glib-2.0/glib/gtree.h:
+
+/usr/include/pango-1.0/pango/pango.h:
+
+/usr/include/pango-1.0/pango/pango-attributes.h:
+
+/usr/include/pango-1.0/pango/pango-font.h:
+
+/usr/include/pango-1.0/pango/pango-coverage.h:
+
+/usr/include/pango-1.0/pango/pango-types.h:
+
+/usr/include/glib-2.0/glib-object.h:
+
+/usr/include/glib-2.0/gobject/gboxed.h:
+
+/usr/include/glib-2.0/gobject/gtype.h:
+
+/usr/include/glib-2.0/gobject/genums.h:
+
+/usr/include/glib-2.0/gobject/gobject.h:
+
+/usr/include/glib-2.0/gobject/gvalue.h:
+
+/usr/include/glib-2.0/gobject/gparam.h:
+
+/usr/include/glib-2.0/gobject/gclosure.h:
+
+/usr/include/glib-2.0/gobject/gsignal.h:
+
+/usr/include/glib-2.0/gobject/gmarshal.h:
+
+/usr/include/glib-2.0/gobject/gparamspecs.h:
+
+/usr/include/glib-2.0/gobject/gsourceclosure.h:
+
+/usr/include/glib-2.0/gobject/gtypemodule.h:
+
+/usr/include/glib-2.0/gobject/gtypeplugin.h:
+
+/usr/include/glib-2.0/gobject/gvaluearray.h:
+
+/usr/include/glib-2.0/gobject/gvaluetypes.h:
+
+/usr/include/pango-1.0/pango/pango-gravity.h:
+
+/usr/include/pango-1.0/pango/pango-matrix.h:
+
+/usr/include/pango-1.0/pango/pango-script.h:
+
+/usr/include/pango-1.0/pango/pango-language.h:
+
+/usr/include/pango-1.0/pango/pango-break.h:
+
+/usr/include/pango-1.0/pango/pango-item.h:
+
+/usr/include/pango-1.0/pango/pango-context.h:
+
+/usr/include/pango-1.0/pango/pango-fontmap.h:
+
+/usr/include/pango-1.0/pango/pango-fontset.h:
+
+/usr/include/pango-1.0/pango/pango-engine.h:
+
+/usr/include/pango-1.0/pango/pango-glyph.h:
+
+/usr/include/pango-1.0/pango/pango-enum-types.h:
+
+/usr/include/pango-1.0/pango/pango-features.h:
+
+/usr/include/pango-1.0/pango/pango-glyph-item.h:
+
+/usr/include/pango-1.0/pango/pango-layout.h:
+
+/usr/include/pango-1.0/pango/pango-tabs.h:
+
+/usr/include/pango-1.0/pango/pango-renderer.h:
+
+/usr/include/pango-1.0/pango/pango-utils.h:
+
+/usr/include/stdio.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/gconv.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/lib/gtk-2.0/include/gdkconfig.h:
+
+/usr/include/gtk-2.0/gdk/gdkpixbuf.h:
+
+/usr/include/gtk-2.0/gdk/gdkrgb.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-features.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-core.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-transform.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-animation.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-simple-anim.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-io.h:
+
+/usr/include/glib-2.0/gmodule.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-loader.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h:
+
+/usr/include/pango-1.0/pango/pangocairo.h:
+
+/usr/include/gtk-2.0/gdk/gdkcursor.h:
+
+/usr/include/gtk-2.0/gdk/gdkdisplay.h:
+
+/usr/include/gtk-2.0/gdk/gdkevents.h:
+
+/usr/include/gtk-2.0/gdk/gdkdnd.h:
+
+/usr/include/gtk-2.0/gdk/gdkinput.h:
+
+/usr/include/gtk-2.0/gdk/gdkdrawable.h:
+
+/usr/include/gtk-2.0/gdk/gdkgc.h:
+
+/usr/include/gtk-2.0/gdk/gdkenumtypes.h:
+
+/usr/include/gtk-2.0/gdk/gdkfont.h:
+
+/usr/include/gtk-2.0/gdk/gdkimage.h:
+
+/usr/include/gtk-2.0/gdk/gdkkeys.h:
+
+/usr/include/gtk-2.0/gdk/gdkdisplaymanager.h:
+
+/usr/include/gtk-2.0/gdk/gdkpango.h:
+
+/usr/include/gtk-2.0/gdk/gdkpixmap.h:
+
+/usr/include/gtk-2.0/gdk/gdkproperty.h:
+
+/usr/include/gtk-2.0/gdk/gdkregion.h:
+
+/usr/include/gtk-2.0/gdk/gdkscreen.h:
+
+/usr/include/gtk-2.0/gdk/gdkselection.h:
+
+/usr/include/gtk-2.0/gdk/gdkspawn.h:
+
+/usr/include/gtk-2.0/gdk/gdkvisual.h:
+
+/usr/include/gtk-2.0/gdk/gdkwindow.h:
+
+/usr/include/gtk-2.0/gtk/gtkaboutdialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkdialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkwindow.h:
+
+/usr/include/gtk-2.0/gtk/gtkaccelgroup.h:
+
+/usr/include/gtk-2.0/gtk/gtkenums.h:
+
+/usr/include/gtk-2.0/gtk/gtkbin.h:
+
+/usr/include/gtk-2.0/gtk/gtkcontainer.h:
+
+/usr/include/gtk-2.0/gtk/gtkwidget.h:
+
+/usr/include/gtk-2.0/gtk/gtkobject.h:
+
+/usr/include/gtk-2.0/gtk/gtktypeutils.h:
+
+/usr/include/gtk-2.0/gtk/gtktypebuiltins.h:
+
+/usr/include/gtk-2.0/gtk/gtkdebug.h:
+
+/usr/include/gtk-2.0/gtk/gtkadjustment.h:
+
+/usr/include/gtk-2.0/gtk/gtkstyle.h:
+
+/usr/include/gtk-2.0/gtk/gtksettings.h:
+
+/usr/include/gtk-2.0/gtk/gtkrc.h:
+
+/usr/include/atk-1.0/atk/atkobject.h:
+
+/usr/include/atk-1.0/atk/atkstate.h:
+
+/usr/include/atk-1.0/atk/atkrelationtype.h:
+
+/usr/include/gtk-2.0/gtk/gtkaccellabel.h:
+
+/usr/include/gtk-2.0/gtk/gtklabel.h:
+
+/usr/include/gtk-2.0/gtk/gtkmisc.h:
+
+/usr/include/gtk-2.0/gtk/gtkmenu.h:
+
+/usr/include/gtk-2.0/gtk/gtkmenushell.h:
+
+/usr/include/gtk-2.0/gtk/gtkaccelmap.h:
+
+/usr/include/gtk-2.0/gtk/gtkaccessible.h:
+
+/usr/include/atk-1.0/atk/atk.h:
+
+/usr/include/atk-1.0/atk/atkaction.h:
+
+/usr/include/atk-1.0/atk/atkcomponent.h:
+
+/usr/include/atk-1.0/atk/atkutil.h:
+
+/usr/include/atk-1.0/atk/atkdocument.h:
+
+/usr/include/atk-1.0/atk/atkeditabletext.h:
+
+/usr/include/atk-1.0/atk/atktext.h:
+
+/usr/include/atk-1.0/atk/atkgobjectaccessible.h:
+
+/usr/include/atk-1.0/atk/atkhyperlink.h:
+
+/usr/include/atk-1.0/atk/atkhyperlinkimpl.h:
+
+/usr/include/atk-1.0/atk/atkhypertext.h:
+
+/usr/include/atk-1.0/atk/atkimage.h:
+
+/usr/include/atk-1.0/atk/atknoopobject.h:
+
+/usr/include/atk-1.0/atk/atknoopobjectfactory.h:
+
+/usr/include/atk-1.0/atk/atkobjectfactory.h:
+
+/usr/include/atk-1.0/atk/atkregistry.h:
+
+/usr/include/atk-1.0/atk/atkobjectfactory.h:
+
+/usr/include/atk-1.0/atk/atkrelation.h:
+
+/usr/include/atk-1.0/atk/atkrelationset.h:
+
+/usr/include/atk-1.0/atk/atkselection.h:
+
+/usr/include/atk-1.0/atk/atkstateset.h:
+
+/usr/include/atk-1.0/atk/atkstreamablecontent.h:
+
+/usr/include/atk-1.0/atk/atktable.h:
+
+/usr/include/atk-1.0/atk/atkmisc.h:
+
+/usr/include/atk-1.0/atk/atkvalue.h:
+
+/usr/include/gtk-2.0/gtk/gtkaction.h:
+
+/usr/include/gtk-2.0/gtk/gtkactiongroup.h:
+
+/usr/include/gtk-2.0/gtk/gtkitemfactory.h:
+
+/usr/include/gtk-2.0/gtk/gtkalignment.h:
+
+/usr/include/gtk-2.0/gtk/gtkarrow.h:
+
+/usr/include/gtk-2.0/gtk/gtkaspectframe.h:
+
+/usr/include/gtk-2.0/gtk/gtkframe.h:
+
+/usr/include/gtk-2.0/gtk/gtkassistant.h:
+
+/usr/include/gtk-2.0/gtk/gtkbbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkbindings.h:
+
+/usr/include/gtk-2.0/gtk/gtkbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkimage.h:
+
+/usr/include/gtk-2.0/gtk/gtkcalendar.h:
+
+/usr/include/gtk-2.0/gtk/gtksignal.h:
+
+/usr/include/gtk-2.0/gtk/gtkmarshal.h:
+
+/usr/include/gtk-2.0/gtk/gtkcelllayout.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrenderer.h:
+
+/usr/include/gtk-2.0/gtk/gtkcelleditable.h:
+
+/usr/include/gtk-2.0/gtk/gtktreeviewcolumn.h:
+
+/usr/include/gtk-2.0/gtk/gtktreemodel.h:
+
+/usr/include/gtk-2.0/gtk/gtktreesortable.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrendereraccel.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrenderertext.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrenderercombo.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrenderertext.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrendererprogress.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrendererspin.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrenderertoggle.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellview.h:
+
+/usr/include/gtk-2.0/gtk/gtkcheckbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtktogglebutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkcheckmenuitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkmenuitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkclipboard.h:
+
+/usr/include/gtk-2.0/gtk/gtkselection.h:
+
+/usr/include/gtk-2.0/gtk/gtktextiter.h:
+
+/usr/include/gtk-2.0/gtk/gtktexttag.h:
+
+/usr/include/gtk-2.0/gtk/gtktextchild.h:
+
+/usr/include/gtk-2.0/gtk/gtkclist.h:
+
+/usr/include/gtk-2.0/gtk/gtkhscrollbar.h:
+
+/usr/include/gtk-2.0/gtk/gtkscrollbar.h:
+
+/usr/include/gtk-2.0/gtk/gtkrange.h:
+
+/usr/include/gtk-2.0/gtk/gtkvscrollbar.h:
+
+/usr/include/gtk-2.0/gtk/gtkcolorbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkcolorsel.h:
+
+/usr/include/gtk-2.0/gtk/gtkvbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkcolorseldialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkcombo.h:
+
+/usr/include/gtk-2.0/gtk/gtkhbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkcombobox.h:
+
+/usr/include/gtk-2.0/gtk/gtktreeview.h:
+
+/usr/include/gtk-2.0/gtk/gtkdnd.h:
+
+/usr/include/gtk-2.0/gtk/gtkentry.h:
+
+/usr/include/gtk-2.0/gtk/gtkeditable.h:
+
+/usr/include/gtk-2.0/gtk/gtkimcontext.h:
+
+/usr/include/gtk-2.0/gtk/gtkentrycompletion.h:
+
+/usr/include/gtk-2.0/gtk/gtkliststore.h:
+
+/usr/include/gtk-2.0/gtk/gtktreemodelfilter.h:
+
+/usr/include/gtk-2.0/gtk/gtkcomboboxentry.h:
+
+/usr/include/gtk-2.0/gtk/gtkctree.h:
+
+/usr/include/gtk-2.0/gtk/gtkcurve.h:
+
+/usr/include/gtk-2.0/gtk/gtkdrawingarea.h:
+
+/usr/include/gtk-2.0/gtk/gtkeventbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkexpander.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilesel.h:
+
+/usr/include/gtk-2.0/gtk/gtkfixed.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilechooser.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilefilter.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilechooserdialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilechooser.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilechooserwidget.h:
+
+/usr/include/gtk-2.0/gtk/gtkfontbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkfontsel.h:
+
+/usr/include/gtk-2.0/gtk/gtkgamma.h:
+
+/usr/include/gtk-2.0/gtk/gtkgc.h:
+
+/usr/include/gtk-2.0/gtk/gtkhandlebox.h:
+
+/usr/include/gtk-2.0/gtk/gtkhbbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkhpaned.h:
+
+/usr/include/gtk-2.0/gtk/gtkpaned.h:
+
+/usr/include/gtk-2.0/gtk/gtkhruler.h:
+
+/usr/include/gtk-2.0/gtk/gtkruler.h:
+
+/usr/include/gtk-2.0/gtk/gtkhscale.h:
+
+/usr/include/gtk-2.0/gtk/gtkscale.h:
+
+/usr/include/gtk-2.0/gtk/gtkhseparator.h:
+
+/usr/include/gtk-2.0/gtk/gtkseparator.h:
+
+/usr/include/gtk-2.0/gtk/gtkiconfactory.h:
+
+/usr/include/gtk-2.0/gtk/gtkicontheme.h:
+
+/usr/include/gtk-2.0/gtk/gtkiconview.h:
+
+/usr/include/gtk-2.0/gtk/gtkimagemenuitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkimcontextsimple.h:
+
+/usr/include/gtk-2.0/gtk/gtkimmulticontext.h:
+
+/usr/include/gtk-2.0/gtk/gtkinputdialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkinvisible.h:
+
+/usr/include/gtk-2.0/gtk/gtklayout.h:
+
+/usr/include/gtk-2.0/gtk/gtklinkbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtklist.h:
+
+/usr/include/gtk-2.0/gtk/gtklistitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkmain.h:
+
+/usr/include/gtk-2.0/gtk/gtkmenubar.h:
+
+/usr/include/gtk-2.0/gtk/gtkmenutoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkmenu.h:
+
+/usr/include/gtk-2.0/gtk/gtktoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtktoolitem.h:
+
+/usr/include/gtk-2.0/gtk/gtktooltips.h:
+
+/usr/include/gtk-2.0/gtk/gtkmessagedialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkmodules.h:
+
+/usr/include/gtk-2.0/gtk/gtknotebook.h:
+
+/usr/include/gtk-2.0/gtk/gtkoldeditable.h:
+
+/usr/include/gtk-2.0/gtk/gtkoptionmenu.h:
+
+/usr/include/gtk-2.0/gtk/gtkpixmap.h:
+
+/usr/include/gtk-2.0/gtk/gtkplug.h:
+
+/usr/include/gtk-2.0/gtk/gtksocket.h:
+
+/usr/include/gtk-2.0/gtk/gtkpreview.h:
+
+/usr/include/gtk-2.0/gtk/gtkprintoperation.h:
+
+/usr/include/gtk-2.0/gtk/gtkmain.h:
+
+/usr/include/gtk-2.0/gtk/gtkenums.h:
+
+/usr/include/gtk-2.0/gtk/gtkwindow.h:
+
+/usr/include/gtk-2.0/gtk/gtkpagesetup.h:
+
+/usr/include/gtk-2.0/gtk/gtkpapersize.h:
+
+/usr/include/gtk-2.0/gtk/gtkprintsettings.h:
+
+/usr/include/gtk-2.0/gtk/gtkprintcontext.h:
+
+/usr/include/gtk-2.0/gtk/gtkprintoperationpreview.h:
+
+/usr/include/gtk-2.0/gtk/gtkprogress.h:
+
+/usr/include/gtk-2.0/gtk/gtkprogressbar.h:
+
+/usr/include/gtk-2.0/gtk/gtkradioaction.h:
+
+/usr/include/gtk-2.0/gtk/gtktoggleaction.h:
+
+/usr/include/gtk-2.0/gtk/gtkradiobutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkradiomenuitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkradiotoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtktoggletoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtktoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentchooser.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentmanager.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentfilter.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentchooserdialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentchooser.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentchoosermenu.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentchooserwidget.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentfilter.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentmanager.h:
+
+/usr/include/gtk-2.0/gtk/gtkscrolledwindow.h:
+
+/usr/include/gtk-2.0/gtk/gtkviewport.h:
+
+/usr/include/gtk-2.0/gtk/gtkseparatormenuitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkseparatortoolitem.h:
+
+/usr/include/gtk-2.0/gtk/gtksizegroup.h:
+
+/usr/include/gtk-2.0/gtk/gtkspinbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkstatusbar.h:
+
+/usr/include/gtk-2.0/gtk/gtkstatusicon.h:
+
+/usr/include/gtk-2.0/gtk/gtkstock.h:
+
+/usr/include/gtk-2.0/gtk/gtktable.h:
+
+/usr/include/gtk-2.0/gtk/gtktearoffmenuitem.h:
+
+/usr/include/gtk-2.0/gtk/gtktext.h:
+
+/usr/include/gtk-2.0/gtk/gtktextbuffer.h:
+
+/usr/include/gtk-2.0/gtk/gtktexttagtable.h:
+
+/usr/include/gtk-2.0/gtk/gtktextmark.h:
+
+/usr/include/gtk-2.0/gtk/gtktextbufferrichtext.h:
+
+/usr/include/gtk-2.0/gtk/gtktextview.h:
+
+/usr/include/gtk-2.0/gtk/gtktipsquery.h:
+
+/usr/include/gtk-2.0/gtk/gtktoggletoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtktoolbar.h:
+
+/usr/include/gtk-2.0/gtk/gtktoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtktoolitem.h:
+
+/usr/include/gtk-2.0/gtk/gtktree.h:
+
+/usr/include/gtk-2.0/gtk/gtktreednd.h:
+
+/usr/include/gtk-2.0/gtk/gtktreeitem.h:
+
+/usr/include/gtk-2.0/gtk/gtktreemodelsort.h:
+
+/usr/include/gtk-2.0/gtk/gtktreeselection.h:
+
+/usr/include/gtk-2.0/gtk/gtktreestore.h:
+
+/usr/include/gtk-2.0/gtk/gtkuimanager.h:
+
+/usr/include/gtk-2.0/gtk/gtkvbbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkversion.h:
+
+/usr/include/gtk-2.0/gtk/gtkvpaned.h:
+
+/usr/include/gtk-2.0/gtk/gtkvruler.h:
+
+/usr/include/gtk-2.0/gtk/gtkvscale.h:
+
+/usr/include/gtk-2.0/gtk/gtkvseparator.h:
+
+../config.h:
+
+sulekhaspell.h:
diff --git a/input-methods/sulekha/src/.deps/sulekhaspell.Po b/input-methods/sulekha/src/.deps/sulekhaspell.Po
new file mode 100644
index 0000000..24dd23a
--- /dev/null
+++ b/input-methods/sulekha/src/.deps/sulekhaspell.Po
@@ -0,0 +1,1151 @@
+sulekhaspell.o sulekhaspell.o: sulekhaspell.c \
+ /usr/include/gtk-2.0/gtk/gtk.h /usr/include/gtk-2.0/gdk/gdk.h \
+ /usr/include/gtk-2.0/gdk/gdkcairo.h /usr/include/gtk-2.0/gdk/gdkcolor.h \
+ /usr/include/cairo/cairo.h /usr/include/cairo/cairo-features.h \
+ /usr/include/cairo/cairo-deprecated.h \
+ /usr/include/gtk-2.0/gdk/gdktypes.h /usr/include/glib-2.0/glib.h \
+ /usr/include/glib-2.0/glib/galloca.h \
+ /usr/include/glib-2.0/glib/gtypes.h \
+ /usr/lib/glib-2.0/include/glibconfig.h \
+ /usr/include/glib-2.0/glib/gmacros.h \
+ /usr/lib/gcc/i486-linux-gnu/4.1.2/include/stddef.h \
+ /usr/lib/gcc/i486-linux-gnu/4.1.2/include/limits.h \
+ /usr/lib/gcc/i486-linux-gnu/4.1.2/include/syslimits.h \
+ /usr/include/limits.h /usr/include/features.h /usr/include/sys/cdefs.h \
+ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
+ /usr/include/gnu/stubs-32.h /usr/include/bits/posix1_lim.h \
+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
+ /usr/include/bits/posix2_lim.h \
+ /usr/lib/gcc/i486-linux-gnu/4.1.2/include/float.h \
+ /usr/include/glib-2.0/glib/garray.h \
+ /usr/include/glib-2.0/glib/gasyncqueue.h \
+ /usr/include/glib-2.0/glib/gthread.h \
+ /usr/include/glib-2.0/glib/gerror.h /usr/include/glib-2.0/glib/gquark.h \
+ /usr/include/glib-2.0/glib/gutils.h \
+ /usr/lib/gcc/i486-linux-gnu/4.1.2/include/stdarg.h \
+ /usr/include/glib-2.0/glib/gatomic.h \
+ /usr/include/glib-2.0/glib/gbacktrace.h \
+ /usr/include/glib-2.0/glib/gbase64.h \
+ /usr/include/glib-2.0/glib/gbookmarkfile.h /usr/include/time.h \
+ /usr/include/bits/time.h /usr/include/bits/types.h \
+ /usr/include/bits/typesizes.h /usr/include/glib-2.0/glib/gcache.h \
+ /usr/include/glib-2.0/glib/glist.h /usr/include/glib-2.0/glib/gmem.h \
+ /usr/include/glib-2.0/glib/gslice.h \
+ /usr/include/glib-2.0/glib/gcompletion.h \
+ /usr/include/glib-2.0/glib/gconvert.h \
+ /usr/include/glib-2.0/glib/gdataset.h \
+ /usr/include/glib-2.0/glib/gdate.h /usr/include/glib-2.0/glib/gdir.h \
+ /usr/include/glib-2.0/glib/gfileutils.h \
+ /usr/include/glib-2.0/glib/ghash.h /usr/include/glib-2.0/glib/ghook.h \
+ /usr/include/glib-2.0/glib/giochannel.h \
+ /usr/include/glib-2.0/glib/gmain.h /usr/include/glib-2.0/glib/gslist.h \
+ /usr/include/glib-2.0/glib/gstring.h \
+ /usr/include/glib-2.0/glib/gunicode.h \
+ /usr/include/glib-2.0/glib/gkeyfile.h \
+ /usr/include/glib-2.0/glib/gmappedfile.h \
+ /usr/include/glib-2.0/glib/gmarkup.h \
+ /usr/include/glib-2.0/glib/gmessages.h \
+ /usr/include/glib-2.0/glib/gnode.h /usr/include/glib-2.0/glib/goption.h \
+ /usr/include/glib-2.0/glib/gpattern.h \
+ /usr/include/glib-2.0/glib/gprimes.h \
+ /usr/include/glib-2.0/glib/gqsort.h /usr/include/glib-2.0/glib/gqueue.h \
+ /usr/include/glib-2.0/glib/grand.h /usr/include/glib-2.0/glib/grel.h \
+ /usr/include/glib-2.0/glib/gregex.h \
+ /usr/include/glib-2.0/glib/gscanner.h \
+ /usr/include/glib-2.0/glib/gsequence.h \
+ /usr/include/glib-2.0/glib/gshell.h /usr/include/glib-2.0/glib/gspawn.h \
+ /usr/include/glib-2.0/glib/gstrfuncs.h \
+ /usr/include/glib-2.0/glib/gthreadpool.h \
+ /usr/include/glib-2.0/glib/gtimer.h /usr/include/glib-2.0/glib/gtree.h \
+ /usr/include/pango-1.0/pango/pango.h \
+ /usr/include/pango-1.0/pango/pango-attributes.h \
+ /usr/include/pango-1.0/pango/pango-font.h \
+ /usr/include/pango-1.0/pango/pango-coverage.h \
+ /usr/include/pango-1.0/pango/pango-types.h \
+ /usr/include/glib-2.0/glib-object.h \
+ /usr/include/glib-2.0/gobject/gboxed.h \
+ /usr/include/glib-2.0/gobject/gtype.h \
+ /usr/include/glib-2.0/gobject/genums.h \
+ /usr/include/glib-2.0/gobject/gobject.h \
+ /usr/include/glib-2.0/gobject/gvalue.h \
+ /usr/include/glib-2.0/gobject/gparam.h \
+ /usr/include/glib-2.0/gobject/gclosure.h \
+ /usr/include/glib-2.0/gobject/gsignal.h \
+ /usr/include/glib-2.0/gobject/gmarshal.h \
+ /usr/include/glib-2.0/gobject/gparamspecs.h \
+ /usr/include/glib-2.0/gobject/gsourceclosure.h \
+ /usr/include/glib-2.0/gobject/gtypemodule.h \
+ /usr/include/glib-2.0/gobject/gtypeplugin.h \
+ /usr/include/glib-2.0/gobject/gvaluearray.h \
+ /usr/include/glib-2.0/gobject/gvaluetypes.h \
+ /usr/include/pango-1.0/pango/pango-gravity.h \
+ /usr/include/pango-1.0/pango/pango-matrix.h \
+ /usr/include/pango-1.0/pango/pango-script.h \
+ /usr/include/pango-1.0/pango/pango-language.h \
+ /usr/include/pango-1.0/pango/pango-break.h \
+ /usr/include/pango-1.0/pango/pango-item.h \
+ /usr/include/pango-1.0/pango/pango-context.h \
+ /usr/include/pango-1.0/pango/pango-fontmap.h \
+ /usr/include/pango-1.0/pango/pango-fontset.h \
+ /usr/include/pango-1.0/pango/pango-engine.h \
+ /usr/include/pango-1.0/pango/pango-glyph.h \
+ /usr/include/pango-1.0/pango/pango-enum-types.h \
+ /usr/include/pango-1.0/pango/pango-features.h \
+ /usr/include/pango-1.0/pango/pango-glyph-item.h \
+ /usr/include/pango-1.0/pango/pango-layout.h \
+ /usr/include/pango-1.0/pango/pango-tabs.h \
+ /usr/include/pango-1.0/pango/pango-renderer.h \
+ /usr/include/pango-1.0/pango/pango-utils.h /usr/include/stdio.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/include/bits/wchar.h /usr/include/gconv.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h /usr/lib/gtk-2.0/include/gdkconfig.h \
+ /usr/include/gtk-2.0/gdk/gdkpixbuf.h /usr/include/gtk-2.0/gdk/gdkrgb.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-features.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-core.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-transform.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-animation.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-simple-anim.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-io.h \
+ /usr/include/glib-2.0/gmodule.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-loader.h \
+ /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h \
+ /usr/include/pango-1.0/pango/pangocairo.h \
+ /usr/include/gtk-2.0/gdk/gdkcursor.h \
+ /usr/include/gtk-2.0/gdk/gdkdisplay.h \
+ /usr/include/gtk-2.0/gdk/gdkevents.h /usr/include/gtk-2.0/gdk/gdkdnd.h \
+ /usr/include/gtk-2.0/gdk/gdkinput.h \
+ /usr/include/gtk-2.0/gdk/gdkdrawable.h /usr/include/gtk-2.0/gdk/gdkgc.h \
+ /usr/include/gtk-2.0/gdk/gdkenumtypes.h \
+ /usr/include/gtk-2.0/gdk/gdkfont.h /usr/include/gtk-2.0/gdk/gdkimage.h \
+ /usr/include/gtk-2.0/gdk/gdkkeys.h \
+ /usr/include/gtk-2.0/gdk/gdkdisplaymanager.h \
+ /usr/include/gtk-2.0/gdk/gdkpango.h \
+ /usr/include/gtk-2.0/gdk/gdkpixmap.h \
+ /usr/include/gtk-2.0/gdk/gdkproperty.h \
+ /usr/include/gtk-2.0/gdk/gdkregion.h \
+ /usr/include/gtk-2.0/gdk/gdkscreen.h \
+ /usr/include/gtk-2.0/gdk/gdkselection.h \
+ /usr/include/gtk-2.0/gdk/gdkspawn.h \
+ /usr/include/gtk-2.0/gdk/gdkvisual.h \
+ /usr/include/gtk-2.0/gdk/gdkwindow.h \
+ /usr/include/gtk-2.0/gtk/gtkaboutdialog.h \
+ /usr/include/gtk-2.0/gtk/gtkdialog.h \
+ /usr/include/gtk-2.0/gtk/gtkwindow.h \
+ /usr/include/gtk-2.0/gtk/gtkaccelgroup.h \
+ /usr/include/gtk-2.0/gtk/gtkenums.h /usr/include/gtk-2.0/gtk/gtkbin.h \
+ /usr/include/gtk-2.0/gtk/gtkcontainer.h \
+ /usr/include/gtk-2.0/gtk/gtkwidget.h \
+ /usr/include/gtk-2.0/gtk/gtkobject.h \
+ /usr/include/gtk-2.0/gtk/gtktypeutils.h \
+ /usr/include/gtk-2.0/gtk/gtktypebuiltins.h \
+ /usr/include/gtk-2.0/gtk/gtkdebug.h \
+ /usr/include/gtk-2.0/gtk/gtkadjustment.h \
+ /usr/include/gtk-2.0/gtk/gtkstyle.h \
+ /usr/include/gtk-2.0/gtk/gtksettings.h /usr/include/gtk-2.0/gtk/gtkrc.h \
+ /usr/include/atk-1.0/atk/atkobject.h \
+ /usr/include/atk-1.0/atk/atkstate.h \
+ /usr/include/atk-1.0/atk/atkrelationtype.h \
+ /usr/include/gtk-2.0/gtk/gtkaccellabel.h \
+ /usr/include/gtk-2.0/gtk/gtklabel.h /usr/include/gtk-2.0/gtk/gtkmisc.h \
+ /usr/include/gtk-2.0/gtk/gtkmenu.h \
+ /usr/include/gtk-2.0/gtk/gtkmenushell.h \
+ /usr/include/gtk-2.0/gtk/gtkaccelmap.h \
+ /usr/include/gtk-2.0/gtk/gtkaccessible.h /usr/include/atk-1.0/atk/atk.h \
+ /usr/include/atk-1.0/atk/atkaction.h \
+ /usr/include/atk-1.0/atk/atkcomponent.h \
+ /usr/include/atk-1.0/atk/atkutil.h \
+ /usr/include/atk-1.0/atk/atkdocument.h \
+ /usr/include/atk-1.0/atk/atkeditabletext.h \
+ /usr/include/atk-1.0/atk/atktext.h \
+ /usr/include/atk-1.0/atk/atkgobjectaccessible.h \
+ /usr/include/atk-1.0/atk/atkhyperlink.h \
+ /usr/include/atk-1.0/atk/atkhyperlinkimpl.h \
+ /usr/include/atk-1.0/atk/atkhypertext.h \
+ /usr/include/atk-1.0/atk/atkimage.h \
+ /usr/include/atk-1.0/atk/atknoopobject.h \
+ /usr/include/atk-1.0/atk/atknoopobjectfactory.h \
+ /usr/include/atk-1.0/atk/atkobjectfactory.h \
+ /usr/include/atk-1.0/atk/atkregistry.h \
+ /usr/include/atk-1.0/atk/atkobjectfactory.h \
+ /usr/include/atk-1.0/atk/atkrelation.h \
+ /usr/include/atk-1.0/atk/atkrelationset.h \
+ /usr/include/atk-1.0/atk/atkselection.h \
+ /usr/include/atk-1.0/atk/atkstateset.h \
+ /usr/include/atk-1.0/atk/atkstreamablecontent.h \
+ /usr/include/atk-1.0/atk/atktable.h /usr/include/atk-1.0/atk/atkmisc.h \
+ /usr/include/atk-1.0/atk/atkvalue.h \
+ /usr/include/gtk-2.0/gtk/gtkaction.h \
+ /usr/include/gtk-2.0/gtk/gtkactiongroup.h \
+ /usr/include/gtk-2.0/gtk/gtkitemfactory.h \
+ /usr/include/gtk-2.0/gtk/gtkalignment.h \
+ /usr/include/gtk-2.0/gtk/gtkarrow.h \
+ /usr/include/gtk-2.0/gtk/gtkaspectframe.h \
+ /usr/include/gtk-2.0/gtk/gtkframe.h \
+ /usr/include/gtk-2.0/gtk/gtkassistant.h \
+ /usr/include/gtk-2.0/gtk/gtkbbox.h /usr/include/gtk-2.0/gtk/gtkbox.h \
+ /usr/include/gtk-2.0/gtk/gtkbindings.h \
+ /usr/include/gtk-2.0/gtk/gtkbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkimage.h \
+ /usr/include/gtk-2.0/gtk/gtkcalendar.h \
+ /usr/include/gtk-2.0/gtk/gtksignal.h \
+ /usr/include/gtk-2.0/gtk/gtkmarshal.h \
+ /usr/include/gtk-2.0/gtk/gtkcelllayout.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrenderer.h \
+ /usr/include/gtk-2.0/gtk/gtkcelleditable.h \
+ /usr/include/gtk-2.0/gtk/gtktreeviewcolumn.h \
+ /usr/include/gtk-2.0/gtk/gtktreemodel.h \
+ /usr/include/gtk-2.0/gtk/gtktreesortable.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrendereraccel.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrenderertext.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrenderercombo.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrenderertext.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrendererprogress.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrendererspin.h \
+ /usr/include/gtk-2.0/gtk/gtkcellrenderertoggle.h \
+ /usr/include/gtk-2.0/gtk/gtkcellview.h \
+ /usr/include/gtk-2.0/gtk/gtkcheckbutton.h \
+ /usr/include/gtk-2.0/gtk/gtktogglebutton.h \
+ /usr/include/gtk-2.0/gtk/gtkcheckmenuitem.h \
+ /usr/include/gtk-2.0/gtk/gtkmenuitem.h \
+ /usr/include/gtk-2.0/gtk/gtkitem.h \
+ /usr/include/gtk-2.0/gtk/gtkclipboard.h \
+ /usr/include/gtk-2.0/gtk/gtkselection.h \
+ /usr/include/gtk-2.0/gtk/gtktextiter.h \
+ /usr/include/gtk-2.0/gtk/gtktexttag.h \
+ /usr/include/gtk-2.0/gtk/gtktextchild.h \
+ /usr/include/gtk-2.0/gtk/gtkclist.h \
+ /usr/include/gtk-2.0/gtk/gtkhscrollbar.h \
+ /usr/include/gtk-2.0/gtk/gtkscrollbar.h \
+ /usr/include/gtk-2.0/gtk/gtkrange.h \
+ /usr/include/gtk-2.0/gtk/gtkvscrollbar.h \
+ /usr/include/gtk-2.0/gtk/gtkcolorbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkcolorsel.h \
+ /usr/include/gtk-2.0/gtk/gtkvbox.h \
+ /usr/include/gtk-2.0/gtk/gtkcolorseldialog.h \
+ /usr/include/gtk-2.0/gtk/gtkcombo.h /usr/include/gtk-2.0/gtk/gtkhbox.h \
+ /usr/include/gtk-2.0/gtk/gtkcombobox.h \
+ /usr/include/gtk-2.0/gtk/gtktreeview.h \
+ /usr/include/gtk-2.0/gtk/gtkdnd.h /usr/include/gtk-2.0/gtk/gtkentry.h \
+ /usr/include/gtk-2.0/gtk/gtkeditable.h \
+ /usr/include/gtk-2.0/gtk/gtkimcontext.h \
+ /usr/include/gtk-2.0/gtk/gtkentrycompletion.h \
+ /usr/include/gtk-2.0/gtk/gtkliststore.h \
+ /usr/include/gtk-2.0/gtk/gtktreemodelfilter.h \
+ /usr/include/gtk-2.0/gtk/gtkcomboboxentry.h \
+ /usr/include/gtk-2.0/gtk/gtkctree.h /usr/include/gtk-2.0/gtk/gtkcurve.h \
+ /usr/include/gtk-2.0/gtk/gtkdrawingarea.h \
+ /usr/include/gtk-2.0/gtk/gtkeventbox.h \
+ /usr/include/gtk-2.0/gtk/gtkexpander.h \
+ /usr/include/gtk-2.0/gtk/gtkfilesel.h \
+ /usr/include/gtk-2.0/gtk/gtkfixed.h \
+ /usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkfilechooser.h \
+ /usr/include/gtk-2.0/gtk/gtkfilefilter.h \
+ /usr/include/gtk-2.0/gtk/gtkfilechooserdialog.h \
+ /usr/include/gtk-2.0/gtk/gtkfilechooser.h \
+ /usr/include/gtk-2.0/gtk/gtkfilechooserwidget.h \
+ /usr/include/gtk-2.0/gtk/gtkfontbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkfontsel.h \
+ /usr/include/gtk-2.0/gtk/gtkgamma.h /usr/include/gtk-2.0/gtk/gtkgc.h \
+ /usr/include/gtk-2.0/gtk/gtkhandlebox.h \
+ /usr/include/gtk-2.0/gtk/gtkhbbox.h \
+ /usr/include/gtk-2.0/gtk/gtkhpaned.h \
+ /usr/include/gtk-2.0/gtk/gtkpaned.h \
+ /usr/include/gtk-2.0/gtk/gtkhruler.h \
+ /usr/include/gtk-2.0/gtk/gtkruler.h \
+ /usr/include/gtk-2.0/gtk/gtkhscale.h \
+ /usr/include/gtk-2.0/gtk/gtkscale.h \
+ /usr/include/gtk-2.0/gtk/gtkhseparator.h \
+ /usr/include/gtk-2.0/gtk/gtkseparator.h \
+ /usr/include/gtk-2.0/gtk/gtkiconfactory.h \
+ /usr/include/gtk-2.0/gtk/gtkicontheme.h \
+ /usr/include/gtk-2.0/gtk/gtkiconview.h \
+ /usr/include/gtk-2.0/gtk/gtkimagemenuitem.h \
+ /usr/include/gtk-2.0/gtk/gtkimcontextsimple.h \
+ /usr/include/gtk-2.0/gtk/gtkimmulticontext.h \
+ /usr/include/gtk-2.0/gtk/gtkinputdialog.h \
+ /usr/include/gtk-2.0/gtk/gtkinvisible.h \
+ /usr/include/gtk-2.0/gtk/gtklayout.h \
+ /usr/include/gtk-2.0/gtk/gtklinkbutton.h \
+ /usr/include/gtk-2.0/gtk/gtklist.h \
+ /usr/include/gtk-2.0/gtk/gtklistitem.h \
+ /usr/include/gtk-2.0/gtk/gtkmain.h \
+ /usr/include/gtk-2.0/gtk/gtkmenubar.h \
+ /usr/include/gtk-2.0/gtk/gtkmenutoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkmenu.h \
+ /usr/include/gtk-2.0/gtk/gtktoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtktoolitem.h \
+ /usr/include/gtk-2.0/gtk/gtktooltips.h \
+ /usr/include/gtk-2.0/gtk/gtkmessagedialog.h \
+ /usr/include/gtk-2.0/gtk/gtkmodules.h \
+ /usr/include/gtk-2.0/gtk/gtknotebook.h \
+ /usr/include/gtk-2.0/gtk/gtkoldeditable.h \
+ /usr/include/gtk-2.0/gtk/gtkoptionmenu.h \
+ /usr/include/gtk-2.0/gtk/gtkpixmap.h /usr/include/gtk-2.0/gtk/gtkplug.h \
+ /usr/include/gtk-2.0/gtk/gtksocket.h \
+ /usr/include/gtk-2.0/gtk/gtkpreview.h \
+ /usr/include/gtk-2.0/gtk/gtkprintoperation.h \
+ /usr/include/gtk-2.0/gtk/gtkmain.h /usr/include/gtk-2.0/gtk/gtkenums.h \
+ /usr/include/gtk-2.0/gtk/gtkwindow.h \
+ /usr/include/gtk-2.0/gtk/gtkpagesetup.h \
+ /usr/include/gtk-2.0/gtk/gtkpapersize.h \
+ /usr/include/gtk-2.0/gtk/gtkprintsettings.h \
+ /usr/include/gtk-2.0/gtk/gtkprintcontext.h \
+ /usr/include/gtk-2.0/gtk/gtkprintoperationpreview.h \
+ /usr/include/gtk-2.0/gtk/gtkprogress.h \
+ /usr/include/gtk-2.0/gtk/gtkprogressbar.h \
+ /usr/include/gtk-2.0/gtk/gtkradioaction.h \
+ /usr/include/gtk-2.0/gtk/gtktoggleaction.h \
+ /usr/include/gtk-2.0/gtk/gtkradiobutton.h \
+ /usr/include/gtk-2.0/gtk/gtkradiomenuitem.h \
+ /usr/include/gtk-2.0/gtk/gtkradiotoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtktoggletoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtktoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentchooser.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentmanager.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentfilter.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentchooserdialog.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentchooser.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentchoosermenu.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentchooserwidget.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentfilter.h \
+ /usr/include/gtk-2.0/gtk/gtkrecentmanager.h \
+ /usr/include/gtk-2.0/gtk/gtkscrolledwindow.h \
+ /usr/include/gtk-2.0/gtk/gtkviewport.h \
+ /usr/include/gtk-2.0/gtk/gtkseparatormenuitem.h \
+ /usr/include/gtk-2.0/gtk/gtkseparatortoolitem.h \
+ /usr/include/gtk-2.0/gtk/gtksizegroup.h \
+ /usr/include/gtk-2.0/gtk/gtkspinbutton.h \
+ /usr/include/gtk-2.0/gtk/gtkstatusbar.h \
+ /usr/include/gtk-2.0/gtk/gtkstatusicon.h \
+ /usr/include/gtk-2.0/gtk/gtkstock.h /usr/include/gtk-2.0/gtk/gtktable.h \
+ /usr/include/gtk-2.0/gtk/gtktearoffmenuitem.h \
+ /usr/include/gtk-2.0/gtk/gtktext.h \
+ /usr/include/gtk-2.0/gtk/gtktextbuffer.h \
+ /usr/include/gtk-2.0/gtk/gtktexttagtable.h \
+ /usr/include/gtk-2.0/gtk/gtktextmark.h \
+ /usr/include/gtk-2.0/gtk/gtktextbufferrichtext.h \
+ /usr/include/gtk-2.0/gtk/gtktextview.h \
+ /usr/include/gtk-2.0/gtk/gtktipsquery.h \
+ /usr/include/gtk-2.0/gtk/gtktoggletoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtktoolbar.h \
+ /usr/include/gtk-2.0/gtk/gtktoolbutton.h \
+ /usr/include/gtk-2.0/gtk/gtktoolitem.h \
+ /usr/include/gtk-2.0/gtk/gtktree.h \
+ /usr/include/gtk-2.0/gtk/gtktreednd.h \
+ /usr/include/gtk-2.0/gtk/gtktreeitem.h \
+ /usr/include/gtk-2.0/gtk/gtktreemodelsort.h \
+ /usr/include/gtk-2.0/gtk/gtktreeselection.h \
+ /usr/include/gtk-2.0/gtk/gtktreestore.h \
+ /usr/include/gtk-2.0/gtk/gtkuimanager.h \
+ /usr/include/gtk-2.0/gtk/gtkvbbox.h \
+ /usr/include/gtk-2.0/gtk/gtkversion.h \
+ /usr/include/gtk-2.0/gtk/gtkvpaned.h \
+ /usr/include/gtk-2.0/gtk/gtkvruler.h \
+ /usr/include/gtk-2.0/gtk/gtkvscale.h \
+ /usr/include/gtk-2.0/gtk/gtkvseparator.h /usr/include/libintl.h \
+ /usr/include/locale.h /usr/include/bits/locale.h ../config.h \
+ sulekhaspell.h transliteration.h /usr/include/aspell.h
+
+/usr/include/gtk-2.0/gtk/gtk.h:
+
+/usr/include/gtk-2.0/gdk/gdk.h:
+
+/usr/include/gtk-2.0/gdk/gdkcairo.h:
+
+/usr/include/gtk-2.0/gdk/gdkcolor.h:
+
+/usr/include/cairo/cairo.h:
+
+/usr/include/cairo/cairo-features.h:
+
+/usr/include/cairo/cairo-deprecated.h:
+
+/usr/include/gtk-2.0/gdk/gdktypes.h:
+
+/usr/include/glib-2.0/glib.h:
+
+/usr/include/glib-2.0/glib/galloca.h:
+
+/usr/include/glib-2.0/glib/gtypes.h:
+
+/usr/lib/glib-2.0/include/glibconfig.h:
+
+/usr/include/glib-2.0/glib/gmacros.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.1.2/include/stddef.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.1.2/include/limits.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.1.2/include/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/features.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-32.h:
+
+/usr/include/bits/posix1_lim.h:
+
+/usr/include/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/bits/posix2_lim.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.1.2/include/float.h:
+
+/usr/include/glib-2.0/glib/garray.h:
+
+/usr/include/glib-2.0/glib/gasyncqueue.h:
+
+/usr/include/glib-2.0/glib/gthread.h:
+
+/usr/include/glib-2.0/glib/gerror.h:
+
+/usr/include/glib-2.0/glib/gquark.h:
+
+/usr/include/glib-2.0/glib/gutils.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.1.2/include/stdarg.h:
+
+/usr/include/glib-2.0/glib/gatomic.h:
+
+/usr/include/glib-2.0/glib/gbacktrace.h:
+
+/usr/include/glib-2.0/glib/gbase64.h:
+
+/usr/include/glib-2.0/glib/gbookmarkfile.h:
+
+/usr/include/time.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/glib-2.0/glib/gcache.h:
+
+/usr/include/glib-2.0/glib/glist.h:
+
+/usr/include/glib-2.0/glib/gmem.h:
+
+/usr/include/glib-2.0/glib/gslice.h:
+
+/usr/include/glib-2.0/glib/gcompletion.h:
+
+/usr/include/glib-2.0/glib/gconvert.h:
+
+/usr/include/glib-2.0/glib/gdataset.h:
+
+/usr/include/glib-2.0/glib/gdate.h:
+
+/usr/include/glib-2.0/glib/gdir.h:
+
+/usr/include/glib-2.0/glib/gfileutils.h:
+
+/usr/include/glib-2.0/glib/ghash.h:
+
+/usr/include/glib-2.0/glib/ghook.h:
+
+/usr/include/glib-2.0/glib/giochannel.h:
+
+/usr/include/glib-2.0/glib/gmain.h:
+
+/usr/include/glib-2.0/glib/gslist.h:
+
+/usr/include/glib-2.0/glib/gstring.h:
+
+/usr/include/glib-2.0/glib/gunicode.h:
+
+/usr/include/glib-2.0/glib/gkeyfile.h:
+
+/usr/include/glib-2.0/glib/gmappedfile.h:
+
+/usr/include/glib-2.0/glib/gmarkup.h:
+
+/usr/include/glib-2.0/glib/gmessages.h:
+
+/usr/include/glib-2.0/glib/gnode.h:
+
+/usr/include/glib-2.0/glib/goption.h:
+
+/usr/include/glib-2.0/glib/gpattern.h:
+
+/usr/include/glib-2.0/glib/gprimes.h:
+
+/usr/include/glib-2.0/glib/gqsort.h:
+
+/usr/include/glib-2.0/glib/gqueue.h:
+
+/usr/include/glib-2.0/glib/grand.h:
+
+/usr/include/glib-2.0/glib/grel.h:
+
+/usr/include/glib-2.0/glib/gregex.h:
+
+/usr/include/glib-2.0/glib/gscanner.h:
+
+/usr/include/glib-2.0/glib/gsequence.h:
+
+/usr/include/glib-2.0/glib/gshell.h:
+
+/usr/include/glib-2.0/glib/gspawn.h:
+
+/usr/include/glib-2.0/glib/gstrfuncs.h:
+
+/usr/include/glib-2.0/glib/gthreadpool.h:
+
+/usr/include/glib-2.0/glib/gtimer.h:
+
+/usr/include/glib-2.0/glib/gtree.h:
+
+/usr/include/pango-1.0/pango/pango.h:
+
+/usr/include/pango-1.0/pango/pango-attributes.h:
+
+/usr/include/pango-1.0/pango/pango-font.h:
+
+/usr/include/pango-1.0/pango/pango-coverage.h:
+
+/usr/include/pango-1.0/pango/pango-types.h:
+
+/usr/include/glib-2.0/glib-object.h:
+
+/usr/include/glib-2.0/gobject/gboxed.h:
+
+/usr/include/glib-2.0/gobject/gtype.h:
+
+/usr/include/glib-2.0/gobject/genums.h:
+
+/usr/include/glib-2.0/gobject/gobject.h:
+
+/usr/include/glib-2.0/gobject/gvalue.h:
+
+/usr/include/glib-2.0/gobject/gparam.h:
+
+/usr/include/glib-2.0/gobject/gclosure.h:
+
+/usr/include/glib-2.0/gobject/gsignal.h:
+
+/usr/include/glib-2.0/gobject/gmarshal.h:
+
+/usr/include/glib-2.0/gobject/gparamspecs.h:
+
+/usr/include/glib-2.0/gobject/gsourceclosure.h:
+
+/usr/include/glib-2.0/gobject/gtypemodule.h:
+
+/usr/include/glib-2.0/gobject/gtypeplugin.h:
+
+/usr/include/glib-2.0/gobject/gvaluearray.h:
+
+/usr/include/glib-2.0/gobject/gvaluetypes.h:
+
+/usr/include/pango-1.0/pango/pango-gravity.h:
+
+/usr/include/pango-1.0/pango/pango-matrix.h:
+
+/usr/include/pango-1.0/pango/pango-script.h:
+
+/usr/include/pango-1.0/pango/pango-language.h:
+
+/usr/include/pango-1.0/pango/pango-break.h:
+
+/usr/include/pango-1.0/pango/pango-item.h:
+
+/usr/include/pango-1.0/pango/pango-context.h:
+
+/usr/include/pango-1.0/pango/pango-fontmap.h:
+
+/usr/include/pango-1.0/pango/pango-fontset.h:
+
+/usr/include/pango-1.0/pango/pango-engine.h:
+
+/usr/include/pango-1.0/pango/pango-glyph.h:
+
+/usr/include/pango-1.0/pango/pango-enum-types.h:
+
+/usr/include/pango-1.0/pango/pango-features.h:
+
+/usr/include/pango-1.0/pango/pango-glyph-item.h:
+
+/usr/include/pango-1.0/pango/pango-layout.h:
+
+/usr/include/pango-1.0/pango/pango-tabs.h:
+
+/usr/include/pango-1.0/pango/pango-renderer.h:
+
+/usr/include/pango-1.0/pango/pango-utils.h:
+
+/usr/include/stdio.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/gconv.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/lib/gtk-2.0/include/gdkconfig.h:
+
+/usr/include/gtk-2.0/gdk/gdkpixbuf.h:
+
+/usr/include/gtk-2.0/gdk/gdkrgb.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-features.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-core.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-transform.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-animation.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-simple-anim.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-io.h:
+
+/usr/include/glib-2.0/gmodule.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-loader.h:
+
+/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h:
+
+/usr/include/pango-1.0/pango/pangocairo.h:
+
+/usr/include/gtk-2.0/gdk/gdkcursor.h:
+
+/usr/include/gtk-2.0/gdk/gdkdisplay.h:
+
+/usr/include/gtk-2.0/gdk/gdkevents.h:
+
+/usr/include/gtk-2.0/gdk/gdkdnd.h:
+
+/usr/include/gtk-2.0/gdk/gdkinput.h:
+
+/usr/include/gtk-2.0/gdk/gdkdrawable.h:
+
+/usr/include/gtk-2.0/gdk/gdkgc.h:
+
+/usr/include/gtk-2.0/gdk/gdkenumtypes.h:
+
+/usr/include/gtk-2.0/gdk/gdkfont.h:
+
+/usr/include/gtk-2.0/gdk/gdkimage.h:
+
+/usr/include/gtk-2.0/gdk/gdkkeys.h:
+
+/usr/include/gtk-2.0/gdk/gdkdisplaymanager.h:
+
+/usr/include/gtk-2.0/gdk/gdkpango.h:
+
+/usr/include/gtk-2.0/gdk/gdkpixmap.h:
+
+/usr/include/gtk-2.0/gdk/gdkproperty.h:
+
+/usr/include/gtk-2.0/gdk/gdkregion.h:
+
+/usr/include/gtk-2.0/gdk/gdkscreen.h:
+
+/usr/include/gtk-2.0/gdk/gdkselection.h:
+
+/usr/include/gtk-2.0/gdk/gdkspawn.h:
+
+/usr/include/gtk-2.0/gdk/gdkvisual.h:
+
+/usr/include/gtk-2.0/gdk/gdkwindow.h:
+
+/usr/include/gtk-2.0/gtk/gtkaboutdialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkdialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkwindow.h:
+
+/usr/include/gtk-2.0/gtk/gtkaccelgroup.h:
+
+/usr/include/gtk-2.0/gtk/gtkenums.h:
+
+/usr/include/gtk-2.0/gtk/gtkbin.h:
+
+/usr/include/gtk-2.0/gtk/gtkcontainer.h:
+
+/usr/include/gtk-2.0/gtk/gtkwidget.h:
+
+/usr/include/gtk-2.0/gtk/gtkobject.h:
+
+/usr/include/gtk-2.0/gtk/gtktypeutils.h:
+
+/usr/include/gtk-2.0/gtk/gtktypebuiltins.h:
+
+/usr/include/gtk-2.0/gtk/gtkdebug.h:
+
+/usr/include/gtk-2.0/gtk/gtkadjustment.h:
+
+/usr/include/gtk-2.0/gtk/gtkstyle.h:
+
+/usr/include/gtk-2.0/gtk/gtksettings.h:
+
+/usr/include/gtk-2.0/gtk/gtkrc.h:
+
+/usr/include/atk-1.0/atk/atkobject.h:
+
+/usr/include/atk-1.0/atk/atkstate.h:
+
+/usr/include/atk-1.0/atk/atkrelationtype.h:
+
+/usr/include/gtk-2.0/gtk/gtkaccellabel.h:
+
+/usr/include/gtk-2.0/gtk/gtklabel.h:
+
+/usr/include/gtk-2.0/gtk/gtkmisc.h:
+
+/usr/include/gtk-2.0/gtk/gtkmenu.h:
+
+/usr/include/gtk-2.0/gtk/gtkmenushell.h:
+
+/usr/include/gtk-2.0/gtk/gtkaccelmap.h:
+
+/usr/include/gtk-2.0/gtk/gtkaccessible.h:
+
+/usr/include/atk-1.0/atk/atk.h:
+
+/usr/include/atk-1.0/atk/atkaction.h:
+
+/usr/include/atk-1.0/atk/atkcomponent.h:
+
+/usr/include/atk-1.0/atk/atkutil.h:
+
+/usr/include/atk-1.0/atk/atkdocument.h:
+
+/usr/include/atk-1.0/atk/atkeditabletext.h:
+
+/usr/include/atk-1.0/atk/atktext.h:
+
+/usr/include/atk-1.0/atk/atkgobjectaccessible.h:
+
+/usr/include/atk-1.0/atk/atkhyperlink.h:
+
+/usr/include/atk-1.0/atk/atkhyperlinkimpl.h:
+
+/usr/include/atk-1.0/atk/atkhypertext.h:
+
+/usr/include/atk-1.0/atk/atkimage.h:
+
+/usr/include/atk-1.0/atk/atknoopobject.h:
+
+/usr/include/atk-1.0/atk/atknoopobjectfactory.h:
+
+/usr/include/atk-1.0/atk/atkobjectfactory.h:
+
+/usr/include/atk-1.0/atk/atkregistry.h:
+
+/usr/include/atk-1.0/atk/atkobjectfactory.h:
+
+/usr/include/atk-1.0/atk/atkrelation.h:
+
+/usr/include/atk-1.0/atk/atkrelationset.h:
+
+/usr/include/atk-1.0/atk/atkselection.h:
+
+/usr/include/atk-1.0/atk/atkstateset.h:
+
+/usr/include/atk-1.0/atk/atkstreamablecontent.h:
+
+/usr/include/atk-1.0/atk/atktable.h:
+
+/usr/include/atk-1.0/atk/atkmisc.h:
+
+/usr/include/atk-1.0/atk/atkvalue.h:
+
+/usr/include/gtk-2.0/gtk/gtkaction.h:
+
+/usr/include/gtk-2.0/gtk/gtkactiongroup.h:
+
+/usr/include/gtk-2.0/gtk/gtkitemfactory.h:
+
+/usr/include/gtk-2.0/gtk/gtkalignment.h:
+
+/usr/include/gtk-2.0/gtk/gtkarrow.h:
+
+/usr/include/gtk-2.0/gtk/gtkaspectframe.h:
+
+/usr/include/gtk-2.0/gtk/gtkframe.h:
+
+/usr/include/gtk-2.0/gtk/gtkassistant.h:
+
+/usr/include/gtk-2.0/gtk/gtkbbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkbindings.h:
+
+/usr/include/gtk-2.0/gtk/gtkbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkimage.h:
+
+/usr/include/gtk-2.0/gtk/gtkcalendar.h:
+
+/usr/include/gtk-2.0/gtk/gtksignal.h:
+
+/usr/include/gtk-2.0/gtk/gtkmarshal.h:
+
+/usr/include/gtk-2.0/gtk/gtkcelllayout.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrenderer.h:
+
+/usr/include/gtk-2.0/gtk/gtkcelleditable.h:
+
+/usr/include/gtk-2.0/gtk/gtktreeviewcolumn.h:
+
+/usr/include/gtk-2.0/gtk/gtktreemodel.h:
+
+/usr/include/gtk-2.0/gtk/gtktreesortable.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrendereraccel.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrenderertext.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrenderercombo.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrenderertext.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrendererprogress.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrendererspin.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellrenderertoggle.h:
+
+/usr/include/gtk-2.0/gtk/gtkcellview.h:
+
+/usr/include/gtk-2.0/gtk/gtkcheckbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtktogglebutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkcheckmenuitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkmenuitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkclipboard.h:
+
+/usr/include/gtk-2.0/gtk/gtkselection.h:
+
+/usr/include/gtk-2.0/gtk/gtktextiter.h:
+
+/usr/include/gtk-2.0/gtk/gtktexttag.h:
+
+/usr/include/gtk-2.0/gtk/gtktextchild.h:
+
+/usr/include/gtk-2.0/gtk/gtkclist.h:
+
+/usr/include/gtk-2.0/gtk/gtkhscrollbar.h:
+
+/usr/include/gtk-2.0/gtk/gtkscrollbar.h:
+
+/usr/include/gtk-2.0/gtk/gtkrange.h:
+
+/usr/include/gtk-2.0/gtk/gtkvscrollbar.h:
+
+/usr/include/gtk-2.0/gtk/gtkcolorbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkcolorsel.h:
+
+/usr/include/gtk-2.0/gtk/gtkvbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkcolorseldialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkcombo.h:
+
+/usr/include/gtk-2.0/gtk/gtkhbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkcombobox.h:
+
+/usr/include/gtk-2.0/gtk/gtktreeview.h:
+
+/usr/include/gtk-2.0/gtk/gtkdnd.h:
+
+/usr/include/gtk-2.0/gtk/gtkentry.h:
+
+/usr/include/gtk-2.0/gtk/gtkeditable.h:
+
+/usr/include/gtk-2.0/gtk/gtkimcontext.h:
+
+/usr/include/gtk-2.0/gtk/gtkentrycompletion.h:
+
+/usr/include/gtk-2.0/gtk/gtkliststore.h:
+
+/usr/include/gtk-2.0/gtk/gtktreemodelfilter.h:
+
+/usr/include/gtk-2.0/gtk/gtkcomboboxentry.h:
+
+/usr/include/gtk-2.0/gtk/gtkctree.h:
+
+/usr/include/gtk-2.0/gtk/gtkcurve.h:
+
+/usr/include/gtk-2.0/gtk/gtkdrawingarea.h:
+
+/usr/include/gtk-2.0/gtk/gtkeventbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkexpander.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilesel.h:
+
+/usr/include/gtk-2.0/gtk/gtkfixed.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilechooser.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilefilter.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilechooserdialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilechooser.h:
+
+/usr/include/gtk-2.0/gtk/gtkfilechooserwidget.h:
+
+/usr/include/gtk-2.0/gtk/gtkfontbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkfontsel.h:
+
+/usr/include/gtk-2.0/gtk/gtkgamma.h:
+
+/usr/include/gtk-2.0/gtk/gtkgc.h:
+
+/usr/include/gtk-2.0/gtk/gtkhandlebox.h:
+
+/usr/include/gtk-2.0/gtk/gtkhbbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkhpaned.h:
+
+/usr/include/gtk-2.0/gtk/gtkpaned.h:
+
+/usr/include/gtk-2.0/gtk/gtkhruler.h:
+
+/usr/include/gtk-2.0/gtk/gtkruler.h:
+
+/usr/include/gtk-2.0/gtk/gtkhscale.h:
+
+/usr/include/gtk-2.0/gtk/gtkscale.h:
+
+/usr/include/gtk-2.0/gtk/gtkhseparator.h:
+
+/usr/include/gtk-2.0/gtk/gtkseparator.h:
+
+/usr/include/gtk-2.0/gtk/gtkiconfactory.h:
+
+/usr/include/gtk-2.0/gtk/gtkicontheme.h:
+
+/usr/include/gtk-2.0/gtk/gtkiconview.h:
+
+/usr/include/gtk-2.0/gtk/gtkimagemenuitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkimcontextsimple.h:
+
+/usr/include/gtk-2.0/gtk/gtkimmulticontext.h:
+
+/usr/include/gtk-2.0/gtk/gtkinputdialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkinvisible.h:
+
+/usr/include/gtk-2.0/gtk/gtklayout.h:
+
+/usr/include/gtk-2.0/gtk/gtklinkbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtklist.h:
+
+/usr/include/gtk-2.0/gtk/gtklistitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkmain.h:
+
+/usr/include/gtk-2.0/gtk/gtkmenubar.h:
+
+/usr/include/gtk-2.0/gtk/gtkmenutoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkmenu.h:
+
+/usr/include/gtk-2.0/gtk/gtktoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtktoolitem.h:
+
+/usr/include/gtk-2.0/gtk/gtktooltips.h:
+
+/usr/include/gtk-2.0/gtk/gtkmessagedialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkmodules.h:
+
+/usr/include/gtk-2.0/gtk/gtknotebook.h:
+
+/usr/include/gtk-2.0/gtk/gtkoldeditable.h:
+
+/usr/include/gtk-2.0/gtk/gtkoptionmenu.h:
+
+/usr/include/gtk-2.0/gtk/gtkpixmap.h:
+
+/usr/include/gtk-2.0/gtk/gtkplug.h:
+
+/usr/include/gtk-2.0/gtk/gtksocket.h:
+
+/usr/include/gtk-2.0/gtk/gtkpreview.h:
+
+/usr/include/gtk-2.0/gtk/gtkprintoperation.h:
+
+/usr/include/gtk-2.0/gtk/gtkmain.h:
+
+/usr/include/gtk-2.0/gtk/gtkenums.h:
+
+/usr/include/gtk-2.0/gtk/gtkwindow.h:
+
+/usr/include/gtk-2.0/gtk/gtkpagesetup.h:
+
+/usr/include/gtk-2.0/gtk/gtkpapersize.h:
+
+/usr/include/gtk-2.0/gtk/gtkprintsettings.h:
+
+/usr/include/gtk-2.0/gtk/gtkprintcontext.h:
+
+/usr/include/gtk-2.0/gtk/gtkprintoperationpreview.h:
+
+/usr/include/gtk-2.0/gtk/gtkprogress.h:
+
+/usr/include/gtk-2.0/gtk/gtkprogressbar.h:
+
+/usr/include/gtk-2.0/gtk/gtkradioaction.h:
+
+/usr/include/gtk-2.0/gtk/gtktoggleaction.h:
+
+/usr/include/gtk-2.0/gtk/gtkradiobutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkradiomenuitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkradiotoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtktoggletoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtktoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentchooser.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentmanager.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentfilter.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentchooserdialog.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentchooser.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentchoosermenu.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentchooserwidget.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentfilter.h:
+
+/usr/include/gtk-2.0/gtk/gtkrecentmanager.h:
+
+/usr/include/gtk-2.0/gtk/gtkscrolledwindow.h:
+
+/usr/include/gtk-2.0/gtk/gtkviewport.h:
+
+/usr/include/gtk-2.0/gtk/gtkseparatormenuitem.h:
+
+/usr/include/gtk-2.0/gtk/gtkseparatortoolitem.h:
+
+/usr/include/gtk-2.0/gtk/gtksizegroup.h:
+
+/usr/include/gtk-2.0/gtk/gtkspinbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtkstatusbar.h:
+
+/usr/include/gtk-2.0/gtk/gtkstatusicon.h:
+
+/usr/include/gtk-2.0/gtk/gtkstock.h:
+
+/usr/include/gtk-2.0/gtk/gtktable.h:
+
+/usr/include/gtk-2.0/gtk/gtktearoffmenuitem.h:
+
+/usr/include/gtk-2.0/gtk/gtktext.h:
+
+/usr/include/gtk-2.0/gtk/gtktextbuffer.h:
+
+/usr/include/gtk-2.0/gtk/gtktexttagtable.h:
+
+/usr/include/gtk-2.0/gtk/gtktextmark.h:
+
+/usr/include/gtk-2.0/gtk/gtktextbufferrichtext.h:
+
+/usr/include/gtk-2.0/gtk/gtktextview.h:
+
+/usr/include/gtk-2.0/gtk/gtktipsquery.h:
+
+/usr/include/gtk-2.0/gtk/gtktoggletoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtktoolbar.h:
+
+/usr/include/gtk-2.0/gtk/gtktoolbutton.h:
+
+/usr/include/gtk-2.0/gtk/gtktoolitem.h:
+
+/usr/include/gtk-2.0/gtk/gtktree.h:
+
+/usr/include/gtk-2.0/gtk/gtktreednd.h:
+
+/usr/include/gtk-2.0/gtk/gtktreeitem.h:
+
+/usr/include/gtk-2.0/gtk/gtktreemodelsort.h:
+
+/usr/include/gtk-2.0/gtk/gtktreeselection.h:
+
+/usr/include/gtk-2.0/gtk/gtktreestore.h:
+
+/usr/include/gtk-2.0/gtk/gtkuimanager.h:
+
+/usr/include/gtk-2.0/gtk/gtkvbbox.h:
+
+/usr/include/gtk-2.0/gtk/gtkversion.h:
+
+/usr/include/gtk-2.0/gtk/gtkvpaned.h:
+
+/usr/include/gtk-2.0/gtk/gtkvruler.h:
+
+/usr/include/gtk-2.0/gtk/gtkvscale.h:
+
+/usr/include/gtk-2.0/gtk/gtkvseparator.h:
+
+/usr/include/libintl.h:
+
+/usr/include/locale.h:
+
+/usr/include/bits/locale.h:
+
+../config.h:
+
+sulekhaspell.h:
+
+transliteration.h:
+
+/usr/include/aspell.h:
diff --git a/input-methods/sulekha/src/.deps/transliteration.Po b/input-methods/sulekha/src/.deps/transliteration.Po
new file mode 100644
index 0000000..e8a0266
--- /dev/null
+++ b/input-methods/sulekha/src/.deps/transliteration.Po
@@ -0,0 +1,86 @@
+transliteration.o transliteration.o: transliteration.c \
+ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
+ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
+ /usr/include/gnu/stubs-32.h \
+ /usr/lib/gcc/i486-linux-gnu/4.1.2/include/stddef.h \
+ /usr/include/bits/types.h /usr/include/bits/typesizes.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/include/bits/wchar.h /usr/include/gconv.h \
+ /usr/lib/gcc/i486-linux-gnu/4.1.2/include/stdarg.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h /usr/include/string.h \
+ /usr/include/bits/string.h /usr/include/bits/string2.h \
+ /usr/include/endian.h /usr/include/bits/endian.h /usr/include/stdlib.h \
+ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \
+ /usr/include/bits/select.h /usr/include/bits/sigset.h \
+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
+ /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \
+ transliteration.h
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-32.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.1.2/include/stddef.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/gconv.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.1.2/include/stdarg.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/string.h:
+
+/usr/include/bits/string.h:
+
+/usr/include/bits/string2.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+transliteration.h:
diff --git a/input-methods/sulekha/src/Makefile b/input-methods/sulekha/src/Makefile
new file mode 100644
index 0000000..1ea073a
--- /dev/null
+++ b/input-methods/sulekha/src/Makefile
@@ -0,0 +1,398 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# src/Makefile. Generated from Makefile.in by configure.
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+
+pkgdatadir = $(datadir)/sulekha
+pkglibdir = $(libdir)/sulekha
+pkgincludedir = $(includedir)/sulekha
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+noinst_PROGRAMS = sulekha$(EXEEXT)
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_sulekha_OBJECTS = sulekha.$(OBJEXT) sulekhaspell.$(OBJEXT) \
+ transliteration.$(OBJEXT)
+sulekha_OBJECTS = $(am_sulekha_OBJECTS)
+sulekha_LDADD = $(LDADD)
+sulekha_DEPENDENCIES =
+DEFAULT_INCLUDES = -I. -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(sulekha_SOURCES)
+DIST_SOURCES = $(sulekha_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/santhosh/dev/sulekha/missing --run aclocal-1.10
+AMTAR = ${SHELL} /home/santhosh/dev/sulekha/missing --run tar
+AUTOCONF = ${SHELL} /home/santhosh/dev/sulekha/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/santhosh/dev/sulekha/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/santhosh/dev/sulekha/missing --run automake-1.10
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2
+CPP = gcc -E
+CPPFLAGS =
+CYGPATH_W = echo
+DEBUG = 1
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+ECHO_C =
+ECHO_N = -n
+ECHO_T =
+EGREP = /bin/grep -E
+EXEEXT =
+GREP = /bin/grep
+HTML_DIR = ${datadir}/gtk-doc/html
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LDFLAGS =
+LIBOBJS =
+LIBS =
+LTLIBOBJS =
+MAKEINFO = ${SHELL} /home/santhosh/dev/sulekha/missing --run makeinfo
+MKDIR_P = /bin/mkdir -p
+OBJEXT = o
+PACKAGE = sulekha
+PACKAGE_BUGREPORT = santhosh00@gmail.com
+PACKAGE_NAME = sulekha
+PACKAGE_STRING = sulekha 0.0.11
+PACKAGE_TARNAME = sulekha
+PACKAGE_VERSION = 0.0.11
+PANGO_CFLAGS = -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
+PANGO_LIBS = -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
+PATH_SEPARATOR = :
+PKG_CONFIG = /usr/bin/pkg-config
+SET_MAKE =
+SHELL = /bin/sh
+SPELLER_LIB = -laspell
+STRIP =
+SULEKHA_CFLAGS = -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12
+SULEKHA_LIBS = -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXfixes -lpango-1.0 -lcairo -lX11 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
+SULEKHA_PACKAGES = gtk+-2.0
+VERSION = 0.0.11
+abs_builddir = /home/santhosh/dev/sulekha/src
+abs_srcdir = /home/santhosh/dev/sulekha/src
+abs_top_builddir = /home/santhosh/dev/sulekha
+abs_top_srcdir = /home/santhosh/dev/sulekha
+ac_ct_CC = gcc
+am__include = include
+am__leading_dot = .
+am__quote =
+am__tar = ${AMTAR} chof - "$$tardir"
+am__untar = ${AMTAR} xf -
+bindir = ${exec_prefix}/bin
+build_alias =
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host_alias =
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = $(SHELL) /home/santhosh/dev/sulekha/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = /bin/mkdir -p
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias =
+top_builddir = ..
+top_srcdir = ..
+AM_CFLAGS = @GTKSPELL_CFLAGS@ -laspell
+INCLUDES = -I$(top_srcdir)
+LDADD = @GTKSPELL_LIBS@
+sulekha_SOURCES = sulekha.c sulekhaspell.c sulekhaspell.h transliteration.c transliteration.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+sulekha$(EXEEXT): $(sulekha_OBJECTS) $(sulekha_DEPENDENCIES)
+ @rm -f sulekha$(EXEEXT)
+ $(LINK) $(sulekha_OBJECTS) $(sulekha_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+include ./$(DEPDIR)/sulekha.Po
+include ./$(DEPDIR)/sulekhaspell.Po
+include ./$(DEPDIR)/transliteration.Po
+
+.c.o:
+ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+# source='$<' object='$@' libtool=no \
+# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+# $(COMPILE) -c $<
+
+.c.obj:
+ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+# source='$<' object='$@' libtool=no \
+# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+# $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-noinstPROGRAMS ctags distclean distclean-compile \
+ distclean-generic distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/input-methods/sulekha/src/Makefile.am b/input-methods/sulekha/src/Makefile.am
new file mode 100644
index 0000000..3039d02
--- /dev/null
+++ b/input-methods/sulekha/src/Makefile.am
@@ -0,0 +1,8 @@
+noinst_PROGRAMS = sulekha
+AM_CFLAGS = @GTKSPELL_CFLAGS@ -laspell
+INCLUDES = -I$(top_srcdir)
+LDADD = @GTKSPELL_LIBS@
+sulekha_SOURCES =sulekha.c sulekhaspell.c sulekhaspell.h transliteration.c transliteration.h
+
+
+
diff --git a/input-methods/sulekha/src/Makefile.am~ b/input-methods/sulekha/src/Makefile.am~
new file mode 100644
index 0000000..820c2b8
--- /dev/null
+++ b/input-methods/sulekha/src/Makefile.am~
@@ -0,0 +1,8 @@
+noinst_PROGRAMS = sulekha
+AM_CFLAGS = @GTKSPELL_CFLAGS@ -I/usr/local/include/gtkspell-2.0/ -laspell
+INCLUDES = -I$(top_srcdir)
+LDADD = @GTKSPELL_LIBS@
+sulekha_SOURCES =sulekha.c sulekhaspell.c sulekhaspell.h transliteration.c transliteration.h
+
+
+
diff --git a/input-methods/sulekha/src/Makefile.in b/input-methods/sulekha/src/Makefile.in
new file mode 100644
index 0000000..9ac8814
--- /dev/null
+++ b/input-methods/sulekha/src/Makefile.in
@@ -0,0 +1,398 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+noinst_PROGRAMS = sulekha$(EXEEXT)
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_sulekha_OBJECTS = sulekha.$(OBJEXT) sulekhaspell.$(OBJEXT) \
+ transliteration.$(OBJEXT)
+sulekha_OBJECTS = $(am_sulekha_OBJECTS)
+sulekha_LDADD = $(LDADD)
+sulekha_DEPENDENCIES =
+DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(sulekha_SOURCES)
+DIST_SOURCES = $(sulekha_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG = @DEBUG@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SPELLER_LIB = @SPELLER_LIB@
+STRIP = @STRIP@
+SULEKHA_CFLAGS = @SULEKHA_CFLAGS@
+SULEKHA_LIBS = @SULEKHA_LIBS@
+SULEKHA_PACKAGES = @SULEKHA_PACKAGES@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = @GTKSPELL_CFLAGS@ -laspell
+INCLUDES = -I$(top_srcdir)
+LDADD = @GTKSPELL_LIBS@
+sulekha_SOURCES = sulekha.c sulekhaspell.c sulekhaspell.h transliteration.c transliteration.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+sulekha$(EXEEXT): $(sulekha_OBJECTS) $(sulekha_DEPENDENCIES)
+ @rm -f sulekha$(EXEEXT)
+ $(LINK) $(sulekha_OBJECTS) $(sulekha_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sulekha.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sulekhaspell.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transliteration.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-noinstPROGRAMS ctags distclean distclean-compile \
+ distclean-generic distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/input-methods/sulekha/src/googliterate.c~ b/input-methods/sulekha/src/googliterate.c~
new file mode 100644
index 0000000..2fe25c7
--- /dev/null
+++ b/input-methods/sulekha/src/googliterate.c~
@@ -0,0 +1,83 @@
+/*
+ *File name: googliterate.c
+ */
+
+#include <gtk/gtk.h>
+#include <glib.h>
+#include <stdlib.h>
+#include "trans.c"
+/*-- This function allows the program to exit properly when the window is closed --*/
+gint
+destroyapp (GtkWidget * widget, gpointer gdata)
+{
+ g_print ("Quitting...\n");
+ gtk_main_quit ();
+ return (FALSE);
+}
+
+int
+main (int argc, char *argv[])
+{
+ /*-- Declare the GTK Widgets used in the program --*/
+ GtkWidget *window;
+ GtkWidget *text;
+
+ gchar *buffer = "eda kitilum ";
+ char *buffet = NULL;
+ char *mal = NULL;
+ const char *command;
+ /*-- Initialize GTK --*/
+ gtk_init (&argc, &argv);
+
+ /*-- Create the new window --*/
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ /*-- Create a text area --*/
+ text = gtk_text_new (NULL, NULL);
+
+ /*-- Set text area to be editable --*/
+ gtk_text_set_editable (GTK_TEXT (text), TRUE);
+
+ /*-- Connect the window to the destroyapp function --*/
+ gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+ GTK_SIGNAL_FUNC (destroyapp), NULL);
+
+ /*-- Add the text area to the window --*/
+ gtk_container_add (GTK_CONTAINER (window), text);
+
+ /*-- Add some text to the window --*/
+ gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, buffer,
+ strlen (buffer));
+
+/* Get some characters from the text area */
+ buffer = gtk_editable_get_chars (GTK_EDITABLE (text), 4, 11);
+ buffet = (char *) buffer;
+ printf ("buffet=%s\n", buffet);
+ buffer = "kakka";
+ mal = transliterate_ml (buffer, 0, strlen (buffer));
+ printf ("%s\n", mal);
+ sprintf (command, "./spell ml %s", mal);
+ system (command);
+ printf ("%s\n", command);
+ gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, buffer,
+ strlen (buffer));
+
+ /*-- Set window border to zero so that text area takes up the whole window --*/
+ gtk_container_border_width (GTK_CONTAINER (window), 0);
+
+ /*-- Set the window to be 640 x 200 pixels --*/
+ gtk_window_set_default_size (GTK_WINDOW (window), 640, 200);
+
+ /*-- Set the window title --*/
+ gtk_window_set_title (GTK_WINDOW (window), "Text Area");
+
+ /*-- Display the widgets --*/
+ gtk_widget_show (text);
+ gtk_widget_show (window);
+
+ /*-- Start the GTK event loop --*/
+ gtk_main ();
+
+ /*-- Return 0 if exit is successful --*/
+ return 0;
+}
diff --git a/input-methods/sulekha/src/suggestions.c~ b/input-methods/sulekha/src/suggestions.c~
new file mode 100644
index 0000000..d037d21
--- /dev/null
+++ b/input-methods/sulekha/src/suggestions.c~
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "aspell.h"
+AspellConfig *spell_config = NULL;
+AspellSpeller *spell_checker = 0;
+/*int
+main(int argc, const char *argv[])*/
+int
+check_word (char *lang, char *word)
+{
+ int correct = 0;
+
+ int word_length = 0;
+
+ if (lang == NULL)
+ {
+ lang = "ml";
+ }
+
+ word_length = strlen (word);
+ spell_config = new_aspell_config ();
+ aspell_config_replace (spell_config, "lang", lang);
+ aspell_config_replace (spell_config, "encoding", "utf-8");
+ AspellCanHaveError *possible_err = new_aspell_speller (spell_config);
+
+ if (aspell_error_number (possible_err) != 0)
+ puts (aspell_error_message (possible_err));
+ else
+ spell_checker = to_aspell_speller (possible_err);
+ correct = aspell_speller_check (spell_checker, word, word_length);
+
+ if (correct == 0)
+ {
+ printf ("word \"%s\" is wrong.\n", word);
+
+ }
+ else
+ {
+ printf ("word \"%s\" is correct.\n", word);
+ exit (0);
+ }
+
+
+ return correct;
+}
+
+void
+get_suggestion_list (char *word)
+{
+
+ const char *sugg_word;
+ int suggestion_count = 0;
+ int word_length = 0;
+ AspellWordList *suggestions = NULL;
+ suggestions = aspell_speller_suggest (spell_checker, word, word_length);
+ AspellStringEnumeration *aspell_elements =
+ aspell_word_list_elements (suggestions);
+
+ while ((sugg_word =
+ aspell_string_enumeration_next (aspell_elements)) != NULL)
+ {
+ printf ("%d. %s\n", ++suggestion_count, sugg_word);
+ }
+ delete_aspell_string_enumeration (aspell_elements);
+
+
+
+
+}
diff --git a/input-methods/sulekha/src/sulekha.c b/input-methods/sulekha/src/sulekha.c
new file mode 100644
index 0000000..93b4fbf
--- /dev/null
+++ b/input-methods/sulekha/src/sulekha.c
@@ -0,0 +1,381 @@
+/* sulekha.c
+ *
+ * Copyright (C) 2007-2008
+ * Santhosh Thottingal<santhosh00@gmail.com>,
+ * Praveen Arimprathodiyil <pravi.a@gmail.com>
+ * Swathanthra Malayalam Computing.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <gtk/gtk.h>
+#include "../config.h"
+#include "sulekhaspell.h"
+
+const char *langs[] = { "ml", "en_US", "de_DE", "ja_JP", NULL };
+
+GtkWidget *window, *languagelist, *attached, *view;
+
+
+static void
+activate_action (GtkAction * action)
+{
+ const gchar *name = gtk_action_get_name (action);
+ const gchar *typename = G_OBJECT_TYPE_NAME (action);
+
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_CLOSE,
+ "You activated action: \"%s\" of type \"%s\"",
+ name, typename);
+
+ /* Close dialog on user response */
+ g_signal_connect (dialog,
+ "response", G_CALLBACK (gtk_widget_destroy), NULL);
+
+ gtk_widget_show (dialog);
+}
+
+
+static void
+activate_email (GtkAboutDialog *about,
+ const gchar *link,
+ gpointer data)
+{
+ g_print ("send mail to %s\n", link);
+}
+
+static void
+activate_url (GtkAboutDialog *about,
+ const gchar *link,
+ gpointer data)
+{
+ g_print ("show url %s\n", link);
+}
+static void
+about (GtkAction * action, GtkWidget * window)
+{
+ GdkPixbuf *pixbuf, *transparent;
+ gchar *filename;
+
+ const gchar *authors[] = {
+ "Santhosh Thottongal",
+ "Praveen Arimbrathodiyil",
+ NULL
+ };
+
+ const gchar *documentors[] = {
+ "Santhosh Thottongal",
+ "Praveen Arimbrathodiyil",
+ NULL
+ };
+
+ const gchar *license =
+ "This library is free software; you can redistribute it and/or\n"
+ "modify it under the terms of the GNU Library General Public License as\n"
+ "published by the Free Software Foundation; either version 2 of the\n"
+ "License, or (at your option) any later version.\n"
+ "\n"
+ "This library is distributed in the hope that it will be useful,\n"
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
+ "Library General Public License for more details.\n"
+ "\n"
+ "You should have received a copy of the GNU Library General Public\n"
+ "License along with the Gnome Library; see the file COPYING.LIB. If not,\n"
+ "write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
+ "Boston, MA 02111-1307, USA.\n";
+
+ // gtk_about_dialog_set_email_hook (activate_email, NULL, NULL);
+ //gtk_about_dialog_set_url_hook (activate_url, NULL, NULL);
+ gtk_show_about_dialog (GTK_WINDOW (window),
+ "name", "Sulekha",
+ "version", PACKAGE_VERSION,
+ "copyright",
+ "(C) 2007-2008 Santhosh Thottingal, Praveen Arimbrathodiyil",
+ "license", license, "website", "http://smc.org.in",
+ "comments", "Intelligent Typing System", "authors",
+ authors, "documenters", documentors, "logo",
+ NULL, NULL);
+
+ //g_object_unref (transparent);
+}
+static GtkActionEntry entries[] = {
+ { "FileMenu", NULL, "_File" }, /* name, stock id, label */
+ { "EditMenu", NULL, "_Edit" }, /* name, stock id, label */
+ { "OptionsMenu", NULL, "_Options" }, /* name, stock id, label */
+ { "HelpMenu", NULL, "_Help" }, /* name, stock id, label */
+ { "New", GTK_STOCK_NEW, /* name, stock id */
+ "_New", "<control>N", /* label, accelerator */
+ "Create a new file", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "Open", GTK_STOCK_OPEN, /* name, stock id */
+ "_Open","<control>O", /* label, accelerator */
+ "Open a file", /* tooltip */
+ G_CALLBACK (activate_action ) },
+ { "Save", GTK_STOCK_SAVE, /* name, stock id */
+ "_Save","<control>S", /* label, accelerator */
+ "Save current file", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "SaveAs", GTK_STOCK_SAVE, /* name, stock id */
+ "Save _As...", NULL, /* label, accelerator */
+ "Save to a file", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "ClearSessionDictionary", NULL, /* name, stock id */
+ "Clear Session Dictionary", NULL, /* label, accelerator */
+ "Clear Session Dictionary", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "SynchronizeDictionaries", NULL, /* name, stock id */
+ "Synchronize Dictionaries", NULL, /* label, accelerator */
+ "Synchronize Dictionaries", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "Quit", GTK_STOCK_QUIT, /* name, stock id */
+ "_Quit", "<control>Q", /* label, accelerator */
+ "Quit", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "SelectAll", NULL, /* name, stock id */
+ "Select _All", "<control>A", /* label, accelerator */
+ "Select All", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "ClearAll", NULL, /* name, stock id */
+ "Clear All", "<control>C", /* label, accelerator */
+ "Clear All", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "PasePrimary", NULL, /* name, stock id */
+ "Pase Primary", "<control>V", /* label, accelerator */
+ "Pase Primary", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "SaveDictionariesonExit", NULL, /* name, stock id */
+ "Save Dictionaries on Exit", "<control>V", /* label, accelerator */
+ "Save Dictionaries on Exit", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "About", GTK_STOCK_ABOUT, /* name, stock id */
+ "_About", "<control>B", /* label, accelerator */
+ "About", /* tooltip */
+ G_CALLBACK (about) },
+ { "Logo", "demo-gtk-logo", /* name, stock id */
+ NULL, NULL, /* label, accelerator */
+ "GTK+", /* tooltip */
+ G_CALLBACK (activate_action) },
+ };
+ static guint n_entries = G_N_ELEMENTS (entries);
+
+
+ static const gchar *ui_info =
+ "<ui>"
+ " <menubar name='MenuBar'>"
+ " <menu action='FileMenu'>"
+ " <menuitem action='New'/>"
+ " <menuitem action='Open'/>"
+ " <menuitem action='Save'/>"
+ " <menuitem action='SaveAs'/>"
+ " <separator/>"
+ " <menuitem action='ClearSessionDictionary'/>"
+ " <menuitem action='SynchronizeDictionaries'/>"
+ " <separator/>"
+ " <menuitem action='Quit'/>"
+ " </menu>"
+
+ " <menu action='EditMenu'>"
+ " <menuitem action='SelectAll'/>"
+ " <menuitem action='ClearAll'/>"
+ " <menuitem action='PasePrimary'/>"
+ " </menu>"
+ " <menu action='OptionsMenu'>"
+ " <menuitem action='SaveDictionariesonExit'/>"
+ " </menu>"
+ " <menu action='HelpMenu'>"
+ " <menuitem action='About'/>"
+ " </menu>"
+ " </menubar>"
+ " <toolbar name='ToolBar'>"
+ " <toolitem action='Open'/>"
+ " <toolitem action='Quit'/>"
+ " <separator action='Sep1'/>"
+ " <toolitem action='Logo'/>"
+ " </toolbar>"
+ "</ui>";
+
+
+static void
+report_sulekhaspell_error (const char *err)
+{
+ GtkWidget *dlg;
+ dlg = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "SulekhaSpell error: %s", err);
+ gtk_dialog_run (GTK_DIALOG (dlg));
+ gtk_widget_destroy (dlg);
+}
+
+static void
+attach_cb ()
+{
+ SulekhaSpell *spell;
+ GError *error = NULL;
+
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (attached)))
+ {
+ int lang;
+
+ lang = gtk_option_menu_get_history (GTK_OPTION_MENU (languagelist));
+
+ spell =
+ sulekhaspell_new_attach (GTK_TEXT_VIEW (view), langs[lang], &error);
+
+ if (spell == NULL)
+ {
+ report_sulekhaspell_error (error->message);
+ g_error_free (error);
+ }
+ }
+ else
+ {
+ sulekhaspell_detach (sulekhaspell_get_from_text_view
+ (GTK_TEXT_VIEW (view)));
+ }
+}
+
+static void
+setlang_cb ()
+{
+ SulekhaSpell *spell;
+ int lang;
+ GError *error = NULL;
+
+ spell = sulekhaspell_get_from_text_view (GTK_TEXT_VIEW (view));
+ if (spell == NULL)
+ return;
+
+ lang = gtk_option_menu_get_history (GTK_OPTION_MENU (languagelist));
+ if (!sulekhaspell_set_language (spell, langs[lang], &error))
+ {
+ report_sulekhaspell_error (error->message);
+ g_error_free (error);
+ }
+}
+
+static void
+build_languagelist ()
+{
+ int i;
+ GtkWidget *menu, *mi;
+
+ languagelist = gtk_option_menu_new ();
+ menu = gtk_menu_new ();
+ for (i = 0; langs[i] != NULL; i++)
+ {
+ mi = gtk_menu_item_new_with_label (langs[i]);
+ gtk_widget_show (mi);
+ g_signal_connect (G_OBJECT (mi), "activate",
+ G_CALLBACK (setlang_cb), NULL);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+ }
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (languagelist), menu);
+}
+
+int
+main (int argc, char *argv[])
+{
+ GtkWidget *box, *hbox, *scroll;
+ GtkUIManager *ui;
+ GtkActionGroup *actions;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ GtkWidget *sw;
+ GtkWidget *menubar;
+ GtkWidget *menubox;
+ GError *error = NULL;
+
+ if (argc > 1)
+ {
+ printf ("%s-->%s\n", argv[1],
+ transliterate_ml (argv[1], 0, strlen (argv[1])));
+ exit (0);
+ }
+ gtk_init (&argc, &argv);
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ actions = gtk_action_group_new ("Actions");
+ gtk_action_group_add_actions (actions, entries, n_entries, NULL);
+ ui = gtk_ui_manager_new ();
+ gtk_ui_manager_insert_action_group (ui, actions, 0);
+ g_object_unref (actions);
+ gtk_window_add_accel_group (GTK_WINDOW (window),
+ gtk_ui_manager_get_accel_group (ui));
+
+
+
+ if (!gtk_ui_manager_add_ui_from_string (ui, ui_info, -1, &error))
+ {
+ g_message ("building menus failed: %s", error->message);
+ g_error_free (error);
+ }
+ menubox = gtk_vbox_new (FALSE, 0);
+// gtk_container_add (GTK_CONTAINER (box), menubox);
+ gtk_widget_show (menubox);
+// gtk_container_add (GTK_CONTAINER (box), box1);
+
+ gtk_box_pack_start (GTK_BOX (menubox), gtk_ui_manager_get_widget (ui, "/MenuBar"),
+ FALSE, FALSE, 0);
+
+
+
+ view = gtk_text_view_new ();
+ gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD);
+
+ scroll = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll),
+ GTK_SHADOW_IN);
+ gtk_container_add (GTK_CONTAINER (scroll), view);
+
+ build_languagelist ();
+
+ hbox = gtk_hbox_new (FALSE, 5);
+ attached = gtk_toggle_button_new_with_label ("Attached");
+ g_signal_connect (G_OBJECT (attached), "toggled",
+ G_CALLBACK (attach_cb), NULL);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (attached), TRUE);
+ gtk_box_pack_start (GTK_BOX (hbox), attached, FALSE, FALSE, 0);
+
+ gtk_box_pack_end (GTK_BOX (hbox), languagelist, FALSE, FALSE, 0);
+
+ box = gtk_vbox_new (FALSE, 5);
+gtk_box_pack_start (GTK_BOX (box), menubox,FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), scroll, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (box), hbox, FALSE, FALSE, 0);
+
+ gtk_widget_show_all (box);
+
+ gtk_window_set_default_size (GTK_WINDOW (window), 1200, 800);
+ gtk_window_set_title (GTK_WINDOW (window), "Sulekha");
+ gtk_container_set_border_width (GTK_CONTAINER (window), 1);
+ g_signal_connect (G_OBJECT (window), "delete-event",
+ G_CALLBACK (gtk_main_quit), NULL);
+ gtk_container_add (GTK_CONTAINER (window), box);
+
+ gtk_widget_show (window);
+ gtk_main ();
+
+ return 0;
+}
diff --git a/input-methods/sulekha/src/sulekha.c~ b/input-methods/sulekha/src/sulekha.c~
new file mode 100644
index 0000000..c27d366
--- /dev/null
+++ b/input-methods/sulekha/src/sulekha.c~
@@ -0,0 +1,380 @@
+/* sulekha.c
+ *
+ * Copyright (C) 2007-2008
+ * Santhosh Thottingal<santhosh00@gmail.com>,
+ * Swathanthra Malayalam Computing.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <gtk/gtk.h>
+#include "../config.h"
+#include "sulekhaspell.h"
+
+const char *langs[] = { "ml", "en_US", "de_DE", "ja_JP", NULL };
+
+GtkWidget *window, *languagelist, *attached, *view;
+
+
+static void
+activate_action (GtkAction * action)
+{
+ const gchar *name = gtk_action_get_name (action);
+ const gchar *typename = G_OBJECT_TYPE_NAME (action);
+
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_CLOSE,
+ "You activated action: \"%s\" of type \"%s\"",
+ name, typename);
+
+ /* Close dialog on user response */
+ g_signal_connect (dialog,
+ "response", G_CALLBACK (gtk_widget_destroy), NULL);
+
+ gtk_widget_show (dialog);
+}
+
+
+static void
+activate_email (GtkAboutDialog *about,
+ const gchar *link,
+ gpointer data)
+{
+ g_print ("send mail to %s\n", link);
+}
+
+static void
+activate_url (GtkAboutDialog *about,
+ const gchar *link,
+ gpointer data)
+{
+ g_print ("show url %s\n", link);
+}
+static void
+about (GtkAction * action, GtkWidget * window)
+{
+ GdkPixbuf *pixbuf, *transparent;
+ gchar *filename;
+
+ const gchar *authors[] = {
+ "Santhosh Thottongal",
+ "Praveen Arimbrathodiyil",
+ NULL
+ };
+
+ const gchar *documentors[] = {
+ "Santhosh Thottongal",
+ "Praveen Arimbrathodiyil",
+ NULL
+ };
+
+ const gchar *license =
+ "This library is free software; you can redistribute it and/or\n"
+ "modify it under the terms of the GNU Library General Public License as\n"
+ "published by the Free Software Foundation; either version 2 of the\n"
+ "License, or (at your option) any later version.\n"
+ "\n"
+ "This library is distributed in the hope that it will be useful,\n"
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
+ "Library General Public License for more details.\n"
+ "\n"
+ "You should have received a copy of the GNU Library General Public\n"
+ "License along with the Gnome Library; see the file COPYING.LIB. If not,\n"
+ "write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
+ "Boston, MA 02111-1307, USA.\n";
+
+ // gtk_about_dialog_set_email_hook (activate_email, NULL, NULL);
+ //gtk_about_dialog_set_url_hook (activate_url, NULL, NULL);
+ gtk_show_about_dialog (GTK_WINDOW (window),
+ "name", "Sulekha",
+ "version", PACKAGE_VERSION,
+ "copyright",
+ "(C) 2007-2008 Santhosh Thottingal, Praveen Arimbrathodiyil",
+ "license", license, "website", "http://smc.org.in",
+ "comments", "Intelligent Typing System", "authors",
+ authors, "documenters", documentors, "logo",
+ NULL, NULL);
+
+ //g_object_unref (transparent);
+}
+static GtkActionEntry entries[] = {
+ { "FileMenu", NULL, "_File" }, /* name, stock id, label */
+ { "EditMenu", NULL, "_Edit" }, /* name, stock id, label */
+ { "OptionsMenu", NULL, "_Options" }, /* name, stock id, label */
+ { "HelpMenu", NULL, "_Help" }, /* name, stock id, label */
+ { "New", GTK_STOCK_NEW, /* name, stock id */
+ "_New", "<control>N", /* label, accelerator */
+ "Create a new file", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "Open", GTK_STOCK_OPEN, /* name, stock id */
+ "_Open","<control>O", /* label, accelerator */
+ "Open a file", /* tooltip */
+ G_CALLBACK (activate_action ) },
+ { "Save", GTK_STOCK_SAVE, /* name, stock id */
+ "_Save","<control>S", /* label, accelerator */
+ "Save current file", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "SaveAs", GTK_STOCK_SAVE, /* name, stock id */
+ "Save _As...", NULL, /* label, accelerator */
+ "Save to a file", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "ClearSessionDictionary", NULL, /* name, stock id */
+ "Clear Session Dictionary", NULL, /* label, accelerator */
+ "Clear Session Dictionary", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "SynchronizeDictionaries", NULL, /* name, stock id */
+ "Synchronize Dictionaries", NULL, /* label, accelerator */
+ "Synchronize Dictionaries", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "Quit", GTK_STOCK_QUIT, /* name, stock id */
+ "_Quit", "<control>Q", /* label, accelerator */
+ "Quit", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "SelectAll", NULL, /* name, stock id */
+ "Select _All", "<control>A", /* label, accelerator */
+ "Select All", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "ClearAll", NULL, /* name, stock id */
+ "Clear All", "<control>C", /* label, accelerator */
+ "Clear All", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "PasePrimary", NULL, /* name, stock id */
+ "Pase Primary", "<control>V", /* label, accelerator */
+ "Pase Primary", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "SaveDictionariesonExit", NULL, /* name, stock id */
+ "Save Dictionaries on Exit", "<control>V", /* label, accelerator */
+ "Save Dictionaries on Exit", /* tooltip */
+ G_CALLBACK (activate_action) },
+ { "About", GTK_STOCK_ABOUT, /* name, stock id */
+ "_About", "<control>B", /* label, accelerator */
+ "About", /* tooltip */
+ G_CALLBACK (about) },
+ { "Logo", "demo-gtk-logo", /* name, stock id */
+ NULL, NULL, /* label, accelerator */
+ "GTK+", /* tooltip */
+ G_CALLBACK (activate_action) },
+ };
+ static guint n_entries = G_N_ELEMENTS (entries);
+
+
+ static const gchar *ui_info =
+ "<ui>"
+ " <menubar name='MenuBar'>"
+ " <menu action='FileMenu'>"
+ " <menuitem action='New'/>"
+ " <menuitem action='Open'/>"
+ " <menuitem action='Save'/>"
+ " <menuitem action='SaveAs'/>"
+ " <separator/>"
+ " <menuitem action='ClearSessionDictionary'/>"
+ " <menuitem action='SynchronizeDictionaries'/>"
+ " <separator/>"
+ " <menuitem action='Quit'/>"
+ " </menu>"
+
+ " <menu action='EditMenu'>"
+ " <menuitem action='SelectAll'/>"
+ " <menuitem action='ClearAll'/>"
+ " <menuitem action='PasePrimary'/>"
+ " </menu>"
+ " <menu action='OptionsMenu'>"
+ " <menuitem action='SaveDictionariesonExit'/>"
+ " </menu>"
+ " <menu action='HelpMenu'>"
+ " <menuitem action='About'/>"
+ " </menu>"
+ " </menubar>"
+ " <toolbar name='ToolBar'>"
+ " <toolitem action='Open'/>"
+ " <toolitem action='Quit'/>"
+ " <separator action='Sep1'/>"
+ " <toolitem action='Logo'/>"
+ " </toolbar>"
+ "</ui>";
+
+
+static void
+report_sulekhaspell_error (const char *err)
+{
+ GtkWidget *dlg;
+ dlg = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "SulekhaSpell error: %s", err);
+ gtk_dialog_run (GTK_DIALOG (dlg));
+ gtk_widget_destroy (dlg);
+}
+
+static void
+attach_cb ()
+{
+ SulekhaSpell *spell;
+ GError *error = NULL;
+
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (attached)))
+ {
+ int lang;
+
+ lang = gtk_option_menu_get_history (GTK_OPTION_MENU (languagelist));
+
+ spell =
+ sulekhaspell_new_attach (GTK_TEXT_VIEW (view), langs[lang], &error);
+
+ if (spell == NULL)
+ {
+ report_sulekhaspell_error (error->message);
+ g_error_free (error);
+ }
+ }
+ else
+ {
+ sulekhaspell_detach (sulekhaspell_get_from_text_view
+ (GTK_TEXT_VIEW (view)));
+ }
+}
+
+static void
+setlang_cb ()
+{
+ SulekhaSpell *spell;
+ int lang;
+ GError *error = NULL;
+
+ spell = sulekhaspell_get_from_text_view (GTK_TEXT_VIEW (view));
+ if (spell == NULL)
+ return;
+
+ lang = gtk_option_menu_get_history (GTK_OPTION_MENU (languagelist));
+ if (!sulekhaspell_set_language (spell, langs[lang], &error))
+ {
+ report_sulekhaspell_error (error->message);
+ g_error_free (error);
+ }
+}
+
+static void
+build_languagelist ()
+{
+ int i;
+ GtkWidget *menu, *mi;
+
+ languagelist = gtk_option_menu_new ();
+ menu = gtk_menu_new ();
+ for (i = 0; langs[i] != NULL; i++)
+ {
+ mi = gtk_menu_item_new_with_label (langs[i]);
+ gtk_widget_show (mi);
+ g_signal_connect (G_OBJECT (mi), "activate",
+ G_CALLBACK (setlang_cb), NULL);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+ }
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (languagelist), menu);
+}
+
+int
+main (int argc, char *argv[])
+{
+ GtkWidget *box, *hbox, *scroll;
+ GtkUIManager *ui;
+ GtkActionGroup *actions;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ GtkWidget *sw;
+ GtkWidget *menubar;
+ GtkWidget *menubox;
+ GError *error = NULL;
+
+ if (argc > 1)
+ {
+ printf ("%s-->%s\n", argv[1],
+ transliterate_ml (argv[1], 0, strlen (argv[1])));
+ exit (0);
+ }
+ gtk_init (&argc, &argv);
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ actions = gtk_action_group_new ("Actions");
+ gtk_action_group_add_actions (actions, entries, n_entries, NULL);
+ ui = gtk_ui_manager_new ();
+ gtk_ui_manager_insert_action_group (ui, actions, 0);
+ g_object_unref (actions);
+ gtk_window_add_accel_group (GTK_WINDOW (window),
+ gtk_ui_manager_get_accel_group (ui));
+
+
+
+ if (!gtk_ui_manager_add_ui_from_string (ui, ui_info, -1, &error))
+ {
+ g_message ("building menus failed: %s", error->message);
+ g_error_free (error);
+ }
+ menubox = gtk_vbox_new (FALSE, 0);
+// gtk_container_add (GTK_CONTAINER (box), menubox);
+ gtk_widget_show (menubox);
+// gtk_container_add (GTK_CONTAINER (box), box1);
+
+ gtk_box_pack_start (GTK_BOX (menubox), gtk_ui_manager_get_widget (ui, "/MenuBar"),
+ FALSE, FALSE, 0);
+
+
+
+ view = gtk_text_view_new ();
+ gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD);
+
+ scroll = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll),
+ GTK_SHADOW_IN);
+ gtk_container_add (GTK_CONTAINER (scroll), view);
+
+ build_languagelist ();
+
+ hbox = gtk_hbox_new (FALSE, 5);
+ attached = gtk_toggle_button_new_with_label ("Attached");
+ g_signal_connect (G_OBJECT (attached), "toggled",
+ G_CALLBACK (attach_cb), NULL);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (attached), TRUE);
+ gtk_box_pack_start (GTK_BOX (hbox), attached, FALSE, FALSE, 0);
+
+ gtk_box_pack_end (GTK_BOX (hbox), languagelist, FALSE, FALSE, 0);
+
+ box = gtk_vbox_new (FALSE, 5);
+gtk_box_pack_start (GTK_BOX (box), menubox,FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), scroll, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (box), hbox, FALSE, FALSE, 0);
+
+ gtk_widget_show_all (box);
+
+ gtk_window_set_default_size (GTK_WINDOW (window), 1200, 800);
+ gtk_window_set_title (GTK_WINDOW (window), "Sulekha");
+ gtk_container_set_border_width (GTK_CONTAINER (window), 1);
+ g_signal_connect (G_OBJECT (window), "delete-event",
+ G_CALLBACK (gtk_main_quit), NULL);
+ gtk_container_add (GTK_CONTAINER (window), box);
+
+ gtk_widget_show (window);
+ gtk_main ();
+
+ return 0;
+}
diff --git a/input-methods/sulekha/src/sulekhaspell.c b/input-methods/sulekha/src/sulekhaspell.c
new file mode 100644
index 0000000..58032f5
--- /dev/null
+++ b/input-methods/sulekha/src/sulekhaspell.c
@@ -0,0 +1,859 @@
+/* sulekhaspell - a transliteratio - spell-checking addon for GTK's TextView widget
+ * Based on gtkspell by Evan Martin.
+ *
+ * Copyright (C) 2007-2008
+ * Santhosh Thottingal<santhosh00@gmail.com>,
+ * Praveen Arimprathodiyil <pravi.a@gmail.com>
+ * Swathanthra Malayalam Computing.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <gtk/gtk.h>
+#include <libintl.h>
+#include <locale.h>
+#include "../config.h"
+#include "sulekhaspell.h"
+#include "transliteration.h"
+
+#define _(String) dgettext (PACKAGE, String)
+
+#define SULEKHASPELL_MISSPELLED_TAG "sulekhaspell-misspelled"
+
+#ifdef HAVE_ASPELL_H
+#define USING_ASPELL
+#include <aspell.h>
+#elif defined HAVE_PSPELL_H
+#define USING_PSPELL
+#include <pspell/pspell.h>
+#define AspellSpeller PspellManager
+#define speller manager
+#define aspell_speller_check pspell_manager_check
+#define aspell_speller_add_to_session pspell_manager_add_to_session
+#define aspell_speller_add_to_personal pspell_manager_add_to_personal
+#define aspell_speller_save_all_word_lists pspell_manager_save_all_word_lists
+#define aspell_speller_store_replacement pspell_manager_store_replacement
+#define AspellWordList PspellWordList
+#define AspellStringEnumeration PspellStringEmulation
+#define aspell_speller_suggest pspell_manager_suggest
+#define aspell_word_list_elements pspell_word_list_elements
+#define aspell_string_enumeration_next pspell_string_emulation_next
+#define delete_aspell_string_enumeration delete_pspell_string_emulation
+#define AspellConfig PspellConfig
+#define AspellCanHaveError PspellCanHaveError
+#define new_aspell_config new_pspell_config
+#define aspell_config_replace pspell_config_replace
+#define new_aspell_speller new_pspell_manager
+#define delete_aspell_config delete_pspell_config
+#define aspell_error_message pspell_error_message
+#define delete_aspell_speller delete_pspell_manager
+#define to_aspell_speller to_pspell_manager
+#define aspell_error_number pspell_error_number
+#define aspell pspell
+#endif
+
+const int debug = 0;
+const int quiet = 0;
+
+struct _SulekhaSpell
+{
+ GtkTextView *view;
+ GtkTextTag *tag_highlight;
+ GtkTextMark *mark_insert_start;
+ GtkTextMark *mark_insert_end;
+ gboolean deferred_check;
+ AspellSpeller *speller;
+ GtkTextMark *mark_click;
+};
+
+static void sulekhaspell_free (SulekhaSpell * spell);
+
+#define SULEKHASPELL_OBJECT_KEY "sulekhaspell"
+
+GQuark
+sulekhaspell_error_quark (void)
+{
+ static GQuark q = 0;
+ if (q == 0)
+ q = g_quark_from_static_string ("sulekhaspell-error-quark");
+ return q;
+}
+
+static gboolean
+sulekhaspell_text_iter_forward_word_end (GtkTextIter * i)
+{
+ GtkTextIter iter;
+
+/* heuristic:
+ * if we're on an singlequote/apostrophe and
+ * if the next letter is alphanumeric,
+ * this is an apostrophe. */
+
+ if (!gtk_text_iter_forward_word_end (i))
+ return FALSE;
+
+ if (gtk_text_iter_get_char (i) != '\'')
+ return TRUE;
+
+ iter = *i;
+ if (gtk_text_iter_forward_char (&iter))
+ {
+ if (g_unichar_isalpha (gtk_text_iter_get_char (&iter)))
+ {
+ return (gtk_text_iter_forward_word_end (i));
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+sulekhaspell_text_iter_backward_word_start (GtkTextIter * i)
+{
+ GtkTextIter iter;
+
+ if (!gtk_text_iter_backward_word_start (i))
+ return FALSE;
+
+ iter = *i;
+ if (gtk_text_iter_backward_char (&iter))
+ {
+ if (gtk_text_iter_get_char (&iter) == '\'')
+ {
+ if (gtk_text_iter_backward_char (&iter))
+ {
+ if (g_unichar_isalpha (gtk_text_iter_get_char (&iter)))
+ {
+ return (gtk_text_iter_backward_word_start (i));
+ }
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+#define gtk_text_iter_backward_word_start sulekhaspell_text_iter_backward_word_start
+#define gtk_text_iter_forward_word_end sulekhaspell_text_iter_forward_word_end
+
+static void
+check_word (SulekhaSpell * spell, GtkTextBuffer * buffer,
+ GtkTextIter * start, GtkTextIter * end)
+{
+ char *text;
+ char *oldword;
+ text = gtk_text_buffer_get_text (buffer, start, end, FALSE);
+ if (debug)
+ g_print ("checking: %s\n", text);
+ g_print ("[santhosh]checking: %s\n", text);
+ text = transliterate_ml (text, 0, strlen (text));
+ g_print ("[santhosh]After transliteration checking: %s\n", text);
+ if (g_unichar_isdigit (*text) == FALSE) /* don't check numbers */
+ if (aspell_speller_check (spell->speller, text, -1) == FALSE)
+ gtk_text_buffer_apply_tag (buffer, spell->tag_highlight, start, end);
+ g_free (text);
+}
+
+static void
+print_iter (char *name, GtkTextIter * iter)
+{
+ g_print ("%1s[%d%c%c%c] ", name, gtk_text_iter_get_offset (iter),
+ gtk_text_iter_starts_word (iter) ? 's' : ' ',
+ gtk_text_iter_inside_word (iter) ? 'i' : ' ',
+ gtk_text_iter_ends_word (iter) ? 'e' : ' ');
+}
+
+static void
+check_range (SulekhaSpell * spell, GtkTextBuffer * buffer,
+ GtkTextIter start, GtkTextIter end, gboolean force_all)
+{
+ /* we need to "split" on word boundaries.
+ * luckily, pango knows what "words" are
+ * so we don't have to figure it out. */
+
+ GtkTextIter wstart, wend, cursor, precursor;
+ gboolean inword, highlight;
+ if (debug)
+ {
+ g_print ("check_range: ");
+ print_iter ("s", &start);
+ print_iter ("e", &end);
+ g_print (" -> ");
+ }
+
+
+
+ if (gtk_text_iter_inside_word (&end))
+ gtk_text_iter_forward_word_end (&end);
+ if (!gtk_text_iter_starts_word (&start))
+ {
+ if (gtk_text_iter_inside_word (&start) ||
+ gtk_text_iter_ends_word (&start))
+ {
+ gtk_text_iter_backward_word_start (&start);
+ }
+ else
+ {
+ /* if we're neither at the beginning nor inside a word,
+ * me must be in some spaces.
+ * skip forward to the beginning of the next word. */
+ //gtk_text_buffer_remove_tag(buffer, tag_highlight, &start, &end);
+ if (gtk_text_iter_forward_word_end (&start))
+ gtk_text_iter_backward_word_start (&start);
+ }
+ }
+ gtk_text_buffer_get_iter_at_mark (buffer, &cursor,
+ gtk_text_buffer_get_insert (buffer));
+
+ precursor = cursor;
+ gtk_text_iter_backward_char (&precursor);
+ highlight = gtk_text_iter_has_tag (&cursor, spell->tag_highlight) ||
+ gtk_text_iter_has_tag (&precursor, spell->tag_highlight);
+
+ gtk_text_buffer_remove_tag (buffer, spell->tag_highlight, &start, &end);
+
+ /* Fix a corner case when replacement occurs at beginning of buffer:
+ * An iter at offset 0 seems to always be inside a word,
+ * even if it's not. Possibly a pango bug.
+ */
+ if (gtk_text_iter_get_offset (&start) == 0)
+ {
+ gtk_text_iter_forward_word_end (&start);
+ gtk_text_iter_backward_word_start (&start);
+ }
+
+ if (debug)
+ {
+ print_iter ("s", &start);
+ print_iter ("e", &end);
+ g_print ("\n");
+ }
+
+ wstart = start;
+ while (gtk_text_iter_compare (&wstart, &end) < 0)
+ {
+ /* move wend to the end of the current word. */
+ wend = wstart;
+ gtk_text_iter_forward_word_end (&wend);
+
+ inword = (gtk_text_iter_compare (&wstart, &cursor) < 0) &&
+ (gtk_text_iter_compare (&cursor, &wend) <= 0);
+
+ if (inword && !force_all)
+ {
+ /* this word is being actively edited,
+ * only check if it's already highligted,
+ * otherwise defer this check until later. */
+ if (highlight)
+ check_word (spell, buffer, &wstart, &wend);
+ else
+ spell->deferred_check = TRUE;
+ }
+ else
+ {
+ check_word (spell, buffer, &wstart, &wend);
+ spell->deferred_check = FALSE;
+ }
+
+ /* now move wend to the beginning of the next word, */
+ gtk_text_iter_forward_word_end (&wend);
+ gtk_text_iter_backward_word_start (&wend);
+ /* make sure we've actually advanced
+ * (we don't advance in some corner cases), */
+ if (gtk_text_iter_equal (&wstart, &wend))
+ break; /* we're done in these cases.. */
+ /* and then pick this as the new next word beginning. */
+ wstart = wend;
+ }
+}
+
+static void
+check_deferred_range (SulekhaSpell * spell, GtkTextBuffer * buffer,
+ gboolean force_all)
+{
+ GtkTextIter start, end;
+ gtk_text_buffer_get_iter_at_mark (buffer, &start, spell->mark_insert_start);
+ gtk_text_buffer_get_iter_at_mark (buffer, &end, spell->mark_insert_end);
+ check_range (spell, buffer, start, end, force_all);
+}
+
+/* insertion works like this:
+ * - before the text is inserted, we mark the position in the buffer.
+ * - after the text is inserted, we see where our mark is and use that and
+ * the current position to check the entire range of inserted text.
+ *
+ * this may be overkill for the common case (inserting one character). */
+
+static void
+insert_text_before (GtkTextBuffer * buffer, GtkTextIter * iter,
+ gchar * text, gint len, SulekhaSpell * spell)
+{
+ gtk_text_buffer_move_mark (buffer, spell->mark_insert_start, iter);
+}
+
+static void
+insert_text_after (GtkTextBuffer * buffer, GtkTextIter * iter,
+ gchar * text, gint len, SulekhaSpell * spell)
+{
+ GtkTextIter start;
+
+ if (debug)
+ g_print ("insert\n");
+
+ /* we need to check a range of text. */
+ gtk_text_buffer_get_iter_at_mark (buffer, &start, spell->mark_insert_start);
+ check_range (spell, buffer, start, *iter, FALSE);
+
+ gtk_text_buffer_move_mark (buffer, spell->mark_insert_end, iter);
+}
+
+/* deleting is more simple: we're given the range of deleted text.
+ * after deletion, the start and end iters should be at the same position
+ * (because all of the text between them was deleted!).
+ * this means we only really check the words immediately bounding the
+ * deletion.
+ */
+
+static void
+delete_range_after (GtkTextBuffer * buffer,
+ GtkTextIter * start, GtkTextIter * end,
+ SulekhaSpell * spell)
+{
+ if (debug)
+ g_print ("delete\n");
+ check_range (spell, buffer, *start, *end, FALSE);
+}
+
+static void
+mark_set (GtkTextBuffer * buffer, GtkTextIter * iter,
+ GtkTextMark * mark, SulekhaSpell * spell)
+{
+ /* if the cursor has moved and there is a deferred check so handle it now */
+ if ((mark == gtk_text_buffer_get_insert (buffer)) && spell->deferred_check)
+ check_deferred_range (spell, buffer, FALSE);
+}
+
+static void
+get_word_extents_from_mark (GtkTextBuffer * buffer,
+ GtkTextIter * start, GtkTextIter * end,
+ GtkTextMark * mark)
+{
+ gtk_text_buffer_get_iter_at_mark (buffer, start, mark);
+ if (!gtk_text_iter_starts_word (start))
+ gtk_text_iter_backward_word_start (start);
+ *end = *start;
+ if (gtk_text_iter_inside_word (end))
+ gtk_text_iter_forward_word_end (end);
+}
+
+static void
+add_to_dictionary (GtkWidget * menuitem, SulekhaSpell * spell)
+{
+ char *word;
+ GtkTextIter start, end;
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer (spell->view);
+
+ get_word_extents_from_mark (buffer, &start, &end, spell->mark_click);
+ word = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+
+ aspell_speller_add_to_personal (spell->speller, word, strlen (word));
+ aspell_speller_save_all_word_lists (spell->speller);
+
+ sulekhaspell_recheck_all (spell);
+
+ g_free (word);
+}
+
+static void
+ignore_all (GtkWidget * menuitem, SulekhaSpell * spell)
+{
+ char *word;
+ GtkTextIter start, end;
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer (spell->view);
+
+ get_word_extents_from_mark (buffer, &start, &end, spell->mark_click);
+ word = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+
+ aspell_speller_add_to_session (spell->speller, word, strlen (word));
+
+ sulekhaspell_recheck_all (spell);
+
+ g_free (word);
+}
+
+static void
+replace_word (GtkWidget * menuitem, SulekhaSpell * spell)
+{
+ char *oldword;
+ const char *newword;
+ GtkTextIter start, end;
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer (spell->view);
+
+ get_word_extents_from_mark (buffer, &start, &end, spell->mark_click);
+ oldword = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+ newword = gtk_label_get_text (GTK_LABEL (GTK_BIN (menuitem)->child));
+
+ if (debug)
+ {
+ g_print ("old word: '%s'\n", oldword);
+ print_iter ("s", &start);
+ print_iter ("e", &end);
+ g_print ("\nnew word: '%s'\n", newword);
+ }
+
+ gtk_text_buffer_delete (buffer, &start, &end);
+ gtk_text_buffer_insert (buffer, &start, newword, -1);
+
+ aspell_speller_store_replacement (spell->speller,
+ oldword, strlen (oldword),
+ newword, strlen (newword));
+
+ g_free (oldword);
+}
+
+GtkWidget *
+build_suggestion_menu (SulekhaSpell * spell, GtkTextBuffer * buffer,
+ const char *word)
+{
+ const char *suggestion;
+ GtkWidget *topmenu, *menu;
+ GtkWidget *mi;
+ GtkWidget *hbox;
+ int count = 0;
+ void *spelldata;
+ const AspellWordList *suggestions;
+ AspellStringEnumeration *elements;
+ char *label;
+ //santhosh
+ word = transliterate_ml (word, 0, strlen (word));
+
+ //end santhosh
+ topmenu = menu = gtk_menu_new ();
+
+ suggestions = aspell_speller_suggest (spell->speller, word, -1);
+ elements = aspell_word_list_elements (suggestions);
+
+ suggestion = aspell_string_enumeration_next (elements);
+ if (suggestion == NULL)
+ {
+ /* no suggestions. put something in the menu anyway... */
+ GtkWidget *label;
+ label = gtk_label_new ("");
+ gtk_label_set_markup (GTK_LABEL (label), _("<i>(no suggestions)</i>"));
+
+ mi = gtk_menu_item_new ();
+ gtk_container_add (GTK_CONTAINER (mi), label);
+ gtk_widget_show_all (mi);
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mi);
+ }
+ else
+ {
+ /* build a set of menus with suggestions. */
+ while (suggestion != NULL)
+ {
+ if (count == 10)
+ {
+ mi = gtk_menu_item_new ();
+ gtk_widget_show (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+ mi = gtk_menu_item_new_with_label (_("More..."));
+ gtk_widget_show (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+ menu = gtk_menu_new ();
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), menu);
+ count = 0;
+ }
+ mi = gtk_menu_item_new_with_label (suggestion);
+ g_signal_connect (G_OBJECT (mi), "activate",
+ G_CALLBACK (replace_word), spell);
+ gtk_widget_show (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+ count++;
+ suggestion = aspell_string_enumeration_next (elements);
+ }
+ }
+
+ delete_aspell_string_enumeration (elements);
+
+ /* Separator */
+ mi = gtk_menu_item_new ();
+ gtk_widget_show (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (topmenu), mi);
+
+ /* + Add to Dictionary */
+ label = g_strdup_printf (_("Add \"%s\" to Dictionary"), word);
+ mi = gtk_image_menu_item_new_with_label (label);
+ g_free (label);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi),
+ gtk_image_new_from_stock (GTK_STOCK_ADD,
+ GTK_ICON_SIZE_MENU));
+ g_signal_connect (G_OBJECT (mi), "activate", G_CALLBACK (add_to_dictionary),
+ spell);
+ gtk_widget_show_all (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (topmenu), mi);
+
+ /* - Ignore All */
+ mi = gtk_image_menu_item_new_with_label (_("Ignore All"));
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi),
+ gtk_image_new_from_stock (GTK_STOCK_REMOVE,
+ GTK_ICON_SIZE_MENU));
+ g_signal_connect (G_OBJECT (mi), "activate", G_CALLBACK (ignore_all),
+ spell);
+ gtk_widget_show_all (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (topmenu), mi);
+
+ return topmenu;
+}
+
+static void
+populate_popup (GtkTextView * textview, GtkMenu * menu, SulekhaSpell * spell)
+{
+ GtkWidget *img, *mi;
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer (textview);
+ GtkTextIter start, end;
+ char *word;
+
+ /* we need to figure out if they picked a misspelled word. */
+ get_word_extents_from_mark (buffer, &start, &end, spell->mark_click);
+
+ /* if our highlight algorithm ever messes up,
+ * this isn't correct, either. */
+ if (!gtk_text_iter_has_tag (&start, spell->tag_highlight))
+ return; /* word wasn't misspelled. */
+
+ /* menu separator comes first. */
+ mi = gtk_menu_item_new ();
+ gtk_widget_show (mi);
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mi);
+
+ /* then, on top of it, the suggestions menu. */
+ img = gtk_image_new_from_stock (GTK_STOCK_SPELL_CHECK, GTK_ICON_SIZE_MENU);
+ mi = gtk_image_menu_item_new_with_label (_("Spelling Suggestions"));
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
+
+ word = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi),
+ build_suggestion_menu (spell, buffer, word));
+
+ g_free (word);
+
+ gtk_widget_show_all (mi);
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mi);
+}
+
+/* when the user right-clicks on a word, they want to check that word.
+ * here, we do NOT move the cursor to the location of the clicked-upon word
+ * since that prevents the use of edit functions on the context menu. */
+static gboolean
+button_press_event (GtkTextView * view, GdkEventButton * event,
+ SulekhaSpell * spell)
+{
+ if (event->button == 3)
+ {
+ gint x, y;
+ GtkTextIter iter;
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer (view);
+
+ /* handle deferred check if it exists */
+ if (spell->deferred_check)
+ check_deferred_range (spell, buffer, TRUE);
+
+ gtk_text_view_window_to_buffer_coords (view,
+ GTK_TEXT_WINDOW_TEXT,
+ event->x, event->y, &x, &y);
+ gtk_text_view_get_iter_at_location (view, &iter, x, y);
+ gtk_text_buffer_move_mark (buffer, spell->mark_click, &iter);
+ }
+ return FALSE; /* false: let gtk process this event, too.
+ we don't want to eat any events. */
+}
+
+/* This event occurs when the popup menu is requested through a key-binding
+ * (Menu Key or <shift>+F10 by default). In this case we want to set
+ * spell->mark_click to the cursor position. */
+static gboolean
+popup_menu_event (GtkTextView * view, SulekhaSpell * spell)
+{
+ GtkTextIter iter;
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer (view);
+
+ gtk_text_buffer_get_iter_at_mark (buffer, &iter,
+ gtk_text_buffer_get_insert (buffer));
+ gtk_text_buffer_move_mark (buffer, spell->mark_click, &iter);
+ return FALSE; /* false: let gtk process this event, too. */
+}
+
+static gboolean
+sulekhaspell_set_language_internal (SulekhaSpell * spell, const gchar * lang,
+ GError ** error)
+{
+ AspellConfig *config;
+ AspellCanHaveError *err;
+ AspellSpeller *speller;
+
+ if (lang == NULL)
+ {
+ lang = g_getenv ("LANG");
+ if (lang)
+ {
+ if (g_strncasecmp (lang, "C", 1) == 0)
+ lang = NULL;
+ else if (lang[0] == 0)
+ lang = NULL;
+ }
+ }
+
+ config = new_aspell_config ();
+ if (lang)
+ aspell_config_replace (config, "language-tag", lang);
+ aspell_config_replace (config, "encoding", "utf-8");
+ err = new_aspell_speller (config);
+ delete_aspell_config (config);
+
+ if (aspell_error_number (err) != 0)
+ {
+#ifdef USING_ASPELL
+ g_set_error (error, SULEKHASPELL_ERROR, SULEKHASPELL_ERROR_BACKEND,
+ "aspell: %s", aspell_error_message (err));
+#elif defined USING_PSPELL
+ g_set_error (error, SULEKHASPELL_ERROR, SULEKHASPELL_ERROR_BACKEND,
+ "pspell: %s", aspell_error_message (err));
+#endif
+ return FALSE;
+ }
+ if (spell->speller)
+ delete_aspell_speller (spell->speller);
+ spell->speller = to_aspell_speller (err);
+
+ return TRUE;
+}
+
+/**
+ * sulekhaspell_set_language:
+ * @spell: The #SulekhaSpell object.
+ * @lang: The language to use, in a form pspell understands (it appears to
+ * be a locale specifier?).
+ * @error: Return location for error.
+ *
+ * Set the language on @spell to @lang, possibily returning an error in
+ * @error.
+ *
+ * Returns: FALSE if there was an error.
+ */
+gboolean
+sulekhaspell_set_language (SulekhaSpell * spell, const gchar * lang,
+ GError ** error)
+{
+ gboolean ret;
+
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
+
+ ret = sulekhaspell_set_language_internal (spell, lang, error);
+ if (ret)
+ sulekhaspell_recheck_all (spell);
+
+ return ret;
+}
+
+/**
+ * sulekhaspell_recheck_all:
+ * @spell: The #SulekhaSpell object.
+ *
+ * Recheck the spelling in the entire buffer.
+ */
+void
+sulekhaspell_recheck_all (SulekhaSpell * spell)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+
+ buffer = gtk_text_view_get_buffer (spell->view);
+
+ gtk_text_buffer_get_bounds (buffer, &start, &end);
+
+ check_range (spell, buffer, start, end, TRUE);
+}
+
+/**
+ * sulekhaspell_new_attach:
+ * @view: The #GtkTextView to attach to.
+ * @lang: The language to use, in a form pspell understands (it appears to
+ * be a locale specifier?).
+ * @error: Return location for error.
+ *
+ * Create a new #SulekhaSpell object attached to @view with language @lang.
+ *
+ * Returns: a new #SulekhaSpell object, or %NULL on error.
+ */
+SulekhaSpell *
+sulekhaspell_new_attach (GtkTextView * view, const gchar * lang,
+ GError ** error)
+{
+ GtkTextBuffer *buffer;
+ GtkTextTagTable *tagtable;
+ GtkTextIter start, end;
+
+ SulekhaSpell *spell;
+
+#ifdef ENABLE_NLS
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (PACKAGE, "UTF-8");
+#endif
+
+ if (error)
+ g_return_val_if_fail (*error == NULL, NULL);
+
+ spell = g_object_get_data (G_OBJECT (view), SULEKHASPELL_OBJECT_KEY);
+ g_assert (spell == NULL);
+
+ /* attach to the widget */
+ spell = g_new0 (SulekhaSpell, 1);
+ spell->view = view;
+ if (!sulekhaspell_set_language_internal (spell, lang, error))
+ {
+ g_free (spell);
+ return NULL;
+ }
+ g_object_set_data (G_OBJECT (view), SULEKHASPELL_OBJECT_KEY, spell);
+
+ g_signal_connect_swapped (G_OBJECT (view), "destroy",
+ G_CALLBACK (sulekhaspell_free), spell);
+ g_signal_connect (G_OBJECT (view), "button-press-event",
+ G_CALLBACK (button_press_event), spell);
+ g_signal_connect (G_OBJECT (view), "populate-popup",
+ G_CALLBACK (populate_popup), spell);
+ g_signal_connect (G_OBJECT (view), "popup-menu",
+ G_CALLBACK (popup_menu_event), spell);
+
+ buffer = gtk_text_view_get_buffer (view);
+
+ g_signal_connect (G_OBJECT (buffer),
+ "insert-text", G_CALLBACK (insert_text_before), spell);
+ g_signal_connect_after (G_OBJECT (buffer),
+ "insert-text",
+ G_CALLBACK (insert_text_after), spell);
+ g_signal_connect_after (G_OBJECT (buffer),
+ "delete-range",
+ G_CALLBACK (delete_range_after), spell);
+ g_signal_connect (G_OBJECT (buffer),
+ "mark-set", G_CALLBACK (mark_set), spell);
+
+ tagtable = gtk_text_buffer_get_tag_table (buffer);
+ spell->tag_highlight =
+ gtk_text_tag_table_lookup (tagtable, SULEKHASPELL_MISSPELLED_TAG);
+
+ if (spell->tag_highlight == NULL)
+ {
+ spell->tag_highlight = gtk_text_buffer_create_tag (buffer,
+ SULEKHASPELL_MISSPELLED_TAG,
+#ifdef HAVE_PANGO_UNDERLINE_ERROR
+ "underline",
+ PANGO_UNDERLINE_ERROR,
+#else
+ "foreground", "red",
+ "underline",
+ PANGO_UNDERLINE_SINGLE,
+#endif
+ NULL);
+ }
+
+ /* we create the mark here, but we don't use it until text is
+ * inserted, so we don't really care where iter points. */
+ gtk_text_buffer_get_bounds (buffer, &start, &end);
+ spell->mark_insert_start = gtk_text_buffer_create_mark (buffer,
+ "sulekhaspell-insert-start",
+ &start, TRUE);
+ spell->mark_insert_end = gtk_text_buffer_create_mark (buffer,
+ "sulekhaspell-insert-end",
+ &start, TRUE);
+ spell->mark_click = gtk_text_buffer_create_mark (buffer,
+ "sulekhaspell-click",
+ &start, TRUE);
+
+ spell->deferred_check = FALSE;
+
+ /* now check the entire text buffer. */
+ sulekhaspell_recheck_all (spell);
+ return spell;
+}
+
+static void
+sulekhaspell_free (SulekhaSpell * spell)
+{
+ GtkTextBuffer *buffer;
+ GtkTextTagTable *table;
+ GtkTextIter start, end;
+
+ buffer = gtk_text_view_get_buffer (spell->view);
+ table = gtk_text_buffer_get_tag_table (buffer);
+
+ gtk_text_buffer_get_bounds (buffer, &start, &end);
+ gtk_text_buffer_remove_tag (buffer, spell->tag_highlight, &start, &end);
+
+ gtk_text_buffer_delete_mark (buffer, spell->mark_insert_start);
+ gtk_text_buffer_delete_mark (buffer, spell->mark_insert_end);
+ gtk_text_buffer_delete_mark (buffer, spell->mark_click);
+
+ delete_aspell_speller (spell->speller);
+
+ g_signal_handlers_disconnect_matched (spell->view,
+ G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, spell);
+ g_signal_handlers_disconnect_matched (buffer,
+ G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, spell);
+ g_free (spell);
+}
+
+/**
+ * sulekhaspell_get_from_text_view:
+ * @view: A #GtkTextView.
+ *
+ * Retrieves the #SulekhaSpell object attached to a text view.
+ *
+ * Returns: the #SulekhaSpell object, or %NULL if there is no #SulekhaSpell
+ * attached to @view.
+ */
+SulekhaSpell *
+sulekhaspell_get_from_text_view (GtkTextView * view)
+{
+ return g_object_get_data (G_OBJECT (view), SULEKHASPELL_OBJECT_KEY);
+}
+
+/**
+ * sulekhaspell_detach:
+ * @spell: A #SulekhaSpell.
+ *
+ * Detaches this #SulekhaSpell from its text view. Use
+ * sulekhaspell_get_from_text_view() to retrieve a SulekhaSpell from a
+ * #GtkTextView.
+ */
+void
+sulekhaspell_detach (SulekhaSpell * spell)
+{
+ g_return_if_fail (spell != NULL);
+
+ g_object_set_data (G_OBJECT (spell->view), SULEKHASPELL_OBJECT_KEY, NULL);
+ sulekhaspell_free (spell);
+}
diff --git a/input-methods/sulekha/src/sulekhaspell.c~ b/input-methods/sulekha/src/sulekhaspell.c~
new file mode 100644
index 0000000..143d989
--- /dev/null
+++ b/input-methods/sulekha/src/sulekhaspell.c~
@@ -0,0 +1,842 @@
+/* sulekhaspell - a transliteratio - spell-checking addon for GTK's TextView widget
+ * Copyright (c) 2007-2008 Santhosh Thottingal
+ * Based on gtkspell by Evan Martin.
+ */
+
+
+#include <gtk/gtk.h>
+#include <libintl.h>
+#include <locale.h>
+#include "../config.h"
+#include "sulekhaspell.h"
+#include "transliteration.h"
+
+#define _(String) dgettext (PACKAGE, String)
+
+#define SULEKHASPELL_MISSPELLED_TAG "sulekhaspell-misspelled"
+
+#ifdef HAVE_ASPELL_H
+#define USING_ASPELL
+#include <aspell.h>
+#elif defined HAVE_PSPELL_H
+#define USING_PSPELL
+#include <pspell/pspell.h>
+#define AspellSpeller PspellManager
+#define speller manager
+#define aspell_speller_check pspell_manager_check
+#define aspell_speller_add_to_session pspell_manager_add_to_session
+#define aspell_speller_add_to_personal pspell_manager_add_to_personal
+#define aspell_speller_save_all_word_lists pspell_manager_save_all_word_lists
+#define aspell_speller_store_replacement pspell_manager_store_replacement
+#define AspellWordList PspellWordList
+#define AspellStringEnumeration PspellStringEmulation
+#define aspell_speller_suggest pspell_manager_suggest
+#define aspell_word_list_elements pspell_word_list_elements
+#define aspell_string_enumeration_next pspell_string_emulation_next
+#define delete_aspell_string_enumeration delete_pspell_string_emulation
+#define AspellConfig PspellConfig
+#define AspellCanHaveError PspellCanHaveError
+#define new_aspell_config new_pspell_config
+#define aspell_config_replace pspell_config_replace
+#define new_aspell_speller new_pspell_manager
+#define delete_aspell_config delete_pspell_config
+#define aspell_error_message pspell_error_message
+#define delete_aspell_speller delete_pspell_manager
+#define to_aspell_speller to_pspell_manager
+#define aspell_error_number pspell_error_number
+#define aspell pspell
+#endif
+
+const int debug = 0;
+const int quiet = 0;
+
+struct _SulekhaSpell
+{
+ GtkTextView *view;
+ GtkTextTag *tag_highlight;
+ GtkTextMark *mark_insert_start;
+ GtkTextMark *mark_insert_end;
+ gboolean deferred_check;
+ AspellSpeller *speller;
+ GtkTextMark *mark_click;
+};
+
+static void sulekhaspell_free (SulekhaSpell * spell);
+
+#define SULEKHASPELL_OBJECT_KEY "sulekhaspell"
+
+GQuark
+sulekhaspell_error_quark (void)
+{
+ static GQuark q = 0;
+ if (q == 0)
+ q = g_quark_from_static_string ("sulekhaspell-error-quark");
+ return q;
+}
+
+static gboolean
+sulekhaspell_text_iter_forward_word_end (GtkTextIter * i)
+{
+ GtkTextIter iter;
+
+/* heuristic:
+ * if we're on an singlequote/apostrophe and
+ * if the next letter is alphanumeric,
+ * this is an apostrophe. */
+
+ if (!gtk_text_iter_forward_word_end (i))
+ return FALSE;
+
+ if (gtk_text_iter_get_char (i) != '\'')
+ return TRUE;
+
+ iter = *i;
+ if (gtk_text_iter_forward_char (&iter))
+ {
+ if (g_unichar_isalpha (gtk_text_iter_get_char (&iter)))
+ {
+ return (gtk_text_iter_forward_word_end (i));
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+sulekhaspell_text_iter_backward_word_start (GtkTextIter * i)
+{
+ GtkTextIter iter;
+
+ if (!gtk_text_iter_backward_word_start (i))
+ return FALSE;
+
+ iter = *i;
+ if (gtk_text_iter_backward_char (&iter))
+ {
+ if (gtk_text_iter_get_char (&iter) == '\'')
+ {
+ if (gtk_text_iter_backward_char (&iter))
+ {
+ if (g_unichar_isalpha (gtk_text_iter_get_char (&iter)))
+ {
+ return (gtk_text_iter_backward_word_start (i));
+ }
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+#define gtk_text_iter_backward_word_start sulekhaspell_text_iter_backward_word_start
+#define gtk_text_iter_forward_word_end sulekhaspell_text_iter_forward_word_end
+
+static void
+check_word (SulekhaSpell * spell, GtkTextBuffer * buffer,
+ GtkTextIter * start, GtkTextIter * end)
+{
+ char *text;
+ char *oldword;
+ text = gtk_text_buffer_get_text (buffer, start, end, FALSE);
+ if (debug)
+ g_print ("checking: %s\n", text);
+ g_print ("[santhosh]checking: %s\n", text);
+ text = transliterate_ml (text, 0, strlen (text));
+ g_print ("[santhosh]After transliteration checking: %s\n", text);
+ if (g_unichar_isdigit (*text) == FALSE) /* don't check numbers */
+ if (aspell_speller_check (spell->speller, text, -1) == FALSE)
+ gtk_text_buffer_apply_tag (buffer, spell->tag_highlight, start, end);
+ g_free (text);
+}
+
+static void
+print_iter (char *name, GtkTextIter * iter)
+{
+ g_print ("%1s[%d%c%c%c] ", name, gtk_text_iter_get_offset (iter),
+ gtk_text_iter_starts_word (iter) ? 's' : ' ',
+ gtk_text_iter_inside_word (iter) ? 'i' : ' ',
+ gtk_text_iter_ends_word (iter) ? 'e' : ' ');
+}
+
+static void
+check_range (SulekhaSpell * spell, GtkTextBuffer * buffer,
+ GtkTextIter start, GtkTextIter end, gboolean force_all)
+{
+ /* we need to "split" on word boundaries.
+ * luckily, pango knows what "words" are
+ * so we don't have to figure it out. */
+
+ GtkTextIter wstart, wend, cursor, precursor;
+ gboolean inword, highlight;
+ if (debug)
+ {
+ g_print ("check_range: ");
+ print_iter ("s", &start);
+ print_iter ("e", &end);
+ g_print (" -> ");
+ }
+
+
+
+ if (gtk_text_iter_inside_word (&end))
+ gtk_text_iter_forward_word_end (&end);
+ if (!gtk_text_iter_starts_word (&start))
+ {
+ if (gtk_text_iter_inside_word (&start) ||
+ gtk_text_iter_ends_word (&start))
+ {
+ gtk_text_iter_backward_word_start (&start);
+ }
+ else
+ {
+ /* if we're neither at the beginning nor inside a word,
+ * me must be in some spaces.
+ * skip forward to the beginning of the next word. */
+ //gtk_text_buffer_remove_tag(buffer, tag_highlight, &start, &end);
+ if (gtk_text_iter_forward_word_end (&start))
+ gtk_text_iter_backward_word_start (&start);
+ }
+ }
+ gtk_text_buffer_get_iter_at_mark (buffer, &cursor,
+ gtk_text_buffer_get_insert (buffer));
+
+ precursor = cursor;
+ gtk_text_iter_backward_char (&precursor);
+ highlight = gtk_text_iter_has_tag (&cursor, spell->tag_highlight) ||
+ gtk_text_iter_has_tag (&precursor, spell->tag_highlight);
+
+ gtk_text_buffer_remove_tag (buffer, spell->tag_highlight, &start, &end);
+
+ /* Fix a corner case when replacement occurs at beginning of buffer:
+ * An iter at offset 0 seems to always be inside a word,
+ * even if it's not. Possibly a pango bug.
+ */
+ if (gtk_text_iter_get_offset (&start) == 0)
+ {
+ gtk_text_iter_forward_word_end (&start);
+ gtk_text_iter_backward_word_start (&start);
+ }
+
+ if (debug)
+ {
+ print_iter ("s", &start);
+ print_iter ("e", &end);
+ g_print ("\n");
+ }
+
+ wstart = start;
+ while (gtk_text_iter_compare (&wstart, &end) < 0)
+ {
+ /* move wend to the end of the current word. */
+ wend = wstart;
+ gtk_text_iter_forward_word_end (&wend);
+
+ inword = (gtk_text_iter_compare (&wstart, &cursor) < 0) &&
+ (gtk_text_iter_compare (&cursor, &wend) <= 0);
+
+ if (inword && !force_all)
+ {
+ /* this word is being actively edited,
+ * only check if it's already highligted,
+ * otherwise defer this check until later. */
+ if (highlight)
+ check_word (spell, buffer, &wstart, &wend);
+ else
+ spell->deferred_check = TRUE;
+ }
+ else
+ {
+ check_word (spell, buffer, &wstart, &wend);
+ spell->deferred_check = FALSE;
+ }
+
+ /* now move wend to the beginning of the next word, */
+ gtk_text_iter_forward_word_end (&wend);
+ gtk_text_iter_backward_word_start (&wend);
+ /* make sure we've actually advanced
+ * (we don't advance in some corner cases), */
+ if (gtk_text_iter_equal (&wstart, &wend))
+ break; /* we're done in these cases.. */
+ /* and then pick this as the new next word beginning. */
+ wstart = wend;
+ }
+}
+
+static void
+check_deferred_range (SulekhaSpell * spell, GtkTextBuffer * buffer,
+ gboolean force_all)
+{
+ GtkTextIter start, end;
+ gtk_text_buffer_get_iter_at_mark (buffer, &start, spell->mark_insert_start);
+ gtk_text_buffer_get_iter_at_mark (buffer, &end, spell->mark_insert_end);
+ check_range (spell, buffer, start, end, force_all);
+}
+
+/* insertion works like this:
+ * - before the text is inserted, we mark the position in the buffer.
+ * - after the text is inserted, we see where our mark is and use that and
+ * the current position to check the entire range of inserted text.
+ *
+ * this may be overkill for the common case (inserting one character). */
+
+static void
+insert_text_before (GtkTextBuffer * buffer, GtkTextIter * iter,
+ gchar * text, gint len, SulekhaSpell * spell)
+{
+ gtk_text_buffer_move_mark (buffer, spell->mark_insert_start, iter);
+}
+
+static void
+insert_text_after (GtkTextBuffer * buffer, GtkTextIter * iter,
+ gchar * text, gint len, SulekhaSpell * spell)
+{
+ GtkTextIter start;
+
+ if (debug)
+ g_print ("insert\n");
+
+ /* we need to check a range of text. */
+ gtk_text_buffer_get_iter_at_mark (buffer, &start, spell->mark_insert_start);
+ check_range (spell, buffer, start, *iter, FALSE);
+
+ gtk_text_buffer_move_mark (buffer, spell->mark_insert_end, iter);
+}
+
+/* deleting is more simple: we're given the range of deleted text.
+ * after deletion, the start and end iters should be at the same position
+ * (because all of the text between them was deleted!).
+ * this means we only really check the words immediately bounding the
+ * deletion.
+ */
+
+static void
+delete_range_after (GtkTextBuffer * buffer,
+ GtkTextIter * start, GtkTextIter * end,
+ SulekhaSpell * spell)
+{
+ if (debug)
+ g_print ("delete\n");
+ check_range (spell, buffer, *start, *end, FALSE);
+}
+
+static void
+mark_set (GtkTextBuffer * buffer, GtkTextIter * iter,
+ GtkTextMark * mark, SulekhaSpell * spell)
+{
+ /* if the cursor has moved and there is a deferred check so handle it now */
+ if ((mark == gtk_text_buffer_get_insert (buffer)) && spell->deferred_check)
+ check_deferred_range (spell, buffer, FALSE);
+}
+
+static void
+get_word_extents_from_mark (GtkTextBuffer * buffer,
+ GtkTextIter * start, GtkTextIter * end,
+ GtkTextMark * mark)
+{
+ gtk_text_buffer_get_iter_at_mark (buffer, start, mark);
+ if (!gtk_text_iter_starts_word (start))
+ gtk_text_iter_backward_word_start (start);
+ *end = *start;
+ if (gtk_text_iter_inside_word (end))
+ gtk_text_iter_forward_word_end (end);
+}
+
+static void
+add_to_dictionary (GtkWidget * menuitem, SulekhaSpell * spell)
+{
+ char *word;
+ GtkTextIter start, end;
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer (spell->view);
+
+ get_word_extents_from_mark (buffer, &start, &end, spell->mark_click);
+ word = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+
+ aspell_speller_add_to_personal (spell->speller, word, strlen (word));
+ aspell_speller_save_all_word_lists (spell->speller);
+
+ sulekhaspell_recheck_all (spell);
+
+ g_free (word);
+}
+
+static void
+ignore_all (GtkWidget * menuitem, SulekhaSpell * spell)
+{
+ char *word;
+ GtkTextIter start, end;
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer (spell->view);
+
+ get_word_extents_from_mark (buffer, &start, &end, spell->mark_click);
+ word = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+
+ aspell_speller_add_to_session (spell->speller, word, strlen (word));
+
+ sulekhaspell_recheck_all (spell);
+
+ g_free (word);
+}
+
+static void
+replace_word (GtkWidget * menuitem, SulekhaSpell * spell)
+{
+ char *oldword;
+ const char *newword;
+ GtkTextIter start, end;
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer (spell->view);
+
+ get_word_extents_from_mark (buffer, &start, &end, spell->mark_click);
+ oldword = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+ newword = gtk_label_get_text (GTK_LABEL (GTK_BIN (menuitem)->child));
+
+ if (debug)
+ {
+ g_print ("old word: '%s'\n", oldword);
+ print_iter ("s", &start);
+ print_iter ("e", &end);
+ g_print ("\nnew word: '%s'\n", newword);
+ }
+
+ gtk_text_buffer_delete (buffer, &start, &end);
+ gtk_text_buffer_insert (buffer, &start, newword, -1);
+
+ aspell_speller_store_replacement (spell->speller,
+ oldword, strlen (oldword),
+ newword, strlen (newword));
+
+ g_free (oldword);
+}
+
+GtkWidget *
+build_suggestion_menu (SulekhaSpell * spell, GtkTextBuffer * buffer,
+ const char *word)
+{
+ const char *suggestion;
+ GtkWidget *topmenu, *menu;
+ GtkWidget *mi;
+ GtkWidget *hbox;
+ int count = 0;
+ void *spelldata;
+ const AspellWordList *suggestions;
+ AspellStringEnumeration *elements;
+ char *label;
+ //santhosh
+ word = transliterate_ml (word, 0, strlen (word));
+
+ //end santhosh
+ topmenu = menu = gtk_menu_new ();
+
+ suggestions = aspell_speller_suggest (spell->speller, word, -1);
+ elements = aspell_word_list_elements (suggestions);
+
+ suggestion = aspell_string_enumeration_next (elements);
+ if (suggestion == NULL)
+ {
+ /* no suggestions. put something in the menu anyway... */
+ GtkWidget *label;
+ label = gtk_label_new ("");
+ gtk_label_set_markup (GTK_LABEL (label), _("<i>(no suggestions)</i>"));
+
+ mi = gtk_menu_item_new ();
+ gtk_container_add (GTK_CONTAINER (mi), label);
+ gtk_widget_show_all (mi);
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mi);
+ }
+ else
+ {
+ /* build a set of menus with suggestions. */
+ while (suggestion != NULL)
+ {
+ if (count == 10)
+ {
+ mi = gtk_menu_item_new ();
+ gtk_widget_show (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+ mi = gtk_menu_item_new_with_label (_("More..."));
+ gtk_widget_show (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+ menu = gtk_menu_new ();
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), menu);
+ count = 0;
+ }
+ mi = gtk_menu_item_new_with_label (suggestion);
+ g_signal_connect (G_OBJECT (mi), "activate",
+ G_CALLBACK (replace_word), spell);
+ gtk_widget_show (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+ count++;
+ suggestion = aspell_string_enumeration_next (elements);
+ }
+ }
+
+ delete_aspell_string_enumeration (elements);
+
+ /* Separator */
+ mi = gtk_menu_item_new ();
+ gtk_widget_show (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (topmenu), mi);
+
+ /* + Add to Dictionary */
+ label = g_strdup_printf (_("Add \"%s\" to Dictionary"), word);
+ mi = gtk_image_menu_item_new_with_label (label);
+ g_free (label);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi),
+ gtk_image_new_from_stock (GTK_STOCK_ADD,
+ GTK_ICON_SIZE_MENU));
+ g_signal_connect (G_OBJECT (mi), "activate", G_CALLBACK (add_to_dictionary),
+ spell);
+ gtk_widget_show_all (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (topmenu), mi);
+
+ /* - Ignore All */
+ mi = gtk_image_menu_item_new_with_label (_("Ignore All"));
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi),
+ gtk_image_new_from_stock (GTK_STOCK_REMOVE,
+ GTK_ICON_SIZE_MENU));
+ g_signal_connect (G_OBJECT (mi), "activate", G_CALLBACK (ignore_all),
+ spell);
+ gtk_widget_show_all (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (topmenu), mi);
+
+ return topmenu;
+}
+
+static void
+populate_popup (GtkTextView * textview, GtkMenu * menu, SulekhaSpell * spell)
+{
+ GtkWidget *img, *mi;
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer (textview);
+ GtkTextIter start, end;
+ char *word;
+
+ /* we need to figure out if they picked a misspelled word. */
+ get_word_extents_from_mark (buffer, &start, &end, spell->mark_click);
+
+ /* if our highlight algorithm ever messes up,
+ * this isn't correct, either. */
+ if (!gtk_text_iter_has_tag (&start, spell->tag_highlight))
+ return; /* word wasn't misspelled. */
+
+ /* menu separator comes first. */
+ mi = gtk_menu_item_new ();
+ gtk_widget_show (mi);
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mi);
+
+ /* then, on top of it, the suggestions menu. */
+ img = gtk_image_new_from_stock (GTK_STOCK_SPELL_CHECK, GTK_ICON_SIZE_MENU);
+ mi = gtk_image_menu_item_new_with_label (_("Spelling Suggestions"));
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
+
+ word = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi),
+ build_suggestion_menu (spell, buffer, word));
+
+ g_free (word);
+
+ gtk_widget_show_all (mi);
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mi);
+}
+
+/* when the user right-clicks on a word, they want to check that word.
+ * here, we do NOT move the cursor to the location of the clicked-upon word
+ * since that prevents the use of edit functions on the context menu. */
+static gboolean
+button_press_event (GtkTextView * view, GdkEventButton * event,
+ SulekhaSpell * spell)
+{
+ if (event->button == 3)
+ {
+ gint x, y;
+ GtkTextIter iter;
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer (view);
+
+ /* handle deferred check if it exists */
+ if (spell->deferred_check)
+ check_deferred_range (spell, buffer, TRUE);
+
+ gtk_text_view_window_to_buffer_coords (view,
+ GTK_TEXT_WINDOW_TEXT,
+ event->x, event->y, &x, &y);
+ gtk_text_view_get_iter_at_location (view, &iter, x, y);
+ gtk_text_buffer_move_mark (buffer, spell->mark_click, &iter);
+ }
+ return FALSE; /* false: let gtk process this event, too.
+ we don't want to eat any events. */
+}
+
+/* This event occurs when the popup menu is requested through a key-binding
+ * (Menu Key or <shift>+F10 by default). In this case we want to set
+ * spell->mark_click to the cursor position. */
+static gboolean
+popup_menu_event (GtkTextView * view, SulekhaSpell * spell)
+{
+ GtkTextIter iter;
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer (view);
+
+ gtk_text_buffer_get_iter_at_mark (buffer, &iter,
+ gtk_text_buffer_get_insert (buffer));
+ gtk_text_buffer_move_mark (buffer, spell->mark_click, &iter);
+ return FALSE; /* false: let gtk process this event, too. */
+}
+
+static gboolean
+sulekhaspell_set_language_internal (SulekhaSpell * spell, const gchar * lang,
+ GError ** error)
+{
+ AspellConfig *config;
+ AspellCanHaveError *err;
+ AspellSpeller *speller;
+
+ if (lang == NULL)
+ {
+ lang = g_getenv ("LANG");
+ if (lang)
+ {
+ if (g_strncasecmp (lang, "C", 1) == 0)
+ lang = NULL;
+ else if (lang[0] == 0)
+ lang = NULL;
+ }
+ }
+
+ config = new_aspell_config ();
+ if (lang)
+ aspell_config_replace (config, "language-tag", lang);
+ aspell_config_replace (config, "encoding", "utf-8");
+ err = new_aspell_speller (config);
+ delete_aspell_config (config);
+
+ if (aspell_error_number (err) != 0)
+ {
+#ifdef USING_ASPELL
+ g_set_error (error, SULEKHASPELL_ERROR, SULEKHASPELL_ERROR_BACKEND,
+ "aspell: %s", aspell_error_message (err));
+#elif defined USING_PSPELL
+ g_set_error (error, SULEKHASPELL_ERROR, SULEKHASPELL_ERROR_BACKEND,
+ "pspell: %s", aspell_error_message (err));
+#endif
+ return FALSE;
+ }
+ if (spell->speller)
+ delete_aspell_speller (spell->speller);
+ spell->speller = to_aspell_speller (err);
+
+ return TRUE;
+}
+
+/**
+ * sulekhaspell_set_language:
+ * @spell: The #SulekhaSpell object.
+ * @lang: The language to use, in a form pspell understands (it appears to
+ * be a locale specifier?).
+ * @error: Return location for error.
+ *
+ * Set the language on @spell to @lang, possibily returning an error in
+ * @error.
+ *
+ * Returns: FALSE if there was an error.
+ */
+gboolean
+sulekhaspell_set_language (SulekhaSpell * spell, const gchar * lang,
+ GError ** error)
+{
+ gboolean ret;
+
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
+
+ ret = sulekhaspell_set_language_internal (spell, lang, error);
+ if (ret)
+ sulekhaspell_recheck_all (spell);
+
+ return ret;
+}
+
+/**
+ * sulekhaspell_recheck_all:
+ * @spell: The #SulekhaSpell object.
+ *
+ * Recheck the spelling in the entire buffer.
+ */
+void
+sulekhaspell_recheck_all (SulekhaSpell * spell)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+
+ buffer = gtk_text_view_get_buffer (spell->view);
+
+ gtk_text_buffer_get_bounds (buffer, &start, &end);
+
+ check_range (spell, buffer, start, end, TRUE);
+}
+
+/**
+ * sulekhaspell_new_attach:
+ * @view: The #GtkTextView to attach to.
+ * @lang: The language to use, in a form pspell understands (it appears to
+ * be a locale specifier?).
+ * @error: Return location for error.
+ *
+ * Create a new #SulekhaSpell object attached to @view with language @lang.
+ *
+ * Returns: a new #SulekhaSpell object, or %NULL on error.
+ */
+SulekhaSpell *
+sulekhaspell_new_attach (GtkTextView * view, const gchar * lang,
+ GError ** error)
+{
+ GtkTextBuffer *buffer;
+ GtkTextTagTable *tagtable;
+ GtkTextIter start, end;
+
+ SulekhaSpell *spell;
+
+#ifdef ENABLE_NLS
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (PACKAGE, "UTF-8");
+#endif
+
+ if (error)
+ g_return_val_if_fail (*error == NULL, NULL);
+
+ spell = g_object_get_data (G_OBJECT (view), SULEKHASPELL_OBJECT_KEY);
+ g_assert (spell == NULL);
+
+ /* attach to the widget */
+ spell = g_new0 (SulekhaSpell, 1);
+ spell->view = view;
+ if (!sulekhaspell_set_language_internal (spell, lang, error))
+ {
+ g_free (spell);
+ return NULL;
+ }
+ g_object_set_data (G_OBJECT (view), SULEKHASPELL_OBJECT_KEY, spell);
+
+ g_signal_connect_swapped (G_OBJECT (view), "destroy",
+ G_CALLBACK (sulekhaspell_free), spell);
+ g_signal_connect (G_OBJECT (view), "button-press-event",
+ G_CALLBACK (button_press_event), spell);
+ g_signal_connect (G_OBJECT (view), "populate-popup",
+ G_CALLBACK (populate_popup), spell);
+ g_signal_connect (G_OBJECT (view), "popup-menu",
+ G_CALLBACK (popup_menu_event), spell);
+
+ buffer = gtk_text_view_get_buffer (view);
+
+ g_signal_connect (G_OBJECT (buffer),
+ "insert-text", G_CALLBACK (insert_text_before), spell);
+ g_signal_connect_after (G_OBJECT (buffer),
+ "insert-text",
+ G_CALLBACK (insert_text_after), spell);
+ g_signal_connect_after (G_OBJECT (buffer),
+ "delete-range",
+ G_CALLBACK (delete_range_after), spell);
+ g_signal_connect (G_OBJECT (buffer),
+ "mark-set", G_CALLBACK (mark_set), spell);
+
+ tagtable = gtk_text_buffer_get_tag_table (buffer);
+ spell->tag_highlight =
+ gtk_text_tag_table_lookup (tagtable, SULEKHASPELL_MISSPELLED_TAG);
+
+ if (spell->tag_highlight == NULL)
+ {
+ spell->tag_highlight = gtk_text_buffer_create_tag (buffer,
+ SULEKHASPELL_MISSPELLED_TAG,
+#ifdef HAVE_PANGO_UNDERLINE_ERROR
+ "underline",
+ PANGO_UNDERLINE_ERROR,
+#else
+ "foreground", "red",
+ "underline",
+ PANGO_UNDERLINE_SINGLE,
+#endif
+ NULL);
+ }
+
+ /* we create the mark here, but we don't use it until text is
+ * inserted, so we don't really care where iter points. */
+ gtk_text_buffer_get_bounds (buffer, &start, &end);
+ spell->mark_insert_start = gtk_text_buffer_create_mark (buffer,
+ "sulekhaspell-insert-start",
+ &start, TRUE);
+ spell->mark_insert_end = gtk_text_buffer_create_mark (buffer,
+ "sulekhaspell-insert-end",
+ &start, TRUE);
+ spell->mark_click = gtk_text_buffer_create_mark (buffer,
+ "sulekhaspell-click",
+ &start, TRUE);
+
+ spell->deferred_check = FALSE;
+
+ /* now check the entire text buffer. */
+ sulekhaspell_recheck_all (spell);
+ return spell;
+}
+
+static void
+sulekhaspell_free (SulekhaSpell * spell)
+{
+ GtkTextBuffer *buffer;
+ GtkTextTagTable *table;
+ GtkTextIter start, end;
+
+ buffer = gtk_text_view_get_buffer (spell->view);
+ table = gtk_text_buffer_get_tag_table (buffer);
+
+ gtk_text_buffer_get_bounds (buffer, &start, &end);
+ gtk_text_buffer_remove_tag (buffer, spell->tag_highlight, &start, &end);
+
+ gtk_text_buffer_delete_mark (buffer, spell->mark_insert_start);
+ gtk_text_buffer_delete_mark (buffer, spell->mark_insert_end);
+ gtk_text_buffer_delete_mark (buffer, spell->mark_click);
+
+ delete_aspell_speller (spell->speller);
+
+ g_signal_handlers_disconnect_matched (spell->view,
+ G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, spell);
+ g_signal_handlers_disconnect_matched (buffer,
+ G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, spell);
+ g_free (spell);
+}
+
+/**
+ * sulekhaspell_get_from_text_view:
+ * @view: A #GtkTextView.
+ *
+ * Retrieves the #SulekhaSpell object attached to a text view.
+ *
+ * Returns: the #SulekhaSpell object, or %NULL if there is no #SulekhaSpell
+ * attached to @view.
+ */
+SulekhaSpell *
+sulekhaspell_get_from_text_view (GtkTextView * view)
+{
+ return g_object_get_data (G_OBJECT (view), SULEKHASPELL_OBJECT_KEY);
+}
+
+/**
+ * sulekhaspell_detach:
+ * @spell: A #SulekhaSpell.
+ *
+ * Detaches this #SulekhaSpell from its text view. Use
+ * sulekhaspell_get_from_text_view() to retrieve a SulekhaSpell from a
+ * #GtkTextView.
+ */
+void
+sulekhaspell_detach (SulekhaSpell * spell)
+{
+ g_return_if_fail (spell != NULL);
+
+ g_object_set_data (G_OBJECT (spell->view), SULEKHASPELL_OBJECT_KEY, NULL);
+ sulekhaspell_free (spell);
+}
diff --git a/input-methods/sulekha/src/sulekhaspell.h b/input-methods/sulekha/src/sulekhaspell.h
new file mode 100644
index 0000000..791e18f
--- /dev/null
+++ b/input-methods/sulekha/src/sulekhaspell.h
@@ -0,0 +1,64 @@
+/* sulekhaspell - a spell-checking addon for GTK's TextView widget based on sulekhaspell by Evan Martin.
+ *
+ * Copyright (C) 2007-2008
+ * Santhosh Thottingal<santhosh00@gmail.com>,
+ * Praveen Arimprathodiyil <pravi.a@gmail.com>
+ * Swathanthra Malayalam Computing.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+
+#ifndef SULEKHASPELL_H
+#define SULEKHASPELL_H
+
+#define SULEKHASPELL_ERROR sulekhaspell_error_quark()
+
+typedef enum {
+ SULEKHASPELL_ERROR_BACKEND,
+} SulekhaSpellError;
+
+GQuark sulekhaspell_error_quark();
+
+typedef struct _SulekhaSpell SulekhaSpell;
+
+/* the idea is to have a SulekhaSpell object that is analagous to the
+ * GtkTextBuffer-- it lives as an attribute of the GtkTextView but
+ * it can be referred to directly. */
+
+SulekhaSpell* sulekhaspell_new_attach(GtkTextView *view,
+ const gchar *lang, GError **error);
+SulekhaSpell* sulekhaspell_get_from_text_view(GtkTextView *view);
+void sulekhaspell_detach(SulekhaSpell *spell);
+
+gboolean sulekhaspell_set_language(SulekhaSpell *spell,
+ const gchar *lang, GError **error);
+
+void sulekhaspell_recheck_all(SulekhaSpell *spell);
+
+
+/*** old API-- deprecated. ***/
+#ifndef SULEKHASPELL_DISABLE_DEPRECATED
+#define SULEKHASPELL_ERROR_PSPELL SULEKHASPELL_ERROR_BACKEND
+
+int sulekhaspell_init();
+/* no-op. */
+
+void sulekhaspell_attach(GtkTextView *view);
+/* sulekhaspell_new_attach(view, NULL, NULL); */
+
+#endif /* SULEKHASPELL_DISABLE_DEPRECATED */
+
+#endif /* SULEKHASPELL_H */
diff --git a/input-methods/sulekha/src/sulekhaspell.h~ b/input-methods/sulekha/src/sulekhaspell.h~
new file mode 100644
index 0000000..e7b1b49
--- /dev/null
+++ b/input-methods/sulekha/src/sulekhaspell.h~
@@ -0,0 +1,45 @@
+/* sulekhaspell - a spell-checking addon for GTK's TextView widget based on sulekhaspell by Evan Martin.
+ */
+
+
+#ifndef SULEKHASPELL_H
+#define SULEKHASPELL_H
+
+#define SULEKHASPELL_ERROR sulekhaspell_error_quark()
+
+typedef enum {
+ SULEKHASPELL_ERROR_BACKEND,
+} SulekhaSpellError;
+
+GQuark sulekhaspell_error_quark();
+
+typedef struct _SulekhaSpell SulekhaSpell;
+
+/* the idea is to have a SulekhaSpell object that is analagous to the
+ * GtkTextBuffer-- it lives as an attribute of the GtkTextView but
+ * it can be referred to directly. */
+
+SulekhaSpell* sulekhaspell_new_attach(GtkTextView *view,
+ const gchar *lang, GError **error);
+SulekhaSpell* sulekhaspell_get_from_text_view(GtkTextView *view);
+void sulekhaspell_detach(SulekhaSpell *spell);
+
+gboolean sulekhaspell_set_language(SulekhaSpell *spell,
+ const gchar *lang, GError **error);
+
+void sulekhaspell_recheck_all(SulekhaSpell *spell);
+
+
+/*** old API-- deprecated. ***/
+#ifndef SULEKHASPELL_DISABLE_DEPRECATED
+#define SULEKHASPELL_ERROR_PSPELL SULEKHASPELL_ERROR_BACKEND
+
+int sulekhaspell_init();
+/* no-op. */
+
+void sulekhaspell_attach(GtkTextView *view);
+/* sulekhaspell_new_attach(view, NULL, NULL); */
+
+#endif /* SULEKHASPELL_DISABLE_DEPRECATED */
+
+#endif /* SULEKHASPELL_H */
diff --git a/input-methods/sulekha/src/trans.c b/input-methods/sulekha/src/trans.c
new file mode 100644
index 0000000..18e48e1
--- /dev/null
+++ b/input-methods/sulekha/src/trans.c
@@ -0,0 +1,231 @@
+/* Transliteration.c
+ *
+ * Copyright (C) 2007-2008
+ * Santhosh Thottingal<santhosh00@gmail.com>,
+ * Swathanthra Malayalam Computing.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include<stdio.h>
+#include<string.h>
+#include<stdlib.h>
+#include "Transliteration.h"
+/*
+Transliterate the a dhvani phonetic string to malayalam.
+Algorithm:
+1)For all vowels, if it is at the 0th position print as it is
+2)If the vowel is in between/end of the string print the sign of the vowel except for A
+3)For all consonants print the malayalam character
+4)If a phonetic character is not identified print '?'
+5)Octal C escaped strings are used for printing the Unicode Malayalam string
+*/
+
+
+char *
+transliterate_ml (char *phonetic_string, int start, int end)
+{
+ char *ml_string;
+ int length = 0;
+ int i = start;
+ length = end - start;
+ ml_string = (char *) malloc (length * 4 * sizeof (char));
+ printf (":%s:\n", phonetic_string);
+ while (i < end)
+ {
+
+ switch (phonetic_string[i])
+ {
+ //Vowels
+ case 'a':
+ if (i == 0)
+ strcat (ml_string, "\340\264\205");
+ break;
+ case 'A':
+ (i == 0) ? strcat (ml_string, "\340\264\206") : strcat (ml_string,
+ "\340\264\276");
+ break;
+ case 'i':
+ (i == 0) ? strcat (ml_string, "\340\264\207") : strcat (ml_string,
+ "\340\264\277");
+ break;
+ case 'I':
+ (i == 0) ? strcat (ml_string, "\340\264\210") : strcat (ml_string,
+ "\340\265\200");
+ break;
+ case 'u':
+ (i == 0) ? strcat (ml_string, "\340\264\211") : strcat (ml_string,
+ "\340\265\201");
+ break;
+ case 'U':
+ (i == 0) ? strcat (ml_string, "\340\264\212") : strcat (ml_string,
+ "\340\265\202");
+ break;
+ case '^':
+ (i == 0) ? strcat (ml_string, "\340\264\213") : strcat (ml_string,
+ "\340\265\203");
+ break;
+ case 'e':
+ (i == 0) ? strcat (ml_string, "\340\264\216") : strcat (ml_string,
+ "\340\265\206");
+ break;
+ case 'E':
+ (i == 0) ? strcat (ml_string, "\340\264\217") : strcat (ml_string,
+ "\340\265\207");
+ break;
+ case '@':
+ (i == 0) ? strcat (ml_string, "\340\264\220") : strcat (ml_string,
+ "\340\265\210");
+ break;
+ case 'o':
+ (i == 0) ? strcat (ml_string, "\340\264\222") : strcat (ml_string,
+ "\340\265\212");
+ break;
+ case 'O':
+ (i == 0) ? strcat (ml_string, "\340\264\223") : strcat (ml_string,
+ "\340\265\213");
+ break;
+ case '`':
+ (i == 0) ? strcat (ml_string, "\340\264\224") : strcat (ml_string,
+ "\340\265\227");
+ break;
+ case '.': //am
+ strcat (ml_string, "\340\264\202");
+ break;
+ case '~': //chandrakkala
+ strcat (ml_string, "\340\265\215");
+ break;
+ case ':': //Ah
+ strcat (ml_string, "\340\264\203");
+ break;
+ //Consonants
+ case 'k':
+ strcat (ml_string, "\340\264\225");
+ break;
+ case 'K':
+ strcat (ml_string, "\340\264\226");
+ break;
+ case 'g':
+ strcat (ml_string, "\340\264\227");
+ break;
+ case '-':
+ strcat (ml_string, "\340\264\231");
+ break;
+ case 'G':
+ strcat (ml_string, "\340\264\230");
+ break;
+ case 'c':
+ strcat (ml_string, "\340\264\232");
+ break;
+ case 'C':
+ strcat (ml_string, "\340\264\233");
+ break;
+ case 'j':
+ strcat (ml_string, "\340\264\234");
+ break;
+ case 'J':
+ strcat (ml_string, "\340\264\235");
+ break;
+ case '#':
+ strcat (ml_string, "\340\264\236");
+ break;
+ case 't':
+ strcat (ml_string, "\340\264\237");
+ break;
+ case 'T':
+ strcat (ml_string, "\340\264\240");
+ break;
+ case 'd':
+ strcat (ml_string, "\340\264\241");
+ break;
+ case 'D':
+ strcat (ml_string, "\340\264\242");
+ break;
+ case 'N':
+ strcat (ml_string, "\340\264\243");
+ break;
+ case 'x':
+ strcat (ml_string, "\340\264\244");
+ break;
+ case 'X':
+ strcat (ml_string, "\340\264\245");
+ break;
+ case 'w':
+ strcat (ml_string, "\340\264\246");
+ break;
+ case 'W':
+ strcat (ml_string, "\340\264\247");
+ break;
+ case 'n':
+ strcat (ml_string, "\340\264\250");
+ break;
+ case 'p':
+ strcat (ml_string, "\340\264\252");
+ break;
+ case 'f':
+ strcat (ml_string, "\340\264\253");
+ break;
+ case 'b':
+ strcat (ml_string, "\340\264\254");
+ break;
+ case 'B':
+ strcat (ml_string, "\340\264\255");
+ break;
+ case 'm':
+ strcat (ml_string, "\340\264\256");
+ break;
+ case 'y':
+ strcat (ml_string, "\340\264\257");
+ break;
+ case 'r':
+ strcat (ml_string, "\340\264\260");
+ break;
+ case 'l':
+ strcat (ml_string, "\340\264\262");
+ break;
+ case 'v':
+ strcat (ml_string, "\340\264\265");
+ break;
+ case '$':
+ strcat (ml_string, "\340\264\266");
+ break;
+ case 's':
+ strcat (ml_string, "\340\264\270");
+ break;
+ case 'S':
+ strcat (ml_string, "\340\264\267");
+ break;
+ case 'h':
+ strcat (ml_string, "\340\264\271");
+ break;
+ case 'L':
+ strcat (ml_string, "\340\264\263");
+ break;
+ case 'z':
+ strcat (ml_string, "\340\264\264");
+ break;
+ case 'R':
+ strcat (ml_string, "\340\264\261");
+ break;
+ default:
+ strcat (ml_string, "?"); //Not recognized
+ break;
+ }
+
+ i++;
+ }
+ printf (":%s:\n", ml_string);
+ return ml_string;
+}
diff --git a/input-methods/sulekha/src/trans.c~ b/input-methods/sulekha/src/trans.c~
new file mode 100644
index 0000000..c30900d
--- /dev/null
+++ b/input-methods/sulekha/src/trans.c~
@@ -0,0 +1,231 @@
+/* Transliteration.c
+ *
+ * Copyright (C) 2007-2008
+ * Santhosh Thottingal<santhosh00@gmail.com>,
+ * Swathanthra Malayalam Computing.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include<stdio.h>
+#include<string.h>
+#include<stdlib.h>
+#include "Transliteration.h"
+/*
+Transliterate the a dhvani phonetic string to malayalam.
+Algorithm:
+1)For all vowels, if it is at the 0th position print as it is
+2)If the vowel is in between/end of the string print the sign of the vowel except for A
+3)For all consonants print the malayalam character
+4)If a phonetic character is not identified print '?'
+5)Octal C escaped strings are used for printing the Unicode Malayalam string
+*/
+
+
+char *
+transliterate_ml (char *phonetic_string, int start, int end)
+{
+ char *ml_string;
+ int length = 0;
+ int i = start;
+ length = end - start;
+ ml_string = (char *) malloc (length * 4 * sizeof (char));
+ printf (":%s:\n", phonetic_string);
+ while (i < end)
+ {
+
+ switch (phonetic_string[i])
+ {
+ //Vowels
+ case 'a':
+ if (i == 0)
+ strcat (ml_string, "\340\264\205");
+ break;
+ case 'A':
+ (i == 0) ? strcat (ml_string, "\340\264\206") : strcat (ml_string,
+ "\340\264\276");
+ break;
+ case 'i':
+ (i == 0) ? strcat (ml_string, "\340\264\207") : strcat (ml_string,
+ "\340\264\277");
+ break;
+ case 'I':
+ (i == 0) ? strcat (ml_string, "\340\264\210") : strcat (ml_string,
+ "\340\265\200");
+ break;
+ case 'u':
+ (i == 0) ? strcat (ml_string, "\340\264\211") : strcat (ml_string,
+ "\340\265\201");
+ break;
+ case 'U':
+ (i == 0) ? strcat (ml_string, "\340\264\212") : strcat (ml_string,
+ "\340\265\202");
+ break;
+ case '^':
+ (i == 0) ? strcat (ml_string, "\340\264\213") : strcat (ml_string,
+ "\340\265\203");
+ break;
+ case 'e':
+ (i == 0) ? strcat (ml_string, "\340\264\216") : strcat (ml_string,
+ "\340\265\206");
+ break;
+ case 'E':
+ (i == 0) ? strcat (ml_string, "\340\264\217") : strcat (ml_string,
+ "\340\265\207");
+ break;
+ case '@':
+ (i == 0) ? strcat (ml_string, "\340\264\220") : strcat (ml_string,
+ "\340\265\210");
+ break;
+ case 'o':
+ (i == 0) ? strcat (ml_string, "\340\264\222") : strcat (ml_string,
+ "\340\265\212");
+ break;
+ case 'O':
+ (i == 0) ? strcat (ml_string, "\340\264\223") : strcat (ml_string,
+ "\340\265\213");
+ break;
+ case '`':
+ (i == 0) ? strcat (ml_string, "\340\264\224") : strcat (ml_string,
+ "\340\265\227");
+ break;
+ case '.': //am
+ strcat (ml_string, "\340\264\202");
+ break;
+ case '~': //chandrakkala
+ strcat (ml_string, "\340\265\215");
+ break;
+ case ':': //Ah
+ strcat (ml_string, "\340\264\203");
+ break;
+ //Consonants
+ case 'k':
+ strcat (ml_string, "\340\264\225");
+ break;
+ case 'K':
+ strcat (ml_string, "\340\264\226");
+ break;
+ case 'g':
+ strcat (ml_string, "\340\264\227");
+ break;
+ case '-':
+ strcat (ml_string, "\340\264\231");
+ break;
+ case 'G':
+ strcat (ml_string, "\340\264\230");
+ break;
+ case 'c':
+ strcat (ml_string, "\340\264\232");
+ break;
+ case 'C':
+ strcat (ml_string, "\340\264\233");
+ break;
+ case 'j':
+ strcat (ml_string, "\340\264\234");
+ break;
+ case 'J':
+ strcat (ml_string, "\340\264\235");
+ break;
+ case '#':
+ strcat (ml_string, "\340\264\236");
+ break;
+ case 't':
+ strcat (ml_string, "\340\264\237");
+ break;
+ case 'T':
+ strcat (ml_string, "\340\264\240");
+ break;
+ case 'd':
+ strcat (ml_string, "\340\264\241");
+ break;
+ case 'D':
+ strcat (ml_string, "\340\264\242");
+ break;
+ case 'N':
+ strcat (ml_string, "\340\264\243");
+ break;
+ case 'x':
+ strcat (ml_string, "\340\264\244");
+ break;
+ case 'X':
+ strcat (ml_string, "\340\264\245");
+ break;
+ case 'w':
+ strcat (ml_string, "\340\264\246");
+ break;
+ case 'W':
+ strcat (ml_string, "\340\264\247");
+ break;
+ case 'n':
+ strcat (ml_string, "\340\264\250");
+ break;
+ case 'p':
+ strcat (ml_string, "\340\264\252");
+ break;
+ case 'f':
+ strcat (ml_string, "\340\264\253");
+ break;
+ case 'b':
+ strcat (ml_string, "\340\264\254");
+ break;
+ case 'B':
+ strcat (ml_string, "\340\264\255");
+ break;
+ case 'm':
+ strcat (ml_string, "\340\264\256");
+ break;
+ case 'y':
+ strcat (ml_string, "\340\264\257");
+ break;
+ case 'r':
+ strcat (ml_string, "\340\264\260");
+ break;
+ case 'l':
+ strcat (ml_string, "\340\264\262");
+ break;
+ case 'v':
+ strcat (ml_string, "\340\264\265");
+ break;
+ case '$':
+ strcat (ml_string, "\340\264\266");
+ break;
+ case 's':
+ strcat (ml_string, "\340\264\270");
+ break;
+ case 'S':
+ strcat (ml_string, "\340\264\267");
+ break;
+ case 'h':
+ strcat (ml_string, "\340\264\271");
+ break;
+ case 'L':
+ strcat (ml_string, "\340\264\263");
+ break;
+ case 'z':
+ strcat (ml_string, "\340\264\264");
+ break;
+ case 'R':
+ strcat (ml_string, "\340\264\261");
+ break;
+ default:
+ strcat (ml_string, "?"); //Not recognized
+ break;
+ }
+
+ i++;
+ }
+ printf (":%s:\n", ml_string);
+ return ml_string;
+}
diff --git a/input-methods/sulekha/src/transliteration.c b/input-methods/sulekha/src/transliteration.c
new file mode 100644
index 0000000..4cb1222
--- /dev/null
+++ b/input-methods/sulekha/src/transliteration.c
@@ -0,0 +1,906 @@
+/* Transliteration.c
+ *
+ * Copyright (C) 2007-2008
+ * Santhosh Thottingal<santhosh00@gmail.com>,
+ * Swathanthra Malayalam Computing.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include<stdio.h>
+#include<string.h>
+
+#include<stdlib.h>
+#include "transliteration.h"
+/*
+Transliterate the a dhvani phonetic string to malayalam.
+Algorithm:
+1)For all vowels, if it is at the 0th position print as it is
+2)If the vowel is in between/end of the string print the sign of the vowel except for A
+3)For all consonants print the malayalam character
+4)If a phonetic character is not identified print '?'
+5)Octal C escaped strings are used for printing the Unicode Malayalam string
+*/
+
+main1 (int argc, const char *argv[])
+{
+ const char *word;
+ const char *transliterated_word;
+ int word_length = 0;
+ if (argc == 1)
+ {
+ printf ("Usage: %s word\n", argv[0]);
+ exit (0);
+ }
+ word = argv[1];
+ transliterated_word = transliterate_ml (word, 0, strlen (word));
+// printf ("%s\n",word);
+ printf ("%s\n", transliterated_word);
+ return 0;
+}
+
+int
+isVowel (char c)
+{
+ if ((c == 'a') || (c == 'A') || (c == 'e') || (c == 'E') || (c == 'i')
+ || (c == 'I') || (c == 'o') || (c == 'O') || (c == 'u') || (c == 'U'))
+ return 1;
+ else
+ return 0;
+}
+
+int
+isChillu (char c)
+{
+ if ((c == 'n') || (c == 'N') || (c == 'r') || (c == 'R') || (c == 'l')
+ || (c == 'L') || (c == 'm'))
+ return 1;
+ else
+ return 0;
+}
+
+
+char *
+transliterate_ml (char *phonetic_string, int start, int end)
+{
+ char *ml_string = NULL;
+ int length = 0;
+ int i = start;
+ length = end - start;
+ ml_string = (char *) malloc (length * 4 * sizeof (char));
+ ml_string[0] = '\0';
+ while (i < end)
+ {
+
+ switch (phonetic_string[i])
+ {
+ //Vowels
+ case 'a':
+ if (i == 0) //first letter, use swaram as such
+ { // as in amaram
+
+ if (i < end && phonetic_string[i + 1] == 'a')
+ { // as in aana
+ strcat (ml_string, "\340\264\206"); //aa letter
+ i++;
+ }
+ else if (i < end && phonetic_string[i + 1] == 'i')
+ { // as in airaavatham
+ strcat (ml_string, "\340\264\202"); //ai letter
+ i++;
+ }
+ else if (i < end && phonetic_string[i + 1] == 'u')
+ { // as in airaavatham
+ strcat (ml_string, "\340\264\224"); //au aushadham
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\205"); //a letter
+ }
+ }
+ else
+ { //swara chihnam
+ if (i < end && phonetic_string[i + 1] == 'a') //aa sign
+ { // as in kaazhcha
+ strcat (ml_string, "\340\264\276");
+ i++;
+ }
+ else if (i < end && phonetic_string[i + 1] == 'i')
+ { // as in kaitha
+ strcat (ml_string, "\340\265\210"); //ai sign
+ i++;
+ }
+ else if (i < end && phonetic_string[i + 1] == 'u')
+ { // as in kauravar
+ strcat (ml_string, "\340\265\227"); //au sign
+ i++;
+ }
+ }
+ break;
+
+ case 'A':
+ (i == 0) ? strcat (ml_string, "\340\264\206") : strcat (ml_string,
+ "\340\264\276");
+ break;
+ case 'i':
+ if (i == 0)
+ {
+ if (i < end
+ && ((phonetic_string[i + 1] == 'i')
+ || (phonetic_string[i + 1] == 'e')))
+ { //ii/ee letter
+ strcat (ml_string, "\340\264\210");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\207"); // i/e letter
+ }
+ }
+ else
+ {
+ if (i < end && ((phonetic_string[i + 1] == 'i') || (phonetic_string[i + 1] == 'e'))) //ii/ee sign
+ {
+ strcat (ml_string, "\340\265\200");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\277"); // i/e sign
+ }
+ }
+ break;
+ case 'I':
+ (i == 0) ? strcat (ml_string, "\340\264\210") : strcat (ml_string,
+ "\340\265\200");
+ break;
+ case 'u':
+ if (i == 0)
+ {
+ if (i < end
+ && ((phonetic_string[i + 1] == 'o')
+ || (phonetic_string[i + 1] == 'u')))
+ { //ii/ee letter
+ strcat (ml_string, "\340\264\212");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\211"); // u letter
+ }
+ }
+ else
+ {
+ if (i < end && ((phonetic_string[i + 1] == 'u') || (phonetic_string[i + 1] == 'o'))) //ii/ee sign
+ {
+ strcat (ml_string, "\340\265\202"); //uu sign
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\265\201"); // u sign
+ }
+ }
+ break;
+ case 'U':
+ (i == 0) ? strcat (ml_string, "\340\264\212") : strcat (ml_string,
+ "\340\265\202");
+ break;
+ case '^':
+ (i == 0) ? strcat (ml_string, "\340\264\213") : strcat (ml_string,
+ "\340\265\203");
+ break;
+ case 'e':
+ if (i == 0)
+ {
+ if (i < end
+ && ((phonetic_string[i + 1] == 'e')
+ || (phonetic_string[i + 1] == 'a')))
+ { //ii/ee letter
+ strcat (ml_string, "\340\264\217");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\207"); // e letter
+ }
+ }
+ else
+ {
+ if (i < end && ((phonetic_string[i + 1] == 'e'))) //e/ee sign
+ {
+ strcat (ml_string, "\340\265\200"); //ee sign
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\265\206"); // u sign
+ }
+ }
+ break;
+ case 'E':
+ (i == 0) ? strcat (ml_string, "\340\264\217") : strcat (ml_string,
+ "\340\265\207");
+ break;
+// case '@': //ai
+// (i == 0) ? strcat (ml_string, "\340\264\220") : strcat (ml_string,
+// "\340\265\210");
+// break;
+ case 'o':
+ if (i == 0)
+ {
+ if (i < end && ((phonetic_string[i + 1] == 'o')))
+ { //oo letter
+ strcat (ml_string, "\340\264\222");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, " \340\264\223"); // o letter
+ }
+ }
+ else
+ {
+ if (i < end && ((phonetic_string[i + 1] == 'o'))) //oo sign
+ {
+ strcat (ml_string, "\340\265\202"); //oo sign
+ i++;
+ }
+ else if (i < end && ((phonetic_string[i + 1] == 'u'))) //ou sign
+ {
+ strcat (ml_string, "\340\265\214"); //ou sign
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\265\212"); // o sign
+ }
+ }
+ break;
+ case 'O':
+ (i == 0) ? strcat (ml_string, "\340\264\223") : strcat (ml_string,
+ "\340\265\213");
+ break;
+ case '`':
+ (i == 0) ? strcat (ml_string, "\340\264\224") : strcat (ml_string,
+ "\340\265\227");
+ break;
+// case '.': //am
+// strcat (ml_string, "\340\264\202");
+// break;
+ case '~': //chandrakkala
+ strcat (ml_string, "\340\265\215");
+ break;
+ case ':': //Ah
+ strcat (ml_string, "\340\264\203");
+ break;
+ //Consonants
+ case 'k':
+
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\225");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\225");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //kh
+ strcat (ml_string, "\340\264\226");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\225"); //just a k
+
+ }
+ break;
+ case 'K':
+ if (i == start)
+ { //start of a word- may be a Name.Place..starting with K
+ strcat (ml_string, "\340\264\225"); //just a k
+ }
+
+ else if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //KK
+ strcat (ml_string, "\340\264\225");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\225");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //Kh as in Khalid
+ strcat (ml_string, "\340\264\226");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\226"); //just a k
+
+ }
+
+ break;
+ case 'g':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\227");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\227");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //gh
+ strcat (ml_string, "\340\264\230");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\227"); //just a g as in gaanam
+
+ }
+ break;
+ case 'G':
+
+ if (i == start)
+ { //start of a word- may be a Name.Place..starting with G
+ strcat (ml_string, "\340\264\227"); //just a g
+ }
+
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //Kh as in Gha
+ strcat (ml_string, "\340\264\230");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\230"); //just a G
+
+ }
+ break;
+ case 'c':
+
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //kk/cc
+ strcat (ml_string, "\340\264\225");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\225");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ {
+ if (i == start)
+ {
+ //Ch as in chaaya
+ strcat (ml_string, "\340\264\232");
+ i++;
+
+ }
+ else
+ {
+//most of the time the ch in side the manglish means chcha as an pacha *wild guess. leaving this to aspell :)
+//let he decides
+ strcat (ml_string, "\340\264\232");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\232");
+ i++;
+ }
+ }
+ else if (i == start && (phonetic_string[i + 1] != 'h'))
+ { //start of a word- may be a Name. as in cibu
+ strcat (ml_string, "\340\264\270"); //just a c/k
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\226"); //just a k/c
+
+ }
+
+ break;
+ case 'C':
+
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //kk/CC
+ strcat (ml_string, "\340\264\225");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\225");
+ i++;
+ }
+ else if (i < end
+ && ((phonetic_string[i + 1] == 'h')
+ || (phonetic_string[i + 1] == 'H')))
+ {
+ if (i == start)
+ {
+ //Ch as in chaaya
+ strcat (ml_string, "\340\264\232");
+ i++;
+
+ }
+ else
+ {
+//most of the time the ch in side the manglish means chcha as an pacha *wild guess. leaving this to aspell :)
+//let he decides
+ strcat (ml_string, "\340\264\232");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\232");
+ i++;
+ }
+ }
+ else if (i == start && (phonetic_string[i + 1] != 'h'))
+ { //start of a word- may be a Name. as in cibu
+ strcat (ml_string, "\340\264\270"); //just a c/k
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\226"); //just a k/c
+
+ }
+
+ break;
+ case 'j':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama //jja
+ strcat (ml_string, "\340\264\234"); //ja
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\234"); //ja
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //jh
+ strcat (ml_string, "\340\264\235");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\234"); //just a j as in janam
+
+ }
+ break;
+ case 'J':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama //jja
+ strcat (ml_string, "\340\264\234"); //ja
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\234"); //ja
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //jh
+ strcat (ml_string, "\340\264\235");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\234"); //just a j as in janam
+ }
+ break;
+ case 't':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama //tta
+ strcat (ml_string, "\340\264\237"); //ja
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\237"); //ja
+ i++;
+ }
+ else if (i < end
+ && ((phonetic_string[i + 1] == 'h')
+ || (phonetic_string[i + 1] == 'H')))
+ { //th
+ strcat (ml_string, "\340\264\244");
+ i++;
+ }
+ else
+ {
+ //usually the words starting with t is very less. A t in the starting is tha most probably.
+ if (i == start)
+ {
+ strcat (ml_string, "\340\264\244"); //tha
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\237"); //just a t
+ }
+ }
+ break;
+ case 'T':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama //tta
+ strcat (ml_string, "\340\264\237"); //ja
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\237"); //ja
+ i++;
+ }
+ else if (i < end
+ && ((phonetic_string[i + 1] == 'h')
+ || (phonetic_string[i + 1] == 'H')))
+ { //th
+ strcat (ml_string, "\340\264\244");
+ i++;
+ }
+ else
+ {
+ //usually the words starting with t is very less. A t in the starting is tha most probably.
+ if (i == start)
+ {
+ strcat (ml_string, "\340\264\244"); //tha
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\237"); //just a t
+ }
+ }
+ break;
+ case 'd':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama //dda
+ strcat (ml_string, "\340\264\246"); //da
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\246"); //da
+ i++;
+ }
+ else if (i < end
+ && ((phonetic_string[i + 1] == 'h')
+ || (phonetic_string[i + 1] == 'H')))
+ { //th
+ strcat (ml_string, "\340\264\247");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\246"); //da
+ }
+ break;
+ case 'D':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama //dda
+ strcat (ml_string, "\340\264\246"); //Da
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\246"); //Da
+ i++;
+
+ }
+ else if (i < end
+ && ((phonetic_string[i + 1] == 'h')
+ || (phonetic_string[i + 1] == 'H')))
+ { //Dh as in viDhi
+ strcat (ml_string, "\340\264\242");
+ i++;
+ }
+ else
+ {
+ if (i == start)
+ {
+ strcat (ml_string, "\340\264\246"); //Da
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\241"); //Da
+ }
+ }
+ break;
+ case 'N':
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\243");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\243");
+ i++;
+ }
+ else if (i == start)
+ {
+ strcat (ml_string, "\340\264\250");
+ }
+ else
+ {
+
+ if (isVowel (phonetic_string[i + 1]))
+ {
+ strcat (ml_string, "\340\264\243");
+ }
+ else if ((i < end))
+ {
+ //chillu N
+ strcat (ml_string, "\340\264\243");
+ strcat (ml_string, "\340\265\215"); //virama
+ strcat (ml_string, "\342\200\215"); //zwj
+ }
+ }
+ //words ending with N chillu is less
+ break;
+
+ case 'n':
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\250");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\250");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'j'))
+ { //nja as in njaan
+ strcat (ml_string, "\340\264\236");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 't'))
+ {
+ if (i + 1 < end && (phonetic_string[i + 2] == 'h'))
+ {
+//nthaa as in enthaa
+ strcat (ml_string, "\340\264\250");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\244");
+ i++;
+ i++;
+ }
+ else
+ {
+ //nta as in ente
+ strcat (ml_string, "\340\264\250");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\261");
+ i++;
+ }
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'g'))
+ { //nga as in thenga
+ strcat (ml_string, "\340\264\231");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\231");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'k'))
+ { //nka as in thankakkutam
+ strcat (ml_string, "\340\264\231");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\225");
+ i++;
+ }
+ else if (i == start)
+ {
+ strcat (ml_string, "\340\264\250");
+ }
+ else
+ {
+
+ if (isVowel (phonetic_string[i + 1]))
+ {
+ strcat (ml_string, "\340\264\250");
+ }
+ else if ((i < end))
+ {
+
+ //chillu n
+ strcat (ml_string, "\340\264\250");
+ strcat (ml_string, "\340\265\215"); //virama
+ strcat (ml_string, "\342\200\215"); //zwj
+ }
+ }
+ //words ending with N chillu is less
+ break;
+ case 'p':
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\252");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\252");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //ph
+ strcat (ml_string, "\340\264\253");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\252"); //just a p
+
+ }
+ break;
+ case 'f':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\253");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\253");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\253"); //just a f
+
+ }
+ break;
+ case 'b':
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\254");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\254");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //ph
+ strcat (ml_string, "\340\264\255");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\254"); //just a b
+
+ }
+ break;
+ case 'B':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\255");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\255");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\255"); //just a B
+
+ }
+ break;
+ case 'm':
+ if (i == end - 1 && phonetic_string[i] != phonetic_string[i - 1]) //end of word. most probably it is an anuswaram
+ {
+ strcat (ml_string, "\340\264\202");
+
+ }
+ else if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\256");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\256");
+ i++;
+ }
+ else
+ {
+ if (i + 1 < end && !isVowel (phonetic_string[i + 1]))
+ {
+ strcat (ml_string, "\340\264\256");
+ strcat (ml_string, "\340\265\215");
+ }
+ else
+ strcat (ml_string, "\340\264\256");
+ }
+
+ break;
+ case 'y':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\257");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\257");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\257"); //just a y
+
+ }
+ break;
+ case 'r':
+ if ((i + 1 < end)
+ && ((phonetic_string[i + 1] == 'a')
+ || (phonetic_string[i + 1] == 'A')
+ || (phonetic_string[i + 1] == 'e')
+ || (phonetic_string[i + 1] == 'E')
+ || (phonetic_string[i + 1] == 'i')
+ || (phonetic_string[i + 1] == 'I')
+ || (phonetic_string[i + 1] == 'o')
+ || (phonetic_string[i + 1] == 'O')))
+ {
+ strcat (ml_string, "\340\264\260"); //just r
+ }
+ else if ((i < end))
+ {
+
+ //chillu r
+ strcat (ml_string, "\340\264\260");
+ strcat (ml_string, "\340\265\215"); //virama
+ strcat (ml_string, "\342\200\215"); //zwj
+ }
+
+ break;
+ case 'l':
+ if ((i + 1 < end) && (isVowel (phonetic_string[i + 1])))
+ {
+ strcat (ml_string, "\340\264\262"); //just l
+ }
+ else if ((i < end))
+ {
+
+ //chillu l
+ strcat (ml_string, "\340\264\262");
+ strcat (ml_string, "\340\265\215"); //virama
+ strcat (ml_string, "\342\200\215"); //zwj
+ }
+
+ break;
+ case 'v':
+ strcat (ml_string, "\340\264\265");
+ break;
+ case 's':
+
+ if (i + 1 < end && phonetic_string[i + 1] == 'h')
+ {
+ strcat (ml_string, "\340\264\267"); //sha
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\270"); //sa as in santhosh
+ }
+ break;
+ case 'S':
+ strcat (ml_string, "\340\264\267"); //sha
+ break;
+ case 'h':
+ strcat (ml_string, "\340\264\271");
+ break;
+ case 'L':
+ strcat (ml_string, "\340\264\263");
+ break;
+ case 'z':
+ if (i + 1 < end && phonetic_string[i + 1] == 'h')
+ {
+ strcat (ml_string, "\340\264\264"); //zha
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\270"); //zoo
+ }
+ break;
+ case 'R':
+ strcat (ml_string, "\340\264\261");
+ break;
+ default:
+ strcat (ml_string, phonetic_string[i]); //Not recognized
+ break;
+ }
+
+ if ((i + 1 < end) && !isVowel (phonetic_string[i])
+ && !isVowel (phonetic_string[i + 1])
+ && !isChillu (phonetic_string[i]))
+ {
+ strcat (ml_string, "\340\265\215"); //virama - implicit virama for conjuct formation
+ }
+ else
+ if ((i + 1 == end) && !isVowel (phonetic_string[i])
+ && !isChillu (phonetic_string[i]))
+ {
+ strcat (ml_string, "\340\265\215"); //virama - implicit virama for conjuct formation
+
+ }
+ i++;
+
+
+ }
+
+ printf ("%s\n", ml_string);
+ return ml_string;
+}
diff --git a/input-methods/sulekha/src/transliteration.c~ b/input-methods/sulekha/src/transliteration.c~
new file mode 100644
index 0000000..4cb1222
--- /dev/null
+++ b/input-methods/sulekha/src/transliteration.c~
@@ -0,0 +1,906 @@
+/* Transliteration.c
+ *
+ * Copyright (C) 2007-2008
+ * Santhosh Thottingal<santhosh00@gmail.com>,
+ * Swathanthra Malayalam Computing.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include<stdio.h>
+#include<string.h>
+
+#include<stdlib.h>
+#include "transliteration.h"
+/*
+Transliterate the a dhvani phonetic string to malayalam.
+Algorithm:
+1)For all vowels, if it is at the 0th position print as it is
+2)If the vowel is in between/end of the string print the sign of the vowel except for A
+3)For all consonants print the malayalam character
+4)If a phonetic character is not identified print '?'
+5)Octal C escaped strings are used for printing the Unicode Malayalam string
+*/
+
+main1 (int argc, const char *argv[])
+{
+ const char *word;
+ const char *transliterated_word;
+ int word_length = 0;
+ if (argc == 1)
+ {
+ printf ("Usage: %s word\n", argv[0]);
+ exit (0);
+ }
+ word = argv[1];
+ transliterated_word = transliterate_ml (word, 0, strlen (word));
+// printf ("%s\n",word);
+ printf ("%s\n", transliterated_word);
+ return 0;
+}
+
+int
+isVowel (char c)
+{
+ if ((c == 'a') || (c == 'A') || (c == 'e') || (c == 'E') || (c == 'i')
+ || (c == 'I') || (c == 'o') || (c == 'O') || (c == 'u') || (c == 'U'))
+ return 1;
+ else
+ return 0;
+}
+
+int
+isChillu (char c)
+{
+ if ((c == 'n') || (c == 'N') || (c == 'r') || (c == 'R') || (c == 'l')
+ || (c == 'L') || (c == 'm'))
+ return 1;
+ else
+ return 0;
+}
+
+
+char *
+transliterate_ml (char *phonetic_string, int start, int end)
+{
+ char *ml_string = NULL;
+ int length = 0;
+ int i = start;
+ length = end - start;
+ ml_string = (char *) malloc (length * 4 * sizeof (char));
+ ml_string[0] = '\0';
+ while (i < end)
+ {
+
+ switch (phonetic_string[i])
+ {
+ //Vowels
+ case 'a':
+ if (i == 0) //first letter, use swaram as such
+ { // as in amaram
+
+ if (i < end && phonetic_string[i + 1] == 'a')
+ { // as in aana
+ strcat (ml_string, "\340\264\206"); //aa letter
+ i++;
+ }
+ else if (i < end && phonetic_string[i + 1] == 'i')
+ { // as in airaavatham
+ strcat (ml_string, "\340\264\202"); //ai letter
+ i++;
+ }
+ else if (i < end && phonetic_string[i + 1] == 'u')
+ { // as in airaavatham
+ strcat (ml_string, "\340\264\224"); //au aushadham
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\205"); //a letter
+ }
+ }
+ else
+ { //swara chihnam
+ if (i < end && phonetic_string[i + 1] == 'a') //aa sign
+ { // as in kaazhcha
+ strcat (ml_string, "\340\264\276");
+ i++;
+ }
+ else if (i < end && phonetic_string[i + 1] == 'i')
+ { // as in kaitha
+ strcat (ml_string, "\340\265\210"); //ai sign
+ i++;
+ }
+ else if (i < end && phonetic_string[i + 1] == 'u')
+ { // as in kauravar
+ strcat (ml_string, "\340\265\227"); //au sign
+ i++;
+ }
+ }
+ break;
+
+ case 'A':
+ (i == 0) ? strcat (ml_string, "\340\264\206") : strcat (ml_string,
+ "\340\264\276");
+ break;
+ case 'i':
+ if (i == 0)
+ {
+ if (i < end
+ && ((phonetic_string[i + 1] == 'i')
+ || (phonetic_string[i + 1] == 'e')))
+ { //ii/ee letter
+ strcat (ml_string, "\340\264\210");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\207"); // i/e letter
+ }
+ }
+ else
+ {
+ if (i < end && ((phonetic_string[i + 1] == 'i') || (phonetic_string[i + 1] == 'e'))) //ii/ee sign
+ {
+ strcat (ml_string, "\340\265\200");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\277"); // i/e sign
+ }
+ }
+ break;
+ case 'I':
+ (i == 0) ? strcat (ml_string, "\340\264\210") : strcat (ml_string,
+ "\340\265\200");
+ break;
+ case 'u':
+ if (i == 0)
+ {
+ if (i < end
+ && ((phonetic_string[i + 1] == 'o')
+ || (phonetic_string[i + 1] == 'u')))
+ { //ii/ee letter
+ strcat (ml_string, "\340\264\212");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\211"); // u letter
+ }
+ }
+ else
+ {
+ if (i < end && ((phonetic_string[i + 1] == 'u') || (phonetic_string[i + 1] == 'o'))) //ii/ee sign
+ {
+ strcat (ml_string, "\340\265\202"); //uu sign
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\265\201"); // u sign
+ }
+ }
+ break;
+ case 'U':
+ (i == 0) ? strcat (ml_string, "\340\264\212") : strcat (ml_string,
+ "\340\265\202");
+ break;
+ case '^':
+ (i == 0) ? strcat (ml_string, "\340\264\213") : strcat (ml_string,
+ "\340\265\203");
+ break;
+ case 'e':
+ if (i == 0)
+ {
+ if (i < end
+ && ((phonetic_string[i + 1] == 'e')
+ || (phonetic_string[i + 1] == 'a')))
+ { //ii/ee letter
+ strcat (ml_string, "\340\264\217");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\207"); // e letter
+ }
+ }
+ else
+ {
+ if (i < end && ((phonetic_string[i + 1] == 'e'))) //e/ee sign
+ {
+ strcat (ml_string, "\340\265\200"); //ee sign
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\265\206"); // u sign
+ }
+ }
+ break;
+ case 'E':
+ (i == 0) ? strcat (ml_string, "\340\264\217") : strcat (ml_string,
+ "\340\265\207");
+ break;
+// case '@': //ai
+// (i == 0) ? strcat (ml_string, "\340\264\220") : strcat (ml_string,
+// "\340\265\210");
+// break;
+ case 'o':
+ if (i == 0)
+ {
+ if (i < end && ((phonetic_string[i + 1] == 'o')))
+ { //oo letter
+ strcat (ml_string, "\340\264\222");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, " \340\264\223"); // o letter
+ }
+ }
+ else
+ {
+ if (i < end && ((phonetic_string[i + 1] == 'o'))) //oo sign
+ {
+ strcat (ml_string, "\340\265\202"); //oo sign
+ i++;
+ }
+ else if (i < end && ((phonetic_string[i + 1] == 'u'))) //ou sign
+ {
+ strcat (ml_string, "\340\265\214"); //ou sign
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\265\212"); // o sign
+ }
+ }
+ break;
+ case 'O':
+ (i == 0) ? strcat (ml_string, "\340\264\223") : strcat (ml_string,
+ "\340\265\213");
+ break;
+ case '`':
+ (i == 0) ? strcat (ml_string, "\340\264\224") : strcat (ml_string,
+ "\340\265\227");
+ break;
+// case '.': //am
+// strcat (ml_string, "\340\264\202");
+// break;
+ case '~': //chandrakkala
+ strcat (ml_string, "\340\265\215");
+ break;
+ case ':': //Ah
+ strcat (ml_string, "\340\264\203");
+ break;
+ //Consonants
+ case 'k':
+
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\225");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\225");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //kh
+ strcat (ml_string, "\340\264\226");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\225"); //just a k
+
+ }
+ break;
+ case 'K':
+ if (i == start)
+ { //start of a word- may be a Name.Place..starting with K
+ strcat (ml_string, "\340\264\225"); //just a k
+ }
+
+ else if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //KK
+ strcat (ml_string, "\340\264\225");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\225");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //Kh as in Khalid
+ strcat (ml_string, "\340\264\226");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\226"); //just a k
+
+ }
+
+ break;
+ case 'g':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\227");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\227");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //gh
+ strcat (ml_string, "\340\264\230");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\227"); //just a g as in gaanam
+
+ }
+ break;
+ case 'G':
+
+ if (i == start)
+ { //start of a word- may be a Name.Place..starting with G
+ strcat (ml_string, "\340\264\227"); //just a g
+ }
+
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //Kh as in Gha
+ strcat (ml_string, "\340\264\230");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\230"); //just a G
+
+ }
+ break;
+ case 'c':
+
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //kk/cc
+ strcat (ml_string, "\340\264\225");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\225");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ {
+ if (i == start)
+ {
+ //Ch as in chaaya
+ strcat (ml_string, "\340\264\232");
+ i++;
+
+ }
+ else
+ {
+//most of the time the ch in side the manglish means chcha as an pacha *wild guess. leaving this to aspell :)
+//let he decides
+ strcat (ml_string, "\340\264\232");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\232");
+ i++;
+ }
+ }
+ else if (i == start && (phonetic_string[i + 1] != 'h'))
+ { //start of a word- may be a Name. as in cibu
+ strcat (ml_string, "\340\264\270"); //just a c/k
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\226"); //just a k/c
+
+ }
+
+ break;
+ case 'C':
+
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //kk/CC
+ strcat (ml_string, "\340\264\225");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\225");
+ i++;
+ }
+ else if (i < end
+ && ((phonetic_string[i + 1] == 'h')
+ || (phonetic_string[i + 1] == 'H')))
+ {
+ if (i == start)
+ {
+ //Ch as in chaaya
+ strcat (ml_string, "\340\264\232");
+ i++;
+
+ }
+ else
+ {
+//most of the time the ch in side the manglish means chcha as an pacha *wild guess. leaving this to aspell :)
+//let he decides
+ strcat (ml_string, "\340\264\232");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\232");
+ i++;
+ }
+ }
+ else if (i == start && (phonetic_string[i + 1] != 'h'))
+ { //start of a word- may be a Name. as in cibu
+ strcat (ml_string, "\340\264\270"); //just a c/k
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\226"); //just a k/c
+
+ }
+
+ break;
+ case 'j':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama //jja
+ strcat (ml_string, "\340\264\234"); //ja
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\234"); //ja
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //jh
+ strcat (ml_string, "\340\264\235");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\234"); //just a j as in janam
+
+ }
+ break;
+ case 'J':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama //jja
+ strcat (ml_string, "\340\264\234"); //ja
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\234"); //ja
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //jh
+ strcat (ml_string, "\340\264\235");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\234"); //just a j as in janam
+ }
+ break;
+ case 't':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama //tta
+ strcat (ml_string, "\340\264\237"); //ja
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\237"); //ja
+ i++;
+ }
+ else if (i < end
+ && ((phonetic_string[i + 1] == 'h')
+ || (phonetic_string[i + 1] == 'H')))
+ { //th
+ strcat (ml_string, "\340\264\244");
+ i++;
+ }
+ else
+ {
+ //usually the words starting with t is very less. A t in the starting is tha most probably.
+ if (i == start)
+ {
+ strcat (ml_string, "\340\264\244"); //tha
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\237"); //just a t
+ }
+ }
+ break;
+ case 'T':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama //tta
+ strcat (ml_string, "\340\264\237"); //ja
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\237"); //ja
+ i++;
+ }
+ else if (i < end
+ && ((phonetic_string[i + 1] == 'h')
+ || (phonetic_string[i + 1] == 'H')))
+ { //th
+ strcat (ml_string, "\340\264\244");
+ i++;
+ }
+ else
+ {
+ //usually the words starting with t is very less. A t in the starting is tha most probably.
+ if (i == start)
+ {
+ strcat (ml_string, "\340\264\244"); //tha
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\237"); //just a t
+ }
+ }
+ break;
+ case 'd':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama //dda
+ strcat (ml_string, "\340\264\246"); //da
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\246"); //da
+ i++;
+ }
+ else if (i < end
+ && ((phonetic_string[i + 1] == 'h')
+ || (phonetic_string[i + 1] == 'H')))
+ { //th
+ strcat (ml_string, "\340\264\247");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\246"); //da
+ }
+ break;
+ case 'D':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama //dda
+ strcat (ml_string, "\340\264\246"); //Da
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\246"); //Da
+ i++;
+
+ }
+ else if (i < end
+ && ((phonetic_string[i + 1] == 'h')
+ || (phonetic_string[i + 1] == 'H')))
+ { //Dh as in viDhi
+ strcat (ml_string, "\340\264\242");
+ i++;
+ }
+ else
+ {
+ if (i == start)
+ {
+ strcat (ml_string, "\340\264\246"); //Da
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\241"); //Da
+ }
+ }
+ break;
+ case 'N':
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\243");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\243");
+ i++;
+ }
+ else if (i == start)
+ {
+ strcat (ml_string, "\340\264\250");
+ }
+ else
+ {
+
+ if (isVowel (phonetic_string[i + 1]))
+ {
+ strcat (ml_string, "\340\264\243");
+ }
+ else if ((i < end))
+ {
+ //chillu N
+ strcat (ml_string, "\340\264\243");
+ strcat (ml_string, "\340\265\215"); //virama
+ strcat (ml_string, "\342\200\215"); //zwj
+ }
+ }
+ //words ending with N chillu is less
+ break;
+
+ case 'n':
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\250");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\250");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'j'))
+ { //nja as in njaan
+ strcat (ml_string, "\340\264\236");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 't'))
+ {
+ if (i + 1 < end && (phonetic_string[i + 2] == 'h'))
+ {
+//nthaa as in enthaa
+ strcat (ml_string, "\340\264\250");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\244");
+ i++;
+ i++;
+ }
+ else
+ {
+ //nta as in ente
+ strcat (ml_string, "\340\264\250");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\261");
+ i++;
+ }
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'g'))
+ { //nga as in thenga
+ strcat (ml_string, "\340\264\231");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\231");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'k'))
+ { //nka as in thankakkutam
+ strcat (ml_string, "\340\264\231");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\225");
+ i++;
+ }
+ else if (i == start)
+ {
+ strcat (ml_string, "\340\264\250");
+ }
+ else
+ {
+
+ if (isVowel (phonetic_string[i + 1]))
+ {
+ strcat (ml_string, "\340\264\250");
+ }
+ else if ((i < end))
+ {
+
+ //chillu n
+ strcat (ml_string, "\340\264\250");
+ strcat (ml_string, "\340\265\215"); //virama
+ strcat (ml_string, "\342\200\215"); //zwj
+ }
+ }
+ //words ending with N chillu is less
+ break;
+ case 'p':
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\252");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\252");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //ph
+ strcat (ml_string, "\340\264\253");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\252"); //just a p
+
+ }
+ break;
+ case 'f':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\253");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\253");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\253"); //just a f
+
+ }
+ break;
+ case 'b':
+
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\254");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\254");
+ i++;
+ }
+ else if (i < end && (phonetic_string[i + 1] == 'h'))
+ { //ph
+ strcat (ml_string, "\340\264\255");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\254"); //just a b
+
+ }
+ break;
+ case 'B':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\255");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\255");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\255"); //just a B
+
+ }
+ break;
+ case 'm':
+ if (i == end - 1 && phonetic_string[i] != phonetic_string[i - 1]) //end of word. most probably it is an anuswaram
+ {
+ strcat (ml_string, "\340\264\202");
+
+ }
+ else if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\256");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\256");
+ i++;
+ }
+ else
+ {
+ if (i + 1 < end && !isVowel (phonetic_string[i + 1]))
+ {
+ strcat (ml_string, "\340\264\256");
+ strcat (ml_string, "\340\265\215");
+ }
+ else
+ strcat (ml_string, "\340\264\256");
+ }
+
+ break;
+ case 'y':
+ if (i < end && (phonetic_string[i + 1] == phonetic_string[i]))
+ { //koottaxaram - put a virama
+ strcat (ml_string, "\340\264\257");
+ strcat (ml_string, "\340\265\215");
+ strcat (ml_string, "\340\264\257");
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\257"); //just a y
+
+ }
+ break;
+ case 'r':
+ if ((i + 1 < end)
+ && ((phonetic_string[i + 1] == 'a')
+ || (phonetic_string[i + 1] == 'A')
+ || (phonetic_string[i + 1] == 'e')
+ || (phonetic_string[i + 1] == 'E')
+ || (phonetic_string[i + 1] == 'i')
+ || (phonetic_string[i + 1] == 'I')
+ || (phonetic_string[i + 1] == 'o')
+ || (phonetic_string[i + 1] == 'O')))
+ {
+ strcat (ml_string, "\340\264\260"); //just r
+ }
+ else if ((i < end))
+ {
+
+ //chillu r
+ strcat (ml_string, "\340\264\260");
+ strcat (ml_string, "\340\265\215"); //virama
+ strcat (ml_string, "\342\200\215"); //zwj
+ }
+
+ break;
+ case 'l':
+ if ((i + 1 < end) && (isVowel (phonetic_string[i + 1])))
+ {
+ strcat (ml_string, "\340\264\262"); //just l
+ }
+ else if ((i < end))
+ {
+
+ //chillu l
+ strcat (ml_string, "\340\264\262");
+ strcat (ml_string, "\340\265\215"); //virama
+ strcat (ml_string, "\342\200\215"); //zwj
+ }
+
+ break;
+ case 'v':
+ strcat (ml_string, "\340\264\265");
+ break;
+ case 's':
+
+ if (i + 1 < end && phonetic_string[i + 1] == 'h')
+ {
+ strcat (ml_string, "\340\264\267"); //sha
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\270"); //sa as in santhosh
+ }
+ break;
+ case 'S':
+ strcat (ml_string, "\340\264\267"); //sha
+ break;
+ case 'h':
+ strcat (ml_string, "\340\264\271");
+ break;
+ case 'L':
+ strcat (ml_string, "\340\264\263");
+ break;
+ case 'z':
+ if (i + 1 < end && phonetic_string[i + 1] == 'h')
+ {
+ strcat (ml_string, "\340\264\264"); //zha
+ i++;
+ }
+ else
+ {
+ strcat (ml_string, "\340\264\270"); //zoo
+ }
+ break;
+ case 'R':
+ strcat (ml_string, "\340\264\261");
+ break;
+ default:
+ strcat (ml_string, phonetic_string[i]); //Not recognized
+ break;
+ }
+
+ if ((i + 1 < end) && !isVowel (phonetic_string[i])
+ && !isVowel (phonetic_string[i + 1])
+ && !isChillu (phonetic_string[i]))
+ {
+ strcat (ml_string, "\340\265\215"); //virama - implicit virama for conjuct formation
+ }
+ else
+ if ((i + 1 == end) && !isVowel (phonetic_string[i])
+ && !isChillu (phonetic_string[i]))
+ {
+ strcat (ml_string, "\340\265\215"); //virama - implicit virama for conjuct formation
+
+ }
+ i++;
+
+
+ }
+
+ printf ("%s\n", ml_string);
+ return ml_string;
+}
diff --git a/input-methods/sulekha/src/transliteration.h b/input-methods/sulekha/src/transliteration.h
new file mode 100644
index 0000000..946894d
--- /dev/null
+++ b/input-methods/sulekha/src/transliteration.h
@@ -0,0 +1,31 @@
+/* Transliteration.h
+ *
+ * Copyright (C) 2007-2008
+ * Santhosh Thottingal<santhosh00@gmail.com>,
+ * Praveen Arimprathodiyil <pravi.a@gmail.com>
+ * Swathanthra Malayalam Computing.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+/*
+Transliterate the a string to malayalam.
+Algorithm:
+1)For all vowels, if it is at the 0th position print as it is
+2)If the vowel is in between/end of the string print the sign of the vowel except for A
+3)For all consonants print the malayalam character
+4)If a phonetic character is not identified print '?'
+5)Octal C escaped strings are used for printing the Unicode Malayalam string
+*/
+char *transliterate_ml (char *, int, int);
diff --git a/input-methods/sulekha/src/transliteration.h~ b/input-methods/sulekha/src/transliteration.h~
new file mode 100644
index 0000000..946894d
--- /dev/null
+++ b/input-methods/sulekha/src/transliteration.h~
@@ -0,0 +1,31 @@
+/* Transliteration.h
+ *
+ * Copyright (C) 2007-2008
+ * Santhosh Thottingal<santhosh00@gmail.com>,
+ * Praveen Arimprathodiyil <pravi.a@gmail.com>
+ * Swathanthra Malayalam Computing.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+/*
+Transliterate the a string to malayalam.
+Algorithm:
+1)For all vowels, if it is at the 0th position print as it is
+2)If the vowel is in between/end of the string print the sign of the vowel except for A
+3)For all consonants print the malayalam character
+4)If a phonetic character is not identified print '?'
+5)Octal C escaped strings are used for printing the Unicode Malayalam string
+*/
+char *transliterate_ml (char *, int, int);