From b4a53f887b56fe45784fac77a1aad28bf5c8cd46 Mon Sep 17 00:00:00 2001 From: Vaclav Elias Date: Mon, 2 Jun 2025 23:53:21 +0100 Subject: [PATCH 01/10] feat: Add comment converter project and processing logic - Created the project file `Box2D.NET.CommentConverter.csproj` targeting .NET 9.0 - Added a new `Program.cs` file that processes C# files in a specified directory. - Implemented functionality to read files, extract comment lines, and convert single-line comments (//) to XML-style comments (///) wrapped in summary tags. --- .../Box2D.NET.CommentConverter.csproj | 10 ++ tools/Box2D.NET.CommentConverter/Program.cs | 154 ++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj create mode 100644 tools/Box2D.NET.CommentConverter/Program.cs diff --git a/tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj b/tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj new file mode 100644 index 00000000..fd4bd08d --- /dev/null +++ b/tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj @@ -0,0 +1,10 @@ + + + + Exe + net9.0 + enable + enable + + + diff --git a/tools/Box2D.NET.CommentConverter/Program.cs b/tools/Box2D.NET.CommentConverter/Program.cs new file mode 100644 index 00000000..e386e504 --- /dev/null +++ b/tools/Box2D.NET.CommentConverter/Program.cs @@ -0,0 +1,154 @@ +const string DoubleSlashCommentPrefix = "// "; +const string TripleSlashCommentPrefix = "/// "; +const string SummaryStart = "/// "; +const string SummaryEnd = "/// "; +const string FileFilter = "*.cs"; + +var folderPath = @"..\..\..\..\..\src\Box2D.NET\"; + +// Tests: B2BodySim, B2World, B2WorldId +var files = Directory.GetFiles(folderPath, FileFilter, SearchOption.AllDirectories) + //.Where(w => w.Contains("B2WorldId")) + //.Take(50) + .ToList(); + +Console.WriteLine($"Found {files.Count} C# files in the folder: {folderPath}"); + +foreach (var filePath in files) +{ + await ProcessFileAsync(filePath); +} + +Console.WriteLine("*** Processing completed ***"); + +async Task ProcessFileAsync(string filePath) +{ + Console.WriteLine($"\nProcessing file: {filePath}"); + + var content = await File.ReadAllTextAsync(filePath); + var lines = content.Split(["\r\n", "\n"], StringSplitOptions.None).ToList(); + var commentLineIndexes = ExtractCommentLineIndexes(lines); + + RemovePreNamespaceComments(lines, commentLineIndexes); + + if (commentLineIndexes.Count == 0) + { + Console.WriteLine("No comment lines found in the file."); + return; + } + + var commentBlocks = ExtractCommentBlocks(lines, commentLineIndexes); + + if (commentBlocks.Count == 0) + { + Console.WriteLine("No comment blocks found."); + return; + } + + ConvertCommentsToTripleSlash(lines, commentBlocks); + + WrapCommentsWithSummaryTags(lines, commentBlocks); + + //File.WriteAllText(filePath.Replace(".cs", ".xmlcomments.cs"), string.Join(Environment.NewLine, lines)); + File.WriteAllText(filePath, string.Join(Environment.NewLine, lines)); + + Console.WriteLine($"Output written to: {filePath}"); +} + +static void RemovePreNamespaceComments(List lines, List commentLineIndexes) +{ + var namespaceLineIndex = lines.FindIndex(line => line.TrimStart().StartsWith("namespace ")); + + commentLineIndexes.RemoveAll(index => index < namespaceLineIndex); +} + +static List ExtractCommentBlocks(List lines, List commentLineIndexes) +{ + var commentBlocks = new List(); + var startIndex = commentLineIndexes[0]; + var endIndex = commentLineIndexes[0]; + + if (commentLineIndexes.Count == 1) + { + AddBlockIfFollowedByPublic(startIndex, endIndex); + + return commentBlocks; + } + + for (int i = 1; i < commentLineIndexes.Count; i++) + { + var nextIndex = commentLineIndexes[i]; + + if (nextIndex - endIndex != 1) + { + AddBlockIfFollowedByPublic(startIndex, endIndex); + startIndex = nextIndex; + } + + endIndex = nextIndex; + + if (i == commentLineIndexes.Count - 1) + { + AddBlockIfFollowedByPublic(startIndex, endIndex); + } + } + + return commentBlocks; + + void AddBlockIfFollowedByPublic(int startIndex, int endIndex) + { + if (endIndex + 1 < lines.Count && lines[endIndex + 1].Contains("public")) + { + commentBlocks.Add(new CommentBlock(startIndex, endIndex)); + } + } +} + +static List ExtractCommentLineIndexes(List lines) +{ + HashSet commentStarts = [DoubleSlashCommentPrefix, TripleSlashCommentPrefix]; + + return lines + .Select((line, index) => (line, index)) + .Where(item => commentStarts.Any(commentStart => + item.line.TrimStart().StartsWith(commentStart))) + .Select(item => item.index) + .ToList(); +} + +static void ConvertCommentsToTripleSlash(List lines, List commentBlocks) +{ + foreach (var block in commentBlocks) + { + Console.WriteLine($"Comment block from {block.StartIndex + 1} to {block.EndIndex + 1} (length: {block.Length})"); + + for (int i = 0; i < block.Length; i++) + { + int lineIndex = block.StartIndex + i; + + if (!lines[lineIndex].TrimStart().StartsWith(TripleSlashCommentPrefix)) + { + lines[lineIndex] = lines[lineIndex].Replace(DoubleSlashCommentPrefix, "/// "); + } + } + } +} + +void WrapCommentsWithSummaryTags(List lines, List commentBlocks) +{ + for (int i = commentBlocks.Count - 1; i >= 0; i--) + { + var block = commentBlocks[i]; + var indentation = GetIndentation(lines[block.StartIndex]); + + lines.Insert(block.EndIndex + 1, $"{indentation}{SummaryEnd}"); + lines.Insert(block.StartIndex, $"{indentation}{SummaryStart}"); + } + + string GetIndentation(string line) => new(' ', line.Length - line.TrimStart().Length); +} + +record class CommentBlock(int StartIndex, int EndIndex) +{ + public int Length => EndIndex - StartIndex + 1; +} \ No newline at end of file From 6281c439a0b2709db1d821fe33596559c894393b Mon Sep 17 00:00:00 2001 From: Vaclav Elias Date: Mon, 2 Jun 2025 23:55:03 +0100 Subject: [PATCH 02/10] feat: docfx added with a github workflow --- .github/workflows/box2d-docs-github.yml | 44 +++++++++ .gitignore | 6 +- docs/docfx.json | 62 ++++++++++++ docs/docs/index.md | 4 + docs/docs/toc.yml | 8 ++ docs/favicon.ico | Bin 0 -> 9748 bytes docs/images/box2d_logo.svg | 126 ++++++++++++++++++++++++ docs/index.md | 4 + docs/template/public/main.css | 5 + docs/template/public/main.js | 17 ++++ docs/toc.yml | 4 + 11 files changed, 279 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/box2d-docs-github.yml create mode 100644 docs/docfx.json create mode 100644 docs/docs/index.md create mode 100644 docs/docs/toc.yml create mode 100644 docs/favicon.ico create mode 100644 docs/images/box2d_logo.svg create mode 100644 docs/index.md create mode 100644 docs/template/public/main.css create mode 100644 docs/template/public/main.js create mode 100644 docs/toc.yml diff --git a/.github/workflows/box2d-docs-github.yml b/.github/workflows/box2d-docs-github.yml new file mode 100644 index 00000000..115ef641 --- /dev/null +++ b/.github/workflows/box2d-docs-github.yml @@ -0,0 +1,44 @@ +# More GitHub Actions for Azure: https://github.com/Azure/actions + +name: Build Box2D Docs for GitHub Pages + +env: + COMMON_SETTINGS_PATH: docs/docfx.json + +on: + workflow_dispatch: + +jobs: + publish-docs: + runs-on: windows-latest + + steps: + - name: .NET SDK Setup + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 9.x + + - name: Checkout Box2D.NET + uses: actions/checkout@v4 + + - name: Run Box2D.NET.CommentConverter.csproj + run: dotnet build tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj --configuration Release --no-restore + + - name: Install DocFX + # This installs the latest version of DocFX and may introduce breaking changes + # run: dotnet tool update -g docfx + # This installs a specific, tested version of DocFX. + run: dotnet tool update -g docfx --version 2.78.2 + + - name: Build Box2D.NET API Docs + run: docfx metadata ${{ env.COMMON_SETTINGS_PATH }} + + - name: Build Box2D.NET Docs + run: docfx build ${{ env.COMMON_SETTINGS_PATH }} + + - name: Deploy + uses: peaceiris/actions-gh-pages@v4.0.0 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: docs/_site + publish_branch: gh-pages \ No newline at end of file diff --git a/.gitignore b/.gitignore index e900518a..d50a7dd6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -## Ignore Visual Studio temporary files, build results, and +## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore @@ -399,3 +399,7 @@ FodyWeavers.xsd .idea/ imgui.ini settings.ini + +# DocFX API Generated Pages +docs/api/* +docs/_site/* \ No newline at end of file diff --git a/docs/docfx.json b/docs/docfx.json new file mode 100644 index 00000000..8cd42e81 --- /dev/null +++ b/docs/docfx.json @@ -0,0 +1,62 @@ +{ + "$schema": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json", + "metadata": [ + { + "src": [ + { + "src": "..", + "files": [ + "src/Box2D.NET/Box2D.NET.csproj" + ] + } + ], + "dest": "api" + } + ], + "build": { + "content": [ + { + "files": [ + "**/*.{md,yml}" + ], + "exclude": [ + "_site/**" + ] + } + ], + "resource": [ + { + "files": [ + "favicon.ico", + "favicon.png", + "images/**" + ] + } + ], + "output": "_site", + "template": [ + "default", + "modern", + "template" + ], + "fileMetadata": { + "_appTitle": { + "api/**/*.md": "Box2D API", + "api/**/*.yml": "Box2D API" + } + }, + "globalMetadata": { + "_appName": "", + "_appTitle": "Box2D Docs", + "_appLogoPath": "images/box2d_logo.svg", + "_enableSearch": true, + "pdf": false, + "_gitContribute": { + "repo": "https://github.com/ikpil/Box2D.NET", + "branch": "master" + }, + "_gitUrlPattern": "github", + "_gitRepo": "https://github.com/ikpil/Box2D.NET" + } + } +} \ No newline at end of file diff --git a/docs/docs/index.md b/docs/docs/index.md new file mode 100644 index 00000000..4e7dc4ff --- /dev/null +++ b/docs/docs/index.md @@ -0,0 +1,4 @@ +--- +_disableToc: false +--- +# Box2D.NET Docs \ No newline at end of file diff --git a/docs/docs/toc.yml b/docs/docs/toc.yml new file mode 100644 index 00000000..093b7ebb --- /dev/null +++ b/docs/docs/toc.yml @@ -0,0 +1,8 @@ +- name: 📚 Docs + href: index.md +- name: Original Box2D + href: https://box2d.org/ +- name: Overview + href: https://box2d.org/documentation/index.html +- name: FAQ + href: https://box2d.org/documentation/md_faq.html \ No newline at end of file diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f7aa9da2205d377fb510f9d701b7c39a54eb4380 GIT binary patch literal 9748 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 literal 0 HcmV?d00001 diff --git a/docs/images/box2d_logo.svg b/docs/images/box2d_logo.svg new file mode 100644 index 00000000..f002689d --- /dev/null +++ b/docs/images/box2d_logo.svg @@ -0,0 +1,126 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..3ebcccbc --- /dev/null +++ b/docs/index.md @@ -0,0 +1,4 @@ +--- +_disableToc: false +--- +[!INCLUDE [readme](../readme.md)] \ No newline at end of file diff --git a/docs/template/public/main.css b/docs/template/public/main.css new file mode 100644 index 00000000..eb3143e5 --- /dev/null +++ b/docs/template/public/main.css @@ -0,0 +1,5 @@ +/* Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. */ + +.navbar-brand #logo { + height: 56px; +} \ No newline at end of file diff --git a/docs/template/public/main.js b/docs/template/public/main.js new file mode 100644 index 00000000..9bbb8f99 --- /dev/null +++ b/docs/template/public/main.js @@ -0,0 +1,17 @@ +const app = { + languageDropdownCreated: false, + iconLinks: [ + { + icon: 'github', + href: 'https://github.com/ikpil/Box2D.NET', + title: 'GitHub' + }, + { + icon: 'discord', + href: 'https://github.com/ikpil/Box2D.NET', + title: 'Discord' + } + ] +}; + +export default app; \ No newline at end of file diff --git a/docs/toc.yml b/docs/toc.yml new file mode 100644 index 00000000..b2a2f936 --- /dev/null +++ b/docs/toc.yml @@ -0,0 +1,4 @@ +- name: 📚 Docs + href: docs/index.md +- name: 🔧 API + href: api/ \ No newline at end of file From c9f873e1eb354625cff21204e779ae760dee618f Mon Sep 17 00:00:00 2001 From: Vaclav Elias Date: Tue, 3 Jun 2025 00:11:12 +0100 Subject: [PATCH 03/10] Update box2d-docs-github.yml --- .github/workflows/box2d-docs-github.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/box2d-docs-github.yml b/.github/workflows/box2d-docs-github.yml index 115ef641..4504b5f7 100644 --- a/.github/workflows/box2d-docs-github.yml +++ b/.github/workflows/box2d-docs-github.yml @@ -22,7 +22,7 @@ jobs: uses: actions/checkout@v4 - name: Run Box2D.NET.CommentConverter.csproj - run: dotnet build tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj --configuration Release --no-restore + run: dotnet build tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj --configuration Release - name: Install DocFX # This installs the latest version of DocFX and may introduce breaking changes @@ -41,4 +41,4 @@ jobs: with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: docs/_site - publish_branch: gh-pages \ No newline at end of file + publish_branch: gh-pages From 81633ee00dfcecccd2e56bfe9f8d7674d1e57b95 Mon Sep 17 00:00:00 2001 From: Vaclav Elias Date: Tue, 3 Jun 2025 00:30:29 +0100 Subject: [PATCH 04/10] Update box2d-docs-github.yml --- .github/workflows/box2d-docs-github.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/box2d-docs-github.yml b/.github/workflows/box2d-docs-github.yml index 4504b5f7..8c7e9389 100644 --- a/.github/workflows/box2d-docs-github.yml +++ b/.github/workflows/box2d-docs-github.yml @@ -22,7 +22,8 @@ jobs: uses: actions/checkout@v4 - name: Run Box2D.NET.CommentConverter.csproj - run: dotnet build tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj --configuration Release + run: dotnet run --project tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj --configuration Release + working-directory: src/Box2D.NET - name: Install DocFX # This installs the latest version of DocFX and may introduce breaking changes From 6b6798d25bbee0e2f0f618cbc179421aa9c9c157 Mon Sep 17 00:00:00 2001 From: Vaclav Elias Date: Tue, 3 Jun 2025 00:33:14 +0100 Subject: [PATCH 05/10] Update box2d-docs-github.yml --- .github/workflows/box2d-docs-github.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/box2d-docs-github.yml b/.github/workflows/box2d-docs-github.yml index 8c7e9389..512d3b9d 100644 --- a/.github/workflows/box2d-docs-github.yml +++ b/.github/workflows/box2d-docs-github.yml @@ -22,7 +22,7 @@ jobs: uses: actions/checkout@v4 - name: Run Box2D.NET.CommentConverter.csproj - run: dotnet run --project tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj --configuration Release + run: dotnet run --project ../tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj --configuration Release working-directory: src/Box2D.NET - name: Install DocFX From 45e44cf73006901e8a9a71ea7f02d6a3314cac6f Mon Sep 17 00:00:00 2001 From: Vaclav Elias Date: Tue, 3 Jun 2025 00:35:14 +0100 Subject: [PATCH 06/10] Update box2d-docs-github.yml --- .github/workflows/box2d-docs-github.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/box2d-docs-github.yml b/.github/workflows/box2d-docs-github.yml index 512d3b9d..b52c7c2b 100644 --- a/.github/workflows/box2d-docs-github.yml +++ b/.github/workflows/box2d-docs-github.yml @@ -22,7 +22,7 @@ jobs: uses: actions/checkout@v4 - name: Run Box2D.NET.CommentConverter.csproj - run: dotnet run --project ../tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj --configuration Release + run: dotnet run --project ../../tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj --configuration Release working-directory: src/Box2D.NET - name: Install DocFX From edad6d0ad86fd080971e777d85982bce122a3f8b Mon Sep 17 00:00:00 2001 From: Vaclav Elias Date: Tue, 3 Jun 2025 00:46:55 +0100 Subject: [PATCH 07/10] Update box2d-docs-github.yml --- .github/workflows/box2d-docs-github.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/box2d-docs-github.yml b/.github/workflows/box2d-docs-github.yml index b52c7c2b..65a925e0 100644 --- a/.github/workflows/box2d-docs-github.yml +++ b/.github/workflows/box2d-docs-github.yml @@ -22,8 +22,7 @@ jobs: uses: actions/checkout@v4 - name: Run Box2D.NET.CommentConverter.csproj - run: dotnet run --project ../../tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj --configuration Release - working-directory: src/Box2D.NET + run: dotnet run --project tools/Box2D.NET.CommentConverter/Box2D.NET.CommentConverter.csproj --configuration Release - name: Install DocFX # This installs the latest version of DocFX and may introduce breaking changes From 9d349ae14a5f022d947e10ec9d4bbc999db7bd60 Mon Sep 17 00:00:00 2001 From: Vaclav Elias Date: Tue, 3 Jun 2025 00:48:02 +0100 Subject: [PATCH 08/10] Update Program.cs --- tools/Box2D.NET.CommentConverter/Program.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/Box2D.NET.CommentConverter/Program.cs b/tools/Box2D.NET.CommentConverter/Program.cs index e386e504..b1f8f42d 100644 --- a/tools/Box2D.NET.CommentConverter/Program.cs +++ b/tools/Box2D.NET.CommentConverter/Program.cs @@ -4,7 +4,13 @@ const string SummaryEnd = "/// "; const string FileFilter = "*.cs"; -var folderPath = @"..\..\..\..\..\src\Box2D.NET\"; +var repoRoot = Directory.GetCurrentDirectory(); + +#if DEBUG +repoRoot = Path.GetFullPath(Path.Combine(repoRoot, "..", "..", "..", "..", "..")); +#endif + +var folderPath = Path.Combine(repoRoot, "src", "Box2D.NET"); // Tests: B2BodySim, B2World, B2WorldId var files = Directory.GetFiles(folderPath, FileFilter, SearchOption.AllDirectories) @@ -151,4 +157,4 @@ void WrapCommentsWithSummaryTags(List lines, List commentB record class CommentBlock(int StartIndex, int EndIndex) { public int Length => EndIndex - StartIndex + 1; -} \ No newline at end of file +} From 8821815b868c8ad89726d59ccc592e5d51384670 Mon Sep 17 00:00:00 2001 From: Vaclav Elias Date: Tue, 10 Jun 2025 06:09:21 +0100 Subject: [PATCH 09/10] feat: Box2D icon added --- docs/docfx.json | 5 +++-- docs/favicon-16x16.png | Bin 0 -> 841 bytes docs/favicon-32x32.png | Bin 0 -> 964 bytes docs/favicon.ico | Bin 9748 -> 0 bytes 4 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 docs/favicon-16x16.png create mode 100644 docs/favicon-32x32.png delete mode 100644 docs/favicon.ico diff --git a/docs/docfx.json b/docs/docfx.json index 8cd42e81..1036bbd8 100644 --- a/docs/docfx.json +++ b/docs/docfx.json @@ -27,8 +27,8 @@ "resource": [ { "files": [ - "favicon.ico", - "favicon.png", + "favicon-32x32.png", + "favicon-16x16.png", "images/**" ] } @@ -49,6 +49,7 @@ "_appName": "", "_appTitle": "Box2D Docs", "_appLogoPath": "images/box2d_logo.svg", + "_appFaviconPath": "favicon-32x32.png", "_enableSearch": true, "pdf": false, "_gitContribute": { diff --git a/docs/favicon-16x16.png b/docs/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab65d23be68f060137e0909c97ec2e4f16885f6 GIT binary patch literal 841 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>O{k7_@gFCp6Ze-rPQ-On%Q~1Od9(LUa zCk`F?_~!7zGnbaGUa?})ZpH~hK*Jf6yxm;_r)1V>0Xgg?p1!W^PZ$}+6%>l&cc(JbCiy*~6z#A3lE6&dI^S6xrj%bV!7wqob>{ zyW6v)fmLPclGK!^PeetYPMs3EWNC=xl`EzuTep->DgC--tBL6sUI`vc$6viYzCMmy zc1T(>JrkQ27Iw{STiLg;urR*9G9JHkdJYd>J$uKv#Afdv$(ovj2hPhou`@6n-7a~@ zDrfy6pxabSTq8C<#g|S12gTPs_|nRVb+}NL9!zC`o2usF?Hk6AwpWn1;qF z|I=qYp9V27D|725a|bP0l+XkK9Pm)k literal 0 HcmV?d00001 diff --git a/docs/favicon-32x32.png b/docs/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..31d602e7e659bf3f32324b2b4390c582383d0e58 GIT binary patch literal 964 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 From 861855dbafcb3b757c8373f3be86356d02c000c4 Mon Sep 17 00:00:00 2001 From: Vaclav Elias Date: Tue, 10 Jun 2025 06:17:08 +0100 Subject: [PATCH 10/10] feat: Minor improvements --- tools/Box2D.NET.CommentConverter/Program.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tools/Box2D.NET.CommentConverter/Program.cs b/tools/Box2D.NET.CommentConverter/Program.cs index b1f8f42d..50504f6d 100644 --- a/tools/Box2D.NET.CommentConverter/Program.cs +++ b/tools/Box2D.NET.CommentConverter/Program.cs @@ -1,9 +1,10 @@ const string DoubleSlashCommentPrefix = "// "; -const string TripleSlashCommentPrefix = "/// "; +const string TripleSlashCommentPrefix = "///"; const string SummaryStart = "/// "; const string SummaryEnd = "/// "; const string FileFilter = "*.cs"; +var commentStarts = new HashSet { DoubleSlashCommentPrefix, TripleSlashCommentPrefix }; var repoRoot = Directory.GetCurrentDirectory(); #if DEBUG @@ -14,7 +15,7 @@ // Tests: B2BodySim, B2World, B2WorldId var files = Directory.GetFiles(folderPath, FileFilter, SearchOption.AllDirectories) - //.Where(w => w.Contains("B2WorldId")) + //.Where(w => w.Contains("B2PrismaticJointDef")) //.Take(50) .ToList(); @@ -110,10 +111,8 @@ void AddBlockIfFollowedByPublic(int startIndex, int endIndex) } } -static List ExtractCommentLineIndexes(List lines) +List ExtractCommentLineIndexes(List lines) { - HashSet commentStarts = [DoubleSlashCommentPrefix, TripleSlashCommentPrefix]; - return lines .Select((line, index) => (line, index)) .Where(item => commentStarts.Any(commentStart =>