Search in sources :

Example 6 with CSSTextParser

use of org.eclipse.wst.css.core.internal.parserz.CSSTextParser in project webtools.sourceediting by eclipse.

the class BackgroundPositionYSubStyleAdapter method set.

/**
 */
public void set(ICSS2Properties properties, String value) throws org.w3c.dom.DOMException {
    String newValue = null;
    String valH = properties.getBackgroundPositionX();
    String valV = value;
    if (valH != null && (// $NON-NLS-1$
    valH.trim().equals("0%") || /* default value */
    valH.trim().equalsIgnoreCase(IValID.V_LEFT)))
        valH = null;
    if (valV == null || valV.length() == 0)
        newValue = valH;
    else if (valH == null || valH.length() == 0) {
        Collection valX = PropCMSubProperty.getInstanceOf(PropCMSubProperty.PSUB_BG_POSITION_X).getValues();
        Collection valY = PropCMSubProperty.getInstanceOf(PropCMSubProperty.PSUB_BG_POSITION_Y).getValues();
        PropCMUtil.minus(valY, valX);
        Iterator it = valY.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            if (obj.toString().equals(valV.toLowerCase())) {
                // need not compensate for ...
                newValue = valV;
                break;
            }
        }
        // compensate for Horizontal value
        if (newValue == null) {
            // check valV is length or not
            CSSTextParser parser = new CSSTextParser(CSSTextParser.MODE_DECLARATION_VALUE, valV.trim());
            CSSTextToken[] tokens = parser.getTokens();
            if (tokens != null && tokens.length > 0 && tokens[0].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_IDENT) {
                // $NON-NLS-1$
                newValue = IValID.V_LEFT + " " + valV;
            } else
                // $NON-NLS-1$
                newValue = "0% " + valV;
        }
    } else
        // $NON-NLS-1$
        newValue = valH + " " + valV;
    properties.setBackgroundPosition(newValue);
}
Also used : Iterator(java.util.Iterator) Collection(java.util.Collection) CSSTextParser(org.eclipse.wst.css.core.internal.parserz.CSSTextParser)

Example 7 with CSSTextParser

use of org.eclipse.wst.css.core.internal.parserz.CSSTextParser in project webtools.sourceediting by eclipse.

the class BackgroundPositionYSubStyleAdapter method get.

/**
 */
public String get(ICSS2Properties properties) {
    String str = null;
    Object obj = properties.get(PropCMProperty.getInstanceOf(PropCMProperty.P_BG_POSITION));
    if (obj != null) {
        PropCMProperty propX = PropCMSubProperty.getInstanceOf(PropCMSubProperty.PSUB_BG_POSITION_X);
        PropCMProperty propY = PropCMSubProperty.getInstanceOf(PropCMSubProperty.PSUB_BG_POSITION_Y);
        if (obj instanceof ICSSValueList) {
            ICSSValueList list = (ICSSValueList) obj;
            int index = 1;
            ICSSValue value = (ICSSValue) list.item(0);
            if (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
                ICSSPrimitiveValue prim = (ICSSPrimitiveValue) value;
                if (prim.getPrimitiveType() == CSSPrimitiveValue.CSS_IDENT) {
                    // check not top or bottom
                    if (!propX.canHave(prim.getStringValue()) && propY.canHave(prim.getStringValue())) {
                        // case order is vertical -> horizontal
                        index = 0;
                    }
                }
            }
            str = ((ICSSValue) list.item(index)).getCSSValueText();
        } else if (obj instanceof ICSSValue) {
            str = ((ICSSValue) obj).getCSSValueText();
            if (!str.equalsIgnoreCase(IValID.V_BOTTOM) && !str.equalsIgnoreCase(IValID.V_TOP))
                // $NON-NLS-1$
                str = "";
        } else {
            str = obj.toString();
            CSSTextParser parser = new CSSTextParser(CSSTextParser.MODE_DECLARATION_VALUE, str);
            CSSTextToken[] tokens = parser.getTokens();
            tokens = correctMeaningToken(tokens);
            if (tokens.length == 1 && (tokens[0].image.equalsIgnoreCase(IValID.V_BOTTOM) || tokens[0].image.equalsIgnoreCase(IValID.V_TOP)))
                str = tokens[0].image;
            else if (tokens.length > 1)
                str = tokens[1].image;
            else
                // $NON-NLS-1$
                str = "";
        }
    }
    // $NON-NLS-1$
    return (str != null) ? str : "";
}
Also used : PropCMProperty(org.eclipse.wst.css.core.internal.contentmodel.PropCMProperty) ICSSValue(org.eclipse.wst.css.core.internal.provisional.document.ICSSValue) ICSSPrimitiveValue(org.eclipse.wst.css.core.internal.provisional.document.ICSSPrimitiveValue) CSSTextParser(org.eclipse.wst.css.core.internal.parserz.CSSTextParser) ICSSValueList(org.eclipse.wst.css.core.internal.provisional.document.ICSSValueList)

