<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style='font-size: 10pt; font-family: Arial,Helvetica,sans-serif'>
<p>Hello,</p>
<p>PmWiki version 2.3.1 was published today, and is available at:</p>
<ul>
<li><a href="https://www.pmwiki.org/pub/pmwiki/pmwiki-2.3.1.tgz">https://www.pmwiki.org/pub/pmwiki/pmwiki-2.3.1.tgz</a></li>
<li><a href="https://www.pmwiki.org/pub/pmwiki/pmwiki-2.3.1.zip">https://www.pmwiki.org/pub/pmwiki/pmwiki-2.3.1.zip</a></li>
<li>svn://www.pmwiki.org/pmwiki/tags/latest</li>
</ul>
<p><br /></p>
<p>January 2022 is the <strong>20th year anniversary</strong> of the release of PmWiki version 0.1, and 13 years since I (Petko) became core developer. This merited additional work and effort with hopefully interesting and useful new production.</p>
<p><br /></p>
<p class="vspace"><strong>PHP 5.3 - 8.1 compatibility</strong></p>
<ul>
<li>PmWiki 2.3.1 includes updates for PHP 8.0 and 8.1.</li>
<li>Consequently, it requires PHP version 5.3 (released 2009) or more recent.</li>
</ul>
<p><br /></p>
<p class="vspace"><strong>PmSyntax</strong>. A new function PmSyntax was added to the core, and enabled on pmwiki.org.</p>
<ul>
<li>It highlights PmWiki syntax in the documentation, and possibly in the basic edit form.</li>
<li>It only highlights PmWiki markup, and is independent from Highlight.js. See <a class="wikilink" href="https://www.pmwiki.org/wiki/Cookbook/PmSyntax">Cookbook:PmSyntax</a> and <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#EnablePmSyntax"><code class="varlink">$EnablePmSyntax</code></a>.</li>
<li>It should highlight most core language features and those of many recipes, see <a class="urllink" href="https://www.pmwiki.org/wiki/Test/PmSyntax" rel="nofollow">this mashup of various markups</a>.</li>
<li>Developers can add custom rules in the <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#CustomSyntax"><code class="varlink">$CustomSyntax</code></a> array, see <a class="wikilink" href="https://www.pmwiki.org/wiki/Cookbook/CustomSyntax">Cookbook:CustomSyntax</a>.</li>
<li>The <code class="escaped">(:markup:)</code> directive can now have <code>class=norender</code> to only show the source code without processing it. This may be useful, together with PmSyntax, in 2 cases: writing/discussing markup code without actually running it, or working on PageList Templates where you want to see and edit them highlighted.</li>
</ul>
<p><br /></p>
<p class="vspace"><strong>Improvements to the edit form</strong></p>
<ul>
<li>PmSyntax (above) can be enabled to highlight the PmWiki markup the edit form, and should work in recent standards-compliant browsers.</li>
<li>The variable <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/EditVariables#EnableNotSavedWarning"><code class="varlink">$EnableNotSavedWarning</code></a> is now enabled by default. Add to config.php <code><a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/EditVariables#EnableNotSavedWarning"><code class="varlink">$EnableNotSavedWarning</code></a> = 0;</code> to disable it.</li>
<li>A new variable <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/EditVariables#EnableIncludedPages"><code class="varlink">$EnableIncludedPages</code></a> allows listing of other pages included from the currently edited page, with links to see or edit them. When the variable is enabled, the list of pages appears in the edit form, after the text area, in a collapsed <details> element. The list includes pages from which text, text variables, or templates are included from the edited page. This is enabled on pmwiki.org if you wish to preview it.</li>
<li>The <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/EditVariables#EnableEditAutoText"><code class="varlink">$EnableEditAutoText</code></a> function will now feel more like other text editors by removing the automatically inserted bullet when Enter is pressed twice.</li>
</ul>
<p><br /></p>
<p class="vspace"><strong>Dates and times, monitoring, review</strong></p>
<ul>
<li>The <code class="escaped">{(ftime)}</code> Markup expression now accepts a new format '<code class="escaped">%o</code>' for the ordinal suffix of the date.</li>
<li>The <a class="wikilink" href="https://www.pmwiki.org/wiki/PmWiki/Notify">Notify</a> feature now accepts a <code>tz=</code> timezone specifier for individual subscribers. See <a class="wikilink" href="https://www.pmwiki.org/wiki/PmWiki/Notify#tz">Notify#tz</a>.</li>
<li>A function based on <a class="wikilink" href="https://www.pmwiki.org/wiki/Cookbook/LocalTimes">Cookbook:LocalTimes</a> was added to the core. See <a class="wikilink" href="https://www.pmwiki.org/wiki/Cookbook/LocalTimes">the recipe page</a> for the differences. You can continue using the recipe, or disable it and enable the core function.</li>
<li>New core variables <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#EnableLocalTimes"><code class="varlink">$EnableLocalTimes</code></a>, <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#CurrentLocalTime"><code class="varlink">$CurrentLocalTime</code></a>.</li>
<li>New markup <span class="pmhlt"><code class="escaped pmhlt"><span class="pmmx"><span class="pmtag">@</span><span class="pmstring">2022-01-09</span>T<span class="pmvar">08:35:00</span><span class="pmtag">Z</span></span></code></span> output as a <time> element, formatted via <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/BasicVariables#TimeFmt"><code class="varlink">$TimeFmt</code></a>; localized if <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#EnableLocalTimes"><code class="varlink">$EnableLocalTimes</code></a>.</li>
<li>Added a variable <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#EnableRecentUploads"><code class="varlink">$EnableRecentUploads</code></a> which makes it easy to enable the Recent Uploads feature on AllRecentChanges. This is a basic format that may be good enough for many wikis. For more options, see <a class="wikilink" href="https://www.pmwiki.org/wiki/Cookbook/RecentUploadsLog">Cookbook:RecentUploadsLog</a>.</li>
<li>The default <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#RecentChangesFmt"><code class="varlink">$RecentChangesFmt</code></a> now use the variable <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#CurrentLocalTime"><code class="varlink">$CurrentLocalTime</code></a> instead of <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#CurrentTime"><code class="varlink">$CurrentTime</code></a>. In the wiki source text it saves the timestamps in a portable time format in GMT, which is then shown formatted per <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/BasicVariables#TimeFmt"><code class="varlink">$TimeFmt</code></a> (wiki timezone). It looks just like <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#CurrentTime"><code class="varlink">$CurrentTime</code></a> did previously, but can be converted to the visitor's time zone if LocalTimes is enabled. If you have custom <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#RecentChangesFmt"><code class="varlink">$RecentChangesFmt</code></a> entries that use <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#CurrentTime"><code class="varlink">$CurrentTime</code></a>, nothing will change for you, but you may want to update these with <a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#CurrentLocalTime"><code class="varlink">$CurrentLocalTime</code></a> if you want to benefit from localization.</li>
<li>The "page history" page now has CSS classes for the delay between edits: diffday, diffweek, diffmonth, diffyear. These allow styling of vertical spacing between individual edits in page histories. See <a class="wikilink" href="https://www.pmwiki.org/wiki/Cookbook/DiffDelay">Cookbook:DiffDelay</a> for an example.</li>
<li>The page history can now have a "hidden" edit type, in addition to "minor". This is intended to be used by recipes in order to hide, rather than delete, some edits from the page history. A couple of new recipes using this feature will be added in the next few days.</li>
</ul>
<p><br /></p>
<p class="vspace"><strong>PageLists, categories, backlinks</strong></p>
<ul>
<li><a class="wikilink" href="https://www.pmwiki.org/wiki/PmWiki/PageLists">PageLists</a> now accept a new argument <code>category=Name</code> which lists only pages declared in the category with the markup <code class="escaped">[[!Name]]</code>, and does not include pages simply linking to <code class="escaped">[[Category/Name]]</code> (unless they also contain <code class="escaped">[[!Name]]</code>).
<ul>
<li>The differentiation between links to !Name and Category.Name requires the pages containing category links to be re-indexed; see <a class="wikilink" href="https://www.pmwiki.org/wiki/Cookbook/ReindexCategories">Cookbook:ReindexCategories</a> which can automate this.</li>
</ul>
</li>
<li>Also in PageLists, the arguments <code>link=</code> and <code>category=</code> now accept multiple and negative specifiers, and wildcards. See <a class="wikilink" href="https://www.pmwiki.org/wiki/PmWiki/PageLists#wildcards">PageLists#wildcards</a>. If you previously used the recipe <a class="wikilink" href="https://www.pmwiki.org/wiki/Cookbook/PageListMultiTargets">Cookbook:PageListMultiTargets</a>, please disable it when you upgrade to 2.3.0.</li>
<li>Category links can now have a different text, like <code class="escaped">[[!Name|Text]]</code>, and the markup generally behaves like other links, see <a class="wikilink" href="https://www.pmwiki.org/wiki/PITS/01095">PITS:01095</a>.</li>
</ul>
<p><br /></p>
<p class="vspace"><strong>Styles</strong> (core skin PmWiki-responsive)</p>
<ul>
<li>Collapsible sections details+summary will now change the cursor to the "pointer" style over the clickable element, and the color will change to "navy".</li>
<li>The core table of contents function (<a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/LayoutVariables#PmTOC"><code class="varlink">$PmTOC</code></a>) has had its styles updated, in order to properly indent long sub-headings.</li>
</ul>
<p><br /></p>
<p class="vspace"><strong>Core helper functions</strong></p>
<ul>
<li>A new helper function PSFT() can now be used as an <em>almost</em> drop-in replacement for strftime() and gmstrftime() which became deprecated in PHP 8.1. Please review the documentation at <a class="wikilink" href="https://www.pmwiki.org/wiki/PmWiki/Functions#PSFT">Functions#PSFT</a>. If you have local configurations or recipes using strftime() you can change for PSFT() now.</li>
<li>A helper function DownloadUrl(<a class="varlink" href="https://www.pmwiki.org/wiki/PmWiki/BasicVariables#pagename"><code class="varlink">$pagename</code></a>, $path) was added, see <a class="wikilink" href="https://www.pmwiki.org/wiki/PmWiki/Functions#DownloadUrl">Functions#DownloadUrl</a>. It can simplify the handling of attached files by recipes.</li>
</ul>
<p><br /></p>
<p class="vspace">Last but not least, <strong>the documentation</strong> in English has been updated with the latest development (and in German by MFWolff).</p>
<p class="vspace"> </p>
<p class="vspace">See also <a class="wikilink" href="https://www.pmwiki.org/wiki/PmWiki/Upgrades#v22v23">Upgrading from version 2.2.145 to 2.3.0</a>.</p>
<p class="vspace"> </p>
<p class="vspace">Note: <em>Our release script wasn't configured for a change from 2.2.x to 2.3.x and unexpectedly zeroed the $VersionNum variable which broke some settings in 2.3.0. This quick 2.3.1 release fixes it.</em></p>
<p class="vspace"> </p>
<p class="vspace">As always, if you have any questions or difficulties, please let us know.</p>
<p class="vspace">Petko</p>
<p class="vspace"> </p>
<p></p>
</body></html>