diff --git a/content/html/style/src/nsCSSStyleRule.cpp b/content/html/style/src/nsCSSStyleRule.cpp index 3ec71a6566a..40086e3717a 100644 --- a/content/html/style/src/nsCSSStyleRule.cpp +++ b/content/html/style/src/nsCSSStyleRule.cpp @@ -61,6 +61,7 @@ static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID); static NS_DEFINE_IID(kCSSListSID, NS_CSS_LIST_SID); static NS_DEFINE_IID(kCSSDisplaySID, NS_CSS_DISPLAY_SID); static NS_DEFINE_IID(kCSSTableSID, NS_CSS_TABLE_SID); +static NS_DEFINE_IID(kCSSContentSID, NS_CSS_CONTENT_SID); // -- nsCSSSelector ------------------------------- @@ -1151,6 +1152,21 @@ CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* aPresC return NS_OK; } +nsString& Unquote(nsString& aString) +{ + PRUnichar start = aString.First(); + PRUnichar end = aString.Last(); + + if ((start == end) && + ((start == PRUnichar('"')) || + (start == PRUnichar('\'')))) { + PRInt32 length = aString.Length(); + aString.Truncate(length - 1); + aString.Cut(0, 1); + } + return aString; +} + void MapDeclarationInto(nsICSSDeclaration* aDeclaration, nsIStyleContext* aContext, nsIPresContext* aPresContext) { @@ -2050,6 +2066,210 @@ void MapDeclarationInto(nsICSSDeclaration* aDeclaration, } } + nsCSSContent* ourContent; + if (NS_OK == aDeclaration->GetData(kCSSContentSID, (nsCSSStruct**)&ourContent)) { + if (ourContent) { + nsStyleContent* content = (nsStyleContent*)aContext->GetMutableStyleData(eStyleStruct_Content); + + const nsStyleContent* parentContent = content; + if (nsnull != parentContext) { + parentContent = (const nsStyleContent*)parentContext->GetStyleData(eStyleStruct_Content); + } + + PRUint32 count; + nsAutoString buffer; + + // content: [string, url, counter, attr, enum]+, inherit + nsCSSValueList* contentValue = ourContent->mContent; + if (contentValue) { + if (eCSSUnit_Inherit == contentValue->mValue.GetUnit()) { + count = parentContent->ContentCount(); + if (NS_SUCCEEDED(content->AllocateContents(count))) { + nsStyleContentType type; + while (0 < count--) { + parentContent->GetContentAt(count, type, buffer); + content->SetContentAt(count, type, buffer); + } + } + } + else { + count = 0; + while (contentValue) { + count++; + contentValue = contentValue->mNext; + } + if (NS_SUCCEEDED(content->AllocateContents(count))) { + const nsAutoString nullStr; + count = 0; + contentValue = ourContent->mContent; + while (contentValue) { + const nsCSSValue& value = contentValue->mValue; + nsCSSUnit unit = value.GetUnit(); + nsStyleContentType type; + switch (unit) { + case eCSSUnit_String: type = eStyleContentType_String; break; + case eCSSUnit_URL: type = eStyleContentType_URL; break; + case eCSSUnit_Attr: type = eStyleContentType_Attr; break; + case eCSSUnit_Counter: type = eStyleContentType_Counter; break; + case eCSSUnit_Counters: type = eStyleContentType_Counters; break; + case eCSSUnit_Enumerated: + switch (value.GetIntValue()) { + case NS_STYLE_CONTENT_OPEN_QUOTE: + type = eStyleContentType_OpenQuote; break; + case NS_STYLE_CONTENT_CLOSE_QUOTE: + type = eStyleContentType_CloseQuote; break; + case NS_STYLE_CONTENT_NO_OPEN_QUOTE: + type = eStyleContentType_NoOpenQuote; break; + case NS_STYLE_CONTENT_NO_CLOSE_QUOTE: + type = eStyleContentType_NoCloseQuote; break; + default: + NS_ERROR("bad content value"); + } + break; + default: + NS_ERROR("bad content type"); + } + if (type < eStyleContentType_OpenQuote) { + value.GetStringValue(buffer); + Unquote(buffer); + content->SetContentAt(count++, type, buffer); + } + else { + content->SetContentAt(count++, type, nullStr); + } + contentValue = contentValue->mNext; + } + } + } + } + + // counter-increment: [string [int]]+, none, inherit + nsCSSCounterData* ourIncrement = ourContent->mCounterIncrement; + if (ourIncrement) { + PRInt32 increment; + if (eCSSUnit_Inherit == ourIncrement->mCounter.GetUnit()) { + count = parentContent->CounterIncrementCount(); + if (NS_SUCCEEDED(content->AllocateCounterIncrements(count))) { + while (0 < count--) { + parentContent->GetCounterIncrementAt(count, buffer, increment); + content->SetCounterIncrementAt(count, buffer, increment); + } + } + } + else if (eCSSUnit_None == ourIncrement->mCounter.GetUnit()) { + content->AllocateCounterIncrements(0); + } + else if (eCSSUnit_String == ourIncrement->mCounter.GetUnit()) { + count = 0; + while (ourIncrement) { + count++; + ourIncrement = ourIncrement->mNext; + } + if (NS_SUCCEEDED(content->AllocateCounterIncrements(count))) { + count = 0; + ourIncrement = ourContent->mCounterIncrement; + while (ourIncrement) { + if (eCSSUnit_Integer == ourIncrement->mValue.GetUnit()) { + increment = ourIncrement->mValue.GetIntValue(); + } + else { + increment = 1; + } + ourIncrement->mCounter.GetStringValue(buffer); + content->SetCounterIncrementAt(count++, buffer, increment); + ourIncrement = ourIncrement->mNext; + } + } + } + } + + // counter-reset: [string [int]]+, none, inherit + nsCSSCounterData* ourReset = ourContent->mCounterReset; + if (ourReset) { + PRInt32 reset; + if (eCSSUnit_Inherit == ourReset->mCounter.GetUnit()) { + count = parentContent->CounterResetCount(); + if (NS_SUCCEEDED(content->AllocateCounterResets(count))) { + while (0 < count--) { + parentContent->GetCounterResetAt(count, buffer, reset); + content->SetCounterResetAt(count, buffer, reset); + } + } + } + else if (eCSSUnit_None == ourReset->mCounter.GetUnit()) { + content->AllocateCounterResets(0); + } + else if (eCSSUnit_String == ourReset->mCounter.GetUnit()) { + count = 0; + while (ourReset) { + count++; + ourReset = ourReset->mNext; + } + if (NS_SUCCEEDED(content->AllocateCounterResets(count))) { + count = 0; + ourReset = ourContent->mCounterReset; + while (ourReset) { + if (eCSSUnit_Integer == ourReset->mValue.GetUnit()) { + reset = ourReset->mValue.GetIntValue(); + } + else { + reset = 0; + } + ourReset->mCounter.GetStringValue(buffer); + content->SetCounterResetAt(count++, buffer, reset); + ourReset = ourReset->mNext; + } + } + } + } + + // marker-offset: length, auto, inherit + if (! SetCoord(ourContent->mMarkerOffset, content->mMarkerOffset, + SETCOORD_LENGTH | SETCOORD_AUTO, font, aPresContext)) { + if (eCSSUnit_Inherit == ourContent->mMarkerOffset.GetUnit()) { + content->mMarkerOffset = parentContent->mMarkerOffset; + } + } + + // quotes: [string string]+, none, inherit + nsCSSQuotes* ourQuotes = ourContent->mQuotes; + if (ourQuotes) { + nsAutoString closeBuffer; + if (eCSSUnit_Inherit == ourQuotes->mOpen.GetUnit()) { + count = parentContent->QuotesCount(); + if (NS_SUCCEEDED(content->AllocateQuotes(count))) { + while (0 < count--) { + parentContent->GetQuotesAt(count, buffer, closeBuffer); + content->SetQuotesAt(count, buffer, closeBuffer); + } + } + } + else if (eCSSUnit_None == ourQuotes->mOpen.GetUnit()) { + content->AllocateQuotes(0); + } + else if (eCSSUnit_String == ourQuotes->mOpen.GetUnit()) { + count = 0; + while (ourQuotes) { + count++; + ourQuotes = ourQuotes->mNext; + } + if (NS_SUCCEEDED(content->AllocateQuotes(count))) { + count = 0; + ourQuotes = ourContent->mQuotes; + while (ourQuotes) { + ourQuotes->mOpen.GetStringValue(buffer); + ourQuotes->mClose.GetStringValue(closeBuffer); + Unquote(buffer); + Unquote(closeBuffer); + content->SetQuotesAt(count++, buffer, closeBuffer); + ourQuotes = ourQuotes->mNext; + } + } + } + } + } + } + NS_IF_RELEASE(parentContext); } } diff --git a/layout/html/style/src/nsCSSStyleRule.cpp b/layout/html/style/src/nsCSSStyleRule.cpp index 3ec71a6566a..40086e3717a 100644 --- a/layout/html/style/src/nsCSSStyleRule.cpp +++ b/layout/html/style/src/nsCSSStyleRule.cpp @@ -61,6 +61,7 @@ static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID); static NS_DEFINE_IID(kCSSListSID, NS_CSS_LIST_SID); static NS_DEFINE_IID(kCSSDisplaySID, NS_CSS_DISPLAY_SID); static NS_DEFINE_IID(kCSSTableSID, NS_CSS_TABLE_SID); +static NS_DEFINE_IID(kCSSContentSID, NS_CSS_CONTENT_SID); // -- nsCSSSelector ------------------------------- @@ -1151,6 +1152,21 @@ CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* aPresC return NS_OK; } +nsString& Unquote(nsString& aString) +{ + PRUnichar start = aString.First(); + PRUnichar end = aString.Last(); + + if ((start == end) && + ((start == PRUnichar('"')) || + (start == PRUnichar('\'')))) { + PRInt32 length = aString.Length(); + aString.Truncate(length - 1); + aString.Cut(0, 1); + } + return aString; +} + void MapDeclarationInto(nsICSSDeclaration* aDeclaration, nsIStyleContext* aContext, nsIPresContext* aPresContext) { @@ -2050,6 +2066,210 @@ void MapDeclarationInto(nsICSSDeclaration* aDeclaration, } } + nsCSSContent* ourContent; + if (NS_OK == aDeclaration->GetData(kCSSContentSID, (nsCSSStruct**)&ourContent)) { + if (ourContent) { + nsStyleContent* content = (nsStyleContent*)aContext->GetMutableStyleData(eStyleStruct_Content); + + const nsStyleContent* parentContent = content; + if (nsnull != parentContext) { + parentContent = (const nsStyleContent*)parentContext->GetStyleData(eStyleStruct_Content); + } + + PRUint32 count; + nsAutoString buffer; + + // content: [string, url, counter, attr, enum]+, inherit + nsCSSValueList* contentValue = ourContent->mContent; + if (contentValue) { + if (eCSSUnit_Inherit == contentValue->mValue.GetUnit()) { + count = parentContent->ContentCount(); + if (NS_SUCCEEDED(content->AllocateContents(count))) { + nsStyleContentType type; + while (0 < count--) { + parentContent->GetContentAt(count, type, buffer); + content->SetContentAt(count, type, buffer); + } + } + } + else { + count = 0; + while (contentValue) { + count++; + contentValue = contentValue->mNext; + } + if (NS_SUCCEEDED(content->AllocateContents(count))) { + const nsAutoString nullStr; + count = 0; + contentValue = ourContent->mContent; + while (contentValue) { + const nsCSSValue& value = contentValue->mValue; + nsCSSUnit unit = value.GetUnit(); + nsStyleContentType type; + switch (unit) { + case eCSSUnit_String: type = eStyleContentType_String; break; + case eCSSUnit_URL: type = eStyleContentType_URL; break; + case eCSSUnit_Attr: type = eStyleContentType_Attr; break; + case eCSSUnit_Counter: type = eStyleContentType_Counter; break; + case eCSSUnit_Counters: type = eStyleContentType_Counters; break; + case eCSSUnit_Enumerated: + switch (value.GetIntValue()) { + case NS_STYLE_CONTENT_OPEN_QUOTE: + type = eStyleContentType_OpenQuote; break; + case NS_STYLE_CONTENT_CLOSE_QUOTE: + type = eStyleContentType_CloseQuote; break; + case NS_STYLE_CONTENT_NO_OPEN_QUOTE: + type = eStyleContentType_NoOpenQuote; break; + case NS_STYLE_CONTENT_NO_CLOSE_QUOTE: + type = eStyleContentType_NoCloseQuote; break; + default: + NS_ERROR("bad content value"); + } + break; + default: + NS_ERROR("bad content type"); + } + if (type < eStyleContentType_OpenQuote) { + value.GetStringValue(buffer); + Unquote(buffer); + content->SetContentAt(count++, type, buffer); + } + else { + content->SetContentAt(count++, type, nullStr); + } + contentValue = contentValue->mNext; + } + } + } + } + + // counter-increment: [string [int]]+, none, inherit + nsCSSCounterData* ourIncrement = ourContent->mCounterIncrement; + if (ourIncrement) { + PRInt32 increment; + if (eCSSUnit_Inherit == ourIncrement->mCounter.GetUnit()) { + count = parentContent->CounterIncrementCount(); + if (NS_SUCCEEDED(content->AllocateCounterIncrements(count))) { + while (0 < count--) { + parentContent->GetCounterIncrementAt(count, buffer, increment); + content->SetCounterIncrementAt(count, buffer, increment); + } + } + } + else if (eCSSUnit_None == ourIncrement->mCounter.GetUnit()) { + content->AllocateCounterIncrements(0); + } + else if (eCSSUnit_String == ourIncrement->mCounter.GetUnit()) { + count = 0; + while (ourIncrement) { + count++; + ourIncrement = ourIncrement->mNext; + } + if (NS_SUCCEEDED(content->AllocateCounterIncrements(count))) { + count = 0; + ourIncrement = ourContent->mCounterIncrement; + while (ourIncrement) { + if (eCSSUnit_Integer == ourIncrement->mValue.GetUnit()) { + increment = ourIncrement->mValue.GetIntValue(); + } + else { + increment = 1; + } + ourIncrement->mCounter.GetStringValue(buffer); + content->SetCounterIncrementAt(count++, buffer, increment); + ourIncrement = ourIncrement->mNext; + } + } + } + } + + // counter-reset: [string [int]]+, none, inherit + nsCSSCounterData* ourReset = ourContent->mCounterReset; + if (ourReset) { + PRInt32 reset; + if (eCSSUnit_Inherit == ourReset->mCounter.GetUnit()) { + count = parentContent->CounterResetCount(); + if (NS_SUCCEEDED(content->AllocateCounterResets(count))) { + while (0 < count--) { + parentContent->GetCounterResetAt(count, buffer, reset); + content->SetCounterResetAt(count, buffer, reset); + } + } + } + else if (eCSSUnit_None == ourReset->mCounter.GetUnit()) { + content->AllocateCounterResets(0); + } + else if (eCSSUnit_String == ourReset->mCounter.GetUnit()) { + count = 0; + while (ourReset) { + count++; + ourReset = ourReset->mNext; + } + if (NS_SUCCEEDED(content->AllocateCounterResets(count))) { + count = 0; + ourReset = ourContent->mCounterReset; + while (ourReset) { + if (eCSSUnit_Integer == ourReset->mValue.GetUnit()) { + reset = ourReset->mValue.GetIntValue(); + } + else { + reset = 0; + } + ourReset->mCounter.GetStringValue(buffer); + content->SetCounterResetAt(count++, buffer, reset); + ourReset = ourReset->mNext; + } + } + } + } + + // marker-offset: length, auto, inherit + if (! SetCoord(ourContent->mMarkerOffset, content->mMarkerOffset, + SETCOORD_LENGTH | SETCOORD_AUTO, font, aPresContext)) { + if (eCSSUnit_Inherit == ourContent->mMarkerOffset.GetUnit()) { + content->mMarkerOffset = parentContent->mMarkerOffset; + } + } + + // quotes: [string string]+, none, inherit + nsCSSQuotes* ourQuotes = ourContent->mQuotes; + if (ourQuotes) { + nsAutoString closeBuffer; + if (eCSSUnit_Inherit == ourQuotes->mOpen.GetUnit()) { + count = parentContent->QuotesCount(); + if (NS_SUCCEEDED(content->AllocateQuotes(count))) { + while (0 < count--) { + parentContent->GetQuotesAt(count, buffer, closeBuffer); + content->SetQuotesAt(count, buffer, closeBuffer); + } + } + } + else if (eCSSUnit_None == ourQuotes->mOpen.GetUnit()) { + content->AllocateQuotes(0); + } + else if (eCSSUnit_String == ourQuotes->mOpen.GetUnit()) { + count = 0; + while (ourQuotes) { + count++; + ourQuotes = ourQuotes->mNext; + } + if (NS_SUCCEEDED(content->AllocateQuotes(count))) { + count = 0; + ourQuotes = ourContent->mQuotes; + while (ourQuotes) { + ourQuotes->mOpen.GetStringValue(buffer); + ourQuotes->mClose.GetStringValue(closeBuffer); + Unquote(buffer); + Unquote(closeBuffer); + content->SetQuotesAt(count++, buffer, closeBuffer); + ourQuotes = ourQuotes->mNext; + } + } + } + } + } + } + NS_IF_RELEASE(parentContext); } } diff --git a/layout/style/nsCSSStyleRule.cpp b/layout/style/nsCSSStyleRule.cpp index 3ec71a6566a..40086e3717a 100644 --- a/layout/style/nsCSSStyleRule.cpp +++ b/layout/style/nsCSSStyleRule.cpp @@ -61,6 +61,7 @@ static NS_DEFINE_IID(kCSSPositionSID, NS_CSS_POSITION_SID); static NS_DEFINE_IID(kCSSListSID, NS_CSS_LIST_SID); static NS_DEFINE_IID(kCSSDisplaySID, NS_CSS_DISPLAY_SID); static NS_DEFINE_IID(kCSSTableSID, NS_CSS_TABLE_SID); +static NS_DEFINE_IID(kCSSContentSID, NS_CSS_CONTENT_SID); // -- nsCSSSelector ------------------------------- @@ -1151,6 +1152,21 @@ CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* aPresC return NS_OK; } +nsString& Unquote(nsString& aString) +{ + PRUnichar start = aString.First(); + PRUnichar end = aString.Last(); + + if ((start == end) && + ((start == PRUnichar('"')) || + (start == PRUnichar('\'')))) { + PRInt32 length = aString.Length(); + aString.Truncate(length - 1); + aString.Cut(0, 1); + } + return aString; +} + void MapDeclarationInto(nsICSSDeclaration* aDeclaration, nsIStyleContext* aContext, nsIPresContext* aPresContext) { @@ -2050,6 +2066,210 @@ void MapDeclarationInto(nsICSSDeclaration* aDeclaration, } } + nsCSSContent* ourContent; + if (NS_OK == aDeclaration->GetData(kCSSContentSID, (nsCSSStruct**)&ourContent)) { + if (ourContent) { + nsStyleContent* content = (nsStyleContent*)aContext->GetMutableStyleData(eStyleStruct_Content); + + const nsStyleContent* parentContent = content; + if (nsnull != parentContext) { + parentContent = (const nsStyleContent*)parentContext->GetStyleData(eStyleStruct_Content); + } + + PRUint32 count; + nsAutoString buffer; + + // content: [string, url, counter, attr, enum]+, inherit + nsCSSValueList* contentValue = ourContent->mContent; + if (contentValue) { + if (eCSSUnit_Inherit == contentValue->mValue.GetUnit()) { + count = parentContent->ContentCount(); + if (NS_SUCCEEDED(content->AllocateContents(count))) { + nsStyleContentType type; + while (0 < count--) { + parentContent->GetContentAt(count, type, buffer); + content->SetContentAt(count, type, buffer); + } + } + } + else { + count = 0; + while (contentValue) { + count++; + contentValue = contentValue->mNext; + } + if (NS_SUCCEEDED(content->AllocateContents(count))) { + const nsAutoString nullStr; + count = 0; + contentValue = ourContent->mContent; + while (contentValue) { + const nsCSSValue& value = contentValue->mValue; + nsCSSUnit unit = value.GetUnit(); + nsStyleContentType type; + switch (unit) { + case eCSSUnit_String: type = eStyleContentType_String; break; + case eCSSUnit_URL: type = eStyleContentType_URL; break; + case eCSSUnit_Attr: type = eStyleContentType_Attr; break; + case eCSSUnit_Counter: type = eStyleContentType_Counter; break; + case eCSSUnit_Counters: type = eStyleContentType_Counters; break; + case eCSSUnit_Enumerated: + switch (value.GetIntValue()) { + case NS_STYLE_CONTENT_OPEN_QUOTE: + type = eStyleContentType_OpenQuote; break; + case NS_STYLE_CONTENT_CLOSE_QUOTE: + type = eStyleContentType_CloseQuote; break; + case NS_STYLE_CONTENT_NO_OPEN_QUOTE: + type = eStyleContentType_NoOpenQuote; break; + case NS_STYLE_CONTENT_NO_CLOSE_QUOTE: + type = eStyleContentType_NoCloseQuote; break; + default: + NS_ERROR("bad content value"); + } + break; + default: + NS_ERROR("bad content type"); + } + if (type < eStyleContentType_OpenQuote) { + value.GetStringValue(buffer); + Unquote(buffer); + content->SetContentAt(count++, type, buffer); + } + else { + content->SetContentAt(count++, type, nullStr); + } + contentValue = contentValue->mNext; + } + } + } + } + + // counter-increment: [string [int]]+, none, inherit + nsCSSCounterData* ourIncrement = ourContent->mCounterIncrement; + if (ourIncrement) { + PRInt32 increment; + if (eCSSUnit_Inherit == ourIncrement->mCounter.GetUnit()) { + count = parentContent->CounterIncrementCount(); + if (NS_SUCCEEDED(content->AllocateCounterIncrements(count))) { + while (0 < count--) { + parentContent->GetCounterIncrementAt(count, buffer, increment); + content->SetCounterIncrementAt(count, buffer, increment); + } + } + } + else if (eCSSUnit_None == ourIncrement->mCounter.GetUnit()) { + content->AllocateCounterIncrements(0); + } + else if (eCSSUnit_String == ourIncrement->mCounter.GetUnit()) { + count = 0; + while (ourIncrement) { + count++; + ourIncrement = ourIncrement->mNext; + } + if (NS_SUCCEEDED(content->AllocateCounterIncrements(count))) { + count = 0; + ourIncrement = ourContent->mCounterIncrement; + while (ourIncrement) { + if (eCSSUnit_Integer == ourIncrement->mValue.GetUnit()) { + increment = ourIncrement->mValue.GetIntValue(); + } + else { + increment = 1; + } + ourIncrement->mCounter.GetStringValue(buffer); + content->SetCounterIncrementAt(count++, buffer, increment); + ourIncrement = ourIncrement->mNext; + } + } + } + } + + // counter-reset: [string [int]]+, none, inherit + nsCSSCounterData* ourReset = ourContent->mCounterReset; + if (ourReset) { + PRInt32 reset; + if (eCSSUnit_Inherit == ourReset->mCounter.GetUnit()) { + count = parentContent->CounterResetCount(); + if (NS_SUCCEEDED(content->AllocateCounterResets(count))) { + while (0 < count--) { + parentContent->GetCounterResetAt(count, buffer, reset); + content->SetCounterResetAt(count, buffer, reset); + } + } + } + else if (eCSSUnit_None == ourReset->mCounter.GetUnit()) { + content->AllocateCounterResets(0); + } + else if (eCSSUnit_String == ourReset->mCounter.GetUnit()) { + count = 0; + while (ourReset) { + count++; + ourReset = ourReset->mNext; + } + if (NS_SUCCEEDED(content->AllocateCounterResets(count))) { + count = 0; + ourReset = ourContent->mCounterReset; + while (ourReset) { + if (eCSSUnit_Integer == ourReset->mValue.GetUnit()) { + reset = ourReset->mValue.GetIntValue(); + } + else { + reset = 0; + } + ourReset->mCounter.GetStringValue(buffer); + content->SetCounterResetAt(count++, buffer, reset); + ourReset = ourReset->mNext; + } + } + } + } + + // marker-offset: length, auto, inherit + if (! SetCoord(ourContent->mMarkerOffset, content->mMarkerOffset, + SETCOORD_LENGTH | SETCOORD_AUTO, font, aPresContext)) { + if (eCSSUnit_Inherit == ourContent->mMarkerOffset.GetUnit()) { + content->mMarkerOffset = parentContent->mMarkerOffset; + } + } + + // quotes: [string string]+, none, inherit + nsCSSQuotes* ourQuotes = ourContent->mQuotes; + if (ourQuotes) { + nsAutoString closeBuffer; + if (eCSSUnit_Inherit == ourQuotes->mOpen.GetUnit()) { + count = parentContent->QuotesCount(); + if (NS_SUCCEEDED(content->AllocateQuotes(count))) { + while (0 < count--) { + parentContent->GetQuotesAt(count, buffer, closeBuffer); + content->SetQuotesAt(count, buffer, closeBuffer); + } + } + } + else if (eCSSUnit_None == ourQuotes->mOpen.GetUnit()) { + content->AllocateQuotes(0); + } + else if (eCSSUnit_String == ourQuotes->mOpen.GetUnit()) { + count = 0; + while (ourQuotes) { + count++; + ourQuotes = ourQuotes->mNext; + } + if (NS_SUCCEEDED(content->AllocateQuotes(count))) { + count = 0; + ourQuotes = ourContent->mQuotes; + while (ourQuotes) { + ourQuotes->mOpen.GetStringValue(buffer); + ourQuotes->mClose.GetStringValue(closeBuffer); + Unquote(buffer); + Unquote(closeBuffer); + content->SetQuotesAt(count++, buffer, closeBuffer); + ourQuotes = ourQuotes->mNext; + } + } + } + } + } + } + NS_IF_RELEASE(parentContext); } }