org.fxmisc.richtext.model.TextOps Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of richtextfx Show documentation
Show all versions of richtextfx Show documentation
FX-Text-Area for formatted text and other special effects.
package org.fxmisc.richtext.model;
import org.reactfx.util.Either;
import java.util.Optional;
import java.util.function.BiFunction;
/**
* Extends {@link SegmentOps} by adding {@link #create(String)}, which can create a {@link SEG} segment from a given
* {@link String}
*
* @param the type of segment
* @param the type of style
*/
public interface TextOps extends SegmentOps {
/**
* Creates a segment using the given text. One could think of this as a mapping function from {@link String} to
* {@link SEG}
*/
public SEG create(String text);
/**
* Same as {@link SegmentOps#either(SegmentOps, SegmentOps, BiFunction)}, except that
* {@link TextOps#create(String)} will use this object's {@code create(String)} method, not {@code rOps}' version.
*/
public default TextOps, S> _or(SegmentOps rOps, BiFunction> mergeStyle) {
return eitherL(this, rOps, mergeStyle);
}
/**
* Same as {@link SegmentOps#either(SegmentOps, SegmentOps, BiFunction)}, except that
* {@link TextOps#create(String)} will use {@code lOps}' {@code create(String)} method, not {@code rOps}' version.
*/
public static TextOps, S> eitherL(TextOps lOps, SegmentOps rOps,
BiFunction> mergeStyle) {
return new LeftTextOps<>(lOps, rOps, mergeStyle);
}
/**
* Same as {@link SegmentOps#either(SegmentOps, SegmentOps, BiFunction)}, except that
* {@link TextOps#create(String)} will use {@code rOps}' {@code create(String)} method, not {@code lOps}' version.
*/
public static TextOps, S> eitherR(SegmentOps lOps, TextOps rOps,
BiFunction> mergeStyle) {
return new RightTextOps<>(lOps, rOps, mergeStyle);
}
}
class LeftTextOps extends EitherSegmentOps implements TextOps, S> {
private final TextOps lOps;
LeftTextOps(TextOps lOps, SegmentOps rOps, BiFunction> mergeStyle) {
super(lOps, rOps, mergeStyle);
this.lOps = lOps;
}
@Override
public Either create(String text) {
return Either.left(lOps.create(text));
}
}
class RightTextOps extends EitherSegmentOps implements TextOps, S> {
private final TextOps rOps;
RightTextOps(SegmentOps lOps, TextOps rOps, BiFunction> mergeStyle) {
super(lOps, rOps, mergeStyle);
this.rOps = rOps;
}
@Override
public Either create(String text) {
return Either.right(rOps.create(text));
}
}