MODULE XMLLoader;
IMPORT
Files, XML, XMLGeneratorSchema, XMLScanner, XMLParser, CSS2, CSS2Scanner, CSS2Parser, XMLStyle;
CONST
DefaultXMLGeneratorFile* = "DefaultXGS.xml";
DefaultCSS2File* = "DefaultCSS2.css";
VAR
DefaultXMLElementRegistry-: XML.ElementRegistry;
DefaultStyleSheet-: CSS2.StyleSheet;
PROCEDURE LoadCSS*(cssName: ARRAY OF CHAR): CSS2.StyleSheet;
VAR cssFile: Files.File; cssScanner: CSS2Scanner.Scanner; cssParser: CSS2Parser.Parser;
BEGIN
cssFile := Files.Old(cssName);
IF cssFile = NIL THEN cssFile := Files.Old(DefaultCSS2File)
END;
IF cssFile = NIL THEN RETURN NIL
ELSE NEW(cssScanner, cssFile); NEW(cssParser, cssScanner); RETURN cssParser.Parse()
END
END LoadCSS;
PROCEDURE LoadXML*(xmlName: ARRAY OF CHAR): XML.Document;
VAR xmlFile: Files.File; xmlScanner: XMLScanner.Scanner; xmlParser: XMLParser.Parser;
reader: Files.Reader;
BEGIN
xmlFile := Files.Old(xmlName);
IF xmlFile = NIL THEN RETURN NIL
ELSE NEW(reader, xmlFile, 0); NEW(xmlScanner, reader); NEW(xmlParser, xmlScanner); RETURN xmlParser.Parse()
END
END LoadXML;
PROCEDURE LoadComponents*(xmlName, generatorSchemaName: ARRAY OF CHAR): XML.Document;
VAR xmlFile: Files.File; xmlScanner: XMLScanner.Scanner; xmlParser: XMLParser.Parser;
reader: Files.Reader;
BEGIN
xmlFile := Files.Old(xmlName);
IF xmlFile = NIL THEN RETURN NIL
ELSE
NEW(reader, xmlFile, 0);
NEW(xmlScanner, reader); NEW(xmlParser, xmlScanner);
xmlParser.elemReg := XMLGeneratorSchema.OpenGeneratorSchema(generatorSchemaName);
IF xmlParser.elemReg = NIL THEN xmlParser.elemReg := DefaultXMLElementRegistry END;
RETURN xmlParser.Parse()
END
END LoadComponents;
PROCEDURE Load*(xmlName, cssName, generatorSchemaName: ARRAY OF CHAR): XML.Document;
VAR xml: XML.Document; css: CSS2.StyleSheet;
BEGIN
xml := LoadComponents(xmlName, generatorSchemaName); css := LoadCSS(cssName);
IF xml = NIL THEN RETURN NIL
ELSE XMLStyle.AttachStyle(xml.GetRoot(), css); RETURN xml
END
END Load;
PROCEDURE SetDefaultXMLElementRegistry*(generatorSchemaName: ARRAY OF CHAR);
BEGIN
DefaultXMLElementRegistry := XMLGeneratorSchema.OpenGeneratorSchema(generatorSchemaName)
END SetDefaultXMLElementRegistry;
PROCEDURE SetDefaultStyleSheet*(cssName: ARRAY OF CHAR);
BEGIN
DefaultStyleSheet := LoadCSS(cssName)
END SetDefaultStyleSheet;
BEGIN
DefaultXMLElementRegistry := XMLGeneratorSchema.OpenGeneratorSchema(DefaultXMLGeneratorFile);
DefaultStyleSheet := LoadCSS(DefaultCSS2File)
END XMLLoader.