De-COM-ify nsHTMLStyleSheet. b=239008 r+sr=bryner

This commit is contained in:
dbaron%dbaron.org 2004-04-12 21:56:09 +00:00
Родитель 21a5e14d4e
Коммит ad713a3eaf
29 изменённых файлов: 657 добавлений и 787 удалений

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

@ -47,10 +47,6 @@
#define NS_STYLESET_CID \
{ 0x1691e1f7, 0xee41, 0x11d4, { 0x98, 0x85, 0x0, 0xc0, 0x4f, 0xa0, 0xcf, 0x4b } }
// {96882B70-8A27-11d2-8EAF-00805F29F370}
#define NS_HTMLSTYLESHEET_CID \
{ 0x96882b70, 0x8a27, 0x11d2, { 0x8e, 0xaf, 0x0, 0x80, 0x5f, 0x29, 0xf3, 0x70 } }
// {972D8D8F-F0DA-11d4-9885-00C04FA0CF4B}
#define NS_DOCUMENT_VIEWER_CID \
{ 0x972d8d8f, 0xf0da, 0x11d4, { 0x98, 0x85, 0x0, 0xc0, 0x4f, 0xa0, 0xcf, 0x4b } }

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

@ -52,7 +52,7 @@
NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_CONTENT, 1)
/** Error codes for nsIHTMLStyleSheet */
/** Error codes for nsHTMLStyleSheet */
// XXX this is not really used
#define NS_HTML_STYLE_PROPERTY_NOT_THERE \
NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_CONTENT, 2)

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

