package com.github.czyzby.lml.parser.impl.tag.actor; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.github.czyzby.kiwi.util.common.Strings; import com.github.czyzby.lml.parser.LmlParser; import com.github.czyzby.lml.parser.impl.tag.AbstractNonParentalActorLmlTag; import com.github.czyzby.lml.parser.impl.tag.builder.TextLmlActorBuilder; import com.github.czyzby.lml.parser.tag.LmlActorBuilder; import com.github.czyzby.lml.parser.tag.LmlTag; import com.github.czyzby.lml.util.LmlUtilities; /** Handles {@link Label} actor. Mapped to "label". Note that most parental tags will add their plain text between tags * as labels with default style. * * @author MJ */ public class LabelLmlTag extends AbstractNonParentalActorLmlTag { public LabelLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) { super(parser, parentTag, rawTagData); } @Override protected TextLmlActorBuilder getNewInstanceOfBuilder() { return new TextLmlActorBuilder(); } @Override protected Actor getNewInstanceOfActor(final LmlActorBuilder builder) { final TextLmlActorBuilder textBuilder = (TextLmlActorBuilder) builder; return new Label(textBuilder.getText(), getSkin(builder), textBuilder.getStyleName()); } @Override protected void handlePlainTextLine(final String plainTextLine) { final Label label = getLabel(); final String textToAppend = getParser().parseString(plainTextLine, label); if (Strings.isEmpty(label.getText())) { // Label is currently empty, so we just set the text as initial value. label.setText(textToAppend); } else { if (LmlUtilities.isMultiline(label)) { // Label is multiline. We might want to append an extra new line char. label.getText().append('\n'); } label.getText().append(textToAppend); } label.invalidate(); } /** @return casted actor reference. */ protected Label getLabel() { return (Label) getActor(); } }