package com.jediterm.terminal.emulator.charset;
/**
* Provides an enum with names for the supported character sets.
*/
public enum CharacterSet
{
ASCII( 'B' )
{
@Override
public int map( int index )
{
return -1;
}
},
BRITISH( 'A' )
{
@Override
public int map( int index )
{
if ( index == 3 )
{
// Pound sign...
return '\u00a3';
}
return -1;
}
},
DANISH( 'E', '6' )
{
@Override
public int map( int index )
{
switch ( index )
{
case 32:
return '\u00c4';
case 59:
return '\u00c6';
case 60:
return '\u00d8';
case 61:
return '\u00c5';
case 62:
return '\u00dc';
case 64:
return '\u00e4';
case 91:
return '\u00e6';
case 92:
return '\u00f8';
case 93:
return '\u00e5';
case 94:
return '\u00fc';
default:
return -1;
}
}
},
DEC_SPECIAL_GRAPHICS( '0', '2' )
{
@Override
public int map( int index )
{
if ( index >= 64 && index < 96 )
{
return ( ( Character )CharacterSets.DEC_SPECIAL_CHARS[index - 64][0] ).charValue();
}
return -1;
}
},
DEC_SUPPLEMENTAL( 'U', '<' )
{
@Override
public int map( int index )
{
if ( index >= 0 && index < 64 )
{
// Set the 8th bit...
return index + 160;
}
return -1;
}
},
DUTCH( '4' )
{
@Override
public int map( int index )
{
switch ( index )
{
case 3:
return '\u00a3';
case 32:
return '\u00be';
case 59:
return '\u0133';
case 60:
return '\u00bd';
case 61:
return '|';
case 91:
return '\u00a8';
case 92:
return '\u0192';
case 93:
return '\u00bc';
case 94:
return '\u00b4';
default:
return -1;
}
}
},
FINNISH( 'C', '5' )
{
@Override
public int map( int index )
{
switch ( index )
{
case 59:
return '\u00c4';
case 60:
return '\u00d4';
case 61:
return '\u00c5';
case 62:
return '\u00dc';
case 64:
return '\u00e9';
case 91:
return '\u00e4';
case 92:
return '\u00f6';
case 93:
return '\u00e5';
case 94:
return '\u00fc';
default:
return -1;
}
}
},
FRENCH( 'R' )
{
@Override
public int map( int index )
{
switch ( index )
{
case 3:
return '\u00a3';
case 32:
return '\u00e0';
case 59:
return '\u00b0';
case 60:
return '\u00e7';
case 61:
return '\u00a6';
case 91:
return '\u00e9';
case 92:
return '\u00f9';
case 93:
return '\u00e8';
case 94:
return '\u00a8';
default:
return -1;
}
}
},
FRENCH_CANADIAN( 'Q' )
{
@Override
public int map( int index )
{
switch ( index )
{
case 32:
return '\u00e0';
case 59:
return '\u00e2';
case 60:
return '\u00e7';
case 61:
return '\u00ea';
case 62:
return '\u00ee';
case 91:
return '\u00e9';
case 92:
return '\u00f9';
case 93:
return '\u00e8';
case 94:
return '\u00fb';
default:
return -1;
}
}
},
GERMAN( 'K' )
{
@Override
public int map( int index )
{
switch ( index )
{
case 32:
return '\u00a7';
case 59:
return '\u00c4';
case 60:
return '\u00d6';
case 61:
return '\u00dc';
case 91:
return '\u00e4';
case 92:
return '\u00f6';
case 93:
return '\u00fc';
case 94:
return '\u00df';
default:
return -1;
}
}
},
ITALIAN( 'Y' )
{
@Override
public int map( int index )
{
switch ( index )
{
case 3:
return '\u00a3';
case 32:
return '\u00a7';
case 59:
return '\u00ba';
case 60:
return '\u00e7';
case 61:
return '\u00e9';
case 91:
return '\u00e0';
case 92:
return '\u00f2';
case 93:
return '\u00e8';
case 94:
return '\u00ec';
default:
return -1;
}
}
},
SPANISH( 'Z' )
{
@Override
public int map( int index )
{
switch ( index )
{
case 3:
return '\u00a3';
case 32:
return '\u00a7';
case 59:
return '\u00a1';
case 60:
return '\u00d1';
case 61:
return '\u00bf';
case 91:
return '\u00b0';
case 92:
return '\u00f1';
case 93:
return '\u00e7';
default:
return -1;
}
}
},
SWEDISH( 'H', '7' )
{
@Override
public int map( int index )
{
switch ( index )
{
case 32:
return '\u00c9';
case 59:
return '\u00c4';
case 60:
return '\u00d6';
case 61:
return '\u00c5';
case 62:
return '\u00dc';
case 64:
return '\u00e9';
case 91:
return '\u00e4';
case 92:
return '\u00f6';
case 93:
return '\u00e5';
case 94:
return '\u00fc';
default:
return -1;
}
}
},
SWISS( '=' )
{
@Override
public int map( int index )
{
switch ( index )
{
case 3:
return '\u00f9';
case 32:
return '\u00e0';
case 59:
return '\u00e9';
case 60:
return '\u00e7';
case 61:
return '\u00ea';
case 62:
return '\u00ee';
case 63:
return '\u00e8';
case 64:
return '\u00f4';
case 91:
return '\u00e4';
case 92:
return '\u00f6';
case 93:
return '\u00fc';
case 94:
return '\u00fb';
default:
return -1;
}
}
};
private final int[] myDesignations;
/**
* Creates a new {@link CharacterSet} instance.
*
* @param designations
* the characters that designate this character set, cannot be
* <code>null</code>.
*/
CharacterSet(int... designations)
{
myDesignations = designations;
}
// METHODS
/**
* Returns the {@link CharacterSet} for the given character.
*
* @param designation
* the character to translate to a {@link CharacterSet}.
* @return a character set name corresponding to the given character,
* defaulting to ASCII if no mapping could be made.
*/
public static CharacterSet valueOf( char designation )
{
for ( CharacterSet csn : values() )
{
if ( csn.isDesignation( designation ) )
{
return csn;
}
}
return ASCII;
}
/**
* Maps the character with the given index to a character in this character
* set.
*
* @param index
* the index of the character set, >= 0 && < 128.
* @return a mapped character, or -1 if no mapping could be made and the
* ASCII value should be used.
*/
public abstract int map( int index );
/**
* Returns whether or not the given designation character belongs to this
* character set's set of designations.
*
* @param designation
* the designation to test for.
* @return <code>true</code> if the given designation character maps to this
* character set, <code>false</code> otherwise.
*/
private boolean isDesignation( char designation )
{
for (int myDesignation : myDesignations) {
if (myDesignation == designation) {
return true;
}
}
return false;
}
}