################################################################
# 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