1 package org.vaadin.console.ansi;
3 import java.util.HashMap;
5 import java.util.regex.Matcher;
6 import java.util.regex.Pattern;
9 * Default converter for numeric-only ANSI codes.
15 public class DefaultANSICodeConverter implements ANSICodeConverter {
17 protected static final Map<Integer, String> ANSI_CSS = new HashMap<Integer, String>();
20 ANSI_CSS.put(1, "term-font-weight-bolder");
21 ANSI_CSS.put(2, "term-font-weight-lighter");
22 ANSI_CSS.put(3, "term-font-style-italic");
23 ANSI_CSS.put(4, "term-text-decoration-underline");
24 ANSI_CSS.put(5, "term-text-decoration-blink");
25 ANSI_CSS.put(6, "term-text-decoration-blink");
27 ANSI_CSS.put(9, "term-text-decoration-line-through");
29 ANSI_CSS.put(22, "term-font-weight-normal");
31 ANSI_CSS.put(24, "term-text-decoration-none");
32 ANSI_CSS.put(25, "term-text-decoration-none");
34 ANSI_CSS.put(29, "term-text-decoration-none");
36 ANSI_CSS.put(30, "term-color-black");
37 ANSI_CSS.put(31, "term-color-red");
38 ANSI_CSS.put(32, "term-color-green");
39 ANSI_CSS.put(33, "term-color-yellow");
40 ANSI_CSS.put(34, "term-color-blue");
41 ANSI_CSS.put(35, "term-color-purple");
42 ANSI_CSS.put(36, "term-color-teal");
43 ANSI_CSS.put(37, "term-color-silver");
45 ANSI_CSS.put(40, "term-background-color-black");
46 ANSI_CSS.put(41, "term-background-color-red");
47 ANSI_CSS.put(42, "term-background-color-green");
48 ANSI_CSS.put(43, "term-background-color-yellow");
49 ANSI_CSS.put(44, "term-background-color-blue");
50 ANSI_CSS.put(45, "term-background-color-purple");
51 ANSI_CSS.put(46, "term-background-color-teal");
52 ANSI_CSS.put(47, "term-background-color-silver");
54 ANSI_CSS.put(53, "term-text-decoration-overline");
55 ANSI_CSS.put(55, "term-text-decoration-none");
59 public String convertANSIToCSS(String ansiEscapeSequence) {
60 StringBuilder cssClasses = new StringBuilder("");
61 Matcher matcher = Pattern.compile(ANSI_PATTERN).matcher(ansiEscapeSequence);
62 if(!matcher.matches())
63 return cssClasses.toString();
64 String codes[] = matcher.group(2).split(";");
65 for(int i = 0; i < codes.length; i++){
66 if(!codes[i].matches("[0-9]+")) // processing only numeric codes
68 int nCode = Integer.valueOf(codes[i]);
69 if(nCode == 38){ // Set xterm-256 text color, nothing to do
73 if(nCode == 48){ // Set xterm-256 background color, nothing to do
77 String cssClass = getCSSClass(nCode);
80 cssClass = cssClass.trim();
81 if(cssClass.length() > 0)
82 cssClasses.append(cssClass).append(" ");
84 return cssClasses.toString().trim();
88 * Converting one numeric ANSI code to one or many CSS-classes.
90 * @param ansiCode ANSI code
91 * @return CSS-class(es).
93 protected String getCSSClass(int ansiCode) {
94 return ANSI_CSS.get(ansiCode);
98 * Converting one string ANSI code to one or many CSS-classes.
100 * @param ansiCode ANSI code
101 * @return CSS-class(es).
103 protected String getCSSClass(String ansiCode) {