diff --git a/mozilla/content/html/style/src/nsCSSDeclaration.cpp b/mozilla/content/html/style/src/nsCSSDeclaration.cpp
index 945f4bb3114..0da611fecf8 100644
--- a/mozilla/content/html/style/src/nsCSSDeclaration.cpp
+++ b/mozilla/content/html/style/src/nsCSSDeclaration.cpp
@@ -188,325 +188,15 @@ static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID);
static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID);
static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID);
static NS_DEFINE_IID(kCSSListSID, NS_CSS_LIST_SID);
+static NS_DEFINE_IID(kCSSTableSID, NS_CSS_TABLE_SID);
+static NS_DEFINE_IID(kCSSBreaksSID, NS_CSS_BREAKS_SID);
+static NS_DEFINE_IID(kCSSPageSID, NS_CSS_PAGE_SID);
+static NS_DEFINE_IID(kCSSContentSID, NS_CSS_CONTENT_SID);
+static NS_DEFINE_IID(kCSSAuralSID, NS_CSS_AURAL_SID);
static NS_DEFINE_IID(kICSSDeclarationIID, NS_ICSS_DECLARATION_IID);
-nsCSSValue::nsCSSValue(nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION(mUnit <= eCSSUnit_Normal, "not a valueless unit");
- if (aUnit > eCSSUnit_Normal) {
- mUnit = eCSSUnit_Null;
- }
- mValue.mInt = 0;
-}
-
-nsCSSValue::nsCSSValue(PRInt32 aValue, nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit), "not an int value");
- if ((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit)) {
- mValue.mInt = aValue;
- }
- else {
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
- }
-}
-
-nsCSSValue::nsCSSValue(float aValue, nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION(eCSSUnit_Percent <= aUnit, "not a float value");
- if (eCSSUnit_Percent <= aUnit) {
- mValue.mFloat = aValue;
- }
- else {
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
- }
-}
-
-nsCSSValue::nsCSSValue(const nsString& aValue)
- : mUnit(eCSSUnit_String)
-{
- mValue.mString = aValue.ToNewString();
-}
-
-nsCSSValue::nsCSSValue(nscolor aValue)
- : mUnit(eCSSUnit_Color)
-{
- mValue.mColor = aValue;
-}
-
-nsCSSValue::nsCSSValue(const nsCSSValue& aCopy)
- : mUnit(aCopy.mUnit)
-{
- if (eCSSUnit_String == mUnit) {
- if (nsnull != aCopy.mValue.mString) {
- mValue.mString = (aCopy.mValue.mString)->ToNewString();
- }
- else {
- mValue.mString = nsnull;
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- mValue.mInt = aCopy.mValue.mInt;
- }
- else if (eCSSUnit_Color == mUnit){
- mValue.mColor = aCopy.mValue.mColor;
- }
- else {
- mValue.mFloat = aCopy.mValue.mFloat;
- }
-}
-
-nsCSSValue::~nsCSSValue(void)
-{
- Reset();
-}
-
-nsCSSValue& nsCSSValue::operator=(const nsCSSValue& aCopy)
-{
- Reset();
- mUnit = aCopy.mUnit;
- if (eCSSUnit_String == mUnit) {
- if (nsnull != aCopy.mValue.mString) {
- mValue.mString = (aCopy.mValue.mString)->ToNewString();
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- mValue.mInt = aCopy.mValue.mInt;
- }
- else if (eCSSUnit_Color == mUnit){
- mValue.mColor = aCopy.mValue.mColor;
- }
- else {
- mValue.mFloat = aCopy.mValue.mFloat;
- }
- return *this;
-}
-
-PRBool nsCSSValue::operator==(const nsCSSValue& aOther) const
-{
- if (mUnit == aOther.mUnit) {
- if (eCSSUnit_String == mUnit) {
- if (nsnull == mValue.mString) {
- if (nsnull == aOther.mValue.mString) {
- return PR_TRUE;
- }
- }
- else if (nsnull != aOther.mValue.mString) {
- return mValue.mString->Equals(*(aOther.mValue.mString));
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- return PRBool(mValue.mInt == aOther.mValue.mInt);
- }
- else if (eCSSUnit_Color == mUnit){
- return PRBool(mValue.mColor == aOther.mValue.mColor);
- }
- else {
- return PRBool(mValue.mFloat == aOther.mValue.mFloat);
- }
- }
- return PR_FALSE;
-}
-
-nscoord nsCSSValue::GetLengthTwips(void) const
-{
- NS_ASSERTION(IsFixedLengthUnit(), "not a fixed length unit");
-
- if (IsFixedLengthUnit()) {
- switch (mUnit) {
- case eCSSUnit_Inch:
- return NS_INCHES_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Foot:
- return NS_FEET_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Mile:
- return NS_MILES_TO_TWIPS(mValue.mFloat);
-
- case eCSSUnit_Millimeter:
- return NS_MILLIMETERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Centimeter:
- return NS_CENTIMETERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Meter:
- return NS_METERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Kilometer:
- return NS_KILOMETERS_TO_TWIPS(mValue.mFloat);
-
- case eCSSUnit_Point:
- return NSFloatPointsToTwips(mValue.mFloat);
- case eCSSUnit_Pica:
- return NS_PICAS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Didot:
- return NS_DIDOTS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Cicero:
- return NS_CICEROS_TO_TWIPS(mValue.mFloat);
- }
- }
- return 0;
-}
-
-void nsCSSValue::Reset(void)
-{
- if ((eCSSUnit_String == mUnit) && (nsnull != mValue.mString)) {
- delete mValue.mString;
- }
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
-};
-
-void nsCSSValue::SetIntValue(PRInt32 aValue, nsCSSUnit aUnit)
-{
- NS_ASSERTION((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit), "not an int value");
- Reset();
- if ((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit)) {
- mUnit = aUnit;
- mValue.mInt = aValue;
- }
-}
-
-void nsCSSValue::SetPercentValue(float aValue)
-{
- Reset();
- mUnit = eCSSUnit_Percent;
- mValue.mFloat = aValue;
-}
-
-void nsCSSValue::SetFloatValue(float aValue, nsCSSUnit aUnit)
-{
- NS_ASSERTION(eCSSUnit_Number <= aUnit, "not a float value");
- Reset();
- if (eCSSUnit_Number <= aUnit) {
- mUnit = aUnit;
- mValue.mFloat = aValue;
- }
-}
-
-void nsCSSValue::SetStringValue(const nsString& aValue)
-{
- Reset();
- mUnit = eCSSUnit_String;
- mValue.mString = aValue.ToNewString();
-}
-
-void nsCSSValue::SetColorValue(nscolor aValue)
-{
- Reset();
- mUnit = eCSSUnit_Color;
- mValue.mColor = aValue;
-}
-
-void nsCSSValue::SetAutoValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Auto;
-}
-
-void nsCSSValue::SetInheritValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Inherit;
-}
-
-void nsCSSValue::SetNoneValue(void)
-{
- Reset();
- mUnit = eCSSUnit_None;
-}
-
-void nsCSSValue::SetNormalValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Normal;
-}
-
-void nsCSSValue::AppendToString(nsString& aBuffer, PRInt32 aPropID) const
-{
- if (eCSSUnit_Null == mUnit) {
- return;
- }
-
- if (-1 < aPropID) {
- aBuffer.Append(nsCSSProps::kNameTable[aPropID].name);
- aBuffer.Append(": ");
- }
-
- if (eCSSUnit_String == mUnit) {
- if (nsnull != mValue.mString) {
- aBuffer.Append('"');
- aBuffer.Append(*(mValue.mString));
- aBuffer.Append('"');
- }
- else {
- aBuffer.Append("null str");
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- aBuffer.Append(mValue.mInt, 10);
- aBuffer.Append("[0x");
- aBuffer.Append(mValue.mInt, 16);
- aBuffer.Append(']');
- }
- else if (eCSSUnit_Color == mUnit){
- aBuffer.Append("(0x");
- aBuffer.Append(NS_GET_R(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_G(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_B(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_A(mValue.mColor), 16);
- aBuffer.Append(')');
- }
- else if (eCSSUnit_Percent == mUnit) {
- aBuffer.Append(mValue.mFloat * 100.0f);
- }
- else if (eCSSUnit_Percent < mUnit) {
- aBuffer.Append(mValue.mFloat);
- }
-
- switch (mUnit) {
- case eCSSUnit_Null: break;
- case eCSSUnit_Auto: aBuffer.Append("auto"); break;
- case eCSSUnit_Inherit: aBuffer.Append("inherit"); break;
- case eCSSUnit_None: aBuffer.Append("none"); break;
- case eCSSUnit_String: break;
- case eCSSUnit_Integer: aBuffer.Append("int"); break;
- case eCSSUnit_Enumerated: aBuffer.Append("enum"); break;
- case eCSSUnit_Color: aBuffer.Append("rbga"); break;
- case eCSSUnit_Percent: aBuffer.Append("%"); break;
- case eCSSUnit_Number: aBuffer.Append("#"); break;
- case eCSSUnit_Inch: aBuffer.Append("in"); break;
- case eCSSUnit_Foot: aBuffer.Append("ft"); break;
- case eCSSUnit_Mile: aBuffer.Append("mi"); break;
- case eCSSUnit_Millimeter: aBuffer.Append("mm"); break;
- case eCSSUnit_Centimeter: aBuffer.Append("cm"); break;
- case eCSSUnit_Meter: aBuffer.Append("m"); break;
- case eCSSUnit_Kilometer: aBuffer.Append("km"); break;
- case eCSSUnit_Point: aBuffer.Append("pt"); break;
- case eCSSUnit_Pica: aBuffer.Append("pc"); break;
- case eCSSUnit_Didot: aBuffer.Append("dt"); break;
- case eCSSUnit_Cicero: aBuffer.Append("cc"); break;
- case eCSSUnit_EM: aBuffer.Append("em"); break;
- case eCSSUnit_EN: aBuffer.Append("en"); break;
- case eCSSUnit_XHeight: aBuffer.Append("ex"); break;
- case eCSSUnit_CapHeight: aBuffer.Append("cap"); break;
- case eCSSUnit_Pixel: aBuffer.Append("px"); break;
- }
- aBuffer.Append(' ');
-}
-
-void nsCSSValue::ToString(nsString& aBuffer, PRInt32 aPropID) const
-{
- aBuffer.Truncate();
- AppendToString(aBuffer, aPropID);
-}
+// --- nsCSSFont -----------------
const nsID& nsCSSFont::GetID(void)
{
@@ -524,10 +214,14 @@ void nsCSSFont::List(FILE* out, PRInt32 aIndent) const
mVariant.AppendToString(buffer, PROP_FONT_VARIANT);
mWeight.AppendToString(buffer, PROP_FONT_WEIGHT);
mSize.AppendToString(buffer, PROP_FONT_SIZE);
+ mSizeAdjust.AppendToString(buffer, PROP_FONT_SIZE_ADJUST);
+ mStretch.AppendToString(buffer, PROP_FONT_STRETCH);
fputs(buffer, out);
}
+// --- nsCSSColor -----------------
+
const nsID& nsCSSColor::GetID(void)
{
return kCSSColorSID;
@@ -553,6 +247,34 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSText -----------------
+
+nsCSSShadow::nsCSSShadow(void)
+ : mNext(nsnull)
+{
+}
+
+nsCSSShadow::~nsCSSShadow(void)
+{
+ if (nsnull != mNext) {
+ delete mNext;
+ }
+}
+
+// --- nsCSSText -----------------
+
+nsCSSText::nsCSSText(void)
+ : mTextShadow(nsnull)
+{
+}
+
+nsCSSText::~nsCSSText(void)
+{
+ if (nsnull != mTextShadow) {
+ delete mTextShadow;
+ }
+}
+
const nsID& nsCSSText::GetID(void)
{
return kCSSTextSID;
@@ -571,11 +293,29 @@ void nsCSSText::List(FILE* out, PRInt32 aIndent) const
mTextTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM);
mTextAlign.AppendToString(buffer, PROP_TEXT_ALIGN);
mTextIndent.AppendToString(buffer, PROP_TEXT_INDENT);
+ if (nsnull != mTextShadow) {
+ if (eCSSUnit_Color == mTextShadow->mColor.GetUnit()) {
+ nsCSSShadow* shadow = mTextShadow;
+ while (nsnull != shadow) {
+ shadow->mColor.AppendToString(buffer, PROP_TEXT_SHADOW_COLOR);
+ shadow->mXOffset.AppendToString(buffer, PROP_TEXT_SHADOW_X);
+ shadow->mYOffset.AppendToString(buffer, PROP_TEXT_SHADOW_Y);
+ shadow->mRadius.AppendToString(buffer, PROP_TEXT_SHADOW_RADIUS);
+ shadow = shadow->mNext;
+ }
+ }
+ else {
+ mTextShadow->mColor.AppendToString(buffer, PROP_TEXT_SHADOW);
+ }
+ }
+ mUnicodeBidi.AppendToString(buffer, PROP_UNICODE_BIDI);
mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT);
mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE);
fputs(buffer, out);
}
+// --- nsCSSRect -----------------
+
void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const
{
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
@@ -624,6 +364,8 @@ void nsCSSRect::List(FILE* out, PRInt32 aIndent, PRIntn aTRBL[]) const
fputs(buffer, out);
}
+// --- nsCSSDisplay -----------------
+
nsCSSDisplay::nsCSSDisplay(void)
: mClip(nsnull)
{
@@ -662,8 +404,11 @@ void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSMargin -----------------
+
nsCSSMargin::nsCSSMargin(void)
- : mMargin(nsnull), mPadding(nsnull), mBorder(nsnull), mColor(nsnull), mStyle(nsnull)
+ : mMargin(nsnull), mPadding(nsnull),
+ mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull)
{
}
@@ -675,14 +420,14 @@ nsCSSMargin::~nsCSSMargin(void)
if (nsnull != mPadding) {
delete mPadding;
}
- if (nsnull != mBorder) {
- delete mBorder;
+ if (nsnull != mBorderWidth) {
+ delete mBorderWidth;
}
- if (nsnull != mColor) {
- delete mColor;
+ if (nsnull != mBorderColor) {
+ delete mBorderColor;
}
- if (nsnull != mStyle) {
- delete mStyle;
+ if (nsnull != mBorderStyle) {
+ delete mBorderStyle;
}
}
@@ -693,8 +438,6 @@ const nsID& nsCSSMargin::GetID(void)
void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
{
- for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
-
if (nsnull != mMargin) {
static PRIntn trbl[] = {
PROP_MARGIN_TOP,
@@ -713,20 +456,42 @@ void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
};
mPadding->List(out, aIndent, trbl);
}
- if (nsnull != mBorder) {
+ if (nsnull != mBorderWidth) {
static PRIntn trbl[] = {
PROP_BORDER_TOP_WIDTH,
PROP_BORDER_RIGHT_WIDTH,
PROP_BORDER_BOTTOM_WIDTH,
PROP_BORDER_LEFT_WIDTH
};
- mBorder->List(out, aIndent, trbl);
+ mBorderWidth->List(out, aIndent, trbl);
}
- if (nsnull != mColor) {
- mColor->List(out, PROP_BORDER_COLOR, aIndent);
+ if (nsnull != mBorderColor) {
+ mBorderColor->List(out, PROP_BORDER_COLOR, aIndent);
}
- if (nsnull != mStyle) {
- mStyle->List(out, PROP_BORDER_STYLE, aIndent);
+ if (nsnull != mBorderStyle) {
+ mBorderStyle->List(out, PROP_BORDER_STYLE, aIndent);
+ }
+
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+ mOutlineWidth.AppendToString(buffer, PROP_OUTLINE_WIDTH);
+ mOutlineColor.AppendToString(buffer, PROP_OUTLINE_COLOR);
+ mOutlineStyle.AppendToString(buffer, PROP_OUTLINE_STYLE);
+ fputs(buffer, out);
+}
+
+// --- nsCSSPosition -----------------
+
+nsCSSPosition::nsCSSPosition(void)
+ : mOffset(nsnull)
+{
+}
+
+nsCSSPosition::~nsCSSPosition(void)
+{
+ if (nsnull != mOffset) {
+ delete mOffset;
}
}
@@ -743,13 +508,27 @@ void nsCSSPosition::List(FILE* out, PRInt32 aIndent) const
mPosition.AppendToString(buffer, PROP_POSITION);
mWidth.AppendToString(buffer, PROP_WIDTH);
+ mMinWidth.AppendToString(buffer, PROP_MIN_WIDTH);
+ mMaxWidth.AppendToString(buffer, PROP_MAX_WIDTH);
mHeight.AppendToString(buffer, PROP_HEIGHT);
- mLeft.AppendToString(buffer, PROP_LEFT);
- mTop.AppendToString(buffer, PROP_TOP);
+ mMinHeight.AppendToString(buffer, PROP_MIN_HEIGHT);
+ mMaxHeight.AppendToString(buffer, PROP_MAX_HEIGHT);
mZIndex.AppendToString(buffer, PROP_Z_INDEX);
fputs(buffer, out);
+
+ if (nsnull != mOffset) {
+ static PRIntn trbl[] = {
+ PROP_TOP,
+ PROP_RIGHT,
+ PROP_BOTTOM,
+ PROP_LEFT
+ };
+ mOffset->List(out, aIndent, trbl);
+ }
}
+// --- nsCSSList -----------------
+
const nsID& nsCSSList::GetID(void)
{
return kCSSListSID;
@@ -767,6 +546,130 @@ void nsCSSList::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSTable -----------------
+
+const nsID& nsCSSTable::GetID(void)
+{
+ return kCSSTableSID;
+}
+
+void nsCSSTable::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mBorderCollapse.AppendToString(buffer, PROP_BORDER_COLLAPSE);
+ mBorderSpacing.AppendToString(buffer, PROP_BORDER_SPACING);
+ mCaptionSide.AppendToString(buffer, PROP_CAPTION_SIDE);
+ mEmptyCells.AppendToString(buffer, PROP_EMPTY_CELLS);
+ mLayout.AppendToString(buffer, PROP_TABLE_LAYOUT);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSBreaks -----------------
+
+const nsID& nsCSSBreaks::GetID(void)
+{
+ return kCSSBreaksSID;
+}
+
+void nsCSSBreaks::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mOrphans.AppendToString(buffer, PROP_ORPHANS);
+ mWidows.AppendToString(buffer, PROP_WIDOWS);
+ mPage.AppendToString(buffer, PROP_PAGE);
+ mPageBreakAfter.AppendToString(buffer, PROP_PAGE_BREAK_AFTER);
+ mPageBreakBefore.AppendToString(buffer, PROP_PAGE_BREAK_BEFORE);
+ mPageBreakInside.AppendToString(buffer, PROP_PAGE_BREAK_INSIDE);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSPage -----------------
+
+const nsID& nsCSSPage::GetID(void)
+{
+ return kCSSPageSID;
+}
+
+void nsCSSPage::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mMarks.AppendToString(buffer, PROP_MARKS);
+ mSize.AppendToString(buffer, PROP_SIZE);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSContent -----------------
+
+const nsID& nsCSSContent::GetID(void)
+{
+ return kCSSContentSID;
+}
+
+void nsCSSContent::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mContent.AppendToString(buffer, PROP_CONTENT);
+ mCounterIncrement.AppendToString(buffer, PROP_COUNTER_INCREMENT);
+ mCounterReset.AppendToString(buffer, PROP_COUNTER_RESET);
+ mMarkerOffset.AppendToString(buffer, PROP_MARKER_OFFSET);
+ mQuotes.AppendToString(buffer, PROP_QUOTES);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSAural -----------------
+
+const nsID& nsCSSAural::GetID(void)
+{
+ return kCSSAuralSID;
+}
+
+void nsCSSAural::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mAzimuth.AppendToString(buffer, PROP_AZIMUTH);
+ mElevation.AppendToString(buffer, PROP_ELEVATION);
+ mCueAfter.AppendToString(buffer, PROP_CUE_AFTER);
+ mCueBefore.AppendToString(buffer, PROP_CUE_BEFORE);
+ mPauseAfter.AppendToString(buffer, PROP_PAUSE_AFTER);
+ mPauseBefore.AppendToString(buffer, PROP_PAUSE_BEFORE);
+ mPitch.AppendToString(buffer, PROP_PITCH);
+ mPitchRange.AppendToString(buffer, PROP_PITCH_RANGE);
+ mPlayDuring.AppendToString(buffer, PROP_PLAY_DURING);
+ mRichness.AppendToString(buffer, PROP_RICHNESS);
+ mSpeak.AppendToString(buffer, PROP_SPEAK);
+ mSpeakHeader.AppendToString(buffer, PROP_SPEAK_HEADER);
+ mSpeakNumeral.AppendToString(buffer, PROP_SPEAK_NUMERAL);
+ mSpeakPunctuation.AppendToString(buffer, PROP_SPEAK_PUNCTUATION);
+ mSpeechRate.AppendToString(buffer, PROP_SPEECH_RATE);
+ mStress.AppendToString(buffer, PROP_STRESS);
+ mVoiceFamily.AppendToString(buffer, PROP_VOICE_FAMILY);
+ mVolume.AppendToString(buffer, PROP_VOLUME);
+
+ fputs(buffer, out);
+}
+
+
+
+// --- nsCSSDeclaration -----------------
class CSSDeclarationImpl : public nsICSSDeclaration {
@@ -795,6 +698,9 @@ public:
nsresult GetImportantValues(nsICSSDeclaration*& aResult);
nsresult GetValueIsImportant(const char *aProperty, PRBool& aIsImportant);
+ PRBool AppendValueToString(PRInt32 aProperty, nsString& aResult);
+ PRBool AppendValueToString(PRInt32 aProperty, const nsCSSValue& aValue, nsString& aResult);
+
virtual nsresult ToString(nsString& aString);
void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
@@ -815,6 +721,11 @@ protected:
nsCSSPosition* mPosition;
nsCSSList* mList;
nsCSSDisplay* mDisplay;
+ nsCSSTable* mTable;
+ nsCSSBreaks* mBreaks;
+ nsCSSPage* mPage;
+ nsCSSContent* mContent;
+ nsCSSAural* mAural;
CSSDeclarationImpl* mImportant;
@@ -844,29 +755,23 @@ CSSDeclarationImpl::CSSDeclarationImpl(void)
#endif
}
+#define CSS_IF_DELETE(ptr) if (nsnull != ptr) delete ptr;
+
CSSDeclarationImpl::~CSSDeclarationImpl(void)
{
- if (nsnull != mFont) {
- delete mFont;
- }
- if (nsnull != mColor) {
- delete mColor;
- }
- if (nsnull != mText) {
- delete mText;
- }
- if (nsnull != mMargin) {
- delete mMargin;
- }
- if (nsnull != mPosition) {
- delete mPosition;
- }
- if (nsnull != mList) {
- delete mList;
- }
- if (nsnull != mDisplay) {
- delete mDisplay;
- }
+ CSS_IF_DELETE(mFont);
+ CSS_IF_DELETE(mColor);
+ CSS_IF_DELETE(mText);
+ CSS_IF_DELETE(mMargin);
+ CSS_IF_DELETE(mPosition);
+ CSS_IF_DELETE(mList);
+ CSS_IF_DELETE(mDisplay);
+ CSS_IF_DELETE(mTable);
+ CSS_IF_DELETE(mBreaks);
+ CSS_IF_DELETE(mPage);
+ CSS_IF_DELETE(mContent);
+ CSS_IF_DELETE(mAural);
+
NS_IF_RELEASE(mImportant);
if (nsnull != mOrder) {
delete mOrder;
@@ -888,88 +793,56 @@ CSSDeclarationImpl::~CSSDeclarationImpl(void)
NS_IMPL_ISUPPORTS(CSSDeclarationImpl, kICSSDeclarationIID);
+#define CSS_IF_GET_ELSE(sid,ptr,result) \
+ if (sid.Equals(kCSS##ptr##SID)) { *result = m##ptr; } else
+
nsresult CSSDeclarationImpl::GetData(const nsID& aSID, nsCSSStruct** aDataPtr)
{
if (nsnull == aDataPtr) {
return NS_ERROR_NULL_POINTER;
}
- if (aSID.Equals(kCSSFontSID)) {
- *aDataPtr = mFont;
- }
- else if (aSID.Equals(kCSSColorSID)) {
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSDisplaySID)) {
- *aDataPtr = mDisplay;
- }
- else if (aSID.Equals(kCSSTextSID)) {
- *aDataPtr = mText;
- }
- else if (aSID.Equals(kCSSMarginSID)) {
- *aDataPtr = mMargin;
- }
- else if (aSID.Equals(kCSSPositionSID)) {
- *aDataPtr = mPosition;
- }
- else if (aSID.Equals(kCSSListSID)) {
- *aDataPtr = mList;
- }
- else {
+ CSS_IF_GET_ELSE(aSID, Font, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Color, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Display, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Text, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Margin, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Position, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, List, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Table, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Breaks, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Page, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Content, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Aural, aDataPtr) {
return NS_NOINTERFACE;
}
return NS_OK;
}
+#define CSS_IF_ENSURE_ELSE(sid,ptr,result) \
+ if (sid.Equals(kCSS##ptr##SID)) { \
+ if (nsnull == m##ptr) { m##ptr = new nsCSS##ptr(); } \
+ *result = m##ptr; \
+ } else
+
nsresult CSSDeclarationImpl::EnsureData(const nsID& aSID, nsCSSStruct** aDataPtr)
{
if (nsnull == aDataPtr) {
return NS_ERROR_NULL_POINTER;
}
- if (aSID.Equals(kCSSFontSID)) {
- if (nsnull == mFont) {
- mFont = new nsCSSFont();
- }
- *aDataPtr = mFont;
- }
- else if (aSID.Equals(kCSSColorSID)) {
- if (nsnull == mColor) {
- mColor = new nsCSSColor();
- }
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSDisplaySID)) {
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSTextSID)) {
- if (nsnull == mText) {
- mText = new nsCSSText();
- }
- *aDataPtr = mText;
- }
- else if (aSID.Equals(kCSSMarginSID)) {
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- *aDataPtr = mMargin;
- }
- else if (aSID.Equals(kCSSPositionSID)) {
- if (nsnull == mPosition) {
- mPosition = new nsCSSPosition();
- }
- *aDataPtr = mPosition;
- }
- else if (aSID.Equals(kCSSListSID)) {
- if (nsnull == mList) {
- mList = new nsCSSList();
- }
- *aDataPtr = mList;
- }
- else {
+ CSS_IF_ENSURE_ELSE(aSID, Font, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Color, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Display, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Text, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Margin, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Position, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, List, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Table, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Breaks, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Page, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Content, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Aural, aDataPtr) {
return NS_NOINTERFACE;
}
if (nsnull == *aDataPtr) {
@@ -983,6 +856,24 @@ nsresult CSSDeclarationImpl::AppendValue(const char* aProperty, const nsCSSValue
return AppendValue(nsCSSProps::LookupName(aProperty), aValue);
}
+#define CSS_ENSURE(data) \
+ if (nsnull == m##data) { \
+ m##data = new nsCSS##data(); \
+ } \
+ if (nsnull == m##data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
+#define CSS_ENSURE_RECT(data) \
+ if (nsnull == data) { \
+ data = new nsCSSRect(); \
+ } \
+ if (nsnull == data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aValue)
{
nsresult result = NS_OK;
@@ -994,21 +885,19 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
- if (nsnull == mFont) {
- mFont = new nsCSSFont();
- }
- if (nsnull != mFont) {
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
+ CSS_ENSURE(Font) {
switch (aProperty) {
- case PROP_FONT_FAMILY: mFont->mFamily = aValue; break;
- case PROP_FONT_STYLE: mFont->mStyle = aValue; break;
- case PROP_FONT_VARIANT: mFont->mVariant = aValue; break;
- case PROP_FONT_WEIGHT: mFont->mWeight = aValue; break;
- case PROP_FONT_SIZE: mFont->mSize = aValue; break;
+ case PROP_FONT_FAMILY: mFont->mFamily = aValue; break;
+ case PROP_FONT_STYLE: mFont->mStyle = aValue; break;
+ case PROP_FONT_VARIANT: mFont->mVariant = aValue; break;
+ case PROP_FONT_WEIGHT: mFont->mWeight = aValue; break;
+ case PROP_FONT_SIZE: mFont->mSize = aValue; break;
+ case PROP_FONT_SIZE_ADJUST: mFont->mSizeAdjust = aValue; break;
+ case PROP_FONT_STRETCH: mFont->mStretch = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSColor
@@ -1023,10 +912,7 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
case PROP_OPACITY:
- if (nsnull == mColor) {
- mColor = new nsCSSColor();
- }
- if (nsnull != mColor) {
+ CSS_ENSURE(Color) {
switch (aProperty) {
case PROP_COLOR: mColor->mColor = aValue; break;
case PROP_BACKGROUND_COLOR: mColor->mBackColor = aValue; break;
@@ -1041,9 +927,6 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_OPACITY: mColor->mOpacity = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSText
@@ -1054,12 +937,10 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
- if (nsnull == mText) {
- mText = new nsCSSText();
- }
- if (nsnull != mText) {
+ CSS_ENSURE(Text) {
switch (aProperty) {
case PROP_WORD_SPACING: mText->mWordSpacing = aValue; break;
case PROP_LETTER_SPACING: mText->mLetterSpacing = aValue; break;
@@ -1068,198 +949,11 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_TEXT_TRANSFORM: mText->mTextTransform = aValue; break;
case PROP_TEXT_ALIGN: mText->mTextAlign = aValue; break;
case PROP_TEXT_INDENT: mText->mTextIndent = aValue; break;
+ case PROP_UNICODE_BIDI: mText->mUnicodeBidi = aValue; break;
case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break;
case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSMargin
- case PROP_MARGIN_TOP:
- case PROP_MARGIN_RIGHT:
- case PROP_MARGIN_BOTTOM:
- case PROP_MARGIN_LEFT:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mMargin) {
- mMargin->mMargin = new nsCSSRect();
- }
- if (nsnull != mMargin->mMargin) {
- switch (aProperty) {
- case PROP_MARGIN_TOP: mMargin->mMargin->mTop = aValue; break;
- case PROP_MARGIN_RIGHT: mMargin->mMargin->mRight = aValue; break;
- case PROP_MARGIN_BOTTOM: mMargin->mMargin->mBottom = aValue; break;
- case PROP_MARGIN_LEFT: mMargin->mMargin->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_PADDING_TOP:
- case PROP_PADDING_RIGHT:
- case PROP_PADDING_BOTTOM:
- case PROP_PADDING_LEFT:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mPadding) {
- mMargin->mPadding = new nsCSSRect();
- }
- if (nsnull != mMargin->mPadding) {
- switch (aProperty) {
- case PROP_PADDING_TOP: mMargin->mPadding->mTop = aValue; break;
- case PROP_PADDING_RIGHT: mMargin->mPadding->mRight = aValue; break;
- case PROP_PADDING_BOTTOM: mMargin->mPadding->mBottom = aValue; break;
- case PROP_PADDING_LEFT: mMargin->mPadding->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_WIDTH:
- case PROP_BORDER_RIGHT_WIDTH:
- case PROP_BORDER_BOTTOM_WIDTH:
- case PROP_BORDER_LEFT_WIDTH:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mBorder) {
- mMargin->mBorder = new nsCSSRect();
- }
- if (nsnull != mMargin->mBorder) {
- switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: mMargin->mBorder->mTop = aValue; break;
- case PROP_BORDER_RIGHT_WIDTH: mMargin->mBorder->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_WIDTH: mMargin->mBorder->mBottom = aValue; break;
- case PROP_BORDER_LEFT_WIDTH: mMargin->mBorder->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_COLOR:
- case PROP_BORDER_RIGHT_COLOR:
- case PROP_BORDER_BOTTOM_COLOR:
- case PROP_BORDER_LEFT_COLOR:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mColor) {
- mMargin->mColor = new nsCSSRect();
- }
- if (nsnull != mMargin->mColor) {
- switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: mMargin->mColor->mTop = aValue; break;
- case PROP_BORDER_RIGHT_COLOR: mMargin->mColor->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_COLOR: mMargin->mColor->mBottom = aValue; break;
- case PROP_BORDER_LEFT_COLOR: mMargin->mColor->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_STYLE:
- case PROP_BORDER_RIGHT_STYLE:
- case PROP_BORDER_BOTTOM_STYLE:
- case PROP_BORDER_LEFT_STYLE:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mStyle) {
- mMargin->mStyle = new nsCSSRect();
- }
- if (nsnull != mMargin->mStyle) {
- switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: mMargin->mStyle->mTop = aValue; break;
- case PROP_BORDER_RIGHT_STYLE: mMargin->mStyle->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_STYLE: mMargin->mStyle->mBottom = aValue; break;
- case PROP_BORDER_LEFT_STYLE: mMargin->mStyle->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSPosition
- case PROP_POSITION:
- case PROP_WIDTH:
- case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
- case PROP_Z_INDEX:
- if (nsnull == mPosition) {
- mPosition = new nsCSSPosition();
- }
- if (nsnull != mPosition) {
- switch (aProperty) {
- case PROP_POSITION: mPosition->mPosition = aValue; break;
- case PROP_WIDTH: mPosition->mWidth = aValue; break;
- case PROP_HEIGHT: mPosition->mHeight = aValue; break;
- case PROP_LEFT: mPosition->mLeft = aValue; break;
- case PROP_TOP: mPosition->mTop = aValue; break;
- case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSList
- case PROP_LIST_STYLE_TYPE:
- case PROP_LIST_STYLE_IMAGE:
- case PROP_LIST_STYLE_POSITION:
- if (nsnull == mList) {
- mList = new nsCSSList();
- }
- if (nsnull != mList) {
- switch (aProperty) {
- case PROP_LIST_STYLE_TYPE: mList->mType = aValue; break;
- case PROP_LIST_STYLE_IMAGE: mList->mImage = aValue; break;
- case PROP_LIST_STYLE_POSITION: mList->mPosition = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSDisplay
@@ -1270,10 +964,7 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_VISIBILITY:
case PROP_OVERFLOW:
case PROP_FILTER:
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mDisplay) {
+ CSS_ENSURE(Display) {
switch (aProperty) {
case PROP_FLOAT: mDisplay->mFloat = aValue; break;
case PROP_CLEAR: mDisplay->mClear = aValue; break;
@@ -1284,23 +975,14 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_FILTER: mDisplay->mFilter = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
case PROP_CLIP_TOP:
case PROP_CLIP_RIGHT:
case PROP_CLIP_BOTTOM:
case PROP_CLIP_LEFT:
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mDisplay) {
- if (nsnull == mDisplay->mClip) {
- mDisplay->mClip = new nsCSSRect();
- }
- if (nsnull != mDisplay->mClip) {
+ CSS_ENSURE(Display) {
+ CSS_ENSURE_RECT(mDisplay->mClip) {
switch(aProperty) {
case PROP_CLIP_TOP: mDisplay->mClip->mTop = aValue; break;
case PROP_CLIP_RIGHT: mDisplay->mClip->mRight = aValue; break;
@@ -1308,22 +990,273 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_CLIP_LEFT: mDisplay->mClip->mLeft = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
break;
+ // nsCSSMargin
+ case PROP_MARGIN_TOP:
+ case PROP_MARGIN_RIGHT:
+ case PROP_MARGIN_BOTTOM:
+ case PROP_MARGIN_LEFT:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mMargin) {
+ switch (aProperty) {
+ case PROP_MARGIN_TOP: mMargin->mMargin->mTop = aValue; break;
+ case PROP_MARGIN_RIGHT: mMargin->mMargin->mRight = aValue; break;
+ case PROP_MARGIN_BOTTOM: mMargin->mMargin->mBottom = aValue; break;
+ case PROP_MARGIN_LEFT: mMargin->mMargin->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_PADDING_TOP:
+ case PROP_PADDING_RIGHT:
+ case PROP_PADDING_BOTTOM:
+ case PROP_PADDING_LEFT:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mPadding) {
+ switch (aProperty) {
+ case PROP_PADDING_TOP: mMargin->mPadding->mTop = aValue; break;
+ case PROP_PADDING_RIGHT: mMargin->mPadding->mRight = aValue; break;
+ case PROP_PADDING_BOTTOM: mMargin->mPadding->mBottom = aValue; break;
+ case PROP_PADDING_LEFT: mMargin->mPadding->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_WIDTH:
+ case PROP_BORDER_RIGHT_WIDTH:
+ case PROP_BORDER_BOTTOM_WIDTH:
+ case PROP_BORDER_LEFT_WIDTH:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderWidth) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_WIDTH: mMargin->mBorderWidth->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_WIDTH: mMargin->mBorderWidth->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_WIDTH: mMargin->mBorderWidth->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_WIDTH: mMargin->mBorderWidth->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_COLOR:
+ case PROP_BORDER_RIGHT_COLOR:
+ case PROP_BORDER_BOTTOM_COLOR:
+ case PROP_BORDER_LEFT_COLOR:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderColor) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_COLOR: mMargin->mBorderColor->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_COLOR: mMargin->mBorderColor->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_COLOR: mMargin->mBorderColor->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_COLOR: mMargin->mBorderColor->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_STYLE:
+ case PROP_BORDER_RIGHT_STYLE:
+ case PROP_BORDER_BOTTOM_STYLE:
+ case PROP_BORDER_LEFT_STYLE:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderStyle) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_STYLE: mMargin->mBorderStyle->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_STYLE: mMargin->mBorderStyle->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_STYLE: mMargin->mBorderStyle->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_STYLE: mMargin->mBorderStyle->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ CSS_ENSURE(Margin) {
+ switch (aProperty) {
+ case PROP_OUTLINE_WIDTH: mMargin->mOutlineWidth = aValue; break;
+ case PROP_OUTLINE_COLOR: mMargin->mOutlineColor = aValue; break;
+ case PROP_OUTLINE_STYLE: mMargin->mOutlineStyle = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSPosition
+ case PROP_POSITION:
+ case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
+ case PROP_HEIGHT:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
+ case PROP_Z_INDEX:
+ CSS_ENSURE(Position) {
+ switch (aProperty) {
+ case PROP_POSITION: mPosition->mPosition = aValue; break;
+ case PROP_WIDTH: mPosition->mWidth = aValue; break;
+ case PROP_MIN_WIDTH: mPosition->mMinWidth = aValue; break;
+ case PROP_MAX_WIDTH: mPosition->mMaxWidth = aValue; break;
+ case PROP_HEIGHT: mPosition->mHeight = aValue; break;
+ case PROP_MIN_HEIGHT: mPosition->mMinHeight = aValue; break;
+ case PROP_MAX_HEIGHT: mPosition->mMaxHeight = aValue; break;
+ case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
+ }
+ }
+ break;
+
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ CSS_ENSURE(Position) {
+ CSS_ENSURE_RECT(mPosition->mOffset) {
+ switch (aProperty) {
+ case PROP_TOP: mPosition->mOffset->mTop = aValue; break;
+ case PROP_RIGHT: mPosition->mOffset->mRight= aValue; break;
+ case PROP_BOTTOM: mPosition->mOffset->mBottom = aValue; break;
+ case PROP_LEFT: mPosition->mOffset->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ // nsCSSList
+ case PROP_LIST_STYLE_TYPE:
+ case PROP_LIST_STYLE_IMAGE:
+ case PROP_LIST_STYLE_POSITION:
+ CSS_ENSURE(List) {
+ switch (aProperty) {
+ case PROP_LIST_STYLE_TYPE: mList->mType = aValue; break;
+ case PROP_LIST_STYLE_IMAGE: mList->mImage = aValue; break;
+ case PROP_LIST_STYLE_POSITION: mList->mPosition = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ CSS_ENSURE(Table) {
+ switch (aProperty) {
+ case PROP_BORDER_COLLAPSE: mTable->mBorderCollapse = aValue; break;
+ case PROP_BORDER_SPACING: mTable->mBorderSpacing = aValue; break;
+ case PROP_CAPTION_SIDE: mTable->mCaptionSide = aValue; break;
+ case PROP_EMPTY_CELLS: mTable->mEmptyCells = aValue; break;
+ case PROP_TABLE_LAYOUT: mTable->mLayout = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ CSS_ENSURE(Breaks) {
+ switch (aProperty) {
+ case PROP_ORPHANS: mBreaks->mOrphans = aValue; break;
+ case PROP_WIDOWS: mBreaks->mWidows = aValue; break;
+ case PROP_PAGE: mBreaks->mPage = aValue; break;
+ case PROP_PAGE_BREAK_AFTER: mBreaks->mPageBreakAfter = aValue; break;
+ case PROP_PAGE_BREAK_BEFORE: mBreaks->mPageBreakBefore = aValue; break;
+ case PROP_PAGE_BREAK_INSIDE: mBreaks->mPageBreakInside = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ CSS_ENSURE(Page) {
+ switch (aProperty) {
+ case PROP_MARKS: mPage->mMarks = aValue; break;
+ case PROP_SIZE: mPage->mSize = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ CSS_ENSURE(Content) {
+ switch (aProperty) {
+ case PROP_CONTENT: mContent->mContent = aValue; break;
+ case PROP_COUNTER_INCREMENT: mContent->mCounterIncrement = aValue; break;
+ case PROP_COUNTER_RESET: mContent->mCounterReset = aValue; break;
+ case PROP_MARKER_OFFSET: mContent->mMarkerOffset = aValue; break;
+ case PROP_QUOTES: mContent->mQuotes = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ CSS_ENSURE(Aural) {
+ switch (aProperty) {
+ case PROP_AZIMUTH: mAural->mAzimuth = aValue; break;
+ case PROP_ELEVATION: mAural->mElevation = aValue; break;
+ case PROP_CUE_AFTER: mAural->mCueAfter = aValue; break;
+ case PROP_CUE_BEFORE: mAural->mCueBefore = aValue; break;
+ case PROP_PAUSE_AFTER: mAural->mPauseAfter = aValue; break;
+ case PROP_PAUSE_BEFORE: mAural->mPauseBefore = aValue; break;
+ case PROP_PITCH: mAural->mPitch = aValue; break;
+ case PROP_PITCH_RANGE: mAural->mPitchRange = aValue; break;
+ case PROP_PLAY_DURING: mAural->mPlayDuring = aValue; break;
+ case PROP_RICHNESS: mAural->mRichness = aValue; break;
+ case PROP_SPEAK: mAural->mSpeak = aValue; break;
+ case PROP_SPEAK_HEADER: mAural->mSpeakHeader = aValue; break;
+ case PROP_SPEAK_NUMERAL: mAural->mSpeakNumeral = aValue; break;
+ case PROP_SPEAK_PUNCTUATION: mAural->mSpeakPunctuation = aValue; break;
+ case PROP_SPEECH_RATE: mAural->mSpeechRate = aValue; break;
+ case PROP_STRESS: mAural->mStress = aValue; break;
+ case PROP_VOICE_FAMILY: mAural->mVoiceFamily = aValue; break;
+ case PROP_VOLUME: mAural->mVolume = aValue; break;
+ }
+ }
+ break;
+
+ // Shorthands
case PROP_BACKGROUND:
case PROP_BORDER:
case PROP_CLIP:
+ case PROP_CUE:
case PROP_FONT:
case PROP_LIST_STYLE:
case PROP_MARGIN:
+ case PROP_OUTLINE:
case PROP_PADDING:
+ case PROP_PAUSE:
+ case PROP_TEXT_SHADOW:
case PROP_BACKGROUND_POSITION:
case PROP_BORDER_TOP:
case PROP_BORDER_RIGHT:
@@ -1364,6 +1297,18 @@ nsresult CSSDeclarationImpl::SetValueImportant(const char* aProperty)
return SetValueImportant(nsCSSProps::LookupName(aProperty));
}
+#define CSS_ENSURE_IMPORTANT(data) \
+ if (nsnull == mImportant->m##data) { \
+ mImportant->m##data = new nsCSS##data(); \
+ } \
+ if (nsnull == mImportant->m##data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
+#define CSS_CASE_IMPORTANT(prop,data) \
+ case prop: mImportant->data = data; data.Reset(); break
+
nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
{
nsresult result = NS_OK;
@@ -1385,27 +1330,20 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
if (nsnull != mFont) {
- if (nsnull == mImportant->mFont) {
- mImportant->mFont = new nsCSSFont();
- }
- if (nsnull != mImportant->mFont) {
+ CSS_ENSURE_IMPORTANT(Font) {
switch (aProperty) {
- case PROP_FONT_FAMILY: mImportant->mFont->mFamily = mFont->mFamily;
- mFont->mFamily.Reset(); break;
- case PROP_FONT_STYLE: mImportant->mFont->mStyle = mFont->mStyle;
- mFont->mStyle.Reset(); break;
- case PROP_FONT_VARIANT: mImportant->mFont->mVariant = mFont->mVariant;
- mFont->mVariant.Reset(); break;
- case PROP_FONT_WEIGHT: mImportant->mFont->mWeight = mFont->mWeight;
- mFont->mWeight.Reset(); break;
- case PROP_FONT_SIZE: mImportant->mFont->mSize = mFont->mSize;
- mFont->mSize.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_FONT_FAMILY, mFont->mFamily);
+ CSS_CASE_IMPORTANT(PROP_FONT_STYLE, mFont->mStyle);
+ CSS_CASE_IMPORTANT(PROP_FONT_VARIANT, mFont->mVariant);
+ CSS_CASE_IMPORTANT(PROP_FONT_WEIGHT, mFont->mWeight);
+ CSS_CASE_IMPORTANT(PROP_FONT_SIZE, mFont->mSize);
+ CSS_CASE_IMPORTANT(PROP_FONT_SIZE_ADJUST, mFont->mSizeAdjust);
+ CSS_CASE_IMPORTANT(PROP_FONT_STRETCH, mFont->mStretch);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
@@ -1422,38 +1360,21 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_CURSOR_IMAGE:
case PROP_OPACITY:
if (nsnull != mColor) {
- if (nsnull == mImportant->mColor) {
- mImportant->mColor = new nsCSSColor();
- }
- if (nsnull != mImportant->mColor) {
+ CSS_ENSURE_IMPORTANT(Color) {
switch (aProperty) {
- case PROP_COLOR: mImportant->mColor->mColor = mColor->mColor;
- mColor->mColor.Reset(); break;
- case PROP_BACKGROUND_COLOR: mImportant->mColor->mBackColor = mColor->mBackColor;
- mColor->mBackColor.Reset(); break;
- case PROP_BACKGROUND_IMAGE: mImportant->mColor->mBackImage = mColor->mBackImage;
- mColor->mBackImage.Reset(); break;
- case PROP_BACKGROUND_REPEAT: mImportant->mColor->mBackRepeat = mColor->mBackRepeat;
- mColor->mBackRepeat.Reset(); break;
- case PROP_BACKGROUND_ATTACHMENT: mImportant->mColor->mBackAttachment = mColor->mBackAttachment;
- mColor->mBackAttachment.Reset(); break;
- case PROP_BACKGROUND_X_POSITION: mImportant->mColor->mBackPositionX = mColor->mBackPositionX;
- mColor->mBackPositionX.Reset(); break;
- case PROP_BACKGROUND_Y_POSITION: mImportant->mColor->mBackPositionY = mColor->mBackPositionY;
- mColor->mBackPositionY.Reset(); break;
- case PROP_BACKGROUND_FILTER: mImportant->mColor->mBackFilter = mColor->mBackFilter;
- mColor->mBackFilter.Reset(); break;
- case PROP_CURSOR: mImportant->mColor->mCursor = mColor->mCursor;
- mColor->mCursor.Reset(); break;
- case PROP_CURSOR_IMAGE: mImportant->mColor->mCursorImage = mColor->mCursorImage;
- mColor->mCursorImage.Reset(); break;
- case PROP_OPACITY: mImportant->mColor->mOpacity = mColor->mOpacity;
- mColor->mOpacity.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_COLOR, mColor->mColor);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_COLOR, mColor->mBackColor);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_IMAGE, mColor->mBackImage);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_REPEAT, mColor->mBackRepeat);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_ATTACHMENT, mColor->mBackAttachment);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_X_POSITION, mColor->mBackPositionX);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_Y_POSITION, mColor->mBackPositionY);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_FILTER, mColor->mBackFilter);
+ CSS_CASE_IMPORTANT(PROP_CURSOR, mColor->mCursor);
+ CSS_CASE_IMPORTANT(PROP_CURSOR_IMAGE, mColor->mCursorImage);
+ CSS_CASE_IMPORTANT(PROP_OPACITY, mColor->mOpacity);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
@@ -1465,36 +1386,80 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
if (nsnull != mText) {
- if (nsnull == mImportant->mText) {
- mImportant->mText = new nsCSSText();
- }
- if (nsnull != mImportant->mText) {
+ CSS_ENSURE_IMPORTANT(Text) {
switch (aProperty) {
- case PROP_WORD_SPACING: mImportant->mText->mWordSpacing = mText->mWordSpacing;
- mText->mWordSpacing.Reset(); break;
- case PROP_LETTER_SPACING: mImportant->mText->mLetterSpacing = mText->mLetterSpacing;
- mText->mLetterSpacing.Reset(); break;
- case PROP_TEXT_DECORATION: mImportant->mText->mDecoration = mText->mDecoration;
- mText->mDecoration.Reset(); break;
- case PROP_VERTICAL_ALIGN: mImportant->mText->mVerticalAlign = mText->mVerticalAlign;
- mText->mVerticalAlign.Reset(); break;
- case PROP_TEXT_TRANSFORM: mImportant->mText->mTextTransform = mText->mTextTransform;
- mText->mTextTransform.Reset(); break;
- case PROP_TEXT_ALIGN: mImportant->mText->mTextAlign = mText->mTextAlign;
- mText->mTextAlign.Reset(); break;
- case PROP_TEXT_INDENT: mImportant->mText->mTextIndent = mText->mTextIndent;
- mText->mTextIndent.Reset(); break;
- case PROP_LINE_HEIGHT: mImportant->mText->mLineHeight = mText->mLineHeight;
- mText->mLineHeight.Reset(); break;
- case PROP_WHITE_SPACE: mImportant->mText->mWhiteSpace = mText->mWhiteSpace;
- mText->mWhiteSpace.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_WORD_SPACING, mText->mWordSpacing);
+ CSS_CASE_IMPORTANT(PROP_LETTER_SPACING, mText->mLetterSpacing);
+ CSS_CASE_IMPORTANT(PROP_TEXT_DECORATION, mText->mDecoration);
+ CSS_CASE_IMPORTANT(PROP_VERTICAL_ALIGN, mText->mVerticalAlign);
+ CSS_CASE_IMPORTANT(PROP_TEXT_TRANSFORM, mText->mTextTransform);
+ CSS_CASE_IMPORTANT(PROP_TEXT_ALIGN, mText->mTextAlign);
+ CSS_CASE_IMPORTANT(PROP_TEXT_INDENT, mText->mTextIndent);
+ CSS_CASE_IMPORTANT(PROP_UNICODE_BIDI, mText->mUnicodeBidi);
+ CSS_CASE_IMPORTANT(PROP_LINE_HEIGHT, mText->mLineHeight);
+ CSS_CASE_IMPORTANT(PROP_WHITE_SPACE, mText->mWhiteSpace);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ break;
+
+ case PROP_TEXT_SHADOW:
+ if (nsnull != mText) {
+ if (nsnull != mText->mTextShadow) {
+ CSS_ENSURE_IMPORTANT(Text) {
+ if (nsnull != mImportant->mText->mTextShadow) {
+ delete mImportant->mText->mTextShadow;
+ }
+ mImportant->mText->mTextShadow = mText->mTextShadow;
+ mText->mTextShadow = nsnull;
+ }
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case PROP_DIRECTION:
+ case PROP_DISPLAY:
+ case PROP_FLOAT:
+ case PROP_CLEAR:
+ case PROP_OVERFLOW:
+ case PROP_VISIBILITY:
+ case PROP_FILTER:
+ if (nsnull != mDisplay) {
+ CSS_ENSURE_IMPORTANT(Display) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_DIRECTION, mDisplay->mDirection);
+ CSS_CASE_IMPORTANT(PROP_DISPLAY, mDisplay->mDisplay);
+ CSS_CASE_IMPORTANT(PROP_FLOAT, mDisplay->mFloat);
+ CSS_CASE_IMPORTANT(PROP_CLEAR, mDisplay->mClear);
+ CSS_CASE_IMPORTANT(PROP_OVERFLOW, mDisplay->mOverflow);
+ CSS_CASE_IMPORTANT(PROP_VISIBILITY, mDisplay->mVisibility);
+ CSS_CASE_IMPORTANT(PROP_FILTER, mDisplay->mFilter);
+ }
+ }
+ }
+ break;
+
+ case PROP_CLIP_TOP:
+ case PROP_CLIP_RIGHT:
+ case PROP_CLIP_BOTTOM:
+ case PROP_CLIP_LEFT:
+ if (nsnull != mDisplay) {
+ if (nsnull != mDisplay->mClip) {
+ CSS_ENSURE_IMPORTANT(Display) {
+ CSS_ENSURE_RECT(mImportant->mDisplay->mClip) {
+ switch(aProperty) {
+ CSS_CASE_IMPORTANT(PROP_CLIP_TOP, mDisplay->mClip->mTop);
+ CSS_CASE_IMPORTANT(PROP_CLIP_RIGHT, mDisplay->mClip->mRight);
+ CSS_CASE_IMPORTANT(PROP_CLIP_BOTTOM, mDisplay->mClip->mBottom);
+ CSS_CASE_IMPORTANT(PROP_CLIP_LEFT, mDisplay->mClip->mLeft);
+ }
+ }
+ }
}
}
break;
@@ -1506,31 +1471,15 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_MARGIN_LEFT:
if (nsnull != mMargin) {
if (nsnull != mMargin->mMargin) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mMargin) {
- mImportant->mMargin->mMargin = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mMargin) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mMargin) {
switch (aProperty) {
- case PROP_MARGIN_TOP: mImportant->mMargin->mMargin->mTop = mMargin->mMargin->mTop;
- mMargin->mMargin->mTop.Reset(); break;
- case PROP_MARGIN_RIGHT: mImportant->mMargin->mMargin->mRight = mMargin->mMargin->mRight;
- mMargin->mMargin->mRight.Reset(); break;
- case PROP_MARGIN_BOTTOM: mImportant->mMargin->mMargin->mBottom = mMargin->mMargin->mBottom;
- mMargin->mMargin->mBottom.Reset(); break;
- case PROP_MARGIN_LEFT: mImportant->mMargin->mMargin->mLeft = mMargin->mMargin->mLeft;
- mMargin->mMargin->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_MARGIN_TOP, mMargin->mMargin->mTop);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_RIGHT, mMargin->mMargin->mRight);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_BOTTOM, mMargin->mMargin->mBottom);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_LEFT, mMargin->mMargin->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1542,31 +1491,15 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_PADDING_LEFT:
if (nsnull != mMargin) {
if (nsnull != mMargin->mPadding) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mPadding) {
- mImportant->mMargin->mPadding = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mPadding) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mPadding) {
switch (aProperty) {
- case PROP_PADDING_TOP: mImportant->mMargin->mPadding->mTop = mMargin->mPadding->mTop;
- mMargin->mPadding->mTop.Reset(); break;
- case PROP_PADDING_RIGHT: mImportant->mMargin->mPadding->mRight = mMargin->mPadding->mRight;
- mMargin->mPadding->mRight.Reset(); break;
- case PROP_PADDING_BOTTOM: mImportant->mMargin->mPadding->mBottom = mMargin->mPadding->mBottom;
- mMargin->mPadding->mBottom.Reset(); break;
- case PROP_PADDING_LEFT: mImportant->mMargin->mPadding->mLeft = mMargin->mPadding->mLeft;
- mMargin->mPadding->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_PADDING_TOP, mMargin->mPadding->mTop);
+ CSS_CASE_IMPORTANT(PROP_PADDING_RIGHT, mMargin->mPadding->mRight);
+ CSS_CASE_IMPORTANT(PROP_PADDING_BOTTOM, mMargin->mPadding->mBottom);
+ CSS_CASE_IMPORTANT(PROP_PADDING_LEFT, mMargin->mPadding->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1577,32 +1510,16 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_WIDTH:
case PROP_BORDER_LEFT_WIDTH:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mBorder) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mBorder) {
- mImportant->mMargin->mBorder = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mBorder) {
+ if (nsnull != mMargin->mBorderWidth) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderWidth) {
switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: mImportant->mMargin->mBorder->mTop = mMargin->mBorder->mTop;
- mMargin->mBorder->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_WIDTH: mImportant->mMargin->mBorder->mRight = mMargin->mBorder->mRight;
- mMargin->mBorder->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_WIDTH: mImportant->mMargin->mBorder->mBottom = mMargin->mBorder->mBottom;
- mMargin->mBorder->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_WIDTH: mImportant->mMargin->mBorder->mLeft = mMargin->mBorder->mLeft;
- mMargin->mBorder->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_WIDTH, mMargin->mBorderWidth->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_WIDTH, mMargin->mBorderWidth->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_WIDTH, mMargin->mBorderWidth->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_WIDTH, mMargin->mBorderWidth->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1613,32 +1530,16 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_COLOR:
case PROP_BORDER_LEFT_COLOR:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mColor) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mColor) {
- mImportant->mMargin->mColor = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mColor) {
+ if (nsnull != mMargin->mBorderColor) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderColor) {
switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: mImportant->mMargin->mColor->mTop = mMargin->mColor->mTop;
- mMargin->mColor->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_COLOR: mImportant->mMargin->mColor->mRight = mMargin->mColor->mRight;
- mMargin->mColor->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_COLOR: mImportant->mMargin->mColor->mBottom = mMargin->mColor->mBottom;
- mMargin->mColor->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_COLOR: mImportant->mMargin->mColor->mLeft = mMargin->mColor->mLeft;
- mMargin->mColor->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_COLOR, mMargin->mBorderColor->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_COLOR, mMargin->mBorderColor->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_COLOR, mMargin->mBorderColor->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_COLOR, mMargin->mBorderColor->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1649,32 +1550,30 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_STYLE:
case PROP_BORDER_LEFT_STYLE:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mStyle) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mStyle) {
- mImportant->mMargin->mStyle = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mStyle) {
+ if (nsnull != mMargin->mBorderStyle) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderStyle) {
switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: mImportant->mMargin->mStyle->mTop = mMargin->mStyle->mTop;
- mMargin->mStyle->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_STYLE: mImportant->mMargin->mStyle->mRight = mMargin->mStyle->mRight;
- mMargin->mStyle->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_STYLE: mImportant->mMargin->mStyle->mBottom = mMargin->mStyle->mBottom;
- mMargin->mStyle->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_STYLE: mImportant->mMargin->mStyle->mLeft = mMargin->mStyle->mLeft;
- mMargin->mStyle->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_STYLE, mMargin->mBorderStyle->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_STYLE, mMargin->mBorderStyle->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_STYLE, mMargin->mBorderStyle->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_STYLE, mMargin->mBorderStyle->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ if (nsnull != mMargin) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_WIDTH, mMargin->mOutlineWidth);
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_COLOR, mMargin->mOutlineColor);
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_STYLE, mMargin->mOutlineStyle);
}
}
}
@@ -1683,32 +1582,44 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
// nsCSSPosition
case PROP_POSITION:
case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
case PROP_Z_INDEX:
if (nsnull != mPosition) {
- if (nsnull == mImportant->mPosition) {
- mImportant->mPosition = new nsCSSPosition();
- }
- if (nsnull != mImportant->mPosition) {
+ CSS_ENSURE_IMPORTANT(Position) {
switch (aProperty) {
- case PROP_POSITION: mImportant->mPosition->mPosition = mPosition->mPosition;
- mPosition->mPosition.Reset(); break;
- case PROP_WIDTH: mImportant->mPosition->mWidth = mPosition->mWidth;
- mPosition->mWidth.Reset(); break;
- case PROP_HEIGHT: mImportant->mPosition->mHeight = mPosition->mHeight;
- mPosition->mHeight.Reset(); break;
- case PROP_LEFT: mImportant->mPosition->mLeft = mPosition->mLeft;
- mPosition->mLeft.Reset(); break;
- case PROP_TOP: mImportant->mPosition->mTop = mPosition->mTop;
- mPosition->mTop.Reset(); break;
- case PROP_Z_INDEX: mImportant->mPosition->mZIndex = mPosition->mZIndex;
- mPosition->mZIndex.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_POSITION, mPosition->mPosition);
+ CSS_CASE_IMPORTANT(PROP_WIDTH, mPosition->mWidth);
+ CSS_CASE_IMPORTANT(PROP_MIN_WIDTH, mPosition->mMinWidth);
+ CSS_CASE_IMPORTANT(PROP_MAX_WIDTH, mPosition->mMaxWidth);
+ CSS_CASE_IMPORTANT(PROP_HEIGHT, mPosition->mHeight);
+ CSS_CASE_IMPORTANT(PROP_MIN_HEIGHT, mPosition->mMinHeight);
+ CSS_CASE_IMPORTANT(PROP_MAX_HEIGHT, mPosition->mMaxHeight);
+ CSS_CASE_IMPORTANT(PROP_Z_INDEX, mPosition->mZIndex);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ break;
+
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ if (nsnull != mPosition) {
+ if (nsnull != mPosition->mOffset) {
+ CSS_ENSURE_IMPORTANT(Position) {
+ CSS_ENSURE_RECT(mImportant->mPosition->mOffset) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_TOP, mPosition->mOffset->mTop);
+ CSS_CASE_IMPORTANT(PROP_RIGHT, mPosition->mOffset->mRight);
+ CSS_CASE_IMPORTANT(PROP_BOTTOM, mPosition->mOffset->mBottom);
+ CSS_CASE_IMPORTANT(PROP_LEFT, mPosition->mOffset->mLeft);
+ }
+ }
+ }
}
}
break;
@@ -1718,97 +1629,134 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_LIST_STYLE_IMAGE:
case PROP_LIST_STYLE_POSITION:
if (nsnull != mList) {
- if (nsnull == mImportant->mList) {
- mImportant->mList = new nsCSSList();
- }
- if (nsnull != mImportant->mList) {
+ CSS_ENSURE_IMPORTANT(List) {
switch (aProperty) {
- case PROP_LIST_STYLE_TYPE: mImportant->mList->mType = mList->mType;
- mList->mType.Reset(); break;
- case PROP_LIST_STYLE_IMAGE: mImportant->mList->mImage = mList->mImage;
- mList->mImage.Reset(); break;
- case PROP_LIST_STYLE_POSITION: mImportant->mList->mPosition = mList->mPosition;
- mList->mPosition.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_TYPE, mList->mType);
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_IMAGE, mList->mImage);
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_POSITION, mList->mPosition);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
- // nsCSSDisplay
- case PROP_FLOAT:
- case PROP_CLEAR:
- case PROP_DISPLAY:
- case PROP_DIRECTION:
- case PROP_VISIBILITY:
- case PROP_OVERFLOW:
- case PROP_FILTER:
- if (nsnull != mDisplay) {
- if (nsnull == mImportant->mDisplay) {
- mImportant->mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mImportant->mDisplay) {
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ if (nsnull != mTable) {
+ CSS_ENSURE_IMPORTANT(Table) {
switch (aProperty) {
- case PROP_FLOAT: mImportant->mDisplay->mFloat = mDisplay->mFloat;
- mDisplay->mFloat.Reset(); break;
- case PROP_CLEAR: mImportant->mDisplay->mClear = mDisplay->mClear;
- mDisplay->mClear.Reset(); break;
- case PROP_DISPLAY: mImportant->mDisplay->mDisplay = mDisplay->mDisplay;
- mDisplay->mDisplay.Reset(); break;
- case PROP_DIRECTION: mImportant->mDisplay->mDirection = mDisplay->mDirection;
- mDisplay->mDirection.Reset(); break;
- case PROP_VISIBILITY: mImportant->mDisplay->mVisibility = mDisplay->mVisibility;
- mDisplay->mVisibility.Reset(); break;
- case PROP_OVERFLOW: mImportant->mDisplay->mOverflow = mDisplay->mOverflow;
- mDisplay->mOverflow.Reset(); break;
- case PROP_FILTER: mImportant->mDisplay->mFilter = mDisplay->mFilter;
- mDisplay->mFilter.Reset(); break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- break;
-
- case PROP_CLIP_TOP:
- case PROP_CLIP_RIGHT:
- case PROP_CLIP_BOTTOM:
- case PROP_CLIP_LEFT:
- if (nsnull != mDisplay) {
- if (nsnull != mDisplay->mClip) {
- if (nsnull == mImportant->mDisplay) {
- mImportant->mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mImportant->mDisplay) {
- if (nsnull == mImportant->mDisplay->mClip) {
- mImportant->mDisplay->mClip = new nsCSSRect();
- }
- if (nsnull != mImportant->mDisplay->mClip) {
- switch(aProperty) {
- case PROP_CLIP_TOP: mImportant->mDisplay->mClip->mTop = mDisplay->mClip->mTop;
- mDisplay->mClip->mTop.Reset(); break;
- case PROP_CLIP_RIGHT: mImportant->mDisplay->mClip->mRight = mDisplay->mClip->mRight;
- mDisplay->mClip->mRight.Reset(); break;
- case PROP_CLIP_BOTTOM: mImportant->mDisplay->mClip->mBottom = mDisplay->mClip->mBottom;
- mDisplay->mClip->mBottom.Reset(); break;
- case PROP_CLIP_LEFT: mImportant->mDisplay->mClip->mLeft = mDisplay->mClip->mLeft;
- mDisplay->mClip->mLeft.Reset(); break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ CSS_CASE_IMPORTANT(PROP_BORDER_COLLAPSE, mTable->mBorderCollapse);
+ CSS_CASE_IMPORTANT(PROP_BORDER_SPACING, mTable->mBorderSpacing);
+ CSS_CASE_IMPORTANT(PROP_CAPTION_SIDE, mTable->mCaptionSide);
+ CSS_CASE_IMPORTANT(PROP_EMPTY_CELLS, mTable->mEmptyCells);
+ CSS_CASE_IMPORTANT(PROP_TABLE_LAYOUT, mTable->mLayout);
}
}
}
break;
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ if (nsnull != mBreaks) {
+ CSS_ENSURE_IMPORTANT(Breaks) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_ORPHANS, mBreaks->mOrphans);
+ CSS_CASE_IMPORTANT(PROP_WIDOWS, mBreaks->mWidows);
+ CSS_CASE_IMPORTANT(PROP_PAGE, mBreaks->mPage);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_AFTER, mBreaks->mPageBreakAfter);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_BEFORE, mBreaks->mPageBreakBefore);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_INSIDE, mBreaks->mPageBreakInside);
+ }
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ if (nsnull != mPage) {
+ CSS_ENSURE_IMPORTANT(Page) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_MARKS, mPage->mMarks);
+ CSS_CASE_IMPORTANT(PROP_SIZE, mPage->mSize);
+ }
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ if (nsnull != mContent) {
+ CSS_ENSURE_IMPORTANT(Content) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_CONTENT, mContent->mContent);
+ CSS_CASE_IMPORTANT(PROP_COUNTER_INCREMENT, mContent->mCounterIncrement);
+ CSS_CASE_IMPORTANT(PROP_COUNTER_RESET, mContent->mCounterReset);
+ CSS_CASE_IMPORTANT(PROP_MARKER_OFFSET, mContent->mMarkerOffset);
+ CSS_CASE_IMPORTANT(PROP_QUOTES, mContent->mQuotes);
+ }
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ if (nsnull != mAural) {
+ CSS_ENSURE_IMPORTANT(Aural) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_AZIMUTH, mAural->mAzimuth);
+ CSS_CASE_IMPORTANT(PROP_ELEVATION, mAural->mElevation);
+ CSS_CASE_IMPORTANT(PROP_CUE_AFTER, mAural->mCueAfter);
+ CSS_CASE_IMPORTANT(PROP_CUE_BEFORE, mAural->mCueBefore);
+ CSS_CASE_IMPORTANT(PROP_PAUSE_AFTER, mAural->mPauseAfter);
+ CSS_CASE_IMPORTANT(PROP_PAUSE_BEFORE, mAural->mPauseBefore);
+ CSS_CASE_IMPORTANT(PROP_PITCH, mAural->mPitch);
+ CSS_CASE_IMPORTANT(PROP_PITCH_RANGE, mAural->mPitchRange);
+ CSS_CASE_IMPORTANT(PROP_PLAY_DURING, mAural->mPlayDuring);
+ CSS_CASE_IMPORTANT(PROP_RICHNESS, mAural->mRichness);
+ CSS_CASE_IMPORTANT(PROP_SPEAK, mAural->mSpeak);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_HEADER, mAural->mSpeakHeader);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_NUMERAL, mAural->mSpeakNumeral);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_PUNCTUATION, mAural->mSpeakPunctuation);
+ CSS_CASE_IMPORTANT(PROP_SPEECH_RATE, mAural->mSpeechRate);
+ CSS_CASE_IMPORTANT(PROP_STRESS, mAural->mStress);
+ CSS_CASE_IMPORTANT(PROP_VOICE_FAMILY, mAural->mVoiceFamily);
+ CSS_CASE_IMPORTANT(PROP_VOLUME, mAural->mVolume);
+ }
+ }
+ }
+ break;
+
+ // Shorthands
case PROP_BACKGROUND:
SetValueImportant(PROP_BACKGROUND_COLOR);
SetValueImportant(PROP_BACKGROUND_IMAGE);
@@ -1838,6 +1786,10 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
SetValueImportant(PROP_CLIP_BOTTOM);
SetValueImportant(PROP_CLIP_LEFT);
break;
+ case PROP_CUE:
+ SetValueImportant(PROP_CUE_AFTER);
+ SetValueImportant(PROP_CUE_BEFORE);
+ break;
case PROP_FONT:
SetValueImportant(PROP_FONT_FAMILY);
SetValueImportant(PROP_FONT_STYLE);
@@ -1857,12 +1809,21 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
SetValueImportant(PROP_MARGIN_BOTTOM);
SetValueImportant(PROP_MARGIN_LEFT);
break;
+ case PROP_OUTLINE:
+ SetValueImportant(PROP_OUTLINE_COLOR);
+ SetValueImportant(PROP_OUTLINE_STYLE);
+ SetValueImportant(PROP_OUTLINE_WIDTH);
+ break;
case PROP_PADDING:
SetValueImportant(PROP_PADDING_TOP);
SetValueImportant(PROP_PADDING_RIGHT);
SetValueImportant(PROP_PADDING_BOTTOM);
SetValueImportant(PROP_PADDING_LEFT);
break;
+ case PROP_PAUSE:
+ SetValueImportant(PROP_PAUSE_AFTER);
+ SetValueImportant(PROP_PAUSE_BEFORE);
+ break;
case PROP_BACKGROUND_POSITION:
SetValueImportant(PROP_BACKGROUND_X_POSITION);
SetValueImportant(PROP_BACKGROUND_Y_POSITION);
@@ -1947,13 +1908,17 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
if (nsnull != mFont) {
switch (aProperty) {
- case PROP_FONT_FAMILY: aValue = mFont->mFamily; break;
- case PROP_FONT_STYLE: aValue = mFont->mStyle; break;
- case PROP_FONT_VARIANT: aValue = mFont->mVariant; break;
- case PROP_FONT_WEIGHT: aValue = mFont->mWeight; break;
- case PROP_FONT_SIZE: aValue = mFont->mSize; break;
+ case PROP_FONT_FAMILY: aValue = mFont->mFamily; break;
+ case PROP_FONT_STYLE: aValue = mFont->mStyle; break;
+ case PROP_FONT_VARIANT: aValue = mFont->mVariant; break;
+ case PROP_FONT_WEIGHT: aValue = mFont->mWeight; break;
+ case PROP_FONT_SIZE: aValue = mFont->mSize; break;
+ case PROP_FONT_SIZE_ADJUST: aValue = mFont->mSizeAdjust; break;
+ case PROP_FONT_STRETCH: aValue = mFont->mStretch; break;
}
}
else {
@@ -2001,6 +1966,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
if (nsnull != mText) {
@@ -2012,6 +1978,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_TRANSFORM: aValue = mText->mTextTransform; break;
case PROP_TEXT_ALIGN: aValue = mText->mTextAlign; break;
case PROP_TEXT_INDENT: aValue = mText->mTextIndent; break;
+ case PROP_UNICODE_BIDI: aValue = mText->mUnicodeBidi; break;
case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break;
case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break;
}
@@ -2021,6 +1988,61 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ case PROP_TEXT_SHADOW_COLOR:
+ case PROP_TEXT_SHADOW_X:
+ case PROP_TEXT_SHADOW_Y:
+ case PROP_TEXT_SHADOW_RADIUS:
+ if ((nsnull != mText) && (nsnull != mText->mTextShadow)) {
+ switch (aProperty) {
+ case PROP_TEXT_SHADOW_COLOR: aValue = mText->mTextShadow->mColor; break;
+ case PROP_TEXT_SHADOW_X: aValue = mText->mTextShadow->mXOffset; break;
+ case PROP_TEXT_SHADOW_Y: aValue = mText->mTextShadow->mYOffset; break;
+ case PROP_TEXT_SHADOW_RADIUS: aValue = mText->mTextShadow->mRadius; break;
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case PROP_FLOAT:
+ case PROP_CLEAR:
+ case PROP_DISPLAY:
+ case PROP_DIRECTION:
+ case PROP_VISIBILITY:
+ case PROP_OVERFLOW:
+ case PROP_FILTER:
+ if (nsnull != mDisplay) {
+ switch (aProperty) {
+ case PROP_FLOAT: aValue = mDisplay->mFloat; break;
+ case PROP_CLEAR: aValue = mDisplay->mClear; break;
+ case PROP_DISPLAY: aValue = mDisplay->mDisplay; break;
+ case PROP_DIRECTION: aValue = mDisplay->mDirection; break;
+ case PROP_VISIBILITY: aValue = mDisplay->mVisibility; break;
+ case PROP_OVERFLOW: aValue = mDisplay->mOverflow; break;
+ case PROP_FILTER: aValue = mDisplay->mFilter; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ case PROP_CLIP_TOP:
+ case PROP_CLIP_RIGHT:
+ case PROP_CLIP_BOTTOM:
+ case PROP_CLIP_LEFT:
+ if ((nsnull != mDisplay) && (nsnull != mDisplay->mClip)) {
+ switch(aProperty) {
+ case PROP_CLIP_TOP: aValue = mDisplay->mClip->mTop; break;
+ case PROP_CLIP_RIGHT: aValue = mDisplay->mClip->mRight; break;
+ case PROP_CLIP_BOTTOM: aValue = mDisplay->mClip->mBottom; break;
+ case PROP_CLIP_LEFT: aValue = mDisplay->mClip->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
// nsCSSMargin
case PROP_MARGIN_TOP:
case PROP_MARGIN_RIGHT:
@@ -2060,12 +2082,12 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_WIDTH:
case PROP_BORDER_BOTTOM_WIDTH:
case PROP_BORDER_LEFT_WIDTH:
- if ((nsnull != mMargin) && (nsnull != mMargin->mBorder)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderWidth)) {
switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: aValue = mMargin->mBorder->mTop; break;
- case PROP_BORDER_RIGHT_WIDTH: aValue = mMargin->mBorder->mRight; break;
- case PROP_BORDER_BOTTOM_WIDTH: aValue = mMargin->mBorder->mBottom; break;
- case PROP_BORDER_LEFT_WIDTH: aValue = mMargin->mBorder->mLeft; break;
+ case PROP_BORDER_TOP_WIDTH: aValue = mMargin->mBorderWidth->mTop; break;
+ case PROP_BORDER_RIGHT_WIDTH: aValue = mMargin->mBorderWidth->mRight; break;
+ case PROP_BORDER_BOTTOM_WIDTH: aValue = mMargin->mBorderWidth->mBottom; break;
+ case PROP_BORDER_LEFT_WIDTH: aValue = mMargin->mBorderWidth->mLeft; break;
}
}
else {
@@ -2077,12 +2099,12 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_COLOR:
case PROP_BORDER_BOTTOM_COLOR:
case PROP_BORDER_LEFT_COLOR:
- if ((nsnull != mMargin) && (nsnull != mMargin->mColor)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderColor)) {
switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: aValue = mMargin->mColor->mTop; break;
- case PROP_BORDER_RIGHT_COLOR: aValue = mMargin->mColor->mRight; break;
- case PROP_BORDER_BOTTOM_COLOR: aValue = mMargin->mColor->mBottom; break;
- case PROP_BORDER_LEFT_COLOR: aValue = mMargin->mColor->mLeft; break;
+ case PROP_BORDER_TOP_COLOR: aValue = mMargin->mBorderColor->mTop; break;
+ case PROP_BORDER_RIGHT_COLOR: aValue = mMargin->mBorderColor->mRight; break;
+ case PROP_BORDER_BOTTOM_COLOR: aValue = mMargin->mBorderColor->mBottom; break;
+ case PROP_BORDER_LEFT_COLOR: aValue = mMargin->mBorderColor->mLeft; break;
}
}
else {
@@ -2094,12 +2116,27 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_STYLE:
case PROP_BORDER_BOTTOM_STYLE:
case PROP_BORDER_LEFT_STYLE:
- if ((nsnull != mMargin) && (nsnull != mMargin->mStyle)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderStyle)) {
switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: aValue = mMargin->mStyle->mTop; break;
- case PROP_BORDER_RIGHT_STYLE: aValue = mMargin->mStyle->mRight; break;
- case PROP_BORDER_BOTTOM_STYLE: aValue = mMargin->mStyle->mBottom; break;
- case PROP_BORDER_LEFT_STYLE: aValue = mMargin->mStyle->mLeft; break;
+ case PROP_BORDER_TOP_STYLE: aValue = mMargin->mBorderStyle->mTop; break;
+ case PROP_BORDER_RIGHT_STYLE: aValue = mMargin->mBorderStyle->mRight; break;
+ case PROP_BORDER_BOTTOM_STYLE: aValue = mMargin->mBorderStyle->mBottom; break;
+ case PROP_BORDER_LEFT_STYLE: aValue = mMargin->mBorderStyle->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ if (nsnull != mMargin) {
+ switch (aProperty) {
+ case PROP_OUTLINE_WIDTH: aValue = mMargin->mOutlineWidth; break;
+ case PROP_OUTLINE_COLOR: aValue = mMargin->mOutlineColor; break;
+ case PROP_OUTLINE_STYLE: aValue = mMargin->mOutlineStyle; break;
}
}
else {
@@ -2110,17 +2147,21 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
// nsCSSPosition
case PROP_POSITION:
case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
case PROP_Z_INDEX:
if (nsnull != mPosition) {
switch (aProperty) {
case PROP_POSITION: aValue = mPosition->mPosition; break;
case PROP_WIDTH: aValue = mPosition->mWidth; break;
+ case PROP_MIN_WIDTH: aValue = mPosition->mMinWidth; break;
+ case PROP_MAX_WIDTH: aValue = mPosition->mMaxWidth; break;
case PROP_HEIGHT: aValue = mPosition->mHeight; break;
- case PROP_LEFT: aValue = mPosition->mLeft; break;
- case PROP_TOP: aValue = mPosition->mTop; break;
+ case PROP_MIN_HEIGHT: aValue = mPosition->mMinHeight; break;
+ case PROP_MAX_HEIGHT: aValue = mPosition->mMaxHeight; break;
case PROP_Z_INDEX: aValue = mPosition->mZIndex; break;
}
}
@@ -2129,6 +2170,23 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ if ((nsnull != mPosition) && (nsnull != mPosition->mOffset)) {
+ switch (aProperty) {
+ case PROP_TOP: aValue = mPosition->mOffset->mTop; break;
+ case PROP_RIGHT: aValue = mPosition->mOffset->mRight; break;
+ case PROP_BOTTOM: aValue = mPosition->mOffset->mBottom; break;
+ case PROP_LEFT: aValue = mPosition->mOffset->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
// nsCSSList
case PROP_LIST_STYLE_TYPE:
case PROP_LIST_STYLE_IMAGE:
@@ -2145,23 +2203,19 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
- // nsCSSDisplay
- case PROP_FLOAT:
- case PROP_CLEAR:
- case PROP_DISPLAY:
- case PROP_DIRECTION:
- case PROP_VISIBILITY:
- case PROP_OVERFLOW:
- case PROP_FILTER:
- if (nsnull != mDisplay) {
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ if (nsnull != mTable) {
switch (aProperty) {
- case PROP_FLOAT: aValue = mDisplay->mFloat; break;
- case PROP_CLEAR: aValue = mDisplay->mClear; break;
- case PROP_DISPLAY: aValue = mDisplay->mDisplay; break;
- case PROP_DIRECTION: aValue = mDisplay->mDirection; break;
- case PROP_VISIBILITY: aValue = mDisplay->mVisibility; break;
- case PROP_OVERFLOW: aValue = mDisplay->mOverflow; break;
- case PROP_FILTER: aValue = mDisplay->mFilter; break;
+ case PROP_BORDER_COLLAPSE: aValue = mTable->mBorderCollapse; break;
+ case PROP_BORDER_SPACING: aValue = mTable->mBorderSpacing; break;
+ case PROP_CAPTION_SIDE: aValue = mTable->mCaptionSide; break;
+ case PROP_EMPTY_CELLS: aValue = mTable->mEmptyCells; break;
+ case PROP_TABLE_LAYOUT: aValue = mTable->mLayout; break;
}
}
else {
@@ -2169,16 +2223,21 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
- case PROP_CLIP_TOP:
- case PROP_CLIP_RIGHT:
- case PROP_CLIP_BOTTOM:
- case PROP_CLIP_LEFT:
- if ((nsnull != mDisplay) && (nsnull != mDisplay->mClip)) {
- switch(aProperty) {
- case PROP_CLIP_TOP: aValue = mDisplay->mClip->mTop; break;
- case PROP_CLIP_RIGHT: aValue = mDisplay->mClip->mRight; break;
- case PROP_CLIP_BOTTOM: aValue = mDisplay->mClip->mBottom; break;
- case PROP_CLIP_LEFT: aValue = mDisplay->mClip->mLeft; break;
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ if (nsnull != mBreaks) {
+ switch (aProperty) {
+ case PROP_ORPHANS: aValue = mBreaks->mOrphans; break;
+ case PROP_WIDOWS: aValue = mBreaks->mWidows; break;
+ case PROP_PAGE: aValue = mBreaks->mPage; break;
+ case PROP_PAGE_BREAK_AFTER: aValue = mBreaks->mPageBreakAfter; break;
+ case PROP_PAGE_BREAK_BEFORE: aValue = mBreaks->mPageBreakBefore; break;
+ case PROP_PAGE_BREAK_INSIDE: aValue = mBreaks->mPageBreakInside; break;
}
}
else {
@@ -2186,13 +2245,99 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ if (nsnull != mPage) {
+ switch (aProperty) {
+ case PROP_MARKS: aValue = mPage->mMarks; break;
+ case PROP_SIZE: aValue = mPage->mSize; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ if (nsnull != mContent) {
+ switch (aProperty) {
+ case PROP_CONTENT: aValue = mContent->mContent; break;
+ case PROP_COUNTER_INCREMENT: aValue = mContent->mCounterIncrement; break;
+ case PROP_COUNTER_RESET: aValue = mContent->mCounterReset; break;
+ case PROP_MARKER_OFFSET: aValue = mContent->mMarkerOffset; break;
+ case PROP_QUOTES: aValue = mContent->mQuotes; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ if (nsnull != mAural) {
+ switch (aProperty) {
+ case PROP_AZIMUTH: aValue = mAural->mAzimuth; break;
+ case PROP_ELEVATION: aValue = mAural->mElevation; break;
+ case PROP_CUE_AFTER: aValue = mAural->mCueAfter; break;
+ case PROP_CUE_BEFORE: aValue = mAural->mCueBefore; break;
+ case PROP_PAUSE_AFTER: aValue = mAural->mPauseAfter; break;
+ case PROP_PAUSE_BEFORE: aValue = mAural->mPauseBefore; break;
+ case PROP_PITCH: aValue = mAural->mPitch; break;
+ case PROP_PITCH_RANGE: aValue = mAural->mPitchRange; break;
+ case PROP_PLAY_DURING: aValue = mAural->mPlayDuring; break;
+ case PROP_RICHNESS: aValue = mAural->mRichness; break;
+ case PROP_SPEAK: aValue = mAural->mSpeak; break;
+ case PROP_SPEAK_HEADER: aValue = mAural->mSpeakHeader; break;
+ case PROP_SPEAK_NUMERAL: aValue = mAural->mSpeakNumeral; break;
+ case PROP_SPEAK_PUNCTUATION: aValue = mAural->mSpeakPunctuation; break;
+ case PROP_SPEECH_RATE: aValue = mAural->mSpeechRate; break;
+ case PROP_STRESS: aValue = mAural->mStress; break;
+ case PROP_VOICE_FAMILY: aValue = mAural->mVoiceFamily; break;
+ case PROP_VOLUME: aValue = mAural->mVolume; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+
+ // Shorthands
case PROP_BACKGROUND:
case PROP_BORDER:
case PROP_CLIP:
+ case PROP_CUE:
case PROP_FONT:
case PROP_LIST_STYLE:
case PROP_MARGIN:
+ case PROP_OUTLINE:
case PROP_PADDING:
+ case PROP_PAUSE:
+ case PROP_TEXT_SHADOW:
case PROP_BACKGROUND_POSITION:
case PROP_BORDER_TOP:
case PROP_BORDER_RIGHT:
@@ -2251,109 +2396,284 @@ nsresult CSSDeclarationImpl::GetValue(const nsString& aProperty, nsString& aValu
return GetValue(propID, aValue);
}
-nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsString& aValue)
+PRBool CSSDeclarationImpl::AppendValueToString(PRInt32 aProperty, nsString& aResult)
{
nsCSSValue value;
GetValue(aProperty, value);
+ return AppendValueToString(aProperty, value, aResult);
+}
- nsCSSUnit unit = value.GetUnit();
-
- aValue.Truncate(0);
+PRBool CSSDeclarationImpl::AppendValueToString(PRInt32 aProperty, const nsCSSValue& aValue, nsString& aResult)
+{
+ nsCSSUnit unit = aValue.GetUnit();
if (eCSSUnit_Null == unit) {
- return NS_OK;
+ return PR_FALSE;
}
if (eCSSUnit_String == unit) {
nsAutoString buffer;
- value.GetStringValue(buffer);
- aValue.Append(buffer);
+ aValue.GetStringValue(buffer);
+ aResult.Append(buffer);
}
else if (eCSSUnit_Integer == unit) {
- aValue.Append(value.GetIntValue(), 10);
+ aResult.Append(aValue.GetIntValue(), 10);
}
else if (eCSSUnit_Enumerated == unit) {
if (PROP_TEXT_DECORATION == aProperty) {
- PRInt32 intValue = value.GetIntValue();
+ PRInt32 intValue = aValue.GetIntValue();
if (NS_STYLE_TEXT_DECORATION_NONE != intValue) {
PRInt32 mask;
for (mask = NS_STYLE_TEXT_DECORATION_UNDERLINE;
mask <= NS_STYLE_TEXT_DECORATION_BLINK;
mask <<= 1) {
if ((mask & intValue) == mask) {
- aValue.Append(nsCSSProps::LookupProperty(aProperty, mask));
+ aResult.Append(nsCSSProps::LookupProperty(aProperty, mask));
intValue &= ~mask;
if (0 != intValue) { // more left
- aValue.Append(' ');
+ aResult.Append(' ');
}
}
}
}
else {
- aValue.Append(nsCSSProps::LookupProperty(aProperty, NS_STYLE_TEXT_DECORATION_NONE));
+ aResult.Append(nsCSSProps::LookupProperty(aProperty, NS_STYLE_TEXT_DECORATION_NONE));
}
}
else {
- const char* name = nsCSSProps::LookupProperty(aProperty, value.GetIntValue());
+ const char* name = nsCSSProps::LookupProperty(aProperty, aValue.GetIntValue());
if (name != nsnull) {
- aValue.Append(name);
+ aResult.Append(name);
}
}
}
else if (eCSSUnit_Color == unit){
- nscolor color = value.GetColorValue();
+ nscolor color = aValue.GetColorValue();
const char* name = RGBToCSSString(color);
if (name != nsnull)
- aValue.Append(name);
+ aResult.Append(name);
else
{
- aValue.Append("rgb(");
- aValue.Append(NS_GET_R(color), 10);
- aValue.Append(",");
- aValue.Append(NS_GET_G(color), 10);
- aValue.Append(",");
- aValue.Append(NS_GET_B(color), 10);
- aValue.Append(')');
+ aResult.Append("rgb(");
+ aResult.Append(NS_GET_R(color), 10);
+ aResult.Append(",");
+ aResult.Append(NS_GET_G(color), 10);
+ aResult.Append(",");
+ aResult.Append(NS_GET_B(color), 10);
+ aResult.Append(')');
}
}
else if (eCSSUnit_Percent == unit) {
- aValue.Append(value.GetPercentValue() * 100.0f);
+ aResult.Append(aValue.GetPercentValue() * 100.0f);
}
else if (eCSSUnit_Percent < unit) { // length unit
- aValue.Append(value.GetFloatValue());
+ aResult.Append(aValue.GetFloatValue());
}
switch (unit) {
case eCSSUnit_Null: break;
- case eCSSUnit_Auto: aValue.Append("auto"); break;
- case eCSSUnit_Inherit: aValue.Append("inherit"); break;
- case eCSSUnit_None: aValue.Append("none"); break;
- case eCSSUnit_Normal: aValue.Append("normal"); break;
+ case eCSSUnit_Auto: aResult.Append("auto"); break;
+ case eCSSUnit_Inherit: aResult.Append("inherit"); break;
+ case eCSSUnit_None: aResult.Append("none"); break;
+ case eCSSUnit_Normal: aResult.Append("normal"); break;
case eCSSUnit_String: break;
case eCSSUnit_Integer: break;
case eCSSUnit_Enumerated: break;
case eCSSUnit_Color: break;
- case eCSSUnit_Percent: aValue.Append("%"); break;
+ case eCSSUnit_Percent: aResult.Append("%"); break;
case eCSSUnit_Number: break;
- case eCSSUnit_Inch: aValue.Append("in"); break;
- case eCSSUnit_Foot: aValue.Append("ft"); break;
- case eCSSUnit_Mile: aValue.Append("mi"); break;
- case eCSSUnit_Millimeter: aValue.Append("mm"); break;
- case eCSSUnit_Centimeter: aValue.Append("cm"); break;
- case eCSSUnit_Meter: aValue.Append("m"); break;
- case eCSSUnit_Kilometer: aValue.Append("km"); break;
- case eCSSUnit_Point: aValue.Append("pt"); break;
- case eCSSUnit_Pica: aValue.Append("pc"); break;
- case eCSSUnit_Didot: aValue.Append("dt"); break;
- case eCSSUnit_Cicero: aValue.Append("cc"); break;
- case eCSSUnit_EM: aValue.Append("em"); break;
- case eCSSUnit_EN: aValue.Append("en"); break;
- case eCSSUnit_XHeight: aValue.Append("ex"); break;
- case eCSSUnit_CapHeight: aValue.Append("cap"); break;
- case eCSSUnit_Pixel: aValue.Append("px"); break;
+ case eCSSUnit_Inch: aResult.Append("in"); break;
+ case eCSSUnit_Foot: aResult.Append("ft"); break;
+ case eCSSUnit_Mile: aResult.Append("mi"); break;
+ case eCSSUnit_Millimeter: aResult.Append("mm"); break;
+ case eCSSUnit_Centimeter: aResult.Append("cm"); break;
+ case eCSSUnit_Meter: aResult.Append("m"); break;
+ case eCSSUnit_Kilometer: aResult.Append("km"); break;
+ case eCSSUnit_Point: aResult.Append("pt"); break;
+ case eCSSUnit_Pica: aResult.Append("pc"); break;
+ case eCSSUnit_Didot: aResult.Append("dt"); break;
+ case eCSSUnit_Cicero: aResult.Append("cc"); break;
+ case eCSSUnit_EM: aResult.Append("em"); break;
+ case eCSSUnit_EN: aResult.Append("en"); break;
+ case eCSSUnit_XHeight: aResult.Append("ex"); break;
+ case eCSSUnit_CapHeight: aResult.Append("cap"); break;
+ case eCSSUnit_Pixel: aResult.Append("px"); break;
}
+ return PR_TRUE;
+}
+
+#define HAS_VALUE(strct,data) \
+ ((nsnull != strct) && (eCSSUnit_Null != strct->data.GetUnit()))
+#define HAS_RECT(strct,rect) \
+ ((nsnull != strct) && (nsnull != strct->rect) && \
+ (eCSSUnit_Null != strct->rect->mTop.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mRight.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mBottom.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mLeft.GetUnit()))
+
+nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsString& aValue)
+{
+ aValue.Truncate(0);
+
+ // shorthands
+ switch (aProperty) {
+ case PROP_BACKGROUND:
+ if (AppendValueToString(PROP_BACKGROUND_COLOR, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_IMAGE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_REPEAT, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_ATTACHMENT, aValue)) aValue.Append(' ');
+ if (HAS_VALUE(mColor,mBackPositionX) && HAS_VALUE(mColor,mBackPositionY)) {
+ AppendValueToString(PROP_BACKGROUND_X_POSITION, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_BACKGROUND_Y_POSITION, aValue);
+ }
+ break;
+ case PROP_BORDER:
+ if (AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_TOP_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue);
+ break;
+ case PROP_CLIP:
+ if (HAS_RECT(mDisplay,mClip)) {
+ aValue.Append("rect(");
+ AppendValueToString(PROP_CLIP_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_LEFT, aValue);
+ aValue.Append(")");
+ }
+ break;
+ case PROP_CUE:
+ if (HAS_VALUE(mAural,mCueAfter) && HAS_VALUE(mAural,mCueBefore)) {
+ AppendValueToString(PROP_CUE_AFTER, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_CUE_BEFORE, aValue);
+ }
+ break;
+ case PROP_FONT:
+ if (HAS_VALUE(mFont,mSize)) {
+ if (AppendValueToString(PROP_FONT_STYLE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_FONT_VARIANT, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_FONT_WEIGHT, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_FONT_SIZE, aValue);
+ if (HAS_VALUE(mText,mLineHeight)) {
+ aValue.Append('/');
+ AppendValueToString(PROP_LINE_HEIGHT, aValue);
+ }
+ aValue.Append(' ');
+ AppendValueToString(PROP_FONT_FAMILY, aValue);
+ }
+ break;
+ case PROP_LIST_STYLE:
+ if (AppendValueToString(PROP_LIST_STYLE_TYPE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_LIST_STYLE_POSITION, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_LIST_STYLE_IMAGE, aValue);
+ break;
+ case PROP_MARGIN:
+ if (HAS_RECT(mMargin,mMargin)) {
+ AppendValueToString(PROP_MARGIN_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_LEFT, aValue);
+ }
+ break;
+ case PROP_OUTLINE:
+ if (AppendValueToString(PROP_OUTLINE_COLOR, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_OUTLINE_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_OUTLINE_WIDTH, aValue);
+ break;
+ case PROP_PADDING:
+ if (HAS_RECT(mMargin,mPadding)) {
+ AppendValueToString(PROP_PADDING_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_LEFT, aValue);
+ }
+ break;
+ case PROP_PAUSE:
+ if (HAS_VALUE(mAural,mPauseAfter) && HAS_VALUE(mAural,mPauseBefore)) {
+ AppendValueToString(PROP_PAUSE_AFTER, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_PAUSE_BEFORE, aValue);
+ }
+ break;
+ case PROP_TEXT_SHADOW:
+ if ((nsnull != mText) && (nsnull != mText->mTextShadow)) {
+ if (eCSSUnit_Color == mText->mTextShadow->mColor.GetUnit()) {
+ nsCSSShadow* shadow = mText->mTextShadow;
+ while (nsnull != shadow) {
+ if (AppendValueToString(PROP_TEXT_SHADOW_COLOR, shadow->mColor, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_TEXT_SHADOW_X, shadow->mXOffset, aValue)) {
+ aValue.Append(' ');
+ AppendValueToString(PROP_TEXT_SHADOW_Y, shadow->mYOffset, aValue);
+ aValue.Append(' ');
+ }
+ if (AppendValueToString(PROP_TEXT_SHADOW_RADIUS, shadow->mRadius, aValue)) aValue.Append(' ');
+ shadow = shadow->mNext;
+ }
+ }
+ else { // none or inherit
+ AppendValueToString(PROP_TEXT_SHADOW_COLOR, aValue);
+ }
+ }
+ break;
+ case PROP_BACKGROUND_POSITION:
+ if (HAS_VALUE(mColor,mBackPositionX) && HAS_VALUE(mColor,mBackPositionY)) {
+ AppendValueToString(PROP_BACKGROUND_X_POSITION, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_BACKGROUND_Y_POSITION, aValue);
+ }
+ break;
+ case PROP_BORDER_TOP:
+ if (AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_TOP_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue);
+ break;
+ case PROP_BORDER_RIGHT:
+ if (AppendValueToString(PROP_BORDER_RIGHT_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_RIGHT_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_COLOR, aValue);
+ break;
+ case PROP_BORDER_BOTTOM:
+ if (AppendValueToString(PROP_BORDER_BOTTOM_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_BOTTOM_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_COLOR, aValue);
+ break;
+ case PROP_BORDER_LEFT:
+ if (AppendValueToString(PROP_BORDER_LEFT_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_LEFT_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_COLOR, aValue);
+ break;
+ case PROP_BORDER_COLOR:
+ if (HAS_RECT(mMargin,mBorderColor)) {
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_COLOR, aValue);
+ }
+ break;
+ case PROP_BORDER_STYLE:
+ if (HAS_RECT(mMargin,mBorderStyle)) {
+ AppendValueToString(PROP_BORDER_TOP_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_STYLE, aValue);
+ }
+ break;
+ case PROP_BORDER_WIDTH:
+ if (HAS_RECT(mMargin,mBorderWidth)) {
+ AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_WIDTH, aValue);
+ }
+ break;
+ default:
+ AppendValueToString(aProperty, aValue);
+ break;
+ }
return NS_OK;
}
@@ -2434,6 +2754,9 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mText) {
mText->List(out);
}
+ if (nsnull != mDisplay) {
+ mDisplay->List(out);
+ }
if (nsnull != mMargin) {
mMargin->List(out);
}
@@ -2443,8 +2766,20 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mList) {
mList->List(out);
}
- if (nsnull != mDisplay) {
- mDisplay->List(out);
+ if (nsnull != mTable) {
+ mTable->List(out);
+ }
+ if (nsnull != mBreaks) {
+ mBreaks->List(out);
+ }
+ if (nsnull != mPage) {
+ mPage->List(out);
+ }
+ if (nsnull != mContent) {
+ mContent->List(out);
+ }
+ if (nsnull != mAural) {
+ mAural->List(out);
}
fputs("}", out);
@@ -2501,78 +2836,3 @@ NS_HTML nsresult
}
-
-
-/*
-font
-===========
-font-family: string (list)
-font-style: enum
-font-variant: enum (ie: small caps)
-font-weight: enum
-font-size: abs, pct, enum, +-1
-
-
-color/background
-=============
-color: color
-background-color: color
-background-image: url(string)
-background-repeat: enum
-background-attachment: enum
-background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?))
-cursor: enum
-cursor-image: url(string)
-
-
-text
-=======
-word-spacing: abs, "normal"
-letter-spacing: abs, "normal"
-text-decoration: enum
-vertical-align: enum, pct
-text-transform: enum
-text-align: enum
-text-indent: abs, pct
-line-height: "normal", abs, pct, number-factor
-white-space: enum
-
-margin
-=======
-margin-top -right -bottom -left: "auto", abs, pct
-padding-top -right -bottom -left: abs, pct
-border-top -right -bottom -left-width: enum, abs
-border-top -right -bottom -left-color: color
-border-top -right -bottom -left-style: enum
-
-size
-=======
-position: enum
-width: abs, pct, "auto"
-height: abs, pct, "auto"
-left: abs, pct, "auto"
-top: abs, pct, "auto"
-clip: shape, "auto" (shape: rect - abs, auto)
-overflow: enum
-z-index: int, auto
-visibity: enum
-
-display
-=======
-float: enum
-clear: enum
-direction: enum
-display: enum
-
-filter: string
-
-list
-========
-list-style-type: enum
-list-style-image: url, "none"
-list-style-position: enum (bool? in/out)
-
-*/
-
-
-
diff --git a/mozilla/content/html/style/src/nsCSSStruct.cpp b/mozilla/content/html/style/src/nsCSSStruct.cpp
index 945f4bb3114..0da611fecf8 100644
--- a/mozilla/content/html/style/src/nsCSSStruct.cpp
+++ b/mozilla/content/html/style/src/nsCSSStruct.cpp
@@ -188,325 +188,15 @@ static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID);
static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID);
static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID);
static NS_DEFINE_IID(kCSSListSID, NS_CSS_LIST_SID);
+static NS_DEFINE_IID(kCSSTableSID, NS_CSS_TABLE_SID);
+static NS_DEFINE_IID(kCSSBreaksSID, NS_CSS_BREAKS_SID);
+static NS_DEFINE_IID(kCSSPageSID, NS_CSS_PAGE_SID);
+static NS_DEFINE_IID(kCSSContentSID, NS_CSS_CONTENT_SID);
+static NS_DEFINE_IID(kCSSAuralSID, NS_CSS_AURAL_SID);
static NS_DEFINE_IID(kICSSDeclarationIID, NS_ICSS_DECLARATION_IID);
-nsCSSValue::nsCSSValue(nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION(mUnit <= eCSSUnit_Normal, "not a valueless unit");
- if (aUnit > eCSSUnit_Normal) {
- mUnit = eCSSUnit_Null;
- }
- mValue.mInt = 0;
-}
-
-nsCSSValue::nsCSSValue(PRInt32 aValue, nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit), "not an int value");
- if ((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit)) {
- mValue.mInt = aValue;
- }
- else {
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
- }
-}
-
-nsCSSValue::nsCSSValue(float aValue, nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION(eCSSUnit_Percent <= aUnit, "not a float value");
- if (eCSSUnit_Percent <= aUnit) {
- mValue.mFloat = aValue;
- }
- else {
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
- }
-}
-
-nsCSSValue::nsCSSValue(const nsString& aValue)
- : mUnit(eCSSUnit_String)
-{
- mValue.mString = aValue.ToNewString();
-}
-
-nsCSSValue::nsCSSValue(nscolor aValue)
- : mUnit(eCSSUnit_Color)
-{
- mValue.mColor = aValue;
-}
-
-nsCSSValue::nsCSSValue(const nsCSSValue& aCopy)
- : mUnit(aCopy.mUnit)
-{
- if (eCSSUnit_String == mUnit) {
- if (nsnull != aCopy.mValue.mString) {
- mValue.mString = (aCopy.mValue.mString)->ToNewString();
- }
- else {
- mValue.mString = nsnull;
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- mValue.mInt = aCopy.mValue.mInt;
- }
- else if (eCSSUnit_Color == mUnit){
- mValue.mColor = aCopy.mValue.mColor;
- }
- else {
- mValue.mFloat = aCopy.mValue.mFloat;
- }
-}
-
-nsCSSValue::~nsCSSValue(void)
-{
- Reset();
-}
-
-nsCSSValue& nsCSSValue::operator=(const nsCSSValue& aCopy)
-{
- Reset();
- mUnit = aCopy.mUnit;
- if (eCSSUnit_String == mUnit) {
- if (nsnull != aCopy.mValue.mString) {
- mValue.mString = (aCopy.mValue.mString)->ToNewString();
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- mValue.mInt = aCopy.mValue.mInt;
- }
- else if (eCSSUnit_Color == mUnit){
- mValue.mColor = aCopy.mValue.mColor;
- }
- else {
- mValue.mFloat = aCopy.mValue.mFloat;
- }
- return *this;
-}
-
-PRBool nsCSSValue::operator==(const nsCSSValue& aOther) const
-{
- if (mUnit == aOther.mUnit) {
- if (eCSSUnit_String == mUnit) {
- if (nsnull == mValue.mString) {
- if (nsnull == aOther.mValue.mString) {
- return PR_TRUE;
- }
- }
- else if (nsnull != aOther.mValue.mString) {
- return mValue.mString->Equals(*(aOther.mValue.mString));
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- return PRBool(mValue.mInt == aOther.mValue.mInt);
- }
- else if (eCSSUnit_Color == mUnit){
- return PRBool(mValue.mColor == aOther.mValue.mColor);
- }
- else {
- return PRBool(mValue.mFloat == aOther.mValue.mFloat);
- }
- }
- return PR_FALSE;
-}
-
-nscoord nsCSSValue::GetLengthTwips(void) const
-{
- NS_ASSERTION(IsFixedLengthUnit(), "not a fixed length unit");
-
- if (IsFixedLengthUnit()) {
- switch (mUnit) {
- case eCSSUnit_Inch:
- return NS_INCHES_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Foot:
- return NS_FEET_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Mile:
- return NS_MILES_TO_TWIPS(mValue.mFloat);
-
- case eCSSUnit_Millimeter:
- return NS_MILLIMETERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Centimeter:
- return NS_CENTIMETERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Meter:
- return NS_METERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Kilometer:
- return NS_KILOMETERS_TO_TWIPS(mValue.mFloat);
-
- case eCSSUnit_Point:
- return NSFloatPointsToTwips(mValue.mFloat);
- case eCSSUnit_Pica:
- return NS_PICAS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Didot:
- return NS_DIDOTS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Cicero:
- return NS_CICEROS_TO_TWIPS(mValue.mFloat);
- }
- }
- return 0;
-}
-
-void nsCSSValue::Reset(void)
-{
- if ((eCSSUnit_String == mUnit) && (nsnull != mValue.mString)) {
- delete mValue.mString;
- }
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
-};
-
-void nsCSSValue::SetIntValue(PRInt32 aValue, nsCSSUnit aUnit)
-{
- NS_ASSERTION((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit), "not an int value");
- Reset();
- if ((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit)) {
- mUnit = aUnit;
- mValue.mInt = aValue;
- }
-}
-
-void nsCSSValue::SetPercentValue(float aValue)
-{
- Reset();
- mUnit = eCSSUnit_Percent;
- mValue.mFloat = aValue;
-}
-
-void nsCSSValue::SetFloatValue(float aValue, nsCSSUnit aUnit)
-{
- NS_ASSERTION(eCSSUnit_Number <= aUnit, "not a float value");
- Reset();
- if (eCSSUnit_Number <= aUnit) {
- mUnit = aUnit;
- mValue.mFloat = aValue;
- }
-}
-
-void nsCSSValue::SetStringValue(const nsString& aValue)
-{
- Reset();
- mUnit = eCSSUnit_String;
- mValue.mString = aValue.ToNewString();
-}
-
-void nsCSSValue::SetColorValue(nscolor aValue)
-{
- Reset();
- mUnit = eCSSUnit_Color;
- mValue.mColor = aValue;
-}
-
-void nsCSSValue::SetAutoValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Auto;
-}
-
-void nsCSSValue::SetInheritValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Inherit;
-}
-
-void nsCSSValue::SetNoneValue(void)
-{
- Reset();
- mUnit = eCSSUnit_None;
-}
-
-void nsCSSValue::SetNormalValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Normal;
-}
-
-void nsCSSValue::AppendToString(nsString& aBuffer, PRInt32 aPropID) const
-{
- if (eCSSUnit_Null == mUnit) {
- return;
- }
-
- if (-1 < aPropID) {
- aBuffer.Append(nsCSSProps::kNameTable[aPropID].name);
- aBuffer.Append(": ");
- }
-
- if (eCSSUnit_String == mUnit) {
- if (nsnull != mValue.mString) {
- aBuffer.Append('"');
- aBuffer.Append(*(mValue.mString));
- aBuffer.Append('"');
- }
- else {
- aBuffer.Append("null str");
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- aBuffer.Append(mValue.mInt, 10);
- aBuffer.Append("[0x");
- aBuffer.Append(mValue.mInt, 16);
- aBuffer.Append(']');
- }
- else if (eCSSUnit_Color == mUnit){
- aBuffer.Append("(0x");
- aBuffer.Append(NS_GET_R(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_G(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_B(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_A(mValue.mColor), 16);
- aBuffer.Append(')');
- }
- else if (eCSSUnit_Percent == mUnit) {
- aBuffer.Append(mValue.mFloat * 100.0f);
- }
- else if (eCSSUnit_Percent < mUnit) {
- aBuffer.Append(mValue.mFloat);
- }
-
- switch (mUnit) {
- case eCSSUnit_Null: break;
- case eCSSUnit_Auto: aBuffer.Append("auto"); break;
- case eCSSUnit_Inherit: aBuffer.Append("inherit"); break;
- case eCSSUnit_None: aBuffer.Append("none"); break;
- case eCSSUnit_String: break;
- case eCSSUnit_Integer: aBuffer.Append("int"); break;
- case eCSSUnit_Enumerated: aBuffer.Append("enum"); break;
- case eCSSUnit_Color: aBuffer.Append("rbga"); break;
- case eCSSUnit_Percent: aBuffer.Append("%"); break;
- case eCSSUnit_Number: aBuffer.Append("#"); break;
- case eCSSUnit_Inch: aBuffer.Append("in"); break;
- case eCSSUnit_Foot: aBuffer.Append("ft"); break;
- case eCSSUnit_Mile: aBuffer.Append("mi"); break;
- case eCSSUnit_Millimeter: aBuffer.Append("mm"); break;
- case eCSSUnit_Centimeter: aBuffer.Append("cm"); break;
- case eCSSUnit_Meter: aBuffer.Append("m"); break;
- case eCSSUnit_Kilometer: aBuffer.Append("km"); break;
- case eCSSUnit_Point: aBuffer.Append("pt"); break;
- case eCSSUnit_Pica: aBuffer.Append("pc"); break;
- case eCSSUnit_Didot: aBuffer.Append("dt"); break;
- case eCSSUnit_Cicero: aBuffer.Append("cc"); break;
- case eCSSUnit_EM: aBuffer.Append("em"); break;
- case eCSSUnit_EN: aBuffer.Append("en"); break;
- case eCSSUnit_XHeight: aBuffer.Append("ex"); break;
- case eCSSUnit_CapHeight: aBuffer.Append("cap"); break;
- case eCSSUnit_Pixel: aBuffer.Append("px"); break;
- }
- aBuffer.Append(' ');
-}
-
-void nsCSSValue::ToString(nsString& aBuffer, PRInt32 aPropID) const
-{
- aBuffer.Truncate();
- AppendToString(aBuffer, aPropID);
-}
+// --- nsCSSFont -----------------
const nsID& nsCSSFont::GetID(void)
{
@@ -524,10 +214,14 @@ void nsCSSFont::List(FILE* out, PRInt32 aIndent) const
mVariant.AppendToString(buffer, PROP_FONT_VARIANT);
mWeight.AppendToString(buffer, PROP_FONT_WEIGHT);
mSize.AppendToString(buffer, PROP_FONT_SIZE);
+ mSizeAdjust.AppendToString(buffer, PROP_FONT_SIZE_ADJUST);
+ mStretch.AppendToString(buffer, PROP_FONT_STRETCH);
fputs(buffer, out);
}
+// --- nsCSSColor -----------------
+
const nsID& nsCSSColor::GetID(void)
{
return kCSSColorSID;
@@ -553,6 +247,34 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSText -----------------
+
+nsCSSShadow::nsCSSShadow(void)
+ : mNext(nsnull)
+{
+}
+
+nsCSSShadow::~nsCSSShadow(void)
+{
+ if (nsnull != mNext) {
+ delete mNext;
+ }
+}
+
+// --- nsCSSText -----------------
+
+nsCSSText::nsCSSText(void)
+ : mTextShadow(nsnull)
+{
+}
+
+nsCSSText::~nsCSSText(void)
+{
+ if (nsnull != mTextShadow) {
+ delete mTextShadow;
+ }
+}
+
const nsID& nsCSSText::GetID(void)
{
return kCSSTextSID;
@@ -571,11 +293,29 @@ void nsCSSText::List(FILE* out, PRInt32 aIndent) const
mTextTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM);
mTextAlign.AppendToString(buffer, PROP_TEXT_ALIGN);
mTextIndent.AppendToString(buffer, PROP_TEXT_INDENT);
+ if (nsnull != mTextShadow) {
+ if (eCSSUnit_Color == mTextShadow->mColor.GetUnit()) {
+ nsCSSShadow* shadow = mTextShadow;
+ while (nsnull != shadow) {
+ shadow->mColor.AppendToString(buffer, PROP_TEXT_SHADOW_COLOR);
+ shadow->mXOffset.AppendToString(buffer, PROP_TEXT_SHADOW_X);
+ shadow->mYOffset.AppendToString(buffer, PROP_TEXT_SHADOW_Y);
+ shadow->mRadius.AppendToString(buffer, PROP_TEXT_SHADOW_RADIUS);
+ shadow = shadow->mNext;
+ }
+ }
+ else {
+ mTextShadow->mColor.AppendToString(buffer, PROP_TEXT_SHADOW);
+ }
+ }
+ mUnicodeBidi.AppendToString(buffer, PROP_UNICODE_BIDI);
mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT);
mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE);
fputs(buffer, out);
}
+// --- nsCSSRect -----------------
+
void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const
{
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
@@ -624,6 +364,8 @@ void nsCSSRect::List(FILE* out, PRInt32 aIndent, PRIntn aTRBL[]) const
fputs(buffer, out);
}
+// --- nsCSSDisplay -----------------
+
nsCSSDisplay::nsCSSDisplay(void)
: mClip(nsnull)
{
@@ -662,8 +404,11 @@ void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSMargin -----------------
+
nsCSSMargin::nsCSSMargin(void)
- : mMargin(nsnull), mPadding(nsnull), mBorder(nsnull), mColor(nsnull), mStyle(nsnull)
+ : mMargin(nsnull), mPadding(nsnull),
+ mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull)
{
}
@@ -675,14 +420,14 @@ nsCSSMargin::~nsCSSMargin(void)
if (nsnull != mPadding) {
delete mPadding;
}
- if (nsnull != mBorder) {
- delete mBorder;
+ if (nsnull != mBorderWidth) {
+ delete mBorderWidth;
}
- if (nsnull != mColor) {
- delete mColor;
+ if (nsnull != mBorderColor) {
+ delete mBorderColor;
}
- if (nsnull != mStyle) {
- delete mStyle;
+ if (nsnull != mBorderStyle) {
+ delete mBorderStyle;
}
}
@@ -693,8 +438,6 @@ const nsID& nsCSSMargin::GetID(void)
void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
{
- for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
-
if (nsnull != mMargin) {
static PRIntn trbl[] = {
PROP_MARGIN_TOP,
@@ -713,20 +456,42 @@ void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
};
mPadding->List(out, aIndent, trbl);
}
- if (nsnull != mBorder) {
+ if (nsnull != mBorderWidth) {
static PRIntn trbl[] = {
PROP_BORDER_TOP_WIDTH,
PROP_BORDER_RIGHT_WIDTH,
PROP_BORDER_BOTTOM_WIDTH,
PROP_BORDER_LEFT_WIDTH
};
- mBorder->List(out, aIndent, trbl);
+ mBorderWidth->List(out, aIndent, trbl);
}
- if (nsnull != mColor) {
- mColor->List(out, PROP_BORDER_COLOR, aIndent);
+ if (nsnull != mBorderColor) {
+ mBorderColor->List(out, PROP_BORDER_COLOR, aIndent);
}
- if (nsnull != mStyle) {
- mStyle->List(out, PROP_BORDER_STYLE, aIndent);
+ if (nsnull != mBorderStyle) {
+ mBorderStyle->List(out, PROP_BORDER_STYLE, aIndent);
+ }
+
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+ mOutlineWidth.AppendToString(buffer, PROP_OUTLINE_WIDTH);
+ mOutlineColor.AppendToString(buffer, PROP_OUTLINE_COLOR);
+ mOutlineStyle.AppendToString(buffer, PROP_OUTLINE_STYLE);
+ fputs(buffer, out);
+}
+
+// --- nsCSSPosition -----------------
+
+nsCSSPosition::nsCSSPosition(void)
+ : mOffset(nsnull)
+{
+}
+
+nsCSSPosition::~nsCSSPosition(void)
+{
+ if (nsnull != mOffset) {
+ delete mOffset;
}
}
@@ -743,13 +508,27 @@ void nsCSSPosition::List(FILE* out, PRInt32 aIndent) const
mPosition.AppendToString(buffer, PROP_POSITION);
mWidth.AppendToString(buffer, PROP_WIDTH);
+ mMinWidth.AppendToString(buffer, PROP_MIN_WIDTH);
+ mMaxWidth.AppendToString(buffer, PROP_MAX_WIDTH);
mHeight.AppendToString(buffer, PROP_HEIGHT);
- mLeft.AppendToString(buffer, PROP_LEFT);
- mTop.AppendToString(buffer, PROP_TOP);
+ mMinHeight.AppendToString(buffer, PROP_MIN_HEIGHT);
+ mMaxHeight.AppendToString(buffer, PROP_MAX_HEIGHT);
mZIndex.AppendToString(buffer, PROP_Z_INDEX);
fputs(buffer, out);
+
+ if (nsnull != mOffset) {
+ static PRIntn trbl[] = {
+ PROP_TOP,
+ PROP_RIGHT,
+ PROP_BOTTOM,
+ PROP_LEFT
+ };
+ mOffset->List(out, aIndent, trbl);
+ }
}
+// --- nsCSSList -----------------
+
const nsID& nsCSSList::GetID(void)
{
return kCSSListSID;
@@ -767,6 +546,130 @@ void nsCSSList::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSTable -----------------
+
+const nsID& nsCSSTable::GetID(void)
+{
+ return kCSSTableSID;
+}
+
+void nsCSSTable::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mBorderCollapse.AppendToString(buffer, PROP_BORDER_COLLAPSE);
+ mBorderSpacing.AppendToString(buffer, PROP_BORDER_SPACING);
+ mCaptionSide.AppendToString(buffer, PROP_CAPTION_SIDE);
+ mEmptyCells.AppendToString(buffer, PROP_EMPTY_CELLS);
+ mLayout.AppendToString(buffer, PROP_TABLE_LAYOUT);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSBreaks -----------------
+
+const nsID& nsCSSBreaks::GetID(void)
+{
+ return kCSSBreaksSID;
+}
+
+void nsCSSBreaks::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mOrphans.AppendToString(buffer, PROP_ORPHANS);
+ mWidows.AppendToString(buffer, PROP_WIDOWS);
+ mPage.AppendToString(buffer, PROP_PAGE);
+ mPageBreakAfter.AppendToString(buffer, PROP_PAGE_BREAK_AFTER);
+ mPageBreakBefore.AppendToString(buffer, PROP_PAGE_BREAK_BEFORE);
+ mPageBreakInside.AppendToString(buffer, PROP_PAGE_BREAK_INSIDE);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSPage -----------------
+
+const nsID& nsCSSPage::GetID(void)
+{
+ return kCSSPageSID;
+}
+
+void nsCSSPage::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mMarks.AppendToString(buffer, PROP_MARKS);
+ mSize.AppendToString(buffer, PROP_SIZE);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSContent -----------------
+
+const nsID& nsCSSContent::GetID(void)
+{
+ return kCSSContentSID;
+}
+
+void nsCSSContent::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mContent.AppendToString(buffer, PROP_CONTENT);
+ mCounterIncrement.AppendToString(buffer, PROP_COUNTER_INCREMENT);
+ mCounterReset.AppendToString(buffer, PROP_COUNTER_RESET);
+ mMarkerOffset.AppendToString(buffer, PROP_MARKER_OFFSET);
+ mQuotes.AppendToString(buffer, PROP_QUOTES);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSAural -----------------
+
+const nsID& nsCSSAural::GetID(void)
+{
+ return kCSSAuralSID;
+}
+
+void nsCSSAural::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mAzimuth.AppendToString(buffer, PROP_AZIMUTH);
+ mElevation.AppendToString(buffer, PROP_ELEVATION);
+ mCueAfter.AppendToString(buffer, PROP_CUE_AFTER);
+ mCueBefore.AppendToString(buffer, PROP_CUE_BEFORE);
+ mPauseAfter.AppendToString(buffer, PROP_PAUSE_AFTER);
+ mPauseBefore.AppendToString(buffer, PROP_PAUSE_BEFORE);
+ mPitch.AppendToString(buffer, PROP_PITCH);
+ mPitchRange.AppendToString(buffer, PROP_PITCH_RANGE);
+ mPlayDuring.AppendToString(buffer, PROP_PLAY_DURING);
+ mRichness.AppendToString(buffer, PROP_RICHNESS);
+ mSpeak.AppendToString(buffer, PROP_SPEAK);
+ mSpeakHeader.AppendToString(buffer, PROP_SPEAK_HEADER);
+ mSpeakNumeral.AppendToString(buffer, PROP_SPEAK_NUMERAL);
+ mSpeakPunctuation.AppendToString(buffer, PROP_SPEAK_PUNCTUATION);
+ mSpeechRate.AppendToString(buffer, PROP_SPEECH_RATE);
+ mStress.AppendToString(buffer, PROP_STRESS);
+ mVoiceFamily.AppendToString(buffer, PROP_VOICE_FAMILY);
+ mVolume.AppendToString(buffer, PROP_VOLUME);
+
+ fputs(buffer, out);
+}
+
+
+
+// --- nsCSSDeclaration -----------------
class CSSDeclarationImpl : public nsICSSDeclaration {
@@ -795,6 +698,9 @@ public:
nsresult GetImportantValues(nsICSSDeclaration*& aResult);
nsresult GetValueIsImportant(const char *aProperty, PRBool& aIsImportant);
+ PRBool AppendValueToString(PRInt32 aProperty, nsString& aResult);
+ PRBool AppendValueToString(PRInt32 aProperty, const nsCSSValue& aValue, nsString& aResult);
+
virtual nsresult ToString(nsString& aString);
void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
@@ -815,6 +721,11 @@ protected:
nsCSSPosition* mPosition;
nsCSSList* mList;
nsCSSDisplay* mDisplay;
+ nsCSSTable* mTable;
+ nsCSSBreaks* mBreaks;
+ nsCSSPage* mPage;
+ nsCSSContent* mContent;
+ nsCSSAural* mAural;
CSSDeclarationImpl* mImportant;
@@ -844,29 +755,23 @@ CSSDeclarationImpl::CSSDeclarationImpl(void)
#endif
}
+#define CSS_IF_DELETE(ptr) if (nsnull != ptr) delete ptr;
+
CSSDeclarationImpl::~CSSDeclarationImpl(void)
{
- if (nsnull != mFont) {
- delete mFont;
- }
- if (nsnull != mColor) {
- delete mColor;
- }
- if (nsnull != mText) {
- delete mText;
- }
- if (nsnull != mMargin) {
- delete mMargin;
- }
- if (nsnull != mPosition) {
- delete mPosition;
- }
- if (nsnull != mList) {
- delete mList;
- }
- if (nsnull != mDisplay) {
- delete mDisplay;
- }
+ CSS_IF_DELETE(mFont);
+ CSS_IF_DELETE(mColor);
+ CSS_IF_DELETE(mText);
+ CSS_IF_DELETE(mMargin);
+ CSS_IF_DELETE(mPosition);
+ CSS_IF_DELETE(mList);
+ CSS_IF_DELETE(mDisplay);
+ CSS_IF_DELETE(mTable);
+ CSS_IF_DELETE(mBreaks);
+ CSS_IF_DELETE(mPage);
+ CSS_IF_DELETE(mContent);
+ CSS_IF_DELETE(mAural);
+
NS_IF_RELEASE(mImportant);
if (nsnull != mOrder) {
delete mOrder;
@@ -888,88 +793,56 @@ CSSDeclarationImpl::~CSSDeclarationImpl(void)
NS_IMPL_ISUPPORTS(CSSDeclarationImpl, kICSSDeclarationIID);
+#define CSS_IF_GET_ELSE(sid,ptr,result) \
+ if (sid.Equals(kCSS##ptr##SID)) { *result = m##ptr; } else
+
nsresult CSSDeclarationImpl::GetData(const nsID& aSID, nsCSSStruct** aDataPtr)
{
if (nsnull == aDataPtr) {
return NS_ERROR_NULL_POINTER;
}
- if (aSID.Equals(kCSSFontSID)) {
- *aDataPtr = mFont;
- }
- else if (aSID.Equals(kCSSColorSID)) {
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSDisplaySID)) {
- *aDataPtr = mDisplay;
- }
- else if (aSID.Equals(kCSSTextSID)) {
- *aDataPtr = mText;
- }
- else if (aSID.Equals(kCSSMarginSID)) {
- *aDataPtr = mMargin;
- }
- else if (aSID.Equals(kCSSPositionSID)) {
- *aDataPtr = mPosition;
- }
- else if (aSID.Equals(kCSSListSID)) {
- *aDataPtr = mList;
- }
- else {
+ CSS_IF_GET_ELSE(aSID, Font, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Color, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Display, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Text, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Margin, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Position, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, List, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Table, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Breaks, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Page, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Content, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Aural, aDataPtr) {
return NS_NOINTERFACE;
}
return NS_OK;
}
+#define CSS_IF_ENSURE_ELSE(sid,ptr,result) \
+ if (sid.Equals(kCSS##ptr##SID)) { \
+ if (nsnull == m##ptr) { m##ptr = new nsCSS##ptr(); } \
+ *result = m##ptr; \
+ } else
+
nsresult CSSDeclarationImpl::EnsureData(const nsID& aSID, nsCSSStruct** aDataPtr)
{
if (nsnull == aDataPtr) {
return NS_ERROR_NULL_POINTER;
}
- if (aSID.Equals(kCSSFontSID)) {
- if (nsnull == mFont) {
- mFont = new nsCSSFont();
- }
- *aDataPtr = mFont;
- }
- else if (aSID.Equals(kCSSColorSID)) {
- if (nsnull == mColor) {
- mColor = new nsCSSColor();
- }
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSDisplaySID)) {
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSTextSID)) {
- if (nsnull == mText) {
- mText = new nsCSSText();
- }
- *aDataPtr = mText;
- }
- else if (aSID.Equals(kCSSMarginSID)) {
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- *aDataPtr = mMargin;
- }
- else if (aSID.Equals(kCSSPositionSID)) {
- if (nsnull == mPosition) {
- mPosition = new nsCSSPosition();
- }
- *aDataPtr = mPosition;
- }
- else if (aSID.Equals(kCSSListSID)) {
- if (nsnull == mList) {
- mList = new nsCSSList();
- }
- *aDataPtr = mList;
- }
- else {
+ CSS_IF_ENSURE_ELSE(aSID, Font, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Color, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Display, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Text, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Margin, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Position, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, List, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Table, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Breaks, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Page, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Content, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Aural, aDataPtr) {
return NS_NOINTERFACE;
}
if (nsnull == *aDataPtr) {
@@ -983,6 +856,24 @@ nsresult CSSDeclarationImpl::AppendValue(const char* aProperty, const nsCSSValue
return AppendValue(nsCSSProps::LookupName(aProperty), aValue);
}
+#define CSS_ENSURE(data) \
+ if (nsnull == m##data) { \
+ m##data = new nsCSS##data(); \
+ } \
+ if (nsnull == m##data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
+#define CSS_ENSURE_RECT(data) \
+ if (nsnull == data) { \
+ data = new nsCSSRect(); \
+ } \
+ if (nsnull == data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aValue)
{
nsresult result = NS_OK;
@@ -994,21 +885,19 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
- if (nsnull == mFont) {
- mFont = new nsCSSFont();
- }
- if (nsnull != mFont) {
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
+ CSS_ENSURE(Font) {
switch (aProperty) {
- case PROP_FONT_FAMILY: mFont->mFamily = aValue; break;
- case PROP_FONT_STYLE: mFont->mStyle = aValue; break;
- case PROP_FONT_VARIANT: mFont->mVariant = aValue; break;
- case PROP_FONT_WEIGHT: mFont->mWeight = aValue; break;
- case PROP_FONT_SIZE: mFont->mSize = aValue; break;
+ case PROP_FONT_FAMILY: mFont->mFamily = aValue; break;
+ case PROP_FONT_STYLE: mFont->mStyle = aValue; break;
+ case PROP_FONT_VARIANT: mFont->mVariant = aValue; break;
+ case PROP_FONT_WEIGHT: mFont->mWeight = aValue; break;
+ case PROP_FONT_SIZE: mFont->mSize = aValue; break;
+ case PROP_FONT_SIZE_ADJUST: mFont->mSizeAdjust = aValue; break;
+ case PROP_FONT_STRETCH: mFont->mStretch = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSColor
@@ -1023,10 +912,7 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
case PROP_OPACITY:
- if (nsnull == mColor) {
- mColor = new nsCSSColor();
- }
- if (nsnull != mColor) {
+ CSS_ENSURE(Color) {
switch (aProperty) {
case PROP_COLOR: mColor->mColor = aValue; break;
case PROP_BACKGROUND_COLOR: mColor->mBackColor = aValue; break;
@@ -1041,9 +927,6 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_OPACITY: mColor->mOpacity = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSText
@@ -1054,12 +937,10 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
- if (nsnull == mText) {
- mText = new nsCSSText();
- }
- if (nsnull != mText) {
+ CSS_ENSURE(Text) {
switch (aProperty) {
case PROP_WORD_SPACING: mText->mWordSpacing = aValue; break;
case PROP_LETTER_SPACING: mText->mLetterSpacing = aValue; break;
@@ -1068,198 +949,11 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_TEXT_TRANSFORM: mText->mTextTransform = aValue; break;
case PROP_TEXT_ALIGN: mText->mTextAlign = aValue; break;
case PROP_TEXT_INDENT: mText->mTextIndent = aValue; break;
+ case PROP_UNICODE_BIDI: mText->mUnicodeBidi = aValue; break;
case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break;
case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSMargin
- case PROP_MARGIN_TOP:
- case PROP_MARGIN_RIGHT:
- case PROP_MARGIN_BOTTOM:
- case PROP_MARGIN_LEFT:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mMargin) {
- mMargin->mMargin = new nsCSSRect();
- }
- if (nsnull != mMargin->mMargin) {
- switch (aProperty) {
- case PROP_MARGIN_TOP: mMargin->mMargin->mTop = aValue; break;
- case PROP_MARGIN_RIGHT: mMargin->mMargin->mRight = aValue; break;
- case PROP_MARGIN_BOTTOM: mMargin->mMargin->mBottom = aValue; break;
- case PROP_MARGIN_LEFT: mMargin->mMargin->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_PADDING_TOP:
- case PROP_PADDING_RIGHT:
- case PROP_PADDING_BOTTOM:
- case PROP_PADDING_LEFT:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mPadding) {
- mMargin->mPadding = new nsCSSRect();
- }
- if (nsnull != mMargin->mPadding) {
- switch (aProperty) {
- case PROP_PADDING_TOP: mMargin->mPadding->mTop = aValue; break;
- case PROP_PADDING_RIGHT: mMargin->mPadding->mRight = aValue; break;
- case PROP_PADDING_BOTTOM: mMargin->mPadding->mBottom = aValue; break;
- case PROP_PADDING_LEFT: mMargin->mPadding->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_WIDTH:
- case PROP_BORDER_RIGHT_WIDTH:
- case PROP_BORDER_BOTTOM_WIDTH:
- case PROP_BORDER_LEFT_WIDTH:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mBorder) {
- mMargin->mBorder = new nsCSSRect();
- }
- if (nsnull != mMargin->mBorder) {
- switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: mMargin->mBorder->mTop = aValue; break;
- case PROP_BORDER_RIGHT_WIDTH: mMargin->mBorder->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_WIDTH: mMargin->mBorder->mBottom = aValue; break;
- case PROP_BORDER_LEFT_WIDTH: mMargin->mBorder->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_COLOR:
- case PROP_BORDER_RIGHT_COLOR:
- case PROP_BORDER_BOTTOM_COLOR:
- case PROP_BORDER_LEFT_COLOR:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mColor) {
- mMargin->mColor = new nsCSSRect();
- }
- if (nsnull != mMargin->mColor) {
- switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: mMargin->mColor->mTop = aValue; break;
- case PROP_BORDER_RIGHT_COLOR: mMargin->mColor->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_COLOR: mMargin->mColor->mBottom = aValue; break;
- case PROP_BORDER_LEFT_COLOR: mMargin->mColor->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_STYLE:
- case PROP_BORDER_RIGHT_STYLE:
- case PROP_BORDER_BOTTOM_STYLE:
- case PROP_BORDER_LEFT_STYLE:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mStyle) {
- mMargin->mStyle = new nsCSSRect();
- }
- if (nsnull != mMargin->mStyle) {
- switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: mMargin->mStyle->mTop = aValue; break;
- case PROP_BORDER_RIGHT_STYLE: mMargin->mStyle->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_STYLE: mMargin->mStyle->mBottom = aValue; break;
- case PROP_BORDER_LEFT_STYLE: mMargin->mStyle->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSPosition
- case PROP_POSITION:
- case PROP_WIDTH:
- case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
- case PROP_Z_INDEX:
- if (nsnull == mPosition) {
- mPosition = new nsCSSPosition();
- }
- if (nsnull != mPosition) {
- switch (aProperty) {
- case PROP_POSITION: mPosition->mPosition = aValue; break;
- case PROP_WIDTH: mPosition->mWidth = aValue; break;
- case PROP_HEIGHT: mPosition->mHeight = aValue; break;
- case PROP_LEFT: mPosition->mLeft = aValue; break;
- case PROP_TOP: mPosition->mTop = aValue; break;
- case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSList
- case PROP_LIST_STYLE_TYPE:
- case PROP_LIST_STYLE_IMAGE:
- case PROP_LIST_STYLE_POSITION:
- if (nsnull == mList) {
- mList = new nsCSSList();
- }
- if (nsnull != mList) {
- switch (aProperty) {
- case PROP_LIST_STYLE_TYPE: mList->mType = aValue; break;
- case PROP_LIST_STYLE_IMAGE: mList->mImage = aValue; break;
- case PROP_LIST_STYLE_POSITION: mList->mPosition = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSDisplay
@@ -1270,10 +964,7 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_VISIBILITY:
case PROP_OVERFLOW:
case PROP_FILTER:
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mDisplay) {
+ CSS_ENSURE(Display) {
switch (aProperty) {
case PROP_FLOAT: mDisplay->mFloat = aValue; break;
case PROP_CLEAR: mDisplay->mClear = aValue; break;
@@ -1284,23 +975,14 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_FILTER: mDisplay->mFilter = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
case PROP_CLIP_TOP:
case PROP_CLIP_RIGHT:
case PROP_CLIP_BOTTOM:
case PROP_CLIP_LEFT:
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mDisplay) {
- if (nsnull == mDisplay->mClip) {
- mDisplay->mClip = new nsCSSRect();
- }
- if (nsnull != mDisplay->mClip) {
+ CSS_ENSURE(Display) {
+ CSS_ENSURE_RECT(mDisplay->mClip) {
switch(aProperty) {
case PROP_CLIP_TOP: mDisplay->mClip->mTop = aValue; break;
case PROP_CLIP_RIGHT: mDisplay->mClip->mRight = aValue; break;
@@ -1308,22 +990,273 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_CLIP_LEFT: mDisplay->mClip->mLeft = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
break;
+ // nsCSSMargin
+ case PROP_MARGIN_TOP:
+ case PROP_MARGIN_RIGHT:
+ case PROP_MARGIN_BOTTOM:
+ case PROP_MARGIN_LEFT:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mMargin) {
+ switch (aProperty) {
+ case PROP_MARGIN_TOP: mMargin->mMargin->mTop = aValue; break;
+ case PROP_MARGIN_RIGHT: mMargin->mMargin->mRight = aValue; break;
+ case PROP_MARGIN_BOTTOM: mMargin->mMargin->mBottom = aValue; break;
+ case PROP_MARGIN_LEFT: mMargin->mMargin->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_PADDING_TOP:
+ case PROP_PADDING_RIGHT:
+ case PROP_PADDING_BOTTOM:
+ case PROP_PADDING_LEFT:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mPadding) {
+ switch (aProperty) {
+ case PROP_PADDING_TOP: mMargin->mPadding->mTop = aValue; break;
+ case PROP_PADDING_RIGHT: mMargin->mPadding->mRight = aValue; break;
+ case PROP_PADDING_BOTTOM: mMargin->mPadding->mBottom = aValue; break;
+ case PROP_PADDING_LEFT: mMargin->mPadding->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_WIDTH:
+ case PROP_BORDER_RIGHT_WIDTH:
+ case PROP_BORDER_BOTTOM_WIDTH:
+ case PROP_BORDER_LEFT_WIDTH:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderWidth) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_WIDTH: mMargin->mBorderWidth->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_WIDTH: mMargin->mBorderWidth->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_WIDTH: mMargin->mBorderWidth->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_WIDTH: mMargin->mBorderWidth->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_COLOR:
+ case PROP_BORDER_RIGHT_COLOR:
+ case PROP_BORDER_BOTTOM_COLOR:
+ case PROP_BORDER_LEFT_COLOR:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderColor) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_COLOR: mMargin->mBorderColor->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_COLOR: mMargin->mBorderColor->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_COLOR: mMargin->mBorderColor->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_COLOR: mMargin->mBorderColor->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_STYLE:
+ case PROP_BORDER_RIGHT_STYLE:
+ case PROP_BORDER_BOTTOM_STYLE:
+ case PROP_BORDER_LEFT_STYLE:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderStyle) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_STYLE: mMargin->mBorderStyle->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_STYLE: mMargin->mBorderStyle->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_STYLE: mMargin->mBorderStyle->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_STYLE: mMargin->mBorderStyle->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ CSS_ENSURE(Margin) {
+ switch (aProperty) {
+ case PROP_OUTLINE_WIDTH: mMargin->mOutlineWidth = aValue; break;
+ case PROP_OUTLINE_COLOR: mMargin->mOutlineColor = aValue; break;
+ case PROP_OUTLINE_STYLE: mMargin->mOutlineStyle = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSPosition
+ case PROP_POSITION:
+ case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
+ case PROP_HEIGHT:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
+ case PROP_Z_INDEX:
+ CSS_ENSURE(Position) {
+ switch (aProperty) {
+ case PROP_POSITION: mPosition->mPosition = aValue; break;
+ case PROP_WIDTH: mPosition->mWidth = aValue; break;
+ case PROP_MIN_WIDTH: mPosition->mMinWidth = aValue; break;
+ case PROP_MAX_WIDTH: mPosition->mMaxWidth = aValue; break;
+ case PROP_HEIGHT: mPosition->mHeight = aValue; break;
+ case PROP_MIN_HEIGHT: mPosition->mMinHeight = aValue; break;
+ case PROP_MAX_HEIGHT: mPosition->mMaxHeight = aValue; break;
+ case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
+ }
+ }
+ break;
+
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ CSS_ENSURE(Position) {
+ CSS_ENSURE_RECT(mPosition->mOffset) {
+ switch (aProperty) {
+ case PROP_TOP: mPosition->mOffset->mTop = aValue; break;
+ case PROP_RIGHT: mPosition->mOffset->mRight= aValue; break;
+ case PROP_BOTTOM: mPosition->mOffset->mBottom = aValue; break;
+ case PROP_LEFT: mPosition->mOffset->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ // nsCSSList
+ case PROP_LIST_STYLE_TYPE:
+ case PROP_LIST_STYLE_IMAGE:
+ case PROP_LIST_STYLE_POSITION:
+ CSS_ENSURE(List) {
+ switch (aProperty) {
+ case PROP_LIST_STYLE_TYPE: mList->mType = aValue; break;
+ case PROP_LIST_STYLE_IMAGE: mList->mImage = aValue; break;
+ case PROP_LIST_STYLE_POSITION: mList->mPosition = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ CSS_ENSURE(Table) {
+ switch (aProperty) {
+ case PROP_BORDER_COLLAPSE: mTable->mBorderCollapse = aValue; break;
+ case PROP_BORDER_SPACING: mTable->mBorderSpacing = aValue; break;
+ case PROP_CAPTION_SIDE: mTable->mCaptionSide = aValue; break;
+ case PROP_EMPTY_CELLS: mTable->mEmptyCells = aValue; break;
+ case PROP_TABLE_LAYOUT: mTable->mLayout = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ CSS_ENSURE(Breaks) {
+ switch (aProperty) {
+ case PROP_ORPHANS: mBreaks->mOrphans = aValue; break;
+ case PROP_WIDOWS: mBreaks->mWidows = aValue; break;
+ case PROP_PAGE: mBreaks->mPage = aValue; break;
+ case PROP_PAGE_BREAK_AFTER: mBreaks->mPageBreakAfter = aValue; break;
+ case PROP_PAGE_BREAK_BEFORE: mBreaks->mPageBreakBefore = aValue; break;
+ case PROP_PAGE_BREAK_INSIDE: mBreaks->mPageBreakInside = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ CSS_ENSURE(Page) {
+ switch (aProperty) {
+ case PROP_MARKS: mPage->mMarks = aValue; break;
+ case PROP_SIZE: mPage->mSize = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ CSS_ENSURE(Content) {
+ switch (aProperty) {
+ case PROP_CONTENT: mContent->mContent = aValue; break;
+ case PROP_COUNTER_INCREMENT: mContent->mCounterIncrement = aValue; break;
+ case PROP_COUNTER_RESET: mContent->mCounterReset = aValue; break;
+ case PROP_MARKER_OFFSET: mContent->mMarkerOffset = aValue; break;
+ case PROP_QUOTES: mContent->mQuotes = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ CSS_ENSURE(Aural) {
+ switch (aProperty) {
+ case PROP_AZIMUTH: mAural->mAzimuth = aValue; break;
+ case PROP_ELEVATION: mAural->mElevation = aValue; break;
+ case PROP_CUE_AFTER: mAural->mCueAfter = aValue; break;
+ case PROP_CUE_BEFORE: mAural->mCueBefore = aValue; break;
+ case PROP_PAUSE_AFTER: mAural->mPauseAfter = aValue; break;
+ case PROP_PAUSE_BEFORE: mAural->mPauseBefore = aValue; break;
+ case PROP_PITCH: mAural->mPitch = aValue; break;
+ case PROP_PITCH_RANGE: mAural->mPitchRange = aValue; break;
+ case PROP_PLAY_DURING: mAural->mPlayDuring = aValue; break;
+ case PROP_RICHNESS: mAural->mRichness = aValue; break;
+ case PROP_SPEAK: mAural->mSpeak = aValue; break;
+ case PROP_SPEAK_HEADER: mAural->mSpeakHeader = aValue; break;
+ case PROP_SPEAK_NUMERAL: mAural->mSpeakNumeral = aValue; break;
+ case PROP_SPEAK_PUNCTUATION: mAural->mSpeakPunctuation = aValue; break;
+ case PROP_SPEECH_RATE: mAural->mSpeechRate = aValue; break;
+ case PROP_STRESS: mAural->mStress = aValue; break;
+ case PROP_VOICE_FAMILY: mAural->mVoiceFamily = aValue; break;
+ case PROP_VOLUME: mAural->mVolume = aValue; break;
+ }
+ }
+ break;
+
+ // Shorthands
case PROP_BACKGROUND:
case PROP_BORDER:
case PROP_CLIP:
+ case PROP_CUE:
case PROP_FONT:
case PROP_LIST_STYLE:
case PROP_MARGIN:
+ case PROP_OUTLINE:
case PROP_PADDING:
+ case PROP_PAUSE:
+ case PROP_TEXT_SHADOW:
case PROP_BACKGROUND_POSITION:
case PROP_BORDER_TOP:
case PROP_BORDER_RIGHT:
@@ -1364,6 +1297,18 @@ nsresult CSSDeclarationImpl::SetValueImportant(const char* aProperty)
return SetValueImportant(nsCSSProps::LookupName(aProperty));
}
+#define CSS_ENSURE_IMPORTANT(data) \
+ if (nsnull == mImportant->m##data) { \
+ mImportant->m##data = new nsCSS##data(); \
+ } \
+ if (nsnull == mImportant->m##data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
+#define CSS_CASE_IMPORTANT(prop,data) \
+ case prop: mImportant->data = data; data.Reset(); break
+
nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
{
nsresult result = NS_OK;
@@ -1385,27 +1330,20 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
if (nsnull != mFont) {
- if (nsnull == mImportant->mFont) {
- mImportant->mFont = new nsCSSFont();
- }
- if (nsnull != mImportant->mFont) {
+ CSS_ENSURE_IMPORTANT(Font) {
switch (aProperty) {
- case PROP_FONT_FAMILY: mImportant->mFont->mFamily = mFont->mFamily;
- mFont->mFamily.Reset(); break;
- case PROP_FONT_STYLE: mImportant->mFont->mStyle = mFont->mStyle;
- mFont->mStyle.Reset(); break;
- case PROP_FONT_VARIANT: mImportant->mFont->mVariant = mFont->mVariant;
- mFont->mVariant.Reset(); break;
- case PROP_FONT_WEIGHT: mImportant->mFont->mWeight = mFont->mWeight;
- mFont->mWeight.Reset(); break;
- case PROP_FONT_SIZE: mImportant->mFont->mSize = mFont->mSize;
- mFont->mSize.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_FONT_FAMILY, mFont->mFamily);
+ CSS_CASE_IMPORTANT(PROP_FONT_STYLE, mFont->mStyle);
+ CSS_CASE_IMPORTANT(PROP_FONT_VARIANT, mFont->mVariant);
+ CSS_CASE_IMPORTANT(PROP_FONT_WEIGHT, mFont->mWeight);
+ CSS_CASE_IMPORTANT(PROP_FONT_SIZE, mFont->mSize);
+ CSS_CASE_IMPORTANT(PROP_FONT_SIZE_ADJUST, mFont->mSizeAdjust);
+ CSS_CASE_IMPORTANT(PROP_FONT_STRETCH, mFont->mStretch);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
@@ -1422,38 +1360,21 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_CURSOR_IMAGE:
case PROP_OPACITY:
if (nsnull != mColor) {
- if (nsnull == mImportant->mColor) {
- mImportant->mColor = new nsCSSColor();
- }
- if (nsnull != mImportant->mColor) {
+ CSS_ENSURE_IMPORTANT(Color) {
switch (aProperty) {
- case PROP_COLOR: mImportant->mColor->mColor = mColor->mColor;
- mColor->mColor.Reset(); break;
- case PROP_BACKGROUND_COLOR: mImportant->mColor->mBackColor = mColor->mBackColor;
- mColor->mBackColor.Reset(); break;
- case PROP_BACKGROUND_IMAGE: mImportant->mColor->mBackImage = mColor->mBackImage;
- mColor->mBackImage.Reset(); break;
- case PROP_BACKGROUND_REPEAT: mImportant->mColor->mBackRepeat = mColor->mBackRepeat;
- mColor->mBackRepeat.Reset(); break;
- case PROP_BACKGROUND_ATTACHMENT: mImportant->mColor->mBackAttachment = mColor->mBackAttachment;
- mColor->mBackAttachment.Reset(); break;
- case PROP_BACKGROUND_X_POSITION: mImportant->mColor->mBackPositionX = mColor->mBackPositionX;
- mColor->mBackPositionX.Reset(); break;
- case PROP_BACKGROUND_Y_POSITION: mImportant->mColor->mBackPositionY = mColor->mBackPositionY;
- mColor->mBackPositionY.Reset(); break;
- case PROP_BACKGROUND_FILTER: mImportant->mColor->mBackFilter = mColor->mBackFilter;
- mColor->mBackFilter.Reset(); break;
- case PROP_CURSOR: mImportant->mColor->mCursor = mColor->mCursor;
- mColor->mCursor.Reset(); break;
- case PROP_CURSOR_IMAGE: mImportant->mColor->mCursorImage = mColor->mCursorImage;
- mColor->mCursorImage.Reset(); break;
- case PROP_OPACITY: mImportant->mColor->mOpacity = mColor->mOpacity;
- mColor->mOpacity.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_COLOR, mColor->mColor);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_COLOR, mColor->mBackColor);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_IMAGE, mColor->mBackImage);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_REPEAT, mColor->mBackRepeat);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_ATTACHMENT, mColor->mBackAttachment);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_X_POSITION, mColor->mBackPositionX);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_Y_POSITION, mColor->mBackPositionY);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_FILTER, mColor->mBackFilter);
+ CSS_CASE_IMPORTANT(PROP_CURSOR, mColor->mCursor);
+ CSS_CASE_IMPORTANT(PROP_CURSOR_IMAGE, mColor->mCursorImage);
+ CSS_CASE_IMPORTANT(PROP_OPACITY, mColor->mOpacity);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
@@ -1465,36 +1386,80 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
if (nsnull != mText) {
- if (nsnull == mImportant->mText) {
- mImportant->mText = new nsCSSText();
- }
- if (nsnull != mImportant->mText) {
+ CSS_ENSURE_IMPORTANT(Text) {
switch (aProperty) {
- case PROP_WORD_SPACING: mImportant->mText->mWordSpacing = mText->mWordSpacing;
- mText->mWordSpacing.Reset(); break;
- case PROP_LETTER_SPACING: mImportant->mText->mLetterSpacing = mText->mLetterSpacing;
- mText->mLetterSpacing.Reset(); break;
- case PROP_TEXT_DECORATION: mImportant->mText->mDecoration = mText->mDecoration;
- mText->mDecoration.Reset(); break;
- case PROP_VERTICAL_ALIGN: mImportant->mText->mVerticalAlign = mText->mVerticalAlign;
- mText->mVerticalAlign.Reset(); break;
- case PROP_TEXT_TRANSFORM: mImportant->mText->mTextTransform = mText->mTextTransform;
- mText->mTextTransform.Reset(); break;
- case PROP_TEXT_ALIGN: mImportant->mText->mTextAlign = mText->mTextAlign;
- mText->mTextAlign.Reset(); break;
- case PROP_TEXT_INDENT: mImportant->mText->mTextIndent = mText->mTextIndent;
- mText->mTextIndent.Reset(); break;
- case PROP_LINE_HEIGHT: mImportant->mText->mLineHeight = mText->mLineHeight;
- mText->mLineHeight.Reset(); break;
- case PROP_WHITE_SPACE: mImportant->mText->mWhiteSpace = mText->mWhiteSpace;
- mText->mWhiteSpace.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_WORD_SPACING, mText->mWordSpacing);
+ CSS_CASE_IMPORTANT(PROP_LETTER_SPACING, mText->mLetterSpacing);
+ CSS_CASE_IMPORTANT(PROP_TEXT_DECORATION, mText->mDecoration);
+ CSS_CASE_IMPORTANT(PROP_VERTICAL_ALIGN, mText->mVerticalAlign);
+ CSS_CASE_IMPORTANT(PROP_TEXT_TRANSFORM, mText->mTextTransform);
+ CSS_CASE_IMPORTANT(PROP_TEXT_ALIGN, mText->mTextAlign);
+ CSS_CASE_IMPORTANT(PROP_TEXT_INDENT, mText->mTextIndent);
+ CSS_CASE_IMPORTANT(PROP_UNICODE_BIDI, mText->mUnicodeBidi);
+ CSS_CASE_IMPORTANT(PROP_LINE_HEIGHT, mText->mLineHeight);
+ CSS_CASE_IMPORTANT(PROP_WHITE_SPACE, mText->mWhiteSpace);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ break;
+
+ case PROP_TEXT_SHADOW:
+ if (nsnull != mText) {
+ if (nsnull != mText->mTextShadow) {
+ CSS_ENSURE_IMPORTANT(Text) {
+ if (nsnull != mImportant->mText->mTextShadow) {
+ delete mImportant->mText->mTextShadow;
+ }
+ mImportant->mText->mTextShadow = mText->mTextShadow;
+ mText->mTextShadow = nsnull;
+ }
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case PROP_DIRECTION:
+ case PROP_DISPLAY:
+ case PROP_FLOAT:
+ case PROP_CLEAR:
+ case PROP_OVERFLOW:
+ case PROP_VISIBILITY:
+ case PROP_FILTER:
+ if (nsnull != mDisplay) {
+ CSS_ENSURE_IMPORTANT(Display) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_DIRECTION, mDisplay->mDirection);
+ CSS_CASE_IMPORTANT(PROP_DISPLAY, mDisplay->mDisplay);
+ CSS_CASE_IMPORTANT(PROP_FLOAT, mDisplay->mFloat);
+ CSS_CASE_IMPORTANT(PROP_CLEAR, mDisplay->mClear);
+ CSS_CASE_IMPORTANT(PROP_OVERFLOW, mDisplay->mOverflow);
+ CSS_CASE_IMPORTANT(PROP_VISIBILITY, mDisplay->mVisibility);
+ CSS_CASE_IMPORTANT(PROP_FILTER, mDisplay->mFilter);
+ }
+ }
+ }
+ break;
+
+ case PROP_CLIP_TOP:
+ case PROP_CLIP_RIGHT:
+ case PROP_CLIP_BOTTOM:
+ case PROP_CLIP_LEFT:
+ if (nsnull != mDisplay) {
+ if (nsnull != mDisplay->mClip) {
+ CSS_ENSURE_IMPORTANT(Display) {
+ CSS_ENSURE_RECT(mImportant->mDisplay->mClip) {
+ switch(aProperty) {
+ CSS_CASE_IMPORTANT(PROP_CLIP_TOP, mDisplay->mClip->mTop);
+ CSS_CASE_IMPORTANT(PROP_CLIP_RIGHT, mDisplay->mClip->mRight);
+ CSS_CASE_IMPORTANT(PROP_CLIP_BOTTOM, mDisplay->mClip->mBottom);
+ CSS_CASE_IMPORTANT(PROP_CLIP_LEFT, mDisplay->mClip->mLeft);
+ }
+ }
+ }
}
}
break;
@@ -1506,31 +1471,15 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_MARGIN_LEFT:
if (nsnull != mMargin) {
if (nsnull != mMargin->mMargin) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mMargin) {
- mImportant->mMargin->mMargin = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mMargin) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mMargin) {
switch (aProperty) {
- case PROP_MARGIN_TOP: mImportant->mMargin->mMargin->mTop = mMargin->mMargin->mTop;
- mMargin->mMargin->mTop.Reset(); break;
- case PROP_MARGIN_RIGHT: mImportant->mMargin->mMargin->mRight = mMargin->mMargin->mRight;
- mMargin->mMargin->mRight.Reset(); break;
- case PROP_MARGIN_BOTTOM: mImportant->mMargin->mMargin->mBottom = mMargin->mMargin->mBottom;
- mMargin->mMargin->mBottom.Reset(); break;
- case PROP_MARGIN_LEFT: mImportant->mMargin->mMargin->mLeft = mMargin->mMargin->mLeft;
- mMargin->mMargin->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_MARGIN_TOP, mMargin->mMargin->mTop);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_RIGHT, mMargin->mMargin->mRight);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_BOTTOM, mMargin->mMargin->mBottom);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_LEFT, mMargin->mMargin->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1542,31 +1491,15 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_PADDING_LEFT:
if (nsnull != mMargin) {
if (nsnull != mMargin->mPadding) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mPadding) {
- mImportant->mMargin->mPadding = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mPadding) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mPadding) {
switch (aProperty) {
- case PROP_PADDING_TOP: mImportant->mMargin->mPadding->mTop = mMargin->mPadding->mTop;
- mMargin->mPadding->mTop.Reset(); break;
- case PROP_PADDING_RIGHT: mImportant->mMargin->mPadding->mRight = mMargin->mPadding->mRight;
- mMargin->mPadding->mRight.Reset(); break;
- case PROP_PADDING_BOTTOM: mImportant->mMargin->mPadding->mBottom = mMargin->mPadding->mBottom;
- mMargin->mPadding->mBottom.Reset(); break;
- case PROP_PADDING_LEFT: mImportant->mMargin->mPadding->mLeft = mMargin->mPadding->mLeft;
- mMargin->mPadding->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_PADDING_TOP, mMargin->mPadding->mTop);
+ CSS_CASE_IMPORTANT(PROP_PADDING_RIGHT, mMargin->mPadding->mRight);
+ CSS_CASE_IMPORTANT(PROP_PADDING_BOTTOM, mMargin->mPadding->mBottom);
+ CSS_CASE_IMPORTANT(PROP_PADDING_LEFT, mMargin->mPadding->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1577,32 +1510,16 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_WIDTH:
case PROP_BORDER_LEFT_WIDTH:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mBorder) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mBorder) {
- mImportant->mMargin->mBorder = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mBorder) {
+ if (nsnull != mMargin->mBorderWidth) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderWidth) {
switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: mImportant->mMargin->mBorder->mTop = mMargin->mBorder->mTop;
- mMargin->mBorder->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_WIDTH: mImportant->mMargin->mBorder->mRight = mMargin->mBorder->mRight;
- mMargin->mBorder->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_WIDTH: mImportant->mMargin->mBorder->mBottom = mMargin->mBorder->mBottom;
- mMargin->mBorder->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_WIDTH: mImportant->mMargin->mBorder->mLeft = mMargin->mBorder->mLeft;
- mMargin->mBorder->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_WIDTH, mMargin->mBorderWidth->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_WIDTH, mMargin->mBorderWidth->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_WIDTH, mMargin->mBorderWidth->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_WIDTH, mMargin->mBorderWidth->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1613,32 +1530,16 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_COLOR:
case PROP_BORDER_LEFT_COLOR:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mColor) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mColor) {
- mImportant->mMargin->mColor = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mColor) {
+ if (nsnull != mMargin->mBorderColor) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderColor) {
switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: mImportant->mMargin->mColor->mTop = mMargin->mColor->mTop;
- mMargin->mColor->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_COLOR: mImportant->mMargin->mColor->mRight = mMargin->mColor->mRight;
- mMargin->mColor->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_COLOR: mImportant->mMargin->mColor->mBottom = mMargin->mColor->mBottom;
- mMargin->mColor->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_COLOR: mImportant->mMargin->mColor->mLeft = mMargin->mColor->mLeft;
- mMargin->mColor->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_COLOR, mMargin->mBorderColor->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_COLOR, mMargin->mBorderColor->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_COLOR, mMargin->mBorderColor->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_COLOR, mMargin->mBorderColor->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1649,32 +1550,30 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_STYLE:
case PROP_BORDER_LEFT_STYLE:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mStyle) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mStyle) {
- mImportant->mMargin->mStyle = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mStyle) {
+ if (nsnull != mMargin->mBorderStyle) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderStyle) {
switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: mImportant->mMargin->mStyle->mTop = mMargin->mStyle->mTop;
- mMargin->mStyle->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_STYLE: mImportant->mMargin->mStyle->mRight = mMargin->mStyle->mRight;
- mMargin->mStyle->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_STYLE: mImportant->mMargin->mStyle->mBottom = mMargin->mStyle->mBottom;
- mMargin->mStyle->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_STYLE: mImportant->mMargin->mStyle->mLeft = mMargin->mStyle->mLeft;
- mMargin->mStyle->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_STYLE, mMargin->mBorderStyle->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_STYLE, mMargin->mBorderStyle->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_STYLE, mMargin->mBorderStyle->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_STYLE, mMargin->mBorderStyle->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ if (nsnull != mMargin) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_WIDTH, mMargin->mOutlineWidth);
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_COLOR, mMargin->mOutlineColor);
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_STYLE, mMargin->mOutlineStyle);
}
}
}
@@ -1683,32 +1582,44 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
// nsCSSPosition
case PROP_POSITION:
case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
case PROP_Z_INDEX:
if (nsnull != mPosition) {
- if (nsnull == mImportant->mPosition) {
- mImportant->mPosition = new nsCSSPosition();
- }
- if (nsnull != mImportant->mPosition) {
+ CSS_ENSURE_IMPORTANT(Position) {
switch (aProperty) {
- case PROP_POSITION: mImportant->mPosition->mPosition = mPosition->mPosition;
- mPosition->mPosition.Reset(); break;
- case PROP_WIDTH: mImportant->mPosition->mWidth = mPosition->mWidth;
- mPosition->mWidth.Reset(); break;
- case PROP_HEIGHT: mImportant->mPosition->mHeight = mPosition->mHeight;
- mPosition->mHeight.Reset(); break;
- case PROP_LEFT: mImportant->mPosition->mLeft = mPosition->mLeft;
- mPosition->mLeft.Reset(); break;
- case PROP_TOP: mImportant->mPosition->mTop = mPosition->mTop;
- mPosition->mTop.Reset(); break;
- case PROP_Z_INDEX: mImportant->mPosition->mZIndex = mPosition->mZIndex;
- mPosition->mZIndex.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_POSITION, mPosition->mPosition);
+ CSS_CASE_IMPORTANT(PROP_WIDTH, mPosition->mWidth);
+ CSS_CASE_IMPORTANT(PROP_MIN_WIDTH, mPosition->mMinWidth);
+ CSS_CASE_IMPORTANT(PROP_MAX_WIDTH, mPosition->mMaxWidth);
+ CSS_CASE_IMPORTANT(PROP_HEIGHT, mPosition->mHeight);
+ CSS_CASE_IMPORTANT(PROP_MIN_HEIGHT, mPosition->mMinHeight);
+ CSS_CASE_IMPORTANT(PROP_MAX_HEIGHT, mPosition->mMaxHeight);
+ CSS_CASE_IMPORTANT(PROP_Z_INDEX, mPosition->mZIndex);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ break;
+
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ if (nsnull != mPosition) {
+ if (nsnull != mPosition->mOffset) {
+ CSS_ENSURE_IMPORTANT(Position) {
+ CSS_ENSURE_RECT(mImportant->mPosition->mOffset) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_TOP, mPosition->mOffset->mTop);
+ CSS_CASE_IMPORTANT(PROP_RIGHT, mPosition->mOffset->mRight);
+ CSS_CASE_IMPORTANT(PROP_BOTTOM, mPosition->mOffset->mBottom);
+ CSS_CASE_IMPORTANT(PROP_LEFT, mPosition->mOffset->mLeft);
+ }
+ }
+ }
}
}
break;
@@ -1718,97 +1629,134 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_LIST_STYLE_IMAGE:
case PROP_LIST_STYLE_POSITION:
if (nsnull != mList) {
- if (nsnull == mImportant->mList) {
- mImportant->mList = new nsCSSList();
- }
- if (nsnull != mImportant->mList) {
+ CSS_ENSURE_IMPORTANT(List) {
switch (aProperty) {
- case PROP_LIST_STYLE_TYPE: mImportant->mList->mType = mList->mType;
- mList->mType.Reset(); break;
- case PROP_LIST_STYLE_IMAGE: mImportant->mList->mImage = mList->mImage;
- mList->mImage.Reset(); break;
- case PROP_LIST_STYLE_POSITION: mImportant->mList->mPosition = mList->mPosition;
- mList->mPosition.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_TYPE, mList->mType);
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_IMAGE, mList->mImage);
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_POSITION, mList->mPosition);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
- // nsCSSDisplay
- case PROP_FLOAT:
- case PROP_CLEAR:
- case PROP_DISPLAY:
- case PROP_DIRECTION:
- case PROP_VISIBILITY:
- case PROP_OVERFLOW:
- case PROP_FILTER:
- if (nsnull != mDisplay) {
- if (nsnull == mImportant->mDisplay) {
- mImportant->mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mImportant->mDisplay) {
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ if (nsnull != mTable) {
+ CSS_ENSURE_IMPORTANT(Table) {
switch (aProperty) {
- case PROP_FLOAT: mImportant->mDisplay->mFloat = mDisplay->mFloat;
- mDisplay->mFloat.Reset(); break;
- case PROP_CLEAR: mImportant->mDisplay->mClear = mDisplay->mClear;
- mDisplay->mClear.Reset(); break;
- case PROP_DISPLAY: mImportant->mDisplay->mDisplay = mDisplay->mDisplay;
- mDisplay->mDisplay.Reset(); break;
- case PROP_DIRECTION: mImportant->mDisplay->mDirection = mDisplay->mDirection;
- mDisplay->mDirection.Reset(); break;
- case PROP_VISIBILITY: mImportant->mDisplay->mVisibility = mDisplay->mVisibility;
- mDisplay->mVisibility.Reset(); break;
- case PROP_OVERFLOW: mImportant->mDisplay->mOverflow = mDisplay->mOverflow;
- mDisplay->mOverflow.Reset(); break;
- case PROP_FILTER: mImportant->mDisplay->mFilter = mDisplay->mFilter;
- mDisplay->mFilter.Reset(); break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- break;
-
- case PROP_CLIP_TOP:
- case PROP_CLIP_RIGHT:
- case PROP_CLIP_BOTTOM:
- case PROP_CLIP_LEFT:
- if (nsnull != mDisplay) {
- if (nsnull != mDisplay->mClip) {
- if (nsnull == mImportant->mDisplay) {
- mImportant->mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mImportant->mDisplay) {
- if (nsnull == mImportant->mDisplay->mClip) {
- mImportant->mDisplay->mClip = new nsCSSRect();
- }
- if (nsnull != mImportant->mDisplay->mClip) {
- switch(aProperty) {
- case PROP_CLIP_TOP: mImportant->mDisplay->mClip->mTop = mDisplay->mClip->mTop;
- mDisplay->mClip->mTop.Reset(); break;
- case PROP_CLIP_RIGHT: mImportant->mDisplay->mClip->mRight = mDisplay->mClip->mRight;
- mDisplay->mClip->mRight.Reset(); break;
- case PROP_CLIP_BOTTOM: mImportant->mDisplay->mClip->mBottom = mDisplay->mClip->mBottom;
- mDisplay->mClip->mBottom.Reset(); break;
- case PROP_CLIP_LEFT: mImportant->mDisplay->mClip->mLeft = mDisplay->mClip->mLeft;
- mDisplay->mClip->mLeft.Reset(); break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ CSS_CASE_IMPORTANT(PROP_BORDER_COLLAPSE, mTable->mBorderCollapse);
+ CSS_CASE_IMPORTANT(PROP_BORDER_SPACING, mTable->mBorderSpacing);
+ CSS_CASE_IMPORTANT(PROP_CAPTION_SIDE, mTable->mCaptionSide);
+ CSS_CASE_IMPORTANT(PROP_EMPTY_CELLS, mTable->mEmptyCells);
+ CSS_CASE_IMPORTANT(PROP_TABLE_LAYOUT, mTable->mLayout);
}
}
}
break;
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ if (nsnull != mBreaks) {
+ CSS_ENSURE_IMPORTANT(Breaks) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_ORPHANS, mBreaks->mOrphans);
+ CSS_CASE_IMPORTANT(PROP_WIDOWS, mBreaks->mWidows);
+ CSS_CASE_IMPORTANT(PROP_PAGE, mBreaks->mPage);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_AFTER, mBreaks->mPageBreakAfter);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_BEFORE, mBreaks->mPageBreakBefore);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_INSIDE, mBreaks->mPageBreakInside);
+ }
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ if (nsnull != mPage) {
+ CSS_ENSURE_IMPORTANT(Page) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_MARKS, mPage->mMarks);
+ CSS_CASE_IMPORTANT(PROP_SIZE, mPage->mSize);
+ }
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ if (nsnull != mContent) {
+ CSS_ENSURE_IMPORTANT(Content) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_CONTENT, mContent->mContent);
+ CSS_CASE_IMPORTANT(PROP_COUNTER_INCREMENT, mContent->mCounterIncrement);
+ CSS_CASE_IMPORTANT(PROP_COUNTER_RESET, mContent->mCounterReset);
+ CSS_CASE_IMPORTANT(PROP_MARKER_OFFSET, mContent->mMarkerOffset);
+ CSS_CASE_IMPORTANT(PROP_QUOTES, mContent->mQuotes);
+ }
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ if (nsnull != mAural) {
+ CSS_ENSURE_IMPORTANT(Aural) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_AZIMUTH, mAural->mAzimuth);
+ CSS_CASE_IMPORTANT(PROP_ELEVATION, mAural->mElevation);
+ CSS_CASE_IMPORTANT(PROP_CUE_AFTER, mAural->mCueAfter);
+ CSS_CASE_IMPORTANT(PROP_CUE_BEFORE, mAural->mCueBefore);
+ CSS_CASE_IMPORTANT(PROP_PAUSE_AFTER, mAural->mPauseAfter);
+ CSS_CASE_IMPORTANT(PROP_PAUSE_BEFORE, mAural->mPauseBefore);
+ CSS_CASE_IMPORTANT(PROP_PITCH, mAural->mPitch);
+ CSS_CASE_IMPORTANT(PROP_PITCH_RANGE, mAural->mPitchRange);
+ CSS_CASE_IMPORTANT(PROP_PLAY_DURING, mAural->mPlayDuring);
+ CSS_CASE_IMPORTANT(PROP_RICHNESS, mAural->mRichness);
+ CSS_CASE_IMPORTANT(PROP_SPEAK, mAural->mSpeak);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_HEADER, mAural->mSpeakHeader);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_NUMERAL, mAural->mSpeakNumeral);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_PUNCTUATION, mAural->mSpeakPunctuation);
+ CSS_CASE_IMPORTANT(PROP_SPEECH_RATE, mAural->mSpeechRate);
+ CSS_CASE_IMPORTANT(PROP_STRESS, mAural->mStress);
+ CSS_CASE_IMPORTANT(PROP_VOICE_FAMILY, mAural->mVoiceFamily);
+ CSS_CASE_IMPORTANT(PROP_VOLUME, mAural->mVolume);
+ }
+ }
+ }
+ break;
+
+ // Shorthands
case PROP_BACKGROUND:
SetValueImportant(PROP_BACKGROUND_COLOR);
SetValueImportant(PROP_BACKGROUND_IMAGE);
@@ -1838,6 +1786,10 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
SetValueImportant(PROP_CLIP_BOTTOM);
SetValueImportant(PROP_CLIP_LEFT);
break;
+ case PROP_CUE:
+ SetValueImportant(PROP_CUE_AFTER);
+ SetValueImportant(PROP_CUE_BEFORE);
+ break;
case PROP_FONT:
SetValueImportant(PROP_FONT_FAMILY);
SetValueImportant(PROP_FONT_STYLE);
@@ -1857,12 +1809,21 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
SetValueImportant(PROP_MARGIN_BOTTOM);
SetValueImportant(PROP_MARGIN_LEFT);
break;
+ case PROP_OUTLINE:
+ SetValueImportant(PROP_OUTLINE_COLOR);
+ SetValueImportant(PROP_OUTLINE_STYLE);
+ SetValueImportant(PROP_OUTLINE_WIDTH);
+ break;
case PROP_PADDING:
SetValueImportant(PROP_PADDING_TOP);
SetValueImportant(PROP_PADDING_RIGHT);
SetValueImportant(PROP_PADDING_BOTTOM);
SetValueImportant(PROP_PADDING_LEFT);
break;
+ case PROP_PAUSE:
+ SetValueImportant(PROP_PAUSE_AFTER);
+ SetValueImportant(PROP_PAUSE_BEFORE);
+ break;
case PROP_BACKGROUND_POSITION:
SetValueImportant(PROP_BACKGROUND_X_POSITION);
SetValueImportant(PROP_BACKGROUND_Y_POSITION);
@@ -1947,13 +1908,17 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
if (nsnull != mFont) {
switch (aProperty) {
- case PROP_FONT_FAMILY: aValue = mFont->mFamily; break;
- case PROP_FONT_STYLE: aValue = mFont->mStyle; break;
- case PROP_FONT_VARIANT: aValue = mFont->mVariant; break;
- case PROP_FONT_WEIGHT: aValue = mFont->mWeight; break;
- case PROP_FONT_SIZE: aValue = mFont->mSize; break;
+ case PROP_FONT_FAMILY: aValue = mFont->mFamily; break;
+ case PROP_FONT_STYLE: aValue = mFont->mStyle; break;
+ case PROP_FONT_VARIANT: aValue = mFont->mVariant; break;
+ case PROP_FONT_WEIGHT: aValue = mFont->mWeight; break;
+ case PROP_FONT_SIZE: aValue = mFont->mSize; break;
+ case PROP_FONT_SIZE_ADJUST: aValue = mFont->mSizeAdjust; break;
+ case PROP_FONT_STRETCH: aValue = mFont->mStretch; break;
}
}
else {
@@ -2001,6 +1966,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
if (nsnull != mText) {
@@ -2012,6 +1978,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_TRANSFORM: aValue = mText->mTextTransform; break;
case PROP_TEXT_ALIGN: aValue = mText->mTextAlign; break;
case PROP_TEXT_INDENT: aValue = mText->mTextIndent; break;
+ case PROP_UNICODE_BIDI: aValue = mText->mUnicodeBidi; break;
case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break;
case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break;
}
@@ -2021,6 +1988,61 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ case PROP_TEXT_SHADOW_COLOR:
+ case PROP_TEXT_SHADOW_X:
+ case PROP_TEXT_SHADOW_Y:
+ case PROP_TEXT_SHADOW_RADIUS:
+ if ((nsnull != mText) && (nsnull != mText->mTextShadow)) {
+ switch (aProperty) {
+ case PROP_TEXT_SHADOW_COLOR: aValue = mText->mTextShadow->mColor; break;
+ case PROP_TEXT_SHADOW_X: aValue = mText->mTextShadow->mXOffset; break;
+ case PROP_TEXT_SHADOW_Y: aValue = mText->mTextShadow->mYOffset; break;
+ case PROP_TEXT_SHADOW_RADIUS: aValue = mText->mTextShadow->mRadius; break;
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case PROP_FLOAT:
+ case PROP_CLEAR:
+ case PROP_DISPLAY:
+ case PROP_DIRECTION:
+ case PROP_VISIBILITY:
+ case PROP_OVERFLOW:
+ case PROP_FILTER:
+ if (nsnull != mDisplay) {
+ switch (aProperty) {
+ case PROP_FLOAT: aValue = mDisplay->mFloat; break;
+ case PROP_CLEAR: aValue = mDisplay->mClear; break;
+ case PROP_DISPLAY: aValue = mDisplay->mDisplay; break;
+ case PROP_DIRECTION: aValue = mDisplay->mDirection; break;
+ case PROP_VISIBILITY: aValue = mDisplay->mVisibility; break;
+ case PROP_OVERFLOW: aValue = mDisplay->mOverflow; break;
+ case PROP_FILTER: aValue = mDisplay->mFilter; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ case PROP_CLIP_TOP:
+ case PROP_CLIP_RIGHT:
+ case PROP_CLIP_BOTTOM:
+ case PROP_CLIP_LEFT:
+ if ((nsnull != mDisplay) && (nsnull != mDisplay->mClip)) {
+ switch(aProperty) {
+ case PROP_CLIP_TOP: aValue = mDisplay->mClip->mTop; break;
+ case PROP_CLIP_RIGHT: aValue = mDisplay->mClip->mRight; break;
+ case PROP_CLIP_BOTTOM: aValue = mDisplay->mClip->mBottom; break;
+ case PROP_CLIP_LEFT: aValue = mDisplay->mClip->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
// nsCSSMargin
case PROP_MARGIN_TOP:
case PROP_MARGIN_RIGHT:
@@ -2060,12 +2082,12 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_WIDTH:
case PROP_BORDER_BOTTOM_WIDTH:
case PROP_BORDER_LEFT_WIDTH:
- if ((nsnull != mMargin) && (nsnull != mMargin->mBorder)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderWidth)) {
switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: aValue = mMargin->mBorder->mTop; break;
- case PROP_BORDER_RIGHT_WIDTH: aValue = mMargin->mBorder->mRight; break;
- case PROP_BORDER_BOTTOM_WIDTH: aValue = mMargin->mBorder->mBottom; break;
- case PROP_BORDER_LEFT_WIDTH: aValue = mMargin->mBorder->mLeft; break;
+ case PROP_BORDER_TOP_WIDTH: aValue = mMargin->mBorderWidth->mTop; break;
+ case PROP_BORDER_RIGHT_WIDTH: aValue = mMargin->mBorderWidth->mRight; break;
+ case PROP_BORDER_BOTTOM_WIDTH: aValue = mMargin->mBorderWidth->mBottom; break;
+ case PROP_BORDER_LEFT_WIDTH: aValue = mMargin->mBorderWidth->mLeft; break;
}
}
else {
@@ -2077,12 +2099,12 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_COLOR:
case PROP_BORDER_BOTTOM_COLOR:
case PROP_BORDER_LEFT_COLOR:
- if ((nsnull != mMargin) && (nsnull != mMargin->mColor)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderColor)) {
switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: aValue = mMargin->mColor->mTop; break;
- case PROP_BORDER_RIGHT_COLOR: aValue = mMargin->mColor->mRight; break;
- case PROP_BORDER_BOTTOM_COLOR: aValue = mMargin->mColor->mBottom; break;
- case PROP_BORDER_LEFT_COLOR: aValue = mMargin->mColor->mLeft; break;
+ case PROP_BORDER_TOP_COLOR: aValue = mMargin->mBorderColor->mTop; break;
+ case PROP_BORDER_RIGHT_COLOR: aValue = mMargin->mBorderColor->mRight; break;
+ case PROP_BORDER_BOTTOM_COLOR: aValue = mMargin->mBorderColor->mBottom; break;
+ case PROP_BORDER_LEFT_COLOR: aValue = mMargin->mBorderColor->mLeft; break;
}
}
else {
@@ -2094,12 +2116,27 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_STYLE:
case PROP_BORDER_BOTTOM_STYLE:
case PROP_BORDER_LEFT_STYLE:
- if ((nsnull != mMargin) && (nsnull != mMargin->mStyle)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderStyle)) {
switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: aValue = mMargin->mStyle->mTop; break;
- case PROP_BORDER_RIGHT_STYLE: aValue = mMargin->mStyle->mRight; break;
- case PROP_BORDER_BOTTOM_STYLE: aValue = mMargin->mStyle->mBottom; break;
- case PROP_BORDER_LEFT_STYLE: aValue = mMargin->mStyle->mLeft; break;
+ case PROP_BORDER_TOP_STYLE: aValue = mMargin->mBorderStyle->mTop; break;
+ case PROP_BORDER_RIGHT_STYLE: aValue = mMargin->mBorderStyle->mRight; break;
+ case PROP_BORDER_BOTTOM_STYLE: aValue = mMargin->mBorderStyle->mBottom; break;
+ case PROP_BORDER_LEFT_STYLE: aValue = mMargin->mBorderStyle->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ if (nsnull != mMargin) {
+ switch (aProperty) {
+ case PROP_OUTLINE_WIDTH: aValue = mMargin->mOutlineWidth; break;
+ case PROP_OUTLINE_COLOR: aValue = mMargin->mOutlineColor; break;
+ case PROP_OUTLINE_STYLE: aValue = mMargin->mOutlineStyle; break;
}
}
else {
@@ -2110,17 +2147,21 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
// nsCSSPosition
case PROP_POSITION:
case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
case PROP_Z_INDEX:
if (nsnull != mPosition) {
switch (aProperty) {
case PROP_POSITION: aValue = mPosition->mPosition; break;
case PROP_WIDTH: aValue = mPosition->mWidth; break;
+ case PROP_MIN_WIDTH: aValue = mPosition->mMinWidth; break;
+ case PROP_MAX_WIDTH: aValue = mPosition->mMaxWidth; break;
case PROP_HEIGHT: aValue = mPosition->mHeight; break;
- case PROP_LEFT: aValue = mPosition->mLeft; break;
- case PROP_TOP: aValue = mPosition->mTop; break;
+ case PROP_MIN_HEIGHT: aValue = mPosition->mMinHeight; break;
+ case PROP_MAX_HEIGHT: aValue = mPosition->mMaxHeight; break;
case PROP_Z_INDEX: aValue = mPosition->mZIndex; break;
}
}
@@ -2129,6 +2170,23 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ if ((nsnull != mPosition) && (nsnull != mPosition->mOffset)) {
+ switch (aProperty) {
+ case PROP_TOP: aValue = mPosition->mOffset->mTop; break;
+ case PROP_RIGHT: aValue = mPosition->mOffset->mRight; break;
+ case PROP_BOTTOM: aValue = mPosition->mOffset->mBottom; break;
+ case PROP_LEFT: aValue = mPosition->mOffset->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
// nsCSSList
case PROP_LIST_STYLE_TYPE:
case PROP_LIST_STYLE_IMAGE:
@@ -2145,23 +2203,19 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
- // nsCSSDisplay
- case PROP_FLOAT:
- case PROP_CLEAR:
- case PROP_DISPLAY:
- case PROP_DIRECTION:
- case PROP_VISIBILITY:
- case PROP_OVERFLOW:
- case PROP_FILTER:
- if (nsnull != mDisplay) {
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ if (nsnull != mTable) {
switch (aProperty) {
- case PROP_FLOAT: aValue = mDisplay->mFloat; break;
- case PROP_CLEAR: aValue = mDisplay->mClear; break;
- case PROP_DISPLAY: aValue = mDisplay->mDisplay; break;
- case PROP_DIRECTION: aValue = mDisplay->mDirection; break;
- case PROP_VISIBILITY: aValue = mDisplay->mVisibility; break;
- case PROP_OVERFLOW: aValue = mDisplay->mOverflow; break;
- case PROP_FILTER: aValue = mDisplay->mFilter; break;
+ case PROP_BORDER_COLLAPSE: aValue = mTable->mBorderCollapse; break;
+ case PROP_BORDER_SPACING: aValue = mTable->mBorderSpacing; break;
+ case PROP_CAPTION_SIDE: aValue = mTable->mCaptionSide; break;
+ case PROP_EMPTY_CELLS: aValue = mTable->mEmptyCells; break;
+ case PROP_TABLE_LAYOUT: aValue = mTable->mLayout; break;
}
}
else {
@@ -2169,16 +2223,21 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
- case PROP_CLIP_TOP:
- case PROP_CLIP_RIGHT:
- case PROP_CLIP_BOTTOM:
- case PROP_CLIP_LEFT:
- if ((nsnull != mDisplay) && (nsnull != mDisplay->mClip)) {
- switch(aProperty) {
- case PROP_CLIP_TOP: aValue = mDisplay->mClip->mTop; break;
- case PROP_CLIP_RIGHT: aValue = mDisplay->mClip->mRight; break;
- case PROP_CLIP_BOTTOM: aValue = mDisplay->mClip->mBottom; break;
- case PROP_CLIP_LEFT: aValue = mDisplay->mClip->mLeft; break;
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ if (nsnull != mBreaks) {
+ switch (aProperty) {
+ case PROP_ORPHANS: aValue = mBreaks->mOrphans; break;
+ case PROP_WIDOWS: aValue = mBreaks->mWidows; break;
+ case PROP_PAGE: aValue = mBreaks->mPage; break;
+ case PROP_PAGE_BREAK_AFTER: aValue = mBreaks->mPageBreakAfter; break;
+ case PROP_PAGE_BREAK_BEFORE: aValue = mBreaks->mPageBreakBefore; break;
+ case PROP_PAGE_BREAK_INSIDE: aValue = mBreaks->mPageBreakInside; break;
}
}
else {
@@ -2186,13 +2245,99 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ if (nsnull != mPage) {
+ switch (aProperty) {
+ case PROP_MARKS: aValue = mPage->mMarks; break;
+ case PROP_SIZE: aValue = mPage->mSize; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ if (nsnull != mContent) {
+ switch (aProperty) {
+ case PROP_CONTENT: aValue = mContent->mContent; break;
+ case PROP_COUNTER_INCREMENT: aValue = mContent->mCounterIncrement; break;
+ case PROP_COUNTER_RESET: aValue = mContent->mCounterReset; break;
+ case PROP_MARKER_OFFSET: aValue = mContent->mMarkerOffset; break;
+ case PROP_QUOTES: aValue = mContent->mQuotes; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ if (nsnull != mAural) {
+ switch (aProperty) {
+ case PROP_AZIMUTH: aValue = mAural->mAzimuth; break;
+ case PROP_ELEVATION: aValue = mAural->mElevation; break;
+ case PROP_CUE_AFTER: aValue = mAural->mCueAfter; break;
+ case PROP_CUE_BEFORE: aValue = mAural->mCueBefore; break;
+ case PROP_PAUSE_AFTER: aValue = mAural->mPauseAfter; break;
+ case PROP_PAUSE_BEFORE: aValue = mAural->mPauseBefore; break;
+ case PROP_PITCH: aValue = mAural->mPitch; break;
+ case PROP_PITCH_RANGE: aValue = mAural->mPitchRange; break;
+ case PROP_PLAY_DURING: aValue = mAural->mPlayDuring; break;
+ case PROP_RICHNESS: aValue = mAural->mRichness; break;
+ case PROP_SPEAK: aValue = mAural->mSpeak; break;
+ case PROP_SPEAK_HEADER: aValue = mAural->mSpeakHeader; break;
+ case PROP_SPEAK_NUMERAL: aValue = mAural->mSpeakNumeral; break;
+ case PROP_SPEAK_PUNCTUATION: aValue = mAural->mSpeakPunctuation; break;
+ case PROP_SPEECH_RATE: aValue = mAural->mSpeechRate; break;
+ case PROP_STRESS: aValue = mAural->mStress; break;
+ case PROP_VOICE_FAMILY: aValue = mAural->mVoiceFamily; break;
+ case PROP_VOLUME: aValue = mAural->mVolume; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+
+ // Shorthands
case PROP_BACKGROUND:
case PROP_BORDER:
case PROP_CLIP:
+ case PROP_CUE:
case PROP_FONT:
case PROP_LIST_STYLE:
case PROP_MARGIN:
+ case PROP_OUTLINE:
case PROP_PADDING:
+ case PROP_PAUSE:
+ case PROP_TEXT_SHADOW:
case PROP_BACKGROUND_POSITION:
case PROP_BORDER_TOP:
case PROP_BORDER_RIGHT:
@@ -2251,109 +2396,284 @@ nsresult CSSDeclarationImpl::GetValue(const nsString& aProperty, nsString& aValu
return GetValue(propID, aValue);
}
-nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsString& aValue)
+PRBool CSSDeclarationImpl::AppendValueToString(PRInt32 aProperty, nsString& aResult)
{
nsCSSValue value;
GetValue(aProperty, value);
+ return AppendValueToString(aProperty, value, aResult);
+}
- nsCSSUnit unit = value.GetUnit();
-
- aValue.Truncate(0);
+PRBool CSSDeclarationImpl::AppendValueToString(PRInt32 aProperty, const nsCSSValue& aValue, nsString& aResult)
+{
+ nsCSSUnit unit = aValue.GetUnit();
if (eCSSUnit_Null == unit) {
- return NS_OK;
+ return PR_FALSE;
}
if (eCSSUnit_String == unit) {
nsAutoString buffer;
- value.GetStringValue(buffer);
- aValue.Append(buffer);
+ aValue.GetStringValue(buffer);
+ aResult.Append(buffer);
}
else if (eCSSUnit_Integer == unit) {
- aValue.Append(value.GetIntValue(), 10);
+ aResult.Append(aValue.GetIntValue(), 10);
}
else if (eCSSUnit_Enumerated == unit) {
if (PROP_TEXT_DECORATION == aProperty) {
- PRInt32 intValue = value.GetIntValue();
+ PRInt32 intValue = aValue.GetIntValue();
if (NS_STYLE_TEXT_DECORATION_NONE != intValue) {
PRInt32 mask;
for (mask = NS_STYLE_TEXT_DECORATION_UNDERLINE;
mask <= NS_STYLE_TEXT_DECORATION_BLINK;
mask <<= 1) {
if ((mask & intValue) == mask) {
- aValue.Append(nsCSSProps::LookupProperty(aProperty, mask));
+ aResult.Append(nsCSSProps::LookupProperty(aProperty, mask));
intValue &= ~mask;
if (0 != intValue) { // more left
- aValue.Append(' ');
+ aResult.Append(' ');
}
}
}
}
else {
- aValue.Append(nsCSSProps::LookupProperty(aProperty, NS_STYLE_TEXT_DECORATION_NONE));
+ aResult.Append(nsCSSProps::LookupProperty(aProperty, NS_STYLE_TEXT_DECORATION_NONE));
}
}
else {
- const char* name = nsCSSProps::LookupProperty(aProperty, value.GetIntValue());
+ const char* name = nsCSSProps::LookupProperty(aProperty, aValue.GetIntValue());
if (name != nsnull) {
- aValue.Append(name);
+ aResult.Append(name);
}
}
}
else if (eCSSUnit_Color == unit){
- nscolor color = value.GetColorValue();
+ nscolor color = aValue.GetColorValue();
const char* name = RGBToCSSString(color);
if (name != nsnull)
- aValue.Append(name);
+ aResult.Append(name);
else
{
- aValue.Append("rgb(");
- aValue.Append(NS_GET_R(color), 10);
- aValue.Append(",");
- aValue.Append(NS_GET_G(color), 10);
- aValue.Append(",");
- aValue.Append(NS_GET_B(color), 10);
- aValue.Append(')');
+ aResult.Append("rgb(");
+ aResult.Append(NS_GET_R(color), 10);
+ aResult.Append(",");
+ aResult.Append(NS_GET_G(color), 10);
+ aResult.Append(",");
+ aResult.Append(NS_GET_B(color), 10);
+ aResult.Append(')');
}
}
else if (eCSSUnit_Percent == unit) {
- aValue.Append(value.GetPercentValue() * 100.0f);
+ aResult.Append(aValue.GetPercentValue() * 100.0f);
}
else if (eCSSUnit_Percent < unit) { // length unit
- aValue.Append(value.GetFloatValue());
+ aResult.Append(aValue.GetFloatValue());
}
switch (unit) {
case eCSSUnit_Null: break;
- case eCSSUnit_Auto: aValue.Append("auto"); break;
- case eCSSUnit_Inherit: aValue.Append("inherit"); break;
- case eCSSUnit_None: aValue.Append("none"); break;
- case eCSSUnit_Normal: aValue.Append("normal"); break;
+ case eCSSUnit_Auto: aResult.Append("auto"); break;
+ case eCSSUnit_Inherit: aResult.Append("inherit"); break;
+ case eCSSUnit_None: aResult.Append("none"); break;
+ case eCSSUnit_Normal: aResult.Append("normal"); break;
case eCSSUnit_String: break;
case eCSSUnit_Integer: break;
case eCSSUnit_Enumerated: break;
case eCSSUnit_Color: break;
- case eCSSUnit_Percent: aValue.Append("%"); break;
+ case eCSSUnit_Percent: aResult.Append("%"); break;
case eCSSUnit_Number: break;
- case eCSSUnit_Inch: aValue.Append("in"); break;
- case eCSSUnit_Foot: aValue.Append("ft"); break;
- case eCSSUnit_Mile: aValue.Append("mi"); break;
- case eCSSUnit_Millimeter: aValue.Append("mm"); break;
- case eCSSUnit_Centimeter: aValue.Append("cm"); break;
- case eCSSUnit_Meter: aValue.Append("m"); break;
- case eCSSUnit_Kilometer: aValue.Append("km"); break;
- case eCSSUnit_Point: aValue.Append("pt"); break;
- case eCSSUnit_Pica: aValue.Append("pc"); break;
- case eCSSUnit_Didot: aValue.Append("dt"); break;
- case eCSSUnit_Cicero: aValue.Append("cc"); break;
- case eCSSUnit_EM: aValue.Append("em"); break;
- case eCSSUnit_EN: aValue.Append("en"); break;
- case eCSSUnit_XHeight: aValue.Append("ex"); break;
- case eCSSUnit_CapHeight: aValue.Append("cap"); break;
- case eCSSUnit_Pixel: aValue.Append("px"); break;
+ case eCSSUnit_Inch: aResult.Append("in"); break;
+ case eCSSUnit_Foot: aResult.Append("ft"); break;
+ case eCSSUnit_Mile: aResult.Append("mi"); break;
+ case eCSSUnit_Millimeter: aResult.Append("mm"); break;
+ case eCSSUnit_Centimeter: aResult.Append("cm"); break;
+ case eCSSUnit_Meter: aResult.Append("m"); break;
+ case eCSSUnit_Kilometer: aResult.Append("km"); break;
+ case eCSSUnit_Point: aResult.Append("pt"); break;
+ case eCSSUnit_Pica: aResult.Append("pc"); break;
+ case eCSSUnit_Didot: aResult.Append("dt"); break;
+ case eCSSUnit_Cicero: aResult.Append("cc"); break;
+ case eCSSUnit_EM: aResult.Append("em"); break;
+ case eCSSUnit_EN: aResult.Append("en"); break;
+ case eCSSUnit_XHeight: aResult.Append("ex"); break;
+ case eCSSUnit_CapHeight: aResult.Append("cap"); break;
+ case eCSSUnit_Pixel: aResult.Append("px"); break;
}
+ return PR_TRUE;
+}
+
+#define HAS_VALUE(strct,data) \
+ ((nsnull != strct) && (eCSSUnit_Null != strct->data.GetUnit()))
+#define HAS_RECT(strct,rect) \
+ ((nsnull != strct) && (nsnull != strct->rect) && \
+ (eCSSUnit_Null != strct->rect->mTop.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mRight.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mBottom.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mLeft.GetUnit()))
+
+nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsString& aValue)
+{
+ aValue.Truncate(0);
+
+ // shorthands
+ switch (aProperty) {
+ case PROP_BACKGROUND:
+ if (AppendValueToString(PROP_BACKGROUND_COLOR, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_IMAGE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_REPEAT, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_ATTACHMENT, aValue)) aValue.Append(' ');
+ if (HAS_VALUE(mColor,mBackPositionX) && HAS_VALUE(mColor,mBackPositionY)) {
+ AppendValueToString(PROP_BACKGROUND_X_POSITION, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_BACKGROUND_Y_POSITION, aValue);
+ }
+ break;
+ case PROP_BORDER:
+ if (AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_TOP_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue);
+ break;
+ case PROP_CLIP:
+ if (HAS_RECT(mDisplay,mClip)) {
+ aValue.Append("rect(");
+ AppendValueToString(PROP_CLIP_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_LEFT, aValue);
+ aValue.Append(")");
+ }
+ break;
+ case PROP_CUE:
+ if (HAS_VALUE(mAural,mCueAfter) && HAS_VALUE(mAural,mCueBefore)) {
+ AppendValueToString(PROP_CUE_AFTER, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_CUE_BEFORE, aValue);
+ }
+ break;
+ case PROP_FONT:
+ if (HAS_VALUE(mFont,mSize)) {
+ if (AppendValueToString(PROP_FONT_STYLE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_FONT_VARIANT, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_FONT_WEIGHT, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_FONT_SIZE, aValue);
+ if (HAS_VALUE(mText,mLineHeight)) {
+ aValue.Append('/');
+ AppendValueToString(PROP_LINE_HEIGHT, aValue);
+ }
+ aValue.Append(' ');
+ AppendValueToString(PROP_FONT_FAMILY, aValue);
+ }
+ break;
+ case PROP_LIST_STYLE:
+ if (AppendValueToString(PROP_LIST_STYLE_TYPE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_LIST_STYLE_POSITION, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_LIST_STYLE_IMAGE, aValue);
+ break;
+ case PROP_MARGIN:
+ if (HAS_RECT(mMargin,mMargin)) {
+ AppendValueToString(PROP_MARGIN_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_LEFT, aValue);
+ }
+ break;
+ case PROP_OUTLINE:
+ if (AppendValueToString(PROP_OUTLINE_COLOR, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_OUTLINE_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_OUTLINE_WIDTH, aValue);
+ break;
+ case PROP_PADDING:
+ if (HAS_RECT(mMargin,mPadding)) {
+ AppendValueToString(PROP_PADDING_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_LEFT, aValue);
+ }
+ break;
+ case PROP_PAUSE:
+ if (HAS_VALUE(mAural,mPauseAfter) && HAS_VALUE(mAural,mPauseBefore)) {
+ AppendValueToString(PROP_PAUSE_AFTER, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_PAUSE_BEFORE, aValue);
+ }
+ break;
+ case PROP_TEXT_SHADOW:
+ if ((nsnull != mText) && (nsnull != mText->mTextShadow)) {
+ if (eCSSUnit_Color == mText->mTextShadow->mColor.GetUnit()) {
+ nsCSSShadow* shadow = mText->mTextShadow;
+ while (nsnull != shadow) {
+ if (AppendValueToString(PROP_TEXT_SHADOW_COLOR, shadow->mColor, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_TEXT_SHADOW_X, shadow->mXOffset, aValue)) {
+ aValue.Append(' ');
+ AppendValueToString(PROP_TEXT_SHADOW_Y, shadow->mYOffset, aValue);
+ aValue.Append(' ');
+ }
+ if (AppendValueToString(PROP_TEXT_SHADOW_RADIUS, shadow->mRadius, aValue)) aValue.Append(' ');
+ shadow = shadow->mNext;
+ }
+ }
+ else { // none or inherit
+ AppendValueToString(PROP_TEXT_SHADOW_COLOR, aValue);
+ }
+ }
+ break;
+ case PROP_BACKGROUND_POSITION:
+ if (HAS_VALUE(mColor,mBackPositionX) && HAS_VALUE(mColor,mBackPositionY)) {
+ AppendValueToString(PROP_BACKGROUND_X_POSITION, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_BACKGROUND_Y_POSITION, aValue);
+ }
+ break;
+ case PROP_BORDER_TOP:
+ if (AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_TOP_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue);
+ break;
+ case PROP_BORDER_RIGHT:
+ if (AppendValueToString(PROP_BORDER_RIGHT_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_RIGHT_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_COLOR, aValue);
+ break;
+ case PROP_BORDER_BOTTOM:
+ if (AppendValueToString(PROP_BORDER_BOTTOM_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_BOTTOM_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_COLOR, aValue);
+ break;
+ case PROP_BORDER_LEFT:
+ if (AppendValueToString(PROP_BORDER_LEFT_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_LEFT_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_COLOR, aValue);
+ break;
+ case PROP_BORDER_COLOR:
+ if (HAS_RECT(mMargin,mBorderColor)) {
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_COLOR, aValue);
+ }
+ break;
+ case PROP_BORDER_STYLE:
+ if (HAS_RECT(mMargin,mBorderStyle)) {
+ AppendValueToString(PROP_BORDER_TOP_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_STYLE, aValue);
+ }
+ break;
+ case PROP_BORDER_WIDTH:
+ if (HAS_RECT(mMargin,mBorderWidth)) {
+ AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_WIDTH, aValue);
+ }
+ break;
+ default:
+ AppendValueToString(aProperty, aValue);
+ break;
+ }
return NS_OK;
}
@@ -2434,6 +2754,9 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mText) {
mText->List(out);
}
+ if (nsnull != mDisplay) {
+ mDisplay->List(out);
+ }
if (nsnull != mMargin) {
mMargin->List(out);
}
@@ -2443,8 +2766,20 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mList) {
mList->List(out);
}
- if (nsnull != mDisplay) {
- mDisplay->List(out);
+ if (nsnull != mTable) {
+ mTable->List(out);
+ }
+ if (nsnull != mBreaks) {
+ mBreaks->List(out);
+ }
+ if (nsnull != mPage) {
+ mPage->List(out);
+ }
+ if (nsnull != mContent) {
+ mContent->List(out);
+ }
+ if (nsnull != mAural) {
+ mAural->List(out);
}
fputs("}", out);
@@ -2501,78 +2836,3 @@ NS_HTML nsresult
}
-
-
-/*
-font
-===========
-font-family: string (list)
-font-style: enum
-font-variant: enum (ie: small caps)
-font-weight: enum
-font-size: abs, pct, enum, +-1
-
-
-color/background
-=============
-color: color
-background-color: color
-background-image: url(string)
-background-repeat: enum
-background-attachment: enum
-background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?))
-cursor: enum
-cursor-image: url(string)
-
-
-text
-=======
-word-spacing: abs, "normal"
-letter-spacing: abs, "normal"
-text-decoration: enum
-vertical-align: enum, pct
-text-transform: enum
-text-align: enum
-text-indent: abs, pct
-line-height: "normal", abs, pct, number-factor
-white-space: enum
-
-margin
-=======
-margin-top -right -bottom -left: "auto", abs, pct
-padding-top -right -bottom -left: abs, pct
-border-top -right -bottom -left-width: enum, abs
-border-top -right -bottom -left-color: color
-border-top -right -bottom -left-style: enum
-
-size
-=======
-position: enum
-width: abs, pct, "auto"
-height: abs, pct, "auto"
-left: abs, pct, "auto"
-top: abs, pct, "auto"
-clip: shape, "auto" (shape: rect - abs, auto)
-overflow: enum
-z-index: int, auto
-visibity: enum
-
-display
-=======
-float: enum
-clear: enum
-direction: enum
-display: enum
-
-filter: string
-
-list
-========
-list-style-type: enum
-list-style-image: url, "none"
-list-style-position: enum (bool? in/out)
-
-*/
-
-
-
diff --git a/mozilla/layout/html/style/src/nsCSSDeclaration.cpp b/mozilla/layout/html/style/src/nsCSSDeclaration.cpp
index 945f4bb3114..0da611fecf8 100644
--- a/mozilla/layout/html/style/src/nsCSSDeclaration.cpp
+++ b/mozilla/layout/html/style/src/nsCSSDeclaration.cpp
@@ -188,325 +188,15 @@ static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID);
static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID);
static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID);
static NS_DEFINE_IID(kCSSListSID, NS_CSS_LIST_SID);
+static NS_DEFINE_IID(kCSSTableSID, NS_CSS_TABLE_SID);
+static NS_DEFINE_IID(kCSSBreaksSID, NS_CSS_BREAKS_SID);
+static NS_DEFINE_IID(kCSSPageSID, NS_CSS_PAGE_SID);
+static NS_DEFINE_IID(kCSSContentSID, NS_CSS_CONTENT_SID);
+static NS_DEFINE_IID(kCSSAuralSID, NS_CSS_AURAL_SID);
static NS_DEFINE_IID(kICSSDeclarationIID, NS_ICSS_DECLARATION_IID);
-nsCSSValue::nsCSSValue(nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION(mUnit <= eCSSUnit_Normal, "not a valueless unit");
- if (aUnit > eCSSUnit_Normal) {
- mUnit = eCSSUnit_Null;
- }
- mValue.mInt = 0;
-}
-
-nsCSSValue::nsCSSValue(PRInt32 aValue, nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit), "not an int value");
- if ((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit)) {
- mValue.mInt = aValue;
- }
- else {
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
- }
-}
-
-nsCSSValue::nsCSSValue(float aValue, nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION(eCSSUnit_Percent <= aUnit, "not a float value");
- if (eCSSUnit_Percent <= aUnit) {
- mValue.mFloat = aValue;
- }
- else {
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
- }
-}
-
-nsCSSValue::nsCSSValue(const nsString& aValue)
- : mUnit(eCSSUnit_String)
-{
- mValue.mString = aValue.ToNewString();
-}
-
-nsCSSValue::nsCSSValue(nscolor aValue)
- : mUnit(eCSSUnit_Color)
-{
- mValue.mColor = aValue;
-}
-
-nsCSSValue::nsCSSValue(const nsCSSValue& aCopy)
- : mUnit(aCopy.mUnit)
-{
- if (eCSSUnit_String == mUnit) {
- if (nsnull != aCopy.mValue.mString) {
- mValue.mString = (aCopy.mValue.mString)->ToNewString();
- }
- else {
- mValue.mString = nsnull;
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- mValue.mInt = aCopy.mValue.mInt;
- }
- else if (eCSSUnit_Color == mUnit){
- mValue.mColor = aCopy.mValue.mColor;
- }
- else {
- mValue.mFloat = aCopy.mValue.mFloat;
- }
-}
-
-nsCSSValue::~nsCSSValue(void)
-{
- Reset();
-}
-
-nsCSSValue& nsCSSValue::operator=(const nsCSSValue& aCopy)
-{
- Reset();
- mUnit = aCopy.mUnit;
- if (eCSSUnit_String == mUnit) {
- if (nsnull != aCopy.mValue.mString) {
- mValue.mString = (aCopy.mValue.mString)->ToNewString();
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- mValue.mInt = aCopy.mValue.mInt;
- }
- else if (eCSSUnit_Color == mUnit){
- mValue.mColor = aCopy.mValue.mColor;
- }
- else {
- mValue.mFloat = aCopy.mValue.mFloat;
- }
- return *this;
-}
-
-PRBool nsCSSValue::operator==(const nsCSSValue& aOther) const
-{
- if (mUnit == aOther.mUnit) {
- if (eCSSUnit_String == mUnit) {
- if (nsnull == mValue.mString) {
- if (nsnull == aOther.mValue.mString) {
- return PR_TRUE;
- }
- }
- else if (nsnull != aOther.mValue.mString) {
- return mValue.mString->Equals(*(aOther.mValue.mString));
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- return PRBool(mValue.mInt == aOther.mValue.mInt);
- }
- else if (eCSSUnit_Color == mUnit){
- return PRBool(mValue.mColor == aOther.mValue.mColor);
- }
- else {
- return PRBool(mValue.mFloat == aOther.mValue.mFloat);
- }
- }
- return PR_FALSE;
-}
-
-nscoord nsCSSValue::GetLengthTwips(void) const
-{
- NS_ASSERTION(IsFixedLengthUnit(), "not a fixed length unit");
-
- if (IsFixedLengthUnit()) {
- switch (mUnit) {
- case eCSSUnit_Inch:
- return NS_INCHES_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Foot:
- return NS_FEET_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Mile:
- return NS_MILES_TO_TWIPS(mValue.mFloat);
-
- case eCSSUnit_Millimeter:
- return NS_MILLIMETERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Centimeter:
- return NS_CENTIMETERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Meter:
- return NS_METERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Kilometer:
- return NS_KILOMETERS_TO_TWIPS(mValue.mFloat);
-
- case eCSSUnit_Point:
- return NSFloatPointsToTwips(mValue.mFloat);
- case eCSSUnit_Pica:
- return NS_PICAS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Didot:
- return NS_DIDOTS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Cicero:
- return NS_CICEROS_TO_TWIPS(mValue.mFloat);
- }
- }
- return 0;
-}
-
-void nsCSSValue::Reset(void)
-{
- if ((eCSSUnit_String == mUnit) && (nsnull != mValue.mString)) {
- delete mValue.mString;
- }
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
-};
-
-void nsCSSValue::SetIntValue(PRInt32 aValue, nsCSSUnit aUnit)
-{
- NS_ASSERTION((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit), "not an int value");
- Reset();
- if ((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit)) {
- mUnit = aUnit;
- mValue.mInt = aValue;
- }
-}
-
-void nsCSSValue::SetPercentValue(float aValue)
-{
- Reset();
- mUnit = eCSSUnit_Percent;
- mValue.mFloat = aValue;
-}
-
-void nsCSSValue::SetFloatValue(float aValue, nsCSSUnit aUnit)
-{
- NS_ASSERTION(eCSSUnit_Number <= aUnit, "not a float value");
- Reset();
- if (eCSSUnit_Number <= aUnit) {
- mUnit = aUnit;
- mValue.mFloat = aValue;
- }
-}
-
-void nsCSSValue::SetStringValue(const nsString& aValue)
-{
- Reset();
- mUnit = eCSSUnit_String;
- mValue.mString = aValue.ToNewString();
-}
-
-void nsCSSValue::SetColorValue(nscolor aValue)
-{
- Reset();
- mUnit = eCSSUnit_Color;
- mValue.mColor = aValue;
-}
-
-void nsCSSValue::SetAutoValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Auto;
-}
-
-void nsCSSValue::SetInheritValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Inherit;
-}
-
-void nsCSSValue::SetNoneValue(void)
-{
- Reset();
- mUnit = eCSSUnit_None;
-}
-
-void nsCSSValue::SetNormalValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Normal;
-}
-
-void nsCSSValue::AppendToString(nsString& aBuffer, PRInt32 aPropID) const
-{
- if (eCSSUnit_Null == mUnit) {
- return;
- }
-
- if (-1 < aPropID) {
- aBuffer.Append(nsCSSProps::kNameTable[aPropID].name);
- aBuffer.Append(": ");
- }
-
- if (eCSSUnit_String == mUnit) {
- if (nsnull != mValue.mString) {
- aBuffer.Append('"');
- aBuffer.Append(*(mValue.mString));
- aBuffer.Append('"');
- }
- else {
- aBuffer.Append("null str");
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- aBuffer.Append(mValue.mInt, 10);
- aBuffer.Append("[0x");
- aBuffer.Append(mValue.mInt, 16);
- aBuffer.Append(']');
- }
- else if (eCSSUnit_Color == mUnit){
- aBuffer.Append("(0x");
- aBuffer.Append(NS_GET_R(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_G(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_B(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_A(mValue.mColor), 16);
- aBuffer.Append(')');
- }
- else if (eCSSUnit_Percent == mUnit) {
- aBuffer.Append(mValue.mFloat * 100.0f);
- }
- else if (eCSSUnit_Percent < mUnit) {
- aBuffer.Append(mValue.mFloat);
- }
-
- switch (mUnit) {
- case eCSSUnit_Null: break;
- case eCSSUnit_Auto: aBuffer.Append("auto"); break;
- case eCSSUnit_Inherit: aBuffer.Append("inherit"); break;
- case eCSSUnit_None: aBuffer.Append("none"); break;
- case eCSSUnit_String: break;
- case eCSSUnit_Integer: aBuffer.Append("int"); break;
- case eCSSUnit_Enumerated: aBuffer.Append("enum"); break;
- case eCSSUnit_Color: aBuffer.Append("rbga"); break;
- case eCSSUnit_Percent: aBuffer.Append("%"); break;
- case eCSSUnit_Number: aBuffer.Append("#"); break;
- case eCSSUnit_Inch: aBuffer.Append("in"); break;
- case eCSSUnit_Foot: aBuffer.Append("ft"); break;
- case eCSSUnit_Mile: aBuffer.Append("mi"); break;
- case eCSSUnit_Millimeter: aBuffer.Append("mm"); break;
- case eCSSUnit_Centimeter: aBuffer.Append("cm"); break;
- case eCSSUnit_Meter: aBuffer.Append("m"); break;
- case eCSSUnit_Kilometer: aBuffer.Append("km"); break;
- case eCSSUnit_Point: aBuffer.Append("pt"); break;
- case eCSSUnit_Pica: aBuffer.Append("pc"); break;
- case eCSSUnit_Didot: aBuffer.Append("dt"); break;
- case eCSSUnit_Cicero: aBuffer.Append("cc"); break;
- case eCSSUnit_EM: aBuffer.Append("em"); break;
- case eCSSUnit_EN: aBuffer.Append("en"); break;
- case eCSSUnit_XHeight: aBuffer.Append("ex"); break;
- case eCSSUnit_CapHeight: aBuffer.Append("cap"); break;
- case eCSSUnit_Pixel: aBuffer.Append("px"); break;
- }
- aBuffer.Append(' ');
-}
-
-void nsCSSValue::ToString(nsString& aBuffer, PRInt32 aPropID) const
-{
- aBuffer.Truncate();
- AppendToString(aBuffer, aPropID);
-}
+// --- nsCSSFont -----------------
const nsID& nsCSSFont::GetID(void)
{
@@ -524,10 +214,14 @@ void nsCSSFont::List(FILE* out, PRInt32 aIndent) const
mVariant.AppendToString(buffer, PROP_FONT_VARIANT);
mWeight.AppendToString(buffer, PROP_FONT_WEIGHT);
mSize.AppendToString(buffer, PROP_FONT_SIZE);
+ mSizeAdjust.AppendToString(buffer, PROP_FONT_SIZE_ADJUST);
+ mStretch.AppendToString(buffer, PROP_FONT_STRETCH);
fputs(buffer, out);
}
+// --- nsCSSColor -----------------
+
const nsID& nsCSSColor::GetID(void)
{
return kCSSColorSID;
@@ -553,6 +247,34 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSText -----------------
+
+nsCSSShadow::nsCSSShadow(void)
+ : mNext(nsnull)
+{
+}
+
+nsCSSShadow::~nsCSSShadow(void)
+{
+ if (nsnull != mNext) {
+ delete mNext;
+ }
+}
+
+// --- nsCSSText -----------------
+
+nsCSSText::nsCSSText(void)
+ : mTextShadow(nsnull)
+{
+}
+
+nsCSSText::~nsCSSText(void)
+{
+ if (nsnull != mTextShadow) {
+ delete mTextShadow;
+ }
+}
+
const nsID& nsCSSText::GetID(void)
{
return kCSSTextSID;
@@ -571,11 +293,29 @@ void nsCSSText::List(FILE* out, PRInt32 aIndent) const
mTextTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM);
mTextAlign.AppendToString(buffer, PROP_TEXT_ALIGN);
mTextIndent.AppendToString(buffer, PROP_TEXT_INDENT);
+ if (nsnull != mTextShadow) {
+ if (eCSSUnit_Color == mTextShadow->mColor.GetUnit()) {
+ nsCSSShadow* shadow = mTextShadow;
+ while (nsnull != shadow) {
+ shadow->mColor.AppendToString(buffer, PROP_TEXT_SHADOW_COLOR);
+ shadow->mXOffset.AppendToString(buffer, PROP_TEXT_SHADOW_X);
+ shadow->mYOffset.AppendToString(buffer, PROP_TEXT_SHADOW_Y);
+ shadow->mRadius.AppendToString(buffer, PROP_TEXT_SHADOW_RADIUS);
+ shadow = shadow->mNext;
+ }
+ }
+ else {
+ mTextShadow->mColor.AppendToString(buffer, PROP_TEXT_SHADOW);
+ }
+ }
+ mUnicodeBidi.AppendToString(buffer, PROP_UNICODE_BIDI);
mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT);
mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE);
fputs(buffer, out);
}
+// --- nsCSSRect -----------------
+
void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const
{
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
@@ -624,6 +364,8 @@ void nsCSSRect::List(FILE* out, PRInt32 aIndent, PRIntn aTRBL[]) const
fputs(buffer, out);
}
+// --- nsCSSDisplay -----------------
+
nsCSSDisplay::nsCSSDisplay(void)
: mClip(nsnull)
{
@@ -662,8 +404,11 @@ void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSMargin -----------------
+
nsCSSMargin::nsCSSMargin(void)
- : mMargin(nsnull), mPadding(nsnull), mBorder(nsnull), mColor(nsnull), mStyle(nsnull)
+ : mMargin(nsnull), mPadding(nsnull),
+ mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull)
{
}
@@ -675,14 +420,14 @@ nsCSSMargin::~nsCSSMargin(void)
if (nsnull != mPadding) {
delete mPadding;
}
- if (nsnull != mBorder) {
- delete mBorder;
+ if (nsnull != mBorderWidth) {
+ delete mBorderWidth;
}
- if (nsnull != mColor) {
- delete mColor;
+ if (nsnull != mBorderColor) {
+ delete mBorderColor;
}
- if (nsnull != mStyle) {
- delete mStyle;
+ if (nsnull != mBorderStyle) {
+ delete mBorderStyle;
}
}
@@ -693,8 +438,6 @@ const nsID& nsCSSMargin::GetID(void)
void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
{
- for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
-
if (nsnull != mMargin) {
static PRIntn trbl[] = {
PROP_MARGIN_TOP,
@@ -713,20 +456,42 @@ void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
};
mPadding->List(out, aIndent, trbl);
}
- if (nsnull != mBorder) {
+ if (nsnull != mBorderWidth) {
static PRIntn trbl[] = {
PROP_BORDER_TOP_WIDTH,
PROP_BORDER_RIGHT_WIDTH,
PROP_BORDER_BOTTOM_WIDTH,
PROP_BORDER_LEFT_WIDTH
};
- mBorder->List(out, aIndent, trbl);
+ mBorderWidth->List(out, aIndent, trbl);
}
- if (nsnull != mColor) {
- mColor->List(out, PROP_BORDER_COLOR, aIndent);
+ if (nsnull != mBorderColor) {
+ mBorderColor->List(out, PROP_BORDER_COLOR, aIndent);
}
- if (nsnull != mStyle) {
- mStyle->List(out, PROP_BORDER_STYLE, aIndent);
+ if (nsnull != mBorderStyle) {
+ mBorderStyle->List(out, PROP_BORDER_STYLE, aIndent);
+ }
+
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+ mOutlineWidth.AppendToString(buffer, PROP_OUTLINE_WIDTH);
+ mOutlineColor.AppendToString(buffer, PROP_OUTLINE_COLOR);
+ mOutlineStyle.AppendToString(buffer, PROP_OUTLINE_STYLE);
+ fputs(buffer, out);
+}
+
+// --- nsCSSPosition -----------------
+
+nsCSSPosition::nsCSSPosition(void)
+ : mOffset(nsnull)
+{
+}
+
+nsCSSPosition::~nsCSSPosition(void)
+{
+ if (nsnull != mOffset) {
+ delete mOffset;
}
}
@@ -743,13 +508,27 @@ void nsCSSPosition::List(FILE* out, PRInt32 aIndent) const
mPosition.AppendToString(buffer, PROP_POSITION);
mWidth.AppendToString(buffer, PROP_WIDTH);
+ mMinWidth.AppendToString(buffer, PROP_MIN_WIDTH);
+ mMaxWidth.AppendToString(buffer, PROP_MAX_WIDTH);
mHeight.AppendToString(buffer, PROP_HEIGHT);
- mLeft.AppendToString(buffer, PROP_LEFT);
- mTop.AppendToString(buffer, PROP_TOP);
+ mMinHeight.AppendToString(buffer, PROP_MIN_HEIGHT);
+ mMaxHeight.AppendToString(buffer, PROP_MAX_HEIGHT);
mZIndex.AppendToString(buffer, PROP_Z_INDEX);
fputs(buffer, out);
+
+ if (nsnull != mOffset) {
+ static PRIntn trbl[] = {
+ PROP_TOP,
+ PROP_RIGHT,
+ PROP_BOTTOM,
+ PROP_LEFT
+ };
+ mOffset->List(out, aIndent, trbl);
+ }
}
+// --- nsCSSList -----------------
+
const nsID& nsCSSList::GetID(void)
{
return kCSSListSID;
@@ -767,6 +546,130 @@ void nsCSSList::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSTable -----------------
+
+const nsID& nsCSSTable::GetID(void)
+{
+ return kCSSTableSID;
+}
+
+void nsCSSTable::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mBorderCollapse.AppendToString(buffer, PROP_BORDER_COLLAPSE);
+ mBorderSpacing.AppendToString(buffer, PROP_BORDER_SPACING);
+ mCaptionSide.AppendToString(buffer, PROP_CAPTION_SIDE);
+ mEmptyCells.AppendToString(buffer, PROP_EMPTY_CELLS);
+ mLayout.AppendToString(buffer, PROP_TABLE_LAYOUT);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSBreaks -----------------
+
+const nsID& nsCSSBreaks::GetID(void)
+{
+ return kCSSBreaksSID;
+}
+
+void nsCSSBreaks::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mOrphans.AppendToString(buffer, PROP_ORPHANS);
+ mWidows.AppendToString(buffer, PROP_WIDOWS);
+ mPage.AppendToString(buffer, PROP_PAGE);
+ mPageBreakAfter.AppendToString(buffer, PROP_PAGE_BREAK_AFTER);
+ mPageBreakBefore.AppendToString(buffer, PROP_PAGE_BREAK_BEFORE);
+ mPageBreakInside.AppendToString(buffer, PROP_PAGE_BREAK_INSIDE);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSPage -----------------
+
+const nsID& nsCSSPage::GetID(void)
+{
+ return kCSSPageSID;
+}
+
+void nsCSSPage::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mMarks.AppendToString(buffer, PROP_MARKS);
+ mSize.AppendToString(buffer, PROP_SIZE);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSContent -----------------
+
+const nsID& nsCSSContent::GetID(void)
+{
+ return kCSSContentSID;
+}
+
+void nsCSSContent::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mContent.AppendToString(buffer, PROP_CONTENT);
+ mCounterIncrement.AppendToString(buffer, PROP_COUNTER_INCREMENT);
+ mCounterReset.AppendToString(buffer, PROP_COUNTER_RESET);
+ mMarkerOffset.AppendToString(buffer, PROP_MARKER_OFFSET);
+ mQuotes.AppendToString(buffer, PROP_QUOTES);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSAural -----------------
+
+const nsID& nsCSSAural::GetID(void)
+{
+ return kCSSAuralSID;
+}
+
+void nsCSSAural::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mAzimuth.AppendToString(buffer, PROP_AZIMUTH);
+ mElevation.AppendToString(buffer, PROP_ELEVATION);
+ mCueAfter.AppendToString(buffer, PROP_CUE_AFTER);
+ mCueBefore.AppendToString(buffer, PROP_CUE_BEFORE);
+ mPauseAfter.AppendToString(buffer, PROP_PAUSE_AFTER);
+ mPauseBefore.AppendToString(buffer, PROP_PAUSE_BEFORE);
+ mPitch.AppendToString(buffer, PROP_PITCH);
+ mPitchRange.AppendToString(buffer, PROP_PITCH_RANGE);
+ mPlayDuring.AppendToString(buffer, PROP_PLAY_DURING);
+ mRichness.AppendToString(buffer, PROP_RICHNESS);
+ mSpeak.AppendToString(buffer, PROP_SPEAK);
+ mSpeakHeader.AppendToString(buffer, PROP_SPEAK_HEADER);
+ mSpeakNumeral.AppendToString(buffer, PROP_SPEAK_NUMERAL);
+ mSpeakPunctuation.AppendToString(buffer, PROP_SPEAK_PUNCTUATION);
+ mSpeechRate.AppendToString(buffer, PROP_SPEECH_RATE);
+ mStress.AppendToString(buffer, PROP_STRESS);
+ mVoiceFamily.AppendToString(buffer, PROP_VOICE_FAMILY);
+ mVolume.AppendToString(buffer, PROP_VOLUME);
+
+ fputs(buffer, out);
+}
+
+
+
+// --- nsCSSDeclaration -----------------
class CSSDeclarationImpl : public nsICSSDeclaration {
@@ -795,6 +698,9 @@ public:
nsresult GetImportantValues(nsICSSDeclaration*& aResult);
nsresult GetValueIsImportant(const char *aProperty, PRBool& aIsImportant);
+ PRBool AppendValueToString(PRInt32 aProperty, nsString& aResult);
+ PRBool AppendValueToString(PRInt32 aProperty, const nsCSSValue& aValue, nsString& aResult);
+
virtual nsresult ToString(nsString& aString);
void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
@@ -815,6 +721,11 @@ protected:
nsCSSPosition* mPosition;
nsCSSList* mList;
nsCSSDisplay* mDisplay;
+ nsCSSTable* mTable;
+ nsCSSBreaks* mBreaks;
+ nsCSSPage* mPage;
+ nsCSSContent* mContent;
+ nsCSSAural* mAural;
CSSDeclarationImpl* mImportant;
@@ -844,29 +755,23 @@ CSSDeclarationImpl::CSSDeclarationImpl(void)
#endif
}
+#define CSS_IF_DELETE(ptr) if (nsnull != ptr) delete ptr;
+
CSSDeclarationImpl::~CSSDeclarationImpl(void)
{
- if (nsnull != mFont) {
- delete mFont;
- }
- if (nsnull != mColor) {
- delete mColor;
- }
- if (nsnull != mText) {
- delete mText;
- }
- if (nsnull != mMargin) {
- delete mMargin;
- }
- if (nsnull != mPosition) {
- delete mPosition;
- }
- if (nsnull != mList) {
- delete mList;
- }
- if (nsnull != mDisplay) {
- delete mDisplay;
- }
+ CSS_IF_DELETE(mFont);
+ CSS_IF_DELETE(mColor);
+ CSS_IF_DELETE(mText);
+ CSS_IF_DELETE(mMargin);
+ CSS_IF_DELETE(mPosition);
+ CSS_IF_DELETE(mList);
+ CSS_IF_DELETE(mDisplay);
+ CSS_IF_DELETE(mTable);
+ CSS_IF_DELETE(mBreaks);
+ CSS_IF_DELETE(mPage);
+ CSS_IF_DELETE(mContent);
+ CSS_IF_DELETE(mAural);
+
NS_IF_RELEASE(mImportant);
if (nsnull != mOrder) {
delete mOrder;
@@ -888,88 +793,56 @@ CSSDeclarationImpl::~CSSDeclarationImpl(void)
NS_IMPL_ISUPPORTS(CSSDeclarationImpl, kICSSDeclarationIID);
+#define CSS_IF_GET_ELSE(sid,ptr,result) \
+ if (sid.Equals(kCSS##ptr##SID)) { *result = m##ptr; } else
+
nsresult CSSDeclarationImpl::GetData(const nsID& aSID, nsCSSStruct** aDataPtr)
{
if (nsnull == aDataPtr) {
return NS_ERROR_NULL_POINTER;
}
- if (aSID.Equals(kCSSFontSID)) {
- *aDataPtr = mFont;
- }
- else if (aSID.Equals(kCSSColorSID)) {
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSDisplaySID)) {
- *aDataPtr = mDisplay;
- }
- else if (aSID.Equals(kCSSTextSID)) {
- *aDataPtr = mText;
- }
- else if (aSID.Equals(kCSSMarginSID)) {
- *aDataPtr = mMargin;
- }
- else if (aSID.Equals(kCSSPositionSID)) {
- *aDataPtr = mPosition;
- }
- else if (aSID.Equals(kCSSListSID)) {
- *aDataPtr = mList;
- }
- else {
+ CSS_IF_GET_ELSE(aSID, Font, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Color, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Display, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Text, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Margin, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Position, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, List, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Table, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Breaks, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Page, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Content, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Aural, aDataPtr) {
return NS_NOINTERFACE;
}
return NS_OK;
}
+#define CSS_IF_ENSURE_ELSE(sid,ptr,result) \
+ if (sid.Equals(kCSS##ptr##SID)) { \
+ if (nsnull == m##ptr) { m##ptr = new nsCSS##ptr(); } \
+ *result = m##ptr; \
+ } else
+
nsresult CSSDeclarationImpl::EnsureData(const nsID& aSID, nsCSSStruct** aDataPtr)
{
if (nsnull == aDataPtr) {
return NS_ERROR_NULL_POINTER;
}
- if (aSID.Equals(kCSSFontSID)) {
- if (nsnull == mFont) {
- mFont = new nsCSSFont();
- }
- *aDataPtr = mFont;
- }
- else if (aSID.Equals(kCSSColorSID)) {
- if (nsnull == mColor) {
- mColor = new nsCSSColor();
- }
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSDisplaySID)) {
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSTextSID)) {
- if (nsnull == mText) {
- mText = new nsCSSText();
- }
- *aDataPtr = mText;
- }
- else if (aSID.Equals(kCSSMarginSID)) {
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- *aDataPtr = mMargin;
- }
- else if (aSID.Equals(kCSSPositionSID)) {
- if (nsnull == mPosition) {
- mPosition = new nsCSSPosition();
- }
- *aDataPtr = mPosition;
- }
- else if (aSID.Equals(kCSSListSID)) {
- if (nsnull == mList) {
- mList = new nsCSSList();
- }
- *aDataPtr = mList;
- }
- else {
+ CSS_IF_ENSURE_ELSE(aSID, Font, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Color, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Display, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Text, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Margin, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Position, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, List, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Table, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Breaks, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Page, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Content, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Aural, aDataPtr) {
return NS_NOINTERFACE;
}
if (nsnull == *aDataPtr) {
@@ -983,6 +856,24 @@ nsresult CSSDeclarationImpl::AppendValue(const char* aProperty, const nsCSSValue
return AppendValue(nsCSSProps::LookupName(aProperty), aValue);
}
+#define CSS_ENSURE(data) \
+ if (nsnull == m##data) { \
+ m##data = new nsCSS##data(); \
+ } \
+ if (nsnull == m##data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
+#define CSS_ENSURE_RECT(data) \
+ if (nsnull == data) { \
+ data = new nsCSSRect(); \
+ } \
+ if (nsnull == data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aValue)
{
nsresult result = NS_OK;
@@ -994,21 +885,19 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
- if (nsnull == mFont) {
- mFont = new nsCSSFont();
- }
- if (nsnull != mFont) {
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
+ CSS_ENSURE(Font) {
switch (aProperty) {
- case PROP_FONT_FAMILY: mFont->mFamily = aValue; break;
- case PROP_FONT_STYLE: mFont->mStyle = aValue; break;
- case PROP_FONT_VARIANT: mFont->mVariant = aValue; break;
- case PROP_FONT_WEIGHT: mFont->mWeight = aValue; break;
- case PROP_FONT_SIZE: mFont->mSize = aValue; break;
+ case PROP_FONT_FAMILY: mFont->mFamily = aValue; break;
+ case PROP_FONT_STYLE: mFont->mStyle = aValue; break;
+ case PROP_FONT_VARIANT: mFont->mVariant = aValue; break;
+ case PROP_FONT_WEIGHT: mFont->mWeight = aValue; break;
+ case PROP_FONT_SIZE: mFont->mSize = aValue; break;
+ case PROP_FONT_SIZE_ADJUST: mFont->mSizeAdjust = aValue; break;
+ case PROP_FONT_STRETCH: mFont->mStretch = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSColor
@@ -1023,10 +912,7 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
case PROP_OPACITY:
- if (nsnull == mColor) {
- mColor = new nsCSSColor();
- }
- if (nsnull != mColor) {
+ CSS_ENSURE(Color) {
switch (aProperty) {
case PROP_COLOR: mColor->mColor = aValue; break;
case PROP_BACKGROUND_COLOR: mColor->mBackColor = aValue; break;
@@ -1041,9 +927,6 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_OPACITY: mColor->mOpacity = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSText
@@ -1054,12 +937,10 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
- if (nsnull == mText) {
- mText = new nsCSSText();
- }
- if (nsnull != mText) {
+ CSS_ENSURE(Text) {
switch (aProperty) {
case PROP_WORD_SPACING: mText->mWordSpacing = aValue; break;
case PROP_LETTER_SPACING: mText->mLetterSpacing = aValue; break;
@@ -1068,198 +949,11 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_TEXT_TRANSFORM: mText->mTextTransform = aValue; break;
case PROP_TEXT_ALIGN: mText->mTextAlign = aValue; break;
case PROP_TEXT_INDENT: mText->mTextIndent = aValue; break;
+ case PROP_UNICODE_BIDI: mText->mUnicodeBidi = aValue; break;
case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break;
case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSMargin
- case PROP_MARGIN_TOP:
- case PROP_MARGIN_RIGHT:
- case PROP_MARGIN_BOTTOM:
- case PROP_MARGIN_LEFT:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mMargin) {
- mMargin->mMargin = new nsCSSRect();
- }
- if (nsnull != mMargin->mMargin) {
- switch (aProperty) {
- case PROP_MARGIN_TOP: mMargin->mMargin->mTop = aValue; break;
- case PROP_MARGIN_RIGHT: mMargin->mMargin->mRight = aValue; break;
- case PROP_MARGIN_BOTTOM: mMargin->mMargin->mBottom = aValue; break;
- case PROP_MARGIN_LEFT: mMargin->mMargin->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_PADDING_TOP:
- case PROP_PADDING_RIGHT:
- case PROP_PADDING_BOTTOM:
- case PROP_PADDING_LEFT:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mPadding) {
- mMargin->mPadding = new nsCSSRect();
- }
- if (nsnull != mMargin->mPadding) {
- switch (aProperty) {
- case PROP_PADDING_TOP: mMargin->mPadding->mTop = aValue; break;
- case PROP_PADDING_RIGHT: mMargin->mPadding->mRight = aValue; break;
- case PROP_PADDING_BOTTOM: mMargin->mPadding->mBottom = aValue; break;
- case PROP_PADDING_LEFT: mMargin->mPadding->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_WIDTH:
- case PROP_BORDER_RIGHT_WIDTH:
- case PROP_BORDER_BOTTOM_WIDTH:
- case PROP_BORDER_LEFT_WIDTH:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mBorder) {
- mMargin->mBorder = new nsCSSRect();
- }
- if (nsnull != mMargin->mBorder) {
- switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: mMargin->mBorder->mTop = aValue; break;
- case PROP_BORDER_RIGHT_WIDTH: mMargin->mBorder->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_WIDTH: mMargin->mBorder->mBottom = aValue; break;
- case PROP_BORDER_LEFT_WIDTH: mMargin->mBorder->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_COLOR:
- case PROP_BORDER_RIGHT_COLOR:
- case PROP_BORDER_BOTTOM_COLOR:
- case PROP_BORDER_LEFT_COLOR:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mColor) {
- mMargin->mColor = new nsCSSRect();
- }
- if (nsnull != mMargin->mColor) {
- switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: mMargin->mColor->mTop = aValue; break;
- case PROP_BORDER_RIGHT_COLOR: mMargin->mColor->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_COLOR: mMargin->mColor->mBottom = aValue; break;
- case PROP_BORDER_LEFT_COLOR: mMargin->mColor->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_STYLE:
- case PROP_BORDER_RIGHT_STYLE:
- case PROP_BORDER_BOTTOM_STYLE:
- case PROP_BORDER_LEFT_STYLE:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mStyle) {
- mMargin->mStyle = new nsCSSRect();
- }
- if (nsnull != mMargin->mStyle) {
- switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: mMargin->mStyle->mTop = aValue; break;
- case PROP_BORDER_RIGHT_STYLE: mMargin->mStyle->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_STYLE: mMargin->mStyle->mBottom = aValue; break;
- case PROP_BORDER_LEFT_STYLE: mMargin->mStyle->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSPosition
- case PROP_POSITION:
- case PROP_WIDTH:
- case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
- case PROP_Z_INDEX:
- if (nsnull == mPosition) {
- mPosition = new nsCSSPosition();
- }
- if (nsnull != mPosition) {
- switch (aProperty) {
- case PROP_POSITION: mPosition->mPosition = aValue; break;
- case PROP_WIDTH: mPosition->mWidth = aValue; break;
- case PROP_HEIGHT: mPosition->mHeight = aValue; break;
- case PROP_LEFT: mPosition->mLeft = aValue; break;
- case PROP_TOP: mPosition->mTop = aValue; break;
- case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSList
- case PROP_LIST_STYLE_TYPE:
- case PROP_LIST_STYLE_IMAGE:
- case PROP_LIST_STYLE_POSITION:
- if (nsnull == mList) {
- mList = new nsCSSList();
- }
- if (nsnull != mList) {
- switch (aProperty) {
- case PROP_LIST_STYLE_TYPE: mList->mType = aValue; break;
- case PROP_LIST_STYLE_IMAGE: mList->mImage = aValue; break;
- case PROP_LIST_STYLE_POSITION: mList->mPosition = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSDisplay
@@ -1270,10 +964,7 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_VISIBILITY:
case PROP_OVERFLOW:
case PROP_FILTER:
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mDisplay) {
+ CSS_ENSURE(Display) {
switch (aProperty) {
case PROP_FLOAT: mDisplay->mFloat = aValue; break;
case PROP_CLEAR: mDisplay->mClear = aValue; break;
@@ -1284,23 +975,14 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_FILTER: mDisplay->mFilter = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
case PROP_CLIP_TOP:
case PROP_CLIP_RIGHT:
case PROP_CLIP_BOTTOM:
case PROP_CLIP_LEFT:
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mDisplay) {
- if (nsnull == mDisplay->mClip) {
- mDisplay->mClip = new nsCSSRect();
- }
- if (nsnull != mDisplay->mClip) {
+ CSS_ENSURE(Display) {
+ CSS_ENSURE_RECT(mDisplay->mClip) {
switch(aProperty) {
case PROP_CLIP_TOP: mDisplay->mClip->mTop = aValue; break;
case PROP_CLIP_RIGHT: mDisplay->mClip->mRight = aValue; break;
@@ -1308,22 +990,273 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_CLIP_LEFT: mDisplay->mClip->mLeft = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
break;
+ // nsCSSMargin
+ case PROP_MARGIN_TOP:
+ case PROP_MARGIN_RIGHT:
+ case PROP_MARGIN_BOTTOM:
+ case PROP_MARGIN_LEFT:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mMargin) {
+ switch (aProperty) {
+ case PROP_MARGIN_TOP: mMargin->mMargin->mTop = aValue; break;
+ case PROP_MARGIN_RIGHT: mMargin->mMargin->mRight = aValue; break;
+ case PROP_MARGIN_BOTTOM: mMargin->mMargin->mBottom = aValue; break;
+ case PROP_MARGIN_LEFT: mMargin->mMargin->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_PADDING_TOP:
+ case PROP_PADDING_RIGHT:
+ case PROP_PADDING_BOTTOM:
+ case PROP_PADDING_LEFT:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mPadding) {
+ switch (aProperty) {
+ case PROP_PADDING_TOP: mMargin->mPadding->mTop = aValue; break;
+ case PROP_PADDING_RIGHT: mMargin->mPadding->mRight = aValue; break;
+ case PROP_PADDING_BOTTOM: mMargin->mPadding->mBottom = aValue; break;
+ case PROP_PADDING_LEFT: mMargin->mPadding->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_WIDTH:
+ case PROP_BORDER_RIGHT_WIDTH:
+ case PROP_BORDER_BOTTOM_WIDTH:
+ case PROP_BORDER_LEFT_WIDTH:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderWidth) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_WIDTH: mMargin->mBorderWidth->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_WIDTH: mMargin->mBorderWidth->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_WIDTH: mMargin->mBorderWidth->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_WIDTH: mMargin->mBorderWidth->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_COLOR:
+ case PROP_BORDER_RIGHT_COLOR:
+ case PROP_BORDER_BOTTOM_COLOR:
+ case PROP_BORDER_LEFT_COLOR:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderColor) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_COLOR: mMargin->mBorderColor->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_COLOR: mMargin->mBorderColor->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_COLOR: mMargin->mBorderColor->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_COLOR: mMargin->mBorderColor->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_STYLE:
+ case PROP_BORDER_RIGHT_STYLE:
+ case PROP_BORDER_BOTTOM_STYLE:
+ case PROP_BORDER_LEFT_STYLE:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderStyle) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_STYLE: mMargin->mBorderStyle->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_STYLE: mMargin->mBorderStyle->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_STYLE: mMargin->mBorderStyle->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_STYLE: mMargin->mBorderStyle->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ CSS_ENSURE(Margin) {
+ switch (aProperty) {
+ case PROP_OUTLINE_WIDTH: mMargin->mOutlineWidth = aValue; break;
+ case PROP_OUTLINE_COLOR: mMargin->mOutlineColor = aValue; break;
+ case PROP_OUTLINE_STYLE: mMargin->mOutlineStyle = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSPosition
+ case PROP_POSITION:
+ case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
+ case PROP_HEIGHT:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
+ case PROP_Z_INDEX:
+ CSS_ENSURE(Position) {
+ switch (aProperty) {
+ case PROP_POSITION: mPosition->mPosition = aValue; break;
+ case PROP_WIDTH: mPosition->mWidth = aValue; break;
+ case PROP_MIN_WIDTH: mPosition->mMinWidth = aValue; break;
+ case PROP_MAX_WIDTH: mPosition->mMaxWidth = aValue; break;
+ case PROP_HEIGHT: mPosition->mHeight = aValue; break;
+ case PROP_MIN_HEIGHT: mPosition->mMinHeight = aValue; break;
+ case PROP_MAX_HEIGHT: mPosition->mMaxHeight = aValue; break;
+ case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
+ }
+ }
+ break;
+
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ CSS_ENSURE(Position) {
+ CSS_ENSURE_RECT(mPosition->mOffset) {
+ switch (aProperty) {
+ case PROP_TOP: mPosition->mOffset->mTop = aValue; break;
+ case PROP_RIGHT: mPosition->mOffset->mRight= aValue; break;
+ case PROP_BOTTOM: mPosition->mOffset->mBottom = aValue; break;
+ case PROP_LEFT: mPosition->mOffset->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ // nsCSSList
+ case PROP_LIST_STYLE_TYPE:
+ case PROP_LIST_STYLE_IMAGE:
+ case PROP_LIST_STYLE_POSITION:
+ CSS_ENSURE(List) {
+ switch (aProperty) {
+ case PROP_LIST_STYLE_TYPE: mList->mType = aValue; break;
+ case PROP_LIST_STYLE_IMAGE: mList->mImage = aValue; break;
+ case PROP_LIST_STYLE_POSITION: mList->mPosition = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ CSS_ENSURE(Table) {
+ switch (aProperty) {
+ case PROP_BORDER_COLLAPSE: mTable->mBorderCollapse = aValue; break;
+ case PROP_BORDER_SPACING: mTable->mBorderSpacing = aValue; break;
+ case PROP_CAPTION_SIDE: mTable->mCaptionSide = aValue; break;
+ case PROP_EMPTY_CELLS: mTable->mEmptyCells = aValue; break;
+ case PROP_TABLE_LAYOUT: mTable->mLayout = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ CSS_ENSURE(Breaks) {
+ switch (aProperty) {
+ case PROP_ORPHANS: mBreaks->mOrphans = aValue; break;
+ case PROP_WIDOWS: mBreaks->mWidows = aValue; break;
+ case PROP_PAGE: mBreaks->mPage = aValue; break;
+ case PROP_PAGE_BREAK_AFTER: mBreaks->mPageBreakAfter = aValue; break;
+ case PROP_PAGE_BREAK_BEFORE: mBreaks->mPageBreakBefore = aValue; break;
+ case PROP_PAGE_BREAK_INSIDE: mBreaks->mPageBreakInside = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ CSS_ENSURE(Page) {
+ switch (aProperty) {
+ case PROP_MARKS: mPage->mMarks = aValue; break;
+ case PROP_SIZE: mPage->mSize = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ CSS_ENSURE(Content) {
+ switch (aProperty) {
+ case PROP_CONTENT: mContent->mContent = aValue; break;
+ case PROP_COUNTER_INCREMENT: mContent->mCounterIncrement = aValue; break;
+ case PROP_COUNTER_RESET: mContent->mCounterReset = aValue; break;
+ case PROP_MARKER_OFFSET: mContent->mMarkerOffset = aValue; break;
+ case PROP_QUOTES: mContent->mQuotes = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ CSS_ENSURE(Aural) {
+ switch (aProperty) {
+ case PROP_AZIMUTH: mAural->mAzimuth = aValue; break;
+ case PROP_ELEVATION: mAural->mElevation = aValue; break;
+ case PROP_CUE_AFTER: mAural->mCueAfter = aValue; break;
+ case PROP_CUE_BEFORE: mAural->mCueBefore = aValue; break;
+ case PROP_PAUSE_AFTER: mAural->mPauseAfter = aValue; break;
+ case PROP_PAUSE_BEFORE: mAural->mPauseBefore = aValue; break;
+ case PROP_PITCH: mAural->mPitch = aValue; break;
+ case PROP_PITCH_RANGE: mAural->mPitchRange = aValue; break;
+ case PROP_PLAY_DURING: mAural->mPlayDuring = aValue; break;
+ case PROP_RICHNESS: mAural->mRichness = aValue; break;
+ case PROP_SPEAK: mAural->mSpeak = aValue; break;
+ case PROP_SPEAK_HEADER: mAural->mSpeakHeader = aValue; break;
+ case PROP_SPEAK_NUMERAL: mAural->mSpeakNumeral = aValue; break;
+ case PROP_SPEAK_PUNCTUATION: mAural->mSpeakPunctuation = aValue; break;
+ case PROP_SPEECH_RATE: mAural->mSpeechRate = aValue; break;
+ case PROP_STRESS: mAural->mStress = aValue; break;
+ case PROP_VOICE_FAMILY: mAural->mVoiceFamily = aValue; break;
+ case PROP_VOLUME: mAural->mVolume = aValue; break;
+ }
+ }
+ break;
+
+ // Shorthands
case PROP_BACKGROUND:
case PROP_BORDER:
case PROP_CLIP:
+ case PROP_CUE:
case PROP_FONT:
case PROP_LIST_STYLE:
case PROP_MARGIN:
+ case PROP_OUTLINE:
case PROP_PADDING:
+ case PROP_PAUSE:
+ case PROP_TEXT_SHADOW:
case PROP_BACKGROUND_POSITION:
case PROP_BORDER_TOP:
case PROP_BORDER_RIGHT:
@@ -1364,6 +1297,18 @@ nsresult CSSDeclarationImpl::SetValueImportant(const char* aProperty)
return SetValueImportant(nsCSSProps::LookupName(aProperty));
}
+#define CSS_ENSURE_IMPORTANT(data) \
+ if (nsnull == mImportant->m##data) { \
+ mImportant->m##data = new nsCSS##data(); \
+ } \
+ if (nsnull == mImportant->m##data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
+#define CSS_CASE_IMPORTANT(prop,data) \
+ case prop: mImportant->data = data; data.Reset(); break
+
nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
{
nsresult result = NS_OK;
@@ -1385,27 +1330,20 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
if (nsnull != mFont) {
- if (nsnull == mImportant->mFont) {
- mImportant->mFont = new nsCSSFont();
- }
- if (nsnull != mImportant->mFont) {
+ CSS_ENSURE_IMPORTANT(Font) {
switch (aProperty) {
- case PROP_FONT_FAMILY: mImportant->mFont->mFamily = mFont->mFamily;
- mFont->mFamily.Reset(); break;
- case PROP_FONT_STYLE: mImportant->mFont->mStyle = mFont->mStyle;
- mFont->mStyle.Reset(); break;
- case PROP_FONT_VARIANT: mImportant->mFont->mVariant = mFont->mVariant;
- mFont->mVariant.Reset(); break;
- case PROP_FONT_WEIGHT: mImportant->mFont->mWeight = mFont->mWeight;
- mFont->mWeight.Reset(); break;
- case PROP_FONT_SIZE: mImportant->mFont->mSize = mFont->mSize;
- mFont->mSize.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_FONT_FAMILY, mFont->mFamily);
+ CSS_CASE_IMPORTANT(PROP_FONT_STYLE, mFont->mStyle);
+ CSS_CASE_IMPORTANT(PROP_FONT_VARIANT, mFont->mVariant);
+ CSS_CASE_IMPORTANT(PROP_FONT_WEIGHT, mFont->mWeight);
+ CSS_CASE_IMPORTANT(PROP_FONT_SIZE, mFont->mSize);
+ CSS_CASE_IMPORTANT(PROP_FONT_SIZE_ADJUST, mFont->mSizeAdjust);
+ CSS_CASE_IMPORTANT(PROP_FONT_STRETCH, mFont->mStretch);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
@@ -1422,38 +1360,21 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_CURSOR_IMAGE:
case PROP_OPACITY:
if (nsnull != mColor) {
- if (nsnull == mImportant->mColor) {
- mImportant->mColor = new nsCSSColor();
- }
- if (nsnull != mImportant->mColor) {
+ CSS_ENSURE_IMPORTANT(Color) {
switch (aProperty) {
- case PROP_COLOR: mImportant->mColor->mColor = mColor->mColor;
- mColor->mColor.Reset(); break;
- case PROP_BACKGROUND_COLOR: mImportant->mColor->mBackColor = mColor->mBackColor;
- mColor->mBackColor.Reset(); break;
- case PROP_BACKGROUND_IMAGE: mImportant->mColor->mBackImage = mColor->mBackImage;
- mColor->mBackImage.Reset(); break;
- case PROP_BACKGROUND_REPEAT: mImportant->mColor->mBackRepeat = mColor->mBackRepeat;
- mColor->mBackRepeat.Reset(); break;
- case PROP_BACKGROUND_ATTACHMENT: mImportant->mColor->mBackAttachment = mColor->mBackAttachment;
- mColor->mBackAttachment.Reset(); break;
- case PROP_BACKGROUND_X_POSITION: mImportant->mColor->mBackPositionX = mColor->mBackPositionX;
- mColor->mBackPositionX.Reset(); break;
- case PROP_BACKGROUND_Y_POSITION: mImportant->mColor->mBackPositionY = mColor->mBackPositionY;
- mColor->mBackPositionY.Reset(); break;
- case PROP_BACKGROUND_FILTER: mImportant->mColor->mBackFilter = mColor->mBackFilter;
- mColor->mBackFilter.Reset(); break;
- case PROP_CURSOR: mImportant->mColor->mCursor = mColor->mCursor;
- mColor->mCursor.Reset(); break;
- case PROP_CURSOR_IMAGE: mImportant->mColor->mCursorImage = mColor->mCursorImage;
- mColor->mCursorImage.Reset(); break;
- case PROP_OPACITY: mImportant->mColor->mOpacity = mColor->mOpacity;
- mColor->mOpacity.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_COLOR, mColor->mColor);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_COLOR, mColor->mBackColor);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_IMAGE, mColor->mBackImage);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_REPEAT, mColor->mBackRepeat);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_ATTACHMENT, mColor->mBackAttachment);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_X_POSITION, mColor->mBackPositionX);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_Y_POSITION, mColor->mBackPositionY);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_FILTER, mColor->mBackFilter);
+ CSS_CASE_IMPORTANT(PROP_CURSOR, mColor->mCursor);
+ CSS_CASE_IMPORTANT(PROP_CURSOR_IMAGE, mColor->mCursorImage);
+ CSS_CASE_IMPORTANT(PROP_OPACITY, mColor->mOpacity);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
@@ -1465,36 +1386,80 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
if (nsnull != mText) {
- if (nsnull == mImportant->mText) {
- mImportant->mText = new nsCSSText();
- }
- if (nsnull != mImportant->mText) {
+ CSS_ENSURE_IMPORTANT(Text) {
switch (aProperty) {
- case PROP_WORD_SPACING: mImportant->mText->mWordSpacing = mText->mWordSpacing;
- mText->mWordSpacing.Reset(); break;
- case PROP_LETTER_SPACING: mImportant->mText->mLetterSpacing = mText->mLetterSpacing;
- mText->mLetterSpacing.Reset(); break;
- case PROP_TEXT_DECORATION: mImportant->mText->mDecoration = mText->mDecoration;
- mText->mDecoration.Reset(); break;
- case PROP_VERTICAL_ALIGN: mImportant->mText->mVerticalAlign = mText->mVerticalAlign;
- mText->mVerticalAlign.Reset(); break;
- case PROP_TEXT_TRANSFORM: mImportant->mText->mTextTransform = mText->mTextTransform;
- mText->mTextTransform.Reset(); break;
- case PROP_TEXT_ALIGN: mImportant->mText->mTextAlign = mText->mTextAlign;
- mText->mTextAlign.Reset(); break;
- case PROP_TEXT_INDENT: mImportant->mText->mTextIndent = mText->mTextIndent;
- mText->mTextIndent.Reset(); break;
- case PROP_LINE_HEIGHT: mImportant->mText->mLineHeight = mText->mLineHeight;
- mText->mLineHeight.Reset(); break;
- case PROP_WHITE_SPACE: mImportant->mText->mWhiteSpace = mText->mWhiteSpace;
- mText->mWhiteSpace.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_WORD_SPACING, mText->mWordSpacing);
+ CSS_CASE_IMPORTANT(PROP_LETTER_SPACING, mText->mLetterSpacing);
+ CSS_CASE_IMPORTANT(PROP_TEXT_DECORATION, mText->mDecoration);
+ CSS_CASE_IMPORTANT(PROP_VERTICAL_ALIGN, mText->mVerticalAlign);
+ CSS_CASE_IMPORTANT(PROP_TEXT_TRANSFORM, mText->mTextTransform);
+ CSS_CASE_IMPORTANT(PROP_TEXT_ALIGN, mText->mTextAlign);
+ CSS_CASE_IMPORTANT(PROP_TEXT_INDENT, mText->mTextIndent);
+ CSS_CASE_IMPORTANT(PROP_UNICODE_BIDI, mText->mUnicodeBidi);
+ CSS_CASE_IMPORTANT(PROP_LINE_HEIGHT, mText->mLineHeight);
+ CSS_CASE_IMPORTANT(PROP_WHITE_SPACE, mText->mWhiteSpace);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ break;
+
+ case PROP_TEXT_SHADOW:
+ if (nsnull != mText) {
+ if (nsnull != mText->mTextShadow) {
+ CSS_ENSURE_IMPORTANT(Text) {
+ if (nsnull != mImportant->mText->mTextShadow) {
+ delete mImportant->mText->mTextShadow;
+ }
+ mImportant->mText->mTextShadow = mText->mTextShadow;
+ mText->mTextShadow = nsnull;
+ }
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case PROP_DIRECTION:
+ case PROP_DISPLAY:
+ case PROP_FLOAT:
+ case PROP_CLEAR:
+ case PROP_OVERFLOW:
+ case PROP_VISIBILITY:
+ case PROP_FILTER:
+ if (nsnull != mDisplay) {
+ CSS_ENSURE_IMPORTANT(Display) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_DIRECTION, mDisplay->mDirection);
+ CSS_CASE_IMPORTANT(PROP_DISPLAY, mDisplay->mDisplay);
+ CSS_CASE_IMPORTANT(PROP_FLOAT, mDisplay->mFloat);
+ CSS_CASE_IMPORTANT(PROP_CLEAR, mDisplay->mClear);
+ CSS_CASE_IMPORTANT(PROP_OVERFLOW, mDisplay->mOverflow);
+ CSS_CASE_IMPORTANT(PROP_VISIBILITY, mDisplay->mVisibility);
+ CSS_CASE_IMPORTANT(PROP_FILTER, mDisplay->mFilter);
+ }
+ }
+ }
+ break;
+
+ case PROP_CLIP_TOP:
+ case PROP_CLIP_RIGHT:
+ case PROP_CLIP_BOTTOM:
+ case PROP_CLIP_LEFT:
+ if (nsnull != mDisplay) {
+ if (nsnull != mDisplay->mClip) {
+ CSS_ENSURE_IMPORTANT(Display) {
+ CSS_ENSURE_RECT(mImportant->mDisplay->mClip) {
+ switch(aProperty) {
+ CSS_CASE_IMPORTANT(PROP_CLIP_TOP, mDisplay->mClip->mTop);
+ CSS_CASE_IMPORTANT(PROP_CLIP_RIGHT, mDisplay->mClip->mRight);
+ CSS_CASE_IMPORTANT(PROP_CLIP_BOTTOM, mDisplay->mClip->mBottom);
+ CSS_CASE_IMPORTANT(PROP_CLIP_LEFT, mDisplay->mClip->mLeft);
+ }
+ }
+ }
}
}
break;
@@ -1506,31 +1471,15 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_MARGIN_LEFT:
if (nsnull != mMargin) {
if (nsnull != mMargin->mMargin) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mMargin) {
- mImportant->mMargin->mMargin = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mMargin) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mMargin) {
switch (aProperty) {
- case PROP_MARGIN_TOP: mImportant->mMargin->mMargin->mTop = mMargin->mMargin->mTop;
- mMargin->mMargin->mTop.Reset(); break;
- case PROP_MARGIN_RIGHT: mImportant->mMargin->mMargin->mRight = mMargin->mMargin->mRight;
- mMargin->mMargin->mRight.Reset(); break;
- case PROP_MARGIN_BOTTOM: mImportant->mMargin->mMargin->mBottom = mMargin->mMargin->mBottom;
- mMargin->mMargin->mBottom.Reset(); break;
- case PROP_MARGIN_LEFT: mImportant->mMargin->mMargin->mLeft = mMargin->mMargin->mLeft;
- mMargin->mMargin->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_MARGIN_TOP, mMargin->mMargin->mTop);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_RIGHT, mMargin->mMargin->mRight);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_BOTTOM, mMargin->mMargin->mBottom);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_LEFT, mMargin->mMargin->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1542,31 +1491,15 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_PADDING_LEFT:
if (nsnull != mMargin) {
if (nsnull != mMargin->mPadding) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mPadding) {
- mImportant->mMargin->mPadding = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mPadding) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mPadding) {
switch (aProperty) {
- case PROP_PADDING_TOP: mImportant->mMargin->mPadding->mTop = mMargin->mPadding->mTop;
- mMargin->mPadding->mTop.Reset(); break;
- case PROP_PADDING_RIGHT: mImportant->mMargin->mPadding->mRight = mMargin->mPadding->mRight;
- mMargin->mPadding->mRight.Reset(); break;
- case PROP_PADDING_BOTTOM: mImportant->mMargin->mPadding->mBottom = mMargin->mPadding->mBottom;
- mMargin->mPadding->mBottom.Reset(); break;
- case PROP_PADDING_LEFT: mImportant->mMargin->mPadding->mLeft = mMargin->mPadding->mLeft;
- mMargin->mPadding->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_PADDING_TOP, mMargin->mPadding->mTop);
+ CSS_CASE_IMPORTANT(PROP_PADDING_RIGHT, mMargin->mPadding->mRight);
+ CSS_CASE_IMPORTANT(PROP_PADDING_BOTTOM, mMargin->mPadding->mBottom);
+ CSS_CASE_IMPORTANT(PROP_PADDING_LEFT, mMargin->mPadding->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1577,32 +1510,16 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_WIDTH:
case PROP_BORDER_LEFT_WIDTH:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mBorder) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mBorder) {
- mImportant->mMargin->mBorder = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mBorder) {
+ if (nsnull != mMargin->mBorderWidth) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderWidth) {
switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: mImportant->mMargin->mBorder->mTop = mMargin->mBorder->mTop;
- mMargin->mBorder->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_WIDTH: mImportant->mMargin->mBorder->mRight = mMargin->mBorder->mRight;
- mMargin->mBorder->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_WIDTH: mImportant->mMargin->mBorder->mBottom = mMargin->mBorder->mBottom;
- mMargin->mBorder->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_WIDTH: mImportant->mMargin->mBorder->mLeft = mMargin->mBorder->mLeft;
- mMargin->mBorder->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_WIDTH, mMargin->mBorderWidth->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_WIDTH, mMargin->mBorderWidth->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_WIDTH, mMargin->mBorderWidth->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_WIDTH, mMargin->mBorderWidth->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1613,32 +1530,16 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_COLOR:
case PROP_BORDER_LEFT_COLOR:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mColor) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mColor) {
- mImportant->mMargin->mColor = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mColor) {
+ if (nsnull != mMargin->mBorderColor) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderColor) {
switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: mImportant->mMargin->mColor->mTop = mMargin->mColor->mTop;
- mMargin->mColor->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_COLOR: mImportant->mMargin->mColor->mRight = mMargin->mColor->mRight;
- mMargin->mColor->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_COLOR: mImportant->mMargin->mColor->mBottom = mMargin->mColor->mBottom;
- mMargin->mColor->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_COLOR: mImportant->mMargin->mColor->mLeft = mMargin->mColor->mLeft;
- mMargin->mColor->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_COLOR, mMargin->mBorderColor->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_COLOR, mMargin->mBorderColor->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_COLOR, mMargin->mBorderColor->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_COLOR, mMargin->mBorderColor->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1649,32 +1550,30 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_STYLE:
case PROP_BORDER_LEFT_STYLE:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mStyle) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mStyle) {
- mImportant->mMargin->mStyle = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mStyle) {
+ if (nsnull != mMargin->mBorderStyle) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderStyle) {
switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: mImportant->mMargin->mStyle->mTop = mMargin->mStyle->mTop;
- mMargin->mStyle->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_STYLE: mImportant->mMargin->mStyle->mRight = mMargin->mStyle->mRight;
- mMargin->mStyle->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_STYLE: mImportant->mMargin->mStyle->mBottom = mMargin->mStyle->mBottom;
- mMargin->mStyle->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_STYLE: mImportant->mMargin->mStyle->mLeft = mMargin->mStyle->mLeft;
- mMargin->mStyle->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_STYLE, mMargin->mBorderStyle->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_STYLE, mMargin->mBorderStyle->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_STYLE, mMargin->mBorderStyle->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_STYLE, mMargin->mBorderStyle->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ if (nsnull != mMargin) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_WIDTH, mMargin->mOutlineWidth);
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_COLOR, mMargin->mOutlineColor);
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_STYLE, mMargin->mOutlineStyle);
}
}
}
@@ -1683,32 +1582,44 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
// nsCSSPosition
case PROP_POSITION:
case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
case PROP_Z_INDEX:
if (nsnull != mPosition) {
- if (nsnull == mImportant->mPosition) {
- mImportant->mPosition = new nsCSSPosition();
- }
- if (nsnull != mImportant->mPosition) {
+ CSS_ENSURE_IMPORTANT(Position) {
switch (aProperty) {
- case PROP_POSITION: mImportant->mPosition->mPosition = mPosition->mPosition;
- mPosition->mPosition.Reset(); break;
- case PROP_WIDTH: mImportant->mPosition->mWidth = mPosition->mWidth;
- mPosition->mWidth.Reset(); break;
- case PROP_HEIGHT: mImportant->mPosition->mHeight = mPosition->mHeight;
- mPosition->mHeight.Reset(); break;
- case PROP_LEFT: mImportant->mPosition->mLeft = mPosition->mLeft;
- mPosition->mLeft.Reset(); break;
- case PROP_TOP: mImportant->mPosition->mTop = mPosition->mTop;
- mPosition->mTop.Reset(); break;
- case PROP_Z_INDEX: mImportant->mPosition->mZIndex = mPosition->mZIndex;
- mPosition->mZIndex.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_POSITION, mPosition->mPosition);
+ CSS_CASE_IMPORTANT(PROP_WIDTH, mPosition->mWidth);
+ CSS_CASE_IMPORTANT(PROP_MIN_WIDTH, mPosition->mMinWidth);
+ CSS_CASE_IMPORTANT(PROP_MAX_WIDTH, mPosition->mMaxWidth);
+ CSS_CASE_IMPORTANT(PROP_HEIGHT, mPosition->mHeight);
+ CSS_CASE_IMPORTANT(PROP_MIN_HEIGHT, mPosition->mMinHeight);
+ CSS_CASE_IMPORTANT(PROP_MAX_HEIGHT, mPosition->mMaxHeight);
+ CSS_CASE_IMPORTANT(PROP_Z_INDEX, mPosition->mZIndex);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ break;
+
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ if (nsnull != mPosition) {
+ if (nsnull != mPosition->mOffset) {
+ CSS_ENSURE_IMPORTANT(Position) {
+ CSS_ENSURE_RECT(mImportant->mPosition->mOffset) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_TOP, mPosition->mOffset->mTop);
+ CSS_CASE_IMPORTANT(PROP_RIGHT, mPosition->mOffset->mRight);
+ CSS_CASE_IMPORTANT(PROP_BOTTOM, mPosition->mOffset->mBottom);
+ CSS_CASE_IMPORTANT(PROP_LEFT, mPosition->mOffset->mLeft);
+ }
+ }
+ }
}
}
break;
@@ -1718,97 +1629,134 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_LIST_STYLE_IMAGE:
case PROP_LIST_STYLE_POSITION:
if (nsnull != mList) {
- if (nsnull == mImportant->mList) {
- mImportant->mList = new nsCSSList();
- }
- if (nsnull != mImportant->mList) {
+ CSS_ENSURE_IMPORTANT(List) {
switch (aProperty) {
- case PROP_LIST_STYLE_TYPE: mImportant->mList->mType = mList->mType;
- mList->mType.Reset(); break;
- case PROP_LIST_STYLE_IMAGE: mImportant->mList->mImage = mList->mImage;
- mList->mImage.Reset(); break;
- case PROP_LIST_STYLE_POSITION: mImportant->mList->mPosition = mList->mPosition;
- mList->mPosition.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_TYPE, mList->mType);
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_IMAGE, mList->mImage);
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_POSITION, mList->mPosition);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
- // nsCSSDisplay
- case PROP_FLOAT:
- case PROP_CLEAR:
- case PROP_DISPLAY:
- case PROP_DIRECTION:
- case PROP_VISIBILITY:
- case PROP_OVERFLOW:
- case PROP_FILTER:
- if (nsnull != mDisplay) {
- if (nsnull == mImportant->mDisplay) {
- mImportant->mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mImportant->mDisplay) {
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ if (nsnull != mTable) {
+ CSS_ENSURE_IMPORTANT(Table) {
switch (aProperty) {
- case PROP_FLOAT: mImportant->mDisplay->mFloat = mDisplay->mFloat;
- mDisplay->mFloat.Reset(); break;
- case PROP_CLEAR: mImportant->mDisplay->mClear = mDisplay->mClear;
- mDisplay->mClear.Reset(); break;
- case PROP_DISPLAY: mImportant->mDisplay->mDisplay = mDisplay->mDisplay;
- mDisplay->mDisplay.Reset(); break;
- case PROP_DIRECTION: mImportant->mDisplay->mDirection = mDisplay->mDirection;
- mDisplay->mDirection.Reset(); break;
- case PROP_VISIBILITY: mImportant->mDisplay->mVisibility = mDisplay->mVisibility;
- mDisplay->mVisibility.Reset(); break;
- case PROP_OVERFLOW: mImportant->mDisplay->mOverflow = mDisplay->mOverflow;
- mDisplay->mOverflow.Reset(); break;
- case PROP_FILTER: mImportant->mDisplay->mFilter = mDisplay->mFilter;
- mDisplay->mFilter.Reset(); break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- break;
-
- case PROP_CLIP_TOP:
- case PROP_CLIP_RIGHT:
- case PROP_CLIP_BOTTOM:
- case PROP_CLIP_LEFT:
- if (nsnull != mDisplay) {
- if (nsnull != mDisplay->mClip) {
- if (nsnull == mImportant->mDisplay) {
- mImportant->mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mImportant->mDisplay) {
- if (nsnull == mImportant->mDisplay->mClip) {
- mImportant->mDisplay->mClip = new nsCSSRect();
- }
- if (nsnull != mImportant->mDisplay->mClip) {
- switch(aProperty) {
- case PROP_CLIP_TOP: mImportant->mDisplay->mClip->mTop = mDisplay->mClip->mTop;
- mDisplay->mClip->mTop.Reset(); break;
- case PROP_CLIP_RIGHT: mImportant->mDisplay->mClip->mRight = mDisplay->mClip->mRight;
- mDisplay->mClip->mRight.Reset(); break;
- case PROP_CLIP_BOTTOM: mImportant->mDisplay->mClip->mBottom = mDisplay->mClip->mBottom;
- mDisplay->mClip->mBottom.Reset(); break;
- case PROP_CLIP_LEFT: mImportant->mDisplay->mClip->mLeft = mDisplay->mClip->mLeft;
- mDisplay->mClip->mLeft.Reset(); break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ CSS_CASE_IMPORTANT(PROP_BORDER_COLLAPSE, mTable->mBorderCollapse);
+ CSS_CASE_IMPORTANT(PROP_BORDER_SPACING, mTable->mBorderSpacing);
+ CSS_CASE_IMPORTANT(PROP_CAPTION_SIDE, mTable->mCaptionSide);
+ CSS_CASE_IMPORTANT(PROP_EMPTY_CELLS, mTable->mEmptyCells);
+ CSS_CASE_IMPORTANT(PROP_TABLE_LAYOUT, mTable->mLayout);
}
}
}
break;
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ if (nsnull != mBreaks) {
+ CSS_ENSURE_IMPORTANT(Breaks) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_ORPHANS, mBreaks->mOrphans);
+ CSS_CASE_IMPORTANT(PROP_WIDOWS, mBreaks->mWidows);
+ CSS_CASE_IMPORTANT(PROP_PAGE, mBreaks->mPage);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_AFTER, mBreaks->mPageBreakAfter);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_BEFORE, mBreaks->mPageBreakBefore);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_INSIDE, mBreaks->mPageBreakInside);
+ }
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ if (nsnull != mPage) {
+ CSS_ENSURE_IMPORTANT(Page) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_MARKS, mPage->mMarks);
+ CSS_CASE_IMPORTANT(PROP_SIZE, mPage->mSize);
+ }
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ if (nsnull != mContent) {
+ CSS_ENSURE_IMPORTANT(Content) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_CONTENT, mContent->mContent);
+ CSS_CASE_IMPORTANT(PROP_COUNTER_INCREMENT, mContent->mCounterIncrement);
+ CSS_CASE_IMPORTANT(PROP_COUNTER_RESET, mContent->mCounterReset);
+ CSS_CASE_IMPORTANT(PROP_MARKER_OFFSET, mContent->mMarkerOffset);
+ CSS_CASE_IMPORTANT(PROP_QUOTES, mContent->mQuotes);
+ }
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ if (nsnull != mAural) {
+ CSS_ENSURE_IMPORTANT(Aural) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_AZIMUTH, mAural->mAzimuth);
+ CSS_CASE_IMPORTANT(PROP_ELEVATION, mAural->mElevation);
+ CSS_CASE_IMPORTANT(PROP_CUE_AFTER, mAural->mCueAfter);
+ CSS_CASE_IMPORTANT(PROP_CUE_BEFORE, mAural->mCueBefore);
+ CSS_CASE_IMPORTANT(PROP_PAUSE_AFTER, mAural->mPauseAfter);
+ CSS_CASE_IMPORTANT(PROP_PAUSE_BEFORE, mAural->mPauseBefore);
+ CSS_CASE_IMPORTANT(PROP_PITCH, mAural->mPitch);
+ CSS_CASE_IMPORTANT(PROP_PITCH_RANGE, mAural->mPitchRange);
+ CSS_CASE_IMPORTANT(PROP_PLAY_DURING, mAural->mPlayDuring);
+ CSS_CASE_IMPORTANT(PROP_RICHNESS, mAural->mRichness);
+ CSS_CASE_IMPORTANT(PROP_SPEAK, mAural->mSpeak);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_HEADER, mAural->mSpeakHeader);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_NUMERAL, mAural->mSpeakNumeral);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_PUNCTUATION, mAural->mSpeakPunctuation);
+ CSS_CASE_IMPORTANT(PROP_SPEECH_RATE, mAural->mSpeechRate);
+ CSS_CASE_IMPORTANT(PROP_STRESS, mAural->mStress);
+ CSS_CASE_IMPORTANT(PROP_VOICE_FAMILY, mAural->mVoiceFamily);
+ CSS_CASE_IMPORTANT(PROP_VOLUME, mAural->mVolume);
+ }
+ }
+ }
+ break;
+
+ // Shorthands
case PROP_BACKGROUND:
SetValueImportant(PROP_BACKGROUND_COLOR);
SetValueImportant(PROP_BACKGROUND_IMAGE);
@@ -1838,6 +1786,10 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
SetValueImportant(PROP_CLIP_BOTTOM);
SetValueImportant(PROP_CLIP_LEFT);
break;
+ case PROP_CUE:
+ SetValueImportant(PROP_CUE_AFTER);
+ SetValueImportant(PROP_CUE_BEFORE);
+ break;
case PROP_FONT:
SetValueImportant(PROP_FONT_FAMILY);
SetValueImportant(PROP_FONT_STYLE);
@@ -1857,12 +1809,21 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
SetValueImportant(PROP_MARGIN_BOTTOM);
SetValueImportant(PROP_MARGIN_LEFT);
break;
+ case PROP_OUTLINE:
+ SetValueImportant(PROP_OUTLINE_COLOR);
+ SetValueImportant(PROP_OUTLINE_STYLE);
+ SetValueImportant(PROP_OUTLINE_WIDTH);
+ break;
case PROP_PADDING:
SetValueImportant(PROP_PADDING_TOP);
SetValueImportant(PROP_PADDING_RIGHT);
SetValueImportant(PROP_PADDING_BOTTOM);
SetValueImportant(PROP_PADDING_LEFT);
break;
+ case PROP_PAUSE:
+ SetValueImportant(PROP_PAUSE_AFTER);
+ SetValueImportant(PROP_PAUSE_BEFORE);
+ break;
case PROP_BACKGROUND_POSITION:
SetValueImportant(PROP_BACKGROUND_X_POSITION);
SetValueImportant(PROP_BACKGROUND_Y_POSITION);
@@ -1947,13 +1908,17 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
if (nsnull != mFont) {
switch (aProperty) {
- case PROP_FONT_FAMILY: aValue = mFont->mFamily; break;
- case PROP_FONT_STYLE: aValue = mFont->mStyle; break;
- case PROP_FONT_VARIANT: aValue = mFont->mVariant; break;
- case PROP_FONT_WEIGHT: aValue = mFont->mWeight; break;
- case PROP_FONT_SIZE: aValue = mFont->mSize; break;
+ case PROP_FONT_FAMILY: aValue = mFont->mFamily; break;
+ case PROP_FONT_STYLE: aValue = mFont->mStyle; break;
+ case PROP_FONT_VARIANT: aValue = mFont->mVariant; break;
+ case PROP_FONT_WEIGHT: aValue = mFont->mWeight; break;
+ case PROP_FONT_SIZE: aValue = mFont->mSize; break;
+ case PROP_FONT_SIZE_ADJUST: aValue = mFont->mSizeAdjust; break;
+ case PROP_FONT_STRETCH: aValue = mFont->mStretch; break;
}
}
else {
@@ -2001,6 +1966,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
if (nsnull != mText) {
@@ -2012,6 +1978,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_TRANSFORM: aValue = mText->mTextTransform; break;
case PROP_TEXT_ALIGN: aValue = mText->mTextAlign; break;
case PROP_TEXT_INDENT: aValue = mText->mTextIndent; break;
+ case PROP_UNICODE_BIDI: aValue = mText->mUnicodeBidi; break;
case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break;
case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break;
}
@@ -2021,6 +1988,61 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ case PROP_TEXT_SHADOW_COLOR:
+ case PROP_TEXT_SHADOW_X:
+ case PROP_TEXT_SHADOW_Y:
+ case PROP_TEXT_SHADOW_RADIUS:
+ if ((nsnull != mText) && (nsnull != mText->mTextShadow)) {
+ switch (aProperty) {
+ case PROP_TEXT_SHADOW_COLOR: aValue = mText->mTextShadow->mColor; break;
+ case PROP_TEXT_SHADOW_X: aValue = mText->mTextShadow->mXOffset; break;
+ case PROP_TEXT_SHADOW_Y: aValue = mText->mTextShadow->mYOffset; break;
+ case PROP_TEXT_SHADOW_RADIUS: aValue = mText->mTextShadow->mRadius; break;
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case PROP_FLOAT:
+ case PROP_CLEAR:
+ case PROP_DISPLAY:
+ case PROP_DIRECTION:
+ case PROP_VISIBILITY:
+ case PROP_OVERFLOW:
+ case PROP_FILTER:
+ if (nsnull != mDisplay) {
+ switch (aProperty) {
+ case PROP_FLOAT: aValue = mDisplay->mFloat; break;
+ case PROP_CLEAR: aValue = mDisplay->mClear; break;
+ case PROP_DISPLAY: aValue = mDisplay->mDisplay; break;
+ case PROP_DIRECTION: aValue = mDisplay->mDirection; break;
+ case PROP_VISIBILITY: aValue = mDisplay->mVisibility; break;
+ case PROP_OVERFLOW: aValue = mDisplay->mOverflow; break;
+ case PROP_FILTER: aValue = mDisplay->mFilter; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ case PROP_CLIP_TOP:
+ case PROP_CLIP_RIGHT:
+ case PROP_CLIP_BOTTOM:
+ case PROP_CLIP_LEFT:
+ if ((nsnull != mDisplay) && (nsnull != mDisplay->mClip)) {
+ switch(aProperty) {
+ case PROP_CLIP_TOP: aValue = mDisplay->mClip->mTop; break;
+ case PROP_CLIP_RIGHT: aValue = mDisplay->mClip->mRight; break;
+ case PROP_CLIP_BOTTOM: aValue = mDisplay->mClip->mBottom; break;
+ case PROP_CLIP_LEFT: aValue = mDisplay->mClip->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
// nsCSSMargin
case PROP_MARGIN_TOP:
case PROP_MARGIN_RIGHT:
@@ -2060,12 +2082,12 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_WIDTH:
case PROP_BORDER_BOTTOM_WIDTH:
case PROP_BORDER_LEFT_WIDTH:
- if ((nsnull != mMargin) && (nsnull != mMargin->mBorder)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderWidth)) {
switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: aValue = mMargin->mBorder->mTop; break;
- case PROP_BORDER_RIGHT_WIDTH: aValue = mMargin->mBorder->mRight; break;
- case PROP_BORDER_BOTTOM_WIDTH: aValue = mMargin->mBorder->mBottom; break;
- case PROP_BORDER_LEFT_WIDTH: aValue = mMargin->mBorder->mLeft; break;
+ case PROP_BORDER_TOP_WIDTH: aValue = mMargin->mBorderWidth->mTop; break;
+ case PROP_BORDER_RIGHT_WIDTH: aValue = mMargin->mBorderWidth->mRight; break;
+ case PROP_BORDER_BOTTOM_WIDTH: aValue = mMargin->mBorderWidth->mBottom; break;
+ case PROP_BORDER_LEFT_WIDTH: aValue = mMargin->mBorderWidth->mLeft; break;
}
}
else {
@@ -2077,12 +2099,12 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_COLOR:
case PROP_BORDER_BOTTOM_COLOR:
case PROP_BORDER_LEFT_COLOR:
- if ((nsnull != mMargin) && (nsnull != mMargin->mColor)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderColor)) {
switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: aValue = mMargin->mColor->mTop; break;
- case PROP_BORDER_RIGHT_COLOR: aValue = mMargin->mColor->mRight; break;
- case PROP_BORDER_BOTTOM_COLOR: aValue = mMargin->mColor->mBottom; break;
- case PROP_BORDER_LEFT_COLOR: aValue = mMargin->mColor->mLeft; break;
+ case PROP_BORDER_TOP_COLOR: aValue = mMargin->mBorderColor->mTop; break;
+ case PROP_BORDER_RIGHT_COLOR: aValue = mMargin->mBorderColor->mRight; break;
+ case PROP_BORDER_BOTTOM_COLOR: aValue = mMargin->mBorderColor->mBottom; break;
+ case PROP_BORDER_LEFT_COLOR: aValue = mMargin->mBorderColor->mLeft; break;
}
}
else {
@@ -2094,12 +2116,27 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_STYLE:
case PROP_BORDER_BOTTOM_STYLE:
case PROP_BORDER_LEFT_STYLE:
- if ((nsnull != mMargin) && (nsnull != mMargin->mStyle)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderStyle)) {
switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: aValue = mMargin->mStyle->mTop; break;
- case PROP_BORDER_RIGHT_STYLE: aValue = mMargin->mStyle->mRight; break;
- case PROP_BORDER_BOTTOM_STYLE: aValue = mMargin->mStyle->mBottom; break;
- case PROP_BORDER_LEFT_STYLE: aValue = mMargin->mStyle->mLeft; break;
+ case PROP_BORDER_TOP_STYLE: aValue = mMargin->mBorderStyle->mTop; break;
+ case PROP_BORDER_RIGHT_STYLE: aValue = mMargin->mBorderStyle->mRight; break;
+ case PROP_BORDER_BOTTOM_STYLE: aValue = mMargin->mBorderStyle->mBottom; break;
+ case PROP_BORDER_LEFT_STYLE: aValue = mMargin->mBorderStyle->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ if (nsnull != mMargin) {
+ switch (aProperty) {
+ case PROP_OUTLINE_WIDTH: aValue = mMargin->mOutlineWidth; break;
+ case PROP_OUTLINE_COLOR: aValue = mMargin->mOutlineColor; break;
+ case PROP_OUTLINE_STYLE: aValue = mMargin->mOutlineStyle; break;
}
}
else {
@@ -2110,17 +2147,21 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
// nsCSSPosition
case PROP_POSITION:
case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
case PROP_Z_INDEX:
if (nsnull != mPosition) {
switch (aProperty) {
case PROP_POSITION: aValue = mPosition->mPosition; break;
case PROP_WIDTH: aValue = mPosition->mWidth; break;
+ case PROP_MIN_WIDTH: aValue = mPosition->mMinWidth; break;
+ case PROP_MAX_WIDTH: aValue = mPosition->mMaxWidth; break;
case PROP_HEIGHT: aValue = mPosition->mHeight; break;
- case PROP_LEFT: aValue = mPosition->mLeft; break;
- case PROP_TOP: aValue = mPosition->mTop; break;
+ case PROP_MIN_HEIGHT: aValue = mPosition->mMinHeight; break;
+ case PROP_MAX_HEIGHT: aValue = mPosition->mMaxHeight; break;
case PROP_Z_INDEX: aValue = mPosition->mZIndex; break;
}
}
@@ -2129,6 +2170,23 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ if ((nsnull != mPosition) && (nsnull != mPosition->mOffset)) {
+ switch (aProperty) {
+ case PROP_TOP: aValue = mPosition->mOffset->mTop; break;
+ case PROP_RIGHT: aValue = mPosition->mOffset->mRight; break;
+ case PROP_BOTTOM: aValue = mPosition->mOffset->mBottom; break;
+ case PROP_LEFT: aValue = mPosition->mOffset->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
// nsCSSList
case PROP_LIST_STYLE_TYPE:
case PROP_LIST_STYLE_IMAGE:
@@ -2145,23 +2203,19 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
- // nsCSSDisplay
- case PROP_FLOAT:
- case PROP_CLEAR:
- case PROP_DISPLAY:
- case PROP_DIRECTION:
- case PROP_VISIBILITY:
- case PROP_OVERFLOW:
- case PROP_FILTER:
- if (nsnull != mDisplay) {
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ if (nsnull != mTable) {
switch (aProperty) {
- case PROP_FLOAT: aValue = mDisplay->mFloat; break;
- case PROP_CLEAR: aValue = mDisplay->mClear; break;
- case PROP_DISPLAY: aValue = mDisplay->mDisplay; break;
- case PROP_DIRECTION: aValue = mDisplay->mDirection; break;
- case PROP_VISIBILITY: aValue = mDisplay->mVisibility; break;
- case PROP_OVERFLOW: aValue = mDisplay->mOverflow; break;
- case PROP_FILTER: aValue = mDisplay->mFilter; break;
+ case PROP_BORDER_COLLAPSE: aValue = mTable->mBorderCollapse; break;
+ case PROP_BORDER_SPACING: aValue = mTable->mBorderSpacing; break;
+ case PROP_CAPTION_SIDE: aValue = mTable->mCaptionSide; break;
+ case PROP_EMPTY_CELLS: aValue = mTable->mEmptyCells; break;
+ case PROP_TABLE_LAYOUT: aValue = mTable->mLayout; break;
}
}
else {
@@ -2169,16 +2223,21 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
- case PROP_CLIP_TOP:
- case PROP_CLIP_RIGHT:
- case PROP_CLIP_BOTTOM:
- case PROP_CLIP_LEFT:
- if ((nsnull != mDisplay) && (nsnull != mDisplay->mClip)) {
- switch(aProperty) {
- case PROP_CLIP_TOP: aValue = mDisplay->mClip->mTop; break;
- case PROP_CLIP_RIGHT: aValue = mDisplay->mClip->mRight; break;
- case PROP_CLIP_BOTTOM: aValue = mDisplay->mClip->mBottom; break;
- case PROP_CLIP_LEFT: aValue = mDisplay->mClip->mLeft; break;
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ if (nsnull != mBreaks) {
+ switch (aProperty) {
+ case PROP_ORPHANS: aValue = mBreaks->mOrphans; break;
+ case PROP_WIDOWS: aValue = mBreaks->mWidows; break;
+ case PROP_PAGE: aValue = mBreaks->mPage; break;
+ case PROP_PAGE_BREAK_AFTER: aValue = mBreaks->mPageBreakAfter; break;
+ case PROP_PAGE_BREAK_BEFORE: aValue = mBreaks->mPageBreakBefore; break;
+ case PROP_PAGE_BREAK_INSIDE: aValue = mBreaks->mPageBreakInside; break;
}
}
else {
@@ -2186,13 +2245,99 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ if (nsnull != mPage) {
+ switch (aProperty) {
+ case PROP_MARKS: aValue = mPage->mMarks; break;
+ case PROP_SIZE: aValue = mPage->mSize; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ if (nsnull != mContent) {
+ switch (aProperty) {
+ case PROP_CONTENT: aValue = mContent->mContent; break;
+ case PROP_COUNTER_INCREMENT: aValue = mContent->mCounterIncrement; break;
+ case PROP_COUNTER_RESET: aValue = mContent->mCounterReset; break;
+ case PROP_MARKER_OFFSET: aValue = mContent->mMarkerOffset; break;
+ case PROP_QUOTES: aValue = mContent->mQuotes; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ if (nsnull != mAural) {
+ switch (aProperty) {
+ case PROP_AZIMUTH: aValue = mAural->mAzimuth; break;
+ case PROP_ELEVATION: aValue = mAural->mElevation; break;
+ case PROP_CUE_AFTER: aValue = mAural->mCueAfter; break;
+ case PROP_CUE_BEFORE: aValue = mAural->mCueBefore; break;
+ case PROP_PAUSE_AFTER: aValue = mAural->mPauseAfter; break;
+ case PROP_PAUSE_BEFORE: aValue = mAural->mPauseBefore; break;
+ case PROP_PITCH: aValue = mAural->mPitch; break;
+ case PROP_PITCH_RANGE: aValue = mAural->mPitchRange; break;
+ case PROP_PLAY_DURING: aValue = mAural->mPlayDuring; break;
+ case PROP_RICHNESS: aValue = mAural->mRichness; break;
+ case PROP_SPEAK: aValue = mAural->mSpeak; break;
+ case PROP_SPEAK_HEADER: aValue = mAural->mSpeakHeader; break;
+ case PROP_SPEAK_NUMERAL: aValue = mAural->mSpeakNumeral; break;
+ case PROP_SPEAK_PUNCTUATION: aValue = mAural->mSpeakPunctuation; break;
+ case PROP_SPEECH_RATE: aValue = mAural->mSpeechRate; break;
+ case PROP_STRESS: aValue = mAural->mStress; break;
+ case PROP_VOICE_FAMILY: aValue = mAural->mVoiceFamily; break;
+ case PROP_VOLUME: aValue = mAural->mVolume; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+
+ // Shorthands
case PROP_BACKGROUND:
case PROP_BORDER:
case PROP_CLIP:
+ case PROP_CUE:
case PROP_FONT:
case PROP_LIST_STYLE:
case PROP_MARGIN:
+ case PROP_OUTLINE:
case PROP_PADDING:
+ case PROP_PAUSE:
+ case PROP_TEXT_SHADOW:
case PROP_BACKGROUND_POSITION:
case PROP_BORDER_TOP:
case PROP_BORDER_RIGHT:
@@ -2251,109 +2396,284 @@ nsresult CSSDeclarationImpl::GetValue(const nsString& aProperty, nsString& aValu
return GetValue(propID, aValue);
}
-nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsString& aValue)
+PRBool CSSDeclarationImpl::AppendValueToString(PRInt32 aProperty, nsString& aResult)
{
nsCSSValue value;
GetValue(aProperty, value);
+ return AppendValueToString(aProperty, value, aResult);
+}
- nsCSSUnit unit = value.GetUnit();
-
- aValue.Truncate(0);
+PRBool CSSDeclarationImpl::AppendValueToString(PRInt32 aProperty, const nsCSSValue& aValue, nsString& aResult)
+{
+ nsCSSUnit unit = aValue.GetUnit();
if (eCSSUnit_Null == unit) {
- return NS_OK;
+ return PR_FALSE;
}
if (eCSSUnit_String == unit) {
nsAutoString buffer;
- value.GetStringValue(buffer);
- aValue.Append(buffer);
+ aValue.GetStringValue(buffer);
+ aResult.Append(buffer);
}
else if (eCSSUnit_Integer == unit) {
- aValue.Append(value.GetIntValue(), 10);
+ aResult.Append(aValue.GetIntValue(), 10);
}
else if (eCSSUnit_Enumerated == unit) {
if (PROP_TEXT_DECORATION == aProperty) {
- PRInt32 intValue = value.GetIntValue();
+ PRInt32 intValue = aValue.GetIntValue();
if (NS_STYLE_TEXT_DECORATION_NONE != intValue) {
PRInt32 mask;
for (mask = NS_STYLE_TEXT_DECORATION_UNDERLINE;
mask <= NS_STYLE_TEXT_DECORATION_BLINK;
mask <<= 1) {
if ((mask & intValue) == mask) {
- aValue.Append(nsCSSProps::LookupProperty(aProperty, mask));
+ aResult.Append(nsCSSProps::LookupProperty(aProperty, mask));
intValue &= ~mask;
if (0 != intValue) { // more left
- aValue.Append(' ');
+ aResult.Append(' ');
}
}
}
}
else {
- aValue.Append(nsCSSProps::LookupProperty(aProperty, NS_STYLE_TEXT_DECORATION_NONE));
+ aResult.Append(nsCSSProps::LookupProperty(aProperty, NS_STYLE_TEXT_DECORATION_NONE));
}
}
else {
- const char* name = nsCSSProps::LookupProperty(aProperty, value.GetIntValue());
+ const char* name = nsCSSProps::LookupProperty(aProperty, aValue.GetIntValue());
if (name != nsnull) {
- aValue.Append(name);
+ aResult.Append(name);
}
}
}
else if (eCSSUnit_Color == unit){
- nscolor color = value.GetColorValue();
+ nscolor color = aValue.GetColorValue();
const char* name = RGBToCSSString(color);
if (name != nsnull)
- aValue.Append(name);
+ aResult.Append(name);
else
{
- aValue.Append("rgb(");
- aValue.Append(NS_GET_R(color), 10);
- aValue.Append(",");
- aValue.Append(NS_GET_G(color), 10);
- aValue.Append(",");
- aValue.Append(NS_GET_B(color), 10);
- aValue.Append(')');
+ aResult.Append("rgb(");
+ aResult.Append(NS_GET_R(color), 10);
+ aResult.Append(",");
+ aResult.Append(NS_GET_G(color), 10);
+ aResult.Append(",");
+ aResult.Append(NS_GET_B(color), 10);
+ aResult.Append(')');
}
}
else if (eCSSUnit_Percent == unit) {
- aValue.Append(value.GetPercentValue() * 100.0f);
+ aResult.Append(aValue.GetPercentValue() * 100.0f);
}
else if (eCSSUnit_Percent < unit) { // length unit
- aValue.Append(value.GetFloatValue());
+ aResult.Append(aValue.GetFloatValue());
}
switch (unit) {
case eCSSUnit_Null: break;
- case eCSSUnit_Auto: aValue.Append("auto"); break;
- case eCSSUnit_Inherit: aValue.Append("inherit"); break;
- case eCSSUnit_None: aValue.Append("none"); break;
- case eCSSUnit_Normal: aValue.Append("normal"); break;
+ case eCSSUnit_Auto: aResult.Append("auto"); break;
+ case eCSSUnit_Inherit: aResult.Append("inherit"); break;
+ case eCSSUnit_None: aResult.Append("none"); break;
+ case eCSSUnit_Normal: aResult.Append("normal"); break;
case eCSSUnit_String: break;
case eCSSUnit_Integer: break;
case eCSSUnit_Enumerated: break;
case eCSSUnit_Color: break;
- case eCSSUnit_Percent: aValue.Append("%"); break;
+ case eCSSUnit_Percent: aResult.Append("%"); break;
case eCSSUnit_Number: break;
- case eCSSUnit_Inch: aValue.Append("in"); break;
- case eCSSUnit_Foot: aValue.Append("ft"); break;
- case eCSSUnit_Mile: aValue.Append("mi"); break;
- case eCSSUnit_Millimeter: aValue.Append("mm"); break;
- case eCSSUnit_Centimeter: aValue.Append("cm"); break;
- case eCSSUnit_Meter: aValue.Append("m"); break;
- case eCSSUnit_Kilometer: aValue.Append("km"); break;
- case eCSSUnit_Point: aValue.Append("pt"); break;
- case eCSSUnit_Pica: aValue.Append("pc"); break;
- case eCSSUnit_Didot: aValue.Append("dt"); break;
- case eCSSUnit_Cicero: aValue.Append("cc"); break;
- case eCSSUnit_EM: aValue.Append("em"); break;
- case eCSSUnit_EN: aValue.Append("en"); break;
- case eCSSUnit_XHeight: aValue.Append("ex"); break;
- case eCSSUnit_CapHeight: aValue.Append("cap"); break;
- case eCSSUnit_Pixel: aValue.Append("px"); break;
+ case eCSSUnit_Inch: aResult.Append("in"); break;
+ case eCSSUnit_Foot: aResult.Append("ft"); break;
+ case eCSSUnit_Mile: aResult.Append("mi"); break;
+ case eCSSUnit_Millimeter: aResult.Append("mm"); break;
+ case eCSSUnit_Centimeter: aResult.Append("cm"); break;
+ case eCSSUnit_Meter: aResult.Append("m"); break;
+ case eCSSUnit_Kilometer: aResult.Append("km"); break;
+ case eCSSUnit_Point: aResult.Append("pt"); break;
+ case eCSSUnit_Pica: aResult.Append("pc"); break;
+ case eCSSUnit_Didot: aResult.Append("dt"); break;
+ case eCSSUnit_Cicero: aResult.Append("cc"); break;
+ case eCSSUnit_EM: aResult.Append("em"); break;
+ case eCSSUnit_EN: aResult.Append("en"); break;
+ case eCSSUnit_XHeight: aResult.Append("ex"); break;
+ case eCSSUnit_CapHeight: aResult.Append("cap"); break;
+ case eCSSUnit_Pixel: aResult.Append("px"); break;
}
+ return PR_TRUE;
+}
+
+#define HAS_VALUE(strct,data) \
+ ((nsnull != strct) && (eCSSUnit_Null != strct->data.GetUnit()))
+#define HAS_RECT(strct,rect) \
+ ((nsnull != strct) && (nsnull != strct->rect) && \
+ (eCSSUnit_Null != strct->rect->mTop.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mRight.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mBottom.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mLeft.GetUnit()))
+
+nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsString& aValue)
+{
+ aValue.Truncate(0);
+
+ // shorthands
+ switch (aProperty) {
+ case PROP_BACKGROUND:
+ if (AppendValueToString(PROP_BACKGROUND_COLOR, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_IMAGE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_REPEAT, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_ATTACHMENT, aValue)) aValue.Append(' ');
+ if (HAS_VALUE(mColor,mBackPositionX) && HAS_VALUE(mColor,mBackPositionY)) {
+ AppendValueToString(PROP_BACKGROUND_X_POSITION, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_BACKGROUND_Y_POSITION, aValue);
+ }
+ break;
+ case PROP_BORDER:
+ if (AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_TOP_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue);
+ break;
+ case PROP_CLIP:
+ if (HAS_RECT(mDisplay,mClip)) {
+ aValue.Append("rect(");
+ AppendValueToString(PROP_CLIP_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_LEFT, aValue);
+ aValue.Append(")");
+ }
+ break;
+ case PROP_CUE:
+ if (HAS_VALUE(mAural,mCueAfter) && HAS_VALUE(mAural,mCueBefore)) {
+ AppendValueToString(PROP_CUE_AFTER, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_CUE_BEFORE, aValue);
+ }
+ break;
+ case PROP_FONT:
+ if (HAS_VALUE(mFont,mSize)) {
+ if (AppendValueToString(PROP_FONT_STYLE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_FONT_VARIANT, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_FONT_WEIGHT, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_FONT_SIZE, aValue);
+ if (HAS_VALUE(mText,mLineHeight)) {
+ aValue.Append('/');
+ AppendValueToString(PROP_LINE_HEIGHT, aValue);
+ }
+ aValue.Append(' ');
+ AppendValueToString(PROP_FONT_FAMILY, aValue);
+ }
+ break;
+ case PROP_LIST_STYLE:
+ if (AppendValueToString(PROP_LIST_STYLE_TYPE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_LIST_STYLE_POSITION, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_LIST_STYLE_IMAGE, aValue);
+ break;
+ case PROP_MARGIN:
+ if (HAS_RECT(mMargin,mMargin)) {
+ AppendValueToString(PROP_MARGIN_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_LEFT, aValue);
+ }
+ break;
+ case PROP_OUTLINE:
+ if (AppendValueToString(PROP_OUTLINE_COLOR, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_OUTLINE_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_OUTLINE_WIDTH, aValue);
+ break;
+ case PROP_PADDING:
+ if (HAS_RECT(mMargin,mPadding)) {
+ AppendValueToString(PROP_PADDING_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_LEFT, aValue);
+ }
+ break;
+ case PROP_PAUSE:
+ if (HAS_VALUE(mAural,mPauseAfter) && HAS_VALUE(mAural,mPauseBefore)) {
+ AppendValueToString(PROP_PAUSE_AFTER, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_PAUSE_BEFORE, aValue);
+ }
+ break;
+ case PROP_TEXT_SHADOW:
+ if ((nsnull != mText) && (nsnull != mText->mTextShadow)) {
+ if (eCSSUnit_Color == mText->mTextShadow->mColor.GetUnit()) {
+ nsCSSShadow* shadow = mText->mTextShadow;
+ while (nsnull != shadow) {
+ if (AppendValueToString(PROP_TEXT_SHADOW_COLOR, shadow->mColor, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_TEXT_SHADOW_X, shadow->mXOffset, aValue)) {
+ aValue.Append(' ');
+ AppendValueToString(PROP_TEXT_SHADOW_Y, shadow->mYOffset, aValue);
+ aValue.Append(' ');
+ }
+ if (AppendValueToString(PROP_TEXT_SHADOW_RADIUS, shadow->mRadius, aValue)) aValue.Append(' ');
+ shadow = shadow->mNext;
+ }
+ }
+ else { // none or inherit
+ AppendValueToString(PROP_TEXT_SHADOW_COLOR, aValue);
+ }
+ }
+ break;
+ case PROP_BACKGROUND_POSITION:
+ if (HAS_VALUE(mColor,mBackPositionX) && HAS_VALUE(mColor,mBackPositionY)) {
+ AppendValueToString(PROP_BACKGROUND_X_POSITION, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_BACKGROUND_Y_POSITION, aValue);
+ }
+ break;
+ case PROP_BORDER_TOP:
+ if (AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_TOP_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue);
+ break;
+ case PROP_BORDER_RIGHT:
+ if (AppendValueToString(PROP_BORDER_RIGHT_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_RIGHT_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_COLOR, aValue);
+ break;
+ case PROP_BORDER_BOTTOM:
+ if (AppendValueToString(PROP_BORDER_BOTTOM_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_BOTTOM_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_COLOR, aValue);
+ break;
+ case PROP_BORDER_LEFT:
+ if (AppendValueToString(PROP_BORDER_LEFT_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_LEFT_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_COLOR, aValue);
+ break;
+ case PROP_BORDER_COLOR:
+ if (HAS_RECT(mMargin,mBorderColor)) {
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_COLOR, aValue);
+ }
+ break;
+ case PROP_BORDER_STYLE:
+ if (HAS_RECT(mMargin,mBorderStyle)) {
+ AppendValueToString(PROP_BORDER_TOP_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_STYLE, aValue);
+ }
+ break;
+ case PROP_BORDER_WIDTH:
+ if (HAS_RECT(mMargin,mBorderWidth)) {
+ AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_WIDTH, aValue);
+ }
+ break;
+ default:
+ AppendValueToString(aProperty, aValue);
+ break;
+ }
return NS_OK;
}
@@ -2434,6 +2754,9 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mText) {
mText->List(out);
}
+ if (nsnull != mDisplay) {
+ mDisplay->List(out);
+ }
if (nsnull != mMargin) {
mMargin->List(out);
}
@@ -2443,8 +2766,20 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mList) {
mList->List(out);
}
- if (nsnull != mDisplay) {
- mDisplay->List(out);
+ if (nsnull != mTable) {
+ mTable->List(out);
+ }
+ if (nsnull != mBreaks) {
+ mBreaks->List(out);
+ }
+ if (nsnull != mPage) {
+ mPage->List(out);
+ }
+ if (nsnull != mContent) {
+ mContent->List(out);
+ }
+ if (nsnull != mAural) {
+ mAural->List(out);
}
fputs("}", out);
@@ -2501,78 +2836,3 @@ NS_HTML nsresult
}
-
-
-/*
-font
-===========
-font-family: string (list)
-font-style: enum
-font-variant: enum (ie: small caps)
-font-weight: enum
-font-size: abs, pct, enum, +-1
-
-
-color/background
-=============
-color: color
-background-color: color
-background-image: url(string)
-background-repeat: enum
-background-attachment: enum
-background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?))
-cursor: enum
-cursor-image: url(string)
-
-
-text
-=======
-word-spacing: abs, "normal"
-letter-spacing: abs, "normal"
-text-decoration: enum
-vertical-align: enum, pct
-text-transform: enum
-text-align: enum
-text-indent: abs, pct
-line-height: "normal", abs, pct, number-factor
-white-space: enum
-
-margin
-=======
-margin-top -right -bottom -left: "auto", abs, pct
-padding-top -right -bottom -left: abs, pct
-border-top -right -bottom -left-width: enum, abs
-border-top -right -bottom -left-color: color
-border-top -right -bottom -left-style: enum
-
-size
-=======
-position: enum
-width: abs, pct, "auto"
-height: abs, pct, "auto"
-left: abs, pct, "auto"
-top: abs, pct, "auto"
-clip: shape, "auto" (shape: rect - abs, auto)
-overflow: enum
-z-index: int, auto
-visibity: enum
-
-display
-=======
-float: enum
-clear: enum
-direction: enum
-display: enum
-
-filter: string
-
-list
-========
-list-style-type: enum
-list-style-image: url, "none"
-list-style-position: enum (bool? in/out)
-
-*/
-
-
-
diff --git a/mozilla/layout/style/nsCSSDeclaration.cpp b/mozilla/layout/style/nsCSSDeclaration.cpp
index 945f4bb3114..0da611fecf8 100644
--- a/mozilla/layout/style/nsCSSDeclaration.cpp
+++ b/mozilla/layout/style/nsCSSDeclaration.cpp
@@ -188,325 +188,15 @@ static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID);
static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID);
static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID);
static NS_DEFINE_IID(kCSSListSID, NS_CSS_LIST_SID);
+static NS_DEFINE_IID(kCSSTableSID, NS_CSS_TABLE_SID);
+static NS_DEFINE_IID(kCSSBreaksSID, NS_CSS_BREAKS_SID);
+static NS_DEFINE_IID(kCSSPageSID, NS_CSS_PAGE_SID);
+static NS_DEFINE_IID(kCSSContentSID, NS_CSS_CONTENT_SID);
+static NS_DEFINE_IID(kCSSAuralSID, NS_CSS_AURAL_SID);
static NS_DEFINE_IID(kICSSDeclarationIID, NS_ICSS_DECLARATION_IID);
-nsCSSValue::nsCSSValue(nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION(mUnit <= eCSSUnit_Normal, "not a valueless unit");
- if (aUnit > eCSSUnit_Normal) {
- mUnit = eCSSUnit_Null;
- }
- mValue.mInt = 0;
-}
-
-nsCSSValue::nsCSSValue(PRInt32 aValue, nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit), "not an int value");
- if ((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit)) {
- mValue.mInt = aValue;
- }
- else {
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
- }
-}
-
-nsCSSValue::nsCSSValue(float aValue, nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION(eCSSUnit_Percent <= aUnit, "not a float value");
- if (eCSSUnit_Percent <= aUnit) {
- mValue.mFloat = aValue;
- }
- else {
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
- }
-}
-
-nsCSSValue::nsCSSValue(const nsString& aValue)
- : mUnit(eCSSUnit_String)
-{
- mValue.mString = aValue.ToNewString();
-}
-
-nsCSSValue::nsCSSValue(nscolor aValue)
- : mUnit(eCSSUnit_Color)
-{
- mValue.mColor = aValue;
-}
-
-nsCSSValue::nsCSSValue(const nsCSSValue& aCopy)
- : mUnit(aCopy.mUnit)
-{
- if (eCSSUnit_String == mUnit) {
- if (nsnull != aCopy.mValue.mString) {
- mValue.mString = (aCopy.mValue.mString)->ToNewString();
- }
- else {
- mValue.mString = nsnull;
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- mValue.mInt = aCopy.mValue.mInt;
- }
- else if (eCSSUnit_Color == mUnit){
- mValue.mColor = aCopy.mValue.mColor;
- }
- else {
- mValue.mFloat = aCopy.mValue.mFloat;
- }
-}
-
-nsCSSValue::~nsCSSValue(void)
-{
- Reset();
-}
-
-nsCSSValue& nsCSSValue::operator=(const nsCSSValue& aCopy)
-{
- Reset();
- mUnit = aCopy.mUnit;
- if (eCSSUnit_String == mUnit) {
- if (nsnull != aCopy.mValue.mString) {
- mValue.mString = (aCopy.mValue.mString)->ToNewString();
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- mValue.mInt = aCopy.mValue.mInt;
- }
- else if (eCSSUnit_Color == mUnit){
- mValue.mColor = aCopy.mValue.mColor;
- }
- else {
- mValue.mFloat = aCopy.mValue.mFloat;
- }
- return *this;
-}
-
-PRBool nsCSSValue::operator==(const nsCSSValue& aOther) const
-{
- if (mUnit == aOther.mUnit) {
- if (eCSSUnit_String == mUnit) {
- if (nsnull == mValue.mString) {
- if (nsnull == aOther.mValue.mString) {
- return PR_TRUE;
- }
- }
- else if (nsnull != aOther.mValue.mString) {
- return mValue.mString->Equals(*(aOther.mValue.mString));
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- return PRBool(mValue.mInt == aOther.mValue.mInt);
- }
- else if (eCSSUnit_Color == mUnit){
- return PRBool(mValue.mColor == aOther.mValue.mColor);
- }
- else {
- return PRBool(mValue.mFloat == aOther.mValue.mFloat);
- }
- }
- return PR_FALSE;
-}
-
-nscoord nsCSSValue::GetLengthTwips(void) const
-{
- NS_ASSERTION(IsFixedLengthUnit(), "not a fixed length unit");
-
- if (IsFixedLengthUnit()) {
- switch (mUnit) {
- case eCSSUnit_Inch:
- return NS_INCHES_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Foot:
- return NS_FEET_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Mile:
- return NS_MILES_TO_TWIPS(mValue.mFloat);
-
- case eCSSUnit_Millimeter:
- return NS_MILLIMETERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Centimeter:
- return NS_CENTIMETERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Meter:
- return NS_METERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Kilometer:
- return NS_KILOMETERS_TO_TWIPS(mValue.mFloat);
-
- case eCSSUnit_Point:
- return NSFloatPointsToTwips(mValue.mFloat);
- case eCSSUnit_Pica:
- return NS_PICAS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Didot:
- return NS_DIDOTS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Cicero:
- return NS_CICEROS_TO_TWIPS(mValue.mFloat);
- }
- }
- return 0;
-}
-
-void nsCSSValue::Reset(void)
-{
- if ((eCSSUnit_String == mUnit) && (nsnull != mValue.mString)) {
- delete mValue.mString;
- }
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
-};
-
-void nsCSSValue::SetIntValue(PRInt32 aValue, nsCSSUnit aUnit)
-{
- NS_ASSERTION((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit), "not an int value");
- Reset();
- if ((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit)) {
- mUnit = aUnit;
- mValue.mInt = aValue;
- }
-}
-
-void nsCSSValue::SetPercentValue(float aValue)
-{
- Reset();
- mUnit = eCSSUnit_Percent;
- mValue.mFloat = aValue;
-}
-
-void nsCSSValue::SetFloatValue(float aValue, nsCSSUnit aUnit)
-{
- NS_ASSERTION(eCSSUnit_Number <= aUnit, "not a float value");
- Reset();
- if (eCSSUnit_Number <= aUnit) {
- mUnit = aUnit;
- mValue.mFloat = aValue;
- }
-}
-
-void nsCSSValue::SetStringValue(const nsString& aValue)
-{
- Reset();
- mUnit = eCSSUnit_String;
- mValue.mString = aValue.ToNewString();
-}
-
-void nsCSSValue::SetColorValue(nscolor aValue)
-{
- Reset();
- mUnit = eCSSUnit_Color;
- mValue.mColor = aValue;
-}
-
-void nsCSSValue::SetAutoValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Auto;
-}
-
-void nsCSSValue::SetInheritValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Inherit;
-}
-
-void nsCSSValue::SetNoneValue(void)
-{
- Reset();
- mUnit = eCSSUnit_None;
-}
-
-void nsCSSValue::SetNormalValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Normal;
-}
-
-void nsCSSValue::AppendToString(nsString& aBuffer, PRInt32 aPropID) const
-{
- if (eCSSUnit_Null == mUnit) {
- return;
- }
-
- if (-1 < aPropID) {
- aBuffer.Append(nsCSSProps::kNameTable[aPropID].name);
- aBuffer.Append(": ");
- }
-
- if (eCSSUnit_String == mUnit) {
- if (nsnull != mValue.mString) {
- aBuffer.Append('"');
- aBuffer.Append(*(mValue.mString));
- aBuffer.Append('"');
- }
- else {
- aBuffer.Append("null str");
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- aBuffer.Append(mValue.mInt, 10);
- aBuffer.Append("[0x");
- aBuffer.Append(mValue.mInt, 16);
- aBuffer.Append(']');
- }
- else if (eCSSUnit_Color == mUnit){
- aBuffer.Append("(0x");
- aBuffer.Append(NS_GET_R(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_G(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_B(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_A(mValue.mColor), 16);
- aBuffer.Append(')');
- }
- else if (eCSSUnit_Percent == mUnit) {
- aBuffer.Append(mValue.mFloat * 100.0f);
- }
- else if (eCSSUnit_Percent < mUnit) {
- aBuffer.Append(mValue.mFloat);
- }
-
- switch (mUnit) {
- case eCSSUnit_Null: break;
- case eCSSUnit_Auto: aBuffer.Append("auto"); break;
- case eCSSUnit_Inherit: aBuffer.Append("inherit"); break;
- case eCSSUnit_None: aBuffer.Append("none"); break;
- case eCSSUnit_String: break;
- case eCSSUnit_Integer: aBuffer.Append("int"); break;
- case eCSSUnit_Enumerated: aBuffer.Append("enum"); break;
- case eCSSUnit_Color: aBuffer.Append("rbga"); break;
- case eCSSUnit_Percent: aBuffer.Append("%"); break;
- case eCSSUnit_Number: aBuffer.Append("#"); break;
- case eCSSUnit_Inch: aBuffer.Append("in"); break;
- case eCSSUnit_Foot: aBuffer.Append("ft"); break;
- case eCSSUnit_Mile: aBuffer.Append("mi"); break;
- case eCSSUnit_Millimeter: aBuffer.Append("mm"); break;
- case eCSSUnit_Centimeter: aBuffer.Append("cm"); break;
- case eCSSUnit_Meter: aBuffer.Append("m"); break;
- case eCSSUnit_Kilometer: aBuffer.Append("km"); break;
- case eCSSUnit_Point: aBuffer.Append("pt"); break;
- case eCSSUnit_Pica: aBuffer.Append("pc"); break;
- case eCSSUnit_Didot: aBuffer.Append("dt"); break;
- case eCSSUnit_Cicero: aBuffer.Append("cc"); break;
- case eCSSUnit_EM: aBuffer.Append("em"); break;
- case eCSSUnit_EN: aBuffer.Append("en"); break;
- case eCSSUnit_XHeight: aBuffer.Append("ex"); break;
- case eCSSUnit_CapHeight: aBuffer.Append("cap"); break;
- case eCSSUnit_Pixel: aBuffer.Append("px"); break;
- }
- aBuffer.Append(' ');
-}
-
-void nsCSSValue::ToString(nsString& aBuffer, PRInt32 aPropID) const
-{
- aBuffer.Truncate();
- AppendToString(aBuffer, aPropID);
-}
+// --- nsCSSFont -----------------
const nsID& nsCSSFont::GetID(void)
{
@@ -524,10 +214,14 @@ void nsCSSFont::List(FILE* out, PRInt32 aIndent) const
mVariant.AppendToString(buffer, PROP_FONT_VARIANT);
mWeight.AppendToString(buffer, PROP_FONT_WEIGHT);
mSize.AppendToString(buffer, PROP_FONT_SIZE);
+ mSizeAdjust.AppendToString(buffer, PROP_FONT_SIZE_ADJUST);
+ mStretch.AppendToString(buffer, PROP_FONT_STRETCH);
fputs(buffer, out);
}
+// --- nsCSSColor -----------------
+
const nsID& nsCSSColor::GetID(void)
{
return kCSSColorSID;
@@ -553,6 +247,34 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSText -----------------
+
+nsCSSShadow::nsCSSShadow(void)
+ : mNext(nsnull)
+{
+}
+
+nsCSSShadow::~nsCSSShadow(void)
+{
+ if (nsnull != mNext) {
+ delete mNext;
+ }
+}
+
+// --- nsCSSText -----------------
+
+nsCSSText::nsCSSText(void)
+ : mTextShadow(nsnull)
+{
+}
+
+nsCSSText::~nsCSSText(void)
+{
+ if (nsnull != mTextShadow) {
+ delete mTextShadow;
+ }
+}
+
const nsID& nsCSSText::GetID(void)
{
return kCSSTextSID;
@@ -571,11 +293,29 @@ void nsCSSText::List(FILE* out, PRInt32 aIndent) const
mTextTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM);
mTextAlign.AppendToString(buffer, PROP_TEXT_ALIGN);
mTextIndent.AppendToString(buffer, PROP_TEXT_INDENT);
+ if (nsnull != mTextShadow) {
+ if (eCSSUnit_Color == mTextShadow->mColor.GetUnit()) {
+ nsCSSShadow* shadow = mTextShadow;
+ while (nsnull != shadow) {
+ shadow->mColor.AppendToString(buffer, PROP_TEXT_SHADOW_COLOR);
+ shadow->mXOffset.AppendToString(buffer, PROP_TEXT_SHADOW_X);
+ shadow->mYOffset.AppendToString(buffer, PROP_TEXT_SHADOW_Y);
+ shadow->mRadius.AppendToString(buffer, PROP_TEXT_SHADOW_RADIUS);
+ shadow = shadow->mNext;
+ }
+ }
+ else {
+ mTextShadow->mColor.AppendToString(buffer, PROP_TEXT_SHADOW);
+ }
+ }
+ mUnicodeBidi.AppendToString(buffer, PROP_UNICODE_BIDI);
mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT);
mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE);
fputs(buffer, out);
}
+// --- nsCSSRect -----------------
+
void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const
{
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
@@ -624,6 +364,8 @@ void nsCSSRect::List(FILE* out, PRInt32 aIndent, PRIntn aTRBL[]) const
fputs(buffer, out);
}
+// --- nsCSSDisplay -----------------
+
nsCSSDisplay::nsCSSDisplay(void)
: mClip(nsnull)
{
@@ -662,8 +404,11 @@ void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSMargin -----------------
+
nsCSSMargin::nsCSSMargin(void)
- : mMargin(nsnull), mPadding(nsnull), mBorder(nsnull), mColor(nsnull), mStyle(nsnull)
+ : mMargin(nsnull), mPadding(nsnull),
+ mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull)
{
}
@@ -675,14 +420,14 @@ nsCSSMargin::~nsCSSMargin(void)
if (nsnull != mPadding) {
delete mPadding;
}
- if (nsnull != mBorder) {
- delete mBorder;
+ if (nsnull != mBorderWidth) {
+ delete mBorderWidth;
}
- if (nsnull != mColor) {
- delete mColor;
+ if (nsnull != mBorderColor) {
+ delete mBorderColor;
}
- if (nsnull != mStyle) {
- delete mStyle;
+ if (nsnull != mBorderStyle) {
+ delete mBorderStyle;
}
}
@@ -693,8 +438,6 @@ const nsID& nsCSSMargin::GetID(void)
void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
{
- for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
-
if (nsnull != mMargin) {
static PRIntn trbl[] = {
PROP_MARGIN_TOP,
@@ -713,20 +456,42 @@ void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
};
mPadding->List(out, aIndent, trbl);
}
- if (nsnull != mBorder) {
+ if (nsnull != mBorderWidth) {
static PRIntn trbl[] = {
PROP_BORDER_TOP_WIDTH,
PROP_BORDER_RIGHT_WIDTH,
PROP_BORDER_BOTTOM_WIDTH,
PROP_BORDER_LEFT_WIDTH
};
- mBorder->List(out, aIndent, trbl);
+ mBorderWidth->List(out, aIndent, trbl);
}
- if (nsnull != mColor) {
- mColor->List(out, PROP_BORDER_COLOR, aIndent);
+ if (nsnull != mBorderColor) {
+ mBorderColor->List(out, PROP_BORDER_COLOR, aIndent);
}
- if (nsnull != mStyle) {
- mStyle->List(out, PROP_BORDER_STYLE, aIndent);
+ if (nsnull != mBorderStyle) {
+ mBorderStyle->List(out, PROP_BORDER_STYLE, aIndent);
+ }
+
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+ mOutlineWidth.AppendToString(buffer, PROP_OUTLINE_WIDTH);
+ mOutlineColor.AppendToString(buffer, PROP_OUTLINE_COLOR);
+ mOutlineStyle.AppendToString(buffer, PROP_OUTLINE_STYLE);
+ fputs(buffer, out);
+}
+
+// --- nsCSSPosition -----------------
+
+nsCSSPosition::nsCSSPosition(void)
+ : mOffset(nsnull)
+{
+}
+
+nsCSSPosition::~nsCSSPosition(void)
+{
+ if (nsnull != mOffset) {
+ delete mOffset;
}
}
@@ -743,13 +508,27 @@ void nsCSSPosition::List(FILE* out, PRInt32 aIndent) const
mPosition.AppendToString(buffer, PROP_POSITION);
mWidth.AppendToString(buffer, PROP_WIDTH);
+ mMinWidth.AppendToString(buffer, PROP_MIN_WIDTH);
+ mMaxWidth.AppendToString(buffer, PROP_MAX_WIDTH);
mHeight.AppendToString(buffer, PROP_HEIGHT);
- mLeft.AppendToString(buffer, PROP_LEFT);
- mTop.AppendToString(buffer, PROP_TOP);
+ mMinHeight.AppendToString(buffer, PROP_MIN_HEIGHT);
+ mMaxHeight.AppendToString(buffer, PROP_MAX_HEIGHT);
mZIndex.AppendToString(buffer, PROP_Z_INDEX);
fputs(buffer, out);
+
+ if (nsnull != mOffset) {
+ static PRIntn trbl[] = {
+ PROP_TOP,
+ PROP_RIGHT,
+ PROP_BOTTOM,
+ PROP_LEFT
+ };
+ mOffset->List(out, aIndent, trbl);
+ }
}
+// --- nsCSSList -----------------
+
const nsID& nsCSSList::GetID(void)
{
return kCSSListSID;
@@ -767,6 +546,130 @@ void nsCSSList::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSTable -----------------
+
+const nsID& nsCSSTable::GetID(void)
+{
+ return kCSSTableSID;
+}
+
+void nsCSSTable::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mBorderCollapse.AppendToString(buffer, PROP_BORDER_COLLAPSE);
+ mBorderSpacing.AppendToString(buffer, PROP_BORDER_SPACING);
+ mCaptionSide.AppendToString(buffer, PROP_CAPTION_SIDE);
+ mEmptyCells.AppendToString(buffer, PROP_EMPTY_CELLS);
+ mLayout.AppendToString(buffer, PROP_TABLE_LAYOUT);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSBreaks -----------------
+
+const nsID& nsCSSBreaks::GetID(void)
+{
+ return kCSSBreaksSID;
+}
+
+void nsCSSBreaks::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mOrphans.AppendToString(buffer, PROP_ORPHANS);
+ mWidows.AppendToString(buffer, PROP_WIDOWS);
+ mPage.AppendToString(buffer, PROP_PAGE);
+ mPageBreakAfter.AppendToString(buffer, PROP_PAGE_BREAK_AFTER);
+ mPageBreakBefore.AppendToString(buffer, PROP_PAGE_BREAK_BEFORE);
+ mPageBreakInside.AppendToString(buffer, PROP_PAGE_BREAK_INSIDE);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSPage -----------------
+
+const nsID& nsCSSPage::GetID(void)
+{
+ return kCSSPageSID;
+}
+
+void nsCSSPage::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mMarks.AppendToString(buffer, PROP_MARKS);
+ mSize.AppendToString(buffer, PROP_SIZE);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSContent -----------------
+
+const nsID& nsCSSContent::GetID(void)
+{
+ return kCSSContentSID;
+}
+
+void nsCSSContent::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mContent.AppendToString(buffer, PROP_CONTENT);
+ mCounterIncrement.AppendToString(buffer, PROP_COUNTER_INCREMENT);
+ mCounterReset.AppendToString(buffer, PROP_COUNTER_RESET);
+ mMarkerOffset.AppendToString(buffer, PROP_MARKER_OFFSET);
+ mQuotes.AppendToString(buffer, PROP_QUOTES);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSAural -----------------
+
+const nsID& nsCSSAural::GetID(void)
+{
+ return kCSSAuralSID;
+}
+
+void nsCSSAural::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mAzimuth.AppendToString(buffer, PROP_AZIMUTH);
+ mElevation.AppendToString(buffer, PROP_ELEVATION);
+ mCueAfter.AppendToString(buffer, PROP_CUE_AFTER);
+ mCueBefore.AppendToString(buffer, PROP_CUE_BEFORE);
+ mPauseAfter.AppendToString(buffer, PROP_PAUSE_AFTER);
+ mPauseBefore.AppendToString(buffer, PROP_PAUSE_BEFORE);
+ mPitch.AppendToString(buffer, PROP_PITCH);
+ mPitchRange.AppendToString(buffer, PROP_PITCH_RANGE);
+ mPlayDuring.AppendToString(buffer, PROP_PLAY_DURING);
+ mRichness.AppendToString(buffer, PROP_RICHNESS);
+ mSpeak.AppendToString(buffer, PROP_SPEAK);
+ mSpeakHeader.AppendToString(buffer, PROP_SPEAK_HEADER);
+ mSpeakNumeral.AppendToString(buffer, PROP_SPEAK_NUMERAL);
+ mSpeakPunctuation.AppendToString(buffer, PROP_SPEAK_PUNCTUATION);
+ mSpeechRate.AppendToString(buffer, PROP_SPEECH_RATE);
+ mStress.AppendToString(buffer, PROP_STRESS);
+ mVoiceFamily.AppendToString(buffer, PROP_VOICE_FAMILY);
+ mVolume.AppendToString(buffer, PROP_VOLUME);
+
+ fputs(buffer, out);
+}
+
+
+
+// --- nsCSSDeclaration -----------------
class CSSDeclarationImpl : public nsICSSDeclaration {
@@ -795,6 +698,9 @@ public:
nsresult GetImportantValues(nsICSSDeclaration*& aResult);
nsresult GetValueIsImportant(const char *aProperty, PRBool& aIsImportant);
+ PRBool AppendValueToString(PRInt32 aProperty, nsString& aResult);
+ PRBool AppendValueToString(PRInt32 aProperty, const nsCSSValue& aValue, nsString& aResult);
+
virtual nsresult ToString(nsString& aString);
void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
@@ -815,6 +721,11 @@ protected:
nsCSSPosition* mPosition;
nsCSSList* mList;
nsCSSDisplay* mDisplay;
+ nsCSSTable* mTable;
+ nsCSSBreaks* mBreaks;
+ nsCSSPage* mPage;
+ nsCSSContent* mContent;
+ nsCSSAural* mAural;
CSSDeclarationImpl* mImportant;
@@ -844,29 +755,23 @@ CSSDeclarationImpl::CSSDeclarationImpl(void)
#endif
}
+#define CSS_IF_DELETE(ptr) if (nsnull != ptr) delete ptr;
+
CSSDeclarationImpl::~CSSDeclarationImpl(void)
{
- if (nsnull != mFont) {
- delete mFont;
- }
- if (nsnull != mColor) {
- delete mColor;
- }
- if (nsnull != mText) {
- delete mText;
- }
- if (nsnull != mMargin) {
- delete mMargin;
- }
- if (nsnull != mPosition) {
- delete mPosition;
- }
- if (nsnull != mList) {
- delete mList;
- }
- if (nsnull != mDisplay) {
- delete mDisplay;
- }
+ CSS_IF_DELETE(mFont);
+ CSS_IF_DELETE(mColor);
+ CSS_IF_DELETE(mText);
+ CSS_IF_DELETE(mMargin);
+ CSS_IF_DELETE(mPosition);
+ CSS_IF_DELETE(mList);
+ CSS_IF_DELETE(mDisplay);
+ CSS_IF_DELETE(mTable);
+ CSS_IF_DELETE(mBreaks);
+ CSS_IF_DELETE(mPage);
+ CSS_IF_DELETE(mContent);
+ CSS_IF_DELETE(mAural);
+
NS_IF_RELEASE(mImportant);
if (nsnull != mOrder) {
delete mOrder;
@@ -888,88 +793,56 @@ CSSDeclarationImpl::~CSSDeclarationImpl(void)
NS_IMPL_ISUPPORTS(CSSDeclarationImpl, kICSSDeclarationIID);
+#define CSS_IF_GET_ELSE(sid,ptr,result) \
+ if (sid.Equals(kCSS##ptr##SID)) { *result = m##ptr; } else
+
nsresult CSSDeclarationImpl::GetData(const nsID& aSID, nsCSSStruct** aDataPtr)
{
if (nsnull == aDataPtr) {
return NS_ERROR_NULL_POINTER;
}
- if (aSID.Equals(kCSSFontSID)) {
- *aDataPtr = mFont;
- }
- else if (aSID.Equals(kCSSColorSID)) {
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSDisplaySID)) {
- *aDataPtr = mDisplay;
- }
- else if (aSID.Equals(kCSSTextSID)) {
- *aDataPtr = mText;
- }
- else if (aSID.Equals(kCSSMarginSID)) {
- *aDataPtr = mMargin;
- }
- else if (aSID.Equals(kCSSPositionSID)) {
- *aDataPtr = mPosition;
- }
- else if (aSID.Equals(kCSSListSID)) {
- *aDataPtr = mList;
- }
- else {
+ CSS_IF_GET_ELSE(aSID, Font, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Color, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Display, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Text, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Margin, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Position, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, List, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Table, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Breaks, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Page, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Content, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Aural, aDataPtr) {
return NS_NOINTERFACE;
}
return NS_OK;
}
+#define CSS_IF_ENSURE_ELSE(sid,ptr,result) \
+ if (sid.Equals(kCSS##ptr##SID)) { \
+ if (nsnull == m##ptr) { m##ptr = new nsCSS##ptr(); } \
+ *result = m##ptr; \
+ } else
+
nsresult CSSDeclarationImpl::EnsureData(const nsID& aSID, nsCSSStruct** aDataPtr)
{
if (nsnull == aDataPtr) {
return NS_ERROR_NULL_POINTER;
}
- if (aSID.Equals(kCSSFontSID)) {
- if (nsnull == mFont) {
- mFont = new nsCSSFont();
- }
- *aDataPtr = mFont;
- }
- else if (aSID.Equals(kCSSColorSID)) {
- if (nsnull == mColor) {
- mColor = new nsCSSColor();
- }
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSDisplaySID)) {
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSTextSID)) {
- if (nsnull == mText) {
- mText = new nsCSSText();
- }
- *aDataPtr = mText;
- }
- else if (aSID.Equals(kCSSMarginSID)) {
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- *aDataPtr = mMargin;
- }
- else if (aSID.Equals(kCSSPositionSID)) {
- if (nsnull == mPosition) {
- mPosition = new nsCSSPosition();
- }
- *aDataPtr = mPosition;
- }
- else if (aSID.Equals(kCSSListSID)) {
- if (nsnull == mList) {
- mList = new nsCSSList();
- }
- *aDataPtr = mList;
- }
- else {
+ CSS_IF_ENSURE_ELSE(aSID, Font, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Color, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Display, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Text, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Margin, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Position, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, List, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Table, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Breaks, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Page, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Content, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Aural, aDataPtr) {
return NS_NOINTERFACE;
}
if (nsnull == *aDataPtr) {
@@ -983,6 +856,24 @@ nsresult CSSDeclarationImpl::AppendValue(const char* aProperty, const nsCSSValue
return AppendValue(nsCSSProps::LookupName(aProperty), aValue);
}
+#define CSS_ENSURE(data) \
+ if (nsnull == m##data) { \
+ m##data = new nsCSS##data(); \
+ } \
+ if (nsnull == m##data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
+#define CSS_ENSURE_RECT(data) \
+ if (nsnull == data) { \
+ data = new nsCSSRect(); \
+ } \
+ if (nsnull == data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aValue)
{
nsresult result = NS_OK;
@@ -994,21 +885,19 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
- if (nsnull == mFont) {
- mFont = new nsCSSFont();
- }
- if (nsnull != mFont) {
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
+ CSS_ENSURE(Font) {
switch (aProperty) {
- case PROP_FONT_FAMILY: mFont->mFamily = aValue; break;
- case PROP_FONT_STYLE: mFont->mStyle = aValue; break;
- case PROP_FONT_VARIANT: mFont->mVariant = aValue; break;
- case PROP_FONT_WEIGHT: mFont->mWeight = aValue; break;
- case PROP_FONT_SIZE: mFont->mSize = aValue; break;
+ case PROP_FONT_FAMILY: mFont->mFamily = aValue; break;
+ case PROP_FONT_STYLE: mFont->mStyle = aValue; break;
+ case PROP_FONT_VARIANT: mFont->mVariant = aValue; break;
+ case PROP_FONT_WEIGHT: mFont->mWeight = aValue; break;
+ case PROP_FONT_SIZE: mFont->mSize = aValue; break;
+ case PROP_FONT_SIZE_ADJUST: mFont->mSizeAdjust = aValue; break;
+ case PROP_FONT_STRETCH: mFont->mStretch = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSColor
@@ -1023,10 +912,7 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
case PROP_OPACITY:
- if (nsnull == mColor) {
- mColor = new nsCSSColor();
- }
- if (nsnull != mColor) {
+ CSS_ENSURE(Color) {
switch (aProperty) {
case PROP_COLOR: mColor->mColor = aValue; break;
case PROP_BACKGROUND_COLOR: mColor->mBackColor = aValue; break;
@@ -1041,9 +927,6 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_OPACITY: mColor->mOpacity = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSText
@@ -1054,12 +937,10 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
- if (nsnull == mText) {
- mText = new nsCSSText();
- }
- if (nsnull != mText) {
+ CSS_ENSURE(Text) {
switch (aProperty) {
case PROP_WORD_SPACING: mText->mWordSpacing = aValue; break;
case PROP_LETTER_SPACING: mText->mLetterSpacing = aValue; break;
@@ -1068,198 +949,11 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_TEXT_TRANSFORM: mText->mTextTransform = aValue; break;
case PROP_TEXT_ALIGN: mText->mTextAlign = aValue; break;
case PROP_TEXT_INDENT: mText->mTextIndent = aValue; break;
+ case PROP_UNICODE_BIDI: mText->mUnicodeBidi = aValue; break;
case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break;
case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSMargin
- case PROP_MARGIN_TOP:
- case PROP_MARGIN_RIGHT:
- case PROP_MARGIN_BOTTOM:
- case PROP_MARGIN_LEFT:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mMargin) {
- mMargin->mMargin = new nsCSSRect();
- }
- if (nsnull != mMargin->mMargin) {
- switch (aProperty) {
- case PROP_MARGIN_TOP: mMargin->mMargin->mTop = aValue; break;
- case PROP_MARGIN_RIGHT: mMargin->mMargin->mRight = aValue; break;
- case PROP_MARGIN_BOTTOM: mMargin->mMargin->mBottom = aValue; break;
- case PROP_MARGIN_LEFT: mMargin->mMargin->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_PADDING_TOP:
- case PROP_PADDING_RIGHT:
- case PROP_PADDING_BOTTOM:
- case PROP_PADDING_LEFT:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mPadding) {
- mMargin->mPadding = new nsCSSRect();
- }
- if (nsnull != mMargin->mPadding) {
- switch (aProperty) {
- case PROP_PADDING_TOP: mMargin->mPadding->mTop = aValue; break;
- case PROP_PADDING_RIGHT: mMargin->mPadding->mRight = aValue; break;
- case PROP_PADDING_BOTTOM: mMargin->mPadding->mBottom = aValue; break;
- case PROP_PADDING_LEFT: mMargin->mPadding->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_WIDTH:
- case PROP_BORDER_RIGHT_WIDTH:
- case PROP_BORDER_BOTTOM_WIDTH:
- case PROP_BORDER_LEFT_WIDTH:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mBorder) {
- mMargin->mBorder = new nsCSSRect();
- }
- if (nsnull != mMargin->mBorder) {
- switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: mMargin->mBorder->mTop = aValue; break;
- case PROP_BORDER_RIGHT_WIDTH: mMargin->mBorder->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_WIDTH: mMargin->mBorder->mBottom = aValue; break;
- case PROP_BORDER_LEFT_WIDTH: mMargin->mBorder->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_COLOR:
- case PROP_BORDER_RIGHT_COLOR:
- case PROP_BORDER_BOTTOM_COLOR:
- case PROP_BORDER_LEFT_COLOR:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mColor) {
- mMargin->mColor = new nsCSSRect();
- }
- if (nsnull != mMargin->mColor) {
- switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: mMargin->mColor->mTop = aValue; break;
- case PROP_BORDER_RIGHT_COLOR: mMargin->mColor->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_COLOR: mMargin->mColor->mBottom = aValue; break;
- case PROP_BORDER_LEFT_COLOR: mMargin->mColor->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_STYLE:
- case PROP_BORDER_RIGHT_STYLE:
- case PROP_BORDER_BOTTOM_STYLE:
- case PROP_BORDER_LEFT_STYLE:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mStyle) {
- mMargin->mStyle = new nsCSSRect();
- }
- if (nsnull != mMargin->mStyle) {
- switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: mMargin->mStyle->mTop = aValue; break;
- case PROP_BORDER_RIGHT_STYLE: mMargin->mStyle->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_STYLE: mMargin->mStyle->mBottom = aValue; break;
- case PROP_BORDER_LEFT_STYLE: mMargin->mStyle->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSPosition
- case PROP_POSITION:
- case PROP_WIDTH:
- case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
- case PROP_Z_INDEX:
- if (nsnull == mPosition) {
- mPosition = new nsCSSPosition();
- }
- if (nsnull != mPosition) {
- switch (aProperty) {
- case PROP_POSITION: mPosition->mPosition = aValue; break;
- case PROP_WIDTH: mPosition->mWidth = aValue; break;
- case PROP_HEIGHT: mPosition->mHeight = aValue; break;
- case PROP_LEFT: mPosition->mLeft = aValue; break;
- case PROP_TOP: mPosition->mTop = aValue; break;
- case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSList
- case PROP_LIST_STYLE_TYPE:
- case PROP_LIST_STYLE_IMAGE:
- case PROP_LIST_STYLE_POSITION:
- if (nsnull == mList) {
- mList = new nsCSSList();
- }
- if (nsnull != mList) {
- switch (aProperty) {
- case PROP_LIST_STYLE_TYPE: mList->mType = aValue; break;
- case PROP_LIST_STYLE_IMAGE: mList->mImage = aValue; break;
- case PROP_LIST_STYLE_POSITION: mList->mPosition = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSDisplay
@@ -1270,10 +964,7 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_VISIBILITY:
case PROP_OVERFLOW:
case PROP_FILTER:
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mDisplay) {
+ CSS_ENSURE(Display) {
switch (aProperty) {
case PROP_FLOAT: mDisplay->mFloat = aValue; break;
case PROP_CLEAR: mDisplay->mClear = aValue; break;
@@ -1284,23 +975,14 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_FILTER: mDisplay->mFilter = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
case PROP_CLIP_TOP:
case PROP_CLIP_RIGHT:
case PROP_CLIP_BOTTOM:
case PROP_CLIP_LEFT:
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mDisplay) {
- if (nsnull == mDisplay->mClip) {
- mDisplay->mClip = new nsCSSRect();
- }
- if (nsnull != mDisplay->mClip) {
+ CSS_ENSURE(Display) {
+ CSS_ENSURE_RECT(mDisplay->mClip) {
switch(aProperty) {
case PROP_CLIP_TOP: mDisplay->mClip->mTop = aValue; break;
case PROP_CLIP_RIGHT: mDisplay->mClip->mRight = aValue; break;
@@ -1308,22 +990,273 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_CLIP_LEFT: mDisplay->mClip->mLeft = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
break;
+ // nsCSSMargin
+ case PROP_MARGIN_TOP:
+ case PROP_MARGIN_RIGHT:
+ case PROP_MARGIN_BOTTOM:
+ case PROP_MARGIN_LEFT:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mMargin) {
+ switch (aProperty) {
+ case PROP_MARGIN_TOP: mMargin->mMargin->mTop = aValue; break;
+ case PROP_MARGIN_RIGHT: mMargin->mMargin->mRight = aValue; break;
+ case PROP_MARGIN_BOTTOM: mMargin->mMargin->mBottom = aValue; break;
+ case PROP_MARGIN_LEFT: mMargin->mMargin->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_PADDING_TOP:
+ case PROP_PADDING_RIGHT:
+ case PROP_PADDING_BOTTOM:
+ case PROP_PADDING_LEFT:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mPadding) {
+ switch (aProperty) {
+ case PROP_PADDING_TOP: mMargin->mPadding->mTop = aValue; break;
+ case PROP_PADDING_RIGHT: mMargin->mPadding->mRight = aValue; break;
+ case PROP_PADDING_BOTTOM: mMargin->mPadding->mBottom = aValue; break;
+ case PROP_PADDING_LEFT: mMargin->mPadding->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_WIDTH:
+ case PROP_BORDER_RIGHT_WIDTH:
+ case PROP_BORDER_BOTTOM_WIDTH:
+ case PROP_BORDER_LEFT_WIDTH:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderWidth) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_WIDTH: mMargin->mBorderWidth->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_WIDTH: mMargin->mBorderWidth->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_WIDTH: mMargin->mBorderWidth->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_WIDTH: mMargin->mBorderWidth->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_COLOR:
+ case PROP_BORDER_RIGHT_COLOR:
+ case PROP_BORDER_BOTTOM_COLOR:
+ case PROP_BORDER_LEFT_COLOR:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderColor) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_COLOR: mMargin->mBorderColor->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_COLOR: mMargin->mBorderColor->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_COLOR: mMargin->mBorderColor->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_COLOR: mMargin->mBorderColor->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_STYLE:
+ case PROP_BORDER_RIGHT_STYLE:
+ case PROP_BORDER_BOTTOM_STYLE:
+ case PROP_BORDER_LEFT_STYLE:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderStyle) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_STYLE: mMargin->mBorderStyle->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_STYLE: mMargin->mBorderStyle->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_STYLE: mMargin->mBorderStyle->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_STYLE: mMargin->mBorderStyle->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ CSS_ENSURE(Margin) {
+ switch (aProperty) {
+ case PROP_OUTLINE_WIDTH: mMargin->mOutlineWidth = aValue; break;
+ case PROP_OUTLINE_COLOR: mMargin->mOutlineColor = aValue; break;
+ case PROP_OUTLINE_STYLE: mMargin->mOutlineStyle = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSPosition
+ case PROP_POSITION:
+ case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
+ case PROP_HEIGHT:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
+ case PROP_Z_INDEX:
+ CSS_ENSURE(Position) {
+ switch (aProperty) {
+ case PROP_POSITION: mPosition->mPosition = aValue; break;
+ case PROP_WIDTH: mPosition->mWidth = aValue; break;
+ case PROP_MIN_WIDTH: mPosition->mMinWidth = aValue; break;
+ case PROP_MAX_WIDTH: mPosition->mMaxWidth = aValue; break;
+ case PROP_HEIGHT: mPosition->mHeight = aValue; break;
+ case PROP_MIN_HEIGHT: mPosition->mMinHeight = aValue; break;
+ case PROP_MAX_HEIGHT: mPosition->mMaxHeight = aValue; break;
+ case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
+ }
+ }
+ break;
+
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ CSS_ENSURE(Position) {
+ CSS_ENSURE_RECT(mPosition->mOffset) {
+ switch (aProperty) {
+ case PROP_TOP: mPosition->mOffset->mTop = aValue; break;
+ case PROP_RIGHT: mPosition->mOffset->mRight= aValue; break;
+ case PROP_BOTTOM: mPosition->mOffset->mBottom = aValue; break;
+ case PROP_LEFT: mPosition->mOffset->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ // nsCSSList
+ case PROP_LIST_STYLE_TYPE:
+ case PROP_LIST_STYLE_IMAGE:
+ case PROP_LIST_STYLE_POSITION:
+ CSS_ENSURE(List) {
+ switch (aProperty) {
+ case PROP_LIST_STYLE_TYPE: mList->mType = aValue; break;
+ case PROP_LIST_STYLE_IMAGE: mList->mImage = aValue; break;
+ case PROP_LIST_STYLE_POSITION: mList->mPosition = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ CSS_ENSURE(Table) {
+ switch (aProperty) {
+ case PROP_BORDER_COLLAPSE: mTable->mBorderCollapse = aValue; break;
+ case PROP_BORDER_SPACING: mTable->mBorderSpacing = aValue; break;
+ case PROP_CAPTION_SIDE: mTable->mCaptionSide = aValue; break;
+ case PROP_EMPTY_CELLS: mTable->mEmptyCells = aValue; break;
+ case PROP_TABLE_LAYOUT: mTable->mLayout = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ CSS_ENSURE(Breaks) {
+ switch (aProperty) {
+ case PROP_ORPHANS: mBreaks->mOrphans = aValue; break;
+ case PROP_WIDOWS: mBreaks->mWidows = aValue; break;
+ case PROP_PAGE: mBreaks->mPage = aValue; break;
+ case PROP_PAGE_BREAK_AFTER: mBreaks->mPageBreakAfter = aValue; break;
+ case PROP_PAGE_BREAK_BEFORE: mBreaks->mPageBreakBefore = aValue; break;
+ case PROP_PAGE_BREAK_INSIDE: mBreaks->mPageBreakInside = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ CSS_ENSURE(Page) {
+ switch (aProperty) {
+ case PROP_MARKS: mPage->mMarks = aValue; break;
+ case PROP_SIZE: mPage->mSize = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ CSS_ENSURE(Content) {
+ switch (aProperty) {
+ case PROP_CONTENT: mContent->mContent = aValue; break;
+ case PROP_COUNTER_INCREMENT: mContent->mCounterIncrement = aValue; break;
+ case PROP_COUNTER_RESET: mContent->mCounterReset = aValue; break;
+ case PROP_MARKER_OFFSET: mContent->mMarkerOffset = aValue; break;
+ case PROP_QUOTES: mContent->mQuotes = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ CSS_ENSURE(Aural) {
+ switch (aProperty) {
+ case PROP_AZIMUTH: mAural->mAzimuth = aValue; break;
+ case PROP_ELEVATION: mAural->mElevation = aValue; break;
+ case PROP_CUE_AFTER: mAural->mCueAfter = aValue; break;
+ case PROP_CUE_BEFORE: mAural->mCueBefore = aValue; break;
+ case PROP_PAUSE_AFTER: mAural->mPauseAfter = aValue; break;
+ case PROP_PAUSE_BEFORE: mAural->mPauseBefore = aValue; break;
+ case PROP_PITCH: mAural->mPitch = aValue; break;
+ case PROP_PITCH_RANGE: mAural->mPitchRange = aValue; break;
+ case PROP_PLAY_DURING: mAural->mPlayDuring = aValue; break;
+ case PROP_RICHNESS: mAural->mRichness = aValue; break;
+ case PROP_SPEAK: mAural->mSpeak = aValue; break;
+ case PROP_SPEAK_HEADER: mAural->mSpeakHeader = aValue; break;
+ case PROP_SPEAK_NUMERAL: mAural->mSpeakNumeral = aValue; break;
+ case PROP_SPEAK_PUNCTUATION: mAural->mSpeakPunctuation = aValue; break;
+ case PROP_SPEECH_RATE: mAural->mSpeechRate = aValue; break;
+ case PROP_STRESS: mAural->mStress = aValue; break;
+ case PROP_VOICE_FAMILY: mAural->mVoiceFamily = aValue; break;
+ case PROP_VOLUME: mAural->mVolume = aValue; break;
+ }
+ }
+ break;
+
+ // Shorthands
case PROP_BACKGROUND:
case PROP_BORDER:
case PROP_CLIP:
+ case PROP_CUE:
case PROP_FONT:
case PROP_LIST_STYLE:
case PROP_MARGIN:
+ case PROP_OUTLINE:
case PROP_PADDING:
+ case PROP_PAUSE:
+ case PROP_TEXT_SHADOW:
case PROP_BACKGROUND_POSITION:
case PROP_BORDER_TOP:
case PROP_BORDER_RIGHT:
@@ -1364,6 +1297,18 @@ nsresult CSSDeclarationImpl::SetValueImportant(const char* aProperty)
return SetValueImportant(nsCSSProps::LookupName(aProperty));
}
+#define CSS_ENSURE_IMPORTANT(data) \
+ if (nsnull == mImportant->m##data) { \
+ mImportant->m##data = new nsCSS##data(); \
+ } \
+ if (nsnull == mImportant->m##data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
+#define CSS_CASE_IMPORTANT(prop,data) \
+ case prop: mImportant->data = data; data.Reset(); break
+
nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
{
nsresult result = NS_OK;
@@ -1385,27 +1330,20 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
if (nsnull != mFont) {
- if (nsnull == mImportant->mFont) {
- mImportant->mFont = new nsCSSFont();
- }
- if (nsnull != mImportant->mFont) {
+ CSS_ENSURE_IMPORTANT(Font) {
switch (aProperty) {
- case PROP_FONT_FAMILY: mImportant->mFont->mFamily = mFont->mFamily;
- mFont->mFamily.Reset(); break;
- case PROP_FONT_STYLE: mImportant->mFont->mStyle = mFont->mStyle;
- mFont->mStyle.Reset(); break;
- case PROP_FONT_VARIANT: mImportant->mFont->mVariant = mFont->mVariant;
- mFont->mVariant.Reset(); break;
- case PROP_FONT_WEIGHT: mImportant->mFont->mWeight = mFont->mWeight;
- mFont->mWeight.Reset(); break;
- case PROP_FONT_SIZE: mImportant->mFont->mSize = mFont->mSize;
- mFont->mSize.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_FONT_FAMILY, mFont->mFamily);
+ CSS_CASE_IMPORTANT(PROP_FONT_STYLE, mFont->mStyle);
+ CSS_CASE_IMPORTANT(PROP_FONT_VARIANT, mFont->mVariant);
+ CSS_CASE_IMPORTANT(PROP_FONT_WEIGHT, mFont->mWeight);
+ CSS_CASE_IMPORTANT(PROP_FONT_SIZE, mFont->mSize);
+ CSS_CASE_IMPORTANT(PROP_FONT_SIZE_ADJUST, mFont->mSizeAdjust);
+ CSS_CASE_IMPORTANT(PROP_FONT_STRETCH, mFont->mStretch);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
@@ -1422,38 +1360,21 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_CURSOR_IMAGE:
case PROP_OPACITY:
if (nsnull != mColor) {
- if (nsnull == mImportant->mColor) {
- mImportant->mColor = new nsCSSColor();
- }
- if (nsnull != mImportant->mColor) {
+ CSS_ENSURE_IMPORTANT(Color) {
switch (aProperty) {
- case PROP_COLOR: mImportant->mColor->mColor = mColor->mColor;
- mColor->mColor.Reset(); break;
- case PROP_BACKGROUND_COLOR: mImportant->mColor->mBackColor = mColor->mBackColor;
- mColor->mBackColor.Reset(); break;
- case PROP_BACKGROUND_IMAGE: mImportant->mColor->mBackImage = mColor->mBackImage;
- mColor->mBackImage.Reset(); break;
- case PROP_BACKGROUND_REPEAT: mImportant->mColor->mBackRepeat = mColor->mBackRepeat;
- mColor->mBackRepeat.Reset(); break;
- case PROP_BACKGROUND_ATTACHMENT: mImportant->mColor->mBackAttachment = mColor->mBackAttachment;
- mColor->mBackAttachment.Reset(); break;
- case PROP_BACKGROUND_X_POSITION: mImportant->mColor->mBackPositionX = mColor->mBackPositionX;
- mColor->mBackPositionX.Reset(); break;
- case PROP_BACKGROUND_Y_POSITION: mImportant->mColor->mBackPositionY = mColor->mBackPositionY;
- mColor->mBackPositionY.Reset(); break;
- case PROP_BACKGROUND_FILTER: mImportant->mColor->mBackFilter = mColor->mBackFilter;
- mColor->mBackFilter.Reset(); break;
- case PROP_CURSOR: mImportant->mColor->mCursor = mColor->mCursor;
- mColor->mCursor.Reset(); break;
- case PROP_CURSOR_IMAGE: mImportant->mColor->mCursorImage = mColor->mCursorImage;
- mColor->mCursorImage.Reset(); break;
- case PROP_OPACITY: mImportant->mColor->mOpacity = mColor->mOpacity;
- mColor->mOpacity.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_COLOR, mColor->mColor);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_COLOR, mColor->mBackColor);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_IMAGE, mColor->mBackImage);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_REPEAT, mColor->mBackRepeat);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_ATTACHMENT, mColor->mBackAttachment);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_X_POSITION, mColor->mBackPositionX);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_Y_POSITION, mColor->mBackPositionY);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_FILTER, mColor->mBackFilter);
+ CSS_CASE_IMPORTANT(PROP_CURSOR, mColor->mCursor);
+ CSS_CASE_IMPORTANT(PROP_CURSOR_IMAGE, mColor->mCursorImage);
+ CSS_CASE_IMPORTANT(PROP_OPACITY, mColor->mOpacity);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
@@ -1465,36 +1386,80 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
if (nsnull != mText) {
- if (nsnull == mImportant->mText) {
- mImportant->mText = new nsCSSText();
- }
- if (nsnull != mImportant->mText) {
+ CSS_ENSURE_IMPORTANT(Text) {
switch (aProperty) {
- case PROP_WORD_SPACING: mImportant->mText->mWordSpacing = mText->mWordSpacing;
- mText->mWordSpacing.Reset(); break;
- case PROP_LETTER_SPACING: mImportant->mText->mLetterSpacing = mText->mLetterSpacing;
- mText->mLetterSpacing.Reset(); break;
- case PROP_TEXT_DECORATION: mImportant->mText->mDecoration = mText->mDecoration;
- mText->mDecoration.Reset(); break;
- case PROP_VERTICAL_ALIGN: mImportant->mText->mVerticalAlign = mText->mVerticalAlign;
- mText->mVerticalAlign.Reset(); break;
- case PROP_TEXT_TRANSFORM: mImportant->mText->mTextTransform = mText->mTextTransform;
- mText->mTextTransform.Reset(); break;
- case PROP_TEXT_ALIGN: mImportant->mText->mTextAlign = mText->mTextAlign;
- mText->mTextAlign.Reset(); break;
- case PROP_TEXT_INDENT: mImportant->mText->mTextIndent = mText->mTextIndent;
- mText->mTextIndent.Reset(); break;
- case PROP_LINE_HEIGHT: mImportant->mText->mLineHeight = mText->mLineHeight;
- mText->mLineHeight.Reset(); break;
- case PROP_WHITE_SPACE: mImportant->mText->mWhiteSpace = mText->mWhiteSpace;
- mText->mWhiteSpace.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_WORD_SPACING, mText->mWordSpacing);
+ CSS_CASE_IMPORTANT(PROP_LETTER_SPACING, mText->mLetterSpacing);
+ CSS_CASE_IMPORTANT(PROP_TEXT_DECORATION, mText->mDecoration);
+ CSS_CASE_IMPORTANT(PROP_VERTICAL_ALIGN, mText->mVerticalAlign);
+ CSS_CASE_IMPORTANT(PROP_TEXT_TRANSFORM, mText->mTextTransform);
+ CSS_CASE_IMPORTANT(PROP_TEXT_ALIGN, mText->mTextAlign);
+ CSS_CASE_IMPORTANT(PROP_TEXT_INDENT, mText->mTextIndent);
+ CSS_CASE_IMPORTANT(PROP_UNICODE_BIDI, mText->mUnicodeBidi);
+ CSS_CASE_IMPORTANT(PROP_LINE_HEIGHT, mText->mLineHeight);
+ CSS_CASE_IMPORTANT(PROP_WHITE_SPACE, mText->mWhiteSpace);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ break;
+
+ case PROP_TEXT_SHADOW:
+ if (nsnull != mText) {
+ if (nsnull != mText->mTextShadow) {
+ CSS_ENSURE_IMPORTANT(Text) {
+ if (nsnull != mImportant->mText->mTextShadow) {
+ delete mImportant->mText->mTextShadow;
+ }
+ mImportant->mText->mTextShadow = mText->mTextShadow;
+ mText->mTextShadow = nsnull;
+ }
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case PROP_DIRECTION:
+ case PROP_DISPLAY:
+ case PROP_FLOAT:
+ case PROP_CLEAR:
+ case PROP_OVERFLOW:
+ case PROP_VISIBILITY:
+ case PROP_FILTER:
+ if (nsnull != mDisplay) {
+ CSS_ENSURE_IMPORTANT(Display) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_DIRECTION, mDisplay->mDirection);
+ CSS_CASE_IMPORTANT(PROP_DISPLAY, mDisplay->mDisplay);
+ CSS_CASE_IMPORTANT(PROP_FLOAT, mDisplay->mFloat);
+ CSS_CASE_IMPORTANT(PROP_CLEAR, mDisplay->mClear);
+ CSS_CASE_IMPORTANT(PROP_OVERFLOW, mDisplay->mOverflow);
+ CSS_CASE_IMPORTANT(PROP_VISIBILITY, mDisplay->mVisibility);
+ CSS_CASE_IMPORTANT(PROP_FILTER, mDisplay->mFilter);
+ }
+ }
+ }
+ break;
+
+ case PROP_CLIP_TOP:
+ case PROP_CLIP_RIGHT:
+ case PROP_CLIP_BOTTOM:
+ case PROP_CLIP_LEFT:
+ if (nsnull != mDisplay) {
+ if (nsnull != mDisplay->mClip) {
+ CSS_ENSURE_IMPORTANT(Display) {
+ CSS_ENSURE_RECT(mImportant->mDisplay->mClip) {
+ switch(aProperty) {
+ CSS_CASE_IMPORTANT(PROP_CLIP_TOP, mDisplay->mClip->mTop);
+ CSS_CASE_IMPORTANT(PROP_CLIP_RIGHT, mDisplay->mClip->mRight);
+ CSS_CASE_IMPORTANT(PROP_CLIP_BOTTOM, mDisplay->mClip->mBottom);
+ CSS_CASE_IMPORTANT(PROP_CLIP_LEFT, mDisplay->mClip->mLeft);
+ }
+ }
+ }
}
}
break;
@@ -1506,31 +1471,15 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_MARGIN_LEFT:
if (nsnull != mMargin) {
if (nsnull != mMargin->mMargin) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mMargin) {
- mImportant->mMargin->mMargin = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mMargin) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mMargin) {
switch (aProperty) {
- case PROP_MARGIN_TOP: mImportant->mMargin->mMargin->mTop = mMargin->mMargin->mTop;
- mMargin->mMargin->mTop.Reset(); break;
- case PROP_MARGIN_RIGHT: mImportant->mMargin->mMargin->mRight = mMargin->mMargin->mRight;
- mMargin->mMargin->mRight.Reset(); break;
- case PROP_MARGIN_BOTTOM: mImportant->mMargin->mMargin->mBottom = mMargin->mMargin->mBottom;
- mMargin->mMargin->mBottom.Reset(); break;
- case PROP_MARGIN_LEFT: mImportant->mMargin->mMargin->mLeft = mMargin->mMargin->mLeft;
- mMargin->mMargin->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_MARGIN_TOP, mMargin->mMargin->mTop);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_RIGHT, mMargin->mMargin->mRight);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_BOTTOM, mMargin->mMargin->mBottom);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_LEFT, mMargin->mMargin->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1542,31 +1491,15 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_PADDING_LEFT:
if (nsnull != mMargin) {
if (nsnull != mMargin->mPadding) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mPadding) {
- mImportant->mMargin->mPadding = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mPadding) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mPadding) {
switch (aProperty) {
- case PROP_PADDING_TOP: mImportant->mMargin->mPadding->mTop = mMargin->mPadding->mTop;
- mMargin->mPadding->mTop.Reset(); break;
- case PROP_PADDING_RIGHT: mImportant->mMargin->mPadding->mRight = mMargin->mPadding->mRight;
- mMargin->mPadding->mRight.Reset(); break;
- case PROP_PADDING_BOTTOM: mImportant->mMargin->mPadding->mBottom = mMargin->mPadding->mBottom;
- mMargin->mPadding->mBottom.Reset(); break;
- case PROP_PADDING_LEFT: mImportant->mMargin->mPadding->mLeft = mMargin->mPadding->mLeft;
- mMargin->mPadding->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_PADDING_TOP, mMargin->mPadding->mTop);
+ CSS_CASE_IMPORTANT(PROP_PADDING_RIGHT, mMargin->mPadding->mRight);
+ CSS_CASE_IMPORTANT(PROP_PADDING_BOTTOM, mMargin->mPadding->mBottom);
+ CSS_CASE_IMPORTANT(PROP_PADDING_LEFT, mMargin->mPadding->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1577,32 +1510,16 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_WIDTH:
case PROP_BORDER_LEFT_WIDTH:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mBorder) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mBorder) {
- mImportant->mMargin->mBorder = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mBorder) {
+ if (nsnull != mMargin->mBorderWidth) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderWidth) {
switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: mImportant->mMargin->mBorder->mTop = mMargin->mBorder->mTop;
- mMargin->mBorder->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_WIDTH: mImportant->mMargin->mBorder->mRight = mMargin->mBorder->mRight;
- mMargin->mBorder->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_WIDTH: mImportant->mMargin->mBorder->mBottom = mMargin->mBorder->mBottom;
- mMargin->mBorder->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_WIDTH: mImportant->mMargin->mBorder->mLeft = mMargin->mBorder->mLeft;
- mMargin->mBorder->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_WIDTH, mMargin->mBorderWidth->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_WIDTH, mMargin->mBorderWidth->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_WIDTH, mMargin->mBorderWidth->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_WIDTH, mMargin->mBorderWidth->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1613,32 +1530,16 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_COLOR:
case PROP_BORDER_LEFT_COLOR:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mColor) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mColor) {
- mImportant->mMargin->mColor = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mColor) {
+ if (nsnull != mMargin->mBorderColor) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderColor) {
switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: mImportant->mMargin->mColor->mTop = mMargin->mColor->mTop;
- mMargin->mColor->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_COLOR: mImportant->mMargin->mColor->mRight = mMargin->mColor->mRight;
- mMargin->mColor->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_COLOR: mImportant->mMargin->mColor->mBottom = mMargin->mColor->mBottom;
- mMargin->mColor->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_COLOR: mImportant->mMargin->mColor->mLeft = mMargin->mColor->mLeft;
- mMargin->mColor->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_COLOR, mMargin->mBorderColor->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_COLOR, mMargin->mBorderColor->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_COLOR, mMargin->mBorderColor->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_COLOR, mMargin->mBorderColor->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1649,32 +1550,30 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_STYLE:
case PROP_BORDER_LEFT_STYLE:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mStyle) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mStyle) {
- mImportant->mMargin->mStyle = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mStyle) {
+ if (nsnull != mMargin->mBorderStyle) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderStyle) {
switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: mImportant->mMargin->mStyle->mTop = mMargin->mStyle->mTop;
- mMargin->mStyle->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_STYLE: mImportant->mMargin->mStyle->mRight = mMargin->mStyle->mRight;
- mMargin->mStyle->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_STYLE: mImportant->mMargin->mStyle->mBottom = mMargin->mStyle->mBottom;
- mMargin->mStyle->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_STYLE: mImportant->mMargin->mStyle->mLeft = mMargin->mStyle->mLeft;
- mMargin->mStyle->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_STYLE, mMargin->mBorderStyle->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_STYLE, mMargin->mBorderStyle->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_STYLE, mMargin->mBorderStyle->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_STYLE, mMargin->mBorderStyle->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ if (nsnull != mMargin) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_WIDTH, mMargin->mOutlineWidth);
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_COLOR, mMargin->mOutlineColor);
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_STYLE, mMargin->mOutlineStyle);
}
}
}
@@ -1683,32 +1582,44 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
// nsCSSPosition
case PROP_POSITION:
case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
case PROP_Z_INDEX:
if (nsnull != mPosition) {
- if (nsnull == mImportant->mPosition) {
- mImportant->mPosition = new nsCSSPosition();
- }
- if (nsnull != mImportant->mPosition) {
+ CSS_ENSURE_IMPORTANT(Position) {
switch (aProperty) {
- case PROP_POSITION: mImportant->mPosition->mPosition = mPosition->mPosition;
- mPosition->mPosition.Reset(); break;
- case PROP_WIDTH: mImportant->mPosition->mWidth = mPosition->mWidth;
- mPosition->mWidth.Reset(); break;
- case PROP_HEIGHT: mImportant->mPosition->mHeight = mPosition->mHeight;
- mPosition->mHeight.Reset(); break;
- case PROP_LEFT: mImportant->mPosition->mLeft = mPosition->mLeft;
- mPosition->mLeft.Reset(); break;
- case PROP_TOP: mImportant->mPosition->mTop = mPosition->mTop;
- mPosition->mTop.Reset(); break;
- case PROP_Z_INDEX: mImportant->mPosition->mZIndex = mPosition->mZIndex;
- mPosition->mZIndex.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_POSITION, mPosition->mPosition);
+ CSS_CASE_IMPORTANT(PROP_WIDTH, mPosition->mWidth);
+ CSS_CASE_IMPORTANT(PROP_MIN_WIDTH, mPosition->mMinWidth);
+ CSS_CASE_IMPORTANT(PROP_MAX_WIDTH, mPosition->mMaxWidth);
+ CSS_CASE_IMPORTANT(PROP_HEIGHT, mPosition->mHeight);
+ CSS_CASE_IMPORTANT(PROP_MIN_HEIGHT, mPosition->mMinHeight);
+ CSS_CASE_IMPORTANT(PROP_MAX_HEIGHT, mPosition->mMaxHeight);
+ CSS_CASE_IMPORTANT(PROP_Z_INDEX, mPosition->mZIndex);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ break;
+
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ if (nsnull != mPosition) {
+ if (nsnull != mPosition->mOffset) {
+ CSS_ENSURE_IMPORTANT(Position) {
+ CSS_ENSURE_RECT(mImportant->mPosition->mOffset) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_TOP, mPosition->mOffset->mTop);
+ CSS_CASE_IMPORTANT(PROP_RIGHT, mPosition->mOffset->mRight);
+ CSS_CASE_IMPORTANT(PROP_BOTTOM, mPosition->mOffset->mBottom);
+ CSS_CASE_IMPORTANT(PROP_LEFT, mPosition->mOffset->mLeft);
+ }
+ }
+ }
}
}
break;
@@ -1718,97 +1629,134 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_LIST_STYLE_IMAGE:
case PROP_LIST_STYLE_POSITION:
if (nsnull != mList) {
- if (nsnull == mImportant->mList) {
- mImportant->mList = new nsCSSList();
- }
- if (nsnull != mImportant->mList) {
+ CSS_ENSURE_IMPORTANT(List) {
switch (aProperty) {
- case PROP_LIST_STYLE_TYPE: mImportant->mList->mType = mList->mType;
- mList->mType.Reset(); break;
- case PROP_LIST_STYLE_IMAGE: mImportant->mList->mImage = mList->mImage;
- mList->mImage.Reset(); break;
- case PROP_LIST_STYLE_POSITION: mImportant->mList->mPosition = mList->mPosition;
- mList->mPosition.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_TYPE, mList->mType);
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_IMAGE, mList->mImage);
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_POSITION, mList->mPosition);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
- // nsCSSDisplay
- case PROP_FLOAT:
- case PROP_CLEAR:
- case PROP_DISPLAY:
- case PROP_DIRECTION:
- case PROP_VISIBILITY:
- case PROP_OVERFLOW:
- case PROP_FILTER:
- if (nsnull != mDisplay) {
- if (nsnull == mImportant->mDisplay) {
- mImportant->mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mImportant->mDisplay) {
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ if (nsnull != mTable) {
+ CSS_ENSURE_IMPORTANT(Table) {
switch (aProperty) {
- case PROP_FLOAT: mImportant->mDisplay->mFloat = mDisplay->mFloat;
- mDisplay->mFloat.Reset(); break;
- case PROP_CLEAR: mImportant->mDisplay->mClear = mDisplay->mClear;
- mDisplay->mClear.Reset(); break;
- case PROP_DISPLAY: mImportant->mDisplay->mDisplay = mDisplay->mDisplay;
- mDisplay->mDisplay.Reset(); break;
- case PROP_DIRECTION: mImportant->mDisplay->mDirection = mDisplay->mDirection;
- mDisplay->mDirection.Reset(); break;
- case PROP_VISIBILITY: mImportant->mDisplay->mVisibility = mDisplay->mVisibility;
- mDisplay->mVisibility.Reset(); break;
- case PROP_OVERFLOW: mImportant->mDisplay->mOverflow = mDisplay->mOverflow;
- mDisplay->mOverflow.Reset(); break;
- case PROP_FILTER: mImportant->mDisplay->mFilter = mDisplay->mFilter;
- mDisplay->mFilter.Reset(); break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- break;
-
- case PROP_CLIP_TOP:
- case PROP_CLIP_RIGHT:
- case PROP_CLIP_BOTTOM:
- case PROP_CLIP_LEFT:
- if (nsnull != mDisplay) {
- if (nsnull != mDisplay->mClip) {
- if (nsnull == mImportant->mDisplay) {
- mImportant->mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mImportant->mDisplay) {
- if (nsnull == mImportant->mDisplay->mClip) {
- mImportant->mDisplay->mClip = new nsCSSRect();
- }
- if (nsnull != mImportant->mDisplay->mClip) {
- switch(aProperty) {
- case PROP_CLIP_TOP: mImportant->mDisplay->mClip->mTop = mDisplay->mClip->mTop;
- mDisplay->mClip->mTop.Reset(); break;
- case PROP_CLIP_RIGHT: mImportant->mDisplay->mClip->mRight = mDisplay->mClip->mRight;
- mDisplay->mClip->mRight.Reset(); break;
- case PROP_CLIP_BOTTOM: mImportant->mDisplay->mClip->mBottom = mDisplay->mClip->mBottom;
- mDisplay->mClip->mBottom.Reset(); break;
- case PROP_CLIP_LEFT: mImportant->mDisplay->mClip->mLeft = mDisplay->mClip->mLeft;
- mDisplay->mClip->mLeft.Reset(); break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ CSS_CASE_IMPORTANT(PROP_BORDER_COLLAPSE, mTable->mBorderCollapse);
+ CSS_CASE_IMPORTANT(PROP_BORDER_SPACING, mTable->mBorderSpacing);
+ CSS_CASE_IMPORTANT(PROP_CAPTION_SIDE, mTable->mCaptionSide);
+ CSS_CASE_IMPORTANT(PROP_EMPTY_CELLS, mTable->mEmptyCells);
+ CSS_CASE_IMPORTANT(PROP_TABLE_LAYOUT, mTable->mLayout);
}
}
}
break;
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ if (nsnull != mBreaks) {
+ CSS_ENSURE_IMPORTANT(Breaks) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_ORPHANS, mBreaks->mOrphans);
+ CSS_CASE_IMPORTANT(PROP_WIDOWS, mBreaks->mWidows);
+ CSS_CASE_IMPORTANT(PROP_PAGE, mBreaks->mPage);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_AFTER, mBreaks->mPageBreakAfter);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_BEFORE, mBreaks->mPageBreakBefore);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_INSIDE, mBreaks->mPageBreakInside);
+ }
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ if (nsnull != mPage) {
+ CSS_ENSURE_IMPORTANT(Page) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_MARKS, mPage->mMarks);
+ CSS_CASE_IMPORTANT(PROP_SIZE, mPage->mSize);
+ }
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ if (nsnull != mContent) {
+ CSS_ENSURE_IMPORTANT(Content) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_CONTENT, mContent->mContent);
+ CSS_CASE_IMPORTANT(PROP_COUNTER_INCREMENT, mContent->mCounterIncrement);
+ CSS_CASE_IMPORTANT(PROP_COUNTER_RESET, mContent->mCounterReset);
+ CSS_CASE_IMPORTANT(PROP_MARKER_OFFSET, mContent->mMarkerOffset);
+ CSS_CASE_IMPORTANT(PROP_QUOTES, mContent->mQuotes);
+ }
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ if (nsnull != mAural) {
+ CSS_ENSURE_IMPORTANT(Aural) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_AZIMUTH, mAural->mAzimuth);
+ CSS_CASE_IMPORTANT(PROP_ELEVATION, mAural->mElevation);
+ CSS_CASE_IMPORTANT(PROP_CUE_AFTER, mAural->mCueAfter);
+ CSS_CASE_IMPORTANT(PROP_CUE_BEFORE, mAural->mCueBefore);
+ CSS_CASE_IMPORTANT(PROP_PAUSE_AFTER, mAural->mPauseAfter);
+ CSS_CASE_IMPORTANT(PROP_PAUSE_BEFORE, mAural->mPauseBefore);
+ CSS_CASE_IMPORTANT(PROP_PITCH, mAural->mPitch);
+ CSS_CASE_IMPORTANT(PROP_PITCH_RANGE, mAural->mPitchRange);
+ CSS_CASE_IMPORTANT(PROP_PLAY_DURING, mAural->mPlayDuring);
+ CSS_CASE_IMPORTANT(PROP_RICHNESS, mAural->mRichness);
+ CSS_CASE_IMPORTANT(PROP_SPEAK, mAural->mSpeak);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_HEADER, mAural->mSpeakHeader);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_NUMERAL, mAural->mSpeakNumeral);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_PUNCTUATION, mAural->mSpeakPunctuation);
+ CSS_CASE_IMPORTANT(PROP_SPEECH_RATE, mAural->mSpeechRate);
+ CSS_CASE_IMPORTANT(PROP_STRESS, mAural->mStress);
+ CSS_CASE_IMPORTANT(PROP_VOICE_FAMILY, mAural->mVoiceFamily);
+ CSS_CASE_IMPORTANT(PROP_VOLUME, mAural->mVolume);
+ }
+ }
+ }
+ break;
+
+ // Shorthands
case PROP_BACKGROUND:
SetValueImportant(PROP_BACKGROUND_COLOR);
SetValueImportant(PROP_BACKGROUND_IMAGE);
@@ -1838,6 +1786,10 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
SetValueImportant(PROP_CLIP_BOTTOM);
SetValueImportant(PROP_CLIP_LEFT);
break;
+ case PROP_CUE:
+ SetValueImportant(PROP_CUE_AFTER);
+ SetValueImportant(PROP_CUE_BEFORE);
+ break;
case PROP_FONT:
SetValueImportant(PROP_FONT_FAMILY);
SetValueImportant(PROP_FONT_STYLE);
@@ -1857,12 +1809,21 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
SetValueImportant(PROP_MARGIN_BOTTOM);
SetValueImportant(PROP_MARGIN_LEFT);
break;
+ case PROP_OUTLINE:
+ SetValueImportant(PROP_OUTLINE_COLOR);
+ SetValueImportant(PROP_OUTLINE_STYLE);
+ SetValueImportant(PROP_OUTLINE_WIDTH);
+ break;
case PROP_PADDING:
SetValueImportant(PROP_PADDING_TOP);
SetValueImportant(PROP_PADDING_RIGHT);
SetValueImportant(PROP_PADDING_BOTTOM);
SetValueImportant(PROP_PADDING_LEFT);
break;
+ case PROP_PAUSE:
+ SetValueImportant(PROP_PAUSE_AFTER);
+ SetValueImportant(PROP_PAUSE_BEFORE);
+ break;
case PROP_BACKGROUND_POSITION:
SetValueImportant(PROP_BACKGROUND_X_POSITION);
SetValueImportant(PROP_BACKGROUND_Y_POSITION);
@@ -1947,13 +1908,17 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
if (nsnull != mFont) {
switch (aProperty) {
- case PROP_FONT_FAMILY: aValue = mFont->mFamily; break;
- case PROP_FONT_STYLE: aValue = mFont->mStyle; break;
- case PROP_FONT_VARIANT: aValue = mFont->mVariant; break;
- case PROP_FONT_WEIGHT: aValue = mFont->mWeight; break;
- case PROP_FONT_SIZE: aValue = mFont->mSize; break;
+ case PROP_FONT_FAMILY: aValue = mFont->mFamily; break;
+ case PROP_FONT_STYLE: aValue = mFont->mStyle; break;
+ case PROP_FONT_VARIANT: aValue = mFont->mVariant; break;
+ case PROP_FONT_WEIGHT: aValue = mFont->mWeight; break;
+ case PROP_FONT_SIZE: aValue = mFont->mSize; break;
+ case PROP_FONT_SIZE_ADJUST: aValue = mFont->mSizeAdjust; break;
+ case PROP_FONT_STRETCH: aValue = mFont->mStretch; break;
}
}
else {
@@ -2001,6 +1966,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
if (nsnull != mText) {
@@ -2012,6 +1978,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_TRANSFORM: aValue = mText->mTextTransform; break;
case PROP_TEXT_ALIGN: aValue = mText->mTextAlign; break;
case PROP_TEXT_INDENT: aValue = mText->mTextIndent; break;
+ case PROP_UNICODE_BIDI: aValue = mText->mUnicodeBidi; break;
case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break;
case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break;
}
@@ -2021,6 +1988,61 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ case PROP_TEXT_SHADOW_COLOR:
+ case PROP_TEXT_SHADOW_X:
+ case PROP_TEXT_SHADOW_Y:
+ case PROP_TEXT_SHADOW_RADIUS:
+ if ((nsnull != mText) && (nsnull != mText->mTextShadow)) {
+ switch (aProperty) {
+ case PROP_TEXT_SHADOW_COLOR: aValue = mText->mTextShadow->mColor; break;
+ case PROP_TEXT_SHADOW_X: aValue = mText->mTextShadow->mXOffset; break;
+ case PROP_TEXT_SHADOW_Y: aValue = mText->mTextShadow->mYOffset; break;
+ case PROP_TEXT_SHADOW_RADIUS: aValue = mText->mTextShadow->mRadius; break;
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case PROP_FLOAT:
+ case PROP_CLEAR:
+ case PROP_DISPLAY:
+ case PROP_DIRECTION:
+ case PROP_VISIBILITY:
+ case PROP_OVERFLOW:
+ case PROP_FILTER:
+ if (nsnull != mDisplay) {
+ switch (aProperty) {
+ case PROP_FLOAT: aValue = mDisplay->mFloat; break;
+ case PROP_CLEAR: aValue = mDisplay->mClear; break;
+ case PROP_DISPLAY: aValue = mDisplay->mDisplay; break;
+ case PROP_DIRECTION: aValue = mDisplay->mDirection; break;
+ case PROP_VISIBILITY: aValue = mDisplay->mVisibility; break;
+ case PROP_OVERFLOW: aValue = mDisplay->mOverflow; break;
+ case PROP_FILTER: aValue = mDisplay->mFilter; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ case PROP_CLIP_TOP:
+ case PROP_CLIP_RIGHT:
+ case PROP_CLIP_BOTTOM:
+ case PROP_CLIP_LEFT:
+ if ((nsnull != mDisplay) && (nsnull != mDisplay->mClip)) {
+ switch(aProperty) {
+ case PROP_CLIP_TOP: aValue = mDisplay->mClip->mTop; break;
+ case PROP_CLIP_RIGHT: aValue = mDisplay->mClip->mRight; break;
+ case PROP_CLIP_BOTTOM: aValue = mDisplay->mClip->mBottom; break;
+ case PROP_CLIP_LEFT: aValue = mDisplay->mClip->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
// nsCSSMargin
case PROP_MARGIN_TOP:
case PROP_MARGIN_RIGHT:
@@ -2060,12 +2082,12 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_WIDTH:
case PROP_BORDER_BOTTOM_WIDTH:
case PROP_BORDER_LEFT_WIDTH:
- if ((nsnull != mMargin) && (nsnull != mMargin->mBorder)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderWidth)) {
switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: aValue = mMargin->mBorder->mTop; break;
- case PROP_BORDER_RIGHT_WIDTH: aValue = mMargin->mBorder->mRight; break;
- case PROP_BORDER_BOTTOM_WIDTH: aValue = mMargin->mBorder->mBottom; break;
- case PROP_BORDER_LEFT_WIDTH: aValue = mMargin->mBorder->mLeft; break;
+ case PROP_BORDER_TOP_WIDTH: aValue = mMargin->mBorderWidth->mTop; break;
+ case PROP_BORDER_RIGHT_WIDTH: aValue = mMargin->mBorderWidth->mRight; break;
+ case PROP_BORDER_BOTTOM_WIDTH: aValue = mMargin->mBorderWidth->mBottom; break;
+ case PROP_BORDER_LEFT_WIDTH: aValue = mMargin->mBorderWidth->mLeft; break;
}
}
else {
@@ -2077,12 +2099,12 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_COLOR:
case PROP_BORDER_BOTTOM_COLOR:
case PROP_BORDER_LEFT_COLOR:
- if ((nsnull != mMargin) && (nsnull != mMargin->mColor)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderColor)) {
switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: aValue = mMargin->mColor->mTop; break;
- case PROP_BORDER_RIGHT_COLOR: aValue = mMargin->mColor->mRight; break;
- case PROP_BORDER_BOTTOM_COLOR: aValue = mMargin->mColor->mBottom; break;
- case PROP_BORDER_LEFT_COLOR: aValue = mMargin->mColor->mLeft; break;
+ case PROP_BORDER_TOP_COLOR: aValue = mMargin->mBorderColor->mTop; break;
+ case PROP_BORDER_RIGHT_COLOR: aValue = mMargin->mBorderColor->mRight; break;
+ case PROP_BORDER_BOTTOM_COLOR: aValue = mMargin->mBorderColor->mBottom; break;
+ case PROP_BORDER_LEFT_COLOR: aValue = mMargin->mBorderColor->mLeft; break;
}
}
else {
@@ -2094,12 +2116,27 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_STYLE:
case PROP_BORDER_BOTTOM_STYLE:
case PROP_BORDER_LEFT_STYLE:
- if ((nsnull != mMargin) && (nsnull != mMargin->mStyle)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderStyle)) {
switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: aValue = mMargin->mStyle->mTop; break;
- case PROP_BORDER_RIGHT_STYLE: aValue = mMargin->mStyle->mRight; break;
- case PROP_BORDER_BOTTOM_STYLE: aValue = mMargin->mStyle->mBottom; break;
- case PROP_BORDER_LEFT_STYLE: aValue = mMargin->mStyle->mLeft; break;
+ case PROP_BORDER_TOP_STYLE: aValue = mMargin->mBorderStyle->mTop; break;
+ case PROP_BORDER_RIGHT_STYLE: aValue = mMargin->mBorderStyle->mRight; break;
+ case PROP_BORDER_BOTTOM_STYLE: aValue = mMargin->mBorderStyle->mBottom; break;
+ case PROP_BORDER_LEFT_STYLE: aValue = mMargin->mBorderStyle->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ if (nsnull != mMargin) {
+ switch (aProperty) {
+ case PROP_OUTLINE_WIDTH: aValue = mMargin->mOutlineWidth; break;
+ case PROP_OUTLINE_COLOR: aValue = mMargin->mOutlineColor; break;
+ case PROP_OUTLINE_STYLE: aValue = mMargin->mOutlineStyle; break;
}
}
else {
@@ -2110,17 +2147,21 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
// nsCSSPosition
case PROP_POSITION:
case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
case PROP_Z_INDEX:
if (nsnull != mPosition) {
switch (aProperty) {
case PROP_POSITION: aValue = mPosition->mPosition; break;
case PROP_WIDTH: aValue = mPosition->mWidth; break;
+ case PROP_MIN_WIDTH: aValue = mPosition->mMinWidth; break;
+ case PROP_MAX_WIDTH: aValue = mPosition->mMaxWidth; break;
case PROP_HEIGHT: aValue = mPosition->mHeight; break;
- case PROP_LEFT: aValue = mPosition->mLeft; break;
- case PROP_TOP: aValue = mPosition->mTop; break;
+ case PROP_MIN_HEIGHT: aValue = mPosition->mMinHeight; break;
+ case PROP_MAX_HEIGHT: aValue = mPosition->mMaxHeight; break;
case PROP_Z_INDEX: aValue = mPosition->mZIndex; break;
}
}
@@ -2129,6 +2170,23 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ if ((nsnull != mPosition) && (nsnull != mPosition->mOffset)) {
+ switch (aProperty) {
+ case PROP_TOP: aValue = mPosition->mOffset->mTop; break;
+ case PROP_RIGHT: aValue = mPosition->mOffset->mRight; break;
+ case PROP_BOTTOM: aValue = mPosition->mOffset->mBottom; break;
+ case PROP_LEFT: aValue = mPosition->mOffset->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
// nsCSSList
case PROP_LIST_STYLE_TYPE:
case PROP_LIST_STYLE_IMAGE:
@@ -2145,23 +2203,19 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
- // nsCSSDisplay
- case PROP_FLOAT:
- case PROP_CLEAR:
- case PROP_DISPLAY:
- case PROP_DIRECTION:
- case PROP_VISIBILITY:
- case PROP_OVERFLOW:
- case PROP_FILTER:
- if (nsnull != mDisplay) {
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ if (nsnull != mTable) {
switch (aProperty) {
- case PROP_FLOAT: aValue = mDisplay->mFloat; break;
- case PROP_CLEAR: aValue = mDisplay->mClear; break;
- case PROP_DISPLAY: aValue = mDisplay->mDisplay; break;
- case PROP_DIRECTION: aValue = mDisplay->mDirection; break;
- case PROP_VISIBILITY: aValue = mDisplay->mVisibility; break;
- case PROP_OVERFLOW: aValue = mDisplay->mOverflow; break;
- case PROP_FILTER: aValue = mDisplay->mFilter; break;
+ case PROP_BORDER_COLLAPSE: aValue = mTable->mBorderCollapse; break;
+ case PROP_BORDER_SPACING: aValue = mTable->mBorderSpacing; break;
+ case PROP_CAPTION_SIDE: aValue = mTable->mCaptionSide; break;
+ case PROP_EMPTY_CELLS: aValue = mTable->mEmptyCells; break;
+ case PROP_TABLE_LAYOUT: aValue = mTable->mLayout; break;
}
}
else {
@@ -2169,16 +2223,21 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
- case PROP_CLIP_TOP:
- case PROP_CLIP_RIGHT:
- case PROP_CLIP_BOTTOM:
- case PROP_CLIP_LEFT:
- if ((nsnull != mDisplay) && (nsnull != mDisplay->mClip)) {
- switch(aProperty) {
- case PROP_CLIP_TOP: aValue = mDisplay->mClip->mTop; break;
- case PROP_CLIP_RIGHT: aValue = mDisplay->mClip->mRight; break;
- case PROP_CLIP_BOTTOM: aValue = mDisplay->mClip->mBottom; break;
- case PROP_CLIP_LEFT: aValue = mDisplay->mClip->mLeft; break;
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ if (nsnull != mBreaks) {
+ switch (aProperty) {
+ case PROP_ORPHANS: aValue = mBreaks->mOrphans; break;
+ case PROP_WIDOWS: aValue = mBreaks->mWidows; break;
+ case PROP_PAGE: aValue = mBreaks->mPage; break;
+ case PROP_PAGE_BREAK_AFTER: aValue = mBreaks->mPageBreakAfter; break;
+ case PROP_PAGE_BREAK_BEFORE: aValue = mBreaks->mPageBreakBefore; break;
+ case PROP_PAGE_BREAK_INSIDE: aValue = mBreaks->mPageBreakInside; break;
}
}
else {
@@ -2186,13 +2245,99 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ if (nsnull != mPage) {
+ switch (aProperty) {
+ case PROP_MARKS: aValue = mPage->mMarks; break;
+ case PROP_SIZE: aValue = mPage->mSize; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ if (nsnull != mContent) {
+ switch (aProperty) {
+ case PROP_CONTENT: aValue = mContent->mContent; break;
+ case PROP_COUNTER_INCREMENT: aValue = mContent->mCounterIncrement; break;
+ case PROP_COUNTER_RESET: aValue = mContent->mCounterReset; break;
+ case PROP_MARKER_OFFSET: aValue = mContent->mMarkerOffset; break;
+ case PROP_QUOTES: aValue = mContent->mQuotes; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ if (nsnull != mAural) {
+ switch (aProperty) {
+ case PROP_AZIMUTH: aValue = mAural->mAzimuth; break;
+ case PROP_ELEVATION: aValue = mAural->mElevation; break;
+ case PROP_CUE_AFTER: aValue = mAural->mCueAfter; break;
+ case PROP_CUE_BEFORE: aValue = mAural->mCueBefore; break;
+ case PROP_PAUSE_AFTER: aValue = mAural->mPauseAfter; break;
+ case PROP_PAUSE_BEFORE: aValue = mAural->mPauseBefore; break;
+ case PROP_PITCH: aValue = mAural->mPitch; break;
+ case PROP_PITCH_RANGE: aValue = mAural->mPitchRange; break;
+ case PROP_PLAY_DURING: aValue = mAural->mPlayDuring; break;
+ case PROP_RICHNESS: aValue = mAural->mRichness; break;
+ case PROP_SPEAK: aValue = mAural->mSpeak; break;
+ case PROP_SPEAK_HEADER: aValue = mAural->mSpeakHeader; break;
+ case PROP_SPEAK_NUMERAL: aValue = mAural->mSpeakNumeral; break;
+ case PROP_SPEAK_PUNCTUATION: aValue = mAural->mSpeakPunctuation; break;
+ case PROP_SPEECH_RATE: aValue = mAural->mSpeechRate; break;
+ case PROP_STRESS: aValue = mAural->mStress; break;
+ case PROP_VOICE_FAMILY: aValue = mAural->mVoiceFamily; break;
+ case PROP_VOLUME: aValue = mAural->mVolume; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+
+ // Shorthands
case PROP_BACKGROUND:
case PROP_BORDER:
case PROP_CLIP:
+ case PROP_CUE:
case PROP_FONT:
case PROP_LIST_STYLE:
case PROP_MARGIN:
+ case PROP_OUTLINE:
case PROP_PADDING:
+ case PROP_PAUSE:
+ case PROP_TEXT_SHADOW:
case PROP_BACKGROUND_POSITION:
case PROP_BORDER_TOP:
case PROP_BORDER_RIGHT:
@@ -2251,109 +2396,284 @@ nsresult CSSDeclarationImpl::GetValue(const nsString& aProperty, nsString& aValu
return GetValue(propID, aValue);
}
-nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsString& aValue)
+PRBool CSSDeclarationImpl::AppendValueToString(PRInt32 aProperty, nsString& aResult)
{
nsCSSValue value;
GetValue(aProperty, value);
+ return AppendValueToString(aProperty, value, aResult);
+}
- nsCSSUnit unit = value.GetUnit();
-
- aValue.Truncate(0);
+PRBool CSSDeclarationImpl::AppendValueToString(PRInt32 aProperty, const nsCSSValue& aValue, nsString& aResult)
+{
+ nsCSSUnit unit = aValue.GetUnit();
if (eCSSUnit_Null == unit) {
- return NS_OK;
+ return PR_FALSE;
}
if (eCSSUnit_String == unit) {
nsAutoString buffer;
- value.GetStringValue(buffer);
- aValue.Append(buffer);
+ aValue.GetStringValue(buffer);
+ aResult.Append(buffer);
}
else if (eCSSUnit_Integer == unit) {
- aValue.Append(value.GetIntValue(), 10);
+ aResult.Append(aValue.GetIntValue(), 10);
}
else if (eCSSUnit_Enumerated == unit) {
if (PROP_TEXT_DECORATION == aProperty) {
- PRInt32 intValue = value.GetIntValue();
+ PRInt32 intValue = aValue.GetIntValue();
if (NS_STYLE_TEXT_DECORATION_NONE != intValue) {
PRInt32 mask;
for (mask = NS_STYLE_TEXT_DECORATION_UNDERLINE;
mask <= NS_STYLE_TEXT_DECORATION_BLINK;
mask <<= 1) {
if ((mask & intValue) == mask) {
- aValue.Append(nsCSSProps::LookupProperty(aProperty, mask));
+ aResult.Append(nsCSSProps::LookupProperty(aProperty, mask));
intValue &= ~mask;
if (0 != intValue) { // more left
- aValue.Append(' ');
+ aResult.Append(' ');
}
}
}
}
else {
- aValue.Append(nsCSSProps::LookupProperty(aProperty, NS_STYLE_TEXT_DECORATION_NONE));
+ aResult.Append(nsCSSProps::LookupProperty(aProperty, NS_STYLE_TEXT_DECORATION_NONE));
}
}
else {
- const char* name = nsCSSProps::LookupProperty(aProperty, value.GetIntValue());
+ const char* name = nsCSSProps::LookupProperty(aProperty, aValue.GetIntValue());
if (name != nsnull) {
- aValue.Append(name);
+ aResult.Append(name);
}
}
}
else if (eCSSUnit_Color == unit){
- nscolor color = value.GetColorValue();
+ nscolor color = aValue.GetColorValue();
const char* name = RGBToCSSString(color);
if (name != nsnull)
- aValue.Append(name);
+ aResult.Append(name);
else
{
- aValue.Append("rgb(");
- aValue.Append(NS_GET_R(color), 10);
- aValue.Append(",");
- aValue.Append(NS_GET_G(color), 10);
- aValue.Append(",");
- aValue.Append(NS_GET_B(color), 10);
- aValue.Append(')');
+ aResult.Append("rgb(");
+ aResult.Append(NS_GET_R(color), 10);
+ aResult.Append(",");
+ aResult.Append(NS_GET_G(color), 10);
+ aResult.Append(",");
+ aResult.Append(NS_GET_B(color), 10);
+ aResult.Append(')');
}
}
else if (eCSSUnit_Percent == unit) {
- aValue.Append(value.GetPercentValue() * 100.0f);
+ aResult.Append(aValue.GetPercentValue() * 100.0f);
}
else if (eCSSUnit_Percent < unit) { // length unit
- aValue.Append(value.GetFloatValue());
+ aResult.Append(aValue.GetFloatValue());
}
switch (unit) {
case eCSSUnit_Null: break;
- case eCSSUnit_Auto: aValue.Append("auto"); break;
- case eCSSUnit_Inherit: aValue.Append("inherit"); break;
- case eCSSUnit_None: aValue.Append("none"); break;
- case eCSSUnit_Normal: aValue.Append("normal"); break;
+ case eCSSUnit_Auto: aResult.Append("auto"); break;
+ case eCSSUnit_Inherit: aResult.Append("inherit"); break;
+ case eCSSUnit_None: aResult.Append("none"); break;
+ case eCSSUnit_Normal: aResult.Append("normal"); break;
case eCSSUnit_String: break;
case eCSSUnit_Integer: break;
case eCSSUnit_Enumerated: break;
case eCSSUnit_Color: break;
- case eCSSUnit_Percent: aValue.Append("%"); break;
+ case eCSSUnit_Percent: aResult.Append("%"); break;
case eCSSUnit_Number: break;
- case eCSSUnit_Inch: aValue.Append("in"); break;
- case eCSSUnit_Foot: aValue.Append("ft"); break;
- case eCSSUnit_Mile: aValue.Append("mi"); break;
- case eCSSUnit_Millimeter: aValue.Append("mm"); break;
- case eCSSUnit_Centimeter: aValue.Append("cm"); break;
- case eCSSUnit_Meter: aValue.Append("m"); break;
- case eCSSUnit_Kilometer: aValue.Append("km"); break;
- case eCSSUnit_Point: aValue.Append("pt"); break;
- case eCSSUnit_Pica: aValue.Append("pc"); break;
- case eCSSUnit_Didot: aValue.Append("dt"); break;
- case eCSSUnit_Cicero: aValue.Append("cc"); break;
- case eCSSUnit_EM: aValue.Append("em"); break;
- case eCSSUnit_EN: aValue.Append("en"); break;
- case eCSSUnit_XHeight: aValue.Append("ex"); break;
- case eCSSUnit_CapHeight: aValue.Append("cap"); break;
- case eCSSUnit_Pixel: aValue.Append("px"); break;
+ case eCSSUnit_Inch: aResult.Append("in"); break;
+ case eCSSUnit_Foot: aResult.Append("ft"); break;
+ case eCSSUnit_Mile: aResult.Append("mi"); break;
+ case eCSSUnit_Millimeter: aResult.Append("mm"); break;
+ case eCSSUnit_Centimeter: aResult.Append("cm"); break;
+ case eCSSUnit_Meter: aResult.Append("m"); break;
+ case eCSSUnit_Kilometer: aResult.Append("km"); break;
+ case eCSSUnit_Point: aResult.Append("pt"); break;
+ case eCSSUnit_Pica: aResult.Append("pc"); break;
+ case eCSSUnit_Didot: aResult.Append("dt"); break;
+ case eCSSUnit_Cicero: aResult.Append("cc"); break;
+ case eCSSUnit_EM: aResult.Append("em"); break;
+ case eCSSUnit_EN: aResult.Append("en"); break;
+ case eCSSUnit_XHeight: aResult.Append("ex"); break;
+ case eCSSUnit_CapHeight: aResult.Append("cap"); break;
+ case eCSSUnit_Pixel: aResult.Append("px"); break;
}
+ return PR_TRUE;
+}
+
+#define HAS_VALUE(strct,data) \
+ ((nsnull != strct) && (eCSSUnit_Null != strct->data.GetUnit()))
+#define HAS_RECT(strct,rect) \
+ ((nsnull != strct) && (nsnull != strct->rect) && \
+ (eCSSUnit_Null != strct->rect->mTop.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mRight.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mBottom.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mLeft.GetUnit()))
+
+nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsString& aValue)
+{
+ aValue.Truncate(0);
+
+ // shorthands
+ switch (aProperty) {
+ case PROP_BACKGROUND:
+ if (AppendValueToString(PROP_BACKGROUND_COLOR, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_IMAGE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_REPEAT, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_ATTACHMENT, aValue)) aValue.Append(' ');
+ if (HAS_VALUE(mColor,mBackPositionX) && HAS_VALUE(mColor,mBackPositionY)) {
+ AppendValueToString(PROP_BACKGROUND_X_POSITION, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_BACKGROUND_Y_POSITION, aValue);
+ }
+ break;
+ case PROP_BORDER:
+ if (AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_TOP_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue);
+ break;
+ case PROP_CLIP:
+ if (HAS_RECT(mDisplay,mClip)) {
+ aValue.Append("rect(");
+ AppendValueToString(PROP_CLIP_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_LEFT, aValue);
+ aValue.Append(")");
+ }
+ break;
+ case PROP_CUE:
+ if (HAS_VALUE(mAural,mCueAfter) && HAS_VALUE(mAural,mCueBefore)) {
+ AppendValueToString(PROP_CUE_AFTER, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_CUE_BEFORE, aValue);
+ }
+ break;
+ case PROP_FONT:
+ if (HAS_VALUE(mFont,mSize)) {
+ if (AppendValueToString(PROP_FONT_STYLE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_FONT_VARIANT, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_FONT_WEIGHT, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_FONT_SIZE, aValue);
+ if (HAS_VALUE(mText,mLineHeight)) {
+ aValue.Append('/');
+ AppendValueToString(PROP_LINE_HEIGHT, aValue);
+ }
+ aValue.Append(' ');
+ AppendValueToString(PROP_FONT_FAMILY, aValue);
+ }
+ break;
+ case PROP_LIST_STYLE:
+ if (AppendValueToString(PROP_LIST_STYLE_TYPE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_LIST_STYLE_POSITION, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_LIST_STYLE_IMAGE, aValue);
+ break;
+ case PROP_MARGIN:
+ if (HAS_RECT(mMargin,mMargin)) {
+ AppendValueToString(PROP_MARGIN_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_LEFT, aValue);
+ }
+ break;
+ case PROP_OUTLINE:
+ if (AppendValueToString(PROP_OUTLINE_COLOR, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_OUTLINE_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_OUTLINE_WIDTH, aValue);
+ break;
+ case PROP_PADDING:
+ if (HAS_RECT(mMargin,mPadding)) {
+ AppendValueToString(PROP_PADDING_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_LEFT, aValue);
+ }
+ break;
+ case PROP_PAUSE:
+ if (HAS_VALUE(mAural,mPauseAfter) && HAS_VALUE(mAural,mPauseBefore)) {
+ AppendValueToString(PROP_PAUSE_AFTER, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_PAUSE_BEFORE, aValue);
+ }
+ break;
+ case PROP_TEXT_SHADOW:
+ if ((nsnull != mText) && (nsnull != mText->mTextShadow)) {
+ if (eCSSUnit_Color == mText->mTextShadow->mColor.GetUnit()) {
+ nsCSSShadow* shadow = mText->mTextShadow;
+ while (nsnull != shadow) {
+ if (AppendValueToString(PROP_TEXT_SHADOW_COLOR, shadow->mColor, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_TEXT_SHADOW_X, shadow->mXOffset, aValue)) {
+ aValue.Append(' ');
+ AppendValueToString(PROP_TEXT_SHADOW_Y, shadow->mYOffset, aValue);
+ aValue.Append(' ');
+ }
+ if (AppendValueToString(PROP_TEXT_SHADOW_RADIUS, shadow->mRadius, aValue)) aValue.Append(' ');
+ shadow = shadow->mNext;
+ }
+ }
+ else { // none or inherit
+ AppendValueToString(PROP_TEXT_SHADOW_COLOR, aValue);
+ }
+ }
+ break;
+ case PROP_BACKGROUND_POSITION:
+ if (HAS_VALUE(mColor,mBackPositionX) && HAS_VALUE(mColor,mBackPositionY)) {
+ AppendValueToString(PROP_BACKGROUND_X_POSITION, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_BACKGROUND_Y_POSITION, aValue);
+ }
+ break;
+ case PROP_BORDER_TOP:
+ if (AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_TOP_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue);
+ break;
+ case PROP_BORDER_RIGHT:
+ if (AppendValueToString(PROP_BORDER_RIGHT_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_RIGHT_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_COLOR, aValue);
+ break;
+ case PROP_BORDER_BOTTOM:
+ if (AppendValueToString(PROP_BORDER_BOTTOM_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_BOTTOM_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_COLOR, aValue);
+ break;
+ case PROP_BORDER_LEFT:
+ if (AppendValueToString(PROP_BORDER_LEFT_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_LEFT_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_COLOR, aValue);
+ break;
+ case PROP_BORDER_COLOR:
+ if (HAS_RECT(mMargin,mBorderColor)) {
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_COLOR, aValue);
+ }
+ break;
+ case PROP_BORDER_STYLE:
+ if (HAS_RECT(mMargin,mBorderStyle)) {
+ AppendValueToString(PROP_BORDER_TOP_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_STYLE, aValue);
+ }
+ break;
+ case PROP_BORDER_WIDTH:
+ if (HAS_RECT(mMargin,mBorderWidth)) {
+ AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_WIDTH, aValue);
+ }
+ break;
+ default:
+ AppendValueToString(aProperty, aValue);
+ break;
+ }
return NS_OK;
}
@@ -2434,6 +2754,9 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mText) {
mText->List(out);
}
+ if (nsnull != mDisplay) {
+ mDisplay->List(out);
+ }
if (nsnull != mMargin) {
mMargin->List(out);
}
@@ -2443,8 +2766,20 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mList) {
mList->List(out);
}
- if (nsnull != mDisplay) {
- mDisplay->List(out);
+ if (nsnull != mTable) {
+ mTable->List(out);
+ }
+ if (nsnull != mBreaks) {
+ mBreaks->List(out);
+ }
+ if (nsnull != mPage) {
+ mPage->List(out);
+ }
+ if (nsnull != mContent) {
+ mContent->List(out);
+ }
+ if (nsnull != mAural) {
+ mAural->List(out);
}
fputs("}", out);
@@ -2501,78 +2836,3 @@ NS_HTML nsresult
}
-
-
-/*
-font
-===========
-font-family: string (list)
-font-style: enum
-font-variant: enum (ie: small caps)
-font-weight: enum
-font-size: abs, pct, enum, +-1
-
-
-color/background
-=============
-color: color
-background-color: color
-background-image: url(string)
-background-repeat: enum
-background-attachment: enum
-background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?))
-cursor: enum
-cursor-image: url(string)
-
-
-text
-=======
-word-spacing: abs, "normal"
-letter-spacing: abs, "normal"
-text-decoration: enum
-vertical-align: enum, pct
-text-transform: enum
-text-align: enum
-text-indent: abs, pct
-line-height: "normal", abs, pct, number-factor
-white-space: enum
-
-margin
-=======
-margin-top -right -bottom -left: "auto", abs, pct
-padding-top -right -bottom -left: abs, pct
-border-top -right -bottom -left-width: enum, abs
-border-top -right -bottom -left-color: color
-border-top -right -bottom -left-style: enum
-
-size
-=======
-position: enum
-width: abs, pct, "auto"
-height: abs, pct, "auto"
-left: abs, pct, "auto"
-top: abs, pct, "auto"
-clip: shape, "auto" (shape: rect - abs, auto)
-overflow: enum
-z-index: int, auto
-visibity: enum
-
-display
-=======
-float: enum
-clear: enum
-direction: enum
-display: enum
-
-filter: string
-
-list
-========
-list-style-type: enum
-list-style-image: url, "none"
-list-style-position: enum (bool? in/out)
-
-*/
-
-
-
diff --git a/mozilla/layout/style/nsCSSStruct.cpp b/mozilla/layout/style/nsCSSStruct.cpp
index 945f4bb3114..0da611fecf8 100644
--- a/mozilla/layout/style/nsCSSStruct.cpp
+++ b/mozilla/layout/style/nsCSSStruct.cpp
@@ -188,325 +188,15 @@ static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID);
static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID);
static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID);
static NS_DEFINE_IID(kCSSListSID, NS_CSS_LIST_SID);
+static NS_DEFINE_IID(kCSSTableSID, NS_CSS_TABLE_SID);
+static NS_DEFINE_IID(kCSSBreaksSID, NS_CSS_BREAKS_SID);
+static NS_DEFINE_IID(kCSSPageSID, NS_CSS_PAGE_SID);
+static NS_DEFINE_IID(kCSSContentSID, NS_CSS_CONTENT_SID);
+static NS_DEFINE_IID(kCSSAuralSID, NS_CSS_AURAL_SID);
static NS_DEFINE_IID(kICSSDeclarationIID, NS_ICSS_DECLARATION_IID);
-nsCSSValue::nsCSSValue(nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION(mUnit <= eCSSUnit_Normal, "not a valueless unit");
- if (aUnit > eCSSUnit_Normal) {
- mUnit = eCSSUnit_Null;
- }
- mValue.mInt = 0;
-}
-
-nsCSSValue::nsCSSValue(PRInt32 aValue, nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit), "not an int value");
- if ((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit)) {
- mValue.mInt = aValue;
- }
- else {
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
- }
-}
-
-nsCSSValue::nsCSSValue(float aValue, nsCSSUnit aUnit)
- : mUnit(aUnit)
-{
- NS_ASSERTION(eCSSUnit_Percent <= aUnit, "not a float value");
- if (eCSSUnit_Percent <= aUnit) {
- mValue.mFloat = aValue;
- }
- else {
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
- }
-}
-
-nsCSSValue::nsCSSValue(const nsString& aValue)
- : mUnit(eCSSUnit_String)
-{
- mValue.mString = aValue.ToNewString();
-}
-
-nsCSSValue::nsCSSValue(nscolor aValue)
- : mUnit(eCSSUnit_Color)
-{
- mValue.mColor = aValue;
-}
-
-nsCSSValue::nsCSSValue(const nsCSSValue& aCopy)
- : mUnit(aCopy.mUnit)
-{
- if (eCSSUnit_String == mUnit) {
- if (nsnull != aCopy.mValue.mString) {
- mValue.mString = (aCopy.mValue.mString)->ToNewString();
- }
- else {
- mValue.mString = nsnull;
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- mValue.mInt = aCopy.mValue.mInt;
- }
- else if (eCSSUnit_Color == mUnit){
- mValue.mColor = aCopy.mValue.mColor;
- }
- else {
- mValue.mFloat = aCopy.mValue.mFloat;
- }
-}
-
-nsCSSValue::~nsCSSValue(void)
-{
- Reset();
-}
-
-nsCSSValue& nsCSSValue::operator=(const nsCSSValue& aCopy)
-{
- Reset();
- mUnit = aCopy.mUnit;
- if (eCSSUnit_String == mUnit) {
- if (nsnull != aCopy.mValue.mString) {
- mValue.mString = (aCopy.mValue.mString)->ToNewString();
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- mValue.mInt = aCopy.mValue.mInt;
- }
- else if (eCSSUnit_Color == mUnit){
- mValue.mColor = aCopy.mValue.mColor;
- }
- else {
- mValue.mFloat = aCopy.mValue.mFloat;
- }
- return *this;
-}
-
-PRBool nsCSSValue::operator==(const nsCSSValue& aOther) const
-{
- if (mUnit == aOther.mUnit) {
- if (eCSSUnit_String == mUnit) {
- if (nsnull == mValue.mString) {
- if (nsnull == aOther.mValue.mString) {
- return PR_TRUE;
- }
- }
- else if (nsnull != aOther.mValue.mString) {
- return mValue.mString->Equals(*(aOther.mValue.mString));
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- return PRBool(mValue.mInt == aOther.mValue.mInt);
- }
- else if (eCSSUnit_Color == mUnit){
- return PRBool(mValue.mColor == aOther.mValue.mColor);
- }
- else {
- return PRBool(mValue.mFloat == aOther.mValue.mFloat);
- }
- }
- return PR_FALSE;
-}
-
-nscoord nsCSSValue::GetLengthTwips(void) const
-{
- NS_ASSERTION(IsFixedLengthUnit(), "not a fixed length unit");
-
- if (IsFixedLengthUnit()) {
- switch (mUnit) {
- case eCSSUnit_Inch:
- return NS_INCHES_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Foot:
- return NS_FEET_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Mile:
- return NS_MILES_TO_TWIPS(mValue.mFloat);
-
- case eCSSUnit_Millimeter:
- return NS_MILLIMETERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Centimeter:
- return NS_CENTIMETERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Meter:
- return NS_METERS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Kilometer:
- return NS_KILOMETERS_TO_TWIPS(mValue.mFloat);
-
- case eCSSUnit_Point:
- return NSFloatPointsToTwips(mValue.mFloat);
- case eCSSUnit_Pica:
- return NS_PICAS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Didot:
- return NS_DIDOTS_TO_TWIPS(mValue.mFloat);
- case eCSSUnit_Cicero:
- return NS_CICEROS_TO_TWIPS(mValue.mFloat);
- }
- }
- return 0;
-}
-
-void nsCSSValue::Reset(void)
-{
- if ((eCSSUnit_String == mUnit) && (nsnull != mValue.mString)) {
- delete mValue.mString;
- }
- mUnit = eCSSUnit_Null;
- mValue.mInt = 0;
-};
-
-void nsCSSValue::SetIntValue(PRInt32 aValue, nsCSSUnit aUnit)
-{
- NS_ASSERTION((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit), "not an int value");
- Reset();
- if ((eCSSUnit_Integer == aUnit) ||
- (eCSSUnit_Enumerated == aUnit)) {
- mUnit = aUnit;
- mValue.mInt = aValue;
- }
-}
-
-void nsCSSValue::SetPercentValue(float aValue)
-{
- Reset();
- mUnit = eCSSUnit_Percent;
- mValue.mFloat = aValue;
-}
-
-void nsCSSValue::SetFloatValue(float aValue, nsCSSUnit aUnit)
-{
- NS_ASSERTION(eCSSUnit_Number <= aUnit, "not a float value");
- Reset();
- if (eCSSUnit_Number <= aUnit) {
- mUnit = aUnit;
- mValue.mFloat = aValue;
- }
-}
-
-void nsCSSValue::SetStringValue(const nsString& aValue)
-{
- Reset();
- mUnit = eCSSUnit_String;
- mValue.mString = aValue.ToNewString();
-}
-
-void nsCSSValue::SetColorValue(nscolor aValue)
-{
- Reset();
- mUnit = eCSSUnit_Color;
- mValue.mColor = aValue;
-}
-
-void nsCSSValue::SetAutoValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Auto;
-}
-
-void nsCSSValue::SetInheritValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Inherit;
-}
-
-void nsCSSValue::SetNoneValue(void)
-{
- Reset();
- mUnit = eCSSUnit_None;
-}
-
-void nsCSSValue::SetNormalValue(void)
-{
- Reset();
- mUnit = eCSSUnit_Normal;
-}
-
-void nsCSSValue::AppendToString(nsString& aBuffer, PRInt32 aPropID) const
-{
- if (eCSSUnit_Null == mUnit) {
- return;
- }
-
- if (-1 < aPropID) {
- aBuffer.Append(nsCSSProps::kNameTable[aPropID].name);
- aBuffer.Append(": ");
- }
-
- if (eCSSUnit_String == mUnit) {
- if (nsnull != mValue.mString) {
- aBuffer.Append('"');
- aBuffer.Append(*(mValue.mString));
- aBuffer.Append('"');
- }
- else {
- aBuffer.Append("null str");
- }
- }
- else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) {
- aBuffer.Append(mValue.mInt, 10);
- aBuffer.Append("[0x");
- aBuffer.Append(mValue.mInt, 16);
- aBuffer.Append(']');
- }
- else if (eCSSUnit_Color == mUnit){
- aBuffer.Append("(0x");
- aBuffer.Append(NS_GET_R(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_G(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_B(mValue.mColor), 16);
- aBuffer.Append(" 0x");
- aBuffer.Append(NS_GET_A(mValue.mColor), 16);
- aBuffer.Append(')');
- }
- else if (eCSSUnit_Percent == mUnit) {
- aBuffer.Append(mValue.mFloat * 100.0f);
- }
- else if (eCSSUnit_Percent < mUnit) {
- aBuffer.Append(mValue.mFloat);
- }
-
- switch (mUnit) {
- case eCSSUnit_Null: break;
- case eCSSUnit_Auto: aBuffer.Append("auto"); break;
- case eCSSUnit_Inherit: aBuffer.Append("inherit"); break;
- case eCSSUnit_None: aBuffer.Append("none"); break;
- case eCSSUnit_String: break;
- case eCSSUnit_Integer: aBuffer.Append("int"); break;
- case eCSSUnit_Enumerated: aBuffer.Append("enum"); break;
- case eCSSUnit_Color: aBuffer.Append("rbga"); break;
- case eCSSUnit_Percent: aBuffer.Append("%"); break;
- case eCSSUnit_Number: aBuffer.Append("#"); break;
- case eCSSUnit_Inch: aBuffer.Append("in"); break;
- case eCSSUnit_Foot: aBuffer.Append("ft"); break;
- case eCSSUnit_Mile: aBuffer.Append("mi"); break;
- case eCSSUnit_Millimeter: aBuffer.Append("mm"); break;
- case eCSSUnit_Centimeter: aBuffer.Append("cm"); break;
- case eCSSUnit_Meter: aBuffer.Append("m"); break;
- case eCSSUnit_Kilometer: aBuffer.Append("km"); break;
- case eCSSUnit_Point: aBuffer.Append("pt"); break;
- case eCSSUnit_Pica: aBuffer.Append("pc"); break;
- case eCSSUnit_Didot: aBuffer.Append("dt"); break;
- case eCSSUnit_Cicero: aBuffer.Append("cc"); break;
- case eCSSUnit_EM: aBuffer.Append("em"); break;
- case eCSSUnit_EN: aBuffer.Append("en"); break;
- case eCSSUnit_XHeight: aBuffer.Append("ex"); break;
- case eCSSUnit_CapHeight: aBuffer.Append("cap"); break;
- case eCSSUnit_Pixel: aBuffer.Append("px"); break;
- }
- aBuffer.Append(' ');
-}
-
-void nsCSSValue::ToString(nsString& aBuffer, PRInt32 aPropID) const
-{
- aBuffer.Truncate();
- AppendToString(aBuffer, aPropID);
-}
+// --- nsCSSFont -----------------
const nsID& nsCSSFont::GetID(void)
{
@@ -524,10 +214,14 @@ void nsCSSFont::List(FILE* out, PRInt32 aIndent) const
mVariant.AppendToString(buffer, PROP_FONT_VARIANT);
mWeight.AppendToString(buffer, PROP_FONT_WEIGHT);
mSize.AppendToString(buffer, PROP_FONT_SIZE);
+ mSizeAdjust.AppendToString(buffer, PROP_FONT_SIZE_ADJUST);
+ mStretch.AppendToString(buffer, PROP_FONT_STRETCH);
fputs(buffer, out);
}
+// --- nsCSSColor -----------------
+
const nsID& nsCSSColor::GetID(void)
{
return kCSSColorSID;
@@ -553,6 +247,34 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSText -----------------
+
+nsCSSShadow::nsCSSShadow(void)
+ : mNext(nsnull)
+{
+}
+
+nsCSSShadow::~nsCSSShadow(void)
+{
+ if (nsnull != mNext) {
+ delete mNext;
+ }
+}
+
+// --- nsCSSText -----------------
+
+nsCSSText::nsCSSText(void)
+ : mTextShadow(nsnull)
+{
+}
+
+nsCSSText::~nsCSSText(void)
+{
+ if (nsnull != mTextShadow) {
+ delete mTextShadow;
+ }
+}
+
const nsID& nsCSSText::GetID(void)
{
return kCSSTextSID;
@@ -571,11 +293,29 @@ void nsCSSText::List(FILE* out, PRInt32 aIndent) const
mTextTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM);
mTextAlign.AppendToString(buffer, PROP_TEXT_ALIGN);
mTextIndent.AppendToString(buffer, PROP_TEXT_INDENT);
+ if (nsnull != mTextShadow) {
+ if (eCSSUnit_Color == mTextShadow->mColor.GetUnit()) {
+ nsCSSShadow* shadow = mTextShadow;
+ while (nsnull != shadow) {
+ shadow->mColor.AppendToString(buffer, PROP_TEXT_SHADOW_COLOR);
+ shadow->mXOffset.AppendToString(buffer, PROP_TEXT_SHADOW_X);
+ shadow->mYOffset.AppendToString(buffer, PROP_TEXT_SHADOW_Y);
+ shadow->mRadius.AppendToString(buffer, PROP_TEXT_SHADOW_RADIUS);
+ shadow = shadow->mNext;
+ }
+ }
+ else {
+ mTextShadow->mColor.AppendToString(buffer, PROP_TEXT_SHADOW);
+ }
+ }
+ mUnicodeBidi.AppendToString(buffer, PROP_UNICODE_BIDI);
mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT);
mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE);
fputs(buffer, out);
}
+// --- nsCSSRect -----------------
+
void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const
{
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
@@ -624,6 +364,8 @@ void nsCSSRect::List(FILE* out, PRInt32 aIndent, PRIntn aTRBL[]) const
fputs(buffer, out);
}
+// --- nsCSSDisplay -----------------
+
nsCSSDisplay::nsCSSDisplay(void)
: mClip(nsnull)
{
@@ -662,8 +404,11 @@ void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSMargin -----------------
+
nsCSSMargin::nsCSSMargin(void)
- : mMargin(nsnull), mPadding(nsnull), mBorder(nsnull), mColor(nsnull), mStyle(nsnull)
+ : mMargin(nsnull), mPadding(nsnull),
+ mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull)
{
}
@@ -675,14 +420,14 @@ nsCSSMargin::~nsCSSMargin(void)
if (nsnull != mPadding) {
delete mPadding;
}
- if (nsnull != mBorder) {
- delete mBorder;
+ if (nsnull != mBorderWidth) {
+ delete mBorderWidth;
}
- if (nsnull != mColor) {
- delete mColor;
+ if (nsnull != mBorderColor) {
+ delete mBorderColor;
}
- if (nsnull != mStyle) {
- delete mStyle;
+ if (nsnull != mBorderStyle) {
+ delete mBorderStyle;
}
}
@@ -693,8 +438,6 @@ const nsID& nsCSSMargin::GetID(void)
void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
{
- for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
-
if (nsnull != mMargin) {
static PRIntn trbl[] = {
PROP_MARGIN_TOP,
@@ -713,20 +456,42 @@ void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
};
mPadding->List(out, aIndent, trbl);
}
- if (nsnull != mBorder) {
+ if (nsnull != mBorderWidth) {
static PRIntn trbl[] = {
PROP_BORDER_TOP_WIDTH,
PROP_BORDER_RIGHT_WIDTH,
PROP_BORDER_BOTTOM_WIDTH,
PROP_BORDER_LEFT_WIDTH
};
- mBorder->List(out, aIndent, trbl);
+ mBorderWidth->List(out, aIndent, trbl);
}
- if (nsnull != mColor) {
- mColor->List(out, PROP_BORDER_COLOR, aIndent);
+ if (nsnull != mBorderColor) {
+ mBorderColor->List(out, PROP_BORDER_COLOR, aIndent);
}
- if (nsnull != mStyle) {
- mStyle->List(out, PROP_BORDER_STYLE, aIndent);
+ if (nsnull != mBorderStyle) {
+ mBorderStyle->List(out, PROP_BORDER_STYLE, aIndent);
+ }
+
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+ mOutlineWidth.AppendToString(buffer, PROP_OUTLINE_WIDTH);
+ mOutlineColor.AppendToString(buffer, PROP_OUTLINE_COLOR);
+ mOutlineStyle.AppendToString(buffer, PROP_OUTLINE_STYLE);
+ fputs(buffer, out);
+}
+
+// --- nsCSSPosition -----------------
+
+nsCSSPosition::nsCSSPosition(void)
+ : mOffset(nsnull)
+{
+}
+
+nsCSSPosition::~nsCSSPosition(void)
+{
+ if (nsnull != mOffset) {
+ delete mOffset;
}
}
@@ -743,13 +508,27 @@ void nsCSSPosition::List(FILE* out, PRInt32 aIndent) const
mPosition.AppendToString(buffer, PROP_POSITION);
mWidth.AppendToString(buffer, PROP_WIDTH);
+ mMinWidth.AppendToString(buffer, PROP_MIN_WIDTH);
+ mMaxWidth.AppendToString(buffer, PROP_MAX_WIDTH);
mHeight.AppendToString(buffer, PROP_HEIGHT);
- mLeft.AppendToString(buffer, PROP_LEFT);
- mTop.AppendToString(buffer, PROP_TOP);
+ mMinHeight.AppendToString(buffer, PROP_MIN_HEIGHT);
+ mMaxHeight.AppendToString(buffer, PROP_MAX_HEIGHT);
mZIndex.AppendToString(buffer, PROP_Z_INDEX);
fputs(buffer, out);
+
+ if (nsnull != mOffset) {
+ static PRIntn trbl[] = {
+ PROP_TOP,
+ PROP_RIGHT,
+ PROP_BOTTOM,
+ PROP_LEFT
+ };
+ mOffset->List(out, aIndent, trbl);
+ }
}
+// --- nsCSSList -----------------
+
const nsID& nsCSSList::GetID(void)
{
return kCSSListSID;
@@ -767,6 +546,130 @@ void nsCSSList::List(FILE* out, PRInt32 aIndent) const
fputs(buffer, out);
}
+// --- nsCSSTable -----------------
+
+const nsID& nsCSSTable::GetID(void)
+{
+ return kCSSTableSID;
+}
+
+void nsCSSTable::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mBorderCollapse.AppendToString(buffer, PROP_BORDER_COLLAPSE);
+ mBorderSpacing.AppendToString(buffer, PROP_BORDER_SPACING);
+ mCaptionSide.AppendToString(buffer, PROP_CAPTION_SIDE);
+ mEmptyCells.AppendToString(buffer, PROP_EMPTY_CELLS);
+ mLayout.AppendToString(buffer, PROP_TABLE_LAYOUT);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSBreaks -----------------
+
+const nsID& nsCSSBreaks::GetID(void)
+{
+ return kCSSBreaksSID;
+}
+
+void nsCSSBreaks::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mOrphans.AppendToString(buffer, PROP_ORPHANS);
+ mWidows.AppendToString(buffer, PROP_WIDOWS);
+ mPage.AppendToString(buffer, PROP_PAGE);
+ mPageBreakAfter.AppendToString(buffer, PROP_PAGE_BREAK_AFTER);
+ mPageBreakBefore.AppendToString(buffer, PROP_PAGE_BREAK_BEFORE);
+ mPageBreakInside.AppendToString(buffer, PROP_PAGE_BREAK_INSIDE);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSPage -----------------
+
+const nsID& nsCSSPage::GetID(void)
+{
+ return kCSSPageSID;
+}
+
+void nsCSSPage::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mMarks.AppendToString(buffer, PROP_MARKS);
+ mSize.AppendToString(buffer, PROP_SIZE);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSContent -----------------
+
+const nsID& nsCSSContent::GetID(void)
+{
+ return kCSSContentSID;
+}
+
+void nsCSSContent::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mContent.AppendToString(buffer, PROP_CONTENT);
+ mCounterIncrement.AppendToString(buffer, PROP_COUNTER_INCREMENT);
+ mCounterReset.AppendToString(buffer, PROP_COUNTER_RESET);
+ mMarkerOffset.AppendToString(buffer, PROP_MARKER_OFFSET);
+ mQuotes.AppendToString(buffer, PROP_QUOTES);
+
+ fputs(buffer, out);
+}
+
+// --- nsCSSAural -----------------
+
+const nsID& nsCSSAural::GetID(void)
+{
+ return kCSSAuralSID;
+}
+
+void nsCSSAural::List(FILE* out, PRInt32 aIndent) const
+{
+ for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
+
+ nsAutoString buffer;
+
+ mAzimuth.AppendToString(buffer, PROP_AZIMUTH);
+ mElevation.AppendToString(buffer, PROP_ELEVATION);
+ mCueAfter.AppendToString(buffer, PROP_CUE_AFTER);
+ mCueBefore.AppendToString(buffer, PROP_CUE_BEFORE);
+ mPauseAfter.AppendToString(buffer, PROP_PAUSE_AFTER);
+ mPauseBefore.AppendToString(buffer, PROP_PAUSE_BEFORE);
+ mPitch.AppendToString(buffer, PROP_PITCH);
+ mPitchRange.AppendToString(buffer, PROP_PITCH_RANGE);
+ mPlayDuring.AppendToString(buffer, PROP_PLAY_DURING);
+ mRichness.AppendToString(buffer, PROP_RICHNESS);
+ mSpeak.AppendToString(buffer, PROP_SPEAK);
+ mSpeakHeader.AppendToString(buffer, PROP_SPEAK_HEADER);
+ mSpeakNumeral.AppendToString(buffer, PROP_SPEAK_NUMERAL);
+ mSpeakPunctuation.AppendToString(buffer, PROP_SPEAK_PUNCTUATION);
+ mSpeechRate.AppendToString(buffer, PROP_SPEECH_RATE);
+ mStress.AppendToString(buffer, PROP_STRESS);
+ mVoiceFamily.AppendToString(buffer, PROP_VOICE_FAMILY);
+ mVolume.AppendToString(buffer, PROP_VOLUME);
+
+ fputs(buffer, out);
+}
+
+
+
+// --- nsCSSDeclaration -----------------
class CSSDeclarationImpl : public nsICSSDeclaration {
@@ -795,6 +698,9 @@ public:
nsresult GetImportantValues(nsICSSDeclaration*& aResult);
nsresult GetValueIsImportant(const char *aProperty, PRBool& aIsImportant);
+ PRBool AppendValueToString(PRInt32 aProperty, nsString& aResult);
+ PRBool AppendValueToString(PRInt32 aProperty, const nsCSSValue& aValue, nsString& aResult);
+
virtual nsresult ToString(nsString& aString);
void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
@@ -815,6 +721,11 @@ protected:
nsCSSPosition* mPosition;
nsCSSList* mList;
nsCSSDisplay* mDisplay;
+ nsCSSTable* mTable;
+ nsCSSBreaks* mBreaks;
+ nsCSSPage* mPage;
+ nsCSSContent* mContent;
+ nsCSSAural* mAural;
CSSDeclarationImpl* mImportant;
@@ -844,29 +755,23 @@ CSSDeclarationImpl::CSSDeclarationImpl(void)
#endif
}
+#define CSS_IF_DELETE(ptr) if (nsnull != ptr) delete ptr;
+
CSSDeclarationImpl::~CSSDeclarationImpl(void)
{
- if (nsnull != mFont) {
- delete mFont;
- }
- if (nsnull != mColor) {
- delete mColor;
- }
- if (nsnull != mText) {
- delete mText;
- }
- if (nsnull != mMargin) {
- delete mMargin;
- }
- if (nsnull != mPosition) {
- delete mPosition;
- }
- if (nsnull != mList) {
- delete mList;
- }
- if (nsnull != mDisplay) {
- delete mDisplay;
- }
+ CSS_IF_DELETE(mFont);
+ CSS_IF_DELETE(mColor);
+ CSS_IF_DELETE(mText);
+ CSS_IF_DELETE(mMargin);
+ CSS_IF_DELETE(mPosition);
+ CSS_IF_DELETE(mList);
+ CSS_IF_DELETE(mDisplay);
+ CSS_IF_DELETE(mTable);
+ CSS_IF_DELETE(mBreaks);
+ CSS_IF_DELETE(mPage);
+ CSS_IF_DELETE(mContent);
+ CSS_IF_DELETE(mAural);
+
NS_IF_RELEASE(mImportant);
if (nsnull != mOrder) {
delete mOrder;
@@ -888,88 +793,56 @@ CSSDeclarationImpl::~CSSDeclarationImpl(void)
NS_IMPL_ISUPPORTS(CSSDeclarationImpl, kICSSDeclarationIID);
+#define CSS_IF_GET_ELSE(sid,ptr,result) \
+ if (sid.Equals(kCSS##ptr##SID)) { *result = m##ptr; } else
+
nsresult CSSDeclarationImpl::GetData(const nsID& aSID, nsCSSStruct** aDataPtr)
{
if (nsnull == aDataPtr) {
return NS_ERROR_NULL_POINTER;
}
- if (aSID.Equals(kCSSFontSID)) {
- *aDataPtr = mFont;
- }
- else if (aSID.Equals(kCSSColorSID)) {
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSDisplaySID)) {
- *aDataPtr = mDisplay;
- }
- else if (aSID.Equals(kCSSTextSID)) {
- *aDataPtr = mText;
- }
- else if (aSID.Equals(kCSSMarginSID)) {
- *aDataPtr = mMargin;
- }
- else if (aSID.Equals(kCSSPositionSID)) {
- *aDataPtr = mPosition;
- }
- else if (aSID.Equals(kCSSListSID)) {
- *aDataPtr = mList;
- }
- else {
+ CSS_IF_GET_ELSE(aSID, Font, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Color, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Display, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Text, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Margin, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Position, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, List, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Table, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Breaks, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Page, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Content, aDataPtr)
+ CSS_IF_GET_ELSE(aSID, Aural, aDataPtr) {
return NS_NOINTERFACE;
}
return NS_OK;
}
+#define CSS_IF_ENSURE_ELSE(sid,ptr,result) \
+ if (sid.Equals(kCSS##ptr##SID)) { \
+ if (nsnull == m##ptr) { m##ptr = new nsCSS##ptr(); } \
+ *result = m##ptr; \
+ } else
+
nsresult CSSDeclarationImpl::EnsureData(const nsID& aSID, nsCSSStruct** aDataPtr)
{
if (nsnull == aDataPtr) {
return NS_ERROR_NULL_POINTER;
}
- if (aSID.Equals(kCSSFontSID)) {
- if (nsnull == mFont) {
- mFont = new nsCSSFont();
- }
- *aDataPtr = mFont;
- }
- else if (aSID.Equals(kCSSColorSID)) {
- if (nsnull == mColor) {
- mColor = new nsCSSColor();
- }
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSDisplaySID)) {
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- *aDataPtr = mColor;
- }
- else if (aSID.Equals(kCSSTextSID)) {
- if (nsnull == mText) {
- mText = new nsCSSText();
- }
- *aDataPtr = mText;
- }
- else if (aSID.Equals(kCSSMarginSID)) {
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- *aDataPtr = mMargin;
- }
- else if (aSID.Equals(kCSSPositionSID)) {
- if (nsnull == mPosition) {
- mPosition = new nsCSSPosition();
- }
- *aDataPtr = mPosition;
- }
- else if (aSID.Equals(kCSSListSID)) {
- if (nsnull == mList) {
- mList = new nsCSSList();
- }
- *aDataPtr = mList;
- }
- else {
+ CSS_IF_ENSURE_ELSE(aSID, Font, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Color, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Display, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Text, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Margin, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Position, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, List, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Table, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Breaks, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Page, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Content, aDataPtr)
+ CSS_IF_ENSURE_ELSE(aSID, Aural, aDataPtr) {
return NS_NOINTERFACE;
}
if (nsnull == *aDataPtr) {
@@ -983,6 +856,24 @@ nsresult CSSDeclarationImpl::AppendValue(const char* aProperty, const nsCSSValue
return AppendValue(nsCSSProps::LookupName(aProperty), aValue);
}
+#define CSS_ENSURE(data) \
+ if (nsnull == m##data) { \
+ m##data = new nsCSS##data(); \
+ } \
+ if (nsnull == m##data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
+#define CSS_ENSURE_RECT(data) \
+ if (nsnull == data) { \
+ data = new nsCSSRect(); \
+ } \
+ if (nsnull == data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aValue)
{
nsresult result = NS_OK;
@@ -994,21 +885,19 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
- if (nsnull == mFont) {
- mFont = new nsCSSFont();
- }
- if (nsnull != mFont) {
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
+ CSS_ENSURE(Font) {
switch (aProperty) {
- case PROP_FONT_FAMILY: mFont->mFamily = aValue; break;
- case PROP_FONT_STYLE: mFont->mStyle = aValue; break;
- case PROP_FONT_VARIANT: mFont->mVariant = aValue; break;
- case PROP_FONT_WEIGHT: mFont->mWeight = aValue; break;
- case PROP_FONT_SIZE: mFont->mSize = aValue; break;
+ case PROP_FONT_FAMILY: mFont->mFamily = aValue; break;
+ case PROP_FONT_STYLE: mFont->mStyle = aValue; break;
+ case PROP_FONT_VARIANT: mFont->mVariant = aValue; break;
+ case PROP_FONT_WEIGHT: mFont->mWeight = aValue; break;
+ case PROP_FONT_SIZE: mFont->mSize = aValue; break;
+ case PROP_FONT_SIZE_ADJUST: mFont->mSizeAdjust = aValue; break;
+ case PROP_FONT_STRETCH: mFont->mStretch = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSColor
@@ -1023,10 +912,7 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
case PROP_OPACITY:
- if (nsnull == mColor) {
- mColor = new nsCSSColor();
- }
- if (nsnull != mColor) {
+ CSS_ENSURE(Color) {
switch (aProperty) {
case PROP_COLOR: mColor->mColor = aValue; break;
case PROP_BACKGROUND_COLOR: mColor->mBackColor = aValue; break;
@@ -1041,9 +927,6 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_OPACITY: mColor->mOpacity = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSText
@@ -1054,12 +937,10 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
- if (nsnull == mText) {
- mText = new nsCSSText();
- }
- if (nsnull != mText) {
+ CSS_ENSURE(Text) {
switch (aProperty) {
case PROP_WORD_SPACING: mText->mWordSpacing = aValue; break;
case PROP_LETTER_SPACING: mText->mLetterSpacing = aValue; break;
@@ -1068,198 +949,11 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_TEXT_TRANSFORM: mText->mTextTransform = aValue; break;
case PROP_TEXT_ALIGN: mText->mTextAlign = aValue; break;
case PROP_TEXT_INDENT: mText->mTextIndent = aValue; break;
+ case PROP_UNICODE_BIDI: mText->mUnicodeBidi = aValue; break;
case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break;
case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSMargin
- case PROP_MARGIN_TOP:
- case PROP_MARGIN_RIGHT:
- case PROP_MARGIN_BOTTOM:
- case PROP_MARGIN_LEFT:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mMargin) {
- mMargin->mMargin = new nsCSSRect();
- }
- if (nsnull != mMargin->mMargin) {
- switch (aProperty) {
- case PROP_MARGIN_TOP: mMargin->mMargin->mTop = aValue; break;
- case PROP_MARGIN_RIGHT: mMargin->mMargin->mRight = aValue; break;
- case PROP_MARGIN_BOTTOM: mMargin->mMargin->mBottom = aValue; break;
- case PROP_MARGIN_LEFT: mMargin->mMargin->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_PADDING_TOP:
- case PROP_PADDING_RIGHT:
- case PROP_PADDING_BOTTOM:
- case PROP_PADDING_LEFT:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mPadding) {
- mMargin->mPadding = new nsCSSRect();
- }
- if (nsnull != mMargin->mPadding) {
- switch (aProperty) {
- case PROP_PADDING_TOP: mMargin->mPadding->mTop = aValue; break;
- case PROP_PADDING_RIGHT: mMargin->mPadding->mRight = aValue; break;
- case PROP_PADDING_BOTTOM: mMargin->mPadding->mBottom = aValue; break;
- case PROP_PADDING_LEFT: mMargin->mPadding->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_WIDTH:
- case PROP_BORDER_RIGHT_WIDTH:
- case PROP_BORDER_BOTTOM_WIDTH:
- case PROP_BORDER_LEFT_WIDTH:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mBorder) {
- mMargin->mBorder = new nsCSSRect();
- }
- if (nsnull != mMargin->mBorder) {
- switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: mMargin->mBorder->mTop = aValue; break;
- case PROP_BORDER_RIGHT_WIDTH: mMargin->mBorder->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_WIDTH: mMargin->mBorder->mBottom = aValue; break;
- case PROP_BORDER_LEFT_WIDTH: mMargin->mBorder->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_COLOR:
- case PROP_BORDER_RIGHT_COLOR:
- case PROP_BORDER_BOTTOM_COLOR:
- case PROP_BORDER_LEFT_COLOR:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mColor) {
- mMargin->mColor = new nsCSSRect();
- }
- if (nsnull != mMargin->mColor) {
- switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: mMargin->mColor->mTop = aValue; break;
- case PROP_BORDER_RIGHT_COLOR: mMargin->mColor->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_COLOR: mMargin->mColor->mBottom = aValue; break;
- case PROP_BORDER_LEFT_COLOR: mMargin->mColor->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- case PROP_BORDER_TOP_STYLE:
- case PROP_BORDER_RIGHT_STYLE:
- case PROP_BORDER_BOTTOM_STYLE:
- case PROP_BORDER_LEFT_STYLE:
- if (nsnull == mMargin) {
- mMargin = new nsCSSMargin();
- }
- if (nsnull != mMargin) {
- if (nsnull == mMargin->mStyle) {
- mMargin->mStyle = new nsCSSRect();
- }
- if (nsnull != mMargin->mStyle) {
- switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: mMargin->mStyle->mTop = aValue; break;
- case PROP_BORDER_RIGHT_STYLE: mMargin->mStyle->mRight = aValue; break;
- case PROP_BORDER_BOTTOM_STYLE: mMargin->mStyle->mBottom = aValue; break;
- case PROP_BORDER_LEFT_STYLE: mMargin->mStyle->mLeft = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSPosition
- case PROP_POSITION:
- case PROP_WIDTH:
- case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
- case PROP_Z_INDEX:
- if (nsnull == mPosition) {
- mPosition = new nsCSSPosition();
- }
- if (nsnull != mPosition) {
- switch (aProperty) {
- case PROP_POSITION: mPosition->mPosition = aValue; break;
- case PROP_WIDTH: mPosition->mWidth = aValue; break;
- case PROP_HEIGHT: mPosition->mHeight = aValue; break;
- case PROP_LEFT: mPosition->mLeft = aValue; break;
- case PROP_TOP: mPosition->mTop = aValue; break;
- case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- break;
-
- // nsCSSList
- case PROP_LIST_STYLE_TYPE:
- case PROP_LIST_STYLE_IMAGE:
- case PROP_LIST_STYLE_POSITION:
- if (nsnull == mList) {
- mList = new nsCSSList();
- }
- if (nsnull != mList) {
- switch (aProperty) {
- case PROP_LIST_STYLE_TYPE: mList->mType = aValue; break;
- case PROP_LIST_STYLE_IMAGE: mList->mImage = aValue; break;
- case PROP_LIST_STYLE_POSITION: mList->mPosition = aValue; break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
// nsCSSDisplay
@@ -1270,10 +964,7 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_VISIBILITY:
case PROP_OVERFLOW:
case PROP_FILTER:
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mDisplay) {
+ CSS_ENSURE(Display) {
switch (aProperty) {
case PROP_FLOAT: mDisplay->mFloat = aValue; break;
case PROP_CLEAR: mDisplay->mClear = aValue; break;
@@ -1284,23 +975,14 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_FILTER: mDisplay->mFilter = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
break;
case PROP_CLIP_TOP:
case PROP_CLIP_RIGHT:
case PROP_CLIP_BOTTOM:
case PROP_CLIP_LEFT:
- if (nsnull == mDisplay) {
- mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mDisplay) {
- if (nsnull == mDisplay->mClip) {
- mDisplay->mClip = new nsCSSRect();
- }
- if (nsnull != mDisplay->mClip) {
+ CSS_ENSURE(Display) {
+ CSS_ENSURE_RECT(mDisplay->mClip) {
switch(aProperty) {
case PROP_CLIP_TOP: mDisplay->mClip->mTop = aValue; break;
case PROP_CLIP_RIGHT: mDisplay->mClip->mRight = aValue; break;
@@ -1308,22 +990,273 @@ nsresult CSSDeclarationImpl::AppendValue(PRInt32 aProperty, const nsCSSValue& aV
case PROP_CLIP_LEFT: mDisplay->mClip->mLeft = aValue; break;
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
break;
+ // nsCSSMargin
+ case PROP_MARGIN_TOP:
+ case PROP_MARGIN_RIGHT:
+ case PROP_MARGIN_BOTTOM:
+ case PROP_MARGIN_LEFT:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mMargin) {
+ switch (aProperty) {
+ case PROP_MARGIN_TOP: mMargin->mMargin->mTop = aValue; break;
+ case PROP_MARGIN_RIGHT: mMargin->mMargin->mRight = aValue; break;
+ case PROP_MARGIN_BOTTOM: mMargin->mMargin->mBottom = aValue; break;
+ case PROP_MARGIN_LEFT: mMargin->mMargin->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_PADDING_TOP:
+ case PROP_PADDING_RIGHT:
+ case PROP_PADDING_BOTTOM:
+ case PROP_PADDING_LEFT:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mPadding) {
+ switch (aProperty) {
+ case PROP_PADDING_TOP: mMargin->mPadding->mTop = aValue; break;
+ case PROP_PADDING_RIGHT: mMargin->mPadding->mRight = aValue; break;
+ case PROP_PADDING_BOTTOM: mMargin->mPadding->mBottom = aValue; break;
+ case PROP_PADDING_LEFT: mMargin->mPadding->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_WIDTH:
+ case PROP_BORDER_RIGHT_WIDTH:
+ case PROP_BORDER_BOTTOM_WIDTH:
+ case PROP_BORDER_LEFT_WIDTH:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderWidth) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_WIDTH: mMargin->mBorderWidth->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_WIDTH: mMargin->mBorderWidth->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_WIDTH: mMargin->mBorderWidth->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_WIDTH: mMargin->mBorderWidth->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_COLOR:
+ case PROP_BORDER_RIGHT_COLOR:
+ case PROP_BORDER_BOTTOM_COLOR:
+ case PROP_BORDER_LEFT_COLOR:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderColor) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_COLOR: mMargin->mBorderColor->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_COLOR: mMargin->mBorderColor->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_COLOR: mMargin->mBorderColor->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_COLOR: mMargin->mBorderColor->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_BORDER_TOP_STYLE:
+ case PROP_BORDER_RIGHT_STYLE:
+ case PROP_BORDER_BOTTOM_STYLE:
+ case PROP_BORDER_LEFT_STYLE:
+ CSS_ENSURE(Margin) {
+ CSS_ENSURE_RECT(mMargin->mBorderStyle) {
+ switch (aProperty) {
+ case PROP_BORDER_TOP_STYLE: mMargin->mBorderStyle->mTop = aValue; break;
+ case PROP_BORDER_RIGHT_STYLE: mMargin->mBorderStyle->mRight = aValue; break;
+ case PROP_BORDER_BOTTOM_STYLE: mMargin->mBorderStyle->mBottom = aValue; break;
+ case PROP_BORDER_LEFT_STYLE: mMargin->mBorderStyle->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ CSS_ENSURE(Margin) {
+ switch (aProperty) {
+ case PROP_OUTLINE_WIDTH: mMargin->mOutlineWidth = aValue; break;
+ case PROP_OUTLINE_COLOR: mMargin->mOutlineColor = aValue; break;
+ case PROP_OUTLINE_STYLE: mMargin->mOutlineStyle = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSPosition
+ case PROP_POSITION:
+ case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
+ case PROP_HEIGHT:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
+ case PROP_Z_INDEX:
+ CSS_ENSURE(Position) {
+ switch (aProperty) {
+ case PROP_POSITION: mPosition->mPosition = aValue; break;
+ case PROP_WIDTH: mPosition->mWidth = aValue; break;
+ case PROP_MIN_WIDTH: mPosition->mMinWidth = aValue; break;
+ case PROP_MAX_WIDTH: mPosition->mMaxWidth = aValue; break;
+ case PROP_HEIGHT: mPosition->mHeight = aValue; break;
+ case PROP_MIN_HEIGHT: mPosition->mMinHeight = aValue; break;
+ case PROP_MAX_HEIGHT: mPosition->mMaxHeight = aValue; break;
+ case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
+ }
+ }
+ break;
+
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ CSS_ENSURE(Position) {
+ CSS_ENSURE_RECT(mPosition->mOffset) {
+ switch (aProperty) {
+ case PROP_TOP: mPosition->mOffset->mTop = aValue; break;
+ case PROP_RIGHT: mPosition->mOffset->mRight= aValue; break;
+ case PROP_BOTTOM: mPosition->mOffset->mBottom = aValue; break;
+ case PROP_LEFT: mPosition->mOffset->mLeft = aValue; break;
+ }
+ }
+ }
+ break;
+
+ // nsCSSList
+ case PROP_LIST_STYLE_TYPE:
+ case PROP_LIST_STYLE_IMAGE:
+ case PROP_LIST_STYLE_POSITION:
+ CSS_ENSURE(List) {
+ switch (aProperty) {
+ case PROP_LIST_STYLE_TYPE: mList->mType = aValue; break;
+ case PROP_LIST_STYLE_IMAGE: mList->mImage = aValue; break;
+ case PROP_LIST_STYLE_POSITION: mList->mPosition = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ CSS_ENSURE(Table) {
+ switch (aProperty) {
+ case PROP_BORDER_COLLAPSE: mTable->mBorderCollapse = aValue; break;
+ case PROP_BORDER_SPACING: mTable->mBorderSpacing = aValue; break;
+ case PROP_CAPTION_SIDE: mTable->mCaptionSide = aValue; break;
+ case PROP_EMPTY_CELLS: mTable->mEmptyCells = aValue; break;
+ case PROP_TABLE_LAYOUT: mTable->mLayout = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ CSS_ENSURE(Breaks) {
+ switch (aProperty) {
+ case PROP_ORPHANS: mBreaks->mOrphans = aValue; break;
+ case PROP_WIDOWS: mBreaks->mWidows = aValue; break;
+ case PROP_PAGE: mBreaks->mPage = aValue; break;
+ case PROP_PAGE_BREAK_AFTER: mBreaks->mPageBreakAfter = aValue; break;
+ case PROP_PAGE_BREAK_BEFORE: mBreaks->mPageBreakBefore = aValue; break;
+ case PROP_PAGE_BREAK_INSIDE: mBreaks->mPageBreakInside = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ CSS_ENSURE(Page) {
+ switch (aProperty) {
+ case PROP_MARKS: mPage->mMarks = aValue; break;
+ case PROP_SIZE: mPage->mSize = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ CSS_ENSURE(Content) {
+ switch (aProperty) {
+ case PROP_CONTENT: mContent->mContent = aValue; break;
+ case PROP_COUNTER_INCREMENT: mContent->mCounterIncrement = aValue; break;
+ case PROP_COUNTER_RESET: mContent->mCounterReset = aValue; break;
+ case PROP_MARKER_OFFSET: mContent->mMarkerOffset = aValue; break;
+ case PROP_QUOTES: mContent->mQuotes = aValue; break;
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ CSS_ENSURE(Aural) {
+ switch (aProperty) {
+ case PROP_AZIMUTH: mAural->mAzimuth = aValue; break;
+ case PROP_ELEVATION: mAural->mElevation = aValue; break;
+ case PROP_CUE_AFTER: mAural->mCueAfter = aValue; break;
+ case PROP_CUE_BEFORE: mAural->mCueBefore = aValue; break;
+ case PROP_PAUSE_AFTER: mAural->mPauseAfter = aValue; break;
+ case PROP_PAUSE_BEFORE: mAural->mPauseBefore = aValue; break;
+ case PROP_PITCH: mAural->mPitch = aValue; break;
+ case PROP_PITCH_RANGE: mAural->mPitchRange = aValue; break;
+ case PROP_PLAY_DURING: mAural->mPlayDuring = aValue; break;
+ case PROP_RICHNESS: mAural->mRichness = aValue; break;
+ case PROP_SPEAK: mAural->mSpeak = aValue; break;
+ case PROP_SPEAK_HEADER: mAural->mSpeakHeader = aValue; break;
+ case PROP_SPEAK_NUMERAL: mAural->mSpeakNumeral = aValue; break;
+ case PROP_SPEAK_PUNCTUATION: mAural->mSpeakPunctuation = aValue; break;
+ case PROP_SPEECH_RATE: mAural->mSpeechRate = aValue; break;
+ case PROP_STRESS: mAural->mStress = aValue; break;
+ case PROP_VOICE_FAMILY: mAural->mVoiceFamily = aValue; break;
+ case PROP_VOLUME: mAural->mVolume = aValue; break;
+ }
+ }
+ break;
+
+ // Shorthands
case PROP_BACKGROUND:
case PROP_BORDER:
case PROP_CLIP:
+ case PROP_CUE:
case PROP_FONT:
case PROP_LIST_STYLE:
case PROP_MARGIN:
+ case PROP_OUTLINE:
case PROP_PADDING:
+ case PROP_PAUSE:
+ case PROP_TEXT_SHADOW:
case PROP_BACKGROUND_POSITION:
case PROP_BORDER_TOP:
case PROP_BORDER_RIGHT:
@@ -1364,6 +1297,18 @@ nsresult CSSDeclarationImpl::SetValueImportant(const char* aProperty)
return SetValueImportant(nsCSSProps::LookupName(aProperty));
}
+#define CSS_ENSURE_IMPORTANT(data) \
+ if (nsnull == mImportant->m##data) { \
+ mImportant->m##data = new nsCSS##data(); \
+ } \
+ if (nsnull == mImportant->m##data) { \
+ result = NS_ERROR_OUT_OF_MEMORY; \
+ } \
+ else
+
+#define CSS_CASE_IMPORTANT(prop,data) \
+ case prop: mImportant->data = data; data.Reset(); break
+
nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
{
nsresult result = NS_OK;
@@ -1385,27 +1330,20 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
if (nsnull != mFont) {
- if (nsnull == mImportant->mFont) {
- mImportant->mFont = new nsCSSFont();
- }
- if (nsnull != mImportant->mFont) {
+ CSS_ENSURE_IMPORTANT(Font) {
switch (aProperty) {
- case PROP_FONT_FAMILY: mImportant->mFont->mFamily = mFont->mFamily;
- mFont->mFamily.Reset(); break;
- case PROP_FONT_STYLE: mImportant->mFont->mStyle = mFont->mStyle;
- mFont->mStyle.Reset(); break;
- case PROP_FONT_VARIANT: mImportant->mFont->mVariant = mFont->mVariant;
- mFont->mVariant.Reset(); break;
- case PROP_FONT_WEIGHT: mImportant->mFont->mWeight = mFont->mWeight;
- mFont->mWeight.Reset(); break;
- case PROP_FONT_SIZE: mImportant->mFont->mSize = mFont->mSize;
- mFont->mSize.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_FONT_FAMILY, mFont->mFamily);
+ CSS_CASE_IMPORTANT(PROP_FONT_STYLE, mFont->mStyle);
+ CSS_CASE_IMPORTANT(PROP_FONT_VARIANT, mFont->mVariant);
+ CSS_CASE_IMPORTANT(PROP_FONT_WEIGHT, mFont->mWeight);
+ CSS_CASE_IMPORTANT(PROP_FONT_SIZE, mFont->mSize);
+ CSS_CASE_IMPORTANT(PROP_FONT_SIZE_ADJUST, mFont->mSizeAdjust);
+ CSS_CASE_IMPORTANT(PROP_FONT_STRETCH, mFont->mStretch);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
@@ -1422,38 +1360,21 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_CURSOR_IMAGE:
case PROP_OPACITY:
if (nsnull != mColor) {
- if (nsnull == mImportant->mColor) {
- mImportant->mColor = new nsCSSColor();
- }
- if (nsnull != mImportant->mColor) {
+ CSS_ENSURE_IMPORTANT(Color) {
switch (aProperty) {
- case PROP_COLOR: mImportant->mColor->mColor = mColor->mColor;
- mColor->mColor.Reset(); break;
- case PROP_BACKGROUND_COLOR: mImportant->mColor->mBackColor = mColor->mBackColor;
- mColor->mBackColor.Reset(); break;
- case PROP_BACKGROUND_IMAGE: mImportant->mColor->mBackImage = mColor->mBackImage;
- mColor->mBackImage.Reset(); break;
- case PROP_BACKGROUND_REPEAT: mImportant->mColor->mBackRepeat = mColor->mBackRepeat;
- mColor->mBackRepeat.Reset(); break;
- case PROP_BACKGROUND_ATTACHMENT: mImportant->mColor->mBackAttachment = mColor->mBackAttachment;
- mColor->mBackAttachment.Reset(); break;
- case PROP_BACKGROUND_X_POSITION: mImportant->mColor->mBackPositionX = mColor->mBackPositionX;
- mColor->mBackPositionX.Reset(); break;
- case PROP_BACKGROUND_Y_POSITION: mImportant->mColor->mBackPositionY = mColor->mBackPositionY;
- mColor->mBackPositionY.Reset(); break;
- case PROP_BACKGROUND_FILTER: mImportant->mColor->mBackFilter = mColor->mBackFilter;
- mColor->mBackFilter.Reset(); break;
- case PROP_CURSOR: mImportant->mColor->mCursor = mColor->mCursor;
- mColor->mCursor.Reset(); break;
- case PROP_CURSOR_IMAGE: mImportant->mColor->mCursorImage = mColor->mCursorImage;
- mColor->mCursorImage.Reset(); break;
- case PROP_OPACITY: mImportant->mColor->mOpacity = mColor->mOpacity;
- mColor->mOpacity.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_COLOR, mColor->mColor);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_COLOR, mColor->mBackColor);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_IMAGE, mColor->mBackImage);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_REPEAT, mColor->mBackRepeat);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_ATTACHMENT, mColor->mBackAttachment);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_X_POSITION, mColor->mBackPositionX);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_Y_POSITION, mColor->mBackPositionY);
+ CSS_CASE_IMPORTANT(PROP_BACKGROUND_FILTER, mColor->mBackFilter);
+ CSS_CASE_IMPORTANT(PROP_CURSOR, mColor->mCursor);
+ CSS_CASE_IMPORTANT(PROP_CURSOR_IMAGE, mColor->mCursorImage);
+ CSS_CASE_IMPORTANT(PROP_OPACITY, mColor->mOpacity);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
@@ -1465,36 +1386,80 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
if (nsnull != mText) {
- if (nsnull == mImportant->mText) {
- mImportant->mText = new nsCSSText();
- }
- if (nsnull != mImportant->mText) {
+ CSS_ENSURE_IMPORTANT(Text) {
switch (aProperty) {
- case PROP_WORD_SPACING: mImportant->mText->mWordSpacing = mText->mWordSpacing;
- mText->mWordSpacing.Reset(); break;
- case PROP_LETTER_SPACING: mImportant->mText->mLetterSpacing = mText->mLetterSpacing;
- mText->mLetterSpacing.Reset(); break;
- case PROP_TEXT_DECORATION: mImportant->mText->mDecoration = mText->mDecoration;
- mText->mDecoration.Reset(); break;
- case PROP_VERTICAL_ALIGN: mImportant->mText->mVerticalAlign = mText->mVerticalAlign;
- mText->mVerticalAlign.Reset(); break;
- case PROP_TEXT_TRANSFORM: mImportant->mText->mTextTransform = mText->mTextTransform;
- mText->mTextTransform.Reset(); break;
- case PROP_TEXT_ALIGN: mImportant->mText->mTextAlign = mText->mTextAlign;
- mText->mTextAlign.Reset(); break;
- case PROP_TEXT_INDENT: mImportant->mText->mTextIndent = mText->mTextIndent;
- mText->mTextIndent.Reset(); break;
- case PROP_LINE_HEIGHT: mImportant->mText->mLineHeight = mText->mLineHeight;
- mText->mLineHeight.Reset(); break;
- case PROP_WHITE_SPACE: mImportant->mText->mWhiteSpace = mText->mWhiteSpace;
- mText->mWhiteSpace.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_WORD_SPACING, mText->mWordSpacing);
+ CSS_CASE_IMPORTANT(PROP_LETTER_SPACING, mText->mLetterSpacing);
+ CSS_CASE_IMPORTANT(PROP_TEXT_DECORATION, mText->mDecoration);
+ CSS_CASE_IMPORTANT(PROP_VERTICAL_ALIGN, mText->mVerticalAlign);
+ CSS_CASE_IMPORTANT(PROP_TEXT_TRANSFORM, mText->mTextTransform);
+ CSS_CASE_IMPORTANT(PROP_TEXT_ALIGN, mText->mTextAlign);
+ CSS_CASE_IMPORTANT(PROP_TEXT_INDENT, mText->mTextIndent);
+ CSS_CASE_IMPORTANT(PROP_UNICODE_BIDI, mText->mUnicodeBidi);
+ CSS_CASE_IMPORTANT(PROP_LINE_HEIGHT, mText->mLineHeight);
+ CSS_CASE_IMPORTANT(PROP_WHITE_SPACE, mText->mWhiteSpace);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ break;
+
+ case PROP_TEXT_SHADOW:
+ if (nsnull != mText) {
+ if (nsnull != mText->mTextShadow) {
+ CSS_ENSURE_IMPORTANT(Text) {
+ if (nsnull != mImportant->mText->mTextShadow) {
+ delete mImportant->mText->mTextShadow;
+ }
+ mImportant->mText->mTextShadow = mText->mTextShadow;
+ mText->mTextShadow = nsnull;
+ }
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case PROP_DIRECTION:
+ case PROP_DISPLAY:
+ case PROP_FLOAT:
+ case PROP_CLEAR:
+ case PROP_OVERFLOW:
+ case PROP_VISIBILITY:
+ case PROP_FILTER:
+ if (nsnull != mDisplay) {
+ CSS_ENSURE_IMPORTANT(Display) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_DIRECTION, mDisplay->mDirection);
+ CSS_CASE_IMPORTANT(PROP_DISPLAY, mDisplay->mDisplay);
+ CSS_CASE_IMPORTANT(PROP_FLOAT, mDisplay->mFloat);
+ CSS_CASE_IMPORTANT(PROP_CLEAR, mDisplay->mClear);
+ CSS_CASE_IMPORTANT(PROP_OVERFLOW, mDisplay->mOverflow);
+ CSS_CASE_IMPORTANT(PROP_VISIBILITY, mDisplay->mVisibility);
+ CSS_CASE_IMPORTANT(PROP_FILTER, mDisplay->mFilter);
+ }
+ }
+ }
+ break;
+
+ case PROP_CLIP_TOP:
+ case PROP_CLIP_RIGHT:
+ case PROP_CLIP_BOTTOM:
+ case PROP_CLIP_LEFT:
+ if (nsnull != mDisplay) {
+ if (nsnull != mDisplay->mClip) {
+ CSS_ENSURE_IMPORTANT(Display) {
+ CSS_ENSURE_RECT(mImportant->mDisplay->mClip) {
+ switch(aProperty) {
+ CSS_CASE_IMPORTANT(PROP_CLIP_TOP, mDisplay->mClip->mTop);
+ CSS_CASE_IMPORTANT(PROP_CLIP_RIGHT, mDisplay->mClip->mRight);
+ CSS_CASE_IMPORTANT(PROP_CLIP_BOTTOM, mDisplay->mClip->mBottom);
+ CSS_CASE_IMPORTANT(PROP_CLIP_LEFT, mDisplay->mClip->mLeft);
+ }
+ }
+ }
}
}
break;
@@ -1506,31 +1471,15 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_MARGIN_LEFT:
if (nsnull != mMargin) {
if (nsnull != mMargin->mMargin) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mMargin) {
- mImportant->mMargin->mMargin = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mMargin) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mMargin) {
switch (aProperty) {
- case PROP_MARGIN_TOP: mImportant->mMargin->mMargin->mTop = mMargin->mMargin->mTop;
- mMargin->mMargin->mTop.Reset(); break;
- case PROP_MARGIN_RIGHT: mImportant->mMargin->mMargin->mRight = mMargin->mMargin->mRight;
- mMargin->mMargin->mRight.Reset(); break;
- case PROP_MARGIN_BOTTOM: mImportant->mMargin->mMargin->mBottom = mMargin->mMargin->mBottom;
- mMargin->mMargin->mBottom.Reset(); break;
- case PROP_MARGIN_LEFT: mImportant->mMargin->mMargin->mLeft = mMargin->mMargin->mLeft;
- mMargin->mMargin->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_MARGIN_TOP, mMargin->mMargin->mTop);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_RIGHT, mMargin->mMargin->mRight);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_BOTTOM, mMargin->mMargin->mBottom);
+ CSS_CASE_IMPORTANT(PROP_MARGIN_LEFT, mMargin->mMargin->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1542,31 +1491,15 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_PADDING_LEFT:
if (nsnull != mMargin) {
if (nsnull != mMargin->mPadding) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mPadding) {
- mImportant->mMargin->mPadding = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mPadding) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mPadding) {
switch (aProperty) {
- case PROP_PADDING_TOP: mImportant->mMargin->mPadding->mTop = mMargin->mPadding->mTop;
- mMargin->mPadding->mTop.Reset(); break;
- case PROP_PADDING_RIGHT: mImportant->mMargin->mPadding->mRight = mMargin->mPadding->mRight;
- mMargin->mPadding->mRight.Reset(); break;
- case PROP_PADDING_BOTTOM: mImportant->mMargin->mPadding->mBottom = mMargin->mPadding->mBottom;
- mMargin->mPadding->mBottom.Reset(); break;
- case PROP_PADDING_LEFT: mImportant->mMargin->mPadding->mLeft = mMargin->mPadding->mLeft;
- mMargin->mPadding->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_PADDING_TOP, mMargin->mPadding->mTop);
+ CSS_CASE_IMPORTANT(PROP_PADDING_RIGHT, mMargin->mPadding->mRight);
+ CSS_CASE_IMPORTANT(PROP_PADDING_BOTTOM, mMargin->mPadding->mBottom);
+ CSS_CASE_IMPORTANT(PROP_PADDING_LEFT, mMargin->mPadding->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1577,32 +1510,16 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_WIDTH:
case PROP_BORDER_LEFT_WIDTH:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mBorder) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mBorder) {
- mImportant->mMargin->mBorder = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mBorder) {
+ if (nsnull != mMargin->mBorderWidth) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderWidth) {
switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: mImportant->mMargin->mBorder->mTop = mMargin->mBorder->mTop;
- mMargin->mBorder->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_WIDTH: mImportant->mMargin->mBorder->mRight = mMargin->mBorder->mRight;
- mMargin->mBorder->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_WIDTH: mImportant->mMargin->mBorder->mBottom = mMargin->mBorder->mBottom;
- mMargin->mBorder->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_WIDTH: mImportant->mMargin->mBorder->mLeft = mMargin->mBorder->mLeft;
- mMargin->mBorder->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_WIDTH, mMargin->mBorderWidth->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_WIDTH, mMargin->mBorderWidth->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_WIDTH, mMargin->mBorderWidth->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_WIDTH, mMargin->mBorderWidth->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1613,32 +1530,16 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_COLOR:
case PROP_BORDER_LEFT_COLOR:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mColor) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mColor) {
- mImportant->mMargin->mColor = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mColor) {
+ if (nsnull != mMargin->mBorderColor) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderColor) {
switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: mImportant->mMargin->mColor->mTop = mMargin->mColor->mTop;
- mMargin->mColor->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_COLOR: mImportant->mMargin->mColor->mRight = mMargin->mColor->mRight;
- mMargin->mColor->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_COLOR: mImportant->mMargin->mColor->mBottom = mMargin->mColor->mBottom;
- mMargin->mColor->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_COLOR: mImportant->mMargin->mColor->mLeft = mMargin->mColor->mLeft;
- mMargin->mColor->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_COLOR, mMargin->mBorderColor->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_COLOR, mMargin->mBorderColor->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_COLOR, mMargin->mBorderColor->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_COLOR, mMargin->mBorderColor->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
}
}
}
@@ -1649,32 +1550,30 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_BORDER_BOTTOM_STYLE:
case PROP_BORDER_LEFT_STYLE:
if (nsnull != mMargin) {
- if (nsnull != mMargin->mStyle) {
- if (nsnull == mImportant->mMargin) {
- mImportant->mMargin = new nsCSSMargin();
- }
- if (nsnull != mImportant->mMargin) {
- if (nsnull == mImportant->mMargin->mStyle) {
- mImportant->mMargin->mStyle = new nsCSSRect();
- }
- if (nsnull != mImportant->mMargin->mStyle) {
+ if (nsnull != mMargin->mBorderStyle) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ CSS_ENSURE_RECT(mImportant->mMargin->mBorderStyle) {
switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: mImportant->mMargin->mStyle->mTop = mMargin->mStyle->mTop;
- mMargin->mStyle->mTop.Reset(); break;
- case PROP_BORDER_RIGHT_STYLE: mImportant->mMargin->mStyle->mRight = mMargin->mStyle->mRight;
- mMargin->mStyle->mRight.Reset(); break;
- case PROP_BORDER_BOTTOM_STYLE: mImportant->mMargin->mStyle->mBottom = mMargin->mStyle->mBottom;
- mMargin->mStyle->mBottom.Reset(); break;
- case PROP_BORDER_LEFT_STYLE: mImportant->mMargin->mStyle->mLeft = mMargin->mStyle->mLeft;
- mMargin->mStyle->mLeft.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_BORDER_TOP_STYLE, mMargin->mBorderStyle->mTop);
+ CSS_CASE_IMPORTANT(PROP_BORDER_RIGHT_STYLE, mMargin->mBorderStyle->mRight);
+ CSS_CASE_IMPORTANT(PROP_BORDER_BOTTOM_STYLE, mMargin->mBorderStyle->mBottom);
+ CSS_CASE_IMPORTANT(PROP_BORDER_LEFT_STYLE, mMargin->mBorderStyle->mLeft);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ if (nsnull != mMargin) {
+ CSS_ENSURE_IMPORTANT(Margin) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_WIDTH, mMargin->mOutlineWidth);
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_COLOR, mMargin->mOutlineColor);
+ CSS_CASE_IMPORTANT(PROP_OUTLINE_STYLE, mMargin->mOutlineStyle);
}
}
}
@@ -1683,32 +1582,44 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
// nsCSSPosition
case PROP_POSITION:
case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
case PROP_Z_INDEX:
if (nsnull != mPosition) {
- if (nsnull == mImportant->mPosition) {
- mImportant->mPosition = new nsCSSPosition();
- }
- if (nsnull != mImportant->mPosition) {
+ CSS_ENSURE_IMPORTANT(Position) {
switch (aProperty) {
- case PROP_POSITION: mImportant->mPosition->mPosition = mPosition->mPosition;
- mPosition->mPosition.Reset(); break;
- case PROP_WIDTH: mImportant->mPosition->mWidth = mPosition->mWidth;
- mPosition->mWidth.Reset(); break;
- case PROP_HEIGHT: mImportant->mPosition->mHeight = mPosition->mHeight;
- mPosition->mHeight.Reset(); break;
- case PROP_LEFT: mImportant->mPosition->mLeft = mPosition->mLeft;
- mPosition->mLeft.Reset(); break;
- case PROP_TOP: mImportant->mPosition->mTop = mPosition->mTop;
- mPosition->mTop.Reset(); break;
- case PROP_Z_INDEX: mImportant->mPosition->mZIndex = mPosition->mZIndex;
- mPosition->mZIndex.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_POSITION, mPosition->mPosition);
+ CSS_CASE_IMPORTANT(PROP_WIDTH, mPosition->mWidth);
+ CSS_CASE_IMPORTANT(PROP_MIN_WIDTH, mPosition->mMinWidth);
+ CSS_CASE_IMPORTANT(PROP_MAX_WIDTH, mPosition->mMaxWidth);
+ CSS_CASE_IMPORTANT(PROP_HEIGHT, mPosition->mHeight);
+ CSS_CASE_IMPORTANT(PROP_MIN_HEIGHT, mPosition->mMinHeight);
+ CSS_CASE_IMPORTANT(PROP_MAX_HEIGHT, mPosition->mMaxHeight);
+ CSS_CASE_IMPORTANT(PROP_Z_INDEX, mPosition->mZIndex);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ }
+ break;
+
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ if (nsnull != mPosition) {
+ if (nsnull != mPosition->mOffset) {
+ CSS_ENSURE_IMPORTANT(Position) {
+ CSS_ENSURE_RECT(mImportant->mPosition->mOffset) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_TOP, mPosition->mOffset->mTop);
+ CSS_CASE_IMPORTANT(PROP_RIGHT, mPosition->mOffset->mRight);
+ CSS_CASE_IMPORTANT(PROP_BOTTOM, mPosition->mOffset->mBottom);
+ CSS_CASE_IMPORTANT(PROP_LEFT, mPosition->mOffset->mLeft);
+ }
+ }
+ }
}
}
break;
@@ -1718,97 +1629,134 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
case PROP_LIST_STYLE_IMAGE:
case PROP_LIST_STYLE_POSITION:
if (nsnull != mList) {
- if (nsnull == mImportant->mList) {
- mImportant->mList = new nsCSSList();
- }
- if (nsnull != mImportant->mList) {
+ CSS_ENSURE_IMPORTANT(List) {
switch (aProperty) {
- case PROP_LIST_STYLE_TYPE: mImportant->mList->mType = mList->mType;
- mList->mType.Reset(); break;
- case PROP_LIST_STYLE_IMAGE: mImportant->mList->mImage = mList->mImage;
- mList->mImage.Reset(); break;
- case PROP_LIST_STYLE_POSITION: mImportant->mList->mPosition = mList->mPosition;
- mList->mPosition.Reset(); break;
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_TYPE, mList->mType);
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_IMAGE, mList->mImage);
+ CSS_CASE_IMPORTANT(PROP_LIST_STYLE_POSITION, mList->mPosition);
}
}
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
}
break;
- // nsCSSDisplay
- case PROP_FLOAT:
- case PROP_CLEAR:
- case PROP_DISPLAY:
- case PROP_DIRECTION:
- case PROP_VISIBILITY:
- case PROP_OVERFLOW:
- case PROP_FILTER:
- if (nsnull != mDisplay) {
- if (nsnull == mImportant->mDisplay) {
- mImportant->mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mImportant->mDisplay) {
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ if (nsnull != mTable) {
+ CSS_ENSURE_IMPORTANT(Table) {
switch (aProperty) {
- case PROP_FLOAT: mImportant->mDisplay->mFloat = mDisplay->mFloat;
- mDisplay->mFloat.Reset(); break;
- case PROP_CLEAR: mImportant->mDisplay->mClear = mDisplay->mClear;
- mDisplay->mClear.Reset(); break;
- case PROP_DISPLAY: mImportant->mDisplay->mDisplay = mDisplay->mDisplay;
- mDisplay->mDisplay.Reset(); break;
- case PROP_DIRECTION: mImportant->mDisplay->mDirection = mDisplay->mDirection;
- mDisplay->mDirection.Reset(); break;
- case PROP_VISIBILITY: mImportant->mDisplay->mVisibility = mDisplay->mVisibility;
- mDisplay->mVisibility.Reset(); break;
- case PROP_OVERFLOW: mImportant->mDisplay->mOverflow = mDisplay->mOverflow;
- mDisplay->mOverflow.Reset(); break;
- case PROP_FILTER: mImportant->mDisplay->mFilter = mDisplay->mFilter;
- mDisplay->mFilter.Reset(); break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- break;
-
- case PROP_CLIP_TOP:
- case PROP_CLIP_RIGHT:
- case PROP_CLIP_BOTTOM:
- case PROP_CLIP_LEFT:
- if (nsnull != mDisplay) {
- if (nsnull != mDisplay->mClip) {
- if (nsnull == mImportant->mDisplay) {
- mImportant->mDisplay = new nsCSSDisplay();
- }
- if (nsnull != mImportant->mDisplay) {
- if (nsnull == mImportant->mDisplay->mClip) {
- mImportant->mDisplay->mClip = new nsCSSRect();
- }
- if (nsnull != mImportant->mDisplay->mClip) {
- switch(aProperty) {
- case PROP_CLIP_TOP: mImportant->mDisplay->mClip->mTop = mDisplay->mClip->mTop;
- mDisplay->mClip->mTop.Reset(); break;
- case PROP_CLIP_RIGHT: mImportant->mDisplay->mClip->mRight = mDisplay->mClip->mRight;
- mDisplay->mClip->mRight.Reset(); break;
- case PROP_CLIP_BOTTOM: mImportant->mDisplay->mClip->mBottom = mDisplay->mClip->mBottom;
- mDisplay->mClip->mBottom.Reset(); break;
- case PROP_CLIP_LEFT: mImportant->mDisplay->mClip->mLeft = mDisplay->mClip->mLeft;
- mDisplay->mClip->mLeft.Reset(); break;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
- }
- }
- else {
- result = NS_ERROR_OUT_OF_MEMORY;
+ CSS_CASE_IMPORTANT(PROP_BORDER_COLLAPSE, mTable->mBorderCollapse);
+ CSS_CASE_IMPORTANT(PROP_BORDER_SPACING, mTable->mBorderSpacing);
+ CSS_CASE_IMPORTANT(PROP_CAPTION_SIDE, mTable->mCaptionSide);
+ CSS_CASE_IMPORTANT(PROP_EMPTY_CELLS, mTable->mEmptyCells);
+ CSS_CASE_IMPORTANT(PROP_TABLE_LAYOUT, mTable->mLayout);
}
}
}
break;
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ if (nsnull != mBreaks) {
+ CSS_ENSURE_IMPORTANT(Breaks) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_ORPHANS, mBreaks->mOrphans);
+ CSS_CASE_IMPORTANT(PROP_WIDOWS, mBreaks->mWidows);
+ CSS_CASE_IMPORTANT(PROP_PAGE, mBreaks->mPage);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_AFTER, mBreaks->mPageBreakAfter);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_BEFORE, mBreaks->mPageBreakBefore);
+ CSS_CASE_IMPORTANT(PROP_PAGE_BREAK_INSIDE, mBreaks->mPageBreakInside);
+ }
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ if (nsnull != mPage) {
+ CSS_ENSURE_IMPORTANT(Page) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_MARKS, mPage->mMarks);
+ CSS_CASE_IMPORTANT(PROP_SIZE, mPage->mSize);
+ }
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ if (nsnull != mContent) {
+ CSS_ENSURE_IMPORTANT(Content) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_CONTENT, mContent->mContent);
+ CSS_CASE_IMPORTANT(PROP_COUNTER_INCREMENT, mContent->mCounterIncrement);
+ CSS_CASE_IMPORTANT(PROP_COUNTER_RESET, mContent->mCounterReset);
+ CSS_CASE_IMPORTANT(PROP_MARKER_OFFSET, mContent->mMarkerOffset);
+ CSS_CASE_IMPORTANT(PROP_QUOTES, mContent->mQuotes);
+ }
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ if (nsnull != mAural) {
+ CSS_ENSURE_IMPORTANT(Aural) {
+ switch (aProperty) {
+ CSS_CASE_IMPORTANT(PROP_AZIMUTH, mAural->mAzimuth);
+ CSS_CASE_IMPORTANT(PROP_ELEVATION, mAural->mElevation);
+ CSS_CASE_IMPORTANT(PROP_CUE_AFTER, mAural->mCueAfter);
+ CSS_CASE_IMPORTANT(PROP_CUE_BEFORE, mAural->mCueBefore);
+ CSS_CASE_IMPORTANT(PROP_PAUSE_AFTER, mAural->mPauseAfter);
+ CSS_CASE_IMPORTANT(PROP_PAUSE_BEFORE, mAural->mPauseBefore);
+ CSS_CASE_IMPORTANT(PROP_PITCH, mAural->mPitch);
+ CSS_CASE_IMPORTANT(PROP_PITCH_RANGE, mAural->mPitchRange);
+ CSS_CASE_IMPORTANT(PROP_PLAY_DURING, mAural->mPlayDuring);
+ CSS_CASE_IMPORTANT(PROP_RICHNESS, mAural->mRichness);
+ CSS_CASE_IMPORTANT(PROP_SPEAK, mAural->mSpeak);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_HEADER, mAural->mSpeakHeader);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_NUMERAL, mAural->mSpeakNumeral);
+ CSS_CASE_IMPORTANT(PROP_SPEAK_PUNCTUATION, mAural->mSpeakPunctuation);
+ CSS_CASE_IMPORTANT(PROP_SPEECH_RATE, mAural->mSpeechRate);
+ CSS_CASE_IMPORTANT(PROP_STRESS, mAural->mStress);
+ CSS_CASE_IMPORTANT(PROP_VOICE_FAMILY, mAural->mVoiceFamily);
+ CSS_CASE_IMPORTANT(PROP_VOLUME, mAural->mVolume);
+ }
+ }
+ }
+ break;
+
+ // Shorthands
case PROP_BACKGROUND:
SetValueImportant(PROP_BACKGROUND_COLOR);
SetValueImportant(PROP_BACKGROUND_IMAGE);
@@ -1838,6 +1786,10 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
SetValueImportant(PROP_CLIP_BOTTOM);
SetValueImportant(PROP_CLIP_LEFT);
break;
+ case PROP_CUE:
+ SetValueImportant(PROP_CUE_AFTER);
+ SetValueImportant(PROP_CUE_BEFORE);
+ break;
case PROP_FONT:
SetValueImportant(PROP_FONT_FAMILY);
SetValueImportant(PROP_FONT_STYLE);
@@ -1857,12 +1809,21 @@ nsresult CSSDeclarationImpl::SetValueImportant(PRInt32 aProperty)
SetValueImportant(PROP_MARGIN_BOTTOM);
SetValueImportant(PROP_MARGIN_LEFT);
break;
+ case PROP_OUTLINE:
+ SetValueImportant(PROP_OUTLINE_COLOR);
+ SetValueImportant(PROP_OUTLINE_STYLE);
+ SetValueImportant(PROP_OUTLINE_WIDTH);
+ break;
case PROP_PADDING:
SetValueImportant(PROP_PADDING_TOP);
SetValueImportant(PROP_PADDING_RIGHT);
SetValueImportant(PROP_PADDING_BOTTOM);
SetValueImportant(PROP_PADDING_LEFT);
break;
+ case PROP_PAUSE:
+ SetValueImportant(PROP_PAUSE_AFTER);
+ SetValueImportant(PROP_PAUSE_BEFORE);
+ break;
case PROP_BACKGROUND_POSITION:
SetValueImportant(PROP_BACKGROUND_X_POSITION);
SetValueImportant(PROP_BACKGROUND_Y_POSITION);
@@ -1947,13 +1908,17 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_FONT_VARIANT:
case PROP_FONT_WEIGHT:
case PROP_FONT_SIZE:
+ case PROP_FONT_SIZE_ADJUST:
+ case PROP_FONT_STRETCH:
if (nsnull != mFont) {
switch (aProperty) {
- case PROP_FONT_FAMILY: aValue = mFont->mFamily; break;
- case PROP_FONT_STYLE: aValue = mFont->mStyle; break;
- case PROP_FONT_VARIANT: aValue = mFont->mVariant; break;
- case PROP_FONT_WEIGHT: aValue = mFont->mWeight; break;
- case PROP_FONT_SIZE: aValue = mFont->mSize; break;
+ case PROP_FONT_FAMILY: aValue = mFont->mFamily; break;
+ case PROP_FONT_STYLE: aValue = mFont->mStyle; break;
+ case PROP_FONT_VARIANT: aValue = mFont->mVariant; break;
+ case PROP_FONT_WEIGHT: aValue = mFont->mWeight; break;
+ case PROP_FONT_SIZE: aValue = mFont->mSize; break;
+ case PROP_FONT_SIZE_ADJUST: aValue = mFont->mSizeAdjust; break;
+ case PROP_FONT_STRETCH: aValue = mFont->mStretch; break;
}
}
else {
@@ -2001,6 +1966,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_TRANSFORM:
case PROP_TEXT_ALIGN:
case PROP_TEXT_INDENT:
+ case PROP_UNICODE_BIDI:
case PROP_LINE_HEIGHT:
case PROP_WHITE_SPACE:
if (nsnull != mText) {
@@ -2012,6 +1978,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_TRANSFORM: aValue = mText->mTextTransform; break;
case PROP_TEXT_ALIGN: aValue = mText->mTextAlign; break;
case PROP_TEXT_INDENT: aValue = mText->mTextIndent; break;
+ case PROP_UNICODE_BIDI: aValue = mText->mUnicodeBidi; break;
case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break;
case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break;
}
@@ -2021,6 +1988,61 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ case PROP_TEXT_SHADOW_COLOR:
+ case PROP_TEXT_SHADOW_X:
+ case PROP_TEXT_SHADOW_Y:
+ case PROP_TEXT_SHADOW_RADIUS:
+ if ((nsnull != mText) && (nsnull != mText->mTextShadow)) {
+ switch (aProperty) {
+ case PROP_TEXT_SHADOW_COLOR: aValue = mText->mTextShadow->mColor; break;
+ case PROP_TEXT_SHADOW_X: aValue = mText->mTextShadow->mXOffset; break;
+ case PROP_TEXT_SHADOW_Y: aValue = mText->mTextShadow->mYOffset; break;
+ case PROP_TEXT_SHADOW_RADIUS: aValue = mText->mTextShadow->mRadius; break;
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case PROP_FLOAT:
+ case PROP_CLEAR:
+ case PROP_DISPLAY:
+ case PROP_DIRECTION:
+ case PROP_VISIBILITY:
+ case PROP_OVERFLOW:
+ case PROP_FILTER:
+ if (nsnull != mDisplay) {
+ switch (aProperty) {
+ case PROP_FLOAT: aValue = mDisplay->mFloat; break;
+ case PROP_CLEAR: aValue = mDisplay->mClear; break;
+ case PROP_DISPLAY: aValue = mDisplay->mDisplay; break;
+ case PROP_DIRECTION: aValue = mDisplay->mDirection; break;
+ case PROP_VISIBILITY: aValue = mDisplay->mVisibility; break;
+ case PROP_OVERFLOW: aValue = mDisplay->mOverflow; break;
+ case PROP_FILTER: aValue = mDisplay->mFilter; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ case PROP_CLIP_TOP:
+ case PROP_CLIP_RIGHT:
+ case PROP_CLIP_BOTTOM:
+ case PROP_CLIP_LEFT:
+ if ((nsnull != mDisplay) && (nsnull != mDisplay->mClip)) {
+ switch(aProperty) {
+ case PROP_CLIP_TOP: aValue = mDisplay->mClip->mTop; break;
+ case PROP_CLIP_RIGHT: aValue = mDisplay->mClip->mRight; break;
+ case PROP_CLIP_BOTTOM: aValue = mDisplay->mClip->mBottom; break;
+ case PROP_CLIP_LEFT: aValue = mDisplay->mClip->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
// nsCSSMargin
case PROP_MARGIN_TOP:
case PROP_MARGIN_RIGHT:
@@ -2060,12 +2082,12 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_WIDTH:
case PROP_BORDER_BOTTOM_WIDTH:
case PROP_BORDER_LEFT_WIDTH:
- if ((nsnull != mMargin) && (nsnull != mMargin->mBorder)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderWidth)) {
switch (aProperty) {
- case PROP_BORDER_TOP_WIDTH: aValue = mMargin->mBorder->mTop; break;
- case PROP_BORDER_RIGHT_WIDTH: aValue = mMargin->mBorder->mRight; break;
- case PROP_BORDER_BOTTOM_WIDTH: aValue = mMargin->mBorder->mBottom; break;
- case PROP_BORDER_LEFT_WIDTH: aValue = mMargin->mBorder->mLeft; break;
+ case PROP_BORDER_TOP_WIDTH: aValue = mMargin->mBorderWidth->mTop; break;
+ case PROP_BORDER_RIGHT_WIDTH: aValue = mMargin->mBorderWidth->mRight; break;
+ case PROP_BORDER_BOTTOM_WIDTH: aValue = mMargin->mBorderWidth->mBottom; break;
+ case PROP_BORDER_LEFT_WIDTH: aValue = mMargin->mBorderWidth->mLeft; break;
}
}
else {
@@ -2077,12 +2099,12 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_COLOR:
case PROP_BORDER_BOTTOM_COLOR:
case PROP_BORDER_LEFT_COLOR:
- if ((nsnull != mMargin) && (nsnull != mMargin->mColor)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderColor)) {
switch (aProperty) {
- case PROP_BORDER_TOP_COLOR: aValue = mMargin->mColor->mTop; break;
- case PROP_BORDER_RIGHT_COLOR: aValue = mMargin->mColor->mRight; break;
- case PROP_BORDER_BOTTOM_COLOR: aValue = mMargin->mColor->mBottom; break;
- case PROP_BORDER_LEFT_COLOR: aValue = mMargin->mColor->mLeft; break;
+ case PROP_BORDER_TOP_COLOR: aValue = mMargin->mBorderColor->mTop; break;
+ case PROP_BORDER_RIGHT_COLOR: aValue = mMargin->mBorderColor->mRight; break;
+ case PROP_BORDER_BOTTOM_COLOR: aValue = mMargin->mBorderColor->mBottom; break;
+ case PROP_BORDER_LEFT_COLOR: aValue = mMargin->mBorderColor->mLeft; break;
}
}
else {
@@ -2094,12 +2116,27 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BORDER_RIGHT_STYLE:
case PROP_BORDER_BOTTOM_STYLE:
case PROP_BORDER_LEFT_STYLE:
- if ((nsnull != mMargin) && (nsnull != mMargin->mStyle)) {
+ if ((nsnull != mMargin) && (nsnull != mMargin->mBorderStyle)) {
switch (aProperty) {
- case PROP_BORDER_TOP_STYLE: aValue = mMargin->mStyle->mTop; break;
- case PROP_BORDER_RIGHT_STYLE: aValue = mMargin->mStyle->mRight; break;
- case PROP_BORDER_BOTTOM_STYLE: aValue = mMargin->mStyle->mBottom; break;
- case PROP_BORDER_LEFT_STYLE: aValue = mMargin->mStyle->mLeft; break;
+ case PROP_BORDER_TOP_STYLE: aValue = mMargin->mBorderStyle->mTop; break;
+ case PROP_BORDER_RIGHT_STYLE: aValue = mMargin->mBorderStyle->mRight; break;
+ case PROP_BORDER_BOTTOM_STYLE: aValue = mMargin->mBorderStyle->mBottom; break;
+ case PROP_BORDER_LEFT_STYLE: aValue = mMargin->mBorderStyle->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ case PROP_OUTLINE_WIDTH:
+ case PROP_OUTLINE_COLOR:
+ case PROP_OUTLINE_STYLE:
+ if (nsnull != mMargin) {
+ switch (aProperty) {
+ case PROP_OUTLINE_WIDTH: aValue = mMargin->mOutlineWidth; break;
+ case PROP_OUTLINE_COLOR: aValue = mMargin->mOutlineColor; break;
+ case PROP_OUTLINE_STYLE: aValue = mMargin->mOutlineStyle; break;
}
}
else {
@@ -2110,17 +2147,21 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
// nsCSSPosition
case PROP_POSITION:
case PROP_WIDTH:
+ case PROP_MIN_WIDTH:
+ case PROP_MAX_WIDTH:
case PROP_HEIGHT:
- case PROP_LEFT:
- case PROP_TOP:
+ case PROP_MIN_HEIGHT:
+ case PROP_MAX_HEIGHT:
case PROP_Z_INDEX:
if (nsnull != mPosition) {
switch (aProperty) {
case PROP_POSITION: aValue = mPosition->mPosition; break;
case PROP_WIDTH: aValue = mPosition->mWidth; break;
+ case PROP_MIN_WIDTH: aValue = mPosition->mMinWidth; break;
+ case PROP_MAX_WIDTH: aValue = mPosition->mMaxWidth; break;
case PROP_HEIGHT: aValue = mPosition->mHeight; break;
- case PROP_LEFT: aValue = mPosition->mLeft; break;
- case PROP_TOP: aValue = mPosition->mTop; break;
+ case PROP_MIN_HEIGHT: aValue = mPosition->mMinHeight; break;
+ case PROP_MAX_HEIGHT: aValue = mPosition->mMaxHeight; break;
case PROP_Z_INDEX: aValue = mPosition->mZIndex; break;
}
}
@@ -2129,6 +2170,23 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ case PROP_TOP:
+ case PROP_RIGHT:
+ case PROP_BOTTOM:
+ case PROP_LEFT:
+ if ((nsnull != mPosition) && (nsnull != mPosition->mOffset)) {
+ switch (aProperty) {
+ case PROP_TOP: aValue = mPosition->mOffset->mTop; break;
+ case PROP_RIGHT: aValue = mPosition->mOffset->mRight; break;
+ case PROP_BOTTOM: aValue = mPosition->mOffset->mBottom; break;
+ case PROP_LEFT: aValue = mPosition->mOffset->mLeft; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
// nsCSSList
case PROP_LIST_STYLE_TYPE:
case PROP_LIST_STYLE_IMAGE:
@@ -2145,23 +2203,19 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
- // nsCSSDisplay
- case PROP_FLOAT:
- case PROP_CLEAR:
- case PROP_DISPLAY:
- case PROP_DIRECTION:
- case PROP_VISIBILITY:
- case PROP_OVERFLOW:
- case PROP_FILTER:
- if (nsnull != mDisplay) {
+ // nsCSSTable
+ case PROP_BORDER_COLLAPSE:
+ case PROP_BORDER_SPACING:
+ case PROP_CAPTION_SIDE:
+ case PROP_EMPTY_CELLS:
+ case PROP_TABLE_LAYOUT:
+ if (nsnull != mTable) {
switch (aProperty) {
- case PROP_FLOAT: aValue = mDisplay->mFloat; break;
- case PROP_CLEAR: aValue = mDisplay->mClear; break;
- case PROP_DISPLAY: aValue = mDisplay->mDisplay; break;
- case PROP_DIRECTION: aValue = mDisplay->mDirection; break;
- case PROP_VISIBILITY: aValue = mDisplay->mVisibility; break;
- case PROP_OVERFLOW: aValue = mDisplay->mOverflow; break;
- case PROP_FILTER: aValue = mDisplay->mFilter; break;
+ case PROP_BORDER_COLLAPSE: aValue = mTable->mBorderCollapse; break;
+ case PROP_BORDER_SPACING: aValue = mTable->mBorderSpacing; break;
+ case PROP_CAPTION_SIDE: aValue = mTable->mCaptionSide; break;
+ case PROP_EMPTY_CELLS: aValue = mTable->mEmptyCells; break;
+ case PROP_TABLE_LAYOUT: aValue = mTable->mLayout; break;
}
}
else {
@@ -2169,16 +2223,21 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
- case PROP_CLIP_TOP:
- case PROP_CLIP_RIGHT:
- case PROP_CLIP_BOTTOM:
- case PROP_CLIP_LEFT:
- if ((nsnull != mDisplay) && (nsnull != mDisplay->mClip)) {
- switch(aProperty) {
- case PROP_CLIP_TOP: aValue = mDisplay->mClip->mTop; break;
- case PROP_CLIP_RIGHT: aValue = mDisplay->mClip->mRight; break;
- case PROP_CLIP_BOTTOM: aValue = mDisplay->mClip->mBottom; break;
- case PROP_CLIP_LEFT: aValue = mDisplay->mClip->mLeft; break;
+ // nsCSSBreaks
+ case PROP_ORPHANS:
+ case PROP_WIDOWS:
+ case PROP_PAGE:
+ case PROP_PAGE_BREAK_AFTER:
+ case PROP_PAGE_BREAK_BEFORE:
+ case PROP_PAGE_BREAK_INSIDE:
+ if (nsnull != mBreaks) {
+ switch (aProperty) {
+ case PROP_ORPHANS: aValue = mBreaks->mOrphans; break;
+ case PROP_WIDOWS: aValue = mBreaks->mWidows; break;
+ case PROP_PAGE: aValue = mBreaks->mPage; break;
+ case PROP_PAGE_BREAK_AFTER: aValue = mBreaks->mPageBreakAfter; break;
+ case PROP_PAGE_BREAK_BEFORE: aValue = mBreaks->mPageBreakBefore; break;
+ case PROP_PAGE_BREAK_INSIDE: aValue = mBreaks->mPageBreakInside; break;
}
}
else {
@@ -2186,13 +2245,99 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
}
break;
+ // nsCSSPage
+ case PROP_MARKS:
+ case PROP_SIZE:
+ if (nsnull != mPage) {
+ switch (aProperty) {
+ case PROP_MARKS: aValue = mPage->mMarks; break;
+ case PROP_SIZE: aValue = mPage->mSize; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ // nsCSSContent
+ case PROP_CONTENT:
+ case PROP_COUNTER_INCREMENT:
+ case PROP_COUNTER_RESET:
+ case PROP_MARKER_OFFSET:
+ case PROP_QUOTES:
+ if (nsnull != mContent) {
+ switch (aProperty) {
+ case PROP_CONTENT: aValue = mContent->mContent; break;
+ case PROP_COUNTER_INCREMENT: aValue = mContent->mCounterIncrement; break;
+ case PROP_COUNTER_RESET: aValue = mContent->mCounterReset; break;
+ case PROP_MARKER_OFFSET: aValue = mContent->mMarkerOffset; break;
+ case PROP_QUOTES: aValue = mContent->mQuotes; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+ // nsCSSAural
+ case PROP_AZIMUTH:
+ case PROP_ELEVATION:
+ case PROP_CUE_AFTER:
+ case PROP_CUE_BEFORE:
+ case PROP_PAUSE_AFTER:
+ case PROP_PAUSE_BEFORE:
+ case PROP_PITCH:
+ case PROP_PITCH_RANGE:
+ case PROP_PLAY_DURING:
+ case PROP_RICHNESS:
+ case PROP_SPEAK:
+ case PROP_SPEAK_HEADER:
+ case PROP_SPEAK_NUMERAL:
+ case PROP_SPEAK_PUNCTUATION:
+ case PROP_SPEECH_RATE:
+ case PROP_STRESS:
+ case PROP_VOICE_FAMILY:
+ case PROP_VOLUME:
+ if (nsnull != mAural) {
+ switch (aProperty) {
+ case PROP_AZIMUTH: aValue = mAural->mAzimuth; break;
+ case PROP_ELEVATION: aValue = mAural->mElevation; break;
+ case PROP_CUE_AFTER: aValue = mAural->mCueAfter; break;
+ case PROP_CUE_BEFORE: aValue = mAural->mCueBefore; break;
+ case PROP_PAUSE_AFTER: aValue = mAural->mPauseAfter; break;
+ case PROP_PAUSE_BEFORE: aValue = mAural->mPauseBefore; break;
+ case PROP_PITCH: aValue = mAural->mPitch; break;
+ case PROP_PITCH_RANGE: aValue = mAural->mPitchRange; break;
+ case PROP_PLAY_DURING: aValue = mAural->mPlayDuring; break;
+ case PROP_RICHNESS: aValue = mAural->mRichness; break;
+ case PROP_SPEAK: aValue = mAural->mSpeak; break;
+ case PROP_SPEAK_HEADER: aValue = mAural->mSpeakHeader; break;
+ case PROP_SPEAK_NUMERAL: aValue = mAural->mSpeakNumeral; break;
+ case PROP_SPEAK_PUNCTUATION: aValue = mAural->mSpeakPunctuation; break;
+ case PROP_SPEECH_RATE: aValue = mAural->mSpeechRate; break;
+ case PROP_STRESS: aValue = mAural->mStress; break;
+ case PROP_VOICE_FAMILY: aValue = mAural->mVoiceFamily; break;
+ case PROP_VOLUME: aValue = mAural->mVolume; break;
+ }
+ }
+ else {
+ aValue.Reset();
+ }
+ break;
+
+
+ // Shorthands
case PROP_BACKGROUND:
case PROP_BORDER:
case PROP_CLIP:
+ case PROP_CUE:
case PROP_FONT:
case PROP_LIST_STYLE:
case PROP_MARGIN:
+ case PROP_OUTLINE:
case PROP_PADDING:
+ case PROP_PAUSE:
+ case PROP_TEXT_SHADOW:
case PROP_BACKGROUND_POSITION:
case PROP_BORDER_TOP:
case PROP_BORDER_RIGHT:
@@ -2251,109 +2396,284 @@ nsresult CSSDeclarationImpl::GetValue(const nsString& aProperty, nsString& aValu
return GetValue(propID, aValue);
}
-nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsString& aValue)
+PRBool CSSDeclarationImpl::AppendValueToString(PRInt32 aProperty, nsString& aResult)
{
nsCSSValue value;
GetValue(aProperty, value);
+ return AppendValueToString(aProperty, value, aResult);
+}
- nsCSSUnit unit = value.GetUnit();
-
- aValue.Truncate(0);
+PRBool CSSDeclarationImpl::AppendValueToString(PRInt32 aProperty, const nsCSSValue& aValue, nsString& aResult)
+{
+ nsCSSUnit unit = aValue.GetUnit();
if (eCSSUnit_Null == unit) {
- return NS_OK;
+ return PR_FALSE;
}
if (eCSSUnit_String == unit) {
nsAutoString buffer;
- value.GetStringValue(buffer);
- aValue.Append(buffer);
+ aValue.GetStringValue(buffer);
+ aResult.Append(buffer);
}
else if (eCSSUnit_Integer == unit) {
- aValue.Append(value.GetIntValue(), 10);
+ aResult.Append(aValue.GetIntValue(), 10);
}
else if (eCSSUnit_Enumerated == unit) {
if (PROP_TEXT_DECORATION == aProperty) {
- PRInt32 intValue = value.GetIntValue();
+ PRInt32 intValue = aValue.GetIntValue();
if (NS_STYLE_TEXT_DECORATION_NONE != intValue) {
PRInt32 mask;
for (mask = NS_STYLE_TEXT_DECORATION_UNDERLINE;
mask <= NS_STYLE_TEXT_DECORATION_BLINK;
mask <<= 1) {
if ((mask & intValue) == mask) {
- aValue.Append(nsCSSProps::LookupProperty(aProperty, mask));
+ aResult.Append(nsCSSProps::LookupProperty(aProperty, mask));
intValue &= ~mask;
if (0 != intValue) { // more left
- aValue.Append(' ');
+ aResult.Append(' ');
}
}
}
}
else {
- aValue.Append(nsCSSProps::LookupProperty(aProperty, NS_STYLE_TEXT_DECORATION_NONE));
+ aResult.Append(nsCSSProps::LookupProperty(aProperty, NS_STYLE_TEXT_DECORATION_NONE));
}
}
else {
- const char* name = nsCSSProps::LookupProperty(aProperty, value.GetIntValue());
+ const char* name = nsCSSProps::LookupProperty(aProperty, aValue.GetIntValue());
if (name != nsnull) {
- aValue.Append(name);
+ aResult.Append(name);
}
}
}
else if (eCSSUnit_Color == unit){
- nscolor color = value.GetColorValue();
+ nscolor color = aValue.GetColorValue();
const char* name = RGBToCSSString(color);
if (name != nsnull)
- aValue.Append(name);
+ aResult.Append(name);
else
{
- aValue.Append("rgb(");
- aValue.Append(NS_GET_R(color), 10);
- aValue.Append(",");
- aValue.Append(NS_GET_G(color), 10);
- aValue.Append(",");
- aValue.Append(NS_GET_B(color), 10);
- aValue.Append(')');
+ aResult.Append("rgb(");
+ aResult.Append(NS_GET_R(color), 10);
+ aResult.Append(",");
+ aResult.Append(NS_GET_G(color), 10);
+ aResult.Append(",");
+ aResult.Append(NS_GET_B(color), 10);
+ aResult.Append(')');
}
}
else if (eCSSUnit_Percent == unit) {
- aValue.Append(value.GetPercentValue() * 100.0f);
+ aResult.Append(aValue.GetPercentValue() * 100.0f);
}
else if (eCSSUnit_Percent < unit) { // length unit
- aValue.Append(value.GetFloatValue());
+ aResult.Append(aValue.GetFloatValue());
}
switch (unit) {
case eCSSUnit_Null: break;
- case eCSSUnit_Auto: aValue.Append("auto"); break;
- case eCSSUnit_Inherit: aValue.Append("inherit"); break;
- case eCSSUnit_None: aValue.Append("none"); break;
- case eCSSUnit_Normal: aValue.Append("normal"); break;
+ case eCSSUnit_Auto: aResult.Append("auto"); break;
+ case eCSSUnit_Inherit: aResult.Append("inherit"); break;
+ case eCSSUnit_None: aResult.Append("none"); break;
+ case eCSSUnit_Normal: aResult.Append("normal"); break;
case eCSSUnit_String: break;
case eCSSUnit_Integer: break;
case eCSSUnit_Enumerated: break;
case eCSSUnit_Color: break;
- case eCSSUnit_Percent: aValue.Append("%"); break;
+ case eCSSUnit_Percent: aResult.Append("%"); break;
case eCSSUnit_Number: break;
- case eCSSUnit_Inch: aValue.Append("in"); break;
- case eCSSUnit_Foot: aValue.Append("ft"); break;
- case eCSSUnit_Mile: aValue.Append("mi"); break;
- case eCSSUnit_Millimeter: aValue.Append("mm"); break;
- case eCSSUnit_Centimeter: aValue.Append("cm"); break;
- case eCSSUnit_Meter: aValue.Append("m"); break;
- case eCSSUnit_Kilometer: aValue.Append("km"); break;
- case eCSSUnit_Point: aValue.Append("pt"); break;
- case eCSSUnit_Pica: aValue.Append("pc"); break;
- case eCSSUnit_Didot: aValue.Append("dt"); break;
- case eCSSUnit_Cicero: aValue.Append("cc"); break;
- case eCSSUnit_EM: aValue.Append("em"); break;
- case eCSSUnit_EN: aValue.Append("en"); break;
- case eCSSUnit_XHeight: aValue.Append("ex"); break;
- case eCSSUnit_CapHeight: aValue.Append("cap"); break;
- case eCSSUnit_Pixel: aValue.Append("px"); break;
+ case eCSSUnit_Inch: aResult.Append("in"); break;
+ case eCSSUnit_Foot: aResult.Append("ft"); break;
+ case eCSSUnit_Mile: aResult.Append("mi"); break;
+ case eCSSUnit_Millimeter: aResult.Append("mm"); break;
+ case eCSSUnit_Centimeter: aResult.Append("cm"); break;
+ case eCSSUnit_Meter: aResult.Append("m"); break;
+ case eCSSUnit_Kilometer: aResult.Append("km"); break;
+ case eCSSUnit_Point: aResult.Append("pt"); break;
+ case eCSSUnit_Pica: aResult.Append("pc"); break;
+ case eCSSUnit_Didot: aResult.Append("dt"); break;
+ case eCSSUnit_Cicero: aResult.Append("cc"); break;
+ case eCSSUnit_EM: aResult.Append("em"); break;
+ case eCSSUnit_EN: aResult.Append("en"); break;
+ case eCSSUnit_XHeight: aResult.Append("ex"); break;
+ case eCSSUnit_CapHeight: aResult.Append("cap"); break;
+ case eCSSUnit_Pixel: aResult.Append("px"); break;
}
+ return PR_TRUE;
+}
+
+#define HAS_VALUE(strct,data) \
+ ((nsnull != strct) && (eCSSUnit_Null != strct->data.GetUnit()))
+#define HAS_RECT(strct,rect) \
+ ((nsnull != strct) && (nsnull != strct->rect) && \
+ (eCSSUnit_Null != strct->rect->mTop.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mRight.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mBottom.GetUnit()) && \
+ (eCSSUnit_Null != strct->rect->mLeft.GetUnit()))
+
+nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsString& aValue)
+{
+ aValue.Truncate(0);
+
+ // shorthands
+ switch (aProperty) {
+ case PROP_BACKGROUND:
+ if (AppendValueToString(PROP_BACKGROUND_COLOR, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_IMAGE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_REPEAT, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BACKGROUND_ATTACHMENT, aValue)) aValue.Append(' ');
+ if (HAS_VALUE(mColor,mBackPositionX) && HAS_VALUE(mColor,mBackPositionY)) {
+ AppendValueToString(PROP_BACKGROUND_X_POSITION, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_BACKGROUND_Y_POSITION, aValue);
+ }
+ break;
+ case PROP_BORDER:
+ if (AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_TOP_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue);
+ break;
+ case PROP_CLIP:
+ if (HAS_RECT(mDisplay,mClip)) {
+ aValue.Append("rect(");
+ AppendValueToString(PROP_CLIP_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_CLIP_LEFT, aValue);
+ aValue.Append(")");
+ }
+ break;
+ case PROP_CUE:
+ if (HAS_VALUE(mAural,mCueAfter) && HAS_VALUE(mAural,mCueBefore)) {
+ AppendValueToString(PROP_CUE_AFTER, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_CUE_BEFORE, aValue);
+ }
+ break;
+ case PROP_FONT:
+ if (HAS_VALUE(mFont,mSize)) {
+ if (AppendValueToString(PROP_FONT_STYLE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_FONT_VARIANT, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_FONT_WEIGHT, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_FONT_SIZE, aValue);
+ if (HAS_VALUE(mText,mLineHeight)) {
+ aValue.Append('/');
+ AppendValueToString(PROP_LINE_HEIGHT, aValue);
+ }
+ aValue.Append(' ');
+ AppendValueToString(PROP_FONT_FAMILY, aValue);
+ }
+ break;
+ case PROP_LIST_STYLE:
+ if (AppendValueToString(PROP_LIST_STYLE_TYPE, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_LIST_STYLE_POSITION, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_LIST_STYLE_IMAGE, aValue);
+ break;
+ case PROP_MARGIN:
+ if (HAS_RECT(mMargin,mMargin)) {
+ AppendValueToString(PROP_MARGIN_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_MARGIN_LEFT, aValue);
+ }
+ break;
+ case PROP_OUTLINE:
+ if (AppendValueToString(PROP_OUTLINE_COLOR, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_OUTLINE_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_OUTLINE_WIDTH, aValue);
+ break;
+ case PROP_PADDING:
+ if (HAS_RECT(mMargin,mPadding)) {
+ AppendValueToString(PROP_PADDING_TOP, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_RIGHT, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_BOTTOM, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_PADDING_LEFT, aValue);
+ }
+ break;
+ case PROP_PAUSE:
+ if (HAS_VALUE(mAural,mPauseAfter) && HAS_VALUE(mAural,mPauseBefore)) {
+ AppendValueToString(PROP_PAUSE_AFTER, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_PAUSE_BEFORE, aValue);
+ }
+ break;
+ case PROP_TEXT_SHADOW:
+ if ((nsnull != mText) && (nsnull != mText->mTextShadow)) {
+ if (eCSSUnit_Color == mText->mTextShadow->mColor.GetUnit()) {
+ nsCSSShadow* shadow = mText->mTextShadow;
+ while (nsnull != shadow) {
+ if (AppendValueToString(PROP_TEXT_SHADOW_COLOR, shadow->mColor, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_TEXT_SHADOW_X, shadow->mXOffset, aValue)) {
+ aValue.Append(' ');
+ AppendValueToString(PROP_TEXT_SHADOW_Y, shadow->mYOffset, aValue);
+ aValue.Append(' ');
+ }
+ if (AppendValueToString(PROP_TEXT_SHADOW_RADIUS, shadow->mRadius, aValue)) aValue.Append(' ');
+ shadow = shadow->mNext;
+ }
+ }
+ else { // none or inherit
+ AppendValueToString(PROP_TEXT_SHADOW_COLOR, aValue);
+ }
+ }
+ break;
+ case PROP_BACKGROUND_POSITION:
+ if (HAS_VALUE(mColor,mBackPositionX) && HAS_VALUE(mColor,mBackPositionY)) {
+ AppendValueToString(PROP_BACKGROUND_X_POSITION, aValue);
+ aValue.Append(' ');
+ AppendValueToString(PROP_BACKGROUND_Y_POSITION, aValue);
+ }
+ break;
+ case PROP_BORDER_TOP:
+ if (AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_TOP_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue);
+ break;
+ case PROP_BORDER_RIGHT:
+ if (AppendValueToString(PROP_BORDER_RIGHT_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_RIGHT_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_COLOR, aValue);
+ break;
+ case PROP_BORDER_BOTTOM:
+ if (AppendValueToString(PROP_BORDER_BOTTOM_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_BOTTOM_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_COLOR, aValue);
+ break;
+ case PROP_BORDER_LEFT:
+ if (AppendValueToString(PROP_BORDER_LEFT_WIDTH, aValue)) aValue.Append(' ');
+ if (AppendValueToString(PROP_BORDER_LEFT_STYLE, aValue)) aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_COLOR, aValue);
+ break;
+ case PROP_BORDER_COLOR:
+ if (HAS_RECT(mMargin,mBorderColor)) {
+ AppendValueToString(PROP_BORDER_TOP_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_COLOR, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_COLOR, aValue);
+ }
+ break;
+ case PROP_BORDER_STYLE:
+ if (HAS_RECT(mMargin,mBorderStyle)) {
+ AppendValueToString(PROP_BORDER_TOP_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_STYLE, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_STYLE, aValue);
+ }
+ break;
+ case PROP_BORDER_WIDTH:
+ if (HAS_RECT(mMargin,mBorderWidth)) {
+ AppendValueToString(PROP_BORDER_TOP_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_RIGHT_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_BOTTOM_WIDTH, aValue); aValue.Append(' ');
+ AppendValueToString(PROP_BORDER_LEFT_WIDTH, aValue);
+ }
+ break;
+ default:
+ AppendValueToString(aProperty, aValue);
+ break;
+ }
return NS_OK;
}
@@ -2434,6 +2754,9 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mText) {
mText->List(out);
}
+ if (nsnull != mDisplay) {
+ mDisplay->List(out);
+ }
if (nsnull != mMargin) {
mMargin->List(out);
}
@@ -2443,8 +2766,20 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mList) {
mList->List(out);
}
- if (nsnull != mDisplay) {
- mDisplay->List(out);
+ if (nsnull != mTable) {
+ mTable->List(out);
+ }
+ if (nsnull != mBreaks) {
+ mBreaks->List(out);
+ }
+ if (nsnull != mPage) {
+ mPage->List(out);
+ }
+ if (nsnull != mContent) {
+ mContent->List(out);
+ }
+ if (nsnull != mAural) {
+ mAural->List(out);
}
fputs("}", out);
@@ -2501,78 +2836,3 @@ NS_HTML nsresult
}
-
-
-/*
-font
-===========
-font-family: string (list)
-font-style: enum
-font-variant: enum (ie: small caps)
-font-weight: enum
-font-size: abs, pct, enum, +-1
-
-
-color/background
-=============
-color: color
-background-color: color
-background-image: url(string)
-background-repeat: enum
-background-attachment: enum
-background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?))
-cursor: enum
-cursor-image: url(string)
-
-
-text
-=======
-word-spacing: abs, "normal"
-letter-spacing: abs, "normal"
-text-decoration: enum
-vertical-align: enum, pct
-text-transform: enum
-text-align: enum
-text-indent: abs, pct
-line-height: "normal", abs, pct, number-factor
-white-space: enum
-
-margin
-=======
-margin-top -right -bottom -left: "auto", abs, pct
-padding-top -right -bottom -left: abs, pct
-border-top -right -bottom -left-width: enum, abs
-border-top -right -bottom -left-color: color
-border-top -right -bottom -left-style: enum
-
-size
-=======
-position: enum
-width: abs, pct, "auto"
-height: abs, pct, "auto"
-left: abs, pct, "auto"
-top: abs, pct, "auto"
-clip: shape, "auto" (shape: rect - abs, auto)
-overflow: enum
-z-index: int, auto
-visibity: enum
-
-display
-=======
-float: enum
-clear: enum
-direction: enum
-display: enum
-
-filter: string
-
-list
-========
-list-style-type: enum
-list-style-image: url, "none"
-list-style-position: enum (bool? in/out)
-
-*/
-
-
-