1 // Copyright (c) 1999 Matthias Clasen
2 // See the file copying.txt for copying permission.
4 #ifndef ELObjPropVal_INCLUDED
5 #define ELObjPropVal_INCLUDED 1
10 #ifdef DSSSL_NAMESPACE
11 namespace DSSSL_NAMESPACE {
14 class ELObjPropertyValue : public PropertyValue {
16 ELObjPropertyValue(Interpreter &interp, bool rcs) : interp_(&interp), rcs_(rcs), obj(0) { }
17 void set(const NodePtr &nd) {
18 obj = new (*interp_) NodePtrNodeListObj(nd);
20 void set(const NodeListPtr &nl) {
21 obj = new (*interp_) NodeListPtrNodeListObj(nl);
23 void set(const NamedNodeListPtr &nnl) {
24 obj = new (*interp_) NamedNodeListPtrNodeListObj(nnl);
28 obj = interp_->makeTrue();
30 obj = interp_->makeFalse();
32 void set(GroveChar c) {
33 obj = interp_->makeChar(c);
35 void set(GroveString s) {
36 obj = new (*interp_) StringObj(s.data(), s.size());
38 void set(ComponentName::Id id) {
39 const char *s = rcs_ ? ComponentName::rcsName(id) : ComponentName::sdqlName(id);
40 obj = interp_->makeSymbol(interp_->makeStringC(s));
42 void set(const GroveStringListPtr &gsListPtr) {
43 PairObj *head = new (*interp_) PairObj(0, 0);
44 ELObjDynamicRoot protect(*interp_, head);
46 ConstGroveStringListIter sgListIter(*gsListPtr);
47 while (!sgListIter.done()) {
48 StringObj *gs = new (*interp_) StringObj(sgListIter.cur().data(), sgListIter.cur().size());
50 PairObj *tem = new (*interp_) PairObj(gs, 0);
55 tail->setCdr(interp_->makeNil());
58 void set(const ComponentName::Id *names) {
59 PairObj *head = new (*interp_) PairObj(0, 0);
60 ELObjDynamicRoot protect(*interp_, head);
62 for (int i = 0; names[i] != ComponentName::noId; i++) {
64 ? ComponentName::rcsName(names[i])
65 : ComponentName::sdqlName(names[i]));
66 SymbolObj *sym = interp_->makeSymbol(interp_->makeStringC(s));
67 tail->setCdr(sym); // in case we ever gc symbols
68 PairObj *tem = new (*interp_) PairObj(sym, 0);
72 tail->setCdr(interp_->makeNil());
76 obj = interp_->makeInteger(l);
84 #ifdef DSSSL_NAMESPACE
88 #endif /* not ELObjPropVal_INCLUDED */