Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .github/workflows/deploy-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,25 @@ concurrency:
jobs:
build:
runs-on: ubuntu-latest
env:
EnableWindowsTargeting: true
steps:
- name: Checkout your repository using git
uses: actions/checkout@v4

# Build API docs
- uses: actions/setup-dotnet@v2
with:
dotnet-version: 10.0.x
- name: DocFX
shell: bash
run: |
dotnet tool install docfx
dotnet build -c Release QPlayer/QPlayer.csproj
dotnet docfx
dotnet run -c Release --project StarlightDocNet "api/" "docs/src/content/docs/api/"

# Build the rest of the docs
- name: Install, build, and upload your site output
uses: withastro/action@v4
with:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ SigningCertificate_Encoded.txt
**/publish
*.zip
/QPlayerOld
/api
25 changes: 24 additions & 1 deletion QPlayer.sln
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18
VisualStudioVersion = 18.3.11512.155 d18.3
VisualStudioVersion = 18.3.11512.155
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QPlayer", "QPlayer\QPlayer.csproj", "{AC3A2BB3-F46C-45D0-986F-D28AC74A8649}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F279A0DB-B4EE-4EE7-A59B-C7A488E6B1C9}"
ProjectSection(SolutionItems) = preProject
.gitignore = .gitignore
.github\workflows\deploy-docs.yml = .github\workflows\deploy-docs.yml
docfx.json = docfx.json
.github\workflows\dotnet-desktop.yml = .github\workflows\dotnet-desktop.yml
README.md = README.md
EndProjectSection
Expand All @@ -21,6 +22,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QPlayer.SourceGenerator", "
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QPlayer.MagicQCTRLPlugin", "QPlayer.MagicQCTRLPlugin\QPlayer.MagicQCTRLPlugin.csproj", "{A42C1C9E-A605-4629-9831-EB94EE360584}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StarlightDocNet", "StarlightDocNet\StarlightDocNet.csproj", "{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -145,6 +148,26 @@ Global
{A42C1C9E-A605-4629-9831-EB94EE360584}.Release|x64.Build.0 = Release|Any CPU
{A42C1C9E-A605-4629-9831-EB94EE360584}.Release|x86.ActiveCfg = Release|Any CPU
{A42C1C9E-A605-4629-9831-EB94EE360584}.Release|x86.Build.0 = Release|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Debug|ARM.ActiveCfg = Debug|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Debug|ARM.Build.0 = Debug|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Debug|ARM64.Build.0 = Debug|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Debug|x64.ActiveCfg = Debug|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Debug|x64.Build.0 = Debug|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Debug|x86.ActiveCfg = Debug|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Debug|x86.Build.0 = Debug|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Release|Any CPU.Build.0 = Release|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Release|ARM.ActiveCfg = Release|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Release|ARM.Build.0 = Release|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Release|ARM64.ActiveCfg = Release|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Release|ARM64.Build.0 = Release|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Release|x64.ActiveCfg = Release|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Release|x64.Build.0 = Release|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Release|x86.ActiveCfg = Release|Any CPU
{C3B27B5B-C834-4271-A8D2-9C31BEA020E7}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
171 changes: 171 additions & 0 deletions StarlightDocNet/ApiPage.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Text.Json;
using System.Text.Json.Serialization;
using OneOf;
using StarlightDocNet;

#nullable enable

namespace Docfx.Build.ApiPage;

struct LinkSpan
{
public required string text { get; init; }
public string? url { get; init; }
}

public static class ApiPageHelpers
{
public static int DiscrInline(object x) => (x is IList<object>) ? 1 : 0;
public static int DiscrSpan(object x) => (x is string) ? 0 : 1;
}

[GenerateOneOf]
[Discriminate("ApiPageHelpers.DiscrSpan")]
partial class Span : OneOfBase<string, LinkSpan> { }

[GenerateOneOf]
[Discriminate("ApiPageHelpers.DiscrInline")]
partial class Inline : OneOfBase<Span, Span[]> { }

struct Markdown
{
public required string markdown { get; init; }
}

struct H1
{
public required string h1 { get; init; }
public string? id { get; init; }
}

struct H2
{
public required string h2 { get; init; }
public string? id { get; init; }
}

struct H3
{
public required string h3 { get; init; }
public string? id { get; init; }
}

struct H4
{
public required string h4 { get; init; }
public string? id { get; init; }
}

struct H5
{
public required string h5 { get; init; }
public string? id { get; init; }
}

struct H6
{
public required string h6 { get; init; }
public string? id { get; init; }
}

[GenerateOneOf]
partial class Heading : OneOfBase<H1, H2, H3, H4, H5, H6> { }

abstract class ApiBase
{
public string? id { get; init; }
public OneOf<bool, string>? deprecated { get; init; }
public OneOf<bool, string>? preview { get; init; }
public string? src { get; init; }
public Dictionary<string, string>? metadata { get; init; }
}

class Api1 : ApiBase
{
public Api1() { }

public required string api1 { get; init; }
}

class Api2 : ApiBase
{
public required string api2 { get; init; }
}

class Api3 : ApiBase
{
public required string api3 { get; init; }
}

class Api4 : ApiBase
{
public required string api4 { get; init; }
}


[GenerateOneOf]
partial class Api : OneOfBase<Api1, Api2, Api3, Api4> { }

record struct Fact(string name, Inline value);

struct Facts
{
public required Fact[] facts { get; init; }
}

struct List
{
public required Inline[] list { get; init; }
}

struct Inheritance
{
public required Inline[] inheritance { get; init; }
}

struct Code
{
public required string code { get; init; }
public string? languageId { get; init; }
}

class Parameter
{
public string? name { get; init; }
public Inline? type { get; init; }
public string? @default { get; init; }
public string? description { get; init; }
public OneOf<bool, string>? deprecated { get; init; }
public OneOf<bool, string>? preview { get; init; }
public bool? optional { get; init; }
}

struct Parameters
{
public required Parameter[] parameters { get; init; }
}

[GenerateOneOf]
partial class Block : OneOfBase<Heading, Api, Markdown, Facts, Parameters, List, Inheritance, Code> { }

record ApiPage
{
public static JsonSerializerOptions JsonSerializerOptions { get; } = new()
{
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull | JsonIgnoreCondition.WhenWritingDefault,
};

static ApiPage()
{
// JsonSerializerOptions.Converters.Add(new OneOfJsonConverterFactory());
}

public required string title { get; init; }
public required Block[] body { get; init; }

public string? languageId { get; init; }
public Dictionary<string, OneOf<string, string[]>>? metadata { get; init; }
}
Loading
Loading