/*!
@page BalOverview BAL Overview

<div class="header">
<center>\< @ref QuickStart | @ref OrigynWebBrowser | @ref Contents \></center>
<hr>
</div>

@section Introduction

BAL stands for Browser Abstraction Layer. Its purpose is to make port to another platform easy and quick.
In the next section @Principles is detailled principles that conduct BAL abstraction.
The chapter @BalModules details interfaces and behaviour specification, module per module.

@section Principles

@subsection Interfaces

BAL abstraction is based on interfaces. Interfaces are described through abstract classes.
These abstract classes contains only pure virtual method. No default implementation is tolerated.
As a convention, interfaces are part of the namespace BAL, and are prefixed with BI.

@subsection Types

BAL types define some simple aggregation classes. These classes only contains predefined types,
or BAL types. They do not have any virtual methods. They are supposed to be unmodified on all
the platform.
As a convention, BAL types are part of the namespace BAL. File names are prefixed with BT.

@subsection Concretisation

Concretisation of an interface is a heritage of this interface, with the implementation of the given methods.
It is sometimes referred to as a component. The convention is to place such class in the BC namespace, and to prefix it with a BC.

@subsection Configuration

Instanciation and destruction of a component is centralized through the BAL Configuration. Why ? to hide
concrete class in the engine code. This code has knowledge of the interfaces, and of the configuration. Engine
code has no knowledge of the "BC" classes.

@section BalModules BAL modules

 - @ref Events
 - @ref Facilities (to be completed)
 - @ref Fonts (to be completed)
 - @ref Graphics (to be completed)
 - @ref ImageDecoders
 - @ref Internationalization (to be completed)
 - @ref Posix (to be completed)
 - @ref Transfers
 - @ref Types (to be completed)
 - @ref Widgets
 - @ref XML (to be completed)

*/
