indvdum@15
|
1 |
package org.vaadin.console.ansi;
|
indvdum@15
|
2 |
|
indvdum@15
|
3 |
import java.util.HashMap;
|
indvdum@15
|
4 |
import java.util.Map;
|
indvdum@15
|
5 |
import java.util.regex.Matcher;
|
indvdum@15
|
6 |
import java.util.regex.Pattern;
|
indvdum@15
|
7 |
|
indvdum@15
|
8 |
/**
|
indvdum@15
|
9 |
* Default converter for numeric-only ANSI codes.
|
indvdum@15
|
10 |
*
|
indvdum@15
|
11 |
* @author indvdum
|
indvdum@15
|
12 |
* 31.05.2011 13:55:47
|
indvdum@15
|
13 |
*
|
indvdum@15
|
14 |
*/
|
indvdum@15
|
15 |
public class DefaultANSICodeConverter implements ANSICodeConverter {
|
indvdum@15
|
16 |
|
indvdum@15
|
17 |
protected static final Map<Integer, String> ANSI_CSS = new HashMap<Integer, String>();
|
indvdum@15
|
18 |
static{
|
indvdum@15
|
19 |
ANSI_CSS.put(0, "");
|
indvdum@15
|
20 |
ANSI_CSS.put(1, "term-font-weight-bolder");
|
indvdum@15
|
21 |
ANSI_CSS.put(2, "term-font-weight-lighter");
|
indvdum@15
|
22 |
ANSI_CSS.put(3, "term-font-style-italic");
|
indvdum@15
|
23 |
ANSI_CSS.put(4, "term-text-decoration-underline");
|
indvdum@15
|
24 |
ANSI_CSS.put(5, "term-text-decoration-blink");
|
indvdum@15
|
25 |
ANSI_CSS.put(6, "term-text-decoration-blink");
|
indvdum@15
|
26 |
|
indvdum@15
|
27 |
ANSI_CSS.put(9, "term-text-decoration-line-through");
|
indvdum@15
|
28 |
|
indvdum@15
|
29 |
ANSI_CSS.put(22, "term-font-weight-normal");
|
indvdum@15
|
30 |
|
indvdum@15
|
31 |
ANSI_CSS.put(24, "term-text-decoration-none");
|
indvdum@15
|
32 |
ANSI_CSS.put(25, "term-text-decoration-none");
|
indvdum@15
|
33 |
|
indvdum@15
|
34 |
ANSI_CSS.put(29, "term-text-decoration-none");
|
indvdum@15
|
35 |
|
indvdum@15
|
36 |
ANSI_CSS.put(30, "term-color-black");
|
indvdum@15
|
37 |
ANSI_CSS.put(31, "term-color-red");
|
indvdum@15
|
38 |
ANSI_CSS.put(32, "term-color-green");
|
indvdum@15
|
39 |
ANSI_CSS.put(33, "term-color-yellow");
|
indvdum@15
|
40 |
ANSI_CSS.put(34, "term-color-blue");
|
indvdum@15
|
41 |
ANSI_CSS.put(35, "term-color-purple");
|
indvdum@15
|
42 |
ANSI_CSS.put(36, "term-color-teal");
|
indvdum@15
|
43 |
ANSI_CSS.put(37, "term-color-silver");
|
indvdum@15
|
44 |
|
indvdum@15
|
45 |
ANSI_CSS.put(40, "term-background-color-black");
|
indvdum@15
|
46 |
ANSI_CSS.put(41, "term-background-color-red");
|
indvdum@15
|
47 |
ANSI_CSS.put(42, "term-background-color-green");
|
indvdum@15
|
48 |
ANSI_CSS.put(43, "term-background-color-yellow");
|
indvdum@15
|
49 |
ANSI_CSS.put(44, "term-background-color-blue");
|
indvdum@15
|
50 |
ANSI_CSS.put(45, "term-background-color-purple");
|
indvdum@15
|
51 |
ANSI_CSS.put(46, "term-background-color-teal");
|
indvdum@15
|
52 |
ANSI_CSS.put(47, "term-background-color-silver");
|
indvdum@15
|
53 |
|
indvdum@15
|
54 |
ANSI_CSS.put(53, "term-text-decoration-overline");
|
indvdum@15
|
55 |
ANSI_CSS.put(55, "term-text-decoration-none");
|
indvdum@15
|
56 |
}
|
indvdum@15
|
57 |
|
indvdum@15
|
58 |
@Override
|
indvdum@15
|
59 |
public String convertANSIToCSS(String ansiEscapeSequence) {
|
indvdum@15
|
60 |
StringBuilder cssClasses = new StringBuilder("");
|
indvdum@15
|
61 |
Matcher matcher = Pattern.compile(ANSI_PATTERN).matcher(ansiEscapeSequence);
|
indvdum@15
|
62 |
if(!matcher.matches())
|
indvdum@15
|
63 |
return cssClasses.toString();
|
indvdum@15
|
64 |
String codes[] = matcher.group(2).split(";");
|
indvdum@15
|
65 |
for(int i = 0; i < codes.length; i++){
|
indvdum@15
|
66 |
if(!codes[i].matches("[0-9]+")) // processing only numeric codes
|
indvdum@15
|
67 |
continue;
|
indvdum@15
|
68 |
int nCode = Integer.valueOf(codes[i]);
|
indvdum@15
|
69 |
if(nCode == 38){ // Set xterm-256 text color, nothing to do
|
indvdum@15
|
70 |
i+=2;
|
indvdum@15
|
71 |
continue;
|
indvdum@15
|
72 |
}
|
indvdum@15
|
73 |
if(nCode == 48){ // Set xterm-256 background color, nothing to do
|
indvdum@15
|
74 |
i+=2;
|
indvdum@15
|
75 |
continue;
|
indvdum@15
|
76 |
}
|
indvdum@15
|
77 |
String cssClass = getCSSClass(nCode);
|
indvdum@15
|
78 |
if(cssClass == null)
|
indvdum@15
|
79 |
continue;
|
indvdum@15
|
80 |
cssClass = cssClass.trim();
|
indvdum@15
|
81 |
if(cssClass.length() > 0)
|
indvdum@15
|
82 |
cssClasses.append(cssClass).append(" ");
|
indvdum@15
|
83 |
}
|
indvdum@15
|
84 |
return cssClasses.toString().trim();
|
indvdum@15
|
85 |
}
|
indvdum@15
|
86 |
|
indvdum@15
|
87 |
/**
|
indvdum@15
|
88 |
* Converting one numeric ANSI code to one or many CSS-classes.
|
indvdum@15
|
89 |
*
|
indvdum@15
|
90 |
* @param ansiCode ANSI code
|
indvdum@15
|
91 |
* @return CSS-class(es).
|
indvdum@15
|
92 |
*/
|
indvdum@15
|
93 |
protected String getCSSClass(int ansiCode) {
|
indvdum@15
|
94 |
return ANSI_CSS.get(ansiCode);
|
indvdum@15
|
95 |
}
|
indvdum@15
|
96 |
|
indvdum@15
|
97 |
/**
|
indvdum@15
|
98 |
* Converting one string ANSI code to one or many CSS-classes.
|
indvdum@15
|
99 |
*
|
indvdum@15
|
100 |
* @param ansiCode ANSI code
|
indvdum@15
|
101 |
* @return CSS-class(es).
|
indvdum@15
|
102 |
*/
|
indvdum@15
|
103 |
protected String getCSSClass(String ansiCode) {
|
indvdum@15
|
104 |
return "";
|
indvdum@15
|
105 |
}
|
indvdum@15
|
106 |
|
indvdum@15
|
107 |
}
|