diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 82c931d16..5b93428a5 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -15,7 +15,7 @@
]
},
"fantomas-tool": {
- "version": "4.6.0-alpha-005",
+ "version": "4.6.0-alpha-006",
"commands": [
"fantomas"
]
diff --git a/.gitignore b/.gitignore
index 649fce3b6..4626b20db 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,3 +43,5 @@ tmp
*.binlog
version.props
src/Common/AssemblyInfo.?s
+tests/FSharp.Literate.Tests/output1/
+.vscode/
diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets
index 510d60d44..8d37e28bc 100644
--- a/.paket/Paket.Restore.targets
+++ b/.paket/Paket.Restore.targets
@@ -289,16 +289,14 @@
$(MSBuildProjectDirectory)/$(MSBuildProjectFile)
true
- false
- true
false
- true
+ true
false
true
false
- true
+ true
false
- true
+ true
$(PaketIntermediateOutputPath)\$(Configuration)
$(PaketIntermediateOutputPath)
@@ -316,53 +314,6 @@
-
output link translation](https://github.com/fsprojects/FSharp.Formatting/pull/718)
+
## 11.5.1
* [Allow user-set ids for xmldoc example nodes](https://github.com/fsprojects/FSharp.Formatting/pull/704)
@@ -558,7 +562,7 @@
* 2.2.12-beta - Better compatibility for the default font style
* 2.3.1-beta - Using new compiler services API, improved docs
* 2.3.2-beta - Update to FSharp.Compiler.Service v0.0.10
-* 2.3.3-beta - Update FSharp.Compiler.Service and add FSharp.Formatting.CommandTool package
+* 2.3.3-beta - Update FSharp.Compiler.Service and add fsdocs-tool package
* 2.3.4-beta - Fix dependency in NuGet package
* 2.3.5-beta - Omit non-public members from metadata docs by default
* 2.3.6-beta - Update documentation, fixes for Mono compatibility
diff --git a/build.fsx b/build.fsx
index 1d101f7a0..6edc67b87 100644
--- a/build.fsx
+++ b/build.fsx
@@ -37,8 +37,7 @@ let artifactsDir = __SOURCE_DIRECTORY__ @@ "artifacts"
// Read release notes document
let release = ReleaseNotes.load "RELEASE_NOTES.md"
-let projectRepo =
- "https://github.com/fsprojects/FSharp.Formatting"
+let projectRepo = "https://github.com/fsprojects/FSharp.Formatting"
// --------------------------------------------------------------------------------------
// Generate assembly info files with the right version & up-to-date information
@@ -124,7 +123,7 @@ Target.create "GenerateDocs" (fun _ ->
+ artifactsDir
+ " --tool-path "
+ artifactsDir
- + " FSharp.Formatting.CommandTool")
+ + " fsdocs-tool")
|> ignore
CreateProcess.fromRawCommand
@@ -138,7 +137,7 @@ Target.create "GenerateDocs" (fun _ ->
|> Proc.run
|> ignore
// DotNet.exec id "fsdocs" "build --strict --clean --properties Configuration=Release" |> ignore
- // DotNet.exec id "tool" "uninstall --local FSharp.Formatting.CommandTool" |> ignore
+ // DotNet.exec id "tool" "uninstall --local fsdocs-tool" |> ignore
Shell.cleanDir ".packages")
Target.create "All" ignore
diff --git a/docs/_template.ipynb b/docs/_template.ipynb
index 203232ceb..8b1378917 100644
--- a/docs/_template.ipynb
+++ b/docs/_template.ipynb
@@ -1 +1 @@
-{{cells}}
+
diff --git a/docs/apidocs.fsx b/docs/apidocs.fsx
index f66d3e5fc..237d10392 100644
--- a/docs/apidocs.fsx
+++ b/docs/apidocs.fsx
@@ -254,8 +254,7 @@ open System.IO
For example the `cref:M:FSharp.Formatting.ApiDocs.ApiDocs.GenerateHtml` method:
*)
-let file =
- Path.Combine(root, "bin/YourLibrary.dll")
+let file = Path.Combine(root, "bin/YourLibrary.dll")
let input = ApiDocInput.FromFile(file)
diff --git a/docs/commandline.md b/docs/commandline.md
index 4657b46ff..e6afcb7a3 100644
--- a/docs/commandline.md
+++ b/docs/commandline.md
@@ -8,7 +8,7 @@ index: 1
To use F# Formatting tools via the command line, you can use the `fsdocs` dotnet tool.
[lang=text]
- dotnet tool install FSharp.Formatting.CommandTool
+ dotnet tool install fsdocs-tool
dotnet fsdocs [command] [options]
## The build command
diff --git a/docs/content.fsx b/docs/content.fsx
index de42531a8..5356f233f 100644
--- a/docs/content.fsx
+++ b/docs/content.fsx
@@ -97,7 +97,17 @@ The `categoryindex` determines the ordering of categories.
The `index` determines the ordering of within each category.
The `title` is used in the navigation bar instead of any title inferred from the document.
+## Link Translation for Inputs
+If an input is used in markdown as a target of a markdown direct link then that is replaced by the output file. For example:
+
+ [Some Text](some-file.md)
+
+becomes
+
+ [Some Text](some-file.html)
+
+if `some-file.md` is one of the inputs.
## Multi-language Content
diff --git a/docs/evaluation.fsx b/docs/evaluation.fsx
index aa5d2cf8c..2327b6901 100644
--- a/docs/evaluation.fsx
+++ b/docs/evaluation.fsx
@@ -119,8 +119,7 @@ let a = 10
// Create evaluator and parse script
let fsi = FsiEvaluator()
-let doc =
- Literate.ParseScriptString(content, fsiEvaluator = fsi)
+let doc = Literate.ParseScriptString(content, fsiEvaluator = fsi)
Literate.ToHtml(doc)
(**
@@ -184,8 +183,7 @@ let listy =
let test = ["one";"two";"three"]
(*** include-value:test ***)"""
-let docOl =
- Literate.ParseScriptString(listy, fsiEvaluator = fsiEvaluator)
+let docOl = Literate.ParseScriptString(listy, fsiEvaluator = fsiEvaluator)
Literate.ToHtml(docOl)
(**
diff --git a/docs/index.md b/docs/index.md
index 592db31cd..78bf731c9 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -6,7 +6,7 @@ generating API documentation. F# Formatting package is used by this project and
To use the tool, install and use the [fsdocs](commandline.html) tool in a typical F# project with
F# project files plus markdown and script content in the `docs` directory:
- dotnet tool install FSharp.Formatting.CommandTool
+ dotnet tool install fsdocs-tool
dotnet fsdocs build
dotnet fsdocs watch
diff --git a/docs/literate.fsx b/docs/literate.fsx
index c809fa009..4f0270369 100644
--- a/docs/literate.fsx
+++ b/docs/literate.fsx
@@ -195,20 +195,20 @@ Literate scripts and markdown can by turned into LaTex, Python Notebooks and F#
A header may be needed to get the code to load, a typical example is this:
```text
-(*** condition: prepare ***)
-#nowarn "211"
-#I "../src/FSharp.Formatting/bin/Release/netstandard2.1"
-#r "FSharp.Formatting.Common.dll"
-#r "FSharp.Formatting.Markdown.dll"
-#r "FSharp.Formatting.CodeFormat.dll"
-#r "FSharp.Formatting.Literate.dll"
-(*** condition: fsx ***)
+ (*** condition: prepare ***)
+ #nowarn "211"
+ #I "../src/FSharp.Formatting/bin/Release/netstandard2.1"
+ #r "FSharp.Formatting.Common.dll"
+ #r "FSharp.Formatting.Markdown.dll"
+ #r "FSharp.Formatting.CodeFormat.dll"
+ #r "FSharp.Formatting.Literate.dll"
+ (*** condition: fsx ***)
#if FSX
-#r "nuget: FSharp.Formatting,{{package-version}}"
+ #r "nuget: FSharp.Formatting,{{package-version}}"
#endif // FSX
-(*** condition: ipynb ***)
+ (*** condition: ipynb ***)
#if IPYNB
-#r "nuget: FSharp.Formatting,{{package-version}}"
+ #r "nuget: FSharp.Formatting,{{package-version}}"
#endif // IPYNB
```
@@ -223,13 +223,11 @@ open FSharp.Formatting.Literate
let source = __SOURCE_DIRECTORY__
let template = Path.Combine(source, "template.html")
-let script =
- Path.Combine(source, "../docs/script.fsx")
+let script = Path.Combine(source, "../docs/script.fsx")
Literate.ConvertScriptFile(script, template)
-let doc =
- Path.Combine(source, "../docs/document.md")
+let doc = Path.Combine(source, "../docs/document.md")
Literate.ConvertMarkdownFile(doc, template)
@@ -257,13 +255,11 @@ example shows how to call the methods to generate LaTeX documents:
*)
let templateTex = Path.Combine(source, "template.tex")
-let scriptTex =
- Path.Combine(source, "../docs/script.fsx")
+let scriptTex = Path.Combine(source, "../docs/script.fsx")
Literate.ConvertScriptFile(scriptTex, templateTex, outputKind = OutputKind.Latex)
-let docTex =
- Path.Combine(source, "../docs/document.md")
+let docTex = Path.Combine(source, "../docs/document.md")
Literate.ConvertMarkdownFile(docTex, templateTex, outputKind = OutputKind.Latex)
@@ -275,13 +271,11 @@ by setting the named parameter `format` to `OutputKind.Pynb`:
*)
// Process script file, Markdown document and a directory
-let scriptPynb =
- Path.Combine(source, "../docs/script.fsx")
+let scriptPynb = Path.Combine(source, "../docs/script.fsx")
Literate.ConvertScriptFile(scriptPynb, outputKind = OutputKind.Pynb)
-let docPynb =
- Path.Combine(source, "../docs/document.md")
+let docPynb = Path.Combine(source, "../docs/document.md")
Literate.ConvertMarkdownFile(docPynb, outputKind = OutputKind.Pynb)
diff --git a/docs/upgrade.md b/docs/upgrade.md
index 9dc6bd934..c65a4980a 100644
--- a/docs/upgrade.md
+++ b/docs/upgrade.md
@@ -12,7 +12,7 @@ Here are the typical steps to upgrade a repo based on `ProjectScaffold` to use `
[lang=text]
dotnet new tool
- dotnet tool install FSharp.Formatting.CommandTool
+ dotnet tool install fsdocs-tool
2. Delete all of `docs\tools` particularly `docs\tool\generate.fsx`. Keep a copy of any templates for reference as you'll have to copy some bits across to the new template.
@@ -54,7 +54,7 @@ Here are the typical steps to upgrade a repo based on `ProjectScaffold` to use `
Sample commands:
[lang=text]
- dotnet tool install FSharp.Formatting.CommandTool --local
+ dotnet tool install fsdocs-tool --local
git add dotnet-tools.json
git rm -fr docs/tools
git mv docs/input/* docs
diff --git a/paket.dependencies b/paket.dependencies
index 5da92b04d..623b7b7bd 100644
--- a/paket.dependencies
+++ b/paket.dependencies
@@ -7,11 +7,11 @@ storage: none
nuget FSharp.Core >= 4.7 lowest_matching:true
nuget FSharp.Compiler.Service 40.0.0
nuget CommandLineParser ~> 2.8
-nuget Microsoft.Build.Framework copy_local: false
-nuget Microsoft.Build.Tasks.Core copy_local: false
-nuget Microsoft.Build.Utilities.Core copy_local: false
-nuget Ionide.ProjInfo
-nuget Ionide.ProjInfo.Sln
+nuget Microsoft.Build.Framework
+nuget Microsoft.Build.Tasks.Core
+nuget Microsoft.Build.Utilities.Core
+nuget Ionide.ProjInfo 0.53.1
+nuget Ionide.ProjInfo.Sln 0.53.1
nuget Newtonsoft.Json
nuget Suave
nuget System.Memory
diff --git a/paket.lock b/paket.lock
index 86d32ceef..cca308a51 100644
--- a/paket.lock
+++ b/paket.lock
@@ -43,8 +43,8 @@ NUGET
Microsoft.Build.Framework (>= 16.10) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net5.0))
Microsoft.Build.Locator (>= 1.4.1) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net5.0))
Ionide.ProjInfo.Sln (0.53.1)
- Microsoft.Build (16.10) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net5.0))
- Microsoft.Build.Framework (>= 16.10) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net472)) (&& (== netstandard2.1) (>= net5.0))
+ Microsoft.Build (16.11) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net5.0))
+ Microsoft.Build.Framework (>= 16.11) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net472)) (&& (== netstandard2.1) (>= net5.0))
Microsoft.NET.StringTools (>= 1.0) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net472)) (&& (== netstandard2.1) (>= net5.0))
Microsoft.Win32.Registry (>= 4.3) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net5.0))
System.Collections.Immutable (>= 5.0) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net472)) (&& (== netstandard2.1) (>= net5.0))
@@ -54,12 +54,12 @@ NUGET
System.Text.Encoding.CodePages (>= 4.0.1) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net5.0))
System.Text.Json (>= 4.7) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net472)) (&& (== netstandard2.1) (>= net5.0))
System.Threading.Tasks.Dataflow (>= 4.9) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net472)) (&& (== netstandard2.1) (>= net5.0))
- Microsoft.Build.Framework (16.10)
+ Microsoft.Build.Framework (16.11)
System.Security.Permissions (>= 4.7)
Microsoft.Build.Locator (1.4.1) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net5.0))
- Microsoft.Build.Tasks.Core (16.10)
- Microsoft.Build.Framework (>= 16.10)
- Microsoft.Build.Utilities.Core (>= 16.10)
+ Microsoft.Build.Tasks.Core (16.11)
+ Microsoft.Build.Framework (>= 16.11)
+ Microsoft.Build.Utilities.Core (>= 16.11)
Microsoft.NET.StringTools (>= 1.0)
Microsoft.Win32.Registry (>= 4.3)
System.CodeDom (>= 4.4)
@@ -70,16 +70,16 @@ NUGET
System.Security.Cryptography.Xml (>= 4.7)
System.Security.Permissions (>= 4.7)
System.Threading.Tasks.Dataflow (>= 4.9)
- Microsoft.Build.Utilities.Core (16.10)
- Microsoft.Build.Framework (>= 16.10)
+ Microsoft.Build.Utilities.Core (16.11)
+ Microsoft.Build.Framework (>= 16.11)
Microsoft.NET.StringTools (>= 1.0)
Microsoft.Win32.Registry (>= 4.3)
System.Collections.Immutable (>= 5.0)
System.Configuration.ConfigurationManager (>= 4.7)
System.Security.Permissions (>= 4.7)
System.Text.Encoding.CodePages (>= 4.0.1)
- Microsoft.CodeAnalysis.Analyzers (3.3.2)
- Microsoft.CodeAnalysis.Common (3.10)
+ Microsoft.CodeAnalysis.Analyzers (3.3.3)
+ Microsoft.CodeAnalysis.Common (3.11)
Microsoft.CodeAnalysis.Analyzers (>= 3.3.2)
System.Collections.Immutable (>= 5.0)
System.Memory (>= 4.5.4)
@@ -87,22 +87,22 @@ NUGET
System.Runtime.CompilerServices.Unsafe (>= 5.0)
System.Text.Encoding.CodePages (>= 4.5.1)
System.Threading.Tasks.Extensions (>= 4.5.4)
- Microsoft.CodeAnalysis.CSharp (3.10)
- Microsoft.CodeAnalysis.Common (3.10)
- Microsoft.CodeCoverage (16.10) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net45)) (&& (== netstandard2.1) (>= netcoreapp1.0))
+ Microsoft.CodeAnalysis.CSharp (3.11)
+ Microsoft.CodeAnalysis.Common (3.11)
+ Microsoft.CodeCoverage (17.0) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net45)) (&& (== netstandard2.1) (>= netcoreapp1.0))
Microsoft.NET.StringTools (1.0)
System.Memory (>= 4.5.4)
System.Runtime.CompilerServices.Unsafe (>= 5.0)
- Microsoft.NET.Test.Sdk (16.10)
- Microsoft.CodeCoverage (>= 16.10) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net45)) (&& (== netstandard2.1) (>= netcoreapp1.0))
- Microsoft.TestPlatform.TestHost (>= 16.10) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= netcoreapp1.0))
- Microsoft.NETCore.Platforms (5.0.2)
+ Microsoft.NET.Test.Sdk (17.0)
+ Microsoft.CodeCoverage (>= 17.0) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= net45)) (&& (== netstandard2.1) (>= netcoreapp1.0))
+ Microsoft.TestPlatform.TestHost (>= 17.0) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= netcoreapp1.0))
+ Microsoft.NETCore.Platforms (5.0.4)
Microsoft.NETCore.Targets (5.0)
- Microsoft.TestPlatform.ObjectModel (16.10) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= netcoreapp1.0))
+ Microsoft.TestPlatform.ObjectModel (17.0) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= netcoreapp1.0))
NuGet.Frameworks (>= 5.0)
System.Reflection.Metadata (>= 1.6)
- Microsoft.TestPlatform.TestHost (16.10) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= netcoreapp1.0))
- Microsoft.TestPlatform.ObjectModel (>= 16.10) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= netcoreapp1.0)) (&& (== netstandard2.1) (>= uap10.0))
+ Microsoft.TestPlatform.TestHost (17.0) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= netcoreapp1.0))
+ Microsoft.TestPlatform.ObjectModel (>= 17.0) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= netcoreapp1.0)) (&& (== netstandard2.1) (>= uap10.0))
Newtonsoft.Json (>= 9.0.1) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= netcoreapp1.0)) (&& (== netstandard2.1) (>= uap10.0))
Microsoft.Win32.Primitives (4.3)
Microsoft.NETCore.Platforms (>= 1.1)
@@ -118,7 +118,7 @@ NUGET
NETStandard.Library (2.0.3)
Microsoft.NETCore.Platforms (>= 1.1)
Newtonsoft.Json (13.0.1)
- NuGet.Frameworks (5.10) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= netcoreapp1.0)) (&& (== netstandard2.1) (>= netcoreapp2.1))
+ NuGet.Frameworks (5.11) - restriction: || (== net5.0) (&& (== netstandard2.1) (>= netcoreapp1.0)) (&& (== netstandard2.1) (>= netcoreapp2.1))
NUnit (3.13.2)
NETStandard.Library (>= 2.0)
NUnit3TestAdapter (4.0)
@@ -729,22 +729,26 @@ NUGET
FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0
System.Reactive (>= 5.0) - restriction: >= netstandard2.0
FSharp.Core (4.7.2)
- Microsoft.Bcl.AsyncInterfaces (5.0) - restriction: >= net472
+ Microsoft.Bcl.AsyncInterfaces (5.0) - restriction: || (&& (>= monoandroid) (>= net5.0) (< netcoreapp2.0)) (&& (< monoandroid) (>= net5.0) (< netcoreapp2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= net5.0) (< netcoreapp2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= net5.0) (< netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (>= monotouch) (>= net5.0)) (&& (>= net461) (>= net5.0)) (>= net472) (&& (>= net5.0) (< netcoreapp2.0) (>= xamarinios)) (&& (>= net5.0) (< netcoreapp2.0) (>= xamarinmac)) (&& (>= net5.0) (< netstandard2.0) (>= xamarintvos)) (&& (>= net5.0) (< netstandard2.0) (>= xamarinwatchos)) (&& (>= net5.0) (>= uap10.1))
System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (>= net461) (&& (< netcoreapp2.1) (>= netstandard2.0) (< netstandard2.1))
- Microsoft.Build (16.10) - restriction: >= netstandard2.0
- Microsoft.Build.Framework (>= 16.10) - restriction: >= net472
- Microsoft.NET.StringTools (>= 1.0) - restriction: >= net472
+ Microsoft.Build (16.11) - restriction: >= netstandard2.0
+ Microsoft.Build.Framework (>= 16.11) - restriction: || (>= net472) (>= net5.0)
+ Microsoft.NET.StringTools (>= 1.0) - restriction: || (>= net472) (>= net5.0)
Microsoft.VisualStudio.Setup.Configuration.Interop (>= 1.16.30) - restriction: >= net472
- System.Collections.Immutable (>= 5.0) - restriction: >= net472
- System.Configuration.ConfigurationManager (>= 4.7) - restriction: >= net472
+ Microsoft.Win32.Registry (>= 4.3) - restriction: >= net5.0
+ System.Collections.Immutable (>= 5.0) - restriction: || (>= net472) (>= net5.0)
+ System.Configuration.ConfigurationManager (>= 4.7) - restriction: || (>= net472) (>= net5.0)
System.Memory (>= 4.5.4) - restriction: >= net472
- System.Text.Json (>= 4.7) - restriction: >= net472
- System.Threading.Tasks.Dataflow (>= 4.9) - restriction: >= net472
- Microsoft.Build.Framework (16.10) - restriction: >= netstandard2.0
+ System.Reflection.Metadata (>= 1.6) - restriction: >= net5.0
+ System.Security.Principal.Windows (>= 4.7) - restriction: >= net5.0
+ System.Text.Encoding.CodePages (>= 4.0.1) - restriction: >= net5.0
+ System.Text.Json (>= 4.7) - restriction: || (>= net472) (>= net5.0)
+ System.Threading.Tasks.Dataflow (>= 4.9) - restriction: || (>= net472) (>= net5.0)
+ Microsoft.Build.Framework (16.11) - restriction: >= netstandard2.0
System.Security.Permissions (>= 4.7) - restriction: && (< net472) (>= netstandard2.0)
- Microsoft.Build.Tasks.Core (16.10) - restriction: >= netstandard2.0
- Microsoft.Build.Framework (>= 16.10) - restriction: >= netstandard2.0
- Microsoft.Build.Utilities.Core (>= 16.10) - restriction: >= netstandard2.0
+ Microsoft.Build.Tasks.Core (16.11) - restriction: >= netstandard2.0
+ Microsoft.Build.Framework (>= 16.11) - restriction: >= netstandard2.0
+ Microsoft.Build.Utilities.Core (>= 16.11) - restriction: >= netstandard2.0
Microsoft.NET.StringTools (>= 1.0) - restriction: >= netstandard2.0
Microsoft.VisualStudio.Setup.Configuration.Interop (>= 1.16.30) - restriction: >= net472
Microsoft.Win32.Registry (>= 4.3) - restriction: && (< net472) (>= netstandard2.0)
@@ -756,8 +760,8 @@ NUGET
System.Security.Cryptography.Xml (>= 4.7) - restriction: && (< net472) (>= netstandard2.0)
System.Security.Permissions (>= 4.7) - restriction: && (< net472) (>= netstandard2.0)
System.Threading.Tasks.Dataflow (>= 4.9) - restriction: >= netstandard2.0
- Microsoft.Build.Utilities.Core (16.10) - restriction: >= netstandard2.0
- Microsoft.Build.Framework (>= 16.10) - restriction: >= netstandard2.0
+ Microsoft.Build.Utilities.Core (16.11) - restriction: >= netstandard2.0
+ Microsoft.Build.Framework (>= 16.11) - restriction: >= netstandard2.0
Microsoft.NET.StringTools (>= 1.0) - restriction: >= netstandard2.0
Microsoft.VisualStudio.Setup.Configuration.Interop (>= 1.16.30) - restriction: >= net472
Microsoft.Win32.Registry (>= 4.3) - restriction: && (< net472) (>= netstandard2.0)
@@ -768,114 +772,112 @@ NUGET
Microsoft.NET.StringTools (1.0) - restriction: >= netstandard2.0
System.Memory (>= 4.5.4) - restriction: >= netstandard2.0
System.Runtime.CompilerServices.Unsafe (>= 5.0) - restriction: >= netstandard2.0
- Microsoft.NETCore.Platforms (5.0.2) - restriction: || (&& (>= monoandroid) (>= netcoreapp2.1)) (&& (< monoandroid) (< net45) (< netcoreapp3.1) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (>= monotouch) (>= netcoreapp2.1)) (>= netcoreapp2.0) (&& (>= netcoreapp2.1) (>= uap10.1)) (&& (>= netcoreapp2.1) (>= xamarinios)) (&& (>= netcoreapp2.1) (>= xamarinmac)) (&& (>= netcoreapp2.1) (>= xamarintvos)) (&& (>= netcoreapp2.1) (>= xamarinwatchos)) (&& (< netcoreapp3.1) (>= net5.0)) (&& (>= net5.0) (< netstandard1.2)) (&& (>= net5.0) (< netstandard1.3)) (&& (>= net5.0) (< netstandard1.5))
- Microsoft.NETCore.Targets (5.0) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp3.1) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< netcoreapp3.1) (>= net5.0)) (&& (>= net5.0) (< netstandard1.2)) (&& (>= net5.0) (< netstandard1.3)) (&& (>= net5.0) (< netstandard1.5))
+ Microsoft.NETCore.Platforms (5.0.4) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp3.1) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (>= net5.0) (< netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.0)) (&& (>= monotouch) (>= netcoreapp2.0)) (&& (>= net461) (>= netcoreapp2.0)) (&& (>= netcoreapp2.0) (>= uap10.1)) (&& (>= netcoreapp2.0) (>= xamarinios)) (&& (>= netcoreapp2.0) (>= xamarinmac)) (&& (>= netcoreapp2.0) (>= xamarintvos)) (&& (>= netcoreapp2.0) (>= xamarinwatchos)) (>= netcoreapp2.1) (&& (>= netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos))
+ Microsoft.NETCore.Targets (5.0) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp3.1) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81))
Microsoft.VisualStudio.Setup.Configuration.Interop (1.16.30) - restriction: >= net472
- Microsoft.Win32.Registry (5.0) - restriction: || (&& (< net45) (>= netstandard2.0)) (&& (< net472) (>= netstandard2.0))
- System.Buffers (>= 4.5.1) - restriction: || (>= monoandroid) (>= monotouch) (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0)) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
- System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (>= uap10.1)
- System.Security.AccessControl (>= 5.0) - restriction: || (>= monoandroid) (>= monotouch) (&& (< net46) (>= netstandard2.0)) (>= net461) (>= netcoreapp2.0) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
- System.Security.Principal.Windows (>= 5.0) - restriction: || (>= monoandroid) (>= monotouch) (&& (< net46) (>= netstandard2.0)) (>= net461) (>= netcoreapp2.0) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
- Microsoft.Win32.SystemEvents (5.0) - restriction: >= netcoreapp3.0
+ Microsoft.Win32.Registry (5.0) - restriction: || (&& (< net45) (>= netstandard2.0)) (&& (< net472) (>= netstandard2.0)) (>= net5.0)
+ System.Buffers (>= 4.5.1) - restriction: || (&& (>= monoandroid) (< netcoreapp2.0)) (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0)) (>= monotouch) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
+ System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= uap10.1)
+ System.Security.AccessControl (>= 5.0) - restriction: || (&& (>= monoandroid) (< netcoreapp2.0)) (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< monoandroid) (>= netcoreapp2.0)) (>= monotouch) (>= net461) (>= netcoreapp2.1) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
+ System.Security.Principal.Windows (>= 5.0) - restriction: || (&& (>= monoandroid) (< netcoreapp2.0)) (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< monoandroid) (>= netcoreapp2.0)) (>= monotouch) (>= net461) (>= netcoreapp2.1) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
+ Microsoft.Win32.SystemEvents (5.0) - restriction: && (>= netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
Microsoft.NETCore.Platforms (>= 5.0) - restriction: >= netcoreapp2.0
Mono.Posix.NETStandard (1.0) - restriction: >= netstandard2.0
- MSBuild.StructuredLogger (2.1.507) - restriction: >= netstandard2.0
- Microsoft.Build (>= 16.4) - restriction: >= netstandard2.0
- Microsoft.Build.Framework (>= 16.4) - restriction: >= netstandard2.0
- Microsoft.Build.Tasks.Core (>= 16.4) - restriction: >= netstandard2.0
- Microsoft.Build.Utilities.Core (>= 16.4) - restriction: >= netstandard2.0
+ MSBuild.StructuredLogger (2.1.545) - restriction: >= netstandard2.0
+ Microsoft.Build (>= 16.10) - restriction: >= netstandard2.0
+ Microsoft.Build.Framework (>= 16.10) - restriction: >= netstandard2.0
+ Microsoft.Build.Tasks.Core (>= 16.10) - restriction: >= netstandard2.0
+ Microsoft.Build.Utilities.Core (>= 16.10) - restriction: >= netstandard2.0
Newtonsoft.Json (13.0.1) - restriction: >= netstandard2.0
- NuGet.Common (5.10) - restriction: >= netstandard2.0
- NuGet.Frameworks (>= 5.10) - restriction: || (>= net45) (>= netstandard2.0)
- NuGet.Configuration (5.10) - restriction: >= netstandard2.0
- NuGet.Common (>= 5.10) - restriction: || (>= net45) (>= netstandard2.0)
+ NuGet.Common (5.11) - restriction: >= netstandard2.0
+ NuGet.Frameworks (>= 5.11) - restriction: || (>= net45) (>= netstandard2.0)
+ NuGet.Configuration (5.11) - restriction: >= netstandard2.0
+ NuGet.Common (>= 5.11) - restriction: || (>= net45) (>= netstandard2.0)
System.Security.Cryptography.ProtectedData (>= 4.4) - restriction: && (< net45) (>= netstandard2.0)
- NuGet.Frameworks (5.10) - restriction: >= netstandard2.0
- NuGet.Packaging (5.10) - restriction: >= netstandard2.0
+ NuGet.Frameworks (5.11) - restriction: >= netstandard2.0
+ NuGet.Packaging (5.11) - restriction: >= netstandard2.0
Newtonsoft.Json (>= 9.0.1) - restriction: >= netstandard2.0
- NuGet.Configuration (>= 5.10) - restriction: >= netstandard2.0
- NuGet.Versioning (>= 5.10) - restriction: >= netstandard2.0
- System.Security.Cryptography.Cng (>= 5.0) - restriction: && (< net472) (>= netstandard2.0)
- System.Security.Cryptography.Pkcs (>= 5.0) - restriction: && (< net472) (>= netstandard2.0)
- NuGet.Protocol (5.10) - restriction: >= netstandard2.0
- NuGet.Packaging (>= 5.10) - restriction: >= netstandard2.0
- NuGet.Versioning (5.10) - restriction: >= netstandard2.0
- System.Buffers (4.5.1) - restriction: || (&& (>= monoandroid) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (>= net472) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac)
+ NuGet.Configuration (>= 5.11) - restriction: >= netstandard2.0
+ NuGet.Versioning (>= 5.11) - restriction: >= netstandard2.0
+ System.Security.Cryptography.Cng (>= 5.0) - restriction: || (&& (< net472) (>= netstandard2.0)) (>= net5.0)
+ System.Security.Cryptography.Pkcs (>= 5.0) - restriction: || (&& (< net472) (>= netstandard2.0)) (>= net5.0)
+ NuGet.Protocol (5.11) - restriction: >= netstandard2.0
+ NuGet.Packaging (>= 5.11) - restriction: >= netstandard2.0
+ NuGet.Versioning (5.11) - restriction: >= netstandard2.0
+ System.Buffers (4.5.1) - restriction: || (&& (>= monoandroid) (>= net5.0) (< netcoreapp2.0)) (&& (>= monoandroid) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= net5.0) (< netcoreapp2.0) (< xamarintvos) (< xamarinwatchos)) (&& (>= monotouch) (>= net5.0)) (&& (>= monotouch) (>= netstandard2.0)) (&& (>= net461) (>= net5.0)) (>= net472) (&& (>= net5.0) (< netstandard2.0) (>= xamarintvos)) (&& (>= net5.0) (< netstandard2.0) (>= xamarinwatchos)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac)
System.CodeDom (5.0) - restriction: && (< net472) (>= netstandard2.0)
System.Collections.Immutable (5.0) - restriction: >= netstandard2.0
- System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net46) (< netstandard2.0)) (>= net461) (>= uap10.1)
+ System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (>= net46) (< netstandard2.0)) (>= net461) (>= uap10.1)
System.Configuration.ConfigurationManager (5.0) - restriction: >= netstandard2.0
+ System.Security.Cryptography.ProtectedData (>= 5.0) - restriction: && (< monoandroid) (< net461) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
System.Security.Permissions (>= 5.0) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (>= netstandard2.0) (>= xamarintvos) (>= xamarinwatchos)
System.Drawing.Common (5.0.2) - restriction: >= netcoreapp3.0
- Microsoft.Win32.SystemEvents (>= 5.0) - restriction: >= netcoreapp2.0
- System.Formats.Asn1 (5.0) - restriction: || (&& (>= monoandroid) (>= netstandard2.0)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1)) (&& (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1)) (&& (< netcoreapp2.0) (>= netstandard2.1)) (>= netcoreapp3.0) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac)
- System.IO (4.3) - restriction: || (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net461) (< netstandard1.4) (>= netstandard2.0)) (&& (< net46) (>= net461) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net462) (< netstandard1.4) (>= netstandard2.0)) (&& (< net46) (>= net462) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net47) (>= netstandard2.0)) (&& (>= net463) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net463) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net47) (< net472) (>= netstandard2.0)) (&& (>= net47) (>= net5.0)) (&& (>= net5.0) (< netstandard1.4)) (&& (>= net5.0) (< netstandard1.6))
- System.Memory (4.5.4) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net461) (>= netstandard2.0)) (>= net472) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netstandard2.0) (>= uap10.1))
- System.Buffers (>= 4.5.1) - restriction: || (>= monoandroid) (>= monotouch) (&& (>= net45) (< netstandard2.0)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (>= net461) (&& (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (< uap10.1) (>= wpa81)) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
+ Microsoft.Win32.SystemEvents (>= 5.0) - restriction: || (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (>= netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos))
+ System.Formats.Asn1 (5.0) - restriction: || (&& (>= monoandroid) (>= net5.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (>= monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1)) (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1)) (&& (< monoandroid) (>= net5.0) (< netcoreapp2.0)) (&& (< monoandroid) (>= net5.0) (< netcoreapp2.1) (< netstandard2.1)) (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1)) (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.1)) (&& (>= monotouch) (>= net5.0)) (&& (>= monotouch) (>= netstandard2.0)) (&& (>= net5.0) (>= uap10.1)) (&& (>= net5.0) (>= xamarintvos)) (&& (>= net5.0) (< xamarintvos) (< xamarinwatchos)) (&& (>= net5.0) (>= xamarinwatchos)) (>= netcoreapp3.0) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac)
+ System.IO (4.3) - restriction: || (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (< netstandard1.6) (>= netstandard2.0)) (&& (< monoandroid) (>= net5.0) (< netstandard1.4)) (&& (< monoandroid) (>= net5.0) (< netstandard1.6)) (&& (< monoandroid) (>= net5.0) (< netstandard2.0) (< xamarintvos) (< xamarinwatchos)) (&& (>= net46) (>= net5.0) (< netstandard1.4)) (&& (< net46) (>= net461) (< netstandard1.4) (>= netstandard2.0)) (&& (< net46) (>= net461) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net462) (< netstandard1.4) (>= netstandard2.0)) (&& (< net46) (>= net462) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net47) (>= netstandard2.0)) (&& (>= net461) (>= net5.0) (< netstandard1.4)) (&& (>= net461) (>= net5.0) (< netstandard1.6)) (&& (>= net462) (>= net5.0) (< netstandard1.4)) (&& (>= net462) (>= net5.0) (< netstandard1.6)) (&& (>= net463) (>= net5.0) (< netstandard1.4)) (&& (>= net463) (>= net5.0) (< netstandard1.6)) (&& (>= net463) (>= net5.0) (< netstandard2.0)) (&& (>= net463) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net463) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net47) (< net472) (>= netstandard2.0)) (&& (>= net47) (>= net5.0))
+ System.Memory (4.5.4) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (>= net461) (>= netstandard2.0)) (>= net472) (>= net5.0) (&& (>= netstandard2.0) (>= uap10.1))
+ System.Buffers (>= 4.5.1) - restriction: || (&& (>= monoandroid) (< netcoreapp2.0)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (>= monotouch) (&& (>= net45) (< netstandard2.0)) (>= net461) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (< uap10.1) (>= wpa81)) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
System.Numerics.Vectors (>= 4.5) - restriction: >= net461
- System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (>= monoandroid) (>= monotouch) (&& (>= net45) (< netstandard2.0)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
- System.Numerics.Vectors (4.5) - restriction: >= net472
+ System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (&& (>= monoandroid) (< netcoreapp2.0)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< monoandroid) (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (>= monotouch) (&& (>= net45) (< netstandard2.0)) (>= net461) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
+ System.Numerics.Vectors (4.5) - restriction: || (&& (< monoandroid) (>= net5.0) (< netcoreapp2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (>= net461) (>= net5.0)) (>= net472)
System.Reactive (5.0) - restriction: >= netstandard2.0
System.Runtime.InteropServices.WindowsRuntime (>= 4.3) - restriction: && (< net472) (< netcoreapp3.1) (>= netstandard2.0)
System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (>= net472) (&& (< netcoreapp3.1) (>= netstandard2.0)) (>= uap10.1)
- System.Reflection.Metadata (5.0) - restriction: && (< net472) (>= netstandard2.0)
- System.Collections.Immutable (>= 5.0) - restriction: || (&& (>= net45) (< netstandard2.0)) (&& (< net45) (< net5.0) (>= netstandard2.0)) (&& (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (>= net461) (&& (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (>= wpa81))
+ System.Reflection.Metadata (5.0) - restriction: || (&& (< net472) (>= netstandard2.0)) (>= net5.0)
System.Resources.Extensions (5.0) - restriction: >= netstandard2.0
- System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461)
- System.Runtime (4.3.1) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp3.1) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net461) (< netstandard1.4) (>= netstandard2.0)) (&& (< net46) (>= net461) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net462) (< netstandard1.4) (>= netstandard2.0)) (&& (< net46) (>= net462) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net47) (>= netstandard2.0)) (&& (>= net463) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net463) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net47) (< net472) (>= netstandard2.0)) (&& (>= net47) (>= net5.0)) (&& (< netcoreapp3.1) (>= net5.0)) (&& (>= net5.0) (< netstandard1.4)) (&& (>= net5.0) (< netstandard1.6))
- Microsoft.NETCore.Platforms (>= 1.1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.2) (< win8) (< wp8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net5.0)
- Microsoft.NETCore.Targets (>= 1.1.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.2) (< win8) (< wp8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net5.0)
- System.Runtime.CompilerServices.Unsafe (5.0) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.0) (>= netstandard2.0) (< win8)) (&& (>= net461) (>= netstandard2.0)) (>= net472) (&& (>= netcoreapp2.0) (< net5.0)) (&& (< netstandard1.0) (>= netstandard2.0) (>= win8)) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= wp8))
+ System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net461)
+ System.Runtime (4.3.1) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp3.1) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (< netstandard1.6) (>= netstandard2.0)) (&& (< monoandroid) (>= net5.0) (< netstandard1.4)) (&& (< monoandroid) (>= net5.0) (< netstandard1.6)) (&& (< monoandroid) (>= net5.0) (< netstandard2.0) (< xamarintvos) (< xamarinwatchos)) (&& (>= net46) (>= net5.0) (< netstandard1.4)) (&& (< net46) (>= net461) (< netstandard1.4) (>= netstandard2.0)) (&& (< net46) (>= net461) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net462) (< netstandard1.4) (>= netstandard2.0)) (&& (< net46) (>= net462) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net47) (>= netstandard2.0)) (&& (>= net461) (>= net5.0) (< netstandard1.4)) (&& (>= net461) (>= net5.0) (< netstandard1.6)) (&& (>= net462) (>= net5.0) (< netstandard1.4)) (&& (>= net462) (>= net5.0) (< netstandard1.6)) (&& (>= net463) (>= net5.0) (< netstandard1.4)) (&& (>= net463) (>= net5.0) (< netstandard1.6)) (&& (>= net463) (>= net5.0) (< netstandard2.0)) (&& (>= net463) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net463) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net47) (< net472) (>= netstandard2.0)) (&& (>= net47) (>= net5.0))
+ Microsoft.NETCore.Platforms (>= 1.1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.2) (< win8) (< wp8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81))
+ Microsoft.NETCore.Targets (>= 1.1.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.2) (< win8) (< wp8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81))
+ System.Runtime.CompilerServices.Unsafe (5.0) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netstandard1.0) (>= netstandard2.0) (< win8)) (&& (>= net461) (>= netstandard2.0)) (>= net472) (>= net5.0) (&& (< netstandard1.0) (>= netstandard2.0) (>= win8)) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= wp8))
System.Runtime.InteropServices.WindowsRuntime (4.3) - restriction: && (< net472) (< netcoreapp3.1) (>= netstandard2.0)
- System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net5.0)
- System.Security.AccessControl (5.0) - restriction: || (&& (>= monoandroid) (>= netstandard2.0)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net45) (>= netstandard2.0)) (&& (< net472) (>= netstandard2.0)) (>= netcoreapp2.0) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac)
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Security.AccessControl (5.0) - restriction: || (&& (>= monoandroid) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< monoandroid) (>= netcoreapp2.0)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net45) (>= net461) (>= netstandard2.0)) (&& (< net472) (>= netstandard2.0)) (>= netcoreapp2.1) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac)
Microsoft.NETCore.Platforms (>= 5.0) - restriction: >= netcoreapp2.0
System.Security.Principal.Windows (>= 5.0) - restriction: || (&& (>= net46) (< netstandard2.0)) (&& (< net46) (>= netstandard1.3) (< netstandard2.0) (< uap10.1)) (&& (< net46) (>= netstandard2.0)) (>= net461) (>= netcoreapp2.0)
- System.Security.Cryptography.Algorithms (4.3.1) - restriction: || (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net46) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net461) (< net462) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net462) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net47) (< net472) (>= netstandard2.0))
- System.IO (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< monoandroid) (< net46) (>= netstandard1.4) (< netstandard1.6)) (>= net463) (>= net5.0)
- System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< monoandroid) (< net46) (>= netstandard1.4) (< netstandard1.6)) (>= net463) (>= net5.0)
- System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net463) (>= net5.0)
- System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< monoandroid) (< net46) (>= netstandard1.4) (< netstandard1.6)) (&& (>= net46) (< netstandard1.4)) (&& (>= net461) (< netstandard1.6)) (>= net463) (>= net5.0)
- System.Security.Cryptography.Cng (5.0) - restriction: || (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac)) (&& (< net472) (>= netstandard2.0)) (&& (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1)) (&& (< netcoreapp2.0) (>= netstandard2.1)) (&& (>= netcoreapp2.1) (< netstandard2.1)) (>= netcoreapp3.0)
- Microsoft.NETCore.Platforms (>= 5.0) - restriction: && (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1)
- System.Formats.Asn1 (>= 5.0) - restriction: >= netcoreapp3.0
+ System.Security.Cryptography.Algorithms (4.3.1) - restriction: || (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (< netstandard1.6) (>= netstandard2.0)) (&& (< monoandroid) (>= net5.0) (< netstandard1.4)) (&& (< monoandroid) (>= net5.0) (< netstandard1.6)) (&& (< monoandroid) (>= net5.0) (< netstandard2.0) (< xamarintvos) (< xamarinwatchos)) (&& (>= net46) (>= net5.0) (< netstandard1.4)) (&& (>= net46) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net461) (< net462) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net461) (>= net5.0) (< netstandard1.6)) (&& (>= net462) (>= net5.0) (< netstandard1.6)) (&& (>= net462) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net47) (< net472) (>= netstandard2.0)) (&& (>= net47) (>= net5.0))
+ System.IO (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< monoandroid) (< net46) (>= netstandard1.4) (< netstandard1.6)) (>= net463)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< monoandroid) (< net46) (>= netstandard1.4) (< netstandard1.6)) (>= net463)
+ System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net463)
+ System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< monoandroid) (< net46) (>= netstandard1.4) (< netstandard1.6)) (&& (>= net46) (< netstandard1.4)) (&& (>= net461) (< netstandard1.6)) (>= net463)
+ System.Security.Cryptography.Cng (5.0) - restriction: || (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.1) (< netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< net472) (>= netstandard2.0)) (>= net5.0) (&& (>= netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos))
+ Microsoft.NETCore.Platforms (>= 5.0) - restriction: && (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Formats.Asn1 (>= 5.0) - restriction: && (>= netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
System.Security.Cryptography.Algorithms (>= 4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< netstandard2.0) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< monoandroid) (< net46) (>= netstandard1.4) (< netstandard1.6) (< uap10.1)) (&& (>= net46) (< netstandard1.4)) (&& (>= net461) (< net462) (< netstandard1.6)) (&& (>= net462) (< netstandard1.6)) (>= net47)
- System.Security.Cryptography.Encoding (4.3) - restriction: || (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net461) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net462) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net47) (>= netstandard2.0)) (&& (>= net463) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net463) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net47) (< net472) (>= netstandard2.0)) (&& (>= net47) (>= net5.0)) (&& (>= net5.0) (< netstandard1.4)) (&& (>= net5.0) (< netstandard1.6))
+ System.Security.Cryptography.Encoding (4.3) - restriction: || (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (< netstandard1.6) (>= netstandard2.0)) (&& (< monoandroid) (>= net5.0) (< netstandard1.4)) (&& (< monoandroid) (>= net5.0) (< netstandard1.6)) (&& (< monoandroid) (>= net5.0) (< netstandard2.0) (< xamarintvos) (< xamarinwatchos)) (&& (>= net46) (>= net5.0) (< netstandard1.4)) (&& (< net46) (>= net461) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net462) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net47) (>= netstandard2.0)) (&& (>= net461) (>= net5.0) (< netstandard1.6)) (&& (>= net462) (>= net5.0) (< netstandard1.6)) (&& (>= net463) (>= net5.0) (< netstandard1.4)) (&& (>= net463) (>= net5.0) (< netstandard1.6)) (&& (>= net463) (>= net5.0) (< netstandard2.0)) (&& (>= net463) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net463) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net47) (< net472) (>= netstandard2.0)) (&& (>= net47) (>= net5.0))
System.Security.Cryptography.Pkcs (5.0.1) - restriction: || (&& (>= monoandroid) (>= netstandard2.0)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net461) (>= netstandard2.0)) (&& (< net472) (>= netstandard2.0)) (>= netcoreapp2.1) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac)
- System.Buffers (>= 4.5.1) - restriction: && (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac)
- System.Formats.Asn1 (>= 5.0) - restriction: || (>= monoandroid) (>= monotouch) (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1)) (&& (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1)) (&& (< netcoreapp2.0) (>= netstandard2.1)) (>= netcoreapp3.0) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
- System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac)) (&& (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1)) (>= uap10.1)
- System.Security.Cryptography.Cng (>= 5.0) - restriction: || (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac)) (&& (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1)) (&& (< netcoreapp2.0) (>= netstandard2.1)) (&& (>= netcoreapp2.1) (< netstandard2.1)) (>= netcoreapp3.0)
- System.Security.Cryptography.Primitives (4.3) - restriction: || (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< net46) (>= net461) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net47) (>= netstandard2.0)) (&& (>= net461) (< net462) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net461) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net462) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net462) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net463) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net463) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net47) (< net472) (>= netstandard2.0)) (&& (>= net47) (>= net5.0)) (&& (>= net47) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net47) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net5.0) (< netstandard1.4)) (&& (>= net5.0) (< netstandard1.6))
- System.Security.Cryptography.ProtectedData (5.0) - restriction: && (< net45) (>= netstandard2.0)
- System.Memory (>= 4.5.4) - restriction: && (< monoandroid) (< net46) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)
+ System.Buffers (>= 4.5.1) - restriction: && (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Formats.Asn1 (>= 5.0) - restriction: || (&& (>= monoandroid) (< netcoreapp2.0) (< netstandard2.1)) (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1)) (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1)) (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.1)) (>= monotouch) (>= netcoreapp3.0) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
+ System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= uap10.1)
+ System.Security.Cryptography.Cng (>= 5.0) - restriction: || (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.1) (< netstandard2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (>= netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos))
+ System.Security.Cryptography.Primitives (4.3) - restriction: || (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (< netstandard1.6) (>= netstandard2.0)) (&& (< monoandroid) (>= net5.0) (< netstandard1.4)) (&& (< monoandroid) (>= net5.0) (< netstandard1.6)) (&& (< monoandroid) (>= net5.0) (< netstandard2.0) (< xamarintvos) (< xamarinwatchos)) (&& (>= net46) (>= net5.0) (< netstandard1.4)) (&& (>= net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< net46) (>= net461) (< netstandard1.6) (>= netstandard2.0)) (&& (< net46) (>= net47) (>= netstandard2.0)) (&& (>= net461) (< net462) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net461) (>= net5.0) (< netstandard1.4)) (&& (>= net461) (>= net5.0) (< netstandard1.6)) (&& (>= net461) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net462) (>= net5.0) (< netstandard1.4)) (&& (>= net462) (>= net5.0) (< netstandard1.6)) (&& (>= net462) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net462) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net463) (>= net5.0) (< netstandard1.4)) (&& (>= net463) (>= net5.0) (< netstandard1.6)) (&& (>= net463) (>= net5.0) (< netstandard2.0)) (&& (>= net463) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net463) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net47) (< net472) (>= netstandard2.0)) (&& (>= net47) (>= net5.0)) (&& (>= net47) (< netstandard1.4) (>= netstandard2.0)) (&& (>= net47) (< netstandard1.6) (>= netstandard2.0))
+ System.Security.Cryptography.ProtectedData (5.0) - restriction: || (&& (< monoandroid) (>= net5.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< net45) (>= netstandard2.0)) (&& (< net461) (>= net472))
System.Security.Cryptography.Xml (5.0) - restriction: && (< net472) (>= netstandard2.0)
- System.Memory (>= 4.5.4) - restriction: && (< monoandroid) (< net461) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)
+ System.Memory (>= 4.5.4) - restriction: && (< monoandroid) (< net461) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
System.Security.Cryptography.Pkcs (>= 5.0) - restriction: || (>= monoandroid) (>= monotouch) (&& (< net461) (>= netstandard2.0)) (>= netcoreapp2.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
System.Security.Permissions (>= 5.0) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (>= netstandard2.0) (>= xamarintvos) (>= xamarinwatchos)
System.Security.Permissions (5.0) - restriction: >= netstandard2.0
System.Security.AccessControl (>= 5.0) - restriction: || (>= net461) (>= netstandard2.0)
System.Windows.Extensions (>= 5.0) - restriction: >= netcoreapp3.0
- System.Security.Principal.Windows (5.0) - restriction: || (&& (>= monoandroid) (>= netstandard2.0)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net45) (>= netstandard2.0)) (>= netcoreapp2.0) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac)
+ System.Security.Principal.Windows (5.0) - restriction: || (&& (>= monoandroid) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< monoandroid) (>= netcoreapp2.0)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net45) (>= net461) (>= netstandard2.0)) (>= netcoreapp2.1) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac)
Microsoft.NETCore.Platforms (>= 5.0) - restriction: || (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netcoreapp2.1) (< netcoreapp3.0))
- System.Text.Encoding.CodePages (5.0) - restriction: && (< net472) (>= netstandard2.0)
- Microsoft.NETCore.Platforms (>= 5.0) - restriction: >= netcoreapp2.0
- System.Runtime.CompilerServices.Unsafe (>= 5.0) - restriction: || (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (>= netcoreapp2.0) (< net5.0))
- System.Text.Encodings.Web (5.0.1) - restriction: >= net472
+ System.Text.Encoding.CodePages (5.0) - restriction: || (&& (< net472) (>= netstandard2.0)) (>= net5.0)
+ Microsoft.NETCore.Platforms (>= 5.0) - restriction: || (&& (< monoandroid) (>= netcoreapp2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net5.0)
+ System.Text.Encodings.Web (5.0.1) - restriction: || (&& (>= monoandroid) (>= net5.0) (< netcoreapp2.0)) (&& (< monoandroid) (>= net5.0) (< netcoreapp2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= net5.0) (< netcoreapp2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= net5.0) (< netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (>= monotouch) (>= net5.0)) (&& (>= net461) (>= net5.0)) (>= net472) (&& (>= net5.0) (< netcoreapp2.0) (>= xamarinios)) (&& (>= net5.0) (< netcoreapp2.0) (>= xamarinmac)) (&& (>= net5.0) (< netstandard2.0) (>= xamarintvos)) (&& (>= net5.0) (< netstandard2.0) (>= xamarinwatchos)) (&& (>= net5.0) (>= uap10.1))
System.Buffers (>= 4.5.1) - restriction: || (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1)) (>= net461)
System.Memory (>= 4.5.4) - restriction: || (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1) (< netstandard2.1)) (>= uap10.1)
- System.Text.Json (5.0.2) - restriction: >= net472
- Microsoft.Bcl.AsyncInterfaces (>= 5.0) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netcoreapp2.0) (>= netstandard2.0)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
- System.Buffers (>= 4.5.1) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (&& (< netcoreapp2.0) (>= netstandard2.0)) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
- System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (>= uap10.1)
- System.Numerics.Vectors (>= 4.5) - restriction: || (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461)
- System.Runtime.CompilerServices.Unsafe (>= 5.0) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netcoreapp2.0) (>= netstandard2.0)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (&& (>= netcoreapp3.0) (< net5.0)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
- System.Text.Encodings.Web (>= 5.0.1) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netcoreapp2.0) (>= netstandard2.0)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (&& (>= netcoreapp3.0) (< net5.0)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
- System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (>= uap10.1)
+ System.Text.Json (5.0.2) - restriction: || (>= net472) (>= net5.0)
+ Microsoft.Bcl.AsyncInterfaces (>= 5.0) - restriction: || (&& (>= monoandroid) (< netcoreapp2.0)) (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.1) (< netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= monotouch) (>= net461) (&& (< netcoreapp2.0) (>= xamarinios)) (&& (< netcoreapp2.0) (>= xamarinmac)) (&& (< netstandard2.0) (>= xamarintvos)) (&& (< netstandard2.0) (>= xamarinwatchos)) (>= uap10.1)
+ System.Buffers (>= 4.5.1) - restriction: || (&& (>= monoandroid) (< netcoreapp2.0)) (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= monotouch) (>= net461) (&& (< netcoreapp2.0) (>= xamarinios)) (&& (< netcoreapp2.0) (>= xamarinmac)) (&& (< netstandard2.0) (>= xamarintvos)) (&& (< netstandard2.0) (>= xamarinwatchos))
+ System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net461) (>= uap10.1)
+ System.Numerics.Vectors (>= 4.5) - restriction: || (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net461)
+ System.Runtime.CompilerServices.Unsafe (>= 5.0) - restriction: || (&& (>= monoandroid) (< netcoreapp2.0)) (&& (< monoandroid) (< net5.0) (>= netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.1) (< netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= monotouch) (>= net461) (&& (< netcoreapp2.0) (>= xamarinios)) (&& (< netcoreapp2.0) (>= xamarinmac)) (&& (< netstandard2.0) (>= xamarintvos)) (&& (< netstandard2.0) (>= xamarinwatchos)) (>= uap10.1)
+ System.Text.Encodings.Web (>= 5.0.1) - restriction: || (&& (>= monoandroid) (< netcoreapp2.0)) (&& (< monoandroid) (< net5.0) (>= netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= netcoreapp2.1) (< netcoreapp3.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= monotouch) (>= net461) (&& (< netcoreapp2.0) (>= xamarinios)) (&& (< netcoreapp2.0) (>= xamarinmac)) (&& (< netstandard2.0) (>= xamarintvos)) (&& (< netstandard2.0) (>= xamarinwatchos)) (>= uap10.1)
+ System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (&& (< monoandroid) (>= netcoreapp2.0) (< netcoreapp2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net461) (>= uap10.1)
System.ValueTuple (>= 4.5) - restriction: >= net461
System.Threading.Tasks.Dataflow (5.0) - restriction: >= netstandard2.0
- System.Threading.Tasks.Extensions (4.5.4) - restriction: || (>= net472) (&& (< netcoreapp3.1) (>= netstandard2.0)) (&& (>= netstandard2.0) (>= uap10.1))
- System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.0) (>= portable-net45+win8+wp8+wpa81) (< win8)) (&& (>= net45) (< netstandard2.0)) (>= net461) (&& (< netstandard1.0) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) (>= wp8)
- System.ValueTuple (4.5) - restriction: || (&& (>= net45) (>= netstandard2.0)) (>= net472)
+ System.Threading.Tasks.Extensions (4.5.4) - restriction: || (&& (< monoandroid) (>= net5.0) (< netcoreapp2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (>= net5.0) (< netcoreapp2.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (>= net461) (>= net5.0)) (>= net472) (&& (>= net5.0) (>= uap10.1)) (&& (< netcoreapp3.1) (>= netstandard2.0)) (&& (>= netstandard2.0) (>= uap10.1))
+ System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netstandard1.0) (>= portable-net45+win8+wp8+wpa81) (< win8)) (&& (>= net45) (< netstandard2.0)) (>= net461) (&& (< netstandard1.0) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) (>= wp8)
+ System.ValueTuple (4.5) - restriction: || (&& (>= net45) (>= netstandard2.0)) (&& (>= net461) (>= net5.0)) (>= net472)
System.Windows.Extensions (5.0) - restriction: >= netcoreapp3.0
System.Drawing.Common (>= 5.0) - restriction: >= netcoreapp3.0
diff --git a/src/FSharp.Formatting.ApiDocs/GenerateModel.fs b/src/FSharp.Formatting.ApiDocs/GenerateModel.fs
index 52c6718bb..d76891502 100644
--- a/src/FSharp.Formatting.ApiDocs/GenerateModel.fs
+++ b/src/FSharp.Formatting.ApiDocs/GenerateModel.fs
@@ -1406,7 +1406,7 @@ module internal SymbolReader =
Substitutions = substitutions }
let inline private getCompiledName (s: ^a :> FSharpSymbol) =
- let compiledName = (^a: (member CompiledName : string) (s))
+ let compiledName = (^a: (member CompiledName: string) (s))
match compiledName = s.DisplayName with
| true -> None
@@ -1506,7 +1506,7 @@ module internal SymbolReader =
]
// op_XYZ operators
- | _, false, _, name, _ when PrettyNaming.IsMangledOpName v.CompiledName ->
+ | _, false, _, name, _ when PrettyNaming.IsOperatorName v.CompiledName ->
match argInfos with
// binary operators (taking a tuple)
| [ [ x; y ] ] ->
diff --git a/src/FSharp.Formatting.Literate/Contexts.fs b/src/FSharp.Formatting.Literate/Contexts.fs
index a82e7906d..facffe9fd 100644
--- a/src/FSharp.Formatting.Literate/Contexts.fs
+++ b/src/FSharp.Formatting.Literate/Contexts.fs
@@ -102,8 +102,11 @@ type internal LiterateProcessingContext =
/// The output format
OutputKind: OutputKind
+ /// Helper to resolve URL referenecs in markdown, e.g. 'index.md' --> 'index.html' when doing HTML output
+ MarkdownDirectLinkResolver: string -> string option
+
/// Helper to resolve `cref:T:TypeName` references in markdown
- ResolveApiDocReference: string -> (string * string) option
+ CodeReferenceResolver: string -> (string * string) option
/// Conditional defines for the processing
ConditionalDefines: string list
diff --git a/src/FSharp.Formatting.Literate/Evaluator.fs b/src/FSharp.Formatting.Literate/Evaluator.fs
index dfd2fb173..b3575c7ba 100644
--- a/src/FSharp.Formatting.Literate/Evaluator.fs
+++ b/src/FSharp.Formatting.Literate/Evaluator.fs
@@ -66,10 +66,10 @@ type FsiEvaluationFailedInfo =
type IFsiEvaluator =
/// Called to format some part of evaluation result generated by FSI
- abstract Format : result: IFsiEvaluationResult * kind: FsiEmbedKind * executionCount: int -> MarkdownParagraphs
+ abstract Format: result: IFsiEvaluationResult * kind: FsiEmbedKind * executionCount: int -> MarkdownParagraphs
/// Called to evaluate a snippet
- abstract Evaluate : code: string * asExpression: bool * file: string option -> IFsiEvaluationResult
+ abstract Evaluate: code: string * asExpression: bool * file: string option -> IFsiEvaluationResult
/// Represents a simple (fake) event loop for the 'fsi' object
type private NoOpFsiEventLoop() =
diff --git a/src/FSharp.Formatting.Literate/Formatting.fs b/src/FSharp.Formatting.Literate/Formatting.fs
index a23f5ee91..c37f2796e 100644
--- a/src/FSharp.Formatting.Literate/Formatting.fs
+++ b/src/FSharp.Formatting.Literate/Formatting.fs
@@ -9,17 +9,41 @@ open FSharp.Formatting.Templating
module internal Formatting =
/// Format document with the specified output kind
- let format (doc: MarkdownDocument) generateAnchors outputKind substitutions crefResolver =
+ let format (doc: MarkdownDocument) generateAnchors outputKind substitutions crefResolver mdlinkResolver =
match outputKind with
- | OutputKind.Fsx -> Markdown.ToFsx(doc, substitutions = substitutions, crefResolver = crefResolver)
- | OutputKind.Md -> Markdown.ToMd(doc, substitutions = substitutions, crefResolver = crefResolver)
- | OutputKind.Pynb -> Markdown.ToPynb(doc, substitutions = substitutions, crefResolver = crefResolver)
- | OutputKind.Latex -> Markdown.ToLatex(doc, substitutions = substitutions, crefResolver = crefResolver)
+ | OutputKind.Fsx ->
+ Markdown.ToFsx(
+ doc,
+ substitutions = substitutions,
+ crefResolver = crefResolver,
+ mdlinkResolver = mdlinkResolver
+ )
+ | OutputKind.Md ->
+ Markdown.ToMd(
+ doc,
+ substitutions = substitutions,
+ crefResolver = crefResolver,
+ mdlinkResolver = mdlinkResolver
+ )
+ | OutputKind.Pynb ->
+ Markdown.ToPynb(
+ doc,
+ substitutions = substitutions,
+ crefResolver = crefResolver,
+ mdlinkResolver = mdlinkResolver
+ )
+ | OutputKind.Latex ->
+ Markdown.ToLatex(
+ doc,
+ substitutions = substitutions,
+ crefResolver = crefResolver,
+ mdlinkResolver = mdlinkResolver
+ )
| OutputKind.Html ->
let sb = new System.Text.StringBuilder()
use wr = new StringWriter(sb)
- HtmlFormatting.formatMarkdown
+ HtmlFormatting.formatAsHtml
wr
generateAnchors
true
@@ -27,6 +51,7 @@ module internal Formatting =
substitutions
System.Environment.NewLine
crefResolver
+ mdlinkResolver
doc.Paragraphs
sb.ToString()
@@ -42,7 +67,7 @@ module internal Formatting =
| OutputKind.Latex ->
let doc = MarkdownDocument([ Span(text, r) ], dict [])
- Some(format doc generateAnchors outputKind [] (fun _ -> None))
+ Some(format doc generateAnchors outputKind [] (fun _ -> None) (fun _ -> None))
| _ -> None
| _ -> None)
@@ -123,7 +148,8 @@ module internal Formatting =
let doc = getSourceDocument doc |> Transformations.replaceLiterateParagraphs ctx
- let source = format doc.MarkdownDocument ctx.GenerateHeaderAnchors ctx.OutputKind [] (fun _ -> None)
+ let source =
+ format doc.MarkdownDocument ctx.GenerateHeaderAnchors ctx.OutputKind [] (fun _ -> None) (fun _ -> None)
[ ParamKeys.``fsdocs-source-filename``, relativeSourceFileName
ParamKeys.``fsdocs-source-basename``, relativeSourceFileBaseName
@@ -151,7 +177,8 @@ module internal Formatting =
ctx.GenerateHeaderAnchors
ctx.OutputKind
substitutions0
- ctx.ResolveApiDocReference
+ ctx.CodeReferenceResolver
+ ctx.MarkdownDirectLinkResolver
let tipsHtml = doc.FormattedTips
diff --git a/src/FSharp.Formatting.Literate/Literate.fs b/src/FSharp.Formatting.Literate/Literate.fs
index 3dff6be06..e2d26f634 100644
--- a/src/FSharp.Formatting.Literate/Literate.fs
+++ b/src/FSharp.Formatting.Literate/Literate.fs
@@ -21,7 +21,7 @@ open FSharp.Formatting.Templating
type Literate private () =
/// Build default options context for formatting literate document
- static let formattingContext
+ static let makeFormattingContext
(outputKind: OutputKind)
prefix
lineNumbers
@@ -29,6 +29,7 @@ type Literate private () =
substitutions
tokenKindToCss
crefResolver
+ mdlinkResolver
=
let defines = [ outputKind.Extension ]
@@ -39,8 +40,8 @@ type Literate private () =
OutputKind = outputKind
GenerateHeaderAnchors = defaultArg generateAnchors false
TokenKindToCss = tokenKindToCss
- ResolveApiDocReference = crefResolver }
-
+ MarkdownDirectLinkResolver = mdlinkResolver
+ CodeReferenceResolver = crefResolver }
/// Lookup a specified key in a dictionary, possibly
/// ignoring newlines or spaces in the key.
@@ -242,12 +243,23 @@ type Literate private () =
?generateAnchors,
?tokenKindToCss,
?substitutions,
- ?crefResolver
+ ?crefResolver,
+ ?mdlinkResolver
) =
let substitutions = defaultArg substitutions []
let crefResolver = defaultArg crefResolver (fun _ -> None)
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
- let ctx = formattingContext OutputKind.Html prefix lineNumbers generateAnchors None tokenKindToCss crefResolver
+ let ctx =
+ makeFormattingContext
+ OutputKind.Html
+ prefix
+ lineNumbers
+ generateAnchors
+ None
+ tokenKindToCss
+ crefResolver
+ mdlinkResolver
let doc = Transformations.replaceLiterateParagraphs ctx doc
@@ -257,7 +269,7 @@ type Literate private () =
let sb = new System.Text.StringBuilder()
use wr = new StringWriter(sb)
- HtmlFormatting.formatMarkdown
+ HtmlFormatting.formatAsHtml
wr
ctx.GenerateHeaderAnchors
true
@@ -265,6 +277,7 @@ type Literate private () =
substitutions
Environment.NewLine
crefResolver
+ mdlinkResolver
doc.Paragraphs
sb.ToString()
@@ -279,12 +292,23 @@ type Literate private () =
?generateAnchors,
?tokenKindToCss,
?substitutions,
- ?crefResolver
+ ?crefResolver,
+ ?mdlinkResolver
) =
let substitutions = defaultArg substitutions []
let crefResolver = defaultArg crefResolver (fun _ -> None)
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
- let ctx = formattingContext OutputKind.Html prefix lineNumbers generateAnchors None tokenKindToCss crefResolver
+ let ctx =
+ makeFormattingContext
+ OutputKind.Html
+ prefix
+ lineNumbers
+ generateAnchors
+ None
+ tokenKindToCss
+ crefResolver
+ mdlinkResolver
let doc = Transformations.replaceLiterateParagraphs ctx doc
@@ -292,7 +316,7 @@ type Literate private () =
let doc = MarkdownDocument(paragraphs)
- HtmlFormatting.formatMarkdown
+ HtmlFormatting.formatAsHtml
writer
ctx.GenerateHeaderAnchors
true
@@ -300,6 +324,7 @@ type Literate private () =
substitutions
Environment.NewLine
crefResolver
+ mdlinkResolver
doc.Paragraphs
/// Format the literate document as Latex without using a template
@@ -310,14 +335,24 @@ type Literate private () =
?lineNumbers,
?generateAnchors,
?substitutions,
- ?crefResolver
+ ?crefResolver,
+ ?mdlinkResolver
) =
let crefResolver = defaultArg crefResolver (fun _ -> None)
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
- let ctx = formattingContext OutputKind.Latex prefix lineNumbers generateAnchors None None crefResolver
+ let ctx =
+ makeFormattingContext
+ OutputKind.Latex
+ prefix
+ lineNumbers
+ generateAnchors
+ None
+ None
+ crefResolver
+ mdlinkResolver
let doc = Transformations.replaceLiterateParagraphs ctx doc
-
Markdown.ToLatex(MarkdownDocument(doc.Paragraphs, doc.DefinedLinks), ?substitutions = substitutions)
/// Write the literate document as Latex without using a template
@@ -329,34 +364,40 @@ type Literate private () =
?lineNumbers,
?generateAnchors,
?substitutions,
- ?crefResolver
+ ?crefResolver,
+ ?mdlinkResolver
) =
let crefResolver = defaultArg crefResolver (fun _ -> None)
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
- let ctx = formattingContext OutputKind.Latex prefix lineNumbers generateAnchors None None crefResolver
+ let ctx =
+ makeFormattingContext
+ OutputKind.Latex
+ prefix
+ lineNumbers
+ generateAnchors
+ None
+ None
+ crefResolver
+ mdlinkResolver
let doc = Transformations.replaceLiterateParagraphs ctx doc
-
Markdown.WriteLatex(MarkdownDocument(doc.Paragraphs, doc.DefinedLinks), writer, ?substitutions = substitutions)
/// Formate the literate document as an iPython notebook
- static member ToPynb(doc: LiterateDocument, ?substitutions, ?crefResolver) =
+ static member ToPynb(doc: LiterateDocument, ?substitutions, ?crefResolver, ?mdlinkResolver) =
let crefResolver = defaultArg crefResolver (fun _ -> None)
-
- let ctx = formattingContext OutputKind.Pynb None None None substitutions None crefResolver
-
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
+ let ctx = makeFormattingContext OutputKind.Pynb None None None substitutions None crefResolver mdlinkResolver
let doc = Transformations.replaceLiterateParagraphs ctx doc
-
Markdown.ToPynb(MarkdownDocument(doc.Paragraphs, doc.DefinedLinks), ?substitutions = substitutions)
/// Formate the literate document as an .fsx script
- static member ToFsx(doc: LiterateDocument, ?substitutions, ?crefResolver) =
+ static member ToFsx(doc: LiterateDocument, ?substitutions, ?crefResolver, ?mdlinkResolver) =
let crefResolver = defaultArg crefResolver (fun _ -> None)
-
- let ctx = formattingContext OutputKind.Fsx None None None substitutions None crefResolver
-
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
+ let ctx = makeFormattingContext OutputKind.Fsx None None None substitutions None crefResolver mdlinkResolver
let doc = Transformations.replaceLiterateParagraphs ctx doc
-
Markdown.ToFsx(MarkdownDocument(doc.Paragraphs, doc.DefinedLinks), ?substitutions = substitutions)
/// Replace literate paragraphs with plain paragraphs
@@ -368,12 +409,23 @@ type Literate private () =
?lineNumbers,
?generateAnchors,
?tokenKindToCss,
- ?crefResolver
+ ?crefResolver,
+ ?mdlinkResolver
) =
let crefResolver = defaultArg crefResolver (fun _ -> None)
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
let outputKind = defaultArg outputKind OutputKind.Html
- let ctx = formattingContext outputKind prefix lineNumbers generateAnchors None tokenKindToCss crefResolver
+ let ctx =
+ makeFormattingContext
+ outputKind
+ prefix
+ lineNumbers
+ generateAnchors
+ None
+ tokenKindToCss
+ crefResolver
+ mdlinkResolver
Transformations.replaceLiterateParagraphs ctx doc
@@ -395,10 +447,12 @@ type Literate private () =
?imageSaver,
?rootInputFolder,
?crefResolver,
+ ?mdlinkResolver,
?parseOptions
) =
let crefResolver = defaultArg crefResolver (fun _ -> None)
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
let outputKind = defaultArg outputKind OutputKind.Html
let parseOptions = defaultArg parseOptions MarkdownParseOptions.AllowYamlFrontMatter
@@ -406,10 +460,8 @@ type Literate private () =
let parseOptions =
match outputKind with
| OutputKind.Fsx
- | OutputKind.Pynb ->
- parseOptions
- ||| MarkdownParseOptions.ParseCodeAsOther
- ||| MarkdownParseOptions.ParseNonCodeAsOther
+ | OutputKind.Pynb -> parseOptions ||| MarkdownParseOptions.ParseCodeAsOther
+ //||| MarkdownParseOptions.ParseNonCodeAsOther
| _ -> parseOptions
let doc =
@@ -423,7 +475,15 @@ type Literate private () =
)
let ctx =
- formattingContext outputKind prefix lineNumbers generateAnchors substitutions tokenKindToCss crefResolver
+ makeFormattingContext
+ outputKind
+ prefix
+ lineNumbers
+ generateAnchors
+ substitutions
+ tokenKindToCss
+ crefResolver
+ mdlinkResolver
let doc = customizeDoc customizeDocument ctx doc
let doc = downloadImagesForDoc imageSaver doc
@@ -448,18 +508,18 @@ type Literate private () =
?tokenKindToCss,
?imageSaver,
?rootInputFolder,
- ?crefResolver
+ ?crefResolver,
+ ?mdlinkResolver
) =
let parseOptions =
match outputKind with
| Some OutputKind.Fsx
- | Some OutputKind.Pynb ->
- MarkdownParseOptions.ParseCodeAsOther
- ||| MarkdownParseOptions.ParseNonCodeAsOther
+ | Some OutputKind.Pynb -> MarkdownParseOptions.ParseCodeAsOther
| _ -> MarkdownParseOptions.None
let crefResolver = defaultArg crefResolver (fun _ -> None)
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
let outputKind = defaultArg outputKind OutputKind.Html
let doc =
@@ -474,7 +534,15 @@ type Literate private () =
)
let ctx =
- formattingContext outputKind prefix lineNumbers generateAnchors substitutions tokenKindToCss crefResolver
+ makeFormattingContext
+ outputKind
+ prefix
+ lineNumbers
+ generateAnchors
+ substitutions
+ tokenKindToCss
+ crefResolver
+ mdlinkResolver
let doc = customizeDoc customizeDocument ctx doc
let doc = downloadImagesForDoc imageSaver doc
@@ -491,15 +559,25 @@ type Literate private () =
?lineNumbers,
?generateAnchors,
?substitutions,
- ?crefResolver
+ ?crefResolver,
+ ?mdlinkResolver
) =
let crefResolver = defaultArg crefResolver (fun _ -> None)
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
let outputKind = defaultArg outputKind OutputKind.Html
- let ctx = formattingContext outputKind prefix lineNumbers generateAnchors substitutions None crefResolver
+ let ctx =
+ makeFormattingContext
+ outputKind
+ prefix
+ lineNumbers
+ generateAnchors
+ substitutions
+ None
+ crefResolver
+ mdlinkResolver
let res = Formatting.transformDocument doc output ctx
-
SimpleTemplating.UseFileAsSimpleTemplate(res.Substitutions, template, output)
/// Convert a markdown file into HTML or another output kind
@@ -517,7 +595,8 @@ type Literate private () =
?substitutions,
?generateAnchors,
?rootInputFolder,
- ?crefResolver
+ ?crefResolver,
+ ?mdlinkResolver
) =
let outputKind = defaultArg outputKind OutputKind.Html
@@ -536,7 +615,8 @@ type Literate private () =
?generateAnchors = generateAnchors,
?substitutions = substitutions (* ?customizeDocument=customizeDocument, *) ,
?rootInputFolder = rootInputFolder,
- ?crefResolver = crefResolver
+ ?crefResolver = crefResolver,
+ ?mdlinkResolver = mdlinkResolver
)
SimpleTemplating.UseFileAsSimpleTemplate(res.Substitutions, template, output)
@@ -562,7 +642,8 @@ type Literate private () =
?substitutions,
?generateAnchors,
?rootInputFolder,
- ?crefResolver
+ ?crefResolver,
+ ?mdlinkResolver
) =
let outputKind = defaultArg outputKind OutputKind.Html
@@ -582,7 +663,8 @@ type Literate private () =
?substitutions = substitutions (* ?customizeDocument=customizeDocument, *) ,
?fsiEvaluator = fsiEvaluator,
?rootInputFolder = rootInputFolder,
- ?crefResolver = crefResolver
+ ?crefResolver = crefResolver,
+ ?mdlinkResolver = mdlinkResolver
)
SimpleTemplating.UseFileAsSimpleTemplate(res.Substitutions, template, output)
diff --git a/src/FSharp.Formatting.Literate/Transformations.fs b/src/FSharp.Formatting.Literate/Transformations.fs
index 6c841fa28..297b7cc20 100644
--- a/src/FSharp.Formatting.Literate/Transformations.fs
+++ b/src/FSharp.Formatting.Literate/Transformations.fs
@@ -201,7 +201,6 @@ module internal Transformations =
loop
-
/// Given Markdown document, add a number using the given index to all indirect
/// references. For example, [article][ref] becomes [article][ref] [1](#rfxyz)
let replaceReferences (refIndex: IDictionary) =
@@ -230,10 +229,9 @@ module internal Transformations =
loop
-
/// Given all links defined in the Markdown document and a list of all links
/// that are accessed somewhere from the document, generate References paragraph
- let generateRefParagraphs (definedLinks: IDictionary<_, string * string option>) refs =
+ let generateReferenceParagraphs (definedLinks: IDictionary<_, string * string option>) refs =
// For all unique references in the document,
// get the link & title from definitions
let refs =
@@ -289,7 +287,7 @@ module internal Transformations =
if references then
let refs = doc.Paragraphs |> Seq.collect collectReferences
- let refPars, refLookup = generateRefParagraphs doc.DefinedLinks refs
+ let refPars, refLookup = generateReferenceParagraphs doc.DefinedLinks refs
let newDoc = doc.Paragraphs |> List.choose (replaceReferences refLookup)
@@ -457,7 +455,7 @@ module internal Transformations =
| _ -> () ]
- /// Replace all sporiginalLineecial 'LiterateParagraph' elements recursively using the given lookup dictionary
+ /// Replace all special 'LiterateParagraph' elements recursively using the given lookup dictionary
let rec replaceLiterateParagraph (ctx: LiterateProcessingContext) (formatted: IDictionary<_, _>) para =
match para with
| MarkdownPatterns.LiterateParagraph (special) ->
diff --git a/src/FSharp.Formatting.Markdown/FsxFormatting.fs b/src/FSharp.Formatting.Markdown/FsxFormatting.fs
index 7fc69edb0..f06654c68 100644
--- a/src/FSharp.Formatting.Markdown/FsxFormatting.fs
+++ b/src/FSharp.Formatting.Markdown/FsxFormatting.fs
@@ -41,12 +41,13 @@ let rec formatParagraphs ctx paragraphs =
let cells = cell :: others
cells
-let formatAsFsx links substitutions newline crefResolver paragraphs =
+let formatAsFsx links substitutions newline crefResolver mdlinkResolver paragraphs =
let ctx =
{ Links = links
Substitutions = substitutions
Newline = newline
- ResolveApiDocReference = crefResolver
+ CodeReferenceResolver = crefResolver
+ MarkdownDirectLinkResolver = mdlinkResolver
DefineSymbol = "FSX" }
let paragraphs = applySubstitutionsInMarkdown ctx paragraphs
diff --git a/src/FSharp.Formatting.Markdown/HtmlFormatting.fs b/src/FSharp.Formatting.Markdown/HtmlFormatting.fs
index 318a1291a..bf32d12d5 100644
--- a/src/FSharp.Formatting.Markdown/HtmlFormatting.fs
+++ b/src/FSharp.Formatting.Markdown/HtmlFormatting.fs
@@ -341,12 +341,13 @@ and internal formatParagraphs ctx paragraphs =
/// Format Markdown document and write the result to
/// a specified TextWriter. Parameters specify newline character
/// and a dictionary with link keys defined in the document.
-let formatMarkdown writer generateAnchors wrap links substitutions newline crefResolver paragraphs =
+let formatAsHtml writer generateAnchors wrap links substitutions newline crefResolver mdlinkResolver paragraphs =
let ctx =
{ Links = links
Substitutions = substitutions
Newline = newline
- ResolveApiDocReference = crefResolver
+ CodeReferenceResolver = crefResolver
+ MarkdownDirectLinkResolver = mdlinkResolver
DefineSymbol = "HTML" }
let paragraphs = applySubstitutionsInMarkdown ctx paragraphs
diff --git a/src/FSharp.Formatting.Markdown/LatexFormatting.fs b/src/FSharp.Formatting.Markdown/LatexFormatting.fs
index 8a3abf383..6fc078ebd 100644
--- a/src/FSharp.Formatting.Markdown/LatexFormatting.fs
+++ b/src/FSharp.Formatting.Markdown/LatexFormatting.fs
@@ -260,12 +260,13 @@ and formatParagraphs ctx paragraphs =
/// Format Markdown document and write the result to
/// a specified TextWriter. Parameters specify newline character
/// and a dictionary with link keys defined in the document.
-let formatMarkdown writer links replacements newline crefResolver paragraphs =
+let formatAsLatex writer links replacements newline crefResolver mdlinkResolver paragraphs =
let ctx =
{ Links = links
Substitutions = replacements
Newline = newline
- ResolveApiDocReference = crefResolver
+ CodeReferenceResolver = crefResolver
+ MarkdownDirectLinkResolver = mdlinkResolver
DefineSymbol = "LATEX" }
let paragraphs = applySubstitutionsInMarkdown ctx paragraphs
diff --git a/src/FSharp.Formatting.Markdown/Markdown.fs b/src/FSharp.Formatting.Markdown/Markdown.fs
index 32104f339..4744e434e 100644
--- a/src/FSharp.Formatting.Markdown/Markdown.fs
+++ b/src/FSharp.Formatting.Markdown/Markdown.fs
@@ -82,12 +82,13 @@ type Markdown internal () =
/// Transform the provided MarkdownDocument into HTML
/// format and write the result to a given writer.
- static member WriteHtml(doc: MarkdownDocument, writer, ?newline, ?substitutions, ?crefResolver) =
+ static member WriteHtml(doc: MarkdownDocument, writer, ?newline, ?substitutions, ?crefResolver, ?mdlinkResolver) =
let newline = defaultArg newline Environment.NewLine
let substitutions = defaultArg substitutions []
let crefResolver = defaultArg crefResolver (fun _ -> None)
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
- HtmlFormatting.formatMarkdown
+ HtmlFormatting.formatAsHtml
writer
false
false
@@ -95,11 +96,20 @@ type Markdown internal () =
substitutions
newline
crefResolver
+ mdlinkResolver
doc.Paragraphs
/// Transform Markdown text into HTML format. The result
/// will be written to the provided TextWriter.
- static member WriteHtml(markdownText: string, writer: TextWriter, ?newline, ?substitutions, ?crefResolver) =
+ static member WriteHtml
+ (
+ markdownText: string,
+ writer: TextWriter,
+ ?newline,
+ ?substitutions,
+ ?crefResolver,
+ ?mdlinkResolver
+ ) =
let doc = Markdown.Parse(markdownText, ?newline = newline)
Markdown.WriteHtml(
@@ -107,35 +117,68 @@ type Markdown internal () =
writer,
?newline = newline,
?substitutions = substitutions,
- ?crefResolver = crefResolver
+ ?crefResolver = crefResolver,
+ ?mdlinkResolver = mdlinkResolver
)
/// Transform the provided MarkdownDocument into HTML
/// format and return the result as a string.
- static member ToHtml(doc: MarkdownDocument, ?newline, ?substitutions, ?crefResolver) =
+ static member ToHtml(doc: MarkdownDocument, ?newline, ?substitutions, ?crefResolver, ?mdlinkResolver) =
let sb = new System.Text.StringBuilder()
use wr = new StringWriter(sb)
- Markdown.WriteHtml(doc, wr, ?newline = newline, ?substitutions = substitutions, ?crefResolver = crefResolver)
+
+ Markdown.WriteHtml(
+ doc,
+ wr,
+ ?newline = newline,
+ ?substitutions = substitutions,
+ ?crefResolver = crefResolver,
+ ?mdlinkResolver = mdlinkResolver
+ )
+
sb.ToString()
/// Transform Markdown document into HTML format.
/// The result will be returned as a string.
- static member ToHtml(markdownText: string, ?newline, ?substitutions, ?crefResolver) =
+ static member ToHtml(markdownText: string, ?newline, ?substitutions, ?crefResolver, ?mdlinkResolver) =
let doc = Markdown.Parse(markdownText, ?newline = newline)
- Markdown.ToHtml(doc, ?newline = newline, ?substitutions = substitutions, ?crefResolver = crefResolver)
+ Markdown.ToHtml(
+ doc,
+ ?newline = newline,
+ ?substitutions = substitutions,
+ ?crefResolver = crefResolver,
+ ?mdlinkResolver = mdlinkResolver
+ )
/// Transform the provided MarkdownDocument into LaTeX
/// format and write the result to a given writer.
- static member WriteLatex(doc: MarkdownDocument, writer, ?newline, ?substitutions, ?crefResolver) =
+ static member WriteLatex(doc: MarkdownDocument, writer, ?newline, ?substitutions, ?crefResolver, ?mdlinkResolver) =
let newline = defaultArg newline Environment.NewLine
let substitutions = defaultArg substitutions []
let crefResolver = defaultArg crefResolver (fun _ -> None)
- LatexFormatting.formatMarkdown writer doc.DefinedLinks substitutions newline crefResolver doc.Paragraphs
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
+
+ LatexFormatting.formatAsLatex
+ writer
+ doc.DefinedLinks
+ substitutions
+ newline
+ crefResolver
+ mdlinkResolver
+ doc.Paragraphs
/// Transform Markdown document into LaTeX format. The result
/// will be written to the provided TextWriter.
- static member WriteLatex(markdownText, writer: TextWriter, ?newline, ?substitutions, ?crefResolver) =
+ static member WriteLatex
+ (
+ markdownText,
+ writer: TextWriter,
+ ?newline,
+ ?substitutions,
+ ?crefResolver,
+ ?mdlinkResolver
+ ) =
let doc = Markdown.Parse(markdownText, ?newline = newline)
Markdown.WriteLatex(
@@ -143,40 +186,66 @@ type Markdown internal () =
writer,
?newline = newline,
?substitutions = substitutions,
- ?crefResolver = crefResolver
+ ?crefResolver = crefResolver,
+ ?mdlinkResolver = mdlinkResolver
)
/// Transform the provided MarkdownDocument into LaTeX
/// format and return the result as a string.
- static member ToLatex(doc: MarkdownDocument, ?newline, ?substitutions, ?crefResolver) =
+ static member ToLatex(doc: MarkdownDocument, ?newline, ?substitutions, ?crefResolver, ?mdlinkResolver) =
let sb = new System.Text.StringBuilder()
use wr = new StringWriter(sb)
- Markdown.WriteLatex(doc, wr, ?newline = newline, ?substitutions = substitutions, ?crefResolver = crefResolver)
+
+ Markdown.WriteLatex(
+ doc,
+ wr,
+ ?newline = newline,
+ ?substitutions = substitutions,
+ ?crefResolver = crefResolver,
+ ?mdlinkResolver = mdlinkResolver
+ )
+
sb.ToString()
/// Transform Markdown text into LaTeX format. The result will be returned as a string.
- static member ToLatex(markdownText: string, ?newline, ?substitutions, ?crefResolver) =
+ static member ToLatex(markdownText: string, ?newline, ?substitutions, ?crefResolver, ?mdlinkResolver) =
let doc = Markdown.Parse(markdownText, ?newline = newline)
- Markdown.ToLatex(doc, ?newline = newline, ?substitutions = substitutions, ?crefResolver = crefResolver)
+ Markdown.ToLatex(
+ doc,
+ ?newline = newline,
+ ?substitutions = substitutions,
+ ?crefResolver = crefResolver,
+ ?mdlinkResolver = mdlinkResolver
+ )
/// Transform the provided MarkdownDocument into Pynb and return the result as a string.
- static member ToPynb(doc: MarkdownDocument, ?newline, ?substitutions, ?crefResolver) =
+ static member ToPynb(doc: MarkdownDocument, ?newline, ?substitutions, ?crefResolver, ?mdlinkResolver) =
let newline = defaultArg newline Environment.NewLine
let substitutions = defaultArg substitutions []
let crefResolver = defaultArg crefResolver (fun _ -> None)
- PynbFormatting.formatAsPynb doc.DefinedLinks substitutions newline crefResolver doc.Paragraphs
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
+ PynbFormatting.formatAsPynb doc.DefinedLinks substitutions newline crefResolver mdlinkResolver doc.Paragraphs
/// Transform the provided MarkdownDocument into Fsx and return the result as a string.
- static member ToFsx(doc: MarkdownDocument, ?newline, ?substitutions, ?crefResolver) =
+ static member ToFsx(doc: MarkdownDocument, ?newline, ?substitutions, ?crefResolver, ?mdlinkResolver) =
let newline = defaultArg newline Environment.NewLine
let substitutions = defaultArg substitutions []
let crefResolver = defaultArg crefResolver (fun _ -> None)
- FsxFormatting.formatAsFsx doc.DefinedLinks substitutions newline crefResolver doc.Paragraphs
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
+ FsxFormatting.formatAsFsx doc.DefinedLinks substitutions newline crefResolver mdlinkResolver doc.Paragraphs
/// Transform the provided MarkdownDocument into Md and return the result as a string.
- static member ToMd(doc: MarkdownDocument, ?newline, ?substitutions, ?crefResolver) =
+ static member ToMd(doc: MarkdownDocument, ?newline, ?substitutions, ?crefResolver, ?mdlinkResolver) =
let newline = defaultArg newline Environment.NewLine
let substitutions = defaultArg substitutions []
let crefResolver = defaultArg crefResolver (fun _ -> None)
- MarkdownFormatting.formatAsMd doc.DefinedLinks substitutions newline crefResolver doc.Paragraphs
+ let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None)
+
+ MarkdownFormatting.formatAsMarkdown
+ doc.DefinedLinks
+ substitutions
+ newline
+ crefResolver
+ mdlinkResolver
+ doc.Paragraphs
diff --git a/src/FSharp.Formatting.Markdown/MarkdownFormatting.fs b/src/FSharp.Formatting.Markdown/MarkdownFormatting.fs
index 38835ce10..3459c3cf0 100644
--- a/src/FSharp.Formatting.Markdown/MarkdownFormatting.fs
+++ b/src/FSharp.Formatting.Markdown/MarkdownFormatting.fs
@@ -9,12 +9,13 @@ open MarkdownUtils
let rec formatParagraphs ctx (paragraphs: MarkdownParagraph list) =
paragraphs |> Seq.collect (formatParagraph ctx)
-let formatAsMd links replacements newline crefResolver paragraphs =
+let formatAsMarkdown links replacements newline crefResolver mdlinkResolver paragraphs =
let ctx =
{ Links = links
Substitutions = replacements
Newline = newline
- ResolveApiDocReference = crefResolver
+ CodeReferenceResolver = crefResolver
+ MarkdownDirectLinkResolver = mdlinkResolver
DefineSymbol = "MD" }
let paragraphs = applySubstitutionsInMarkdown ctx paragraphs
diff --git a/src/FSharp.Formatting.Markdown/MarkdownModel.fs b/src/FSharp.Formatting.Markdown/MarkdownModel.fs
index 8dd67cbcb..5cdb0ee1d 100644
--- a/src/FSharp.Formatting.Markdown/MarkdownModel.fs
+++ b/src/FSharp.Formatting.Markdown/MarkdownModel.fs
@@ -48,7 +48,7 @@ type MarkdownSpans = MarkdownSpan list
/// Provides an extensibility point for adding custom kinds of spans into a document
/// (MarkdownEmbedSpans values can be embedded using MarkdownSpan.EmbedSpans)
type MarkdownEmbedSpans =
- abstract Render : unit -> MarkdownSpans
+ abstract Render: unit -> MarkdownSpans
/// A paragraph represents a (possibly) multi-line element of a Markdown document.
/// Paragraphs are headings, inline paragraphs, code blocks, lists, quotations, tables and
@@ -111,7 +111,7 @@ type MarkdownTableRow = list
/// Provides an extensibility point for adding custom kinds of paragraphs into a document
/// (MarkdownEmbedParagraphs values can be embedded using MarkdownParagraph.EmbedParagraphs)
type MarkdownEmbedParagraphs =
- abstract Render : unit -> MarkdownParagraphs
+ abstract Render: unit -> MarkdownParagraphs
module Dsl =
let ``#`` value = Heading(1, value, None)
diff --git a/src/FSharp.Formatting.Markdown/MarkdownUtils.fs b/src/FSharp.Formatting.Markdown/MarkdownUtils.fs
index 77143fb76..dd5421405 100644
--- a/src/FSharp.Formatting.Markdown/MarkdownUtils.fs
+++ b/src/FSharp.Formatting.Markdown/MarkdownUtils.fs
@@ -76,7 +76,9 @@ module internal MarkdownUtils =
/// Additional replacements to be made in content
Substitutions: Substitutions
/// Helper to resolve `cref:T:TypeName` references in markdown
- ResolveApiDocReference: string -> (string * string) option
+ CodeReferenceResolver: string -> (string * string) option
+ /// Helper to resolve `[foo](file.md)` references in markdown (where file.md is producing file.fsx)
+ MarkdownDirectLinkResolver: string -> string option
DefineSymbol: string }
/// Format a MarkdownSpan
@@ -215,28 +217,34 @@ module internal MarkdownUtils =
SimpleTemplating.ApplySubstitutionsInText ctx.Substitutions text
let applyCodeReferenceResolver ctx (code, range) =
- match ctx.ResolveApiDocReference code with
+ match ctx.CodeReferenceResolver code with
| None -> InlineCode(code, range)
| Some (niceName, link) -> DirectLink([ Literal(niceName, range) ], link, None, range)
- let mapText (f, _) text = f text
- let mapInlineCode (_, f) (code, range) = f (code, range)
+ let applyDirectLinkResolver ctx link =
+ match ctx.MarkdownDirectLinkResolver link with
+ | None -> link
+ | Some newLink -> newLink
- let rec mapSpans f (md: MarkdownSpans) =
+ let mapText (f, _, _) text = f text
+ let mapInlineCode (_, f, _) (code, range) = f (code, range)
+ let mapDirectLink (fText, _, fLink) text = fLink (fText text)
+
+ let rec mapSpans fs (md: MarkdownSpans) =
md
|> List.map (function
- | Literal (text, range) -> Literal(mapText f text, range)
- | Strong (spans, range) -> Strong(mapSpans f spans, range)
- | Emphasis (spans, range) -> Emphasis(mapSpans f spans, range)
- | AnchorLink (link, range) -> AnchorLink(mapText f link, range)
+ | Literal (text, range) -> Literal(mapText fs text, range)
+ | Strong (spans, range) -> Strong(mapSpans fs spans, range)
+ | Emphasis (spans, range) -> Emphasis(mapSpans fs spans, range)
+ | AnchorLink (link, range) -> AnchorLink(mapText fs link, range)
| DirectLink (spans, link, title, range) ->
- DirectLink(mapSpans f spans, mapText f link, Option.map (mapText f) title, range)
- | IndirectLink (spans, original, key, range) -> IndirectLink(mapSpans f spans, original, key, range)
+ DirectLink(mapSpans fs spans, mapDirectLink fs link, Option.map (mapText fs) title, range)
+ | IndirectLink (spans, original, key, range) -> IndirectLink(mapSpans fs spans, original, key, range)
| DirectImage (body, link, title, range) ->
- DirectImage(mapText f body, mapText f link, Option.map (mapText f) title, range)
- | IndirectImage (body, original, key, range) -> IndirectImage(mapText f body, original, key, range)
+ DirectImage(mapText fs body, mapText fs link, Option.map (mapText fs) title, range)
+ | IndirectImage (body, original, key, range) -> IndirectImage(mapText fs body, original, key, range)
| HardLineBreak (range) -> HardLineBreak(range)
- | InlineCode (code, range) -> mapInlineCode f (code, range)
+ | InlineCode (code, range) -> mapInlineCode fs (code, range)
// NOTE: substitutions not applied to Latex math, embedded spans or inline code
| LatexInlineMath (code, range) -> LatexInlineMath(code, range)
@@ -275,4 +283,4 @@ module internal MarkdownUtils =
EmbedParagraphs(customParagraphs, range))
let applySubstitutionsInMarkdown ctx md =
- mapParagraphs (applySubstitutionsInText ctx, applyCodeReferenceResolver ctx) md
+ mapParagraphs (applySubstitutionsInText ctx, applyCodeReferenceResolver ctx, applyDirectLinkResolver ctx) md
diff --git a/src/FSharp.Formatting.Markdown/PynbFormatting.fs b/src/FSharp.Formatting.Markdown/PynbFormatting.fs
index 0c3a86615..978bd59fd 100644
--- a/src/FSharp.Formatting.Markdown/PynbFormatting.fs
+++ b/src/FSharp.Formatting.Markdown/PynbFormatting.fs
@@ -35,12 +35,13 @@ let rec formatParagraphs ctx paragraphs =
let cells = cell :: others
cells
-let formatAsPynb links replacements newline crefResolver paragraphs =
+let formatAsPynb links replacements newline crefResolver mdlinkResolver paragraphs =
let ctx =
{ Links = links
Substitutions = replacements
Newline = newline
- ResolveApiDocReference = crefResolver
+ CodeReferenceResolver = crefResolver
+ MarkdownDirectLinkResolver = mdlinkResolver
DefineSymbol = "IPYNB" }
let paragraphs = applySubstitutionsInMarkdown ctx paragraphs
diff --git a/src/FSharp.Formatting.CommandTool/BuildCommand.fs b/src/fsdocs-tool/BuildCommand.fs
similarity index 77%
rename from src/FSharp.Formatting.CommandTool/BuildCommand.fs
rename to src/fsdocs-tool/BuildCommand.fs
index ba27b5740..c10526afd 100644
--- a/src/FSharp.Formatting.CommandTool/BuildCommand.fs
+++ b/src/fsdocs-tool/BuildCommand.fs
@@ -1,4 +1,4 @@
-namespace FSharp.Formatting.CommandTool
+namespace fsdocs
open CommandLine
@@ -6,6 +6,7 @@ open System
open System.Diagnostics
open System.IO
open System.Globalization
+open System.Net
open System.Reflection
open System.Text
@@ -15,7 +16,7 @@ open FSharp.Formatting.HtmlModel.Html
open FSharp.Formatting.Literate
open FSharp.Formatting.ApiDocs
open FSharp.Formatting.Literate.Evaluation
-open FSharp.Formatting.CommandTool.Common
+open fsdocs.Common
open FSharp.Formatting.Templating
open Suave
@@ -28,7 +29,7 @@ open Suave.Filters
/// Convert markdown, script and other content into a static site
type internal DocContent
(
- outputDirectory,
+ rootOutputFolderAsGiven,
previous: Map<_, _>,
lineNumbers,
fsiEvaluator,
@@ -39,9 +40,9 @@ type internal DocContent
crefResolver
) =
- let createImageSaver (outputDirectory) =
+ let createImageSaver (rootOutputFolderAsGiven) =
// Download images so that they can be embedded
- let wc = new System.Net.WebClient()
+ let wc = new WebClient()
let mutable counter = 0
fun (url: string) ->
@@ -51,24 +52,125 @@ type internal DocContent
let url2 = sprintf "savedimages/saved%d%s" counter ext
- let fn = sprintf "%s/%s" outputDirectory url2
+ let fn = sprintf "%s/%s" rootOutputFolderAsGiven url2
- ensureDirectory (sprintf "%s/savedimages" outputDirectory)
+ ensureDirectory (sprintf "%s/savedimages" rootOutputFolderAsGiven)
printfn "downloading %s --> %s" url fn
wc.DownloadFile(url, fn)
url2
else
url
- let processFile rootInputFolder isOtherLang (inputFile: string) outputKind template outputPrefix imageSaver =
- [ let name = Path.GetFileName(inputFile)
+ let getOutputFileNames (inputFileFullPath: string) (outputKind: OutputKind) outputFolderRelativeToRoot =
+ let inputFileName = Path.GetFileName(inputFileFullPath)
+ let isFsx = inputFileFullPath.EndsWith(".fsx", true, CultureInfo.InvariantCulture)
+ let isMd = inputFileFullPath.EndsWith(".md", true, CultureInfo.InvariantCulture)
+ let ext = outputKind.Extension
+
+ let outputFileRelativeToRoot =
+ if isFsx || isMd then
+ let basename = Path.GetFileNameWithoutExtension(inputFileFullPath)
+
+ Path.Combine(outputFolderRelativeToRoot, sprintf "%s.%s" basename ext)
+ else
+ Path.Combine(outputFolderRelativeToRoot, inputFileName)
+
+ let outputFileFullPath = Path.GetFullPath(Path.Combine(rootOutputFolderAsGiven, outputFileRelativeToRoot))
+ outputFileRelativeToRoot, outputFileFullPath
+
+ let allCultures =
+ System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures)
+ |> Array.map (fun x -> x.TwoLetterISOLanguageName)
+ |> Array.filter (fun x -> x.Length = 2)
+ |> Array.distinct
+
+ let makeMarkdownLinkResolver
+ (inputFolderAsGiven, outputFolderRelativeToRoot, fullPathFileMap: Map<(string * OutputKind), string>, outputKind)
+ (markdownReference: string)
+ =
+ let markdownReferenceAsFullInputPathOpt =
+ try
+ Path.GetFullPath(markdownReference, inputFolderAsGiven) |> Some
+ with
+ | _ -> None
+
+ match markdownReferenceAsFullInputPathOpt with
+ | None -> None
+ | Some markdownReferenceFullInputPath ->
+ match fullPathFileMap.TryFind(markdownReferenceFullInputPath, outputKind) with
+ | None -> None
+ | Some markdownReferenceFullOutputPath ->
+ try
+ let outputFolderFullPath =
+ Path.GetFullPath(Path.Combine(rootOutputFolderAsGiven, outputFolderRelativeToRoot))
+
+ let uri =
+ Uri(outputFolderFullPath + "/")
+ .MakeRelativeUri(Uri(markdownReferenceFullOutputPath))
+ .ToString()
+
+ Some uri
+ with
+ | _ ->
+ printfn
+ $"Couldn't map markdown reference {markdownReference} that seemed to correspond to an input file"
+
+ None
+
+ /// Prepare the map of input file to output file. This map is used to make substitutions through markdown
+ /// source such A.md --> A.html or A.fsx --> A.html. The substitutions depend on the output kind.
+ let prepFile (inputFileFullPath: string) (outputKind: OutputKind) outputFolderRelativeToRoot =
+ [ let inputFileName = Path.GetFileName(inputFileFullPath)
+
+ if
+ not (inputFileName.StartsWith("."))
+ && not (inputFileName.StartsWith "_template")
+ then
+ let inputFileFullPath = Path.GetFullPath(inputFileFullPath)
+
+ let _relativeOutputFile, outputFileFullPath =
+ getOutputFileNames inputFileFullPath outputKind outputFolderRelativeToRoot
+
+ yield ((inputFileFullPath, outputKind), outputFileFullPath) ]
+
+ /// Likewise prepare the map of input files to output files
+ let rec prepFolder (inputFolderAsGiven: string) outputFolderRelativeToRoot =
+ [ let inputs = Directory.GetFiles(inputFolderAsGiven, "*")
+
+ for input in inputs do
+ yield! prepFile input OutputKind.Html outputFolderRelativeToRoot
+ yield! prepFile input OutputKind.Latex outputFolderRelativeToRoot
+ yield! prepFile input OutputKind.Pynb outputFolderRelativeToRoot
+ yield! prepFile input OutputKind.Fsx outputFolderRelativeToRoot
+ yield! prepFile input OutputKind.Md outputFolderRelativeToRoot
+
+ for subdir in Directory.EnumerateDirectories(inputFolderAsGiven) do
+ let subFolderName = Path.GetFileName(subdir)
+
+ if not (subFolderName.StartsWith ".") then
+ yield!
+ prepFolder
+ (Path.Combine(inputFolderAsGiven, subFolderName))
+ (Path.Combine(outputFolderRelativeToRoot, subFolderName)) ]
+
+ let processFile
+ rootInputFolder
+ (isOtherLang: bool)
+ (inputFileFullPath: string)
+ outputKind
+ template
+ outputFolderRelativeToRoot
+ imageSaver
+ mdlinkResolver
+ =
+ [ let name = Path.GetFileName(inputFileFullPath)
if name.StartsWith(".") then
- printfn "skipping file %s" inputFile
+ printfn "skipping file %s" inputFileFullPath
elif not (name.StartsWith "_template") then
- let isFsx = inputFile.EndsWith(".fsx", true, CultureInfo.InvariantCulture)
+ let isFsx = inputFileFullPath.EndsWith(".fsx", true, CultureInfo.InvariantCulture)
- let isMd = inputFile.EndsWith(".md", true, CultureInfo.InvariantCulture)
+ let isMd = inputFileFullPath.EndsWith(".md", true, CultureInfo.InvariantCulture)
// A _template.tex or _template.pynb is needed to generate those files
match outputKind, template with
@@ -87,23 +189,15 @@ type internal DocContent
| OutputKind.Md when saveImages = Some true -> Some imageSaver
| _ -> None
- let ext = outputKind.Extension
-
- let relativeOutputFile =
- if isFsx || isMd then
- let basename = Path.GetFileNameWithoutExtension(inputFile)
-
- Path.Combine(outputPrefix, sprintf "%s.%s" basename ext)
- else
- Path.Combine(outputPrefix, name)
+ let outputFileRelativeToRoot, outputFileFullPath =
+ getOutputFileNames inputFileFullPath outputKind outputFolderRelativeToRoot
// Update only when needed - template or file or tool has changed
- let outputFile = Path.GetFullPath(Path.Combine(outputDirectory, relativeOutputFile))
let changed =
let fileChangeTime =
try
- File.GetLastWriteTime(inputFile)
+ File.GetLastWriteTime(inputFileFullPath)
with
| _ -> DateTime.MaxValue
@@ -126,7 +220,7 @@ type internal DocContent
let generateTime =
try
- File.GetLastWriteTime(outputFile)
+ File.GetLastWriteTime(outputFileFullPath)
with
| _ -> System.DateTime.MinValue
@@ -135,16 +229,16 @@ type internal DocContent
// If it's changed or we don't know anything about it
// we have to compute the model to get the global substitutions right
let mainRun = (outputKind = OutputKind.Html)
- let haveModel = previous.TryFind inputFile
+ let haveModel = previous.TryFind inputFileFullPath
if changed || (watch && mainRun && haveModel.IsNone) then
if isFsx then
- printfn " generating model for %s --> %s" inputFile relativeOutputFile
+ printfn " generating model for %s --> %s" inputFileFullPath outputFileRelativeToRoot
let model =
Literate.ParseAndTransformScriptFile(
- inputFile,
- output = relativeOutputFile,
+ inputFileFullPath,
+ output = outputFileRelativeToRoot,
outputKind = outputKind,
?formatAgent = None,
?prefix = None,
@@ -156,31 +250,32 @@ type internal DocContent
generateAnchors = true,
?imageSaver = imageSaverOpt,
?rootInputFolder = rootInputFolder,
- crefResolver = crefResolver
+ crefResolver = crefResolver,
+ mdlinkResolver = mdlinkResolver
)
yield
((if mainRun then
- Some(inputFile, isOtherLang, model)
+ Some(inputFileFullPath, isOtherLang, model)
else
None),
(fun p ->
- printfn " writing %s --> %s" inputFile relativeOutputFile
- ensureDirectory (Path.GetDirectoryName(outputFile))
+ printfn " writing %s --> %s" inputFileFullPath outputFileRelativeToRoot
+ ensureDirectory (Path.GetDirectoryName(outputFileFullPath))
SimpleTemplating.UseFileAsSimpleTemplate(
p @ model.Substitutions,
template,
- outputFile
+ outputFileFullPath
)))
elif isMd then
- printfn " preparing %s --> %s" inputFile relativeOutputFile
+ printfn " preparing %s --> %s" inputFileFullPath outputFileRelativeToRoot
let model =
Literate.ParseAndTransformMarkdownFile(
- inputFile,
- output = relativeOutputFile,
+ inputFileFullPath,
+ output = outputFileRelativeToRoot,
outputKind = outputKind,
?formatAgent = None,
?prefix = None,
@@ -191,63 +286,58 @@ type internal DocContent
generateAnchors = true,
?imageSaver = imageSaverOpt,
?rootInputFolder = rootInputFolder,
- crefResolver = crefResolver
+ crefResolver = crefResolver,
+ mdlinkResolver = mdlinkResolver
)
yield
((if mainRun then
- Some(inputFile, isOtherLang, model)
+ Some(inputFileFullPath, isOtherLang, model)
else
None),
(fun p ->
- printfn " writing %s --> %s" inputFile relativeOutputFile
- ensureDirectory (Path.GetDirectoryName(outputFile))
+ printfn " writing %s --> %s" inputFileFullPath outputFileRelativeToRoot
+ ensureDirectory (Path.GetDirectoryName(outputFileFullPath))
SimpleTemplating.UseFileAsSimpleTemplate(
p @ model.Substitutions,
template,
- outputFile
+ outputFileFullPath
)))
else if mainRun then
yield
(None,
(fun _p ->
- printfn " copying %s --> %s" inputFile relativeOutputFile
- ensureDirectory (Path.GetDirectoryName(outputFile))
+ printfn " copying %s --> %s" inputFileFullPath outputFileRelativeToRoot
+ ensureDirectory (Path.GetDirectoryName(outputFileFullPath))
// check the file still exists for the incremental case
- if (File.Exists inputFile) then
+ if (File.Exists inputFileFullPath) then
// ignore errors in watch mode
try
- File.Copy(inputFile, outputFile, true)
- File.SetLastWriteTime(outputFile, DateTime.Now)
+ File.Copy(inputFileFullPath, outputFileFullPath, true)
+ File.SetLastWriteTime(outputFileFullPath, DateTime.Now)
with
| _ when watch -> ()))
else if mainRun && watch then
- //printfn "skipping unchanged file %s" inputFile
- yield (Some(inputFile, isOtherLang, haveModel.Value), (fun _ -> ())) ]
+ //printfn "skipping unchanged file %s" inputFileFullPath
+ yield (Some(inputFileFullPath, isOtherLang, haveModel.Value), (fun _ -> ())) ]
- let allCultures =
- System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures)
- |> Array.map (fun x -> x.TwoLetterISOLanguageName)
- |> Array.filter (fun x -> x.Length = 2)
- |> Array.distinct
-
- let rec processDirectory
- (htmlTemplate, texTemplate, pynbTemplate, fsxTemplate, mdTemplate, isOtherLang, rootInputFolder)
- (inputFolder: string)
- outputPrefix
+ let rec processFolder
+ (htmlTemplate, texTemplate, pynbTemplate, fsxTemplate, mdTemplate, isOtherLang, rootInputFolder, fullPathFileMap)
+ (inputFolderAsGiven: string)
+ outputFolderRelativeToRoot
=
[
// Look for the presence of the _template.* files to activate the
// generation of the content.
- let indirName = Path.GetFileName(inputFolder).ToLower()
+ let indirName = Path.GetFileName(inputFolderAsGiven).ToLower()
// Two-letter directory names (e.g. 'ja') with 'docs' count as multi-language and are suppressed from table-of-content
// generation and site search index
let isOtherLang = isOtherLang || (indirName.Length = 2 && allCultures |> Array.contains indirName)
- let possibleNewHtmlTemplate = Path.Combine(inputFolder, "_template.html")
+ let possibleNewHtmlTemplate = Path.Combine(inputFolderAsGiven, "_template.html")
let htmlTemplate =
if File.Exists(possibleNewHtmlTemplate) then
@@ -255,7 +345,7 @@ type internal DocContent
else
htmlTemplate
- let possibleNewPynbTemplate = Path.Combine(inputFolder, "_template.ipynb")
+ let possibleNewPynbTemplate = Path.Combine(inputFolderAsGiven, "_template.ipynb")
let pynbTemplate =
if File.Exists(possibleNewPynbTemplate) then
@@ -263,7 +353,7 @@ type internal DocContent
else
pynbTemplate
- let possibleNewFsxTemplate = Path.Combine(inputFolder, "_template.fsx")
+ let possibleNewFsxTemplate = Path.Combine(inputFolderAsGiven, "_template.fsx")
let fsxTemplate =
if File.Exists(possibleNewFsxTemplate) then
@@ -271,7 +361,7 @@ type internal DocContent
else
fsxTemplate
- let possibleNewMdTemplate = Path.Combine(inputFolder, "_template.md")
+ let possibleNewMdTemplate = Path.Combine(inputFolderAsGiven, "_template.md")
let mdTemplate =
if File.Exists(possibleNewMdTemplate) then
@@ -279,7 +369,7 @@ type internal DocContent
else
mdTemplate
- let possibleNewLatexTemplate = Path.Combine(inputFolder, "_template.tex")
+ let possibleNewLatexTemplate = Path.Combine(inputFolderAsGiven, "_template.tex")
let texTemplate =
if File.Exists(possibleNewLatexTemplate) then
@@ -287,48 +377,129 @@ type internal DocContent
else
texTemplate
- ensureDirectory (Path.Combine(outputDirectory, outputPrefix))
+ ensureDirectory (Path.Combine(rootOutputFolderAsGiven, outputFolderRelativeToRoot))
- let inputs = Directory.GetFiles(inputFolder, "*")
+ let inputs = Directory.GetFiles(inputFolderAsGiven, "*")
- let imageSaver = createImageSaver (Path.Combine(outputDirectory, outputPrefix))
+ let imageSaver = createImageSaver (Path.Combine(rootOutputFolderAsGiven, outputFolderRelativeToRoot))
// Look for the four different kinds of content
for input in inputs do
- yield! processFile rootInputFolder isOtherLang input OutputKind.Html htmlTemplate outputPrefix imageSaver
- yield! processFile rootInputFolder isOtherLang input OutputKind.Latex texTemplate outputPrefix imageSaver
- yield! processFile rootInputFolder isOtherLang input OutputKind.Pynb pynbTemplate outputPrefix imageSaver
- yield! processFile rootInputFolder isOtherLang input OutputKind.Fsx fsxTemplate outputPrefix imageSaver
- yield! processFile rootInputFolder isOtherLang input OutputKind.Md mdTemplate outputPrefix imageSaver
+ yield!
+ processFile
+ rootInputFolder
+ isOtherLang
+ input
+ OutputKind.Html
+ htmlTemplate
+ outputFolderRelativeToRoot
+ imageSaver
+ (makeMarkdownLinkResolver (
+ inputFolderAsGiven,
+ outputFolderRelativeToRoot,
+ fullPathFileMap,
+ OutputKind.Html
+ ))
+
+ yield!
+ processFile
+ rootInputFolder
+ isOtherLang
+ input
+ OutputKind.Latex
+ texTemplate
+ outputFolderRelativeToRoot
+ imageSaver
+ (makeMarkdownLinkResolver (
+ inputFolderAsGiven,
+ outputFolderRelativeToRoot,
+ fullPathFileMap,
+ OutputKind.Latex
+ ))
+
+ yield!
+ processFile
+ rootInputFolder
+ isOtherLang
+ input
+ OutputKind.Pynb
+ pynbTemplate
+ outputFolderRelativeToRoot
+ imageSaver
+ (makeMarkdownLinkResolver (
+ inputFolderAsGiven,
+ outputFolderRelativeToRoot,
+ fullPathFileMap,
+ OutputKind.Pynb
+ ))
- for subdir in Directory.EnumerateDirectories(inputFolder) do
- let name = Path.GetFileName(subdir)
+ yield!
+ processFile
+ rootInputFolder
+ isOtherLang
+ input
+ OutputKind.Fsx
+ fsxTemplate
+ outputFolderRelativeToRoot
+ imageSaver
+ (makeMarkdownLinkResolver (
+ inputFolderAsGiven,
+ outputFolderRelativeToRoot,
+ fullPathFileMap,
+ OutputKind.Fsx
+ ))
- if name.StartsWith "." then
- printfn " skipping directory %s" subdir
+ yield!
+ processFile
+ rootInputFolder
+ isOtherLang
+ input
+ OutputKind.Md
+ mdTemplate
+ outputFolderRelativeToRoot
+ imageSaver
+ (makeMarkdownLinkResolver (
+ inputFolderAsGiven,
+ outputFolderRelativeToRoot,
+ fullPathFileMap,
+ OutputKind.Md
+ ))
+
+ for subInputFolderFullPath in Directory.EnumerateDirectories(inputFolderAsGiven) do
+ let subInputFolderName = Path.GetFileName(subInputFolderFullPath)
+
+ if subInputFolderName.StartsWith "." then
+ printfn " skipping directory %s" subInputFolderFullPath
else
yield!
- processDirectory
+ processFolder
(htmlTemplate,
texTemplate,
pynbTemplate,
fsxTemplate,
mdTemplate,
isOtherLang,
- rootInputFolder)
- (Path.Combine(inputFolder, name))
- (Path.Combine(outputPrefix, name)) ]
+ rootInputFolder,
+ fullPathFileMap)
+ (Path.Combine(inputFolderAsGiven, subInputFolderName))
+ (Path.Combine(outputFolderRelativeToRoot, subInputFolderName)) ]
- member _.Convert(input, htmlTemplate, extraInputs) =
+ member _.Convert(rootInputFolderAsGiven, htmlTemplate, extraInputs) =
- let inputDirectories = extraInputs @ [ (input, ".") ]
+ let inputDirectories = extraInputs @ [ (rootInputFolderAsGiven, ".") ]
- [ for (inputFolder, outputPrefix) in inputDirectories do
+ // Maps full input paths to full output paths
+ let fullPathFileMap =
+ [ for (rootInputFolderAsGiven, outputFolderRelativeToRoot) in inputDirectories do
+ yield! prepFolder rootInputFolderAsGiven outputFolderRelativeToRoot ]
+ |> Map.ofList
+
+ [ for (rootInputFolderAsGiven, outputFolderRelativeToRoot) in inputDirectories do
yield!
- processDirectory
- (htmlTemplate, None, None, None, None, false, Some inputFolder)
- inputFolder
- outputPrefix ]
+ processFolder
+ (htmlTemplate, None, None, None, None, false, Some rootInputFolderAsGiven, fullPathFileMap)
+ rootInputFolderAsGiven
+ outputFolderRelativeToRoot ]
member _.GetSearchIndexEntries(docModels: (string * bool * LiterateDocModel) list) =
[| for (_inputFile, isOtherLang, model) in docModels do
@@ -344,10 +515,10 @@ type internal DocContent
let modelsForList =
[ for thing in docModels do
match thing with
- | (inputFile, isOtherLang, model) when
+ | (inputFileFullPath, isOtherLang, model) when
not isOtherLang
&& model.OutputKind = OutputKind.Html
- && not (Path.GetFileNameWithoutExtension(inputFile) = "index")
+ && not (Path.GetFileNameWithoutExtension(inputFileFullPath) = "index")
->
model
| _ -> () ]
@@ -450,7 +621,7 @@ module Serve =
do! webSocket.send Close emptyResponse true
}
- let startWebServer outputDirectory localPort =
+ let startWebServer rootOutputFolderAsGiven localPort =
let defaultBinding = defaultConfig.bindings.[0]
let withPort = { defaultBinding.socketBinding with port = uint16 localPort }
@@ -458,7 +629,7 @@ module Serve =
let serverConfig =
{ defaultConfig with
bindings = [ { defaultBinding with socketBinding = withPort } ]
- homeFolder = Some outputDirectory }
+ homeFolder = Some rootOutputFolderAsGiven }
let app =
choose [ path "/" >=> Redirection.redirect "/index.html"
@@ -482,7 +653,7 @@ type CoreBuildOptions(watch) =
[