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