﻿<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title type="text">Natural Docs News</title>
	<id>http://www.naturaldocs.org/feeds/news</id>
	<link rel="self" href="https://www.naturaldocs.org/feeds/news.xml"/>
	<link rel="alternate" type="html" href="https://www.naturaldocs.org/news"/>
	<updated>2026-01-20T00:00:00Z</updated>

	<entry>
		<title type="text">Natural Docs 2.4 Development Release 2: Repository Links and Speeeed!</title>
		<id>https://www.naturaldocs.org/news/2026-01-20/Natural_Docs_2.4_Development_Release_2</id>
		<author><name>Greg Valure</name></author>
		<updated>2026-01-20T00:00:00Z</updated>
		<link rel="alternate" type="html" href="https://www.naturaldocs.org/news/2026-01-20/Natural_Docs_2.4_Development_Release_2"/>
		<content type="html">&lt;p&gt;New update time.&amp;nbsp; Let's see what I've been up to.&lt;/p&gt;&lt;h2&gt;Repository Links&lt;/h2&gt;&lt;p&gt;You can now add links to web-based repository sites like GitHub to your documentation.&amp;nbsp; After you do, whenever you hover over a prototype a tab will pop up with a link to its source code:&lt;/p&gt;&lt;img src=&quot;https://www.naturaldocs.org/news/images/2.4/prototype_button_panel.png&quot; width=&quot;872&quot; height=&quot;126&quot; style=&quot;width: 100%; height: auto; max-width: 872px&quot; /&gt;&lt;p&gt;It works for class prototypes too:&lt;/p&gt;&lt;img src=&quot;https://www.naturaldocs.org/news/images/2.4/class_button_panel.png&quot; width=&quot;752&quot; height=&quot;214&quot; style=&quot;width: 100%; height: auto; max-width: 752px&quot; /&gt;&lt;p&gt;But what if more than one file defines something, like how C++ has header and source files?&amp;nbsp; I got you:&lt;/p&gt;&lt;img src=&quot;https://www.naturaldocs.org/news/images/2.4/class_button_panel_multi.png&quot; width=&quot;548&quot; height=&quot;151&quot; style=&quot;width: 100%; height: auto; max-width: 548px&quot; /&gt;&lt;p&gt;You can see it working live on &lt;a href=&quot;https://www.naturaldocs.org/documentation#CSharpClass:CodeClear.NaturalDocs.Engine.CodeDB.Accessor&quot; target=&quot;_blank&quot;&gt;Natural Docs' own documentation.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;To add this to your project, &lt;a href=&quot;https://www.naturaldocs.org/reference/project.txt&quot; target=&quot;_blank&quot;&gt;edit Project.txt&lt;/a&gt; and add &amp;quot;[Site Name] Repository: [Project URL]&amp;quot; under the Source Folder heading.&amp;nbsp; If you have multiple Source Folder lines they would each need their own:&lt;/p&gt;&lt;pre&gt;Source Folder: C:\My Project\src&lt;br /&gt;&lt;br /&gt;   GitHub Repository: https://github.com/MyUserName/MyProject/&lt;/pre&gt;&lt;p&gt;If you're using GitHub, Codeberg, or Gitea that's all you need.&amp;nbsp; If you're using GitLab or you want links to go to a specific branch, add the line &amp;quot;Branch: [Branch Name]&amp;quot; underneath it.&amp;nbsp; (GitLab doesn't have a way to link to the trunk without knowing its name, so you have to specify whether it's &amp;quot;master&amp;quot; or &amp;quot;main&amp;quot;.)&lt;/p&gt;&lt;p&gt;If you use a different site you have to tell Natural Docs how to link to source files.&amp;nbsp; Add a &amp;quot;Link Template: [URL]&amp;quot; line underneath with {File} and {LineNumber} used to represent where the file path and line number should go.&amp;nbsp; For example:&lt;/p&gt;&lt;pre&gt;Source Folder: C:\My Project\src&lt;br /&gt;&lt;br /&gt;   Repository: https://mysite.com/repo&lt;br /&gt;      Link Template: https://mysite.com/repo/src/{File}#L{LineNumber}&lt;/pre&gt;&lt;p&gt;The repository name and project link aren't otherwise used yet, but they'll probably be added to the menu somewhere in a later release.&lt;/p&gt;&lt;p&gt;Are there any other major repository sites you use?&amp;nbsp; Building in support would mean people wouldn't have to define the link template manually.&amp;nbsp; I know there are others like Azure Repos but I couldn't find public projects to test them out.&amp;nbsp; E-mail me if you use one; there's only three or four questions I would need answered and they're pretty straightforward.&lt;/p&gt;&lt;h2&gt;Speeeed!&lt;/h2&gt;&lt;p&gt;So... I may have undersold the speed increase of moving to native binaries when &lt;a href=&quot;https://www.naturaldocs.org/news/2025-10-22/Natural_Docs_2.4_Development_Release_1&quot; target=&quot;_blank&quot;&gt;I announced development release 1.&lt;/a&gt;&amp;nbsp; I only tested macOS, and the source and output folders were on network shares which muted the results.&amp;nbsp; I ran them again with everything local and, well, Natural Docs 2.4 DR1 actually cuts &lt;b&gt;&lt;i&gt;73%&lt;/i&gt;&lt;/b&gt; off the run time when doing a full rebuild.&amp;nbsp; Yes, running a native binary on Apple silicon without Mono and Rosetta removes almost three quarters of the run time.&lt;/p&gt;&lt;p&gt;It's faster on Windows too!&amp;nbsp; Running a native x64 binary cuts 41% off the run time versus running it through the .NET Framework.&lt;/p&gt;&lt;p&gt;Things were tweaked a bit further for development release 2.&amp;nbsp; I moved from .NET 8 to .NET 10, which has new compiler optimizations, and I made a &lt;a href=&quot;https://www.naturaldocs.org/documentation#File:Engine/Source/SQLite/Customizations.txt&quot; target=&quot;_blank&quot;&gt;customized build of SQLite&lt;/a&gt; that cut out a bunch of things I don't use.&amp;nbsp; The results are a tiny additional speed bump over DR1, most pronounced on Windows.&lt;/p&gt;&lt;img src=&quot;https://www.naturaldocs.org/news/images/2.4/speed_chart_dr2.png&quot; width=&quot;1018&quot; height=&quot;744&quot; style=&quot;width: 100%; height: auto; max-width: 1018px&quot; /&gt;&lt;p&gt;The only tradeoff is that Natural Docs now requires macOS 12 Monterey.&amp;nbsp; Development release 1 supported back to macOS 10.15 Catalina, but the move from .NET 8 to .NET 10 bumped up the requirements.&lt;/p&gt;&lt;p&gt;So yeah, if you aren't already using the development releases I would highly recommend doing so!&lt;/p&gt;&lt;h2&gt;Quick Documentation&lt;/h2&gt;&lt;p&gt;As I mentioned last time, I was thinking about requiring Javadoc or XML comment symbols for quick documentation, since that would prevent it from being triggered accidentally.&amp;nbsp; It's only one extra character, and it more clearly shows that the comment is intended to be documentation.&amp;nbsp; It's been implemented, so now you use it like this:&lt;/p&gt;&lt;pre&gt;/* Enum: Colors&lt;br /&gt; */&lt;br /&gt;public enum Colors {&lt;br /&gt;   Red,   /// The color of apples&lt;br /&gt;   Green, /// The color of grass, but also some apples&lt;br /&gt;   Blue } /** The color of the sky, but not apples */&lt;/pre&gt;&lt;p&gt;Note that this is only for the comment &lt;i&gt;symbols&lt;/i&gt;, meaning you have to use /// or /** and */.&amp;nbsp; It does not mean you have to format the comment &lt;i&gt;contents&lt;/i&gt; in Javadoc or XML, so you can still use Natural Docs formatting like *bold* and &amp;lt;links&amp;gt;.&lt;/p&gt;&lt;h2&gt;Language Improvements&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;C#&lt;/b&gt; has minor parser fixes, now supporting nullable appearing after array brackets like &amp;quot;int[]?&amp;quot;, a comma trailing the last value in an enum like &amp;quot;enum X { A, B, C, }&amp;quot;, and using enums with &lt;a href=&quot;https://www.naturaldocs.org/reference/project.txt#syntax_reference&quot; target=&quot;_blank&quot;&gt;the Documented Only setting.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;PowerShell&lt;/b&gt; function prototype formatting has been fixed.&amp;nbsp; It also detects types like [string].&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;PowerShell&lt;/b&gt; now supports &amp;lt;# #&amp;gt; block comments.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Odds and Ends&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Prototype parameters&lt;/b&gt; that have multiple metadata blocks get formatted better, breaking them out into their own lines.&amp;nbsp; This is useful for PowerShell where each parameter can potentially have several modifiers, but it can happen in other languages as well.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Other smaller fixes and improvements.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;</content>
	</entry>

	<entry>
		<title type="text">Natural Docs 2.4 Development Release 1: Native Binaries and Quick Documentation</title>
		<id>https://www.naturaldocs.org/news/2025-10-22/Natural_Docs_2.4_Development_Release_1</id>
		<author><name>Greg Valure</name></author>
		<updated>2025-10-22T00:00:00Z</updated>
		<link rel="alternate" type="html" href="https://www.naturaldocs.org/news/2025-10-22/Natural_Docs_2.4_Development_Release_1"/>
		<content type="html">&lt;p&gt;It's time for a new development release.&amp;nbsp; What's been going on behind the scenes?&lt;/p&gt;&lt;h2&gt;Native Binaries&lt;/h2&gt;&lt;p&gt;I've migrated Natural Docs from the .NET Framework to precompiled .NET 8 binaries.&amp;nbsp; What does that mean for you?&lt;/p&gt;&lt;p&gt;The biggest benefit is that Apple-silicon Macs and Windows Snapdragon PCs will be faster and more efficient.&amp;nbsp; They're ARM64 chips, and now we have ARM64 binaries!&amp;nbsp; My testing showed the &amp;quot;resolving links&amp;quot; stage on an M1 Mac takes 30% less time this way.&amp;nbsp; The parsing and building stages won't see as big an improvement but that's because they're more I/O-bound.&lt;/p&gt;&lt;p&gt;Up until now I've relied on Mono to run Natural Docs on Macs, but Mono only emits x64 instructions (at least the version on &lt;a href=&quot;https://www.mono-project.com/&quot; target=&quot;_blank&quot;&gt;mono-project.com&lt;/a&gt; anyway.)&amp;nbsp; That means it must then also be run through translation layers like Apple's Rosetta.&amp;nbsp; Having a native ARM64 version allows it to skip all that and run at full speed.&amp;nbsp; Also, Apple will be discontinuing Rosetta in a couple of years so this had to happen eventually.&lt;/p&gt;&lt;p&gt;So now you can just download and run the new macOS and Linux binaries without installing anything else.&amp;nbsp; You don't need Mono anymore.&amp;nbsp; You don't need to install anything for .NET either, all the components it needs are compiled into Natural Docs itself.&lt;/p&gt;&lt;p&gt;But wait, isn't bundling .NET going to bloat Natural Docs?&amp;nbsp; I was worried about that, not wanting it to turn into a 100MB download or become heavy like Electron apps, but I was pleasantly surprised.&amp;nbsp; The libraries get stripped down to only the parts you actually use, and Natural Docs has a very light footprint, so the downloads are all less than 5MB in size.&lt;/p&gt;&lt;p&gt;The web site will automatically detect your system and select the correct download for you.&amp;nbsp; However, only Chrome and Edge allow it to detect the processor type so you may need to double check it if you're using Safari or Firefox.&amp;nbsp; All downloads are available by clicking &amp;quot;Other Platforms and Options&amp;quot;.&amp;nbsp; I didn't make any 32-bit builds because I assume no one needs them, but you can let me know if I'm wrong.&lt;/p&gt;&lt;h2&gt;An Experiment with Quick Documentation&lt;/h2&gt;&lt;p&gt;So I alluded to a potential new feature in the last update, and it's something that's currently only implemented for enums in C#, but it has the potential to expand beyond that.&lt;/p&gt;&lt;p&gt;Suppose you're documenting enum values.&amp;nbsp; You have to duplicate them in the comment:&lt;/p&gt;&lt;pre&gt;/* Enum: Colors&lt;br /&gt; *&lt;br /&gt; * Values:&lt;br /&gt; *    Red   - The color of apples&lt;br /&gt; *    Green - The color of grass, but also some apples&lt;br /&gt; *    Blue  - The color of the sky, but not apples&lt;br /&gt; */&lt;br /&gt;public enum Colors {&lt;br /&gt;   Red,&lt;br /&gt;   Green,&lt;br /&gt;   Blue }&lt;/pre&gt;&lt;p&gt;What if you could just document them with a quick comment inline?&lt;/p&gt;&lt;pre&gt;/* Enum: Colors&lt;br /&gt; */&lt;br /&gt;public enum Colors {&lt;br /&gt;   Red,   // The color of apples&lt;br /&gt;   Green, // The color of grass, but also some apples&lt;br /&gt;   Blue } // The color of the sky, but not apples&lt;/pre&gt;&lt;p&gt;This is already implemented and working for C# enums.&amp;nbsp; You can just put a regular comment after any value on the same line and it will be pulled into the documentation.&amp;nbsp; It doesn't need a keyword or any other kind of header.&amp;nbsp; You can extend the comment to multiple lines if it needs to be longer, and you can choose to only document some values if the others are self-explanatory.&lt;/p&gt;&lt;p&gt;It doesn't seem like that big a deal above, but when lists get to be a dozen or more values the duplication is more of an issue.&amp;nbsp; Also, when this idea was first suggested to me it was for documenting simple structs where there would be more space and effort savings.&amp;nbsp; You could replace this:&lt;/p&gt;&lt;pre&gt;/* Struct: Point&lt;br /&gt; * Represents a point on an X/Y axis.&lt;br /&gt; */&lt;br /&gt;public struct Point {&lt;br /&gt;&lt;br /&gt;   /* Variable: X&lt;br /&gt;    * The horizontal position.&lt;br /&gt;    */&lt;br /&gt;    public int X;&lt;br /&gt;&lt;br /&gt;    /* Variable: Y&lt;br /&gt;     * The vertical position.&lt;br /&gt;     */&lt;br /&gt;    public int Y;&lt;br /&gt;    }&lt;/pre&gt;&lt;p&gt;with this:&lt;/p&gt;&lt;pre&gt;/* Struct: Point&lt;br /&gt; * Represents a point on an X/Y axis.&lt;br /&gt; */&lt;br /&gt;public struct Point {&lt;br /&gt;    public int X; // The horizontal position.&lt;br /&gt;    public int Y; // The vertical position.&lt;br /&gt;    }&lt;/pre&gt;&lt;p&gt;So C# enums were a proof-of-concept, with other potential applications being simple structs like above, module ports in SystemVerilog, and maybe even function parameters.&lt;/p&gt;&lt;p&gt;However, getting something that works predictably is a bit tricky.&amp;nbsp; Ideally I'd like both of the struct comment styles above to Just Work™ without needing any special syntax to distinguish between the two approaches.&amp;nbsp; That might be doable, but the second method is potentially fragile when you try to do it with basic language support.&amp;nbsp; For example, it wouldn't work once you add a function to the struct, if the parent isn't documented, or if it's longer than a certain length.&amp;nbsp; If a feature doesn't behave predictably and in ways that are obvious (it doesn't matter if I document the conditions somewhere, people aren't going to memorize them) then it's potentially unreliable, which makes it a bad feature.&amp;nbsp; It's more robust with full language support but that limits its reach.&amp;nbsp; So I'm left between &amp;quot;leave it as a niche feature for enums but don't expand it to areas where it can be flaky&amp;quot; and &amp;quot;don't scrap a feature that could be nice in certain conditions just because it wouldn't work in all of them.&amp;quot;&lt;/p&gt;&lt;p&gt;There's also the issue of it being triggered unintentionally, but I think I'm going to change it to require Javadoc-style comment symbols (/// or /**) to prevent that.&amp;nbsp; It's only one extra character and it more clearly says &amp;quot;this is supposed to be documentation.&amp;quot;&lt;/p&gt;&lt;p&gt;Another issue is it's not easy to integrate this idea into the rest of the code so it's a bit of a time suck when I could be working on features that are more broadly beneficial, like finally adding more languages to basic language support and adding source links to repositories like GitHub.&lt;/p&gt;&lt;p&gt;I think I'm leaning towards expanding it slowly over time with full language support where it's more robust, but not putting a high priority on it.&amp;nbsp; Maybe it can be added to basic language support in a few places where I feel it can be reliable.&amp;nbsp; What are your thoughts?&amp;nbsp; Would you ever use it for, say, documenting function parameters?&lt;/p&gt;&lt;h2&gt;Language Improvements&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;SystemVerilog&lt;/b&gt; was reverted to &amp;quot;basic language support with extra formatting code for modules&amp;quot; because it wasn't meaningfully updated while I was sidetracked with this.&amp;nbsp; This allows it to remain usable in this release.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;C#&lt;/b&gt; will now pull enum values into your documentation whether you write comments for them or not.&amp;nbsp; So you can document them the old way, use the new quick method above, or do neither and you'll still have all values in your output.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;C#&lt;/b&gt; can now handle raw strings like $&amp;quot;&amp;quot;&amp;quot;abc&amp;quot;&amp;quot;&amp;quot;, including multiline and interpolated ones.&amp;nbsp; It will also now syntax highlight code sections in interpolated strings like $&amp;quot;abc { x + 12 } def&amp;quot;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;PowerShell&lt;/b&gt; variables now get prototypes.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;PowerShell&lt;/b&gt; syntax highlighting is improved.&amp;nbsp; This includes highlighting attributes like [string], but it still needs some work when used with function parameters.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Shebang Scripts&lt;/b&gt; now include .sh and .command files by default.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Odds and Ends&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Console output&lt;/b&gt; has been improved so if you're running Natural Docs in a terminal or console window it will show progress as a live-updating percentage.&amp;nbsp; If it's being captured by an IDE or otherwise redirected it will behave closer to how it did before.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Exit codes&lt;/b&gt; will now be returned so scripts and automated build processes can more easily tell whether a run succeeded or failed.&amp;nbsp; After running Natural Docs you can check %ErrorLevel% in batch files, $LastExitCode in PowerShell, or $? in bash scripts to see if there was a problem.&amp;nbsp; As is the convention, a value of 0 means it succeeded and anything else means it failed.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Other smaller fixes and improvements.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;</content>
	</entry>

	<entry>
		<title type="text">Natural Docs 2.3.1 released</title>
		<id>https://www.naturaldocs.org/news/2025-02-01/Natural_Docs_2.3.1_released</id>
		<author><name>Greg Valure</name></author>
		<updated>2025-02-01T00:00:00Z</updated>
		<link rel="alternate" type="html" href="https://www.naturaldocs.org/news/2025-02-01/Natural_Docs_2.3.1_released"/>
		<content type="html">&lt;p&gt;Hello all.&amp;nbsp; Here's a small release to bundle up all the things that have changed since the last one.&lt;/p&gt;&lt;p&gt;The primary reason is because SystemVerilog is about to move from &amp;quot;&lt;a href=&quot;https://www.naturaldocs.org/reference/language_support#basic_support&quot; target=&quot;_blank&quot;&gt;basic language support&lt;/a&gt; with extra formatting code for modules&amp;quot; to the &lt;a href=&quot;https://www.naturaldocs.org/reference/language_support#full_support&quot; target=&quot;_blank&quot;&gt;full language support&lt;/a&gt; code path.&amp;nbsp; 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 &lt;a href=&quot;https://www.naturaldocs.org/reference/languages.txt#adding_prototypes&quot; target=&quot;_blank&quot;&gt;via Languages.txt&lt;/a&gt; anymore.&amp;nbsp; You'd have to wait until I build out the parser for them.&amp;nbsp; 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.&lt;/p&gt;&lt;p&gt;There's more improvements than just that though.&lt;/p&gt;&lt;h2&gt;Updated Languages&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;SystemVerilog&lt;/b&gt; will format module prototypes better.&amp;nbsp; It also has dedicated module &lt;a href=&quot;https://www.naturaldocs.org/reference/keywords&quot; target=&quot;_blank&quot;&gt;keywords&lt;/a&gt;, and if you use them you'll get a top-level Modules menu next to Files and Classes.&amp;nbsp; If you document the ports using a &lt;a href=&quot;https://www.naturaldocs.org/reference/formatting#definition_lists&quot; target=&quot;_blank&quot;&gt;definition list&lt;/a&gt; under a &amp;quot;Ports&amp;quot; or &amp;quot;Parameter Ports&amp;quot; &lt;a href=&quot;https://www.naturaldocs.org/reference/formatting#headings&quot; target=&quot;_blank&quot;&gt;heading&lt;/a&gt; it will pull the types into it the same way &amp;quot;Parameters&amp;quot; does for functions.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;C#&lt;/b&gt; now supports file-scoped namespace declarations (&amp;quot;namespace X;&amp;quot; instead of &amp;quot;namespace X { ... }&amp;quot;) from C# 10.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Tcl&lt;/b&gt; has &lt;a href=&quot;https://github.com/NaturalDocs/NaturalDocs/issues/94&quot; target=&quot;_blank&quot;&gt;improved parameter detection and formatting&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Visual Basic&lt;/b&gt; now has property prototypes.&amp;nbsp; They show the type but not whether get/set are defined.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;New Languages&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;PowerShell&lt;/b&gt; now has basic language support with custom syntax highlighting.&amp;nbsp; It doesn't support classes though, just functions and line comments.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;PowerBuilder&lt;/b&gt; now has basic language support with custom syntax highlighting as well.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Odds and Ends&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;The theme switcher got a facelift.&amp;nbsp; There were minor improvements to how bullet lists are formatted and the black theme's contrast was increased.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;https://www.naturaldocs.org/news/images/2.3.1/themes_menu.png&quot; width=&quot;450&quot; height=&quot;472&quot; style=&quot;width: 100%; height: auto; max-width: 450px&quot; /&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Natural Docs can now support languages that have nested block comments.&amp;nbsp; Just add the Block Comments Nest property in &lt;a href=&quot;https://www.naturaldocs.org/reference/languages.txt&quot; target=&quot;_blank&quot;&gt;Languages.txt&lt;/a&gt;.&amp;nbsp; It's already turned on for Pascal/Delphi and PowerBuilder.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That's it for now.&amp;nbsp; 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.&amp;nbsp; I have a new feature I'm going to be attempting plus I'll be continuing to move SystemVerilog towards full support.&amp;nbsp; Follow the development releases if you want to keep up on that.&lt;/p&gt;</content>
	</entry>

	<entry>
		<title type="text">Natural Docs 2.3 released: Dark Themes</title>
		<id>https://www.naturaldocs.org/news/2023-09-11/Natural_Docs_2.3_released</id>
		<author><name>Greg Valure</name></author>
		<updated>2023-09-11T00:00:00Z</updated>
		<link rel="alternate" type="html" href="https://www.naturaldocs.org/news/2023-09-11/Natural_Docs_2.3_released"/>
		<content type="html">&lt;p&gt;Time for another release.&amp;nbsp; Let's recap what's new for the people who haven't been following the development releases.&lt;/p&gt;&lt;h2&gt;Dark Themes&lt;/h2&gt;&lt;p&gt;Natural Docs now has dark themes.&amp;nbsp; 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.&amp;nbsp; Just click the moon icon next to the search box:&lt;/p&gt;&lt;img src=&quot;https://www.naturaldocs.org/news/images/2.3/themes_menu_with_auto.png&quot; width=&quot;450&quot; height=&quot;506&quot; style=&quot;width: 100%; height: auto; max-width: 450px&quot; /&gt;&lt;p&gt;The dark theme is what you'd expect, and the black theme has less color and higher contrast.&amp;nbsp; 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.&lt;/p&gt;&lt;p&gt;Here's a peek at what the dark theme looks like.&amp;nbsp; You can also &lt;a href=&quot;https://www.naturaldocs.org/archive/documentation/2.3&quot; target=&quot;_blank&quot;&gt;see it for yourself here.&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://www.naturaldocs.org/news/images/2.3/dark_theme.png&quot; width=&quot;1138&quot; height=&quot;678&quot; style=&quot;width: 100%; height: auto; max-width: 1138px&quot; /&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;How do I apply this to my project?&lt;/b&gt;&lt;br /&gt;Just &lt;a href=&quot;https://www.naturaldocs.org/download&quot; target=&quot;_blank&quot;&gt;download 2.3&lt;/a&gt; and run it on your project.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;What if I have a custom style?&lt;/b&gt;&lt;br /&gt;All your existing CSS should apply to the light theme with no changes.&amp;nbsp; The dark and black themes will just recolor it.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Can I customize the other themes too?&lt;/b&gt;&lt;br /&gt;Yes, just add additional CSS rules with .DarkTheme and .BlackTheme ahead of them.&amp;nbsp; So in addition to styling &amp;quot;.SHComment&amp;quot; you would also style &amp;quot;.DarkTheme .SHComment&amp;quot; and &amp;quot;.BlackTheme .SHComment&amp;quot;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Can I disable the other themes?&lt;/b&gt;&lt;br /&gt;If you're not using a custom style, choose Light as the style in &lt;a href=&quot;https://www.naturaldocs.org/reference/project.txt&quot; target=&quot;_blank&quot;&gt;Project.txt&lt;/a&gt; or on &lt;a href=&quot;https://www.naturaldocs.org/reference/command_line&quot; target=&quot;_blank&quot;&gt;the command line&lt;/a&gt;.&amp;nbsp; If you have a custom style based on &lt;a href=&quot;https://www.naturaldocs.org/reference/styles#style.txt&quot; target=&quot;_blank&quot;&gt;Style.txt&lt;/a&gt;, edit it to inherit from Light instead of Default.&amp;nbsp; If you just use a CSS file as a style, add &amp;quot;#NDThemeSwitcher { display: none !important; }&amp;quot;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Can I force it to always use dark?&lt;/b&gt;&lt;br /&gt;If you're not using a custom style, choose Dark as the style in &lt;a href=&quot;https://www.naturaldocs.org/reference/project.txt&quot; target=&quot;_blank&quot;&gt;Project.txt&lt;/a&gt; or on &lt;a href=&quot;https://www.naturaldocs.org/reference/command_line&quot; target=&quot;_blank&quot;&gt;the command line&lt;/a&gt;.&amp;nbsp; If you have a custom style based on &lt;a href=&quot;https://www.naturaldocs.org/reference/styles#style.txt&quot; target=&quot;_blank&quot;&gt;Style.txt&lt;/a&gt;, edit it to inherit from Dark instead of Default.&amp;nbsp; You can't do it with just a CSS file because those always inherit from Default.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Better macOS Compatibility&lt;/h2&gt;&lt;p&gt;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.&amp;nbsp; They should just work without you needing to make an exception in the System Preferences.&amp;nbsp; If Natural Docs has ever crashed complaining about libNaturalDocs.&amp;#8203;Engine.&amp;#8203;SQLite.&amp;#8203;Mac64.&amp;#8203;so this was why.&lt;/p&gt;&lt;h2&gt;SystemVerilog&lt;/h2&gt;&lt;p&gt;Work on full language support for SystemVerilog continues but is not ready yet, so 2.3 still has basic language support.&amp;nbsp; There's an entry in &lt;a href=&quot;https://www.naturaldocs.org/reference/languages.txt&quot; target=&quot;_blank&quot;&gt;Languages.txt&lt;/a&gt; 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.&amp;nbsp; However, the syntax highlighting has been improved.&amp;nbsp; All of SystemVerilog's keywords will highlight correctly as well as complicated numeric literals like 8'b0011_00zz.&lt;/p&gt;&lt;h2&gt;Fully-Qualified Title Fix&lt;/h2&gt;&lt;p&gt;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.&amp;nbsp; Suppose you have this:&lt;/p&gt;&lt;pre&gt;namespace MyNamespace {&lt;br /&gt;&lt;br /&gt;   // Class: MyNamespace::MyClass&lt;br /&gt;   class MyClass {&lt;br /&gt;      ...&lt;br /&gt;      }&lt;br /&gt;   }&lt;/pre&gt;&lt;p&gt;You wouldn't get a prototype for MyClass because the declaration doesn't match the full title of MyNamespace::MyClass.&amp;nbsp; This has been fixed, so it only requires the last segment to exist in the prototype now.&lt;/p&gt;&lt;h2&gt;Odds and Ends&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;HTML Modernization.&lt;/b&gt;&amp;nbsp; &lt;a href=&quot;https://www.naturaldocs.org/news/2020-03-06/Natural_Docs_2.1_development_release_1&quot; target=&quot;_blank&quot;&gt;Just like SQL before it,&lt;/a&gt; SystemVerilog caused a big refactor of the prototype handling code due to how different it can be from other languages.&amp;nbsp; As a result, prototype output has been completely rebuilt using CSS's grid feature.&amp;nbsp; This in turn increases the minimum browser requirements for the documentation, but all the major browsers implemented grid support sometime in 2017, so it's still pretty conservative.&amp;nbsp; It just means no more Internet Explorer and no more pre-Chromium Edge.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Better Prototype Formatting.&lt;/b&gt;&amp;nbsp; The new prototype code improves formatting for things like C# properties, indexers, and events.&amp;nbsp; Your function and variable prototypes should look almost exactly the same though.&amp;nbsp; There's a few spacing tweaks that may be applied but they're subtle.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Maximum Line Length.&lt;/b&gt;&amp;nbsp; This is something I've always been ambivalent about doing.&amp;nbsp; I've always liked text going to whatever window size &lt;u&gt;you&lt;/u&gt; choose, but on an ultrawide monitor it does get kind of ridiculous.&amp;nbsp; So now there's a maximum line length for readability, but it only affects plain text.&amp;nbsp; If you have a really wide prototype, code block, or image it will still take as much horizontal space as it needs instead of forcing you to scroll.&lt;/p&gt;&lt;p&gt;If you want to turn it off, &lt;a href=&quot;https://www.naturaldocs.org/reference/styles&quot; target=&quot;_blank&quot;&gt;make a custom style&lt;/a&gt; with this rule:&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;.CTopic p,&lt;br /&gt;.CTopic li p,&lt;br /&gt;table.CDefinitionList { max-width: none !important }&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Other minor bug fixes and tweaks.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;</content>
	</entry>

	<entry>
		<title type="text">Natural Docs 2.3 Release Candidate 1</title>
		<id>https://www.naturaldocs.org/news/2023-08-23/Natural_Docs_2.3_Release_Candidate_1</id>
		<author><name>Greg Valure</name></author>
		<updated>2023-08-23T00:00:00Z</updated>
		<link rel="alternate" type="html" href="https://www.naturaldocs.org/news/2023-08-23/Natural_Docs_2.3_Release_Candidate_1"/>
		<content type="html">&lt;p&gt;It's been a while.&amp;nbsp; Time to wrap up the development releases and put something out, so I'm calling this one Release Candidate 1.&amp;nbsp; I think it's pretty much ready.&lt;/p&gt;&lt;h2&gt;Dark Themes&lt;/h2&gt;&lt;p&gt;I tied up all the loose ends on dark themes.&amp;nbsp; First, your theme choice will now be saved.&amp;nbsp; If you set it to Dark it will still be on Dark the next time you open your documentation.&amp;nbsp; It will also be preserved when you open new tabs or windows.&lt;/p&gt;&lt;p&gt;Second, I added options for Auto Light/Dark and Auto Light/Black.&amp;nbsp; If your browser and operating system support it, it lets the theme follow the system theme automatically.&lt;/p&gt;&lt;img src=&quot;https://www.naturaldocs.org/news/images/2.3/themes_menu_with_auto.png&quot; width=&quot;450&quot; height=&quot;506&quot; style=&quot;width: 100%; height: auto; max-width: 450px&quot; /&gt;&lt;p&gt;I was really tempted to make Auto Light/Dark the default, but I think I should follow the &lt;a href=&quot;https://en.wikipedia.org/wiki/Principle_of_least_astonishment&quot; target=&quot;_blank&quot;&gt;Principle of Least Astonishment&lt;/a&gt;.&amp;nbsp; Otherwise someone can upgrade their version of Natural Docs and their documentation will look completely different without them expecting it, assuming they didn't read the release notes.&amp;nbsp; So Light remains the default.&lt;/p&gt;&lt;h2&gt;Other Improvements&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Better macOS Compatibility.&lt;/b&gt;&amp;nbsp; 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.&amp;nbsp; They should just work without you needing to make an exception in the System Preferences.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;HTML Modernization.&lt;/b&gt;&amp;nbsp; &lt;a href=&quot;https://www.naturaldocs.org/news/2020-03-06/Natural_Docs_2.1_development_release_1&quot; target=&quot;_blank&quot;&gt;Just like SQL before it,&lt;/a&gt; SystemVerilog caused a big refactor of the prototype handling code due to how different it can be from other languages.&amp;nbsp; As a result, prototype output has been completely rebuilt using CSS's grid feature.&amp;nbsp; You shouldn't see any difference for 90% of your prototypes, though there will be improvements for some edge cases like C# indexers.&lt;/p&gt;&lt;p&gt;As a result of switching to grid, the minimum browser requirements have been increased.&amp;nbsp; All the major browsers implemented grid support sometime in 2017, so it's still pretty conservative.&amp;nbsp; It just means no more Internet Explorer and no more pre-Chromium Edge.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Maximum Line Length.&lt;/b&gt;&amp;nbsp; This is something I've always been ambivalent about doing.&amp;nbsp; I've always liked text going to whatever window size &lt;u&gt;you&lt;/u&gt; choose, but on an ultrawide monitor it does get kind of ridiculous.&amp;nbsp; So now there's a maximum line length for readability, but it only affects plain text.&amp;nbsp; If you have a really wide prototype, code block, or image it will still take as much horizontal space as it needs instead of forcing you to scroll.&lt;/p&gt;&lt;p&gt;If you want to turn it off, &lt;a href=&quot;https://www.naturaldocs.org/reference/styles&quot; target=&quot;_blank&quot;&gt;make a custom style&lt;/a&gt; with this rule:&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;.CTopic p,&lt;br /&gt;.CTopic li p,&lt;br /&gt;table.CDefinitionList { max-width: none !important }&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Other minor bugfixes and tweaks.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;What About SystemVerilog?&lt;/h2&gt;&lt;p&gt;Work has continued on it, but there's nothing worth showing yet, so the code will behave the same way it did in the previous release.&amp;nbsp; I'm not going to release a broken partial implementation.&amp;nbsp; Work on it chugged along for a while, then I got sidetracked by grid prototypes, plus a period where I didn't have much time to code at all, plus it now getting put on pause so I can wrap up this release.&amp;nbsp; Work will continue on it, but it won't be in 2.3.&lt;/p&gt;</content>
	</entry>

	<entry>
		<title type="text">Natural Docs 2.3 Development Release 1: Dark Themes</title>
		<id>https://www.naturaldocs.org/news/2022-06-23/Natural_Docs_2.3_Development_Release_1</id>
		<author><name>Greg Valure</name></author>
		<updated>2022-06-23T00:00:00Z</updated>
		<link rel="alternate" type="html" href="https://www.naturaldocs.org/news/2022-06-23/Natural_Docs_2.3_Development_Release_1"/>
		<content type="html">&lt;p&gt;Time to start a new batch of development releases.&amp;nbsp; What do we have so far?&lt;/p&gt;&lt;h2&gt;Dark Themes&lt;/h2&gt;&lt;p&gt;I originally planned on doing some easy, low-hanging fruit features while I worked on SystemVerilog.&amp;nbsp; Adding dark themes turned out to be a bigger effort than I thought, but I'm pretty happy with the results:&lt;/p&gt;&lt;img src=&quot;https://www.naturaldocs.org/news/images/2.3/dark_theme.png&quot; width=&quot;1138&quot; height=&quot;678&quot; style=&quot;width: 100%; height: auto; max-width: 1138px&quot; /&gt;&lt;p&gt;These aren't just additional styles you can choose when you build your documentation.&amp;nbsp; If you use the default style you get all three themes and you can switch between them from the browser.&amp;nbsp; Just click the moon icon next to the search box:&lt;/p&gt;&lt;img src=&quot;https://www.naturaldocs.org/news/images/2.3/themes_menu.png&quot; width=&quot;208&quot; height=&quot;179&quot; style=&quot;width: 100%; height: auto; max-width: 208px&quot; /&gt;&lt;p&gt;The dark theme is what you expect, plus there's a black theme that's higher contrast.&amp;nbsp; &lt;a href=&quot;https://www.naturaldocs.org/archive/documentation/2.3&quot; target=&quot;_blank&quot;&gt;You can give them a look here.&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;How do I apply this to my project?&lt;/b&gt;&lt;br /&gt;Just &lt;a href=&quot;https://www.naturaldocs.org/download#Development&quot; target=&quot;_blank&quot;&gt;download the latest development release&lt;/a&gt; and run it on your project.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;What if I have a custom style?&lt;/b&gt;&lt;br /&gt;All your existing CSS should apply to the light theme with no changes.&amp;nbsp; The dark and black themes will just recolor it.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Can I customize the other themes too?&lt;/b&gt;&lt;br /&gt;Sure, just add additional CSS rules with .DarkTheme and .BlackTheme ahead of them.&amp;nbsp; So in addition to styling &amp;quot;.SHComment&amp;quot; you would also style &amp;quot;.DarkTheme .SHComment&amp;quot; and &amp;quot;.BlackTheme .SHComment&amp;quot;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Can I disable the other themes?&lt;/b&gt;&lt;br /&gt;If you're not using a custom style, choose Light as the style in &lt;a href=&quot;https://www.naturaldocs.org/reference/project.txt&quot; target=&quot;_blank&quot;&gt;Project.txt&lt;/a&gt; or on &lt;a href=&quot;https://www.naturaldocs.org/reference/command_line&quot; target=&quot;_blank&quot;&gt;the command line&lt;/a&gt;.&amp;nbsp; If you have a custom style based on &lt;a href=&quot;https://www.naturaldocs.org/reference/styles#style.txt&quot; target=&quot;_blank&quot;&gt;Style.txt&lt;/a&gt;, edit it to inherit from Light instead of Default.&amp;nbsp; If you just use a CSS file as a style, add &amp;quot;#NDThemeSwitcher { display: none !important; }&amp;quot;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Can I force it to always use dark?&lt;/b&gt;&lt;br /&gt;If you're not using a custom style, choose Dark as the style in &lt;a href=&quot;https://www.naturaldocs.org/reference/project.txt&quot; target=&quot;_blank&quot;&gt;Project.txt&lt;/a&gt; or on &lt;a href=&quot;https://www.naturaldocs.org/reference/command_line&quot; target=&quot;_blank&quot;&gt;the command line&lt;/a&gt;.&amp;nbsp; If you have a custom style based on &lt;a href=&quot;https://www.naturaldocs.org/reference/styles#style.txt&quot; target=&quot;_blank&quot;&gt;Style.txt&lt;/a&gt;, edit it to inherit from Dark instead of Default.&amp;nbsp; This all works for Black as well.&amp;nbsp; You can't do it with a style that's just a CSS file because those always inherit from Default.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Still to do:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Implement saving your choice.&lt;/b&gt;&amp;nbsp; Right now it doesn't so it resets between browser sessions or when you open a new tab.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Auto-light/dark and light/black themes.&lt;/b&gt;&amp;nbsp; If you have your browser follow the operating system's theme, there's ways for the documentation to detect that and follow it as well.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;SystemVerilog Improvements&lt;/h2&gt;&lt;p&gt;SystemVerilog now has an entry in &lt;a href=&quot;https://www.naturaldocs.org/reference/languages.txt&quot; target=&quot;_blank&quot;&gt;Languages.txt&lt;/a&gt;, 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.&amp;nbsp; However, a couple of things have been implemented:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Syntax Highlighting.&lt;/b&gt; All the SystemVerilog keywords will highlight correctly as well as numeric literals, including complicated ones like 8'b0011_00zz.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Module and Package Hierarchies.&lt;/b&gt;&amp;nbsp; In addition to the class and database hierarchies, there are now ones for modules and packages that you can use in &lt;a href=&quot;https://www.naturaldocs.org/reference/comments.txt&quot; target=&quot;_blank&quot;&gt;Comments.txt&lt;/a&gt;.&amp;nbsp; The final set of hierarchies is still in flux but these two exist for now.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Otherwise it's still the same as basic language support.&amp;nbsp; It won't find undocumented code structures yet or do any special formatting for prototypes.&amp;nbsp; More to come.&lt;/p&gt;&lt;h2&gt;Fully-Qualified Title Fix&lt;/h2&gt;&lt;p&gt;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.&amp;nbsp; Suppose you have this:&lt;/p&gt;&lt;pre&gt;namespace MyNamespace {&lt;br /&gt;&lt;br /&gt;   // Class: MyNamespace::MyClass&lt;br /&gt;   class MyClass {&lt;br /&gt;      ...&lt;br /&gt;      }&lt;br /&gt;   }&lt;/pre&gt;&lt;p&gt;You wouldn't get a prototype for MyClass because the declaration doesn't match the full title of MyNamespace::MyClass.&amp;nbsp; This has been fixed, so it only requires the last segment to exist in the prototype now.&lt;/p&gt;&lt;h2&gt;Other Bug Fixes&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Fixed a potential infinite loop in the XML comment parser.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Fixed some minor issues with the C# parser.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;</content>
	</entry>

	<entry>
		<title type="text">Natural Docs 2.2 released</title>
		<id>https://www.naturaldocs.org/news/2022-02-21/Natural_Docs_2.2_released</id>
		<author><name>Greg Valure</name></author>
		<updated>2022-02-21T00:00:00Z</updated>
		<link rel="alternate" type="html" href="https://www.naturaldocs.org/news/2022-02-21/Natural_Docs_2.2_released"/>
		<content type="html">&lt;p&gt;Natural Docs 2.2 is done!&amp;nbsp; Let's recap for those who weren't following the development releases.&lt;/p&gt;&lt;h2&gt;Custom Home Pages&lt;/h2&gt;&lt;p&gt;The first new feature is custom home pages.&amp;nbsp; You can now replace this part of the documentation with anything you want:&lt;/p&gt;&lt;img src=&quot;https://www.naturaldocs.org/news/images/2.2/home_page_area.png&quot; width=&quot;899&quot; height=&quot;583&quot; style=&quot;width: 100%; height: auto; max-width: 899px&quot; /&gt;&lt;p&gt;One option is to set it to a source file using the &lt;a href=&quot;https://www.naturaldocs.org/reference/project.txt#custom_home_pages&quot;&gt;new Home Page setting in Project.txt.&lt;/a&gt;&amp;nbsp; This can be a regular source file or you can &lt;a href=&quot;https://www.naturaldocs.org/reference/comments#text_files&quot;&gt;create a text file with Natural Docs content&lt;/a&gt; and use that.&amp;nbsp; Both of these options will let you compose it in Natural Docs' syntax and easily link to code elements.&lt;/p&gt;&lt;p&gt;Another option is to create your own HTML file.&amp;nbsp; If it's self-contained, meaning any CSS and JavaScript it needs is embedded directly in it, you can also use it with &lt;a href=&quot;https://www.naturaldocs.org/reference/project.txt#custom_home_pages&quot;&gt;the Home Page setting in Project.txt.&lt;/a&gt;&amp;nbsp; If you need to include images and other external files you can instead &lt;a href=&quot;https://www.naturaldocs.org/reference/styles#advanced_styles&quot;&gt;create an advanced style&lt;/a&gt;, &lt;a href=&quot;https://www.naturaldocs.org/reference/styles#custom_home_pages&quot;&gt;add a home page to it&lt;/a&gt;, and then apply that style to your project.&lt;/p&gt;&lt;p&gt;HTML files can have these strings anywhere in them and they'll be replaced by the values from Project.txt, which allows you to have an automatically updating timestamp in your custom HTML file:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;%NaturalDocs_Title%&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;%NaturalDocs_Subtitle%&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;%NaturalDocs_Copyright%&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;%NaturalDocs_Timestamp%&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In all cases the header, search box, and side menu will still be visible so people can navigate.&amp;nbsp; The custom home page will only replace the area highlighted in red.&lt;/p&gt;&lt;h2&gt;HTML Refresh&lt;/h2&gt;&lt;p&gt;I updated the default style of the generated documentation.&amp;nbsp; The fundamental design is still the same; if you're looking at it on Windows with a standard DPI display you might not even notice much unless you were comparing a &lt;a href=&quot;https://www.naturaldocs.org/archive/documentation/2.0#File:Engine/Source/CodeDB/Accessor.SQL.cs&quot; target=&quot;_blank&quot;&gt;before&lt;/a&gt; and &lt;a href=&quot;https://www.naturaldocs.org/archive/documentation/2.2#File:Engine/Source/CodeDB/Accessor.SQL.cs&quot; target=&quot;_blank&quot;&gt;after&lt;/a&gt;.&amp;nbsp; However, it now looks nicer on high DPI displays and Macs.&lt;/p&gt;&lt;p&gt;I switched to the default UI font for each operating system, which provides better readability and comfort.&amp;nbsp; On Windows the difference is more noticeable on high DPI displays, and on Macs it should just look nicer all around.&amp;nbsp; The icons were replaced with SVG versions so they no longer get blurry at high resolutions.&lt;/p&gt;&lt;p&gt;The footer with the copyright and timestamp was moved from a too small line across the bottom of the entire page to a panel at the bottom of the leftmost menu.&amp;nbsp; You can see it in the home page screenshot above.&amp;nbsp; This provides a little more vertical space for the content panel and lets me increase the font size to something more readable.&lt;/p&gt;&lt;p&gt;Other than that there were a lot of obsessive little tweaks to make sure everything lines up and is spaced well.&amp;nbsp; I also removed a lot of cruft that was there to support ancient browsers.&amp;nbsp; Did you know Natural Docs 2.0 originally had Internet Explorer 8 as its baseline?&amp;nbsp; Plus some tweaks to make IE6 and IE7 at least usable?&amp;nbsp; While it was fun to see comments referencing Firefox 4, that's a lot of old stuff that could be ripped out.&lt;/p&gt;&lt;h2&gt;Character Encodings&lt;/h2&gt;&lt;p&gt;Natural Docs expects source files to be encoded in Unicode by default.&amp;nbsp; It will automatically detect and handle all forms of UTF-8, UTF-16, and UTF-32.&amp;nbsp; But what if you have something different?&amp;nbsp; Not interpreting your files correctly could make any accented characters appear wrong in the output.&amp;nbsp; Well, now you can &lt;a href=&quot;https://www.naturaldocs.org/reference/project.txt#source_code&quot;&gt;specify other encodings in Project.txt.&lt;/a&gt;&amp;nbsp; For example:&lt;/p&gt;&lt;pre&gt;Encoding: Windows-1252&lt;/pre&gt;&lt;p&gt;This would set the default encoding for all files to Windows 1252 (Western European).&amp;nbsp; You can put it near the top of Project.txt to have it apply to all source folders, or under a Source Folder heading to apply to just that one.&amp;nbsp; &lt;a href=&quot;https://www.naturaldocs.org/reference/command_line#configuration_parameters&quot;&gt;You can also specify it on the command line with -e.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;If you have a mix of encodings, you can also set them for just certain file extensions:&lt;/p&gt;&lt;pre&gt;Encoding: Macintosh *.mac&lt;/pre&gt;&lt;p&gt;This sets the encoding for only .mac files to Macintosh (Roman/Western European).&amp;nbsp; Like before, if it appears under a Source Folder heading it will only apply in that folder.&lt;/p&gt;&lt;p&gt;You can also set character encodings per folder, or for file extensions within that folder:&lt;/p&gt;&lt;pre&gt;Encoding: iso-8859-1 C:\My Project\Source\Module1&lt;br /&gt;Encoding: shift_jis  C:\My Project\Source\Module1\*.txt&lt;/pre&gt;&lt;p&gt;These rules take precedence over any rules for parent folders, so all .mac files appearing in Module1 are ISO 8859-1.&amp;nbsp; You can only put Encoding lines that specify folders like this under Source Folder headings.&lt;/p&gt;&lt;p&gt;All operating systems may not support the same character encodings.&amp;nbsp; You can see which ones are available on yours by running Natural Docs with the &lt;a href=&quot;https://www.naturaldocs.org/reference/command_line#information_parameters&quot;&gt;--list-encodings command line option.&lt;/a&gt;&amp;nbsp; You can specify them by name or code page number.&lt;/p&gt;&lt;h2&gt;Language Improvements&lt;/h2&gt;&lt;p&gt;The C# parser had fallen out of date so I went through the language specification and updated it to support all the changes through C# 9.0.&amp;nbsp; That means Natural Docs can properly handle:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Records, including automatically generating properties for parameterized ones like &amp;quot;record MyRecord (int X, int Y);&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Tuples&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Init setters in properties&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Expression-bodied constructors, finalizers, and conversion operators.&amp;nbsp; It was already supported for functions, properties, and other operators.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Function pointers&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Newer keywords and modifiers&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Syntax highlighting for interpolated strings and constants with digit separators&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Plus some other smaller things.&amp;nbsp; Most of these features already worked fine if they appeared in a function body but might have thrown things off if they appeared in a prototype.&amp;nbsp; Now they'll work everywhere.&lt;/p&gt;&lt;p&gt;Of course, since this was done C# 10 was released.&amp;nbsp; Alas.&lt;/p&gt;&lt;p&gt;The SQL parser was also improved to support more modifiers and documenting type members, plus several bug fixes.&lt;/p&gt;&lt;h2&gt;Odds and Ends&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Language-Specific Keywords:&lt;/b&gt; So the issue is that &amp;quot;Record&amp;quot; means one thing in C# and another thing in SQL.&amp;nbsp; &amp;quot;Module&amp;quot; means one thing in SystemVerilog and another thing in Perl.&amp;nbsp; So while there is still only one set of &lt;a href=&quot;https://www.naturaldocs.org/reference/comments.txt#keywords_vs._comment_types&quot;&gt;comment types&lt;/a&gt; in &lt;a href=&quot;https://www.naturaldocs.org/reference/comments.txt&quot;&gt;Comments.txt&lt;/a&gt;, you can now add keywords for them that only apply to certain languages.&amp;nbsp; This probably doesn't mean much to you because if you're customizing Natural Docs for the languages you use it doesn't matter if you step on the ones you don't.&amp;nbsp; However, it's good for Natural Docs itself because now these distinctions can be supported out of the box without any customizations.&lt;/p&gt;&lt;p&gt;Consequently, &amp;quot;Record&amp;quot; only serves as a keyword for &amp;quot;Class&amp;quot; in C# to prevent unexpected behavior in other languages.&lt;/p&gt;&lt;p&gt;This also means all the &lt;a href=&quot;https://www.naturaldocs.org/reference/keywords#database_keywords&quot;&gt;database keywords&lt;/a&gt; can now be used without a prefix in SQL files.&amp;nbsp; You can just use &amp;quot;Table&amp;quot; or &amp;quot;Field&amp;quot; instead of &amp;quot;Database Table&amp;quot; or &amp;quot;DB Field&amp;quot;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;XML Links:&lt;/b&gt; Natural Docs now supports &amp;lt;a href=&amp;quot;&amp;quot;&amp;gt; and &amp;lt;see href=&amp;quot;&amp;quot;&amp;gt; links in XML comments.&amp;nbsp; It will also detect bare URLs and e-mail addresses and convert them to links as well.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Bug Fixes:&lt;/b&gt; Fixed a bug related to resolving links with parameters, so something like &amp;lt;MyFunction(int, int)&amp;gt; will go to the correct definition.&amp;nbsp; Also fixed bugs related to embedding images, inaccessible files, and when class attributes can be mistaken for parameters.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Licensing, Support, and Sponsoring Development&lt;/h2&gt;&lt;p&gt;There was some discussion about Natural Docs' licensing, specifically how parts of it get included in your documentation, such as JavaScript and CSS files.&amp;nbsp; Those files are licensed under the AGPL, but bundling them doesn't require the project you're documenting to be AGPL.&amp;nbsp; I tried to make this explicit in the &lt;a href=&quot;https://www.naturaldocs.org/documentation#File:Engine/Resources/License/License.txt&quot; target=&quot;_blank&quot;&gt;license&lt;/a&gt; but now the web site has a &lt;a href=&quot;https://www.naturaldocs.org/license&quot;&gt;license page&lt;/a&gt; to make it even more clear.&lt;/p&gt;&lt;p&gt;Still, some people thought businesses would be spooked, so if you need to have it licensed under different terms or have some sort of open source indemnity clause contact me and we can work something out.&amp;nbsp; I've written all of Natural Docs' source code so I can relicense it as I see fit, with the exception of SQLite which is public domain.&lt;/p&gt;&lt;p&gt;It would have to come with a support contract, so if your business needs one of those I can oblige.&amp;nbsp; If you're working for a large company that uses Natural Docs this would be a good way to fund its development.&lt;/p&gt;&lt;p&gt;If you feel like sponsoring Natural Docs' development as an individual &lt;a href=&quot;https://github.com/sponsors/NaturalDocs&quot; target=&quot;_blank&quot;&gt;you can now do so through GitHub.&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;What's Next&lt;/h2&gt;&lt;p&gt;I'm going to start looking at full SystemVerilog support in earnest.&amp;nbsp; Natural Docs seems to have a bit of a following there and this release laid some of the internal groundwork it would need.&amp;nbsp; I'm not familiar with hardware design though so if you want to be part of a group I can bounce questions off of e-mail me.&amp;nbsp; A handful of people already have, so even if it was a while ago or you didn't get a response don't worry, I saved it.&lt;/p&gt;&lt;p&gt;Some other things I'm planning to do are adding a dark theme, probably with the ability to switch between them live, and updating the C# parser to version 10 of the language.&amp;nbsp; There will be more besides that but I don't want to over-promise in case something doesn't pan out.&amp;nbsp; If you want to keep up with what's coming down the pike make sure you're &lt;a href=&quot;https://www.naturaldocs.org/mailing_list&quot;&gt;subscribed to the Development Releases mailing list.&lt;/a&gt;&amp;nbsp; I try to make sure all the development releases are stable enough to use, but even if you don't it still lets you follow along with development.&lt;/p&gt;</content>
	</entry>

	<entry>
		<title type="text">Natural Docs 2.2 release candidate 1</title>
		<id>https://www.naturaldocs.org/news/2022-01-16/Natural_Docs_2.2_release_candidate_1</id>
		<author><name>Greg Valure</name></author>
		<updated>2022-01-16T00:00:00Z</updated>
		<link rel="alternate" type="html" href="https://www.naturaldocs.org/news/2022-01-16/Natural_Docs_2.2_release_candidate_1"/>
		<content type="html">&lt;p&gt;Wrapping up 2.2.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Fixed a bug related to resolving links with parameters, so something like &amp;lt;MyFunction(int, int)&amp;gt; will go to the correct definition.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Some finishing touches to the updated output style, which are pretty subtle.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That's it, plus some internal cleanup work.&amp;nbsp; Since everything seems pretty stable I'm deeming this a release candidate.&amp;nbsp; If nothing pops up in the next few weeks this will be 2.2.&lt;/p&gt;</content>
	</entry>

	<entry>
		<title type="text">Natural Docs 2.2 development release 4</title>
		<id>https://www.naturaldocs.org/news/2021-12-02/Natural_Docs_2.2_development_release_4</id>
		<author><name>Greg Valure</name></author>
		<updated>2021-12-02T00:00:00Z</updated>
		<link rel="alternate" type="html" href="https://www.naturaldocs.org/news/2021-12-02/Natural_Docs_2.2_development_release_4"/>
		<content type="html">&lt;p&gt;I really need to start wrapping up 2.2.&amp;nbsp; So what's new in development release 4?&lt;/p&gt;&lt;h2&gt;Simpler Options for Custom Home Pages&lt;/h2&gt;&lt;p&gt;In &lt;a href=&quot;https://www.naturaldocs.org/news/2020-12-09/Natural_Docs_2.2_development_release_1&quot;&gt;development release 1&lt;/a&gt; I added the ability to have your own HTML file to serve as the home page instead of the default one.&amp;nbsp; It required creating an &lt;a href=&quot;https://www.naturaldocs.org/reference/styles#advanced_styles&quot;&gt;advanced style&lt;/a&gt;, adding a HTML file to the style's folder, and adding &amp;quot;Home Page: [file name]&amp;quot; to Style.txt.&amp;nbsp; This approach lets you include images, CSS, and JavaScript if you want to since those are all supported in advanced styles.&amp;nbsp; However, just like there's a simple way to &lt;a href=&quot;https://www.naturaldocs.org/reference/styles#simple_styles&quot;&gt;create a style with a single CSS file&lt;/a&gt;, there are now simpler ways to make your own home page.&lt;/p&gt;&lt;p&gt;You can now add &amp;quot;Home Page: [file name]&amp;quot; to Project.txt as well.&amp;nbsp; One option is to point it to a documented source file which lets you create a home page in Natural Docs' syntax.&amp;nbsp; Just create a .txt file in your source tree, &lt;a href=&quot;https://www.naturaldocs.org/reference/comments#text_files&quot;&gt;add Natural Docs content&lt;/a&gt;, and point Project.txt to it.&lt;/p&gt;&lt;p&gt;Another option is to point it to a .html file and that will be used as the home page instead.&amp;nbsp; It doesn't have to appear in the source tree so you can put it in your project configuration folder if you want.&amp;nbsp; However, it's a standalone file so you'd have to embed any CSS it needs directly in it.&lt;/p&gt;&lt;p&gt;Like before, you can put these strings anywhere in the HTML file and Natural Docs will replace them with the project information.&amp;nbsp; This is useful if you wanted to add a build timestamp that updates automatically.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;%NaturalDocs_Title%&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;%NaturalDocs_Subtitle%&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;%NaturalDocs_Copyright%&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;%NaturalDocs_Timestamp%&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;As a reminder, custom home pages replace this part of the site:&lt;/p&gt;&lt;img src=&quot;https://www.naturaldocs.org/news/images/2.2/home_page_area.png&quot; width=&quot;899&quot; height=&quot;583&quot; style=&quot;width: 100%; height: auto; max-width: 899px&quot; /&gt;&lt;p&gt;The title, search box, and side menu will still be visible.&amp;nbsp; If you use a source file as the home page the left side menu will still show the starting menu instead of jumping to that page.&amp;nbsp; This feature isn't documented on the web site yet but will be once 2.2 is released.&lt;/p&gt;&lt;h2&gt;Character Encodings&lt;/h2&gt;&lt;p&gt;Natural Docs expects Unicode source files by default.&amp;nbsp; It will automatically detect and handle all forms of UTF-8, UTF-16, and UTF-32.&amp;nbsp; But what if you have something different?&lt;/p&gt;&lt;p&gt;Now you can manually specify character encodings for your source files.&amp;nbsp; You do this by adding Encoding lines to Project.txt:&lt;/p&gt;&lt;pre&gt;Encoding: Windows-1252&lt;/pre&gt;&lt;p&gt;This sets the default encoding for all files to Windows 1252 (Western European).&amp;nbsp; If it appears in the project information section it will be the default for all source folders.&amp;nbsp; If you put it under a Source Folder heading it will be the default for just that folder.&lt;/p&gt;&lt;pre&gt;Encoding: Macintosh *.mac&lt;/pre&gt;&lt;p&gt;This sets the encoding for all .mac files to Macintosh (Roman/Western European).&amp;nbsp; Like before, if it appears in the project information it will apply to all source folders, but if it appears under a Source Folder heading it will only apply in that folder.&lt;/p&gt;&lt;pre&gt;Encoding: iso-8859-1 C:\My Project\Source\Module1&lt;/pre&gt;&lt;p&gt;This sets the encoding for all files in the Module1 folder to ISO 8859-1.&amp;nbsp; This rule takes precedence over any rules for parent folders, so all .mac files appearing in Module1 are also ISO 8859-1.&amp;nbsp; You can only put Encoding lines that specify folders like this under Source Folder headings.&lt;/p&gt;&lt;pre&gt;Encoding: shift_jis C:\My Project\Source\Module1\*.txt&lt;/pre&gt;&lt;p&gt;This sets the encoding for all .txt files in the Module1 folder to Shift JIS.&amp;nbsp; If you needed to reapply the .mac rule for this folder you could also include &amp;quot;Encoding: Macintosh C:\My Project\Source\Module1\*.mac&amp;quot;.&amp;nbsp; Since these rules specify folders they can only appear under Source Folder headings.&lt;/p&gt;&lt;p&gt;All operating systems may not support the same encodings.&amp;nbsp; You can see which ones are available on yours by running Natural Docs with the --list-encodings command line option.&amp;nbsp; You can use either the name or the code page number (the second and third columns) in Project.txt but not the description (the first column.)&lt;/p&gt;&lt;h2&gt;XML Links&lt;/h2&gt;&lt;p&gt;Natural Docs now supports &amp;lt;a href=&amp;quot;&amp;quot;&amp;gt; and &amp;lt;see href=&amp;quot;&amp;quot;&amp;gt; links in XML comments.&amp;nbsp; It will also detect bare URLs and e-mail addresses and convert them to links as well.&lt;/p&gt;&lt;h2&gt;Tweaks and Fixes&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Improved the SQL parser to support more modifiers and documenting type members.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Fixed a bug that could prevent image links from working when they are relative to image folders which are contained in source folders.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Fixed a bug that could cause an infinite loop on inaccessible files (though not on files in inaccessible folders.)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Fixed bugs that could happen when class attributes can be mistaken for parameters.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Internals&lt;/h2&gt;&lt;p&gt;This won't mean much to you right now but it lays the groundwork for the future.&amp;nbsp; How hierarchies are handled internally has been refactored, which means it will be much easier to add new ones going forward.&amp;nbsp; Instead of hard-coded logic for classes and databases there's a more generic system that can handle those plus other future ones.&amp;nbsp; They aren't configurable through text files like the rest of Natural Docs, and that may or may not change in the future, but it's the last piece that needed to be put in place to start on full SystemVerilog support.&lt;/p&gt;</content>
	</entry>

	<entry>
		<title type="text">Natural Docs 2.1.1 released</title>
		<id>https://www.naturaldocs.org/news/2021-04-13/Natural_Docs_2.1.1_released</id>
		<author><name>Greg Valure</name></author>
		<updated>2021-04-13T04:00:01Z</updated>
		<link rel="alternate" type="html" href="https://www.naturaldocs.org/news/2021-04-13/Natural_Docs_2.1.1_released"/>
		<content type="html">&lt;p&gt;Just uplifting some bug fixes from the development releases into the stable releases so you don't have to wait for 2.2.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;SQL:&lt;/b&gt; Fixed a crash, something that could cause prototypes to not show up, and something that could cause prototypes to include too much of the code.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Images:&lt;/b&gt; Fixed a crash when working with embedded images.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That's it.&amp;nbsp; If you don't use either of those you're safe skipping this one.&lt;/p&gt;</content>
	</entry>

	<entry>
		<title type="text">Natural Docs 2.2 development release 3</title>
		<id>https://www.naturaldocs.org/news/2021-04-13/Natural_Docs_2.2_development_release_3</id>
		<author><name>Greg Valure</name></author>
		<updated>2021-04-13T00:00:00Z</updated>
		<link rel="alternate" type="html" href="https://www.naturaldocs.org/news/2021-04-13/Natural_Docs_2.2_development_release_3"/>
		<content type="html">&lt;p&gt;New development release.&amp;nbsp; As I said last time I'm laying some groundwork for the future, so the new features probably won't be very exciting but they're important for Natural Docs going forward.&lt;/p&gt;&lt;h2&gt;Language-Specific Keywords&lt;/h2&gt;&lt;p&gt;So here's the issue: &amp;quot;Record&amp;quot; means one thing in C# and another thing in SQL.&amp;nbsp; &amp;quot;Module&amp;quot; means one thing in SystemVerilog and another thing in Perl.&amp;nbsp; So while there is still only one set of &lt;a href=&quot;https://www.naturaldocs.org/reference/comments.txt#keywords_vs._comment_types&quot;&gt;comment types&lt;/a&gt; in &lt;a href=&quot;https://www.naturaldocs.org/reference/comments.txt&quot;&gt;Comments.txt&lt;/a&gt;, you can now add keywords for them that only apply to certain languages.&amp;nbsp; This probably doesn't mean much to you because if you're customizing Natural Docs for the languages you use it doesn't matter if you step on the ones you don't.&amp;nbsp; However, it's good for Natural Docs itself because now these distinctions can be supported out of the box without any customizations.&lt;/p&gt;&lt;p&gt;Consequently, &amp;quot;Record&amp;quot; now only serves as a keyword for &amp;quot;Class&amp;quot; in C# to prevent unexpected behavior in other languages.&lt;/p&gt;&lt;p&gt;However, this also means all the &lt;a href=&quot;https://www.naturaldocs.org/reference/keywords#database_keywords&quot;&gt;database keywords&lt;/a&gt; can now be used without a prefix in SQL files.&amp;nbsp; You can just use &amp;quot;Table&amp;quot; or &amp;quot;Field&amp;quot; instead of &amp;quot;Database Table&amp;quot; or &amp;quot;DB Field&amp;quot;.&lt;/p&gt;&lt;h2&gt;Language Modifiers&lt;/h2&gt;&lt;p&gt;This is rather niche, but if you really want to you can use a language name as a modifier before a keyword.&amp;nbsp; So you could document a JavaScript class from a C# file just by writing &amp;quot;JavaScript Class: MyClass&amp;quot;.&amp;nbsp; This is probably most useful when you're documenting things from a text file.&lt;/p&gt;&lt;h2&gt;Bug Fixes and Tweaks&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Fixed a bug that could prevent SQL prototypes from appearing.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Fixed a crash that could occur when embedding images.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Errors on the command line or in the configuration files no longer cause a full rebuild the next time Natural Docs is run.&amp;nbsp; It will still do a full rebuild after a crash though, or if it detects changes to the configuration that require it.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;I finally tested some old versions of Mono to see what the minimum version Natural Docs needs is.&amp;nbsp; Apparently you need at least Mono 4.0 for it to run without crashing.&amp;nbsp; That was released in 2015, but some Linux distributions have even older versions.&amp;nbsp; Natural Docs will now tell you if you're on a version that's too old and it crashes.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;</content>
	</entry>

	<entry>
		<title type="text">Natural Docs 2.2 development release 2</title>
		<id>https://www.naturaldocs.org/news/2021-01-10/Natural_Docs_2.2_development_release_2</id>
		<author><name>Greg Valure</name></author>
		<updated>2021-01-10T00:00:00Z</updated>
		<link rel="alternate" type="html" href="https://www.naturaldocs.org/news/2021-01-10/Natural_Docs_2.2_development_release_2"/>
		<content type="html">&lt;p&gt;Updates for C# and SQL users.&amp;nbsp; Everyone else is fine skipping this one.&lt;/p&gt;&lt;p&gt;The C# parser had fallen out of date, so I went through the language specifications and updated it to support all the changes through C# 9.0.&amp;nbsp; That means Natural Docs can properly handle:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Records, including automatically generating properties for parameterized ones like &amp;quot;record MyRecord (int X, int Y);&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Tuples&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Init setters in properties&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Expression-bodied constructors, finalizers, and conversion operators.&amp;nbsp; It was already supported for functions, properties, and other operators.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Function pointers&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Newer keywords and modifiers&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Syntax highlighting for interpolated strings and constants with digit separators&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Plus other smaller things.&amp;nbsp; Most of these features already worked fine if they appeared in a function body but might have thrown things off if they appeared in a prototype.&amp;nbsp; Now they'll work everywhere.&lt;/p&gt;&lt;p&gt;I fixed a couple of bugs in the SQL parser as well.&amp;nbsp; Next up are a couple of small features which aren't very exciting but are needed to lay the groundwork for SystemVerilog.&lt;/p&gt;</content>
	</entry>

</feed>
