[ https://issues.apache.org/jira/browse/XALANC-275?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Steven J. Hathaway resolved XALANC-275. --------------------------------------- Resolution: Won't Fix Obsolete Issue > xalan-c: proposed patch to separate out getting stylesheet uri in processing > instruction > ---------------------------------------------------------------------------------------- > > Key: XALANC-275 > URL: https://issues.apache.org/jira/browse/XALANC-275 > Project: XalanC > Issue Type: Bug > Components: XalanC > Affects Versions: 1.5 > Environment: Operating System: All > Platform: All > Reporter: David Yan > > This patch is to separate out the code that gets the stylesheet uri in > the processing instruction in the parsed source xml. This may seem > trivial but is very useful if you want to see if you can use a > precompiled stylesheet identified by the uri. For example: > typedef map<XalanDOMString, const XalanCompiledStylesheet *> > CompiledStylesheetMap; > static CompiledStylesheetMap compiledStylesheets; > int transform(const char *url, const XalanParsedSource *parsedXML) > { > XalanDOMString stylesheetURI; > // get the stylesheet uri in PI > if (XSLTEngineImpl::getStylesheetURIInPI(parsedXML->getDocument(), > stylesheetURI) == true) { > stylesheetURI = URISupport::getURLStringFromString(stylesheetURI, > XalanDOMString(url)); > const XalanCompiledStylesheet *theCompiledStylesheet = NULL; > CompiledStylesheetMap::iterator i = > compiledStylesheets.find(stylesheetURI); > if (i == compiledStylesheets.end()) { > if (theTransformer->compileStylesheet(stylesheetURI, > theCompiledStylesheet) == 0) { > compiledStylesheets.insert(pair<XalanDOMString, const XalanCompile > dStylesheet *>(stylesheetURI, theCompiledStylesheet)); > } else { > return -1; > } > } else { > theCompiledStylesheet = i->second; > } > theTransformer->transform(*parsedXML, theCompiledStylesheet, r, > (XalanOutputHandlerType)xalanOutputHandler); > } > return 0; > } > ============= CUT HERE =========================== > --- xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp Wed Dec 11 17:53:01 2002 > +++ xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp Wed Jun 18 16:20:12 2003 > @@ -1614,6 +1614,8 @@ > { > m_topLevelParams.clear(); > } > + static bool getStylesheetURIInPI(const XalanNode *sourceTree, > + XalanDOMString &theStylesheetURI); > > private: > > --- xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp Wed Feb 12 14:41:26 2003 > +++ xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp Wed Jun 18 16:20:56 2003 > @@ -287,86 +287,20 @@ > > if(0 != sourceTree && m_stylesheetRoot == 0) > { > - // Didn't get a stylesheet from the input source, so look for a > - // stylesheet processing instruction... > - > - // The PI must be a child of the document... > - const XalanNode* child = sourceTree->getFirstChild(); > - > - XalanDOMString theCurrentToken; > - XalanDOMString theStylesheetURI; > - > - bool isOK = false; > - > - while(child != 0 && isOK == false && theStylesheetURI.empty() > == true) > - { > - if(XalanNode::PROCESSING_INSTRUCTION_NODE == > child->getNodeType()) > - { > - const XalanDOMString& nodeName = > child->getNodeName(); > - > - if(equals(nodeName, s_stylesheetNodeName)) > - { > - StringTokenizer > tokenizer(child->getNodeValue(), s_piTokenizerString); > - > - while(tokenizer.hasMoreTokens() == true > && (isOK == false || > theStylesheetURI.empty() == true)) > - { > - > tokenizer.nextToken(theCurrentToken); > - > - if(equals(theCurrentToken, > s_typeString)) > - { > - > tokenizer.nextToken(theCurrentToken); > - > - > - const > XalanDOMString::size_type theLength = > - > theCurrentToken.length(); > - > - if (theLength > 2) > - { > - > theCurrentToken.erase(theLength - 1, 1); > - > theCurrentToken.erase(0, 1); > - > - > if(equals(theCurrentToken, s_typeValueString1) || > - > equals(theCurrentToken, s_typeValueString2) || > - > equals(theCurrentToken, s_typeValueString3) || > - > equals(theCurrentToken, s_typeValueString4)) > - { > - isOK = > true; > - } > - } > - } > - else if(equals(theCurrentToken, > s_hrefString)) > - { > - > tokenizer.nextToken(theCurrentToken); > - > - const > XalanDOMString::size_type theLength = > - > theCurrentToken.length(); > - > - if (theLength > 2) > - { > - // Trim of the > starting and trailing delimiters... > - > theStylesheetURI.assign(theCurrentToken, 1, theLength - 2); > - } > - } > - } > - } > - } > - > - child = child->getNextSibling(); > - } > - > - if (isOK == true && theStylesheetURI.empty() == false) > - { > - const XalanDOMChar* const pxch = > inputSource.getSystemId(); > - > - const XalanDOMString sysid(pxch == 0 ? > &s_dummyString : pxch); > - > - getStylesheetFromPIURL( > - theStylesheetURI, > - *sourceTree, > - sysid, > - true, > - constructionContext); > - } > + // Didn't get a stylesheet from the input source, so look for a > + // stylesheet processing instruction... > + XalanDOMString theStylesheetURI; > + if (getStylesheetURIInPI(sourceTree, theStylesheetURI) == true && > + theStylesheetURI.empty() == false) { > + const XalanDOMChar* const pxch = inputSource.getSystemId(); > + const XalanDOMString sysid(pxch == 0 ? &s_dummyString : pxch); > + getStylesheetFromPIURL( > + theStylesheetURI, > + *sourceTree, > + sysid, > + true, > + constructionContext); > + } > } > > if(0 == m_stylesheetRoot) > @@ -3432,5 +3366,73 @@ > } > > > +bool XSLTEngineImpl::getStylesheetURIInPI(const XalanNode *sourceTree, > + XalanDOMString &theStylesheetURI) > +{ > + // The PI must be a child of the document... > + const XalanNode* child = sourceTree->getFirstChild(); > + > + XalanDOMString theCurrentToken; > + > + bool isOK = false; > + > + while(child != 0 && isOK == false && theStylesheetURI.empty() == true) > + { > + if(XalanNode::PROCESSING_INSTRUCTION_NODE == child->getNodeType()) > + { > + const XalanDOMString& nodeName = child->getNodeName(); > + > + if(equals(nodeName, s_stylesheetNodeName)) > + { > + StringTokenizer tokenizer(child->getNodeValue(), > s_piTokenizerString); > + > + while(tokenizer.hasMoreTokens() == true && (isOK == false || > theStylesheetURI.empty() == true)) > + { > + tokenizer.nextToken(theCurrentToken); > + > + if(equals(theCurrentToken, s_typeString)) > + { > + tokenizer.nextToken(theCurrentToken); > + > + > + const XalanDOMString::size_type theLength = > + theCurrentToken.length(); > + > + if (theLength > 2) > + { > + theCurrentToken.erase(theLength - 1, 1); > + theCurrentToken.erase(0, 1); > + > + if(equals(theCurrentToken, s_typeValueString1) || > + equals(theCurrentToken, s_typeValueString2) || > + equals(theCurrentToken, s_typeValueString3) || > + equals(theCurrentToken, s_typeValueString4)) > + { > + isOK = true; > + } > + } > + } > + else if(equals(theCurrentToken, s_hrefString)) > + { > + tokenizer.nextToken(theCurrentToken); > + > + const XalanDOMString::size_type theLength = > + theCurrentToken.length(); > + > + if (theLength > 2) > + { > + // Trim of the starting and trailing delimiters... > + theStylesheetURI.assign(theCurrentToken, 1, theLength > - 2); > + } > + } > + } > + } > + } > + > + child = child->getNextSibling(); > + } > + > + return isOK; > +} > > XALAN_CPP_NAMESPACE_END -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: xalan-dev-unsubscr...@xml.apache.org For additional commands, e-mail: xalan-dev-h...@xml.apache.org