/******************************************************************************* * Copyright (c) 2010 Martin Schnabel <mb0@mb0.org>. * 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 ******************************************************************************/ package org.axdt.as3.conversion; import org.eclipse.xtext.common.services.DefaultTerminalConverters; import org.eclipse.xtext.conversion.IValueConverter; import org.eclipse.xtext.conversion.ValueConverter; import org.eclipse.xtext.conversion.ValueConverterException; import org.eclipse.xtext.util.Strings; import org.eclipse.xtext.nodemodel.INode; /** * @author mb0 */ public class As3ValueConverterService extends DefaultTerminalConverters { @ValueConverter(rule = "NUMBER") public IValueConverter<Double> NUMBER() { return new IValueConverter<Double>() { public Double toValue(String string, INode node) { if (Strings.isEmpty(string)) throw new ValueConverterException("Couldn't convert " + "empty string to number", node, null); try { if (string.startsWith("0x")) { string = string.substring(2); return new Double(Long.parseLong(string, 16)); } return Double.valueOf(string); } catch (NumberFormatException e) { throw new ValueConverterException("Couldn't convert '" + string + "' to number", node, e); } } public String toString(Double value) { return value.toString(); } }; } @ValueConverter(rule = "FQN") public IValueConverter<String> FQN() { return new IValueConverter<String>() { public String toValue(String string, INode node) { if (string == null) return null; return string.replaceAll("\\s+", ""); } public String toString(String value) { return value; } }; } @ValueConverter(rule = "ImportFQN") public IValueConverter<String> ImportFQN() { return new IValueConverter<String>() { public String toValue(String string, INode node) { if (string == null) return null; return string.replaceAll("\\s+", ""); } public String toString(String value) { return value; } }; } @ValueConverter(rule = "LT") public IValueConverter<String> LT() { return new IValueConverter<String>() { public String toValue(String string, INode node) { return "\n"; } public String toString(String value) { return value; } }; } }