Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }