private CSSPrimitiveValueImpl createPrimitiveValue(ITextRegion region, String propertyValue) { if (region == null) { return null; } CSSPrimitiveValueImpl value = null; String type = region.getType(); String text = propertyValue != null ? propertyValue : getText(region); if (isBlank(type)) { value = null; } else if (type == CSSRegionContexts.CSS_DECLARATION_VALUE_NUMBER || type == CSSRegionContexts.CSS_DECLARATION_VALUE_DIMENSION || type == CSSRegionContexts.CSS_DECLARATION_VALUE_PERCENTAGE) { value = createFloatValue(text, type); } else if (type == CSSRegionContexts.CSS_DECLARATION_VALUE_STRING || type == CSSRegionContexts.CSS_DECLARATION_VALUE_URI || type == CSSRegionContexts.CSS_DECLARATION_VALUE_IDENT || type == CSSRegionContexts.CSS_DECLARATION_VALUE_HASH) { value = createStringValue(text, type); } if (value == null) { value = createStringValue(text, type); } if (!fTempStructuredDocument && value != null) { value.setRangeRegion(fParentRegion, region, region); } return value; }
private CSSPrimitiveValueImpl createFloatValue(String text, String type) { FloatInfo info = new FloatInfo(text); CSSPrimitiveValueImpl value = getCSSPrimitiveValue(info.getValueType()); if (value != null) { value.setValue(info.getValue()); } return value; }
private CSSPrimitiveValueImpl createRectValue(ITextRegionList regions) { String funcName = getFunctionName(regions); if (funcName == null || !funcName.toLowerCase().equals("rect")) { // $NON-NLS-1$ return null; } String accepts[] = { CSSRegionContexts.CSS_DECLARATION_VALUE_NUMBER, CSSRegionContexts.CSS_DECLARATION_VALUE_DIMENSION, CSSRegionContexts.CSS_DECLARATION_VALUE_IDENT }; // IDENT: // for // 'auto' ITextRegionList valueRegions = getFunctionParameters(regions, accepts); if (valueRegions.size() != 4) { return null; } RectImpl value = getRect(); if (value == null) { return null; } for (int i = 0; i < 4; i++) { ITextRegion region = valueRegions.get(i); CSSPrimitiveValueImpl childValue = null; switch (i) { case 0: childValue = (CSSPrimitiveValueImpl) value.getTop(); break; case 1: childValue = (CSSPrimitiveValueImpl) value.getRight(); break; case 2: childValue = (CSSPrimitiveValueImpl) value.getBottom(); break; case 3: childValue = (CSSPrimitiveValueImpl) value.getLeft(); break; default: break; } if (childValue == null) { return null; } String text = getText(region); String type = region.getType(); if (type == CSSRegionContexts.CSS_DECLARATION_VALUE_IDENT) { setStringValue(childValue, text, type); } else { setFloatValue(childValue, text, type); } if (!fTempStructuredDocument) { childValue.setRangeRegion(fParentRegion, region, region); } } return value; }
private CSSPrimitiveValueImpl createStringValue(String text, String type) { short valueType = getStringValueType(text, type); CSSPrimitiveValueImpl value = getCSSPrimitiveValue(valueType); if (value != null) { if (valueType == CSSPrimitiveValue.CSS_URI) { text = CSSUtil.extractUriContents(text); } else if (valueType == CSSPrimitiveValue.CSS_STRING) { text = CSSUtil.extractStringContents(text); } value.setValue(text); } return value; }
private CSSPrimitiveValueImpl createRgbValue(ITextRegionList regions) { String funcName = getFunctionName(regions); if (funcName == null || !funcName.toLowerCase().equals("rgb")) { // $NON-NLS-1$ return null; } String accepts[] = { CSSRegionContexts.CSS_DECLARATION_VALUE_NUMBER, CSSRegionContexts.CSS_DECLARATION_VALUE_PERCENTAGE }; ITextRegionList valueRegions = getFunctionParameters(regions, accepts); if (valueRegions.size() != 3) { return null; } RGBColorImpl value = getRGBColor(); if (value == null) { return null; } for (int i = 0; i < 3; i++) { ITextRegion region = valueRegions.get(i); CSSPrimitiveValueImpl childValue = null; switch (i) { case 0: childValue = (CSSPrimitiveValueImpl) value.getRed(); break; case 1: childValue = (CSSPrimitiveValueImpl) value.getGreen(); break; case 2: childValue = (CSSPrimitiveValueImpl) value.getBlue(); break; default: break; } if (childValue == null) { return null; } setFloatValue(childValue, getText(region), region.getType()); if (!fTempStructuredDocument) { childValue.setRangeRegion(fParentRegion, region, region); } } return value; }
private CSSPrimitiveValueImpl createPrimitiveValue(ITextRegionList regions) { CSSPrimitiveValueImpl value = null; CSSUtil.stripSurroundingSpace(regions); if (regions.isEmpty()) { return null; } ITextRegion region = regions.get(0); if (region == null) { return null; } String type = region.getType(); if (type == CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) { String text = getText(region).toLowerCase(); if (text.equals("rgb(")) { // $NON-NLS-1$ value = createRgbValue(regions); } else if (text.equals("counter(")) { // $NON-NLS-1$ value = createCounterValue(regions); } else if (text.equals("counters(")) { // $NON-NLS-1$ value = createCountersValue(regions); } else if (text.equals("attr(")) { // $NON-NLS-1$ value = createAttrValue(regions); } else if (text.equals("format(")) { // $NON-NLS-1$ value = createFormatValue(regions); } else if (text.equals("local(")) { // $NON-NLS-1$ value = createLocalValue(regions); } else if (text.equals("rect(")) { // $NON-NLS-1$ value = createRectValue(regions); } if (value == null) { value = createStringValue(regions); } } else { value = createStringValue(regions); } if (!fTempStructuredDocument && value != null) { value.setRangeRegion(fParentRegion, regions.get(0), regions.get(regions.size() - 1)); } return value; }
private CSSPrimitiveValueImpl createLocalValue(ITextRegionList regions) { String funcName = getFunctionName(regions); if (funcName == null || !funcName.toLowerCase().equals("local")) { // $NON-NLS-1$ return null; } String accepts[] = {CSSRegionContexts.CSS_DECLARATION_VALUE_STRING}; ITextRegionList valueRegions = getFunctionParameters(regions, accepts); if (valueRegions.size() != 1) { return null; } CSSPrimitiveValueImpl value = getCSSPrimitiveValue(ICSSPrimitiveValue.CSS_LOCAL); if (value == null) { return null; } ITextRegion region = valueRegions.get(0); value.setValue(CSSUtil.extractStringContents(getText(region))); return value; }
private CSSPrimitiveValueImpl createAttrValue(ITextRegionList regions) { String funcName = getFunctionName(regions); if (funcName == null || !funcName.toLowerCase().equals("attr")) { // $NON-NLS-1$ return null; } String accepts[] = {CSSRegionContexts.CSS_DECLARATION_VALUE_IDENT}; ITextRegionList valueRegions = getFunctionParameters(regions, accepts); if (valueRegions.size() != 1) { return null; } CSSPrimitiveValueImpl value = getCSSPrimitiveValue(CSSPrimitiveValue.CSS_ATTR); if (value == null) { return null; } ITextRegion region = valueRegions.get(0); value.setValue(getText(region)); return value; }
private void setStringValue(CSSPrimitiveValueImpl value, String text, String type) { short valueType = getStringValueType(text, type); value.setStringValue(valueType, text); }
private void setFloatValue(CSSPrimitiveValueImpl value, String text, String type) { FloatInfo info = new FloatInfo(text); value.setFloatValue(info.getValueType(), info.getValue()); }