From f40ba2cb61e79df75f12d35c47d38a2c7b974979 Mon Sep 17 00:00:00 2001 From: ezsh <ezsh.junk@gmail.com> Date: Mon, 18 May 2020 16:12:57 +0200 Subject: [PATCH] Strip JS comments for Twine JS generation by MSBuild --- devTools/FC.targets | 34 ++++++++++++++++++++++++++++++++++ fc-pregmod.proj | 6 +++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/devTools/FC.targets b/devTools/FC.targets index e379da0de25..55d1d19f4bb 100644 --- a/devTools/FC.targets +++ b/devTools/FC.targets @@ -47,6 +47,40 @@ </Task> </UsingTask> + <!-- https://stackoverflow.com/questions/3524317/regex-to-strip-line-comments-from-c-sharp/3524689#3524689 --> + <UsingTask TaskName="StripComments" TaskFactory="RoslynCodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll"> + <ParameterGroup> + <InputFilename ParameterType="System.String" Required="true" /> + <OutputFilename ParameterType="System.String" Required="true" /> + </ParameterGroup> + <Task> + <Using Namespace="System" /> + <Using Namespace="System.IO" /> + <Using Namespace="System.Text.RegularExpressions" /> + <Code Type="Fragment" Language="cs"> + <![CDATA[ + var blockComments = @"/\*(.*?)\*/"; + var lineComments = @"//(.*?)\r?\n"; + var strings = @"""((\\[^\n]|[^""\n])*)"""; + var verbatimStrings = @"@(""[^""]*"")+"; + File.WriteAllText( + OutputFilename, + Regex.Replace(File.ReadAllText(InputFilename), + blockComments + "|" + lineComments + "|" + strings + "|" + verbatimStrings, + me => { + if (me.Value.StartsWith("/*") || me.Value.StartsWith("//")) + return me.Value.StartsWith("//") ? "\n" : ""; + // Keep the literal strings + return me.Value; + }, + RegexOptions.Singleline + ) + ); + ]]> + </Code> + </Task> + </UsingTask> + <UsingTask TaskName="GetToolPath" TaskFactory="RoslynCodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll" > <ParameterGroup> <ToolName Required="true" /> diff --git a/fc-pregmod.proj b/fc-pregmod.proj index c2e94f8547e..c9b9ea7d66f 100644 --- a/fc-pregmod.proj +++ b/fc-pregmod.proj @@ -89,7 +89,11 @@ <ItemGroup> <jsFiles Include=".\js\**\*.js;.\src\**\*.js" Exclude=".\src\art\assistantArt.js"/> <!-- will be sorted aphabetically --> </ItemGroup> - <ConcatFiles Inputs="@(jsFiles)" BaseDir="$(MSBuildProjectDirectory)" Output="$(MSBuildProjectDirectory)\devNotes\twine JS.txt"/> + <ConcatFiles Inputs="@(jsFiles)" BaseDir="$(MSBuildProjectDirectory)" Output="$(MSBuildProjectDirectory)\devNotes\twine JS.raw"/> + <StripComments + InputFilename="$(MSBuildProjectDirectory)\devNotes\twine JS.raw" + OutputFilename="$(MSBuildProjectDirectory)\devNotes\twine JS.txt" + /> </Target> <Target Name="Twine" DependsOnTargets="TwineCSS;TwineJS"/> -- GitLab