diff --git a/devTools/FC.targets b/devTools/FC.targets index e379da0de255cc30b7a6a1303a76cc65e286729a..55d1d19f4bb25c18e409c1df30054d429beecb7e 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 c2e94f8547ede5f390bcbd9c18ec9c98af211a37..c9b9ea7d66fcd9ef2200e45a7c115a0993c415f3 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"/>