Názor k článku
Java zavádza string templates od johny - Skúšobne som si vytvoril CLR procesor pre farebný...

  • Článek je starý, nové názory již nelze přidávat.
  • 23. 3. 2024 11:18

    johny

    Skúšobne som si vytvoril CLR procesor pre farebný výpis na konzole. Syntax sa ale v blízkej budúcnosti pravdepodobne môže zmeniť.

    import java.util.List;
    import java.util.ArrayList;
    import java.util.Arrays;
    
    enum Ansi {
        RESET("\u001B[0m"),
        RED("\u001B[31m"),
        GREEN("\u001B[32m"),
        YELLOW("\u001B[33m"),
        BLUE("\u001B[34m"),
        WHITE("\u001B[37m"),
        DEFAULT("\u001B[39m");
    
        private final String code;
    
        Ansi(String code) {
            this.code = code;
        }
    
        public String c() {
            return code;
        }
    
        public static boolean contains(String val) {
            return Arrays.stream(Ansi.values()).anyMatch(n -> n.name().equalsIgnoreCase(val));
        }
    
    }
    
    void main() {
    
        System.out.println(Ansi.RED);
    
        String name = "John Doe";
    
        System.out.println(STR."\{Ansi.BLUE.c()}an old falcon \{Ansi.RESET.c()}");
        System.out.println(CLR."RED Hello \{name}!");
        System.out.println(CLR."GREEN Hi \{name}!");
        System.out.println(CLR."YELLOW Halo \{name}!");
        System.out.println(CLR."BLUE Ahoj \{name}!");
        System.out.println(CLR."GREEN Ahoj \{name}!");
        System.out.println(CLR."BLUE Ahoj ako sa mas \{name}?");
        System.out.println(CLR."BLUEs ? 21 d");
        System.out.println(CLR."");
        System.out.println(CLR." ");
    }
    
    StringTemplate.Processor<String, RuntimeException> CLR = temp -> {
    
        List<String> fragments = new ArrayList<>(temp.fragments());
    
        String first = fragments.getFirst();
        String[] els = first.split(" ", 2);
    
        if (els.length != 2) {
            return StringTemplate.interpolate(temp.fragments(), temp.values());
        }
    
        Ansi val = Ansi.DEFAULT;
        String col = els[0];
        String msg = els[1];
    
        if (!Ansi.contains(col)) {
            return StringTemplate.interpolate(temp.fragments(), temp.values());
        } else {
    
            val = Ansi.valueOf(col);
    
            String res = switch (val) {
                // case null -> Ansi.DEFAULT.c();
                case Ansi.RED -> Ansi.RED.c();
                case Ansi.GREEN -> Ansi.GREEN.c();
                case Ansi.YELLOW -> Ansi.YELLOW.c();
                case Ansi.BLUE -> Ansi.BLUE.c();
                default -> Ansi.DEFAULT.c();
            };
    
            fragments.removeFirst();
            fragments.addFirst(res + msg);
    
            String last = fragments.removeLast();
            fragments.addLast(last + Ansi.RESET.c());
            return StringTemplate.interpolate(fragments, temp.values());
        }
    };