We welcome contributions! Please follow these guidelines to keep things smooth.
- Fork the repository
- Create a feature branch from
main - Make your changes
- Ensure all tests pass (
dotnet test) - Open a pull request
- .NET 10.0 SDK
- An IDE that supports .editorconfig (e.g. Visual Studio, Rider, VS Code with C# Dev Kit)
- Access to font files (
.ttf,.otf) for test documents
- Follow the
.editorconfigrules strictly - Use file-scoped namespaces
- Add XML documentation comments to all public members
- Prefer
System.Text.JsonoverNewtonsoft.Json - Use
Microsoft.Extensions.Logging.Abstractionsfor logging — noConsole.WriteorTrace - Keep
TreatWarningsAsErrorsenabled — fix warnings, don't suppress them - Never suppress warnings without justification in a comment
- Use
StringBuilderor XML APIs for SVG generation — never string concatenation - Use central package management — never inline version numbers in
.csproj
- Internal unit is twips (1/1440 inch)
- Line breaking uses the Knuth-Plass algorithm (not greedy)
- Style resolution must follow the full OOXML cascade including toggle properties
- Layout and rendering are separated via
IRenderTarget - All I/O-bound operations support
CancellationToken
- Code compiles with zero warnings
- All existing tests pass
- New features have corresponding tests
- XML documentation on public API
- No Newtonsoft.Json references
- No suppressed warnings without justification
- No inline package version numbers
By contributing, you agree that your contributions will be licensed under the MIT License.