1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
// Copyright (c) 1996 James Clark
// See the file copying.txt for copying permission.
#include "stylelib.h"
#include "StyleEngine.h"
#include "Interpreter.h"
#include "SchemeParser.h"
#include "FOTBuilder.h"
#include "DssslSpecEventHandler.h"
#include "ArcEngine.h"
#include "ProcessContext.h"
#ifdef DSSSL_NAMESPACE
namespace DSSSL_NAMESPACE {
#endif
StyleEngine::StyleEngine(Messenger &mgr,
GroveManager &groveManager,
int unitsPerInch,
bool debugMode,
bool dsssl2,
const FOTBuilder::Extension *extensionTable)
: interpreter_(new Interpreter(&groveManager, &mgr, unitsPerInch, debugMode, dsssl2,
extensionTable))
{
}
void StyleEngine::parseSpec(SgmlParser &specParser,
const CharsetInfo &charset,
const StringC &id,
Messenger &mgr)
{
DssslSpecEventHandler specHandler(mgr);
Vector<DssslSpecEventHandler::Part *> parts;
specHandler.load(specParser, charset, id, parts);
for (size_t i = 0; i < parts.size(); i++) {
for (DssslSpecEventHandler::Part::Iter iter(parts[i]->iter());
!iter.done();
iter.next()) {
Owner<InputSource> in;
iter.cur()->makeInputSource(specHandler, in);
if (in) {
SchemeParser scm(*interpreter_, in);
scm.parse();
}
}
interpreter_->endPart();
}
interpreter_->compile();
}
void StyleEngine::defineVariable(const StringC &ident)
{
interpreter_->defineVariable(ident);
}
StyleEngine::~StyleEngine()
{
delete interpreter_;
}
void StyleEngine::process(const NodePtr &node, FOTBuilder &fotb)
{
ProcessContext context(*interpreter_, fotb);
context.process(node);
}
#ifdef DSSSL_NAMESPACE
}
#endif
|