// 
// Decompiled by Procyon v0.6.0
// 

package org.jline.style;

import java.util.Locale;
import org.jline.utils.AttributedString;
import javax.annotation.Nonnull;
import java.io.OutputStream;
import java.util.Objects;
import java.io.Writer;
import org.jline.terminal.Terminal;
import java.io.PrintWriter;

public class StyledWriter extends PrintWriter
{
    private final Terminal terminal;
    private final StyleExpression expression;
    
    public StyledWriter(final Writer out, final Terminal terminal, final StyleResolver resolver, final boolean autoFlush) {
        super(out, autoFlush);
        this.terminal = Objects.requireNonNull(terminal);
        this.expression = new StyleExpression(resolver);
    }
    
    public StyledWriter(final OutputStream out, final Terminal terminal, final StyleResolver resolver, final boolean autoFlush) {
        super(out, autoFlush);
        this.terminal = Objects.requireNonNull(terminal);
        this.expression = new StyleExpression(resolver);
    }
    
    @Override
    public void write(@Nonnull final String value) {
        final AttributedString result = this.expression.evaluate(value);
        super.write(result.toAnsi(this.terminal));
    }
    
    @Override
    public PrintWriter format(@Nonnull final String format, final Object... args) {
        this.print(String.format(format, args));
        return this;
    }
    
    @Override
    public PrintWriter format(final Locale locale, @Nonnull final String format, final Object... args) {
        this.print(String.format(locale, format, args));
        return this;
    }
}