Example 8 with CSSTextParser

use of org.eclipse.wst.css.core.internal.parserz.CSSTextParser in project webtools.sourceediting by eclipse.

the class BorderBottomShorthandAdapter method extract.

/**
 */
public String extract(String source, PropCMProperty propDest) {
    CSSTextParser parser = new CSSTextParser(CSSTextParser.MODE_DECLARATION_VALUE, source);
    CSSTextToken[] tokens = parser.getTokens();
    if (tokens.length <= 0) {
        return null;
    }
    String color = null, style = null, width = null;
    PropCMProperty propColor = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_BOTTOM_COLOR);
    PropCMProperty propStyle = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_BOTTOM_STYLE);
    PropCMProperty propWidth = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_BOTTOM_WIDTH);
    for (int i = 0; i < tokens.length; i++) {
        if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_IDENT) {
            if (propStyle.canHave(tokens[i].image))
                style = tokens[i].image;
            else if (propWidth.canHave(tokens[i].image))
                width = tokens[i].image;
            else if (propColor.canHave(tokens[i].image))
                color = tokens[i].image;
        } else if (org.eclipse.wst.css.core.internal.util.CSSUtil.isLength(tokens[i]) || tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_NUMBER) {
            width = tokens[i].image;
        } else if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_HASH) {
            color = tokens[i].image;
        } else if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) {
            StringBuffer buf = new StringBuffer();
            while (i < tokens.length) {
                if (tokens[i].kind == CSSRegionContexts.CSS_COMMENT) {
                    i++;
                    continue;
                }
                buf.append(tokens[i].image);
                if (tokens[i++].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_PARENTHESIS_CLOSE)
                    break;
            }
            i--;
            color = buf.toString();
        }
    }
    if (propColor == propDest)
        return color;
    else if (propStyle == propDest)
        return style;
    else if (propWidth == propDest)
        return width;
    else
        return null;
}
Also used : PropCMProperty(org.eclipse.wst.css.core.internal.contentmodel.PropCMProperty) CSSTextToken(org.eclipse.wst.css.core.internal.parserz.CSSTextToken) CSSTextParser(org.eclipse.wst.css.core.internal.parserz.CSSTextParser)

Example 9 with CSSTextParser

use of org.eclipse.wst.css.core.internal.parserz.CSSTextParser in project webtools.sourceediting by eclipse.

the class BorderLeftShorthandAdapter method expand.

/**
 */
public boolean expand(String source, CSSPropertyContext dest) {
    CSSTextParser parser = new CSSTextParser(CSSTextParser.MODE_DECLARATION_VALUE, source);
    CSSTextToken[] tokens = parser.getTokens();
    if (tokens.length <= 0) {
        return false;
    }
    // $NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$
    String color = "", style = "", width = "";
    PropCMProperty propColor = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_LEFT_COLOR);
    PropCMProperty propStyle = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_LEFT_STYLE);
    PropCMProperty propWidth = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_LEFT_WIDTH);
    for (int i = 0; i < tokens.length; i++) {
        if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_IDENT) {
            if (propStyle.canHave(tokens[i].image))
                style = tokens[i].image;
            else if (propWidth.canHave(tokens[i].image))
                width = tokens[i].image;
            else if (propColor.canHave(tokens[i].image))
                color = tokens[i].image;
        } else if (org.eclipse.wst.css.core.internal.util.CSSUtil.isLength(tokens[i]) || tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_NUMBER) {
            width = tokens[i].image;
        } else if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_HASH) {
            color = tokens[i].image;
        } else if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) {
            StringBuffer buf = new StringBuffer();
            while (i < tokens.length) {
                if (tokens[i].kind == CSSRegionContexts.CSS_COMMENT) {
                    i++;
                    continue;
                }
                buf.append(tokens[i].image);
                if (tokens[i++].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_PARENTHESIS_CLOSE)
                    break;
            }
            i--;
            color = buf.toString();
        }
    }
    dest.set(propColor.getName(), color);
    dest.set(propStyle.getName(), style);
    dest.set(propWidth.getName(), width);
    return true;
}
Also used : PropCMProperty(org.eclipse.wst.css.core.internal.contentmodel.PropCMProperty) CSSTextToken(org.eclipse.wst.css.core.internal.parserz.CSSTextToken) CSSTextParser(org.eclipse.wst.css.core.internal.parserz.CSSTextParser)

