Added support for more properties

This commit is contained in:
kipp 1998-04-25 18:43:42 +00:00
Родитель 7e340e0d25
Коммит 7207ba993f
5 изменённых файлов: 485 добавлений и 135 удалений

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

@ -26,6 +26,7 @@
static NS_DEFINE_IID(kCSSFontSID, NS_CSS_FONT_SID); static NS_DEFINE_IID(kCSSFontSID, NS_CSS_FONT_SID);
static NS_DEFINE_IID(kCSSColorSID, NS_CSS_COLOR_SID); static NS_DEFINE_IID(kCSSColorSID, NS_CSS_COLOR_SID);
static NS_DEFINE_IID(kCSSDisplaySID, NS_CSS_DISPLAY_SID);
static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID); static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID);
static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID); static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID);
static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID); static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID);
@ -325,6 +326,8 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
mBackPositionX.AppendToString(buffer, PROP_BACKGROUND_X_POSITION); mBackPositionX.AppendToString(buffer, PROP_BACKGROUND_X_POSITION);
mBackPositionY.AppendToString(buffer, PROP_BACKGROUND_Y_POSITION); mBackPositionY.AppendToString(buffer, PROP_BACKGROUND_Y_POSITION);
mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER); mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER);
mCursor.AppendToString(buffer, PROP_CURSOR);
mCursorImage.AppendToString(buffer, PROP_CURSOR_IMAGE);
fputs(buffer, out); fputs(buffer, out);
} }
@ -344,13 +347,31 @@ void nsCSSText::List(FILE* out, PRInt32 aIndent) const
mDecoration.AppendToString(buffer, PROP_TEXT_DECORATION); mDecoration.AppendToString(buffer, PROP_TEXT_DECORATION);
mVertAlign.AppendToString(buffer, PROP_VERTICAL_ALIGN); mVertAlign.AppendToString(buffer, PROP_VERTICAL_ALIGN);
mTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM); mTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM);
mHorzAlign.AppendToString(buffer, PROP_TEXT_ALIGN); mTextAlign.AppendToString(buffer, PROP_TEXT_ALIGN);
mIndent.AppendToString(buffer, PROP_TEXT_INDENT); mIndent.AppendToString(buffer, PROP_TEXT_INDENT);
mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT); mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT);
mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE); mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE);
fputs(buffer, out); fputs(buffer, out);
} }
const nsID& nsCSSDisplay::GetID(void)
{
return kCSSDisplaySID;
}
void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
{
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
nsAutoString buffer;
mDirection.AppendToString(buffer, PROP_DIRECTION);
mDisplay.AppendToString(buffer, PROP_DISPLAY);
mFloat.AppendToString(buffer, PROP_FLOAT);
mClear.AppendToString(buffer, PROP_CLEAR);
fputs(buffer, out);
}
void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const
{ {
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out); for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
@ -455,9 +476,6 @@ void nsCSSPosition::List(FILE* out, PRInt32 aIndent) const
mOverflow.AppendToString(buffer, PROP_OVERFLOW); mOverflow.AppendToString(buffer, PROP_OVERFLOW);
mZIndex.AppendToString(buffer, PROP_OVERFLOW); mZIndex.AppendToString(buffer, PROP_OVERFLOW);
mVisibility.AppendToString(buffer, PROP_VISIBILITY); mVisibility.AppendToString(buffer, PROP_VISIBILITY);
mFloat.AppendToString(buffer, PROP_FLOAT);
mClear.AppendToString(buffer, PROP_CLEAR);
mDisplay.AppendToString(buffer, PROP_DISPLAY);
mFilter.AppendToString(buffer, PROP_FILTER); mFilter.AppendToString(buffer, PROP_FILTER);
fputs(buffer, out); fputs(buffer, out);
} }
@ -512,6 +530,7 @@ protected:
nsCSSMargin* mMargin; nsCSSMargin* mMargin;
nsCSSPosition* mPosition; nsCSSPosition* mPosition;
nsCSSList* mList; nsCSSList* mList;
nsCSSDisplay* mDisplay;
}; };
#ifdef DEBUG_REFS #ifdef DEBUG_REFS
@ -556,6 +575,9 @@ CSSDeclarationImpl::~CSSDeclarationImpl(void)
if (nsnull != mList) { if (nsnull != mList) {
delete mList; delete mList;
} }
if (nsnull != mDisplay) {
delete mDisplay;
}
#ifdef DEBUG_REFS #ifdef DEBUG_REFS
--gInstanceCount; --gInstanceCount;
fprintf(stdout, "%d - CSSDeclaration\n", gInstanceCount); fprintf(stdout, "%d - CSSDeclaration\n", gInstanceCount);
@ -576,6 +598,9 @@ nsresult CSSDeclarationImpl::GetData(const nsID& aSID, nsCSSStruct** aDataPtr)
else if (aSID.Equals(kCSSColorSID)) { else if (aSID.Equals(kCSSColorSID)) {
*aDataPtr = mColor; *aDataPtr = mColor;
} }
else if (aSID.Equals(kCSSDisplaySID)) {
*aDataPtr = mDisplay;
}
else if (aSID.Equals(kCSSTextSID)) { else if (aSID.Equals(kCSSTextSID)) {
*aDataPtr = mText; *aDataPtr = mText;
} }
@ -612,6 +637,12 @@ nsresult CSSDeclarationImpl::EnsureData(const nsID& aSID, nsCSSStruct** aDataPtr
} }
*aDataPtr = mColor; *aDataPtr = mColor;
} }
else if (aSID.Equals(kCSSDisplaySID)) {
if (nsnull == mDisplay) {
mDisplay = new nsCSSDisplay();
}
*aDataPtr = mColor;
}
else if (aSID.Equals(kCSSTextSID)) { else if (aSID.Equals(kCSSTextSID)) {
if (nsnull == mText) { if (nsnull == mText) {
mText = new nsCSSText(); mText = new nsCSSText();
@ -687,6 +718,8 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_X_POSITION: case PROP_BACKGROUND_X_POSITION:
case PROP_BACKGROUND_Y_POSITION: case PROP_BACKGROUND_Y_POSITION:
case PROP_BACKGROUND_FILTER: case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
if (nsnull == mColor) { if (nsnull == mColor) {
mColor = new nsCSSColor(); mColor = new nsCSSColor();
} }
@ -700,6 +733,8 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_X_POSITION: mColor->mBackPositionX = aValue; break; case PROP_BACKGROUND_X_POSITION: mColor->mBackPositionX = aValue; break;
case PROP_BACKGROUND_Y_POSITION: mColor->mBackPositionY = aValue; break; case PROP_BACKGROUND_Y_POSITION: mColor->mBackPositionY = aValue; break;
case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break; case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break;
case PROP_CURSOR: mColor->mCursor = aValue; break;
case PROP_CURSOR_IMAGE: mColor->mCursorImage = aValue; break;
} }
} }
else { else {
@ -727,7 +762,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_TEXT_DECORATION: mText->mDecoration = aValue; break; case PROP_TEXT_DECORATION: mText->mDecoration = aValue; break;
case PROP_VERTICAL_ALIGN: mText->mVertAlign = aValue; break; case PROP_VERTICAL_ALIGN: mText->mVertAlign = aValue; break;
case PROP_TEXT_TRANSFORM: mText->mTransform = aValue; break; case PROP_TEXT_TRANSFORM: mText->mTransform = aValue; break;
case PROP_TEXT_ALIGN: mText->mHorzAlign = aValue; break; case PROP_TEXT_ALIGN: mText->mTextAlign = aValue; break;
case PROP_TEXT_INDENT: mText->mIndent = aValue; break; case PROP_TEXT_INDENT: mText->mIndent = aValue; break;
case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break; case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break;
case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break; case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break;
@ -888,9 +923,6 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_OVERFLOW: case PROP_OVERFLOW:
case PROP_Z_INDEX: case PROP_Z_INDEX:
case PROP_VISIBILITY: case PROP_VISIBILITY:
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_FILTER: case PROP_FILTER:
if (nsnull == mPosition) { if (nsnull == mPosition) {
mPosition = new nsCSSPosition(); mPosition = new nsCSSPosition();
@ -905,9 +937,6 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_OVERFLOW: mPosition->mOverflow = aValue; break; case PROP_OVERFLOW: mPosition->mOverflow = aValue; break;
case PROP_Z_INDEX: mPosition->mZIndex = aValue; break; case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
case PROP_VISIBILITY: mPosition->mVisibility = aValue; break; case PROP_VISIBILITY: mPosition->mVisibility = aValue; break;
case PROP_FLOAT: mPosition->mFloat = aValue; break;
case PROP_CLEAR: mPosition->mClear = aValue; break;
case PROP_DISPLAY: mPosition->mDisplay = aValue; break;
case PROP_FILTER: mPosition->mFilter = aValue; break; case PROP_FILTER: mPosition->mFilter = aValue; break;
} }
} }
@ -963,6 +992,27 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
} }
break; break;
// nsCSSDisplay
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_DIRECTION:
if (nsnull == mDisplay) {
mDisplay = new nsCSSDisplay();
}
if (nsnull != mDisplay) {
switch (aProperty) {
case PROP_FLOAT: mDisplay->mFloat = aValue; break;
case PROP_CLEAR: mDisplay->mClear = aValue; break;
case PROP_DISPLAY: mDisplay->mDisplay = aValue; break;
case PROP_DIRECTION: mDisplay->mDirection = aValue; break;
}
}
else {
result = NS_ERROR_OUT_OF_MEMORY;
}
break;
case PROP_BACKGROUND: case PROP_BACKGROUND:
case PROP_BORDER: case PROP_BORDER:
case PROP_CLIP: case PROP_CLIP:
@ -1025,6 +1075,8 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_X_POSITION: case PROP_BACKGROUND_X_POSITION:
case PROP_BACKGROUND_Y_POSITION: case PROP_BACKGROUND_Y_POSITION:
case PROP_BACKGROUND_FILTER: case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
if (nsnull != mColor) { if (nsnull != mColor) {
switch (aProperty) { switch (aProperty) {
case PROP_COLOR: aValue = mColor->mColor; break; case PROP_COLOR: aValue = mColor->mColor; break;
@ -1035,6 +1087,8 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_X_POSITION: aValue = mColor->mBackPositionX; break; case PROP_BACKGROUND_X_POSITION: aValue = mColor->mBackPositionX; break;
case PROP_BACKGROUND_Y_POSITION: aValue = mColor->mBackPositionY; break; case PROP_BACKGROUND_Y_POSITION: aValue = mColor->mBackPositionY; break;
case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break; case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break;
case PROP_CURSOR: aValue = mColor->mCursor; break;
case PROP_CURSOR_IMAGE: aValue = mColor->mCursorImage; break;
} }
} }
else { else {
@ -1059,7 +1113,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_DECORATION: aValue = mText->mDecoration; break; case PROP_TEXT_DECORATION: aValue = mText->mDecoration; break;
case PROP_VERTICAL_ALIGN: aValue = mText->mVertAlign; break; case PROP_VERTICAL_ALIGN: aValue = mText->mVertAlign; break;
case PROP_TEXT_TRANSFORM: aValue = mText->mTransform; break; case PROP_TEXT_TRANSFORM: aValue = mText->mTransform; break;
case PROP_TEXT_ALIGN: aValue = mText->mHorzAlign; break; case PROP_TEXT_ALIGN: aValue = mText->mTextAlign; break;
case PROP_TEXT_INDENT: aValue = mText->mIndent; break; case PROP_TEXT_INDENT: aValue = mText->mIndent; break;
case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break; case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break;
case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break; case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break;
@ -1165,9 +1219,6 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_OVERFLOW: case PROP_OVERFLOW:
case PROP_Z_INDEX: case PROP_Z_INDEX:
case PROP_VISIBILITY: case PROP_VISIBILITY:
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_FILTER: case PROP_FILTER:
if (nsnull != mPosition) { if (nsnull != mPosition) {
switch (aProperty) { switch (aProperty) {
@ -1179,9 +1230,6 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_OVERFLOW: aValue = mPosition->mOverflow; break; case PROP_OVERFLOW: aValue = mPosition->mOverflow; break;
case PROP_Z_INDEX: aValue = mPosition->mZIndex; break; case PROP_Z_INDEX: aValue = mPosition->mZIndex; break;
case PROP_VISIBILITY: aValue = mPosition->mVisibility; break; case PROP_VISIBILITY: aValue = mPosition->mVisibility; break;
case PROP_FLOAT: aValue = mPosition->mFloat; break;
case PROP_CLEAR: aValue = mPosition->mClear; break;
case PROP_DISPLAY: aValue = mPosition->mDisplay; break;
case PROP_FILTER: aValue = mPosition->mFilter; break; case PROP_FILTER: aValue = mPosition->mFilter; break;
} }
} }
@ -1223,6 +1271,24 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
} }
break; break;
// nsCSSDisplay
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_DIRECTION:
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;
}
}
else {
aValue.Reset();
}
break;
case PROP_BACKGROUND: case PROP_BACKGROUND:
case PROP_BORDER: case PROP_BORDER:
case PROP_CLIP: case PROP_CLIP:
@ -1270,6 +1336,9 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mList) { if (nsnull != mList) {
mList->List(out); mList->List(out);
} }
if (nsnull != mDisplay) {
mDisplay->List(out);
}
fputs("}", out); fputs("}", out);
} }
@ -1294,24 +1363,23 @@ NS_HTML nsresult
/* /*
font font
=========== ===========
font-family: string (list)
'font-family', string (list) font-style: enum
'font-style', enum font-variant: enum (ie: small caps)
'font-variant' enum (ie: small caps) font-weight: enum
'font-weight' enum font-size: abs, pct, enum, +-1
'font-size' abs, pct, enum, +-1
color/background color/background
============= =============
color: color color: color
background-color: color background-color: color
background-image: url(string) background-image: url(string)
background-repeat: enum background-repeat: enum
background-attachment: enum background-attachment: enum
background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?)) background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?))
cursor: enum
cursor-image: url(string)
text text
@ -1346,9 +1414,11 @@ overflow: enum
z-index: int, auto z-index: int, auto
visibity: enum visibity: enum
display
=======
float: enum float: enum
clear: enum clear: enum
direction: enum
display: enum display: enum
filter: string filter: string

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

@ -26,6 +26,7 @@
static NS_DEFINE_IID(kCSSFontSID, NS_CSS_FONT_SID); static NS_DEFINE_IID(kCSSFontSID, NS_CSS_FONT_SID);
static NS_DEFINE_IID(kCSSColorSID, NS_CSS_COLOR_SID); static NS_DEFINE_IID(kCSSColorSID, NS_CSS_COLOR_SID);
static NS_DEFINE_IID(kCSSDisplaySID, NS_CSS_DISPLAY_SID);
static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID); static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID);
static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID); static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID);
static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID); static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID);
@ -325,6 +326,8 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
mBackPositionX.AppendToString(buffer, PROP_BACKGROUND_X_POSITION); mBackPositionX.AppendToString(buffer, PROP_BACKGROUND_X_POSITION);
mBackPositionY.AppendToString(buffer, PROP_BACKGROUND_Y_POSITION); mBackPositionY.AppendToString(buffer, PROP_BACKGROUND_Y_POSITION);
mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER); mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER);
mCursor.AppendToString(buffer, PROP_CURSOR);
mCursorImage.AppendToString(buffer, PROP_CURSOR_IMAGE);
fputs(buffer, out); fputs(buffer, out);
} }
@ -344,13 +347,31 @@ void nsCSSText::List(FILE* out, PRInt32 aIndent) const
mDecoration.AppendToString(buffer, PROP_TEXT_DECORATION); mDecoration.AppendToString(buffer, PROP_TEXT_DECORATION);
mVertAlign.AppendToString(buffer, PROP_VERTICAL_ALIGN); mVertAlign.AppendToString(buffer, PROP_VERTICAL_ALIGN);
mTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM); mTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM);
mHorzAlign.AppendToString(buffer, PROP_TEXT_ALIGN); mTextAlign.AppendToString(buffer, PROP_TEXT_ALIGN);
mIndent.AppendToString(buffer, PROP_TEXT_INDENT); mIndent.AppendToString(buffer, PROP_TEXT_INDENT);
mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT); mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT);
mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE); mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE);
fputs(buffer, out); fputs(buffer, out);
} }
const nsID& nsCSSDisplay::GetID(void)
{
return kCSSDisplaySID;
}
void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
{
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
nsAutoString buffer;
mDirection.AppendToString(buffer, PROP_DIRECTION);
mDisplay.AppendToString(buffer, PROP_DISPLAY);
mFloat.AppendToString(buffer, PROP_FLOAT);
mClear.AppendToString(buffer, PROP_CLEAR);
fputs(buffer, out);
}
void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const
{ {
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out); for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
@ -455,9 +476,6 @@ void nsCSSPosition::List(FILE* out, PRInt32 aIndent) const
mOverflow.AppendToString(buffer, PROP_OVERFLOW); mOverflow.AppendToString(buffer, PROP_OVERFLOW);
mZIndex.AppendToString(buffer, PROP_OVERFLOW); mZIndex.AppendToString(buffer, PROP_OVERFLOW);
mVisibility.AppendToString(buffer, PROP_VISIBILITY); mVisibility.AppendToString(buffer, PROP_VISIBILITY);
mFloat.AppendToString(buffer, PROP_FLOAT);
mClear.AppendToString(buffer, PROP_CLEAR);
mDisplay.AppendToString(buffer, PROP_DISPLAY);
mFilter.AppendToString(buffer, PROP_FILTER); mFilter.AppendToString(buffer, PROP_FILTER);
fputs(buffer, out); fputs(buffer, out);
} }
@ -512,6 +530,7 @@ protected:
nsCSSMargin* mMargin; nsCSSMargin* mMargin;
nsCSSPosition* mPosition; nsCSSPosition* mPosition;
nsCSSList* mList; nsCSSList* mList;
nsCSSDisplay* mDisplay;
}; };
#ifdef DEBUG_REFS #ifdef DEBUG_REFS
@ -556,6 +575,9 @@ CSSDeclarationImpl::~CSSDeclarationImpl(void)
if (nsnull != mList) { if (nsnull != mList) {
delete mList; delete mList;
} }
if (nsnull != mDisplay) {
delete mDisplay;
}
#ifdef DEBUG_REFS #ifdef DEBUG_REFS
--gInstanceCount; --gInstanceCount;
fprintf(stdout, "%d - CSSDeclaration\n", gInstanceCount); fprintf(stdout, "%d - CSSDeclaration\n", gInstanceCount);
@ -576,6 +598,9 @@ nsresult CSSDeclarationImpl::GetData(const nsID& aSID, nsCSSStruct** aDataPtr)
else if (aSID.Equals(kCSSColorSID)) { else if (aSID.Equals(kCSSColorSID)) {
*aDataPtr = mColor; *aDataPtr = mColor;
} }
else if (aSID.Equals(kCSSDisplaySID)) {
*aDataPtr = mDisplay;
}
else if (aSID.Equals(kCSSTextSID)) { else if (aSID.Equals(kCSSTextSID)) {
*aDataPtr = mText; *aDataPtr = mText;
} }
@ -612,6 +637,12 @@ nsresult CSSDeclarationImpl::EnsureData(const nsID& aSID, nsCSSStruct** aDataPtr
} }
*aDataPtr = mColor; *aDataPtr = mColor;
} }
else if (aSID.Equals(kCSSDisplaySID)) {
if (nsnull == mDisplay) {
mDisplay = new nsCSSDisplay();
}
*aDataPtr = mColor;
}
else if (aSID.Equals(kCSSTextSID)) { else if (aSID.Equals(kCSSTextSID)) {
if (nsnull == mText) { if (nsnull == mText) {
mText = new nsCSSText(); mText = new nsCSSText();
@ -687,6 +718,8 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_X_POSITION: case PROP_BACKGROUND_X_POSITION:
case PROP_BACKGROUND_Y_POSITION: case PROP_BACKGROUND_Y_POSITION:
case PROP_BACKGROUND_FILTER: case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
if (nsnull == mColor) { if (nsnull == mColor) {
mColor = new nsCSSColor(); mColor = new nsCSSColor();
} }
@ -700,6 +733,8 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_X_POSITION: mColor->mBackPositionX = aValue; break; case PROP_BACKGROUND_X_POSITION: mColor->mBackPositionX = aValue; break;
case PROP_BACKGROUND_Y_POSITION: mColor->mBackPositionY = aValue; break; case PROP_BACKGROUND_Y_POSITION: mColor->mBackPositionY = aValue; break;
case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break; case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break;
case PROP_CURSOR: mColor->mCursor = aValue; break;
case PROP_CURSOR_IMAGE: mColor->mCursorImage = aValue; break;
} }
} }
else { else {
@ -727,7 +762,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_TEXT_DECORATION: mText->mDecoration = aValue; break; case PROP_TEXT_DECORATION: mText->mDecoration = aValue; break;
case PROP_VERTICAL_ALIGN: mText->mVertAlign = aValue; break; case PROP_VERTICAL_ALIGN: mText->mVertAlign = aValue; break;
case PROP_TEXT_TRANSFORM: mText->mTransform = aValue; break; case PROP_TEXT_TRANSFORM: mText->mTransform = aValue; break;
case PROP_TEXT_ALIGN: mText->mHorzAlign = aValue; break; case PROP_TEXT_ALIGN: mText->mTextAlign = aValue; break;
case PROP_TEXT_INDENT: mText->mIndent = aValue; break; case PROP_TEXT_INDENT: mText->mIndent = aValue; break;
case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break; case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break;
case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break; case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break;
@ -888,9 +923,6 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_OVERFLOW: case PROP_OVERFLOW:
case PROP_Z_INDEX: case PROP_Z_INDEX:
case PROP_VISIBILITY: case PROP_VISIBILITY:
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_FILTER: case PROP_FILTER:
if (nsnull == mPosition) { if (nsnull == mPosition) {
mPosition = new nsCSSPosition(); mPosition = new nsCSSPosition();
@ -905,9 +937,6 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_OVERFLOW: mPosition->mOverflow = aValue; break; case PROP_OVERFLOW: mPosition->mOverflow = aValue; break;
case PROP_Z_INDEX: mPosition->mZIndex = aValue; break; case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
case PROP_VISIBILITY: mPosition->mVisibility = aValue; break; case PROP_VISIBILITY: mPosition->mVisibility = aValue; break;
case PROP_FLOAT: mPosition->mFloat = aValue; break;
case PROP_CLEAR: mPosition->mClear = aValue; break;
case PROP_DISPLAY: mPosition->mDisplay = aValue; break;
case PROP_FILTER: mPosition->mFilter = aValue; break; case PROP_FILTER: mPosition->mFilter = aValue; break;
} }
} }
@ -963,6 +992,27 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
} }
break; break;
// nsCSSDisplay
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_DIRECTION:
if (nsnull == mDisplay) {
mDisplay = new nsCSSDisplay();
}
if (nsnull != mDisplay) {
switch (aProperty) {
case PROP_FLOAT: mDisplay->mFloat = aValue; break;
case PROP_CLEAR: mDisplay->mClear = aValue; break;
case PROP_DISPLAY: mDisplay->mDisplay = aValue; break;
case PROP_DIRECTION: mDisplay->mDirection = aValue; break;
}
}
else {
result = NS_ERROR_OUT_OF_MEMORY;
}
break;
case PROP_BACKGROUND: case PROP_BACKGROUND:
case PROP_BORDER: case PROP_BORDER:
case PROP_CLIP: case PROP_CLIP:
@ -1025,6 +1075,8 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_X_POSITION: case PROP_BACKGROUND_X_POSITION:
case PROP_BACKGROUND_Y_POSITION: case PROP_BACKGROUND_Y_POSITION:
case PROP_BACKGROUND_FILTER: case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
if (nsnull != mColor) { if (nsnull != mColor) {
switch (aProperty) { switch (aProperty) {
case PROP_COLOR: aValue = mColor->mColor; break; case PROP_COLOR: aValue = mColor->mColor; break;
@ -1035,6 +1087,8 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_X_POSITION: aValue = mColor->mBackPositionX; break; case PROP_BACKGROUND_X_POSITION: aValue = mColor->mBackPositionX; break;
case PROP_BACKGROUND_Y_POSITION: aValue = mColor->mBackPositionY; break; case PROP_BACKGROUND_Y_POSITION: aValue = mColor->mBackPositionY; break;
case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break; case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break;
case PROP_CURSOR: aValue = mColor->mCursor; break;
case PROP_CURSOR_IMAGE: aValue = mColor->mCursorImage; break;
} }
} }
else { else {
@ -1059,7 +1113,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_DECORATION: aValue = mText->mDecoration; break; case PROP_TEXT_DECORATION: aValue = mText->mDecoration; break;
case PROP_VERTICAL_ALIGN: aValue = mText->mVertAlign; break; case PROP_VERTICAL_ALIGN: aValue = mText->mVertAlign; break;
case PROP_TEXT_TRANSFORM: aValue = mText->mTransform; break; case PROP_TEXT_TRANSFORM: aValue = mText->mTransform; break;
case PROP_TEXT_ALIGN: aValue = mText->mHorzAlign; break; case PROP_TEXT_ALIGN: aValue = mText->mTextAlign; break;
case PROP_TEXT_INDENT: aValue = mText->mIndent; break; case PROP_TEXT_INDENT: aValue = mText->mIndent; break;
case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break; case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break;
case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break; case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break;
@ -1165,9 +1219,6 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_OVERFLOW: case PROP_OVERFLOW:
case PROP_Z_INDEX: case PROP_Z_INDEX:
case PROP_VISIBILITY: case PROP_VISIBILITY:
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_FILTER: case PROP_FILTER:
if (nsnull != mPosition) { if (nsnull != mPosition) {
switch (aProperty) { switch (aProperty) {
@ -1179,9 +1230,6 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_OVERFLOW: aValue = mPosition->mOverflow; break; case PROP_OVERFLOW: aValue = mPosition->mOverflow; break;
case PROP_Z_INDEX: aValue = mPosition->mZIndex; break; case PROP_Z_INDEX: aValue = mPosition->mZIndex; break;
case PROP_VISIBILITY: aValue = mPosition->mVisibility; break; case PROP_VISIBILITY: aValue = mPosition->mVisibility; break;
case PROP_FLOAT: aValue = mPosition->mFloat; break;
case PROP_CLEAR: aValue = mPosition->mClear; break;
case PROP_DISPLAY: aValue = mPosition->mDisplay; break;
case PROP_FILTER: aValue = mPosition->mFilter; break; case PROP_FILTER: aValue = mPosition->mFilter; break;
} }
} }
@ -1223,6 +1271,24 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
} }
break; break;
// nsCSSDisplay
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_DIRECTION:
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;
}
}
else {
aValue.Reset();
}
break;
case PROP_BACKGROUND: case PROP_BACKGROUND:
case PROP_BORDER: case PROP_BORDER:
case PROP_CLIP: case PROP_CLIP:
@ -1270,6 +1336,9 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mList) { if (nsnull != mList) {
mList->List(out); mList->List(out);
} }
if (nsnull != mDisplay) {
mDisplay->List(out);
}
fputs("}", out); fputs("}", out);
} }
@ -1294,24 +1363,23 @@ NS_HTML nsresult
/* /*
font font
=========== ===========
font-family: string (list)
'font-family', string (list) font-style: enum
'font-style', enum font-variant: enum (ie: small caps)
'font-variant' enum (ie: small caps) font-weight: enum
'font-weight' enum font-size: abs, pct, enum, +-1
'font-size' abs, pct, enum, +-1
color/background color/background
============= =============
color: color color: color
background-color: color background-color: color
background-image: url(string) background-image: url(string)
background-repeat: enum background-repeat: enum
background-attachment: enum background-attachment: enum
background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?)) background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?))
cursor: enum
cursor-image: url(string)
text text
@ -1346,9 +1414,11 @@ overflow: enum
z-index: int, auto z-index: int, auto
visibity: enum visibity: enum
display
=======
float: enum float: enum
clear: enum clear: enum
direction: enum
display: enum display: enum
filter: string filter: string

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

@ -26,6 +26,7 @@
static NS_DEFINE_IID(kCSSFontSID, NS_CSS_FONT_SID); static NS_DEFINE_IID(kCSSFontSID, NS_CSS_FONT_SID);
static NS_DEFINE_IID(kCSSColorSID, NS_CSS_COLOR_SID); static NS_DEFINE_IID(kCSSColorSID, NS_CSS_COLOR_SID);
static NS_DEFINE_IID(kCSSDisplaySID, NS_CSS_DISPLAY_SID);
static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID); static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID);
static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID); static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID);
static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID); static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID);
@ -325,6 +326,8 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
mBackPositionX.AppendToString(buffer, PROP_BACKGROUND_X_POSITION); mBackPositionX.AppendToString(buffer, PROP_BACKGROUND_X_POSITION);
mBackPositionY.AppendToString(buffer, PROP_BACKGROUND_Y_POSITION); mBackPositionY.AppendToString(buffer, PROP_BACKGROUND_Y_POSITION);
mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER); mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER);
mCursor.AppendToString(buffer, PROP_CURSOR);
mCursorImage.AppendToString(buffer, PROP_CURSOR_IMAGE);
fputs(buffer, out); fputs(buffer, out);
} }
@ -344,13 +347,31 @@ void nsCSSText::List(FILE* out, PRInt32 aIndent) const
mDecoration.AppendToString(buffer, PROP_TEXT_DECORATION); mDecoration.AppendToString(buffer, PROP_TEXT_DECORATION);
mVertAlign.AppendToString(buffer, PROP_VERTICAL_ALIGN); mVertAlign.AppendToString(buffer, PROP_VERTICAL_ALIGN);
mTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM); mTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM);
mHorzAlign.AppendToString(buffer, PROP_TEXT_ALIGN); mTextAlign.AppendToString(buffer, PROP_TEXT_ALIGN);
mIndent.AppendToString(buffer, PROP_TEXT_INDENT); mIndent.AppendToString(buffer, PROP_TEXT_INDENT);
mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT); mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT);
mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE); mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE);
fputs(buffer, out); fputs(buffer, out);
} }
const nsID& nsCSSDisplay::GetID(void)
{
return kCSSDisplaySID;
}
void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
{
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
nsAutoString buffer;
mDirection.AppendToString(buffer, PROP_DIRECTION);
mDisplay.AppendToString(buffer, PROP_DISPLAY);
mFloat.AppendToString(buffer, PROP_FLOAT);
mClear.AppendToString(buffer, PROP_CLEAR);
fputs(buffer, out);
}
void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const
{ {
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out); for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
@ -455,9 +476,6 @@ void nsCSSPosition::List(FILE* out, PRInt32 aIndent) const
mOverflow.AppendToString(buffer, PROP_OVERFLOW); mOverflow.AppendToString(buffer, PROP_OVERFLOW);
mZIndex.AppendToString(buffer, PROP_OVERFLOW); mZIndex.AppendToString(buffer, PROP_OVERFLOW);
mVisibility.AppendToString(buffer, PROP_VISIBILITY); mVisibility.AppendToString(buffer, PROP_VISIBILITY);
mFloat.AppendToString(buffer, PROP_FLOAT);
mClear.AppendToString(buffer, PROP_CLEAR);
mDisplay.AppendToString(buffer, PROP_DISPLAY);
mFilter.AppendToString(buffer, PROP_FILTER); mFilter.AppendToString(buffer, PROP_FILTER);
fputs(buffer, out); fputs(buffer, out);
} }
@ -512,6 +530,7 @@ protected:
nsCSSMargin* mMargin; nsCSSMargin* mMargin;
nsCSSPosition* mPosition; nsCSSPosition* mPosition;
nsCSSList* mList; nsCSSList* mList;
nsCSSDisplay* mDisplay;
}; };
#ifdef DEBUG_REFS #ifdef DEBUG_REFS
@ -556,6 +575,9 @@ CSSDeclarationImpl::~CSSDeclarationImpl(void)
if (nsnull != mList) { if (nsnull != mList) {
delete mList; delete mList;
} }
if (nsnull != mDisplay) {
delete mDisplay;
}
#ifdef DEBUG_REFS #ifdef DEBUG_REFS
--gInstanceCount; --gInstanceCount;
fprintf(stdout, "%d - CSSDeclaration\n", gInstanceCount); fprintf(stdout, "%d - CSSDeclaration\n", gInstanceCount);
@ -576,6 +598,9 @@ nsresult CSSDeclarationImpl::GetData(const nsID& aSID, nsCSSStruct** aDataPtr)
else if (aSID.Equals(kCSSColorSID)) { else if (aSID.Equals(kCSSColorSID)) {
*aDataPtr = mColor; *aDataPtr = mColor;
} }
else if (aSID.Equals(kCSSDisplaySID)) {
*aDataPtr = mDisplay;
}
else if (aSID.Equals(kCSSTextSID)) { else if (aSID.Equals(kCSSTextSID)) {
*aDataPtr = mText; *aDataPtr = mText;
} }
@ -612,6 +637,12 @@ nsresult CSSDeclarationImpl::EnsureData(const nsID& aSID, nsCSSStruct** aDataPtr
} }
*aDataPtr = mColor; *aDataPtr = mColor;
} }
else if (aSID.Equals(kCSSDisplaySID)) {
if (nsnull == mDisplay) {
mDisplay = new nsCSSDisplay();
}
*aDataPtr = mColor;
}
else if (aSID.Equals(kCSSTextSID)) { else if (aSID.Equals(kCSSTextSID)) {
if (nsnull == mText) { if (nsnull == mText) {
mText = new nsCSSText(); mText = new nsCSSText();
@ -687,6 +718,8 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_X_POSITION: case PROP_BACKGROUND_X_POSITION:
case PROP_BACKGROUND_Y_POSITION: case PROP_BACKGROUND_Y_POSITION:
case PROP_BACKGROUND_FILTER: case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
if (nsnull == mColor) { if (nsnull == mColor) {
mColor = new nsCSSColor(); mColor = new nsCSSColor();
} }
@ -700,6 +733,8 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_X_POSITION: mColor->mBackPositionX = aValue; break; case PROP_BACKGROUND_X_POSITION: mColor->mBackPositionX = aValue; break;
case PROP_BACKGROUND_Y_POSITION: mColor->mBackPositionY = aValue; break; case PROP_BACKGROUND_Y_POSITION: mColor->mBackPositionY = aValue; break;
case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break; case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break;
case PROP_CURSOR: mColor->mCursor = aValue; break;
case PROP_CURSOR_IMAGE: mColor->mCursorImage = aValue; break;
} }
} }
else { else {
@ -727,7 +762,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_TEXT_DECORATION: mText->mDecoration = aValue; break; case PROP_TEXT_DECORATION: mText->mDecoration = aValue; break;
case PROP_VERTICAL_ALIGN: mText->mVertAlign = aValue; break; case PROP_VERTICAL_ALIGN: mText->mVertAlign = aValue; break;
case PROP_TEXT_TRANSFORM: mText->mTransform = aValue; break; case PROP_TEXT_TRANSFORM: mText->mTransform = aValue; break;
case PROP_TEXT_ALIGN: mText->mHorzAlign = aValue; break; case PROP_TEXT_ALIGN: mText->mTextAlign = aValue; break;
case PROP_TEXT_INDENT: mText->mIndent = aValue; break; case PROP_TEXT_INDENT: mText->mIndent = aValue; break;
case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break; case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break;
case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break; case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break;
@ -888,9 +923,6 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_OVERFLOW: case PROP_OVERFLOW:
case PROP_Z_INDEX: case PROP_Z_INDEX:
case PROP_VISIBILITY: case PROP_VISIBILITY:
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_FILTER: case PROP_FILTER:
if (nsnull == mPosition) { if (nsnull == mPosition) {
mPosition = new nsCSSPosition(); mPosition = new nsCSSPosition();
@ -905,9 +937,6 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_OVERFLOW: mPosition->mOverflow = aValue; break; case PROP_OVERFLOW: mPosition->mOverflow = aValue; break;
case PROP_Z_INDEX: mPosition->mZIndex = aValue; break; case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
case PROP_VISIBILITY: mPosition->mVisibility = aValue; break; case PROP_VISIBILITY: mPosition->mVisibility = aValue; break;
case PROP_FLOAT: mPosition->mFloat = aValue; break;
case PROP_CLEAR: mPosition->mClear = aValue; break;
case PROP_DISPLAY: mPosition->mDisplay = aValue; break;
case PROP_FILTER: mPosition->mFilter = aValue; break; case PROP_FILTER: mPosition->mFilter = aValue; break;
} }
} }
@ -963,6 +992,27 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
} }
break; break;
// nsCSSDisplay
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_DIRECTION:
if (nsnull == mDisplay) {
mDisplay = new nsCSSDisplay();
}
if (nsnull != mDisplay) {
switch (aProperty) {
case PROP_FLOAT: mDisplay->mFloat = aValue; break;
case PROP_CLEAR: mDisplay->mClear = aValue; break;
case PROP_DISPLAY: mDisplay->mDisplay = aValue; break;
case PROP_DIRECTION: mDisplay->mDirection = aValue; break;
}
}
else {
result = NS_ERROR_OUT_OF_MEMORY;
}
break;
case PROP_BACKGROUND: case PROP_BACKGROUND:
case PROP_BORDER: case PROP_BORDER:
case PROP_CLIP: case PROP_CLIP:
@ -1025,6 +1075,8 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_X_POSITION: case PROP_BACKGROUND_X_POSITION:
case PROP_BACKGROUND_Y_POSITION: case PROP_BACKGROUND_Y_POSITION:
case PROP_BACKGROUND_FILTER: case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
if (nsnull != mColor) { if (nsnull != mColor) {
switch (aProperty) { switch (aProperty) {
case PROP_COLOR: aValue = mColor->mColor; break; case PROP_COLOR: aValue = mColor->mColor; break;
@ -1035,6 +1087,8 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_X_POSITION: aValue = mColor->mBackPositionX; break; case PROP_BACKGROUND_X_POSITION: aValue = mColor->mBackPositionX; break;
case PROP_BACKGROUND_Y_POSITION: aValue = mColor->mBackPositionY; break; case PROP_BACKGROUND_Y_POSITION: aValue = mColor->mBackPositionY; break;
case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break; case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break;
case PROP_CURSOR: aValue = mColor->mCursor; break;
case PROP_CURSOR_IMAGE: aValue = mColor->mCursorImage; break;
} }
} }
else { else {
@ -1059,7 +1113,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_DECORATION: aValue = mText->mDecoration; break; case PROP_TEXT_DECORATION: aValue = mText->mDecoration; break;
case PROP_VERTICAL_ALIGN: aValue = mText->mVertAlign; break; case PROP_VERTICAL_ALIGN: aValue = mText->mVertAlign; break;
case PROP_TEXT_TRANSFORM: aValue = mText->mTransform; break; case PROP_TEXT_TRANSFORM: aValue = mText->mTransform; break;
case PROP_TEXT_ALIGN: aValue = mText->mHorzAlign; break; case PROP_TEXT_ALIGN: aValue = mText->mTextAlign; break;
case PROP_TEXT_INDENT: aValue = mText->mIndent; break; case PROP_TEXT_INDENT: aValue = mText->mIndent; break;
case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break; case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break;
case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break; case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break;
@ -1165,9 +1219,6 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_OVERFLOW: case PROP_OVERFLOW:
case PROP_Z_INDEX: case PROP_Z_INDEX:
case PROP_VISIBILITY: case PROP_VISIBILITY:
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_FILTER: case PROP_FILTER:
if (nsnull != mPosition) { if (nsnull != mPosition) {
switch (aProperty) { switch (aProperty) {
@ -1179,9 +1230,6 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_OVERFLOW: aValue = mPosition->mOverflow; break; case PROP_OVERFLOW: aValue = mPosition->mOverflow; break;
case PROP_Z_INDEX: aValue = mPosition->mZIndex; break; case PROP_Z_INDEX: aValue = mPosition->mZIndex; break;
case PROP_VISIBILITY: aValue = mPosition->mVisibility; break; case PROP_VISIBILITY: aValue = mPosition->mVisibility; break;
case PROP_FLOAT: aValue = mPosition->mFloat; break;
case PROP_CLEAR: aValue = mPosition->mClear; break;
case PROP_DISPLAY: aValue = mPosition->mDisplay; break;
case PROP_FILTER: aValue = mPosition->mFilter; break; case PROP_FILTER: aValue = mPosition->mFilter; break;
} }
} }
@ -1223,6 +1271,24 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
} }
break; break;
// nsCSSDisplay
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_DIRECTION:
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;
}
}
else {
aValue.Reset();
}
break;
case PROP_BACKGROUND: case PROP_BACKGROUND:
case PROP_BORDER: case PROP_BORDER:
case PROP_CLIP: case PROP_CLIP:
@ -1270,6 +1336,9 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mList) { if (nsnull != mList) {
mList->List(out); mList->List(out);
} }
if (nsnull != mDisplay) {
mDisplay->List(out);
}
fputs("}", out); fputs("}", out);
} }
@ -1294,24 +1363,23 @@ NS_HTML nsresult
/* /*
font font
=========== ===========
font-family: string (list)
'font-family', string (list) font-style: enum
'font-style', enum font-variant: enum (ie: small caps)
'font-variant' enum (ie: small caps) font-weight: enum
'font-weight' enum font-size: abs, pct, enum, +-1
'font-size' abs, pct, enum, +-1
color/background color/background
============= =============
color: color color: color
background-color: color background-color: color
background-image: url(string) background-image: url(string)
background-repeat: enum background-repeat: enum
background-attachment: enum background-attachment: enum
background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?)) background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?))
cursor: enum
cursor-image: url(string)
text text
@ -1346,9 +1414,11 @@ overflow: enum
z-index: int, auto z-index: int, auto
visibity: enum visibity: enum
display
=======
float: enum float: enum
clear: enum clear: enum
direction: enum
display: enum display: enum
filter: string filter: string

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

@ -26,6 +26,7 @@
static NS_DEFINE_IID(kCSSFontSID, NS_CSS_FONT_SID); static NS_DEFINE_IID(kCSSFontSID, NS_CSS_FONT_SID);
static NS_DEFINE_IID(kCSSColorSID, NS_CSS_COLOR_SID); static NS_DEFINE_IID(kCSSColorSID, NS_CSS_COLOR_SID);
static NS_DEFINE_IID(kCSSDisplaySID, NS_CSS_DISPLAY_SID);
static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID); static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID);
static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID); static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID);
static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID); static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID);
@ -325,6 +326,8 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
mBackPositionX.AppendToString(buffer, PROP_BACKGROUND_X_POSITION); mBackPositionX.AppendToString(buffer, PROP_BACKGROUND_X_POSITION);
mBackPositionY.AppendToString(buffer, PROP_BACKGROUND_Y_POSITION); mBackPositionY.AppendToString(buffer, PROP_BACKGROUND_Y_POSITION);
mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER); mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER);
mCursor.AppendToString(buffer, PROP_CURSOR);
mCursorImage.AppendToString(buffer, PROP_CURSOR_IMAGE);
fputs(buffer, out); fputs(buffer, out);
} }
@ -344,13 +347,31 @@ void nsCSSText::List(FILE* out, PRInt32 aIndent) const
mDecoration.AppendToString(buffer, PROP_TEXT_DECORATION); mDecoration.AppendToString(buffer, PROP_TEXT_DECORATION);
mVertAlign.AppendToString(buffer, PROP_VERTICAL_ALIGN); mVertAlign.AppendToString(buffer, PROP_VERTICAL_ALIGN);
mTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM); mTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM);
mHorzAlign.AppendToString(buffer, PROP_TEXT_ALIGN); mTextAlign.AppendToString(buffer, PROP_TEXT_ALIGN);
mIndent.AppendToString(buffer, PROP_TEXT_INDENT); mIndent.AppendToString(buffer, PROP_TEXT_INDENT);
mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT); mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT);
mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE); mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE);
fputs(buffer, out); fputs(buffer, out);
} }
const nsID& nsCSSDisplay::GetID(void)
{
return kCSSDisplaySID;
}
void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
{
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
nsAutoString buffer;
mDirection.AppendToString(buffer, PROP_DIRECTION);
mDisplay.AppendToString(buffer, PROP_DISPLAY);
mFloat.AppendToString(buffer, PROP_FLOAT);
mClear.AppendToString(buffer, PROP_CLEAR);
fputs(buffer, out);
}
void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const
{ {
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out); for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
@ -455,9 +476,6 @@ void nsCSSPosition::List(FILE* out, PRInt32 aIndent) const
mOverflow.AppendToString(buffer, PROP_OVERFLOW); mOverflow.AppendToString(buffer, PROP_OVERFLOW);
mZIndex.AppendToString(buffer, PROP_OVERFLOW); mZIndex.AppendToString(buffer, PROP_OVERFLOW);
mVisibility.AppendToString(buffer, PROP_VISIBILITY); mVisibility.AppendToString(buffer, PROP_VISIBILITY);
mFloat.AppendToString(buffer, PROP_FLOAT);
mClear.AppendToString(buffer, PROP_CLEAR);
mDisplay.AppendToString(buffer, PROP_DISPLAY);
mFilter.AppendToString(buffer, PROP_FILTER); mFilter.AppendToString(buffer, PROP_FILTER);
fputs(buffer, out); fputs(buffer, out);
} }
@ -512,6 +530,7 @@ protected:
nsCSSMargin* mMargin; nsCSSMargin* mMargin;
nsCSSPosition* mPosition; nsCSSPosition* mPosition;
nsCSSList* mList; nsCSSList* mList;
nsCSSDisplay* mDisplay;
}; };
#ifdef DEBUG_REFS #ifdef DEBUG_REFS
@ -556,6 +575,9 @@ CSSDeclarationImpl::~CSSDeclarationImpl(void)
if (nsnull != mList) { if (nsnull != mList) {
delete mList; delete mList;
} }
if (nsnull != mDisplay) {
delete mDisplay;
}
#ifdef DEBUG_REFS #ifdef DEBUG_REFS
--gInstanceCount; --gInstanceCount;
fprintf(stdout, "%d - CSSDeclaration\n", gInstanceCount); fprintf(stdout, "%d - CSSDeclaration\n", gInstanceCount);
@ -576,6 +598,9 @@ nsresult CSSDeclarationImpl::GetData(const nsID& aSID, nsCSSStruct** aDataPtr)
else if (aSID.Equals(kCSSColorSID)) { else if (aSID.Equals(kCSSColorSID)) {
*aDataPtr = mColor; *aDataPtr = mColor;
} }
else if (aSID.Equals(kCSSDisplaySID)) {
*aDataPtr = mDisplay;
}
else if (aSID.Equals(kCSSTextSID)) { else if (aSID.Equals(kCSSTextSID)) {
*aDataPtr = mText; *aDataPtr = mText;
} }
@ -612,6 +637,12 @@ nsresult CSSDeclarationImpl::EnsureData(const nsID& aSID, nsCSSStruct** aDataPtr
} }
*aDataPtr = mColor; *aDataPtr = mColor;
} }
else if (aSID.Equals(kCSSDisplaySID)) {
if (nsnull == mDisplay) {
mDisplay = new nsCSSDisplay();
}
*aDataPtr = mColor;
}
else if (aSID.Equals(kCSSTextSID)) { else if (aSID.Equals(kCSSTextSID)) {
if (nsnull == mText) { if (nsnull == mText) {
mText = new nsCSSText(); mText = new nsCSSText();
@ -687,6 +718,8 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_X_POSITION: case PROP_BACKGROUND_X_POSITION:
case PROP_BACKGROUND_Y_POSITION: case PROP_BACKGROUND_Y_POSITION:
case PROP_BACKGROUND_FILTER: case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
if (nsnull == mColor) { if (nsnull == mColor) {
mColor = new nsCSSColor(); mColor = new nsCSSColor();
} }
@ -700,6 +733,8 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_X_POSITION: mColor->mBackPositionX = aValue; break; case PROP_BACKGROUND_X_POSITION: mColor->mBackPositionX = aValue; break;
case PROP_BACKGROUND_Y_POSITION: mColor->mBackPositionY = aValue; break; case PROP_BACKGROUND_Y_POSITION: mColor->mBackPositionY = aValue; break;
case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break; case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break;
case PROP_CURSOR: mColor->mCursor = aValue; break;
case PROP_CURSOR_IMAGE: mColor->mCursorImage = aValue; break;
} }
} }
else { else {
@ -727,7 +762,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_TEXT_DECORATION: mText->mDecoration = aValue; break; case PROP_TEXT_DECORATION: mText->mDecoration = aValue; break;
case PROP_VERTICAL_ALIGN: mText->mVertAlign = aValue; break; case PROP_VERTICAL_ALIGN: mText->mVertAlign = aValue; break;
case PROP_TEXT_TRANSFORM: mText->mTransform = aValue; break; case PROP_TEXT_TRANSFORM: mText->mTransform = aValue; break;
case PROP_TEXT_ALIGN: mText->mHorzAlign = aValue; break; case PROP_TEXT_ALIGN: mText->mTextAlign = aValue; break;
case PROP_TEXT_INDENT: mText->mIndent = aValue; break; case PROP_TEXT_INDENT: mText->mIndent = aValue; break;
case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break; case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break;
case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break; case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break;
@ -888,9 +923,6 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_OVERFLOW: case PROP_OVERFLOW:
case PROP_Z_INDEX: case PROP_Z_INDEX:
case PROP_VISIBILITY: case PROP_VISIBILITY:
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_FILTER: case PROP_FILTER:
if (nsnull == mPosition) { if (nsnull == mPosition) {
mPosition = new nsCSSPosition(); mPosition = new nsCSSPosition();
@ -905,9 +937,6 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_OVERFLOW: mPosition->mOverflow = aValue; break; case PROP_OVERFLOW: mPosition->mOverflow = aValue; break;
case PROP_Z_INDEX: mPosition->mZIndex = aValue; break; case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
case PROP_VISIBILITY: mPosition->mVisibility = aValue; break; case PROP_VISIBILITY: mPosition->mVisibility = aValue; break;
case PROP_FLOAT: mPosition->mFloat = aValue; break;
case PROP_CLEAR: mPosition->mClear = aValue; break;
case PROP_DISPLAY: mPosition->mDisplay = aValue; break;
case PROP_FILTER: mPosition->mFilter = aValue; break; case PROP_FILTER: mPosition->mFilter = aValue; break;
} }
} }
@ -963,6 +992,27 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
} }
break; break;
// nsCSSDisplay
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_DIRECTION:
if (nsnull == mDisplay) {
mDisplay = new nsCSSDisplay();
}
if (nsnull != mDisplay) {
switch (aProperty) {
case PROP_FLOAT: mDisplay->mFloat = aValue; break;
case PROP_CLEAR: mDisplay->mClear = aValue; break;
case PROP_DISPLAY: mDisplay->mDisplay = aValue; break;
case PROP_DIRECTION: mDisplay->mDirection = aValue; break;
}
}
else {
result = NS_ERROR_OUT_OF_MEMORY;
}
break;
case PROP_BACKGROUND: case PROP_BACKGROUND:
case PROP_BORDER: case PROP_BORDER:
case PROP_CLIP: case PROP_CLIP:
@ -1025,6 +1075,8 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_X_POSITION: case PROP_BACKGROUND_X_POSITION:
case PROP_BACKGROUND_Y_POSITION: case PROP_BACKGROUND_Y_POSITION:
case PROP_BACKGROUND_FILTER: case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
if (nsnull != mColor) { if (nsnull != mColor) {
switch (aProperty) { switch (aProperty) {
case PROP_COLOR: aValue = mColor->mColor; break; case PROP_COLOR: aValue = mColor->mColor; break;
@ -1035,6 +1087,8 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_X_POSITION: aValue = mColor->mBackPositionX; break; case PROP_BACKGROUND_X_POSITION: aValue = mColor->mBackPositionX; break;
case PROP_BACKGROUND_Y_POSITION: aValue = mColor->mBackPositionY; break; case PROP_BACKGROUND_Y_POSITION: aValue = mColor->mBackPositionY; break;
case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break; case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break;
case PROP_CURSOR: aValue = mColor->mCursor; break;
case PROP_CURSOR_IMAGE: aValue = mColor->mCursorImage; break;
} }
} }
else { else {
@ -1059,7 +1113,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_DECORATION: aValue = mText->mDecoration; break; case PROP_TEXT_DECORATION: aValue = mText->mDecoration; break;
case PROP_VERTICAL_ALIGN: aValue = mText->mVertAlign; break; case PROP_VERTICAL_ALIGN: aValue = mText->mVertAlign; break;
case PROP_TEXT_TRANSFORM: aValue = mText->mTransform; break; case PROP_TEXT_TRANSFORM: aValue = mText->mTransform; break;
case PROP_TEXT_ALIGN: aValue = mText->mHorzAlign; break; case PROP_TEXT_ALIGN: aValue = mText->mTextAlign; break;
case PROP_TEXT_INDENT: aValue = mText->mIndent; break; case PROP_TEXT_INDENT: aValue = mText->mIndent; break;
case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break; case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break;
case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break; case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break;
@ -1165,9 +1219,6 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_OVERFLOW: case PROP_OVERFLOW:
case PROP_Z_INDEX: case PROP_Z_INDEX:
case PROP_VISIBILITY: case PROP_VISIBILITY:
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_FILTER: case PROP_FILTER:
if (nsnull != mPosition) { if (nsnull != mPosition) {
switch (aProperty) { switch (aProperty) {
@ -1179,9 +1230,6 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_OVERFLOW: aValue = mPosition->mOverflow; break; case PROP_OVERFLOW: aValue = mPosition->mOverflow; break;
case PROP_Z_INDEX: aValue = mPosition->mZIndex; break; case PROP_Z_INDEX: aValue = mPosition->mZIndex; break;
case PROP_VISIBILITY: aValue = mPosition->mVisibility; break; case PROP_VISIBILITY: aValue = mPosition->mVisibility; break;
case PROP_FLOAT: aValue = mPosition->mFloat; break;
case PROP_CLEAR: aValue = mPosition->mClear; break;
case PROP_DISPLAY: aValue = mPosition->mDisplay; break;
case PROP_FILTER: aValue = mPosition->mFilter; break; case PROP_FILTER: aValue = mPosition->mFilter; break;
} }
} }
@ -1223,6 +1271,24 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
} }
break; break;
// nsCSSDisplay
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_DIRECTION:
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;
}
}
else {
aValue.Reset();
}
break;
case PROP_BACKGROUND: case PROP_BACKGROUND:
case PROP_BORDER: case PROP_BORDER:
case PROP_CLIP: case PROP_CLIP:
@ -1270,6 +1336,9 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mList) { if (nsnull != mList) {
mList->List(out); mList->List(out);
} }
if (nsnull != mDisplay) {
mDisplay->List(out);
}
fputs("}", out); fputs("}", out);
} }
@ -1294,24 +1363,23 @@ NS_HTML nsresult
/* /*
font font
=========== ===========
font-family: string (list)
'font-family', string (list) font-style: enum
'font-style', enum font-variant: enum (ie: small caps)
'font-variant' enum (ie: small caps) font-weight: enum
'font-weight' enum font-size: abs, pct, enum, +-1
'font-size' abs, pct, enum, +-1
color/background color/background
============= =============
color: color color: color
background-color: color background-color: color
background-image: url(string) background-image: url(string)
background-repeat: enum background-repeat: enum
background-attachment: enum background-attachment: enum
background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?)) background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?))
cursor: enum
cursor-image: url(string)
text text
@ -1346,9 +1414,11 @@ overflow: enum
z-index: int, auto z-index: int, auto
visibity: enum visibity: enum
display
=======
float: enum float: enum
clear: enum clear: enum
direction: enum
display: enum display: enum
filter: string filter: string

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

@ -26,6 +26,7 @@
static NS_DEFINE_IID(kCSSFontSID, NS_CSS_FONT_SID); static NS_DEFINE_IID(kCSSFontSID, NS_CSS_FONT_SID);
static NS_DEFINE_IID(kCSSColorSID, NS_CSS_COLOR_SID); static NS_DEFINE_IID(kCSSColorSID, NS_CSS_COLOR_SID);
static NS_DEFINE_IID(kCSSDisplaySID, NS_CSS_DISPLAY_SID);
static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID); static NS_DEFINE_IID(kCSSTextSID, NS_CSS_TEXT_SID);
static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID); static NS_DEFINE_IID(kCSSMarginSID, NS_CSS_MARGIN_SID);
static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID); static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID);
@ -325,6 +326,8 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
mBackPositionX.AppendToString(buffer, PROP_BACKGROUND_X_POSITION); mBackPositionX.AppendToString(buffer, PROP_BACKGROUND_X_POSITION);
mBackPositionY.AppendToString(buffer, PROP_BACKGROUND_Y_POSITION); mBackPositionY.AppendToString(buffer, PROP_BACKGROUND_Y_POSITION);
mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER); mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER);
mCursor.AppendToString(buffer, PROP_CURSOR);
mCursorImage.AppendToString(buffer, PROP_CURSOR_IMAGE);
fputs(buffer, out); fputs(buffer, out);
} }
@ -344,13 +347,31 @@ void nsCSSText::List(FILE* out, PRInt32 aIndent) const
mDecoration.AppendToString(buffer, PROP_TEXT_DECORATION); mDecoration.AppendToString(buffer, PROP_TEXT_DECORATION);
mVertAlign.AppendToString(buffer, PROP_VERTICAL_ALIGN); mVertAlign.AppendToString(buffer, PROP_VERTICAL_ALIGN);
mTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM); mTransform.AppendToString(buffer, PROP_TEXT_TRANSFORM);
mHorzAlign.AppendToString(buffer, PROP_TEXT_ALIGN); mTextAlign.AppendToString(buffer, PROP_TEXT_ALIGN);
mIndent.AppendToString(buffer, PROP_TEXT_INDENT); mIndent.AppendToString(buffer, PROP_TEXT_INDENT);
mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT); mLineHeight.AppendToString(buffer, PROP_LINE_HEIGHT);
mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE); mWhiteSpace.AppendToString(buffer, PROP_WHITE_SPACE);
fputs(buffer, out); fputs(buffer, out);
} }
const nsID& nsCSSDisplay::GetID(void)
{
return kCSSDisplaySID;
}
void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
{
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
nsAutoString buffer;
mDirection.AppendToString(buffer, PROP_DIRECTION);
mDisplay.AppendToString(buffer, PROP_DISPLAY);
mFloat.AppendToString(buffer, PROP_FLOAT);
mClear.AppendToString(buffer, PROP_CLEAR);
fputs(buffer, out);
}
void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const void nsCSSRect::List(FILE* out, PRInt32 aPropID, PRInt32 aIndent) const
{ {
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out); for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
@ -455,9 +476,6 @@ void nsCSSPosition::List(FILE* out, PRInt32 aIndent) const
mOverflow.AppendToString(buffer, PROP_OVERFLOW); mOverflow.AppendToString(buffer, PROP_OVERFLOW);
mZIndex.AppendToString(buffer, PROP_OVERFLOW); mZIndex.AppendToString(buffer, PROP_OVERFLOW);
mVisibility.AppendToString(buffer, PROP_VISIBILITY); mVisibility.AppendToString(buffer, PROP_VISIBILITY);
mFloat.AppendToString(buffer, PROP_FLOAT);
mClear.AppendToString(buffer, PROP_CLEAR);
mDisplay.AppendToString(buffer, PROP_DISPLAY);
mFilter.AppendToString(buffer, PROP_FILTER); mFilter.AppendToString(buffer, PROP_FILTER);
fputs(buffer, out); fputs(buffer, out);
} }
@ -512,6 +530,7 @@ protected:
nsCSSMargin* mMargin; nsCSSMargin* mMargin;
nsCSSPosition* mPosition; nsCSSPosition* mPosition;
nsCSSList* mList; nsCSSList* mList;
nsCSSDisplay* mDisplay;
}; };
#ifdef DEBUG_REFS #ifdef DEBUG_REFS
@ -556,6 +575,9 @@ CSSDeclarationImpl::~CSSDeclarationImpl(void)
if (nsnull != mList) { if (nsnull != mList) {
delete mList; delete mList;
} }
if (nsnull != mDisplay) {
delete mDisplay;
}
#ifdef DEBUG_REFS #ifdef DEBUG_REFS
--gInstanceCount; --gInstanceCount;
fprintf(stdout, "%d - CSSDeclaration\n", gInstanceCount); fprintf(stdout, "%d - CSSDeclaration\n", gInstanceCount);
@ -576,6 +598,9 @@ nsresult CSSDeclarationImpl::GetData(const nsID& aSID, nsCSSStruct** aDataPtr)
else if (aSID.Equals(kCSSColorSID)) { else if (aSID.Equals(kCSSColorSID)) {
*aDataPtr = mColor; *aDataPtr = mColor;
} }
else if (aSID.Equals(kCSSDisplaySID)) {
*aDataPtr = mDisplay;
}
else if (aSID.Equals(kCSSTextSID)) { else if (aSID.Equals(kCSSTextSID)) {
*aDataPtr = mText; *aDataPtr = mText;
} }
@ -612,6 +637,12 @@ nsresult CSSDeclarationImpl::EnsureData(const nsID& aSID, nsCSSStruct** aDataPtr
} }
*aDataPtr = mColor; *aDataPtr = mColor;
} }
else if (aSID.Equals(kCSSDisplaySID)) {
if (nsnull == mDisplay) {
mDisplay = new nsCSSDisplay();
}
*aDataPtr = mColor;
}
else if (aSID.Equals(kCSSTextSID)) { else if (aSID.Equals(kCSSTextSID)) {
if (nsnull == mText) { if (nsnull == mText) {
mText = new nsCSSText(); mText = new nsCSSText();
@ -687,6 +718,8 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_X_POSITION: case PROP_BACKGROUND_X_POSITION:
case PROP_BACKGROUND_Y_POSITION: case PROP_BACKGROUND_Y_POSITION:
case PROP_BACKGROUND_FILTER: case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
if (nsnull == mColor) { if (nsnull == mColor) {
mColor = new nsCSSColor(); mColor = new nsCSSColor();
} }
@ -700,6 +733,8 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_X_POSITION: mColor->mBackPositionX = aValue; break; case PROP_BACKGROUND_X_POSITION: mColor->mBackPositionX = aValue; break;
case PROP_BACKGROUND_Y_POSITION: mColor->mBackPositionY = aValue; break; case PROP_BACKGROUND_Y_POSITION: mColor->mBackPositionY = aValue; break;
case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break; case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break;
case PROP_CURSOR: mColor->mCursor = aValue; break;
case PROP_CURSOR_IMAGE: mColor->mCursorImage = aValue; break;
} }
} }
else { else {
@ -727,7 +762,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_TEXT_DECORATION: mText->mDecoration = aValue; break; case PROP_TEXT_DECORATION: mText->mDecoration = aValue; break;
case PROP_VERTICAL_ALIGN: mText->mVertAlign = aValue; break; case PROP_VERTICAL_ALIGN: mText->mVertAlign = aValue; break;
case PROP_TEXT_TRANSFORM: mText->mTransform = aValue; break; case PROP_TEXT_TRANSFORM: mText->mTransform = aValue; break;
case PROP_TEXT_ALIGN: mText->mHorzAlign = aValue; break; case PROP_TEXT_ALIGN: mText->mTextAlign = aValue; break;
case PROP_TEXT_INDENT: mText->mIndent = aValue; break; case PROP_TEXT_INDENT: mText->mIndent = aValue; break;
case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break; case PROP_LINE_HEIGHT: mText->mLineHeight = aValue; break;
case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break; case PROP_WHITE_SPACE: mText->mWhiteSpace = aValue; break;
@ -888,9 +923,6 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_OVERFLOW: case PROP_OVERFLOW:
case PROP_Z_INDEX: case PROP_Z_INDEX:
case PROP_VISIBILITY: case PROP_VISIBILITY:
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_FILTER: case PROP_FILTER:
if (nsnull == mPosition) { if (nsnull == mPosition) {
mPosition = new nsCSSPosition(); mPosition = new nsCSSPosition();
@ -905,9 +937,6 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_OVERFLOW: mPosition->mOverflow = aValue; break; case PROP_OVERFLOW: mPosition->mOverflow = aValue; break;
case PROP_Z_INDEX: mPosition->mZIndex = aValue; break; case PROP_Z_INDEX: mPosition->mZIndex = aValue; break;
case PROP_VISIBILITY: mPosition->mVisibility = aValue; break; case PROP_VISIBILITY: mPosition->mVisibility = aValue; break;
case PROP_FLOAT: mPosition->mFloat = aValue; break;
case PROP_CLEAR: mPosition->mClear = aValue; break;
case PROP_DISPLAY: mPosition->mDisplay = aValue; break;
case PROP_FILTER: mPosition->mFilter = aValue; break; case PROP_FILTER: mPosition->mFilter = aValue; break;
} }
} }
@ -963,6 +992,27 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
} }
break; break;
// nsCSSDisplay
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_DIRECTION:
if (nsnull == mDisplay) {
mDisplay = new nsCSSDisplay();
}
if (nsnull != mDisplay) {
switch (aProperty) {
case PROP_FLOAT: mDisplay->mFloat = aValue; break;
case PROP_CLEAR: mDisplay->mClear = aValue; break;
case PROP_DISPLAY: mDisplay->mDisplay = aValue; break;
case PROP_DIRECTION: mDisplay->mDirection = aValue; break;
}
}
else {
result = NS_ERROR_OUT_OF_MEMORY;
}
break;
case PROP_BACKGROUND: case PROP_BACKGROUND:
case PROP_BORDER: case PROP_BORDER:
case PROP_CLIP: case PROP_CLIP:
@ -1025,6 +1075,8 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_X_POSITION: case PROP_BACKGROUND_X_POSITION:
case PROP_BACKGROUND_Y_POSITION: case PROP_BACKGROUND_Y_POSITION:
case PROP_BACKGROUND_FILTER: case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
if (nsnull != mColor) { if (nsnull != mColor) {
switch (aProperty) { switch (aProperty) {
case PROP_COLOR: aValue = mColor->mColor; break; case PROP_COLOR: aValue = mColor->mColor; break;
@ -1035,6 +1087,8 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_X_POSITION: aValue = mColor->mBackPositionX; break; case PROP_BACKGROUND_X_POSITION: aValue = mColor->mBackPositionX; break;
case PROP_BACKGROUND_Y_POSITION: aValue = mColor->mBackPositionY; break; case PROP_BACKGROUND_Y_POSITION: aValue = mColor->mBackPositionY; break;
case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break; case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break;
case PROP_CURSOR: aValue = mColor->mCursor; break;
case PROP_CURSOR_IMAGE: aValue = mColor->mCursorImage; break;
} }
} }
else { else {
@ -1059,7 +1113,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_TEXT_DECORATION: aValue = mText->mDecoration; break; case PROP_TEXT_DECORATION: aValue = mText->mDecoration; break;
case PROP_VERTICAL_ALIGN: aValue = mText->mVertAlign; break; case PROP_VERTICAL_ALIGN: aValue = mText->mVertAlign; break;
case PROP_TEXT_TRANSFORM: aValue = mText->mTransform; break; case PROP_TEXT_TRANSFORM: aValue = mText->mTransform; break;
case PROP_TEXT_ALIGN: aValue = mText->mHorzAlign; break; case PROP_TEXT_ALIGN: aValue = mText->mTextAlign; break;
case PROP_TEXT_INDENT: aValue = mText->mIndent; break; case PROP_TEXT_INDENT: aValue = mText->mIndent; break;
case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break; case PROP_LINE_HEIGHT: aValue = mText->mLineHeight; break;
case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break; case PROP_WHITE_SPACE: aValue = mText->mWhiteSpace; break;
@ -1165,9 +1219,6 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_OVERFLOW: case PROP_OVERFLOW:
case PROP_Z_INDEX: case PROP_Z_INDEX:
case PROP_VISIBILITY: case PROP_VISIBILITY:
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_FILTER: case PROP_FILTER:
if (nsnull != mPosition) { if (nsnull != mPosition) {
switch (aProperty) { switch (aProperty) {
@ -1179,9 +1230,6 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_OVERFLOW: aValue = mPosition->mOverflow; break; case PROP_OVERFLOW: aValue = mPosition->mOverflow; break;
case PROP_Z_INDEX: aValue = mPosition->mZIndex; break; case PROP_Z_INDEX: aValue = mPosition->mZIndex; break;
case PROP_VISIBILITY: aValue = mPosition->mVisibility; break; case PROP_VISIBILITY: aValue = mPosition->mVisibility; break;
case PROP_FLOAT: aValue = mPosition->mFloat; break;
case PROP_CLEAR: aValue = mPosition->mClear; break;
case PROP_DISPLAY: aValue = mPosition->mDisplay; break;
case PROP_FILTER: aValue = mPosition->mFilter; break; case PROP_FILTER: aValue = mPosition->mFilter; break;
} }
} }
@ -1223,6 +1271,24 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
} }
break; break;
// nsCSSDisplay
case PROP_FLOAT:
case PROP_CLEAR:
case PROP_DISPLAY:
case PROP_DIRECTION:
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;
}
}
else {
aValue.Reset();
}
break;
case PROP_BACKGROUND: case PROP_BACKGROUND:
case PROP_BORDER: case PROP_BORDER:
case PROP_CLIP: case PROP_CLIP:
@ -1270,6 +1336,9 @@ void CSSDeclarationImpl::List(FILE* out, PRInt32 aIndent) const
if (nsnull != mList) { if (nsnull != mList) {
mList->List(out); mList->List(out);
} }
if (nsnull != mDisplay) {
mDisplay->List(out);
}
fputs("}", out); fputs("}", out);
} }
@ -1294,24 +1363,23 @@ NS_HTML nsresult
/* /*
font font
=========== ===========
font-family: string (list)
'font-family', string (list) font-style: enum
'font-style', enum font-variant: enum (ie: small caps)
'font-variant' enum (ie: small caps) font-weight: enum
'font-weight' enum font-size: abs, pct, enum, +-1
'font-size' abs, pct, enum, +-1
color/background color/background
============= =============
color: color color: color
background-color: color background-color: color
background-image: url(string) background-image: url(string)
background-repeat: enum background-repeat: enum
background-attachment: enum background-attachment: enum
background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?)) background-position-x -y: abs, pct, enum (left/top center right/bottom (pct?))
cursor: enum
cursor-image: url(string)
text text
@ -1346,9 +1414,11 @@ overflow: enum
z-index: int, auto z-index: int, auto
visibity: enum visibity: enum
display
=======
float: enum float: enum
clear: enum clear: enum
direction: enum
display: enum display: enum
filter: string filter: string