From 98f788ca358a76c1ca909bb57d097264d160741f Mon Sep 17 00:00:00 2001 From: "peterl%netscape.com" Date: Mon, 26 Oct 1998 23:19:59 +0000 Subject: [PATCH] added new value types git-svn-id: svn://10.0.0.236/trunk@13508 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/html/style/src/nsCSSValue.cpp | 105 +++++++++++------- mozilla/content/html/style/src/nsCSSValue.h | 97 ++++++++++------ mozilla/layout/html/style/src/nsCSSValue.cpp | 105 +++++++++++------- mozilla/layout/html/style/src/nsCSSValue.h | 97 ++++++++++------ mozilla/layout/style/nsCSSValue.cpp | 105 +++++++++++------- mozilla/layout/style/nsCSSValue.h | 97 ++++++++++------ 6 files changed, 384 insertions(+), 222 deletions(-) diff --git a/mozilla/content/html/style/src/nsCSSValue.cpp b/mozilla/content/html/style/src/nsCSSValue.cpp index a2b6bf3aa9f..5b8f691dba3 100644 --- a/mozilla/content/html/style/src/nsCSSValue.cpp +++ b/mozilla/content/html/style/src/nsCSSValue.cpp @@ -28,7 +28,7 @@ nsCSSValue::nsCSSValue(nsCSSUnit aUnit) : mUnit(aUnit) { - NS_ASSERTION(mUnit <= eCSSUnit_Normal, "not a valueless unit"); + NS_ASSERTION(aUnit <= eCSSUnit_Normal, "not a valueless unit"); if (aUnit > eCSSUnit_Normal) { mUnit = eCSSUnit_Null; } @@ -63,10 +63,17 @@ nsCSSValue::nsCSSValue(float aValue, nsCSSUnit aUnit) } } -nsCSSValue::nsCSSValue(const nsString& aValue) - : mUnit(eCSSUnit_String) +nsCSSValue::nsCSSValue(const nsString& aValue, nsCSSUnit aUnit) + : mUnit(aUnit) { - mValue.mString = aValue.ToNewString(); + NS_ASSERTION((eCSSUnit_String <= aUnit) && (aUnit <= eCSSUnit_Counters), "not a string value"); + if ((eCSSUnit_String <= aUnit) && (aUnit <= eCSSUnit_Counters)) { + mValue.mString = aValue.ToNewString(); + } + else { + mUnit = eCSSUnit_Null; + mValue.mInt = 0; + } } nsCSSValue::nsCSSValue(nscolor aValue) @@ -78,7 +85,7 @@ nsCSSValue::nsCSSValue(nscolor aValue) nsCSSValue::nsCSSValue(const nsCSSValue& aCopy) : mUnit(aCopy.mUnit) { - if (eCSSUnit_String == mUnit) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters)) { if (nsnull != aCopy.mValue.mString) { mValue.mString = (aCopy.mValue.mString)->ToNewString(); } @@ -106,7 +113,7 @@ nsCSSValue& nsCSSValue::operator=(const nsCSSValue& aCopy) { Reset(); mUnit = aCopy.mUnit; - if (eCSSUnit_String == mUnit) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters)) { if (nsnull != aCopy.mValue.mString) { mValue.mString = (aCopy.mValue.mString)->ToNewString(); } @@ -126,7 +133,7 @@ nsCSSValue& nsCSSValue::operator=(const nsCSSValue& aCopy) PRBool nsCSSValue::operator==(const nsCSSValue& aOther) const { if (mUnit == aOther.mUnit) { - if (eCSSUnit_String == mUnit) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters)) { if (nsnull == mValue.mString) { if (nsnull == aOther.mValue.mString) { return PR_TRUE; @@ -186,7 +193,8 @@ nscoord nsCSSValue::GetLengthTwips(void) const void nsCSSValue::Reset(void) { - if ((eCSSUnit_String == mUnit) && (nsnull != mValue.mString)) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters) && + (nsnull != mValue.mString)) { delete mValue.mString; } mUnit = eCSSUnit_Null; @@ -222,11 +230,14 @@ void nsCSSValue::SetFloatValue(float aValue, nsCSSUnit aUnit) } } -void nsCSSValue::SetStringValue(const nsString& aValue) +void nsCSSValue::SetStringValue(const nsString& aValue, nsCSSUnit aUnit) { + NS_ASSERTION((eCSSUnit_String <= aUnit) && (aUnit <= eCSSUnit_Counters), "not a string unit"); Reset(); - mUnit = eCSSUnit_String; - mValue.mString = aValue.ToNewString(); + if ((eCSSUnit_String <= aUnit) && (aUnit <= eCSSUnit_Counters)) { + mUnit = aUnit; + mValue.mString = aValue.ToNewString(); + } } void nsCSSValue::SetColorValue(nscolor aValue) @@ -271,7 +282,14 @@ void nsCSSValue::AppendToString(nsString& aBuffer, PRInt32 aPropID) const aBuffer.Append(": "); } - if (eCSSUnit_String == mUnit) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters)) { + switch (mUnit) { + case eCSSUnit_URL: aBuffer.Append("url("); break; + case eCSSUnit_Attr: aBuffer.Append("attr("); break; + case eCSSUnit_Counter: aBuffer.Append("counter("); break; + case eCSSUnit_Counters: aBuffer.Append("counters("); break; + default: break; + } if (nsnull != mValue.mString) { aBuffer.Append('"'); aBuffer.Append(*(mValue.mString)); @@ -306,32 +324,43 @@ void nsCSSValue::AppendToString(nsString& aBuffer, PRInt32 aPropID) const } 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; + 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_URL: + case eCSSUnit_Attr: + case eCSSUnit_Counter: + case eCSSUnit_Counters: aBuffer.Append(')'); 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; + case eCSSUnit_Degree: aBuffer.Append("deg"); break; + case eCSSUnit_Grad: aBuffer.Append("grad"); break; + case eCSSUnit_Radian: aBuffer.Append("rad"); break; + case eCSSUnit_Hertz: aBuffer.Append("Hz"); break; + case eCSSUnit_Kilohertz: aBuffer.Append("kHz"); break; + case eCSSUnit_Seconds: aBuffer.Append("s"); break; + case eCSSUnit_Milliseconds: aBuffer.Append("ms"); break; } aBuffer.Append(' '); } diff --git a/mozilla/content/html/style/src/nsCSSValue.h b/mozilla/content/html/style/src/nsCSSValue.h index 3aa3a441673..470742fe393 100644 --- a/mozilla/content/html/style/src/nsCSSValue.h +++ b/mozilla/content/html/style/src/nsCSSValue.h @@ -25,46 +25,64 @@ enum nsCSSUnit { - eCSSUnit_Null = 0, // (n/a) null unit, value is not specified - eCSSUnit_Auto = 1, // (n/a) value is algorithmic - eCSSUnit_Inherit = 2, // (n/a) value is inherited - eCSSUnit_None = 3, // (n/a) value is none - eCSSUnit_Normal = 4, // (n/a) value is normal (algorithmic, different than auto) - eCSSUnit_String = 10, // (nsString) a string value - eCSSUnit_Integer = 50, // (int) simple value - eCSSUnit_Enumerated = 51, // (int) value has enumerated meaning - eCSSUnit_Color = 80, // (color) an RGBA value - eCSSUnit_Percent = 90, // (float) 1.0 == 100%) value is percentage of something - eCSSUnit_Number = 91, // (float) value is numeric (usually multiplier, different behavior that percent) + eCSSUnit_Null = 0, // (n/a) null unit, value is not specified + eCSSUnit_Auto = 1, // (n/a) value is algorithmic + eCSSUnit_Inherit = 2, // (n/a) value is inherited + eCSSUnit_None = 3, // (n/a) value is none + eCSSUnit_Normal = 4, // (n/a) value is normal (algorithmic, different than auto) + eCSSUnit_String = 10, // (nsString) a string value + eCSSUnit_URL = 11, // (nsString) a URL value + eCSSUnit_Attr = 12, // (nsString) a attr(string) value + eCSSUnit_Counter = 13, // (nsString) a counter(string,[string]) value + eCSSUnit_Counters = 14, // (nsString) a counters(string,string[,string]) value + eCSSUnit_Integer = 50, // (int) simple value + eCSSUnit_Enumerated = 51, // (int) value has enumerated meaning + eCSSUnit_Color = 80, // (color) an RGBA value + eCSSUnit_Percent = 90, // (float) 1.0 == 100%) value is percentage of something + eCSSUnit_Number = 91, // (float) value is numeric (usually multiplier, different behavior that percent) + // Length units - fixed // US English - eCSSUnit_Inch = 100, // (float) Standard length - eCSSUnit_Foot = 101, // (float) 12 inches - eCSSUnit_Mile = 102, // (float) 5280 feet + eCSSUnit_Inch = 100, // (float) Standard length + eCSSUnit_Foot = 101, // (float) 12 inches + eCSSUnit_Mile = 102, // (float) 5280 feet // Metric - eCSSUnit_Millimeter = 207, // (float) 1/1000 meter - eCSSUnit_Centimeter = 208, // (float) 1/100 meter - eCSSUnit_Meter = 210, // (float) Standard length - eCSSUnit_Kilometer = 213, // (float) 1000 meters + eCSSUnit_Millimeter = 207, // (float) 1/1000 meter + eCSSUnit_Centimeter = 208, // (float) 1/100 meter + eCSSUnit_Meter = 210, // (float) Standard length + eCSSUnit_Kilometer = 213, // (float) 1000 meters // US Typographic - eCSSUnit_Point = 300, // (float) 1/72 inch - eCSSUnit_Pica = 301, // (float) 12 points == 1/6 inch + eCSSUnit_Point = 300, // (float) 1/72 inch + eCSSUnit_Pica = 301, // (float) 12 points == 1/6 inch // European Typographic - eCSSUnit_Didot = 400, // (float) 15 didots == 16 points - eCSSUnit_Cicero = 401, // (float) 12 didots + eCSSUnit_Didot = 400, // (float) 15 didots == 16 points + eCSSUnit_Cicero = 401, // (float) 12 didots - // relative units + // Length units - relative // Font relative measure - eCSSUnit_EM = 800, // (float) == current font size - eCSSUnit_EN = 801, // (float) .5 em - eCSSUnit_XHeight = 802, // (float) distance from top of lower case x to baseline - eCSSUnit_CapHeight = 803, // (float) distance from top of uppercase case H to baseline + eCSSUnit_EM = 800, // (float) == current font size + eCSSUnit_EN = 801, // (float) .5 em + eCSSUnit_XHeight = 802, // (float) distance from top of lower case x to baseline + eCSSUnit_CapHeight = 803, // (float) distance from top of uppercase case H to baseline // Screen relative measure - eCSSUnit_Pixel = 900 // (float) + eCSSUnit_Pixel = 900, // (float) + + // Angular units + eCSSUnit_Degree = 1000, // (float) 360 per circle + eCSSUnit_Grad = 1001, // (float) 400 per circle + eCSSUnit_Radian = 1002, // (float) 2pi per circle + + // Frequency units + eCSSUnit_Hertz = 2000, // (float) + eCSSUnit_Kilohertz = 2001, // (float) + + // Time units + eCSSUnit_Seconds = 3000, // (float) + eCSSUnit_Milliseconds = 3001 // (float) }; class nsCSSValue { @@ -72,7 +90,7 @@ public: nsCSSValue(nsCSSUnit aUnit = eCSSUnit_Null); // for valueless units only (null, auto, inherit, none, normal) nsCSSValue(PRInt32 aValue, nsCSSUnit aUnit); nsCSSValue(float aValue, nsCSSUnit aUnit); - nsCSSValue(const nsString& aValue); + nsCSSValue(const nsString& aValue, nsCSSUnit aUnit); nsCSSValue(nscolor aValue); nsCSSValue(const nsCSSValue& aCopy); ~nsCSSValue(void); @@ -82,11 +100,17 @@ public: nsCSSUnit GetUnit(void) const { return mUnit; }; PRBool IsLengthUnit(void) const - { return PRBool(eCSSUnit_Inch <= mUnit); } + { return PRBool((eCSSUnit_Inch <= mUnit) && (mUnit <= eCSSUnit_Pixel)); } PRBool IsFixedLengthUnit(void) const - { return PRBool((eCSSUnit_Inch <= mUnit) && (mUnit < eCSSUnit_EM)); } + { return PRBool((eCSSUnit_Inch <= mUnit) && (mUnit <= eCSSUnit_Cicero)); } PRBool IsRelativeLengthUnit(void) const - { return PRBool(eCSSUnit_EM <= mUnit); } + { return PRBool((eCSSUnit_EM <= mUnit) && (mUnit <= eCSSUnit_Pixel)); } + PRBool IsAngularUnit(void) const + { return PRBool((eCSSUnit_Degree <= mUnit) && (mUnit <= eCSSUnit_Radian)); } + PRBool IsFrequencyUnit(void) const + { return PRBool((eCSSUnit_Hertz <= mUnit) && (mUnit <= eCSSUnit_Kilohertz)); } + PRBool IsTimeUnit(void) const + { return PRBool((eCSSUnit_Seconds <= mUnit) && (mUnit <= eCSSUnit_Milliseconds)); } PRInt32 GetIntValue(void) const; float GetPercentValue(void) const; @@ -99,7 +123,7 @@ public: void SetIntValue(PRInt32 aValue, nsCSSUnit aUnit); void SetPercentValue(float aValue); void SetFloatValue(float aValue, nsCSSUnit aUnit); - void SetStringValue(const nsString& aValue); + void SetStringValue(const nsString& aValue, nsCSSUnit aUnit); void SetColorValue(nscolor aValue); void SetAutoValue(void); void SetInheritValue(void); @@ -142,7 +166,7 @@ inline float nsCSSValue::GetPercentValue(void) const inline float nsCSSValue::GetFloatValue(void) const { - NS_ASSERTION((mUnit >= eCSSUnit_Number), "not a float value"); + NS_ASSERTION((eCSSUnit_Number <= mUnit), "not a float value"); if ((mUnit >= eCSSUnit_Number)) { return mValue.mFloat; } @@ -151,9 +175,10 @@ inline float nsCSSValue::GetFloatValue(void) const inline nsString& nsCSSValue::GetStringValue(nsString& aBuffer) const { - NS_ASSERTION((mUnit == eCSSUnit_String), "not a string value"); + NS_ASSERTION((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters), "not a string value"); aBuffer.Truncate(); - if ((mUnit == eCSSUnit_String) && (nsnull != mValue.mString)) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters) && + (nsnull != mValue.mString)) { aBuffer.Append(*(mValue.mString)); } return aBuffer; diff --git a/mozilla/layout/html/style/src/nsCSSValue.cpp b/mozilla/layout/html/style/src/nsCSSValue.cpp index a2b6bf3aa9f..5b8f691dba3 100644 --- a/mozilla/layout/html/style/src/nsCSSValue.cpp +++ b/mozilla/layout/html/style/src/nsCSSValue.cpp @@ -28,7 +28,7 @@ nsCSSValue::nsCSSValue(nsCSSUnit aUnit) : mUnit(aUnit) { - NS_ASSERTION(mUnit <= eCSSUnit_Normal, "not a valueless unit"); + NS_ASSERTION(aUnit <= eCSSUnit_Normal, "not a valueless unit"); if (aUnit > eCSSUnit_Normal) { mUnit = eCSSUnit_Null; } @@ -63,10 +63,17 @@ nsCSSValue::nsCSSValue(float aValue, nsCSSUnit aUnit) } } -nsCSSValue::nsCSSValue(const nsString& aValue) - : mUnit(eCSSUnit_String) +nsCSSValue::nsCSSValue(const nsString& aValue, nsCSSUnit aUnit) + : mUnit(aUnit) { - mValue.mString = aValue.ToNewString(); + NS_ASSERTION((eCSSUnit_String <= aUnit) && (aUnit <= eCSSUnit_Counters), "not a string value"); + if ((eCSSUnit_String <= aUnit) && (aUnit <= eCSSUnit_Counters)) { + mValue.mString = aValue.ToNewString(); + } + else { + mUnit = eCSSUnit_Null; + mValue.mInt = 0; + } } nsCSSValue::nsCSSValue(nscolor aValue) @@ -78,7 +85,7 @@ nsCSSValue::nsCSSValue(nscolor aValue) nsCSSValue::nsCSSValue(const nsCSSValue& aCopy) : mUnit(aCopy.mUnit) { - if (eCSSUnit_String == mUnit) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters)) { if (nsnull != aCopy.mValue.mString) { mValue.mString = (aCopy.mValue.mString)->ToNewString(); } @@ -106,7 +113,7 @@ nsCSSValue& nsCSSValue::operator=(const nsCSSValue& aCopy) { Reset(); mUnit = aCopy.mUnit; - if (eCSSUnit_String == mUnit) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters)) { if (nsnull != aCopy.mValue.mString) { mValue.mString = (aCopy.mValue.mString)->ToNewString(); } @@ -126,7 +133,7 @@ nsCSSValue& nsCSSValue::operator=(const nsCSSValue& aCopy) PRBool nsCSSValue::operator==(const nsCSSValue& aOther) const { if (mUnit == aOther.mUnit) { - if (eCSSUnit_String == mUnit) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters)) { if (nsnull == mValue.mString) { if (nsnull == aOther.mValue.mString) { return PR_TRUE; @@ -186,7 +193,8 @@ nscoord nsCSSValue::GetLengthTwips(void) const void nsCSSValue::Reset(void) { - if ((eCSSUnit_String == mUnit) && (nsnull != mValue.mString)) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters) && + (nsnull != mValue.mString)) { delete mValue.mString; } mUnit = eCSSUnit_Null; @@ -222,11 +230,14 @@ void nsCSSValue::SetFloatValue(float aValue, nsCSSUnit aUnit) } } -void nsCSSValue::SetStringValue(const nsString& aValue) +void nsCSSValue::SetStringValue(const nsString& aValue, nsCSSUnit aUnit) { + NS_ASSERTION((eCSSUnit_String <= aUnit) && (aUnit <= eCSSUnit_Counters), "not a string unit"); Reset(); - mUnit = eCSSUnit_String; - mValue.mString = aValue.ToNewString(); + if ((eCSSUnit_String <= aUnit) && (aUnit <= eCSSUnit_Counters)) { + mUnit = aUnit; + mValue.mString = aValue.ToNewString(); + } } void nsCSSValue::SetColorValue(nscolor aValue) @@ -271,7 +282,14 @@ void nsCSSValue::AppendToString(nsString& aBuffer, PRInt32 aPropID) const aBuffer.Append(": "); } - if (eCSSUnit_String == mUnit) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters)) { + switch (mUnit) { + case eCSSUnit_URL: aBuffer.Append("url("); break; + case eCSSUnit_Attr: aBuffer.Append("attr("); break; + case eCSSUnit_Counter: aBuffer.Append("counter("); break; + case eCSSUnit_Counters: aBuffer.Append("counters("); break; + default: break; + } if (nsnull != mValue.mString) { aBuffer.Append('"'); aBuffer.Append(*(mValue.mString)); @@ -306,32 +324,43 @@ void nsCSSValue::AppendToString(nsString& aBuffer, PRInt32 aPropID) const } 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; + 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_URL: + case eCSSUnit_Attr: + case eCSSUnit_Counter: + case eCSSUnit_Counters: aBuffer.Append(')'); 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; + case eCSSUnit_Degree: aBuffer.Append("deg"); break; + case eCSSUnit_Grad: aBuffer.Append("grad"); break; + case eCSSUnit_Radian: aBuffer.Append("rad"); break; + case eCSSUnit_Hertz: aBuffer.Append("Hz"); break; + case eCSSUnit_Kilohertz: aBuffer.Append("kHz"); break; + case eCSSUnit_Seconds: aBuffer.Append("s"); break; + case eCSSUnit_Milliseconds: aBuffer.Append("ms"); break; } aBuffer.Append(' '); } diff --git a/mozilla/layout/html/style/src/nsCSSValue.h b/mozilla/layout/html/style/src/nsCSSValue.h index 3aa3a441673..470742fe393 100644 --- a/mozilla/layout/html/style/src/nsCSSValue.h +++ b/mozilla/layout/html/style/src/nsCSSValue.h @@ -25,46 +25,64 @@ enum nsCSSUnit { - eCSSUnit_Null = 0, // (n/a) null unit, value is not specified - eCSSUnit_Auto = 1, // (n/a) value is algorithmic - eCSSUnit_Inherit = 2, // (n/a) value is inherited - eCSSUnit_None = 3, // (n/a) value is none - eCSSUnit_Normal = 4, // (n/a) value is normal (algorithmic, different than auto) - eCSSUnit_String = 10, // (nsString) a string value - eCSSUnit_Integer = 50, // (int) simple value - eCSSUnit_Enumerated = 51, // (int) value has enumerated meaning - eCSSUnit_Color = 80, // (color) an RGBA value - eCSSUnit_Percent = 90, // (float) 1.0 == 100%) value is percentage of something - eCSSUnit_Number = 91, // (float) value is numeric (usually multiplier, different behavior that percent) + eCSSUnit_Null = 0, // (n/a) null unit, value is not specified + eCSSUnit_Auto = 1, // (n/a) value is algorithmic + eCSSUnit_Inherit = 2, // (n/a) value is inherited + eCSSUnit_None = 3, // (n/a) value is none + eCSSUnit_Normal = 4, // (n/a) value is normal (algorithmic, different than auto) + eCSSUnit_String = 10, // (nsString) a string value + eCSSUnit_URL = 11, // (nsString) a URL value + eCSSUnit_Attr = 12, // (nsString) a attr(string) value + eCSSUnit_Counter = 13, // (nsString) a counter(string,[string]) value + eCSSUnit_Counters = 14, // (nsString) a counters(string,string[,string]) value + eCSSUnit_Integer = 50, // (int) simple value + eCSSUnit_Enumerated = 51, // (int) value has enumerated meaning + eCSSUnit_Color = 80, // (color) an RGBA value + eCSSUnit_Percent = 90, // (float) 1.0 == 100%) value is percentage of something + eCSSUnit_Number = 91, // (float) value is numeric (usually multiplier, different behavior that percent) + // Length units - fixed // US English - eCSSUnit_Inch = 100, // (float) Standard length - eCSSUnit_Foot = 101, // (float) 12 inches - eCSSUnit_Mile = 102, // (float) 5280 feet + eCSSUnit_Inch = 100, // (float) Standard length + eCSSUnit_Foot = 101, // (float) 12 inches + eCSSUnit_Mile = 102, // (float) 5280 feet // Metric - eCSSUnit_Millimeter = 207, // (float) 1/1000 meter - eCSSUnit_Centimeter = 208, // (float) 1/100 meter - eCSSUnit_Meter = 210, // (float) Standard length - eCSSUnit_Kilometer = 213, // (float) 1000 meters + eCSSUnit_Millimeter = 207, // (float) 1/1000 meter + eCSSUnit_Centimeter = 208, // (float) 1/100 meter + eCSSUnit_Meter = 210, // (float) Standard length + eCSSUnit_Kilometer = 213, // (float) 1000 meters // US Typographic - eCSSUnit_Point = 300, // (float) 1/72 inch - eCSSUnit_Pica = 301, // (float) 12 points == 1/6 inch + eCSSUnit_Point = 300, // (float) 1/72 inch + eCSSUnit_Pica = 301, // (float) 12 points == 1/6 inch // European Typographic - eCSSUnit_Didot = 400, // (float) 15 didots == 16 points - eCSSUnit_Cicero = 401, // (float) 12 didots + eCSSUnit_Didot = 400, // (float) 15 didots == 16 points + eCSSUnit_Cicero = 401, // (float) 12 didots - // relative units + // Length units - relative // Font relative measure - eCSSUnit_EM = 800, // (float) == current font size - eCSSUnit_EN = 801, // (float) .5 em - eCSSUnit_XHeight = 802, // (float) distance from top of lower case x to baseline - eCSSUnit_CapHeight = 803, // (float) distance from top of uppercase case H to baseline + eCSSUnit_EM = 800, // (float) == current font size + eCSSUnit_EN = 801, // (float) .5 em + eCSSUnit_XHeight = 802, // (float) distance from top of lower case x to baseline + eCSSUnit_CapHeight = 803, // (float) distance from top of uppercase case H to baseline // Screen relative measure - eCSSUnit_Pixel = 900 // (float) + eCSSUnit_Pixel = 900, // (float) + + // Angular units + eCSSUnit_Degree = 1000, // (float) 360 per circle + eCSSUnit_Grad = 1001, // (float) 400 per circle + eCSSUnit_Radian = 1002, // (float) 2pi per circle + + // Frequency units + eCSSUnit_Hertz = 2000, // (float) + eCSSUnit_Kilohertz = 2001, // (float) + + // Time units + eCSSUnit_Seconds = 3000, // (float) + eCSSUnit_Milliseconds = 3001 // (float) }; class nsCSSValue { @@ -72,7 +90,7 @@ public: nsCSSValue(nsCSSUnit aUnit = eCSSUnit_Null); // for valueless units only (null, auto, inherit, none, normal) nsCSSValue(PRInt32 aValue, nsCSSUnit aUnit); nsCSSValue(float aValue, nsCSSUnit aUnit); - nsCSSValue(const nsString& aValue); + nsCSSValue(const nsString& aValue, nsCSSUnit aUnit); nsCSSValue(nscolor aValue); nsCSSValue(const nsCSSValue& aCopy); ~nsCSSValue(void); @@ -82,11 +100,17 @@ public: nsCSSUnit GetUnit(void) const { return mUnit; }; PRBool IsLengthUnit(void) const - { return PRBool(eCSSUnit_Inch <= mUnit); } + { return PRBool((eCSSUnit_Inch <= mUnit) && (mUnit <= eCSSUnit_Pixel)); } PRBool IsFixedLengthUnit(void) const - { return PRBool((eCSSUnit_Inch <= mUnit) && (mUnit < eCSSUnit_EM)); } + { return PRBool((eCSSUnit_Inch <= mUnit) && (mUnit <= eCSSUnit_Cicero)); } PRBool IsRelativeLengthUnit(void) const - { return PRBool(eCSSUnit_EM <= mUnit); } + { return PRBool((eCSSUnit_EM <= mUnit) && (mUnit <= eCSSUnit_Pixel)); } + PRBool IsAngularUnit(void) const + { return PRBool((eCSSUnit_Degree <= mUnit) && (mUnit <= eCSSUnit_Radian)); } + PRBool IsFrequencyUnit(void) const + { return PRBool((eCSSUnit_Hertz <= mUnit) && (mUnit <= eCSSUnit_Kilohertz)); } + PRBool IsTimeUnit(void) const + { return PRBool((eCSSUnit_Seconds <= mUnit) && (mUnit <= eCSSUnit_Milliseconds)); } PRInt32 GetIntValue(void) const; float GetPercentValue(void) const; @@ -99,7 +123,7 @@ public: void SetIntValue(PRInt32 aValue, nsCSSUnit aUnit); void SetPercentValue(float aValue); void SetFloatValue(float aValue, nsCSSUnit aUnit); - void SetStringValue(const nsString& aValue); + void SetStringValue(const nsString& aValue, nsCSSUnit aUnit); void SetColorValue(nscolor aValue); void SetAutoValue(void); void SetInheritValue(void); @@ -142,7 +166,7 @@ inline float nsCSSValue::GetPercentValue(void) const inline float nsCSSValue::GetFloatValue(void) const { - NS_ASSERTION((mUnit >= eCSSUnit_Number), "not a float value"); + NS_ASSERTION((eCSSUnit_Number <= mUnit), "not a float value"); if ((mUnit >= eCSSUnit_Number)) { return mValue.mFloat; } @@ -151,9 +175,10 @@ inline float nsCSSValue::GetFloatValue(void) const inline nsString& nsCSSValue::GetStringValue(nsString& aBuffer) const { - NS_ASSERTION((mUnit == eCSSUnit_String), "not a string value"); + NS_ASSERTION((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters), "not a string value"); aBuffer.Truncate(); - if ((mUnit == eCSSUnit_String) && (nsnull != mValue.mString)) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters) && + (nsnull != mValue.mString)) { aBuffer.Append(*(mValue.mString)); } return aBuffer; diff --git a/mozilla/layout/style/nsCSSValue.cpp b/mozilla/layout/style/nsCSSValue.cpp index a2b6bf3aa9f..5b8f691dba3 100644 --- a/mozilla/layout/style/nsCSSValue.cpp +++ b/mozilla/layout/style/nsCSSValue.cpp @@ -28,7 +28,7 @@ nsCSSValue::nsCSSValue(nsCSSUnit aUnit) : mUnit(aUnit) { - NS_ASSERTION(mUnit <= eCSSUnit_Normal, "not a valueless unit"); + NS_ASSERTION(aUnit <= eCSSUnit_Normal, "not a valueless unit"); if (aUnit > eCSSUnit_Normal) { mUnit = eCSSUnit_Null; } @@ -63,10 +63,17 @@ nsCSSValue::nsCSSValue(float aValue, nsCSSUnit aUnit) } } -nsCSSValue::nsCSSValue(const nsString& aValue) - : mUnit(eCSSUnit_String) +nsCSSValue::nsCSSValue(const nsString& aValue, nsCSSUnit aUnit) + : mUnit(aUnit) { - mValue.mString = aValue.ToNewString(); + NS_ASSERTION((eCSSUnit_String <= aUnit) && (aUnit <= eCSSUnit_Counters), "not a string value"); + if ((eCSSUnit_String <= aUnit) && (aUnit <= eCSSUnit_Counters)) { + mValue.mString = aValue.ToNewString(); + } + else { + mUnit = eCSSUnit_Null; + mValue.mInt = 0; + } } nsCSSValue::nsCSSValue(nscolor aValue) @@ -78,7 +85,7 @@ nsCSSValue::nsCSSValue(nscolor aValue) nsCSSValue::nsCSSValue(const nsCSSValue& aCopy) : mUnit(aCopy.mUnit) { - if (eCSSUnit_String == mUnit) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters)) { if (nsnull != aCopy.mValue.mString) { mValue.mString = (aCopy.mValue.mString)->ToNewString(); } @@ -106,7 +113,7 @@ nsCSSValue& nsCSSValue::operator=(const nsCSSValue& aCopy) { Reset(); mUnit = aCopy.mUnit; - if (eCSSUnit_String == mUnit) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters)) { if (nsnull != aCopy.mValue.mString) { mValue.mString = (aCopy.mValue.mString)->ToNewString(); } @@ -126,7 +133,7 @@ nsCSSValue& nsCSSValue::operator=(const nsCSSValue& aCopy) PRBool nsCSSValue::operator==(const nsCSSValue& aOther) const { if (mUnit == aOther.mUnit) { - if (eCSSUnit_String == mUnit) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters)) { if (nsnull == mValue.mString) { if (nsnull == aOther.mValue.mString) { return PR_TRUE; @@ -186,7 +193,8 @@ nscoord nsCSSValue::GetLengthTwips(void) const void nsCSSValue::Reset(void) { - if ((eCSSUnit_String == mUnit) && (nsnull != mValue.mString)) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters) && + (nsnull != mValue.mString)) { delete mValue.mString; } mUnit = eCSSUnit_Null; @@ -222,11 +230,14 @@ void nsCSSValue::SetFloatValue(float aValue, nsCSSUnit aUnit) } } -void nsCSSValue::SetStringValue(const nsString& aValue) +void nsCSSValue::SetStringValue(const nsString& aValue, nsCSSUnit aUnit) { + NS_ASSERTION((eCSSUnit_String <= aUnit) && (aUnit <= eCSSUnit_Counters), "not a string unit"); Reset(); - mUnit = eCSSUnit_String; - mValue.mString = aValue.ToNewString(); + if ((eCSSUnit_String <= aUnit) && (aUnit <= eCSSUnit_Counters)) { + mUnit = aUnit; + mValue.mString = aValue.ToNewString(); + } } void nsCSSValue::SetColorValue(nscolor aValue) @@ -271,7 +282,14 @@ void nsCSSValue::AppendToString(nsString& aBuffer, PRInt32 aPropID) const aBuffer.Append(": "); } - if (eCSSUnit_String == mUnit) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters)) { + switch (mUnit) { + case eCSSUnit_URL: aBuffer.Append("url("); break; + case eCSSUnit_Attr: aBuffer.Append("attr("); break; + case eCSSUnit_Counter: aBuffer.Append("counter("); break; + case eCSSUnit_Counters: aBuffer.Append("counters("); break; + default: break; + } if (nsnull != mValue.mString) { aBuffer.Append('"'); aBuffer.Append(*(mValue.mString)); @@ -306,32 +324,43 @@ void nsCSSValue::AppendToString(nsString& aBuffer, PRInt32 aPropID) const } 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; + 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_URL: + case eCSSUnit_Attr: + case eCSSUnit_Counter: + case eCSSUnit_Counters: aBuffer.Append(')'); 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; + case eCSSUnit_Degree: aBuffer.Append("deg"); break; + case eCSSUnit_Grad: aBuffer.Append("grad"); break; + case eCSSUnit_Radian: aBuffer.Append("rad"); break; + case eCSSUnit_Hertz: aBuffer.Append("Hz"); break; + case eCSSUnit_Kilohertz: aBuffer.Append("kHz"); break; + case eCSSUnit_Seconds: aBuffer.Append("s"); break; + case eCSSUnit_Milliseconds: aBuffer.Append("ms"); break; } aBuffer.Append(' '); } diff --git a/mozilla/layout/style/nsCSSValue.h b/mozilla/layout/style/nsCSSValue.h index 3aa3a441673..470742fe393 100644 --- a/mozilla/layout/style/nsCSSValue.h +++ b/mozilla/layout/style/nsCSSValue.h @@ -25,46 +25,64 @@ enum nsCSSUnit { - eCSSUnit_Null = 0, // (n/a) null unit, value is not specified - eCSSUnit_Auto = 1, // (n/a) value is algorithmic - eCSSUnit_Inherit = 2, // (n/a) value is inherited - eCSSUnit_None = 3, // (n/a) value is none - eCSSUnit_Normal = 4, // (n/a) value is normal (algorithmic, different than auto) - eCSSUnit_String = 10, // (nsString) a string value - eCSSUnit_Integer = 50, // (int) simple value - eCSSUnit_Enumerated = 51, // (int) value has enumerated meaning - eCSSUnit_Color = 80, // (color) an RGBA value - eCSSUnit_Percent = 90, // (float) 1.0 == 100%) value is percentage of something - eCSSUnit_Number = 91, // (float) value is numeric (usually multiplier, different behavior that percent) + eCSSUnit_Null = 0, // (n/a) null unit, value is not specified + eCSSUnit_Auto = 1, // (n/a) value is algorithmic + eCSSUnit_Inherit = 2, // (n/a) value is inherited + eCSSUnit_None = 3, // (n/a) value is none + eCSSUnit_Normal = 4, // (n/a) value is normal (algorithmic, different than auto) + eCSSUnit_String = 10, // (nsString) a string value + eCSSUnit_URL = 11, // (nsString) a URL value + eCSSUnit_Attr = 12, // (nsString) a attr(string) value + eCSSUnit_Counter = 13, // (nsString) a counter(string,[string]) value + eCSSUnit_Counters = 14, // (nsString) a counters(string,string[,string]) value + eCSSUnit_Integer = 50, // (int) simple value + eCSSUnit_Enumerated = 51, // (int) value has enumerated meaning + eCSSUnit_Color = 80, // (color) an RGBA value + eCSSUnit_Percent = 90, // (float) 1.0 == 100%) value is percentage of something + eCSSUnit_Number = 91, // (float) value is numeric (usually multiplier, different behavior that percent) + // Length units - fixed // US English - eCSSUnit_Inch = 100, // (float) Standard length - eCSSUnit_Foot = 101, // (float) 12 inches - eCSSUnit_Mile = 102, // (float) 5280 feet + eCSSUnit_Inch = 100, // (float) Standard length + eCSSUnit_Foot = 101, // (float) 12 inches + eCSSUnit_Mile = 102, // (float) 5280 feet // Metric - eCSSUnit_Millimeter = 207, // (float) 1/1000 meter - eCSSUnit_Centimeter = 208, // (float) 1/100 meter - eCSSUnit_Meter = 210, // (float) Standard length - eCSSUnit_Kilometer = 213, // (float) 1000 meters + eCSSUnit_Millimeter = 207, // (float) 1/1000 meter + eCSSUnit_Centimeter = 208, // (float) 1/100 meter + eCSSUnit_Meter = 210, // (float) Standard length + eCSSUnit_Kilometer = 213, // (float) 1000 meters // US Typographic - eCSSUnit_Point = 300, // (float) 1/72 inch - eCSSUnit_Pica = 301, // (float) 12 points == 1/6 inch + eCSSUnit_Point = 300, // (float) 1/72 inch + eCSSUnit_Pica = 301, // (float) 12 points == 1/6 inch // European Typographic - eCSSUnit_Didot = 400, // (float) 15 didots == 16 points - eCSSUnit_Cicero = 401, // (float) 12 didots + eCSSUnit_Didot = 400, // (float) 15 didots == 16 points + eCSSUnit_Cicero = 401, // (float) 12 didots - // relative units + // Length units - relative // Font relative measure - eCSSUnit_EM = 800, // (float) == current font size - eCSSUnit_EN = 801, // (float) .5 em - eCSSUnit_XHeight = 802, // (float) distance from top of lower case x to baseline - eCSSUnit_CapHeight = 803, // (float) distance from top of uppercase case H to baseline + eCSSUnit_EM = 800, // (float) == current font size + eCSSUnit_EN = 801, // (float) .5 em + eCSSUnit_XHeight = 802, // (float) distance from top of lower case x to baseline + eCSSUnit_CapHeight = 803, // (float) distance from top of uppercase case H to baseline // Screen relative measure - eCSSUnit_Pixel = 900 // (float) + eCSSUnit_Pixel = 900, // (float) + + // Angular units + eCSSUnit_Degree = 1000, // (float) 360 per circle + eCSSUnit_Grad = 1001, // (float) 400 per circle + eCSSUnit_Radian = 1002, // (float) 2pi per circle + + // Frequency units + eCSSUnit_Hertz = 2000, // (float) + eCSSUnit_Kilohertz = 2001, // (float) + + // Time units + eCSSUnit_Seconds = 3000, // (float) + eCSSUnit_Milliseconds = 3001 // (float) }; class nsCSSValue { @@ -72,7 +90,7 @@ public: nsCSSValue(nsCSSUnit aUnit = eCSSUnit_Null); // for valueless units only (null, auto, inherit, none, normal) nsCSSValue(PRInt32 aValue, nsCSSUnit aUnit); nsCSSValue(float aValue, nsCSSUnit aUnit); - nsCSSValue(const nsString& aValue); + nsCSSValue(const nsString& aValue, nsCSSUnit aUnit); nsCSSValue(nscolor aValue); nsCSSValue(const nsCSSValue& aCopy); ~nsCSSValue(void); @@ -82,11 +100,17 @@ public: nsCSSUnit GetUnit(void) const { return mUnit; }; PRBool IsLengthUnit(void) const - { return PRBool(eCSSUnit_Inch <= mUnit); } + { return PRBool((eCSSUnit_Inch <= mUnit) && (mUnit <= eCSSUnit_Pixel)); } PRBool IsFixedLengthUnit(void) const - { return PRBool((eCSSUnit_Inch <= mUnit) && (mUnit < eCSSUnit_EM)); } + { return PRBool((eCSSUnit_Inch <= mUnit) && (mUnit <= eCSSUnit_Cicero)); } PRBool IsRelativeLengthUnit(void) const - { return PRBool(eCSSUnit_EM <= mUnit); } + { return PRBool((eCSSUnit_EM <= mUnit) && (mUnit <= eCSSUnit_Pixel)); } + PRBool IsAngularUnit(void) const + { return PRBool((eCSSUnit_Degree <= mUnit) && (mUnit <= eCSSUnit_Radian)); } + PRBool IsFrequencyUnit(void) const + { return PRBool((eCSSUnit_Hertz <= mUnit) && (mUnit <= eCSSUnit_Kilohertz)); } + PRBool IsTimeUnit(void) const + { return PRBool((eCSSUnit_Seconds <= mUnit) && (mUnit <= eCSSUnit_Milliseconds)); } PRInt32 GetIntValue(void) const; float GetPercentValue(void) const; @@ -99,7 +123,7 @@ public: void SetIntValue(PRInt32 aValue, nsCSSUnit aUnit); void SetPercentValue(float aValue); void SetFloatValue(float aValue, nsCSSUnit aUnit); - void SetStringValue(const nsString& aValue); + void SetStringValue(const nsString& aValue, nsCSSUnit aUnit); void SetColorValue(nscolor aValue); void SetAutoValue(void); void SetInheritValue(void); @@ -142,7 +166,7 @@ inline float nsCSSValue::GetPercentValue(void) const inline float nsCSSValue::GetFloatValue(void) const { - NS_ASSERTION((mUnit >= eCSSUnit_Number), "not a float value"); + NS_ASSERTION((eCSSUnit_Number <= mUnit), "not a float value"); if ((mUnit >= eCSSUnit_Number)) { return mValue.mFloat; } @@ -151,9 +175,10 @@ inline float nsCSSValue::GetFloatValue(void) const inline nsString& nsCSSValue::GetStringValue(nsString& aBuffer) const { - NS_ASSERTION((mUnit == eCSSUnit_String), "not a string value"); + NS_ASSERTION((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters), "not a string value"); aBuffer.Truncate(); - if ((mUnit == eCSSUnit_String) && (nsnull != mValue.mString)) { + if ((eCSSUnit_String <= mUnit) && (mUnit <= eCSSUnit_Counters) && + (nsnull != mValue.mString)) { aBuffer.Append(*(mValue.mString)); } return aBuffer;