src/main/java/org/vaadin/console/ansi/DefaultANSICodeConverter.java
author indvdum
Tue, 31 May 2011 15:52:03 +0400
branchconsoleWithANSI
changeset 15 ea825ba6336b
child 16 942d8db3a181
permissions -rw-r--r--
+ console 1.2.0-SNAPSHOT
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
}