blob: 0589c416bde846116ba912d030e9279a72d838ec [file] [log] [blame]
/*******************************************************************************
* 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.property;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;
import org.eclipse.jst.pagedesigner.css2.ICSSStyle;
import org.eclipse.jst.pagedesigner.utils.DOMUtil;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Display;
import org.w3c.dom.Element;
import org.w3c.dom.css.CSSValue;
import org.w3c.dom.css.CSSValueList;
/**
* @author mengbo
*/
public class FontFamilyMeta extends CSSPropertyMeta {
/**
* the default font name
*/
public static final String DEFAULT_FONT = "Times New Roman"; //$NON-NLS-1$
private static FontData[] _FontData;
private static FontData[] getFontData() {
if (_FontData == null) {
ArrayList list = new ArrayList();
list.addAll(Arrays.asList(Display.getCurrent().getFontList(null,
false)));
list.addAll(Arrays.asList(Display.getCurrent().getFontList(null,
true)));
_FontData = (FontData[]) list.toArray(new FontData[list.size()]);
}
return _FontData;
}
/**
*/
public FontFamilyMeta() {
super(true, DEFAULT_FONT);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.css2.property.CSSPropertyMeta#getKeywordValues()
*/
protected String[] getKeywordValues() {
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.css2.property.CSSPropertyMeta#calculateCSSValueResult(org.w3c.dom.css.CSSValue,
* java.lang.String,
* org.eclipse.jst.pagedesigner.css2.style.AbstractStyle)
*/
public Object calculateCSSValueResult(CSSValue value, String propertyName,
ICSSStyle style) {
if (value.getCssValueType() == CSSValue.CSS_VALUE_LIST) {
CSSValueList valueList = (CSSValueList) value;
for (int i = 0, count = valueList.getLength(); i < count; i++) {
String name = valueList.item(i).getCssText();
name = trimPadding(name);
if (isSupportedFont(name)) {
return name;
}
}
}
return trimPadding(value.getCssText());
}
private String trimPadding(String name) {
String value = name;
if (value != null) {
value = value.replaceAll("\"", ""); //$NON-NLS-1$ //$NON-NLS-2$
value = value.replaceAll("'", ""); //$NON-NLS-1$ //$NON-NLS-2$
}
return value;
}
private boolean isSupportedFont(String name) {
FontData[] fontData = getFontData();
for (int i = 0; i < fontData.length; i++) {
if (fontData[i].getName().equalsIgnoreCase(name)) {
return true;
}
}
return false;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.css2.property.CSSPropertyMeta#calculateHTMLAttributeOverride(org.w3c.dom.Element,
* java.lang.String, java.lang.String,
* org.eclipse.jst.pagedesigner.css2.ICSSStyle)
*/
public Object calculateHTMLAttributeOverride(Element element,
String htmltag, String propertyName, ICSSStyle style) {
if ("FONT".equalsIgnoreCase(htmltag) //$NON-NLS-1$
|| "BASEFONT".equalsIgnoreCase(htmltag)) { //$NON-NLS-1$
String face = DOMUtil.getAttributeIgnoreCase(element, "face"); //$NON-NLS-1$
if (face != null) {
String[] names = getFontNameList(face);
for (int i = 0; i < names.length; i++) {
if (isSupportedFont(names[i])) {
return names[i];
}
}
} else {
return null;
}
}
return null;
}
private String[] getFontNameList(String face) {
StringTokenizer tokenizer = new StringTokenizer(face, ","); //$NON-NLS-1$
String[] names = new String[tokenizer.countTokens()];
for (int i = 0; i < names.length; i++) {
names[i] = trimPadding(tokenizer.nextToken());
}
return names;
}
}