diff --git a/extensions/transformiix/source/xslt/Names.cpp b/extensions/transformiix/source/xslt/Names.cpp index eab4c8fad831..67f67e72895a 100644 --- a/extensions/transformiix/source/xslt/Names.cpp +++ b/extensions/transformiix/source/xslt/Names.cpp @@ -28,14 +28,14 @@ * W3C XPath 1.0 Recommendation * -- Added lang attr declaration * - * $Id: Names.cpp,v 1.5 2000/05/23 08:13:03 kvisco%ziplink.net Exp $ + * $Id: Names.cpp,v 1.6 2000/05/24 03:45:40 kvisco%ziplink.net Exp $ */ /** * XSL names used throughout the XSLProcessor. * Probably should be wrapped in a Namespace * @author Keith Visco - * @version $Revision: 1.5 $ $Date: 2000/05/23 08:13:03 $ + * @version $Revision: 1.6 $ $Date: 2000/05/24 03:45:40 $ **/ #include "Names.h" @@ -149,11 +149,12 @@ const String NODE_FNAME = "node"; const String IDENTITY_OP = "."; const String PARENT_OP = ".."; -//-- XSLT extension functions +//-- XSLT additional functions const String CURRENT_FN = "current"; const String FORMAT_NUMBER_FN = "format-number"; const String GENERATE_ID_FN = "generate-id"; const String SYSTEM_PROPERTY_FN = "system-property"; +const String DOCUMENT_FN = "document"; //-- MISC const String WILD_CARD = "*"; diff --git a/extensions/transformiix/source/xslt/Names.h b/extensions/transformiix/source/xslt/Names.h index 024a2c4bcbf0..a66486f3f187 100644 --- a/extensions/transformiix/source/xslt/Names.h +++ b/extensions/transformiix/source/xslt/Names.h @@ -27,7 +27,7 @@ * W3C XPath 1.0 Recommendation * -- Added lang attr declaration - * $Id: Names.h,v 1.5 2000/05/23 08:13:03 kvisco%ziplink.net Exp $ + * $Id: Names.h,v 1.6 2000/05/24 03:45:41 kvisco%ziplink.net Exp $ */ #include "TxString.h" @@ -144,11 +144,13 @@ extern const String NODE_FNAME; extern const String IDENTITY_OP; extern const String PARENT_OP; -//-- XSLT extension functions +//-- XSLT additional functions extern const String CURRENT_FN; extern const String FORMAT_NUMBER_FN; extern const String GENERATE_ID_FN; extern const String SYSTEM_PROPERTY_FN; +extern const String DOCUMENT_FN; + //-- MISC extern const String WILD_CARD; diff --git a/extensions/transformiix/source/xslt/ProcessorState.cpp b/extensions/transformiix/source/xslt/ProcessorState.cpp index 2a9271088eb9..ec35923cf1a2 100644 --- a/extensions/transformiix/source/xslt/ProcessorState.cpp +++ b/extensions/transformiix/source/xslt/ProcessorState.cpp @@ -15,20 +15,23 @@ * Portions created by MITRE are Copyright (C) 1999 The MITRE Corporation. * * Portions created by Keith Visco as a Non MITRE employee, - * (C) 1999 Keith Visco. All Rights Reserved. + * (C) 1999-2000 Keith Visco. All Rights Reserved. * * Contributor(s): * Keith Visco, kvisco@ziplink.net * -- original author. * - * $Id: ProcessorState.cpp,v 1.2 2000/04/19 10:41:13 kvisco%ziplink.net Exp $ + * Olivier Gerardin, ogerardin@vo.lu + * -- added code in ::resolveFunctionCall to support the + * document() function. + * + * $Id: ProcessorState.cpp,v 1.3 2000/05/24 03:45:41 kvisco%ziplink.net Exp $ */ /** * Implementation of ProcessorState - * This code was ported from XSL:P - * @author Keith Visco - * @version $Revision: 1.2 $ $Date: 2000/04/19 10:41:13 $ + * Much of this code was ported from XSL:P + * @version $Revision: 1.3 $ $Date: 2000/05/24 03:45:41 $ **/ #include "ProcessorState.h" @@ -587,6 +590,9 @@ FunctionCall* ProcessorState::resolveFunctionCall(const String& name) { if (GENERATE_ID_FN.isEqual(name)) { return new GenerateIdFunctionCall(&domHelper); } + else if (DOCUMENT_FN.isEqual(name)) { + return new DocumentFunctionCall(xslDocument); + } String err("invalid function call: "); err.append(name); @@ -597,7 +603,7 @@ FunctionCall* ProcessorState::resolveFunctionCall(const String& name) { /** - * Sorts the given NodeSet by DocumentOrder. + * Sorts the given NodeSet by DocumentOrder. * @param nodes the NodeSet to sort *
* Note: I will be moving this functionality elsewhere soon @@ -625,7 +631,7 @@ void ProcessorState::sortByDocumentOrder(NodeSet* nodes) { } nodes->clear(); - for (i = 0; i < sorted.size(); i++) + for (i = 0; i < sorted.size(); i++) nodes->add(sorted.get(i)); sorted.clear(); diff --git a/extensions/transformiix/source/xslt/functions/Makefile b/extensions/transformiix/source/xslt/functions/Makefile index 2805f288d556..e496a78da0fc 100644 --- a/extensions/transformiix/source/xslt/functions/Makefile +++ b/extensions/transformiix/source/xslt/functions/Makefile @@ -2,29 +2,39 @@ ROOT = ../.. BASE = $(ROOT)/base +NET = $(ROOT)/net XPATH = $(ROOT)/xpath XML = $(ROOT)/xml XML_UTIL = $(XML)/util DOM = $(XML)/dom XSLT = $(ROOT)/xslt +XMLPARSER_PATH = $(XML)/parser +EXPAT_PARSER_PATH = $(XMLPARSER_PATH)/xmlparse ALL_OBJS = \ - GenerateIdFunctionCall.o + GenerateIdFunctionCall.o \ + DocumentFunctionCall.o INCLUDE_PATH = -I. \ -I$(BASE) \ + -I$(NET) \ -I$(XPATH) \ -I$(XML) \ + -I$(XML)/parser \ -I$(XML_UTIL) \ -I$(DOM) \ -I$(XSLT) \ - -I$(XSLT)/util + -I$(XSLT)/util \ + -I$(EXPAT_PARSER_PATH) target: $(ALL_OBJS) GenerateIdFunctionCall.o: XSLTFunctions.h GenerateIdFunctionCall.cpp $(CC) $(INCLUDE_PATH) -c GenerateIdFunctionCall.cpp +DocumentFunctionCall.o: XSLTFunctions.h DocumentFunctionCall.cpp + $(CC) $(INCLUDE_PATH) -c DocumentFunctionCall.cpp + diff --git a/extensions/transformiix/source/xslt/functions/Makefile.in b/extensions/transformiix/source/xslt/functions/Makefile.in index 118088ac2ff7..26dd68e87850 100644 --- a/extensions/transformiix/source/xslt/functions/Makefile.in +++ b/extensions/transformiix/source/xslt/functions/Makefile.in @@ -1,23 +1,23 @@ -# +# # The contents of this file are subject to the Mozilla Public # License Version 1.1 (the "License"); you may not use this file # except in compliance with the License. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ -# +# # Software distributed under the License is distributed on an "AS # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or # implied. See the License for the specific language governing # rights and limitations under the License. -# +# # The Original Code is Transformiix XSLT Processor. -# +# # The Initial Developer of the Original Code is Axel Hecht. # Portions created by Axel Hecht are Copyright (C) Axel Hecht. # All Rights Reserved. -# +# # Contributor(s): # Axel Hecht -# +# DEPTH = ../../../../.. topsrcdir = @top_srcdir@ @@ -26,7 +26,8 @@ VPATH = @srcdir@ include $(DEPTH)/config/autoconf.mk -CPPSRCS = GenerateIdFunctionCall.cpp +CPPSRCS = GenerateIdFunctionCall.cpp \ + DocumentFunctionCall.cpp include $(topsrcdir)/config/rules.mk @@ -34,4 +35,4 @@ INCLUDES += -I$(srcdir)/../../base -I$(srcdir)/../../xpath \ -I$(srcdir)/../../xml -I$(srcdir)/../../xml/util -I$(srcdir)/../../xml/dom \ -I$(srcdir)/../../xslt -install:: $(OBJS) \ No newline at end of file +install:: $(OBJS) diff --git a/extensions/transformiix/source/xslt/functions/XSLTFunctions.h b/extensions/transformiix/source/xslt/functions/XSLTFunctions.h index 97a44253a29c..a05c7e2cf19e 100644 --- a/extensions/transformiix/source/xslt/functions/XSLTFunctions.h +++ b/extensions/transformiix/source/xslt/functions/XSLTFunctions.h @@ -20,7 +20,10 @@ * Keith Visco, kvisco@ziplink.net * -- original author. * - * $Id: XSLTFunctions.h,v 1.1 2000/04/19 10:40:06 kvisco%ziplink.net Exp $ + * Olivier Gerardin, + * -- added document() function definition + * + * $Id: XSLTFunctions.h,v 1.2 2000/05/24 03:46:31 kvisco%ziplink.net Exp $ */ #include "dom.h" @@ -33,6 +36,9 @@ #ifndef TRANSFRMX_XSLT_FUNCTIONS_H #define TRANSFRMX_XSLT_FUNCTIONS_H +/** + * The definition for the XSLT generate-id() function +**/ class GenerateIdFunctionCall : public FunctionCall { public: @@ -56,4 +62,31 @@ private: DOMHelper* domHelper; }; - #endif \ No newline at end of file +/** + * The definition for the XSLT document() function +**/ +class DocumentFunctionCall : public FunctionCall { + +public: + + /** + * Creates a new document() function call + **/ + DocumentFunctionCall(Document* xslDocument); + + /** + * Evaluates this Expr based on the given context node and processor state + * @param context the context node for evaluation of this Expr + * @param ps the ContextState containing the stack information needed + * for evaluation + * @return the result of the evaluation + * @see FunctionCall.h + **/ + virtual ExprResult* evaluate(Node* context, ContextState* cs); + +private: + void retrieveDocument(String& uri,String& baseUri, NodeSet &resultNodeSet, ContextState* cs); + Document* xslDocument; +}; + +#endif