DrawChar (byte symbol)
{
draw the sprite using font_data[symbol]
}
This is roughly how I do it (not exactly) but the idea is the same.
As for different colors, I would suggest you have two drawing modes. One for monochrome fonts, and another for "sprite" fonts. You could allow to change between drawing modes at run-time if you want.
monochrome fonts just draw any non-transparent pixels using the FOREGROUND color and if the background color isn't transparent, draw it using the BACKGROUND color... seems simple but sometimes simple stuff is hard
The "sprite" drawing mode is just what it implies. You just draw the characters as if they were sprites (with transparency if you wish) so you can draw the characters as nicely as you want in a paint program (for those nice colorful fonts) and they will just display as sprites on screen.
Hope this helps.