Initial import of the CDE 2.1.30 sources from the Open Group.
This commit is contained in:
138
cde/programs/dtinfo/DtMmdb/StyleSheet/Resolver.C
Normal file
138
cde/programs/dtinfo/DtMmdb/StyleSheet/Resolver.C
Normal file
@@ -0,0 +1,138 @@
|
||||
// $XConsortium: Resolver.C /main/5 1996/10/08 19:26:17 cde-hal $
|
||||
#include "Debug.h"
|
||||
#include "Resolver.h"
|
||||
#include "ResolverStack.h"
|
||||
#include "PathTable.h"
|
||||
#include "Renderer.h"
|
||||
#include "Element.h"
|
||||
#include "Feature.h"
|
||||
#include "HardCopy/autoNumberFP.h"
|
||||
|
||||
extern const Element *gCurrentElement ;
|
||||
extern const FeatureSet *gCurrentLocalSet;
|
||||
extern const FeatureSet *gParentCompleteSet;
|
||||
|
||||
Resolver::Resolver(PathTable& pTable, Renderer& r)
|
||||
: f_pathTable(pTable),
|
||||
f_Renderer(r),
|
||||
f_resolverStack()
|
||||
{
|
||||
// have the Renderer install its default values as the bottom item on the
|
||||
// Stack
|
||||
FeatureSet *default_features = f_Renderer.initialize();
|
||||
|
||||
ResolverStackElement *default_element =
|
||||
new ResolverStackElement(new Element(gSymTab->intern("!"),0 , 0, 0),
|
||||
0,
|
||||
default_features);
|
||||
|
||||
f_resolverStack.push(default_element);
|
||||
}
|
||||
|
||||
Resolver::~Resolver()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
Resolver::Begin()
|
||||
{
|
||||
// can do any node pre-processing here
|
||||
f_Renderer.Begin();
|
||||
}
|
||||
|
||||
void
|
||||
Resolver::End()
|
||||
{
|
||||
// can do any node post-processing here
|
||||
f_Renderer.End();
|
||||
gAutoNumberFP.resetAllAutoNumbers();
|
||||
}
|
||||
|
||||
unsigned int
|
||||
Resolver::beginElement(Element *element)
|
||||
{
|
||||
//ON_DEBUG(element -> print(cerr));
|
||||
|
||||
// get raw feature set
|
||||
f_path.append(new PathTerm(*element));
|
||||
FeatureSet *rawLocalFeatureSet = f_pathTable.getFeatureSet(f_path);
|
||||
|
||||
// get parent details
|
||||
ResolverStackElement* parent = f_resolverStack.top();
|
||||
|
||||
// qifc:
|
||||
// when rawLocalFeatureSet != 0 to call f_Renderer.preEvaluate is
|
||||
// too restrictive. Comment out
|
||||
//
|
||||
//if (rawLocalFeatureSet)
|
||||
gAutoNumberFP.beginElement(*element);
|
||||
|
||||
FeatureSet *localFeatureSet = new FeatureSet;
|
||||
|
||||
gCurrentElement = element ;
|
||||
gCurrentLocalSet = localFeatureSet ;
|
||||
gParentCompleteSet = &parent->completeFeatureSet() ;
|
||||
|
||||
//ON_DEBUG(cerr << "Path: " << f_path << endl);
|
||||
if (rawLocalFeatureSet)
|
||||
{
|
||||
// ON_DEBUG(cerr << "rawLocalFeatureSet: " << *rawLocalFeatureSet << endl);
|
||||
|
||||
localFeatureSet = rawLocalFeatureSet->evaluate(localFeatureSet);
|
||||
|
||||
// ON_DEBUG(cerr << "localFeatureSet: " << *localFeatureSet << endl);
|
||||
}
|
||||
|
||||
// qifc:
|
||||
// when rawLocalFeatureSet != 0 to call f_Renderer.postEvaluate is
|
||||
// too restrictive. Comment out
|
||||
//
|
||||
//if (rawLocalFeatureSet)
|
||||
|
||||
// need to create a complete feature set for current element
|
||||
// set is Sl U (Spc - Sl)
|
||||
FeatureSet *completeFeatureSet = new
|
||||
FeatureSet(parent->completeFeatureSet(),
|
||||
*localFeatureSet);
|
||||
|
||||
// add current element to top of stack
|
||||
f_resolverStack.push(
|
||||
new ResolverStackElement(element,
|
||||
localFeatureSet,
|
||||
completeFeatureSet)
|
||||
);
|
||||
|
||||
// tell renderer about new element
|
||||
unsigned int ignore = f_Renderer.BeginElement(*element, *localFeatureSet,
|
||||
*completeFeatureSet,
|
||||
parent->completeFeatureSet());
|
||||
|
||||
if (ignore)
|
||||
{
|
||||
gAutoNumberFP.endElement(element->gi());
|
||||
|
||||
// clean up stack and path
|
||||
delete f_resolverStack.pop();
|
||||
delete f_path.removeLast();
|
||||
}
|
||||
|
||||
return ignore;
|
||||
}
|
||||
|
||||
void Resolver::data(const char* data, unsigned int data_length)
|
||||
{
|
||||
// pass through
|
||||
f_Renderer.data(data, data_length);
|
||||
}
|
||||
|
||||
void Resolver::endElement(const Symbol& s)
|
||||
{
|
||||
// NOTE: may want to pass top of stack to renderer for post element
|
||||
// processing?
|
||||
|
||||
gAutoNumberFP.endElement(s);
|
||||
|
||||
f_Renderer.EndElement(s); // pass through
|
||||
delete f_resolverStack.pop(); // pop stack
|
||||
delete f_path.removeLast(); // remove item from path
|
||||
}
|
||||
Reference in New Issue
Block a user