src/main/java/org/vaadin/console/ansi/DefaultANSICodeConverter.java
author indvdum
Sun, 05 Jun 2011 22:32:44 +0400
branchconsoleWithANSI
changeset 16 942d8db3a181
parent 15 ea825ba6336b
permissions -rw-r--r--
+ console stable version 1.2.0
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@16
    58
	public DefaultANSICodeConverter(){
indvdum@16
    59
		init();
indvdum@16
    60
	}
indvdum@16
    61
	
indvdum@16
    62
	protected void init(){
indvdum@16
    63
		
indvdum@16
    64
	}
indvdum@16
    65
	
indvdum@15
    66
	@Override
indvdum@15
    67
	public String convertANSIToCSS(String ansiEscapeSequence) {
indvdum@15
    68
		StringBuilder cssClasses = new StringBuilder("");
indvdum@15
    69
		Matcher matcher = Pattern.compile(ANSI_PATTERN).matcher(ansiEscapeSequence);
indvdum@15
    70
		if(!matcher.matches())
indvdum@15
    71
			return cssClasses.toString();
indvdum@15
    72
		String codes[] = matcher.group(2).split(";");
indvdum@15
    73
		for(int i = 0; i < codes.length; i++){
indvdum@15
    74
			if(!codes[i].matches("[0-9]+")) // processing only numeric codes
indvdum@15
    75
				continue;
indvdum@15
    76
			int nCode = Integer.valueOf(codes[i]);
indvdum@15
    77
			if(nCode == 38){ // Set xterm-256 text color, nothing to do
indvdum@15
    78
				i+=2;
indvdum@15
    79
				continue;
indvdum@15
    80
			}
indvdum@15
    81
			if(nCode == 48){ // Set xterm-256 background color, nothing to do
indvdum@15
    82
				i+=2;
indvdum@15
    83
				continue;
indvdum@15
    84
			}
indvdum@15
    85
			String cssClass = getCSSClass(nCode);
indvdum@15
    86
			if(cssClass == null)
indvdum@15
    87
				continue;
indvdum@15
    88
			cssClass = cssClass.trim();
indvdum@15
    89
			if(cssClass.length() > 0)
indvdum@15
    90
				cssClasses.append(cssClass).append(" "); 
indvdum@15
    91
		}
indvdum@15
    92
		return cssClasses.toString().trim();
indvdum@15
    93
	}
indvdum@15
    94
indvdum@15
    95
	/**
indvdum@15
    96
	 * Converting one numeric ANSI code to one or many CSS-classes. 
indvdum@15
    97
	 *
indvdum@15
    98
	 * @param ansiCode ANSI code
indvdum@15
    99
	 * @return CSS-class(es).
indvdum@15
   100
	 */
indvdum@15
   101
	protected String getCSSClass(int ansiCode) {
indvdum@15
   102
		return ANSI_CSS.get(ansiCode);
indvdum@15
   103
	}
indvdum@15
   104
indvdum@15
   105
	/**
indvdum@15
   106
	 * Converting one string ANSI code to one or many CSS-classes. 
indvdum@15
   107
	 *
indvdum@15
   108
	 * @param ansiCode ANSI code
indvdum@15
   109
	 * @return CSS-class(es).
indvdum@15
   110
	 */
indvdum@15
   111
	protected String getCSSClass(String ansiCode) {
indvdum@15
   112
		return "";
indvdum@15
   113
	}
indvdum@15
   114
indvdum@15
   115
}