/*! @mainpage %Maliit Framework Documentation

@section intro Introduction

%Maliit provides a flexible and cross-platform input method framework. It has a
plugin-based client-server architecture where applications act as clients and
communicate with the %Maliit server via input context plugins. The communication
link currently uses D-Bus. %Maliit is an open source framework (LGPL 2) with
open source plugins (BSD).

The framework provides two distinct plugin interfaces:
- @ref pluginapi "Maliit plugin", for writing input methods such as virtual keyboards or handwriting
- %Maliit engine plugin, for writing input method engines used for word prediction and error correction.

@if false
[ATTENTION: engine interface is not Maliit-fied yet].
* Writing Maliit plugins [LINK]
* Writing Maliit engine plugins [LINK]
@endif

@image html architecture-overview.png

The %Maliit @ref architecture provides an abstraction that enables application
developers to concentrate on application logic, with the option to extend input
method interaction with @ref libmaliitintro, while plugin developers are
insulated from applications. Neither plugins nor applications know directly of
each other, nor do they have to use the same toolkits. For example, plugins
written for Qt or MeeGo Touch applications will work just as well for GTK+
applications, without any modifications.

The framework is responsible for switching to specific plugins, depending on
the application and device state. For example, when opening a hardware
keyboard, %Maliit will automatically search for a HWKB-capable plugin and
activate it. Additionally, plugins can trigger a plugin or language layout
change. Plugins announce their services via a plugin description interface, the
list of languages they support, whether they are on-screen or
HWKB plugins (or both).

@subsection maliit-fwbasicusage Basic Usage

@subsubsection maliit-fwclasses Main classes

The following base classes are needed to implement an input method UI plugin:

- MAbstractInputMethod : to allow input method server to update input method plugin state
- MAbstractInputMethodSettings : to provide settings in control panel
- MInputMethodPlugin : to enable the plugin to be loaded by the input method server

@subsection general General documentation
- <a href="architecture.html">Architecture</a>
- <a href="extensions.html">Extensions to Qt</a>
- <a href="pluginsystem.html">Plugin System</a>
- <a href="internals.html">Feature Internals</a>
- <a href="toolbarxml.html">Toolbar Widget XML Specification</a>

@subsection tutorial Tutorial
- <a href="plugintutorial.html">How to implement a plugin</a>

@section libmaliitintro Libmaliit

@ref libmaliit "Libmaliit" is an input method extension library for Qt — use it to add application support for screen rotation and attribute extensions.

@subsection libmaliitclasses Useful classes

- @ref Maliit::AttributeExtension "AttributeExtension" : Register extensions such as key overrides.
- @ref Maliit::InputMethod "InputMethod" : Listen to device orientation, language and raw key events.
- @ref Maliit::PreeditInjectionEvent "PreeditInjectionEvent" : Extension for preedit text inside text edits.

@section api API reference
<a href="classes.html">All Classes</a>

*/
