package Iota.PrettyPrinter;

public class PPTest {
    static PrettyPrinter pp;
    static void open() {
        pp.write ("("); pp.begin(0);
    }
    static void close() {
        pp.end();
        pp.write (")");
    }
    static void comma() {
        pp.write(", ");
        pp.allowBreak(0);
    }
    static void plus() {
        pp.write(" + ");
        pp.allowBreak(2);
    }
    static void flush() {
        try {
            pp.flush();
        } catch (java.io.IOException e) {}
    }
    public static void main(String[] argv) {
        int width = Integer.parseInt(argv[0]);

        pp = new PrettyPrinter(System.out, width);
        pp.write("Hello");
        pp.allowBreak(2);
        pp.write(" World!");
        pp.newline(0);
        flush();

        pp.write("MOVE"); open();
            pp.write("RV");
            comma();
            pp.begin(0);
            pp.write("MEM"); open();
                pp.write("FP");
                comma();
                pp.write("12");
            close();
            plus();
            pp.write("TEMP"); open();
                pp.write("T1");
            close();
            pp.end();
        close();
        pp.write(" ");
        pp.allowBreak(0);

        pp.write("MOVE"); open();
            pp.write("TEMP"); open(); pp.write("T1"); close();
            comma();
            pp.write("CALL"); open();
                pp.write("NAME"); open(); pp.write("g"); close();
                comma();
                pp.write("MEM"); open();
                    pp.write("FP"); plus(); pp.write("12");
                close();
            close();
        close();
        pp.newline(0);
        flush();
        pp.begin(2); pp.write("MOVE(");
            pp.begin(2); pp.write("TEMP("); pp.write("T1"); close();
            comma();
            pp.begin(2); pp.write("CALL(");
                pp.begin(2); pp.write("NAME("); pp.write("g"); close();
                comma();
                pp.begin(2); pp.write("MEM(");
                    pp.begin(0); pp.write("FP"); plus(); pp.write("12"); pp.end();
                close();
            close();
        close();
        pp.newline(0);
        flush();

    }
}
