################################################################
# This is a perl Qt4 binding world!
# A warm welcome from China :-)
################################################################

PROGRESS

1. Qt Core module ported.
2. Qt Gui module ported.
3. Qt DBus module ported.
4. Qt Designer module skipped.
5. Qt Network module ported.
6. Qt OpenGL module ported.
7. Qt Script module ported.
8. Qt ScriptTools skipped.
9. Qt Sql module ported.
10.Qt Svg module ported.
11.Qt Test module ported (partially).
12.Qt UiTools skipped.
13.Qt WebKit ported.
14.Qt Xml module ported.
15.Qt XmlPatterns module ported.

TODO

see file TODO.

BACKGROUND

14 years ago Ashley Winters made the 1st PerlQt binding for Qt, the 
fantastic ghraphic library. 
Time passed by, Qt became more popular and has been introduced to 
many other dynamic languages such as python, perl is now a bit 
behind. 
For a while I wanted to bring the latest Qt 4 back to perl. But 
this is not an easy job as you may know.
I started this project since 2007, when I wrote QTEDI first, which
is a LR parser to extract interface information from cpp header, 
based on Parse::RecDescent. However, due to the environment and some 
personal reasons, the entire project was paused during 2008 and 2009.
I have been able to re-pick it up in 2010 and made some progress.
From Spring 2011, further progress has been made. 

TECH NOTE

The final XS and PM code is automated, from the following primary
steps:

1. strip include
   remove include pragma, to exclude external resource;
2. cpp preprocessing
   remove macro defines and branches;
3. parsing
   done by QTEDI, parse cpp header and extract interface information;
4. re-format
   re-format interface information made by QTEDI, to work around some
   edge case parser cannot cover;
5. category
   categorize meta/enum/function/signal/slot/typedef by class;
6. typemap, packagemap, enummap
   study type involved by each public function/signal/slot, generate a
   typemap, create a packagemap for class/module mapping, enummap is a
   collection of all declared enum type;
7. xs code automation
   generate xs code for each class from results of #5 and #6 above,
   create top Core.xs skeleton; 
8. pm code automation
   generate pm code for each class from results of #5 and #6 above,
   create top lib/Qt/Core.pm skeleton;
9. manifest and packaging
   generate MANIFEST file and run 'gmake dist';

- Dongxu Ma
2011 London
