00001 #ifndef TAGCOLL_TEXTFORMAT_H
00002 #define TAGCOLL_TEXTFORMAT_H
00003
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <tagcoll/Consumer.h>
00027 #include <tagcoll/Serializer.h>
00028 #include <tagcoll/Exception.h>
00029 #include <tagcoll/ParserBase.h>
00030
00031 #include <stdio.h>
00032
00033
00034
00035 namespace Tagcoll
00036 {
00037 template<class ITEM, class TAG>
00038 class PatchList;
00039
00053 template<class ITEM, class TAG>
00054 class TextFormat : public Consumer<ITEM, TAG>
00055 {
00056 protected:
00057 const Converter<ITEM, std::string>& itemconv;
00058 const Converter<TAG, std::string>& tagconv;
00059 FILE* out;
00060
00061 virtual void consumeItemUntagged(const ITEM& item);
00062 virtual void consumeItem(const ITEM& item, const OpSet<TAG>& tags);
00063 virtual void consumeItemsUntagged(const OpSet<ITEM>& items);
00064 virtual void consumeItems(const OpSet<ITEM>& items, const OpSet<TAG>& tags);
00065
00066 public:
00067 TextFormat(
00068 const Converter<ITEM, std::string>& itemconv,
00069 const Converter<TAG, std::string>& tagconv,
00070 FILE* out) : itemconv(itemconv), tagconv(tagconv), out(out) {}
00071 virtual ~TextFormat() {}
00072
00073
00077 static void outputPatch(
00078 Converter<ITEM, std::string>& itemconv,
00079 Converter<TAG, std::string>& tagconv,
00080 const PatchList<ITEM, TAG>& patch,
00081 FILE* out);
00082
00086 static void parse(
00087 Converter<std::string, ITEM>& itemconv,
00088 Converter<std::string, TAG>& tagconv,
00089 ParserInput& in,
00090 Consumer<ITEM, TAG>& consumer);
00091
00095 static PatchList<ITEM, TAG> parsePatch(
00096 Converter<std::string, ITEM>& itemconv,
00097 Converter<std::string, TAG>& tagconv,
00098 ParserInput& in);
00099 };
00100
00101 };
00102
00103
00104 #endif