diff --git a/Tools/ProjectConverter/Converter.cs b/Tools/ProjectConverter/Converter.cs index a4fa2b54..10ee2808 100644 --- a/Tools/ProjectConverter/Converter.cs +++ b/Tools/ProjectConverter/Converter.cs @@ -19,8 +19,17 @@ namespace ProjectConverter "Microsoft.Xna.GameStudio.ContentPipelineExtensions.targets"; protected ProjectPath CurrentProject { get; private set; } + + /// + /// The Postfix is used as a extension for a project file name + /// public abstract string Postfix { get; } + /// + /// The Name is used to identify the converter + /// + public abstract string Name { get; } + #region ConvertAllProjects public void ConvertAllProjects(string solutionFilepath) { diff --git a/Tools/ProjectConverter/Platforms/AbstractXna2AnxConverter.cs b/Tools/ProjectConverter/Platforms/AbstractXna2AnxConverter.cs new file mode 100644 index 00000000..4221df01 --- /dev/null +++ b/Tools/ProjectConverter/Platforms/AbstractXna2AnxConverter.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ProjectConverter.Platforms +{ + public abstract class AbstractXna2AnxConverter : Converter + { + protected internal List csharpFiles = new List(); + + public override string Postfix + { + get { return string.Empty; } + } + + protected override void ConvertItemGroup(System.Xml.Linq.XElement element) + { + var groups = element.Elements().ToList(); + foreach (var group in groups) + { + if (group.Name.LocalName.Equals("compile", StringComparison.InvariantCultureIgnoreCase)) + { + var attributes = group.Attributes().ToList(); + foreach (var attribute in attributes) + { + if (attribute.Name.LocalName.Equals("include", StringComparison.InvariantCultureIgnoreCase)) + { + if (attribute.Value.EndsWith(".cs", true, System.Globalization.CultureInfo.InvariantCulture)) + { + csharpFiles.Add(attribute.Value); + } + } + } + } + } + + base.ConvertItemGroup(element); + } + + protected override void PostConvert() + { + foreach (var file in csharpFiles) + { + string target = string.Empty; + ConvertUsingDirectives(file, ref target); + } + + base.PostConvert(); + } + + protected abstract void ConvertUsingDirectives(string file, ref string target); + + protected void ConvertUsingDirectivesImpl(ref string content, ref string target, string sourceNamespace, string targetNamespace, string[] namespaces) + { + int lastPos = 0; + int currentPos = -1; + int endPos = 0; + int tokenLength = 5; + + do + { + currentPos = content.IndexOf("using", currentPos + 1, StringComparison.InvariantCultureIgnoreCase); + if (currentPos >= 0) + { + endPos = NextTokenPos(ref content, currentPos + tokenLength, ref tokenLength); + string directive = content.Substring(currentPos + 5, endPos - currentPos - 5); + + target += content.Substring(lastPos, (currentPos + 6) - lastPos); + + if (namespaces.Contains(directive.Trim())) + { + directive = directive.Replace(sourceNamespace, targetNamespace); + } + + target += directive; + lastPos = endPos; + } + } while (currentPos >= 0); + + target += content.Substring(lastPos); + } + + private int NextTokenPos(ref string content, int startPos, ref int tokenLength) + { + int semicolonPos = content.IndexOf(";", startPos, StringComparison.InvariantCultureIgnoreCase); + int usingPos = content.IndexOf("using", startPos, StringComparison.InvariantCultureIgnoreCase); + int endPos = content.Length; + int ret = 0; + + if (semicolonPos < 0) semicolonPos = int.MaxValue; + if (usingPos < 0) usingPos = int.MaxValue; + + if (semicolonPos < usingPos) + { + ret = semicolonPos; + tokenLength = 1; + } + else + { + ret = usingPos; + tokenLength = 5; + } + + if (ret < endPos) + { + return ret; + } + + tokenLength = endPos - startPos; + return endPos; + } + } +} diff --git a/Tools/ProjectConverter/Platforms/AnxConverter.cs b/Tools/ProjectConverter/Platforms/AnxConverter.cs new file mode 100644 index 00000000..cbe21473 --- /dev/null +++ b/Tools/ProjectConverter/Platforms/AnxConverter.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ProjectConverter.Platforms +{ + public class AnxConverter : AbstractXna2AnxConverter + { + private readonly string[] xnaNamespaces = new string[] { "Microsoft.XNA.Framework", + "Microsoft.XNA.Framework.Avatar", + "Microsoft.XNA.Framework.Content.Pipeline.AudioImporters", + "Microsoft.XNA.Framework.Content.Pipeline", + "Microsoft.XNA.Framework.Content.Pipeline.EffectImporter", + "Microsoft.XNA.Framework.Content.Pipeline.FBXImporter", + "Microsoft.XNA.Framework.Content.Pipeline.TextureImporter", + "Microsoft.XNA.Framework.Content.Pipeline.VideoImporters", + "Microsoft.XNA.Framework.Content.Pipeline.XImporter", + "Microsoft.XNA.Framework.Game", + "Microsoft.XNA.Framework.GamerServices", + "Microsoft.XNA.Framework.Graphics", + "Microsoft.XNA.Framework.Input", + "Microsoft.XNA.Framework.Input.Touch", + "Microsoft.XNA.Framework.Net", + "Microsoft.XNA.Framework.Storage", + "Microsoft.XNA.Framework.Video", + "Microsoft.XNA.Framework.Xact", + }; + + public override string Name + { + get { return "anx2xna"; } + } + + protected override void ConvertUsingDirectives(string file, ref string target) + { + string content = System.IO.File.ReadAllText(System.IO.Path.Combine(CurrentProject.FullSourceDirectoryPath, file)); + ConvertUsingDirectivesImpl(ref content, ref target, "Microsoft.XNA.Framework", "ANX.Framework", xnaNamespaces); + } + } +} diff --git a/Tools/ProjectConverter/Platforms/LinuxConverter.cs b/Tools/ProjectConverter/Platforms/LinuxConverter.cs index b84793dd..f5ae2404 100644 --- a/Tools/ProjectConverter/Platforms/LinuxConverter.cs +++ b/Tools/ProjectConverter/Platforms/LinuxConverter.cs @@ -12,12 +12,14 @@ namespace ProjectConverter.Platforms { public override string Postfix { - get - { - return "Linux"; - } + get { return "Linux"; } } + public override string Name + { + get { return "linux"; } + } + #region ConvertImport protected override void ConvertImport(XElement element, XAttribute projectAttribute) { diff --git a/Tools/ProjectConverter/Platforms/MetroConverter.cs b/Tools/ProjectConverter/Platforms/MetroConverter.cs index e1adfe25..6c85d0d6 100644 --- a/Tools/ProjectConverter/Platforms/MetroConverter.cs +++ b/Tools/ProjectConverter/Platforms/MetroConverter.cs @@ -22,6 +22,11 @@ namespace ProjectConverter.Platforms get { return "WindowsMetro"; } } + public override string Name + { + get { return "windowsmetro"; } + } + #region ConvertImport protected override void ConvertImport(XElement element, XAttribute projectAttribute) { diff --git a/Tools/ProjectConverter/Platforms/PsVitaConverter.cs b/Tools/ProjectConverter/Platforms/PsVitaConverter.cs index 8b334cee..4502320c 100644 --- a/Tools/ProjectConverter/Platforms/PsVitaConverter.cs +++ b/Tools/ProjectConverter/Platforms/PsVitaConverter.cs @@ -11,12 +11,15 @@ namespace ProjectConverter.Platforms { public override string Postfix { - get - { - return "PSVita"; - } + get { return "PSVita"; } } + + public override string Name + { + get { return "PSVita"; } + } + #region ConvertImport protected override void ConvertImport(XElement element, XAttribute projectAttribute) { diff --git a/Tools/ProjectConverter/Platforms/XnaConverter.cs b/Tools/ProjectConverter/Platforms/XnaConverter.cs new file mode 100644 index 00000000..621f1ad3 --- /dev/null +++ b/Tools/ProjectConverter/Platforms/XnaConverter.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ProjectConverter.Platforms +{ + public class XnaConverter : AbstractXna2AnxConverter + { + private readonly string[] anxNamespaces = new string[] { "ANX.Framework", + "ANX.Framework.Avatar", + "ANX.Framework.Content.Pipeline.AudioImporters", + "ANX.Framework.Content.Pipeline", + "ANX.Framework.Content.Pipeline.EffectImporter", + "ANX.Framework.Content.Pipeline.FBXImporter", + "ANX.Framework.Content.Pipeline.TextureImporter", + "ANX.Framework.Content.Pipeline.VideoImporters", + "ANX.Framework.Content.Pipeline.XImporter", + "ANX.Framework.Game", + "ANX.Framework.GamerServices", + "ANX.Framework.Graphics", + "ANX.Framework.Input", + "ANX.Framework.Input.Touch", + "ANX.Framework.Net", + "ANX.Framework.Storage", + "ANX.Framework.Video", + "ANX.Framework.Xact", + }; + + public override string Name + { + get { return "xna2anx"; } + } + + protected override void ConvertUsingDirectives(string file, ref string target) + { + string content = System.IO.File.ReadAllText(System.IO.Path.Combine(CurrentProject.FullSourceDirectoryPath, file)); + ConvertUsingDirectivesImpl(ref content, ref target, "ANX.Framework", "Microsoft.XNA.Framework", anxNamespaces); + } + } +} diff --git a/Tools/ProjectConverter/Program.cs b/Tools/ProjectConverter/Program.cs index ed452ae3..fb07d9b4 100644 --- a/Tools/ProjectConverter/Program.cs +++ b/Tools/ProjectConverter/Program.cs @@ -18,7 +18,9 @@ namespace ProjectConverter { new LinuxConverter(), new MetroConverter(), - new PsVitaConverter() + new PsVitaConverter(), + new AnxConverter(), + new XnaConverter(), }; [STAThread] @@ -58,7 +60,7 @@ namespace ProjectConverter string fileExt = Path.GetExtension(file).ToLowerInvariant(); foreach (Converter converter in Converters) { - if (switches.Contains(converter.Postfix.ToLowerInvariant())) + if (switches.Contains(converter.Name.ToLowerInvariant())) { switch (fileExt) { diff --git a/Tools/ProjectConverter/ProjectConverter.csproj b/Tools/ProjectConverter/ProjectConverter.csproj index 96354e6a..18b251f9 100644 --- a/Tools/ProjectConverter/ProjectConverter.csproj +++ b/Tools/ProjectConverter/ProjectConverter.csproj @@ -48,6 +48,9 @@ + + + diff --git a/Tools/ProjectConverter/Properties/AssemblyInfo.cs b/Tools/ProjectConverter/Properties/AssemblyInfo.cs index dd4ff349..9ad90467 100644 --- a/Tools/ProjectConverter/Properties/AssemblyInfo.cs +++ b/Tools/ProjectConverter/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.2.1.*")] -[assembly: AssemblyFileVersion("1.2.1.0")] +[assembly: AssemblyVersion("1.2.2.*")] +[assembly: AssemblyFileVersion("1.2.2.0")] diff --git a/build/MakeAnxFramework.cmd b/build/MakeAnxFramework.cmd index cead2000..18a21f58 100644 --- a/build/MakeAnxFramework.cmd +++ b/build/MakeAnxFramework.cmd @@ -3,8 +3,8 @@ setlocal set ProgRoot=%ProgramFiles% if not "%ProgramFiles(x86)%" == "" set ProgRoot=%ProgramFiles(x86)% -if EXIST "%ProgRoot%\Microsoft Visual Studio 11.0" goto vs2011 -if EXIST "%ProgRoot%\Microsoft Visual Studio 10.0" goto vs2010 +if EXIST "%ProgRoot%\Microsoft Visual Studio 11.0\vc\vcvarsall.bat" goto vs2011 +if EXIST "%ProgRoot%\Microsoft Visual Studio 10.0\vc\vcvarsall.bat" goto vs2010 goto error_msg :vs2011