layout/style/nsHTMLStyleSheet.h

branch
TOR_BUG_9701
changeset 3
141e0f1194b1
equal deleted inserted replaced
-1:000000000000 0:25e4169d2ca8
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 *
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7 /*
8 * style sheet and style rule processor representing data from presentational
9 * HTML attributes
10 */
11
12 #ifndef nsHTMLStyleSheet_h_
13 #define nsHTMLStyleSheet_h_
14
15 #include "nsAutoPtr.h"
16 #include "nsColor.h"
17 #include "nsCOMPtr.h"
18 #include "nsIStyleRule.h"
19 #include "nsIStyleRuleProcessor.h"
20 #include "pldhash.h"
21 #include "mozilla/Attributes.h"
22 #include "mozilla/MemoryReporting.h"
23 #include "nsString.h"
24
25 class nsIDocument;
26 class nsMappedAttributes;
27
28 class nsHTMLStyleSheet MOZ_FINAL : public nsIStyleRuleProcessor
29 {
30 public:
31 nsHTMLStyleSheet(nsIDocument* aDocument);
32
33 void SetOwningDocument(nsIDocument* aDocument);
34
35 NS_DECL_ISUPPORTS
36
37 // nsIStyleRuleProcessor API
38 virtual void RulesMatching(ElementRuleProcessorData* aData) MOZ_OVERRIDE;
39 virtual void RulesMatching(PseudoElementRuleProcessorData* aData) MOZ_OVERRIDE;
40 virtual void RulesMatching(AnonBoxRuleProcessorData* aData) MOZ_OVERRIDE;
41 #ifdef MOZ_XUL
42 virtual void RulesMatching(XULTreeRuleProcessorData* aData) MOZ_OVERRIDE;
43 #endif
44 virtual nsRestyleHint HasStateDependentStyle(StateRuleProcessorData* aData) MOZ_OVERRIDE;
45 virtual nsRestyleHint HasStateDependentStyle(PseudoElementStateRuleProcessorData* aData) MOZ_OVERRIDE;
46 virtual bool HasDocumentStateDependentStyle(StateRuleProcessorData* aData) MOZ_OVERRIDE;
47 virtual nsRestyleHint
48 HasAttributeDependentStyle(AttributeRuleProcessorData* aData) MOZ_OVERRIDE;
49 virtual bool MediumFeaturesChanged(nsPresContext* aPresContext) MOZ_OVERRIDE;
50 virtual size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf)
51 const MOZ_MUST_OVERRIDE MOZ_OVERRIDE;
52 virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf)
53 const MOZ_MUST_OVERRIDE MOZ_OVERRIDE;
54 size_t DOMSizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
55
56 void Reset();
57 nsresult SetLinkColor(nscolor aColor);
58 nsresult SetActiveLinkColor(nscolor aColor);
59 nsresult SetVisitedLinkColor(nscolor aColor);
60
61 // Mapped Attribute management methods
62 already_AddRefed<nsMappedAttributes>
63 UniqueMappedAttributes(nsMappedAttributes* aMapped);
64 void DropMappedAttributes(nsMappedAttributes* aMapped);
65
66 nsIStyleRule* LangRuleFor(const nsString& aLanguage);
67
68 private:
69 nsHTMLStyleSheet(const nsHTMLStyleSheet& aCopy) MOZ_DELETE;
70 nsHTMLStyleSheet& operator=(const nsHTMLStyleSheet& aCopy) MOZ_DELETE;
71
72 ~nsHTMLStyleSheet();
73
74 class HTMLColorRule;
75 friend class HTMLColorRule;
76 class HTMLColorRule MOZ_FINAL : public nsIStyleRule {
77 public:
78 HTMLColorRule() {}
79
80 NS_DECL_ISUPPORTS
81
82 // nsIStyleRule interface
83 virtual void MapRuleInfoInto(nsRuleData* aRuleData) MOZ_OVERRIDE;
84 #ifdef DEBUG
85 virtual void List(FILE* out = stdout, int32_t aIndent = 0) const MOZ_OVERRIDE;
86 #endif
87
88 nscolor mColor;
89 };
90
91 // Implementation of SetLink/VisitedLink/ActiveLinkColor
92 nsresult ImplLinkColorSetter(nsRefPtr<HTMLColorRule>& aRule, nscolor aColor);
93
94 class GenericTableRule;
95 friend class GenericTableRule;
96 class GenericTableRule : public nsIStyleRule {
97 public:
98 GenericTableRule() {}
99 virtual ~GenericTableRule() {}
100
101 NS_DECL_ISUPPORTS
102
103 // nsIStyleRule interface
104 virtual void MapRuleInfoInto(nsRuleData* aRuleData) MOZ_OVERRIDE = 0;
105 #ifdef DEBUG
106 virtual void List(FILE* out = stdout, int32_t aIndent = 0) const MOZ_OVERRIDE;
107 #endif
108 };
109
110 // this rule handles <th> inheritance
111 class TableTHRule;
112 friend class TableTHRule;
113 class TableTHRule MOZ_FINAL : public GenericTableRule {
114 public:
115 TableTHRule() {}
116
117 virtual void MapRuleInfoInto(nsRuleData* aRuleData) MOZ_OVERRIDE;
118 };
119
120 // Rule to handle quirk table colors
121 class TableQuirkColorRule MOZ_FINAL : public GenericTableRule {
122 public:
123 TableQuirkColorRule() {}
124
125 virtual void MapRuleInfoInto(nsRuleData* aRuleData) MOZ_OVERRIDE;
126 };
127
128 public: // for mLangRuleTable structures only
129
130 // Rule to handle xml:lang attributes, of which we have exactly one
131 // per language string, maintained in mLangRuleTable.
132 class LangRule MOZ_FINAL : public nsIStyleRule {
133 public:
134 LangRule(const nsSubstring& aLang) : mLang(aLang) {}
135
136 NS_DECL_ISUPPORTS
137
138 // nsIStyleRule interface
139 virtual void MapRuleInfoInto(nsRuleData* aRuleData) MOZ_OVERRIDE;
140 #ifdef DEBUG
141 virtual void List(FILE* out = stdout, int32_t aIndent = 0) const MOZ_OVERRIDE;
142 #endif
143
144 nsString mLang;
145 };
146
147 private:
148 nsIDocument* mDocument;
149 nsRefPtr<HTMLColorRule> mLinkRule;
150 nsRefPtr<HTMLColorRule> mVisitedRule;
151 nsRefPtr<HTMLColorRule> mActiveRule;
152 nsRefPtr<TableQuirkColorRule> mTableQuirkColorRule;
153 nsRefPtr<TableTHRule> mTableTHRule;
154
155 PLDHashTable mMappedAttrTable;
156 PLDHashTable mLangRuleTable;
157 };
158
159 #endif /* !defined(nsHTMLStyleSheet_h_) */

mercurial