blob: 75f0eac0c47f859cfdfcaa7644c8f2c5dde09707 [file] [log] [blame]
package org.apache.maven.doxia.module.itext;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.awt.Color;
import com.lowagie.text.ExceptionConverter;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.markup.MarkupTags;
import com.lowagie.text.pdf.BaseFont;
/**
* <code>iText</code> wrapper object for font.
*
* @see com.lowagie.text.Font
*
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
* @version $Id$
*/
public class ITextFont
{
/** A normal font style */
public static final String NORMAL = MarkupTags.CSS_VALUE_NORMAL;
/** A bold font style */
public static final String BOLD = MarkupTags.CSS_VALUE_BOLD;
/** A italic font style */
public static final String ITALIC = MarkupTags.CSS_VALUE_ITALIC;
/** An underline font style */
public static final String UNDERLINE = MarkupTags.CSS_VALUE_UNDERLINE;
/** A default font name */
public static final String DEFAULT_FONT_NAME = FontFactory.HELVETICA;
/** A default font size */
public static final float DEFAULT_FONT_SIZE = 12;
/** A default font style */
public static final String DEFAULT_FONT_STYLE = NORMAL;
/** A default Black color definition */
public static final int DEFAULT_FONT_COLOR_RED = Color.BLACK.getRed();
/** A default Black color definition */
public static final int DEFAULT_FONT_COLOR_GREEN = Color.BLACK.getGreen();
/** A default Black color definition */
public static final int DEFAULT_FONT_COLOR_BLUE = Color.BLACK.getBlue();
private static final int SECTION_FONT_SIZE_0 = 24;
private static final int SECTION_FONT_SIZE_1 = 22;
private static final int SECTION_FONT_SIZE_2 = 20;
private static final int SECTION_FONT_SIZE_3 = 18;
private static final int SECTION_FONT_SIZE_4 = 16;
private static final int SECTION_FONT_SIZE_DEFAULT = 14;
private boolean monoSpaced = false;
private float currentSize = 12;
private int currentStyle = Font.NORMAL;
private Color currentColor = Color.BLACK;
/**
* Default constructor
*/
public ITextFont()
{
// nop
}
/**
* Add bold style to the current style
*/
public void addBold()
{
this.currentStyle += Font.BOLD;
}
/**
* Remove bold style to the current style
*/
public void removeBold()
{
this.currentStyle -= Font.BOLD;
if ( this.currentStyle < 0 )
{
this.currentStyle = Font.NORMAL;
}
}
/**
* Add italic style to the current style
*/
public void addItalic()
{
this.currentStyle += Font.ITALIC;
}
/**
* Remove italic style to the current style
*/
public void removeItalic()
{
this.currentStyle -= Font.ITALIC;
if ( this.currentStyle < 0 )
{
this.currentStyle = Font.NORMAL;
}
}
/**
* Add italic style to the current style
*/
public void addUnderlined()
{
this.currentStyle += Font.UNDERLINE;
}
/**
* Remove italic style to the current style
*/
public void removeUnderlined()
{
this.currentStyle -= Font.UNDERLINE;
if ( this.currentStyle < 0 )
{
this.currentStyle = Font.NORMAL;
}
}
/**
* Add monospaced style to the current style
*
* @param monoSpaced true for monospaced style
*/
public void setMonoSpaced( boolean monoSpaced )
{
this.monoSpaced = monoSpaced;
}
/**
* Set a new font color
*
* @param color a new color
*/
public void setColor( Color color )
{
this.currentColor = color;
}
/**
* Set a new font color
*
* @param size a new size
*/
public void setSize( float size )
{
this.currentSize = size;
}
/**
* Return the font name
*
* @return the font name
*/
public String getFontName()
{
Font font = getCurrentFont();
return font.getFamilyname();
}
/**
* Return the font style
*
* @return the font style
*/
public String getFontStyle()
{
Font font = getCurrentFont();
StringBuilder sb = new StringBuilder();
if ( font.isBold() )
{
sb.append( BOLD );
}
if ( font.isItalic() )
{
if ( sb.length() == 0 )
{
sb.append( ITALIC );
}
else
{
sb.append( "," );
sb.append( ITALIC );
}
}
if ( font.isUnderlined() )
{
if ( sb.length() == 0 )
{
sb.append( UNDERLINE );
}
else
{
sb.append( "," );
sb.append( UNDERLINE );
}
}
if ( sb.length() == 0 )
{
return NORMAL;
}
return sb.toString();
}
/**
* Return the font name
*
* @return the font name
*/
public String getFontSize()
{
Font font = getCurrentFont();
return String.valueOf( font.getCalculatedSize() );
}
/**
* Return the font color blue
*
* @return the font color blue
*/
public String getFontColorBlue()
{
Font font = getCurrentFont();
return String.valueOf( font.color().getBlue() );
}
/**
* Return the font color green
*
* @return the font color green
*/
public String getFontColorGreen()
{
Font font = getCurrentFont();
return String.valueOf( font.color().getGreen() );
}
/**
* Return the font color red
*
* @return the font color red
*/
public String getFontColorRed()
{
Font font = getCurrentFont();
return String.valueOf( font.color().getRed() );
}
/**
* Get a section font size depending the section number.
* <dl>
* <dt>0</dt>
* <dd>Chapter: font size = 24</dd>
* <dt>1</dt>
* <dd>Section 1: font size = 22</dd>
* <dt>2</dt>
* <dd>Section 2: font size = 20</dd>
* <dt>3</dt>
* <dd>Section 3: font size = 18</dd>
* <dt>4</dt>
* <dd>Section 4: font size = 16</dd>
* <dt>5 ot otherwise</dt>
* <dd>Section 5: font size = 14</dd>
* </dl>
*
* @param sectionNumber a section number
* @return a font size.
*/
public static int getSectionFontSize( int sectionNumber )
{
switch ( sectionNumber )
{
case 0:
return SECTION_FONT_SIZE_0;
case 1:
return SECTION_FONT_SIZE_1;
case 2:
return SECTION_FONT_SIZE_2;
case 3:
return SECTION_FONT_SIZE_3;
case 4:
return SECTION_FONT_SIZE_4;
case 5:
default:
return SECTION_FONT_SIZE_DEFAULT;
}
}
/**
* Convenience method to get a defined MonoSpaced font depending the wanted style and size.
*
* @param style the font style.
* @param size the font size.
* @param color the font color.
* @return a font the font.
*/
public static Font getMonoSpacedFont( int style, float size, Color color )
{
try
{
return new Font( BaseFont.createFont( BaseFont.COURIER, BaseFont.CP1252, false ), size, style, color );
}
catch ( Exception e )
{
throw new ExceptionConverter( e );
}
}
/**
* Convenience method to get a defined font depending the wanted style and size.
*
* @param style the font style.
* @param size the font size.
* @param color the font color.
* @return a font the font.
*/
public static Font getFont( int style, float size, Color color )
{
Font font = new Font();
font.setFamily( DEFAULT_FONT_NAME );
font.setStyle( style );
font.setSize( size );
font.setColor( color );
return font;
}
/**
* Convenience method to return the current font
*
* @return the current font
*/
private Font getCurrentFont()
{
if ( this.monoSpaced )
{
return getMonoSpacedFont( this.currentStyle, this.currentSize, this.currentColor );
}
return getFont( this.currentStyle, this.currentSize, this.currentColor );
}
}