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); } }
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); }
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("}"); }
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); } }
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); }
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; }
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; }