From 2f859539f4f4e251ea801d2a022eefa92d0f94d3 Mon Sep 17 00:00:00 2001 From: "ftang%netscape.com" Date: Wed, 21 Apr 1999 19:51:38 +0000 Subject: [PATCH] add new files for PICS and Charset observation, have not change makefile yet git-svn-id: svn://10.0.0.236/trunk@28493 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/htmlparser/src/nsCharsetObserver.cpp | 118 ++++++++++++++++++ mozilla/htmlparser/src/nsCharsetObserver.h | 57 +++++++++ mozilla/htmlparser/src/nsIElementObserver.h | 61 +++++++++ .../htmlparser/src/nsCharsetObserver.cpp | 118 ++++++++++++++++++ .../parser/htmlparser/src/nsCharsetObserver.h | 57 +++++++++ .../htmlparser/src/nsIElementObserver.h | 61 +++++++++ 6 files changed, 472 insertions(+) create mode 100644 mozilla/htmlparser/src/nsCharsetObserver.cpp create mode 100644 mozilla/htmlparser/src/nsCharsetObserver.h create mode 100644 mozilla/htmlparser/src/nsIElementObserver.h create mode 100644 mozilla/parser/htmlparser/src/nsCharsetObserver.cpp create mode 100644 mozilla/parser/htmlparser/src/nsCharsetObserver.h create mode 100644 mozilla/parser/htmlparser/src/nsIElementObserver.h diff --git a/mozilla/htmlparser/src/nsCharsetObserver.cpp b/mozilla/htmlparser/src/nsCharsetObserver.cpp new file mode 100644 index 00000000000..fab8f70a66d --- /dev/null +++ b/mozilla/htmlparser/src/nsCharsetObserver.cpp @@ -0,0 +1,118 @@ +/* -*- 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.0 (the "NPL")=0; you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1999 Netscape Communications Corporation. All Rights + * Reserved. + */ + + + +#include "nsCharsetObserver.h" + +static NS_DEFINE_IID(kIElementObserverIID, NS_IELEMENTOBSERVER_IID); +static NS_DEFINE_IID(kIObserverIID, NS_IOBSERVER_IID); +static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); + + +nsCharsetObserver::nsCharsetObserver() +{ + NS_INIT_REFCNT(); +} +nsCharsetObserver::~nsCharsetObserver() +{ +} + +NS_IMPL_ADDREF ( nsCharsetObserver ); +NS_IMPL_RELEASE ( nsCharsetObserver ); + +NS_IMETHODIMP nsCharsetObserver::QueryInterface(REFNSIID aIID, void** aInstancePtr) +{ + + if( NULL == aInstancePtr) { + return NS_ERROR_NULL_POINTER; + } + *aInstancePtr = NULL; + + if( aIID.Equals ( kIElementObserverIID )) { + *aInstancePtr = (void*) ((nsIElementObserver*) this); + NS_ADDREF_THIS(); + return NS_OK; + } + if( aIID.Equals ( kIObserverIID )) { + *aInstancePtr = (void*) ((nsIObserver*) this); + NS_ADDREF_THIS(); + return NS_OK; + } + + if( aIID.Equals ( kISupportsIID )) { + *aInstancePtr = (void*) (this); + NS_ADDREF_THIS(); + return NS_OK; + } + return NS_NOINTERFACE; +} + +NS_IMETHODIMP nsCharsetObserver::GetTagName(nsString& oTag) +{ + oTag = "META"; + return NS_OK; +} + +NS_IMETHODIMP nsCharsetObserver::Notify(const nsString& aTag, + PRUint32 numOfAttributes, + const nsString* nameArray, + const nsString* valueArray, + PRBool *oContinue) +{ + nsresult res = NS_OK; + *oContinue = PR_TRUE; // be default, continue + if(aTag.EqualsIgnoreCase("META")) + { + if((numOfAttributes >= 2) && + (nameArray[0].EqualsIgnoreCase("HTTP-EQUIV")) && + (valueArray[0].EqualsIgnoreCase("Content-Type")) && + (nameArray[1].EqualsIgnoreCase("CONTENT")) ) + { + nsAutoString type; + valueArray[2].Left(type, 9); // length of "text/html" == 9 + if(type.EqualsIgnoreCase("text/html")) + { + PRInt32 charsetValueStart = valueArray[2].RFind("charset=", PR_TRUE ) ; + if(kNotFound != charsetValueStart) { + charsetValueStart += 8; // 8 = "charset=".length + PRInt32 charsetValueEnd = valueArray[2].FindCharInSet("\'\";", charsetValueStart ); + if(kNotFound == charsetValueEnd ) + charsetValueEnd = valueArray[2].Length(); + nsAutoString theCharset; + valueArray[2].Mid(theCharset, charsetValueStart, charsetValueEnd - charsetValueStart); + // XXX + // Get the charest in theCharset + // Now, how can we verify the object, if + // we pass the object (nsScanner) when we create this object + // then it mean we need to create one nsIElementObserver + // for every nsParser object + // However, currently we register ourself to a global + // nsIObserverService, not to a nsParser. + + } // if + } // if + } // if + } // if + return res; +} + +NS_IMETHODIMP Notify(nsISupports** result) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} diff --git a/mozilla/htmlparser/src/nsCharsetObserver.h b/mozilla/htmlparser/src/nsCharsetObserver.h new file mode 100644 index 00000000000..f08721fc1fc --- /dev/null +++ b/mozilla/htmlparser/src/nsCharsetObserver.h @@ -0,0 +1,57 @@ +/* -*- 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.0 (the "NPL")=0; you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1999 Netscape Communications Corporation. All Rights + * Reserved. + */ +#ifndef nsCharsetObserver_h__ +#define nsCharsetObserver_h__ + + +#include "nsIElementObserver.h" +#include "nsIObserver.h" +#include "nsISupports.h" +#include "nsString.h" +#include "nsIParser.h" + + +class nsCharsetObserver: public nsIElementObserver, public nsIObserver { + NS_DECL_ISUPPORTS + +public: + + nsCharsetObserver(); + virtual ~nsCharsetObserver(); + + /* + * This method return the tag which the observer care about + */ + NS_IMETHOD GetTagName(nsString& oTag); + + /* + * Subject call observer when the parser hit the tag + * @param aTag- the tag + * @param numOfAttributes - number of attributes + * @param nameArray - array of name. + * @param valueArray - array of value + */ + NS_IMETHOD Notify(const nsString& aTag, PRUint32 numOfAttributes, + const nsString* nameArray, const nsString* valueArray, + PRBool* oContinue); + + NS_IMETHOD Notify(nsISupports** result) = 0; +}; + + +#endif /* nsCharsetObserver_h__ */ diff --git a/mozilla/htmlparser/src/nsIElementObserver.h b/mozilla/htmlparser/src/nsIElementObserver.h new file mode 100644 index 00000000000..b521af2df99 --- /dev/null +++ b/mozilla/htmlparser/src/nsIElementObserver.h @@ -0,0 +1,61 @@ +/* -*- 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.0 (the "NPL")=0; you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1999 Netscape Communications Corporation. All Rights + * Reserved. + */ + + +/** + * MODULE NOTES: + * @update ftang 4/20/99 + * + */ + +#ifndef nsIElementObserver_h__ +#define nsIElementObserver_h__ + +#include "nsISupports.h" +#include "prtypes.h" +class nsString; + +// {4672AA04-F6AE-11d2-B3B7-00805F8A6670} +#define NS_IELEMENTOBSERVER_IID \ +{ 0x4672aa04, 0xf6ae, 0x11d2, { 0xb3, 0xb7, 0x0, 0x80, 0x5f, 0x8a, 0x66, 0x70 } } + + +#define NS_PARSER_SUBJECT "htmlparser" + +class nsIElementObserver : public nsISupports { +public: + /* + * This method return the tag which the observer care about + */ + NS_IMETHOD GetTagName(nsString& oTag) = 0; + + /* + * Subject call observer when the parser hit the tag + * @param aTag- the tag + * @param numOfAttributes - number of attributes + * @param nameArray - array of name. + * @param valueArray - array of value + */ + NS_IMETHOD Notify(const nsString& aTag, PRUint32 numOfAttributes, + const nsString* nameArray, const nsString* valueArray, + PRBool *oContinue) = 0; +}; + + +#endif /* nsIElementObserver_h__ */ + diff --git a/mozilla/parser/htmlparser/src/nsCharsetObserver.cpp b/mozilla/parser/htmlparser/src/nsCharsetObserver.cpp new file mode 100644 index 00000000000..fab8f70a66d --- /dev/null +++ b/mozilla/parser/htmlparser/src/nsCharsetObserver.cpp @@ -0,0 +1,118 @@ +/* -*- 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.0 (the "NPL")=0; you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1999 Netscape Communications Corporation. All Rights + * Reserved. + */ + + + +#include "nsCharsetObserver.h" + +static NS_DEFINE_IID(kIElementObserverIID, NS_IELEMENTOBSERVER_IID); +static NS_DEFINE_IID(kIObserverIID, NS_IOBSERVER_IID); +static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); + + +nsCharsetObserver::nsCharsetObserver() +{ + NS_INIT_REFCNT(); +} +nsCharsetObserver::~nsCharsetObserver() +{ +} + +NS_IMPL_ADDREF ( nsCharsetObserver ); +NS_IMPL_RELEASE ( nsCharsetObserver ); + +NS_IMETHODIMP nsCharsetObserver::QueryInterface(REFNSIID aIID, void** aInstancePtr) +{ + + if( NULL == aInstancePtr) { + return NS_ERROR_NULL_POINTER; + } + *aInstancePtr = NULL; + + if( aIID.Equals ( kIElementObserverIID )) { + *aInstancePtr = (void*) ((nsIElementObserver*) this); + NS_ADDREF_THIS(); + return NS_OK; + } + if( aIID.Equals ( kIObserverIID )) { + *aInstancePtr = (void*) ((nsIObserver*) this); + NS_ADDREF_THIS(); + return NS_OK; + } + + if( aIID.Equals ( kISupportsIID )) { + *aInstancePtr = (void*) (this); + NS_ADDREF_THIS(); + return NS_OK; + } + return NS_NOINTERFACE; +} + +NS_IMETHODIMP nsCharsetObserver::GetTagName(nsString& oTag) +{ + oTag = "META"; + return NS_OK; +} + +NS_IMETHODIMP nsCharsetObserver::Notify(const nsString& aTag, + PRUint32 numOfAttributes, + const nsString* nameArray, + const nsString* valueArray, + PRBool *oContinue) +{ + nsresult res = NS_OK; + *oContinue = PR_TRUE; // be default, continue + if(aTag.EqualsIgnoreCase("META")) + { + if((numOfAttributes >= 2) && + (nameArray[0].EqualsIgnoreCase("HTTP-EQUIV")) && + (valueArray[0].EqualsIgnoreCase("Content-Type")) && + (nameArray[1].EqualsIgnoreCase("CONTENT")) ) + { + nsAutoString type; + valueArray[2].Left(type, 9); // length of "text/html" == 9 + if(type.EqualsIgnoreCase("text/html")) + { + PRInt32 charsetValueStart = valueArray[2].RFind("charset=", PR_TRUE ) ; + if(kNotFound != charsetValueStart) { + charsetValueStart += 8; // 8 = "charset=".length + PRInt32 charsetValueEnd = valueArray[2].FindCharInSet("\'\";", charsetValueStart ); + if(kNotFound == charsetValueEnd ) + charsetValueEnd = valueArray[2].Length(); + nsAutoString theCharset; + valueArray[2].Mid(theCharset, charsetValueStart, charsetValueEnd - charsetValueStart); + // XXX + // Get the charest in theCharset + // Now, how can we verify the object, if + // we pass the object (nsScanner) when we create this object + // then it mean we need to create one nsIElementObserver + // for every nsParser object + // However, currently we register ourself to a global + // nsIObserverService, not to a nsParser. + + } // if + } // if + } // if + } // if + return res; +} + +NS_IMETHODIMP Notify(nsISupports** result) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} diff --git a/mozilla/parser/htmlparser/src/nsCharsetObserver.h b/mozilla/parser/htmlparser/src/nsCharsetObserver.h new file mode 100644 index 00000000000..f08721fc1fc --- /dev/null +++ b/mozilla/parser/htmlparser/src/nsCharsetObserver.h @@ -0,0 +1,57 @@ +/* -*- 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.0 (the "NPL")=0; you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1999 Netscape Communications Corporation. All Rights + * Reserved. + */ +#ifndef nsCharsetObserver_h__ +#define nsCharsetObserver_h__ + + +#include "nsIElementObserver.h" +#include "nsIObserver.h" +#include "nsISupports.h" +#include "nsString.h" +#include "nsIParser.h" + + +class nsCharsetObserver: public nsIElementObserver, public nsIObserver { + NS_DECL_ISUPPORTS + +public: + + nsCharsetObserver(); + virtual ~nsCharsetObserver(); + + /* + * This method return the tag which the observer care about + */ + NS_IMETHOD GetTagName(nsString& oTag); + + /* + * Subject call observer when the parser hit the tag + * @param aTag- the tag + * @param numOfAttributes - number of attributes + * @param nameArray - array of name. + * @param valueArray - array of value + */ + NS_IMETHOD Notify(const nsString& aTag, PRUint32 numOfAttributes, + const nsString* nameArray, const nsString* valueArray, + PRBool* oContinue); + + NS_IMETHOD Notify(nsISupports** result) = 0; +}; + + +#endif /* nsCharsetObserver_h__ */ diff --git a/mozilla/parser/htmlparser/src/nsIElementObserver.h b/mozilla/parser/htmlparser/src/nsIElementObserver.h new file mode 100644 index 00000000000..b521af2df99 --- /dev/null +++ b/mozilla/parser/htmlparser/src/nsIElementObserver.h @@ -0,0 +1,61 @@ +/* -*- 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.0 (the "NPL")=0; you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1999 Netscape Communications Corporation. All Rights + * Reserved. + */ + + +/** + * MODULE NOTES: + * @update ftang 4/20/99 + * + */ + +#ifndef nsIElementObserver_h__ +#define nsIElementObserver_h__ + +#include "nsISupports.h" +#include "prtypes.h" +class nsString; + +// {4672AA04-F6AE-11d2-B3B7-00805F8A6670} +#define NS_IELEMENTOBSERVER_IID \ +{ 0x4672aa04, 0xf6ae, 0x11d2, { 0xb3, 0xb7, 0x0, 0x80, 0x5f, 0x8a, 0x66, 0x70 } } + + +#define NS_PARSER_SUBJECT "htmlparser" + +class nsIElementObserver : public nsISupports { +public: + /* + * This method return the tag which the observer care about + */ + NS_IMETHOD GetTagName(nsString& oTag) = 0; + + /* + * Subject call observer when the parser hit the tag + * @param aTag- the tag + * @param numOfAttributes - number of attributes + * @param nameArray - array of name. + * @param valueArray - array of value + */ + NS_IMETHOD Notify(const nsString& aTag, PRUint32 numOfAttributes, + const nsString* nameArray, const nsString* valueArray, + PRBool *oContinue) = 0; +}; + + +#endif /* nsIElementObserver_h__ */ +