00001
00002
00003
00004
00005
00006
00007 #include "unisubtreegen.h"
00008 #include "wvbuf.h"
00009 #include "wvtclstring.h"
00010 #include "wvmoniker.h"
00011 #include "wvlinkerhack.h"
00012
00013 WV_LINK(UniSubtreeGen);
00014
00015
00016 static IUniConfGen *creator(WvStringParm s)
00017 {
00018 WvConstInPlaceBuf buf(s, s.len());
00019 WvString one(wvtcl_getword(buf)), two(wvtcl_getword(buf));
00020
00021 if (!one) one = "";
00022 if (!two) two = "";
00023
00024 return new UniSubtreeGen(wvcreate<IUniConfGen>(one), two);
00025 }
00026
00027 static WvMoniker<IUniConfGen> subtreereg("subtree", creator);
00028
00029
00030 UniSubtreeGen::UniSubtreeGen(IUniConfGen *gen, const UniConfKey &_subkey)
00031 : UniFilterGen(gen), subkey(_subkey)
00032 {
00033
00034 }
00035
00036
00037 bool UniSubtreeGen::keymap(const UniConfKey &unmapped_key, UniConfKey &mapped_key)
00038 {
00039 if (unmapped_key.isempty())
00040 mapped_key = subkey;
00041 else
00042 mapped_key = UniConfKey(subkey, unmapped_key);
00043 return true;
00044 }
00045
00046 bool UniSubtreeGen::reversekeymap(const UniConfKey &mapped_key, UniConfKey &unmapped_key)
00047 {
00048 WvString _unmapped_key;
00049 bool result = subkey.suborsame(mapped_key, _unmapped_key);
00050 if (result)
00051 unmapped_key = UniConfKey(_unmapped_key);
00052 return result;
00053 }