diff --git a/editor/base/nsEditorParserObserver.cpp b/editor/base/nsEditorParserObserver.cpp new file mode 100644 index 000000000000..7c2061508d63 --- /dev/null +++ b/editor/base/nsEditorParserObserver.cpp @@ -0,0 +1,124 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape 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/NPL/ + * + * 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 mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * steve clark + */ + +#include "nsIServiceManager.h" + +#include "nsEditorParserObserver.h" + + +NS_IMPL_ADDREF(nsEditorParserObserver); +NS_IMPL_RELEASE(nsEditorParserObserver); + +NS_INTERFACE_MAP_BEGIN(nsEditorParserObserver) + NS_INTERFACE_MAP_ENTRY(nsIElementObserver) + NS_INTERFACE_MAP_ENTRY(nsIObserver) + NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIElementObserver) +NS_INTERFACE_MAP_END + +nsEditorParserObserver::nsEditorParserObserver() +: mBadTagFound(PR_FALSE) +{ + NS_INIT_REFCNT(); +} + +nsEditorParserObserver::~nsEditorParserObserver() +{ +} + +NS_IMETHODIMP_(const char*) nsEditorParserObserver::GetTagNameAt(PRUint32 aTagIndex) +{ + if (aTagIndex < gParserObserver_TagCount) + { + return gParserObserver_Tags[aTagIndex]; + } else { + return nsnull; + } +} + +NS_IMETHODIMP nsEditorParserObserver::Notify( + PRUint32 aDocumentID, + const PRUnichar* aTag, + PRUint32 numOfAttributes, + const PRUnichar* nameArray[], + const PRUnichar* valueArray[]) +{ + // XXX based on aTag... + Notify(); + return NS_OK; +} + +NS_IMETHODIMP nsEditorParserObserver::Notify( + PRUint32 aDocumentID, + eHTMLTags aTag, + PRUint32 numOfAttributes, + const PRUnichar* nameArray[], + const PRUnichar* valueArray[]) +{ + if (eHTMLTag_frameset == aTag) + { + Notify(); + return NS_OK; + } + else + return NS_ERROR_ILLEGAL_VALUE; +} + +NS_IMETHODIMP nsEditorParserObserver::Observe(nsISupports*, const PRUnichar*, const PRUnichar*) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +void nsEditorParserObserver::Notify() +{ + mBadTagFound = PR_TRUE; +} + +NS_IMETHODIMP nsEditorParserObserver::Start() +{ + nsresult res = NS_OK; + nsAutoString parserService("text/html"); + + nsCOMPtr anObserverService = do_GetService(NS_OBSERVERSERVICE_PROGID, &res); + if (NS_FAILED(res)) return res; + + return anObserverService->AddObserver(this, parserService.GetUnicode()); +} + +NS_IMETHODIMP nsEditorParserObserver::End() +{ + nsresult res = NS_OK; + nsAutoString parserService("text/html"); + + nsCOMPtr anObserverService = do_GetService(NS_OBSERVERSERVICE_PROGID, &res); + if (NS_FAILED(res)) return res; + + return anObserverService->RemoveObserver(this, parserService.GetUnicode()); +} + +NS_IMETHODIMP nsEditorParserObserver::GetBadTagFound(PRBool *aFound) +{ + NS_ENSURE_ARG_POINTER(aFound); + *aFound = mBadTagFound; + return NS_OK; +} \ No newline at end of file diff --git a/editor/base/nsEditorParserObserver.h b/editor/base/nsEditorParserObserver.h new file mode 100644 index 000000000000..1b03a556b972 --- /dev/null +++ b/editor/base/nsEditorParserObserver.h @@ -0,0 +1,77 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape 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/NPL/ + * + * 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 mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * steve clark + */ + +#include "nsIElementObserver.h" +#include "nsIObserver.h" +#include "nsIObserverService.h" +#include "nsWeakReference.h" + +static const PRInt32 gParserObserver_TagCount=1; +static const char * gParserObserver_Tags[1] = {"FRAMESET"}; + + +// this needs to support the weak reference API, so that the parser +// does not need to hold a reference + +class nsEditorParserObserver : public nsSupportsWeakReference, + public nsIElementObserver, + public nsIObserver +{ +public: + + nsEditorParserObserver(); + virtual ~nsEditorParserObserver(); + + NS_DECL_ISUPPORTS + + /* method for nsIElementObserver */ + NS_IMETHOD_(const char*) GetTagNameAt(PRUint32 aTagIndex); + NS_IMETHOD Notify(PRUint32 aDocumentID, eHTMLTags aTag, PRUint32 numOfAttributes, + const PRUnichar* nameArray[], const PRUnichar* valueArray[]); + NS_IMETHOD Notify(PRUint32 aDocumentID, const PRUnichar* aTag, PRUint32 numOfAttributes, + const PRUnichar* nameArray[], const PRUnichar* valueArray[]); + + /* methods for nsIObserver */ + NS_DECL_NSIOBSERVER + + /* begin observing */ + NS_IMETHOD Start(); + + /** end observing */ + NS_IMETHOD End(); + + /** query, did we find a bad tag? */ + NS_IMETHOD GetBadTagFound(PRBool *aFound); + +protected: + + virtual void Notify(); + + +protected: + + PRBool mBadTagFound; + +}; + + diff --git a/editor/composer/src/nsEditorParserObserver.cpp b/editor/composer/src/nsEditorParserObserver.cpp new file mode 100644 index 000000000000..7c2061508d63 --- /dev/null +++ b/editor/composer/src/nsEditorParserObserver.cpp @@ -0,0 +1,124 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape 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/NPL/ + * + * 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 mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * steve clark + */ + +#include "nsIServiceManager.h" + +#include "nsEditorParserObserver.h" + + +NS_IMPL_ADDREF(nsEditorParserObserver); +NS_IMPL_RELEASE(nsEditorParserObserver); + +NS_INTERFACE_MAP_BEGIN(nsEditorParserObserver) + NS_INTERFACE_MAP_ENTRY(nsIElementObserver) + NS_INTERFACE_MAP_ENTRY(nsIObserver) + NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIElementObserver) +NS_INTERFACE_MAP_END + +nsEditorParserObserver::nsEditorParserObserver() +: mBadTagFound(PR_FALSE) +{ + NS_INIT_REFCNT(); +} + +nsEditorParserObserver::~nsEditorParserObserver() +{ +} + +NS_IMETHODIMP_(const char*) nsEditorParserObserver::GetTagNameAt(PRUint32 aTagIndex) +{ + if (aTagIndex < gParserObserver_TagCount) + { + return gParserObserver_Tags[aTagIndex]; + } else { + return nsnull; + } +} + +NS_IMETHODIMP nsEditorParserObserver::Notify( + PRUint32 aDocumentID, + const PRUnichar* aTag, + PRUint32 numOfAttributes, + const PRUnichar* nameArray[], + const PRUnichar* valueArray[]) +{ + // XXX based on aTag... + Notify(); + return NS_OK; +} + +NS_IMETHODIMP nsEditorParserObserver::Notify( + PRUint32 aDocumentID, + eHTMLTags aTag, + PRUint32 numOfAttributes, + const PRUnichar* nameArray[], + const PRUnichar* valueArray[]) +{ + if (eHTMLTag_frameset == aTag) + { + Notify(); + return NS_OK; + } + else + return NS_ERROR_ILLEGAL_VALUE; +} + +NS_IMETHODIMP nsEditorParserObserver::Observe(nsISupports*, const PRUnichar*, const PRUnichar*) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +void nsEditorParserObserver::Notify() +{ + mBadTagFound = PR_TRUE; +} + +NS_IMETHODIMP nsEditorParserObserver::Start() +{ + nsresult res = NS_OK; + nsAutoString parserService("text/html"); + + nsCOMPtr anObserverService = do_GetService(NS_OBSERVERSERVICE_PROGID, &res); + if (NS_FAILED(res)) return res; + + return anObserverService->AddObserver(this, parserService.GetUnicode()); +} + +NS_IMETHODIMP nsEditorParserObserver::End() +{ + nsresult res = NS_OK; + nsAutoString parserService("text/html"); + + nsCOMPtr anObserverService = do_GetService(NS_OBSERVERSERVICE_PROGID, &res); + if (NS_FAILED(res)) return res; + + return anObserverService->RemoveObserver(this, parserService.GetUnicode()); +} + +NS_IMETHODIMP nsEditorParserObserver::GetBadTagFound(PRBool *aFound) +{ + NS_ENSURE_ARG_POINTER(aFound); + *aFound = mBadTagFound; + return NS_OK; +} \ No newline at end of file diff --git a/editor/composer/src/nsEditorParserObserver.h b/editor/composer/src/nsEditorParserObserver.h new file mode 100644 index 000000000000..1b03a556b972 --- /dev/null +++ b/editor/composer/src/nsEditorParserObserver.h @@ -0,0 +1,77 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape 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/NPL/ + * + * 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 mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * steve clark + */ + +#include "nsIElementObserver.h" +#include "nsIObserver.h" +#include "nsIObserverService.h" +#include "nsWeakReference.h" + +static const PRInt32 gParserObserver_TagCount=1; +static const char * gParserObserver_Tags[1] = {"FRAMESET"}; + + +// this needs to support the weak reference API, so that the parser +// does not need to hold a reference + +class nsEditorParserObserver : public nsSupportsWeakReference, + public nsIElementObserver, + public nsIObserver +{ +public: + + nsEditorParserObserver(); + virtual ~nsEditorParserObserver(); + + NS_DECL_ISUPPORTS + + /* method for nsIElementObserver */ + NS_IMETHOD_(const char*) GetTagNameAt(PRUint32 aTagIndex); + NS_IMETHOD Notify(PRUint32 aDocumentID, eHTMLTags aTag, PRUint32 numOfAttributes, + const PRUnichar* nameArray[], const PRUnichar* valueArray[]); + NS_IMETHOD Notify(PRUint32 aDocumentID, const PRUnichar* aTag, PRUint32 numOfAttributes, + const PRUnichar* nameArray[], const PRUnichar* valueArray[]); + + /* methods for nsIObserver */ + NS_DECL_NSIOBSERVER + + /* begin observing */ + NS_IMETHOD Start(); + + /** end observing */ + NS_IMETHOD End(); + + /** query, did we find a bad tag? */ + NS_IMETHOD GetBadTagFound(PRBool *aFound); + +protected: + + virtual void Notify(); + + +protected: + + PRBool mBadTagFound; + +}; + +