[412350] editing css font-family result in exceptions
diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/document/CSSDeclarationItemParser.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/document/CSSDeclarationItemParser.java
index b1e3b74..5135d5e 100644
--- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/document/CSSDeclarationItemParser.java
+++ b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/document/CSSDeclarationItemParser.java
@@ -10,8 +10,10 @@
*******************************************************************************/
package org.eclipse.wst.css.core.internal.document;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import org.eclipse.wst.css.core.internal.contentmodel.PropCMProperty;
import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts;
@@ -112,6 +114,9 @@
private boolean fTempStructuredDocument = false;
private CSSModelUpdateContext fUpdateContext = null;
+ // Map ITextRegions to their propertyValues for regions not connected to a document
+ private Map regionValues = new HashMap(0);
+
/**
* CSSDeclarationItemParser constructor comment.
*/
@@ -998,6 +1003,7 @@
case S_NORMAL :
if (type == CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) {
regionBuf.add(region);
+ regionValues.put(region, propertyValue);
status = S_FUNCTION;
}
else if (bFont && type == CSSRegionContexts.CSS_DECLARATION_VALUE_OPERATOR && fParentRegion.getText(region).equals("/")) { //$NON-NLS-1$
@@ -1011,8 +1017,10 @@
case S_FUNCTION :
if (type == CSSRegionContexts.CSS_DECLARATION_VALUE_PARENTHESIS_CLOSE) {
regionBuf.add(region);
+ regionValues.put(region, propertyValue);
value = createPrimitiveValue(regionBuf);
regionBuf.clear();
+ regionValues.clear();
status = S_NORMAL;
}
else if (!isBlank(type)) {
@@ -1032,6 +1040,7 @@
if (type == CSSRegionContexts.CSS_DECLARATION_VALUE_OPERATOR && fParentRegion.getText(region).equals(",")) { //$NON-NLS-1$
value = createPrimitiveValue(regionBuf);
regionBuf.clear();
+ regionValues.clear();
if (value != null) {
if (fUpdateContext == null || !fUpdateContext.isActive()) {
item.appendValue(value);
@@ -1041,6 +1050,7 @@
}
else {
regionBuf.add(region);
+ regionValues.put(region, propertyValue);
}
break;
default :
@@ -1057,20 +1067,24 @@
if (fUpdateContext == null || !fUpdateContext.isActive()) {
item.appendValue(value);
}
+ regionBuf.clear();
+ regionValues.clear();
}
}
private String getCollapsedText(ITextRegion region) {
if (fParentRegion == null)
return ""; //$NON-NLS-1$
- StringBuffer text = new StringBuffer(fParentRegion.getFullText(region));
+ String value = (String) regionValues.get(region); // Use the property value if it exists
+ StringBuffer text = new StringBuffer(value != null ? value : fParentRegion.getFullText(region));
if (region.getLength() > region.getTextLength())
text.replace(region.getTextLength(), region.getLength(), " "); //$NON-NLS-1$
return text.toString();
}
private String getText(ITextRegion region) {
- return (fParentRegion != null) ? fParentRegion.getText(region) : ""; //$NON-NLS-1$
+ String value = (String) regionValues.get(region); // Use the property value if it exists
+ return value != null ? value : ((fParentRegion != null) ? fParentRegion.getText(region) : ""); //$NON-NLS-1$
}
private static boolean isBlank(String type) {