From 41e87c3f0b32e7b10b8c4d2c98c1ff981dd2a18a Mon Sep 17 00:00:00 2001 From: Jesper Niedermann Date: Thu, 4 Oct 2018 22:36:52 +0200 Subject: [PATCH 1/6] Moved old projects, created new ones --- .../LanguageTypeAdapter.cs | 0 .../Markdig.SyntaxHighlighting.csproj | 66 +++++++++ .../Markdig.SyntaxHighlighting.nuspec | 0 .../Properties/AssemblyInfo.cs | 0 .../SyntaxHighlightingCodeBlockRenderer.cs | 10 +- .../SyntaxHighlightingExtension.cs | 0 .../SyntaxHighlightingExtensions.cs | 4 +- .../packages.config | 0 .../Example/CodeSample.cs | 0 .../Example/README.md | 0 .../Example/_template.html | 0 .../Example/expected.html | 0 .../Example/gfm.css | 0 .../IntegrationTests.cs | 110 +++++++-------- .../LanguageTypeAdapterTests.cs | 0 .../Markdig.SyntaxHighlighting.Tests.csproj | 123 +++++++++++++++++ .../Properties/AssemblyInfo.cs | 0 ...yntaxHighlightingCodeBlockRendererTests.cs | 0 .../SyntaxHighlightingExtensionsTests.cs | 0 .../packages.config | 0 .../Markdig.SyntaxHighlighting.Tests.csproj | 130 +----------------- src/Markdig.SyntaxHighlighting.sln | 27 ++-- ...Markdig.SyntaxHighlighting.sln.DotSettings | 6 + .../Markdig.SyntaxHighlighting.csproj | 69 +--------- 24 files changed, 282 insertions(+), 263 deletions(-) rename src/{Markdig.SyntaxHighlighting => Markdig.SyntaxHighlighting.Portable}/LanguageTypeAdapter.cs (100%) create mode 100644 src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.csproj rename src/{Markdig.SyntaxHighlighting => Markdig.SyntaxHighlighting.Portable}/Markdig.SyntaxHighlighting.nuspec (100%) rename src/{Markdig.SyntaxHighlighting => Markdig.SyntaxHighlighting.Portable}/Properties/AssemblyInfo.cs (100%) rename src/{Markdig.SyntaxHighlighting => Markdig.SyntaxHighlighting.Portable}/SyntaxHighlightingCodeBlockRenderer.cs (99%) rename src/{Markdig.SyntaxHighlighting => Markdig.SyntaxHighlighting.Portable}/SyntaxHighlightingExtension.cs (100%) rename src/{Markdig.SyntaxHighlighting => Markdig.SyntaxHighlighting.Portable}/SyntaxHighlightingExtensions.cs (99%) rename src/{Markdig.SyntaxHighlighting => Markdig.SyntaxHighlighting.Portable}/packages.config (100%) rename src/{Markdig.SyntaxHighlighting.Tests => Markdig.SyntaxHighlighting.Tests.old}/Example/CodeSample.cs (100%) rename src/{Markdig.SyntaxHighlighting.Tests => Markdig.SyntaxHighlighting.Tests.old}/Example/README.md (100%) rename src/{Markdig.SyntaxHighlighting.Tests => Markdig.SyntaxHighlighting.Tests.old}/Example/_template.html (100%) rename src/{Markdig.SyntaxHighlighting.Tests => Markdig.SyntaxHighlighting.Tests.old}/Example/expected.html (100%) rename src/{Markdig.SyntaxHighlighting.Tests => Markdig.SyntaxHighlighting.Tests.old}/Example/gfm.css (100%) rename src/{Markdig.SyntaxHighlighting.Tests => Markdig.SyntaxHighlighting.Tests.old}/IntegrationTests.cs (96%) rename src/{Markdig.SyntaxHighlighting.Tests => Markdig.SyntaxHighlighting.Tests.old}/LanguageTypeAdapterTests.cs (100%) create mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/Markdig.SyntaxHighlighting.Tests.csproj rename src/{Markdig.SyntaxHighlighting.Tests => Markdig.SyntaxHighlighting.Tests.old}/Properties/AssemblyInfo.cs (100%) rename src/{Markdig.SyntaxHighlighting.Tests => Markdig.SyntaxHighlighting.Tests.old}/SyntaxHighlightingCodeBlockRendererTests.cs (100%) rename src/{Markdig.SyntaxHighlighting.Tests => Markdig.SyntaxHighlighting.Tests.old}/SyntaxHighlightingExtensionsTests.cs (100%) rename src/{Markdig.SyntaxHighlighting.Tests => Markdig.SyntaxHighlighting.Tests.old}/packages.config (100%) diff --git a/src/Markdig.SyntaxHighlighting/LanguageTypeAdapter.cs b/src/Markdig.SyntaxHighlighting.Portable/LanguageTypeAdapter.cs similarity index 100% rename from src/Markdig.SyntaxHighlighting/LanguageTypeAdapter.cs rename to src/Markdig.SyntaxHighlighting.Portable/LanguageTypeAdapter.cs diff --git a/src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.csproj b/src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.csproj new file mode 100644 index 0000000..37477f3 --- /dev/null +++ b/src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.csproj @@ -0,0 +1,66 @@ + + + + + 10.0 + Debug + AnyCPU + {5D1E4E89-83A2-4B14-BB11-DEB3C69665F0} + Library + Properties + Markdig.SyntaxHighlighting + Markdig.SyntaxHighlighting + en-US + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Profile259 + v4.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + Properties\SharedAssemblyInfo.cs + + + + + + + + ..\packages\ColorCode.Portable.1.0.3\lib\portable45-net45+win8+wp8+wpa81\ColorCode.dll + True + + + ..\packages\Markdig.0.11.0\lib\portable40-net40+sl5+win8+wp8+wpa81\Markdig.dll + + + + + + + + \ No newline at end of file diff --git a/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.nuspec b/src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.nuspec similarity index 100% rename from src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.nuspec rename to src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.nuspec diff --git a/src/Markdig.SyntaxHighlighting/Properties/AssemblyInfo.cs b/src/Markdig.SyntaxHighlighting.Portable/Properties/AssemblyInfo.cs similarity index 100% rename from src/Markdig.SyntaxHighlighting/Properties/AssemblyInfo.cs rename to src/Markdig.SyntaxHighlighting.Portable/Properties/AssemblyInfo.cs diff --git a/src/Markdig.SyntaxHighlighting/SyntaxHighlightingCodeBlockRenderer.cs b/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingCodeBlockRenderer.cs similarity index 99% rename from src/Markdig.SyntaxHighlighting/SyntaxHighlightingCodeBlockRenderer.cs rename to src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingCodeBlockRenderer.cs index f82b3a2..3b2f76b 100644 --- a/src/Markdig.SyntaxHighlighting/SyntaxHighlightingCodeBlockRenderer.cs +++ b/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingCodeBlockRenderer.cs @@ -8,12 +8,12 @@ namespace Markdig.SyntaxHighlighting { public class SyntaxHighlightingCodeBlockRenderer : HtmlObjectRenderer { - private readonly CodeBlockRenderer _underlyingRenderer; - private readonly IStyleSheet _customCss; - + private readonly CodeBlockRenderer _underlyingRenderer; + private readonly IStyleSheet _customCss; + public SyntaxHighlightingCodeBlockRenderer(CodeBlockRenderer underlyingRenderer = null, IStyleSheet customCss = null) { - _underlyingRenderer = underlyingRenderer ?? new CodeBlockRenderer(); - _customCss = customCss; + _underlyingRenderer = underlyingRenderer ?? new CodeBlockRenderer(); + _customCss = customCss; } protected override void Write(HtmlRenderer renderer, CodeBlock obj) { diff --git a/src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtension.cs b/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtension.cs similarity index 100% rename from src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtension.cs rename to src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtension.cs diff --git a/src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtensions.cs b/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtensions.cs similarity index 99% rename from src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtensions.cs rename to src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtensions.cs index 5e7ae15..668aced 100644 --- a/src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtensions.cs +++ b/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtensions.cs @@ -1,5 +1,5 @@ -using ColorCode; - +using ColorCode; + namespace Markdig.SyntaxHighlighting { public static class SyntaxHighlightingExtensions { public static MarkdownPipelineBuilder UseSyntaxHighlighting(this MarkdownPipelineBuilder pipeline, IStyleSheet customCss = null) { diff --git a/src/Markdig.SyntaxHighlighting/packages.config b/src/Markdig.SyntaxHighlighting.Portable/packages.config similarity index 100% rename from src/Markdig.SyntaxHighlighting/packages.config rename to src/Markdig.SyntaxHighlighting.Portable/packages.config diff --git a/src/Markdig.SyntaxHighlighting.Tests/Example/CodeSample.cs b/src/Markdig.SyntaxHighlighting.Tests.old/Example/CodeSample.cs similarity index 100% rename from src/Markdig.SyntaxHighlighting.Tests/Example/CodeSample.cs rename to src/Markdig.SyntaxHighlighting.Tests.old/Example/CodeSample.cs diff --git a/src/Markdig.SyntaxHighlighting.Tests/Example/README.md b/src/Markdig.SyntaxHighlighting.Tests.old/Example/README.md similarity index 100% rename from src/Markdig.SyntaxHighlighting.Tests/Example/README.md rename to src/Markdig.SyntaxHighlighting.Tests.old/Example/README.md diff --git a/src/Markdig.SyntaxHighlighting.Tests/Example/_template.html b/src/Markdig.SyntaxHighlighting.Tests.old/Example/_template.html similarity index 100% rename from src/Markdig.SyntaxHighlighting.Tests/Example/_template.html rename to src/Markdig.SyntaxHighlighting.Tests.old/Example/_template.html diff --git a/src/Markdig.SyntaxHighlighting.Tests/Example/expected.html b/src/Markdig.SyntaxHighlighting.Tests.old/Example/expected.html similarity index 100% rename from src/Markdig.SyntaxHighlighting.Tests/Example/expected.html rename to src/Markdig.SyntaxHighlighting.Tests.old/Example/expected.html diff --git a/src/Markdig.SyntaxHighlighting.Tests/Example/gfm.css b/src/Markdig.SyntaxHighlighting.Tests.old/Example/gfm.css similarity index 100% rename from src/Markdig.SyntaxHighlighting.Tests/Example/gfm.css rename to src/Markdig.SyntaxHighlighting.Tests.old/Example/gfm.css diff --git a/src/Markdig.SyntaxHighlighting.Tests/IntegrationTests.cs b/src/Markdig.SyntaxHighlighting.Tests.old/IntegrationTests.cs similarity index 96% rename from src/Markdig.SyntaxHighlighting.Tests/IntegrationTests.cs rename to src/Markdig.SyntaxHighlighting.Tests.old/IntegrationTests.cs index 1c4ef1f..769394f 100644 --- a/src/Markdig.SyntaxHighlighting.Tests/IntegrationTests.cs +++ b/src/Markdig.SyntaxHighlighting.Tests.old/IntegrationTests.cs @@ -1,55 +1,55 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Xunit; - -namespace Markdig.SyntaxHighlighting.Tests -{ - public class IntegrationTests - { - - [Fact] - public void ShouldUseDefaultRendererIfLanguageIsNotIndicated() { - string testString = @" -# This is a test - -``` -{ - ""jsonProperty"": 1 -} -```"; - var pipeline = new MarkdownPipelineBuilder() - .UseAdvancedExtensions() - .UseSyntaxHighlighting() - .Build(); - var html = Markdown.ToHtml(testString, pipeline); - Assert.True(html.Contains("
"));
-            Assert.True(html.Contains("jsonProperty"));
-            Assert.False(html.Contains("lang-"));
-        }
-
-        [Fact]
-        public void ShouldColorizeSyntaxWhenLanguageIsIndicated()
-        {
-            string testString = @"
-# This is a test
-
-```json
-{
-    ""jsonProperty"": 1
-}
-```";
-            var pipeline = new MarkdownPipelineBuilder()
-                .UseAdvancedExtensions()
-                .UseSyntaxHighlighting()
-                .Build();
-            var html = Markdown.ToHtml(testString, pipeline);
-            Assert.True(html.Contains(""));
+            Assert.True(html.Contains("jsonProperty"));
+            Assert.False(html.Contains("lang-"));
+        }
+
+        [Fact]
+        public void ShouldColorizeSyntaxWhenLanguageIsIndicated()
+        {
+            string testString = @"
+# This is a test
+
+```json
+{
+    ""jsonProperty"": 1
+}
+```";
+            var pipeline = new MarkdownPipelineBuilder()
+                .UseAdvancedExtensions()
+                .UseSyntaxHighlighting()
+                .Build();
+            var html = Markdown.ToHtml(testString, pipeline);
+            Assert.True(html.Contains("
+
+  
+  
+  
+    Debug
+    AnyCPU
+    {B0696B7B-33C0-49B3-B8B2-DE07A7FCFBE9}
+    Library
+    Properties
+    Markdig.SyntaxHighlighting.Tests
+    Markdig.SyntaxHighlighting.Tests
+    v4.6.1
+    512
+    
+    
+  
+  
+    true
+    full
+    false
+    bin\Debug\
+    DEBUG;TRACE
+    prompt
+    4
+  
+  
+    pdbonly
+    true
+    bin\Release\
+    TRACE
+    prompt
+    4
+  
+  
+    
+      ..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll
+      True
+    
+    
+      ..\packages\ColorCode.Portable.1.0.3\lib\portable45-net45+win8+wp8+wpa81\ColorCode.dll
+      True
+    
+    
+      ..\packages\Markdig.0.11.0\lib\net40\Markdig.dll
+    
+    
+      ..\packages\Moq.4.5.16\lib\net45\Moq.dll
+      True
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+      ..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll
+      True
+    
+    
+      ..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll
+      True
+    
+    
+      ..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll
+      True
+    
+    
+      ..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll
+      True
+    
+  
+  
+    
+    
+    
+    
+    
+    
+      Properties\SharedAssemblyInfo.cs
+    
+    
+  
+  
+    
+      PreserveNewest
+    
+    
+      Designer
+    
+  
+  
+    
+      PreserveNewest
+    
+    
+      PreserveNewest
+    
+    
+      PreserveNewest
+    
+  
+  
+    
+  
+  
+  
+    
+      This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+    
+    
+  
+  
+
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests/Properties/AssemblyInfo.cs b/src/Markdig.SyntaxHighlighting.Tests.old/Properties/AssemblyInfo.cs
similarity index 100%
rename from src/Markdig.SyntaxHighlighting.Tests/Properties/AssemblyInfo.cs
rename to src/Markdig.SyntaxHighlighting.Tests.old/Properties/AssemblyInfo.cs
diff --git a/src/Markdig.SyntaxHighlighting.Tests/SyntaxHighlightingCodeBlockRendererTests.cs b/src/Markdig.SyntaxHighlighting.Tests.old/SyntaxHighlightingCodeBlockRendererTests.cs
similarity index 100%
rename from src/Markdig.SyntaxHighlighting.Tests/SyntaxHighlightingCodeBlockRendererTests.cs
rename to src/Markdig.SyntaxHighlighting.Tests.old/SyntaxHighlightingCodeBlockRendererTests.cs
diff --git a/src/Markdig.SyntaxHighlighting.Tests/SyntaxHighlightingExtensionsTests.cs b/src/Markdig.SyntaxHighlighting.Tests.old/SyntaxHighlightingExtensionsTests.cs
similarity index 100%
rename from src/Markdig.SyntaxHighlighting.Tests/SyntaxHighlightingExtensionsTests.cs
rename to src/Markdig.SyntaxHighlighting.Tests.old/SyntaxHighlightingExtensionsTests.cs
diff --git a/src/Markdig.SyntaxHighlighting.Tests/packages.config b/src/Markdig.SyntaxHighlighting.Tests.old/packages.config
similarity index 100%
rename from src/Markdig.SyntaxHighlighting.Tests/packages.config
rename to src/Markdig.SyntaxHighlighting.Tests.old/packages.config
diff --git a/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj b/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj
index 80ad25f..995cd8e 100644
--- a/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj
+++ b/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj
@@ -1,127 +1,7 @@
-
-
-  
-  
+
+
   
-    Debug
-    AnyCPU
-    {B0696B7B-33C0-49B3-B8B2-DE07A7FCFBE9}
-    Library
-    Properties
-    Markdig.SyntaxHighlighting.Tests
-    Markdig.SyntaxHighlighting.Tests
-    v4.6.1
-    512
-    
-    
+    netstandard1.6
   
-  
-    true
-    full
-    false
-    bin\Debug\
-    DEBUG;TRACE
-    prompt
-    4
-  
-  
-    pdbonly
-    true
-    bin\Release\
-    TRACE
-    prompt
-    4
-  
-  
-    
-      ..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll
-      True
-    
-    
-      ..\packages\ColorCode.Portable.1.0.3\lib\portable45-net45+win8+wp8+wpa81\ColorCode.dll
-      True
-    
-    
-      ..\packages\Markdig.0.11.0\lib\net40\Markdig.dll
-    
-    
-      ..\packages\Moq.4.5.16\lib\net45\Moq.dll
-      True
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-      ..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll
-      True
-    
-    
-      ..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll
-      True
-    
-    
-      ..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll
-      True
-    
-    
-      ..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll
-      True
-    
-  
-  
-    
-    
-    
-    
-    
-    
-      Properties\SharedAssemblyInfo.cs
-    
-    
-  
-  
-    
-      PreserveNewest
-    
-    
-  
-  
-    
-      {5d1e4e89-83a2-4b14-bb11-deb3c69665f0}
-      Markdig.SyntaxHighlighting
-    
-  
-  
-    
-      PreserveNewest
-    
-    
-      PreserveNewest
-    
-    
-      PreserveNewest
-    
-  
-  
-    
-  
-  
-  
-    
-      This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-    
-    
-  
-  
-
\ No newline at end of file
+
+
diff --git a/src/Markdig.SyntaxHighlighting.sln b/src/Markdig.SyntaxHighlighting.sln
index ca3ec99..777786b 100644
--- a/src/Markdig.SyntaxHighlighting.sln
+++ b/src/Markdig.SyntaxHighlighting.sln
@@ -1,11 +1,11 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
+# Visual Studio 15
+VisualStudioVersion = 15.0.27703.2035
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Markdig.SyntaxHighlighting.Tests", "Markdig.SyntaxHighlighting.Tests\Markdig.SyntaxHighlighting.Tests.csproj", "{B0696B7B-33C0-49B3-B8B2-DE07A7FCFBE9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Markdig.SyntaxHighlighting", "Markdig.SyntaxHighlighting\Markdig.SyntaxHighlighting.csproj", "{EDBB77FA-BBEA-471B-9F94-24BD9533A7F1}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Markdig.SyntaxHighlighting", "Markdig.SyntaxHighlighting\Markdig.SyntaxHighlighting.csproj", "{5D1E4E89-83A2-4B14-BB11-DEB3C69665F0}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Markdig.SyntaxHighlighting.Tests", "Markdig.SyntaxHighlighting.Tests\Markdig.SyntaxHighlighting.Tests.csproj", "{BF93875A-9976-4881-87D7-8EAA617FD137}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,16 +13,19 @@ Global
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{B0696B7B-33C0-49B3-B8B2-DE07A7FCFBE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{B0696B7B-33C0-49B3-B8B2-DE07A7FCFBE9}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{B0696B7B-33C0-49B3-B8B2-DE07A7FCFBE9}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{B0696B7B-33C0-49B3-B8B2-DE07A7FCFBE9}.Release|Any CPU.Build.0 = Release|Any CPU
-		{5D1E4E89-83A2-4B14-BB11-DEB3C69665F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{5D1E4E89-83A2-4B14-BB11-DEB3C69665F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{5D1E4E89-83A2-4B14-BB11-DEB3C69665F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{5D1E4E89-83A2-4B14-BB11-DEB3C69665F0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{EDBB77FA-BBEA-471B-9F94-24BD9533A7F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{EDBB77FA-BBEA-471B-9F94-24BD9533A7F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{EDBB77FA-BBEA-471B-9F94-24BD9533A7F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{EDBB77FA-BBEA-471B-9F94-24BD9533A7F1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BF93875A-9976-4881-87D7-8EAA617FD137}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{BF93875A-9976-4881-87D7-8EAA617FD137}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BF93875A-9976-4881-87D7-8EAA617FD137}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{BF93875A-9976-4881-87D7-8EAA617FD137}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {459BD81B-3844-4E63-9FA1-C7C038393D2D}
+	EndGlobalSection
 EndGlobal
diff --git a/src/Markdig.SyntaxHighlighting.sln.DotSettings b/src/Markdig.SyntaxHighlighting.sln.DotSettings
index 83e2e81..6d721dc 100644
--- a/src/Markdig.SyntaxHighlighting.sln.DotSettings
+++ b/src/Markdig.SyntaxHighlighting.sln.DotSettings
@@ -1,4 +1,5 @@
 
+	NEVER
 	END_OF_LINE
 	END_OF_LINE
 	END_OF_LINE
@@ -63,7 +64,12 @@
 	©$CURRENT_YEAR$ Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
 	<?xml version="1.0" encoding="utf-16"?><Profile name="General Cleanup"><CSReorderTypeMembers>True</CSReorderTypeMembers><CSUpdateFileHeader>True</CSUpdateFileHeader><RemoveCodeRedundancies>True</RemoveCodeRedundancies><CSUseAutoProperty>True</CSUseAutoProperty><CSMakeFieldReadonly>True</CSMakeFieldReadonly><CSMakeAutoPropertyGetOnly>True</CSMakeAutoPropertyGetOnly><CSArrangeQualifiers>True</CSArrangeQualifiers><CSFixBuiltinTypeReferences>True</CSFixBuiltinTypeReferences><CSEnforceVarKeywordUsageSettings>True</CSEnforceVarKeywordUsageSettings><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSShortenReferences>True</CSShortenReferences><CSReformatCode>True</CSReformatCode><CSharpFormatDocComments>True</CSharpFormatDocComments><AspOptimizeRegisterDirectives>True</AspOptimizeRegisterDirectives><HtmlReformatCode>True</HtmlReformatCode><FormatAttributeQuoteDescriptor>True</FormatAttributeQuoteDescriptor><JsInsertSemicolon>True</JsInsertSemicolon><CorrectVariableKindsDescriptor>True</CorrectVariableKindsDescriptor><VariablesToInnerScopesDescriptor>True</VariablesToInnerScopesDescriptor><StringToTemplatesDescriptor>True</StringToTemplatesDescriptor><JsReformatCode>True</JsReformatCode><JsFormatDocComments>True</JsFormatDocComments><CssAlphabetizeProperties>True</CssAlphabetizeProperties><CssReformatCode>True</CssReformatCode><VBShortenReferences>True</VBShortenReferences><VBOptimizeImports>True</VBOptimizeImports><VBReformatCode>True</VBReformatCode><VBFormatDocComments>True</VBFormatDocComments></Profile>
 	C42+,FF38+,IE10+,O28+,S6+
+	True
+	True
+	True
+	True
 	True
+	True
 	True
 	True
 	True
diff --git a/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.csproj b/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.csproj
index 37477f3..eac3503 100644
--- a/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.csproj
+++ b/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.csproj
@@ -1,66 +1,7 @@
-
-
-  
+
+
   
-    10.0
-    Debug
-    AnyCPU
-    {5D1E4E89-83A2-4B14-BB11-DEB3C69665F0}
-    Library
-    Properties
-    Markdig.SyntaxHighlighting
-    Markdig.SyntaxHighlighting
-    en-US
-    512
-    {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
-    Profile259
-    v4.5
+    netstandard1.6
   
-  
-    true
-    full
-    false
-    bin\Debug\
-    DEBUG;TRACE
-    prompt
-    4
-  
-  
-    pdbonly
-    true
-    bin\Release\
-    TRACE
-    prompt
-    4
-  
-  
-    
-    
-    
-      Properties\SharedAssemblyInfo.cs
-    
-    
-    
-    
-  
-  
-    
-      ..\packages\ColorCode.Portable.1.0.3\lib\portable45-net45+win8+wp8+wpa81\ColorCode.dll
-      True
-    
-    
-      ..\packages\Markdig.0.11.0\lib\portable40-net40+sl5+win8+wp8+wpa81\Markdig.dll
-    
-  
-  
-    
-  
-  
-  
-
\ No newline at end of file
+
+

From ee4b0bc89e853eed6e086b4a5a3a46e1ebcbd2c7 Mon Sep 17 00:00:00 2001
From: Jesper Niedermann 
Date: Thu, 4 Oct 2018 22:41:03 +0200
Subject: [PATCH 2/6] Can compile .NET standard version of library

---
 .../LanguageTypeAdapter.cs                    | 40 ++++++++
 .../Markdig.SyntaxHighlighting.csproj         |  5 +
 .../SyntaxHighlightingCodeBlockRenderer.cs    | 92 +++++++++++++++++++
 .../SyntaxHighlightingExtension.cs            | 36 ++++++++
 .../SyntaxHighlightingExtensions.cs           | 10 ++
 5 files changed, 183 insertions(+)
 create mode 100644 src/Markdig.SyntaxHighlighting/LanguageTypeAdapter.cs
 create mode 100644 src/Markdig.SyntaxHighlighting/SyntaxHighlightingCodeBlockRenderer.cs
 create mode 100644 src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtension.cs
 create mode 100644 src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtensions.cs

diff --git a/src/Markdig.SyntaxHighlighting/LanguageTypeAdapter.cs b/src/Markdig.SyntaxHighlighting/LanguageTypeAdapter.cs
new file mode 100644
index 0000000..f68f782
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting/LanguageTypeAdapter.cs
@@ -0,0 +1,40 @@
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
+using ColorCode;
+
+namespace Markdig.SyntaxHighlighting {
+    public class LanguageTypeAdapter {
+        private readonly Dictionary languageMap = new Dictionary {
+            {"csharp", Languages.CSharp},
+            {"cplusplus", Languages.Cpp}
+        };
+
+        public ILanguage Parse(string id, string firstLine = null) {
+            if (id == null) {
+                return null;
+            }
+
+            if (languageMap.ContainsKey(id)) {
+                return languageMap[id];
+            }
+
+            if (!string.IsNullOrWhiteSpace(firstLine)) {
+                foreach (var lang in Languages.All) {
+                    if (lang.FirstLinePattern == null) {
+                        continue;
+                    }
+
+                    var firstLineMatcher = new Regex(lang.FirstLinePattern, RegexOptions.IgnoreCase);
+
+                    if (firstLineMatcher.IsMatch(firstLine)) {
+                        return lang;
+                    }
+                }
+            }
+
+            var byIdCanidate = Languages.FindById(id);
+
+            return byIdCanidate;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.csproj b/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.csproj
index eac3503..4750d31 100644
--- a/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.csproj
+++ b/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.csproj
@@ -4,4 +4,9 @@
     netstandard1.6
   
 
+  
+    
+    
+  
+
 
diff --git a/src/Markdig.SyntaxHighlighting/SyntaxHighlightingCodeBlockRenderer.cs b/src/Markdig.SyntaxHighlighting/SyntaxHighlightingCodeBlockRenderer.cs
new file mode 100644
index 0000000..3b2f76b
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting/SyntaxHighlightingCodeBlockRenderer.cs
@@ -0,0 +1,92 @@
+using System.IO;
+using System.Text;
+using ColorCode;
+using Markdig.Parsers;
+using Markdig.Renderers;
+using Markdig.Renderers.Html;
+using Markdig.Syntax;
+
+namespace Markdig.SyntaxHighlighting {
+    public class SyntaxHighlightingCodeBlockRenderer : HtmlObjectRenderer {
+        private readonly CodeBlockRenderer _underlyingRenderer;
+        private readonly IStyleSheet _customCss;
+
+        public SyntaxHighlightingCodeBlockRenderer(CodeBlockRenderer underlyingRenderer = null, IStyleSheet customCss = null) {
+            _underlyingRenderer = underlyingRenderer ?? new CodeBlockRenderer();
+            _customCss = customCss;
+        }
+
+        protected override void Write(HtmlRenderer renderer, CodeBlock obj) {
+            var fencedCodeBlock = obj as FencedCodeBlock;
+            var parser = obj.Parser as FencedCodeBlockParser;
+            if (fencedCodeBlock == null || parser == null) {
+                _underlyingRenderer.Write(renderer, obj);
+                return;
+            }
+
+            var attributes = obj.TryGetAttributes() ?? new HtmlAttributes();
+
+            var languageMoniker = fencedCodeBlock.Info.Replace(parser.InfoPrefix, string.Empty);
+            if (string.IsNullOrEmpty(languageMoniker)) {
+                _underlyingRenderer.Write(renderer, obj);
+                return;
+            }
+
+            attributes.AddClass($"lang-{languageMoniker}");
+            attributes.Classes.Remove($"language-{languageMoniker}");
+
+            attributes.AddClass("editor-colors");
+
+            string firstLine;
+            var code = GetCode(obj, out firstLine);
+
+            renderer
+                .Write("");
+
+            var markup = ApplySyntaxHighlighting(languageMoniker, firstLine, code);
+
+            renderer.WriteLine(markup);
+            renderer.WriteLine("");
+        }
+
+        private string ApplySyntaxHighlighting(string languageMoniker, string firstLine, string code) {
+            var languageTypeAdapter = new LanguageTypeAdapter();
+            var language = languageTypeAdapter.Parse(languageMoniker, firstLine);
+
+            if (language == null) { //handle unrecognised language formats, e.g. when using mermaid diagrams
+                return code;
+            }
+
+            var codeBuilder = new StringBuilder();
+            var codeWriter = new StringWriter(codeBuilder);
+            var styleSheet = _customCss ?? StyleSheets.Default;
+            var colourizer = new CodeColorizer();
+            colourizer.Colorize(code, language, Formatters.Default, styleSheet, codeWriter);
+            return codeBuilder.ToString();
+        }
+
+        private static string GetCode(LeafBlock obj, out string firstLine) {
+            var code = new StringBuilder();
+            firstLine = null;
+            foreach (var line in obj.Lines.Lines) {
+                var slice = line.Slice;
+                if (slice.Text == null) {
+                    continue;
+                }
+
+                var lineText = slice.Text.Substring(slice.Start, slice.Length);
+
+                if (firstLine == null) {
+                    firstLine = lineText;
+                } else {
+                    code.AppendLine();
+                }
+
+                code.Append(lineText);
+            }
+            return code.ToString();
+        }
+    }
+}
diff --git a/src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtension.cs b/src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtension.cs
new file mode 100644
index 0000000..e7dda54
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtension.cs
@@ -0,0 +1,36 @@
+using System;
+using ColorCode;
+using Markdig.Renderers;
+using Markdig.Renderers.Html;
+
+namespace Markdig.SyntaxHighlighting {
+    public class SyntaxHighlightingExtension : IMarkdownExtension {
+        private readonly IStyleSheet _customCss;
+
+        public SyntaxHighlightingExtension(IStyleSheet customCss = null)
+        {
+            _customCss = customCss;
+        }
+
+        public void Setup(MarkdownPipelineBuilder pipeline) {}
+
+        public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) {
+            if (renderer == null) {
+                throw new ArgumentNullException(nameof(renderer));
+            }
+
+            var htmlRenderer = renderer as TextRendererBase;
+            if (htmlRenderer == null) {
+                return;
+            }
+
+            var originalCodeBlockRenderer = htmlRenderer.ObjectRenderers.FindExact();
+            if (originalCodeBlockRenderer != null) {
+                htmlRenderer.ObjectRenderers.Remove(originalCodeBlockRenderer);
+            }
+
+            htmlRenderer.ObjectRenderers.AddIfNotAlready(
+                new SyntaxHighlightingCodeBlockRenderer(originalCodeBlockRenderer, _customCss));
+        }
+    }
+}
diff --git a/src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtensions.cs b/src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtensions.cs
new file mode 100644
index 0000000..668aced
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting/SyntaxHighlightingExtensions.cs
@@ -0,0 +1,10 @@
+using ColorCode;
+
+namespace Markdig.SyntaxHighlighting {
+    public static class SyntaxHighlightingExtensions {
+        public static MarkdownPipelineBuilder UseSyntaxHighlighting(this MarkdownPipelineBuilder pipeline, IStyleSheet customCss = null) {
+            pipeline.Extensions.Add(new SyntaxHighlightingExtension(customCss));
+            return pipeline;
+        }
+    }
+}

From 68a19ddb017ba4649baefde656c395b7c3ece37c Mon Sep 17 00:00:00 2001
From: Jesper Niedermann 
Date: Thu, 4 Oct 2018 23:06:06 +0200
Subject: [PATCH 3/6] Just one test failing

---
 .../Example/CodeSample.cs                     |  34 ++
 .../Example/README.md                         |  17 +
 .../Example/_template.html                    |   8 +
 .../Example/expected.html                     |  34 ++
 .../Example/gfm.css                           | 561 ++++++++++++++++++
 .../IntegrationTests.cs                       |  55 ++
 .../LanguageTypeAdapterTests.cs               |  28 +
 .../Markdig.SyntaxHighlighting.Tests.csproj   |  41 ++
 ...yntaxHighlightingCodeBlockRendererTests.cs | 129 ++++
 .../SyntaxHighlightingExtensionsTests.cs      |  76 +++
 .../Example/CodeSample.cs                     |  34 ++
 .../Example/README.md                         |  17 +
 .../Example/_template.html                    |   8 +
 .../Example/expected.html                     |  34 ++
 .../Example/gfm.css                           | 561 ++++++++++++++++++
 .../IntegrationTests.cs                       |  55 ++
 .../LanguageTypeAdapterTests.cs               |  28 +
 .../Markdig.SyntaxHighlighting.Tests.csproj   |  41 ++
 ...yntaxHighlightingCodeBlockRendererTests.cs | 129 ++++
 .../SyntaxHighlightingExtensionsTests.cs      |  76 +++
 .../Example/CodeSample.cs                     |  34 ++
 .../Example/README.md                         |  17 +
 .../Example/_template.html                    |   8 +
 .../Example/expected.html                     |  34 ++
 .../Example/gfm.css                           | 561 ++++++++++++++++++
 .../IntegrationTests.cs                       |  55 ++
 .../LanguageTypeAdapterTests.cs               |  28 +
 .../Markdig.SyntaxHighlighting.Tests.csproj   |  39 +-
 ...yntaxHighlightingCodeBlockRendererTests.cs | 129 ++++
 .../SyntaxHighlightingExtensionsTests.cs      |  76 +++
 src/Markdig.SyntaxHighlighting.sln            |  10 +-
 31 files changed, 2951 insertions(+), 6 deletions(-)
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/Example/CodeSample.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/Example/README.md
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/Example/_template.html
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/Example/expected.html
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/Example/gfm.css
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/IntegrationTests.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/LanguageTypeAdapterTests.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/Markdig.SyntaxHighlighting.Tests.csproj
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingCodeBlockRendererTests.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingExtensionsTests.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/Example/CodeSample.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/Example/README.md
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/Example/_template.html
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/Example/expected.html
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/Example/gfm.css
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/IntegrationTests.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/LanguageTypeAdapterTests.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/Markdig.SyntaxHighlighting.Tests.csproj
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingCodeBlockRendererTests.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingExtensionsTests.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests/Example/CodeSample.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests/Example/README.md
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests/Example/_template.html
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests/Example/expected.html
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests/Example/gfm.css
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests/IntegrationTests.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests/LanguageTypeAdapterTests.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests/SyntaxHighlightingCodeBlockRendererTests.cs
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests/SyntaxHighlightingExtensionsTests.cs

diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/CodeSample.cs b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/CodeSample.cs
new file mode 100644
index 0000000..43a269c
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/CodeSample.cs
@@ -0,0 +1,34 @@
+using System;
+using System.IO;
+using System.Reflection;
+using Xunit;
+
+namespace Markdig.SyntaxHighlighting.Tests.Example {
+    public class CodeSample {
+        [Fact]
+        public void CodeSampleWorks() {
+            var codebase = Assembly.GetEntryAssembly().Location;
+            var directory = Path.GetDirectoryName(codebase);
+            if (directory == null) {
+                throw new NullReferenceException("appPath came back null.");
+            }
+            var appPath = new Uri(directory).LocalPath;
+            var folder = Path.Combine(appPath, "Example");
+            var inputMarkdown = Path.Combine(folder, "README.md");
+            var referenceFile = Path.Combine(folder, "expected.html");
+            var expectedHtml = File.ReadAllText(referenceFile);
+            var markdown = File.ReadAllText(inputMarkdown);
+            var pipeline = new MarkdownPipelineBuilder()
+                .UseAdvancedExtensions()
+                .UseSyntaxHighlighting()
+                .Build();
+            var html = Markdown.ToHtml(markdown, pipeline);
+            var actualHtml = File.ReadAllText(Path.Combine(folder, "_template.html"))
+                .Replace("{{{this}}}", html);
+            actualHtml = actualHtml.Replace("\r\n", "\n").Replace("\n", "\r\n");
+            expectedHtml = expectedHtml.Replace("\r\n", "\n").Replace("\n", "\r\n");
+            File.WriteAllText(Path.Combine(folder, "actual.html"), actualHtml);
+            Assert.Equal(expectedHtml, actualHtml);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/README.md b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/README.md
new file mode 100644
index 0000000..15c2fb5
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/README.md
@@ -0,0 +1,17 @@
+This is before the table
+
+| Heading 1 | Heading 2 |
+| --------- | --------- |
+| Row 1     | Cell 2    |
+
+This is after the table
+
+```csharp
+// ©2015 Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
+
+namespace Amido.VersionDashboard.Web.Domain {
+    public interface IConfigProvider {
+        string GetSetting(string appSetting);
+    }
+}
+```
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/_template.html b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/_template.html
new file mode 100644
index 0000000..4e7b31d
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/_template.html
@@ -0,0 +1,8 @@
+
+  
+    
+  
+  
+    {{{this}}}
+  
+
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/expected.html b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/expected.html
new file mode 100644
index 0000000..256aafb
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/expected.html
@@ -0,0 +1,34 @@
+
+  
+    
+  
+  
+    

This is before the table

+ + + + + + + + + + + + + +
Heading 1Heading 2
Row 1Cell 2
+

This is after the table

+
+// ©2015 Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
+
+namespace Amido.VersionDashboard.Web.Domain {
+    public interface IConfigProvider {
+        string GetSetting(string appSetting);
+    }
+}
+
+
+ + + diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/gfm.css b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/gfm.css new file mode 100644 index 0000000..6879d45 --- /dev/null +++ b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/gfm.css @@ -0,0 +1,561 @@ +@font-face { + font-family: octicons-link; + src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); +} + +.markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + color: #333; + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 16px; + line-height: 1.6; + word-wrap: break-word; +} + +.markdown-body a { + -webkit-text-decoration-skip: objects; + background-color: transparent; +} + +.markdown-body a:active, +.markdown-body a:hover { outline-width: 0; } + +.markdown-body strong { font-weight: inherit; } + +.markdown-body strong { font-weight: bolder; } + +.markdown-body h1 { + font-size: 2em; + margin: 0.67em 0; +} + +.markdown-body img { border-style: none; } + +.markdown-body svg:not(:root) { overflow: hidden; } + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre { + font-family: monospace, monospace; + font-size: 1em; +} + +.markdown-body hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +.markdown-body input { + font: inherit; + margin: 0; +} + +.markdown-body input { overflow: visible; } + +.markdown-body button:-moz-focusring, +.markdown-body [type="button"]:-moz-focusring, +.markdown-body [type="reset"]:-moz-focusring, +.markdown-body [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } + +.markdown-body [type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body table { + border-collapse: collapse; + border-spacing: 0; +} + +.markdown-body td, +.markdown-body th { padding: 0; } + +.markdown-body * { box-sizing: border-box; } + +.markdown-body input { font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } + +.markdown-body a { + color: #4078c0; + text-decoration: none; +} + +.markdown-body a:hover, +.markdown-body a:active { text-decoration: underline; } + +.markdown-body hr { + background: transparent; + border: 0; + border-bottom: 1px solid #ddd; + height: 0; + margin: 15px 0; + overflow: hidden; +} + +.markdown-body hr::before { + content: ""; + display: table; +} + +.markdown-body hr::after { + clear: both; + content: ""; + display: table; +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + line-height: 1.5; + margin-bottom: 0; + margin-top: 0; +} + +.markdown-body h1 { font-size: 30px; } + +.markdown-body h2 { font-size: 21px; } + +.markdown-body h3 { font-size: 16px; } + +.markdown-body h4 { font-size: 14px; } + +.markdown-body h5 { font-size: 12px; } + +.markdown-body h6 { font-size: 11px; } + +.markdown-body p { + margin-bottom: 10px; + margin-top: 0; +} + +.markdown-body blockquote { margin: 0; } + +.markdown-body ul, +.markdown-body ol { + margin-bottom: 0; + margin-top: 0; + padding-left: 0; +} + +.markdown-body ol ol, +.markdown-body ul ol { list-style-type: lower-roman; } + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { list-style-type: lower-alpha; } + +.markdown-body dd { margin-left: 0; } + +.markdown-body code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 12px; +} + +.markdown-body pre { + font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin-bottom: 0; + margin-top: 0; +} + +.markdown-body .pl-0 { padding-left: 0 !important; } + +.markdown-body .pl-1 { padding-left: 3px !important; } + +.markdown-body .pl-2 { padding-left: 6px !important; } + +.markdown-body .pl-3 { padding-left: 12px !important; } + +.markdown-body .pl-4 { padding-left: 24px !important; } + +.markdown-body .pl-5 { padding-left: 36px !important; } + +.markdown-body .pl-6 { padding-left: 48px !important; } + +.markdown-body .form-select::-ms-expand { opacity: 0; } + +.markdown-body:before { + content: ""; + display: table; +} + +.markdown-body:after { + clear: both; + content: ""; + display: table; +} + +.markdown-body > *:first-child { margin-top: 0 !important; } + +.markdown-body > *:last-child { margin-bottom: 0 !important; } + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body .anchor { + display: inline-block; + margin-left: -18px; + padding-right: 2px; +} + +.markdown-body .anchor:focus { outline: none; } + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + font-weight: bold; + line-height: 1.4; + margin-bottom: 16px; + margin-top: 1em; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + color: #000; + vertical-align: middle; + visibility: hidden; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { text-decoration: none; } + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { visibility: visible; } + +.markdown-body h1 { + border-bottom: 1px solid #eee; + font-size: 2.25em; + line-height: 1.2; + padding-bottom: 0.3em; +} + +.markdown-body h1 .anchor { line-height: 1; } + +.markdown-body h2 { + border-bottom: 1px solid #eee; + font-size: 1.75em; + line-height: 1.225; + padding-bottom: 0.3em; +} + +.markdown-body h2 .anchor { line-height: 1; } + +.markdown-body h3 { + font-size: 1.5em; + line-height: 1.43; +} + +.markdown-body h3 .anchor { line-height: 1.2; } + +.markdown-body h4 { font-size: 1.25em; } + +.markdown-body h4 .anchor { line-height: 1.2; } + +.markdown-body h5 { font-size: 1em; } + +.markdown-body h5 .anchor { line-height: 1.1; } + +.markdown-body h6 { + color: #777; + font-size: 1em; +} + +.markdown-body h6 .anchor { line-height: 1.1; } + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin-bottom: 16px; + margin-top: 0; +} + +.markdown-body hr { + background-color: #e7e7e7; + border: 0 none; + height: 4px; + margin: 16px 0; + padding: 0; +} + +.markdown-body ul, +.markdown-body ol { padding-left: 2em; } + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-bottom: 0; + margin-top: 0; +} + +.markdown-body li > p { margin-top: 16px; } + +.markdown-body dl { padding: 0; } + +.markdown-body dl dt { + font-size: 1em; + font-style: italic; + font-weight: bold; + margin-top: 16px; + padding: 0; +} + +.markdown-body dl dd { + margin-bottom: 16px; + padding: 0 16px; +} + +.markdown-body blockquote { + border-left: 4px solid #ddd; + color: #777; + padding: 0 15px; +} + +.markdown-body blockquote > :first-child { margin-top: 0; } + +.markdown-body blockquote > :last-child { margin-bottom: 0; } + +.markdown-body table { + display: block; + overflow: auto; + width: 100%; + word-break: normal; + word-break: keep-all; +} + +.markdown-body table th { font-weight: bold; } + +.markdown-body table th, +.markdown-body table td { + border: 1px solid #ddd; + padding: 6px 13px; +} + +.markdown-body table tr { + background-color: #fff; + border-top: 1px solid #ccc; +} + +.markdown-body table tr:nth-child(2n) { background-color: #f8f8f8; } + +.markdown-body img { + background-color: #fff; + box-sizing: content-box; + max-width: 100%; +} + +.markdown-body code { + background-color: rgba(0, 0, 0, 0.04); + border-radius: 3px; + font-size: 85%; + margin: 0; + padding: 0; + padding-bottom: 0.2em; + padding-top: 0.2em; +} + +.markdown-body code:before, +.markdown-body code:after { + content: "\00a0"; + letter-spacing: -0.2em; +} + +.markdown-body pre > code { + background: transparent; + border: 0; + font-size: 100%; + margin: 0; + padding: 0; + white-space: pre; + word-break: normal; +} + +.markdown-body .highlight { margin-bottom: 16px; } + +.markdown-body .highlight pre, +.markdown-body pre { + background-color: #f7f7f7; + border-radius: 3px; + font-size: 85%; + line-height: 1.45; + overflow: auto; + padding: 16px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body pre { word-wrap: normal; } + +.markdown-body pre code { + background-color: transparent; + border: 0; + display: inline; + line-height: inherit; + margin: 0; + max-width: initial; + overflow: initial; + padding: 0; + word-wrap: normal; +} + +.markdown-body pre code:before, +.markdown-body pre code:after { content: normal; } + +.markdown-body kbd { + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; + color: #555; + display: inline-block; + font-size: 11px; + line-height: 10px; + padding: 3px 5px; + vertical-align: middle; +} + +.markdown-body .pl-c { color: #969896; } + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { color: #0086b3; } + +.markdown-body .pl-e, +.markdown-body .pl-en { color: #795da3; } + +.markdown-body .pl-s .pl-s1, +.markdown-body .pl-smi { color: #333; } + +.markdown-body .pl-ent { color: #63a35c; } + +.markdown-body .pl-k { color: #a71d5d; } + +.markdown-body .pl-pds, +.markdown-body .pl-s, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sra, +.markdown-body .pl-sr .pl-sre { color: #183691; } + +.markdown-body .pl-v { color: #ed6a43; } + +.markdown-body .pl-id { color: #b52a1d; } + +.markdown-body .pl-ii { + background-color: #b52a1d; + color: #f8f8f8; +} + +.markdown-body .pl-sr .pl-cce { + color: #63a35c; + font-weight: bold; +} + +.markdown-body .pl-ml { color: #693a17; } + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + color: #1d3e81; + font-weight: bold; +} + +.markdown-body .pl-mq { color: #008080; } + +.markdown-body .pl-mi { + color: #333; + font-style: italic; +} + +.markdown-body .pl-mb { + color: #333; + font-weight: bold; +} + +.markdown-body .pl-md { + background-color: #ffecec; + color: #bd2c00; +} + +.markdown-body .pl-mi1 { + background-color: #eaffea; + color: #55a532; +} + +.markdown-body .pl-mdr { + color: #795da3; + font-weight: bold; +} + +.markdown-body .pl-mo { color: #1d3e81; } + +.markdown-body kbd { + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; + color: #555; + display: inline-block; + font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; + line-height: 10px; + padding: 3px 5px; + vertical-align: middle; +} + +.markdown-body .full-commit .btn-outline:not(:disabled):hover { + border: 1px solid #4078c0; + color: #4078c0; +} + +.markdown-body :checked + .radio-label { + border-color: #4078c0; + position: relative; + z-index: 1; +} + +.markdown-body .octicon { + display: inline-block; + fill: currentColor; + vertical-align: text-top; +} + +.markdown-body .task-list-item { list-style-type: none; } + +.markdown-body .task-list-item + .task-list-item { margin-top: 3px; } + +.markdown-body .task-list-item input { + margin: 0 0.2em 0.25em -1.6em; + vertical-align: middle; +} + +.markdown-body hr { border-bottom-color: #eee; } \ No newline at end of file diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/IntegrationTests.cs b/src/Markdig.SyntaxHighlighting.Tests.Flop/IntegrationTests.cs new file mode 100644 index 0000000..769394f --- /dev/null +++ b/src/Markdig.SyntaxHighlighting.Tests.Flop/IntegrationTests.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; + +namespace Markdig.SyntaxHighlighting.Tests +{ + public class IntegrationTests + { + + [Fact] + public void ShouldUseDefaultRendererIfLanguageIsNotIndicated() { + string testString = @" +# This is a test + +``` +{ + ""jsonProperty"": 1 +} +```"; + var pipeline = new MarkdownPipelineBuilder() + .UseAdvancedExtensions() + .UseSyntaxHighlighting() + .Build(); + var html = Markdown.ToHtml(testString, pipeline); + Assert.True(html.Contains("
"));
+            Assert.True(html.Contains("jsonProperty"));
+            Assert.False(html.Contains("lang-"));
+        }
+
+        [Fact]
+        public void ShouldColorizeSyntaxWhenLanguageIsIndicated()
+        {
+            string testString = @"
+# This is a test
+
+```json
+{
+    ""jsonProperty"": 1
+}
+```";
+            var pipeline = new MarkdownPipelineBuilder()
+                .UseAdvancedExtensions()
+                .UseSyntaxHighlighting()
+                .Build();
+            var html = Markdown.ToHtml(testString, pipeline);
+            Assert.True(html.Contains("";
+
+        [Theory]
+        [InlineData("csharp", "c#", null)]
+        [InlineData("cplusplus", "cpp", null)]
+        [InlineData("css", "css", null)]
+        [InlineData("aspx", "aspx(c#)", AspxCsFirstLine)]
+        [InlineData("javascript", "javascript", "var myVar = 1;")]
+        public void CanParse(string inputLanguage, string expectedId, string firstLine) {
+            var adapter = new LanguageTypeAdapter();
+            var result = adapter.Parse(inputLanguage, firstLine);
+            Assert.Equal(expectedId, result.Id);
+        }
+
+        [Theory]
+        [InlineData(null)]
+        [InlineData("fubar")]
+        public void CanNotParse(string inputLanguage) {
+            var adapter = new LanguageTypeAdapter();
+            var result = adapter.Parse(inputLanguage);
+            Assert.Null(result);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/Markdig.SyntaxHighlighting.Tests.csproj b/src/Markdig.SyntaxHighlighting.Tests.Flop/Markdig.SyntaxHighlighting.Tests.csproj
new file mode 100644
index 0000000..d630dd8
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.Flop/Markdig.SyntaxHighlighting.Tests.csproj
@@ -0,0 +1,41 @@
+
+
+  
+    netcoreapp2.1
+  
+
+  
+    
+    
+    
+  
+
+  
+    
+      PreserveNewest
+    
+    
+      PreserveNewest
+    
+    
+      PreserveNewest
+    
+  
+
+  
+    
+    
+    
+  
+
+  
+    
+  
+
+  
+    
+      PreserveNewest
+    
+  
+
+
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingCodeBlockRendererTests.cs b/src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingCodeBlockRendererTests.cs
new file mode 100644
index 0000000..a8211ae
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingCodeBlockRendererTests.cs
@@ -0,0 +1,129 @@
+using System.IO;
+using System.Text;
+using Markdig.Helpers;
+using Markdig.Parsers;
+using Markdig.Renderers;
+using Markdig.Renderers.Html;
+using Markdig.Syntax;
+using Moq;
+using Xunit;
+
+namespace Markdig.SyntaxHighlighting.Tests {
+    public class SyntaxHighlightingCodeBlockRendererTests {
+        public string scriptBlock = @"```csharp
+var desktop = Environment.SpecialFolder.DesktopDirectory;
+```";
+
+        private static FencedCodeBlock GetFencedCodeBlock(string language = "language-csharp") {
+            return new FencedCodeBlock(new FencedCodeBlockParser()) {
+                Info = language,
+                Lines = new StringLineGroup(3) {
+                    new StringSlice("```csharp"),
+                    new StringSlice("var desktop = Environment.SpecialFolder.DesktopDirectory;"),
+                    new StringSlice("```")
+                }
+            };
+        }
+
+        [Fact]
+        public void ConstructorDoesNotThrow() {
+            var renderer = new SyntaxHighlightingCodeBlockRenderer();
+            Assert.NotNull(renderer);
+        }
+
+        [Fact]
+        public void DivWritten() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("", builder.ToString());
+        }
+
+        [Fact]
+        public void DivWrittenUnrecognisedLanguage()
+        {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock("language-made-up-language"); //
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("", builder.ToString());
+        }
+
+        [Fact]
+        public void EditorColorsCssClassAdded() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("editor-colors", builder.ToString());
+        }
+
+        [Fact]
+        public void LangCssClassAdded() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("lang-csharp", builder.ToString());
+        }
+
+        [Fact]
+        public void UnderlyingRendererCalledIfNotFencedCodeBlock() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()))
+                .Verifiable("Write was not called on the underlying renderer mock.");
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var writer = new StringWriter();
+            var markdownRenderer = new HtmlRenderer(writer);
+            var codeBlock = new CodeBlock(new IndentedCodeBlockParser());
+            renderer.Write(markdownRenderer, codeBlock);
+            underlyingRendererMock.VerifyAll();
+        }
+
+        [Fact]
+        public void WritesOutCode() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("var", builder.ToString());
+        }
+
+        [Fact]
+        public void WritesOutColouredCode() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("var", builder.ToString());
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingExtensionsTests.cs b/src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingExtensionsTests.cs
new file mode 100644
index 0000000..663d17b
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingExtensionsTests.cs
@@ -0,0 +1,76 @@
+using System;
+using System.IO;
+using Markdig.Renderers;
+using Markdig.Renderers.Html;
+using Xunit;
+
+namespace Markdig.SyntaxHighlighting.Tests {
+    public class SyntaxHighlightingExtensionsTests {
+        private class FakeRenderer : TextRendererBase {
+            public FakeRenderer(TextWriter writer) : base(writer) {}
+        }
+
+        [Fact]
+        public void CodeBlockRendererReplaced() {
+            var extension = new SyntaxHighlightingExtension();
+            var writer = new StringWriter();
+            var markdownRenderer = new HtmlRenderer(writer);
+
+            var oldRendererCount = markdownRenderer.ObjectRenderers.Count;
+            Assert.Equal(1,
+                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(CodeBlockRenderer)).Count);
+            extension.Setup(null, markdownRenderer);
+            Assert.Equal(0,
+                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(CodeBlockRenderer)).Count);
+            Assert.Equal(1,
+                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(SyntaxHighlightingCodeBlockRenderer))
+                    .Count);
+            Assert.Equal(oldRendererCount, markdownRenderer.ObjectRenderers.Count);
+        }
+
+        [Fact]
+        public void DoesntThrowWhenSetupPipeline() {
+            var extension = new SyntaxHighlightingExtension();
+            extension.Setup(new MarkdownPipelineBuilder());
+        }
+
+        [Fact]
+        public void PipelineChangedIfHtmlRenderer() {
+            var extension = new SyntaxHighlightingExtension();
+            var writer = new StringWriter();
+            var markdownRenderer = new HtmlRenderer(writer);
+            markdownRenderer.ObjectRenderers.RemoveAll(x => true);
+            extension.Setup(null, markdownRenderer);
+            Assert.Equal(1, markdownRenderer.ObjectRenderers.Count);
+        }
+
+        [Fact]
+        public void PipelineChangedIfHtmlRendererUsingExtensionMethod() {
+            var pipelineBuilder = new MarkdownPipelineBuilder();
+            pipelineBuilder.UseSyntaxHighlighting();
+            var pipeline = pipelineBuilder.Build();
+            var writer = new StringWriter();
+            var markdownRenderer = new HtmlRenderer(writer);
+            pipeline.Setup(markdownRenderer);
+            var renderer = markdownRenderer.ObjectRenderers.FindExact();
+            Assert.NotNull(renderer);
+        }
+
+        [Fact]
+        public void PipelineIntactIfNotHtmlRenderer() {
+            var extension = new SyntaxHighlightingExtension();
+            var writer = new StringWriter();
+            var markdownRenderer = new FakeRenderer(writer);
+            var oldRendererCount = markdownRenderer.ObjectRenderers.Count;
+            extension.Setup(null, markdownRenderer);
+            Assert.Equal(oldRendererCount, markdownRenderer.ObjectRenderers.Count);
+        }
+
+        [Fact]
+        public void ThrowsIfRendererIsNull() {
+            var extension = new SyntaxHighlightingExtension();
+            var extensionSetup = new Action(() => extension.Setup(null, null));
+            Assert.Throws(extensionSetup);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/Example/CodeSample.cs b/src/Markdig.SyntaxHighlighting.Tests.std/Example/CodeSample.cs
new file mode 100644
index 0000000..43a269c
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.std/Example/CodeSample.cs
@@ -0,0 +1,34 @@
+using System;
+using System.IO;
+using System.Reflection;
+using Xunit;
+
+namespace Markdig.SyntaxHighlighting.Tests.Example {
+    public class CodeSample {
+        [Fact]
+        public void CodeSampleWorks() {
+            var codebase = Assembly.GetEntryAssembly().Location;
+            var directory = Path.GetDirectoryName(codebase);
+            if (directory == null) {
+                throw new NullReferenceException("appPath came back null.");
+            }
+            var appPath = new Uri(directory).LocalPath;
+            var folder = Path.Combine(appPath, "Example");
+            var inputMarkdown = Path.Combine(folder, "README.md");
+            var referenceFile = Path.Combine(folder, "expected.html");
+            var expectedHtml = File.ReadAllText(referenceFile);
+            var markdown = File.ReadAllText(inputMarkdown);
+            var pipeline = new MarkdownPipelineBuilder()
+                .UseAdvancedExtensions()
+                .UseSyntaxHighlighting()
+                .Build();
+            var html = Markdown.ToHtml(markdown, pipeline);
+            var actualHtml = File.ReadAllText(Path.Combine(folder, "_template.html"))
+                .Replace("{{{this}}}", html);
+            actualHtml = actualHtml.Replace("\r\n", "\n").Replace("\n", "\r\n");
+            expectedHtml = expectedHtml.Replace("\r\n", "\n").Replace("\n", "\r\n");
+            File.WriteAllText(Path.Combine(folder, "actual.html"), actualHtml);
+            Assert.Equal(expectedHtml, actualHtml);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/Example/README.md b/src/Markdig.SyntaxHighlighting.Tests.std/Example/README.md
new file mode 100644
index 0000000..15c2fb5
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.std/Example/README.md
@@ -0,0 +1,17 @@
+This is before the table
+
+| Heading 1 | Heading 2 |
+| --------- | --------- |
+| Row 1     | Cell 2    |
+
+This is after the table
+
+```csharp
+// ©2015 Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
+
+namespace Amido.VersionDashboard.Web.Domain {
+    public interface IConfigProvider {
+        string GetSetting(string appSetting);
+    }
+}
+```
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/Example/_template.html b/src/Markdig.SyntaxHighlighting.Tests.std/Example/_template.html
new file mode 100644
index 0000000..4e7b31d
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.std/Example/_template.html
@@ -0,0 +1,8 @@
+
+  
+    
+  
+  
+    {{{this}}}
+  
+
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/Example/expected.html b/src/Markdig.SyntaxHighlighting.Tests.std/Example/expected.html
new file mode 100644
index 0000000..256aafb
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.std/Example/expected.html
@@ -0,0 +1,34 @@
+
+  
+    
+  
+  
+    

This is before the table

+ + + + + + + + + + + + + +
Heading 1Heading 2
Row 1Cell 2
+

This is after the table

+
+// ©2015 Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
+
+namespace Amido.VersionDashboard.Web.Domain {
+    public interface IConfigProvider {
+        string GetSetting(string appSetting);
+    }
+}
+
+
+ + + diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/Example/gfm.css b/src/Markdig.SyntaxHighlighting.Tests.std/Example/gfm.css new file mode 100644 index 0000000..6879d45 --- /dev/null +++ b/src/Markdig.SyntaxHighlighting.Tests.std/Example/gfm.css @@ -0,0 +1,561 @@ +@font-face { + font-family: octicons-link; + src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); +} + +.markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + color: #333; + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 16px; + line-height: 1.6; + word-wrap: break-word; +} + +.markdown-body a { + -webkit-text-decoration-skip: objects; + background-color: transparent; +} + +.markdown-body a:active, +.markdown-body a:hover { outline-width: 0; } + +.markdown-body strong { font-weight: inherit; } + +.markdown-body strong { font-weight: bolder; } + +.markdown-body h1 { + font-size: 2em; + margin: 0.67em 0; +} + +.markdown-body img { border-style: none; } + +.markdown-body svg:not(:root) { overflow: hidden; } + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre { + font-family: monospace, monospace; + font-size: 1em; +} + +.markdown-body hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +.markdown-body input { + font: inherit; + margin: 0; +} + +.markdown-body input { overflow: visible; } + +.markdown-body button:-moz-focusring, +.markdown-body [type="button"]:-moz-focusring, +.markdown-body [type="reset"]:-moz-focusring, +.markdown-body [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } + +.markdown-body [type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body table { + border-collapse: collapse; + border-spacing: 0; +} + +.markdown-body td, +.markdown-body th { padding: 0; } + +.markdown-body * { box-sizing: border-box; } + +.markdown-body input { font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } + +.markdown-body a { + color: #4078c0; + text-decoration: none; +} + +.markdown-body a:hover, +.markdown-body a:active { text-decoration: underline; } + +.markdown-body hr { + background: transparent; + border: 0; + border-bottom: 1px solid #ddd; + height: 0; + margin: 15px 0; + overflow: hidden; +} + +.markdown-body hr::before { + content: ""; + display: table; +} + +.markdown-body hr::after { + clear: both; + content: ""; + display: table; +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + line-height: 1.5; + margin-bottom: 0; + margin-top: 0; +} + +.markdown-body h1 { font-size: 30px; } + +.markdown-body h2 { font-size: 21px; } + +.markdown-body h3 { font-size: 16px; } + +.markdown-body h4 { font-size: 14px; } + +.markdown-body h5 { font-size: 12px; } + +.markdown-body h6 { font-size: 11px; } + +.markdown-body p { + margin-bottom: 10px; + margin-top: 0; +} + +.markdown-body blockquote { margin: 0; } + +.markdown-body ul, +.markdown-body ol { + margin-bottom: 0; + margin-top: 0; + padding-left: 0; +} + +.markdown-body ol ol, +.markdown-body ul ol { list-style-type: lower-roman; } + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { list-style-type: lower-alpha; } + +.markdown-body dd { margin-left: 0; } + +.markdown-body code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 12px; +} + +.markdown-body pre { + font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin-bottom: 0; + margin-top: 0; +} + +.markdown-body .pl-0 { padding-left: 0 !important; } + +.markdown-body .pl-1 { padding-left: 3px !important; } + +.markdown-body .pl-2 { padding-left: 6px !important; } + +.markdown-body .pl-3 { padding-left: 12px !important; } + +.markdown-body .pl-4 { padding-left: 24px !important; } + +.markdown-body .pl-5 { padding-left: 36px !important; } + +.markdown-body .pl-6 { padding-left: 48px !important; } + +.markdown-body .form-select::-ms-expand { opacity: 0; } + +.markdown-body:before { + content: ""; + display: table; +} + +.markdown-body:after { + clear: both; + content: ""; + display: table; +} + +.markdown-body > *:first-child { margin-top: 0 !important; } + +.markdown-body > *:last-child { margin-bottom: 0 !important; } + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body .anchor { + display: inline-block; + margin-left: -18px; + padding-right: 2px; +} + +.markdown-body .anchor:focus { outline: none; } + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + font-weight: bold; + line-height: 1.4; + margin-bottom: 16px; + margin-top: 1em; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + color: #000; + vertical-align: middle; + visibility: hidden; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { text-decoration: none; } + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { visibility: visible; } + +.markdown-body h1 { + border-bottom: 1px solid #eee; + font-size: 2.25em; + line-height: 1.2; + padding-bottom: 0.3em; +} + +.markdown-body h1 .anchor { line-height: 1; } + +.markdown-body h2 { + border-bottom: 1px solid #eee; + font-size: 1.75em; + line-height: 1.225; + padding-bottom: 0.3em; +} + +.markdown-body h2 .anchor { line-height: 1; } + +.markdown-body h3 { + font-size: 1.5em; + line-height: 1.43; +} + +.markdown-body h3 .anchor { line-height: 1.2; } + +.markdown-body h4 { font-size: 1.25em; } + +.markdown-body h4 .anchor { line-height: 1.2; } + +.markdown-body h5 { font-size: 1em; } + +.markdown-body h5 .anchor { line-height: 1.1; } + +.markdown-body h6 { + color: #777; + font-size: 1em; +} + +.markdown-body h6 .anchor { line-height: 1.1; } + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin-bottom: 16px; + margin-top: 0; +} + +.markdown-body hr { + background-color: #e7e7e7; + border: 0 none; + height: 4px; + margin: 16px 0; + padding: 0; +} + +.markdown-body ul, +.markdown-body ol { padding-left: 2em; } + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-bottom: 0; + margin-top: 0; +} + +.markdown-body li > p { margin-top: 16px; } + +.markdown-body dl { padding: 0; } + +.markdown-body dl dt { + font-size: 1em; + font-style: italic; + font-weight: bold; + margin-top: 16px; + padding: 0; +} + +.markdown-body dl dd { + margin-bottom: 16px; + padding: 0 16px; +} + +.markdown-body blockquote { + border-left: 4px solid #ddd; + color: #777; + padding: 0 15px; +} + +.markdown-body blockquote > :first-child { margin-top: 0; } + +.markdown-body blockquote > :last-child { margin-bottom: 0; } + +.markdown-body table { + display: block; + overflow: auto; + width: 100%; + word-break: normal; + word-break: keep-all; +} + +.markdown-body table th { font-weight: bold; } + +.markdown-body table th, +.markdown-body table td { + border: 1px solid #ddd; + padding: 6px 13px; +} + +.markdown-body table tr { + background-color: #fff; + border-top: 1px solid #ccc; +} + +.markdown-body table tr:nth-child(2n) { background-color: #f8f8f8; } + +.markdown-body img { + background-color: #fff; + box-sizing: content-box; + max-width: 100%; +} + +.markdown-body code { + background-color: rgba(0, 0, 0, 0.04); + border-radius: 3px; + font-size: 85%; + margin: 0; + padding: 0; + padding-bottom: 0.2em; + padding-top: 0.2em; +} + +.markdown-body code:before, +.markdown-body code:after { + content: "\00a0"; + letter-spacing: -0.2em; +} + +.markdown-body pre > code { + background: transparent; + border: 0; + font-size: 100%; + margin: 0; + padding: 0; + white-space: pre; + word-break: normal; +} + +.markdown-body .highlight { margin-bottom: 16px; } + +.markdown-body .highlight pre, +.markdown-body pre { + background-color: #f7f7f7; + border-radius: 3px; + font-size: 85%; + line-height: 1.45; + overflow: auto; + padding: 16px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body pre { word-wrap: normal; } + +.markdown-body pre code { + background-color: transparent; + border: 0; + display: inline; + line-height: inherit; + margin: 0; + max-width: initial; + overflow: initial; + padding: 0; + word-wrap: normal; +} + +.markdown-body pre code:before, +.markdown-body pre code:after { content: normal; } + +.markdown-body kbd { + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; + color: #555; + display: inline-block; + font-size: 11px; + line-height: 10px; + padding: 3px 5px; + vertical-align: middle; +} + +.markdown-body .pl-c { color: #969896; } + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { color: #0086b3; } + +.markdown-body .pl-e, +.markdown-body .pl-en { color: #795da3; } + +.markdown-body .pl-s .pl-s1, +.markdown-body .pl-smi { color: #333; } + +.markdown-body .pl-ent { color: #63a35c; } + +.markdown-body .pl-k { color: #a71d5d; } + +.markdown-body .pl-pds, +.markdown-body .pl-s, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sra, +.markdown-body .pl-sr .pl-sre { color: #183691; } + +.markdown-body .pl-v { color: #ed6a43; } + +.markdown-body .pl-id { color: #b52a1d; } + +.markdown-body .pl-ii { + background-color: #b52a1d; + color: #f8f8f8; +} + +.markdown-body .pl-sr .pl-cce { + color: #63a35c; + font-weight: bold; +} + +.markdown-body .pl-ml { color: #693a17; } + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + color: #1d3e81; + font-weight: bold; +} + +.markdown-body .pl-mq { color: #008080; } + +.markdown-body .pl-mi { + color: #333; + font-style: italic; +} + +.markdown-body .pl-mb { + color: #333; + font-weight: bold; +} + +.markdown-body .pl-md { + background-color: #ffecec; + color: #bd2c00; +} + +.markdown-body .pl-mi1 { + background-color: #eaffea; + color: #55a532; +} + +.markdown-body .pl-mdr { + color: #795da3; + font-weight: bold; +} + +.markdown-body .pl-mo { color: #1d3e81; } + +.markdown-body kbd { + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; + color: #555; + display: inline-block; + font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; + line-height: 10px; + padding: 3px 5px; + vertical-align: middle; +} + +.markdown-body .full-commit .btn-outline:not(:disabled):hover { + border: 1px solid #4078c0; + color: #4078c0; +} + +.markdown-body :checked + .radio-label { + border-color: #4078c0; + position: relative; + z-index: 1; +} + +.markdown-body .octicon { + display: inline-block; + fill: currentColor; + vertical-align: text-top; +} + +.markdown-body .task-list-item { list-style-type: none; } + +.markdown-body .task-list-item + .task-list-item { margin-top: 3px; } + +.markdown-body .task-list-item input { + margin: 0 0.2em 0.25em -1.6em; + vertical-align: middle; +} + +.markdown-body hr { border-bottom-color: #eee; } \ No newline at end of file diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/IntegrationTests.cs b/src/Markdig.SyntaxHighlighting.Tests.std/IntegrationTests.cs new file mode 100644 index 0000000..769394f --- /dev/null +++ b/src/Markdig.SyntaxHighlighting.Tests.std/IntegrationTests.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; + +namespace Markdig.SyntaxHighlighting.Tests +{ + public class IntegrationTests + { + + [Fact] + public void ShouldUseDefaultRendererIfLanguageIsNotIndicated() { + string testString = @" +# This is a test + +``` +{ + ""jsonProperty"": 1 +} +```"; + var pipeline = new MarkdownPipelineBuilder() + .UseAdvancedExtensions() + .UseSyntaxHighlighting() + .Build(); + var html = Markdown.ToHtml(testString, pipeline); + Assert.True(html.Contains("
"));
+            Assert.True(html.Contains("jsonProperty"));
+            Assert.False(html.Contains("lang-"));
+        }
+
+        [Fact]
+        public void ShouldColorizeSyntaxWhenLanguageIsIndicated()
+        {
+            string testString = @"
+# This is a test
+
+```json
+{
+    ""jsonProperty"": 1
+}
+```";
+            var pipeline = new MarkdownPipelineBuilder()
+                .UseAdvancedExtensions()
+                .UseSyntaxHighlighting()
+                .Build();
+            var html = Markdown.ToHtml(testString, pipeline);
+            Assert.True(html.Contains("";
+
+        [Theory]
+        [InlineData("csharp", "c#", null)]
+        [InlineData("cplusplus", "cpp", null)]
+        [InlineData("css", "css", null)]
+        [InlineData("aspx", "aspx(c#)", AspxCsFirstLine)]
+        [InlineData("javascript", "javascript", "var myVar = 1;")]
+        public void CanParse(string inputLanguage, string expectedId, string firstLine) {
+            var adapter = new LanguageTypeAdapter();
+            var result = adapter.Parse(inputLanguage, firstLine);
+            Assert.Equal(expectedId, result.Id);
+        }
+
+        [Theory]
+        [InlineData(null)]
+        [InlineData("fubar")]
+        public void CanNotParse(string inputLanguage) {
+            var adapter = new LanguageTypeAdapter();
+            var result = adapter.Parse(inputLanguage);
+            Assert.Null(result);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/Markdig.SyntaxHighlighting.Tests.csproj b/src/Markdig.SyntaxHighlighting.Tests.std/Markdig.SyntaxHighlighting.Tests.csproj
new file mode 100644
index 0000000..44c093a
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.std/Markdig.SyntaxHighlighting.Tests.csproj
@@ -0,0 +1,41 @@
+
+
+  
+    netstandard1.6
+  
+
+  
+    
+    
+    
+  
+
+  
+    
+      PreserveNewest
+    
+    
+      PreserveNewest
+    
+    
+      PreserveNewest
+    
+  
+
+  
+    
+    
+    
+  
+
+  
+    
+  
+
+  
+    
+      PreserveNewest
+    
+  
+
+
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingCodeBlockRendererTests.cs b/src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingCodeBlockRendererTests.cs
new file mode 100644
index 0000000..a8211ae
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingCodeBlockRendererTests.cs
@@ -0,0 +1,129 @@
+using System.IO;
+using System.Text;
+using Markdig.Helpers;
+using Markdig.Parsers;
+using Markdig.Renderers;
+using Markdig.Renderers.Html;
+using Markdig.Syntax;
+using Moq;
+using Xunit;
+
+namespace Markdig.SyntaxHighlighting.Tests {
+    public class SyntaxHighlightingCodeBlockRendererTests {
+        public string scriptBlock = @"```csharp
+var desktop = Environment.SpecialFolder.DesktopDirectory;
+```";
+
+        private static FencedCodeBlock GetFencedCodeBlock(string language = "language-csharp") {
+            return new FencedCodeBlock(new FencedCodeBlockParser()) {
+                Info = language,
+                Lines = new StringLineGroup(3) {
+                    new StringSlice("```csharp"),
+                    new StringSlice("var desktop = Environment.SpecialFolder.DesktopDirectory;"),
+                    new StringSlice("```")
+                }
+            };
+        }
+
+        [Fact]
+        public void ConstructorDoesNotThrow() {
+            var renderer = new SyntaxHighlightingCodeBlockRenderer();
+            Assert.NotNull(renderer);
+        }
+
+        [Fact]
+        public void DivWritten() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("", builder.ToString());
+        }
+
+        [Fact]
+        public void DivWrittenUnrecognisedLanguage()
+        {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock("language-made-up-language"); //
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("", builder.ToString());
+        }
+
+        [Fact]
+        public void EditorColorsCssClassAdded() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("editor-colors", builder.ToString());
+        }
+
+        [Fact]
+        public void LangCssClassAdded() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("lang-csharp", builder.ToString());
+        }
+
+        [Fact]
+        public void UnderlyingRendererCalledIfNotFencedCodeBlock() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()))
+                .Verifiable("Write was not called on the underlying renderer mock.");
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var writer = new StringWriter();
+            var markdownRenderer = new HtmlRenderer(writer);
+            var codeBlock = new CodeBlock(new IndentedCodeBlockParser());
+            renderer.Write(markdownRenderer, codeBlock);
+            underlyingRendererMock.VerifyAll();
+        }
+
+        [Fact]
+        public void WritesOutCode() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("var", builder.ToString());
+        }
+
+        [Fact]
+        public void WritesOutColouredCode() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("var", builder.ToString());
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingExtensionsTests.cs b/src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingExtensionsTests.cs
new file mode 100644
index 0000000..663d17b
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingExtensionsTests.cs
@@ -0,0 +1,76 @@
+using System;
+using System.IO;
+using Markdig.Renderers;
+using Markdig.Renderers.Html;
+using Xunit;
+
+namespace Markdig.SyntaxHighlighting.Tests {
+    public class SyntaxHighlightingExtensionsTests {
+        private class FakeRenderer : TextRendererBase {
+            public FakeRenderer(TextWriter writer) : base(writer) {}
+        }
+
+        [Fact]
+        public void CodeBlockRendererReplaced() {
+            var extension = new SyntaxHighlightingExtension();
+            var writer = new StringWriter();
+            var markdownRenderer = new HtmlRenderer(writer);
+
+            var oldRendererCount = markdownRenderer.ObjectRenderers.Count;
+            Assert.Equal(1,
+                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(CodeBlockRenderer)).Count);
+            extension.Setup(null, markdownRenderer);
+            Assert.Equal(0,
+                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(CodeBlockRenderer)).Count);
+            Assert.Equal(1,
+                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(SyntaxHighlightingCodeBlockRenderer))
+                    .Count);
+            Assert.Equal(oldRendererCount, markdownRenderer.ObjectRenderers.Count);
+        }
+
+        [Fact]
+        public void DoesntThrowWhenSetupPipeline() {
+            var extension = new SyntaxHighlightingExtension();
+            extension.Setup(new MarkdownPipelineBuilder());
+        }
+
+        [Fact]
+        public void PipelineChangedIfHtmlRenderer() {
+            var extension = new SyntaxHighlightingExtension();
+            var writer = new StringWriter();
+            var markdownRenderer = new HtmlRenderer(writer);
+            markdownRenderer.ObjectRenderers.RemoveAll(x => true);
+            extension.Setup(null, markdownRenderer);
+            Assert.Equal(1, markdownRenderer.ObjectRenderers.Count);
+        }
+
+        [Fact]
+        public void PipelineChangedIfHtmlRendererUsingExtensionMethod() {
+            var pipelineBuilder = new MarkdownPipelineBuilder();
+            pipelineBuilder.UseSyntaxHighlighting();
+            var pipeline = pipelineBuilder.Build();
+            var writer = new StringWriter();
+            var markdownRenderer = new HtmlRenderer(writer);
+            pipeline.Setup(markdownRenderer);
+            var renderer = markdownRenderer.ObjectRenderers.FindExact();
+            Assert.NotNull(renderer);
+        }
+
+        [Fact]
+        public void PipelineIntactIfNotHtmlRenderer() {
+            var extension = new SyntaxHighlightingExtension();
+            var writer = new StringWriter();
+            var markdownRenderer = new FakeRenderer(writer);
+            var oldRendererCount = markdownRenderer.ObjectRenderers.Count;
+            extension.Setup(null, markdownRenderer);
+            Assert.Equal(oldRendererCount, markdownRenderer.ObjectRenderers.Count);
+        }
+
+        [Fact]
+        public void ThrowsIfRendererIsNull() {
+            var extension = new SyntaxHighlightingExtension();
+            var extensionSetup = new Action(() => extension.Setup(null, null));
+            Assert.Throws(extensionSetup);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests/Example/CodeSample.cs b/src/Markdig.SyntaxHighlighting.Tests/Example/CodeSample.cs
new file mode 100644
index 0000000..abec8a2
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests/Example/CodeSample.cs
@@ -0,0 +1,34 @@
+using System;
+using System.IO;
+using System.Reflection;
+using Xunit;
+
+namespace Markdig.SyntaxHighlighting.Tests.Example {
+    public class CodeSample {
+        [Fact]
+        public void CodeSampleWorks() {
+            var codebase = Assembly.GetEntryAssembly().CodeBase;
+            var directory = Path.GetDirectoryName(codebase);
+            if (directory == null) {
+                throw new NullReferenceException("appPath came back null.");
+            }
+            var appPath = new Uri(directory).LocalPath;
+            var folder = Path.Combine(appPath, "Example");
+            var inputMarkdown = Path.Combine(folder, "README.md");
+            var referenceFile = Path.Combine(folder, "expected.html");
+            var expectedHtml = File.ReadAllText(referenceFile);
+            var markdown = File.ReadAllText(inputMarkdown);
+            var pipeline = new MarkdownPipelineBuilder()
+                .UseAdvancedExtensions()
+                .UseSyntaxHighlighting()
+                .Build();
+            var html = Markdown.ToHtml(markdown, pipeline);
+            var actualHtml = File.ReadAllText(Path.Combine(folder, "_template.html"))
+                .Replace("{{{this}}}", html);
+            actualHtml = actualHtml.Replace("\r\n", "\n").Replace("\n", "\r\n");
+            expectedHtml = expectedHtml.Replace("\r\n", "\n").Replace("\n", "\r\n");
+            File.WriteAllText(Path.Combine(folder, "actual.html"), actualHtml);
+            Assert.Equal(expectedHtml, actualHtml);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests/Example/README.md b/src/Markdig.SyntaxHighlighting.Tests/Example/README.md
new file mode 100644
index 0000000..15c2fb5
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests/Example/README.md
@@ -0,0 +1,17 @@
+This is before the table
+
+| Heading 1 | Heading 2 |
+| --------- | --------- |
+| Row 1     | Cell 2    |
+
+This is after the table
+
+```csharp
+// ©2015 Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
+
+namespace Amido.VersionDashboard.Web.Domain {
+    public interface IConfigProvider {
+        string GetSetting(string appSetting);
+    }
+}
+```
diff --git a/src/Markdig.SyntaxHighlighting.Tests/Example/_template.html b/src/Markdig.SyntaxHighlighting.Tests/Example/_template.html
new file mode 100644
index 0000000..4e7b31d
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests/Example/_template.html
@@ -0,0 +1,8 @@
+
+  
+    
+  
+  
+    {{{this}}}
+  
+
diff --git a/src/Markdig.SyntaxHighlighting.Tests/Example/expected.html b/src/Markdig.SyntaxHighlighting.Tests/Example/expected.html
new file mode 100644
index 0000000..256aafb
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests/Example/expected.html
@@ -0,0 +1,34 @@
+
+  
+    
+  
+  
+    

This is before the table

+ + + + + + + + + + + + + +
Heading 1Heading 2
Row 1Cell 2
+

This is after the table

+
+// ©2015 Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
+
+namespace Amido.VersionDashboard.Web.Domain {
+    public interface IConfigProvider {
+        string GetSetting(string appSetting);
+    }
+}
+
+
+ + + diff --git a/src/Markdig.SyntaxHighlighting.Tests/Example/gfm.css b/src/Markdig.SyntaxHighlighting.Tests/Example/gfm.css new file mode 100644 index 0000000..6879d45 --- /dev/null +++ b/src/Markdig.SyntaxHighlighting.Tests/Example/gfm.css @@ -0,0 +1,561 @@ +@font-face { + font-family: octicons-link; + src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); +} + +.markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + color: #333; + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 16px; + line-height: 1.6; + word-wrap: break-word; +} + +.markdown-body a { + -webkit-text-decoration-skip: objects; + background-color: transparent; +} + +.markdown-body a:active, +.markdown-body a:hover { outline-width: 0; } + +.markdown-body strong { font-weight: inherit; } + +.markdown-body strong { font-weight: bolder; } + +.markdown-body h1 { + font-size: 2em; + margin: 0.67em 0; +} + +.markdown-body img { border-style: none; } + +.markdown-body svg:not(:root) { overflow: hidden; } + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre { + font-family: monospace, monospace; + font-size: 1em; +} + +.markdown-body hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +.markdown-body input { + font: inherit; + margin: 0; +} + +.markdown-body input { overflow: visible; } + +.markdown-body button:-moz-focusring, +.markdown-body [type="button"]:-moz-focusring, +.markdown-body [type="reset"]:-moz-focusring, +.markdown-body [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } + +.markdown-body [type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body table { + border-collapse: collapse; + border-spacing: 0; +} + +.markdown-body td, +.markdown-body th { padding: 0; } + +.markdown-body * { box-sizing: border-box; } + +.markdown-body input { font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } + +.markdown-body a { + color: #4078c0; + text-decoration: none; +} + +.markdown-body a:hover, +.markdown-body a:active { text-decoration: underline; } + +.markdown-body hr { + background: transparent; + border: 0; + border-bottom: 1px solid #ddd; + height: 0; + margin: 15px 0; + overflow: hidden; +} + +.markdown-body hr::before { + content: ""; + display: table; +} + +.markdown-body hr::after { + clear: both; + content: ""; + display: table; +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + line-height: 1.5; + margin-bottom: 0; + margin-top: 0; +} + +.markdown-body h1 { font-size: 30px; } + +.markdown-body h2 { font-size: 21px; } + +.markdown-body h3 { font-size: 16px; } + +.markdown-body h4 { font-size: 14px; } + +.markdown-body h5 { font-size: 12px; } + +.markdown-body h6 { font-size: 11px; } + +.markdown-body p { + margin-bottom: 10px; + margin-top: 0; +} + +.markdown-body blockquote { margin: 0; } + +.markdown-body ul, +.markdown-body ol { + margin-bottom: 0; + margin-top: 0; + padding-left: 0; +} + +.markdown-body ol ol, +.markdown-body ul ol { list-style-type: lower-roman; } + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { list-style-type: lower-alpha; } + +.markdown-body dd { margin-left: 0; } + +.markdown-body code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 12px; +} + +.markdown-body pre { + font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin-bottom: 0; + margin-top: 0; +} + +.markdown-body .pl-0 { padding-left: 0 !important; } + +.markdown-body .pl-1 { padding-left: 3px !important; } + +.markdown-body .pl-2 { padding-left: 6px !important; } + +.markdown-body .pl-3 { padding-left: 12px !important; } + +.markdown-body .pl-4 { padding-left: 24px !important; } + +.markdown-body .pl-5 { padding-left: 36px !important; } + +.markdown-body .pl-6 { padding-left: 48px !important; } + +.markdown-body .form-select::-ms-expand { opacity: 0; } + +.markdown-body:before { + content: ""; + display: table; +} + +.markdown-body:after { + clear: both; + content: ""; + display: table; +} + +.markdown-body > *:first-child { margin-top: 0 !important; } + +.markdown-body > *:last-child { margin-bottom: 0 !important; } + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body .anchor { + display: inline-block; + margin-left: -18px; + padding-right: 2px; +} + +.markdown-body .anchor:focus { outline: none; } + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + font-weight: bold; + line-height: 1.4; + margin-bottom: 16px; + margin-top: 1em; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + color: #000; + vertical-align: middle; + visibility: hidden; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { text-decoration: none; } + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { visibility: visible; } + +.markdown-body h1 { + border-bottom: 1px solid #eee; + font-size: 2.25em; + line-height: 1.2; + padding-bottom: 0.3em; +} + +.markdown-body h1 .anchor { line-height: 1; } + +.markdown-body h2 { + border-bottom: 1px solid #eee; + font-size: 1.75em; + line-height: 1.225; + padding-bottom: 0.3em; +} + +.markdown-body h2 .anchor { line-height: 1; } + +.markdown-body h3 { + font-size: 1.5em; + line-height: 1.43; +} + +.markdown-body h3 .anchor { line-height: 1.2; } + +.markdown-body h4 { font-size: 1.25em; } + +.markdown-body h4 .anchor { line-height: 1.2; } + +.markdown-body h5 { font-size: 1em; } + +.markdown-body h5 .anchor { line-height: 1.1; } + +.markdown-body h6 { + color: #777; + font-size: 1em; +} + +.markdown-body h6 .anchor { line-height: 1.1; } + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin-bottom: 16px; + margin-top: 0; +} + +.markdown-body hr { + background-color: #e7e7e7; + border: 0 none; + height: 4px; + margin: 16px 0; + padding: 0; +} + +.markdown-body ul, +.markdown-body ol { padding-left: 2em; } + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-bottom: 0; + margin-top: 0; +} + +.markdown-body li > p { margin-top: 16px; } + +.markdown-body dl { padding: 0; } + +.markdown-body dl dt { + font-size: 1em; + font-style: italic; + font-weight: bold; + margin-top: 16px; + padding: 0; +} + +.markdown-body dl dd { + margin-bottom: 16px; + padding: 0 16px; +} + +.markdown-body blockquote { + border-left: 4px solid #ddd; + color: #777; + padding: 0 15px; +} + +.markdown-body blockquote > :first-child { margin-top: 0; } + +.markdown-body blockquote > :last-child { margin-bottom: 0; } + +.markdown-body table { + display: block; + overflow: auto; + width: 100%; + word-break: normal; + word-break: keep-all; +} + +.markdown-body table th { font-weight: bold; } + +.markdown-body table th, +.markdown-body table td { + border: 1px solid #ddd; + padding: 6px 13px; +} + +.markdown-body table tr { + background-color: #fff; + border-top: 1px solid #ccc; +} + +.markdown-body table tr:nth-child(2n) { background-color: #f8f8f8; } + +.markdown-body img { + background-color: #fff; + box-sizing: content-box; + max-width: 100%; +} + +.markdown-body code { + background-color: rgba(0, 0, 0, 0.04); + border-radius: 3px; + font-size: 85%; + margin: 0; + padding: 0; + padding-bottom: 0.2em; + padding-top: 0.2em; +} + +.markdown-body code:before, +.markdown-body code:after { + content: "\00a0"; + letter-spacing: -0.2em; +} + +.markdown-body pre > code { + background: transparent; + border: 0; + font-size: 100%; + margin: 0; + padding: 0; + white-space: pre; + word-break: normal; +} + +.markdown-body .highlight { margin-bottom: 16px; } + +.markdown-body .highlight pre, +.markdown-body pre { + background-color: #f7f7f7; + border-radius: 3px; + font-size: 85%; + line-height: 1.45; + overflow: auto; + padding: 16px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body pre { word-wrap: normal; } + +.markdown-body pre code { + background-color: transparent; + border: 0; + display: inline; + line-height: inherit; + margin: 0; + max-width: initial; + overflow: initial; + padding: 0; + word-wrap: normal; +} + +.markdown-body pre code:before, +.markdown-body pre code:after { content: normal; } + +.markdown-body kbd { + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; + color: #555; + display: inline-block; + font-size: 11px; + line-height: 10px; + padding: 3px 5px; + vertical-align: middle; +} + +.markdown-body .pl-c { color: #969896; } + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { color: #0086b3; } + +.markdown-body .pl-e, +.markdown-body .pl-en { color: #795da3; } + +.markdown-body .pl-s .pl-s1, +.markdown-body .pl-smi { color: #333; } + +.markdown-body .pl-ent { color: #63a35c; } + +.markdown-body .pl-k { color: #a71d5d; } + +.markdown-body .pl-pds, +.markdown-body .pl-s, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sra, +.markdown-body .pl-sr .pl-sre { color: #183691; } + +.markdown-body .pl-v { color: #ed6a43; } + +.markdown-body .pl-id { color: #b52a1d; } + +.markdown-body .pl-ii { + background-color: #b52a1d; + color: #f8f8f8; +} + +.markdown-body .pl-sr .pl-cce { + color: #63a35c; + font-weight: bold; +} + +.markdown-body .pl-ml { color: #693a17; } + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + color: #1d3e81; + font-weight: bold; +} + +.markdown-body .pl-mq { color: #008080; } + +.markdown-body .pl-mi { + color: #333; + font-style: italic; +} + +.markdown-body .pl-mb { + color: #333; + font-weight: bold; +} + +.markdown-body .pl-md { + background-color: #ffecec; + color: #bd2c00; +} + +.markdown-body .pl-mi1 { + background-color: #eaffea; + color: #55a532; +} + +.markdown-body .pl-mdr { + color: #795da3; + font-weight: bold; +} + +.markdown-body .pl-mo { color: #1d3e81; } + +.markdown-body kbd { + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; + color: #555; + display: inline-block; + font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; + line-height: 10px; + padding: 3px 5px; + vertical-align: middle; +} + +.markdown-body .full-commit .btn-outline:not(:disabled):hover { + border: 1px solid #4078c0; + color: #4078c0; +} + +.markdown-body :checked + .radio-label { + border-color: #4078c0; + position: relative; + z-index: 1; +} + +.markdown-body .octicon { + display: inline-block; + fill: currentColor; + vertical-align: text-top; +} + +.markdown-body .task-list-item { list-style-type: none; } + +.markdown-body .task-list-item + .task-list-item { margin-top: 3px; } + +.markdown-body .task-list-item input { + margin: 0 0.2em 0.25em -1.6em; + vertical-align: middle; +} + +.markdown-body hr { border-bottom-color: #eee; } \ No newline at end of file diff --git a/src/Markdig.SyntaxHighlighting.Tests/IntegrationTests.cs b/src/Markdig.SyntaxHighlighting.Tests/IntegrationTests.cs new file mode 100644 index 0000000..769394f --- /dev/null +++ b/src/Markdig.SyntaxHighlighting.Tests/IntegrationTests.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; + +namespace Markdig.SyntaxHighlighting.Tests +{ + public class IntegrationTests + { + + [Fact] + public void ShouldUseDefaultRendererIfLanguageIsNotIndicated() { + string testString = @" +# This is a test + +``` +{ + ""jsonProperty"": 1 +} +```"; + var pipeline = new MarkdownPipelineBuilder() + .UseAdvancedExtensions() + .UseSyntaxHighlighting() + .Build(); + var html = Markdown.ToHtml(testString, pipeline); + Assert.True(html.Contains("
"));
+            Assert.True(html.Contains("jsonProperty"));
+            Assert.False(html.Contains("lang-"));
+        }
+
+        [Fact]
+        public void ShouldColorizeSyntaxWhenLanguageIsIndicated()
+        {
+            string testString = @"
+# This is a test
+
+```json
+{
+    ""jsonProperty"": 1
+}
+```";
+            var pipeline = new MarkdownPipelineBuilder()
+                .UseAdvancedExtensions()
+                .UseSyntaxHighlighting()
+                .Build();
+            var html = Markdown.ToHtml(testString, pipeline);
+            Assert.True(html.Contains("";
+
+        [Theory]
+        [InlineData("csharp", "c#", null)]
+        [InlineData("cplusplus", "cpp", null)]
+        [InlineData("css", "css", null)]
+        [InlineData("aspx", "aspx(c#)", AspxCsFirstLine)]
+        [InlineData("javascript", "javascript", "var myVar = 1;")]
+        public void CanParse(string inputLanguage, string expectedId, string firstLine) {
+            var adapter = new LanguageTypeAdapter();
+            var result = adapter.Parse(inputLanguage, firstLine);
+            Assert.Equal(expectedId, result.Id);
+        }
+
+        [Theory]
+        [InlineData(null)]
+        [InlineData("fubar")]
+        public void CanNotParse(string inputLanguage) {
+            var adapter = new LanguageTypeAdapter();
+            var result = adapter.Parse(inputLanguage);
+            Assert.Null(result);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj b/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj
index 995cd8e..2b33b3d 100644
--- a/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj
+++ b/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj
@@ -1,7 +1,44 @@
 
 
   
-    netstandard1.6
+    netcoreapp1.0
+
+    false
   
 
+  
+    
+    
+    
+  
+
+  
+    
+      PreserveNewest
+    
+    
+      PreserveNewest
+    
+    
+  
+
+  
+    
+    
+    
+    
+    
+    
+  
+
+  
+    
+  
+
+  
+    
+      PreserveNewest
+    
+  
+
 
diff --git a/src/Markdig.SyntaxHighlighting.Tests/SyntaxHighlightingCodeBlockRendererTests.cs b/src/Markdig.SyntaxHighlighting.Tests/SyntaxHighlightingCodeBlockRendererTests.cs
new file mode 100644
index 0000000..a8211ae
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests/SyntaxHighlightingCodeBlockRendererTests.cs
@@ -0,0 +1,129 @@
+using System.IO;
+using System.Text;
+using Markdig.Helpers;
+using Markdig.Parsers;
+using Markdig.Renderers;
+using Markdig.Renderers.Html;
+using Markdig.Syntax;
+using Moq;
+using Xunit;
+
+namespace Markdig.SyntaxHighlighting.Tests {
+    public class SyntaxHighlightingCodeBlockRendererTests {
+        public string scriptBlock = @"```csharp
+var desktop = Environment.SpecialFolder.DesktopDirectory;
+```";
+
+        private static FencedCodeBlock GetFencedCodeBlock(string language = "language-csharp") {
+            return new FencedCodeBlock(new FencedCodeBlockParser()) {
+                Info = language,
+                Lines = new StringLineGroup(3) {
+                    new StringSlice("```csharp"),
+                    new StringSlice("var desktop = Environment.SpecialFolder.DesktopDirectory;"),
+                    new StringSlice("```")
+                }
+            };
+        }
+
+        [Fact]
+        public void ConstructorDoesNotThrow() {
+            var renderer = new SyntaxHighlightingCodeBlockRenderer();
+            Assert.NotNull(renderer);
+        }
+
+        [Fact]
+        public void DivWritten() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("", builder.ToString());
+        }
+
+        [Fact]
+        public void DivWrittenUnrecognisedLanguage()
+        {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock("language-made-up-language"); //
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("", builder.ToString());
+        }
+
+        [Fact]
+        public void EditorColorsCssClassAdded() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("editor-colors", builder.ToString());
+        }
+
+        [Fact]
+        public void LangCssClassAdded() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("lang-csharp", builder.ToString());
+        }
+
+        [Fact]
+        public void UnderlyingRendererCalledIfNotFencedCodeBlock() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()))
+                .Verifiable("Write was not called on the underlying renderer mock.");
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var writer = new StringWriter();
+            var markdownRenderer = new HtmlRenderer(writer);
+            var codeBlock = new CodeBlock(new IndentedCodeBlockParser());
+            renderer.Write(markdownRenderer, codeBlock);
+            underlyingRendererMock.VerifyAll();
+        }
+
+        [Fact]
+        public void WritesOutCode() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("var", builder.ToString());
+        }
+
+        [Fact]
+        public void WritesOutColouredCode() {
+            var underlyingRendererMock = new Mock();
+            underlyingRendererMock
+                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
+            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
+            var builder = new StringBuilder();
+            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
+            var codeBlock = GetFencedCodeBlock();
+            renderer.Write(markdownRenderer, codeBlock);
+            Assert.Contains("var", builder.ToString());
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests/SyntaxHighlightingExtensionsTests.cs b/src/Markdig.SyntaxHighlighting.Tests/SyntaxHighlightingExtensionsTests.cs
new file mode 100644
index 0000000..663d17b
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests/SyntaxHighlightingExtensionsTests.cs
@@ -0,0 +1,76 @@
+using System;
+using System.IO;
+using Markdig.Renderers;
+using Markdig.Renderers.Html;
+using Xunit;
+
+namespace Markdig.SyntaxHighlighting.Tests {
+    public class SyntaxHighlightingExtensionsTests {
+        private class FakeRenderer : TextRendererBase {
+            public FakeRenderer(TextWriter writer) : base(writer) {}
+        }
+
+        [Fact]
+        public void CodeBlockRendererReplaced() {
+            var extension = new SyntaxHighlightingExtension();
+            var writer = new StringWriter();
+            var markdownRenderer = new HtmlRenderer(writer);
+
+            var oldRendererCount = markdownRenderer.ObjectRenderers.Count;
+            Assert.Equal(1,
+                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(CodeBlockRenderer)).Count);
+            extension.Setup(null, markdownRenderer);
+            Assert.Equal(0,
+                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(CodeBlockRenderer)).Count);
+            Assert.Equal(1,
+                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(SyntaxHighlightingCodeBlockRenderer))
+                    .Count);
+            Assert.Equal(oldRendererCount, markdownRenderer.ObjectRenderers.Count);
+        }
+
+        [Fact]
+        public void DoesntThrowWhenSetupPipeline() {
+            var extension = new SyntaxHighlightingExtension();
+            extension.Setup(new MarkdownPipelineBuilder());
+        }
+
+        [Fact]
+        public void PipelineChangedIfHtmlRenderer() {
+            var extension = new SyntaxHighlightingExtension();
+            var writer = new StringWriter();
+            var markdownRenderer = new HtmlRenderer(writer);
+            markdownRenderer.ObjectRenderers.RemoveAll(x => true);
+            extension.Setup(null, markdownRenderer);
+            Assert.Equal(1, markdownRenderer.ObjectRenderers.Count);
+        }
+
+        [Fact]
+        public void PipelineChangedIfHtmlRendererUsingExtensionMethod() {
+            var pipelineBuilder = new MarkdownPipelineBuilder();
+            pipelineBuilder.UseSyntaxHighlighting();
+            var pipeline = pipelineBuilder.Build();
+            var writer = new StringWriter();
+            var markdownRenderer = new HtmlRenderer(writer);
+            pipeline.Setup(markdownRenderer);
+            var renderer = markdownRenderer.ObjectRenderers.FindExact();
+            Assert.NotNull(renderer);
+        }
+
+        [Fact]
+        public void PipelineIntactIfNotHtmlRenderer() {
+            var extension = new SyntaxHighlightingExtension();
+            var writer = new StringWriter();
+            var markdownRenderer = new FakeRenderer(writer);
+            var oldRendererCount = markdownRenderer.ObjectRenderers.Count;
+            extension.Setup(null, markdownRenderer);
+            Assert.Equal(oldRendererCount, markdownRenderer.ObjectRenderers.Count);
+        }
+
+        [Fact]
+        public void ThrowsIfRendererIsNull() {
+            var extension = new SyntaxHighlightingExtension();
+            var extensionSetup = new Action(() => extension.Setup(null, null));
+            Assert.Throws(extensionSetup);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.sln b/src/Markdig.SyntaxHighlighting.sln
index 777786b..817d1ba 100644
--- a/src/Markdig.SyntaxHighlighting.sln
+++ b/src/Markdig.SyntaxHighlighting.sln
@@ -5,7 +5,7 @@ VisualStudioVersion = 15.0.27703.2035
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Markdig.SyntaxHighlighting", "Markdig.SyntaxHighlighting\Markdig.SyntaxHighlighting.csproj", "{EDBB77FA-BBEA-471B-9F94-24BD9533A7F1}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Markdig.SyntaxHighlighting.Tests", "Markdig.SyntaxHighlighting.Tests\Markdig.SyntaxHighlighting.Tests.csproj", "{BF93875A-9976-4881-87D7-8EAA617FD137}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Markdig.SyntaxHighlighting.Tests", "Markdig.SyntaxHighlighting.Tests\Markdig.SyntaxHighlighting.Tests.csproj", "{CEBB07C8-7219-45DF-9195-918D4B7F01A4}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -17,10 +17,10 @@ Global
 		{EDBB77FA-BBEA-471B-9F94-24BD9533A7F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{EDBB77FA-BBEA-471B-9F94-24BD9533A7F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{EDBB77FA-BBEA-471B-9F94-24BD9533A7F1}.Release|Any CPU.Build.0 = Release|Any CPU
-		{BF93875A-9976-4881-87D7-8EAA617FD137}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{BF93875A-9976-4881-87D7-8EAA617FD137}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{BF93875A-9976-4881-87D7-8EAA617FD137}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{BF93875A-9976-4881-87D7-8EAA617FD137}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CEBB07C8-7219-45DF-9195-918D4B7F01A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CEBB07C8-7219-45DF-9195-918D4B7F01A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CEBB07C8-7219-45DF-9195-918D4B7F01A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CEBB07C8-7219-45DF-9195-918D4B7F01A4}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

From 341eb05df464034c4d998d5f9d88ed5977c8f41d Mon Sep 17 00:00:00 2001
From: Jesper Niedermann 
Date: Thu, 4 Oct 2018 23:33:51 +0200
Subject: [PATCH 4/6] All unittests running

---
 src/Markdig.SyntaxHighlighting.Tests/Example/CodeSample.cs   | 5 +++--
 .../Markdig.SyntaxHighlighting.Tests.csproj                  | 4 +++-
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/Markdig.SyntaxHighlighting.Tests/Example/CodeSample.cs b/src/Markdig.SyntaxHighlighting.Tests/Example/CodeSample.cs
index abec8a2..5013606 100644
--- a/src/Markdig.SyntaxHighlighting.Tests/Example/CodeSample.cs
+++ b/src/Markdig.SyntaxHighlighting.Tests/Example/CodeSample.cs
@@ -7,8 +7,9 @@ namespace Markdig.SyntaxHighlighting.Tests.Example {
     public class CodeSample {
         [Fact]
         public void CodeSampleWorks() {
-            var codebase = Assembly.GetEntryAssembly().CodeBase;
-            var directory = Path.GetDirectoryName(codebase);
+
+            var location = GetType().GetTypeInfo().Assembly.Location;
+            var directory = Path.GetDirectoryName(location);
             if (directory == null) {
                 throw new NullReferenceException("appPath came back null.");
             }
diff --git a/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj b/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj
index 2b33b3d..0e3fb3f 100644
--- a/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj
+++ b/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj
@@ -19,7 +19,9 @@
     
       PreserveNewest
     
-    
+    
+      PreserveNewest
+    
   
 
   

From d60045f285d4185ee330d4873d749c0f901bf921 Mon Sep 17 00:00:00 2001
From: Jesper Niedermann 
Date: Thu, 4 Oct 2018 23:41:37 +0200
Subject: [PATCH 5/6] Unittests work

---
 .../Markdig.SyntaxHighlighting.Tests.csproj                 | 6 +++++-
 .../Properties/AssemblyInfo.cs                              | 6 ++++++
 .../Markdig.SyntaxHighlighting.csproj                       | 5 +++++
 src/Markdig.SyntaxHighlighting/Properties/AssemblyInfo.cs   | 6 ++++++
 4 files changed, 22 insertions(+), 1 deletion(-)
 create mode 100644 src/Markdig.SyntaxHighlighting.Tests/Properties/AssemblyInfo.cs
 create mode 100644 src/Markdig.SyntaxHighlighting/Properties/AssemblyInfo.cs

diff --git a/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj b/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj
index 0e3fb3f..8655f79 100644
--- a/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj
+++ b/src/Markdig.SyntaxHighlighting.Tests/Markdig.SyntaxHighlighting.Tests.csproj
@@ -2,7 +2,7 @@
 
   
     netcoreapp1.0
-
+    false
     false
   
 
@@ -12,6 +12,10 @@
     
   
 
+  
+    
+  
+
   
     
       PreserveNewest
diff --git a/src/Markdig.SyntaxHighlighting.Tests/Properties/AssemblyInfo.cs b/src/Markdig.SyntaxHighlighting.Tests/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..49b1b81
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting.Tests/Properties/AssemblyInfo.cs
@@ -0,0 +1,6 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("Markdig.SyntaxHighlighting.Tests")]
+[assembly: AssemblyDescription("")]
+[assembly: Guid("b0696b7b-33c0-49b3-b8b2-de07a7fcfbe9")]
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.csproj b/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.csproj
index 4750d31..cc30733 100644
--- a/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.csproj
+++ b/src/Markdig.SyntaxHighlighting/Markdig.SyntaxHighlighting.csproj
@@ -2,8 +2,13 @@
 
   
     netstandard1.6
+    false
   
 
+  
+    
+  
+
   
     
     
diff --git a/src/Markdig.SyntaxHighlighting/Properties/AssemblyInfo.cs b/src/Markdig.SyntaxHighlighting/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..7130b41
--- /dev/null
+++ b/src/Markdig.SyntaxHighlighting/Properties/AssemblyInfo.cs
@@ -0,0 +1,6 @@
+using System.Reflection;
+using System.Resources;
+
+[assembly: AssemblyTitle("Markdig.SyntaxHighlighting")]
+[assembly: AssemblyDescription("")]
+[assembly: NeutralResourcesLanguage("en")]
\ No newline at end of file

From 4a870f9614c846fc8dc1fed704af0606b2907870 Mon Sep 17 00:00:00 2001
From: Jesper Niedermann 
Date: Thu, 4 Oct 2018 23:45:11 +0200
Subject: [PATCH 6/6] Removed obsolete stuff

---
 .../LanguageTypeAdapter.cs                    |  40 --
 .../Markdig.SyntaxHighlighting.csproj         |  66 ---
 .../Markdig.SyntaxHighlighting.nuspec         |  18 -
 .../Properties/AssemblyInfo.cs                |   6 -
 .../SyntaxHighlightingCodeBlockRenderer.cs    |  92 ---
 .../SyntaxHighlightingExtension.cs            |  36 --
 .../SyntaxHighlightingExtensions.cs           |  10 -
 .../packages.config                           |   5 -
 .../Example/CodeSample.cs                     |  34 --
 .../Example/README.md                         |  17 -
 .../Example/_template.html                    |   8 -
 .../Example/expected.html                     |  34 --
 .../Example/gfm.css                           | 561 ------------------
 .../IntegrationTests.cs                       |  55 --
 .../LanguageTypeAdapterTests.cs               |  28 -
 .../Markdig.SyntaxHighlighting.Tests.csproj   |  41 --
 ...yntaxHighlightingCodeBlockRendererTests.cs | 129 ----
 .../SyntaxHighlightingExtensionsTests.cs      |  76 ---
 .../Example/CodeSample.cs                     |  34 --
 .../Example/README.md                         |  17 -
 .../Example/_template.html                    |   8 -
 .../Example/expected.html                     |  34 --
 .../Example/gfm.css                           | 561 ------------------
 .../IntegrationTests.cs                       |  55 --
 .../LanguageTypeAdapterTests.cs               |  28 -
 .../Markdig.SyntaxHighlighting.Tests.csproj   | 123 ----
 .../Properties/AssemblyInfo.cs                |   6 -
 ...yntaxHighlightingCodeBlockRendererTests.cs | 129 ----
 .../SyntaxHighlightingExtensionsTests.cs      |  76 ---
 .../packages.config                           |  14 -
 .../Example/CodeSample.cs                     |  34 --
 .../Example/README.md                         |  17 -
 .../Example/_template.html                    |   8 -
 .../Example/expected.html                     |  34 --
 .../Example/gfm.css                           | 561 ------------------
 .../IntegrationTests.cs                       |  55 --
 .../LanguageTypeAdapterTests.cs               |  28 -
 .../Markdig.SyntaxHighlighting.Tests.csproj   |  41 --
 ...yntaxHighlightingCodeBlockRendererTests.cs | 129 ----
 .../SyntaxHighlightingExtensionsTests.cs      |  76 ---
 40 files changed, 3324 deletions(-)
 delete mode 100644 src/Markdig.SyntaxHighlighting.Portable/LanguageTypeAdapter.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.csproj
 delete mode 100644 src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.nuspec
 delete mode 100644 src/Markdig.SyntaxHighlighting.Portable/Properties/AssemblyInfo.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingCodeBlockRenderer.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtension.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtensions.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Portable/packages.config
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/Example/CodeSample.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/Example/README.md
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/Example/_template.html
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/Example/expected.html
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/Example/gfm.css
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/IntegrationTests.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/LanguageTypeAdapterTests.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/Markdig.SyntaxHighlighting.Tests.csproj
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingCodeBlockRendererTests.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingExtensionsTests.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/Example/CodeSample.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/Example/README.md
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/Example/_template.html
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/Example/expected.html
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/Example/gfm.css
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/IntegrationTests.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/LanguageTypeAdapterTests.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/Markdig.SyntaxHighlighting.Tests.csproj
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/Properties/AssemblyInfo.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/SyntaxHighlightingCodeBlockRendererTests.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/SyntaxHighlightingExtensionsTests.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.old/packages.config
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/Example/CodeSample.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/Example/README.md
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/Example/_template.html
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/Example/expected.html
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/Example/gfm.css
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/IntegrationTests.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/LanguageTypeAdapterTests.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/Markdig.SyntaxHighlighting.Tests.csproj
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingCodeBlockRendererTests.cs
 delete mode 100644 src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingExtensionsTests.cs

diff --git a/src/Markdig.SyntaxHighlighting.Portable/LanguageTypeAdapter.cs b/src/Markdig.SyntaxHighlighting.Portable/LanguageTypeAdapter.cs
deleted file mode 100644
index f68f782..0000000
--- a/src/Markdig.SyntaxHighlighting.Portable/LanguageTypeAdapter.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System.Collections.Generic;
-using System.Text.RegularExpressions;
-using ColorCode;
-
-namespace Markdig.SyntaxHighlighting {
-    public class LanguageTypeAdapter {
-        private readonly Dictionary languageMap = new Dictionary {
-            {"csharp", Languages.CSharp},
-            {"cplusplus", Languages.Cpp}
-        };
-
-        public ILanguage Parse(string id, string firstLine = null) {
-            if (id == null) {
-                return null;
-            }
-
-            if (languageMap.ContainsKey(id)) {
-                return languageMap[id];
-            }
-
-            if (!string.IsNullOrWhiteSpace(firstLine)) {
-                foreach (var lang in Languages.All) {
-                    if (lang.FirstLinePattern == null) {
-                        continue;
-                    }
-
-                    var firstLineMatcher = new Regex(lang.FirstLinePattern, RegexOptions.IgnoreCase);
-
-                    if (firstLineMatcher.IsMatch(firstLine)) {
-                        return lang;
-                    }
-                }
-            }
-
-            var byIdCanidate = Languages.FindById(id);
-
-            return byIdCanidate;
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.csproj b/src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.csproj
deleted file mode 100644
index 37477f3..0000000
--- a/src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.csproj
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-  
-  
-    10.0
-    Debug
-    AnyCPU
-    {5D1E4E89-83A2-4B14-BB11-DEB3C69665F0}
-    Library
-    Properties
-    Markdig.SyntaxHighlighting
-    Markdig.SyntaxHighlighting
-    en-US
-    512
-    {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
-    Profile259
-    v4.5
-  
-  
-    true
-    full
-    false
-    bin\Debug\
-    DEBUG;TRACE
-    prompt
-    4
-  
-  
-    pdbonly
-    true
-    bin\Release\
-    TRACE
-    prompt
-    4
-  
-  
-    
-    
-    
-      Properties\SharedAssemblyInfo.cs
-    
-    
-    
-    
-  
-  
-    
-      ..\packages\ColorCode.Portable.1.0.3\lib\portable45-net45+win8+wp8+wpa81\ColorCode.dll
-      True
-    
-    
-      ..\packages\Markdig.0.11.0\lib\portable40-net40+sl5+win8+wp8+wpa81\Markdig.dll
-    
-  
-  
-    
-  
-  
-  
-
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.nuspec b/src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.nuspec
deleted file mode 100644
index c5d91dc..0000000
--- a/src/Markdig.SyntaxHighlighting.Portable/Markdig.SyntaxHighlighting.nuspec
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-  
-    $id$
-    $version$
-    $title$
-    $author$
-    $author$
-    https://github.com/RichardSlater/Markdig.SyntaxHighlighting/blob/master/LICENSE.md
-    https://github.com/RichardSlater/Markdig.SyntaxHighlighting/
-    https://cdn.rawgit.com/RichardSlater/Markdig.SyntaxHighlighting/56be978d313c4199396ca1ac0b1407d2c1cb7dfa/assets/icon.png
-    false
-    Syntax Highlighting for Markdig.
-    Initial Version.
-    Copyright 2016 Richard Slater
-    markdown code syntax highlighting
-  
-
diff --git a/src/Markdig.SyntaxHighlighting.Portable/Properties/AssemblyInfo.cs b/src/Markdig.SyntaxHighlighting.Portable/Properties/AssemblyInfo.cs
deleted file mode 100644
index 7130b41..0000000
--- a/src/Markdig.SyntaxHighlighting.Portable/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-using System.Reflection;
-using System.Resources;
-
-[assembly: AssemblyTitle("Markdig.SyntaxHighlighting")]
-[assembly: AssemblyDescription("")]
-[assembly: NeutralResourcesLanguage("en")]
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingCodeBlockRenderer.cs b/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingCodeBlockRenderer.cs
deleted file mode 100644
index 3b2f76b..0000000
--- a/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingCodeBlockRenderer.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-using System.IO;
-using System.Text;
-using ColorCode;
-using Markdig.Parsers;
-using Markdig.Renderers;
-using Markdig.Renderers.Html;
-using Markdig.Syntax;
-
-namespace Markdig.SyntaxHighlighting {
-    public class SyntaxHighlightingCodeBlockRenderer : HtmlObjectRenderer {
-        private readonly CodeBlockRenderer _underlyingRenderer;
-        private readonly IStyleSheet _customCss;
-
-        public SyntaxHighlightingCodeBlockRenderer(CodeBlockRenderer underlyingRenderer = null, IStyleSheet customCss = null) {
-            _underlyingRenderer = underlyingRenderer ?? new CodeBlockRenderer();
-            _customCss = customCss;
-        }
-
-        protected override void Write(HtmlRenderer renderer, CodeBlock obj) {
-            var fencedCodeBlock = obj as FencedCodeBlock;
-            var parser = obj.Parser as FencedCodeBlockParser;
-            if (fencedCodeBlock == null || parser == null) {
-                _underlyingRenderer.Write(renderer, obj);
-                return;
-            }
-
-            var attributes = obj.TryGetAttributes() ?? new HtmlAttributes();
-
-            var languageMoniker = fencedCodeBlock.Info.Replace(parser.InfoPrefix, string.Empty);
-            if (string.IsNullOrEmpty(languageMoniker)) {
-                _underlyingRenderer.Write(renderer, obj);
-                return;
-            }
-
-            attributes.AddClass($"lang-{languageMoniker}");
-            attributes.Classes.Remove($"language-{languageMoniker}");
-
-            attributes.AddClass("editor-colors");
-
-            string firstLine;
-            var code = GetCode(obj, out firstLine);
-
-            renderer
-                .Write("");
-
-            var markup = ApplySyntaxHighlighting(languageMoniker, firstLine, code);
-
-            renderer.WriteLine(markup);
-            renderer.WriteLine("");
-        }
-
-        private string ApplySyntaxHighlighting(string languageMoniker, string firstLine, string code) {
-            var languageTypeAdapter = new LanguageTypeAdapter();
-            var language = languageTypeAdapter.Parse(languageMoniker, firstLine);
-
-            if (language == null) { //handle unrecognised language formats, e.g. when using mermaid diagrams
-                return code;
-            }
-
-            var codeBuilder = new StringBuilder();
-            var codeWriter = new StringWriter(codeBuilder);
-            var styleSheet = _customCss ?? StyleSheets.Default;
-            var colourizer = new CodeColorizer();
-            colourizer.Colorize(code, language, Formatters.Default, styleSheet, codeWriter);
-            return codeBuilder.ToString();
-        }
-
-        private static string GetCode(LeafBlock obj, out string firstLine) {
-            var code = new StringBuilder();
-            firstLine = null;
-            foreach (var line in obj.Lines.Lines) {
-                var slice = line.Slice;
-                if (slice.Text == null) {
-                    continue;
-                }
-
-                var lineText = slice.Text.Substring(slice.Start, slice.Length);
-
-                if (firstLine == null) {
-                    firstLine = lineText;
-                } else {
-                    code.AppendLine();
-                }
-
-                code.Append(lineText);
-            }
-            return code.ToString();
-        }
-    }
-}
diff --git a/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtension.cs b/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtension.cs
deleted file mode 100644
index e7dda54..0000000
--- a/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtension.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using ColorCode;
-using Markdig.Renderers;
-using Markdig.Renderers.Html;
-
-namespace Markdig.SyntaxHighlighting {
-    public class SyntaxHighlightingExtension : IMarkdownExtension {
-        private readonly IStyleSheet _customCss;
-
-        public SyntaxHighlightingExtension(IStyleSheet customCss = null)
-        {
-            _customCss = customCss;
-        }
-
-        public void Setup(MarkdownPipelineBuilder pipeline) {}
-
-        public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) {
-            if (renderer == null) {
-                throw new ArgumentNullException(nameof(renderer));
-            }
-
-            var htmlRenderer = renderer as TextRendererBase;
-            if (htmlRenderer == null) {
-                return;
-            }
-
-            var originalCodeBlockRenderer = htmlRenderer.ObjectRenderers.FindExact();
-            if (originalCodeBlockRenderer != null) {
-                htmlRenderer.ObjectRenderers.Remove(originalCodeBlockRenderer);
-            }
-
-            htmlRenderer.ObjectRenderers.AddIfNotAlready(
-                new SyntaxHighlightingCodeBlockRenderer(originalCodeBlockRenderer, _customCss));
-        }
-    }
-}
diff --git a/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtensions.cs b/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtensions.cs
deleted file mode 100644
index 668aced..0000000
--- a/src/Markdig.SyntaxHighlighting.Portable/SyntaxHighlightingExtensions.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using ColorCode;
-
-namespace Markdig.SyntaxHighlighting {
-    public static class SyntaxHighlightingExtensions {
-        public static MarkdownPipelineBuilder UseSyntaxHighlighting(this MarkdownPipelineBuilder pipeline, IStyleSheet customCss = null) {
-            pipeline.Extensions.Add(new SyntaxHighlightingExtension(customCss));
-            return pipeline;
-        }
-    }
-}
diff --git a/src/Markdig.SyntaxHighlighting.Portable/packages.config b/src/Markdig.SyntaxHighlighting.Portable/packages.config
deleted file mode 100644
index 2e1a130..0000000
--- a/src/Markdig.SyntaxHighlighting.Portable/packages.config
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-  
-  
-
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/CodeSample.cs b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/CodeSample.cs
deleted file mode 100644
index 43a269c..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/CodeSample.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-using System.IO;
-using System.Reflection;
-using Xunit;
-
-namespace Markdig.SyntaxHighlighting.Tests.Example {
-    public class CodeSample {
-        [Fact]
-        public void CodeSampleWorks() {
-            var codebase = Assembly.GetEntryAssembly().Location;
-            var directory = Path.GetDirectoryName(codebase);
-            if (directory == null) {
-                throw new NullReferenceException("appPath came back null.");
-            }
-            var appPath = new Uri(directory).LocalPath;
-            var folder = Path.Combine(appPath, "Example");
-            var inputMarkdown = Path.Combine(folder, "README.md");
-            var referenceFile = Path.Combine(folder, "expected.html");
-            var expectedHtml = File.ReadAllText(referenceFile);
-            var markdown = File.ReadAllText(inputMarkdown);
-            var pipeline = new MarkdownPipelineBuilder()
-                .UseAdvancedExtensions()
-                .UseSyntaxHighlighting()
-                .Build();
-            var html = Markdown.ToHtml(markdown, pipeline);
-            var actualHtml = File.ReadAllText(Path.Combine(folder, "_template.html"))
-                .Replace("{{{this}}}", html);
-            actualHtml = actualHtml.Replace("\r\n", "\n").Replace("\n", "\r\n");
-            expectedHtml = expectedHtml.Replace("\r\n", "\n").Replace("\n", "\r\n");
-            File.WriteAllText(Path.Combine(folder, "actual.html"), actualHtml);
-            Assert.Equal(expectedHtml, actualHtml);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/README.md b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/README.md
deleted file mode 100644
index 15c2fb5..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-This is before the table
-
-| Heading 1 | Heading 2 |
-| --------- | --------- |
-| Row 1     | Cell 2    |
-
-This is after the table
-
-```csharp
-// ©2015 Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
-
-namespace Amido.VersionDashboard.Web.Domain {
-    public interface IConfigProvider {
-        string GetSetting(string appSetting);
-    }
-}
-```
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/_template.html b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/_template.html
deleted file mode 100644
index 4e7b31d..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/_template.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-  
-    
-  
-  
-    {{{this}}}
-  
-
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/expected.html b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/expected.html
deleted file mode 100644
index 256aafb..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/expected.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-  
-    
-  
-  
-    

This is before the table

- - - - - - - - - - - - - -
Heading 1Heading 2
Row 1Cell 2
-

This is after the table

-
-// ©2015 Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
-
-namespace Amido.VersionDashboard.Web.Domain {
-    public interface IConfigProvider {
-        string GetSetting(string appSetting);
-    }
-}
-
-
- - - diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/gfm.css b/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/gfm.css deleted file mode 100644 index 6879d45..0000000 --- a/src/Markdig.SyntaxHighlighting.Tests.Flop/Example/gfm.css +++ /dev/null @@ -1,561 +0,0 @@ -@font-face { - font-family: octicons-link; - src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); -} - -.markdown-body { - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - color: #333; - font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 16px; - line-height: 1.6; - word-wrap: break-word; -} - -.markdown-body a { - -webkit-text-decoration-skip: objects; - background-color: transparent; -} - -.markdown-body a:active, -.markdown-body a:hover { outline-width: 0; } - -.markdown-body strong { font-weight: inherit; } - -.markdown-body strong { font-weight: bolder; } - -.markdown-body h1 { - font-size: 2em; - margin: 0.67em 0; -} - -.markdown-body img { border-style: none; } - -.markdown-body svg:not(:root) { overflow: hidden; } - -.markdown-body code, -.markdown-body kbd, -.markdown-body pre { - font-family: monospace, monospace; - font-size: 1em; -} - -.markdown-body hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -.markdown-body input { - font: inherit; - margin: 0; -} - -.markdown-body input { overflow: visible; } - -.markdown-body button:-moz-focusring, -.markdown-body [type="button"]:-moz-focusring, -.markdown-body [type="reset"]:-moz-focusring, -.markdown-body [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } - -.markdown-body [type="checkbox"] { - box-sizing: border-box; - padding: 0; -} - -.markdown-body table { - border-collapse: collapse; - border-spacing: 0; -} - -.markdown-body td, -.markdown-body th { padding: 0; } - -.markdown-body * { box-sizing: border-box; } - -.markdown-body input { font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } - -.markdown-body a { - color: #4078c0; - text-decoration: none; -} - -.markdown-body a:hover, -.markdown-body a:active { text-decoration: underline; } - -.markdown-body hr { - background: transparent; - border: 0; - border-bottom: 1px solid #ddd; - height: 0; - margin: 15px 0; - overflow: hidden; -} - -.markdown-body hr::before { - content: ""; - display: table; -} - -.markdown-body hr::after { - clear: both; - content: ""; - display: table; -} - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - line-height: 1.5; - margin-bottom: 0; - margin-top: 0; -} - -.markdown-body h1 { font-size: 30px; } - -.markdown-body h2 { font-size: 21px; } - -.markdown-body h3 { font-size: 16px; } - -.markdown-body h4 { font-size: 14px; } - -.markdown-body h5 { font-size: 12px; } - -.markdown-body h6 { font-size: 11px; } - -.markdown-body p { - margin-bottom: 10px; - margin-top: 0; -} - -.markdown-body blockquote { margin: 0; } - -.markdown-body ul, -.markdown-body ol { - margin-bottom: 0; - margin-top: 0; - padding-left: 0; -} - -.markdown-body ol ol, -.markdown-body ul ol { list-style-type: lower-roman; } - -.markdown-body ul ul ol, -.markdown-body ul ol ol, -.markdown-body ol ul ol, -.markdown-body ol ol ol { list-style-type: lower-alpha; } - -.markdown-body dd { margin-left: 0; } - -.markdown-body code { - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 12px; -} - -.markdown-body pre { - font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin-bottom: 0; - margin-top: 0; -} - -.markdown-body .pl-0 { padding-left: 0 !important; } - -.markdown-body .pl-1 { padding-left: 3px !important; } - -.markdown-body .pl-2 { padding-left: 6px !important; } - -.markdown-body .pl-3 { padding-left: 12px !important; } - -.markdown-body .pl-4 { padding-left: 24px !important; } - -.markdown-body .pl-5 { padding-left: 36px !important; } - -.markdown-body .pl-6 { padding-left: 48px !important; } - -.markdown-body .form-select::-ms-expand { opacity: 0; } - -.markdown-body:before { - content: ""; - display: table; -} - -.markdown-body:after { - clear: both; - content: ""; - display: table; -} - -.markdown-body > *:first-child { margin-top: 0 !important; } - -.markdown-body > *:last-child { margin-bottom: 0 !important; } - -.markdown-body a:not([href]) { - color: inherit; - text-decoration: none; -} - -.markdown-body .anchor { - display: inline-block; - margin-left: -18px; - padding-right: 2px; -} - -.markdown-body .anchor:focus { outline: none; } - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - font-weight: bold; - line-height: 1.4; - margin-bottom: 16px; - margin-top: 1em; -} - -.markdown-body h1 .octicon-link, -.markdown-body h2 .octicon-link, -.markdown-body h3 .octicon-link, -.markdown-body h4 .octicon-link, -.markdown-body h5 .octicon-link, -.markdown-body h6 .octicon-link { - color: #000; - vertical-align: middle; - visibility: hidden; -} - -.markdown-body h1:hover .anchor, -.markdown-body h2:hover .anchor, -.markdown-body h3:hover .anchor, -.markdown-body h4:hover .anchor, -.markdown-body h5:hover .anchor, -.markdown-body h6:hover .anchor { text-decoration: none; } - -.markdown-body h1:hover .anchor .octicon-link, -.markdown-body h2:hover .anchor .octicon-link, -.markdown-body h3:hover .anchor .octicon-link, -.markdown-body h4:hover .anchor .octicon-link, -.markdown-body h5:hover .anchor .octicon-link, -.markdown-body h6:hover .anchor .octicon-link { visibility: visible; } - -.markdown-body h1 { - border-bottom: 1px solid #eee; - font-size: 2.25em; - line-height: 1.2; - padding-bottom: 0.3em; -} - -.markdown-body h1 .anchor { line-height: 1; } - -.markdown-body h2 { - border-bottom: 1px solid #eee; - font-size: 1.75em; - line-height: 1.225; - padding-bottom: 0.3em; -} - -.markdown-body h2 .anchor { line-height: 1; } - -.markdown-body h3 { - font-size: 1.5em; - line-height: 1.43; -} - -.markdown-body h3 .anchor { line-height: 1.2; } - -.markdown-body h4 { font-size: 1.25em; } - -.markdown-body h4 .anchor { line-height: 1.2; } - -.markdown-body h5 { font-size: 1em; } - -.markdown-body h5 .anchor { line-height: 1.1; } - -.markdown-body h6 { - color: #777; - font-size: 1em; -} - -.markdown-body h6 .anchor { line-height: 1.1; } - -.markdown-body p, -.markdown-body blockquote, -.markdown-body ul, -.markdown-body ol, -.markdown-body dl, -.markdown-body table, -.markdown-body pre { - margin-bottom: 16px; - margin-top: 0; -} - -.markdown-body hr { - background-color: #e7e7e7; - border: 0 none; - height: 4px; - margin: 16px 0; - padding: 0; -} - -.markdown-body ul, -.markdown-body ol { padding-left: 2em; } - -.markdown-body ul ul, -.markdown-body ul ol, -.markdown-body ol ol, -.markdown-body ol ul { - margin-bottom: 0; - margin-top: 0; -} - -.markdown-body li > p { margin-top: 16px; } - -.markdown-body dl { padding: 0; } - -.markdown-body dl dt { - font-size: 1em; - font-style: italic; - font-weight: bold; - margin-top: 16px; - padding: 0; -} - -.markdown-body dl dd { - margin-bottom: 16px; - padding: 0 16px; -} - -.markdown-body blockquote { - border-left: 4px solid #ddd; - color: #777; - padding: 0 15px; -} - -.markdown-body blockquote > :first-child { margin-top: 0; } - -.markdown-body blockquote > :last-child { margin-bottom: 0; } - -.markdown-body table { - display: block; - overflow: auto; - width: 100%; - word-break: normal; - word-break: keep-all; -} - -.markdown-body table th { font-weight: bold; } - -.markdown-body table th, -.markdown-body table td { - border: 1px solid #ddd; - padding: 6px 13px; -} - -.markdown-body table tr { - background-color: #fff; - border-top: 1px solid #ccc; -} - -.markdown-body table tr:nth-child(2n) { background-color: #f8f8f8; } - -.markdown-body img { - background-color: #fff; - box-sizing: content-box; - max-width: 100%; -} - -.markdown-body code { - background-color: rgba(0, 0, 0, 0.04); - border-radius: 3px; - font-size: 85%; - margin: 0; - padding: 0; - padding-bottom: 0.2em; - padding-top: 0.2em; -} - -.markdown-body code:before, -.markdown-body code:after { - content: "\00a0"; - letter-spacing: -0.2em; -} - -.markdown-body pre > code { - background: transparent; - border: 0; - font-size: 100%; - margin: 0; - padding: 0; - white-space: pre; - word-break: normal; -} - -.markdown-body .highlight { margin-bottom: 16px; } - -.markdown-body .highlight pre, -.markdown-body pre { - background-color: #f7f7f7; - border-radius: 3px; - font-size: 85%; - line-height: 1.45; - overflow: auto; - padding: 16px; -} - -.markdown-body .highlight pre { - margin-bottom: 0; - word-break: normal; -} - -.markdown-body pre { word-wrap: normal; } - -.markdown-body pre code { - background-color: transparent; - border: 0; - display: inline; - line-height: inherit; - margin: 0; - max-width: initial; - overflow: initial; - padding: 0; - word-wrap: normal; -} - -.markdown-body pre code:before, -.markdown-body pre code:after { content: normal; } - -.markdown-body kbd { - background-color: #fcfcfc; - border: solid 1px #ccc; - border-bottom-color: #bbb; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #bbb; - color: #555; - display: inline-block; - font-size: 11px; - line-height: 10px; - padding: 3px 5px; - vertical-align: middle; -} - -.markdown-body .pl-c { color: #969896; } - -.markdown-body .pl-c1, -.markdown-body .pl-s .pl-v { color: #0086b3; } - -.markdown-body .pl-e, -.markdown-body .pl-en { color: #795da3; } - -.markdown-body .pl-s .pl-s1, -.markdown-body .pl-smi { color: #333; } - -.markdown-body .pl-ent { color: #63a35c; } - -.markdown-body .pl-k { color: #a71d5d; } - -.markdown-body .pl-pds, -.markdown-body .pl-s, -.markdown-body .pl-s .pl-pse .pl-s1, -.markdown-body .pl-sr, -.markdown-body .pl-sr .pl-cce, -.markdown-body .pl-sr .pl-sra, -.markdown-body .pl-sr .pl-sre { color: #183691; } - -.markdown-body .pl-v { color: #ed6a43; } - -.markdown-body .pl-id { color: #b52a1d; } - -.markdown-body .pl-ii { - background-color: #b52a1d; - color: #f8f8f8; -} - -.markdown-body .pl-sr .pl-cce { - color: #63a35c; - font-weight: bold; -} - -.markdown-body .pl-ml { color: #693a17; } - -.markdown-body .pl-mh, -.markdown-body .pl-mh .pl-en, -.markdown-body .pl-ms { - color: #1d3e81; - font-weight: bold; -} - -.markdown-body .pl-mq { color: #008080; } - -.markdown-body .pl-mi { - color: #333; - font-style: italic; -} - -.markdown-body .pl-mb { - color: #333; - font-weight: bold; -} - -.markdown-body .pl-md { - background-color: #ffecec; - color: #bd2c00; -} - -.markdown-body .pl-mi1 { - background-color: #eaffea; - color: #55a532; -} - -.markdown-body .pl-mdr { - color: #795da3; - font-weight: bold; -} - -.markdown-body .pl-mo { color: #1d3e81; } - -.markdown-body kbd { - background-color: #fcfcfc; - border: solid 1px #ccc; - border-bottom-color: #bbb; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #bbb; - color: #555; - display: inline-block; - font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; - line-height: 10px; - padding: 3px 5px; - vertical-align: middle; -} - -.markdown-body .full-commit .btn-outline:not(:disabled):hover { - border: 1px solid #4078c0; - color: #4078c0; -} - -.markdown-body :checked + .radio-label { - border-color: #4078c0; - position: relative; - z-index: 1; -} - -.markdown-body .octicon { - display: inline-block; - fill: currentColor; - vertical-align: text-top; -} - -.markdown-body .task-list-item { list-style-type: none; } - -.markdown-body .task-list-item + .task-list-item { margin-top: 3px; } - -.markdown-body .task-list-item input { - margin: 0 0.2em 0.25em -1.6em; - vertical-align: middle; -} - -.markdown-body hr { border-bottom-color: #eee; } \ No newline at end of file diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/IntegrationTests.cs b/src/Markdig.SyntaxHighlighting.Tests.Flop/IntegrationTests.cs deleted file mode 100644 index 769394f..0000000 --- a/src/Markdig.SyntaxHighlighting.Tests.Flop/IntegrationTests.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Xunit; - -namespace Markdig.SyntaxHighlighting.Tests -{ - public class IntegrationTests - { - - [Fact] - public void ShouldUseDefaultRendererIfLanguageIsNotIndicated() { - string testString = @" -# This is a test - -``` -{ - ""jsonProperty"": 1 -} -```"; - var pipeline = new MarkdownPipelineBuilder() - .UseAdvancedExtensions() - .UseSyntaxHighlighting() - .Build(); - var html = Markdown.ToHtml(testString, pipeline); - Assert.True(html.Contains("
"));
-            Assert.True(html.Contains("jsonProperty"));
-            Assert.False(html.Contains("lang-"));
-        }
-
-        [Fact]
-        public void ShouldColorizeSyntaxWhenLanguageIsIndicated()
-        {
-            string testString = @"
-# This is a test
-
-```json
-{
-    ""jsonProperty"": 1
-}
-```";
-            var pipeline = new MarkdownPipelineBuilder()
-                .UseAdvancedExtensions()
-                .UseSyntaxHighlighting()
-                .Build();
-            var html = Markdown.ToHtml(testString, pipeline);
-            Assert.True(html.Contains("";
-
-        [Theory]
-        [InlineData("csharp", "c#", null)]
-        [InlineData("cplusplus", "cpp", null)]
-        [InlineData("css", "css", null)]
-        [InlineData("aspx", "aspx(c#)", AspxCsFirstLine)]
-        [InlineData("javascript", "javascript", "var myVar = 1;")]
-        public void CanParse(string inputLanguage, string expectedId, string firstLine) {
-            var adapter = new LanguageTypeAdapter();
-            var result = adapter.Parse(inputLanguage, firstLine);
-            Assert.Equal(expectedId, result.Id);
-        }
-
-        [Theory]
-        [InlineData(null)]
-        [InlineData("fubar")]
-        public void CanNotParse(string inputLanguage) {
-            var adapter = new LanguageTypeAdapter();
-            var result = adapter.Parse(inputLanguage);
-            Assert.Null(result);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/Markdig.SyntaxHighlighting.Tests.csproj b/src/Markdig.SyntaxHighlighting.Tests.Flop/Markdig.SyntaxHighlighting.Tests.csproj
deleted file mode 100644
index d630dd8..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.Flop/Markdig.SyntaxHighlighting.Tests.csproj
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-  
-    netcoreapp2.1
-  
-
-  
-    
-    
-    
-  
-
-  
-    
-      PreserveNewest
-    
-    
-      PreserveNewest
-    
-    
-      PreserveNewest
-    
-  
-
-  
-    
-    
-    
-  
-
-  
-    
-  
-
-  
-    
-      PreserveNewest
-    
-  
-
-
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingCodeBlockRendererTests.cs b/src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingCodeBlockRendererTests.cs
deleted file mode 100644
index a8211ae..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingCodeBlockRendererTests.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-using System.IO;
-using System.Text;
-using Markdig.Helpers;
-using Markdig.Parsers;
-using Markdig.Renderers;
-using Markdig.Renderers.Html;
-using Markdig.Syntax;
-using Moq;
-using Xunit;
-
-namespace Markdig.SyntaxHighlighting.Tests {
-    public class SyntaxHighlightingCodeBlockRendererTests {
-        public string scriptBlock = @"```csharp
-var desktop = Environment.SpecialFolder.DesktopDirectory;
-```";
-
-        private static FencedCodeBlock GetFencedCodeBlock(string language = "language-csharp") {
-            return new FencedCodeBlock(new FencedCodeBlockParser()) {
-                Info = language,
-                Lines = new StringLineGroup(3) {
-                    new StringSlice("```csharp"),
-                    new StringSlice("var desktop = Environment.SpecialFolder.DesktopDirectory;"),
-                    new StringSlice("```")
-                }
-            };
-        }
-
-        [Fact]
-        public void ConstructorDoesNotThrow() {
-            var renderer = new SyntaxHighlightingCodeBlockRenderer();
-            Assert.NotNull(renderer);
-        }
-
-        [Fact]
-        public void DivWritten() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("", builder.ToString());
-        }
-
-        [Fact]
-        public void DivWrittenUnrecognisedLanguage()
-        {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock("language-made-up-language"); //
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("", builder.ToString());
-        }
-
-        [Fact]
-        public void EditorColorsCssClassAdded() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("editor-colors", builder.ToString());
-        }
-
-        [Fact]
-        public void LangCssClassAdded() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("lang-csharp", builder.ToString());
-        }
-
-        [Fact]
-        public void UnderlyingRendererCalledIfNotFencedCodeBlock() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()))
-                .Verifiable("Write was not called on the underlying renderer mock.");
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var writer = new StringWriter();
-            var markdownRenderer = new HtmlRenderer(writer);
-            var codeBlock = new CodeBlock(new IndentedCodeBlockParser());
-            renderer.Write(markdownRenderer, codeBlock);
-            underlyingRendererMock.VerifyAll();
-        }
-
-        [Fact]
-        public void WritesOutCode() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("var", builder.ToString());
-        }
-
-        [Fact]
-        public void WritesOutColouredCode() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("var", builder.ToString());
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingExtensionsTests.cs b/src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingExtensionsTests.cs
deleted file mode 100644
index 663d17b..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.Flop/SyntaxHighlightingExtensionsTests.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System;
-using System.IO;
-using Markdig.Renderers;
-using Markdig.Renderers.Html;
-using Xunit;
-
-namespace Markdig.SyntaxHighlighting.Tests {
-    public class SyntaxHighlightingExtensionsTests {
-        private class FakeRenderer : TextRendererBase {
-            public FakeRenderer(TextWriter writer) : base(writer) {}
-        }
-
-        [Fact]
-        public void CodeBlockRendererReplaced() {
-            var extension = new SyntaxHighlightingExtension();
-            var writer = new StringWriter();
-            var markdownRenderer = new HtmlRenderer(writer);
-
-            var oldRendererCount = markdownRenderer.ObjectRenderers.Count;
-            Assert.Equal(1,
-                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(CodeBlockRenderer)).Count);
-            extension.Setup(null, markdownRenderer);
-            Assert.Equal(0,
-                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(CodeBlockRenderer)).Count);
-            Assert.Equal(1,
-                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(SyntaxHighlightingCodeBlockRenderer))
-                    .Count);
-            Assert.Equal(oldRendererCount, markdownRenderer.ObjectRenderers.Count);
-        }
-
-        [Fact]
-        public void DoesntThrowWhenSetupPipeline() {
-            var extension = new SyntaxHighlightingExtension();
-            extension.Setup(new MarkdownPipelineBuilder());
-        }
-
-        [Fact]
-        public void PipelineChangedIfHtmlRenderer() {
-            var extension = new SyntaxHighlightingExtension();
-            var writer = new StringWriter();
-            var markdownRenderer = new HtmlRenderer(writer);
-            markdownRenderer.ObjectRenderers.RemoveAll(x => true);
-            extension.Setup(null, markdownRenderer);
-            Assert.Equal(1, markdownRenderer.ObjectRenderers.Count);
-        }
-
-        [Fact]
-        public void PipelineChangedIfHtmlRendererUsingExtensionMethod() {
-            var pipelineBuilder = new MarkdownPipelineBuilder();
-            pipelineBuilder.UseSyntaxHighlighting();
-            var pipeline = pipelineBuilder.Build();
-            var writer = new StringWriter();
-            var markdownRenderer = new HtmlRenderer(writer);
-            pipeline.Setup(markdownRenderer);
-            var renderer = markdownRenderer.ObjectRenderers.FindExact();
-            Assert.NotNull(renderer);
-        }
-
-        [Fact]
-        public void PipelineIntactIfNotHtmlRenderer() {
-            var extension = new SyntaxHighlightingExtension();
-            var writer = new StringWriter();
-            var markdownRenderer = new FakeRenderer(writer);
-            var oldRendererCount = markdownRenderer.ObjectRenderers.Count;
-            extension.Setup(null, markdownRenderer);
-            Assert.Equal(oldRendererCount, markdownRenderer.ObjectRenderers.Count);
-        }
-
-        [Fact]
-        public void ThrowsIfRendererIsNull() {
-            var extension = new SyntaxHighlightingExtension();
-            var extensionSetup = new Action(() => extension.Setup(null, null));
-            Assert.Throws(extensionSetup);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.old/Example/CodeSample.cs b/src/Markdig.SyntaxHighlighting.Tests.old/Example/CodeSample.cs
deleted file mode 100644
index 2bb03d2..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.old/Example/CodeSample.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-using System.IO;
-using System.Reflection;
-using Xunit;
-
-namespace Markdig.SyntaxHighlighting.Tests.Example {
-    public class CodeSample {
-        [Fact]
-        public void CodeSampleWorks() {
-            var codebase = Assembly.GetExecutingAssembly().GetName().CodeBase;
-            var directory = Path.GetDirectoryName(codebase);
-            if (directory == null) {
-                throw new NullReferenceException("appPath came back null.");
-            }
-            var appPath = new Uri(directory).LocalPath;
-            var folder = Path.Combine(appPath, "Example");
-            var inputMarkdown = Path.Combine(folder, "README.md");
-            var referenceFile = Path.Combine(folder, "expected.html");
-            var expectedHtml = File.ReadAllText(referenceFile);
-            var markdown = File.ReadAllText(inputMarkdown);
-            var pipeline = new MarkdownPipelineBuilder()
-                .UseAdvancedExtensions()
-                .UseSyntaxHighlighting()
-                .Build();
-            var html = Markdown.ToHtml(markdown, pipeline);
-            var actualHtml = File.ReadAllText(Path.Combine(folder, "_template.html"))
-                .Replace("{{{this}}}", html);
-            actualHtml = actualHtml.Replace("\r\n", "\n").Replace("\n", "\r\n");
-            expectedHtml = expectedHtml.Replace("\r\n", "\n").Replace("\n", "\r\n");
-            File.WriteAllText(Path.Combine(folder, "actual.html"), actualHtml);
-            Assert.Equal(expectedHtml, actualHtml);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.old/Example/README.md b/src/Markdig.SyntaxHighlighting.Tests.old/Example/README.md
deleted file mode 100644
index 15c2fb5..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.old/Example/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-This is before the table
-
-| Heading 1 | Heading 2 |
-| --------- | --------- |
-| Row 1     | Cell 2    |
-
-This is after the table
-
-```csharp
-// ©2015 Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
-
-namespace Amido.VersionDashboard.Web.Domain {
-    public interface IConfigProvider {
-        string GetSetting(string appSetting);
-    }
-}
-```
diff --git a/src/Markdig.SyntaxHighlighting.Tests.old/Example/_template.html b/src/Markdig.SyntaxHighlighting.Tests.old/Example/_template.html
deleted file mode 100644
index 4e7b31d..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.old/Example/_template.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-  
-    
-  
-  
-    {{{this}}}
-  
-
diff --git a/src/Markdig.SyntaxHighlighting.Tests.old/Example/expected.html b/src/Markdig.SyntaxHighlighting.Tests.old/Example/expected.html
deleted file mode 100644
index 256aafb..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.old/Example/expected.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-  
-    
-  
-  
-    

This is before the table

- - - - - - - - - - - - - -
Heading 1Heading 2
Row 1Cell 2
-

This is after the table

-
-// ©2015 Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
-
-namespace Amido.VersionDashboard.Web.Domain {
-    public interface IConfigProvider {
-        string GetSetting(string appSetting);
-    }
-}
-
-
- - - diff --git a/src/Markdig.SyntaxHighlighting.Tests.old/Example/gfm.css b/src/Markdig.SyntaxHighlighting.Tests.old/Example/gfm.css deleted file mode 100644 index 6879d45..0000000 --- a/src/Markdig.SyntaxHighlighting.Tests.old/Example/gfm.css +++ /dev/null @@ -1,561 +0,0 @@ -@font-face { - font-family: octicons-link; - src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); -} - -.markdown-body { - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - color: #333; - font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 16px; - line-height: 1.6; - word-wrap: break-word; -} - -.markdown-body a { - -webkit-text-decoration-skip: objects; - background-color: transparent; -} - -.markdown-body a:active, -.markdown-body a:hover { outline-width: 0; } - -.markdown-body strong { font-weight: inherit; } - -.markdown-body strong { font-weight: bolder; } - -.markdown-body h1 { - font-size: 2em; - margin: 0.67em 0; -} - -.markdown-body img { border-style: none; } - -.markdown-body svg:not(:root) { overflow: hidden; } - -.markdown-body code, -.markdown-body kbd, -.markdown-body pre { - font-family: monospace, monospace; - font-size: 1em; -} - -.markdown-body hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -.markdown-body input { - font: inherit; - margin: 0; -} - -.markdown-body input { overflow: visible; } - -.markdown-body button:-moz-focusring, -.markdown-body [type="button"]:-moz-focusring, -.markdown-body [type="reset"]:-moz-focusring, -.markdown-body [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } - -.markdown-body [type="checkbox"] { - box-sizing: border-box; - padding: 0; -} - -.markdown-body table { - border-collapse: collapse; - border-spacing: 0; -} - -.markdown-body td, -.markdown-body th { padding: 0; } - -.markdown-body * { box-sizing: border-box; } - -.markdown-body input { font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } - -.markdown-body a { - color: #4078c0; - text-decoration: none; -} - -.markdown-body a:hover, -.markdown-body a:active { text-decoration: underline; } - -.markdown-body hr { - background: transparent; - border: 0; - border-bottom: 1px solid #ddd; - height: 0; - margin: 15px 0; - overflow: hidden; -} - -.markdown-body hr::before { - content: ""; - display: table; -} - -.markdown-body hr::after { - clear: both; - content: ""; - display: table; -} - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - line-height: 1.5; - margin-bottom: 0; - margin-top: 0; -} - -.markdown-body h1 { font-size: 30px; } - -.markdown-body h2 { font-size: 21px; } - -.markdown-body h3 { font-size: 16px; } - -.markdown-body h4 { font-size: 14px; } - -.markdown-body h5 { font-size: 12px; } - -.markdown-body h6 { font-size: 11px; } - -.markdown-body p { - margin-bottom: 10px; - margin-top: 0; -} - -.markdown-body blockquote { margin: 0; } - -.markdown-body ul, -.markdown-body ol { - margin-bottom: 0; - margin-top: 0; - padding-left: 0; -} - -.markdown-body ol ol, -.markdown-body ul ol { list-style-type: lower-roman; } - -.markdown-body ul ul ol, -.markdown-body ul ol ol, -.markdown-body ol ul ol, -.markdown-body ol ol ol { list-style-type: lower-alpha; } - -.markdown-body dd { margin-left: 0; } - -.markdown-body code { - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 12px; -} - -.markdown-body pre { - font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin-bottom: 0; - margin-top: 0; -} - -.markdown-body .pl-0 { padding-left: 0 !important; } - -.markdown-body .pl-1 { padding-left: 3px !important; } - -.markdown-body .pl-2 { padding-left: 6px !important; } - -.markdown-body .pl-3 { padding-left: 12px !important; } - -.markdown-body .pl-4 { padding-left: 24px !important; } - -.markdown-body .pl-5 { padding-left: 36px !important; } - -.markdown-body .pl-6 { padding-left: 48px !important; } - -.markdown-body .form-select::-ms-expand { opacity: 0; } - -.markdown-body:before { - content: ""; - display: table; -} - -.markdown-body:after { - clear: both; - content: ""; - display: table; -} - -.markdown-body > *:first-child { margin-top: 0 !important; } - -.markdown-body > *:last-child { margin-bottom: 0 !important; } - -.markdown-body a:not([href]) { - color: inherit; - text-decoration: none; -} - -.markdown-body .anchor { - display: inline-block; - margin-left: -18px; - padding-right: 2px; -} - -.markdown-body .anchor:focus { outline: none; } - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - font-weight: bold; - line-height: 1.4; - margin-bottom: 16px; - margin-top: 1em; -} - -.markdown-body h1 .octicon-link, -.markdown-body h2 .octicon-link, -.markdown-body h3 .octicon-link, -.markdown-body h4 .octicon-link, -.markdown-body h5 .octicon-link, -.markdown-body h6 .octicon-link { - color: #000; - vertical-align: middle; - visibility: hidden; -} - -.markdown-body h1:hover .anchor, -.markdown-body h2:hover .anchor, -.markdown-body h3:hover .anchor, -.markdown-body h4:hover .anchor, -.markdown-body h5:hover .anchor, -.markdown-body h6:hover .anchor { text-decoration: none; } - -.markdown-body h1:hover .anchor .octicon-link, -.markdown-body h2:hover .anchor .octicon-link, -.markdown-body h3:hover .anchor .octicon-link, -.markdown-body h4:hover .anchor .octicon-link, -.markdown-body h5:hover .anchor .octicon-link, -.markdown-body h6:hover .anchor .octicon-link { visibility: visible; } - -.markdown-body h1 { - border-bottom: 1px solid #eee; - font-size: 2.25em; - line-height: 1.2; - padding-bottom: 0.3em; -} - -.markdown-body h1 .anchor { line-height: 1; } - -.markdown-body h2 { - border-bottom: 1px solid #eee; - font-size: 1.75em; - line-height: 1.225; - padding-bottom: 0.3em; -} - -.markdown-body h2 .anchor { line-height: 1; } - -.markdown-body h3 { - font-size: 1.5em; - line-height: 1.43; -} - -.markdown-body h3 .anchor { line-height: 1.2; } - -.markdown-body h4 { font-size: 1.25em; } - -.markdown-body h4 .anchor { line-height: 1.2; } - -.markdown-body h5 { font-size: 1em; } - -.markdown-body h5 .anchor { line-height: 1.1; } - -.markdown-body h6 { - color: #777; - font-size: 1em; -} - -.markdown-body h6 .anchor { line-height: 1.1; } - -.markdown-body p, -.markdown-body blockquote, -.markdown-body ul, -.markdown-body ol, -.markdown-body dl, -.markdown-body table, -.markdown-body pre { - margin-bottom: 16px; - margin-top: 0; -} - -.markdown-body hr { - background-color: #e7e7e7; - border: 0 none; - height: 4px; - margin: 16px 0; - padding: 0; -} - -.markdown-body ul, -.markdown-body ol { padding-left: 2em; } - -.markdown-body ul ul, -.markdown-body ul ol, -.markdown-body ol ol, -.markdown-body ol ul { - margin-bottom: 0; - margin-top: 0; -} - -.markdown-body li > p { margin-top: 16px; } - -.markdown-body dl { padding: 0; } - -.markdown-body dl dt { - font-size: 1em; - font-style: italic; - font-weight: bold; - margin-top: 16px; - padding: 0; -} - -.markdown-body dl dd { - margin-bottom: 16px; - padding: 0 16px; -} - -.markdown-body blockquote { - border-left: 4px solid #ddd; - color: #777; - padding: 0 15px; -} - -.markdown-body blockquote > :first-child { margin-top: 0; } - -.markdown-body blockquote > :last-child { margin-bottom: 0; } - -.markdown-body table { - display: block; - overflow: auto; - width: 100%; - word-break: normal; - word-break: keep-all; -} - -.markdown-body table th { font-weight: bold; } - -.markdown-body table th, -.markdown-body table td { - border: 1px solid #ddd; - padding: 6px 13px; -} - -.markdown-body table tr { - background-color: #fff; - border-top: 1px solid #ccc; -} - -.markdown-body table tr:nth-child(2n) { background-color: #f8f8f8; } - -.markdown-body img { - background-color: #fff; - box-sizing: content-box; - max-width: 100%; -} - -.markdown-body code { - background-color: rgba(0, 0, 0, 0.04); - border-radius: 3px; - font-size: 85%; - margin: 0; - padding: 0; - padding-bottom: 0.2em; - padding-top: 0.2em; -} - -.markdown-body code:before, -.markdown-body code:after { - content: "\00a0"; - letter-spacing: -0.2em; -} - -.markdown-body pre > code { - background: transparent; - border: 0; - font-size: 100%; - margin: 0; - padding: 0; - white-space: pre; - word-break: normal; -} - -.markdown-body .highlight { margin-bottom: 16px; } - -.markdown-body .highlight pre, -.markdown-body pre { - background-color: #f7f7f7; - border-radius: 3px; - font-size: 85%; - line-height: 1.45; - overflow: auto; - padding: 16px; -} - -.markdown-body .highlight pre { - margin-bottom: 0; - word-break: normal; -} - -.markdown-body pre { word-wrap: normal; } - -.markdown-body pre code { - background-color: transparent; - border: 0; - display: inline; - line-height: inherit; - margin: 0; - max-width: initial; - overflow: initial; - padding: 0; - word-wrap: normal; -} - -.markdown-body pre code:before, -.markdown-body pre code:after { content: normal; } - -.markdown-body kbd { - background-color: #fcfcfc; - border: solid 1px #ccc; - border-bottom-color: #bbb; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #bbb; - color: #555; - display: inline-block; - font-size: 11px; - line-height: 10px; - padding: 3px 5px; - vertical-align: middle; -} - -.markdown-body .pl-c { color: #969896; } - -.markdown-body .pl-c1, -.markdown-body .pl-s .pl-v { color: #0086b3; } - -.markdown-body .pl-e, -.markdown-body .pl-en { color: #795da3; } - -.markdown-body .pl-s .pl-s1, -.markdown-body .pl-smi { color: #333; } - -.markdown-body .pl-ent { color: #63a35c; } - -.markdown-body .pl-k { color: #a71d5d; } - -.markdown-body .pl-pds, -.markdown-body .pl-s, -.markdown-body .pl-s .pl-pse .pl-s1, -.markdown-body .pl-sr, -.markdown-body .pl-sr .pl-cce, -.markdown-body .pl-sr .pl-sra, -.markdown-body .pl-sr .pl-sre { color: #183691; } - -.markdown-body .pl-v { color: #ed6a43; } - -.markdown-body .pl-id { color: #b52a1d; } - -.markdown-body .pl-ii { - background-color: #b52a1d; - color: #f8f8f8; -} - -.markdown-body .pl-sr .pl-cce { - color: #63a35c; - font-weight: bold; -} - -.markdown-body .pl-ml { color: #693a17; } - -.markdown-body .pl-mh, -.markdown-body .pl-mh .pl-en, -.markdown-body .pl-ms { - color: #1d3e81; - font-weight: bold; -} - -.markdown-body .pl-mq { color: #008080; } - -.markdown-body .pl-mi { - color: #333; - font-style: italic; -} - -.markdown-body .pl-mb { - color: #333; - font-weight: bold; -} - -.markdown-body .pl-md { - background-color: #ffecec; - color: #bd2c00; -} - -.markdown-body .pl-mi1 { - background-color: #eaffea; - color: #55a532; -} - -.markdown-body .pl-mdr { - color: #795da3; - font-weight: bold; -} - -.markdown-body .pl-mo { color: #1d3e81; } - -.markdown-body kbd { - background-color: #fcfcfc; - border: solid 1px #ccc; - border-bottom-color: #bbb; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #bbb; - color: #555; - display: inline-block; - font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; - line-height: 10px; - padding: 3px 5px; - vertical-align: middle; -} - -.markdown-body .full-commit .btn-outline:not(:disabled):hover { - border: 1px solid #4078c0; - color: #4078c0; -} - -.markdown-body :checked + .radio-label { - border-color: #4078c0; - position: relative; - z-index: 1; -} - -.markdown-body .octicon { - display: inline-block; - fill: currentColor; - vertical-align: text-top; -} - -.markdown-body .task-list-item { list-style-type: none; } - -.markdown-body .task-list-item + .task-list-item { margin-top: 3px; } - -.markdown-body .task-list-item input { - margin: 0 0.2em 0.25em -1.6em; - vertical-align: middle; -} - -.markdown-body hr { border-bottom-color: #eee; } \ No newline at end of file diff --git a/src/Markdig.SyntaxHighlighting.Tests.old/IntegrationTests.cs b/src/Markdig.SyntaxHighlighting.Tests.old/IntegrationTests.cs deleted file mode 100644 index 769394f..0000000 --- a/src/Markdig.SyntaxHighlighting.Tests.old/IntegrationTests.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Xunit; - -namespace Markdig.SyntaxHighlighting.Tests -{ - public class IntegrationTests - { - - [Fact] - public void ShouldUseDefaultRendererIfLanguageIsNotIndicated() { - string testString = @" -# This is a test - -``` -{ - ""jsonProperty"": 1 -} -```"; - var pipeline = new MarkdownPipelineBuilder() - .UseAdvancedExtensions() - .UseSyntaxHighlighting() - .Build(); - var html = Markdown.ToHtml(testString, pipeline); - Assert.True(html.Contains("
"));
-            Assert.True(html.Contains("jsonProperty"));
-            Assert.False(html.Contains("lang-"));
-        }
-
-        [Fact]
-        public void ShouldColorizeSyntaxWhenLanguageIsIndicated()
-        {
-            string testString = @"
-# This is a test
-
-```json
-{
-    ""jsonProperty"": 1
-}
-```";
-            var pipeline = new MarkdownPipelineBuilder()
-                .UseAdvancedExtensions()
-                .UseSyntaxHighlighting()
-                .Build();
-            var html = Markdown.ToHtml(testString, pipeline);
-            Assert.True(html.Contains("";
-
-        [Theory]
-        [InlineData("csharp", "c#", null)]
-        [InlineData("cplusplus", "cpp", null)]
-        [InlineData("css", "css", null)]
-        [InlineData("aspx", "aspx(c#)", AspxCsFirstLine)]
-        [InlineData("javascript", "javascript", "var myVar = 1;")]
-        public void CanParse(string inputLanguage, string expectedId, string firstLine) {
-            var adapter = new LanguageTypeAdapter();
-            var result = adapter.Parse(inputLanguage, firstLine);
-            Assert.Equal(expectedId, result.Id);
-        }
-
-        [Theory]
-        [InlineData(null)]
-        [InlineData("fubar")]
-        public void CanNotParse(string inputLanguage) {
-            var adapter = new LanguageTypeAdapter();
-            var result = adapter.Parse(inputLanguage);
-            Assert.Null(result);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.old/Markdig.SyntaxHighlighting.Tests.csproj b/src/Markdig.SyntaxHighlighting.Tests.old/Markdig.SyntaxHighlighting.Tests.csproj
deleted file mode 100644
index 64373b2..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.old/Markdig.SyntaxHighlighting.Tests.csproj
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-  
-  
-  
-    Debug
-    AnyCPU
-    {B0696B7B-33C0-49B3-B8B2-DE07A7FCFBE9}
-    Library
-    Properties
-    Markdig.SyntaxHighlighting.Tests
-    Markdig.SyntaxHighlighting.Tests
-    v4.6.1
-    512
-    
-    
-  
-  
-    true
-    full
-    false
-    bin\Debug\
-    DEBUG;TRACE
-    prompt
-    4
-  
-  
-    pdbonly
-    true
-    bin\Release\
-    TRACE
-    prompt
-    4
-  
-  
-    
-      ..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll
-      True
-    
-    
-      ..\packages\ColorCode.Portable.1.0.3\lib\portable45-net45+win8+wp8+wpa81\ColorCode.dll
-      True
-    
-    
-      ..\packages\Markdig.0.11.0\lib\net40\Markdig.dll
-    
-    
-      ..\packages\Moq.4.5.16\lib\net45\Moq.dll
-      True
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-      ..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll
-      True
-    
-    
-      ..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll
-      True
-    
-    
-      ..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll
-      True
-    
-    
-      ..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll
-      True
-    
-  
-  
-    
-    
-    
-    
-    
-    
-      Properties\SharedAssemblyInfo.cs
-    
-    
-  
-  
-    
-      PreserveNewest
-    
-    
-      Designer
-    
-  
-  
-    
-      PreserveNewest
-    
-    
-      PreserveNewest
-    
-    
-      PreserveNewest
-    
-  
-  
-    
-  
-  
-  
-    
-      This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-    
-    
-  
-  
-
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.old/Properties/AssemblyInfo.cs b/src/Markdig.SyntaxHighlighting.Tests.old/Properties/AssemblyInfo.cs
deleted file mode 100644
index 49b1b81..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.old/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-[assembly: AssemblyTitle("Markdig.SyntaxHighlighting.Tests")]
-[assembly: AssemblyDescription("")]
-[assembly: Guid("b0696b7b-33c0-49b3-b8b2-de07a7fcfbe9")]
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.old/SyntaxHighlightingCodeBlockRendererTests.cs b/src/Markdig.SyntaxHighlighting.Tests.old/SyntaxHighlightingCodeBlockRendererTests.cs
deleted file mode 100644
index a8211ae..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.old/SyntaxHighlightingCodeBlockRendererTests.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-using System.IO;
-using System.Text;
-using Markdig.Helpers;
-using Markdig.Parsers;
-using Markdig.Renderers;
-using Markdig.Renderers.Html;
-using Markdig.Syntax;
-using Moq;
-using Xunit;
-
-namespace Markdig.SyntaxHighlighting.Tests {
-    public class SyntaxHighlightingCodeBlockRendererTests {
-        public string scriptBlock = @"```csharp
-var desktop = Environment.SpecialFolder.DesktopDirectory;
-```";
-
-        private static FencedCodeBlock GetFencedCodeBlock(string language = "language-csharp") {
-            return new FencedCodeBlock(new FencedCodeBlockParser()) {
-                Info = language,
-                Lines = new StringLineGroup(3) {
-                    new StringSlice("```csharp"),
-                    new StringSlice("var desktop = Environment.SpecialFolder.DesktopDirectory;"),
-                    new StringSlice("```")
-                }
-            };
-        }
-
-        [Fact]
-        public void ConstructorDoesNotThrow() {
-            var renderer = new SyntaxHighlightingCodeBlockRenderer();
-            Assert.NotNull(renderer);
-        }
-
-        [Fact]
-        public void DivWritten() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("", builder.ToString());
-        }
-
-        [Fact]
-        public void DivWrittenUnrecognisedLanguage()
-        {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock("language-made-up-language"); //
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("", builder.ToString());
-        }
-
-        [Fact]
-        public void EditorColorsCssClassAdded() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("editor-colors", builder.ToString());
-        }
-
-        [Fact]
-        public void LangCssClassAdded() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("lang-csharp", builder.ToString());
-        }
-
-        [Fact]
-        public void UnderlyingRendererCalledIfNotFencedCodeBlock() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()))
-                .Verifiable("Write was not called on the underlying renderer mock.");
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var writer = new StringWriter();
-            var markdownRenderer = new HtmlRenderer(writer);
-            var codeBlock = new CodeBlock(new IndentedCodeBlockParser());
-            renderer.Write(markdownRenderer, codeBlock);
-            underlyingRendererMock.VerifyAll();
-        }
-
-        [Fact]
-        public void WritesOutCode() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("var", builder.ToString());
-        }
-
-        [Fact]
-        public void WritesOutColouredCode() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("var", builder.ToString());
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.old/SyntaxHighlightingExtensionsTests.cs b/src/Markdig.SyntaxHighlighting.Tests.old/SyntaxHighlightingExtensionsTests.cs
deleted file mode 100644
index 663d17b..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.old/SyntaxHighlightingExtensionsTests.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System;
-using System.IO;
-using Markdig.Renderers;
-using Markdig.Renderers.Html;
-using Xunit;
-
-namespace Markdig.SyntaxHighlighting.Tests {
-    public class SyntaxHighlightingExtensionsTests {
-        private class FakeRenderer : TextRendererBase {
-            public FakeRenderer(TextWriter writer) : base(writer) {}
-        }
-
-        [Fact]
-        public void CodeBlockRendererReplaced() {
-            var extension = new SyntaxHighlightingExtension();
-            var writer = new StringWriter();
-            var markdownRenderer = new HtmlRenderer(writer);
-
-            var oldRendererCount = markdownRenderer.ObjectRenderers.Count;
-            Assert.Equal(1,
-                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(CodeBlockRenderer)).Count);
-            extension.Setup(null, markdownRenderer);
-            Assert.Equal(0,
-                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(CodeBlockRenderer)).Count);
-            Assert.Equal(1,
-                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(SyntaxHighlightingCodeBlockRenderer))
-                    .Count);
-            Assert.Equal(oldRendererCount, markdownRenderer.ObjectRenderers.Count);
-        }
-
-        [Fact]
-        public void DoesntThrowWhenSetupPipeline() {
-            var extension = new SyntaxHighlightingExtension();
-            extension.Setup(new MarkdownPipelineBuilder());
-        }
-
-        [Fact]
-        public void PipelineChangedIfHtmlRenderer() {
-            var extension = new SyntaxHighlightingExtension();
-            var writer = new StringWriter();
-            var markdownRenderer = new HtmlRenderer(writer);
-            markdownRenderer.ObjectRenderers.RemoveAll(x => true);
-            extension.Setup(null, markdownRenderer);
-            Assert.Equal(1, markdownRenderer.ObjectRenderers.Count);
-        }
-
-        [Fact]
-        public void PipelineChangedIfHtmlRendererUsingExtensionMethod() {
-            var pipelineBuilder = new MarkdownPipelineBuilder();
-            pipelineBuilder.UseSyntaxHighlighting();
-            var pipeline = pipelineBuilder.Build();
-            var writer = new StringWriter();
-            var markdownRenderer = new HtmlRenderer(writer);
-            pipeline.Setup(markdownRenderer);
-            var renderer = markdownRenderer.ObjectRenderers.FindExact();
-            Assert.NotNull(renderer);
-        }
-
-        [Fact]
-        public void PipelineIntactIfNotHtmlRenderer() {
-            var extension = new SyntaxHighlightingExtension();
-            var writer = new StringWriter();
-            var markdownRenderer = new FakeRenderer(writer);
-            var oldRendererCount = markdownRenderer.ObjectRenderers.Count;
-            extension.Setup(null, markdownRenderer);
-            Assert.Equal(oldRendererCount, markdownRenderer.ObjectRenderers.Count);
-        }
-
-        [Fact]
-        public void ThrowsIfRendererIsNull() {
-            var extension = new SyntaxHighlightingExtension();
-            var extensionSetup = new Action(() => extension.Setup(null, null));
-            Assert.Throws(extensionSetup);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.old/packages.config b/src/Markdig.SyntaxHighlighting.Tests.old/packages.config
deleted file mode 100644
index 820471c..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.old/packages.config
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/Example/CodeSample.cs b/src/Markdig.SyntaxHighlighting.Tests.std/Example/CodeSample.cs
deleted file mode 100644
index 43a269c..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.std/Example/CodeSample.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-using System.IO;
-using System.Reflection;
-using Xunit;
-
-namespace Markdig.SyntaxHighlighting.Tests.Example {
-    public class CodeSample {
-        [Fact]
-        public void CodeSampleWorks() {
-            var codebase = Assembly.GetEntryAssembly().Location;
-            var directory = Path.GetDirectoryName(codebase);
-            if (directory == null) {
-                throw new NullReferenceException("appPath came back null.");
-            }
-            var appPath = new Uri(directory).LocalPath;
-            var folder = Path.Combine(appPath, "Example");
-            var inputMarkdown = Path.Combine(folder, "README.md");
-            var referenceFile = Path.Combine(folder, "expected.html");
-            var expectedHtml = File.ReadAllText(referenceFile);
-            var markdown = File.ReadAllText(inputMarkdown);
-            var pipeline = new MarkdownPipelineBuilder()
-                .UseAdvancedExtensions()
-                .UseSyntaxHighlighting()
-                .Build();
-            var html = Markdown.ToHtml(markdown, pipeline);
-            var actualHtml = File.ReadAllText(Path.Combine(folder, "_template.html"))
-                .Replace("{{{this}}}", html);
-            actualHtml = actualHtml.Replace("\r\n", "\n").Replace("\n", "\r\n");
-            expectedHtml = expectedHtml.Replace("\r\n", "\n").Replace("\n", "\r\n");
-            File.WriteAllText(Path.Combine(folder, "actual.html"), actualHtml);
-            Assert.Equal(expectedHtml, actualHtml);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/Example/README.md b/src/Markdig.SyntaxHighlighting.Tests.std/Example/README.md
deleted file mode 100644
index 15c2fb5..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.std/Example/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-This is before the table
-
-| Heading 1 | Heading 2 |
-| --------- | --------- |
-| Row 1     | Cell 2    |
-
-This is after the table
-
-```csharp
-// ©2015 Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
-
-namespace Amido.VersionDashboard.Web.Domain {
-    public interface IConfigProvider {
-        string GetSetting(string appSetting);
-    }
-}
-```
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/Example/_template.html b/src/Markdig.SyntaxHighlighting.Tests.std/Example/_template.html
deleted file mode 100644
index 4e7b31d..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.std/Example/_template.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-  
-    
-  
-  
-    {{{this}}}
-  
-
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/Example/expected.html b/src/Markdig.SyntaxHighlighting.Tests.std/Example/expected.html
deleted file mode 100644
index 256aafb..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.std/Example/expected.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-  
-    
-  
-  
-    

This is before the table

- - - - - - - - - - - - - -
Heading 1Heading 2
Row 1Cell 2
-

This is after the table

-
-// ©2015 Amido Limited (https://www.amido.com), Licensed under the terms of the Apache 2.0 Licence (http://www.apache.org/licenses/LICENSE-2.0)
-
-namespace Amido.VersionDashboard.Web.Domain {
-    public interface IConfigProvider {
-        string GetSetting(string appSetting);
-    }
-}
-
-
- - - diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/Example/gfm.css b/src/Markdig.SyntaxHighlighting.Tests.std/Example/gfm.css deleted file mode 100644 index 6879d45..0000000 --- a/src/Markdig.SyntaxHighlighting.Tests.std/Example/gfm.css +++ /dev/null @@ -1,561 +0,0 @@ -@font-face { - font-family: octicons-link; - src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); -} - -.markdown-body { - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - color: #333; - font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 16px; - line-height: 1.6; - word-wrap: break-word; -} - -.markdown-body a { - -webkit-text-decoration-skip: objects; - background-color: transparent; -} - -.markdown-body a:active, -.markdown-body a:hover { outline-width: 0; } - -.markdown-body strong { font-weight: inherit; } - -.markdown-body strong { font-weight: bolder; } - -.markdown-body h1 { - font-size: 2em; - margin: 0.67em 0; -} - -.markdown-body img { border-style: none; } - -.markdown-body svg:not(:root) { overflow: hidden; } - -.markdown-body code, -.markdown-body kbd, -.markdown-body pre { - font-family: monospace, monospace; - font-size: 1em; -} - -.markdown-body hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -.markdown-body input { - font: inherit; - margin: 0; -} - -.markdown-body input { overflow: visible; } - -.markdown-body button:-moz-focusring, -.markdown-body [type="button"]:-moz-focusring, -.markdown-body [type="reset"]:-moz-focusring, -.markdown-body [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } - -.markdown-body [type="checkbox"] { - box-sizing: border-box; - padding: 0; -} - -.markdown-body table { - border-collapse: collapse; - border-spacing: 0; -} - -.markdown-body td, -.markdown-body th { padding: 0; } - -.markdown-body * { box-sizing: border-box; } - -.markdown-body input { font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } - -.markdown-body a { - color: #4078c0; - text-decoration: none; -} - -.markdown-body a:hover, -.markdown-body a:active { text-decoration: underline; } - -.markdown-body hr { - background: transparent; - border: 0; - border-bottom: 1px solid #ddd; - height: 0; - margin: 15px 0; - overflow: hidden; -} - -.markdown-body hr::before { - content: ""; - display: table; -} - -.markdown-body hr::after { - clear: both; - content: ""; - display: table; -} - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - line-height: 1.5; - margin-bottom: 0; - margin-top: 0; -} - -.markdown-body h1 { font-size: 30px; } - -.markdown-body h2 { font-size: 21px; } - -.markdown-body h3 { font-size: 16px; } - -.markdown-body h4 { font-size: 14px; } - -.markdown-body h5 { font-size: 12px; } - -.markdown-body h6 { font-size: 11px; } - -.markdown-body p { - margin-bottom: 10px; - margin-top: 0; -} - -.markdown-body blockquote { margin: 0; } - -.markdown-body ul, -.markdown-body ol { - margin-bottom: 0; - margin-top: 0; - padding-left: 0; -} - -.markdown-body ol ol, -.markdown-body ul ol { list-style-type: lower-roman; } - -.markdown-body ul ul ol, -.markdown-body ul ol ol, -.markdown-body ol ul ol, -.markdown-body ol ol ol { list-style-type: lower-alpha; } - -.markdown-body dd { margin-left: 0; } - -.markdown-body code { - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 12px; -} - -.markdown-body pre { - font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin-bottom: 0; - margin-top: 0; -} - -.markdown-body .pl-0 { padding-left: 0 !important; } - -.markdown-body .pl-1 { padding-left: 3px !important; } - -.markdown-body .pl-2 { padding-left: 6px !important; } - -.markdown-body .pl-3 { padding-left: 12px !important; } - -.markdown-body .pl-4 { padding-left: 24px !important; } - -.markdown-body .pl-5 { padding-left: 36px !important; } - -.markdown-body .pl-6 { padding-left: 48px !important; } - -.markdown-body .form-select::-ms-expand { opacity: 0; } - -.markdown-body:before { - content: ""; - display: table; -} - -.markdown-body:after { - clear: both; - content: ""; - display: table; -} - -.markdown-body > *:first-child { margin-top: 0 !important; } - -.markdown-body > *:last-child { margin-bottom: 0 !important; } - -.markdown-body a:not([href]) { - color: inherit; - text-decoration: none; -} - -.markdown-body .anchor { - display: inline-block; - margin-left: -18px; - padding-right: 2px; -} - -.markdown-body .anchor:focus { outline: none; } - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - font-weight: bold; - line-height: 1.4; - margin-bottom: 16px; - margin-top: 1em; -} - -.markdown-body h1 .octicon-link, -.markdown-body h2 .octicon-link, -.markdown-body h3 .octicon-link, -.markdown-body h4 .octicon-link, -.markdown-body h5 .octicon-link, -.markdown-body h6 .octicon-link { - color: #000; - vertical-align: middle; - visibility: hidden; -} - -.markdown-body h1:hover .anchor, -.markdown-body h2:hover .anchor, -.markdown-body h3:hover .anchor, -.markdown-body h4:hover .anchor, -.markdown-body h5:hover .anchor, -.markdown-body h6:hover .anchor { text-decoration: none; } - -.markdown-body h1:hover .anchor .octicon-link, -.markdown-body h2:hover .anchor .octicon-link, -.markdown-body h3:hover .anchor .octicon-link, -.markdown-body h4:hover .anchor .octicon-link, -.markdown-body h5:hover .anchor .octicon-link, -.markdown-body h6:hover .anchor .octicon-link { visibility: visible; } - -.markdown-body h1 { - border-bottom: 1px solid #eee; - font-size: 2.25em; - line-height: 1.2; - padding-bottom: 0.3em; -} - -.markdown-body h1 .anchor { line-height: 1; } - -.markdown-body h2 { - border-bottom: 1px solid #eee; - font-size: 1.75em; - line-height: 1.225; - padding-bottom: 0.3em; -} - -.markdown-body h2 .anchor { line-height: 1; } - -.markdown-body h3 { - font-size: 1.5em; - line-height: 1.43; -} - -.markdown-body h3 .anchor { line-height: 1.2; } - -.markdown-body h4 { font-size: 1.25em; } - -.markdown-body h4 .anchor { line-height: 1.2; } - -.markdown-body h5 { font-size: 1em; } - -.markdown-body h5 .anchor { line-height: 1.1; } - -.markdown-body h6 { - color: #777; - font-size: 1em; -} - -.markdown-body h6 .anchor { line-height: 1.1; } - -.markdown-body p, -.markdown-body blockquote, -.markdown-body ul, -.markdown-body ol, -.markdown-body dl, -.markdown-body table, -.markdown-body pre { - margin-bottom: 16px; - margin-top: 0; -} - -.markdown-body hr { - background-color: #e7e7e7; - border: 0 none; - height: 4px; - margin: 16px 0; - padding: 0; -} - -.markdown-body ul, -.markdown-body ol { padding-left: 2em; } - -.markdown-body ul ul, -.markdown-body ul ol, -.markdown-body ol ol, -.markdown-body ol ul { - margin-bottom: 0; - margin-top: 0; -} - -.markdown-body li > p { margin-top: 16px; } - -.markdown-body dl { padding: 0; } - -.markdown-body dl dt { - font-size: 1em; - font-style: italic; - font-weight: bold; - margin-top: 16px; - padding: 0; -} - -.markdown-body dl dd { - margin-bottom: 16px; - padding: 0 16px; -} - -.markdown-body blockquote { - border-left: 4px solid #ddd; - color: #777; - padding: 0 15px; -} - -.markdown-body blockquote > :first-child { margin-top: 0; } - -.markdown-body blockquote > :last-child { margin-bottom: 0; } - -.markdown-body table { - display: block; - overflow: auto; - width: 100%; - word-break: normal; - word-break: keep-all; -} - -.markdown-body table th { font-weight: bold; } - -.markdown-body table th, -.markdown-body table td { - border: 1px solid #ddd; - padding: 6px 13px; -} - -.markdown-body table tr { - background-color: #fff; - border-top: 1px solid #ccc; -} - -.markdown-body table tr:nth-child(2n) { background-color: #f8f8f8; } - -.markdown-body img { - background-color: #fff; - box-sizing: content-box; - max-width: 100%; -} - -.markdown-body code { - background-color: rgba(0, 0, 0, 0.04); - border-radius: 3px; - font-size: 85%; - margin: 0; - padding: 0; - padding-bottom: 0.2em; - padding-top: 0.2em; -} - -.markdown-body code:before, -.markdown-body code:after { - content: "\00a0"; - letter-spacing: -0.2em; -} - -.markdown-body pre > code { - background: transparent; - border: 0; - font-size: 100%; - margin: 0; - padding: 0; - white-space: pre; - word-break: normal; -} - -.markdown-body .highlight { margin-bottom: 16px; } - -.markdown-body .highlight pre, -.markdown-body pre { - background-color: #f7f7f7; - border-radius: 3px; - font-size: 85%; - line-height: 1.45; - overflow: auto; - padding: 16px; -} - -.markdown-body .highlight pre { - margin-bottom: 0; - word-break: normal; -} - -.markdown-body pre { word-wrap: normal; } - -.markdown-body pre code { - background-color: transparent; - border: 0; - display: inline; - line-height: inherit; - margin: 0; - max-width: initial; - overflow: initial; - padding: 0; - word-wrap: normal; -} - -.markdown-body pre code:before, -.markdown-body pre code:after { content: normal; } - -.markdown-body kbd { - background-color: #fcfcfc; - border: solid 1px #ccc; - border-bottom-color: #bbb; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #bbb; - color: #555; - display: inline-block; - font-size: 11px; - line-height: 10px; - padding: 3px 5px; - vertical-align: middle; -} - -.markdown-body .pl-c { color: #969896; } - -.markdown-body .pl-c1, -.markdown-body .pl-s .pl-v { color: #0086b3; } - -.markdown-body .pl-e, -.markdown-body .pl-en { color: #795da3; } - -.markdown-body .pl-s .pl-s1, -.markdown-body .pl-smi { color: #333; } - -.markdown-body .pl-ent { color: #63a35c; } - -.markdown-body .pl-k { color: #a71d5d; } - -.markdown-body .pl-pds, -.markdown-body .pl-s, -.markdown-body .pl-s .pl-pse .pl-s1, -.markdown-body .pl-sr, -.markdown-body .pl-sr .pl-cce, -.markdown-body .pl-sr .pl-sra, -.markdown-body .pl-sr .pl-sre { color: #183691; } - -.markdown-body .pl-v { color: #ed6a43; } - -.markdown-body .pl-id { color: #b52a1d; } - -.markdown-body .pl-ii { - background-color: #b52a1d; - color: #f8f8f8; -} - -.markdown-body .pl-sr .pl-cce { - color: #63a35c; - font-weight: bold; -} - -.markdown-body .pl-ml { color: #693a17; } - -.markdown-body .pl-mh, -.markdown-body .pl-mh .pl-en, -.markdown-body .pl-ms { - color: #1d3e81; - font-weight: bold; -} - -.markdown-body .pl-mq { color: #008080; } - -.markdown-body .pl-mi { - color: #333; - font-style: italic; -} - -.markdown-body .pl-mb { - color: #333; - font-weight: bold; -} - -.markdown-body .pl-md { - background-color: #ffecec; - color: #bd2c00; -} - -.markdown-body .pl-mi1 { - background-color: #eaffea; - color: #55a532; -} - -.markdown-body .pl-mdr { - color: #795da3; - font-weight: bold; -} - -.markdown-body .pl-mo { color: #1d3e81; } - -.markdown-body kbd { - background-color: #fcfcfc; - border: solid 1px #ccc; - border-bottom-color: #bbb; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #bbb; - color: #555; - display: inline-block; - font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; - line-height: 10px; - padding: 3px 5px; - vertical-align: middle; -} - -.markdown-body .full-commit .btn-outline:not(:disabled):hover { - border: 1px solid #4078c0; - color: #4078c0; -} - -.markdown-body :checked + .radio-label { - border-color: #4078c0; - position: relative; - z-index: 1; -} - -.markdown-body .octicon { - display: inline-block; - fill: currentColor; - vertical-align: text-top; -} - -.markdown-body .task-list-item { list-style-type: none; } - -.markdown-body .task-list-item + .task-list-item { margin-top: 3px; } - -.markdown-body .task-list-item input { - margin: 0 0.2em 0.25em -1.6em; - vertical-align: middle; -} - -.markdown-body hr { border-bottom-color: #eee; } \ No newline at end of file diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/IntegrationTests.cs b/src/Markdig.SyntaxHighlighting.Tests.std/IntegrationTests.cs deleted file mode 100644 index 769394f..0000000 --- a/src/Markdig.SyntaxHighlighting.Tests.std/IntegrationTests.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Xunit; - -namespace Markdig.SyntaxHighlighting.Tests -{ - public class IntegrationTests - { - - [Fact] - public void ShouldUseDefaultRendererIfLanguageIsNotIndicated() { - string testString = @" -# This is a test - -``` -{ - ""jsonProperty"": 1 -} -```"; - var pipeline = new MarkdownPipelineBuilder() - .UseAdvancedExtensions() - .UseSyntaxHighlighting() - .Build(); - var html = Markdown.ToHtml(testString, pipeline); - Assert.True(html.Contains("
"));
-            Assert.True(html.Contains("jsonProperty"));
-            Assert.False(html.Contains("lang-"));
-        }
-
-        [Fact]
-        public void ShouldColorizeSyntaxWhenLanguageIsIndicated()
-        {
-            string testString = @"
-# This is a test
-
-```json
-{
-    ""jsonProperty"": 1
-}
-```";
-            var pipeline = new MarkdownPipelineBuilder()
-                .UseAdvancedExtensions()
-                .UseSyntaxHighlighting()
-                .Build();
-            var html = Markdown.ToHtml(testString, pipeline);
-            Assert.True(html.Contains("";
-
-        [Theory]
-        [InlineData("csharp", "c#", null)]
-        [InlineData("cplusplus", "cpp", null)]
-        [InlineData("css", "css", null)]
-        [InlineData("aspx", "aspx(c#)", AspxCsFirstLine)]
-        [InlineData("javascript", "javascript", "var myVar = 1;")]
-        public void CanParse(string inputLanguage, string expectedId, string firstLine) {
-            var adapter = new LanguageTypeAdapter();
-            var result = adapter.Parse(inputLanguage, firstLine);
-            Assert.Equal(expectedId, result.Id);
-        }
-
-        [Theory]
-        [InlineData(null)]
-        [InlineData("fubar")]
-        public void CanNotParse(string inputLanguage) {
-            var adapter = new LanguageTypeAdapter();
-            var result = adapter.Parse(inputLanguage);
-            Assert.Null(result);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/Markdig.SyntaxHighlighting.Tests.csproj b/src/Markdig.SyntaxHighlighting.Tests.std/Markdig.SyntaxHighlighting.Tests.csproj
deleted file mode 100644
index 44c093a..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.std/Markdig.SyntaxHighlighting.Tests.csproj
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-  
-    netstandard1.6
-  
-
-  
-    
-    
-    
-  
-
-  
-    
-      PreserveNewest
-    
-    
-      PreserveNewest
-    
-    
-      PreserveNewest
-    
-  
-
-  
-    
-    
-    
-  
-
-  
-    
-  
-
-  
-    
-      PreserveNewest
-    
-  
-
-
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingCodeBlockRendererTests.cs b/src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingCodeBlockRendererTests.cs
deleted file mode 100644
index a8211ae..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingCodeBlockRendererTests.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-using System.IO;
-using System.Text;
-using Markdig.Helpers;
-using Markdig.Parsers;
-using Markdig.Renderers;
-using Markdig.Renderers.Html;
-using Markdig.Syntax;
-using Moq;
-using Xunit;
-
-namespace Markdig.SyntaxHighlighting.Tests {
-    public class SyntaxHighlightingCodeBlockRendererTests {
-        public string scriptBlock = @"```csharp
-var desktop = Environment.SpecialFolder.DesktopDirectory;
-```";
-
-        private static FencedCodeBlock GetFencedCodeBlock(string language = "language-csharp") {
-            return new FencedCodeBlock(new FencedCodeBlockParser()) {
-                Info = language,
-                Lines = new StringLineGroup(3) {
-                    new StringSlice("```csharp"),
-                    new StringSlice("var desktop = Environment.SpecialFolder.DesktopDirectory;"),
-                    new StringSlice("```")
-                }
-            };
-        }
-
-        [Fact]
-        public void ConstructorDoesNotThrow() {
-            var renderer = new SyntaxHighlightingCodeBlockRenderer();
-            Assert.NotNull(renderer);
-        }
-
-        [Fact]
-        public void DivWritten() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("", builder.ToString());
-        }
-
-        [Fact]
-        public void DivWrittenUnrecognisedLanguage()
-        {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock("language-made-up-language"); //
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("", builder.ToString());
-        }
-
-        [Fact]
-        public void EditorColorsCssClassAdded() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("editor-colors", builder.ToString());
-        }
-
-        [Fact]
-        public void LangCssClassAdded() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("lang-csharp", builder.ToString());
-        }
-
-        [Fact]
-        public void UnderlyingRendererCalledIfNotFencedCodeBlock() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()))
-                .Verifiable("Write was not called on the underlying renderer mock.");
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var writer = new StringWriter();
-            var markdownRenderer = new HtmlRenderer(writer);
-            var codeBlock = new CodeBlock(new IndentedCodeBlockParser());
-            renderer.Write(markdownRenderer, codeBlock);
-            underlyingRendererMock.VerifyAll();
-        }
-
-        [Fact]
-        public void WritesOutCode() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("var", builder.ToString());
-        }
-
-        [Fact]
-        public void WritesOutColouredCode() {
-            var underlyingRendererMock = new Mock();
-            underlyingRendererMock
-                .Setup(x => x.Write(It.IsAny(), It.IsAny()));
-            var renderer = new SyntaxHighlightingCodeBlockRenderer(underlyingRendererMock.Object);
-            var builder = new StringBuilder();
-            var markdownRenderer = new HtmlRenderer(new StringWriter(builder));
-            var codeBlock = GetFencedCodeBlock();
-            renderer.Write(markdownRenderer, codeBlock);
-            Assert.Contains("var", builder.ToString());
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingExtensionsTests.cs b/src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingExtensionsTests.cs
deleted file mode 100644
index 663d17b..0000000
--- a/src/Markdig.SyntaxHighlighting.Tests.std/SyntaxHighlightingExtensionsTests.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System;
-using System.IO;
-using Markdig.Renderers;
-using Markdig.Renderers.Html;
-using Xunit;
-
-namespace Markdig.SyntaxHighlighting.Tests {
-    public class SyntaxHighlightingExtensionsTests {
-        private class FakeRenderer : TextRendererBase {
-            public FakeRenderer(TextWriter writer) : base(writer) {}
-        }
-
-        [Fact]
-        public void CodeBlockRendererReplaced() {
-            var extension = new SyntaxHighlightingExtension();
-            var writer = new StringWriter();
-            var markdownRenderer = new HtmlRenderer(writer);
-
-            var oldRendererCount = markdownRenderer.ObjectRenderers.Count;
-            Assert.Equal(1,
-                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(CodeBlockRenderer)).Count);
-            extension.Setup(null, markdownRenderer);
-            Assert.Equal(0,
-                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(CodeBlockRenderer)).Count);
-            Assert.Equal(1,
-                markdownRenderer.ObjectRenderers.FindAll(x => x.GetType() == typeof(SyntaxHighlightingCodeBlockRenderer))
-                    .Count);
-            Assert.Equal(oldRendererCount, markdownRenderer.ObjectRenderers.Count);
-        }
-
-        [Fact]
-        public void DoesntThrowWhenSetupPipeline() {
-            var extension = new SyntaxHighlightingExtension();
-            extension.Setup(new MarkdownPipelineBuilder());
-        }
-
-        [Fact]
-        public void PipelineChangedIfHtmlRenderer() {
-            var extension = new SyntaxHighlightingExtension();
-            var writer = new StringWriter();
-            var markdownRenderer = new HtmlRenderer(writer);
-            markdownRenderer.ObjectRenderers.RemoveAll(x => true);
-            extension.Setup(null, markdownRenderer);
-            Assert.Equal(1, markdownRenderer.ObjectRenderers.Count);
-        }
-
-        [Fact]
-        public void PipelineChangedIfHtmlRendererUsingExtensionMethod() {
-            var pipelineBuilder = new MarkdownPipelineBuilder();
-            pipelineBuilder.UseSyntaxHighlighting();
-            var pipeline = pipelineBuilder.Build();
-            var writer = new StringWriter();
-            var markdownRenderer = new HtmlRenderer(writer);
-            pipeline.Setup(markdownRenderer);
-            var renderer = markdownRenderer.ObjectRenderers.FindExact();
-            Assert.NotNull(renderer);
-        }
-
-        [Fact]
-        public void PipelineIntactIfNotHtmlRenderer() {
-            var extension = new SyntaxHighlightingExtension();
-            var writer = new StringWriter();
-            var markdownRenderer = new FakeRenderer(writer);
-            var oldRendererCount = markdownRenderer.ObjectRenderers.Count;
-            extension.Setup(null, markdownRenderer);
-            Assert.Equal(oldRendererCount, markdownRenderer.ObjectRenderers.Count);
-        }
-
-        [Fact]
-        public void ThrowsIfRendererIsNull() {
-            var extension = new SyntaxHighlightingExtension();
-            var extensionSetup = new Action(() => extension.Setup(null, null));
-            Assert.Throws(extensionSetup);
-        }
-    }
-}
\ No newline at end of file