use of org.eclipse.wst.css.core.internal.parserz.CSSTextToken in project webtools.sourceediting by eclipse.
the class CSSSelectorParser method parseSelector.
/**
*/
private void parseSelector() {
fItems = new ArrayList();
List attrBuf = null;
CSSSimpleSelector item = null;
int status = IDLE;
Iterator i = fTokens.iterator();
while (i.hasNext()) {
CSSTextToken token = (CSSTextToken) i.next();
if (token == null || token.kind == CSSRegionContexts.CSS_S || token.kind == CSSRegionContexts.CSS_COMMENT) {
continue;
}
switch(status) {
case IDLE:
if (isTag(token)) {
item = createSimple();
appendTag(item, token);
status = SIMPLE;
} else if (isID(token)) {
item = createSimple();
appendID(item, token);
status = SIMPLE;
} else if (isClass(token)) {
item = createSimple();
appendClass(item, token);
status = SIMPLE;
} else if (isPseudo(token)) {
item = createSimple();
appendPseudo(item, token);
status = SIMPLE;
} else if (isAttributeBegin(token)) {
item = createSimple();
status = ATTRIBUTE;
} else {
addError(token);
}
break;
case SIMPLE:
if (isID(token)) {
appendID(item, token);
} else if (isClass(token)) {
appendClass(item, token);
} else if (isPseudo(token)) {
appendPseudo(item, token);
} else if (isAttributeBegin(token)) {
status = ATTRIBUTE;
} else if (isCombinator(token)) {
// combinator
closeItem(item);
closeItem(createCombinator(token));
status = IDLE;
} else {
addError(token);
}
break;
case ATTRIBUTE:
if (isAttributeEnd(token) && attrBuf != null) {
appendAttribute(item, attrBuf);
attrBuf = null;
status = SIMPLE;
} else {
if (attrBuf == null) {
attrBuf = new ArrayList();
}
attrBuf.add(token);
if (!isAttributeContent(token)) {
addError(token);
}
}
break;
default:
break;
}
}
closeItem(item);
}
use of org.eclipse.wst.css.core.internal.parserz.CSSTextToken in project webtools.sourceediting by eclipse.
the class BorderRightShorthandAdapter 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_RIGHT_COLOR);
PropCMProperty propStyle = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_RIGHT_STYLE);
PropCMProperty propWidth = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_RIGHT_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;
}
use of org.eclipse.wst.css.core.internal.parserz.CSSTextToken in project webtools.sourceediting by eclipse.
the class BorderRightShorthandAdapter 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_RIGHT_COLOR);
PropCMProperty propStyle = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_RIGHT_STYLE);
PropCMProperty propWidth = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_RIGHT_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;
}
use of org.eclipse.wst.css.core.internal.parserz.CSSTextToken in project webtools.sourceediting by eclipse.
the class BorderWidthShorthandAdapter 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;
}
String[] idents = new String[4];
int j = 0;
for (int i = 0; i < tokens.length; i++) {
if (org.eclipse.wst.css.core.internal.util.CSSUtil.isLength(tokens[i]) || tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_NUMBER || tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_IDENT)
idents[j++] = tokens[i].image;
if (j == 4)
break;
}
String[] dests = new String[4];
if (j == 0)
return true;
else if (j == 1) {
dests[0] = dests[1] = dests[2] = dests[3] = idents[0];
} else if (j == 2) {
dests[0] = dests[2] = idents[0];
dests[1] = dests[3] = idents[1];
} else if (j == 3) {
dests[0] = idents[0];
dests[1] = dests[3] = idents[1];
dests[2] = idents[2];
} else {
for (int k = 0; k < 4; k++) dests[k] = idents[k];
}
dest.set(PropCMProperty.P_BORDER_TOP_WIDTH, dests[0]);
dest.set(PropCMProperty.P_BORDER_RIGHT_WIDTH, dests[1]);
dest.set(PropCMProperty.P_BORDER_BOTTOM_WIDTH, dests[2]);
dest.set(PropCMProperty.P_BORDER_LEFT_WIDTH, dests[3]);
return true;
}
use of org.eclipse.wst.css.core.internal.parserz.CSSTextToken in project webtools.sourceediting by eclipse.
the class BorderWidthShorthandAdapter 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[] idents = new String[4];
int j = 0;
for (int i = 0; i < tokens.length; i++) {
if (org.eclipse.wst.css.core.internal.util.CSSUtil.isLength(tokens[i]) || tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_NUMBER || tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_IDENT)
idents[j++] = tokens[i].image;
if (j == 4)
break;
}
if (j == 0)
return null;
else if (j == 1)
return idents[0];
else if (j == 2) {
if (propDest.getName() == PropCMProperty.P_BORDER_TOP_WIDTH || propDest.getName() == PropCMProperty.P_BORDER_BOTTOM_WIDTH)
return idents[0];
else
return idents[1];
} else if (j == 3) {
if (propDest.getName() == PropCMProperty.P_BORDER_TOP_WIDTH)
return idents[0];
else if (propDest.getName() == PropCMProperty.P_BORDER_BOTTOM_WIDTH)
return idents[2];
else
return idents[1];
} else {
if (propDest.getName() == PropCMProperty.P_BORDER_TOP_WIDTH)
return idents[0];
else if (propDest.getName() == PropCMProperty.P_BORDER_RIGHT_WIDTH)
return idents[1];
else if (propDest.getName() == PropCMProperty.P_BORDER_BOTTOM_WIDTH)
return idents[2];
else if (propDest.getName() == PropCMProperty.P_BORDER_LEFT_WIDTH)
return idents[3];
else
return null;
}
}
Aggregations