コード例 #1
0
        public void Compile()
        {
            ParsedPath stringsFileName = Target.InputFiles.Where(f => f.Extension == ".strings").First();
            ParsedPath xnbFileName     = Target.OutputFiles.Where(f => f.Extension == ".xnb").First();
            ParsedPath csFileName      = Target.OutputFiles.Where(f => f.Extension == ".cs").First();

            string className;

            Target.Properties.GetOptionalValue("ClassName", out className, stringsFileName.File + "Strings");

            StringsContent stringsData = CreateStringsData(className, StringsFileReaderV1.ReadFile(stringsFileName));

            string[] strings = stringsData.Strings.Select(s => s.Value).ToArray();

            if (!Directory.Exists(xnbFileName.VolumeAndDirectory))
            {
                Directory.CreateDirectory(xnbFileName.VolumeAndDirectory);
            }

            XnbFileWriterV5.WriteFile(strings, xnbFileName);

            if (!Directory.Exists(csFileName.VolumeAndDirectory))
            {
                Directory.CreateDirectory(csFileName.VolumeAndDirectory);
            }

            using (TextWriter writer = new StreamWriter(csFileName))
            {
                WriteCsOutput(writer, stringsData);
            }
        }
コード例 #2
0
        private StringsContent CreateStringsData(string className, Dictionary <string, string> stringDict)
        {
            StringsContent stringsData = new StringsContent();

            stringsData.ClassName = className;
            stringsData.Strings   = new List <StringsContent.String>();
            stringsData.Namespace = this.Namespace;

            foreach (var pair in stringDict)
            {
                StringsContent.String d = new StringsContent.String();

                d.Name  = pair.Key;
                d.Value = pair.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);
        }
コード例 #3
0
        private void WriteCsOutput(TextWriter textWriter, StringsContent stringsData)
        {
            CSharpStreamWriter writer = new CSharpStreamWriter(textWriter);

            writer.WriteLine("//");
            writer.WriteLine("// This file was generated on {{0}}.", DateTime.Now);
            writer.WriteLine("//");
            writer.WriteLine();
            writer.WriteLine("using System;");
            writer.WriteLine();
            writer.WriteLine("namespace {{0}}", stringsData.Namespace);
            writer.WriteLine("{");
            writer.WriteLine("public class {{0}}", stringsData.ClassName);
            writer.WriteLine("{");
            writer.WriteLine("private string[] strings;");
            writer.WriteLine();
            writer.WriteLine("public {{0}}(string[] strings)", stringsData.ClassName);
            writer.WriteLine("{");
            writer.WriteLine("this.strings = strings;");
            writer.WriteLine("}");
            writer.WriteLine();

            for (int i = 0; i < stringsData.Strings.Count; i++)
            {
                StringsContent.String s = stringsData.Strings[i];

                if (s.ArgCount == 0)
                {
                    writer.WriteLine("public string {{0}} { get { return strings[{{1}}]; } }",
                                     s.Name, i);
                }
                else
                {
                    StringBuilder sb1 = new StringBuilder();
                    StringBuilder sb2 = new StringBuilder();

                    for (int j = 0; j < s.ArgCount; j++)
                    {
                        sb1.Append("arg" + j.ToString());
                        sb2.Append("object arg" + j.ToString());

                        if (j < s.ArgCount - 1)
                        {
                            sb1.Append(", ");
                            sb2.Append(", ");
                        }
                    }

                    writer.WriteLine("public string {{0}}({{1}}) { return String.Format(strings[{{2}}], {{3}}); }",
                                     s.Name, sb2.ToString(), i, sb1.ToString());
                }
            }

            writer.WriteLine("}");
            writer.WriteLine("}");
        }
コード例 #4
0
        public void Compile()
        {
            if (Target.InputPaths.Count != 1)
            {
                throw new ContentFileException("Only one input file expected");
            }

            if (Target.OutputPaths.Count != 2)
            {
                throw new ContentFileException("Only two output files expected");
            }

            ParsedPath stringsFilePath = Target.InputPaths[0];
            ParsedPath csFilePath      = Target.OutputPaths[0];
            ParsedPath jsonFilePath    = Target.OutputPaths[1];

            if (ClassName.StartsWith("Xxx"))
            {
                this.ClassName = this.ClassName.Replace("Xxx", stringsFilePath.File + "Strings");
            }

            StringsContent stringsData = CreateStringsData(this.ClassName, ReadStringsFile(stringsFilePath));

            string[] strings = stringsData.Strings.Select(s => s.Value).ToArray();

            if (!Directory.Exists(jsonFilePath.VolumeAndDirectory))
            {
                Directory.CreateDirectory(jsonFilePath.VolumeAndDirectory);
            }

            WriteJsonFile(jsonFilePath, strings);

            if (!Directory.Exists(csFilePath.VolumeAndDirectory))
            {
                Directory.CreateDirectory(csFilePath.VolumeAndDirectory);
            }

            using (TextWriter writer = new StreamWriter(csFilePath))
            {
                WriteCsOutput(writer, stringsData);
            }
        }
コード例 #5
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);
        }
コード例 #6
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;
        }
コード例 #7
0
        private StringsContent CreateStringsData(string className, Dictionary<string, string> stringDict)
        {
            StringsContent stringsData = new StringsContent();

            stringsData.ClassName = className;
            stringsData.Strings = new List<StringsContent.String>();
            stringsData.Namespace = this.Namespace;

            foreach (var pair in stringDict)
            {
                StringsContent.String d = new StringsContent.String();

                d.Name = pair.Key;
                d.Value = pair.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;
        }
コード例 #8
0
        private void WriteCsOutput(TextWriter textWriter, StringsContent stringsData)
        {
            CSharpStreamWriter writer = new CSharpStreamWriter(textWriter);

            writer.WriteLine("//");
            writer.WriteLine("// This file was generated on {{0}}.", DateTime.Now);
            writer.WriteLine("//");
            writer.WriteLine();
            writer.WriteLine("using System;");
            writer.WriteLine();
            writer.WriteLine("namespace {{0}}", stringsData.Namespace);
            writer.WriteLine("{");
            writer.WriteLine("public class {{0}}", stringsData.ClassName);
            writer.WriteLine("{");
            writer.WriteLine("private string[] strings;");
            writer.WriteLine();
            writer.WriteLine("public {{0}}(string[] strings)", stringsData.ClassName);
            writer.WriteLine("{");
            writer.WriteLine("this.strings = strings;");
            writer.WriteLine("}");
            writer.WriteLine();

            for (int i = 0; i < stringsData.Strings.Count; i++)
            {
                StringsContent.String s = stringsData.Strings[i];

                if (s.ArgCount == 0)
                {
                    writer.WriteLine("public string {{0}} { get { return strings[{{1}}]; } }",
                        s.Name, i);
                }
                else
                {
                    StringBuilder sb1 = new StringBuilder();
                    StringBuilder sb2 = new StringBuilder();

                    for (int j = 0; j < s.ArgCount; j++)
                    {
                        sb1.Append("arg" + j.ToString());
                        sb2.Append("object arg" + j.ToString());

                        if (j < s.ArgCount - 1)
                        {
                            sb1.Append(", ");
                            sb2.Append(", ");
                        }
                    }

                    writer.WriteLine("public string {{0}}({{1}}) { return String.Format(strings[{{2}}], {{3}}); }",
                        s.Name, sb2.ToString(), i, sb1.ToString());
                }
            }

            writer.WriteLine("}");
            writer.WriteLine("}");
        }