Added XML display support. Creation of XML document for text/xml and application/xml

This commit is contained in:
vidur%netscape.com 1998-11-11 22:07:03 +00:00
Родитель 8723f8326b
Коммит 2ecd262ffe
3 изменённых файлов: 208 добавлений и 12 удалений

Просмотреть файл

@ -79,6 +79,7 @@ NS_DEFINE_IID(kINetServiceIID, NS_INETSERVICE_IID);
/* Define CIDs... */ /* Define CIDs... */
NS_DEFINE_IID(kCHTMLDocumentCID, NS_HTMLDOCUMENT_CID); NS_DEFINE_IID(kCHTMLDocumentCID, NS_HTMLDOCUMENT_CID);
NS_DEFINE_IID(kCXMLDocumentCID, NS_XMLDOCUMENT_CID);
NS_DEFINE_IID(kCImageDocumentCID, NS_IMAGEDOCUMENT_CID); NS_DEFINE_IID(kCImageDocumentCID, NS_IMAGEDOCUMENT_CID);
NS_DEFINE_IID(kNetServiceCID, NS_NETSERVICE_CID); NS_DEFINE_IID(kNetServiceCID, NS_NETSERVICE_CID);
@ -165,6 +166,18 @@ public:
nsresult InitUAStyleSheet(); nsresult InitUAStyleSheet();
nsresult CreateDefaultDocument(nsIURL* aURL,
const char* aCommand,
nsIContentViewerContainer* aContainer,
nsIStreamListener** aDocListener,
nsIContentViewer** aDocViewer);
nsresult CreateXMLDocument(nsIURL* aURL,
const char* aCommand,
nsIContentViewerContainer* aContainer,
nsIStreamListener** aDocListener,
nsIContentViewer** aDocViewer);
nsresult CreateImageDocument(nsIURL* aURL, nsresult CreateImageDocument(nsIURL* aURL,
const char* aCommand, const char* aCommand,
nsIContentViewerContainer* aContainer, nsIContentViewerContainer* aContainer,
@ -191,7 +204,8 @@ nsDocFactoryImpl::nsDocFactoryImpl()
*/ */
NS_IMPL_ISUPPORTS(nsDocFactoryImpl,kIDocumentLoaderFactoryIID); NS_IMPL_ISUPPORTS(nsDocFactoryImpl,kIDocumentLoaderFactoryIID);
static char* gValidTypes[] = {"text/html","text/xml","application/rtf",0}; static char* gValidTypes[] = {"text/html","application/rtf",0};
static char* gXMLTypes[] = {"text/xml", "application/xml", 0};
static char* gImageTypes[] = {"image/gif", "image/jpeg", 0 }; static char* gImageTypes[] = {"image/gif", "image/jpeg", 0 };
@ -224,13 +238,25 @@ nsDocFactoryImpl::CreateInstance(nsIURL* aURL,
nsIContentViewer** aDocViewer) nsIContentViewer** aDocViewer)
{ {
nsresult rv = NS_ERROR_FAILURE; nsresult rv = NS_ERROR_FAILURE;
nsIDocument* doc = nsnull;
nsIDocumentViewer* docv = nsnull;
int typeIndex=0; int typeIndex=0;
while(gValidTypes[typeIndex]) { while(gValidTypes[typeIndex]) {
if (0== PL_strcmp(gValidTypes[typeIndex++], aContentType)) { if (0== PL_strcmp(gValidTypes[typeIndex++], aContentType)) {
goto nextstep; return CreateDefaultDocument(aURL, aCommand,
aContainer,
aDocListener,
aDocViewer);
}
}
// Try XML
typeIndex = 0;
while(gValidTypes[typeIndex]) {
if (0== PL_strcmp(gXMLTypes[typeIndex++], aContentType)) {
return CreateXMLDocument(aURL, aCommand,
aContainer,
aDocListener,
aDocViewer);
} }
} }
@ -255,9 +281,21 @@ nsDocFactoryImpl::CreateInstance(nsIURL* aURL,
aDocViewer); aDocViewer);
} }
} }
goto done;
nextstep: return rv;
}
nsresult
nsDocFactoryImpl::CreateDefaultDocument(nsIURL* aURL,
const char* aCommand,
nsIContentViewerContainer* aContainer,
nsIStreamListener** aDocListener,
nsIContentViewer** aDocViewer)
{
nsresult rv = NS_ERROR_FAILURE;
nsIDocument* doc = nsnull;
nsIDocumentViewer* docv = nsnull;
// Load the UA style sheet if we haven't already done that // Load the UA style sheet if we haven't already done that
if (nsnull == gUAStyleSheet) { if (nsnull == gUAStyleSheet) {
InitUAStyleSheet(); InitUAStyleSheet();
@ -306,6 +344,65 @@ done:
return rv; return rv;
} }
nsresult
nsDocFactoryImpl::CreateXMLDocument(nsIURL* aURL,
const char* aCommand,
nsIContentViewerContainer* aContainer,
nsIStreamListener** aDocListener,
nsIContentViewer** aDocViewer)
{
nsresult rv = NS_ERROR_FAILURE;
nsIDocument* doc = nsnull;
nsIDocumentViewer* docv = nsnull;
// Load the UA style sheet if we haven't already done that
if (nsnull == gUAStyleSheet) {
InitUAStyleSheet();
}
/*
* Create the image document...
*/
rv = nsRepository::CreateInstance(kCXMLDocumentCID,
nsnull,
kIDocumentIID,
(void **)&doc);
if (NS_OK != rv) {
goto done;
}
/*
* Create the image content viewer...
*/
rv = NS_NewDocumentViewer(docv);
if (NS_OK != rv) {
goto done;
}
docv->SetUAStyleSheet(gUAStyleSheet);
/*
* Initialize the document to begin loading the data...
*
* An nsIStreamListener connected to the parser is returned in
* aDocListener.
*/
rv = doc->StartDocumentLoad(aURL, aContainer, aDocListener, aCommand);
if (NS_OK != rv) {
NS_IF_RELEASE(docv);
goto done;
}
/*
* Bind the document to the Content Viewer...
*/
rv = docv->BindToDocument(doc, aCommand);
*aDocViewer = docv;
done:
NS_IF_RELEASE(doc);
return rv;
}
nsresult nsresult
nsDocFactoryImpl::CreateImageDocument(nsIURL* aURL, nsDocFactoryImpl::CreateImageDocument(nsIURL* aURL,
const char* aCommand, const char* aCommand,

Просмотреть файл

@ -79,6 +79,7 @@ NS_DEFINE_IID(kINetServiceIID, NS_INETSERVICE_IID);
/* Define CIDs... */ /* Define CIDs... */
NS_DEFINE_IID(kCHTMLDocumentCID, NS_HTMLDOCUMENT_CID); NS_DEFINE_IID(kCHTMLDocumentCID, NS_HTMLDOCUMENT_CID);
NS_DEFINE_IID(kCXMLDocumentCID, NS_XMLDOCUMENT_CID);
NS_DEFINE_IID(kCImageDocumentCID, NS_IMAGEDOCUMENT_CID); NS_DEFINE_IID(kCImageDocumentCID, NS_IMAGEDOCUMENT_CID);
NS_DEFINE_IID(kNetServiceCID, NS_NETSERVICE_CID); NS_DEFINE_IID(kNetServiceCID, NS_NETSERVICE_CID);
@ -165,6 +166,18 @@ public:
nsresult InitUAStyleSheet(); nsresult InitUAStyleSheet();
nsresult CreateDefaultDocument(nsIURL* aURL,
const char* aCommand,
nsIContentViewerContainer* aContainer,
nsIStreamListener** aDocListener,
nsIContentViewer** aDocViewer);
nsresult CreateXMLDocument(nsIURL* aURL,
const char* aCommand,
nsIContentViewerContainer* aContainer,
nsIStreamListener** aDocListener,
nsIContentViewer** aDocViewer);
nsresult CreateImageDocument(nsIURL* aURL, nsresult CreateImageDocument(nsIURL* aURL,
const char* aCommand, const char* aCommand,
nsIContentViewerContainer* aContainer, nsIContentViewerContainer* aContainer,
@ -191,7 +204,8 @@ nsDocFactoryImpl::nsDocFactoryImpl()
*/ */
NS_IMPL_ISUPPORTS(nsDocFactoryImpl,kIDocumentLoaderFactoryIID); NS_IMPL_ISUPPORTS(nsDocFactoryImpl,kIDocumentLoaderFactoryIID);
static char* gValidTypes[] = {"text/html","text/xml","application/rtf",0}; static char* gValidTypes[] = {"text/html","application/rtf",0};
static char* gXMLTypes[] = {"text/xml", "application/xml", 0};
static char* gImageTypes[] = {"image/gif", "image/jpeg", 0 }; static char* gImageTypes[] = {"image/gif", "image/jpeg", 0 };
@ -224,13 +238,25 @@ nsDocFactoryImpl::CreateInstance(nsIURL* aURL,
nsIContentViewer** aDocViewer) nsIContentViewer** aDocViewer)
{ {
nsresult rv = NS_ERROR_FAILURE; nsresult rv = NS_ERROR_FAILURE;
nsIDocument* doc = nsnull;
nsIDocumentViewer* docv = nsnull;
int typeIndex=0; int typeIndex=0;
while(gValidTypes[typeIndex]) { while(gValidTypes[typeIndex]) {
if (0== PL_strcmp(gValidTypes[typeIndex++], aContentType)) { if (0== PL_strcmp(gValidTypes[typeIndex++], aContentType)) {
goto nextstep; return CreateDefaultDocument(aURL, aCommand,
aContainer,
aDocListener,
aDocViewer);
}
}
// Try XML
typeIndex = 0;
while(gValidTypes[typeIndex]) {
if (0== PL_strcmp(gXMLTypes[typeIndex++], aContentType)) {
return CreateXMLDocument(aURL, aCommand,
aContainer,
aDocListener,
aDocViewer);
} }
} }
@ -255,9 +281,21 @@ nsDocFactoryImpl::CreateInstance(nsIURL* aURL,
aDocViewer); aDocViewer);
} }
} }
goto done;
nextstep: return rv;
}
nsresult
nsDocFactoryImpl::CreateDefaultDocument(nsIURL* aURL,
const char* aCommand,
nsIContentViewerContainer* aContainer,
nsIStreamListener** aDocListener,
nsIContentViewer** aDocViewer)
{
nsresult rv = NS_ERROR_FAILURE;
nsIDocument* doc = nsnull;
nsIDocumentViewer* docv = nsnull;
// Load the UA style sheet if we haven't already done that // Load the UA style sheet if we haven't already done that
if (nsnull == gUAStyleSheet) { if (nsnull == gUAStyleSheet) {
InitUAStyleSheet(); InitUAStyleSheet();
@ -306,6 +344,65 @@ done:
return rv; return rv;
} }
nsresult
nsDocFactoryImpl::CreateXMLDocument(nsIURL* aURL,
const char* aCommand,
nsIContentViewerContainer* aContainer,
nsIStreamListener** aDocListener,
nsIContentViewer** aDocViewer)
{
nsresult rv = NS_ERROR_FAILURE;
nsIDocument* doc = nsnull;
nsIDocumentViewer* docv = nsnull;
// Load the UA style sheet if we haven't already done that
if (nsnull == gUAStyleSheet) {
InitUAStyleSheet();
}
/*
* Create the image document...
*/
rv = nsRepository::CreateInstance(kCXMLDocumentCID,
nsnull,
kIDocumentIID,
(void **)&doc);
if (NS_OK != rv) {
goto done;
}
/*
* Create the image content viewer...
*/
rv = NS_NewDocumentViewer(docv);
if (NS_OK != rv) {
goto done;
}
docv->SetUAStyleSheet(gUAStyleSheet);
/*
* Initialize the document to begin loading the data...
*
* An nsIStreamListener connected to the parser is returned in
* aDocListener.
*/
rv = doc->StartDocumentLoad(aURL, aContainer, aDocListener, aCommand);
if (NS_OK != rv) {
NS_IF_RELEASE(docv);
goto done;
}
/*
* Bind the document to the Content Viewer...
*/
rv = docv->BindToDocument(doc, aCommand);
*aDocViewer = docv;
done:
NS_IF_RELEASE(doc);
return rv;
}
nsresult nsresult
nsDocFactoryImpl::CreateImageDocument(nsIURL* aURL, nsDocFactoryImpl::CreateImageDocument(nsIURL* aURL,
const char* aCommand, const char* aCommand,

Просмотреть файл

@ -109,6 +109,7 @@ static NS_DEFINE_IID(kLookAndFeelCID, NS_LOOKANDFEEL_CID);
static NS_DEFINE_IID(kCDOMScriptObjectFactory, NS_DOM_SCRIPT_OBJECT_FACTORY_CID); static NS_DEFINE_IID(kCDOMScriptObjectFactory, NS_DOM_SCRIPT_OBJECT_FACTORY_CID);
static NS_DEFINE_IID(kCDOMNativeObjectRegistry, NS_DOM_NATIVE_OBJECT_REGISTRY_CID); static NS_DEFINE_IID(kCDOMNativeObjectRegistry, NS_DOM_NATIVE_OBJECT_REGISTRY_CID);
static NS_DEFINE_IID(kCHTMLDocument, NS_HTMLDOCUMENT_CID); static NS_DEFINE_IID(kCHTMLDocument, NS_HTMLDOCUMENT_CID);
static NS_DEFINE_IID(kCXMLDocument, NS_XMLDOCUMENT_CID);
static NS_DEFINE_IID(kCImageDocument, NS_IMAGEDOCUMENT_CID); static NS_DEFINE_IID(kCImageDocument, NS_IMAGEDOCUMENT_CID);
static NS_DEFINE_IID(kCHTMLImageElementFactory, NS_HTMLIMAGEELEMENTFACTORY_CID); static NS_DEFINE_IID(kCHTMLImageElementFactory, NS_HTMLIMAGEELEMENTFACTORY_CID);
static NS_DEFINE_IID(kNetServiceCID, NS_NETSERVICE_CID); static NS_DEFINE_IID(kNetServiceCID, NS_NETSERVICE_CID);
@ -151,6 +152,7 @@ NS_SetupRegistry()
nsRepository::RegisterFactory(kCDOMScriptObjectFactory, DOM_DLL, PR_FALSE, PR_FALSE); nsRepository::RegisterFactory(kCDOMScriptObjectFactory, DOM_DLL, PR_FALSE, PR_FALSE);
nsRepository::RegisterFactory(kCDOMNativeObjectRegistry, DOM_DLL, PR_FALSE, PR_FALSE); nsRepository::RegisterFactory(kCDOMNativeObjectRegistry, DOM_DLL, PR_FALSE, PR_FALSE);
nsRepository::RegisterFactory(kCHTMLDocument, LAYOUT_DLL, PR_FALSE, PR_FALSE); nsRepository::RegisterFactory(kCHTMLDocument, LAYOUT_DLL, PR_FALSE, PR_FALSE);
nsRepository::RegisterFactory(kCXMLDocument, LAYOUT_DLL, PR_FALSE, PR_FALSE);
nsRepository::RegisterFactory(kCImageDocument, LAYOUT_DLL, PR_FALSE, PR_FALSE); nsRepository::RegisterFactory(kCImageDocument, LAYOUT_DLL, PR_FALSE, PR_FALSE);
nsRepository::RegisterFactory(kCHTMLImageElementFactory, LAYOUT_DLL, PR_FALSE, PR_FALSE); nsRepository::RegisterFactory(kCHTMLImageElementFactory, LAYOUT_DLL, PR_FALSE, PR_FALSE);
nsRepository::RegisterFactory(kNetServiceCID, NETLIB_DLL, PR_FALSE, PR_FALSE); nsRepository::RegisterFactory(kNetServiceCID, NETLIB_DLL, PR_FALSE, PR_FALSE);