package com.editev.chess.printer; import com.editev.chess.GameHTML; /** Prints a style sheet, if necessary. * * @see See the source here. */ public class StyleSheetPrinter extends Printer { /** Color of a black piece. */ public static final String BLACK_PIECE = "#000000"; /** Color of a black square. */ public static final String BLACK_SQUARE = "#777700"; /** Color of a white piece. */ public static final String WHITE_PIECE = "#FFFFFF"; /** Color of a white square. */ public static final String WHITE_SQUARE = "#AAAA66"; /** The color of a piece. * * @return the color of a piece. * @param isWhite is the piece white or black? */ private static String pieceColor( boolean isWhite ) { return isWhite ? WHITE_PIECE : BLACK_PIECE ; } /** The color of a square. * * @return the color of a square. * @param isWhite is the square white or black? */ private static String squareColor( boolean isWhite ) { return isWhite ? WHITE_SQUARE : BLACK_SQUARE; } /** The name of a style for a given square and piece color. * * @return name of the style representing that piece and square color. */ public static String styleName( boolean isWhitePiece, boolean isWhiteSquare ) { return isWhitePiece ? (isWhiteSquare ? "whiteWhite" : "whiteBlack") : (isWhiteSquare ? "blackWhite" : "blackBlack"); } /** The name of a style for a captured piece. * * @return name of the style representing that piece and square color. */ public static String captureStyleName( boolean isWhitePiece ) { return isWhitePiece ? "white" : "black"; } /** A template for CSS styles for squares and pieces. */ private static String STYLE_TEMPLATE = "; font-size: x-large; font-family: sans-serif }\n"; /** A template for CSS styles for captured pieces.. */ private static String CAPTURE_STYLE_TEMPLATE = "; font-family: sans-serif }\n"; /** Get the CSS style definition for this piece and square color. * * @return the style definition for the CSS style sheet. */ public static String getCSSDefinition( boolean isWhitePiece, boolean isWhiteSquare ) { return " ." + styleName( isWhitePiece, isWhiteSquare ) + " { color: " + pieceColor( isWhitePiece ) + "; background-color: " + squareColor( isWhiteSquare ) + STYLE_TEMPLATE; } /** Get the CSS style definition for captured pieces. * * @return the style definition for captured pieces. */ public static String getCaptureCSSDefinition( boolean isWhitePiece ) { return " ." + captureStyleName( isWhitePiece ) + " { color: " + pieceColor( isWhitePiece ) + "; background-color: " + squareColor( !isWhitePiece ) + CAPTURE_STYLE_TEMPLATE; } public static final String HISTORY_STYLE_NAME = "hist"; public static final String HISTORY_STYLE = " ."+HISTORY_STYLE_NAME +" { font-size: small; font-family: mono; color: #000000 }\n"; /** Information that needs to appear in the header of the HTML document, including CSS style sheets and Javascript. */ public static final String HEADER = " \n\n"; public void print( GameHTML game ) { if (!game.hasStyles) return; game.out.print( HEADER ); } }