/******************************************************************************* * Copyright (c) 2006 Sybase, Inc. and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Sybase, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.jst.pagedesigner.css2.list; import java.util.HashMap; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.jst.pagedesigner.css2.ICSSStyle; import org.eclipse.jst.pagedesigner.css2.property.ICSSPropertyID; import org.eclipse.jst.pagedesigner.css2.property.ICSSPropertyMeta; import org.eclipse.wst.css.core.internal.provisional.document.ICSSPrimitiveValue; import org.w3c.dom.css.CSSPrimitiveValue; /** * @author mengbo */ public final class CounterHelper { /** * Image */ public final static int LIST_T_IMAGE = 0; /** * Disc */ public final static int LIST_T_DISC = 1; /** * Circle */ public final static int LIST_T_CIRCLE = 2; /** * Square */ public final static int LIST_T_SQUARE = 3; /** * Decimal */ public final static int LIST_T_DECIMAL = 0x11; /** * Leading-zero decimal */ public final static int LIST_T_DECIMAL_LEADING_ZERO = 0x12; /** * Lower alpha */ public final static int LIST_T_LOWER_ALPHA = 0x13; /** * Lower roman */ public final static int LIST_T_LOWER_ROMAN = 0x14; /** * Upper alpha */ public final static int LIST_T_UPPER_ALPHA = 0x15; /** * Upper roman */ public final static int LIST_T_UPPER_ROMAN = 0x16; /** * Lower greek */ public final static int LIST_T_LOWER_GREEK = 0x21; /** * Armenian */ public final static int LIST_T_ARMENIAN = 0x22; /** * Georgian */ public final static int LIST_T_GEORGIAN = 0x23; /** * None */ public final static int LIST_T_NONE = 0x24; /** * @param style * @param counters */ public static void processCounterReset(ICSSStyle style, HashMap counters) { Assert.isTrue(style != null && counters != null); // counter-reset will create new one. Object counterResets = style .getStyleProperty(ICSSPropertyID.ATTR_COUNTER_RESET); if ((counterResets) != null && counterResets != ICSSPropertyMeta.NOT_SPECIFIED) { if (counterResets instanceof List) { List crList = (List) counterResets; for (int i = 0, n = crList.size(); i < n; i++) { ResetObject rObject = (ResetObject) crList.get(i); String name = rObject.getCounterName(); Object counter = null; if (counters.size() > 0 && counters.containsKey(name)) { // Already resolved counter = counters.get(name); } if (counter != null) { if (rObject.getInitial() != null) { ((ICounterValueGenerator) counter) .resetCount(rObject.getInitial().intValue()); } else { counter = ((ICounterValueGenerator) counter) .resetCount(); } counters.put(((ICounterValueGenerator) counter) .getIdentifier(), counter); } else { // create new one Object listStyle = style .getStyleProperty(ICSSPropertyID.ATTR_LIST_STYLE_TYPE); if (listStyle instanceof String) { counter = new CounterValueGenerator(name, (String) listStyle, null, style); if (rObject.getInitial() != null) { ((ICounterValueGenerator) counter) .resetCount(rObject.getInitial() .intValue()); } else { counter = ((ICounterValueGenerator) counter) .resetCount(); } } counters.put(((ICounterValueGenerator) counter) .getIdentifier(), counter); } } } } } /** * @param style */ public static void processCounterIncrement(ICSSStyle style) { Object counterIncrements = style .getStyleProperty(ICSSPropertyID.ATTR_COUNTER_INCREMENT); if (counterIncrements != null && counterIncrements != ICSSPropertyMeta.NOT_SPECIFIED) { if (counterIncrements instanceof List) { List crList = (List) counterIncrements; for (int i = 0, n = crList.size(); i < n; i++) { IncrementObject rObject = (IncrementObject) crList.get(i); String name = rObject.getCounterName(); Object counter = null; counter = style.findCounter(name, true); if (counter != null) { if (HTMLListInfoHelper.getValueInt(style) == null) { if (rObject.getIncrement() != null) { ((ICounterValueGenerator) counter) .increase(rObject.getIncrement() .intValue()); } else { ((ICounterValueGenerator) counter).increase(); } } else { ((ICounterValueGenerator) counter) .setCount(HTMLListInfoHelper .getValueInt(style)); } } } } } } /** * @param style * @return true if the style is a text style */ public static boolean isText(ICSSStyle style) { String display = style.getDisplay(); Object styleType = style .getStyleProperty(ICSSPropertyID.ATTR_LIST_STYLE_TYPE); return (display .equalsIgnoreCase(ICSSPropertyID.VAL_LIST_ITEM) // && styleType instanceof String // && !CounterValueGenerator.NON_STRING_TYPES.contains(styleType)); } /** * @param style * @return the type of the style. One of the LIST_T_* values, or -1 if the * style is unknown */ public static int getType(ICSSStyle style) { Object type = style .getStyleProperty(ICSSPropertyID.ATTR_LIST_STYLE_TYPE); if (type instanceof String) { return toTypeInt((String) type); } return -1; } /** * @param type * @return the type enumeration for the type string */ public static int toTypeInt(String type) { if (type.equalsIgnoreCase(ICSSPropertyID.VAL_DECIMAL)) { return LIST_T_DECIMAL; } else if (type .equalsIgnoreCase(ICSSPropertyID.VAL_DECIMAL_LEADING_ZERO)) { return LIST_T_DECIMAL_LEADING_ZERO; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_DISC)) { return LIST_T_DISC; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_CIRCLE)) { return LIST_T_CIRCLE; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_SQUARE)) { return LIST_T_SQUARE; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_IMAGE)) { return LIST_T_IMAGE; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_UPPER_LATIN)) { return LIST_T_UPPER_ALPHA; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_UPPER_ALPHA)) { return LIST_T_UPPER_ALPHA; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_LOWER_LATIN)) { return LIST_T_LOWER_ALPHA; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_LOWER_ALPHA)) { return LIST_T_LOWER_ALPHA; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_UPPER_ROMAN)) { return LIST_T_UPPER_ROMAN; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_LOWER_ROMAN)) { return LIST_T_LOWER_ROMAN; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_LOWER_GREEK)) { return LIST_T_LOWER_GREEK; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_ARMENIAN)) { return LIST_T_ARMENIAN; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_GEORGIAN)) { return LIST_T_GEORGIAN; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_NONE)) { return LIST_T_NONE; } return 0; } /** * @param cssValue * @return true if the cssValue is an IDENT */ public static boolean isIdentifier(Object cssValue) { return (cssValue instanceof ICSSPrimitiveValue) && ((ICSSPrimitiveValue) cssValue).getPrimitiveType() == CSSPrimitiveValue.CSS_IDENT; } /** * @param cssValue * @return true if the css value is a number */ public static boolean isNumber(Object cssValue) { return cssValue instanceof ICSSPrimitiveValue && ((ICSSPrimitiveValue) cssValue).getPrimitiveType() == ICSSPrimitiveValue.CSS_INTEGER; } private CounterHelper() { // util class; no instantiation } }