You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2009/04/06 17:53:09 UTC

svn commit: r762403 - in /xalan/c/trunk/src/xalanc: NLS/en_US/XalanMsg_en_US.xlf XSLT/FunctionDocument.cpp

Author: dbertoni
Date: Mon Apr  6 15:53:08 2009
New Revision: 762403

URL: http://svn.apache.org/viewvc?rev=762403&view=rev
Log:
Fixes for XALANC-690.

Modified:
    xalan/c/trunk/src/xalanc/NLS/en_US/XalanMsg_en_US.xlf
    xalan/c/trunk/src/xalanc/XSLT/FunctionDocument.cpp

Modified: xalan/c/trunk/src/xalanc/NLS/en_US/XalanMsg_en_US.xlf
URL: http://svn.apache.org/viewvc/xalan/c/trunk/src/xalanc/NLS/en_US/XalanMsg_en_US.xlf?rev=762403&r1=762402&r2=762403&view=diff
==============================================================================
--- xalan/c/trunk/src/xalanc/NLS/en_US/XalanMsg_en_US.xlf (original)
+++ xalan/c/trunk/src/xalanc/NLS/en_US/XalanMsg_en_US.xlf Mon Apr  6 15:53:08 2009
@@ -720,8 +720,8 @@
 </trans-unit>
 
 <trans-unit id="CantFindFragment_1Param">
-		<source>Could not find the fragment '{0}'</source>
-		<target>Could not find the fragment '{0}'</target>
+		<source>The fragment '{0}' was not found.</source>
+		<target>The fragment '{0}' was not found.</target>
 </trans-unit>
 
 <trans-unit id="NodePointedByFragment_1Param">
@@ -1038,6 +1038,11 @@
         <target>The processor cannot use the HTML output method because the current extension output method does not support it.</target>
 </trans-unit>
 
+<trans-unit id="CannotFindFragment_2Param">
+        <source>The fragment '{0}' was not found in the document '{1}'.</source>
+        <target>The fragment '{0}' was not found in the document '{1}'.</target>
+</trans-unit>
+
     </body>
   </file>
 </xliff>

Modified: xalan/c/trunk/src/xalanc/XSLT/FunctionDocument.cpp
URL: http://svn.apache.org/viewvc/xalan/c/trunk/src/xalanc/XSLT/FunctionDocument.cpp?rev=762403&r1=762402&r2=762403&view=diff
==============================================================================
--- xalan/c/trunk/src/xalanc/XSLT/FunctionDocument.cpp (original)
+++ xalan/c/trunk/src/xalanc/XSLT/FunctionDocument.cpp Mon Apr  6 15:53:08 2009
@@ -86,7 +86,35 @@
         base);
 
     executionContext.problem(
-        XPathExecutionContext::eXPath,
+        XPathExecutionContext::eXSLTProcessor,
+        XPathExecutionContext::eWarning,
+        theMessage,
+        locator,
+        sourceNode);
+}
+
+
+
+inline void
+doWarnFragID(
+            XPathExecutionContext&  executionContext,
+            const XalanDOMString&   uri,
+            const XalanDOMString&   fragID,
+            const XalanNode*        sourceNode,
+            const Locator*          locator)
+{
+    const GetCachedString   theGuard(executionContext);
+
+    XalanDOMString&     theMessage = theGuard.get();
+
+    XalanMessageLoader::getMessage(
+        theMessage,
+        XalanMessages::CannotFindFragment_2Param,
+        uri,
+        fragID);
+
+    executionContext.problem(
+        XPathExecutionContext::eXSLTProcessor,
         XPathExecutionContext::eWarning,
         theMessage,
         locator,
@@ -207,13 +235,32 @@
             const XalanNode*                    sourceNode,
             const Locator*                      locator)
 {
-    XalanDocument*  newDoc = executionContext.getSourceDocument(uri);
+    const XalanDOMString::size_type fragIndex =
+        indexOf(uri, XalanUnicode::charNumberSign);
+
+    const GetCachedString   theGuard1(executionContext);
+    const GetCachedString   theGuard2(executionContext);
+
+    XalanDOMString&     newURI = theGuard1.get();
+    XalanDOMString&     fragID = theGuard2.get();
+
+    if (fragIndex == uri.length())
+    {
+        newURI = uri;
+    }
+    else
+    {
+        substring(uri, newURI, 0, fragIndex);
+        substring(uri, fragID, fragIndex + 1);
+    }
+
+    XalanDocument*  newDoc = executionContext.getSourceDocument(newURI);
 
     if (newDoc == 0)
     {
-        if (uri.length() != 0)
+        if (newURI.length() != 0)
         {
-            newDoc = parseDoc(executionContext, uri, base, sourceNode, locator);
+            newDoc = parseDoc(executionContext, newURI, base, sourceNode, locator);
         }
         else
         {
@@ -231,7 +278,23 @@
 
     if (newDoc != 0)
     {
-        mnl->addNodeInDocOrder(newDoc, executionContext);
+        if (fragID.length() == 0)
+        {
+            mnl->addNodeInDocOrder(newDoc, executionContext);
+        }
+        else
+        {
+            XalanNode* const    theNode = newDoc->getElementById(fragID);
+
+            if (theNode != 0)
+            {
+                mnl->addNodeInDocOrder(theNode, executionContext);
+            }
+            else
+            {
+                doWarnFragID(executionContext, fragID, newURI, sourceNode, locator);
+            }
+        }
     }
 }
 
@@ -331,7 +394,7 @@
         const GetCachedString   theGuard1(executionContext);
 
         executionContext.problem(
-            XPathExecutionContext::eXPath,
+            XPathExecutionContext::eXSLTProcessor,
             XPathExecutionContext::eError,
             XalanMessageLoader::getMessage(
                 theGuard1.get(),
@@ -349,7 +412,7 @@
             const GetCachedString   theGuard1(executionContext);
 
             executionContext.problem(
-                XPathExecutionContext::eXPath,
+                XPathExecutionContext::eXSLTProcessor,
                 XPathExecutionContext::eError,
                 XalanMessageLoader::getMessage(
                     theGuard1.get(),
@@ -481,7 +544,7 @@
                     const GetCachedString   theGuard(executionContext);
 
                     executionContext.problem(
-                        XPathExecutionContext::eXPath,
+                        XPathExecutionContext::eXSLTProcessor,
                         XPathExecutionContext::eWarning,
                         XalanMessageLoader::getMessage(
                             theGuard.get(),



---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org