Example 10 with CSSTextParser

use of org.eclipse.wst.css.core.internal.parserz.CSSTextParser in project webtools.sourceediting by eclipse.

the class BorderShorthandAdapter method expand.

/**
 */
public boolean expand(String source, CSSPropertyContext dest) {
    CSSTextParser parser = new CSSTextParser(CSSTextParser.MODE_DECLARATION_VALUE, source);
    CSSTextToken[] tokens = parser.getTokens();
    if (tokens.length <= 0) {
        return false;
    }
    // $NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$
    String color = "", style = "", width = "";
    PropCMProperty propColor = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_COLOR);
    PropCMProperty propStyle = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_STYLE);
    PropCMProperty propWidth = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_WIDTH);
    for (int i = 0; i < tokens.length; i++) {
        if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_IDENT) {
            if (propStyle.canHave(tokens[i].image))
                style = tokens[i].image;
            else if (propWidth.canHave(tokens[i].image))
                width = tokens[i].image;
            else if (propColor.canHave(tokens[i].image))
                color = tokens[i].image;
        } else if (org.eclipse.wst.css.core.internal.util.CSSUtil.isLength(tokens[i]) || tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_NUMBER) {
            width = tokens[i].image;
        } else if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_HASH) {
            color = tokens[i].image;
        } else if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) {
            StringBuffer buf = new StringBuffer();
            while (i < tokens.length) {
                if (tokens[i].kind == CSSRegionContexts.CSS_COMMENT) {
                    i++;
                    continue;
                }
                buf.append(tokens[i].image);
                if (tokens[i++].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_PARENTHESIS_CLOSE)
                    break;
            }
            i--;
            color = buf.toString();
        }
    }
    dest.set(propColor.getName(), color);
    dest.set(propStyle.getName(), style);
    dest.set(propWidth.getName(), width);
    return true;
}
Also used : PropCMProperty(org.eclipse.wst.css.core.internal.contentmodel.PropCMProperty) CSSTextToken(org.eclipse.wst.css.core.internal.parserz.CSSTextToken) CSSTextParser(org.eclipse.wst.css.core.internal.parserz.CSSTextParser)

Aggregations

CSSTextParser (org.eclipse.wst.css.core.internal.parserz.CSSTextParser)33 CSSTextToken (org.eclipse.wst.css.core.internal.parserz.CSSTextToken)28 PropCMProperty (org.eclipse.wst.css.core.internal.contentmodel.PropCMProperty)18 Iterator (java.util.Iterator)3 Collection (java.util.Collection)2 List (java.util.List)2 ICSSPrimitiveValue (org.eclipse.wst.css.core.internal.provisional.document.ICSSPrimitiveValue)2 ICSSValue (org.eclipse.wst.css.core.internal.provisional.document.ICSSValue)2 ICSSValueList (org.eclipse.wst.css.core.internal.provisional.document.ICSSValueList)2 ArrayList (java.util.ArrayList)1 BadLocationException (org.eclipse.jface.text.BadLocationException)1 ICSSSelector (org.eclipse.wst.css.core.internal.provisional.document.ICSSSelector)1 ICSSSelectorList (org.eclipse.wst.css.core.internal.provisional.document.ICSSSelectorList)1 IStructuredDocumentRegion (org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion)1