Landing XSLT branch. Tracking bug is 155578, fixes bugs 46633, 54659, 73492, 70369, 85408, 90157, 130161, 109918, 150916 and 170097

* New scriptable interfaces to XSLT
* Make HTML-output create real html
* cleanup the XSLTProcessor class

Patch by sicking, pike and peterv

r=sicking/pike, sr=peterv, a=asa


git-svn-id: svn://10.0.0.236/trunk@132337 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
sicking%bigfoot.com
2002-10-21 21:35:23 +00:00
parent dbb8ba3770
commit d8d0cac658
46 changed files with 3708 additions and 2051 deletions

View File

@@ -118,6 +118,7 @@
#include "nsIObserver.h"
#include "nsIDocumentTransformer.h"
#include "nsISyncLoadDOMService.h"
#include "nsIXSLTProcessor.h"
// XXX misnamed header file, but oh well
#include "nsHTMLTokens.h"
@@ -442,18 +443,17 @@ nsXMLContentSink::MaybePrettyPrint()
NS_ENSURE_SUCCESS(rv, rv);
// Transform the document
nsCOMPtr<nsIDocumentTransformer> transformer =
nsCOMPtr<nsIXSLTProcessor> transformer =
do_CreateInstance("@mozilla.org/document-transformer;1?type=text/xsl", &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIDOMDocument> resultDocument;
nsAutoString emptyStr;
rv = NS_NewDOMDocument(getter_AddRefs(resultDocument), emptyStr, emptyStr,
nsnull, mDocumentURL);
NS_ENSURE_SUCCESS(rv, rv);
rv = transformer->ImportStylesheet(xslDocument);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIDOMDocumentFragment> resultFragment;
nsCOMPtr<nsIDOMDocument> sourceDocument = do_QueryInterface(mDocument);
rv = transformer->TransformDocument(sourceDocument, xslDocument,
resultDocument, nsnull);
rv = transformer->TransformToFragment(sourceDocument, xslDocument,
getter_AddRefs(resultFragment));
NS_ENSURE_SUCCESS(rv, rv);
// Add the binding
@@ -478,7 +478,7 @@ nsXMLContentSink::MaybePrettyPrint()
NS_ASSERTION(binding, "Prettyprint binding doesn't implement nsIObserver");
NS_ENSURE_TRUE(binding, NS_ERROR_UNEXPECTED);
return binding->Observe(resultDocument, "prettyprint-dom-created", NS_LITERAL_STRING("").get());
return binding->Observe(resultFragment, "prettyprint-dom-created", NS_LITERAL_STRING("").get());
}
@@ -558,6 +558,20 @@ nsXMLContentSink::DidBuildModel(PRInt32 aQualityLevel)
return NS_OK;
}
NS_IMETHODIMP
nsXMLContentSink::OnDocumentCreated(nsIDOMDocument* aResultDocument)
{
NS_ENSURE_ARG(aResultDocument);
nsCOMPtr<nsIDocShell> docShell(do_QueryInterface(mWebShell));
nsCOMPtr<nsIContentViewer> contentViewer;
docShell->GetContentViewer(getter_AddRefs(contentViewer));
if (contentViewer) {
contentViewer->SetDOMDocument(aResultDocument);
}
return NS_OK;
}
NS_IMETHODIMP
nsXMLContentSink::OnTransformDone(nsresult aResult,
nsIDOMDocument* aResultDocument)
@@ -636,32 +650,11 @@ nsXMLContentSink::OnTransformDone(nsresult aResult,
nsresult
nsXMLContentSink::SetupTransformMediator()
{
nsresult rv = NS_OK;
nsCOMPtr<nsIDOMDocument> currentDOMDoc(do_QueryInterface(mDocument));
mXSLTransformMediator->SetSourceContentModel(currentDOMDoc);
// Create the result document
nsCOMPtr<nsIDOMDocument> resultDOMDoc;
nsCOMPtr<nsIURI> url;
mDocument->GetBaseURL(*getter_AddRefs(url));
nsAutoString emptyStr;
rv = NS_NewDOMDocument(getter_AddRefs(resultDOMDoc), emptyStr, emptyStr, nsnull, url);
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIDocShell> docShell(do_QueryInterface(mWebShell));
nsCOMPtr<nsIContentViewer> contentViewer;
docShell->GetContentViewer(getter_AddRefs(contentViewer));
if (contentViewer) {
contentViewer->SetDOMDocument(resultDOMDoc);
}
mXSLTransformMediator->SetResultDocument(resultDOMDoc);
mXSLTransformMediator->SetTransformObserver(this);
return rv;
return NS_OK;
}
NS_IMETHODIMP
@@ -840,7 +833,9 @@ nsXMLContentSink::LoadXSLStyleSheet(nsIURI* aUrl)
// httpChannel->SetReferrer(documentURI);
}
// XXX need to set a load group on this channel!
nsCOMPtr<nsILoadGroup> loadGroup;
mDocument->GetDocumentLoadGroup(getter_AddRefs(loadGroup));
channel->SetLoadGroup(loadGroup);
return channel->AsyncOpen(sl, nsnull);
}