/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Daniel Glazman * Mats Palmgren * * Alternatively, the contents of this file may be used under the terms of * either of the GNU General Public License Version 2 or later (the "GPL"), * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ /* * temporary (expanded) representation of the property-value pairs * within a CSS declaration using during parsing and mutation, and * representation of complex values for CSS properties */ #include "nscore.h" #include "nsCSSStruct.h" #include "nsString.h" #include "nsIAtom.h" #include "nsUnicharUtils.h" #include "nsCRT.h" #include "nsCSSProps.h" #include "nsFont.h" #include "nsStyleConsts.h" #include "nsCOMPtr.h" #include "nsReadableUtils.h" #include "nsPrintfCString.h" #define CSS_IF_DELETE(ptr) if (nsnull != ptr) { delete ptr; ptr = nsnull; } // --- nsCSSFont ----------------- nsCSSFont::nsCSSFont(void) { MOZ_COUNT_CTOR(nsCSSFont); } nsCSSFont::~nsCSSFont(void) { MOZ_COUNT_DTOR(nsCSSFont); } // --- support ----------------- #define CSS_IF_COPY(val, type) \ if (aCopy.val) (val) = new type(*(aCopy.val)); nsCSSValueList::nsCSSValueList(void) : mValue(), mNext(nsnull) { MOZ_COUNT_CTOR(nsCSSValueList); } nsCSSValueList::nsCSSValueList(const nsCSSValueList& aCopy) : mValue(aCopy.mValue), mNext(nsnull) { MOZ_COUNT_CTOR(nsCSSValueList); CSS_IF_COPY(mNext, nsCSSValueList); } nsCSSValueList::~nsCSSValueList(void) { MOZ_COUNT_DTOR(nsCSSValueList); CSS_IF_DELETE(mNext); } /* static */ PRBool nsCSSValueList::Equal(nsCSSValueList* aList1, nsCSSValueList* aList2) { if (aList1 == aList2) return PR_TRUE; nsCSSValueList *p1 = aList1, *p2 = aList2; for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) { if (p1->mValue != p2->mValue) return PR_FALSE; } return !p1 && !p2; // true if same length, false otherwise } // --- nsCSSColor ----------------- nsCSSColor::nsCSSColor(void) { MOZ_COUNT_CTOR(nsCSSColor); } nsCSSColor::~nsCSSColor(void) { MOZ_COUNT_DTOR(nsCSSColor); } // --- nsCSSText ----------------- nsCSSText::nsCSSText(void) : mTextShadow(nsnull) { MOZ_COUNT_CTOR(nsCSSText); } nsCSSText::~nsCSSText(void) { MOZ_COUNT_DTOR(nsCSSText); CSS_IF_DELETE(mTextShadow); } // --- nsCSSRect ----------------- nsCSSRect::nsCSSRect(void) { MOZ_COUNT_CTOR(nsCSSRect); } nsCSSRect::nsCSSRect(const nsCSSRect& aCopy) : mTop(aCopy.mTop), mRight(aCopy.mRight), mBottom(aCopy.mBottom), mLeft(aCopy.mLeft) { MOZ_COUNT_CTOR(nsCSSRect); } nsCSSRect::~nsCSSRect() { MOZ_COUNT_DTOR(nsCSSRect); } void nsCSSRect::SetAllSidesTo(const nsCSSValue& aValue) { mTop = aValue; mRight = aValue; mBottom = aValue; mLeft = aValue; } #if (NS_SIDE_TOP != 0) || (NS_SIDE_RIGHT != 1) || (NS_SIDE_BOTTOM != 2) || (NS_SIDE_LEFT != 3) #error "Somebody changed the side constants." #endif /* static */ const nsCSSRect::side_type nsCSSRect::sides[4] = { &nsCSSRect::mTop, &nsCSSRect::mRight, &nsCSSRect::mBottom, &nsCSSRect::mLeft, }; // --- nsCSSValueListRect ----------------- nsCSSValueListRect::nsCSSValueListRect(void) : mTop(nsnull), mRight(nsnull), mBottom(nsnull), mLeft(nsnull) { MOZ_COUNT_CTOR(nsCSSValueListRect); } nsCSSValueListRect::nsCSSValueListRect(const nsCSSValueListRect& aCopy) : mTop(aCopy.mTop), mRight(aCopy.mRight), mBottom(aCopy.mBottom), mLeft(aCopy.mLeft) { MOZ_COUNT_CTOR(nsCSSValueListRect); } nsCSSValueListRect::~nsCSSValueListRect() { MOZ_COUNT_DTOR(nsCSSValueListRect); } /* static */ const nsCSSValueListRect::side_type nsCSSValueListRect::sides[4] = { &nsCSSValueListRect::mTop, &nsCSSValueListRect::mRight, &nsCSSValueListRect::mBottom, &nsCSSValueListRect::mLeft, }; // --- nsCSSDisplay ----------------- nsCSSDisplay::nsCSSDisplay(void) { MOZ_COUNT_CTOR(nsCSSDisplay); } nsCSSDisplay::~nsCSSDisplay(void) { MOZ_COUNT_DTOR(nsCSSDisplay); } // --- nsCSSMargin ----------------- nsCSSMargin::nsCSSMargin(void) : mBoxShadow(nsnull) { MOZ_COUNT_CTOR(nsCSSMargin); } nsCSSMargin::~nsCSSMargin(void) { MOZ_COUNT_DTOR(nsCSSMargin); CSS_IF_DELETE(mBoxShadow); } // --- nsCSSPosition ----------------- nsCSSPosition::nsCSSPosition(void) { MOZ_COUNT_CTOR(nsCSSPosition); } nsCSSPosition::~nsCSSPosition(void) { MOZ_COUNT_DTOR(nsCSSPosition); } // --- nsCSSList ----------------- nsCSSList::nsCSSList(void) { MOZ_COUNT_CTOR(nsCSSList); } nsCSSList::~nsCSSList(void) { MOZ_COUNT_DTOR(nsCSSList); } // --- nsCSSTable ----------------- nsCSSTable::nsCSSTable(void) { MOZ_COUNT_CTOR(nsCSSTable); } nsCSSTable::~nsCSSTable(void) { MOZ_COUNT_DTOR(nsCSSTable); } // --- nsCSSBreaks ----------------- nsCSSBreaks::nsCSSBreaks(void) { MOZ_COUNT_CTOR(nsCSSBreaks); } nsCSSBreaks::~nsCSSBreaks(void) { MOZ_COUNT_DTOR(nsCSSBreaks); } // --- nsCSSPage ----------------- nsCSSPage::nsCSSPage(void) { MOZ_COUNT_CTOR(nsCSSPage); } nsCSSPage::~nsCSSPage(void) { MOZ_COUNT_DTOR(nsCSSPage); } // --- nsCSSContent support ----------------- nsCSSValuePairList::nsCSSValuePairList() : mNext(nsnull) { MOZ_COUNT_CTOR(nsCSSValuePairList); } nsCSSValuePairList::nsCSSValuePairList(const nsCSSValuePairList& aCopy) : mXValue(aCopy.mXValue), mYValue(aCopy.mYValue), mNext(nsnull) { MOZ_COUNT_CTOR(nsCSSValuePairList); CSS_IF_COPY(mNext, nsCSSValuePairList); } nsCSSValuePairList::~nsCSSValuePairList() { MOZ_COUNT_DTOR(nsCSSValuePairList); CSS_IF_DELETE(mNext); } /* static */ PRBool nsCSSValuePairList::Equal(nsCSSValuePairList* aList1, nsCSSValuePairList* aList2) { if (aList1 == aList2) return PR_TRUE; nsCSSValuePairList *p1 = aList1, *p2 = aList2; for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) { if (p1->mXValue != p2->mXValue || p1->mYValue != p2->mYValue) return PR_FALSE; } return !p1 && !p2; // true if same length, false otherwise } // --- nsCSSContent ----------------- nsCSSContent::nsCSSContent(void) : mContent(nsnull), mCounterIncrement(nsnull), mCounterReset(nsnull), mQuotes(nsnull) { MOZ_COUNT_CTOR(nsCSSContent); } nsCSSContent::~nsCSSContent(void) { MOZ_COUNT_DTOR(nsCSSContent); CSS_IF_DELETE(mContent); CSS_IF_DELETE(mCounterIncrement); CSS_IF_DELETE(mCounterReset); CSS_IF_DELETE(mQuotes); } // --- nsCSSUserInterface ----------------- nsCSSUserInterface::nsCSSUserInterface(void) : mCursor(nsnull) { MOZ_COUNT_CTOR(nsCSSUserInterface); } nsCSSUserInterface::~nsCSSUserInterface(void) { MOZ_COUNT_DTOR(nsCSSUserInterface); CSS_IF_DELETE(mCursor); } // --- nsCSSAural ----------------- nsCSSAural::nsCSSAural(void) { MOZ_COUNT_CTOR(nsCSSAural); } nsCSSAural::~nsCSSAural(void) { MOZ_COUNT_DTOR(nsCSSAural); } // --- nsCSSXUL ----------------- nsCSSXUL::nsCSSXUL(void) { MOZ_COUNT_CTOR(nsCSSXUL); } nsCSSXUL::~nsCSSXUL(void) { MOZ_COUNT_DTOR(nsCSSXUL); } // --- nsCSSColumn ----------------- nsCSSColumn::nsCSSColumn(void) { MOZ_COUNT_CTOR(nsCSSColumn); } nsCSSColumn::~nsCSSColumn(void) { MOZ_COUNT_DTOR(nsCSSColumn); } #ifdef MOZ_SVG // --- nsCSSSVG ----------------- nsCSSSVG::nsCSSSVG(void) : mStrokeDasharray(nsnull) { MOZ_COUNT_CTOR(nsCSSSVG); } nsCSSSVG::~nsCSSSVG(void) { MOZ_COUNT_DTOR(nsCSSSVG); CSS_IF_DELETE(mStrokeDasharray); } #endif // MOZ_SVG