public void Compile() { ParsedPath spriteFontFileName = Target.InputFiles.Where(f => f.Extension == ".spritefont").First(); ParsedPath stringsFileName = Target.InputFiles.Where(f => f.Extension == ".strings").First(); ParsedPath xnbFileName = Target.OutputFiles.Where(f => f.Extension == ".xnb").First(); SpriteFontFile sff = SpriteFontFileReader.ReadFile(spriteFontFileName); StringsFileV1 sf = StringsFileReaderV1.ReadFile(stringsFileName); HashSet <char> hs = new HashSet <char>(); foreach (var item in sf.Strings) { for (int i = 0; i < item.Value.Length; i++) { hs.Add(item.Value[i]); } } foreach (var region in sff.CharacterRegions) { for (char c = region.Start; c <= region.End; c++) { hs.Add(c); } } List <char> fontChars = hs.OrderBy(c => c).ToList(); FontSlant fontSlant = (sff.Style == SpriteFontFile.FontStyle.Italic ? FontSlant.Italic : FontSlant.Normal); FontWeight fontWeight = (sff.Style == SpriteFontFile.FontStyle.Bold ? FontWeight.Bold : FontWeight.Normal); ParsedPath pngFile = xnbFileName.WithExtension(".png"); SpriteFontContent sfc = CreateSpriteFontContent( sff.FontName, sff.Size, fontSlant, fontWeight, sff.Spacing, sff.DefaultCharacter, fontChars, pngFile); if (!Directory.Exists(xnbFileName.VolumeAndDirectory)) { Directory.CreateDirectory(xnbFileName.VolumeAndDirectory); } XnbFileWriterV5.WriteFile(sfc, xnbFileName); }
private StringsContent CreateStringsData(string className, StringsFileV1 stringsFile) { StringsContent stringsData = new StringsContent(); stringsData.ClassName = className; stringsData.Strings = new List <StringsContent.String>(); string namespaceName; Target.Properties.GetRequiredValue("Namespace", out namespaceName); stringsData.Namespace = namespaceName; foreach (var s in stringsFile.Strings) { StringsContent.String d = new StringsContent.String(); d.Name = s.Name; d.Value = s.Value; // Count the args in the string int n = 0; for (int i = 0; i < d.Value.Length - 1; i++) { if (d.Value[i] == '{' && d.Value[i + 1] != '{') { n++; } } d.ArgCount = n; stringsData.Strings.Add(d); } return(stringsData); }