@ -84,7 +84,7 @@ class nsIScriptLoader;
class nsIContentSink;
class nsIScriptEventManager;
class nsICSSLoader;
class nsIHTMLStyleSheet;
class nsHTMLStyleSheet;
class nsIHTMLCSSStyleSheet;
// IID for the nsIDocument interface
@ -428,7 +428,7 @@ public:
* Get this document's attribute stylesheet. May return null if
* there isn't one.
*/
virtual nsIHTMLStyleSheet* GetAttributeStyleSheet() const = 0;
virtual nsHTMLStyleSheet* GetAttributeStyleSheet() const = 0;
/**
* Get this document's inline style sheet. May return null if there

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

@ -41,7 +41,7 @@
#include "prmem.h"
#include "prbit.h"
#include "nsString.h"
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
#include "nsRuleWalker.h"
#include "nsMappedAttributes.h"
#include "nsUnicharUtils.h"
@ -434,7 +434,7 @@ nsresult
nsAttrAndChildArray::SetAndTakeMappedAttr(nsIAtom* aLocalName,
nsAttrValue& aValue,
nsIHTMLContent* aContent,
nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet* aSheet)
{
nsRefPtr<nsMappedAttributes> mapped;
nsresult rv = GetModifiableMapped(aContent, aSheet, PR_TRUE,
@ -448,7 +448,7 @@ nsAttrAndChildArray::SetAndTakeMappedAttr(nsIAtom* aLocalName,
}
nsresult
nsAttrAndChildArray::SetMappedAttrStyleSheet(nsIHTMLStyleSheet* aSheet)
nsAttrAndChildArray::SetMappedAttrStyleSheet(nsHTMLStyleSheet* aSheet)
{
if (!mImpl || !mImpl->mMappedAttrs ||
aSheet == mImpl->mMappedAttrs->GetStyleSheet()) {
@ -555,7 +555,7 @@ nsAttrAndChildArray::MappedAttrCount() const
nsresult
nsAttrAndChildArray::GetModifiableMapped(nsIHTMLContent* aContent,
nsIHTMLStyleSheet* aSheet,
nsHTMLStyleSheet* aSheet,
PRBool aWillAddAttr,
nsMappedAttributes** aModifiable)
{
@ -600,10 +600,9 @@ nsAttrAndChildArray::MakeMappedUnique(nsMappedAttributes* aAttributes)
return NS_OK;
}
nsRefPtr<nsMappedAttributes> mapped;
nsresult rv = aAttributes->GetStyleSheet()->
UniqueMappedAttributes(aAttributes, *getter_AddRefs(mapped));
NS_ENSURE_SUCCESS(rv, rv);
nsRefPtr<nsMappedAttributes> mapped =
aAttributes->GetStyleSheet()->UniqueMappedAttributes(aAttributes);
NS_ENSURE_TRUE(mapped, NS_ERROR_OUT_OF_MEMORY);
if (mapped != aAttributes) {
// Reset the stylesheet of aAttributes so that it doesn't spend time

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

@ -45,7 +45,7 @@
class nsIContent;
class nsMappedAttributes;
class nsIHTMLStyleSheet;
class nsHTMLStyleSheet;
class nsRuleWalker;
class nsIHTMLContent;
@ -104,8 +104,8 @@ public:
PRInt32 IndexOfAttr(nsIAtom* aLocalName, PRInt32 aNamespaceID = kNameSpaceID_None) const;
nsresult SetAndTakeMappedAttr(nsIAtom* aLocalName, nsAttrValue& aValue,
nsIHTMLContent* aContent, nsIHTMLStyleSheet* aSheet);
nsresult SetMappedAttrStyleSheet(nsIHTMLStyleSheet* aSheet);
nsIHTMLContent* aContent, nsHTMLStyleSheet* aSheet);
nsresult SetMappedAttrStyleSheet(nsHTMLStyleSheet* aSheet);
void WalkMappedAttributeStyleRules(nsRuleWalker* aRuleWalker);
void Compact();
@ -120,7 +120,7 @@ private:
PRUint32 MappedAttrCount() const;
nsresult GetModifiableMapped(nsIHTMLContent* aContent,
nsIHTMLStyleSheet* aSheet,
nsHTMLStyleSheet* aSheet,
PRBool aWillAddAttr,
nsMappedAttributes** aModifiable);
nsresult MakeMappedUnique(nsMappedAttributes* aAttributes);

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

@ -81,7 +81,7 @@
#include "nsIScriptEventManager.h"
// Put these here so all document impls get them automatically
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
#include "nsIHTMLCSSStyleSheet.h"
#include "pldhash.h"
@ -323,7 +323,7 @@ public:
* Get this document's attribute stylesheet. May return null if
* there isn't one.
*/
nsIHTMLStyleSheet* GetAttributeStyleSheet() const {
nsHTMLStyleSheet* GetAttributeStyleSheet() const {
return mAttrStyleSheet;
}
@ -564,7 +564,7 @@ protected:
nsSupportsHashtable mContentWrapperHash;
nsCOMPtr<nsICSSLoader> mCSSLoader;
nsCOMPtr<nsIHTMLStyleSheet> mAttrStyleSheet;
nsRefPtr<nsHTMLStyleSheet> mAttrStyleSheet;
nsCOMPtr<nsIHTMLCSSStyleSheet> mStyleAttrStyleSheet;
nsCOMPtr<nsIScriptEventManager> mScriptEventManager;

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

@ -37,11 +37,11 @@
* ***** END LICENSE BLOCK ***** */
#include "nsMappedAttributes.h"
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
#include "nsRuleWalker.h"
#include "prmem.h"
nsMappedAttributes::nsMappedAttributes(nsIHTMLStyleSheet* aSheet,
nsMappedAttributes::nsMappedAttributes(nsHTMLStyleSheet* aSheet,
nsMapRuleToAttributesFunc aMapRuleFunc)
: mAttrCount(0),
mSheet(aSheet),
@ -209,7 +209,7 @@ nsMappedAttributes::GetStyleSheet(nsIStyleSheet*& aSheet) const
}
void
nsMappedAttributes::SetStyleSheet(nsIHTMLStyleSheet* aSheet)
nsMappedAttributes::SetStyleSheet(nsHTMLStyleSheet* aSheet)
{
if (mSheet) {
mSheet->DropMappedAttributes(this);

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

@ -44,13 +44,13 @@
#include "nsIStyleRule.h"
class nsIAtom;
class nsIHTMLStyleSheet;
class nsHTMLStyleSheet;
class nsRuleWalker;
class nsMappedAttributes : public nsIStyleRule
{
public:
nsMappedAttributes(nsIHTMLStyleSheet* aSheet,
nsMappedAttributes(nsHTMLStyleSheet* aSheet,
nsMapRuleToAttributesFunc aMapRuleFunc);
void* operator new(size_t size, PRUint32 aAttrCount = 1) CPP_THROW_NEW;
@ -75,8 +75,8 @@ public:
{
mSheet = nsnull;
}
void SetStyleSheet(nsIHTMLStyleSheet* aSheet);
nsIHTMLStyleSheet* GetStyleSheet()
void SetStyleSheet(nsHTMLStyleSheet* aSheet);
nsHTMLStyleSheet* GetStyleSheet()
{
return mSheet;
}
@ -133,7 +133,7 @@ private:
#ifdef DEBUG
PRUint16 mBufferSize;
#endif
nsIHTMLStyleSheet* mSheet; //weak
nsHTMLStyleSheet* mSheet; //weak
nsMapRuleToAttributesFunc mRuleMapper;
void* mAttrs[1];
};

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

@ -59,7 +59,7 @@
#include "nsIEventListenerManager.h"
#include "nsIFocusController.h"
#include "nsMappedAttributes.h"
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
#include "nsIHTMLDocument.h"
#include "nsIHTMLContent.h"
#include "nsILink.h"
@ -1278,7 +1278,7 @@ nsGenericHTMLElement::SetDocument(nsIDocument* aDocument, PRBool aDeep,
ReparseStyleAttribute();
if (!doNothing && mDocument) {
nsIHTMLStyleSheet* sheet = mDocument->GetAttributeStyleSheet();
nsHTMLStyleSheet* sheet = mDocument->GetAttributeStyleSheet();
if (sheet) {
mAttrsAndChildren.SetMappedAttrStyleSheet(sheet);
}
@ -1614,7 +1614,7 @@ nsGenericHTMLElement::SetAttrAndNotify(PRInt32 aNamespaceID,
if (aNamespaceID == kNameSpaceID_None) {
if (IsAttributeMapped(aAttribute)) {
nsIHTMLStyleSheet* sheet = mDocument ?
nsHTMLStyleSheet* sheet = mDocument ?
mDocument->GetAttributeStyleSheet() : nsnull;
rv = mAttrsAndChildren.SetAndTakeMappedAttr(aAttribute, aParsedValue,
this, sheet);

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

@ -48,7 +48,7 @@
#include "nsIPresShell.h"
#include "nsIDocument.h"
#include "nsIHTMLDocument.h"
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
#include "nsIHTMLCSSStyleSheet.h"
#include "nsICSSStyleRule.h"
#include "nsIContentViewer.h"
@ -69,7 +69,7 @@ class nsHTMLBodyElement;
class BodyRule: public nsIStyleRule {
public:
BodyRule(nsHTMLBodyElement* aPart, nsIHTMLStyleSheet* aSheet);
BodyRule(nsHTMLBodyElement* aPart, nsHTMLStyleSheet* aSheet);
virtual ~BodyRule();
NS_DECL_ISUPPORTS
@ -84,7 +84,7 @@ public:
#endif
nsHTMLBodyElement* mPart; // not ref-counted, cleared by content
nsIHTMLStyleSheet* mSheet; // not ref-counted, cleared by content
nsHTMLStyleSheet* mSheet; // not ref-counted, cleared by content
};
//----------------------------------------------------------------------
@ -126,7 +126,7 @@ protected:
//----------------------------------------------------------------------
BodyRule::BodyRule(nsHTMLBodyElement* aPart, nsIHTMLStyleSheet* aSheet)
BodyRule::BodyRule(nsHTMLBodyElement* aPart, nsHTMLStyleSheet* aSheet)
{
mPart = aPart;
mSheet = aSheet;
@ -512,7 +512,7 @@ void MapAttributesIntoRule(const nsMappedAttributes* aAttributes, nsRuleData* aD
nsCOMPtr<nsIDocument> doc;
presShell->GetDocument(getter_AddRefs(doc));
if (doc) {
nsIHTMLStyleSheet* styleSheet = doc->GetAttributeStyleSheet();
nsHTMLStyleSheet* styleSheet = doc->GetAttributeStyleSheet();
if (styleSheet) {
nscolor color;
if (aAttributes->GetAttribute(nsHTMLAtoms::link, value) !=

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

@ -1,145 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* 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 Communicator client code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsIDOMEventReceiver.h"
#include "nsIHTMLContent.h"
#include "nsGenericHTMLElement.h"
#include "nsHTMLAtoms.h"
#include "nsStyleConsts.h"
#include "nsIPresContext.h"
#include "nsLayoutAtoms.h"
#include "nsHTMLAtoms.h"
#include "nsIEventListenerManager.h"
#include "nsIDOMEventReceiver.h"
#include "nsIDocument.h"
#include "nsIHTMLStyleSheet.h"
#include "nsIDOMMutationEvent.h"
class nsHTMLUnknownElement : public nsGenericHTMLElement,
public nsIDOMHTMLElement
{
public:
nsHTMLUnknownElement();
virtual ~nsHTMLUnknownElement();
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
// nsIDOMNode
NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsGenericHTMLElement::)
// nsIDOMElement
NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLElement::)
// nsIDOMHTMLElement
NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLElement::)
};
nsresult
NS_NewHTMLUnknownElement(nsIHTMLContent** aInstancePtrResult,
nsINodeInfo *aNodeInfo)
{
NS_ENSURE_ARG_POINTER(aInstancePtrResult);
nsHTMLUnknownElement* it = new nsHTMLUnknownElement();
if (!it) {
return NS_ERROR_OUT_OF_MEMORY;
}
nsresult rv = it->Init(aNodeInfo);
if (NS_FAILED(rv)) {
delete it;
return rv;
}
*aInstancePtrResult = NS_STATIC_CAST(nsIHTMLContent *, it);
NS_ADDREF(*aInstancePtrResult);
return NS_OK;
}
nsHTMLUnknownElement::nsHTMLUnknownElement()
{
}
nsHTMLUnknownElement::~nsHTMLUnknownElement()
{
}
NS_IMPL_ADDREF_INHERITED(nsHTMLUnknownElement, nsGenericElement)
NS_IMPL_RELEASE_INHERITED(nsHTMLUnknownElement, nsGenericElement)
// QueryInterface implementation for nsHTMLUnknownElement
NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLUnknownElement,
nsGenericHTMLElement)
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(HTMLUnknownElement)
NS_HTML_CONTENT_INTERFACE_MAP_END
nsresult
nsHTMLUnknownElement::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
{
NS_ENSURE_ARG_POINTER(aReturn);
*aReturn = nsnull;
nsHTMLUnknownElement* it = new nsHTMLUnknownElement();
if (!it) {
return NS_ERROR_OUT_OF_MEMORY;
}
nsCOMPtr<nsIDOMNode> kungFuDeathGrip(it);
nsresult rv = it->Init(mNodeInfo);
if (NS_FAILED(rv))
return rv;
CopyInnerTo(it, aDeep);
*aReturn = NS_STATIC_CAST(nsIDOMNode *, it);
NS_ADDREF(*aReturn);
return NS_OK;
}

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

@ -80,9 +80,9 @@ FORCE_STATIC_LIB = 1
include $(topsrcdir)/config/rules.mk
INCLUDES += \
-I$(srcdir)/../../base/src \
-I$(srcdir)/../../../base/src \
-I$(srcdir)/../../content/src \
-I$(srcdir)/../../style/src \
$(NULL)
DEFINES += -D_IMPL_NS_LAYOUT

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

@ -49,7 +49,7 @@
#include "nsIHTMLContentSink.h"
#include "nsIXMLContentSink.h"
#include "nsHTMLParts.h"
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
#include "nsIHTMLCSSStyleSheet.h"
#include "nsHTMLAtoms.h"
#include "nsLayoutAtoms.h"

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

@ -53,7 +53,7 @@
#include "pldhash.h"
#include "nsIHttpChannel.h"
#include "nsIHTMLCSSStyleSheet.h"
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
// Document.Write() related
#include "nsIWyciwygChannel.h"

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

@ -47,7 +47,7 @@ class nsIDOMNodeList;
class nsIDOMHTMLCollection;
class nsIDOMHTMLFormElement;
class nsIDOMHTMLMapElement;
class nsIHTMLStyleSheet;
class nsHTMLStyleSheet;
class nsIStyleSheet;
class nsICSSLoader;
class nsIContent;

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

@ -27,68 +27,41 @@
* Date Modified by Description of modification
* 04/20/2000 IBM Corp. OS/2 VisualAge build.
*/
#include "nsHTMLStyleSheet.h"
#include "nsINameSpaceManager.h"
#include "nsIHTMLStyleSheet.h"
#include "nsCRT.h"
#include "nsIAtom.h"
#include "nsIURL.h"
#include "nsIServiceManager.h"
#include "nsISupportsArray.h"
#include "pldhash.h"
#include "nsMappedAttributes.h"
#include "nsILink.h"
#include "nsIStyleRuleProcessor.h"
#include "nsIStyleRule.h"
#include "nsIFrame.h"
#include "nsStyleContext.h"
#include "nsHTMLAtoms.h"
#include "nsIPresContext.h"
#include "nsIEventStateManager.h"
#include "nsIDocument.h"
#include "nsHTMLParts.h"
#include "nsIPresShell.h"
#include "nsStyleConsts.h"
#include "nsLayoutAtoms.h"
#include "nsLayoutCID.h"
#include "nsIDOMHTMLDocument.h"
#include "nsIDOMHTMLElement.h"
#include "nsCSSAnonBoxes.h"
#include "nsRuleWalker.h"
class HTMLColorRule : public nsIStyleRule {
public:
HTMLColorRule(nsIHTMLStyleSheet* aSheet);
virtual ~HTMLColorRule();
NS_DECL_ISUPPORTS
NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aSheet) const;
// The new mapping function.
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
#ifdef DEBUG
NS_IMETHOD List(FILE* out = stdout, PRInt32 aIndent = 0) const;
#endif
nscolor mColor;
nsIHTMLStyleSheet* mSheet;
};
HTMLColorRule::HTMLColorRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::HTMLColorRule::HTMLColorRule(nsHTMLStyleSheet* aSheet)
: mSheet(aSheet)
{
}
HTMLColorRule::~HTMLColorRule()
nsHTMLStyleSheet::HTMLColorRule::~HTMLColorRule()
{
}
NS_IMPL_ISUPPORTS1(HTMLColorRule, nsIStyleRule)
NS_IMPL_ISUPPORTS1(nsHTMLStyleSheet::HTMLColorRule, nsIStyleRule)
NS_IMETHODIMP
HTMLColorRule::GetStyleSheet(nsIStyleSheet*& aSheet) const
nsHTMLStyleSheet::HTMLColorRule::GetStyleSheet(nsIStyleSheet*& aSheet) const
{
NS_IF_ADDREF(mSheet);
aSheet = mSheet;
@ -96,7 +69,7 @@ HTMLColorRule::GetStyleSheet(nsIStyleSheet*& aSheet) const
}
NS_IMETHODIMP
HTMLColorRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::HTMLColorRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
if (aRuleData->mSID == eStyleStruct_Color) {
if (aRuleData->mColorData->mColor.GetUnit() == eCSSUnit_Null)
@ -107,51 +80,32 @@ HTMLColorRule::MapRuleInfoInto(nsRuleData* aRuleData)
#ifdef DEBUG
NS_IMETHODIMP
HTMLColorRule::List(FILE* out, PRInt32 aIndent) const
nsHTMLStyleSheet::HTMLColorRule::List(FILE* out, PRInt32 aIndent) const
{
return NS_OK;
}
#endif
class GenericTableRule: public nsIStyleRule {
public:
GenericTableRule(nsIHTMLStyleSheet* aSheet);
virtual ~GenericTableRule();
NS_DECL_ISUPPORTS
NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aSheet) const;
// The new mapping function.
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
#ifdef DEBUG
NS_IMETHOD List(FILE* out = stdout, PRInt32 aIndent = 0) const;
#endif
nsIHTMLStyleSheet* mSheet; // not ref-counted, cleared by content
};
GenericTableRule::GenericTableRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::GenericTableRule::GenericTableRule(nsHTMLStyleSheet* aSheet)
{
mSheet = aSheet;
}
GenericTableRule::~GenericTableRule()
nsHTMLStyleSheet::GenericTableRule::~GenericTableRule()
{
}
NS_IMPL_ISUPPORTS1(GenericTableRule, nsIStyleRule)
NS_IMPL_ISUPPORTS1(nsHTMLStyleSheet::GenericTableRule, nsIStyleRule)
NS_IMETHODIMP
GenericTableRule::GetStyleSheet(nsIStyleSheet*& aSheet) const
nsHTMLStyleSheet::GenericTableRule::GetStyleSheet(nsIStyleSheet*& aSheet) const
{
aSheet = mSheet;
return NS_OK;
}
NS_IMETHODIMP
GenericTableRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::GenericTableRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
// Nothing to do.
return NS_OK;
@ -159,29 +113,18 @@ GenericTableRule::MapRuleInfoInto(nsRuleData* aRuleData)
#ifdef DEBUG
NS_IMETHODIMP
GenericTableRule::List(FILE* out, PRInt32 aIndent) const
nsHTMLStyleSheet::GenericTableRule::List(FILE* out, PRInt32 aIndent) const
{
return NS_OK;
}
#endif
// -----------------------------------------------------------
// this rule handles <th> inheritance
// -----------------------------------------------------------
class TableTHRule: public GenericTableRule {
public:
TableTHRule(nsIHTMLStyleSheet* aSheet);
virtual ~TableTHRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
TableTHRule::TableTHRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::TableTHRule::TableTHRule(nsHTMLStyleSheet* aSheet)
: GenericTableRule(aSheet)
{
}
TableTHRule::~TableTHRule()
nsHTMLStyleSheet::TableTHRule::~TableTHRule()
{
}
@ -201,7 +144,7 @@ static void PostResolveCallback(nsStyleStruct* aStyleStruct, nsRuleData* aRuleDa
}
NS_IMETHODIMP
TableTHRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::TableTHRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
if (aRuleData && aRuleData->mSID == eStyleStruct_Text) {
aRuleData->mCanStoreInRuleTree = PR_FALSE;
@ -295,23 +238,12 @@ ProcessTableRulesAttribute(nsStyleStruct* aStyleStruct,
}
}
// -----------------------------------------------------------
// this rule handles borders on a <thead>, <tbody>, <tfoot> when rules is set on its <table>
// -----------------------------------------------------------
class TableTbodyRule: public GenericTableRule {
public:
TableTbodyRule(nsIHTMLStyleSheet* aSheet);
virtual ~TableTbodyRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
TableTbodyRule::TableTbodyRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::TableTbodyRule::TableTbodyRule(nsHTMLStyleSheet* aSheet)
: GenericTableRule(aSheet)
{
}
TableTbodyRule::~TableTbodyRule()
nsHTMLStyleSheet::TableTbodyRule::~TableTbodyRule()
{
}
@ -324,7 +256,7 @@ static void TbodyPostResolveCallback(nsStyleStruct* aStyleStruct, nsRuleData* aR
}
NS_IMETHODIMP
TableTbodyRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::TableTbodyRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
if (aRuleData && aRuleData->mSID == eStyleStruct_Border) {
aRuleData->mCanStoreInRuleTree = PR_FALSE;
@ -334,23 +266,12 @@ TableTbodyRule::MapRuleInfoInto(nsRuleData* aRuleData)
}
// -----------------------------------------------------------
// -----------------------------------------------------------
// this rule handles borders on a <row> when rules is set on its <table>
// -----------------------------------------------------------
class TableRowRule: public GenericTableRule {
public:
TableRowRule(nsIHTMLStyleSheet* aSheet);
virtual ~TableRowRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
TableRowRule::TableRowRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::TableRowRule::TableRowRule(nsHTMLStyleSheet* aSheet)
: GenericTableRule(aSheet)
{
}
TableRowRule::~TableRowRule()
nsHTMLStyleSheet::TableRowRule::~TableRowRule()
{
}
@ -363,7 +284,7 @@ static void RowPostResolveCallback(nsStyleStruct* aStyleStruct, nsRuleData* aRul
}
NS_IMETHODIMP
TableRowRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::TableRowRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
if (aRuleData && aRuleData->mSID == eStyleStruct_Border) {
aRuleData->mCanStoreInRuleTree = PR_FALSE;
@ -372,23 +293,12 @@ TableRowRule::MapRuleInfoInto(nsRuleData* aRuleData)
return NS_OK;
}
// -----------------------------------------------------------
// this rule handles borders on a <colgroup> when rules is set on its <table>
// -----------------------------------------------------------
class TableColgroupRule: public GenericTableRule {
public:
TableColgroupRule(nsIHTMLStyleSheet* aSheet);
virtual ~TableColgroupRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
TableColgroupRule::TableColgroupRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::TableColgroupRule::TableColgroupRule(nsHTMLStyleSheet* aSheet)
: GenericTableRule(aSheet)
{
}
TableColgroupRule::~TableColgroupRule()
nsHTMLStyleSheet::TableColgroupRule::~TableColgroupRule()
{
}
@ -401,7 +311,7 @@ static void ColgroupPostResolveCallback(nsStyleStruct* aStyleStruct, nsRuleData*
}
NS_IMETHODIMP
TableColgroupRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::TableColgroupRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
if (aRuleData && aRuleData->mSID == eStyleStruct_Border) {
aRuleData->mCanStoreInRuleTree = PR_FALSE;
@ -410,23 +320,12 @@ TableColgroupRule::MapRuleInfoInto(nsRuleData* aRuleData)
return NS_OK;
}
// -----------------------------------------------------------
// this rule handles borders on a <col> when rules is set on its <table>
// -----------------------------------------------------------
class TableColRule: public GenericTableRule {
public:
TableColRule(nsIHTMLStyleSheet* aSheet);
virtual ~TableColRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
TableColRule::TableColRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::TableColRule::TableColRule(nsHTMLStyleSheet* aSheet)
: GenericTableRule(aSheet)
{
}
TableColRule::~TableColRule()
nsHTMLStyleSheet::TableColRule::~TableColRule()
{
}
@ -439,7 +338,7 @@ static void ColPostResolveCallback(nsStyleStruct* aStyleStruct, nsRuleData* aRul
}
NS_IMETHODIMP
TableColRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::TableColRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
if (aRuleData && aRuleData->mSID == eStyleStruct_Border) {
aRuleData->mCanStoreInRuleTree = PR_FALSE;
@ -497,102 +396,8 @@ static PLDHashTableOps MappedAttrTable_Ops = {
// -----------------------------------------------------------
class HTMLStyleSheetImpl : public nsIHTMLStyleSheet,
public nsIStyleRuleProcessor {
public:
HTMLStyleSheetImpl(void);
nsresult Init();
NS_DECL_ISUPPORTS
// nsIStyleSheet api
NS_IMETHOD GetURL(nsIURI*& aURL) const;
NS_IMETHOD GetTitle(nsString& aTitle) const;
NS_IMETHOD GetType(nsString& aType) const;
NS_IMETHOD GetMediumCount(PRInt32& aCount) const;
NS_IMETHOD GetMediumAt(PRInt32 aIndex, nsIAtom*& aMedium) const;
NS_IMETHOD_(PRBool) UseForMedium(nsIAtom* aMedium) const;
NS_IMETHOD_(PRBool) HasRules() const;
NS_IMETHOD GetApplicable(PRBool& aApplicable) const;
NS_IMETHOD SetEnabled(PRBool aEnabled);
NS_IMETHOD GetComplete(PRBool& aComplete) const;
NS_IMETHOD SetComplete();
// style sheet owner info
NS_IMETHOD GetParentSheet(nsIStyleSheet*& aParent) const; // will be null
NS_IMETHOD GetOwningDocument(nsIDocument*& aDocument) const;
NS_IMETHOD SetOwningDocument(nsIDocument* aDocumemt);
NS_IMETHOD GetStyleRuleProcessor(nsIStyleRuleProcessor*& aProcessor,
nsIStyleRuleProcessor* aPrevProcessor);
// nsIStyleRuleProcessor API
NS_IMETHOD RulesMatching(ElementRuleProcessorData* aData,
nsIAtom* aMedium);
NS_IMETHOD RulesMatching(PseudoRuleProcessorData* aData,
nsIAtom* aMedium);
NS_IMETHOD HasStateDependentStyle(StateRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult);
NS_IMETHOD HasAttributeDependentStyle(AttributeRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult);
// nsIHTMLStyleSheet api
NS_IMETHOD Init(nsIURI* aURL, nsIDocument* aDocument);
NS_IMETHOD Reset(nsIURI* aURL);
NS_IMETHOD GetLinkColor(nscolor& aColor);
NS_IMETHOD GetActiveLinkColor(nscolor& aColor);
NS_IMETHOD GetVisitedLinkColor(nscolor& aColor);
NS_IMETHOD SetLinkColor(nscolor aColor);
NS_IMETHOD SetActiveLinkColor(nscolor aColor);
NS_IMETHOD SetVisitedLinkColor(nscolor aColor);
// Mapped Attribute management methods
NS_IMETHOD UniqueMappedAttributes(nsMappedAttributes* aMapped,
nsMappedAttributes*& aUniqueMapped);
NS_IMETHOD DropMappedAttributes(nsMappedAttributes* aMapped);
#ifdef DEBUG
virtual void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
#endif
private:
// These are not supported and are not implemented!
HTMLStyleSheetImpl(const HTMLStyleSheetImpl& aCopy);
HTMLStyleSheetImpl& operator=(const HTMLStyleSheetImpl& aCopy);
protected:
virtual ~HTMLStyleSheetImpl();
protected:
nsIURI* mURL;
nsIDocument* mDocument;
HTMLColorRule* mLinkRule;
HTMLColorRule* mVisitedRule;
HTMLColorRule* mActiveRule;
HTMLColorRule* mDocumentColorRule;
TableTbodyRule* mTableTbodyRule;
TableRowRule* mTableRowRule;
TableColgroupRule* mTableColgroupRule;
TableColRule* mTableColRule;
TableTHRule* mTableTHRule;
PLDHashTable mMappedAttrTable;
};
HTMLStyleSheetImpl::HTMLStyleSheetImpl(void)
: nsIHTMLStyleSheet(),
mRefCnt(0),
mURL(nsnull),
nsHTMLStyleSheet::nsHTMLStyleSheet(void)
: mURL(nsnull),
mDocument(nsnull),
mLinkRule(nsnull),
mVisitedRule(nsnull),
@ -603,7 +408,7 @@ HTMLStyleSheetImpl::HTMLStyleSheetImpl(void)
}
nsresult
HTMLStyleSheetImpl::Init()
nsHTMLStyleSheet::Init()
{
mTableTbodyRule = new TableTbodyRule(this);
if (!mTableTbodyRule)
@ -633,7 +438,7 @@ HTMLStyleSheetImpl::Init()
return NS_OK;
}
HTMLStyleSheetImpl::~HTMLStyleSheetImpl()
nsHTMLStyleSheet::~nsHTMLStyleSheet()
{
NS_IF_RELEASE(mURL);
if (nsnull != mLinkRule) {
@ -676,11 +481,11 @@ HTMLStyleSheetImpl::~HTMLStyleSheetImpl()
PL_DHashTableFinish(&mMappedAttrTable);
}
NS_IMPL_ISUPPORTS3(HTMLStyleSheetImpl, nsIHTMLStyleSheet, nsIStyleSheet, nsIStyleRuleProcessor)
NS_IMPL_ISUPPORTS2(nsHTMLStyleSheet, nsIStyleSheet, nsIStyleRuleProcessor)
NS_IMETHODIMP
HTMLStyleSheetImpl::GetStyleRuleProcessor(nsIStyleRuleProcessor*& aProcessor,
nsIStyleRuleProcessor* /*aPrevProcessor*/)
nsHTMLStyleSheet::GetStyleRuleProcessor(nsIStyleRuleProcessor*& aProcessor,
nsIStyleRuleProcessor* /*aPrevProcessor*/)
{
aProcessor = this;
NS_ADDREF(aProcessor);
@ -707,8 +512,8 @@ static nsresult GetBodyColor(nsIPresContext* aPresContext, nscolor* aColor)
}
NS_IMETHODIMP
HTMLStyleSheetImpl::RulesMatching(ElementRuleProcessorData* aData,
nsIAtom* aMedium)
nsHTMLStyleSheet::RulesMatching(ElementRuleProcessorData* aData,
nsIAtom* aMedium)
{
nsIStyledContent *styledContent = aData->mStyledContent;
@ -789,9 +594,9 @@ HTMLStyleSheetImpl::RulesMatching(ElementRuleProcessorData* aData,
// Test if style is dependent on content state
NS_IMETHODIMP
HTMLStyleSheetImpl::HasStateDependentStyle(StateRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult)
nsHTMLStyleSheet::HasStateDependentStyle(StateRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult)
{
if (mActiveRule &&
(aData->mStateMask & NS_EVENT_STATE_ACTIVE) &&
@ -807,9 +612,9 @@ HTMLStyleSheetImpl::HasStateDependentStyle(StateRuleProcessorData* aData,
}
NS_IMETHODIMP
HTMLStyleSheetImpl::HasAttributeDependentStyle(AttributeRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult)
nsHTMLStyleSheet::HasAttributeDependentStyle(AttributeRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult)
{
// Result is true for |href| changes on HTML links if we have link rules.
nsIStyledContent *styledContent = aData->mStyledContent;
@ -837,8 +642,8 @@ HTMLStyleSheetImpl::HasAttributeDependentStyle(AttributeRuleProcessorData* aData
NS_IMETHODIMP
HTMLStyleSheetImpl::RulesMatching(PseudoRuleProcessorData* aData,
nsIAtom* aMedium)
nsHTMLStyleSheet::RulesMatching(PseudoRuleProcessorData* aData,
nsIAtom* aMedium)
{
nsIAtom* pseudoTag = aData->mPseudoTag;
if (pseudoTag == nsCSSAnonBoxes::tableCol) {
@ -853,7 +658,7 @@ HTMLStyleSheetImpl::RulesMatching(PseudoRuleProcessorData* aData,
// nsIStyleSheet api
NS_IMETHODIMP
HTMLStyleSheetImpl::GetURL(nsIURI*& aURL) const
nsHTMLStyleSheet::GetURL(nsIURI*& aURL) const
{
aURL = mURL;
NS_IF_ADDREF(aURL);
@ -861,80 +666,80 @@ HTMLStyleSheetImpl::GetURL(nsIURI*& aURL) const
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetTitle(nsString& aTitle) const
nsHTMLStyleSheet::GetTitle(nsString& aTitle) const
{
aTitle.Truncate();
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetType(nsString& aType) const
nsHTMLStyleSheet::GetType(nsString& aType) const
{
aType.Assign(NS_LITERAL_STRING("text/html"));
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetMediumCount(PRInt32& aCount) const
nsHTMLStyleSheet::GetMediumCount(PRInt32& aCount) const
{
aCount = 0;
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetMediumAt(PRInt32 aIndex, nsIAtom*& aMedium) const
nsHTMLStyleSheet::GetMediumAt(PRInt32 aIndex, nsIAtom*& aMedium) const
{
aMedium = nsnull;
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP_(PRBool)
HTMLStyleSheetImpl::UseForMedium(nsIAtom* aMedium) const
nsHTMLStyleSheet::UseForMedium(nsIAtom* aMedium) const
{
return PR_TRUE; // works for all media
}
NS_IMETHODIMP_(PRBool)
HTMLStyleSheetImpl::HasRules() const
nsHTMLStyleSheet::HasRules() const
{
return PR_TRUE; // We have rules at all reasonable times
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetApplicable(PRBool& aApplicable) const
nsHTMLStyleSheet::GetApplicable(PRBool& aApplicable) const
{
aApplicable = PR_TRUE;
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::SetEnabled(PRBool aEnabled)
nsHTMLStyleSheet::SetEnabled(PRBool aEnabled)
{ // these can't be disabled
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetComplete(PRBool& aComplete) const
nsHTMLStyleSheet::GetComplete(PRBool& aComplete) const
{
aComplete = PR_TRUE;
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::SetComplete()
nsHTMLStyleSheet::SetComplete()
{
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetParentSheet(nsIStyleSheet*& aParent) const
nsHTMLStyleSheet::GetParentSheet(nsIStyleSheet*& aParent) const
{
aParent = nsnull;
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetOwningDocument(nsIDocument*& aDocument) const
nsHTMLStyleSheet::GetOwningDocument(nsIDocument*& aDocument) const
{
aDocument = mDocument;
NS_IF_ADDREF(aDocument);
@ -942,14 +747,14 @@ HTMLStyleSheetImpl::GetOwningDocument(nsIDocument*& aDocument) const
}
NS_IMETHODIMP
HTMLStyleSheetImpl::SetOwningDocument(nsIDocument* aDocument)
nsHTMLStyleSheet::SetOwningDocument(nsIDocument* aDocument)
{
mDocument = aDocument; // not refcounted
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::Init(nsIURI* aURL, nsIDocument* aDocument)
nsresult
nsHTMLStyleSheet::Init(nsIURI* aURL, nsIDocument* aDocument)
{
NS_PRECONDITION(aURL && aDocument, "null ptr");
if (! aURL || ! aDocument)
@ -964,8 +769,8 @@ HTMLStyleSheetImpl::Init(nsIURI* aURL, nsIDocument* aDocument)
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::Reset(nsIURI* aURL)
nsresult
nsHTMLStyleSheet::Reset(nsIURI* aURL)
{
NS_IF_RELEASE(mURL);
mURL = aURL;
@ -996,8 +801,8 @@ HTMLStyleSheetImpl::Reset(nsIURI* aURL)
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetLinkColor(nscolor& aColor)
nsresult
nsHTMLStyleSheet::GetLinkColor(nscolor& aColor)
{
if (!mLinkRule) {
return NS_HTML_STYLE_PROPERTY_NOT_THERE;
@ -1008,8 +813,8 @@ HTMLStyleSheetImpl::GetLinkColor(nscolor& aColor)
}
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetActiveLinkColor(nscolor& aColor)
nsresult
nsHTMLStyleSheet::GetActiveLinkColor(nscolor& aColor)
{
if (!mActiveRule) {
return NS_HTML_STYLE_PROPERTY_NOT_THERE;
@ -1020,8 +825,8 @@ HTMLStyleSheetImpl::GetActiveLinkColor(nscolor& aColor)
}
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetVisitedLinkColor(nscolor& aColor)
nsresult
nsHTMLStyleSheet::GetVisitedLinkColor(nscolor& aColor)
{
if (!mVisitedRule) {
return NS_HTML_STYLE_PROPERTY_NOT_THERE;
@ -1032,8 +837,8 @@ HTMLStyleSheetImpl::GetVisitedLinkColor(nscolor& aColor)
}
}
NS_IMETHODIMP
HTMLStyleSheetImpl::SetLinkColor(nscolor aColor)
nsresult
nsHTMLStyleSheet::SetLinkColor(nscolor aColor)
{
if (mLinkRule) {
if (mLinkRule->mColor == aColor)
@ -1052,8 +857,8 @@ HTMLStyleSheetImpl::SetLinkColor(nscolor aColor)
}
NS_IMETHODIMP
HTMLStyleSheetImpl::SetActiveLinkColor(nscolor aColor)
nsresult
nsHTMLStyleSheet::SetActiveLinkColor(nscolor aColor)
{
if (mActiveRule) {
if (mActiveRule->mColor == aColor)
@ -1071,8 +876,8 @@ HTMLStyleSheetImpl::SetActiveLinkColor(nscolor aColor)
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::SetVisitedLinkColor(nscolor aColor)
nsresult
nsHTMLStyleSheet::SetVisitedLinkColor(nscolor aColor)
{
if (mVisitedRule) {
if (mVisitedRule->mColor == aColor)
@ -1090,37 +895,33 @@ HTMLStyleSheetImpl::SetVisitedLinkColor(nscolor aColor)
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::UniqueMappedAttributes(nsMappedAttributes* aMapped,
nsMappedAttributes*& aUniqueMapped)
already_AddRefed<nsMappedAttributes>
nsHTMLStyleSheet::UniqueMappedAttributes(nsMappedAttributes* aMapped)
{
aUniqueMapped = nsnull;
if (!mMappedAttrTable.ops) {
PRBool res = PL_DHashTableInit(&mMappedAttrTable, &MappedAttrTable_Ops,
nsnull, sizeof(MappedAttrTableEntry), 16);
if (!res) {
mMappedAttrTable.ops = nsnull;
return NS_ERROR_OUT_OF_MEMORY;
return nsnull;
}
}
MappedAttrTableEntry *entry = NS_STATIC_CAST(MappedAttrTableEntry*,
PL_DHashTableOperate(&mMappedAttrTable, aMapped, PL_DHASH_ADD));
if (!entry)
return NS_ERROR_OUT_OF_MEMORY;
return nsnull;
if (!entry->mAttributes) {
// We added a new entry to the hashtable, so we have a new unique set.
entry->mAttributes = aMapped;
}
aUniqueMapped = entry->mAttributes;
NS_ADDREF(aUniqueMapped);
return NS_OK;
NS_ADDREF(entry->mAttributes); // for caller
return entry->mAttributes;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::DropMappedAttributes(nsMappedAttributes* aMapped)
void
nsHTMLStyleSheet::DropMappedAttributes(nsMappedAttributes* aMapped)
{
NS_ENSURE_TRUE(aMapped, NS_OK);
NS_ENSURE_TRUE(aMapped, /**/);
NS_ASSERTION(mMappedAttrTable.ops, "table uninitialized");
#ifdef DEBUG
@ -1130,12 +931,10 @@ HTMLStyleSheetImpl::DropMappedAttributes(nsMappedAttributes* aMapped)
PL_DHashTableOperate(&mMappedAttrTable, aMapped, PL_DHASH_REMOVE);
NS_ASSERTION(entryCount == mMappedAttrTable.entryCount, "not removed");
return NS_OK;
}
#ifdef DEBUG
void HTMLStyleSheetImpl::List(FILE* out, PRInt32 aIndent) const
void nsHTMLStyleSheet::List(FILE* out, PRInt32 aIndent) const
{
// Indent
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
@ -1152,11 +951,11 @@ void HTMLStyleSheetImpl::List(FILE* out, PRInt32 aIndent) const
// XXX For convenience and backwards compatibility
nsresult
NS_NewHTMLStyleSheet(nsIHTMLStyleSheet** aInstancePtrResult, nsIURI* aURL,
NS_NewHTMLStyleSheet(nsHTMLStyleSheet** aInstancePtrResult, nsIURI* aURL,
nsIDocument* aDocument)
{
nsresult rv;
nsIHTMLStyleSheet* sheet;
nsHTMLStyleSheet* sheet;
if (NS_FAILED(rv = NS_NewHTMLStyleSheet(&sheet)))
return rv;
@ -1171,11 +970,11 @@ NS_NewHTMLStyleSheet(nsIHTMLStyleSheet** aInstancePtrResult, nsIURI* aURL,
nsresult
NS_NewHTMLStyleSheet(nsIHTMLStyleSheet** aInstancePtrResult)
NS_NewHTMLStyleSheet(nsHTMLStyleSheet** aInstancePtrResult)
{
NS_ASSERTION(aInstancePtrResult, "null out param");
HTMLStyleSheetImpl *it = new HTMLStyleSheetImpl();
nsHTMLStyleSheet *it = new nsHTMLStyleSheet();
if (!it) {
*aInstancePtrResult = nsnull;
return NS_ERROR_OUT_OF_MEMORY;

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

@ -0,0 +1,214 @@
/* -*- 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.
*/
#ifndef nsHTMLStyleSheet_h_
#define nsHTMLStyleSheet_h_
#include "nsIStyleSheet.h"
#include "nsIStyleRuleProcessor.h"
#include "nsIStyleRule.h"
#include "pldhash.h"
#include "nsCOMPtr.h"
class nsMappedAttributes;
class nsHTMLStyleSheet : public nsIStyleSheet, public nsIStyleRuleProcessor {
public:
nsHTMLStyleSheet(void);
nsresult Init();
NS_DECL_ISUPPORTS
// nsIStyleSheet api
NS_IMETHOD GetURL(nsIURI*& aURL) const;
NS_IMETHOD GetTitle(nsString& aTitle) const;
NS_IMETHOD GetType(nsString& aType) const;
NS_IMETHOD GetMediumCount(PRInt32& aCount) const;
NS_IMETHOD GetMediumAt(PRInt32 aIndex, nsIAtom*& aMedium) const;
NS_IMETHOD_(PRBool) UseForMedium(nsIAtom* aMedium) const;
NS_IMETHOD_(PRBool) HasRules() const;
NS_IMETHOD GetApplicable(PRBool& aApplicable) const;
NS_IMETHOD SetEnabled(PRBool aEnabled);
NS_IMETHOD GetComplete(PRBool& aComplete) const;
NS_IMETHOD SetComplete();
NS_IMETHOD GetParentSheet(nsIStyleSheet*& aParent) const; // will be null
NS_IMETHOD GetOwningDocument(nsIDocument*& aDocument) const;
NS_IMETHOD SetOwningDocument(nsIDocument* aDocumemt);
NS_IMETHOD GetStyleRuleProcessor(nsIStyleRuleProcessor*& aProcessor,
nsIStyleRuleProcessor* aPrevProcessor);
#ifdef DEBUG
virtual void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
#endif
// nsIStyleRuleProcessor API
NS_IMETHOD RulesMatching(ElementRuleProcessorData* aData,
nsIAtom* aMedium);
NS_IMETHOD RulesMatching(PseudoRuleProcessorData* aData,
nsIAtom* aMedium);
NS_IMETHOD HasStateDependentStyle(StateRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult);
NS_IMETHOD HasAttributeDependentStyle(AttributeRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult);
nsresult Init(nsIURI* aURL, nsIDocument* aDocument);
nsresult Reset(nsIURI* aURL);
nsresult GetLinkColor(nscolor& aColor);
nsresult GetActiveLinkColor(nscolor& aColor);
nsresult GetVisitedLinkColor(nscolor& aColor);
nsresult SetLinkColor(nscolor aColor);
nsresult SetActiveLinkColor(nscolor aColor);
nsresult SetVisitedLinkColor(nscolor aColor);
// Mapped Attribute management methods
already_AddRefed<nsMappedAttributes>
UniqueMappedAttributes(nsMappedAttributes* aMapped);
void DropMappedAttributes(nsMappedAttributes* aMapped);
private:
// These are not supported and are not implemented!
nsHTMLStyleSheet(const nsHTMLStyleSheet& aCopy);
nsHTMLStyleSheet& operator=(const nsHTMLStyleSheet& aCopy);
~nsHTMLStyleSheet();
class HTMLColorRule;
friend class HTMLColorRule;
class HTMLColorRule : public nsIStyleRule {
public:
HTMLColorRule(nsHTMLStyleSheet* aSheet);
virtual ~HTMLColorRule();
NS_DECL_ISUPPORTS
NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aSheet) const;
// The new mapping function.
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
#ifdef DEBUG
NS_IMETHOD List(FILE* out = stdout, PRInt32 aIndent = 0) const;
#endif
nscolor mColor;
nsHTMLStyleSheet* mSheet;
};
class GenericTableRule;
friend class GenericTableRule;
class GenericTableRule: public nsIStyleRule {
public:
GenericTableRule(nsHTMLStyleSheet* aSheet);
virtual ~GenericTableRule();
NS_DECL_ISUPPORTS
NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aSheet) const;
// The new mapping function.
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
#ifdef DEBUG
NS_IMETHOD List(FILE* out = stdout, PRInt32 aIndent = 0) const;
#endif
nsHTMLStyleSheet* mSheet; // not ref-counted, cleared by content
};
// this rule handles <th> inheritance
class TableTHRule;
friend class TableTHRule;
class TableTHRule: public GenericTableRule {
public:
TableTHRule(nsHTMLStyleSheet* aSheet);
virtual ~TableTHRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
// this rule handles borders on a <thead>, <tbody>, <tfoot> when rules
// is set on its <table>
class TableTbodyRule;
friend class TableTbodyRule;
class TableTbodyRule: public GenericTableRule {
public:
TableTbodyRule(nsHTMLStyleSheet* aSheet);
virtual ~TableTbodyRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
// this rule handles borders on a <row> when rules is set on its <table>
class TableRowRule;
friend class TableRowRule;
class TableRowRule: public GenericTableRule {
public:
TableRowRule(nsHTMLStyleSheet* aSheet);
virtual ~TableRowRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
// this rule handles borders on a <colgroup> when rules is set on its <table>
class TableColgroupRule;
friend class TableColgroupRule;
class TableColgroupRule: public GenericTableRule {
public:
TableColgroupRule(nsHTMLStyleSheet* aSheet);
virtual ~TableColgroupRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
// this rule handles borders on a <col> when rules is set on its <table>
class TableColRule;
friend class TableColRule;
class TableColRule: public GenericTableRule {
public:
TableColRule(nsHTMLStyleSheet* aSheet);
virtual ~TableColRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
nsIURI* mURL;
nsIDocument* mDocument;
HTMLColorRule* mLinkRule;
HTMLColorRule* mVisitedRule;
HTMLColorRule* mActiveRule;
HTMLColorRule* mDocumentColorRule;
TableTbodyRule* mTableTbodyRule;
TableRowRule* mTableRowRule;
TableColgroupRule* mTableColgroupRule;
TableColRule* mTableColRule;
TableTHRule* mTableTHRule;
PLDHashTable mMappedAttrTable;
};
// XXX convenience method. Calls Initialize() automatically.
nsresult
NS_NewHTMLStyleSheet(nsHTMLStyleSheet** aInstancePtrResult, nsIURI* aURL,
nsIDocument* aDocument);
nsresult
NS_NewHTMLStyleSheet(nsHTMLStyleSheet** aInstancePtrResult);
#endif /* !defined(nsHTMLStyleSheet_h_) */

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

@ -71,7 +71,7 @@
#include "nsXBLInsertionPoint.h"
#include "nsIStyleSheet.h"
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
#include "nsIHTMLCSSStyleSheet.h"
#include "nsIStyleRuleProcessor.h"

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

@ -67,8 +67,8 @@ include $(topsrcdir)/config/rules.mk
LOCAL_INCLUDES = \
-I$(srcdir) \
-I$(srcdir)/../../../xsl/document/src \
-I$(srcdir)/../../../html/base/src \
-I$(srcdir)/../../../html/document/src \
-I$(srcdir)/../../../html/style/src \
-I$(srcdir)/../../../base/src \
-I$(srcdir)/../../../xul/content/src \
$(NULL)

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

@ -52,7 +52,7 @@
#include "nsIMarkupDocumentViewer.h"
#include "nsIDocumentLoader.h"
#include "nsHTMLParts.h"
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
#include "nsIHTMLCSSStyleSheet.h"
#include "nsIComponentManager.h"
#include "nsIDOMComment.h"

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

@ -45,7 +45,7 @@
#include "nsIHttpEventSink.h"
#include "nsIDOMXMLDocument.h"
#include "nsIScriptContext.h"
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
#include "nsIHTMLCSSStyleSheet.h"
#include "nsIEventQueueService.h"

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

@ -83,7 +83,7 @@
#include "nsIEventListenerManager.h"
#include "nsIEventStateManager.h"
#include "nsIFastLoadService.h"
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
#include "nsINameSpace.h"
#include "nsINameSpaceManager.h"
#include "nsIObjectInputStream.h"

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

@ -75,9 +75,10 @@ FORCE_STATIC_LIB = 1
include $(topsrcdir)/config/rules.mk
LOCAL_INCLUDES = -I$(srcdir)/../../../base/src \
-I$(srcdir)/../../content/src \
-I$(srcdir)/../../templates/src \
-I$(srcdir)/../../../xml/document/src \
$(NULL)
-I$(srcdir)/../../content/src \
-I$(srcdir)/../../templates/src \
-I$(srcdir)/../../../html/style/src/ \
-I$(srcdir)/../../../xml/document/src \
$(NULL)
DEFINES += -D_IMPL_NS_LAYOUT

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

@ -64,7 +64,7 @@
#include "nsIDocument.h"
#include "nsIDocumentLoader.h"
#include "nsIFormControl.h"
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
#include "nsINameSpace.h"
#include "nsINameSpaceManager.h"
#include "nsINodeInfo.h"

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

@ -84,7 +84,7 @@
#include "nsIHTMLCSSStyleSheet.h"
#include "nsIHTMLContent.h"
#include "nsIHTMLFragmentContentSink.h"
#include "nsIHTMLStyleSheet.h"
#include "nsHTMLStyleSheet.h"
#include "nsIHTMLToTextSink.h"
#include "nsILayoutDebugger.h"
#include "nsINameSpaceManager.h"
@ -540,7 +540,6 @@ MAKE_CTOR(CreateNameSpaceManager, nsINameSpaceManager, NS_GetNam
MAKE_CTOR(CreateEventListenerManager, nsIEventListenerManager, NS_NewEventListenerManager)
MAKE_CTOR(CreateDOMEventGroup, nsIDOMEventGroup, NS_NewDOMEventGroup)
MAKE_CTOR(CreateDocumentViewer, nsIDocumentViewer, NS_NewDocumentViewer)
MAKE_CTOR(CreateHTMLStyleSheet, nsIHTMLStyleSheet, NS_NewHTMLStyleSheet)
MAKE_CTOR(CreateCSSStyleSheet, nsICSSStyleSheet, NS_NewCSSStyleSheet)
MAKE_CTOR(CreateHTMLDocument, nsIDocument, NS_NewHTMLDocument)
MAKE_CTOR(CreateHTMLCSSStyleSheet, nsIHTMLCSSStyleSheet, NS_NewHTMLCSSStyleSheet)
@ -935,11 +934,6 @@ static const nsModuleComponentInfo gComponents[] = {
nsnull,
CreateDocumentViewer },
{ "HTML Style Sheet",
NS_HTMLSTYLESHEET_CID,
nsnull,
CreateHTMLStyleSheet },
{ "CSS Style Sheet",
NS_CSS_STYLESHEET_CID,
nsnull,

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

@ -55,7 +55,6 @@ CPPSRCS = \
$(NULL)
EXPORTS = \
nsIHTMLStyleSheet.h \
nsCSSFrameConstructor.h \
$(NULL)

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

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

@ -27,68 +27,41 @@
* Date Modified by Description of modification
* 04/20/2000 IBM Corp. OS/2 VisualAge build.
*/
#include "nsHTMLStyleSheet.h"
#include "nsINameSpaceManager.h"
#include "nsIHTMLStyleSheet.h"
#include "nsCRT.h"
#include "nsIAtom.h"
#include "nsIURL.h"
#include "nsIServiceManager.h"
#include "nsISupportsArray.h"
#include "pldhash.h"
#include "nsMappedAttributes.h"
#include "nsILink.h"
#include "nsIStyleRuleProcessor.h"
#include "nsIStyleRule.h"
#include "nsIFrame.h"
#include "nsStyleContext.h"
#include "nsHTMLAtoms.h"
#include "nsIPresContext.h"
#include "nsIEventStateManager.h"
#include "nsIDocument.h"
#include "nsHTMLParts.h"
#include "nsIPresShell.h"
#include "nsStyleConsts.h"
#include "nsLayoutAtoms.h"
#include "nsLayoutCID.h"
#include "nsIDOMHTMLDocument.h"
#include "nsIDOMHTMLElement.h"
#include "nsCSSAnonBoxes.h"
#include "nsRuleWalker.h"
class HTMLColorRule : public nsIStyleRule {
public:
HTMLColorRule(nsIHTMLStyleSheet* aSheet);
virtual ~HTMLColorRule();
NS_DECL_ISUPPORTS
NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aSheet) const;
// The new mapping function.
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
#ifdef DEBUG
NS_IMETHOD List(FILE* out = stdout, PRInt32 aIndent = 0) const;
#endif
nscolor mColor;
nsIHTMLStyleSheet* mSheet;
};
HTMLColorRule::HTMLColorRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::HTMLColorRule::HTMLColorRule(nsHTMLStyleSheet* aSheet)
: mSheet(aSheet)
{
}
HTMLColorRule::~HTMLColorRule()
nsHTMLStyleSheet::HTMLColorRule::~HTMLColorRule()
{
}
NS_IMPL_ISUPPORTS1(HTMLColorRule, nsIStyleRule)
NS_IMPL_ISUPPORTS1(nsHTMLStyleSheet::HTMLColorRule, nsIStyleRule)
NS_IMETHODIMP
HTMLColorRule::GetStyleSheet(nsIStyleSheet*& aSheet) const
nsHTMLStyleSheet::HTMLColorRule::GetStyleSheet(nsIStyleSheet*& aSheet) const
{
NS_IF_ADDREF(mSheet);
aSheet = mSheet;
@ -96,7 +69,7 @@ HTMLColorRule::GetStyleSheet(nsIStyleSheet*& aSheet) const
}
NS_IMETHODIMP
HTMLColorRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::HTMLColorRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
if (aRuleData->mSID == eStyleStruct_Color) {
if (aRuleData->mColorData->mColor.GetUnit() == eCSSUnit_Null)
@ -107,51 +80,32 @@ HTMLColorRule::MapRuleInfoInto(nsRuleData* aRuleData)
#ifdef DEBUG
NS_IMETHODIMP
HTMLColorRule::List(FILE* out, PRInt32 aIndent) const
nsHTMLStyleSheet::HTMLColorRule::List(FILE* out, PRInt32 aIndent) const
{
return NS_OK;
}
#endif
class GenericTableRule: public nsIStyleRule {
public:
GenericTableRule(nsIHTMLStyleSheet* aSheet);
virtual ~GenericTableRule();
NS_DECL_ISUPPORTS
NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aSheet) const;
// The new mapping function.
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
#ifdef DEBUG
NS_IMETHOD List(FILE* out = stdout, PRInt32 aIndent = 0) const;
#endif
nsIHTMLStyleSheet* mSheet; // not ref-counted, cleared by content
};
GenericTableRule::GenericTableRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::GenericTableRule::GenericTableRule(nsHTMLStyleSheet* aSheet)
{
mSheet = aSheet;
}
GenericTableRule::~GenericTableRule()
nsHTMLStyleSheet::GenericTableRule::~GenericTableRule()
{
}
NS_IMPL_ISUPPORTS1(GenericTableRule, nsIStyleRule)
NS_IMPL_ISUPPORTS1(nsHTMLStyleSheet::GenericTableRule, nsIStyleRule)
NS_IMETHODIMP
GenericTableRule::GetStyleSheet(nsIStyleSheet*& aSheet) const
nsHTMLStyleSheet::GenericTableRule::GetStyleSheet(nsIStyleSheet*& aSheet) const
{
aSheet = mSheet;
return NS_OK;
}
NS_IMETHODIMP
GenericTableRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::GenericTableRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
// Nothing to do.
return NS_OK;
@ -159,29 +113,18 @@ GenericTableRule::MapRuleInfoInto(nsRuleData* aRuleData)
#ifdef DEBUG
NS_IMETHODIMP
GenericTableRule::List(FILE* out, PRInt32 aIndent) const
nsHTMLStyleSheet::GenericTableRule::List(FILE* out, PRInt32 aIndent) const
{
return NS_OK;
}
#endif
// -----------------------------------------------------------
// this rule handles <th> inheritance
// -----------------------------------------------------------
class TableTHRule: public GenericTableRule {
public:
TableTHRule(nsIHTMLStyleSheet* aSheet);
virtual ~TableTHRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
TableTHRule::TableTHRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::TableTHRule::TableTHRule(nsHTMLStyleSheet* aSheet)
: GenericTableRule(aSheet)
{
}
TableTHRule::~TableTHRule()
nsHTMLStyleSheet::TableTHRule::~TableTHRule()
{
}
@ -201,7 +144,7 @@ static void PostResolveCallback(nsStyleStruct* aStyleStruct, nsRuleData* aRuleDa
}
NS_IMETHODIMP
TableTHRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::TableTHRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
if (aRuleData && aRuleData->mSID == eStyleStruct_Text) {
aRuleData->mCanStoreInRuleTree = PR_FALSE;
@ -295,23 +238,12 @@ ProcessTableRulesAttribute(nsStyleStruct* aStyleStruct,
}
}
// -----------------------------------------------------------
// this rule handles borders on a <thead>, <tbody>, <tfoot> when rules is set on its <table>
// -----------------------------------------------------------
class TableTbodyRule: public GenericTableRule {
public:
TableTbodyRule(nsIHTMLStyleSheet* aSheet);
virtual ~TableTbodyRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
TableTbodyRule::TableTbodyRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::TableTbodyRule::TableTbodyRule(nsHTMLStyleSheet* aSheet)
: GenericTableRule(aSheet)
{
}
TableTbodyRule::~TableTbodyRule()
nsHTMLStyleSheet::TableTbodyRule::~TableTbodyRule()
{
}
@ -324,7 +256,7 @@ static void TbodyPostResolveCallback(nsStyleStruct* aStyleStruct, nsRuleData* aR
}
NS_IMETHODIMP
TableTbodyRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::TableTbodyRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
if (aRuleData && aRuleData->mSID == eStyleStruct_Border) {
aRuleData->mCanStoreInRuleTree = PR_FALSE;
@ -334,23 +266,12 @@ TableTbodyRule::MapRuleInfoInto(nsRuleData* aRuleData)
}
// -----------------------------------------------------------
// -----------------------------------------------------------
// this rule handles borders on a <row> when rules is set on its <table>
// -----------------------------------------------------------
class TableRowRule: public GenericTableRule {
public:
TableRowRule(nsIHTMLStyleSheet* aSheet);
virtual ~TableRowRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
TableRowRule::TableRowRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::TableRowRule::TableRowRule(nsHTMLStyleSheet* aSheet)
: GenericTableRule(aSheet)
{
}
TableRowRule::~TableRowRule()
nsHTMLStyleSheet::TableRowRule::~TableRowRule()
{
}
@ -363,7 +284,7 @@ static void RowPostResolveCallback(nsStyleStruct* aStyleStruct, nsRuleData* aRul
}
NS_IMETHODIMP
TableRowRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::TableRowRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
if (aRuleData && aRuleData->mSID == eStyleStruct_Border) {
aRuleData->mCanStoreInRuleTree = PR_FALSE;
@ -372,23 +293,12 @@ TableRowRule::MapRuleInfoInto(nsRuleData* aRuleData)
return NS_OK;
}
// -----------------------------------------------------------
// this rule handles borders on a <colgroup> when rules is set on its <table>
// -----------------------------------------------------------
class TableColgroupRule: public GenericTableRule {
public:
TableColgroupRule(nsIHTMLStyleSheet* aSheet);
virtual ~TableColgroupRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
TableColgroupRule::TableColgroupRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::TableColgroupRule::TableColgroupRule(nsHTMLStyleSheet* aSheet)
: GenericTableRule(aSheet)
{
}
TableColgroupRule::~TableColgroupRule()
nsHTMLStyleSheet::TableColgroupRule::~TableColgroupRule()
{
}
@ -401,7 +311,7 @@ static void ColgroupPostResolveCallback(nsStyleStruct* aStyleStruct, nsRuleData*
}
NS_IMETHODIMP
TableColgroupRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::TableColgroupRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
if (aRuleData && aRuleData->mSID == eStyleStruct_Border) {
aRuleData->mCanStoreInRuleTree = PR_FALSE;
@ -410,23 +320,12 @@ TableColgroupRule::MapRuleInfoInto(nsRuleData* aRuleData)
return NS_OK;
}
// -----------------------------------------------------------
// this rule handles borders on a <col> when rules is set on its <table>
// -----------------------------------------------------------
class TableColRule: public GenericTableRule {
public:
TableColRule(nsIHTMLStyleSheet* aSheet);
virtual ~TableColRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
TableColRule::TableColRule(nsIHTMLStyleSheet* aSheet)
nsHTMLStyleSheet::TableColRule::TableColRule(nsHTMLStyleSheet* aSheet)
: GenericTableRule(aSheet)
{
}
TableColRule::~TableColRule()
nsHTMLStyleSheet::TableColRule::~TableColRule()
{
}
@ -439,7 +338,7 @@ static void ColPostResolveCallback(nsStyleStruct* aStyleStruct, nsRuleData* aRul
}
NS_IMETHODIMP
TableColRule::MapRuleInfoInto(nsRuleData* aRuleData)
nsHTMLStyleSheet::TableColRule::MapRuleInfoInto(nsRuleData* aRuleData)
{
if (aRuleData && aRuleData->mSID == eStyleStruct_Border) {
aRuleData->mCanStoreInRuleTree = PR_FALSE;
@ -497,102 +396,8 @@ static PLDHashTableOps MappedAttrTable_Ops = {
// -----------------------------------------------------------
class HTMLStyleSheetImpl : public nsIHTMLStyleSheet,
public nsIStyleRuleProcessor {
public:
HTMLStyleSheetImpl(void);
nsresult Init();
NS_DECL_ISUPPORTS
// nsIStyleSheet api
NS_IMETHOD GetURL(nsIURI*& aURL) const;
NS_IMETHOD GetTitle(nsString& aTitle) const;
NS_IMETHOD GetType(nsString& aType) const;
NS_IMETHOD GetMediumCount(PRInt32& aCount) const;
NS_IMETHOD GetMediumAt(PRInt32 aIndex, nsIAtom*& aMedium) const;
NS_IMETHOD_(PRBool) UseForMedium(nsIAtom* aMedium) const;
NS_IMETHOD_(PRBool) HasRules() const;
NS_IMETHOD GetApplicable(PRBool& aApplicable) const;
NS_IMETHOD SetEnabled(PRBool aEnabled);
NS_IMETHOD GetComplete(PRBool& aComplete) const;
NS_IMETHOD SetComplete();
// style sheet owner info
NS_IMETHOD GetParentSheet(nsIStyleSheet*& aParent) const; // will be null
NS_IMETHOD GetOwningDocument(nsIDocument*& aDocument) const;
NS_IMETHOD SetOwningDocument(nsIDocument* aDocumemt);
NS_IMETHOD GetStyleRuleProcessor(nsIStyleRuleProcessor*& aProcessor,
nsIStyleRuleProcessor* aPrevProcessor);
// nsIStyleRuleProcessor API
NS_IMETHOD RulesMatching(ElementRuleProcessorData* aData,
nsIAtom* aMedium);
NS_IMETHOD RulesMatching(PseudoRuleProcessorData* aData,
nsIAtom* aMedium);
NS_IMETHOD HasStateDependentStyle(StateRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult);
NS_IMETHOD HasAttributeDependentStyle(AttributeRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult);
// nsIHTMLStyleSheet api
NS_IMETHOD Init(nsIURI* aURL, nsIDocument* aDocument);
NS_IMETHOD Reset(nsIURI* aURL);
NS_IMETHOD GetLinkColor(nscolor& aColor);
NS_IMETHOD GetActiveLinkColor(nscolor& aColor);
NS_IMETHOD GetVisitedLinkColor(nscolor& aColor);
NS_IMETHOD SetLinkColor(nscolor aColor);
NS_IMETHOD SetActiveLinkColor(nscolor aColor);
NS_IMETHOD SetVisitedLinkColor(nscolor aColor);
// Mapped Attribute management methods
NS_IMETHOD UniqueMappedAttributes(nsMappedAttributes* aMapped,
nsMappedAttributes*& aUniqueMapped);
NS_IMETHOD DropMappedAttributes(nsMappedAttributes* aMapped);
#ifdef DEBUG
virtual void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
#endif
private:
// These are not supported and are not implemented!
HTMLStyleSheetImpl(const HTMLStyleSheetImpl& aCopy);
HTMLStyleSheetImpl& operator=(const HTMLStyleSheetImpl& aCopy);
protected:
virtual ~HTMLStyleSheetImpl();
protected:
nsIURI* mURL;
nsIDocument* mDocument;
HTMLColorRule* mLinkRule;
HTMLColorRule* mVisitedRule;
HTMLColorRule* mActiveRule;
HTMLColorRule* mDocumentColorRule;
TableTbodyRule* mTableTbodyRule;
TableRowRule* mTableRowRule;
TableColgroupRule* mTableColgroupRule;
TableColRule* mTableColRule;
TableTHRule* mTableTHRule;
PLDHashTable mMappedAttrTable;
};
HTMLStyleSheetImpl::HTMLStyleSheetImpl(void)
: nsIHTMLStyleSheet(),
mRefCnt(0),
mURL(nsnull),
nsHTMLStyleSheet::nsHTMLStyleSheet(void)
: mURL(nsnull),
mDocument(nsnull),
mLinkRule(nsnull),
mVisitedRule(nsnull),
@ -603,7 +408,7 @@ HTMLStyleSheetImpl::HTMLStyleSheetImpl(void)
}
nsresult
HTMLStyleSheetImpl::Init()
nsHTMLStyleSheet::Init()
{
mTableTbodyRule = new TableTbodyRule(this);
if (!mTableTbodyRule)
@ -633,7 +438,7 @@ HTMLStyleSheetImpl::Init()
return NS_OK;
}
HTMLStyleSheetImpl::~HTMLStyleSheetImpl()
nsHTMLStyleSheet::~nsHTMLStyleSheet()
{
NS_IF_RELEASE(mURL);
if (nsnull != mLinkRule) {
@ -676,11 +481,11 @@ HTMLStyleSheetImpl::~HTMLStyleSheetImpl()
PL_DHashTableFinish(&mMappedAttrTable);
}
NS_IMPL_ISUPPORTS3(HTMLStyleSheetImpl, nsIHTMLStyleSheet, nsIStyleSheet, nsIStyleRuleProcessor)
NS_IMPL_ISUPPORTS2(nsHTMLStyleSheet, nsIStyleSheet, nsIStyleRuleProcessor)
NS_IMETHODIMP
HTMLStyleSheetImpl::GetStyleRuleProcessor(nsIStyleRuleProcessor*& aProcessor,
nsIStyleRuleProcessor* /*aPrevProcessor*/)
nsHTMLStyleSheet::GetStyleRuleProcessor(nsIStyleRuleProcessor*& aProcessor,
nsIStyleRuleProcessor* /*aPrevProcessor*/)
{
aProcessor = this;
NS_ADDREF(aProcessor);
@ -707,8 +512,8 @@ static nsresult GetBodyColor(nsIPresContext* aPresContext, nscolor* aColor)
}
NS_IMETHODIMP
HTMLStyleSheetImpl::RulesMatching(ElementRuleProcessorData* aData,
nsIAtom* aMedium)
nsHTMLStyleSheet::RulesMatching(ElementRuleProcessorData* aData,
nsIAtom* aMedium)
{
nsIStyledContent *styledContent = aData->mStyledContent;
@ -789,9 +594,9 @@ HTMLStyleSheetImpl::RulesMatching(ElementRuleProcessorData* aData,
// Test if style is dependent on content state
NS_IMETHODIMP
HTMLStyleSheetImpl::HasStateDependentStyle(StateRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult)
nsHTMLStyleSheet::HasStateDependentStyle(StateRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult)
{
if (mActiveRule &&
(aData->mStateMask & NS_EVENT_STATE_ACTIVE) &&
@ -807,9 +612,9 @@ HTMLStyleSheetImpl::HasStateDependentStyle(StateRuleProcessorData* aData,
}
NS_IMETHODIMP
HTMLStyleSheetImpl::HasAttributeDependentStyle(AttributeRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult)
nsHTMLStyleSheet::HasAttributeDependentStyle(AttributeRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult)
{
// Result is true for |href| changes on HTML links if we have link rules.
nsIStyledContent *styledContent = aData->mStyledContent;
@ -837,8 +642,8 @@ HTMLStyleSheetImpl::HasAttributeDependentStyle(AttributeRuleProcessorData* aData
NS_IMETHODIMP
HTMLStyleSheetImpl::RulesMatching(PseudoRuleProcessorData* aData,
nsIAtom* aMedium)
nsHTMLStyleSheet::RulesMatching(PseudoRuleProcessorData* aData,
nsIAtom* aMedium)
{
nsIAtom* pseudoTag = aData->mPseudoTag;
if (pseudoTag == nsCSSAnonBoxes::tableCol) {
@ -853,7 +658,7 @@ HTMLStyleSheetImpl::RulesMatching(PseudoRuleProcessorData* aData,
// nsIStyleSheet api
NS_IMETHODIMP
HTMLStyleSheetImpl::GetURL(nsIURI*& aURL) const
nsHTMLStyleSheet::GetURL(nsIURI*& aURL) const
{
aURL = mURL;
NS_IF_ADDREF(aURL);
@ -861,80 +666,80 @@ HTMLStyleSheetImpl::GetURL(nsIURI*& aURL) const
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetTitle(nsString& aTitle) const
nsHTMLStyleSheet::GetTitle(nsString& aTitle) const
{
aTitle.Truncate();
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetType(nsString& aType) const
nsHTMLStyleSheet::GetType(nsString& aType) const
{
aType.Assign(NS_LITERAL_STRING("text/html"));
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetMediumCount(PRInt32& aCount) const
nsHTMLStyleSheet::GetMediumCount(PRInt32& aCount) const
{
aCount = 0;
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetMediumAt(PRInt32 aIndex, nsIAtom*& aMedium) const
nsHTMLStyleSheet::GetMediumAt(PRInt32 aIndex, nsIAtom*& aMedium) const
{
aMedium = nsnull;
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP_(PRBool)
HTMLStyleSheetImpl::UseForMedium(nsIAtom* aMedium) const
nsHTMLStyleSheet::UseForMedium(nsIAtom* aMedium) const
{
return PR_TRUE; // works for all media
}
NS_IMETHODIMP_(PRBool)
HTMLStyleSheetImpl::HasRules() const
nsHTMLStyleSheet::HasRules() const
{
return PR_TRUE; // We have rules at all reasonable times
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetApplicable(PRBool& aApplicable) const
nsHTMLStyleSheet::GetApplicable(PRBool& aApplicable) const
{
aApplicable = PR_TRUE;
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::SetEnabled(PRBool aEnabled)
nsHTMLStyleSheet::SetEnabled(PRBool aEnabled)
{ // these can't be disabled
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetComplete(PRBool& aComplete) const
nsHTMLStyleSheet::GetComplete(PRBool& aComplete) const
{
aComplete = PR_TRUE;
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::SetComplete()
nsHTMLStyleSheet::SetComplete()
{
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetParentSheet(nsIStyleSheet*& aParent) const
nsHTMLStyleSheet::GetParentSheet(nsIStyleSheet*& aParent) const
{
aParent = nsnull;
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetOwningDocument(nsIDocument*& aDocument) const
nsHTMLStyleSheet::GetOwningDocument(nsIDocument*& aDocument) const
{
aDocument = mDocument;
NS_IF_ADDREF(aDocument);
@ -942,14 +747,14 @@ HTMLStyleSheetImpl::GetOwningDocument(nsIDocument*& aDocument) const
}
NS_IMETHODIMP
HTMLStyleSheetImpl::SetOwningDocument(nsIDocument* aDocument)
nsHTMLStyleSheet::SetOwningDocument(nsIDocument* aDocument)
{
mDocument = aDocument; // not refcounted
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::Init(nsIURI* aURL, nsIDocument* aDocument)
nsresult
nsHTMLStyleSheet::Init(nsIURI* aURL, nsIDocument* aDocument)
{
NS_PRECONDITION(aURL && aDocument, "null ptr");
if (! aURL || ! aDocument)
@ -964,8 +769,8 @@ HTMLStyleSheetImpl::Init(nsIURI* aURL, nsIDocument* aDocument)
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::Reset(nsIURI* aURL)
nsresult
nsHTMLStyleSheet::Reset(nsIURI* aURL)
{
NS_IF_RELEASE(mURL);
mURL = aURL;
@ -996,8 +801,8 @@ HTMLStyleSheetImpl::Reset(nsIURI* aURL)
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetLinkColor(nscolor& aColor)
nsresult
nsHTMLStyleSheet::GetLinkColor(nscolor& aColor)
{
if (!mLinkRule) {
return NS_HTML_STYLE_PROPERTY_NOT_THERE;
@ -1008,8 +813,8 @@ HTMLStyleSheetImpl::GetLinkColor(nscolor& aColor)
}
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetActiveLinkColor(nscolor& aColor)
nsresult
nsHTMLStyleSheet::GetActiveLinkColor(nscolor& aColor)
{
if (!mActiveRule) {
return NS_HTML_STYLE_PROPERTY_NOT_THERE;
@ -1020,8 +825,8 @@ HTMLStyleSheetImpl::GetActiveLinkColor(nscolor& aColor)
}
}
NS_IMETHODIMP
HTMLStyleSheetImpl::GetVisitedLinkColor(nscolor& aColor)
nsresult
nsHTMLStyleSheet::GetVisitedLinkColor(nscolor& aColor)
{
if (!mVisitedRule) {
return NS_HTML_STYLE_PROPERTY_NOT_THERE;
@ -1032,8 +837,8 @@ HTMLStyleSheetImpl::GetVisitedLinkColor(nscolor& aColor)
}
}
NS_IMETHODIMP
HTMLStyleSheetImpl::SetLinkColor(nscolor aColor)
nsresult
nsHTMLStyleSheet::SetLinkColor(nscolor aColor)
{
if (mLinkRule) {
if (mLinkRule->mColor == aColor)
@ -1052,8 +857,8 @@ HTMLStyleSheetImpl::SetLinkColor(nscolor aColor)
}
NS_IMETHODIMP
HTMLStyleSheetImpl::SetActiveLinkColor(nscolor aColor)
nsresult
nsHTMLStyleSheet::SetActiveLinkColor(nscolor aColor)
{
if (mActiveRule) {
if (mActiveRule->mColor == aColor)
@ -1071,8 +876,8 @@ HTMLStyleSheetImpl::SetActiveLinkColor(nscolor aColor)
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::SetVisitedLinkColor(nscolor aColor)
nsresult
nsHTMLStyleSheet::SetVisitedLinkColor(nscolor aColor)
{
if (mVisitedRule) {
if (mVisitedRule->mColor == aColor)
@ -1090,37 +895,33 @@ HTMLStyleSheetImpl::SetVisitedLinkColor(nscolor aColor)
return NS_OK;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::UniqueMappedAttributes(nsMappedAttributes* aMapped,
nsMappedAttributes*& aUniqueMapped)
already_AddRefed<nsMappedAttributes>
nsHTMLStyleSheet::UniqueMappedAttributes(nsMappedAttributes* aMapped)
{
aUniqueMapped = nsnull;
if (!mMappedAttrTable.ops) {
PRBool res = PL_DHashTableInit(&mMappedAttrTable, &MappedAttrTable_Ops,
nsnull, sizeof(MappedAttrTableEntry), 16);
if (!res) {
mMappedAttrTable.ops = nsnull;
return NS_ERROR_OUT_OF_MEMORY;
return nsnull;
}
}
MappedAttrTableEntry *entry = NS_STATIC_CAST(MappedAttrTableEntry*,
PL_DHashTableOperate(&mMappedAttrTable, aMapped, PL_DHASH_ADD));
if (!entry)
return NS_ERROR_OUT_OF_MEMORY;
return nsnull;
if (!entry->mAttributes) {
// We added a new entry to the hashtable, so we have a new unique set.
entry->mAttributes = aMapped;
}
aUniqueMapped = entry->mAttributes;
NS_ADDREF(aUniqueMapped);
return NS_OK;
NS_ADDREF(entry->mAttributes); // for caller
return entry->mAttributes;
}
NS_IMETHODIMP
HTMLStyleSheetImpl::DropMappedAttributes(nsMappedAttributes* aMapped)
void
nsHTMLStyleSheet::DropMappedAttributes(nsMappedAttributes* aMapped)
{
NS_ENSURE_TRUE(aMapped, NS_OK);
NS_ENSURE_TRUE(aMapped, /**/);
NS_ASSERTION(mMappedAttrTable.ops, "table uninitialized");
#ifdef DEBUG
@ -1130,12 +931,10 @@ HTMLStyleSheetImpl::DropMappedAttributes(nsMappedAttributes* aMapped)
PL_DHashTableOperate(&mMappedAttrTable, aMapped, PL_DHASH_REMOVE);
NS_ASSERTION(entryCount == mMappedAttrTable.entryCount, "not removed");
return NS_OK;
}
#ifdef DEBUG
void HTMLStyleSheetImpl::List(FILE* out, PRInt32 aIndent) const
void nsHTMLStyleSheet::List(FILE* out, PRInt32 aIndent) const
{
// Indent
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
@ -1152,11 +951,11 @@ void HTMLStyleSheetImpl::List(FILE* out, PRInt32 aIndent) const
// XXX For convenience and backwards compatibility
nsresult
NS_NewHTMLStyleSheet(nsIHTMLStyleSheet** aInstancePtrResult, nsIURI* aURL,
NS_NewHTMLStyleSheet(nsHTMLStyleSheet** aInstancePtrResult, nsIURI* aURL,
nsIDocument* aDocument)
{
nsresult rv;
nsIHTMLStyleSheet* sheet;
nsHTMLStyleSheet* sheet;
if (NS_FAILED(rv = NS_NewHTMLStyleSheet(&sheet)))
return rv;
@ -1171,11 +970,11 @@ NS_NewHTMLStyleSheet(nsIHTMLStyleSheet** aInstancePtrResult, nsIURI* aURL,
nsresult
NS_NewHTMLStyleSheet(nsIHTMLStyleSheet** aInstancePtrResult)
NS_NewHTMLStyleSheet(nsHTMLStyleSheet** aInstancePtrResult)
{
NS_ASSERTION(aInstancePtrResult, "null out param");
HTMLStyleSheetImpl *it = new HTMLStyleSheetImpl();
nsHTMLStyleSheet *it = new nsHTMLStyleSheet();
if (!it) {
*aInstancePtrResult = nsnull;
return NS_ERROR_OUT_OF_MEMORY;

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

@ -0,0 +1,214 @@
/* -*- 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.
*/
#ifndef nsHTMLStyleSheet_h_
#define nsHTMLStyleSheet_h_
#include "nsIStyleSheet.h"
#include "nsIStyleRuleProcessor.h"
#include "nsIStyleRule.h"
#include "pldhash.h"
#include "nsCOMPtr.h"
class nsMappedAttributes;
class nsHTMLStyleSheet : public nsIStyleSheet, public nsIStyleRuleProcessor {
public:
nsHTMLStyleSheet(void);
nsresult Init();
NS_DECL_ISUPPORTS
// nsIStyleSheet api
NS_IMETHOD GetURL(nsIURI*& aURL) const;
NS_IMETHOD GetTitle(nsString& aTitle) const;
NS_IMETHOD GetType(nsString& aType) const;
NS_IMETHOD GetMediumCount(PRInt32& aCount) const;
NS_IMETHOD GetMediumAt(PRInt32 aIndex, nsIAtom*& aMedium) const;
NS_IMETHOD_(PRBool) UseForMedium(nsIAtom* aMedium) const;
NS_IMETHOD_(PRBool) HasRules() const;
NS_IMETHOD GetApplicable(PRBool& aApplicable) const;
NS_IMETHOD SetEnabled(PRBool aEnabled);
NS_IMETHOD GetComplete(PRBool& aComplete) const;
NS_IMETHOD SetComplete();
NS_IMETHOD GetParentSheet(nsIStyleSheet*& aParent) const; // will be null
NS_IMETHOD GetOwningDocument(nsIDocument*& aDocument) const;
NS_IMETHOD SetOwningDocument(nsIDocument* aDocumemt);
NS_IMETHOD GetStyleRuleProcessor(nsIStyleRuleProcessor*& aProcessor,
nsIStyleRuleProcessor* aPrevProcessor);
#ifdef DEBUG
virtual void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
#endif
// nsIStyleRuleProcessor API
NS_IMETHOD RulesMatching(ElementRuleProcessorData* aData,
nsIAtom* aMedium);
NS_IMETHOD RulesMatching(PseudoRuleProcessorData* aData,
nsIAtom* aMedium);
NS_IMETHOD HasStateDependentStyle(StateRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult);
NS_IMETHOD HasAttributeDependentStyle(AttributeRuleProcessorData* aData,
nsIAtom* aMedium,
nsReStyleHint* aResult);
nsresult Init(nsIURI* aURL, nsIDocument* aDocument);
nsresult Reset(nsIURI* aURL);
nsresult GetLinkColor(nscolor& aColor);
nsresult GetActiveLinkColor(nscolor& aColor);
nsresult GetVisitedLinkColor(nscolor& aColor);
nsresult SetLinkColor(nscolor aColor);
nsresult SetActiveLinkColor(nscolor aColor);
nsresult SetVisitedLinkColor(nscolor aColor);
// Mapped Attribute management methods
already_AddRefed<nsMappedAttributes>
UniqueMappedAttributes(nsMappedAttributes* aMapped);
void DropMappedAttributes(nsMappedAttributes* aMapped);
private:
// These are not supported and are not implemented!
nsHTMLStyleSheet(const nsHTMLStyleSheet& aCopy);
nsHTMLStyleSheet& operator=(const nsHTMLStyleSheet& aCopy);
~nsHTMLStyleSheet();
class HTMLColorRule;
friend class HTMLColorRule;
class HTMLColorRule : public nsIStyleRule {
public:
HTMLColorRule(nsHTMLStyleSheet* aSheet);
virtual ~HTMLColorRule();
NS_DECL_ISUPPORTS
NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aSheet) const;
// The new mapping function.
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
#ifdef DEBUG
NS_IMETHOD List(FILE* out = stdout, PRInt32 aIndent = 0) const;
#endif
nscolor mColor;
nsHTMLStyleSheet* mSheet;
};
class GenericTableRule;
friend class GenericTableRule;
class GenericTableRule: public nsIStyleRule {
public:
GenericTableRule(nsHTMLStyleSheet* aSheet);
virtual ~GenericTableRule();
NS_DECL_ISUPPORTS
NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aSheet) const;
// The new mapping function.
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
#ifdef DEBUG
NS_IMETHOD List(FILE* out = stdout, PRInt32 aIndent = 0) const;
#endif
nsHTMLStyleSheet* mSheet; // not ref-counted, cleared by content
};
// this rule handles <th> inheritance
class TableTHRule;
friend class TableTHRule;
class TableTHRule: public GenericTableRule {
public:
TableTHRule(nsHTMLStyleSheet* aSheet);
virtual ~TableTHRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
// this rule handles borders on a <thead>, <tbody>, <tfoot> when rules
// is set on its <table>
class TableTbodyRule;
friend class TableTbodyRule;
class TableTbodyRule: public GenericTableRule {
public:
TableTbodyRule(nsHTMLStyleSheet* aSheet);
virtual ~TableTbodyRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
// this rule handles borders on a <row> when rules is set on its <table>
class TableRowRule;
friend class TableRowRule;
class TableRowRule: public GenericTableRule {
public:
TableRowRule(nsHTMLStyleSheet* aSheet);
virtual ~TableRowRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
// this rule handles borders on a <colgroup> when rules is set on its <table>
class TableColgroupRule;
friend class TableColgroupRule;
class TableColgroupRule: public GenericTableRule {
public:
TableColgroupRule(nsHTMLStyleSheet* aSheet);
virtual ~TableColgroupRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
// this rule handles borders on a <col> when rules is set on its <table>
class TableColRule;
friend class TableColRule;
class TableColRule: public GenericTableRule {
public:
TableColRule(nsHTMLStyleSheet* aSheet);
virtual ~TableColRule();
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
nsIURI* mURL;
nsIDocument* mDocument;
HTMLColorRule* mLinkRule;
HTMLColorRule* mVisitedRule;
HTMLColorRule* mActiveRule;
HTMLColorRule* mDocumentColorRule;
TableTbodyRule* mTableTbodyRule;
TableRowRule* mTableRowRule;
TableColgroupRule* mTableColgroupRule;
TableColRule* mTableColRule;
TableTHRule* mTableTHRule;
PLDHashTable mMappedAttrTable;
};
// XXX convenience method. Calls Initialize() automatically.
nsresult
NS_NewHTMLStyleSheet(nsHTMLStyleSheet** aInstancePtrResult, nsIURI* aURL,
nsIDocument* aDocument);
nsresult
NS_NewHTMLStyleSheet(nsHTMLStyleSheet** aInstancePtrResult);
#endif /* !defined(nsHTMLStyleSheet_h_) */