00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "global.h"
00024 #include "documentsource.h"
00025 #include "parsercollectionimpl.h"
00026
00027 #include "mapper/mapperatomimpl.h"
00028 #include "mapper/mapperrdfimpl.h"
00029 #include "mapper/mapperrss2impl.h"
00030 #include "atom/parser.h"
00031 #include "rdf/parser.h"
00032 #include "rss2/parser.h"
00033
00034 #include <QtCore/QCoreApplication>
00035
00036 namespace {
00037 static bool collectionIsInitialized = false;
00038 }
00039
00040 namespace Syndication {
00041
00042 static ParserCollectionImpl<Syndication::Feed> *parserColl = 0;
00043
00044 namespace {
00045
00046
00047 static void cleanupParserCollection()
00048 {
00049 delete parserColl;
00050 parserColl = 0;
00051 }
00052
00053 }
00054
00055 ParserCollection<Feed>* parserCollection()
00056 {
00057 if (!collectionIsInitialized)
00058 {
00059 parserColl = new ParserCollectionImpl<Syndication::Feed>;
00060 qAddPostRoutine(cleanupParserCollection);
00061 parserColl->registerParser(new RSS2::Parser, new RSS2Mapper);
00062 parserColl->registerParser(new Atom::Parser, new AtomMapper);
00063 parserColl->registerParser(new RDF::Parser, new RDFMapper);
00064 collectionIsInitialized = true;
00065 }
00066 return parserColl;
00067 }
00068
00069 FeedPtr parse(const DocumentSource& src, const QString& formatHint)
00070 {
00071 return parserCollection()->parse(src, formatHint);
00072 }
00073
00074 }
00075