From ff52cee22da9aa65e9ef60d29a6dd9fc1c4fa74a Mon Sep 17 00:00:00 2001 From: Konstantin Diachenko Date: Mon, 2 Mar 2020 14:44:38 +0300 Subject: [PATCH] Version 0.2.16. Better translation support of interpolated strings. --- .../CSharpToCppTransformer.cs | 25 +++++++++++-------- ...Expressions.Transformer.CSharpToCpp.csproj | 4 +-- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/csharp/Platform.RegularExpressions.Transformer.CSharpToCpp/CSharpToCppTransformer.cs b/csharp/Platform.RegularExpressions.Transformer.CSharpToCpp/CSharpToCppTransformer.cs index 4ff1a86..b40a397 100644 --- a/csharp/Platform.RegularExpressions.Transformer.CSharpToCpp/CSharpToCppTransformer.cs +++ b/csharp/Platform.RegularExpressions.Transformer.CSharpToCpp/CSharpToCppTransformer.cs @@ -284,14 +284,14 @@ public class CSharpToCppTransformer : TextTransformer // Assert::ExpectException (new Regex(@"(Assert)\.Throws"), "$1::ExpectException", 0), // $"Argument {argumentName} is null." - // ((std::string)"Argument ").append(argumentName).append(" is null.").data() - (new Regex(@"\$""(?(\\""|[^""\r\n])*){(?[_a-zA-Z0-9]+)}(?(\\""|[^""\r\n])*)"""), "((std::string)$\"${left}\").append(${expression}).append(\"${right}\").data()", 10), + // std::string("Argument ").append(Platform::Converters::To(argumentName)).append(" is null.").data() + (new Regex(@"\$""(?(\\""|[^""\r\n])*){(?[_a-zA-Z0-9]+)}(?(\\""|[^""\r\n])*)"""), "std::string($\"${left}\").append(Platform::Converters::To(${expression})).append(\"${right}\").data()", 10), // $" // " (new Regex(@"\$"""), "\"", 0), - // ((std::string)((std::string)"[").append(Minimum).append(", ").data()).append(Maximum).append("]").data() - // ((std::string)"[").append(Minimum).append(", ").append(Maximum).append("]").data() - (new Regex(@"\(\(std::string\)(?\(\(std::string\)""(\\""|[^""])*""\)(\.append\([^)\n]+\))+)\.data\(\)\)\.append"), "${begin}.append", 10), + // std::string(std::string("[").append(Platform::Converters::To(Minimum)).append(", ").data()).append(Platform::Converters::To(Maximum)).append("]").data() + // std::string("[").append(Platform::Converters::To(Minimum)).append(", ").append(Platform::Converters::To(Maximum)).append("]").data() + (new Regex(@"std::string\((?std::string\(""(\\""|[^""])*""\)(\.append\((Platform::Converters::To\([^)\n]+\)|[^)\n]+)\))+)\.data\(\)\)\.append"), "${begin}.append", 10), // Console.WriteLine("...") // printf("...\n") (new Regex(@"Console\.WriteLine\(""([^""\r\n]+)""\)"), "printf(\"$1\\n\")", 0), @@ -380,14 +380,14 @@ public class CSharpToCppTransformer : TextTransformer // sb.data() (new Regex(@"(?/\*~(?[a-zA-Z0-9]+)~\*/)(?.|\n)(?((?~\*/)(.|\n))*?)\k\.ToString\(\)"), "${scope}${separator}${before}${variable}.data()", 10), // sb.AppendLine(argument) - // sb.append(argument).append('\n') - (new Regex(@"(?/\*~(?[a-zA-Z0-9]+)~\*/)(?.|\n)(?((?~\*/)(.|\n))*?)\k\.AppendLine\((?[^\),\r\n]+)\)"), "${scope}${separator}${before}${variable}.append(${argument}).append(1, '\\n')", 10), + // sb.append(Platform::Converters::To(argument)).append(1, '\n') + (new Regex(@"(?/\*~(?[a-zA-Z0-9]+)~\*/)(?.|\n)(?((?~\*/)(.|\n))*?)\k\.AppendLine\((?[^\),\r\n]+)\)"), "${scope}${separator}${before}${variable}.append(Platform::Converters::To(${argument})).append(1, '\\n')", 10), // sb.Append('\t', level); // sb.append(level, '\t'); (new Regex(@"(?/\*~(?[a-zA-Z0-9]+)~\*/)(?.|\n)(?((?~\*/)(.|\n))*?)\k\.Append\('(?[^'\r\n]+)', (?[^\),\r\n]+)\)"), "${scope}${separator}${before}${variable}.append(${count}, '${character}')", 10), // sb.Append(argument) - // sb.append(argument) - (new Regex(@"(?/\*~(?[a-zA-Z0-9]+)~\*/)(?.|\n)(?((?~\*/)(.|\n))*?)\k\.Append\((?[^\),\r\n]+)\)"), "${scope}${separator}${before}${variable}.append(${argument})", 10), + // sb.append(Platform::Converters::To(argument)) + (new Regex(@"(?/\*~(?[a-zA-Z0-9]+)~\*/)(?.|\n)(?((?~\*/)(.|\n))*?)\k\.Append\((?[^\),\r\n]+)\)"), "${scope}${separator}${before}${variable}.append(Platform::Converters::To(${argument}))", 10), // Remove scope borders. // /*~sb~*/ // @@ -459,8 +459,8 @@ public class CSharpToCppTransformer : TextTransformer // throw std::invalid_argument(((std::string)"Invalid ").append(argumentName).append(" argument: ").append(message).append(".")); (new Regex(@"throw new ArgumentException\((?[a-zA-Z]*[Mm]essage[a-zA-Z]*(\(\))?), (?[a-zA-Z]*[Aa]rgument[a-zA-Z]*)\);"), "throw std::invalid_argument(((std::string)\"Invalid \").append(${argument}).append(\" argument: \").append(${message}).append(\".\"));", 0), // throw new ArgumentOutOfRangeException(argumentName, argumentValue, messageBuilder()); - // throw std::invalid_argument(((std::string)"Value [").append(std::to_string(argumentValue)).append("] of argument [").append(argumentName).append("] is out of range: ").append(messageBuilder()).append(".")); - (new Regex(@"throw new ArgumentOutOfRangeException\((?[a-zA-Z]*[Aa]rgument[a-zA-Z]*([Nn]ame[a-zA-Z]*)?), (?[a-zA-Z]*[Aa]rgument[a-zA-Z]*([Vv]alue[a-zA-Z]*)?), (?[a-zA-Z]*[Mm]essage[a-zA-Z]*(\(\))?)\);"), "throw std::invalid_argument(((std::string)\"Value [\").append(std::to_string(${argumentValue})).append(\"] of argument [\").append(${argument}).append(\"] is out of range: \").append(${message}).append(\".\"));", 0), + // throw std::invalid_argument(((std::string)"Value [").append(Platform::Converters::To(argumentValue)).append("] of argument [").append(argumentName).append("] is out of range: ").append(messageBuilder()).append(".")); + (new Regex(@"throw new ArgumentOutOfRangeException\((?[a-zA-Z]*[Aa]rgument[a-zA-Z]*([Nn]ame[a-zA-Z]*)?), (?[a-zA-Z]*[Aa]rgument[a-zA-Z]*([Vv]alue[a-zA-Z]*)?), (?[a-zA-Z]*[Mm]essage[a-zA-Z]*(\(\))?)\);"), "throw std::invalid_argument(((std::string)\"Value [\").append(Platform::Converters::To(${argumentValue})).append(\"] of argument [\").append(${argument}).append(\"] is out of range: \").append(${message}).append(\".\"));", 0), // throw new NotSupportedException(); // throw std::logic_error("Not supported exception."); (new Regex(@"throw new NotSupportedException\(\);"), "throw std::logic_error(\"Not supported exception.\");", 0), @@ -480,6 +480,9 @@ public class CSharpToCppTransformer : TextTransformer // (method(expression)) // method(expression) (new Regex(@"(?(\(| ))\((?[a-zA-Z0-9_\->\*:]+)\((?((?\()|(?<-parenthesis>\))|[a-zA-Z0-9_\->\*:]*)+)(?(parenthesis)(?!))\)\)(?(,| |;|\)))"), "${firstSeparator}${method}(${expression})${lastSeparator}", 0), + // .append(".") + // .append(1, '.'); + (new Regex(@"\.append\(""([^\\""]|\\[^""])""\)"), ".append(1, '$1')", 0), // return ref _elements[node]; // return &_elements[node]; (new Regex(@"return ref ([_a-zA-Z0-9]+)\[([_a-zA-Z0-9\*]+)\];"), "return &$1[$2];", 0), diff --git a/csharp/Platform.RegularExpressions.Transformer.CSharpToCpp/Platform.RegularExpressions.Transformer.CSharpToCpp.csproj b/csharp/Platform.RegularExpressions.Transformer.CSharpToCpp/Platform.RegularExpressions.Transformer.CSharpToCpp.csproj index 16b75c0..69ec891 100644 --- a/csharp/Platform.RegularExpressions.Transformer.CSharpToCpp/Platform.RegularExpressions.Transformer.CSharpToCpp.csproj +++ b/csharp/Platform.RegularExpressions.Transformer.CSharpToCpp/Platform.RegularExpressions.Transformer.CSharpToCpp.csproj @@ -4,7 +4,7 @@ LinksPlatform's Platform.RegularExpressions.Transformer.CSharpToCpp Class Library Konstantin Diachenko Platform.RegularExpressions.Transformer.CSharpToCpp - 0.2.15 + 0.2.16 Konstantin Diachenko net472;netstandard2.0;netstandard2.1 Platform.RegularExpressions.Transformer.CSharpToCpp @@ -24,7 +24,7 @@ true snupkg latest - Platform.RegularExpressions.Transformer dependency updated from 0.3.0 to 0.3.1. + Better translation support of interpolated strings.