org.jhotdraw8.draw.css.converter.Point2DCssConverter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.jhotdraw8.draw Show documentation
Show all versions of org.jhotdraw8.draw Show documentation
JHotDraw8 Drawing Framework
The newest version!
/*
* @(#)CssPoint2DConverter.java
* Copyright © 2023 The authors and contributors of JHotDraw. MIT License.
*/
package org.jhotdraw8.draw.css.converter;
import org.jhotdraw8.base.converter.IdResolver;
import org.jhotdraw8.base.converter.IdSupplier;
import org.jhotdraw8.css.converter.AbstractCssConverter;
import org.jhotdraw8.css.parser.CssToken;
import org.jhotdraw8.css.parser.CssTokenType;
import org.jhotdraw8.css.parser.CssTokenizer;
import org.jhotdraw8.css.value.CssSize;
import org.jhotdraw8.draw.css.value.CssPoint2D;
import org.jspecify.annotations.Nullable;
import java.io.IOException;
import java.text.ParseException;
import java.util.function.Consumer;
import static org.jhotdraw8.css.converter.SizeCssConverter.parseSize;
/**
* Converts a {@code javafx.geometry.CssPoint2D} into a {@code String} and vice
* versa.
*
* @author Werner Randelshofer
*/
public class Point2DCssConverter extends AbstractCssConverter {
private final boolean withSpace;
private final boolean withComma;
public Point2DCssConverter(boolean nullable) {
this(nullable, true, false);
}
public Point2DCssConverter(boolean nullable, boolean withSpace, boolean withComma) {
super(nullable);
this.withSpace = withSpace || !withComma;
this.withComma = withComma;
}
@Override
public CssPoint2D parseNonNull(CssTokenizer tt, @Nullable IdResolver idResolver) throws ParseException, IOException {
final CssSize x, y;
x = parseSize(tt, "x");
tt.skipIfPresent(CssTokenType.TT_COMMA);
y = parseSize(tt, "y");
return new CssPoint2D(x, y);
}
@Override
protected void produceTokensNonNull(TT value, @Nullable IdSupplier idSupplier, Consumer out) {
CssSize x = value.getX();
out.accept(new CssToken(CssTokenType.TT_DIMENSION, x.getValue(), x.getUnits()));
if (withComma) {
out.accept(new CssToken(CssTokenType.TT_COMMA));
}
if (withSpace) {
out.accept(new CssToken(CssTokenType.TT_S, " "));
}
CssSize y = value.getY();
out.accept(new CssToken(CssTokenType.TT_DIMENSION, y.getValue(), y.getUnits()));
}
@Override
public @Nullable String getHelpText() {
return "Format of ⟨CssPoint2D⟩: ⟨x⟩ ⟨y⟩";
}
}