Back to index

lightning-sunbird  0.9+nobinonly
nsEditorParserObserver.cpp
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /* ***** BEGIN LICENSE BLOCK *****
00003  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License. You may obtain a copy of the License at
00008  * http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * The Original Code is mozilla.org code.
00016  *
00017  * The Initial Developer of the Original Code is
00018  * Netscape Communications Corporation.
00019  * Portions created by the Initial Developer are Copyright (C) 1998
00020  * the Initial Developer. All Rights Reserved.
00021  *
00022  * Contributor(s):
00023  *   steve clark <buster@netscape.com>
00024  *
00025  * Alternatively, the contents of this file may be used under the terms of
00026  * either of the GNU General Public License Version 2 or later (the "GPL"),
00027  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00028  * in which case the provisions of the GPL or the LGPL are applicable instead
00029  * of those above. If you wish to allow use of your version of this file only
00030  * under the terms of either the GPL or the LGPL, and not to allow others to
00031  * use your version of this file under the terms of the MPL, indicate your
00032  * decision by deleting the provisions above and replace them with the notice
00033  * and other provisions required by the GPL or the LGPL. If you do not delete
00034  * the provisions above, a recipient may use your version of this file under
00035  * the terms of any one of the MPL, the GPL or the LGPL.
00036  *
00037  * ***** END LICENSE BLOCK ***** */
00038 
00039 #include "nsServiceManagerUtils.h"
00040 #include "nsIParserService.h"
00041 #include "nsEditorParserObserver.h"
00042 
00043 NS_IMPL_ADDREF(nsEditorParserObserver)
00044 NS_IMPL_RELEASE(nsEditorParserObserver)
00045 
00046 NS_INTERFACE_MAP_BEGIN(nsEditorParserObserver)
00047       NS_INTERFACE_MAP_ENTRY(nsIElementObserver)
00048       NS_INTERFACE_MAP_ENTRY(nsIObserver)
00049       NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
00050       NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIElementObserver)
00051 NS_INTERFACE_MAP_END
00052 
00053 nsEditorParserObserver::nsEditorParserObserver()
00054 : mBadTagFound(PR_FALSE)
00055 {
00056 }
00057 
00058 nsEditorParserObserver::~nsEditorParserObserver()
00059 {
00060 }
00061 
00062 NS_IMETHODIMP nsEditorParserObserver::Notify(
00063                      PRUint32 aDocumentID, 
00064                      const PRUnichar* aTag, 
00065                      PRUint32 numOfAttributes, 
00066                      const PRUnichar* nameArray[], 
00067                      const PRUnichar* valueArray[])
00068 {
00069   // XXX based on aTag...
00070   Notify();
00071   return NS_OK;
00072 }
00073 
00074 NS_IMETHODIMP nsEditorParserObserver::Notify(
00075                      PRUint32 aDocumentID, 
00076                      eHTMLTags aTag, 
00077                      PRUint32 numOfAttributes, 
00078                      const PRUnichar* nameArray[], 
00079                      const PRUnichar* valueArray[])
00080 {
00081   if (eHTMLTag_frameset == aTag)
00082   {
00083     Notify();
00084     return NS_OK;
00085   }
00086   else
00087     return NS_ERROR_ILLEGAL_VALUE;
00088 }
00089 NS_IMETHODIMP nsEditorParserObserver::Notify(nsISupports* aWebShell, 
00090                                              nsISupports* aChannel, 
00091                                              const PRUnichar* aTag, 
00092                                              const nsStringArray* aKeys, 
00093                                              const nsStringArray* aValues,
00094                                              const PRUint32 aFlags)
00095 {
00096   Notify();
00097   return NS_OK;
00098 }
00099 
00100 NS_IMETHODIMP nsEditorParserObserver::Observe(nsISupports*, const char*, const PRUnichar*)
00101 {
00102     return NS_ERROR_NOT_IMPLEMENTED;
00103 }
00104 
00105 void nsEditorParserObserver::Notify()
00106 {
00107   mBadTagFound = PR_TRUE;
00108 }
00109 
00110 NS_IMETHODIMP nsEditorParserObserver::Start(eHTMLTags* aWatchTags) 
00111 {
00112   nsresult res = NS_OK;
00113   
00114   nsCOMPtr<nsIParserService> parserService(do_GetService("@mozilla.org/parser/parser-service;1"));
00115     
00116   if (!parserService) {
00117     return NS_ERROR_OUT_OF_MEMORY;
00118   }
00119 
00120   res = parserService->RegisterObserver(this,
00121                                         NS_LITERAL_STRING("text/html"),
00122                                         aWatchTags);
00123   return res;
00124 }
00125 
00126 NS_IMETHODIMP nsEditorParserObserver::End() 
00127 {
00128   nsresult res = NS_OK;
00129   nsCOMPtr<nsIParserService> parserService(do_GetService("@mozilla.org/parser/parser-service;1"));
00130 
00131   if (!parserService) {
00132     return NS_ERROR_OUT_OF_MEMORY;
00133   }
00134    
00135   res = parserService->UnregisterObserver(this,
00136                                           NS_LITERAL_STRING("text/html"));
00137   return res;
00138 }
00139 
00140 NS_IMETHODIMP nsEditorParserObserver::GetBadTagFound(PRBool *aFound)
00141 {
00142   NS_ENSURE_ARG_POINTER(aFound);
00143   *aFound = mBadTagFound;
00144   return NS_OK; 
00145 }
00146 
00147 
00148