text: #ifndef _FONT_BASE_H_
  #define _FONT_BASE_H_
  
  #include <nds.h>
  
  namespace WoopsiUI {
  
  	class MutableBitmapBase;
  	class WoopsiString;
  
  	/**
  	 * Abstract class defining the basic properties of a font and providing some
  	 * of the essential functionality.  Should be used as a base class for all
  	 * fonts.
  	 */
  	class FontBase {
  
  	public:
  
  		/**
  		 * Destructor.
  		 */
  		virtual inline ~FontBase() { };
  
  		/**
  		 * Checks if supplied character is blank in the current font.
  		 * @param letter The character to check.
  		 * @return True if the glyph contains any pixels to be drawn.  False if
  		 * the glyph is blank.
  		 */
  		virtual const bool isCharBlank(const u32 letter) const = 0;
  
  		/**
  		 * Draw an individual character of the font to the specified bitmap.
  		 * @param bitmap The bitmap to draw to.
  		 * @param letter The character to output.
  		 * @param colour The colour to draw with.
  		 * @param x The x co-ordinate of the text.
  		 * @param y The y co-ordinate of the text.
  		 * @param clipX1 The left edge of the clipping rectangle.
  		 * @param clipY1 The top edge of the clipping rectangle.
  		 * @param clipX2 The right edge of the clipping rectangle.
  		 * @param clipY2 The bottom edge of the clipping rectangle.
  		 * @return The x co-ordinate for the next character to be drawn.
  		 */
  		virtual s16 drawChar(MutableBitmapBase* bitmap, u32 letter, u16 colour, s16 x, s16 y, u16 clipX1, u16 clipY1, u16 clipX2, u16 clipY2) = 0;
  
  		/**
  		 * Draw an individual character of the font to the specified bitmap on a baseline.
  		 * @param bitmap The bitmap to draw to.
  		 * @param letter The character to output.
  		 * @param colour The colour to draw with.
  		 * @param x The x co-ordinate of the pen.
  		 * @param y The y co-ordinate of the pen.
  		 * @param clipX1 The left edge of the clipping rectangle.
  		 * @param clipY1 The top edge of the clipping rectangle.
  		 * @param clipX2 The right edge of the clipping rectangle.
  		 * @param clipY2 The bottom edge of the clipping rectangle.
  		 * @return The x co-ordinate for the next character to be drawn.
  		 */
  		virtual s16 drawBaselineChar(MutableBitmapBase* bitmap, u32 letter, u16 colour, s16 x, s16 y, u16 clipX1, u16 clipY1, u16 clipX2, u16 clipY2) = 0;
  		
  		/**
  		 * Get the width of a string in pixels when drawn with this font.
  		 * @param text The string to check.
  		 * @return The width of the string in pixels.
  		 */
  		virtual u16 getStringWidth(const WoopsiString& text) const = 0;
  
  		/**
  		 * Get the width of a portion of a string in pixels when drawn with this
  		 * font.
  		 * @param text The string to check.
  		 * @param startIndex The start point of the substring within the string.
  		 * @param length The length of the substring in chars.
  		 * @return The width of the substring in pixels.
  		 */
  		virtual u16 getStringWidth(const WoopsiString& text, s32 startIndex, s32 length) const = 0;
  
  		/**
  		 * Get the width of an individual character.
  		 * @param letter The character to get the width of.
  		 * @return The width of the character in pixels.
  		 */
  		virtual u8 getCharWidth(u32 letter) const = 0;
  
  		/**
  		 * Get the height of an individual character.
  		 * @param letter The letter to get the height of.
  		 * @return The height of the character in pixels.
  		 */
  		virtual u8 getCharHeight(u32 letter) const = 0;
  		
  		/**
  		 * Get the algebric distance from baseline to top of an individual character.
  		 * @param letter The character to get the "top" of.
  		 * @return The top of the character in pixels.
  		 */
  		virtual s8 getCharTop(u32 letter) const = 0;		
  
  		/**
  		 * Gets the height of the font.
  		 * @return The height of the font.
  		 */
  		virtual const u8 getHeight() const = 0;
  	};
  }
  
  #endif
  