WIP for supporting setting the cssText property on css declarations through the CSS DOM, approved and partly reviewed by Pierre.

git-svn-id: svn://10.0.0.236/trunk@68135 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
jst%netscape.com 2000-05-03 21:42:00 +00:00
parent f94a42e025
commit 09a726c20d
17 changed files with 335 additions and 47 deletions

View File

@ -114,7 +114,10 @@ public:
virtual void DropReference();
virtual nsresult GetCSSDeclaration(nsICSSDeclaration **aDecl,
PRBool aAllocate);
virtual nsresult ParseDeclaration(const nsString& aDecl);
virtual nsresult SetCSSDeclaration(nsICSSDeclaration *aDecl);
virtual nsresult ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl);
virtual nsresult GetParent(nsISupports **aParent);
protected:
@ -230,7 +233,33 @@ nsDOMCSSAttributeDeclaration::GetCSSDeclaration(nsICSSDeclaration **aDecl,
}
nsresult
nsDOMCSSAttributeDeclaration::ParseDeclaration(const nsString& aDecl)
nsDOMCSSAttributeDeclaration::SetCSSDeclaration(nsICSSDeclaration *aDecl)
{
nsHTMLValue val;
nsIStyleRule* rule;
nsICSSStyleRule* cssRule;
nsresult result = NS_OK;
if (nsnull != mContent) {
mContent->GetHTMLAttribute(nsHTMLAtoms::style, val);
if (eHTMLUnit_ISupports == val.GetUnit()) {
rule = (nsIStyleRule*) val.GetISupportsValue();
result = rule->QueryInterface(kICSSStyleRuleIID, (void**)&cssRule);
if (NS_OK == result) {
cssRule->SetDeclaration(aDecl);
NS_RELEASE(cssRule);
}
NS_RELEASE(rule);
}
}
return result;
}
nsresult
nsDOMCSSAttributeDeclaration::ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl)
{
nsICSSDeclaration *decl;
nsresult result = GetCSSDeclaration(&decl, PR_TRUE);
@ -265,9 +294,34 @@ nsDOMCSSAttributeDeclaration::ParseDeclaration(const nsString& aDecl)
if (doc) {
doc->BeginUpdate();
}
result = cssParser->ParseAndAppendDeclaration(aDecl, baseURI, decl, &hint);
nsCOMPtr<nsICSSDeclaration> declClone;
decl->Clone(*getter_AddRefs(declClone));
if (aClearOldDecl) {
// This should be done with decl->Clear() once such a method exists.
nsAutoString propName;
PRUint32 count, i;
decl->Count(&count);
for (i = 0; i < count; i++) {
decl->GetNthProperty(0, propName);
nsCSSProperty prop = nsCSSProps::LookupProperty(propName);
nsCSSValue val;
decl->RemoveProperty(prop, val);
}
}
result = cssParser->ParseAndAppendDeclaration(aDecl, baseURI, decl,
aParseOnlyOneDecl, &hint);
if (result == NS_CSS_PARSER_DROP_DECLARATION) {
SetCSSDeclaration(declClone);
result = NS_OK;
}
if (doc) {
if (NS_SUCCEEDED(result)) {
if (NS_SUCCEEDED(result) && result != NS_CSS_PARSER_DROP_DECLARATION) {
doc->AttributeChanged(mContent, kNameSpaceID_None, nsHTMLAtoms::style, hint);
}
doc->EndUpdate();

View File

@ -72,6 +72,7 @@ public:
NS_IMETHOD ParseAndAppendDeclaration(const nsString& aBuffer,
nsIURI* aBaseURL,
nsICSSDeclaration* aDeclaration,
PRBool aParseOnlyOneDecl,
PRInt32* aHint) = 0;
// Charset management method:
@ -92,6 +93,10 @@ public:
#define NS_CSS_GETINFO_CSS2 ((PRUint32) 0x00000004L)
#define NS_CSS_GETINFO_CSS_FROSTING ((PRUint32) 0x00000008L)
// Success code that can be returned from ParseAndAppendDeclaration()
#define NS_CSS_PARSER_DROP_DECLARATION \
NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_LAYOUT,1)
extern NS_HTML nsresult
NS_NewCSSParser(nsICSSParser** aInstancePtrResult);

View File

@ -55,9 +55,6 @@ static NS_DEFINE_IID(kICSSParserIID, NS_ICSS_PARSER_IID);
static NS_DEFINE_IID(kICSSStyleSheetIID, NS_ICSS_STYLE_SHEET_IID);
static NS_DEFINE_IID(kIStyleSheetIID, NS_ISTYLE_SHEET_IID);
#define NS_CSS_PARSER_DROP_DECLARATION \
NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_LAYOUT,1)
MOZ_DECL_CTOR_COUNTER(SelectorList);
@ -149,6 +146,7 @@ public:
NS_IMETHOD ParseAndAppendDeclaration(const nsString& aBuffer,
nsIURI* aBaseURL,
nsICSSDeclaration* aDeclaration,
PRBool aParseOnlyOneDecl,
PRInt32* aHint);
NS_IMETHOD GetCharset(/*out*/nsString &aCharsetDest) const;
@ -555,6 +553,7 @@ NS_IMETHODIMP
CSSParserImpl::ParseAndAppendDeclaration(const nsString& aBuffer,
nsIURI* aBaseURL,
nsICSSDeclaration* aDeclaration,
PRBool aParseOnlyOneDecl,
PRInt32* aHint)
{
// NS_ASSERTION(nsnull != aBaseURL, "need base URL");
@ -581,15 +580,26 @@ CSSParserImpl::ParseAndAppendDeclaration(const nsString& aBuffer,
PRInt32 hint = NS_STYLE_HINT_NONE;
if (! ParseDeclaration(errorCode, aDeclaration, PR_FALSE, hint)) {
hint = NS_STYLE_HINT_NONE;
}
if (nsnull != aHint) {
*aHint = hint;
}
do {
if (ParseDeclaration(errorCode, aDeclaration, PR_FALSE, hint)) {
if (aHint && hint > *aHint) {
*aHint = hint;
}
} else {
if (errorCode != -1) { // -1 means EOF so we ignore that
rv = errorCode;
}
break;
}
} while (!aParseOnlyOneDecl);
ReleaseScanner();
return NS_OK;
return rv;
}
//----------------------------------------------------------------------

View File

@ -793,7 +793,10 @@ public:
virtual void DropReference(void);
virtual nsresult GetCSSDeclaration(nsICSSDeclaration **aDecl,
PRBool aAllocate);
virtual nsresult ParseDeclaration(const nsString& aDecl);
virtual nsresult SetCSSDeclaration(nsICSSDeclaration *aDecl);
virtual nsresult ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl);
virtual nsresult GetParent(nsISupports **aParent);
protected:
@ -866,7 +869,19 @@ DOMCSSDeclarationImpl::GetCSSDeclaration(nsICSSDeclaration **aDecl,
}
nsresult
DOMCSSDeclarationImpl::ParseDeclaration(const nsString& aDecl)
DOMCSSDeclarationImpl::SetCSSDeclaration(nsICSSDeclaration *aDecl)
{
if (nsnull != mRule) {
mRule->SetDeclaration(aDecl);
}
return NS_OK;
}
nsresult
DOMCSSDeclarationImpl::ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl)
{
nsICSSDeclaration *decl;
nsresult result = GetCSSDeclaration(&decl, PR_TRUE);
@ -904,9 +919,35 @@ DOMCSSDeclarationImpl::ParseDeclaration(const nsString& aDecl)
}
if (NS_SUCCEEDED(result)) {
nsCOMPtr<nsICSSDeclaration> declClone;
decl->Clone(*getter_AddRefs(declClone));
NS_ENSURE_TRUE(declClone, NS_ERROR_OUT_OF_MEMORY);
if (aClearOldDecl) {
// This should be done with decl->Clear() once such a method exists.
nsAutoString propName;
PRUint32 count, i;
decl->Count(&count);
for (i = 0; i < count; i++) {
decl->GetNthProperty(0, propName);
nsCSSProperty prop = nsCSSProps::LookupProperty(propName);
nsCSSValue val;
decl->RemoveProperty(prop, val);
}
}
PRInt32 hint;
result = cssParser->ParseAndAppendDeclaration(aDecl, baseURI, decl, &hint);
if (NS_SUCCEEDED(result)) {
result = cssParser->ParseAndAppendDeclaration(aDecl, baseURI, decl,
aParseOnlyOneDecl, &hint);
if (result == NS_CSS_PARSER_DROP_DECLARATION) {
SetCSSDeclaration(declClone);
result = NS_OK;
} else if (NS_SUCCEEDED(result)) {
if (cssSheet) {
cssSheet->SetModified(PR_TRUE);
}

View File

@ -247,7 +247,7 @@ nsDOMCSSDeclaration::SetProperty(const nsString& aPropertyName,
declString.Append(aValue);
declString.Append(aPriority);
return ParseDeclaration(declString);
return ParseDeclaration(declString, PR_TRUE, PR_FALSE);
}
NS_IMETHODIMP

View File

@ -64,8 +64,12 @@ public:
virtual void DropReference() = 0;
virtual nsresult GetCSSDeclaration(nsICSSDeclaration **aDecl,
PRBool aAllocate) = 0;
// Note! This will only set the declaration if a style rule already exists
virtual nsresult SetCSSDeclaration(nsICSSDeclaration *aDecl) = 0;
virtual nsresult ParseDeclaration(const nsString& aDecl) = 0;
virtual nsresult ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl) = 0;
virtual nsresult GetParent(nsISupports **aParent) = 0;
protected:

View File

@ -114,7 +114,10 @@ public:
virtual void DropReference();
virtual nsresult GetCSSDeclaration(nsICSSDeclaration **aDecl,
PRBool aAllocate);
virtual nsresult ParseDeclaration(const nsString& aDecl);
virtual nsresult SetCSSDeclaration(nsICSSDeclaration *aDecl);
virtual nsresult ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl);
virtual nsresult GetParent(nsISupports **aParent);
protected:
@ -230,7 +233,33 @@ nsDOMCSSAttributeDeclaration::GetCSSDeclaration(nsICSSDeclaration **aDecl,
}
nsresult
nsDOMCSSAttributeDeclaration::ParseDeclaration(const nsString& aDecl)
nsDOMCSSAttributeDeclaration::SetCSSDeclaration(nsICSSDeclaration *aDecl)
{
nsHTMLValue val;
nsIStyleRule* rule;
nsICSSStyleRule* cssRule;
nsresult result = NS_OK;
if (nsnull != mContent) {
mContent->GetHTMLAttribute(nsHTMLAtoms::style, val);
if (eHTMLUnit_ISupports == val.GetUnit()) {
rule = (nsIStyleRule*) val.GetISupportsValue();
result = rule->QueryInterface(kICSSStyleRuleIID, (void**)&cssRule);
if (NS_OK == result) {
cssRule->SetDeclaration(aDecl);
NS_RELEASE(cssRule);
}
NS_RELEASE(rule);
}
}
return result;
}
nsresult
nsDOMCSSAttributeDeclaration::ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl)
{
nsICSSDeclaration *decl;
nsresult result = GetCSSDeclaration(&decl, PR_TRUE);
@ -265,9 +294,34 @@ nsDOMCSSAttributeDeclaration::ParseDeclaration(const nsString& aDecl)
if (doc) {
doc->BeginUpdate();
}
result = cssParser->ParseAndAppendDeclaration(aDecl, baseURI, decl, &hint);
nsCOMPtr<nsICSSDeclaration> declClone;
decl->Clone(*getter_AddRefs(declClone));
if (aClearOldDecl) {
// This should be done with decl->Clear() once such a method exists.
nsAutoString propName;
PRUint32 count, i;
decl->Count(&count);
for (i = 0; i < count; i++) {
decl->GetNthProperty(0, propName);
nsCSSProperty prop = nsCSSProps::LookupProperty(propName);
nsCSSValue val;
decl->RemoveProperty(prop, val);
}
}
result = cssParser->ParseAndAppendDeclaration(aDecl, baseURI, decl,
aParseOnlyOneDecl, &hint);
if (result == NS_CSS_PARSER_DROP_DECLARATION) {
SetCSSDeclaration(declClone);
result = NS_OK;
}
if (doc) {
if (NS_SUCCEEDED(result)) {
if (NS_SUCCEEDED(result) && result != NS_CSS_PARSER_DROP_DECLARATION) {
doc->AttributeChanged(mContent, kNameSpaceID_None, nsHTMLAtoms::style, hint);
}
doc->EndUpdate();

View File

@ -72,6 +72,7 @@ public:
NS_IMETHOD ParseAndAppendDeclaration(const nsString& aBuffer,
nsIURI* aBaseURL,
nsICSSDeclaration* aDeclaration,
PRBool aParseOnlyOneDecl,
PRInt32* aHint) = 0;
// Charset management method:
@ -92,6 +93,10 @@ public:
#define NS_CSS_GETINFO_CSS2 ((PRUint32) 0x00000004L)
#define NS_CSS_GETINFO_CSS_FROSTING ((PRUint32) 0x00000008L)
// Success code that can be returned from ParseAndAppendDeclaration()
#define NS_CSS_PARSER_DROP_DECLARATION \
NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_LAYOUT,1)
extern NS_HTML nsresult
NS_NewCSSParser(nsICSSParser** aInstancePtrResult);

View File

@ -55,9 +55,6 @@ static NS_DEFINE_IID(kICSSParserIID, NS_ICSS_PARSER_IID);
static NS_DEFINE_IID(kICSSStyleSheetIID, NS_ICSS_STYLE_SHEET_IID);
static NS_DEFINE_IID(kIStyleSheetIID, NS_ISTYLE_SHEET_IID);
#define NS_CSS_PARSER_DROP_DECLARATION \
NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_LAYOUT,1)
MOZ_DECL_CTOR_COUNTER(SelectorList);
@ -149,6 +146,7 @@ public:
NS_IMETHOD ParseAndAppendDeclaration(const nsString& aBuffer,
nsIURI* aBaseURL,
nsICSSDeclaration* aDeclaration,
PRBool aParseOnlyOneDecl,
PRInt32* aHint);
NS_IMETHOD GetCharset(/*out*/nsString &aCharsetDest) const;
@ -555,6 +553,7 @@ NS_IMETHODIMP
CSSParserImpl::ParseAndAppendDeclaration(const nsString& aBuffer,
nsIURI* aBaseURL,
nsICSSDeclaration* aDeclaration,
PRBool aParseOnlyOneDecl,
PRInt32* aHint)
{
// NS_ASSERTION(nsnull != aBaseURL, "need base URL");
@ -581,15 +580,26 @@ CSSParserImpl::ParseAndAppendDeclaration(const nsString& aBuffer,
PRInt32 hint = NS_STYLE_HINT_NONE;
if (! ParseDeclaration(errorCode, aDeclaration, PR_FALSE, hint)) {
hint = NS_STYLE_HINT_NONE;
}
if (nsnull != aHint) {
*aHint = hint;
}
do {
if (ParseDeclaration(errorCode, aDeclaration, PR_FALSE, hint)) {
if (aHint && hint > *aHint) {
*aHint = hint;
}
} else {
if (errorCode != -1) { // -1 means EOF so we ignore that
rv = errorCode;
}
break;
}
} while (!aParseOnlyOneDecl);
ReleaseScanner();
return NS_OK;
return rv;
}
//----------------------------------------------------------------------

View File

@ -793,7 +793,10 @@ public:
virtual void DropReference(void);
virtual nsresult GetCSSDeclaration(nsICSSDeclaration **aDecl,
PRBool aAllocate);
virtual nsresult ParseDeclaration(const nsString& aDecl);
virtual nsresult SetCSSDeclaration(nsICSSDeclaration *aDecl);
virtual nsresult ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl);
virtual nsresult GetParent(nsISupports **aParent);
protected:
@ -866,7 +869,19 @@ DOMCSSDeclarationImpl::GetCSSDeclaration(nsICSSDeclaration **aDecl,
}
nsresult
DOMCSSDeclarationImpl::ParseDeclaration(const nsString& aDecl)
DOMCSSDeclarationImpl::SetCSSDeclaration(nsICSSDeclaration *aDecl)
{
if (nsnull != mRule) {
mRule->SetDeclaration(aDecl);
}
return NS_OK;
}
nsresult
DOMCSSDeclarationImpl::ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl)
{
nsICSSDeclaration *decl;
nsresult result = GetCSSDeclaration(&decl, PR_TRUE);
@ -904,9 +919,35 @@ DOMCSSDeclarationImpl::ParseDeclaration(const nsString& aDecl)
}
if (NS_SUCCEEDED(result)) {
nsCOMPtr<nsICSSDeclaration> declClone;
decl->Clone(*getter_AddRefs(declClone));
NS_ENSURE_TRUE(declClone, NS_ERROR_OUT_OF_MEMORY);
if (aClearOldDecl) {
// This should be done with decl->Clear() once such a method exists.
nsAutoString propName;
PRUint32 count, i;
decl->Count(&count);
for (i = 0; i < count; i++) {
decl->GetNthProperty(0, propName);
nsCSSProperty prop = nsCSSProps::LookupProperty(propName);
nsCSSValue val;
decl->RemoveProperty(prop, val);
}
}
PRInt32 hint;
result = cssParser->ParseAndAppendDeclaration(aDecl, baseURI, decl, &hint);
if (NS_SUCCEEDED(result)) {
result = cssParser->ParseAndAppendDeclaration(aDecl, baseURI, decl,
aParseOnlyOneDecl, &hint);
if (result == NS_CSS_PARSER_DROP_DECLARATION) {
SetCSSDeclaration(declClone);
result = NS_OK;
} else if (NS_SUCCEEDED(result)) {
if (cssSheet) {
cssSheet->SetModified(PR_TRUE);
}

View File

@ -247,7 +247,7 @@ nsDOMCSSDeclaration::SetProperty(const nsString& aPropertyName,
declString.Append(aValue);
declString.Append(aPriority);
return ParseDeclaration(declString);
return ParseDeclaration(declString, PR_TRUE, PR_FALSE);
}
NS_IMETHODIMP

View File

@ -64,8 +64,12 @@ public:
virtual void DropReference() = 0;
virtual nsresult GetCSSDeclaration(nsICSSDeclaration **aDecl,
PRBool aAllocate) = 0;
// Note! This will only set the declaration if a style rule already exists
virtual nsresult SetCSSDeclaration(nsICSSDeclaration *aDecl) = 0;
virtual nsresult ParseDeclaration(const nsString& aDecl) = 0;
virtual nsresult ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl) = 0;
virtual nsresult GetParent(nsISupports **aParent) = 0;
protected:

View File

@ -55,9 +55,6 @@ static NS_DEFINE_IID(kICSSParserIID, NS_ICSS_PARSER_IID);
static NS_DEFINE_IID(kICSSStyleSheetIID, NS_ICSS_STYLE_SHEET_IID);
static NS_DEFINE_IID(kIStyleSheetIID, NS_ISTYLE_SHEET_IID);
#define NS_CSS_PARSER_DROP_DECLARATION \
NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_LAYOUT,1)
MOZ_DECL_CTOR_COUNTER(SelectorList);
@ -149,6 +146,7 @@ public:
NS_IMETHOD ParseAndAppendDeclaration(const nsString& aBuffer,
nsIURI* aBaseURL,
nsICSSDeclaration* aDeclaration,
PRBool aParseOnlyOneDecl,
PRInt32* aHint);
NS_IMETHOD GetCharset(/*out*/nsString &aCharsetDest) const;
@ -555,6 +553,7 @@ NS_IMETHODIMP
CSSParserImpl::ParseAndAppendDeclaration(const nsString& aBuffer,
nsIURI* aBaseURL,
nsICSSDeclaration* aDeclaration,
PRBool aParseOnlyOneDecl,
PRInt32* aHint)
{
// NS_ASSERTION(nsnull != aBaseURL, "need base URL");
@ -581,15 +580,26 @@ CSSParserImpl::ParseAndAppendDeclaration(const nsString& aBuffer,
PRInt32 hint = NS_STYLE_HINT_NONE;
if (! ParseDeclaration(errorCode, aDeclaration, PR_FALSE, hint)) {
hint = NS_STYLE_HINT_NONE;
}
if (nsnull != aHint) {
*aHint = hint;
}
do {
if (ParseDeclaration(errorCode, aDeclaration, PR_FALSE, hint)) {
if (aHint && hint > *aHint) {
*aHint = hint;
}
} else {
if (errorCode != -1) { // -1 means EOF so we ignore that
rv = errorCode;
}
break;
}
} while (!aParseOnlyOneDecl);
ReleaseScanner();
return NS_OK;
return rv;
}
//----------------------------------------------------------------------

View File

@ -793,7 +793,10 @@ public:
virtual void DropReference(void);
virtual nsresult GetCSSDeclaration(nsICSSDeclaration **aDecl,
PRBool aAllocate);
virtual nsresult ParseDeclaration(const nsString& aDecl);
virtual nsresult SetCSSDeclaration(nsICSSDeclaration *aDecl);
virtual nsresult ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl);
virtual nsresult GetParent(nsISupports **aParent);
protected:
@ -866,7 +869,19 @@ DOMCSSDeclarationImpl::GetCSSDeclaration(nsICSSDeclaration **aDecl,
}
nsresult
DOMCSSDeclarationImpl::ParseDeclaration(const nsString& aDecl)
DOMCSSDeclarationImpl::SetCSSDeclaration(nsICSSDeclaration *aDecl)
{
if (nsnull != mRule) {
mRule->SetDeclaration(aDecl);
}
return NS_OK;
}
nsresult
DOMCSSDeclarationImpl::ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl)
{
nsICSSDeclaration *decl;
nsresult result = GetCSSDeclaration(&decl, PR_TRUE);
@ -904,9 +919,35 @@ DOMCSSDeclarationImpl::ParseDeclaration(const nsString& aDecl)
}
if (NS_SUCCEEDED(result)) {
nsCOMPtr<nsICSSDeclaration> declClone;
decl->Clone(*getter_AddRefs(declClone));
NS_ENSURE_TRUE(declClone, NS_ERROR_OUT_OF_MEMORY);
if (aClearOldDecl) {
// This should be done with decl->Clear() once such a method exists.
nsAutoString propName;
PRUint32 count, i;
decl->Count(&count);
for (i = 0; i < count; i++) {
decl->GetNthProperty(0, propName);
nsCSSProperty prop = nsCSSProps::LookupProperty(propName);
nsCSSValue val;
decl->RemoveProperty(prop, val);
}
}
PRInt32 hint;
result = cssParser->ParseAndAppendDeclaration(aDecl, baseURI, decl, &hint);
if (NS_SUCCEEDED(result)) {
result = cssParser->ParseAndAppendDeclaration(aDecl, baseURI, decl,
aParseOnlyOneDecl, &hint);
if (result == NS_CSS_PARSER_DROP_DECLARATION) {
SetCSSDeclaration(declClone);
result = NS_OK;
} else if (NS_SUCCEEDED(result)) {
if (cssSheet) {
cssSheet->SetModified(PR_TRUE);
}

View File

@ -247,7 +247,7 @@ nsDOMCSSDeclaration::SetProperty(const nsString& aPropertyName,
declString.Append(aValue);
declString.Append(aPriority);
return ParseDeclaration(declString);
return ParseDeclaration(declString, PR_TRUE, PR_FALSE);
}
NS_IMETHODIMP

View File

@ -64,8 +64,12 @@ public:
virtual void DropReference() = 0;
virtual nsresult GetCSSDeclaration(nsICSSDeclaration **aDecl,
PRBool aAllocate) = 0;
// Note! This will only set the declaration if a style rule already exists
virtual nsresult SetCSSDeclaration(nsICSSDeclaration *aDecl) = 0;
virtual nsresult ParseDeclaration(const nsString& aDecl) = 0;
virtual nsresult ParseDeclaration(const nsString& aDecl,
PRBool aParseOnlyOneDecl,
PRBool aClearOldDecl) = 0;
virtual nsresult GetParent(nsISupports **aParent) = 0;
protected:

View File

@ -72,6 +72,7 @@ public:
NS_IMETHOD ParseAndAppendDeclaration(const nsString& aBuffer,
nsIURI* aBaseURL,
nsICSSDeclaration* aDeclaration,
PRBool aParseOnlyOneDecl,
PRInt32* aHint) = 0;
// Charset management method:
@ -92,6 +93,10 @@ public:
#define NS_CSS_GETINFO_CSS2 ((PRUint32) 0x00000004L)
#define NS_CSS_GETINFO_CSS_FROSTING ((PRUint32) 0x00000008L)
// Success code that can be returned from ParseAndAppendDeclaration()
#define NS_CSS_PARSER_DROP_DECLARATION \
NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_LAYOUT,1)
extern NS_HTML nsresult
NS_NewCSSParser(nsICSSParser** aInstancePtrResult);