Readable Source Code Documentation
for 25 Programming Languages
![]() | Natural Docs lets you document code written in any of 25 programming languages, plus it can be easily extended for more so whatever you use, it can too. And if your project uses multiple languages, no problem! It will all be included in the same set of documentation. |
Natural Docs also speaks your other language... English! Its comments are designed to be very natural and readable so they're just as usable in the source code as they are in the generated documentation. No weird syntax or tags scattered everywhere. | ![]() |
![]() | Natural Docs' generated documentation is pretty and powerful, with three independently scrolling panels, dynamic menus, search, and pop-up summaries when you hover over links. All its features work wherever you put it, be it a web server, a network share, or just opened from your hard drive. |
If you're new to Natural Docs be sure to read our Getting Started guide and we'll have you up and running in no time. If you've been using Natural Docs 1.5, check out our tour of What's New in 2.0! |
Hello all. Here's a small release to bundle up all the things that have changed since the last one. The primary reason is because SystemVerilog is about to move from "basic language support with extra formatting code for modules" to the full language support code path. Once it's on the new path Natural Docs will be able to find modules even if you didn't write comments for them, which is good, but you wouldn't be able to add prototypes for other language constructs via Languages.txt anymore. You'd have to wait until I build out the parser for them. So here's a version to let you use the upgraded basic language support while full language support is worked on in the development releases. There's more improvements than just that though. Updated Languages
New Languages
Odds and Ends
![]()
That's it for now. Due to some personal issues there wasn't much development for almost a year after 2.3, but things have been picking up again these last few months. I have a new feature I'm going to be attempting plus I'll be continuing to move SystemVerilog towards full support. Follow the development releases if you want to keep up on that. Time for another release. Let's recap what's new for the people who haven't been following the development releases. Dark Themes Natural Docs now has dark themes. Rather than just being new styles you can choose for your project, you're able to let the user choose which one they want from the browser. Just click the moon icon next to the search box: ![]() The dark theme is what you'd expect, and the black theme has less color and higher contrast. The auto themes will switch between two automatically based on whether your operating system is in light mode or dark mode, so if you have your OS switch between them on a timer you can have the documentation follow it. Here's a peek at what the dark theme looks like. You can also see it for yourself here. ![]()
Better macOS Compatibility The SQLite binaries are now signed and notarized, so you shouldn't have issues with macOS blocking them saying the developer can't be verified. They should just work without you needing to make an exception in the System Preferences. If Natural Docs has ever crashed complaining about libNaturalDocs.Engine.SQLite.Mac64.so this was why. SystemVerilog Work on full language support for SystemVerilog continues but is not ready yet, so 2.3 still has basic language support. There's an entry in Languages.txt for it, but this is just a placeholder so you'll probably still need to fill it out a bit more with your own settings to use it. However, the syntax highlighting has been improved. All of SystemVerilog's keywords will highlight correctly as well as complicated numeric literals like 8'b0011_00zz. Fully-Qualified Title Fix Probably because I primarily work in C#, which has full language support, and JavaScript, where I only use pseudo-classes, I didn't realize this wasn't working. Suppose you have this: namespace MyNamespace { You wouldn't get a prototype for MyClass because the declaration doesn't match the full title of MyNamespace::MyClass. This has been fixed, so it only requires the last segment to exist in the prototype now. Odds and Ends
.CTopic p,
|