Skip to content

Commit 43042a2

Browse files
committed
Version 0.0.35. Added support for StringBuilder translation.
1 parent 588538f commit 43042a2

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

Platform.RegularExpressions.Transformer.CSharpToCpp/CSharpToCppTransformer.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,30 @@ public class CSharpToCppTransformer : Transformer
222222
// TElement path[MaxPath] = { {0} };
223223
(new Regex(@"(\r?\n[\t ]+)[a-zA-Z0-9]+ ([a-zA-Z0-9]+) = new ([a-zA-Z0-9]+)\[([_a-zA-Z0-9]+)\];"), "$1$3 $2[$4] = { {0} };", null, 0),
224224
// Insert scope borders.
225+
// auto added = new StringBuilder();
226+
// /*~sb~*/std::string added;
227+
(new Regex(@"auto (?<variable>[a-zA-Z0-9]+) = new StringBuilder\(\);"), "/*~${variable}~*/std::string ${variable};", null, 0),
228+
// static void Indent(StringBuilder sb, int level)
229+
// static void Indent(/*~sb~*/StringBuilder sb, int level)
230+
(new Regex(@"(?<start>, |\()StringBuilder (?<variable>[a-zA-Z0-9]+)(?<end>,|\))"), "${start}/*~${variable}~*/std::string ${variable}${end}", null, 0),
231+
// Inside the scope of ~!added!~ replace:
232+
// sb.ToString()
233+
// sb.data()
234+
(new Regex(@"(?<scope>/\*~(?<variable>[a-zA-Z0-9]+)~\*/)(?<separator>.|\n)(?<before>((?<!/\*~\k<variable>~\*/)(.|\n))*?)\k<variable>\.ToString\(\)"), "${scope}${separator}${before}${variable}.data()", null, 10),
235+
// sb.AppendLine(argument)
236+
// sb.append(argument).append('\n')
237+
(new Regex(@"(?<scope>/\*~(?<variable>[a-zA-Z0-9]+)~\*/)(?<separator>.|\n)(?<before>((?<!/\*~\k<variable>~\*/)(.|\n))*?)\k<variable>\.AppendLine\((?<argument>[^\),\r\n]+)\)"), "${scope}${separator}${before}${variable}.append(${argument}).append('\\n')", null, 10),
238+
// sb.Append('\t', level);
239+
// sb.append(level, '\t');
240+
(new Regex(@"(?<scope>/\*~(?<variable>[a-zA-Z0-9]+)~\*/)(?<separator>.|\n)(?<before>((?<!/\*~\k<variable>~\*/)(.|\n))*?)\k<variable>\.Append\('(?<character>[^'\r\n]+)', (?<count>[^\),\r\n]+)\)"), "${scope}${separator}${before}${variable}.append(${count}, '${character}')", null, 10),
241+
// sb.Append(argument)
242+
// sb.append(argument)
243+
(new Regex(@"(?<scope>/\*~(?<variable>[a-zA-Z0-9]+)~\*/)(?<separator>.|\n)(?<before>((?<!/\*~\k<variable>~\*/)(.|\n))*?)\k<variable>\.Append\((?<argument>[^\),\r\n]+)\)"), "${scope}${separator}${before}${variable}.append(${argument})", null, 10),
244+
// Remove scope borders.
245+
// /*~sb~*/
246+
//
247+
(new Regex(@"/\*~(?<pointer>[a-zA-Z0-9]+)~\*/"), "", null, 0),
248+
// Insert scope borders.
225249
// auto added = new HashSet<TElement>();
226250
// ~!added!~std::unordered_set<TElement> added;
227251
(new Regex(@"auto (?<variable>[a-zA-Z0-9]+) = new HashSet<(?<element>[a-zA-Z0-9]+)>\(\);"), "~!${variable}!~std::unordered_set<${element}> ${variable};", null, 0),

Platform.RegularExpressions.Transformer.CSharpToCpp/Platform.RegularExpressions.Transformer.CSharpToCpp.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<Description>LinksPlatform's Platform.RegularExpressions.Transformer.CSharpToCpp Class Library</Description>
55
<Copyright>Konstantin Diachenko</Copyright>
66
<AssemblyTitle>Platform.RegularExpressions.Transformer.CSharpToCpp</AssemblyTitle>
7-
<VersionPrefix>0.0.34</VersionPrefix>
7+
<VersionPrefix>0.0.35</VersionPrefix>
88
<Authors>Konstantin Diachenko</Authors>
99
<TargetFrameworks>net471;netstandard2.0;netstandard2.1</TargetFrameworks>
1010
<AssemblyName>Platform.RegularExpressions.Transformer.CSharpToCpp</AssemblyName>
@@ -24,7 +24,7 @@
2424
<IncludeSymbols>true</IncludeSymbols>
2525
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
2626
<LangVersion>latest</LangVersion>
27-
<PackageReleaseNotes>const char* allows null as C# string does, it also immutable like C# string, it should be a better translation for now.</PackageReleaseNotes>
27+
<PackageReleaseNotes>Added support for StringBuilder translation.</PackageReleaseNotes>
2828
</PropertyGroup>
2929

3030
<ItemGroup Condition="$(TargetFramework.StartsWith('net4')) AND '$(MSBuildRuntimeType)' == 'Core' AND '$(OS)' != 'Windows_NT'">

0 commit comments

Comments
 (0)