Initial commit
[profile/ivi/openjade.git] / style / EvalContext.h
1 // Copyright (c) 1996 James Clark
2 // See the file copying.txt for copying permission.
3
4 #ifndef EvalContext_INCLUDED
5 #define EvalContext_INCLUDED 1
6
7 #include "Boolean.h"
8 #include "Node.h"
9 #include "Vector.h"
10 #include <stddef.h>
11
12 #ifdef DSSSL_NAMESPACE
13 namespace DSSSL_NAMESPACE {
14 #endif
15
16 class StyleStack;
17 class StyleObj;
18 class ProcessingMode;
19 class LanguageObj;
20
21 class EvalContext {
22 public:
23   class CurrentNodeSetter {
24   public:
25    CurrentNodeSetter(const NodePtr &, const ProcessingMode *, EvalContext &);
26    ~CurrentNodeSetter();
27   private:
28     EvalContext *ec_;
29     NodePtr saveCurrentNode_;
30     const ProcessingMode *saveProcessingMode_;
31   };
32
33   EvalContext();
34   StyleStack *styleStack;
35   unsigned specLevel; // level of the specification flow object in the style stack
36   StyleObj *overridingStyle;
37   Vector<size_t> *actualDependencies;
38   NodePtr currentNode;
39   const ProcessingMode *processingMode;
40   LanguageObj *currentLanguage;
41 };
42
43 inline
44 EvalContext::EvalContext()
45 : styleStack(0), overridingStyle(0),
46   actualDependencies(0), processingMode(0), currentLanguage(0)
47 {
48 }
49
50 inline
51 EvalContext::CurrentNodeSetter::CurrentNodeSetter(const NodePtr &node,
52                                                   const ProcessingMode *mode,
53                                                   EvalContext &ec)
54 : ec_(&ec), saveCurrentNode_(ec.currentNode), saveProcessingMode_(ec.processingMode)
55 {
56   ec.currentNode = node;
57   ec.processingMode = mode;
58 }
59
60 inline
61 EvalContext::CurrentNodeSetter::~CurrentNodeSetter()
62 {
63   ec_->currentNode = saveCurrentNode_;
64   ec_->processingMode = saveProcessingMode_;
65 }
66
67 #ifdef DSSSL_NAMESPACE
68 }
69 #endif
70
71 #endif /* not EvalContext_INCLUDED */