namespace GlyphicLib.Model
{
/// <summary>
/// Provides the model for mapping a font character to a Zodiac Letter
/// (0 > D2, 1 > E2, 2 > E4, 3 > Y2, etc)
/// </summary>
public class ZodiacFontChar
{
private String fontChar = "";
private String letter = "";
/// <summary>
/// Constructor for a ZodiacFontChar
/// </summary>
public ZodiacFontChar(String aFontChar, String aLetter)
{
fontChar = aFontChar ?? "";
letter = aLetter ?? "";
}
/// <summary>
/// Accessor Mutator for the fontChar member of type String
/// </summary>
public String FontChar
{
get { return fontChar; }
set { fontChar = value ?? ""; }
}
/// <summary>
/// Accessor Mutator for the letter member of type String
/// </summary>
public String Letter
{
get { return letter; }
set { letter = value ?? ""; }
}
}
/// <summary>
/// Provides the model for the complete mapping of Zodiac
/// Letters to font letters.
/// </summary>
public class ZodiacFontMap : List<ZodiacFontChar>
{
/// <summary>
/// Initialized the Zodiac Letter to font letter map.
/// </summary>
public ZodiacFontMap()
{
Add(new ZodiacFontChar("0", "D2"));
Add(new ZodiacFontChar("1", "E2"));
Add(new ZodiacFontChar("2", "E4"));
Add(new ZodiacFontChar("3", "Y2"));
Add(new ZodiacFontChar("4", "E5"));
Add(new ZodiacFontChar("5", "N4"));
Add(new ZodiacFontChar("6", "L2"));
Add(new ZodiacFontChar("7", "R2"));
Add(new ZodiacFontChar("8", "F1"));
Add(new ZodiacFontChar("9", "B2"));
Add(new ZodiacFontChar("A", "T6"));
Add(new ZodiacFontChar("B", "I2"));
Add(new ZodiacFontChar("C", "E6"));
Add(new ZodiacFontChar("D", "S3"));
Add(new ZodiacFontChar("E", "P2"));
Add(new ZodiacFontChar("F", "A2"));
Add(new ZodiacFontChar("G", "I4"));
Add(new ZodiacFontChar("H", "G1"));
Add(new ZodiacFontChar("I", "A4"));
Add(new ZodiacFontChar("J", "O1"));
Add(new ZodiacFontChar("K", "E3"));
Add(new ZodiacFontChar("L", "A3"));
Add(new ZodiacFontChar("M", "I3"));
Add(new ZodiacFontChar("N", "S1"));
Add(new ZodiacFontChar("O", "U3"));
Add(new ZodiacFontChar("P", "O2"));
Add(new ZodiacFontChar("Q", "D3"));
Add(new ZodiacFontChar("R", "R3"));
Add(new ZodiacFontChar("S", "L3"));
Add(new ZodiacFontChar("T", "S4"));
Add(new ZodiacFontChar("U", "O3"));
Add(new ZodiacFontChar("V", "W2"));
Add(new ZodiacFontChar("W", "R4"));
Add(new ZodiacFontChar("X", "N5"));
Add(new ZodiacFontChar("Y", "I5"));
Add(new ZodiacFontChar("a", "R5"));
Add(new ZodiacFontChar("b", "N3"));
Add(new ZodiacFontChar("c", "O4"));
Add(new ZodiacFontChar("d", "I1"));
Add(new ZodiacFontChar("e", "R1"));
Add(new ZodiacFontChar("f", "Y1"));
Add(new ZodiacFontChar("g", "E1"));
Add(new ZodiacFontChar("h", "M1"));
Add(new ZodiacFontChar("i", "V1"));
Add(new ZodiacFontChar("j", "H1"));
Add(new ZodiacFontChar("k", "S2"));
Add(new ZodiacFontChar("l", "T3"));
Add(new ZodiacFontChar("m", "A5"));
Add(new ZodiacFontChar("n", "W1"));
Add(new ZodiacFontChar("q", "D1"));
Add(new ZodiacFontChar("r", "T1"));
Add(new ZodiacFontChar("s", "B1"));
Add(new ZodiacFontChar("t", "U2"));
Add(new ZodiacFontChar("u", "A1"));
Add(new ZodiacFontChar("v", "T2"));
Add(new ZodiacFontChar("w", "N1"));
Add(new ZodiacFontChar("x", "N2"));
Add(new ZodiacFontChar("y", "U1"));
Add(new ZodiacFontChar("z", "P1"));
Add(new ZodiacFontChar("'", "L1"));
Add(new ZodiacFontChar("~", "C1"));
Add(new ZodiacFontChar("!", "T4"));
Add(new ZodiacFontChar("@", "T5"));
}
/// <summary>
/// Converts a Zodiac Letter (A1, A2, D1, et al) to a font letter.
/// </summary>
/// <param name="zodiac"></param>
/// <returns></returns>
public String ZodiacToFont(String zodiac) {
ZodiacFontChar chr =
(
from item
in this
where item.Letter == zodiac
select item
).FirstOrDefault();
if (chr != null)
return chr.FontChar;
return "";
}
/// <summary>
/// Converts a list of Zodiac Letters (A1, A2, D1, et al) to their
/// font letters. The resulting text is formatted in columns specified
/// by the width parameter.
/// </summary>
/// <param name="zodiacChars"></param>
/// <returns></returns>
public string Convert(List<string> zodiacChars, int width)
{
if(zodiacChars == null)
return "[The Zodiac Chars are null]";
width = Math.Max(1, width);
String result = "";
int cnt = 0;
foreach(String chr in zodiacChars)
{
result += ZodiacToFont(chr);
if (++cnt == width)
{
result += "\n";
cnt = 0;
}
}
return result;
}
}
}