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